🔔 Bladewake GDD
📄 Doc 40 · UX, điều khiển & nền tảng

40 — UI/UX & HUD (giao diện, điều hướng, HUD trong bầy)

đặc tả TOÀN BỘ giao diện Bladewake cho PC Steam (tay cầm trước, bàn phím/chuột đủ) + Steam Deck: hệ toạ độ UI, bộ UI kit (font có dấu tiếng Việt, token màu, 9-slice, icon, glyph nút), danh mục màn có id, bố cục từng màn ở 1920×1080 và 1280×800, phần tử + trạng thái, đồ thị điều hướng (thứ tự focus tay cầm, KB/M), chuyển động, âm SFX_UI_*, giới hạn chữ cho loc, HUD đọc được giữa 150–250 quái, thanh

Cập nhật: 2026-11-07
14
mục ##
41
mục ###
41
bảng
19 790
từ

1Giới thiệu & bản đồ tài liệu

Mục đích: đặc tả TOÀN BỘ giao diện Bladewake cho PC Steam (tay cầm trước, bàn phím/chuột đủ) + Steam Deck: hệ toạ độ UI, bộ UI kit (font có dấu tiếng Việt, token màu, 9-slice, icon, glyph nút), danh mục màn có id, bố cục từng màn ở 1920×1080 và 1280×800, phần tử + trạng thái, đồ thị điều hướng (thứ tự focus tay cầm, KB/M), chuyển động, âm SFX_UI_*, giới hạn chữ cho loc, HUD đọc được giữa 150–250 quái, thanh boss có glyph thích nghi, móc trợ năng, luồng onboarding. Phụ thuộc: 00-Design-Bible.md + data/_bible.json (INV-01/02/08/09/15/16, §1.1 bản đồ nút, §2 run, §3 hub, §4 Khăn Tang/mode/Thương Xót, §6 draft/rarity/icon, §8.4 Tro Nhớ UI, §10.3 loc/font, §10.4 camera) · 10-Combat-Core §6.5 (số sát thương, callout), §4.1 (Thế), §8 (HP, khiên, bình) · 11-Defense-Tells §4 (trợ năng tell) · 12-Hero-Framework §1 (input, glyph), §2.2 (hud.element tài nguyên) · 13-Upgrades-Builds §2–§4, §8–§12 (draft, Đổi/Xoá/Giữ, Cộng Hưởng, Tiến Hoá, Relic, Sạp Rong) · 14-Adaptive-AI §14 (Mắt Tro, ◆, callout) · 16-Run-Structure-Map (luồng, bản đồ, thưởng, cổng boss, tổng kết, lưu) · 18-Meta-Hub-Progression (trạm, menu trạm, codex, onboarding 3 run) · 30-Art-Direction §2.2, §3.6, §5.3 (zoom, token hệ thống, portrait) · 31-VFX-Bible §1, §2.4 (thứ bậc hiển thị, lớp screen) · 32-Audio-Bible §3.7, §7.1 (cue nhạc, 37 SFX_UI_*) · 43-Steam-Platform §8, §12 (Deck, glyph, loc) · data/av/UI.json (27 VFX_UI_*, 37 SFX_UI_*) · demo GDD/08-Arena-HUD.md (lịch sử). Được dùng bởi: dev Unity (UI prefab, UIManager + UiScreen, HudController, BossBar, DraftScreen, MapScreen, HubMenu*, InputGlyphs, TextCanvas), agent UI/mockup (/new-ui, /refactor-ui), artist UI kit (9-slice, icon, font), agent loc (giới hạn chữ, ngữ cảnh), QA (checklist Deck, test 5 s HUD), hub .claude/docs/ArtStyle.md §8 (bản tóm tắt token/kit).

Độ dài từng mục (nghìn ký tự)Độ dài từng mục (nghìn ký tự)0. Phạm vi, thứ bậc, quy ước0. Phạm vi, thứ bậc, quy ước: 2.8k2.8k1. UI kit1. UI kit: 9.6k9.6k2. Danh mục màn (UiScreen)2. Danh mục màn (UiScreen): 6.2k6.2k3. Điều hướng3. Điều hướng: 3.6k3.6k4. HUD trong trận (CombatHud)4. HUD trong trận (CombatHud): 14.8k14.8k5. Màn trong run5. Màn trong run: 17k17k6. Màn ngoài run6. Màn ngoài run: 26.7k26.7k7. Chuyển động & âm UI7. Chuyển động & âm UI: 5.8k5.8k8. Giới hạn chữ cho loc8. Giới hạn chữ cho loc: 1.6k1.6k9. Móc trợ năng (UI phía thực thi; luậ…9. Móc trợ năng (UI phía thực thi; luật gốc 11 §4, Bible §4.3, meta.accessibility): 1.6k1.6k10. Onboarding & hướng dẫn10. Onboarding & hướng dẫn: 2.1k2.1k11. Telemetry UI (chỉ khi đồng ý, 43 §…11. Telemetry UI (chỉ khi đồng ý, 43 §15): 0.3k0.3kQuy tắc cho dev/AIQuy tắc cho dev/AI: 1.8k1.8kQuyết định đã chốtQuyết định đã chốt: 3.8k3.8k
Bấm tên mục để nhảy tới mục đó.
Mục lục chi tiết (## và ###)
  1. 0. Phạm vi, thứ bậc, quy ước
  2. 0.1 Đơn vị & canvas
  3. 0.2 Lớp render UI (Unity, trên mọi sorting layer world — 30 §8.3, 31 §2.4)
  4. 1. UI kit
  5. 1.1 Font (pixel, có đủ dấu tiếng Việt)
  6. 1.2 Bậc chữ (Trợ năng "Cỡ chữ" 100 / 125 / 150%; ui_text_scale_min Deck 1.25)
  7. 1.3 Token màu UI (screen-space; nguồn duy nhất cho mọi màn — đồng bộ sang hub ArtStyle §8b)
  8. 1.4 9-slice (UI_Kit atlas, 1 trang 1024², PPU 25, Point, pixelsPerUnitMultiplier 1)
  9. 1.5 Icon & glyph
  10. 1.6 Thành phần chuẩn (prefab UI_C_)
  11. 2. Danh mục màn (UiScreen)
  12. 3. Điều hướng
  13. 3.1 Lệnh UI chung (action map UI trong InputActions, remap được, tách khỏi map Gameplay)
  14. 3.2 Đồ thị màn
  15. 4. HUD trong trận (CombatHud)
  16. 4.1 Vùng (UI px trong SAFE 427×267; giống hệt ở 1920×1080 và 1280×800)
  17. 4.2 Ô kỹ năng & Ult
  18. 4.3 Widget tài nguyên (hud.element, 12 §2.2; rect RES 96×8)
  19. 4.4 Theo dõi mục tiêu (OBJECTIVE, 112×30)
  20. 4.5 Thanh boss, nameplate, Mắt Tro
  21. 4.6 Đọc được giữa bầy (150–250 quái)
  22. 4.7 Sự kiện HUD (World)
  23. 5. Màn trong run
  24. 5.1 ActIntro (3.5 s, bỏ qua sau 1 s bằng A/Enter — 16 §7.3)
  25. 5.2 Map (bản đồ Hồi; mở bằng d-pad lên / M ở bất kỳ lúc nào trong run để XEM — chọn nút chỉ khi ở trạng thái MAP)
  26. 5.3 Draft (lên cấp / EDGE+; luật 13 §2–§4)
  27. 5.4 SkillPick · LinchpinPick · Tiến Hoá
  28. 5.5 Reward · Rest · Secret · Event · Shop · Dock · BossGate
  29. 5.6 Pause (Menu / Esc; World + Hero dừng; nhạc snapshot pause; VFX_UI_pause_dim, SFX_UI_pause)
  30. 5.7 Chết, hồi sinh, thắng, tổng kết, kết
  31. 6. Màn ngoài run
  32. 6.1 Khởi động & tiêu đề
  33. 6.2 Hub (HubHud, HubTravel, Dialogue)
  34. 6.3 Settings (7 tab; mọi thay đổi áp ngay, "Mặc định" theo tab: UI_C_Confirm)
  35. 6.4 Khuôn menu trạm (UI_StationMenu, dùng cho §6.5–§6.12)
  36. 6.5 Hearth — Lửa Canh (ST_HEARTH)
  37. 6.6 Forge — Lò Rèn Vọng: tab Rèn Kẻ Thức (12 dòng: điều kiện chiến công + giá 0–16 Mảnh Vọng; rèn → cảnh 4 s SFX_HUB_forge_unlock) · Dạng Rèn (12 hero × AS2/AS3 8/15) · Ult (UL2/UL3 6/10) · Tiến Hoá (công thức EVO1–EVO4 mỗi hero: đã lộ = 2 icon + điều kiện; chưa = bóng "?"; EVO4 hiện ở MR12) · Nâng trạm (UP_FORGE_1–5).
  38. 6.7 DockDepart — Bến Đò
  39. 6.8 Ledger — Sổ Tang (tab: Codex · Lịch Sử Run · Bia Mộ · Sổ Thù · Bàn Thờ Ký Ức · Sưu Tập · Bảng Xếp Hạng)
  40. 6.9 TestBell — Chuông Thử
  41. 6.10 Market — Chợ Đò: tab Pool (Edge chung + Relic chưa mở; lọc LB/RB phụ theo loại, X đổi lọc tag/rarity; thứ tự rẻ trước, nhóm theo tag — 18 §6.5; sau GD2 +12 mục) · Lễ Vật (LV01–LV06, chọn ≤ 1 (UP_MARKET_3: 2), tắt khi mode đã chọn là DAILY/BOSS_RUSH: "Không dùng ở chế độ này") · Nâng trạm (UP_MARKET_1–5).
  42. 6.11 Yard — Sân Tập (menu nổi trên sân, World chạy)
  43. 6.12 Wardrobe — Tủ Áo Tang (GD4): tab Skin (hero → 4 skin, xem trước LUT trên _select) · Trang trí (6 tượng, 18 hộp nhạc — A nghe thử 10 s, 30 tranh) · Hành trang lưu (UP_WARDROBE_1: 3 ô) · Màu phụ (UP_WARDROBE_3, trong slot INV-01).
  44. 6.13 Màn hệ thống & thông báo (#44–#53, trạng thái Leaderboard)
  45. 7. Chuyển động & âm UI
  46. 7.1 Luật chuyển động (ArtStyle §8e)
  47. 7.2 Bản đồ âm UI (37 SFX_UI_, bus UI, đồng hồ UI — 32 §7.1)
  48. 8. Giới hạn chữ cho loc
  49. 9. Móc trợ năng (UI phía thực thi; luật gốc 11 §4, Bible §4.3, meta.accessibility)
  50. 10. Onboarding & hướng dẫn
  51. 10.1 Lần chạy đầu (khớp 18 §12)
  52. 10.2 Gợi ý trong run (HINT, 1 dòng, glyph nút theo thiết bị)
  53. 11. Telemetry UI (chỉ khi đồng ý, 43 §15)
  54. Quy tắc cho dev/AI
  55. Quyết định đã chốt

20. Phạm vi, thứ bậc, quy ước

  • Thứ bậc: Bible + _bible.json > doc nền (10–17, 20, 30–32, 51) > doc này. Doc này KHÔNG đặt số gameplay (thời gian draft, giá, %): chỉ trích lại và trình bày. Số UI mới (px, thời lượng tween, α) do doc này sở hữu; số [ASSUMED] chỉnh ở tuning.json section platform/vfx (khoá ui_*).
  • Tên hiển thị chốt (Bible §11): Khăn Tang / Độ Tang (MRN01–MRN15) · Act Mutator (MUT01–MUT12) · Dạng Rèn (Song Liềm Tro H01_AS1…) · Dư Âm (ULT_GAUGE) · ĐÁP (chạm RB/RMB) + verb giữ riêng hero · Then Chốt (Gió Gạt H01_E37–E40) · Tro Nhớ / Mắt Tro / ◆ · Vàng Mã, Tro Hồn, Mảnh Vọng, Nến Canh. UI không bao giờ hiện id loại (ASPECT, LINCHPIN, CV).
  • Id màn = enum code UiScreen.<Name> (không phải id dữ liệu, không vào JSON). Prefab: UI_<Name>.prefab trong Assets/_Project/UI/Screens/.

0.1 Đơn vị & canvas

KhoáGiá trị
Đơn vịUI px = 1 art px của thang UI. Thang UI = zoom world nguyên (30 §2.2): 1920×1080 ×4 · 1280×800 (Deck) ×3 · 1280×720 ×2 · 2560×1440 ×5 · 3840×2160 ×8. Không bao giờ thang lẻ, không sub-pixel.
Canvascanvas_w = ceil(W / zoom), canvas_h = ceil(H / zoom): 1080p = 480×270 · Deck = 427×267 (1281×801, cắt 1 px phải/dưới) · 720p = 640×360
SAFErect 427×267 UI px giữa canvas (= vùng an toàn gameplay Bible §10.4). Mọi HUD, nút, chữ tương tác nằm trong SAFE; nền màn/vignette phủ cả canvas. gốc SAFE = (⌊(canvas_w − 427)/2⌋, ⌊(canvas_h − 267)/2⌋) UI px: 1080p (26, 1) = 1708×1068 px màn tại (104, 4) · Deck (0, 0) = cả màn · 720p (106, 46)
Lề trongM = 4 UI px từ mép SAFE cho mọi phần tử neo góc; khoảng cách giữa khối = bội 4 UI px
Tuỳ chọn "Vùng an toàn màn"thu SAFE thêm 0 / 4 / 8 / 12 / 16 UI px mỗi cạnh (TV, overscan); mặc định 0; Deck khoá 0
Toạ độ trong doc(x, y, w, h) UI px, gốc trên-trái của SAFE (y xuống). Vì SAFE giống nhau ở 1080p và Deck, mọi bố cục HUD/màn dùng 1 bản số; khác biệt chỉ ở cột "Deck" của bảng chữ (§1.2) và các màn có ghi chú riêng
Siêu rộng 21:9canvas 640×288 (3440×1440 ×5); SAFE vẫn 427×267 giữa; nền màn kéo dài; không phần tử nào neo mép canvas
Đổi px mànpx_man = UI_px × zoom; ví dụ thanh HP 96×7 UI = 384×28 px ở 1080p, 288×21 px ở Deck

0.2 Lớp render UI (Unity, trên mọi sorting layer world — 30 §8.3, 31 §2.4)

Thứ tựCanvasChứaGhi chú
1WorldUI (World Space, PPU 25, đồng hồ Real)nameplate Tinh Anh/mini, nhắc INTERACT, cue tài nguyên world ≤ 12 px quanh chân (12 §2.2), Mắt Tro ◆ overheadY-sort theo actor; không bao giờ trên lớp Prioritize (tell)
2BattleDmgTextsố sát thương (1 mesh, VFX_UI_dmg_number*)dưới HUD; không đè vùng HUD đang hiện (§4.6)
3Hud (Screen Space Camera, pixel-perfect)§4ẩn khi mở màn toàn phần
4Screensmàn/popup §2mỗi màn 1 prefab, UIManager show/hide (không SetActive tay — rule core-system)
5TextCanvaschữ CJK + chữ ≥ FNT_L khi bật "chữ 150%"canvas riêng độ phân giải màn (Bible §10.3)
6Overlaytoast thành tựu, con trỏ focus, phụ đề tell, hộp xác nhận, màn chuyển cảnhtrên cùng

31. UI kit

1.1 Font (pixel, có đủ dấu tiếng Việt)

  • Quyết định: studio tự vẽ bộ font bitmap FNT_BW_* (Latin + Latin Extended-A + 134 ký tự tiếng Việt dựng sẵn + Cyrillic + ký hiệu game) trên lưới pixel cố định; không dùng font thư viện pixelfx (không giấy phép, 30 §1). CJK (zh-CN, JA, KO) = 1 font bitmap 12 px giấy phép mở cho thương mại, chọn ở M10, ghi tên + giấy phép vào hub ArtStyle §8d; tên font không ghi trong GDD.
  • Dấu chồng tiếng Việt (ể, ặ, ỗ, Ữ) = 2 tầng trong vùng dấu, không đè dòng trên; không tầng dấu nào được cắt khi line_height như bảng.
FontVaiCap (UI px)Vùng dấuChânline_heightBước ngang TBỞ 1080p (cap px màn)Ở Deck (cap px màn)
FNT_BW_Schú thích, tag, số phụ, tooltip531942015
FNT_BW_Mthân chữ, nút, tên thẻ, thoại7321262821
FNT_BW_Ltiêu đề màn, callout, tên boss10431784030
FNT_BW_XLlogo phụ, tên Hồi, kết145322115642
FNT_BW_NUMsố sát thương, bộ đếm HUD7 (ô 5×7)——962821
CJK 12 px (canvas TextCanvas, px màn)mọi vai (zh/ja/ko)ô 12 px màn ×2 = 24 px màn = 6 UI px (1080p) / 8 UI px (Deck)——28 px màn = 7 / 10 UI px1 ô2424
  • Sàn đọc Deck (43 §8.2): chữ nhỏ nhất ≥ 12 px cao trên màn → FNT_BW_S 15 px ✓; thân ≥ 16 px → FNT_BW_M 21 px ✓; CJK 24 px ✓.
  • Màu chữ chỉ từ token §1.3; viền chữ trên nền world (HUD, callout, nameplate) = 1 px ui-ink 8 hướng; trên panel: không viền.
  • Số: chữ số đều bề rộng (tabular) ở mọi font; dấu nghìn theo locale (VI "1.234", EN "1,234").

1.2 Bậc chữ (Trợ năng "Cỡ chữ" 100 / 125 / 150%; ui_text_scale_min Deck 1.25)

Vai (role)100%125% (mặc định Deck)150%
caption (tag, số phụ, chú thích icon)SMM
body (mô tả thẻ, tooltip, codex, cài đặt)SML
button · name · dialogueMML
title · callout · boss_nameLLL
displayXLXLXL
HUD số (HP, đồng hồ, giây hồi chiêu)NUMNUMNUM ×2 dọc (font NUM nhân 2)
  • Font pixel không co giãn lẻ: "125%" = đổi font theo bảng, không scale. Mọi hộp chữ body phải chứa 125% không tràn (Deck mặc định); 150% được phép cuộn (thanh cuộn 2 px, cuộn bằng RS / con lăn).
  • Đổi cỡ chữ sống, không cần khởi động lại; màn đang mở dựng lại bố cục trong ≤ 1 frame.

1.3 Token màu UI (screen-space; nguồn duy nhất cho mọi màn — đồng bộ sang hub ArtStyle §8b)

Luật: UI không áp slot hero INV-01b (INV-01g) nhưng áp INV-01a — không pixel UI nào có S ≥ 45% ở hue 32–62° hoặc 260–290° (để không lẫn tell vàng/tím); ngoại lệ (chỉ phần tử ĐANG biểu diễn tell, dùng đúng #ffd84a/#b14cff + hình ◇/▲/chấm): mũi tên tell ngoài màn, glyph Y/P/N trong recap INV-16 và phụ đề tell, ảnh minh hoạ tell ở Sân Tập/codex/Cài đặt (§4.6 H9). Mọi token dưới đã kiểm: cột "Hue / S".

TokenHexHue / SVai
ui-ink#0b0a10—viền 1 px icon/khung/chữ trên world (= ink)
ui-void#15131d252° / 34%nền màn toàn phần, letterbox (= void)
ui-panel#1d1926258° / 34%mặt panel
ui-panel-2#262131259° / 33%ô trong panel, hàng chẵn danh sách
ui-bevel-lit#3a3348260° / 29%hàng px sáng trên-trái của khung (bevel bậc)
ui-bevel-dark#0f0d15255° / 38%hàng px tối dưới-phải
ui-dim#0b0a10 α 0.60—lớp tối sau popup / tạm dừng (UiPause open/close (snapshot SN_DRAFT; World + Hero dừng) VFX_UI_pause_dim, không blur)
ui-text#f4efe045° / 8%chữ chính, số sát thương thường (= ngà doc 10 §6.5)
ui-text-2#a8a4b0260° / 7%chữ phụ, số phụ
ui-text-off#6b6777255° / 13%chữ/nút khoá, hết tiền
ui-focus#ffffff—con trỏ focus 2 px (UiNavigate (focus mới trên mọi nút/thẻ/nút bản đồ; ẩn khi dùng chuột … VFX_UI_focus_cursor)
ui-warn#d9725a11° / 59%thiếu tiền, cảnh báo xoá, "Khoá Tiến Hoá"
ui-ok#7be08a129° / 45%hồi phục, đủ điều kiện, mua được
ui-hp#c8364a352° / 73%thanh HP hero
ui-hp-lag#f4efe0—đoạn HP vừa mất, trễ 0.40 s rồi lùi 0.25 s
ui-hp-grey#8a8494262° / 11%HP xám H06 (10 §8.2)
ui-shield#dfe6f0215° / 7%khiên, nối sau HP (10 §8.2 "bạc trắng")
ui-dmg-taken#ff5a5a0° / 65%số hero nhận (10 §6.5)
ui-xp#8fc7bd169° / 28%thanh XP (thay vàng demo — INV-01a)
ui-poise#c0c4d0225° / 8%thanh Thế boss/Tinh Anh (bạc, Bible INV-01a)
ui-ult-empty#3a3348—Dư Âm chưa đầy; phần đầy = màu slot hero (HERO_LUT, UltGaugeFull (Dư Âm ULT_GAUGE = 100) VFX_UI_ult_gauge_full)
ui-cur-gold#e9dcc041° / 18%Vàng Mã (giấy ngà dấu mực, cấm vàng bão hoà)
ui-cur-ash#e8e4f0260° / 5%Tro Hồn
ui-cur-shard#cfd8e8218° / 11%Mảnh Vọng
ui-cur-candle#f2ead842° / 11%Nến Canh
ui-ash-eye#f2ead842° / 11%Mắt Tro, ◆ (= ash-eye doc 30 §3.6)
ui-risk#8a3a307° / 65%viền nút ELT_RISK (MapNodeChosen + trạng thái nút: khả dụng (thở) / đã đi (mực đặc) / kh… VFX_UI_map_node_pick)
ui-locked#4a4556258° / 20%ô/hero/trạm khoá
ui-rarity-common#9a95a8canon Bible §6khung COMMON
ui-rarity-rare#5fa8d3canonkhung RARE
ui-rarity-epic#c86a8acanonkhung EPIC
ui-rarity-legend#f4f1ea độngcanonkhung LEGENDARY (chỉ Then Chốt)
ui-rarity-cursed#141016 + viền #d8cfc0canonkhung Lời Nguyền; glyph "—" cái giá #d8cfc0
ui-card-skill#7d7a88253° / 10%thẻ kỹ năng
ui-card-evo#a8683c24° / 64%góc/khung Tiến Hoá [ASSUMED] (doc 13 §9.3: chờ cổng ΔE với slot H06)
  • Thêm màu = thêm token ở bảng này (lý do + màn dùng) trước khi dùng (rule art-style). Màu slot hero chỉ dùng ở: Dư Âm đầy, khung chân dung HUD 1 px, lửa chọn hero (HeroSelected ở Lửa Canh (chọn hero / ult / Dạng Rèn / kỹ năng khởi đầ… VFX_UI_hero_select), icon ghép Edge hero (dấu hero).
  • Mù màu: mọi phân biệt bằng màu ở UI có thêm hình: rarity = số chấm góc thẻ (§1.6), nút bản đồ = icon, tiền = icon riêng, trạng thái = glyph.

1.4 9-slice (UI_Kit atlas, 1 trang 1024², PPU 25, Point, pixelsPerUnitMultiplier 1)

Phong cách: bevel bậc (hàng sáng trên-trái ui-bevel-lit, hàng tối dưới-phải ui-bevel-dark), viền ngoài 1 px ui-ink, ramp 3–4 bậc, chất liệu giấy tang/gỗ cháy/đồng xỉn (ArtStyle §6), không gradient mịn.

Id spriteKích thước nguồnBorder (T/R/B/L)Trạng tháiDùng
NS_PANEL24×248/8/8/8—panel màn, menu trạm, tạm dừng
NS_PANEL_INSET16×165/5/5/5—ô trong panel, danh sách
NS_BUTTON24×166/6/6/6normal · focus · pressed · disabledmọi nút chữ (cao 16)
NS_TAB20×146/6/4/6on · off · focusthanh tab LB/RB
NS_CARD_<R> × 732×4810/10/10/10normal · focus (+2 px nâng) · pickedthẻ draft/thưởng/sạp; <R> = COMMON, RARE, EPIC, LEGEND, CURSED, SKILL, EVO
NS_TOOLTIP16×16 + đuôi 5×34/4/4/4—tooltip, chú thích icon
NS_DIALOGUE32×2410/10/10/10—hộp thoại NPC (giấy tang, mép rách)
NS_NAMEPLATE12×83/3/3/3—nameplate Tinh Anh/mini (world)
NS_BAR_FRAME12×73/3/3/3—khung mọi thanh (HP, XP, Dư Âm, boss)
NS_BOSS_BAR48×124/14/4/14normal · locked (bất tử pha)thanh boss, 2 đầu = quả chuông đồng xỉn
NS_TOAST24×166/6/6/6—toast thành tựu, mở khoá
NS_MAP_PAPER64×6420/20/20/20—tờ bản đồ Hồi (giấy mực, mép cháy)
NS_SLOT28×284/4/4/4empty · filled · cooldown · denied · lockedô kỹ năng/ult/Relic/loadout
  • Đổi skin theo bối cảnh: hub dùng biến thể _wood (gỗ ấm), run dùng _paper (giấy tang lạnh); cùng border, cùng kích thước → 1 prefab.

1.5 Icon & glyph

LoạiKích thước gốc (UI px)NguồnLuật
Item (kỹ năng 96, ult 36, Dạng Rèn 36, Relic 60, Then Chốt 48, EVO 48)32×32vẽ tay (Bible §6: 324)1 vật, 3/4 mặt trước, sáng trên-trái, viền ink (ArtStyle §5)
Edge hero / Edge chung / affix32×32GHÉP bằng script: glyph tag 16×16 × dấu hero 8×8 góc dưới-phải × khung rarity0 vẽ tay (Bible §6)
Pictogram (tag 21, nút bản đồ 11, thưởng 5, tiền 4, mode 5, trạm 8)16×16vẽ tayđọc được ở ×3
Glyph nhỏ (12 STS, 16 Ấn EM, 15 MRN, 12 MUT)8×8vẽ tay (55, Bible §6 + DEC-2026-11-07-05)hình mang nghĩa, không chỉ màu
Glyph nút (5 bộ: bàn phím/chuột · ABXY · ký hiệu hình học · Deck · chạm sau 1.0)11×11 (cùng dòng FNT_M)vẽ tayđổi sống theo thiết bị nhập cuối trong 0.5 s (12 §1.1); chuột chỉ đổi sang KBM khi dịch > 8 px
Portraitpor_<code>_hud 32×32 · _bust 128×128 · _select 192×192doc 30 §5.3không thu nhỏ; HUD dùng _hud

1.6 Thành phần chuẩn (prefab UI_C_*)

Thành phầnKích thước · luậtÂm / FX
Nút UI_C_Buttoncao 16, rộng ≥ 48, đệm ngang 6; chữ button; glyph nút 11×11 bên trái chữ khi là hành động có phím tắtfocus UiNavigate (focus đổi; cooldown 40 ms khi giữ hướng) SFX_UI_nav_move · bấm UiConfirm (A / Enter / click trái) SFX_UI_nav_confirm · khoá UiError (hành động không được phép: thiếu tiền, khoá, ô đầy) SFX_UI_nav_error + rung ±2 px 0.12 s
Con trỏ focuskhung 2 px ui-focus + 1 px ui-ink ngoài + 4 góc ngoặc 4×4 nhịp ra/vào 1 px ở 2 Hz; "Giảm chuyển động" → đứng yênUiNavigate (focus mới trên mọi nút/thẻ/nút bản đồ; ẩn khi dùng chuột … VFX_UI_focus_cursor
Tab UI_C_TabsLB/RB (KB: Q/E, chuột bấm); vòng quanh; hiện glyph LB/RB ở 2 đầuUiTabSwitch (LB/RB, Q/E, click tab) SFX_UI_tab_switch
Thanh trượtbước theo dữ liệu; d-pad trái/phải 1 bước, giữ > 0.4 s → 10 bước/s; chuột kéoUiSliderStep (mỗi bước thanh trượt; pitch = −6..+6 bán cung theo giá … SFX_UI_slider_tick (pitch theo giá trị)
Giữ để xác nhận UI_C_Holdvòng 13×13 quanh glyph; phá huỷ/không hoàn (Bỏ run, xoá save, gột Sẹo, xoá Sổ Thù, đổi Tro Hồn → Nến Canh) = 1.0 s; mua ≥ 500 Tro Hồn hoặc ≥ 10 Mảnh Vọng = 0.5 s (18 §2); Trợ năng "Thời gian giữ" ×0.5–×2.0 nhân cả haiUiHoldStart → UiHoldComplete (giữ để xác nhận 1.0 s); thả sớm = vòng … VFX_UI_hold_ring + UiHoldStart → loop cháy dần (1.0 s mặc định) → UiHoldComplete 'phụt';… SFX_UI_hold_confirm (loop + chốt); thả sớm → vòng lùi 0.15 s
Tooltiphiện sau 0.25 s focus; rộng ≤ 160, ≤ 6 dòng body; neo phải phần tử, lật trái nếu tràn SAFEkhông âm
Popup xác nhận UI_C_Confirm200×72 giữa SAFE; 2 nút; focus mặc định = nút AN TOÀN (Huỷ)UiPopupOpen / UiPopupClose (biến thể 01 open, 02 close) SFX_UI_popup (open/close)
Badge mớichấm "!" 5×7 ui-warn góc trên-phải; tắt khi focus ≥ 0.5 s—
Hiển thị tiền UI_C_Currencyicon 16×16 + số FNT_BW_NUM; đổi số đếm lên 0.4 sCurrencyChanged delta>0 (cuối run, nhặt Mảnh Vọng, đổi ở Chuông Thử) VFX_UI_currency_fly + SFX_UI_currency_gain/spend
Rarity cho mù màusố chấm 3×3 ở góc trên-trái thẻ: COMMON 1 · RARE 2 · EPIC 3 · LEGENDARY ✶ 5×5 · CURSED "—"thay glyph ●◆▲✦ của DraftOpen: 3 thẻ rút ra lệch 0.06 s (cả màn chọn Relic/Edge hero đầu … VFX_UI_card_reveal [ASSUMED] (◆ dành Tro Nhớ, ▲ dành tell P mù màu)

42. Danh mục màn (UiScreen)

Cột World: RUN = World chạy · ×0.15 = World chậm + hero bất tử (draft phòng thường) · 0 = World dừng · HUB = hub chạy. Nhạc = cue doc 32 §3.7 đang phát (màn không đổi cue thì ghi "giữ").

#UiScreenTên hiển thịMục đíchVào từWorldNhạc
1LanguageNgôn ngữchọn ngôn ngữ lần chạy đầuPhotoWarning (lần đầu)——
2ConsentDữ liệu chơi2 câu hỏi: telemetry (chưa chọn sẵn) + báo crash 3 lựa (43 §15.1, 60 PV01)Language——
3TitleMàn tiêu đềTiếp tục run / Chơi / Lộ trình EA (bản EA) / Wishlist + Góp ý (bản demo) / Cài đặt / Credits / Thoátboot, Thoát về tiêu đề—TITLE · màn tiêu đề + menu chính (Cài đặt/Credits mở từ đây giữ nguyên cue dưới SN_DRAFT)… MUS_title_mute_night
4SettingsCài đặt7 tab §6.3Title, Pause, HubPause0giữ
5CreditsDanh đềcuộn credits từ credits.json (§5.7.1)Title, Ending, Cài đặt › Dữ liệu & quyền riêng tư—ENDING · END_BELL_TOLL Hồi Chuông (Gióng chuông sau BS_FINAL) · phần tuyến tính 180 s = f… MUS_end_bell_toll (credit loop)
6HubHud(lớp hub)tiền meta, nhắc tương tác, beat chờhubHUBHUB · HUB_BELL_TOWER Tháp Chuông Gãy (mọi trạm ST_*) · S0 + stem GĐ Phục Dựng đã mở (GD1–… MUS_hub_bell_tower
7HubTravelDịch chuyểndanh sách trạm đã mởMAP trong hubHUB dừng herogiữ
8DialogueThoạibeat NPC (≤ 3 câu)trạm, Dock, BossGate0 (hub) / 0giữ
9HearthLửa Canhtab Kẻ Thức · Hành trang · Phục Dựng · Nâng trạmLửa Canh ST_HEARTH0giữ
10ForgeLò Rèn VọngRèn hero · Dạng Rèn · Ult · Tiến Hoá · Nâng trạmLò Rèn Vọng ST_FORGE0giữ
11DockDepartBến Đòchọn mode, xem seed DAILY, xuất phát, Chìa ĐòBến Đò ST_DOCK0giữ → DepartConfirmed ở ST_DOCK (t=0 cảnh 6 s) SFX_HUB_dock_depart
12LedgerSổ TangCodex · Lịch Sử Run · Bia Mộ · Sổ Thù · Bàn Thờ Ký Ức · Sưu Tập · Bảng Xếp HạngSổ Tang ST_LEDGER0giữ
13TestBellChuông ThửKhăn Tang · Mắt Tro · Đổi Nến CanhChuông Thử ST_TEST_BELL0giữ
14MarketChợ ĐòMở pool · Lễ Vật · Nâng trạmChợ Đò ST_MARKET0giữ
15YardSân Tậpdummy, bài tập, frame data, Thử TháchSân Tập ST_YARDHUB (sân)giữ
16WardrobeTủ Áo TangSkin · Trang trí · Hành trang lưuTủ Áo Tang ST_WARDROBE0giữ
17ActIntro(thẻ Hồi)tên biome + Act Mutator lậtđầu Hồi0cue biome
18MapBản đồ Hồichọn nút kế, xem thưởng, mutatorsau thưởng, d-pad lên / M0giữ (lọc thấp)
19CombatHudHUD§4trong phòngRUNcue biome/boss
20DraftLên cấp / Thưởng Edgechọn 1/3 thẻ, Đổi/Xoá/Giữ/Bỏ qualên cấp, EDGE+×0.15 hoặc 0giữ
21SkillPickKỹ nănghọc/đổi/nâng hạng (1/3) + màn phụ chọn ôthưởng SKILL, thẻ kỹ năng0giữ
22LinchpinPickThen Chốtchọn 1/2 Then Chốt (thưởng BS_B2)sau Draft boss0giữ
23RewardPhần thưởngGOLD/HEAL/META/Relic 1/2–1/3, Relic đầy → Đổi/Phân rãphòng xong0stinger room_clear
24ShopSạp Rong6 ô (SHP) / 4–5 ô (DOCK) + dịch vụSHP, Dock0giữ
25RestLửa Canh Nhỏchọn 1: hồi 40% / nâng hạng 1 kỹ năng / gỡ Lời NguyềnRST0giữ
26SecretMộ Lạcđổi Relic lấy Lời Nguyền 1/2SEC0giữ
27EventSự KiệnEVT_<Bn>_nn: chữ + 2–3 lựaEVT0giữ
28BossGateCổng bosstên boss, Sổ Thù MACRO, gợi ý phản chế, dùng bìnhchọn R60cue boss intro
29DockBến Giữa Hồihồi 25%, Sạp 4 món, Đổi miễn phí, beat Callasau BOSS_REWARD0DOCK · Bến Giữa Hồi (nút DOCK sau boss Hồi I–IV, ≤ 20 s, Sạp Rong + chở đò Calla sang Hồi… MUS_dock_crossing
30PauseTạm dừngTiếp tục · Build · Chỉ số · Relic · Bản đồ · Cài đặt · Báo lỗi · Thoát về tiêu đề · Bỏ runMenu / Esc (trong run)0snapshot pause
31AshInspectTro đang nhớbảng PSP khi giữ View/Tabgiữ View/TabRUNgiữ
32ReviveLửa Gửitrình diễn hồi sinh 1.0 sHP 0 còn Lửa Gửi0giữ
33DeathRecapTàn trorecap INV-16 + "Tro đã học" + bia mộchết×0.3 → 0DEATH · hết Lửa Gửi trong run (mọi biome, mọi mode) · bắt đầu đồng bộ thẻ recap INV-16 = … MUS_death_epitaph
34RunSummaryTổng kết3 tab Kết quả · Build · ThưởngDeathRecap, thắng, bỏ—giữ
35BossVictoryHạ bossthưởng boss, nút "Khắc Sẹo"boss HP 00stinger victory
36FinalChoiceLựa chọn cuối"Gióng chuông" / "Giữ lõi" (khi có Lựa chọn Giữ lõi hiện ở trận BS_FINAL (END_ASH_CROWN). FLAG_DRAVOS_PAGE_READ)BS_FINAL0FINALE · B5 Đỉnh Chuông Câm (Kết, act V): ải 60 s trộn quái 4 Hồi (lớp theo I) + BS_FINAL… MUS_finale_crown
37EndingKết3 kết (+ 12 thẻ kết theo hero ở END_QUIET_SHORE)FinalChoice, BS_TRUE—ENDING · END_BELL_TOLL Hồi Chuông (Gióng chuông sau BS_FINAL) · phần tuyến tính 180 s = f… MUS_end_bell_toll / ENDING · END_QUIET_SHORE Bến Bình Yên (hạ BS_TRUE ở B6) · 210 s tuyến tính đi cùng 12 thẻ… MUS_end_quiet_shore / ENDING · END_ASH_CROWN Mũ Tro (chọn "Giữ lõi" ở BS_FINAL) · 120 s tuyến tính: hero đội Mũ… MUS_end_ash_crown
38RushBuildDựng buildBOSS_RUSH: 4 vòng × 6 thẻ chọn 3 + Relic 1/3DockDepart—giữ
39LeaderboardBảng xếp hạngDAILY/Truy Tuần/ENDLESS/BOSS_RUSH; trạng thái "Không kết nối" · "Điểm đang chờ duyệt" · "Đã quá hạn nộp" (§6.13)Ledger, RunSummary—giữ
40Toast · Confirm · Tooltip(lớp phủ)§1.6mọi nơi——
41PhotoWarningCảnh báo nhạy sáng4 s, bỏ qua sau 1.5 s; nút "Mở Trợ năng ngay" (42 §1.2 bước 1)boot (lần đầu)——
42QuickSetupThiết lập nhanh6 dòng (42 §1.2 bước 3)Consent——
43ChoosePathChọn cách đi3 thẻ preset Thương Xót, mặc định Hành Trình (19 §5.6, §6.2)cảnh mở đầu 20 s sau "Chơi" lần đầu—TITLE · màn tiêu đề + menu chính (Cài đặt/Credits mở từ đây giữ nguyên cue dưới SN_DRAFT)… MUS_title_mute_night giữ
44HubPauseTạm dừngTiếp tục · Cài đặt · Thoát về tiêu đề · Thoát gameMenu / Esc trong hub (41 §4)HUB dừngsnapshot pause
45SaveConflictChọn bản lưu2 thẻ tóm tắt, chọn = UI_C_Hold 1.0 s (43 §7.3 luật 2)boot (khi phát hiện)——
46SaveNoticeThông báo lưu1 nút, 3 mẫu chữ (43 §7.3 luật 3–5)boot, tải save——
47PadLostKết nối lại tay cầmlớp phủ trên Pause/HubPause, tự đóng khi cắm lại (43 §8.1)tay cầm rời0snapshot pause
48RankedNoticeBảng xếp hạngthông báo nộp điểm lần đầu + "Chơi không xếp hạng" (43 §15.1)DockDepart (DAILY/ENDLESS/BOSS_RUSH lần đầu)0giữ
49CrashPromptBáo lỗi crash"Game đã gặp lỗi lần trước. Gửi báo lỗi?" (43 §15.3)boot sau crash, lựa chọn "Hỏi mỗi lần"——
50BugReportBáo lỗimô tả ≤ 500 ký tự + "Đính kèm ảnh"Pause, HubPause › Báo lỗi0giữ
51DemoEndCòn tiếp ở Early AccessWishlist + "Góp ý" + "Chơi lại" (43 §3.1–§3.2)bản demo: BossVictory BS_B1—ENDING · END_BELL_TOLL Hồi Chuông (Gióng chuông sau BS_FINAL) · phần tuyến tính 180 s = f… MUS_end_bell_toll (credit loop)
52EaProgressLộ trình Early Access4 mốc U1/U2/U3/1.0 từ config/ea_roadmap.json (43 §4)Title (bản EA)—giữ
53Loading(chuyển cảnh)ink-wipe 0.25 s + 1 dòng mẹo codex; chỉ hiện khi tải > 0.5 s (50 §5.3)hub → run, DOCK → Hồi kế, Title → hub0giữ (lọc thấp)

53. Điều hướng

3.1 Lệnh UI chung (action map UI trong InputActions, remap được, tách khỏi map Gameplay)

LệnhTay cầmBàn phím / chuộtLuật
Di chuyển focusd-pad, LSmũi tên, WASD; rê chuột = focusgiữ hướng: lặp sau 0.35 s, 12 bước/s; UiNavigate (focus đổi; cooldown 40 ms khi giữ hướng) SFX_UI_nav_move cooldown 40 ms
Xác nhậnAEnter, Space, LMB—
Quay lại / đóngBEsc, RMB (ngoài vùng kéo)ở gốc màn trong run: đóng về game; ở gốc menu trạm: về hub
Tab trái / phảiLB / RBQ / E, bấm tabvòng quanh
Trang / cuộn nhanhLT / RTPgUp / PgDn, con lăndanh sách > 1 trang
Chi tiếtViewTabmở tooltip mở rộng / so sánh (ngoài trận; trong trận View/Tab = ASH_INSPECT)
Hành động phụ 1 / 2X / Ytheo màn (ghi ở từng màn)glyph luôn hiện ở thanh nhắc nút đáy màn
Mở tạm dừngMenuEsc (khi không có màn mở)trong run → Pause; trong hub → HubPause (41 §4: Menu = "Tạm dừng / Cài đặt")
  • Thanh nhắc nút UI_C_PromptBar: dòng đáy mỗi màn (y = 251, cao 12): tối đa 5 cặp glyph + nhãn ≤ 12 ký tự, căn phải; đổi bộ glyph sống.
  • Focus đầu vào mỗi màn ghi ở cột "Focus đầu" của §5–§6; quay lại màn đã mở trong cùng phiên → khôi phục focus cũ.
  • Lưới: không vòng ngang; danh sách dọc: vòng. Điều hướng khai báo tường minh (Selectable.navigation = Explicit), không tự động theo khoảng cách.
  • Chuột: hover đặt focus + tooltip; bấm ngoài panel không đóng màn (tránh mất thẻ draft); con lăn cuộn danh sách dưới con trỏ.
  • Chống bấm nhầm: màn mở do sự kiện (draft, thưởng, cổng boss, chết) khoá xác nhận 0.30 s đầu (input vẫn di chuyển focus) — tránh nút Đánh/ĐÁP đang bấm dở chọn thẻ.
  • Tự tạm dừng theo game.auto_pause_focus (42 §8; bật mặc định, khoá BẬT trên Deck): khi bật, mất focus cửa sổ / overlay Steam → mở Pause (run) ngay trong frame (43 §8.3), trừ màn đã World 0; khi tắt (chỉ PC) cửa sổ mất focus vẫn chạy. Deck suspend và tay cầm rời luôn tạm dừng, không phụ thuộc option (tay cầm rời → Pause/HubPause + lớp phủ PadLost).

3.2 Đồ thị màn

boot → [CrashPrompt nếu crash lần trước + "Hỏi mỗi lần"] → [SaveConflict | SaveNotice nếu có] → (lần đầu) PhotoWarning → Language → Consent → QuickSetup → Title
boot → (không phải lần đầu) Title
Title → Chơi lần đầu (FLAG_FIRST_WAKE) → cảnh mở đầu 20 s → ChoosePath → Loading → Hub(ST_HEARTH)
Title → Chơi → (có run dở? Confirm "Tiếp tục run / Bỏ run") → Loading → Hub | Map(điểm lưu)
Title → Settings | Credits | Thoát ; bản EA: Title → EaProgress ; bản demo: Title → Wishlist (overlay cửa hàng) | Góp ý (form web)
Hub(HubHud) ⇄ HubTravel ; Hub → INTERACT trạm → Hearth | Forge | DockDepart | Ledger | TestBell | Market | Yard | Wardrobe (B → Hub)
Hub → beat chờ → Dialogue → Hub
Hub → Menu → HubPause → Tiếp tục | Settings | BugReport | Thoát về tiêu đề (Confirm) → Title | Thoát game (Confirm)
DockDepart → [RankedNotice lần đầu DAILY/ENDLESS/BOSS_RUSH] → Xuất phát → [RushBuild nếu BOSS_RUSH] → Loading → ActIntro(I) → Map
Map → chọn nút → CombatHud | Shop | Rest | Secret | Event | BossGate
CombatHud → (lên cấp) Draft → CombatHud ; (phòng xong) Reward/Draft/SkillPick → Map
BossGate → CombatHud(boss) → BossVictory → Draft(boss) → [LinchpinPick] → [EvoFuse] → Dock → Loading → ActIntro(n+1) → Map
bản demo: BossVictory(BS_B1) → DemoEnd → Wishlist | Góp ý | Chơi lại → RunSummary → Hub
Hồi IV → Dock → CombatHud(FINALE_TRIAL) → CombatHud(BS_FINAL) → [FinalChoice] → Ending → Credits(lần đầu) → RunSummary
CombatHud → HP 0 → Revive (còn Lửa Gửi) → CombatHud | DeathRecap → RunSummary → Hub | "Thức Lại" → ActIntro(I)
mọi màn run → Menu → Pause → Settings | BugReport | Thoát về tiêu đề | Bỏ run (Hold 1.0 s) → RunSummary
tay cầm rời (mọi nơi) → Pause | HubPause + PadLost → (cắm lại) đóng PadLost, giữ tạm dừng

64. HUD trong trận (CombatHud)

4.1 Vùng (UI px trong SAFE 427×267; giống hệt ở 1920×1080 và 1280×800)

y0 ┌XP══════════════════════════════════════════════════════════════════════┐
   │Lv12 ●●(+2)        ◆◆ NGƯỜI GÁC CHUÔNG                  12:34  ☠ 1.204 │
   │                   [██████████████░░░░|░░░░░] −1.234       ▤ 340        │
   │                   [▓▓▓▓▓▓▓▓░░ Thế]                        Chuỗi 86     │
   │                                                   ┌mục tiêu──────────┐│
   │                                                   │Chuông 2/3  ▬▬▬░  ││
   │                     (vùng giữa 160×100 KHÔNG HUD)  └──────────────────┘│
   │ ▣▣▣ Cộng Hưởng            NÓ ĐÃ ĐỌC BẠN: GẠT          [toast]           │
   │ ◫◫ trạng thái            [tinh · trái]                                 │
   │┌──┐ HP [████████░░] 96/120  ◉◉○          [LB][LT][RT]  ┌──┐           │
   ││☺ │ Dòng [██████░░░]                     [ 3 ][ ✓][ 5 ]  │ULT│          │
   │└──┘ ◇◇ ✚2 ✹                                            └──┘           │
y267└───────────────────────────────────────────────────────────────────────┘
KhốiRect (x, y, w, h)Nội dungẨn khi
XP(4, 1, 419, 3)thanh XP ui-xp, khung không viền (3 px)BossRush (cấp cố định)
LEVEL(4, 6, 60, 9)"Lv 12" FNT_BW_S + pip "+N cấp chờ" 5×5 (LevelQueued (+N cấp chờ) VFX_UI_level_queue_pip, LevelQueued (pip '+N cấp chờ' trên HUD khi lên cấp giữa giao tranh) SFX_UI_level_queue), tối đa 5 pip rồi "+N"—
RUN(343, 6, 80, 36)đồng hồ run FNT_BW_NUM (mm:ss, ≥ 60 phút h:mm:ss; BOSS_RUSH: m:ss.mmm, xem MODE) · kill · Vàng Mã (icon 8×8 + số) · "Chuỗi N" khi N ≥ 10, mờ 3 s sau khi đứt—
MODE(343, 44, 80, 10)trạng thái mode, FNT_BW_S căn phải (bảng dưới) + icon nến tắt 8×8 (cờ mercy_used) ở mép phải (415, 45)STANDARD/CUSTOM không cờ Thương Xót (chừa chỗ, không dời khối khác)
MODS(311, 56, 112, 10)glyph 8×8 Act Mutator của Hồi + "Độ Tang N" khi > 0 (căn phải, ngay dưới icon nến của MODE) + glyph MRN14 nếu có Kẻ Truy TangHồi I không Khăn Tang
OBJECTIVE(311, 68, 112, 30)§4.4phòng BOS, MBS, ELT DUEL (thanh trên thay)
BOSSBAR(93, 7, 240, 36)§4.5không có boss/Tinh Anh Cổng
TOAST(295, 100, 128, 24) ×≤ 2 xếp xuống (tới y 148)thành tựu/mở khoá (AchievementUnlocked (toast góc phải trên; hàng đợi ≤ 3, trong combat … VFX_UI_achievement_toast), 3.0 s, trượt vào 0.15 s từ phảikhi BOSSBAR + boss đang windup P (hoãn)
HINT(113, 170, 200, 12)gợi ý nút onboarding 1 dòng (§10)sau run 3 hoặc Cài đặt "Gợi ý" TẮT
CALLOUT(93, 184, 240, 17)Callout chữ: 'THEN CHỐT' 1.0 s · 'CỘNG HƯỞNG (II)' 1.2 s · 'TIẾN HOÁ/… VFX_UI_callout: 1 cái/lúc, hàng đợi ≤ 2, ưu tiên Tro Nhớ > Then Chốt > Tiến Hoá > Cộng Hưởng > Vỡ Thế; FNT_BW_L ui-text viền ui-ink—
SUBS(143, 203, 140, 27)phụ đề tell (11 §4.2) "[tinh · trái]" ≤ 3 dòng FNT_BW_S, dòng mới đẩy dòng cũ lên, mỗi dòng sống 1.2 sTrợ năng "Phụ đề tell" TẮT (mặc định TẮT)
RESONANCE(4, 207, 120, 10)≤ 8 icon tag 10×10 có đếm ≥ 1, sắp theo đếm giảm; số đếm FNT_BW_S góc; viền bạc khi bậc I, ngà khi bậc II (13 §8.2)không có Edge
STATUS(4, 219, 72, 10)≤ 6 icon trạng thái hero 8×8 + thanh thời gian 8×1 dưới (31 R7)không trạng thái
HERO(4, 231, 32, 32)por_<code>_hud, viền 1 px màu slot; nháy trắng 0.07 s khi trúng đòn—
HP(40, 231, 96, 7)ui-hp + ui-hp-lag + ui-shield nối sau + ui-hp-grey (H06); số "96/120" FNT_BW_S tại (140, 230)—
RES(40, 240, 96, 8)widget tài nguyên theo hud.element (§4.3)—
EYE(140, 240, 23, 7)Mắt Tro: 3 con ngươi 7×5 cách 1, ui-ash-eye (§4.5.3)Tro Nhớ cấp hiệu dụng 0 → mắt nhắm (vẫn hiện)
DASH(40, 250, 22, 6)2–3 hình thoi 6×6 cách 2: đặc = sẵn, đang nạp tô từ dưới lên 0.70 s (INV-12)—
POTION(66, 249, 12, 12)bình + số "×2"; 0 bình → icon ui-locked—
REVIVE(82, 249, 10, 12)icon Lửa Gửi ×n (GD4: 2); dùng → tắt (16 §8.1)MRN06
SKILLSô 1 (309, 239) · ô 2 (337, 239) · ô 3 (365, 239), mỗi ô 24×24§4.2ô chưa mở: khung locked + khoá 8×8
ULT(395, 235, 28, 28)Dư Âm + icon ult §4.2—
Glyph núttrên mỗi ô, y = 227, 11×11LB/LT/RT/Y hoặc Q/E/F/R theo thiết bịCài đặt "Hiện nút trên HUD" TẮT
  • Vùng cấm HUD: rect 160×100 quanh tâm SAFE (133, 83, 160, 100) — không phần tử HUD nào, kể cả toast/callout, chạm vùng này. Cột phải (RUN, MODE, MODS, OBJECTIVE, TOAST) bắt đầu từ x ≥ 295 > 293 = mép phải vùng cấm.

Khối MODE theo mode (19 §5, 43 §6.2; mẫu loc {param}):

ModeChữ MODERUNGhi chú
STANDARD · CUSTOM(ẩn)như thườngchỉ hiện icon nến khi mercy_used
DAILY · Truy Tuần"Lễ Ngày {dd/mm}" / "Truy Tuần {ww}" + thẻ "TẬP" ui-text-off khi lượt không tính điểm ("Chơi tập", 19 §5.2)như thườngthẻ "TẬP" cũng hiện khi ngoại tuyến (43 §13) hoặc đã chọn "Chơi không xếp hạng"
ENDLESS"Tầng {floor} · Vòng {loop}" (loop = floor((floor − 1)/4) + 1, 19 §5.3; Hồi I–IV trước tầng 1: ẩn)như thườngđổi số → nảy ×1.2 0.1 s
BOSS_RUSH"Trận {count}/6"m:ss.mmm = tổng ms thời gian đánh 6 trận (= điểm bảng, 43 §6.2); dừng ở màn nghỉ 6 s và ngoài trậnXP ẩn (đã có)
mọi mode, cờ mercy_used+ icon nến tắt 8×8 ui-text-2—tooltip trong Pause: "Run này không tính bảng xếp hạng và thành tựu Độ Tang" (Bible §4.3)
  • Deck: không khác bố cục. Ở 125% chữ (mặc định Deck) chỉ khối có vai caption đổi FNT_BW_S → FNT_BW_M: LEVEL (h 12), số HP dời xuống (140, 229) — mọi rect trên đã chừa đủ 12 px.

4.2 Ô kỹ năng & Ult

Trạng thái ô kỹ năngHìnhÂm
sẵnicon 24×24 (thu từ 32×32 nguồn bằng bản vẽ riêng 24×24, không scale)—
thời gian hồi chiêuphủ quét kim đồng hồ ui-ink α 0.60; số giây giữa ô FNT_BW_NUM (≥ 1.0 s số nguyên, < 1.0 s 1 chữ thập phân)—
vừa sẵnviền trắng loé 0.12 s—
bấm khi chưa sẵnnháy ô 0.2 s SkillCastDenied (input kỹ năng khi hồi chiêu) VFX_UI_skill_denied, KHÔNG che số giâySkillCastDenied (input kỹ năng khi đang hồi chiêu; HUD nháy ô 0.2 s, … SFX_UI_skill_denied
thiếu tài nguyên (kỹ năng tốn tài nguyên)icon ui-text-off + gạch chéo 1 px ui-warn góc dưới-phải 6×6SkillCastDenied (input kỹ năng khi đang hồi chiêu; HUD nháy ô 0.2 s, … SFX_UI_skill_denied
HOLD đang nạpvòng mốc nạp quanh ô, màu slot hero—
hạng1–3 vạch 3×1 góc trên-phải (I/II/III)—
Ult (Dư Âm)ô 28×28 tô từ dưới lên: phần chưa nạp ui-ult-empty, phần đã nạp màu slot hero α 0.55; 100 → icon ult sáng + UltGaugeFull (Dư Âm ULT_GAUGE = 100) VFX_UI_ult_gauge_full nhịp 1 Hz + UltGaugeFull (Dư Âm ULT_GAUGE = 100), 1 lần, không lặp SFX_SHARED_ult_ready; MRN08 không đổi hình. UL3 đang ở dạng: ô hiện thanh thời gian còn lại dọc mép trái—

4.3 Widget tài nguyên (hud.element, 12 §2.2; rect RES 96×8)

hud.elementHeroHình trong RESCue world (≤ 12 px quanh chân, màu slot + trắng)
BARH01 · H05 · H06 · H07thanh 96×6 + vạch mốc 1×6 ở mỗi thresholds[].value; tên mốc đang bật hiện icon 8×8 cạnh phải (passive 13/12 §2.3) · H06: đoạn HP xám nối sau HP (khối HP)H06 Tôi 80–95 · H07 Đỉnh Hơi
PIPSH02 · H04 · H09 · H11N ô vuông 6×6 cách 2 (H02 6 Đinh · H04 5 Mực · H09 6 Vòng · H11 5 Đất + 3 ô tròn 6×6 = Hố, tách 4 px)—
ON_ENEMYH03chữ "Vang ×N" = số địch đang 3 Vang + chuông 8×8; pip 3 chấm trên vòng chân địch (world)pip trên địch
OBJECTSH105 ô 16×6: mỗi ô thanh 8 s còn lại + glyph nguyên tố kế 6×6—
CHAMBERSH082 ổ × 3 viên 6×6, icon loại đạn theo thứ tự nạp; ổ đang bắn viền trắngNạp Nóng
CLOCKH1216 pip 4×6 cách 2 (Nhịp 0–16) + kim phách 120 BPM chạy đồng hồ Herovòng nhịp quanh chân
  • Đầy tài nguyên (full_event): viền thanh loé 0.2 s, không âm UI riêng (âm do hero). Tài nguyên = 0 không nhấp nháy (INV-11: 0 vẫn ĐÁP).

4.4 Theo dõi mục tiêu (OBJECTIVE, 112×30)

Dòng 1 FNT_BW_S tên mục tiêu ≤ 18 ký tự · dòng 2 tiến độ chữ + thanh 104×3 ui-text-2. Đổi số → nảy ×1.2 0.1 s. Xong → dòng gạch ngang 0.4 s rồi khối mờ 0.3 s.

Mục tiêuDòng 2 (mẫu loc, {param})
PURGE"Diệt {count}/{n}" hoặc "Trụ {seconds} s" (theo luật nào đến trước, 15 §10)
VIGIL"Giữ lò {seconds} s" + thanh HP lò 300
BELLS"Chuông {count}/3"
TIDE"Đợt {count}/3"
NEST"Mộ Mở {count}/3"
GAUNTLET"Qua hành lang" + thanh tiến độ theo quãng đường
CHASE"Đuổi {seconds} s" + mũi tên mép SAFE chỉ kẻ mang báu (luôn hiện)
DUEL · HUNT"Hạ Tinh Anh {count}/{n}" (DUEL dùng BOSSBAR cỡ M, khối này ẩn)
RESCUE"Phá kén {value}/400"
  • CHL: thêm dòng "Thử Lửa ×2" + glyph mutator cục bộ / ◆ thế đáp bật sẵn. Phòng có MESO dịch spawn: ◆ nhỏ cạnh tên mục tiêu suốt phòng.

4.5 Thanh boss, nameplate, Mắt Tro

4.5.1 BOSSBAR (prefab UI_BossBar, 3 cỡ)
CỡDùngTênHPThế
Lboss Hồi, BS_FINAL, BS_TRUEFNT_BW_L ≤ 24 ký tự, căn giữa (93, 7, 240, 17)NS_BOSS_BAR (93, 25, 240, 8)(93, 34, 240, 3) ui-poise
Mmini-boss MBS, Tinh Anh ELT DUELFNT_BW_M ≤ 24 (113, 9, 200, 12)(113, 22, 200, 6)(113, 29, 200, 2)
M×2HUNT (2 Tinh Anh) · boss tách thân (BS_B4 P2)2 tên FNT_BW_S2 thanh 118×6 cách 4, trái = mục tiêu đầu2 thanh 118×2
  • HP: đoạn mất chuyển ui-hp-lag trễ 0.40 s rồi lùi 0.25 s; khấc 1×8 ui-ink ở mỗi ngưỡng pha (bosses/<id>.json pha theo % HP); số tích luỹ "−1.234" FNT_BW_S ui-text-2 bên phải thanh = tổng sát thương trong cửa sổ 1.0 s trượt, biến mất 1.0 s sau cú cuối. Màu HP boss = ui-text ngà trên nền ui-panel (không đỏ — đỏ là HP hero).
  • Thế (bạc): chỉ hiện khi < 100% hoặc trong Vỡ Thế; Vỡ Thế → thanh nháy ui-poise/ui-text 4 Hz suốt 3.0–4.0 s (Giảm chớp → đặc liền + chữ "VỠ THẾ" FNT_BW_S) + callout "VỠ THẾ" (ưu tiên thấp nhất) (10 §4.1).
  • Bất tử chuyển pha: khung đổi locked (2 xích 8×8 hai đầu), HP không giảm, boss_phase_change t = 0 VFX_SHARED_screen_phase; mở lại khi pha mới nhận đòn.
  • Glyph thích nghi (doc 14 §14): 2 khe ◆ 9×9 bên trái tên (cỡ L: (75, 11) và (84, 11); cỡ M: dịch theo tên). Trạng thái mỗi khe: rỗng (viền 1 px ui-ash-eye) = thế đáp đã biết (codex) chưa bật · đặc ui-ash-eye = đang bật · nứt (đặc + vết nứt 1 px ui-ink) = Sẹo. Khe chưa gặp: không vẽ. Bật/đổi thế: khe loé 0.4 s đồng bộ khựng 0.6 s của boss. Tooltip của khe chỉ đọc được trong AshInspect. Khi chơi H02: ◆ thêm viền 1 px #2a2420 (DEC-2026-11-07-11).
  • Thẻ MACRO đầu trận: (113, 44, 200, 24) NS_TOOLTIP "{boss} nhớ: bạn {habit} {pct}%" 2.5 s trong lúc khoá cổng (14 §9.3); cài đặt "Hiện số %" TẮT → "{boss} nhớ: bạn {habit} nhiều".
  • Thanh vào: trượt từ y −20 trong 0.25 s sau thoại mở màn; boss chết: thanh vỡ thành tro 0.4 s đồng bộ hitstop kết.
4.5.2 Nameplate world (NS_NAMEPLATE, canvas WorldUI)
Đối tượngHiệnNội dung
Quái Skhông bao giờ—
Quái Mkhi bị trúng; ẩn sau 2.0 s không trúngthanh HP 16×2 ui-text trên socket overhead +4
Tinh Anh EL_ (phòng thường)luôntên FNT_BW_S ≤ 16 ký tự · HP 32×3 · Thế 32×2 · ≤ 2 glyph Ấn EM 8×8 · tag "◆ {tên thế đáp}" khi có thế đáp bật
Tinh Anh săn đuổi MRN14luônnhư Tinh Anh + glyph móng vuốt 8×8
Mini-boss / bosskhông (dùng BOSSBAR)—
Kẻ mang báu CHASEluônrương 8×8 + thanh thời gian 32×2
  • Nameplate ở lớp dưới tell (Prioritize); khi glint Y/vùng P của chính Tinh Anh đó đang chạy, nameplate α 0.35.
4.5.3 Mắt Tro & AshInspect
  • EYE: 0–3 con ngươi = số thế đáp đang bật ảnh hưởng hero (gồm MICRO ASH) (14 §14); loé 0.4 s khi bật/đổi; ngủ → mờ α 0.4; cấp hiệu dụng 0 (60 s đầu run, 3 run đầu đời, Thương Xót "Tro Nhớ 0", CUSTOM 0, HP < 25%) → mắt nhắm.
  • Giữ View/Tab → AshInspect (World KHÔNG dừng): panel (93, 60, 240, 120) α 0.70, không che vùng cấm HUD quá 50% chiều cao; nội dung: tiêu đề "Tro đang nhớ" · ≤ 3 trục cờ bật "Gạt 72% · Lướt trái 64%" + lệch baseline "▲+30"/"▼−22" · danh sách thế đáp bật: tên kẻ địch · thói quen · mẹo (hint_key) · 2 khe ◆ của boss có tooltip. Nhả nút → đóng 0.1 s. Relic "Sổ Trắng": trục A01 hiện "—".
  • Callout đổi thế: "NÓ ĐÃ ĐỌC BẠN: {habit}" 2.5 s ở CALLOUT + AshVariantOn (Tro Nhớ đổi thế: khựng 0.6 s + ◆ Mắt Tro, ≥ 1.0 s trước… SFX_SHARED_ash_read; MESO đầu phòng: "TRO DỒN BẦY: {name} · +{pct}% Tro Hồn" 2.5 s + AshMesoShift (callout MESO đầu phòng) + stinger surge SFX_SHARED_ash_meso. Phụ đề âm "[Tro đọc]" luôn kèm khi bật phụ đề.

4.6 Đọc được giữa bầy (150–250 quái)

Thứ bậc (cao → thấp, 31 §1): tell Y/P/N → thân hero + vòng chân + x-ray → FX hero → số sát thương → thân địch → FX địch → hazard trang trí → môi trường. HUD nằm trên tất cả về lớp vẽ nên phải nhường bằng độ mờ:

LuậtSố
H1 Nhường tell/heromỗi khối HUD (rect + 8 UI px): nếu giao với vòng chân hero, nguồn glint Y, vùng P, vùng N đang hiện hoặc thân Tinh Anh/boss → α khối → 0.35 trong 0.15 s; hết giao 0.5 s → về α gốc trong 0.25 s. BOSSBAR chỉ xuống 0.60
H2 Độ mờ gốcCài đặt "Độ mờ HUD" 50–100% (mặc định 100%) nhân α mọi khối trừ HP, DASH, ULT (sàn 80%)
H3 Vùng cấmkhông HUD trong (133, 83, 160, 100) (§4.1)
H4 Số sát thương10 §6.5 nguyên văn: ≤ 260 số, ≤ 24 số mới/tick, gộp cùng mục tiêu + cùng loại 0.10 s, DoT 1 số/1.0 s; thứ tự bỏ (1) phụ trên S → (2) thường trên S → (3) thường trên M+ → (4) chí mạng trên S; không bao giờ bỏ số hero nhận, hồi phục, số trên L/XL, chí mạng trên M+. Chí mạng ngà ×1.5 + "!" (không vàng)
H5 Số chạm HUDđiểm sinh số rơi vào rect khối HUD đang hiện (α > 0.35) → dời theo trục y ra ngoài rect + 4; vẫn chạm → bỏ theo H4 (trừ số "không bao giờ bỏ": vẽ ở mép rect)
H6 Cài đặt số"Số sát thương": Đầy đủ (mặc định) · Chỉ chí mạng + boss · Tắt; "Số hero nhận" bật/tắt riêng (mặc định bật)
H7 Callout≤ 1 trên màn, hàng đợi ≤ 2, cùng ưu tiên thay cái cũ; chữ in hoa FNT_BW_L ≤ 28 ký tự VI; sống 1.2 s (Cộng Hưởng, Tiến Hoá) / 2.5 s (Tro Nhớ)
H8 Không chớp HUDkhông khối HUD nào nhấp nháy > 3 lần/s (31 R9); HP thấp nhịp 72 BPM (1.2 Hz)
H9 Không màu tellHUD không dùng #ffd84a/#b14cff; ngoại lệ: mũi tên ngoài màn + chỉ hình hướng tell (§9) dùng đúng màu + hình tell vì chúng LÀ tell
H10 Test 5 sảnh chụp 250 quái B2 và B4, 3 hero (H05, H09, H02) + boss bar + callout: người test chỉ ra hero, HP, Dư Âm, tell Y/P trong 5 s, ≥ 9/10 người (INV-09, DEC-2026-11-07-09)

4.7 Sự kiện HUD (World)

Sự kiệnPhản hồi UIÂm
Hero trúng đònHERO nháy trắng 0.07 s, HP tụt + lag, viền tối màn 40% 0.20 s (10 §6.4), số ui-dmg-taken ×1.3HeroDamaged (kèm SFX_{H}_vo_hurt) SFX_SHARED_hero_hurt_impact
HP < 25%HeroLowHp (HP < 25%) → loop tới HP ≥ 30% VFX_UI_hp_lowhp_pulse (72 BPM) + hero_hp < 25% → loop; ≥ 25% → tắt 0.3 s VFX_SHARED_screen_lowhp viền tối 24 px; Giảm chớp → sáng tĩnh 80%HeroLowHp (HP < 25%) bật loop; tắt khi HP ≥ 30% hoặc chết SFX_SHARED_hero_low_hp
Lên cấp trong phòng thườngpip loé + Draft mở (World ×0.15)LevelUp (trước DraftOpen; nhạc stinger level_up của MusicDirector) SFX_SHARED_level_up
Lên cấp khi Cổng/boss/Elite windupthêm pip "+N cấp chờ"LevelQueued (pip '+N cấp chờ' trên HUD khi lên cấp giữa giao tranh) SFX_UI_level_queue
Cộng Hưởng đạt bậccallout "CỘNG HƯỞNG: {name}" / "CỘNG HƯỞNG II: {name}" 1.2 s; icon RESONANCE đổi viềnResonanceCallout tier=I ('CỘNG HƯỞNG: <tên>' 1.2 s) SFX_UI_resonance_1 / ResonanceCallout tier=II ('CỘNG HƯỞNG II: <tên>' 1.2 s) SFX_UI_resonance_2
Nhặt Vàng Mã / cầu máusố RUN đếm lên; cầu máu: HP tăng + số ui-okPickupCollected type=gold (Vàng Mã CUR_PAPER_GOLD) SFX_SHARED_gold_pickup / heal_orb
Phòng xongOBJECTIVE gạch xong, cửa ready → nhắc INTERACTRoomCleared (+ stinger nhạc room_clear) SFX_SHARED_room_clear
Nhắc INTERACTworld: glyph 11×11 + nhãn ≤ 14 ký tự trên vật ready khi tâm hero trong r24 (12 §1.1); giữ 0.5 s → vòng UI_C_Hold—
Mũi tên ngoài mànTinh Anh/boss ngoài SAFE: mũi tên 7×7 ui-text ở mép SAFE; tell ngoài vùng (11 §4.2, Trợ năng): mũi tên tell ≥ 0.45 s trước va chạm—

75. Màn trong run

Mọi màn 0/×0.15 dưới đây: lớp ui-dim phủ World, HUD ẩn trừ HP + RUN (để người chơi biết máu/tiền khi chọn). Rect theo SAFE; "Focus đầu" = phần tử nhận focus khi mở.

5.1 ActIntro (3.5 s, bỏ qua sau 1 s bằng A/Enter — 16 §7.3)

Phần tửRectChuyển động
"HỒI II" FNT_BW_XL + tên biome FNT_BW_L(63, 80, 300, 40)chữ hiện từng hàng px từ trên xuống 0.3 s (mực thấm)
Thẻ Act Mutator (từ Hồi II)(138, 130, 150, 60): glyph 16×16 + tên + 2 dòng bodylật thẻ 1.5 s (16 §7.2); DAILY: 2 thẻ mutator cạnh nhau

5.2 Map (bản đồ Hồi; mở bằng d-pad lên / M ở bất kỳ lúc nào trong run để XEM — chọn nút chỉ khi ở trạng thái MAP)

VùngRectNội dung
Tờ bản đồ(110, 4, 207, 243) NS_MAP_PAPERlưới 6 hàng × 3 làn: R1 dưới (y = 224), BOS trên (y = 24); khoảng hàng 40, khoảng làn 54, jitter ±3 (giữ tỉ lệ làn/hàng của 16 §2.1 ≈ 4:3)
Núticon 16×16 tâm tại toạ độ lưới11 pictogram loại nút; BOS/MBS icon 24×24 (×1.5, MapNodeChosen + trạng thái nút: khả dụng (thở) / đã đi (mực đặc) / kh… VFX_UI_map_node_pick); ELT_RISK viền 1 px ui-risk + 2 lưỡi chéo; EVT = "?" (UP_DOCK_1 → icon loại sự kiện); MRN14 thêm móng vuốt 8×8
Icon thưởng8×8 dưới-phải nútEDGE+ · GOLD · SKILL · HEAL · META; RSC lần đầu Hồi II: icon mở hero; CHL: "×2" FNT_BW_S
ĐườngMapOpen (đường R1→R6 hiện) + MapNodeChosen (đường đã chọn đậm lên) VFX_UI_map_path_inkmực nét gạch (không chấm tròn — dành vùng N); đã đi = mực đậm; có thể đi = mực nhạt nhấp 1 Hz; không với tới = mờ α 0.35
Vị trí hiện tạichân dung por_<code>_hud thu 16×16 vẽ riêngtrên nút vừa xong
Trái(4, 24, 102, 200)"Hồi II · Đầm Vải Liệm" · thẻ Act Mutator (glyph + tên + 3 dòng) · "Độ Tang N" + ≤ 15 glyph MRN 8×8 · HP, bình, Vàng Mã, Relic n/3
Phải(321, 24, 102, 200)nút đang focus: tên loại FNT_BW_M · mô tả 3 dòng body · thưởng · thời lượng ước tính "~60 s" (16 §3.1) · cảnh báo "Thử Lửa: {mutator}" / "Tinh Anh có thế đáp"
Nhắc núty 251A Chọn · X Đổi làn (UP_DOCK_2, R4, 1 lần/run) · B Đóng (khi xem) · Menu Tạm dừng

5.3 Draft (lên cấp / EDGE+; luật 13 §2–§4)

VùngRectNội dung
Tiêu đề(63, 6, 300, 17)"LÊN CẤP {n}" hoặc "PHẦN THƯỞNG" FNT_BW_L; draft boss: "THƯỞNG BOSS"
Đồng hồ tự chọn(183, 24, 60, 2)chỉ draft phòng thường (World ×0.15): thanh 6.0 s lùi; mọi input điều hướng đặt lại 6.0 s; tạm dừng dừng đồng hồ
3 thẻx = 14 / 150 / 286, y = 30, mỗi thẻ 128×176§5.3.1; 4 thẻ (LV04): x = 4 / 110 / 216 / 322, thẻ 101×176, mọi hộp trong thẻ rộng 89, hiệu ứng 89 × 74 (6 dòng ở 125%)
Lượt(14, 212, 400, 12)"Đổi {n} · Xoá {n} · Giữ {n}" + glyph; hết lượt → ui-text-off
Nhắc núty 251A Chọn · Y Đổi · X giữ Xoá · LB Giữ · B giữ Bỏ qua (+15 Vàng Mã) · KB: Enter/R/Del/G/Backspace giữ (13 §4.2)
  • Focus đầu: thẻ ô 1 (ô bảo đảm tag, = thẻ tự chọn). Trái/phải giữa thẻ, không vòng. Chuột: rê = focus, LMB chọn, RMB = Xoá (giữ 0.5 s).
  • Khoá xác nhận 0.30 s đầu (§3.1). Hero bất tử suốt màn + 0.5 s sau chọn (World ×0.15) — màn không hiện gì thêm.
  • Xoá Edge là nửa công thức Tiến Hoá → popup UI_C_Confirm "Khoá Tiến Hoá: {name}" (ui-warn), focus mặc định Huỷ (13 §4.2).
  • Hàng đợi nhiều draft: mở liên tiếp, giữa 2 draft 0.2 s, tiêu đề "LÊN CẤP {n} · còn {count}".
5.3.1 Thẻ (UI_Card, 128×176; nội dung sinh từ mẫu câu params)
PhầnRect trong thẻLuật
KhungNS_CARD_<R>rarity; Then Chốt = LEGENDARY động Thẻ LEGENDARY/Then Chốt hoặc Tiến Hoá đang hiện trong draft (loop tới… VFX_UI_card_frame_legend (≤ 1/draft); Lời Nguyền Thẻ/Relic Lời Nguyền RL049–RL060 hiện hoặc được chọn VFX_UI_card_cursed
Chấm rarity(4, 4)1/2/3 chấm · ✶ · "—" (§1.6)
Tên(8, 8, 112, 24)name ≤ 2 dòng, căn giữa
Icon(48, 34, 32, 32)icon ghép / vẽ tay
Tag(8, 70, 112, 10)≤ 2 chip: glyph tag 8×8 + tên caption
Hiệu ứng(8, 82, 112, 62)body ≤ 96 ký tự VI, ≤ 2 mệnh đề, số thật theo chỉ số hiện tại (13 §2.3, §5.9); Relic Lời Nguyền: dòng 2 bắt đầu "—" #d8cfc0
Chân(8, 148, 112, 20)trái "Cộng Hưởng {count}/3" (sau bậc I: "/5"); phải "Hạng I → II" nếu là thẻ nâng hạng
Góc đồng Tiến Hoá(112, 4, 12, 12)khi thuộc công thức đã lộ (13 §9.3); tooltip View/Tab "Tiến Hoá: {name}"
Ghim Giữ(58, 0, 12, 8)thẻ Giữ từ draft trước (ô cuối)
Nhãn "mới"(96, 160, 24, 9)mục pool vừa mở ở Chợ Đò, lần gặp đầu (18 §6.5)

5.4 SkillPick · LinchpinPick · Tiến Hoá

MànBố cụcLuật
SkillPick3 thẻ SKILL như §5.3 (tiêu đề "KỸ NĂNG"); ≥ 1 thẻ Nâng hạng nếu hợp lệchọn "Đổi" → màn phụ: 3 ô hiện tại 28×28 + tên (x 120 / 200 / 280, y 100) + "Huỷ"; chọn ô bị thay → kỹ năng mới hạng I (13 §6.3); SkillLearned / SkillSwapped / SkillRankUp (draft SKILL, hub chọn 2 kỹ… SFX_UI_skill_learn
LinchpinPick2 thẻ LEGENDARY x = 80 / 219, tiêu đề "THEN CHỐT"chỉ sau draft boss BS_B2 khi Lv ≥ 11 (DEC-2026-11-07-14; 13 §5.6); không Đổi/Xoá/Giữ/Bỏ qua; B không đóng — phải chọn 1 (13 §5.6 không có lựa bỏ)
Tiến Hoá (trình diễn, không màn)sau khi Draft đóng: World ×0, 0.8 s (EVO1–3) / 1.5 s (EVO4): 2 icon nguồn bay từ vị trí thẻ vào giữa thành icon đồng 32×32 + callout "TIẾN HOÁ: {name}" / "THỨC TỈNH VŨ KHÍ"EvolutionFuse (draft đóng → World ×0 0.8 s EVO1–3 / 1.5 s EVO4) VFX_UI_evo_fuse + EvolutionFuse (draft đóng → World ×0 0.8 s EVO1–3 / 1.5 s EVO4; 2 ico… SFX_UI_evo_fuse; hero bất tử + 0.5 s (13 §9.4)

5.5 Reward · Rest · Secret · Event · Shop · Dock · BossGate

MànBố cục (rect SAFE)Phần tử & trạng tháiFocus đầu · nútÂm / FX
Rewardpanel (93, 30, 240, 190) NS_PANEL; tiêu đề "PHÒNG SẠCH"dòng thưởng chung: "+8% HP" · Tro Hồn · Vàng Mã (đếm lên 0.4 s); thưởng icon: GOLD số · HEAL thanh HP tăng · META "+60 Tro Hồn · 1 trang Sổ Tang"; EDGE+/SKILL → mở Draft/SkillPick sau 0.4 s; Relic (ELT 1/2, ELT_RISK/MUT05 1/3, MBS 1/2 + Mảnh Vọng): thẻ Relic 128×176 dàn ngangthẻ 1 · A Nhận · B (không đóng khi còn lựa)RewardPanelOpen (Relic chọn 1/2 hoặc 1/3, Lễ Vật, bảng tiền cuối run) VFX_UI_reward_reveal, RewardPanelOpen (thưởng phòng: chọn Relic 1/2 hoặc 1/3 ELT_RISK, thẻ … SFX_UI_reward_reveal; Relic RelicChestOpen (rương Relic/thưởng phòng mở) SFX_SHARED_relic_chest
Reward — Relic đầy2 lựa dưới thẻ: "Đổi lấy Relic đang có" · "Phân rã"Đổi → danh sách Relic đang có (Lời Nguyền xám, không chọn được); Phân rã → 2 nút "+80 Vàng Mã" / "+1 hạng Edge" (→ danh sách Edge chưa max) (13 §10.1)"Đổi" · B lùi 1 bướcDraftReroll (Đổi, biến thể 01) · DraftBanish (Xoá, 02) · DraftHold (G… SFX_UI_card_edit
Rest3 thẻ lựa 128×120 (x 14 / 150 / 286, y 50)"Hồi 40% HP" (xem trước HP sau hồi) · "Nâng hạng 1 kỹ năng" (→ chọn ô) · "Gỡ 1 Relic Lời Nguyền" (chỉ hiện khi có)thẻ 1 · AUiConfirm (A / Enter / click trái) SFX_UI_nav_confirm; hồi: hero_heal t = 0 VFX_SHARED_heal_pulse
Secretchữ Mộ Lạc 2 dòng (63, 20, 300, 24) + 2 thẻ Lời Nguyền x 80 / 219 + Relic sẽ mất (icon 32 + tên, viền ui-warn)chưa có Relic: dòng "+80 Vàng Mã"thẻ 1 · A · không B khi đã vào (phải chọn)DraftPick/hiện thẻ Relic Lời Nguyền RL049–RL060 SFX_UI_card_cursed
Eventtranh 160×90 (8, 20) · chữ sự kiện (176, 20, 243, 90) body ≤ 420 ký tự · 2–3 nút lựa (176, 120 + 20k, 243, 16)mỗi lựa: chữ ≤ 48 ký tự + dòng hệ quả caption ("−60 Vàng Mã · +1 Relic"); không đủ điều kiện → ui-text-off + lý dolựa 1 · AUiPopupOpen / UiPopupClose (biến thể 01 open, 02 close) SFX_UI_popup; kết quả → Reward
Shop (SHP 6 ô / DOCK 4–5 ô)lưới 3 × 2 ô 128×76 (x 14 / 150 / 286, y 30 / 110); dịch vụ (14, 192, 400, 16): "Mua Đổi 40" · "Mua Xoá 60" · "Phân rã Relic"; dòng Bà Mott 1 câu (14, 14, 400, 12)ô: icon 32 + tên + giá ui-cur-gold; thiếu tiền → giá ui-warn, A → rung ±2 px + UiError (hành động không được phép: thiếu tiền, khoá, ô đầy) SFX_UI_nav_error; đã mua → dấu "ĐÃ BÁN"; Relic đầy → ô Relic đổi Edge (canon ẩn Relic); lượt mua dịch vụ ≤ 2/loại/lần ghé hiện "{count}/2"ô 1 · A Mua · View chi tiết · B RờiShopPurchase (Sạp Rong mua bằng Vàng Mã) VFX_UI_shop_buy, ShopPurchase (Sạp Rong SHP/DOCK, mua bằng Vàng Mã; Chợ Đò mở pool dùn… SFX_UI_shop_buy
Docktiêu đề "BẾN GIỮA HỒI" + 4 nút dọc (163, 70, 100, 16 + 20k): "Sạp Rong" · "Đổi thẻ miễn phí (1)" (dùng trong Sạp) · "Nói với Calla" (beat, khi có) · "Sang Hồi {act}"hồi 25% HP tự áp khi vào (số ui-ok bay lên HP); không đồng hồ trên màn (ngân sách ≤ 20 s là mục tiêu thiết kế, không ép)"Sạp Rong" · B = không (phải "Sang Hồi")DOCK · Bến Giữa Hồi (nút DOCK sau boss Hồi I–IV, ≤ 20 s, Sạp Rong + chở đò Calla sang Hồi… MUS_dock_crossing; DepartConfirmed ở ST_DOCK (t=0 cảnh 6 s) SFX_HUB_dock_depart khi rời
BossGatetên boss FNT_BW_XL (13, 60, 400, 22) + danh hiệu FNT_BW_M; icon boss 64×64 (181, 100); thẻ MACRO (113, 170, 200, 24); gợi ý phản chế (UP_TEST_BELL_3) (113, 198, 200, 24); nút "Uống bình" (khi có bình, HP < 100%)4 s rồi tự vào trận; bỏ qua sau 1 s (A); dùng bình không tốn thời gian (16 §7.1)"Vào trận" · X Uống bìnhUiPopupOpen / UiPopupClose (biến thể 01 open, 02 close) SFX_UI_popup; stinger boss_intro

5.6 Pause (Menu / Esc; World + Hero dừng; nhạc snapshot pause; UiPause open/close (snapshot SN_DRAFT; World + Hero dừng) VFX_UI_pause_dim, UiPause open/close (Start / Esc; snapshot SN_DRAFT; UI ignoreListener… SFX_UI_pause)

VùngRectNội dung
Cột lệnh(14, 30, 100, 200)Tiếp tục · Build · Chỉ số · Relic · Bản đồ · Cài đặt · Báo lỗi · Thoát về tiêu đề · Bỏ run (9 nút, cách 20, nút 16 → y 30…190)
Nội dung(122, 30, 291, 215) NS_PANELtheo lệnh đang focus (xem trước ngay khi focus, không cần A)
Đầu(14, 8, 400, 17)"TẠM DỪNG" · hero · mode · Hồi/hàng · đồng hồ run (đã dừng) · seed (CUSTOM/DAILY)
LệnhNội dung panel
------
Buildlưới Edge 32×32 (8 cột) có vạch hạng; 3 ô kỹ năng + hạng; Ult + Dạng Rèn; tiến độ 6 Cộng Hưởng hero + Cộng Hưởng chung "n/3 · n/5"; công thức Tiến Hoá đã lộ (2 icon + điều kiện); Then Chốt; View = chi tiết thẻ focus
Chỉ sốbảng chỉ số hiệu dụng (10 §2.1): sát thương, tốc đánh, chí mạng, cửa sổ ĐÁP, nạp Lướt, Dư Âm/s, hồi phục ×; icon "đã giảm dần" / "chạm trần" (13 §15.1)
Relicn/3 (GD3: /4) Relic + 2 affix mỗi cái; UP_FORGE_2: lệnh "Cuộn lại 1 affix" (1 lần/run) → chọn affix → UI_C_Confirm → kết quả (13 §11.1)
Bản đồMap chế độ xem
Cài đặtSettings đủ 7 tab; bật bất kỳ mục Thương Xót giữa run → UI_C_Confirm "Run này không tính bảng xếp hạng và thành tựu Độ Tang" (Bible §4.3), cờ giữ tới hết run kể cả khi tắt lại
Báo lỗimô tả 1 dòng "Gửi log để đội sửa lỗi" + A → BugReport (§6.13); có ở bản phát hành và qa/rc (43 §15.3)
Thoát về tiêu đềUI_C_Confirm "Tiến độ trong phòng này sẽ mất; run giữ ở điểm lưu cuối" (16 §11)
Bỏ runUI_C_Hold 1.0 s; chữ "Tính như chết: giữ tiền meta, mất Vàng Mã" (+ DAILY: "Nộp điểm hiện tại, dùng hết lượt") (16 §8.2)
  • Focus đầu: Tiếp tục. B/Menu = Tiếp tục. Mở/đóng: panel trượt 8 px + mờ 0.12 s.

5.7 Chết, hồi sinh, thắng, tổng kết, kết

MànBố cụcLuật & chuyển độngÂm
Revivekhông panel; callout "LỬA GỬI" + icon REVIVE bay từ HUD vào hero 0.4 s1.0 s bất tử (10 §8.3); icon REVIVE tắtHeroRevive (Lửa Gửi hồi sinh + sóng đẩy r120) SFX_SHARED_revive_ember
DeathRecapthẻ recap (63, 14, 300, 128): tiêu đề "TÀN TRO" FNT_BW_L + 5 dòng "{name} · {glyph Y/P/N} · −{value} · {seconds} s trước" + dòng kết liễu đậm; ◆ cạnh đòn của thế đáp · "Tro đã học" (63, 146, 300, 56): top 3 trục + 1 mẹo/trục · bia mộ (163, 206, 100, 40) EpitaphShown (bia mộ TMB_Hxx cuối recap chết) VFX_UI_epitaph_stamp (tên hero + nguyên nhân + Hồi)World ×0.3 trong 0.5 s → ui-dim → mỗi dòng hiện cách 0.25 s; A lần 1 = hiện hết, lần 2 = RunSummary; glyph Y/P/N dùng hình + màu tell (ngoại lệ H9)DeathRecapLine / dòng 'Tro đã học' (INV-16), 1 lần/dòng, cách ≥ 0.25 s SFX_UI_recap_line mỗi dòng, EpitaphShown (bia mộ đóng dấu cuối recap, TMB_Hxx) SFX_UI_epitaph; DEATH · hết Lửa Gửi trong run (mọi biome, mọi mode) · bắt đầu đồng bộ thẻ recap INV-16 = … MUS_death_epitaph
BossVictorytiêu đề "{boss} ĐÃ NGÂN" (63, 30, 300, 17); dòng thưởng Tro Hồn / Mảnh Vọng / XP (113, 60, 200, 60); nút "Khắc Sẹo" (sau END_BELL_TOLL, chỉ BS_B1–BS_B4, ≤ 2/boss) + "Tiếp"Khắc Sẹo → UI_C_Confirm: thế đáp sẽ bật + "+20% Tro Hồn từ boss này" (14 §9.4)CurrencyChanged delta>0 (cuối run, nhặt Mảnh Vọng, đổi ở Chuông Thử) VFX_UI_currency_fly, CurrencyChanged delta>0 curId ∈ {CUR_SOUL_ASH 01, CUR_ECHO_SHARD 02, … SFX_UI_currency_gain
RunSummary3 tab LB/RB (14, 8, 400, 14): Kết quả · Build · Thưởng (16 §9.1) ; nội dung (14, 26, 400, 220)bỏ qua sau 2 s; "Thức Lại" Y/R (ẩn run 1–2, 18 §12) · "Về Tháp" A/Space; Thưởng: tiền bay vào ô tổng, thanh MR chạy (lên MR → UnlockGranted (hero/Dạng Rèn/ult/mode/trang codex) và MasteryRankUp VFX_UI_unlock_seal + MasteryRankUp (lên MR01–MR20 / xong TT1–TT5) SFX_UI_mastery_rank), tiến độ mở khoá ≤ 3 dòng; DAILY/ENDLESS/BOSS_RUSH: điểm đếm ScoreCount (DAILY/ENDLESS/BOSS_RUSH, bảng điểm cuối) VFX_UI_score_count (A nhảy tới kết quả) + hạng tạmUiTabSwitch (LB/RB, Q/E, click tab) SFX_UI_tab_switch, ScoreCount (đếm điểm DAILY/ENDLESS/BOSS_RUSH; pitch +1 bán cung mỗi 1… SFX_UI_score_tick
FinalChoice2 nút lớn 160×24 (40, 120) "Gióng chuông" · (227, 120) "Giữ lõi" + chữ Dravos 2 dòngchỉ khi Lựa chọn Giữ lõi hiện ở trận BS_FINAL (END_ASH_CROWN). FLAG_DRAVOS_PAGE_READ; không đồng hồ; focus đầu "Gióng chuông"; xác nhận = UI_C_Hold 1.0 s (quyết định kết)UiHoldStart → loop cháy dần (1.0 s mặc định) → UiHoldComplete 'phụt';… SFX_UI_hold_confirm
Endingtoàn màn cảnh; END_QUIET_SHORE: 12 thẻ kết theo hero (thẻ hero đang chơi hiện đầu)không tương tác; bỏ qua: giữ A 1.0 s, chỉ từ lần xem thứ 2 (16 §7.3)ENDING · END_BELL_TOLL Hồi Chuông (Gióng chuông sau BS_FINAL) · phần tuyến tính 180 s = f… MUS_end_bell_toll / ENDING · END_QUIET_SHORE Bến Bình Yên (hạ BS_TRUE ở B6) · 210 s tuyến tính đi cùng 12 thẻ… MUS_end_quiet_shore / ENDING · END_ASH_CROWN Mũ Tro (chọn "Giữ lõi" ở BS_FINAL) · 120 s tuyến tính: hero đội Mũ… MUS_end_ash_crown
Creditscột chữ giữa 300 rộng (63, 0 → cuộn), tiêu đề mục FNT_BW_L ui-text, dòng FNT_BW_S ui-text-2; nội dung từ credits.json (§5.7.1)A giữ = ×4; B thoát (lần đầu sau END_BELL_TOLL: giữ B 1.0 s)credit loop của ENDING · END_BELL_TOLL Hồi Chuông (Gióng chuông sau BS_FINAL) · phần tuyến tính 180 s = f… MUS_end_bell_toll
RushBuild4 vòng: 6 thẻ thu gọn 128×84 (2 hàng × 3) chọn đủ 3 (bật/tắt) rồi "Xác nhận"; sau đó 3 Relic chọn 1đếm "Đã chọn {count}/3"; tổng 12 Edge + 1 Relic (16 §10.4)DraftPick rarity=COMMON|RARE|EPIC (biến thể 01 COMMON, 02 RARE, 03 EP… SFX_UI_card_pick
5.7.1 Nguồn nội dung Credits (Assets/_Project/Data/credits.json, sinh lúc build)
KhoáLuật
Định dạng{ "sections": [ { "title_key": "<khoá loc>", "lines": ["<chuỗi>", …] } ] }; title_key = khoá loc (credits.team, credits.audio_ccby, credits.fonts, credits.oss, credits.thanks); lines không dịch (tên người, tên tệp, giấy phép giữ nguyên văn)
Thứ tự mục1 Đội ngũ · 2 Âm thanh (CC BY) · 3 Phông chữ · 4 Thư viện mã nguồn mở · 5 Cảm ơn
1 Đội ngũnhập tay: Assets/_Project/Data/credits_team.json (vai · tên)
2 Âm thanh (CC BY)gộp Assets/_Project/Audio/sfx-credits.json (32 §11, tạo bởi make_credits của bf-sfx): mọi dòng CC BY chép nguyên văn ("tên âm" by tác giả, giấy phép, link); CC0 không bắt buộc, liệt kê gộp 1 dòng "Âm CC0 từ Freesound"
3 Phông chữthư mục licenses/: font pixel Latin + tiếng Việt (OFL) và font pixel CJK (50 §12, Bible §10.3): tên font · tác giả · "SIL Open Font License 1.1"; toàn văn OFL nằm ở licenses/ đi kèm build
4 Thư viện mã nguồn mởthư mục licenses/: wrapper C# Steamworks (50 §10) + mọi gói UPM bên thứ ba có giấy phép yêu cầu ghi công: tên · giấy phép · dòng bản quyền nguyên văn
5 Cảm ơnnhập tay: người chơi thử, nhóm cộng đồng (credits_team.json mục thanks)
Kiểm CIbước build credits_check: mỗi id SFX trong audio_sfx.csv (32 §4.2) có nguồn Freesound CC BY (mục tương ứng trong sfx-credits.json, 32 §11) phải có đúng 1 dòng trong mục 2; mỗi tệp trong licenses/ phải có ≥ 1 dòng ở mục 3 hoặc 4; thiếu → build FAIL (= AT-08 32 §14)

86. Màn ngoài run

6.1 Khởi động & tiêu đề

MànBố cụcPhần tử · luậtFocus đầuÂm
PhotoWarningtoàn màn ui-void; chữ giữa (63, 90, 300, 40) FNT_BW_M song ngữ VI/EN "Trò chơi có chớp sáng và chuyển động nhanh. Có thể giảm ở Trợ năng." · nút "Mở Trợ năng ngay" (163, 150, 100, 16) · glyph A "Tiếp" ở UI_C_PromptBarhiện 4 s rồi tự sang Language; A/Enter bỏ qua chỉ sau 1.5 s (trước đó A bị nuốt, không âm lỗi); "Mở Trợ năng ngay" → Settings tab Trợ năng (chỉ nhóm §4 nhạy sáng + Giảm chuyển động hiện đầu), B → quay lại luồng ở Language; chỉ lần chạy đầu (42 §1.2 bước 1); không chớp, không tween ngoài mờ vào 0.25 s"Mở Trợ năng ngay"UiConfirm (A / Enter / click trái) SFX_UI_nav_confirm khi A
Languagedanh sách giữa (143, 40, 140, 200), mỗi dòng 18tên ngôn ngữ viết bằng chính chữ của nó; chỉ hiện ngôn ngữ đã ship (43 §12.1); Deck/HĐH gợi ý ngôn ngữ hệ thống lên đầungôn ngữ hệ thốngUiConfirm (A / Enter / click trái) SFX_UI_nav_confirm
Consentpanel NS_PANEL (63, 40, 300, 180): tiêu đề (71, 46, 284, 14) FNT_BW_L "Dữ liệu chơi" · khối 1 (71, 64, 284, 60) · khối 2 (71, 128, 284, 60) · link "Chính sách quyền riêng tư" (71, 192, 140, 12) · nút "Tiếp" (283, 200, 72, 16)Khối 1 telemetry: câu "Gửi dữ liệu chơi ẩn danh để cân bằng game" (≤ 160 ký tự mô tả) + 2 nút "Đồng ý" (79, 104, 100, 16) · "Không" (191, 104, 100, 16) cùng cỡ, cùng NS_BUTTON, cùng màu, không nút nào được chọn sẵn; chọn → nút đó vẽ trạng thái pressed + dấu ✓ 7×7. Khối 2 báo crash: "Báo lỗi khi game bị crash" + bộ chọn 3 nấc (d-pad trái/phải) "Luôn gửi · Hỏi mỗi lần · Không bao giờ", mặc định Hỏi mỗi lần. Link → overlay Steam tới trang chính sách (overlay tắt → trình duyệt, 43 §10) · "Tiếp" (A) khoá (NS_BUTTON disabled, ui-text-off, A → UiError (hành động không được phép: thiếu tiền, khoá, ô đầy) SFX_UI_nav_error) cho tới khi khối 1 đã chọn; B không bỏ qua màn; không có "Bỏ qua" (43 §15.1, 60 PV01). Đổi lại ở Cài đặt › Dữ liệu & quyền riêng tưtiêu đề panel (đọc màn hình đọc cả đoạn; d-pad xuống → "Đồng ý"/"Không" không chọn sẵn)UiConfirm (A / Enter / click trái) SFX_UI_nav_confirm khi chọn; UiError (hành động không được phép: thiếu tiền, khoá, ô đầy) SFX_UI_nav_error khi "Tiếp" còn khoá
QuickSetuptiêu đề "Thiết lập nhanh" (14, 8, 400, 17) · danh sách 6 dòng (14, 30, 250, 120), dòng 20 · xem trước (270, 30, 143, 120): câu mẫu / ảnh tell trước-sau 128×72 · nút "Xong" (163, 220, 100, 16)6 dòng theo 42 §1.2 bước 3, mỗi dòng trái/phải đổi giá trị, áp ngay: 1 Cỡ chữ 100/125/150% (a11y.text_scale; xem trước "Ừ, đã hiểu rõ: ổn định, vững vàng.") · 2 Tell mù màu tắt/bật (a11y.tell_shapes; ảnh trước/sau) · 3 Phụ đề tell tắt/bật (a11y.tell_subs) · 4 Rung màn 100/50/0% (cam.shake) · 5 Giảm chớp tắt/bật (a11y.flash_reduce) · 6 Preset điều khiển (input.preset: Mặc định / Không chuột / 1 tay trái / 1 tay phải / Bàn phím 1 tay, 41 §8.2); mặc định = giá trị PC/Deck của 42; mọi dòng bỏ qua được; "Xong"/B/Menu → Titledòng 1 Cỡ chữUiSliderStep (mỗi bước thanh trượt; pitch = −6..+6 bán cung theo giá … SFX_UI_slider_tick khi đổi; UiConfirm (A / Enter / click trái) SFX_UI_nav_confirm "Xong"
Titlelogo pixel (63, 24, 300, 90) · menu dọc (163, 118, 100, 16 + 20k), ≤ 6 nút (tới y 234) · phiên bản FNT_BW_S (343, 255)bản chính: Tiếp tục run (chỉ khi có run_active.json) · Chơi · Lộ trình EA (chỉ bản EA → EaProgress) · Cài đặt · Credits · Thoát (UI_C_Confirm) · bản demo: Tiếp tục run · Chơi · Wishlist (ActivateGameOverlayToStore tới app chính; overlay tắt → trình duyệt, 43 §3.2) · Góp ý (form web, URL trong config) · Cài đặt · Thoát (Credits xem ở Cài đặt › Dữ liệu & quyền riêng tư); nền: tháp chuông gãy động, tro rơiTiếp tục run, không thì ChơiTITLE · màn tiêu đề + menu chính (Cài đặt/Credits mở từ đây giữ nguyên cue dưới SN_DRAFT)… MUS_title_mute_night phát từ mẫu 0 khi logo hiện xong
ChoosePathtiêu đề "Chọn cách đi" FNT_BW_XL (13, 14, 400, 22) · 3 thẻ preset 128×150 tại x 14 / 150 / 286, y 44 (NS_CARD_SKILL) · dòng chú thích (14, 202, 400, 24) body · nút "Bắt đầu" (163, 230, 100, 16)thẻ trái→phải: Kể Chuyện · Đồng Hành · Hành Trình (mặc định); mỗi thẻ: tên FNT_BW_L + 4 dòng giá trị (19 §6.2, 42 §9: Sát thương nhận · ĐÁP · Tự ngắm · Phòng Thủ Tự Động) + dòng Verb giữ Giữ/Bật (Y đổi; chỉ Kể Chuyện/Đồng Hành) + nhãn "Không tính bảng xếp hạng" ui-text-2 trên Kể Chuyện/Đồng Hành; chú thích: "Đổi lại ở Cài đặt › Thương Xót bất cứ lúc nào. Không khoá truyện, hero, kết."; A trên thẻ = chọn (+ dấu ✓), "Bắt đầu" → Loading → hub Lửa Canh ST_HEARTH; B = giữ Hành Trình; chỉ hiện 1 lần (Hub chỉ hiện ST_HEARTH + ST_DOCK; bật hàng đợi onboarding run 1. FLAG_FIRST_WAKE, 19 §5.6)thẻ Hành TrìnhUiCardHover (focus/rê sang thẻ trong draft, shop, chọn Relic) SFX_UI_card_hover khi focus thẻ, DraftPick rarity=COMMON|RARE|EPIC (biến thể 01 COMMON, 02 RARE, 03 EP… SFX_UI_card_pick khi chọn
  • "Chơi" khi có run dở → UI_C_Confirm "Tiếp tục run · Bỏ run" (Bỏ = UI_C_Hold 1.0 s, 16 §11). Lệch content_version không migration → chỉ còn "Bỏ run".

6.2 Hub (HubHud, HubTravel, Dialogue)

Phần tửRect / vị tríLuật
Dải tiền meta(283, 4, 140, 12)Tro Hồn · Mảnh Vọng · Nến Canh (icon 8×8 + số); Nến Canh ẩn tới khi có ≥ 1
Nhắc trạm (world)trên prop trạm, khi tâm hero trong r24glyph INTERACT (B / G) + tên trạm ≤ 14 ký tự; hub: Đánh (X / LMB) cũng tương tác (Bible §1.1, DEC-2026-11-07-06)
Dấu beat"!" 5×9 ui-text trên NPC có beat chờ / trạm có mục mới (trang Sổ Tang chưa đọc, mở khoá mới)tắt khi đã xem
Gợi ý dịch chuyển(4, 255, 120, 9)"{glyph MAP} Dịch chuyển" — chỉ khi ≥ 4 trạm mở (18 §12 bước 2b)
HubTraveldanh sách trạm đã mở (14, 30, 140, 200) + bản đồ hub thu nhỏ 960×544 → 240×136 (170, 60)chọn → mờ 0.25 s → đứng trước trạm (18 §1.1); FastTravel t=0 (rời chỗ cũ) SFX_HUB_fast_travel; nút = MAP (d-pad lên / M)
Dialoguehộp (120, 205, 299, 56) NS_DIALOGUE; thẻ tên (124, 197, 100, 12); chân dung _bust 128×128 tại (−8, 131) (tràn trái, cắt bởi SAFE)chữ dialogue hiện 40 ký tự/s + BarkShown (mỗi 3 ký tự 1 blip; 8 bộ: 7 NPC + hero; giọng NPC lấy SFX_… SFX_UI_bark_blip mỗi 3 ký tự (bộ theo NPC); A = hiện hết dòng / dòng kế; giữ B 0.5 s = bỏ qua beat (hệ thống vẫn mở, 18 §12); lựa chọn (≤ 3) là nút trên hộp, cách 20
  • Mở menu trạm: hero dừng, camera giữ; panel trượt từ phải 0.15 s; UiPopupOpen / UiPopupClose (biến thể 01 open, 02 close) SFX_UI_popup. Đóng: B → về hub ở đúng vị trí.
  • Menu / Esc ở hub (không màn nào mở) → HubPause (§6.13): đường duy nhất từ hub về Title hoặc thoát game.

6.3 Settings (7 tab; mọi thay đổi áp ngay, "Mặc định" theo tab: UI_C_Confirm)

42 sở hữu mọi option, khoá, giá trị và mặc định; bảng dưới chỉ xếp chỗ: mỗi ô = khoá tên · giá trị · mặc định PC / Deck (1 giá trị = cả hai), đúng thứ tự 42. Lệch 42 → 42 thắng, sửa bảng này.

TabMục
Trò chơi (42 §8)Ngôn ngữ · ngôn ngữ đã ship (43 §12.1) · ngôn ngữ hệ thống · game.hints Gợi ý nút · tắt/bật · bật · game.glossary_auto Tự chú giải từ khoá lần đầu · tắt/bật · bật · game.draft_timer Đồng hồ tự chọn draft · 6 s / 12 s / Tắt · 6 s · game.objective_reminder Nhắc mục tiêu phòng · tắt/bật · bật · game.ash_pct Hiện số % Tro Nhớ · tắt/bật · bật · game.hud_declutter Giảm nhiễu HUD · tắt/bật · tắt · game.auto_pause_focus Tự tạm dừng khi mất focus · tắt/bật · bật / khoá bật (§3.1) · game.combat_toasts Thông báo trong trận · Ngay / Hoãn tới phòng sạch · Hoãn · game.cross_run_memory Trí nhớ xuyên run (công tắc Sổ Thù 14 §9) · tắt/bật · bật
Điều khiển (42 §7.1)input.preset Preset điều khiển · PAD_DEFAULT / PAD_SOUTHPAW / PAD_LEFT_ONLY / PAD_RIGHT_ONLY / KBM_DEFAULT / KBM_KEYS / KB_LEFT_ONLY / CUSTOM · theo thiết bị · input.bindings.* Remap · 2 ô/action/họ thiết bị (41 §8.1; trùng phím → cảnh báo ui-warn + hoán đổi) · input.ls_deadzone Vùng chết cần trái · 0.10–0.40 bước 0.05 · 0.20 · input.rs_deadzone Vùng chết cần phải · 0.15–0.45 bước 0.05 · 0.30 · input.swap_sticks · input.invert_y Đảo cần · Đảo trục Y · tắt/bật · tắt · input.mouse_sens Độ nhạy chuột · ×0.5–×2.0 bước 0.1 · ×1.0 · input.cursor_confine Khoá con trỏ trong cửa sổ · tắt/bật · bật (toàn màn) / tắt (cửa sổ) · input.aim_assist Trợ ngắm tay cầm · 0–100% bước 10 · 100 · input.boss_lock_hard Khoá boss cứng (R3 / chuột giữa) · tắt/bật · tắt · input.ash_inspect_toggle Xem Tro Nhớ kiểu bật · tắt/bật · tắt · input.skill_hold_mode Kỹ năng ngắm · Giữ-thả / Chạm-chạm · Giữ-thả · input.attack_toggle Đánh kiểu bật · tắt/bật · tắt · input.move_latch Giữ hướng đi khi nhả cần · 0 / 0.25 / 0.50 s · 0 · input.confirm_swap Đảo xác nhận/huỷ · tắt/bật · tắt · input.confirm_style Kiểu xác nhận lệnh nguy hiểm · Giữ / 2 bước · Giữ · input.ui_repeat_delay Trễ lặp điều hướng · 0.25–0.80 s · 0.35 · input.haptic_strength · input.haptic_tells Rung tay cầm · Rung tell · 0–100% · 100 · bật · ngưỡng giữ ĐÁP/verb giữ: dòng chỉ đọc
Hiển thị (42 §2, nhóm video.*/hud.*/cam.*)video.window_mode Chế độ cửa sổ · Toàn màn không viền / Toàn màn / Cửa sổ · không viền / toàn màn · video.resolution Độ phân giải · chỉ độ phân giải zoom nguyên · gốc màn / 1280×800 · video.fps_cap Trần khung hình · 30 / 40 / 45 / 60 · 60 · video.vsync V-sync · tắt/bật · bật · video.safe_margin Vùng an toàn màn · 0 / 4 / 8 / 12 / 16 UI px · 0 / khoá 0 · video.fx_preset Preset FX · Cao / Deck 70% / Thấp · Cao / Deck 70% · hud.opacity Độ mờ HUD · 50–100% bước 10 · 100 · hud.dmg_numbers Số sát thương · Đầy đủ / Chỉ chí mạng + boss / Tắt · Đầy đủ · hud.hero_dmg_numbers Số hero nhận · tắt/bật · bật · hud.button_hints Hiện nút trên HUD · tắt/bật · bật · cam.shake Rung màn · 0–100% bước 10 · 100
Âm thanh (42 §5)audio.vol_master Tổng · 0–100 bước 5 · 80 · audio.vol_music · vol_sfx · vol_amb · vol_ui · vol_vo Nhạc · Hiệu ứng · Môi trường · UI · Giọng · 0–100 bước 5 · 100 · audio.vol_tell Âm tell · 50–150% · 100 · audio.dynamic_range Dải động · Rộng / Thường / Hẹp · Thường / Hẹp khi loa trong · audio.small_speaker Loa nhỏ · tắt/bật · tắt / tự bật khi Deck không tai nghe · audio.mono Mono · tắt/bật · tắt · audio.tell_positional Âm tell theo vị trí · tắt/bật · tắt · audio.tell_enhanced Âm tăng cường · tắt/bật · tắt · audio.h12_click Click nhịp H12 · tắt/bật · tắt · audio.latency_ms Hiệu chỉnh trễ âm · −100…+100 ms bước 10 · 0 (+ nút "Đo trễ" → màn đo 42 §5) · audio.mute_unfocused Tắt âm khi mất focus · tắt/bật · bật · a11y.visual_sound Chỉ hình · tắt/bật · tắt
Trợ năng (42 §2 nhóm a11y.*, §3, §4, §6, §7 thời gian giữ, §10)a11y.particles_reduce Giảm hạt FX · tắt/bật · tắt · a11y.reduce_motion Giảm chuyển động · tắt/bật · tắt · a11y.hero_outline Viền hero · 1 / 2 / 3 px · 1 · a11y.hero_ring_boost Vòng chân đậm · tắt/bật · tắt · a11y.contrast_boost Tăng tương phản · tắt/bật · tắt · a11y.offscreen_arrows Mũi tên ngoài màn · tắt/bật · tắt · a11y.aim_reticle Reticle ngắm · Khi ngắm / Luôn · Khi ngắm · a11y.cursor_size Cỡ dấu ngắm chuột · 1× / 2× / 3× · 1× · a11y.low_hp_vignette Viền HP thấp · Nhịp / Tĩnh / Tắt · Nhịp · a11y.tell_shapes Tell mù màu (◇/▲/chấm) · tắt/bật · tắt · a11y.cvd_mode Chế độ mù màu · Tắt / Đỏ–lục / Lam–vàng / Đơn sắc · Tắt · a11y.flash_reduce Giảm chớp · tắt/bật · tắt · a11y.text_scale Cỡ chữ · 100 / 125 / 150% · 100 / 125 · a11y.text_contrast Nền chữ đặc · tắt/bật · tắt · a11y.dialogue_speed Tốc hiện chữ thoại · 20 / 40 / 80 ký tự/s / tức thì · 40 · a11y.dialogue_auto Tự chuyển dòng · tắt/bật · tắt · a11y.screen_reader Đọc màn hình · tắt/bật · tắt · sub.enabled Phụ đề · tắt/bật · bật · sub.speaker Tên người nói · tắt/bật · bật · sub.bg_opacity Nền phụ đề · 0–100% bước 10 · 60 · sub.size Cỡ phụ đề · theo Cỡ chữ / 125 / 150% · theo Cỡ chữ · a11y.tell_subs Phụ đề tell · tắt/bật · tắt · sub.sound_captions Chú thích tiếng động · tắt/bật · tắt · input.hold_time_mult Thời gian giữ · ×0.5–×2.0 bước 0.25 · ×1.0 · Preset nhanh (42 §10): Nhìn kém · Nghe kém · Mù màu · Nhạy sáng & chuyển động · Vận động · Nhận thức · nút "Thử ở Sân Tập" (chỉ ở hub)
Thương Xót (42 §9)dải chữ đầu tab: "Bật bất kỳ mục nào: không tính bảng xếp hạng và thành tựu Độ Tang" · preset "Chọn cách đi" Kể Chuyện / Đồng Hành / Hành Trình (19 §6.2; chỉnh tay → "Tự chỉnh") · mercy.dmg_taken Sát thương nhận · 0 / −25 / −50 / −75% · 0 · mercy.answer_window Cửa sổ ĐÁP · +0 / +0.03 / +0.06 s · +0 · mercy.game_speed Tốc game · 70–100% bước 5 · 100 · mercy.auto_aim Tự ngắm · tắt/bật · tắt · mercy.hold_toggle Verb giữ · Giữ / Bật · Giữ · mercy.ash_zero Tro Nhớ 0 · tắt/bật · tắt · mercy.auto_defense Phòng Thủ Tự Động 50% · tắt/bật · tắt · mercy.h12_beat Nhịp Ambrin · ±0.12 / ±0.16 s · ±0.12 · mercy.h07_peak Đỉnh Hơi Veyra · +0 / +0.04 s · +0 · mercy.latency_offset Hiệu chỉnh trễ · −0.10…+0.10 s bước 0.01 · 0
Dữ liệu & quyền riêng tư (43 §7.3, §15.1; 60 PV03)Telemetry · tắt/bật · theo Consent · Báo crash · Luôn gửi / Hỏi mỗi lần / Không bao giờ · theo Consent (mặc định Hỏi mỗi lần) · "Xoá dữ liệu đã gửi" → UI_C_Confirm "Gửi yêu cầu xoá theo mã ẩn danh; xử lý ≤ 30 ngày" · "Tạo mã ẩn danh mới" → UI_C_Confirm (telemetry_id mới, 43 §15.2) · Đồng bộ Cloud · trạng thái chỉ đọc ("Đã đồng bộ {date}" / "Ngoại tuyến") · "Xoá Sổ Thù" UI_C_Hold 1.0 s · "Xoá toàn bộ tiến trình" UI_C_Hold 2.0 s × 2 lần (lần 2 chữ ui-warn "Không thể hoàn tác"; chép bản sao vào local/conflict/ trước khi xoá, 43 §7.3) · link "Chính sách quyền riêng tư" · Credits (→ Credits)

6.4 Khuôn menu trạm (UI_StationMenu, dùng cho §6.5–§6.12)

VùngRectNội dung
Đầu(14, 6, 260, 17)tên trạm FNT_BW_L + NPC FNT_BW_S
Tiền(283, 6, 140, 12)chỉ tiền trạm dùng
Tab(14, 26, 400, 14)LB/RB
Danh sách(14, 44, 184, 200)dòng 20: icon 16×16 + tên name ≤ 22 ký tự + giá/trạng thái căn phải
Chi tiết(202, 44, 211, 200) NS_PANEL_INSETicon 32×32 · tên · mô tả body ≤ 240 ký tự · điều kiện (✓ ui-ok / ✗ ui-text-off + tiến độ "112/150") · giá
Nhắc núty 251A Mua/Chọn · View Chi tiết · LB/RB Tab · B Rời

6.5 Hearth — Lửa Canh (Lửa Canh ST_HEARTH)

Tab Kẻ Thức (bố cục riêng, không khuôn §6.4):

VùngRectNội dung · trạng thái
Lưới hero(14, 44, 140, 104): 4 × 3 ô 32×32 cách 4por_<code>_hud; đã mở: viền slot 1 px · khoá: bóng ui-locked + khoá 8×8 · đủ điều kiện chưa rèn: "!" (→ rèn ở Lò Rèn); thứ tự H01…H12
Thông tin(14, 152, 140, 92)tên + danh hiệu · vũ khí · Độ khó 1–5 chấm · tài nguyên · ĐÁP (tên + cửa sổ "0.16 s") · verb giữ · MR + thanh XP + TT n/5; hero khoá: điều kiện + tiến độ + giá Mảnh Vọng
Chân dung(156, 44, 192, 192)por_<code>_select thở 24 frame @12 fps; HeroSelected ở Lửa Canh (chọn hero / ult / Dạng Rèn / kỹ năng khởi đầ… VFX_UI_hero_select lửa tô LUT slot khi đổi hero (khoá: lửa xám + UiError (hành động không được phép: thiếu tiền, khoá, ô đầy) SFX_UI_nav_error)
Hành trang(318, 44, 95, 200)ô Ult 28 · ô Dạng Rèn 28 · 2 ô kỹ năng 28 (MRN09: 1) + tên caption; "Hành trang lưu 1–3" (UP_WARDROBE_1)

Tab Phục Dựng: GD1–GD5 dòng (giá, mở gì, cảnh truyện) — mua = UI_C_Hold 0.5 s (giá ≥ 500) → cảnh 4 s RestoreStageBought GD1–GD5 (t=0 cảnh) SFX_HUB_restore_stage. Tab Nâng trạm: UP_HEARTH_1–4 (khuôn §6.4).

6.6 Forge — Lò Rèn Vọng: tab Rèn Kẻ Thức (12 dòng: điều kiện chiến công + giá 0–16 Mảnh Vọng; rèn → cảnh 4 s ForgeUnlock (rèn mở hero): 3 nhát cách 0.3 s + tôi nước t=0.9 s SFX_HUB_forge_unlock) · Dạng Rèn (12 hero × AS2/AS3 8/15) · Ult (UL2/UL3 6/10) · Tiến Hoá (công thức EVO1–EVO4 mỗi hero: đã lộ = 2 icon + điều kiện; chưa = bóng "?"; EVO4 hiện ở MR12) · Nâng trạm (UP_FORGE_1–5).

6.7 DockDepart — Bến Đò

VùngNội dung
Danh sách mode (14, 44, 184, 120)Hành Trình · Lễ Ngày · Truy Tuần · Canh Thâu Đêm · Đêm Hồi Chuông · Lễ Tự Chọn; khoá: điều kiện mở (Bible §3.4)
Chi tiết (202, 44, 211, 200)luật 4 dòng · hệ số tiền (Tro Hồn/Mảnh Vọng/Nến Canh/Thông Thạo) · DAILY/Truy Tuần: hero + Dạng Rèn + ult cho mượn, 3 Khăn Tang, 2 mutator, "Lượt tính điểm: còn 1/1", giờ đổi seed (UTC) · CUSTOM: thanh trượt HP/sát thương địch 25–300%, mật độ, thời gian hồi chiêu, Tro Nhớ 0–3, seed 16 ký tự hex (bàn phím ảo tay cầm), bất tử, Edge/Relic khởi đầu
Tóm tắt (14, 168, 184, 76)hero · hành trang · Lễ Vật · Độ Tang · "Chìa Đò" (khi có Calla trao Chìa Đò (arc Calla xong). FLAG_FERRY_KEY)
  • "Xuất phát" (A) → cảnh đò 6 s (DepartConfirmed ở ST_DOCK (t=0 cảnh 6 s) SFX_HUB_dock_depart) → ActIntro. Có run dở → UI_C_Confirm "Bỏ run đang dở?". Lần đầu (Hub chỉ hiện ST_HEARTH + ST_DOCK; bật hàng đợi onboarding run 1. FLAG_FIRST_WAKE): chỉ hiện Hành Trình.
  • DAILY / Truy Tuần / ENDLESS / BOSS_RUSH: lần đầu chọn → RankedNotice (§6.13); dòng "Xếp hạng: Bật / Chơi không xếp hạng" (X đổi) trong Chi tiết; "Chơi không xếp hạng" hoặc lượt DAILY đã dùng → run gắn thẻ "TẬP" (khối MODE §4.1).

6.8 Ledger — Sổ Tang (tab: Codex · Lịch Sử Run · Bia Mộ · Sổ Thù · Bàn Thờ Ký Ức · Sưu Tập · Bảng Xếp Hạng)

  • Codex: cây mục trái (Kẻ Thức, Kẻ địch, Tinh Anh, Boss, Nơi chốn, NPC, Relic, Tro Nhớ, Truyện); trang CDX_*: mục "bóng" = tên + hình đen; trang đã viết: tranh 160×90 (nếu mua ART_*) + chữ body cuộn + tab con "Frame data" (UP_LEDGER_1) + "Thế đáp" (trục, thói quen, mẹo, đòn bị đổi; 14 §14). Trang mới "!"; đọc ≥ 2 s = đã đọc (18 §9). Lật trang LedgerPageTurn (Hol idle 8–12 s; đổi tab/trang Sổ Tang) SFX_HUB_ledger_page.
  • Lịch Sử Run: bảng 100 dòng (hero, mode, Độ Tang, kết quả, phút) → A mở build (như RunSummary tab Build, chỉ đọc).
  • Bia Mộ: 12 bia (TMB_Hxx từ MR18); "Thắp Nến Bia" 25 Nến Canh/nến.
  • Sổ Thù: boss Hồi × hero: 5 bản ghi (ngày, kết quả, Độ Tang, thói quen nổi bật), thế mở màn dự kiến, Sẹo; "Xoá Sổ Thù" UI_C_Hold 1.0 s.
  • Bàn Thờ Ký Ức: danh sách Sẹo đang khắc → "Gột" 200 Tro Hồn (UP_TEST_BELL_4: 150), UI_C_Hold 1.0 s.
  • Sưu Tập: thanh % 12 nhóm (18 §9) + "Hoàn tất tài khoản". Bảng Xếp Hạng: Leaderboard — tab DAILY/Truy Tuần/ENDLESS/BOSS_RUSH × Toàn cầu/Bạn bè/Quanh tôi; 10 dòng/trang (hạng, tên Steam ≤ 16 ký tự + "…", điểm, hero glyph).

6.9 TestBell — Chuông Thử

  • Khăn Tang (sau END_BELL_TOLL): 15 dòng MRN (glyph 8×8 + tên + bậc ô vuông 0–max + điểm/bậc); trái/phải tăng/giảm bậc; khoá: MRN11–MRN15 trước GD3 (ui-locked + "Phục Dựng GĐ3"); số "Độ Tang {do_tang}" FNT_BW_XL góc trên-phải + vải khăn MourningBandChanged (buộc/cởi MRN01–MRN15 ở Chuông Thử) VFX_UI_mourning_knot; mỗi đổi MourningBandChanged (buộc/cởi MRN01–MRN15: lớp vải; tổng Độ Tang đổi:… SFX_UI_mourning_band. Chi tiết: hiệu ứng đầy đủ + thưởng (Nến Canh = Độ Tang, mốc 4/8/16/24/32).
  • Mắt Tro: UP_TEST_BELL_1/2 → 1/3 trục PSP cao nhất (chữ + thanh); không đổi Tro Nhớ. Đổi Nến Canh: thanh trượt bội 100 Tro Hồn → "= {n} Nến Canh"; UI_C_Hold 1.0 s (1 chiều). Nâng trạm.

6.10 Market — Chợ Đò: tab Pool (Edge chung + Relic chưa mở; lọc LB/RB phụ theo loại, X đổi lọc tag/rarity; thứ tự rẻ trước, nhóm theo tag — 18 §6.5; sau GD2 +12 mục) · Lễ Vật (LV01–LV06, chọn ≤ 1 (UP_MARKET_3: 2), tắt khi mode đã chọn là DAILY/BOSS_RUSH: "Không dùng ở chế độ này") · Nâng trạm (UP_MARKET_1–5).

6.11 Yard — Sân Tập (menu nổi trên sân, World chạy)

  • Panel thu gọn (283, 30, 140, 200) mở bằng INTERACT tại Răm: Dummy (tell Y/P/N, hạng S/M/L/XL, hệ số windup ×1.0–×2.0, tốc, nhịp lừa bật/tắt, mẫu boss — UP_YARD_1) · Bài tập ĐÁP (10/30 lần, đếm hoàn hảo) · Frame data (overlay hitbox + số tick trên dummy) · Replay 10 s (UP_YARD_2: 30 s) · Đo DPS (cửa sổ 10 s) · Thử Thách TT1–TT5 của hero (tiến độ chỉ đọc) · Xem trước Trợ năng.
  • Panel không che hero: tự lật sang trái khi hero ở nửa phải màn. 0 thưởng (18 §2).

6.12 Wardrobe — Tủ Áo Tang (GD4): tab Skin (hero → 4 skin, xem trước LUT trên _select) · Trang trí (6 tượng, 18 hộp nhạc — A nghe thử 10 s, 30 tranh) · Hành trang lưu (UP_WARDROBE_1: 3 ô) · Màu phụ (UP_WARDROBE_3, trong slot INV-01).

6.13 Màn hệ thống & thông báo (#44–#53, trạng thái Leaderboard)

MànBố cụcPhần tử · luậtFocus đầuÂm
HubPauseUiPause open/close (snapshot SN_DRAFT; World + Hero dừng) VFX_UI_pause_dim phủ canvas · tiêu đề "TẠM DỪNG" (14, 8, 400, 17) + Tro Hồn/Mảnh Vọng · cột lệnh (14, 30, 100, 80) 4 nút cách 20 · panel mô tả (122, 30, 291, 80) NS_PANELTiếp tục · Cài đặt (→ Settings) · Thoát về tiêu đề (UI_C_Confirm "Về màn tiêu đề? Tiến trình hub đã lưu") · Thoát game (UI_C_Confirm "Thoát game?"); Báo lỗi (→ BugReport) là dòng phụ X; World HUB dừng (NPC, tro, hero), nhạc snapshot pause; B/Menu = Tiếp tục; trước khi về tiêu đề/thoát: lưu meta (43 §7.2)Tiếp tụcUiPause open/close (Start / Esc; snapshot SN_DRAFT; UI ignoreListener… SFX_UI_pause mở/đóng; UiPopupOpen / UiPopupClose (biến thể 01 open, 02 close) SFX_UI_popup cho Confirm
SaveConflicttiêu đề "Chọn bản lưu" (14, 8, 400, 17) · 2 thẻ NS_PANEL 190×150 tại (14, 40) "Bản trên máy này" và (223, 40) "Bản Steam Cloud" · chữ giải thích (14, 196, 400, 24)mỗi thẻ: {ngày giờ ghi utc_written theo giờ máy, giờ chơi, Tro Hồn, số hero đã mở /12, Hồi xa nhất (I–VI)}; số lớn hơn tô ui-ok; chọn = UI_C_Hold 1.0 s trên thẻ; bản không chọn chép local/conflict/<file>_<utc>.json (giữ 3 bản, 30 ngày); không có B (bắt buộc chọn) (43 §7.3 luật 2)thẻ có save_seq cao hơnUiHoldStart → UiHoldComplete (giữ để xác nhận 1.0 s); thả sớm = vòng … VFX_UI_hold_ring + UiHoldStart → loop cháy dần (1.0 s mặc định) → UiHoldComplete 'phụt';… SFX_UI_hold_confirm
SaveNoticeUI_C_Confirm 1 nút "Đã hiểu" (200×72 giữa SAFE)3 mẫu: luật 3 meta "Bản lưu hỏng, đã khôi phục bản gần nhất" · luật 3 run / luật 4 "Run dở không đọc được nên đã bỏ; tiền meta giữ nguyên" · luật 5 "Bản lưu mới hơn game. Hãy cập nhật game" (khoá chỉ-đọc: mọi lưu tắt, chữ ui-warn ở Title dưới phiên bản) (43 §7.3)"Đã hiểu"UiPopupOpen / UiPopupClose (biến thể 01 open, 02 close) SFX_UI_popup
PadLostlớp phủ Overlay 200×72 giữa SAFE trên Pause/HubPause; icon tay cầm 32×32 + "Kết nối lại tay cầm" FNT_BW_Mmở trong frame tay cầm rời (cả khi game.auto_pause_focus tắt); tự đóng khi tay cầm (bất kỳ) kết nối lại, giữ nguyên tạm dừng (không tự tiếp tục — 43 §10); bàn phím/chuột vẫn điều khiển Pause dưới lớp phủ (Enter = đóng lớp phủ) (43 §8.1, 60 DV04)—UiPause open/close (Start / Esc; snapshot SN_DRAFT; UI ignoreListener… SFX_UI_pause
RankedNoticeUI_C_Confirm 2 nút (200×88 giữa SAFE)lần đầu chọn DAILY / ENDLESS / BOSS_RUSH ở DockDepart: "Điểm và thống kê run sẽ gửi tới máy chủ bảng xếp hạng." · "Tiếp tục" · "Chơi không xếp hạng" (run gắn thẻ "TẬP", không nộp, không tiêu lượt DAILY); ghi lựa chọn đã thấy vào settings_shared.json, không hỏi lại; đổi ở DockDepart mục "Xếp hạng" bật/tắt (43 §15.1, 60 PV05)"Tiếp tục"UiPopupOpen / UiPopupClose (biến thể 01 open, 02 close) SFX_UI_popup
CrashPromptUI_C_Confirm (200×72 giữa SAFE)chỉ khi crash lần trước + lựa chọn "Hỏi mỗi lần": "Game đã gặp lỗi lần trước. Gửi báo lỗi?" · "Gửi" · "Không"; dòng phụ ui-text-2 "Đổi ở Cài đặt › Dữ liệu & quyền riêng tư"; "Luôn gửi" → gửi ngầm không hỏi; "Không bao giờ" → dump giữ 7 ngày rồi xoá (43 §15.1, §15.3)"Không" (an toàn)UiPopupOpen / UiPopupClose (biến thể 01 open, 02 close) SFX_UI_popup
BugReportpanel (63, 40, 300, 180) NS_PANEL: tiêu đề "Báo lỗi" · ô mô tả (71, 64, 284, 90) · checkbox "Đính kèm ảnh" (71, 160) · nút "Gửi" (283, 200, 72, 16) / "Huỷ" (199, 200, 72, 16)mô tả ≤ 500 ký tự, đếm "{count}/500"; nhập bằng ShowFloatingGamepadTextInput khi dùng tay cầm (43 §8.1); checkbox mặc định TẮT (ảnh chỉ gửi khi tick); gửi log 2 000 dòng + build_number + content_version (43 §15.3); ngoại tuyến → xếp hàng local/crash/, toast "Sẽ gửi khi có mạng"ô mô tảUiConfirm (A / Enter / click trái) SFX_UI_nav_confirm khi gửi
DemoEndtoàn màn: tiêu đề "Còn tiếp ở Early Access" FNT_BW_XL (13, 40, 400, 22) · 2 dòng nội dung EA (63, 70, 300, 30) · 3 nút dọc (163, 130, 100, 16 + 20k)chỉ bản demo, sau BossVictory BS_B1 (43 §3.1): Wishlist (ActivateGameOverlayToStore app chính; overlay tắt → trình duyệt) · Góp ý (form web, URL config) · Chơi lại (→ RunSummary → hub); telemetry demo_end_screen {wishlist_clicked} (43 §15.2, chỉ khi đồng ý); nút Wishlist cũng có trên Title demo và DeathRecap lần chết thứ 3 (43 §3.2, 60 DM06–DM07)WishlistUiConfirm (A / Enter / click trái) SFX_UI_nav_confirm; nhạc credit loop ENDING · END_BELL_TOLL Hồi Chuông (Gióng chuông sau BS_FINAL) · phần tuyến tính 180 s = f… MUS_end_bell_toll
EaProgresstiêu đề "Lộ trình Early Access" (14, 8, 400, 17) · trục 4 mốc ngang (14, 40, 400, 180): cột 96 × 180 cách 4đọc config/ea_roadmap.json đóng gói theo build (không gọi mạng; 43 §4); schema: danh sách { "ms": "<MS04…MS07>", "month": "<MM/YYYY>", "items_vi": ["…"] } (EN qua bảng loc); cột: mã mốc + tháng FNT_BW_M + ≤ 6 dòng items_vi body; mốc đã phát hành (build ≥ mốc) đóng dấu ✓ ui-ok, mốc kế viền ui-focus; chỉ ở bản EA (ẩn ở 1.0 và demo); B → Titlecột mốc kếUiTabSwitch (LB/RB, Q/E, click tab) SFX_UI_tab_switch khi đổi cột
Loadingtoàn màn ui-void; 1 dòng mẹo (63, 240, 300, 12) FNT_BW_S ui-text-2; dấu chuông quay 8×8 (415, 255)chuyển cảnh mực (shader UI InkWipe, không phải id VFX) 0.25 s vào/ra; chỉ hiện khi tải > 0.5 s (tải ngắn hơn: chỉ ink-wipe); mẹo = 1 câu ngẫu nhiên từ trang codex đã mở (codex.json, trang CDX_* đã gặp, không lặp 3 lần liền); ngân sách tải hub → run ≤ 5 s, DOCK → Hồi kế ≤ 3 s (50 §5.3) — quá ngân sách vẫn hiện, ghi log hiệu năng; không nhận input—không âm riêng; nhạc giữ (lọc thấp)
Leaderboard (trạng thái)khối trạng thái (14, 26, 400, 12) trên danh sách"Không kết nối" (Steam ngoại tuyến / không có Steam, 43 §13: danh sách ẩn, chỉ điểm tốt nhất cục bộ) · "Điểm đang chờ duyệt" (held, 43 §6.3 bước 4; dòng của người chơi ui-text-2 + icon đồng hồ 8×8, không buộc tội) · "Đang chờ gửi" (hàng local/score_queue/, bước 5) · "Đã quá hạn nộp" (quá 48 h) · run "TẬP"/Thương Xót: "Run này không tính bảng xếp hạng"danh sách—

97. Chuyển động & âm UI

7.1 Luật chuyển động (ArtStyle §8e)

  • Mọi vị trí bắt vào lưới UI px; không co giãn lẻ (chữ/khung pixel không scale 1.25 — "nảy" = dời 1–2 px hoặc đổi sprite); không blur; easing outQuart lấy mẫu rồi làm tròn về UI px.
  • Đồng hồ: UI chạy đồng hồ Real (không theo World ×0.15/×0.3, không theo slow-mo); tạm dừng dừng mọi tween HUD trừ con trỏ focus.
  • "Giảm chuyển động": bỏ hạt UI, bỏ trượt (chỉ mờ α), con trỏ focus đứng yên, DraftOpen: 3 thẻ rút ra lệch 0.06 s (cả màn chọn Relic/Edge hero đầu … VFX_UI_card_reveal = hiện cùng lúc; thời lượng mờ giữ nguyên.
MẫuThời lượngMô tả
Panel vào / ra0.15 / 0.10 strượt 8 px + α 0 → 1
Popup (UI_C_Confirm)0.12 / 0.10 sα + dời 4 px từ dưới
Màn toàn phần đổi0.20 smờ qua ui-void
Thẻ hiện0.18 s, trễ 0 / 0.06 / 0.12 strượt lên 24 px
Focus đổi0.06 scon trỏ nhảy tới (không bay)
Số đếm lên0.40 soutQuart trên giá trị nguyên
HP lagtrễ 0.40 s, lùi 0.25 s§1.3 ui-hp-lag
Calloutvào 0.12 s (dời lên 4 px + α), giữ 1.2 / 2.5 s, ra 0.20 s§4.6 H7
Toastvào 0.15 s từ phải, giữ 3.0 s, ra 0.20 s≤ 2 xếp chồng
Mực bản đồ0.25 s/nútMapOpen (đường R1→R6 hiện) + MapNodeChosen (đường đã chọn đậm lên) VFX_UI_map_path_ink
Nhịp chờ1 Hz (nút có thể đi, Dư Âm đầy) · 2 Hz (con trỏ focus) · 1.2 Hz (HP thấp)≤ 3 Hz mọi thứ (31 R9)

7.2 Bản đồ âm UI (37 SFX_UI_*, bus UI, đồng hồ UI — 32 §7.1)

IdDùng ởIdDùng ở
UiNavigate (focus đổi; cooldown 40 ms khi giữ hướng) SFX_UI_nav_movemọi đổi focusUiConfirm (A / Enter / click trái) SFX_UI_nav_confirmxác nhận
UiBack (B / Esc / click phải) SFX_UI_nav_backquay lại / đóngUiError (hành động không được phép: thiếu tiền, khoá, ô đầy) SFX_UI_nav_errorkhoá, thiếu tiền, chọn nút không với tới
UiTabSwitch (LB/RB, Q/E, click tab) SFX_UI_tab_switchLB/RBUiSliderStep (mỗi bước thanh trượt; pitch = −6..+6 bán cung theo giá … SFX_UI_slider_tickthanh trượt Cài đặt, CUSTOM, đổi Nến Canh
UiHoldStart → loop cháy dần (1.0 s mặc định) → UiHoldComplete 'phụt';… SFX_UI_hold_confirmUI_C_HoldUiPopupOpen / UiPopupClose (biến thể 01 open, 02 close) SFX_UI_popuppopup, Event, BossGate, menu trạm
UiPause open/close (Start / Esc; snapshot SN_DRAFT; UI ignoreListener… SFX_UI_pausePause mở/đóngDraftOpen (sau LevelUp; 3 thẻ rút ra lệch 60 ms; snapshot SN_DRAFT) SFX_UI_draft_openDraft, SkillPick, RushBuild
UiCardHover (focus/rê sang thẻ trong draft, shop, chọn Relic) SFX_UI_card_hoverfocus thẻDraftPick rarity=COMMON|RARE|EPIC (biến thể 01 COMMON, 02 RARE, 03 EP… SFX_UI_card_pickchọn thẻ thường/hiếm
DraftPick rarity=LEGENDARY (Then Chốt) hoặc chọn thẻ Tiến Hoá SFX_UI_card_pick_legendchọn Then Chốt / LEGENDARYDraftPick/hiện thẻ Relic Lời Nguyền RL049–RL060 SFX_UI_card_cursedthẻ/Relic Lời Nguyền hiện + chọn
DraftReroll (Đổi, biến thể 01) · DraftBanish (Xoá, 02) · DraftHold (G… SFX_UI_card_editĐổi · Xoá · GiữSkillLearned / SkillSwapped / SkillRankUp (draft SKILL, hub chọn 2 kỹ… SFX_UI_skill_learnhọc/đổi/nâng hạng kỹ năng, chọn kỹ năng ở Hành trang
MapOpen (sau phòng xong / nút bản đồ) SFX_UI_map_openmở Map, lật Act MutatorMapNodeChosen (chọn nút CMB/ELT/CHL/EVT/SHP/RST/SEC/RSC/MBS/BOS/DOCK) SFX_UI_map_nodechọn nút
LevelQueued (pip '+N cấp chờ' trên HUD khi lên cấp giữa giao tranh) SFX_UI_level_queuethêm pip cấp chờCurrencyChanged delta>0 curId ∈ {CUR_SOUL_ASH 01, CUR_ECHO_SHARD 02, … SFX_UI_currency_gaintiền bay vào ô (biến thể theo CUR_*)
CurrencyChanged delta<0 (mọi tiền meta; Phục Dựng, nâng trạm, mở hero… SFX_UI_currency_spendmua bằng tiền metaUnlockGranted (hero 01 · Dạng Rèn 02 · ult 03 · mode 04 · trang codex… SFX_UI_unlockmở hero/Dạng Rèn/ult/mode/trang codex
MasteryRankUp (lên MR01–MR20 / xong TT1–TT5) SFX_UI_mastery_ranklên MR, xong TTAchievementUnlocked (ACH_*; toast góc phải trên) SFX_UI_achievementtoast thành tựu
DeathRecapLine / dòng 'Tro đã học' (INV-16), 1 lần/dòng, cách ≥ 0.25 s SFX_UI_recap_linedòng recap, "Tro đã học"EpitaphShown (bia mộ đóng dấu cuối recap, TMB_Hxx) SFX_UI_epitaphđóng dấu bia mộ
MourningBandChanged (buộc/cởi MRN01–MRN15: lớp vải; tổng Độ Tang đổi:… SFX_UI_mourning_bandđổi bậc Khăn TangScoreCount (đếm điểm DAILY/ENDLESS/BOSS_RUSH; pitch +1 bán cung mỗi 1… SFX_UI_score_tickđếm điểm DAILY/ENDLESS/BOSS_RUSH
BarkShown (mỗi 3 ký tự 1 blip; 8 bộ: 7 NPC + hero; giọng NPC lấy SFX_… SFX_UI_bark_blipchữ thoại/bark hiệnSkillCastDenied (input kỹ năng khi đang hồi chiêu; HUD nháy ô 0.2 s, … SFX_UI_skill_deniedkỹ năng chưa sẵn
LinchpinTaken (nhặt Then Chốt H{xx}_E37–E40; callout 'THEN CHỐT: <tên… SFX_UI_linchpinLinchpinPick mởResonanceCallout tier=I ('CỘNG HƯỞNG: <tên>' 1.2 s) SFX_UI_resonance_1 · ResonanceCallout tier=II ('CỘNG HƯỞNG II: <tên>' 1.2 s) SFX_UI_resonance_2Cộng Hưởng bậc I · II
EvolutionFuse (draft đóng → World ×0 0.8 s EVO1–3 / 1.5 s EVO4; 2 ico… SFX_UI_evo_fusetrình diễn Tiến HoáHeroSelected (Lửa Canh: xác nhận hero / ult / Dạng Rèn / 2 kỹ năng kh… SFX_UI_hero_selectđổi hero ở Lửa Canh
ShopPurchase (Sạp Rong SHP/DOCK, mua bằng Vàng Mã; Chợ Đò mở pool dùn… SFX_UI_shop_buymua ở Sạp RongRewardPanelOpen (thưởng phòng: chọn Relic 1/2 hoặc 1/3 ELT_RISK, thẻ … SFX_UI_reward_revealReward, BossVictory

108. Giới hạn chữ cho loc

  • Nguồn VI → EN trục → 8 ngôn ngữ (43 §12.2). Giới hạn đo bằng UI px ở cỡ 125% (bề rộng thật), không bằng ký tự; cột "≈ ký tự" chỉ để người viết ước lượng (VI/EN, bước TB FNT_BW_M 6 px, FNT_BW_S 4 px). Mọi chuỗi phải vừa ở 140% độ dài EN (DE/RU/PT-BR); CI chạy pseudo-loc (+40% + dấu chồng) chụp mọi màn, lỗi khi tràn hộp.
  • Cấm cắt "…" trên chữ gameplay; chỉ tên người chơi (bảng xếp hạng) được cắt. Tràn → rút gọn bản dịch, không thu font.
  • Chuỗi UI không thuộc file dữ liệu: Assets/_Project/Localization/ui_strings.csv khoá ui.<screen>.<slug>; chuỗi dữ liệu: khoá <file>.<id>.<field> do build sinh (51 §3). Mọi {param} thuộc danh sách placeholder 51 §3.
VaiHộp (UI px, 125%)Dòng tối đa≈ ký tự VI/EN
Nút36–120 × 121≤ 18
Tab≤ 64 × 121≤ 10
Nhắc nút (nhãn)≤ 641≤ 12
Tên thẻ / Edge / Relic / kỹ năng112 × 242≤ 18 / dòng (name_vi ≤ 30 tổng)
Hiệu ứng thẻ112 × 625≤ 96
Chip tag52 × 91≤ 9
Callout240 × 17 (FNT_BW_L)1≤ 28
Phụ đề tell140 × 91≤ 24
Gợi ý onboarding200 × 121≤ 32
Mục tiêu (tên / tiến độ)112 × 91 + 1≤ 18 / ≤ 22
Tên boss (L) / Tinh Anh (nameplate)240 / 641≤ 24 / ≤ 16
Thẻ MACRO / mẹo Tro Nhớ200 × 242≤ 56
Thoại NPC (1 hộp)291 × 363≤ 140
Bark—1≤ 48 (14 §14)
Sự kiện EVT thân / lựa243 × 90 / 243 × 167 / 1 + hệ quả≤ 420 / ≤ 48
Mô tả chi tiết menu trạm203 × 12010≤ 240
Codex trang203 × cuộnkhông giới hạn (cuộn)~150 từ (Bible §10.3)
Toast128 × 182≤ 40
Tooltip152 × 546≤ 120
  • CJK: hộp như trên; tính theo trường hợp chật nhất (Deck: ô 8 UI px, dòng 10 UI px) → giới hạn ký tự CJK = ⌊rộng / 8⌋ × ⌊cao / 10⌋ (vd hiệu ứng thẻ 112 × 62 → 14 × 6 = 84 ký tự).

119. Móc trợ năng (UI phía thực thi; luật gốc 11 §4, Bible §4.3, meta.accessibility)

Mọi tuỳ chọn đọc qua 1 dịch vụ AccessibilitySettings phát sự kiện AccessibilityChanged(key); mọi prefab UI lắng nghe và dựng lại trong ≤ 1 frame; không màn nào đọc PlayerPrefs trực tiếp.

Tuỳ chọnMóc UIGhi chú
Tell mù màuHUD: mũi tên ngoài màn + phụ đề dùng ◇ / ▲ / chấm; recap INV-16 dùng cùng glyph; Cài đặt có ảnh trước/sauworld do VFX (31 R11)
Phụ đề tellkhối SUBS (§4.1), "[tinh · trái]" / "[ù · sau lưng]" / "[ĐÁP]" + "[Tro đọc]"≤ 3 dòng chồng, 1.2 s/dòng
Chỉ hìnhcung sáng 8 px quanh vòng chân hero (world, VFX) — UI chỉ bật cờ11 §4.2
Mũi tên ngoài mànmũi tên 7×7 ở mép SAFE, màu + hình tell, ≥ 0.45 s trước va chạmngoại lệ H9
Giảm chớpHUD không nháy (HP thấp tĩnh 80%, Vỡ Thế đặc liền, ult đầy tĩnh); tắt chớp màn31 R9
Giảm chuyển động§7.1—
Cảnh báo nhạy sángPhotoWarning (§6.1) trước Language lần đầu; nút "Mở Trợ năng ngay"42 §1.2
Tự tạm dừng khi mất focusgame.auto_pause_focus (§3.1); Deck khoá bật42 §8
Cỡ chữ§1.2 (100/125/150%)Deck sàn 125%
Thời gian giữUI_C_Hold ×0.5–×2.0áp cả "giữ B bỏ qua", "giữ X Xoá" của Draft
Remap / 1 taymàn remap theo action_id; preset 1 tay đổi cả map UI (xác nhận/quay lại về cùng nửa tay cầm)không hành động UI nào cần 2 nút cùng lúc
Độ mờ HUD · Số sát thương · Hiện nút trên HUD§4.6 H2/H6, §4.1—
Thương Xótcờ run mercy_used "không tính bảng": HUD khối MODE (icon nến tắt 8×8, §4.1) + Pause đầu + RunSummary + Leaderboard (biểu tượng + chữ)Bible §4.3
Đọc màn hìnhmỗi phần tử focus phát chuỗi a11y_label (tên + giá trị + trạng thái) cho API đọc màn hình của HĐH nếu có; thẻ: tên · rarity · tag · hiệu ứngkhông chặn ship nếu nền tảng không có API
Rung tay cầmCài đặt 0–100%; UI không tự rung trừ UI_C_Hold chốt (40 ms)—

1210. Onboarding & hướng dẫn

10.1 Lần chạy đầu (khớp 18 §12)

PhotoWarning (4 s, bỏ qua sau 1.5 s) → Language → Consent (2 câu hỏi) → QuickSetup (6 dòng, bỏ qua được) → Title ("Chơi" duy nhất nổi bật) → cảnh mở 20 s (bỏ qua sau 2 s) → ChoosePath (3 preset, mặc định Hành Trình; 19 §5.6) → Loading → Lửa Canh ST_HEARTH (Ulla, H01 khoá sẵn SK01 + SK03, UL1, AS1, không menu) → đi bộ tới Bến Đò ST_DOCK (chỉ 2 trạm sáng; nhắc INTERACT) → DockDepart chỉ có Hành Trình → run 1. Không popup chữ dài; mọi hướng dẫn = beat NPC (≤ 3 câu) + 1 dòng HINT.

10.2 Gợi ý trong run (HINT, 1 dòng, glyph nút theo thiết bị)

Luật: mỗi gợi ý hiện tối đa 2 lần/tài khoản (đếm ở settings_shared.json), chỉ trong 3 run đầu đời (trừ dòng ghi khác); tự tắt khi người chơi làm đúng hành động hoặc sau 6 s; không hiện khi boss đang windup P hoặc trong 60 s đầu Hồi I nếu đã hiện 3 gợi ý trong phòng đó; Cài đặt "Gợi ý nút" TẮT → không hiện.

KíchChữ (mẫu loc)Tắt khi
Vào phòng 1 run 1"{MOVE} Di chuyển · {ATTACK} Đánh"đánh trúng 5 lần
10 s sau phòng 1 bắt đầu"{DASH} Lướt — xuyên qua đòn"Lướt 1 lần
Glint 1 của tell vàng đầu tiên nhắm hero"Vàng: chạm {ANSWER} để ĐÁP"ĐÁP thành công 1 lần
Vùng tím đầu tiên"Tím: chỉ Lướt mới thoát"Lướt ra khỏi vùng P
Vùng chấm đầu tiên"Chấm xám: bước ra ngoài"rời vùng
Draft đầu tiêntooltip trên thẻ 1: "Chọn 1 thẻ · {Y} Đổi · {B} giữ: Bỏ qua"chọn thẻ
Dư Âm đầy lần đầu"{ULT} Tuyệt kỹ sẵn sàng"dùng Ult
HP < 50% và có bình"{POTION} Uống bình máu"uống
Map lần đầutooltip nút ELT/MBS: "Mỗi Hồi phải qua đúng 1 Cổng"chọn nút
Tinh Anh đầu tiên"Thanh bạc = Thế: ĐÁP và đòn nặng làm vỡ"Vỡ Thế 1 lần
Run 2, phòng 1"Giữ {ANSWER}: {verb giữ của hero}"dùng verb giữ
Lần bật thế đáp Tro Nhớ đầu tiên đời (run ≥ 4)"Giữ {ASH_INSPECT}: xem Tro đang nhớ"mở AshInspect
Lên cấp khi Cổng/boss (lần đầu)"Cấp chờ: thẻ mở sau trận"— (2 lần)
  • Hub: run 1 → RunSummary tab Thưởng nhấn "Giữ 100% tiền meta khi chết"; về hub: beat Ulla (Phục Dựng), Grem (rèn H02), Hol (bia mộ) — tối đa 2 trạm mới/lần về hub; run 3: Răm mời bài ĐÁP 1 ở Sân Tập. "Thức Lại" ẩn run 1–2.
  • Không có màn hướng dẫn riêng/không phòng tập bắt buộc; Sân Tập là tuỳ chọn (0 thưởng).

1311. Telemetry UI (chỉ khi đồng ý, 43 §15)

ui_screen {screen, from, dwell_s} · ui_draft {options[], picked, rerolls, banish, lock, skip, time_s, auto_pick} · ui_setting {key, value} · ui_hint {hint, shown, done_s} · ui_ash_inspect {hold_s}. Dùng để kiểm P5 (đọc thẻ < 3 s: trung vị time_s ≤ 3.0 ở draft thứ 10+) và KPI Tro Nhớ (≥ 60% người chơi mở AshInspect ≥ 1 lần trong 5 run).

14Quy tắc cho dev/AI

  • HUD và mọi màn dựng trong SAFE 427×267 UI px; 1 bản số cho 1080p và Deck; không neo phần tử tương tác ra mép canvas. Chỉ zoom nguyên, chỉ font FNT_BW_* / CJK đã duyệt, không scale lẻ chữ/khung.
  • Màu chỉ từ token §1.3; thêm màu = thêm token (lý do + màn) và kiểm hue/S ngoài dải tell (INV-01a). Không bao giờ vàng #ffd84a/tím #b14cff hay màu cùng dải trên UI, trừ ngoại lệ H9 (biểu diễn chính tell).
  • Không phần tử HUD nào trong vùng cấm 160×100 giữa SAFE; mọi khối HUD áp luật nhường H1; số sát thương theo 10 §6.5 nguyên văn.
  • Chữ thẻ/tooltip = mẫu câu từ params (không viết tay số); giới hạn §8 đo ở 125%; CI pseudo-loc trên mọi màn.
  • Mọi màn: điều hướng tường minh, focus đầu như spec, khoá xác nhận 0.30 s cho màn mở do sự kiện, nhắc nút đúng bộ glyph thiết bị cuối, chạy 100% bằng tay cầm.
  • Hành động phá huỷ/không hoàn → UI_C_Hold 1.0 s (ngoại lệ: "Xoá toàn bộ tiến trình" 2.0 s × 2 lần, 43 §7.3); mua meta giá lớn → 0.5 s; focus mặc định của popup = lựa an toàn; màn đồng ý (Consent khối 1) không có lựa chọn sẵn, 2 nút ngang nhau.
  • Mọi option trong Settings lấy khoá/giá trị/mặc định từ 42 (§6.3 chỉ xếp chỗ); thêm option = thêm vào 42 trước.
  • Credits sinh từ credits.json lúc build (§5.7.1); thêm âm CC BY hoặc thư viện có giấy phép = thêm nguồn credit, CI credits_check chặn thiếu.
  • Hiện/ẩn màn qua UIManager (không SetActive tay); async bằng UniTask; tween DOTween SetUpdate(true) (đồng hồ Real) và Kill khi đóng (rule third-party).
  • Id âm/FX chỉ từ UI.json (SFX_UI_*, VFX_UI_*) + SHARED/HUB đã liệt kê; nhạc chỉ cue doc 32 §3.7.
  • Tên hiển thị theo Bible §11 (Khăn Tang, Độ Tang, Dạng Rèn, Dư Âm, Then Chốt…); không hiện id loại; không tên game/studio/thương hiệu có thật trong chuỗi UI.
  • Sửa doc này khi đổi số UI → đồng bộ hub ArtStyle §8 (token, kit, chữ, motion) cùng lượt + chạy art-style.py lint --changed.

15Quyết định đã chốt

Mã / ngàyQuyết địnhLý do
UI-01 · 2026-11-07Toạ độ UI = UI px trong SAFE 427×267 giữa canvas, thang = zoom world nguyên; 1 bố cục chung 1080p và DeckBible §10.4 "UI neo theo vùng an toàn"; Deck 427×267 = SAFE
UI-02 · 2026-11-07Font = bộ bitmap tự vẽ FNT_BW_S/M/L/XL/NUM (2 tầng dấu tiếng Việt) + 1 font CJK 12 px giấy phép mở; cỡ chữ = đổi font, không scaleBible §10.3 + 43 §12.2; tránh rủi ro giấy phép font; hub ArtStyle §8d còn "open" → cần đồng bộ
UI-03 · 2026-11-07INV-01a áp cho UI: XP bar ui-xp (lục xám) thay vàng demo; Thế boss bạc; HP boss ngà08-Arena-HUD.md dùng XP vàng + Thế vàng → trái INV-01a (demo = lịch sử)
UI-04 · 2026-11-07Khung rarity UI = hex canon Bible §6 (#9a95a8 / #5fa8d3 / #c86a8a / #f4f1ea / #141016 + #d8cfc0); glyph mù màu rarity = số chấm (1/2/3/✶/—)UI.json DraftOpen: 3 thẻ rút ra lệch 0.06 s (cả màn chọn Relic/Edge hero đầu … VFX_UI_card_reveal/card_pick_burst ghi hex khác [ASSUMED, chờ token UI hub] (#9a96a8, #8fb4d8, #c0584a) và glyph ◆/▲ trùng nghĩa Tro Nhớ/tell P → chủ UI.json sửa theo doc này
UI-05 · 2026-11-07Hub: tương tác = INTERACT B / G (+ Đánh X / LMB), dịch chuyển nhanh = MAP d-pad lên / M; View/Tab ngoài trận = "Chi tiết"Bible §1.1 + DEC-2026-11-07-06; 18 §1.1 ghi "MAP (Back/Tab)", "INTERACT (A/E)" lệch canon → doc 18 sửa
UI-06 · 2026-11-07Bản đồ Hồi: khoảng làn 54, khoảng hàng 40 UI px (± 3 jitter)16 §2.1 "96/72 px UI" không vừa 6 hàng trong 267 UI px; giữ tỉ lệ ≈ 4:3
UI-07 · 2026-11-07Không minimap; vị trí địch quan trọng = mũi tên mép SAFEphòng = 1 sân; giảm che màn trong bầy
UI-08 · 2026-11-07HUD nhường tell/hero bằng độ mờ (α 0.35, boss bar 0.60) thay vì dời khốigiữ vị trí cố định (đọc theo thói quen) mà không che tell (31 §1 thứ bậc)
UI-09 · 2026-11-07Giữ để xác nhận: phá huỷ 1.0 s, mua meta lớn 0.5 s, chỉnh ×0.5–×2.016 §8.2 (Bỏ run 1.0 s) + 18 §2 (0.5 s) + UiHoldStart → UiHoldComplete (giữ để xác nhận 1.0 s); thả sớm = vòng … VFX_UI_hold_ring
UI-10 · 2026-11-07Thẻ draft 128×176 (4 thẻ: 101×176), hiệu ứng ≤ 96 ký tự ở 125%đọc < 3 s (P5), vừa Deck mặc định 125%
UI-11 · 2026-11-07Thêm 13 màn #41–#53 (PhotoWarning, QuickSetup, ChoosePath, HubPause, SaveConflict, SaveNotice, PadLost, RankedNotice, CrashPrompt, BugReport, DemoEnd, EaProgress, Loading) + trạng thái Leaderboard (§6.13)42 §1.2, 19 §5.6/§6.2, 41 §4, 43 §3, §4, §7.3, §8.1, §15, 50 §5.3, 60 PV01/PV03/PV05/DV04/DM06–07 đòi màn mà danh mục chưa có
UI-12 · 2026-11-07Consent = 2 câu hỏi (telemetry không chọn sẵn, 2 nút ngang nhau; crash 3 nấc mặc định "Hỏi mỗi lần"), "Tiếp" khoá tới khi chọn khối 1, focus đầu = tiêu đề panel43 §15.1 + 60 PV01; bản cũ 1 câu, focus "Không" = gợi ý ngầm
UI-13 · 2026-11-07QuickSetup 6 dòng (Cỡ chữ · Tell mù màu · Phụ đề tell · Rung màn · Giảm chớp · Preset điều khiển), không phải 542 §1.2 bước 3 liệt kê 6 mục; 42 sở hữu option
UI-14 · 2026-11-07Giữ game.auto_pause_focus là option (mặc định bật, khoá bật trên Deck); §3.1 tạm dừng theo option; Deck suspend + tay cầm rời luôn tạm dừng42 §8 đã có khoá này; 43 §8.3 bắt buộc trên Deck (suspend) — PC cửa sổ được chọn chạy nền
UI-15 · 2026-11-07Khối HUD MODE (343, 44, 80, 10); cột phải dời: MODS (311, 56) · OBJECTIVE (311, 68) · TOAST (295, 100, 128, 24)MODE cần ngay dưới đồng hồ RUN; TOAST cũ (283, 90, 140) chạm vùng cấm HUD x ≤ 293
UI-16 · 2026-11-07Tab Cài đặt "Dữ liệu" đổi tên "Dữ liệu & quyền riêng tư"; "Xoá toàn bộ tiến trình" giữ 2.0 s × 243 §15.1 gọi "Quyền riêng tư", 43 §7.3 "giữ nút 2 s"
UI-17 · 2026-11-07Màn tải Loading dùng shader InkWipe (không id VFX) + 1 dòng mẹo codex, chỉ hiện khi tải > 0.5 sUI.json không có VFX_UI_* chuyển cảnh; tránh chớp màn tải cho tải ngắn
UI-18 · 2026-11-07LinchpinPick mở khi Lv ≥ 11 (không phải 12); công tắc "Trí nhớ xuyên run" = khoá game.cross_run_memory (tab Trò chơi, mặc định bật)DEC-2026-11-07-14 (Lv 11) thắng bản cũ; khoá theo 42 §8 để mọi option Cài đặt có khoá lưu