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 đúngPAL). Bảng hex trong 06 §3 (#8b8798,#3f8fd8,#a24fe0,#f0b030,#b0182c) lệchPAL→ thay bằng token trên khi đồng bộ. - Di Vật 6 độ hiếm =
rarity-1…6(khungRaritiesCurrency/1–6.pngcó 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_buildmớ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 đặtlineSpacing1.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ư
CjkFontFallbackcủ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 Size1080×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.
FullScreencó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-odlấ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
GameNotificationkhi 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, tintds-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>_short32 (≤ 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-postureGạt,metalChặn,ds-guardNé,ds-hpTrú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; đỏ#ff2040vs đỏ thẫm#a0102acò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
lineSpacing1.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.