← Deepstair GDD📱 Chương 11 · UI / UX

11 — UI / UX

Kế thừa 00 (INV-01, INV-07, INV-08, INV-10, §7 FTUE, §8 mở khóa), 01 (§5 phòng thủ, §6.8 Combo, §7 Phong Độ, §8 Bộc Phá, §11.3 báo hiệu, §14 feel), 06 (§3 độ hiếm, §5 thao tác, §9 thẻ). Luật bắt buộc: .claude/rules/ui-design.md → .claude/docs/new-ui-guide.md §0c, §3b–§3g, §5; .claude/docs/game-polish-rules.md §6, §9; hub .claude/docs/ArtStyle.md §2, §8 (kit, token, Tiny5, §8f override). Bảng số sinh từ GDD/Tools/data/art.py (block art_*). Mỗi màn = 1 feature trên FeatureTemplate / PackageTemplate (Popup hoặc FullScreen), dựng bằng /new-ui + mockup pipeline; số ở đây là spec-sheet nguồn (§0c new-ui-guide).

12 mục 17 bảng ~28 phút đọc Nguồn: 11-UI-UX.md DERIVED công thức/mô phỏng · ASSUMED khởi điểm · BENCHMARK thị trường

1Theme — "Đèn Hồn trong Vực"

1.1 Nguyên tắc

# Nguyên tắc Cụ thể
T1 UI là đá và sắt của hầm ngục, ánh sáng là đèn hồn Panel đá tím-xám tối (ds-stone-*), viền sáng trên-trái; điểm nhấn duy nhất là ánh lửa đèn (ds-lantern) và màu độ hiếm
T2 Một pixel UI Mọi sprite UI vẽ ở native, hiển thị ×4 (1 art px = 4 đơn vị canvas, PPU 25); không ×8, không scale lẻ (hub §8c)
T3 Kit trước, vẽ mới sau Khung/nút/thanh/badge lấy từ Assets/ArtAsset/UIPixel (hub §8a); sprite mới thêm vào build_ui_pixel_kit.py (12 §7), không vẽ khung riêng từng màn
T4 Khung chiến đấu là nhân vật chính Trong run, UI chiếm dải trên 176 + panel dưới 496 (≈ 35% màn 9:16); phần còn lại là thế giới
T5 Không chồng phô Không gradient mượt, không glow mềm (trừ px_glow free-scale), không chữ bake trong ảnh (trừ chữ chiến đấu sprite §3.4 có bản VI + EN)
T6 Đúng /new-ui Cỡ chữ, khung template, layout group, SafeArea, close flags theo new-ui-guide §5 Hard checklist

1.2 Màu (token)

Token gốc ở hub §2 (ink, scene-*, floor*, mortar, hot-white, rarity-1…7) và §8b (chrome-*, overlay-dim). Deepstair đề xuất thêm (coordinator đưa vào hub §2/§8b — rule art-style: token mới cần lý do + màn dùng):

Token (đề xuất) Hex Nguồn Dùng cho
ds-stone-face #2b2639 hub floor mặt panel HUD/meta (đá tối)
ds-stone-rim #4a4263 hub floor-edge viền sáng panel
ds-stone-deep #1a1724 hub mortar khe/ô chìm, nền thanh
ds-lantern #ffae35 PAL.fire[5] ánh đèn hồn: nhấn, glow CTA, Bộc Phá
ds-ember #f2701f PAL.fire[4] Than Hồng, cảnh báo nhẹ
ds-hp #d42a30 PAL.blood[4] thanh HP
ds-hp-lag #ff9a8a PAL.blood[6] vệt trễ HP (chỉ khi giảm)
ds-shield #d0d8e6 PAL.metal[6] khiên phủ HP
ds-guard #58b4ec PAL.ice[4] Khí Thủ
ds-posture #ffe066 PAL.gold[5] Thế địch
ds-od #ffd23c PAL.volt[4] Bộc Phá
ds-tele-heavy #ff2040 01 §11.3 báo hiệu đòn nặng (không thuộc PAL)
ds-tele-unblock #a0102a 01 §11.3 báo hiệu đâm/quét/túm
ds-dmg #ffffff hub hot-white số sát thương thường
ds-dmg-crit #ffa040 01 §14.3 số chí mạng
ds-dmg-counter #ffe066 PAL.gold[5] số Phản Đòn
ds-dmg-taken #ff5a50 PAL.blood[5] anh hùng nhận sát thương
ds-heal #7ee88a PAL.heal[5] số hồi máu
ds-rank-d #7d7d8c PAL.stone[5] Phong Độ D
ds-rank-c #b89f78 PAL.dust[5] Phong Độ C
ds-rank-b #78ccf4 PAL.water[5] Phong Độ B
ds-rank-a #c684ff PAL.arcane[5] Phong Độ A
ds-rank-s #ffe066 PAL.gold[5] Phong Độ S
ds-rank-ss #ffae35 PAL.fire[5] Phong Độ SS
ds-rank-sss #ff5a50 PAL.blood[5] Phong Độ SSS (+ nháy trắng)
echo-c #a4a4b2 PAL.stone[6] Hồi Âm Thường = hub rarity-1
echo-r #36a2e0 PAL.water[4] Hồi Âm/anh hùng Hiếm = rarity-3
echo-e #9a48ec PAL.arcane[4] Hồi Âm/anh hùng Sử Thi = rarity-4
echo-l #f0b424 PAL.gold[4] Hồi Âm/anh hùng Huyền Thoại = rarity-5
echo-evo #f2701f PAL.fire[4] Tiến Hóa (xen pixel với echo-l)
echo-pact #a01824 PAL.blood[3] Khế Ước
  • Độ hiếm Hồi Âm và anh hùng dùng cùng token: C/R/E/L = rarity-1/3/4/5 (hex đúng PAL). Bảng hex trong 06 §3 (#8b8798, #3f8fd8, #a24fe0, #f0b030, #b0182c) lệch PAL → thay bằng token trên khi đồng bộ.
  • Di Vật 6 độ hiếm = rarity-1…6 (khung RaritiesCurrency/1–6.png có sẵn).
  • Mọi thông tin màu đi kèm hình (huy hiệu độ hiếm 06 §3, glyph báo hiệu §3.3) — §10.

1.3 Chữ

Font: Tiny5 (Assets/Fonts/Tiny5-Regular.ttf, SIL OFL 1.1 — dùng thương mại được, kèm Tiny5-OFL.txt trong Credits).

Kiểm cmap bằng fontTools (2026-11-01, phiên bản 2.007, 1,940 mã ký tự, unitsPerEm 1024, lưới 128 = 1 font px, em 8 px, chữ hoa 5 px):

  • Tiếng Việt: đủ 186/186 ký tự (mọi nguyên âm thường + hoa với 5 dấu thanh, ă â ê ô ơ ư đ) + 8 dấu kết hợp U+0300/0301/0303/0309/0323/0302/0306/031B. Không cần font dự phòng cho VI/EN.
  • Thiếu ★ và ▣ → dùng sprite (px_icon_star, px_icon_build mới).
  • Dấu chồng chữ hoa (vd Ấ) cao tới 11 font px trên baseline, ascent 9, descent 2 → chữ nhiều dòng tiếng Việt đặt lineSpacing 1.25 (khoảng baseline 13.75 font px) để dấu không chạm dòng trên.
  • Đo bề rộng thật: ~18 đơn vị canvas/ký tự ở cỡ 40 (chữ thường VI); "Trăng Khuyết Rút Đao" = 370 @40; dòng ngắn 40 ký tự ≈ 624 @32 / 780 @40.
  • Ngôn ngữ thêm sau (zh/ja/ko/th) cần font dự phòng (như CjkFontFallback của StickBattle) — ngoài phạm vi ra mắt.

Cỡ chữ: luật chung 30–72 (new-ui §0c) + override hub §8f: chỉ 32 · 40 · 48 · 56 · 64 · 72 (bội 8 → font px nguyên); 16/24 chỉ cho tag rất nhỏ trong kit, không dùng cho chữ đọc.

Vai trò Cỡ
Chú thích, dòng phụ, chữ trong thanh 32
Thân bài, mô tả, dòng ngắn thẻ 32–40
Nhãn, nút, giá trị 40
Tiêu đề mục (pill ButtonTitleTemplate) 48
Tiêu đề màn, số lớn, tên Boss 56–72
Chữ chiến đấu, số sát thương, chữ hạng sprite (§3.4), không phải Tiny5

1.4 Thành phần

Thành phần Sprite kit Ghi chú
Panel / popup px_popup + px_popup_top + px_popup_bottom, tint ds-stone-face; viền px_line_top tint ds-stone-rim thay chrome-popup nâu của template ở màn Deepstair
Khung trong / thẻ px_frame tint ds-stone-deep, px_card_echo (mới)
CTA chính px_btn_yellow (ramp gold, ánh đèn) 1 CTA/màn; quảng cáo cũng vàng + ▶ (hub §8f)
Nút phụ / hủy / khóa px_btn_blue / px_btn_dark / px_btn_gray + lý do cặp nút: phụ trái, chính phải
Thanh px_bar_bg + px_bar_hp, px_bar_guard, px_bar_posture, px_bar_od (mới)
Badge GameNotification (chấm đỏ chuẩn) không badge tự chế
Ô vật phẩm RaritiesCurrency/1–7, px_item_slot, px_item_select
Tooltip px_tooltip, px_bubble
Pictogram px_icon_* 16×16 ×4 34 pictogram mới ở 12 §7

1.5 Chuyển động

Bốn lớp (polish §6.1) với cảm giác hub §8e — bước, gắt, có hit-stop: vào = nền mờ dần 0.15 s → khung 0.9→1 OutBack (bước theo 2 art px) → con stagger 0.04 s, tổng ≤ 0.6 s; idle chỉ ở tiêu điểm (lửa đèn thở 2 s, tia px_rays quay chậm); phản hồi = giữ–lóe–bay (nhận thưởng), thẻ chọn nảy lên + nháy trắng 1 khung, thẻ khác tối 50%, giữ 0.5 s; ra ≤ 0.2 s. DOTween SetUpdate(true) + SetLink, kill ở OnDisable; mọi vị trí tween làm tròn bội 4 đơn vị canvas. Full-screen fade, Popup pop (MainUI rỗng).

2Bố cục & đa tỷ lệ

2.1 Canvas

  • CanvasScaler Scale With Screen Size 1080×1920, Expand, ref PPU 100; sprite UI PPU 25 → ×4. Vị trí/kích thước/padding mới là bội 4 (hub §8c), lưới thiết kế 8.
  • Thế giới (02 §2.2) render toàn màn bên dưới UI; dải HUD trên và panel dưới là sprite đá đặc che thế giới.
  • FullScreen có Crystal.SafeArea; HUD trận là canvas riêng có SafeArea; Popup không có SafeArea → neo giữa, cao ≤ 1,920 − lề.

2.2 Bố cục dọc

Menu (1080×1920)                       Trong run (1080×1920)
┌──────────────────────────┐ 0         ┌──────────────────────────┐ 0
│ Top: ResourceView (Vàng · │           │ Dải trên: II · B23 · Than │
│ KC · Tro Hồn)             │ 160       │ Hồng · x2 · wave          │ 176
├──────────────────────────┤           ├──────────────────────────┤
│ Mid (stretch, nhận chiều  │           │ KHUNG CHIẾN ĐẤU (thế giới)│
│ cao dư 19.5:9 – 21:9)     │           │ sàn ở 66% khung (y 1000)  │
│                          │           │ nhận chiều cao dư         │
│                          │           │                          │
├──────────────────────────┤ 1771      ├──────────────────────────┤ 1424
│ Bot: TabBottomTemplate    │           │ Panel dưới 496: HP · Khí  │
│ (5 tab)                   │           │ Thủ · Cổng · Kỹ Năng ·    │
└──────────────────────────┘ 1920      │ Build · AUTO · Bộc Phá    │ 1920
                                        └──────────────────────────┘

Vùng tương tác trong run (INV-07): y ≥ 1,056 (45% dưới); ngoại lệ duy nhất Tạm dừng + Tốc độ ở dải trên.

2.3 Đa tỷ lệ (new-ui §3f)

Thiết bị Màn hình Chế độ k Thế giới thấy (art px) Canvas UI Sàn (canvas y) Trên sàn (art px)
9:16 chuẩn 1080×1920 nguyên 4 270×480 1080×1920 1000 206
19.5:9 Android 1080×2340 nguyên 4 270×585 1080×2340 1277 275
20:9 Android 1080×2400 nguyên 4 270×600 1080×2400 1316 285
21:9 1080×2520 nguyên 4 270×630 1080×2520 1396 305
iPhone 13/14 1170×2532 nguyên 4 292×633 1080×2337 1275 298
iPhone Pro Max 1290×2796 nguyên 4 322×699 1080×2341 1278 329
Android 720p 720×1600 lẻ (point) 2.67 270×600 1080×2400 1316 285
iPad 3:4 1536×2048 nguyên 4 384×512 1440×1920 1000 220
iPad Air 11" 1668×2388 lẻ (point) 4.97 335×480 1341×1920 1000 206
iPad Pro 12.9" 2048×2732 lẻ (point) 5.69 360×480 1439×1920 1000 206
Loại màn Ai nhận phần dư cao Ai nhận phần dư rộng (iPad 1440)
HUD trận khung chiến đấu (thấy thêm vòm trên trần) thế giới rộng tới 384 art px; panel dưới giữ 1080 ở giữa, 2 bên là đá tiền cảnh
EchoPick / Landing (bottom sheet) cảnh đi xuống phía trên sheet sheet giữ 1000 ở giữa
Home (diorama) trần hang + xích treo trên; CTA neo đáy diorama mở rộng hai bên (vách hang), nội dung chính trong 1080 giữa
Menu FullScreen Mid (danh sách cuộn) lưới giữ cột cố định, căn giữa
Popup không (neo giữa) không

Nền full-bleed phủ tới 1440×2520 (FullScreen/Background stretch); chi tiết quan trọng trong 1080×1920 giữa. Chụp kiểm 1080×1920, 1080×2520, 1536×2048 (+1125×2436 SafeArea sim).

3HUD trong run

3.1 Wireframe

┌────────────────────────────────────────────┐ 0
│[II]        B23 · HẦM MỘ        🔥145  [x2] │ 24–152  (II, x2: 128×128)
│            ●●○ wave · 9 địch                │ 104–144
├────────────────────────────────────────────┤ 176
│ GORRAK KẺ GÁC CỔNG                  ◆◆     │ 184  (chỉ tầng Thủ Vệ/Boss)
│ █████████████████████░░░░░ (HP)            │ 240
│ ▬▬▬▬▬▬▬▬▬▬▬░░░░░░ (Thế)                     │ 288
│                                    87      │ 320  combo (digit XL)
│                                  GREAT!     │
│                                    [ A ]    │ 488  hạng Phong Độ
│        !            GẠT!                    │      glyph & chữ neo thế giới
│      (địch)       (Kaito)        (địch)     │
│ ═════════════════ sàn y 1000 ═════════════ │
│                                              │
├────────────────────────────────────────────┤ 1424
│ ♥ ███████████████░░░ 4,210/6,100   ☾☾☾     │ 1448–1504  HP + Cổng
│   ▬▬▬▬▬▬▬▬▬▬▬▬ (Khí Thủ)                     │ 1512
│ [A ◔3] [B ◔9]  [▣×12] [TỰ ĐỘNG]   ( 87% )  │ 1576–1800  Bộc Phá Ø224
│                                   BỘC PHÁ   │
└────────────────────────────────────────────┘ 1920

3.2 Spec-sheet (1080×1920)

Phần tử Vùng Neo Kích thước Vị trí x, y Font px Sprite / token Tương tác
TopStrip Top stretch-top 1080×176 0, 0 — px_hud_strip · ds-stone-face —
BtnPause Top top-left 128×128 24, 24 — px_btn_dark + px_icon_pause có
FloorLabel Top top-center 560×64 260, 24 48 trắng; tên Địa Tầng ds-stone-rim —
WaveRow Top top-center 560×40 260, 104 32 pip 6×6 art + số địch —
EmberChip Top top-right 176×64 744, 40 40 px_icon_ember · ds-ember —
BtnSpeed Top top-right 128×128 928, 24 40 px_btn_dark + x1/x1.5/x2/x3 có
BossBar Top stretch-top 1032×120 24, 184 40 px_bar_hp_boss + px_bar_posture —
ComboCounter Combat top-right 312×160 744, 320 sprite XL digit XL + nhãn mốc —
StyleRank Combat top-right 192×160 840, 488 sprite chữ hạng 40×32 art —
BottomPanel Bot stretch-bottom 1080×496 0, 1424 — px_hud_panel · ds-stone-face —
HpIcon Bot bottom-left 64×64 80, 1448 — px_icon_heart —
HpBar Bot bottom-left 640×48 152, 1456 32 (số trong thanh) px_bar_hp · ds-hp / ds-hp-lag / ds-shield —
GuardBar Bot bottom-left 640×24 152, 1512 — px_bar_guard · ds-guard —
HeroGauge Bot bottom-right 240×96 816, 1440 32 widget riêng anh hùng (12 §6) —
SkillA Bot bottom-left 144×144 40, 1592 32 (giây) icon kỹ năng + vành hồi 8 bước —
SkillB Bot bottom-left 144×144 208, 1592 32 như SkillA —
BuildChip Bot bottom-center 208×112 376, 1608 40 px_btn_dark + px_icon_build ×N có
AutoToggle Bot bottom-center 176×128 600, 1600 32 px_btn_gray / px_btn_green có
OverdriveBtn Bot bottom-right 224×224 808, 1576 40 (%) px_btn_od + vành 8 đoạn ds-od có

Panel dưới chứa ≤ 7 phần tử thường trực; Kỹ Năng A/B chỉ hiển thị (tự dùng — INV-01), không bấm được. Nút DEV/cheat chỉ ở bản dev (ButtonCheatMenu), ẩn hoàn toàn khi tắt cheat.

3.3 Lớp phủ khung chiến đấu

Phần tử Neo Hình thức Quy tắc
Bộ đếm Combo canvas (744, 320) digit sprite XL + nhãn mốc sprite (GOOD/GREAT/SAVAGE/BRUTAL/LEGEND, EN cả hai ngôn ngữ — kiểu chữ tượng thanh) nảy 1 art px mỗi lần tăng; màu theo mốc: trắng → water → leaf → fire → blood → gold + px_rays; ẩn khi < 3; đứt: rơi 4 px + dither 0.2 s
Hạng Phong Độ canvas (840, 488) chữ D…SSS sprite 40×32 art, token ds-rank-* lên hạng: nháy trắng 1 khung + ds-ui/rank-burst + chime; S+ thêm lớp nhạc; SSS rung 1 px liên tục; tụt hạng: rơi 2 px, xám 2 khung
Chữ phòng thủ thế giới, socket head + 10 px sprite: GẠT! · HOÀN HẢO! · CHẶN · NÉ · PHẢN! · VA KIẾM! · MISS · GẠT ×N · DÒNG CHẢY! · VỠ THỦ! (EN: PARRY! · PERFECT! · BLOCK · EVADE · COUNTER! · CLASH! · MISS · PARRY ×N · FLOW! · GUARD BREAK!) khung 0 nháy trắng → bay lên 4 px trong 0.3 s → giữ → dither 0.1 s; hiện đúng hit-frame địch (INV-05); xếp chồng lệch 12 px nếu trùng; tắt được (§8)
VỠ THẾ! trên địch sprite vàng-trắng + vòng posture_break 1 lần mỗi lần vỡ
Thanh Boss / Thủ Vệ dải trên (184) tên Tiny5 40, HP 1000×40 ds-hp + vệt trễ, Thế 1000×16 ds-posture, pip pha ◆ Vỡ Thế: thanh Thế trắng nhấp nháy + đếm 3.5 s rút dần; miễn Vỡ 12 s: biểu tượng khóa 8×8
Thanh Tinh Anh thế giới, trên đầu HP 24×2 + Thế 24×1 art px, viền ink luôn hiện với Tinh Anh; địch thường chỉ HP 16×1 khi vừa trúng (1.5 s), tối đa 6 thanh
Glyph báo hiệu thế giới, socket head + 14 px sprite 9×9: ! (heavy, ds-tele-heavy, nháy 2 khung/0.1 s), mũi tên (thrust), sóng (sweep), bàn tay (grab) — ds-tele-unblock; đạn: đường ngắm 1 px đứt; vùng: dither đất đúng 01 §11.3; hình khác nhau cho mù màu; chế độ tương phản cao (§10)
Số sát thương thế giới digit sprite (bảng dưới) viền ink 1 px bay lên 0.6 s theo bước 1 px; gộp cùng mục tiêu trong 0.15 s; gộp DoT mỗi 1 s; tối đa 24 số; nằm trong SafeArea
Letterbox màn hình dải ink 16 art px trên/dưới, trượt vào 2 bước Tuyệt Sát / Tuyệt Kỹ / BossIntro; HUD mờ 0.15 s, tên đòn Tiny5 56 giữa dải dưới

Bộ digit sprite (1 art px, 12 §7):

Bộ Glyph (art px) Cao trên màn Lớp hit dùng Màu
S 5×7 (+viền → 9 cao) 36 L, M, DoT ds-dmg; DoT = PAL[elem][5]
M 6×9 (11) 44 H, S ds-dmg
L 7×11 (13) 52 F, K K = ds-dmg-counter
XL 9×13 (15) 60 U ds-lantern
XXL 10×14 (16) 64 X trắng + viền gold

Chí mạng: tăng 1 bộ + ! + màu ds-dmg-crit. Anh hùng nhận sát thương: bộ M ds-dmg-taken bay xuống. Hồi máu ds-heal "+". Rút gọn số theo 01 §4.1 (12.3K).

3.4 Widget Cổng cơ chế (240×96, góc phải panel dưới)

Mặc định dưới đây; chương anh hùng (gauge.ui trong hero_*.py) thắng khi khác.

Anh hùng Cổng Widget
Kaito Ý Kiếm 0–3 3 trăng khuyết 5×5 art; đầy → trắng, tiêu → nhấp nháy
Aldric Phán Xét 0–100 thanh dọc mặt trời holy 6×20 art + vạch 50/100; đầy → búa sáng
Vex Đà 0–30 6 đoạn × 5 + số; 30 → vòng "CUỒNG SÁT" 5 s cyber
Brann Cuồng Nộ 0–100 thanh fire có 3 nấc; Bạo Nộ → lửa rung
Lyra Thiên Khí 0–3 3 lông vũ electric
Rook Chân Khí 0–5 5 khối gold
Mora Linh Hồn 0–10 10 đốm hồn arcane 2 hàng; 10 → mặt nạ sáng
Sable Xích Căng 0–100 thanh mắt xích poison; ≥ 80 rung 1 px

3.5 Bộc Phá, AUTO, Build

  • Bộc Phá Ø224: vành 8 đoạn ds-od lấp theo %, % ở giữa (40); đầy → vành quay bước 45°/0.25 s + od_ready + rung nhẹ. Chế độ TỰ ĐỘNG: nút hiện nhưng chỉ báo trạng thái (bấm → toast "Đang TỰ ĐỘNG"); THỦ CÔNG: bấm khi đầy → kích hoạt ở cửa sổ hủy kế (01 §8).
  • AUTO 176×128: xanh px_btn_green = TỰ ĐỘNG, xám = THỦ CÔNG; Auto-Rerun ép TỰ ĐỘNG (khóa + lý do).
  • Build ▣×N 208×112: N = số Hồi Âm đã nhặt; bấm → Tạm dừng + Xem Build (S07). Chấm GameNotification khi có lộ trình mới chưa xem.

4Màn chính

4.1 Trạm Đầu Thang (Home, S03)

┌────────────────────────────────────────────┐ 0
│[Ava Lv12]  Vàng 12.3K · KC 450 · Tro 320    │ Top ResourceView
├────────────────────────────────────────────┤ 160
│[Sự kiện●]                      [Gói 47:12]  │ rail trái ≤ 3 · rail phải ≤ 2 (OfferDirector)
│[Nhiệm vụ●]                     [Pass●]      │
│[Thư]                                         │
│      ⌒⌒ vòm hang · xích · bảng "KỶ LỤC B23" │ diorama 270×400 art px ×4
│   (lửa trại) 🔥  túi AFK ●(2h 14m)           │ chạm lửa → Lửa Trại S32
│   Kaito ngồi (camp_idle)       ╲ miệng       │ chạm anh hùng → victory + 1 câu
│                                  ╲ thang xoắn│ chạm thang = CTA
│  ┌─────────────────────────────────────────┐│
│  │      XUỐNG THANG · Kaito ★2 Lv18        ││ CTA 760×176, y 1560
│  └─────────────────────────────────────────┘│
├────────────────────────────────────────────┤ 1771
│[Cửa Hàng][Anh Hùng][ TRẠM ][Rèn Luyện][Sổ] │ TabBottomTemplate (5 tab, icon 200)
└────────────────────────────────────────────┘ 1920

Diorama là cảnh pixel thật (PPU 16, camera riêng ×4): lửa fire/campfire, anh hùng đang chọn ở clip camp_idle, miệng thang tối có bậc đá xoáy xuống. Tab bị khóa hiện xám + lý do (00 §8). Thứ tự lần về Home: thưởng còn sót → 1 tính năng mới (S38) → chào AFK → FTUE → offer (chỉ khi Home đã yên). Có run dở → popup "Tiếp tục run? (B23 · Kaito)" [Bỏ run] [TIẾP TỤC].

4.2 Chuẩn bị run (S04, Popup lớn 960×1500)

┌──────────────── CHUẨN BỊ XUỐNG THANG ────────────────┐
│  ◄  [ Kaito idle ×4 trên bệ đá ]  ►    Kaito ★2 Lv18  │
│      Gạt 15% · Chặn 8% · Né 10%  ·  Ý Kiếm             │
│  Tầng bắt đầu: [B1] [B11] [B21] … (Xuống Nhanh ≤ kỷ lục − 25) │
│  Bậc Kinh Hoàng: [0 ▬▬○ 20] (khóa tới khi hạ B100)      │
│  Auto-Pick: [BẬT]   Tiêu Điểm Build: [Combo ▼]          │
│  Tốc độ: [x1][x1.5][x2][x3🔒]                            │
│              [        BẮT ĐẦU        ]                   │
└───────────────────────────────────────────────────────┘

Anh hùng chưa sở hữu không hiện trong carousel (xem ở Sảnh). Xuống Nhanh hiện số lượt thẻ tự chọn sẽ nhận (06 §5.5).

4.3 HUD — §3.

4.4 Chọn Hồi Âm khi đi xuống (S08)

Cảnh diegetic (00 §5.2): camera trượt dọc trục cầu thang xoắn, anh hùng chạy clip descent, phòng cũ mờ lên trên, bảng đá khắc "B23 → B24". Sheet neo đáy; mọi phần tử bấm được nằm ở y ≥ 1,056 (INV-07) → thẻ xếp ngang.

(trên y 972: cảnh đi xuống thang — 243 art px)
┌──────── B23 XONG — CHỌN 1 HỒI ÂM ────────┐ 972  ribbon 112 (Tiny5 48)
│ ┌────────┐ ┌────────┐ ┌────────┐          │ 1108 thẻ 320×612 (×3, cách 20)
│ │[icon 64│ │        │ │ TIẾN   │          │
│ │ ×4 động]│ │        │ │ HÓA    │          │
│ │Trăng    │ │Mắt Tinh│ │        │          │
│ │Khuyết…  │ │ ◆ R    │ │        │          │
│ │ ●○○     │ │ ●●○→●●●│ │        │          │
│ │Combo mới│ │+12% Gạt│ │        │          │
│ │chém–hất…│ │        │ │        │          │
│ │[AIR ×2] │ │        │ │        │          │
│ └────────┘ └────────┘ └────────┘          │ 1720
│ [Đổi thẻ (1)] [Loại bỏ (1)] [Bỏ qua +40🔥] │ 1744 hàng nút 136
└────────────────────────────────────────────┘ 1920 (lề 40 + SafeArea)

Phép tính (1080×1920):

Biến thể Thẻ Hàng thẻ Cột chữ Tổng sheet Sheet bắt đầu
3 thẻ 320 × 612 3×320 + 2×20 = 1,000 288 (pad 16) 112 + 24 + 612 + 24 + 136 + 40 = 948 y 972
4 thẻ (E10 / Phước Lành) 238 × 612 4×238 + 3×16 = 1,000 214 (pad 12) 948 y 972

Chiều cao thẻ = 16 + 256 (icon) + 12 + 96 (tên ≤ 2 dòng @40, dòng 48) + 8 + 32 (pip cấp) + 8 + 120 (dòng ngắn ≤ 3 dòng @32, dòng 40) + 8 + 40 (chip) + 16 = 612. Hàng thẻ chiếm y 1,108–1,720 ✔ (≥ 1,056).

Mặt thẻ (06 §9):

  • Khung px_card_echo (9-slice, tint ds-stone-deep), viền 2 art px màu độ hiếm + huy hiệu hình 16×16 art góc phải trên (tròn/thoi/lục giác/sao/sao + mũi tên/sao đôi/giọt — 06 §3). Thẻ riêng anh hùng: dải chữ ký 4 art px mép trái + icon vũ khí 8×8 art.
  • Icon 64×64 art (256): ảnh động 8 khung, 8 fps, từ echo-icon.mjs (02 §3.7). Nội dung trong vùng an toàn 56×56 giữa; biến thể 4 thẻ hiển thị đúng 56×56 giữa (224) — không scale.
  • Tên Tiny5 40 (> 2 dòng → 32); pip cấp ●●○ (sprite 6×6 art) + "→ ●●● Nâng cấp" 32; dòng ngắn #echo_<id>_short 32 (≤ 40 ký tự, 3 dòng); hàng chip: " ×N" (pill 32) · đỏ "● Thay: <tên>" · vàng "TIẾN HÓA SẴN SÀNG".
  • Hàng nút 1,000 × 136: [Đổi thẻ (n)] [Loại bỏ (n)] [Bỏ qua +40] = 3 × 312 + 2 × 32; có Phước Lành → 4 × 232 + 3 × 24: [Đổi thẻ] [Loại bỏ] [▶ +1 Thẻ] [Bỏ qua]. Hết lượt → xám + "(0)"; Đổi thẻ bằng KC hiện giá trên nút (30/60/90 KC). Đổi thẻ không bao giờ ra lại 3 thẻ vừa thấy (06 §5).

Tương tác: khóa chạm 0.6 s sau khi sheet hiện (polish §9.9); chạm thẻ = chọn → thẻ nảy 8 px + nháy trắng 1 khung + sfx_card_pick, thẻ khác tối, giữ 0.5 s → sheet rơi xuống, anh hùng xuống nốt thang; nhấn giữ 0.4 s = Chi tiết (S09: mô tả đầy đủ, chuỗi đòn của lộ trình bằng icon loại đòn, điều kiện xuất hiện, thẻ liên quan; nhả tay không chọn). Auto-Pick: vành đếm 3 s (1.5 s ở ≥ x2) quanh thẻ được chọn, chạm bất kỳ → dừng. Lần lật thẻ: 3 thẻ lật lần lượt 0.08 s, âm theo độ hiếm (sfx_echo_*), thẻ L/EVO thêm ui_card_flip + tia.

4.5 Chiếu Nghỉ & Cổng Boss (S10, S11)

Bottom sheet cùng khung với S08: ảnh sự kiện 270×110 art (1080×440) trên đầu sheet (không bấm được), tiêu đề 48, mô tả 32–40 (≤ 3 dòng), 2–3 lựa chọn 1,000×136 xếp dọc trong vùng y ≥ 1,056, mỗi lựa chọn có chip giá (Than Hồng/HP) bên phải; "Rời đi" luôn là nút cuối (px_btn_dark). Thương Nhân (LD01, LD00): 3 thẻ Hồi Âm mặt nhỏ (238×420, icon 56-crop) + giá + [Mua]. Cổng Boss thêm thẻ gợi ý Boss: chân dung 32×32 art, 3 dòng ("Đòn nặng đỏ: Gạt được", "Mũi tên đỏ thẫm: chỉ Né", "Vỡ Thế → Tuyệt Sát 10% Max HP").

4.6 Gục / Hồi sinh (S13)

┌─────────────── ĐÈN HỒN CHẬP CHỜN ───────────────┐ (sheet neo đáy, y 980)
│      (Kaito quỳ, đèn hồn nhấp nháy — clip downed)│
│      vòng đếm 8 s · B23 · còn 2 tầng tới Boss   │
│ [Hồi sinh miễn phí (Cây D07)]                    │ nếu có
│ [▶ Hồi sinh — Quảng cáo]                         │ ≤ 1/run
│ [Hồi sinh — 100 KC]                               │ ≤ 1/run
│ [Bỏ cuộc]                                         │
└───────────────────────────────────────────────────┘

Popup ép chọn: ClickBackgroundToExit ✗, back = Bỏ cuộc (xác nhận). Nút xếp dọc 1,000×136 ở y ≥ 1,240. Hết giờ = Bỏ cuộc. Không quảng cáo → nút xám "Chưa có quảng cáo".

4.7 Kết Quả (S14)

┌──────────────────── KẾT QUẢ ────────────────────┐
│        B37 · SẢNH NGẬP      ★ KỶ LỤC MỚI!        │ 64
│ Kaito ngã trước Thủ Vệ Thuyền Trưởng Chìm (B35)  │ lý do + gợi ý + [Rèn Luyện]
│ ┌ Phần thưởng ─────────────────────────────┐    │
│ │ Vàng 8,420 · Tro Hồn 46 · EXP 830          │    │
│ │ XP Thông Thạo +52 · Rương ×2               │    │
│ └────────────────────────────────────────────┘    │
│ ┌ Phòng thủ ────────────────────────────────┐    │
│ │ [■■■■■■■■■■■■■□□□□□] Gạt 31 · Chặn 14 · Né 17 · Trúng 38 %│
│ │ Gạt Hoàn Hảo 38 · Chuỗi Gạt dài nhất 7 · Va Kiếm 12 │
│ │ Tuyệt Sát 41 · Phong Độ cao nhất SS                 │
│ └────────────────────────────────────────────┘    │
│ ┌ Lộ trình dùng nhiều ──────────────────────┐    │
│ │ ◆ Trăng Khuyết Rút Đao ████████████ 18%     │    │
│ │ ● Nhất Thiểm           ████████ 12%         │    │
│ │ … (top 8; ◆ = từ Hồi Âm, ● = gốc)           │    │
│ └────────────────────────────────────────────┘    │
│ [▶ x2 Quảng cáo]                 [ TIẾP TỤC ]    │ y ≥ 1,600
│          (Auto-Rerun: run mới sau 5…)            │
└──────────────────────────────────────────────────┘
  • Thanh phòng thủ chồng 4 màu theo token (ds-posture Gạt, metal Chặn, ds-guard Né, ds-hp Trúng) kèm icon hình từng loại; số % tính trên đòn địch đã roll.
  • Biểu đồ lộ trình: thanh ngang bước 4 px, tối đa 8 dòng, % = số lần chọn / tổng; nhấn dòng → mở S18 xem đòn.
  • Run 1–3: bản gọn (ẩn khối Phòng thủ + Lộ trình sau "Xem phân tích"); từ run 4 bản đủ. Sau TIẾP TỤC: S15 (Hồi Âm mới mở) nếu có → Home. Quảng cáo xen kẽ chỉ ở đây hoặc rời tầng Boss (INV-10).

4.8 Sảnh Anh Hùng (S16)

Lưới 2 cột (thẻ 488×640, cách 24, ScrollLoopTemplate): anh hùng idle ×4 trên bệ (sprite thế giới qua RenderTexture ×4 — cùng cỡ pixel), tên 40, danh hiệu 32, huy hiệu độ hiếm, ★ hàng sao, Lv, vòng Thông Thạo 0–20. Chưa sở hữu: bóng ink đặc + nguồn ("Quà hạ Boss B20 lần đầu") + mảnh x/y. Đang chọn: viền ds-lantern 1 art px + ✓. Chấm đỏ: nâng cấp/sao được. Chỉ 8 anh hùng ra mắt (không ô "sắp ra mắt").

4.9 Chi tiết anh hùng (S17) & Cây Combo (S18)

┌──────────────────────────────────────────────┐
│ ◄ KAITO — Lãng Nhân Cuối Cùng    ★★☆☆☆☆  R  │
│ ┌─ diorama 270×200 art (1080×800) ─────────┐ │ anh hùng vs hình nộm rơm
│ │   Kaito ⟶ ⚔ hình nộm  (lộ trình đang xem)│ │ hit-stop, VFX, chữ chiến đấu thật
│ └───────────────────────────────────────────┘ │
│ [Tổng quan][Cây Combo][Hồi Âm][Trang Phục]    │ tab
│ Lv18/30 · ATK 412 · HP 3,980                   │
│ Gạt 15% · Chặn 8% · Né 10% · Ý Kiếm (3)        │
│ Thông Thạo 6 ▬▬▬▬○ 120/170 XP                  │
│ [Nâng sao 18/40]            [ NÂNG CẤP 2,340 ] │
└──────────────────────────────────────────────┘
  • Cây Combo: danh sách nhóm theo loại lộ trình (GROUND ×5, LAUNCH, AIR, CROWD, BREAK, GAP, WALL/OTG, SIGNATURE + nhóm "Từ Hồi Âm"); mỗi dòng: tên, chuỗi icon loại đòn (8×8 art: chém, đâm, hất, trên không, đập, xoay, túm), điều kiện bằng lời ("Khi địch ở gần", "Khi địch đang thủ"), sức mạnh ●●●○ — không id, không số nội bộ (06 §9). Chạm → diorama phát lộ trình lặp (từng đòn có tên Tiny5 32 bên dưới). Lộ trình Hồi Âm chưa mở: xám + "Mở ở Thông Thạo 6".
  • Hồi Âm: lưới icon động theo Thông Thạo mở khóa; chưa mở → bóng + cấp mở.
  • Trang Phục (S19): đổi LUT hoặc costume (02 §3.4) xem ngay trong diorama; giá IAP/KC; thưởng sưu tầm +1% ATK.

4.10 Triệu Hồi (S25)

Banner: anh hùng nổi bật idle ×4 + nền diorama sự kiện, thời gian còn lại (cooldown sống), tỉ lệ (GachaRateInfo), pity "Huyền Thoại chắc chắn sau N lượt". Nút [x1] (phụ) [x10] (chính), mỗi nút ghi giá Ấn Triệu Hồi hoặc KC theo 09 §4 (ưu tiên trừ Ấn). Lộ diện: đèn hồn rơi xuống trục thang, màu theo độ hiếm (R water, E arcane, L gold + loot_beam), anh hùng mới phát clip intro, mảnh trùng hiện "+10 Mảnh"; x10 lộ từng ô, chạm để bỏ qua (giữ L vẫn dừng 1 nhịp).

4.11 Màn meta khác

Màn Bố cục chính
Rèn Luyện (S20) 6 chỉ số dạng hàng 1000×160 (icon, cấp, +giá trị, giá Vàng, [Nâng]); tab con Cây Đèn Hồn
Cây Đèn Hồn (S21) 4 nhánh cột (Kiếm/Thủ/Đèn/Hồi Âm), nút 16×16 art ×4 nối dây xích; nút khóa xám + điều kiện; cuộn dọc
Di Vật (S22/S23) hình nhân 4 ô (Bùa, Nhẫn, Phù, Ấn) + kho ScrollLoopTemplate (ItemElement, khung RaritiesCurrency) + bộ (SET)
Cửa Hàng (S24) tái dụng Shop: Ưu đãi · Triệu Hồi · Rương Di Vật · KC · Trang Phục; ưu đãi là banner art, không nút kẹo
Sổ Ký Ức (S31) 4 tab: Hồi Âm (đã nhặt/mờ/bóng + nguồn) · Địch (chân dung từ sprite) · Anh hùng · Thành tựu
Lửa Trại (S32) lửa trại lớn, túi AFK đầy dần (8/12 h), [Nhận] / [▶ Nhận thêm]

5Danh sách màn hình

Id Màn Feature Loại Template / tái dụng Ghi chú
S01 Splash / Tải SplashScene Full tái dụng SplashScene đèn hồn rơi dọc trục thang
S02 Cinematic mở đầu IntroCinematic Full mới (timeline pixel) 00 §7.1 bước 1, bỏ qua từ 0.5 s
S03 Trạm Đầu Thang (Home) HomeScreen + HomeScene Full tái dụng khung, cảnh mới §4.1
S04 Chuẩn bị run RunPrep Popup lớn mới (FeatureTemplate Popup) §4.2 — anh hùng, tầng bắt đầu, Bậc, Auto-Pick
S05 HUD trận RunHud Overlay mới (canvas riêng, SafeArea) §3
S06 Tạm dừng RunPause Popup mới Tiếp tục · Xem Build · Cài đặt nhanh · Bỏ cuộc (xác nhận)
S07 Xem Build BuildView Full mới + ScrollViewTemplate 06 §9: Cây Combo, thẻ, bảng phòng thủ
S08 Chọn Hồi Âm (đi xuống) EchoPick Bottom sheet mới §4.4
S09 Chi tiết Hồi Âm (nhấn giữ) EchoDetail Popup con Tooltip mở rộng mô tả đủ, chuỗi đòn, thẻ liên quan
S10 Chiếu Nghỉ Landing Bottom sheet mới, 8 biến thể LD01–LD08 §4.5
S11 Cổng Boss BossGate Bottom sheet mới (= Landing + gợi ý Boss) Thương Nhân + hồi 30% + 3 dòng gợi ý
S12 Giới thiệu Boss BossIntro Overlay mới iris + thẻ tên 2.5 s, bỏ qua từ lần 2
S13 Gục / Hồi sinh Revive Popup ép chọn mới §4.6
S14 Kết Quả RunResults Full mới §4.7
S15 Hồi Âm mới mở EchoUnlockReveal Popup mới sau Kết Quả, mỗi nhóm 1 popup
S16 Sảnh Anh Hùng HeroHall Tab mới + ScrollLoopTemplate §4.8
S17 Chi tiết anh hùng HeroDetail Full mới (diorama RenderTexture) §4.9 — cấp, sao, Thông Thạo
S18 Cây Combo (xem đòn) ComboTreeView Full con mới lộ trình theo loại, xem trước đòn
S19 Trang Phục HeroSkins Tab con AvatarSelect → HeroSkins đổi LUT/costume, thưởng sưu tầm
S20 Rèn Luyện Training Tab mới nâng chỉ số bằng Vàng
S21 Cây Đèn Hồn LanternTree Tab con mới (cuộn dọc 4 nhánh) 40 nút, Tro Hồn
S22 Di Vật Relics Tab mới + ItemElement + ScrollLoopTemplate 4 ô, bộ
S23 Chi tiết / nâng Di Vật RelicDetail Popup mới Bụi Di Vật
S24 Cửa Hàng Shop Tab tái dụng Shop Ưu đãi · Triệu Hồi · Rương · KC · Trang Phục
S25 Triệu Hồi Anh Hùng HeroSummon Full mới + Rewards §4.10, bảng tỉ lệ
S26 Rương Di Vật RelicChest Full mới pickups/chest-open theo độ hiếm
S27 Lantern Pass LanternPass Full tái dụng GloryPass 10 §4
S28 Nhiệm vụ Quest Popup tái dụng Quest Ngày / Tuần / Thành tựu
S29 Sự kiện (hub) Events Full tái dụng Events hub LiveOps
S30 Thử Thách Ngày DailyChallenge Full mới anh hùng của ngày, modifier
S31 Sổ Ký Ức Codex Tab mới Hồi Âm / Địch / Anh hùng / Thành tựu
S32 Lửa Trại (AFK) Campfire Popup mới túi 8 h / 12 h
S33 Đăng nhập SevenDayLogin + DailyLogin Popup tái dụng ngày 7 = Brann
S34 Vòng Quay LuckySpin Popup tái dụng LuckySpin Xu Vòng Quay
S35 Hộp thư MailBox Popup tái dụng MailBox bù thưởng G9/K5
S36 Cài đặt Settings Popup tái dụng Settings §8
S37 Hồ sơ Profile Popup tái dụng Profile kỷ lục, thống kê phòng thủ
S38 Tính năng mới FeatureUnlock Popup tái dụng FeatureUnlock 1 tính năng/lần về Home
S39 Gói ưu đãi StarterPack, FirstPurchase, PiggyBank, GemRefillPack, RemoveAds, Vip30Day, DepthPack, DescentFund Popup PackageTemplate 09
S40 Bậc Kinh Hoàng / Vực DreadSelect Popup mới 20 bậc, B101+
U01 Nhận thưởng RewardPopup Overlay tái dụng
U02 Tooltip Tooltip Overlay tái dụng
U03 FTUE bàn tay / spotlight Tutorials + UnMaskTemplate Overlay tái dụng
U04 Xác nhận Misc message box Overlay tái dụng
U05 Toast Misc Overlay tái dụng

6Luồng

flowchart TD
  A[S01 Splash] -->|lần đầu| B[S02 Cinematic] --> R1[Run B1 FTUE]
  A -->|đã chơi| H[S03 Trạm Đầu Thang]
  H -->|run dở| C{Tiếp tục?} -->|Có| RUN
  C -->|Bỏ| X[S14 Kết Quả] --> H
  H -->|XUỐNG THANG| P[S04 Chuẩn bị] --> RUN[S05 HUD trận]
  RUN -->|hạ hết wave| D{x3/x7/x9?}
  D -->|có| L[S10/S11 Chiếu Nghỉ · Cổng Boss] --> E
  D -->|không| E[S08 Chọn Hồi Âm khi đi xuống] --> RUN
  RUN -->|tầng x0| BI[S12 BossIntro] --> RUN
  RUN -->|HP = 0| V[S13 Gục] -->|hồi sinh| RUN
  V -->|bỏ cuộc / hết giờ| X
  RUN -->|II| PZ[S06 Tạm dừng] -->|Xem Build| BV[S07] --> PZ
  PZ -->|Bỏ cuộc| X
  X -->|Auto-Rerun| RUN
  X -->|Hồi Âm mới| U[S15] --> H
flowchart LR
  H[Trạm] --> HH[S16 Sảnh Anh Hùng] --> HD[S17 Chi tiết] --> CT[S18 Cây Combo]
  HD -->|Nâng cấp / Nâng sao| HD
  HD -->|Chọn| H
  H --> SH[S24 Cửa Hàng] --> SU[S25 Triệu Hồi] -->|anh hùng mới| HD
  SH --> RC[S26 Rương Di Vật] --> RL[S22 Di Vật]
  H --> TR[S20 Rèn Luyện] --> LT[S21 Cây Đèn Hồn]

7Trạng thái & badge (polish §9.10)

Trạng thái Hiển thị
Khóa (tính năng/anh hùng/nút Cây) pixel xám (px_btn_gray) + px_icon_lock + lý do; chạm → toast điều kiện, không tốn gì
Đã nhận / đã mua mờ 50% + ✓ (px_icon_check_green), CTA ẩn, không hiện số
Rỗng hình + 1 dòng dẫn (Di Vật trống: "Mở Rương Di Vật ở Cửa Hàng" + nút tới)
Tối đa thanh đầy, CTA đổi sang bước kế (Nâng sao) hoặc xám + lý do ("Cần ★3 để vượt Lv30")
Không đủ tài nguyên giá màu ds-hp + rung nút 2 px × 3 + link tới nguồn
Đếm ngược đồng hồ sống (TimeLayoutTemplate), hết giờ đổi trạng thái tại chỗ
Đang tải / lỗi đèn hồn xoay (sprite 8 khung); lỗi IAP: toast đỏ + [Thử lại]
Không có quảng cáo nút xám "Chưa có quảng cáo"
Danh sách nhiều nhất 12 anh hùng (sau ra mắt), 64 lộ trình/anh hùng, 140 Hồi Âm trong Sổ — đều cuộn

Chấm đỏ (GameNotification, góc trên phải, −20/−20): nhiệm vụ nhận được · Rèn Luyện rẻ nhất đủ tiền · nút Cây mở được · anh hùng nâng cấp/sao được · Hồi Âm mới trong Sổ · thư chưa đọc · Pass có thưởng · AFK ≥ 2 h · lộ trình mới chưa xem (chip Build).

8Cài đặt (S36)

Mục Giá trị Mặc định
Nhạc / Hiệu ứng âm thanh 0–100% 80 / 100
Rung (haptics) Bật/Tắt Bật
Ngôn ngữ Tiếng Việt / English (đổi tức thì mọi màn) theo máy
Giảm nhấp nháy tắt nháy đảo màu, nháy trắng toàn màn, impact frame; rung −50% Tắt
Cường độ rung màn hình 0 / 25 / 50 / 75 / 100% 100
Số sát thương Tất cả / Chỉ lớn (H+, chí mạng) / Tắt Tất cả
Chữ phòng thủ (GẠT!…) Bật/Tắt Bật
Báo hiệu tương phản cao glyph trắng viền đỏ, nháy ×2 Tắt
Tiết kiệm pin render 30 fps, tắt trang sáng + dư ảnh (mô phỏng vẫn 60 Hz) Tự bật khi pin < 15%
Tốc độ khung hình 30 / 60 60 (Low tier 30)
Thông báo đẩy từng loại (AFK đầy, Pass, sự kiện) Bật
Khôi phục giao dịch · Quyền riêng tư (UMP/ATT) · Điều khoản · Hỗ trợ (BugLogger) — —
Credits Tiny5 (OFL), pixelfx (MIT: Patch, Hugo Duprez, Hollow Crown), âm thanh CC-BY (12 §9) —
Xóa dữ liệu xác nhận 2 bước —

9Rung (VibrateManager)

Sự kiện Mức Trần
Gạt Hoàn Hảo, Va Kiếm nhẹ (10 ms) 1 / 0.3 s
Tuyệt Sát, hạ Thủ Vệ vừa (20 ms)
Hạ Boss, Tuyệt Kỹ hit cuối mạnh (35 ms)
Chọn Hồi Âm L/EVO, Triệu Hồi Huyền Thoại vừa
Anh hùng Gục mạnh 1 lần
Nút khóa / lỗi nhẹ

Không rung theo từng hit thường; trần toàn cục 1 rung / 150 ms; tắt khi Tiết kiệm pin.

10Tiếp cận

  • Báo hiệu không chỉ bằng màu: ! / mũi tên / sóng / bàn tay / đường ngắm / dither đất là 6 hình khác nhau; đỏ #ff2040 vs đỏ thẫm #a0102a còn khác độ sáng (L* 55 vs 34) — phân biệt được ở protanopia/deuteranopia (kiểm bằng mô phỏng mù màu khi QA). Chế độ tương phản cao §8.
  • Độ hiếm: huy hiệu hình (06 §3) + màu; phòng thủ: icon riêng mỗi loại.
  • Chữ ≥ 32; vùng chạm ≥ 112 (đa số ≥ 128); nhấn giữ thay cho chạm đúp.
  • Giảm nhấp nháy tắt mọi nháy toàn màn (01 §14.2); không nháy > 3 lần/giây ở vùng > 25% màn.
  • Không thông tin chỉ có ở âm thanh (mọi âm báo hiệu đều có glyph).

11Bản địa hóa

Nhóm Mẫu key
UI tĩnh #ui_<màn>_<phần tử> (vd #ui_echopick_title), tái dụng key chung (#cancel, #buy…)
Anh hùng #hero_<code>_name/_title/_style/_lore
Đòn / lộ trình #move_<id>_name, #route_<id>_name (id thường)
Hồi Âm #echo_<id>_name/_short/_desc (_short ≤ 40 ký tự, loc_lint.py)
Địch / Boss #enemy_<id>_name, #warden_<id>_name, #boss_<id>_name/_title/_line_intro/_line_defeat
Địa Tầng / Chiếu Nghỉ #stratum_<id>_name, #landing_<id>_title/_desc/_opt<n>
Meta #relic_<id>_*, #tree_<id>_*, #dread_<id>_*, #skin_<id>_name
Lý do gục #reason_death_<loại>
Chữ chiến đấu sprite callout_<key>_<lang>.png (vi/en), chọn theo ngôn ngữ lúc nạp

Với Tiny5, chuỗi VI thường dài hơn EN (đo: "Combo mới: chém–hất tung–3 nhát trên không" 624 vs "New combo: cut, launch, 3 air slashes" 508 @32); layout tính theo chuỗi dài nhất của mỗi key ở cả hai ngôn ngữ. Số: phân tách nghìn theo ngôn ngữ, rút gọn K/M/B/aa (01 §4.1).

12QA checklist

  • [ ] Mọi màn chụp ở 1080×1920, 1080×2520, 1536×2048 (+1125×2436 SafeArea): không lỗ, nền phủ kín, phần tử neo cạnh không rời khối.
  • [ ] Cỡ chữ chỉ 32/40/48/56/64/72; chữ Việt nhiều dòng lineSpacing 1.25, dấu không chạm dòng trên.
  • [ ] Trong run: không phần tử bấm được ở y < 1,056 trừ Tạm dừng/Tốc độ (INV-07) — gồm EchoPick, Chiếu Nghỉ, Gục, Tạm dừng.
  • [ ] EchoPick 3 và 4 thẻ vừa khung 1080×1920 với chuỗi dài nhất (tên 24 ký tự, dòng ngắn 40 ký tự VI/EN).
  • [ ] Chữ phòng thủ & số sát thương xuất hiện đúng hit-frame địch (so log tick).
  • [ ] Mọi sprite UI ×4 (không ×8, không scale lẻ); vị trí bội 4.
  • [ ] Một CTA chính/màn; nút khóa có lý do; không "sắp ra mắt".
  • [ ] Mọi chuỗi tĩnh có LocalizesUI + key VI/EN; chuỗi động không có.
  • [ ] Giảm nhấp nháy tắt mọi nháy toàn màn; tương phản cao đổi glyph.
  • [ ] Popup thường: chạm ngoài + back đóng; Gục/Chọn Hồi Âm: ép chọn.