1Đội ngũ & cách làm việc
1.1 Vai trò
| Vai trò | Ai | Trách nhiệm | Giờ/tuần |
|---|---|---|---|
| Owner / dev duy nhất | Người | Quyết định sản phẩm, duyệt contact sheet act, playtest, Unity Editor (scene, prefab), store, ngân sách | ~30 h |
| Agent lập kế hoạch | /planning-task → /planning-system (stage 04→05→06) |
Biến mục GDD thành TechSpec + task backlog có tiêu chí | tự động |
| Agent thực thi | /run-backlog (vòng lặp run-backlog-loop) |
Code, dữ liệu, act pixelfx, test; cổng code-reviewer + performance-reviewer (đường nóng) + security-auditor (save/IAP) + qa-verifier |
tự động, đêm + ngày |
| Agent UI | /new-ui, /ui-mockup, /refactor-ui, ui-visual-reviewer |
Mockup 1080×1920 → prefab → duyệt hình | tự động |
| Agent art | pixelfx skill, thang image-generation (Pillow → agy; bf-img chỉ khi owner cho phép — 00 D8), art-style-reviewer |
Act, VFX, icon, nền | tự động + owner duyệt |
| Agent QA | /auto-test-device, BugHub, /fix-bug |
Chơi thử trên máy, ghi bug, sửa | theo milestone |
| Âm thanh | bf-sfx (Freesound CC0/CC BY) + gói nhạc bản quyền |
SFX ~220, nhạc 16 bài | owner chọn |
1.2 Nhịp tuần
- Thứ Hai: owner duyệt bảng build order (§4), chạy
/planning-taskcho 3–6 task kế,/add-to-backlog. - Hằng ngày/đêm:
run-backlog-loop --auto-model-by-tierchế độcurrent(cần Unity MCP cho compile-check) cho task code; chế độworktreechỉ cho task dữ liệu/doc (13 §21). Owner duyệt contact sheet act mỗi sáng (≤ 45 phút). - Thứ Sáu: build thử máy Mid + Low,
/auto-test-devicetheo charter tuần, playtest 20 phút, xem autosim đêm (tầng chết, tỉ lệ phòng thủ), cập nhật rủi ro. - Ngân sách giờ owner/tuần: duyệt act & art 8 h · playtest & cân bằng 8 h · Unity Editor/tích hợp 8 h · kế hoạch, store, vận hành 6 h.
2Lộ trình M0–M5 (33 tuần)
| Mốc | Tên | Tuần | Nội dung | Tiêu chí thoát |
|---|---|---|---|---|
| M0 | Pre-production / Proof | W1–W3 (3 tuần) | pixelfx nhánh deepstair (costume + katana + body-sheet.mjs + move-export.mjs), project setup URP 2D + PixelViewport + 3.GAMEPLAY, CombatClock + SimWorld + Rng, PixelClipPlayer, Kaito 12 đòn + 3 lộ trình, DefenseResolver + ClashDetector, CombatSandbox |
Kaito vs 3 hình nộm + 1 địch mẫu: 12 đòn nối qua 3 lộ trình; 0 lệch hit-frame; lỗi khung chạm phòng thủ 0 tick ở x1/x3; 10,000 roll khớp ±1.5%; cùng seed → cùng hash trận 60 s; 60 FPS máy Mid với 10 hình nộm |
| M1 | Vertical Slice | W4–W9 (6 tuần) | Combat core đủ (01), Feel, Combo Engine + Style/Overdrive/Gauge, HeroBrain/EnemyBrain/Director, Floor/Wave/Run + snapshot, Echo DSL + OfferGenerator, Kaito + Aldric (bộ gốc + Hồi Âm Thông Thạo 0–5), EN01–EN06, WD01–WD02, BS01–BS02, S01–S02, LD00–LD03, ~60 Hồi Âm (≈ 40 riêng + ≈ 20 chung), HUD/EchoPick/Downed/Kết Quả, Rèn Luyện, Home tối thiểu, save bảo mật | Run B1→B20 chạy trọn không lỗi; playtest 'đã mắt' ≥ 4/5 (≥ 8 người); autosim 200 run/anh hùng không crash; khôi phục snapshot đầu wave giống hệt; 0 GC/frame trong Combat |
| M2 | Core Alpha | W10–W17 (8 tuần) | Kaito + Aldric đủ ~40 Hồi Âm; Vex, Brann, Lyra; EN07–EN14 + AF01–AF10; WD03–WD06, BS03–BS06; S03–S06; Cây Đèn Hồn, Sảnh Anh Hùng (cấp/sao/Thông Thạo), Di Vật, Sổ Ký Ức, Lửa Trại; ~100 Hồi Âm chung; Auto-Pick, Xuống Nhanh, Auto-Rerun; LD04–LD08; headless autosim + hồi quy 1,000 seed trong CI | Chơi được tới B60; autosim hiệu chỉnh balance_sim.py (sai số tầng chết trung vị ≤ 3 tầng); test tất định & migration save xanh; 5 anh hùng trong ±15% tỉ lệ thắng Boss 50 |
| M3 | Content Beta | W18–W25 (8 tuần) | Rook, Mora, Sable; EN15–EN20; WD07–WD10, BS07–BS10; S07–S10; Bậc Kinh Hoàng, Vực Không Đáy, Thử Thách Ngày; kiếm tiền 09 (Shop, Triệu Hồi, Rương, gói, quảng cáo), LiveOps 10, Trang Phục, FTUE + cinematic, VI/EN, analytics + Remote Config, âm thanh, toàn bộ art | Feature complete; 0 blocker/critical; hạ B100 bằng autosim với meta D45; crash-free nội bộ ≥ 99.5%; đủ ngân sách hiệu năng 3 tier |
| M4 | Soft Launch | W26–W30 (5 tuần) | Tier hiệu năng & tối ưu máy Low, cân bằng theo telemetry + autosim, store assets, PAD, phát hành thử (Việt Nam, Philippines, Canada) | D1 ≥ 40%, D7 ≥ 15%, D30 ≥ 5% (dự phóng từ D14), crash-free ≥ 99.5%, ANR ≤ 0.3%, ARPDAU ≥ $0.08, chọn tay D7+ ≥ 60% |
| M5 | Global Launch | W31–W33 (3 tuần) | Sửa lỗi soft launch, mùa Lantern Pass 1, sự kiện đầu, banner Mora (mùa lẻ) | Phát hành toàn cầu Android + iOS; KPI soft launch giữ ≥ 90% sau mở rộng |
Cổng chuyển mốc (owner ký): tiêu chí thoát đạt 100%; 0 bug Blocker/Critical mở; Determinism1000 xanh (từ M2); ngân sách hiệu năng tier Mid đạt trên máy thật; KPI cảm nhận (playtest) đạt. Trượt cổng > 1 tuần → áp thang cắt (§6) thay vì kéo dài mốc.
Đường găng: pixelfx costume/vũ khí (T01) → exporter (T02) → SimWorld/PixelClipPlayer (T04) → combat core → DefenseResolver → Kaito. Mọi nội dung act phụ thuộc T01–T02; chậm ở đây chậm cả dự án → M0 dồn toàn lực vào đường này.
3Vertical slice (M1)
| Trong phạm vi | Ngoài phạm vi (M2+) |
|---|---|
| Kaito + Aldric: bộ gốc (~22 đòn, 10–13 lộ trình gốc, Kỹ Năng, Tuyệt Kỹ, Tuyệt Sát, đòn phòng thủ) + Hồi Âm mở ở Thông Thạo 0–5 (≈ 20/người, kèm đòn/lộ trình của chúng) | Phần Hồi Âm riêng còn lại (M2), 6 anh hùng khác |
| EN01–EN06 (lính S01–S02) + khung affix (≥ 2 affix) | EN07–EN20, AF03–AF10 |
| WD01 Răng Sỏi (B5), WD02 Kẻ Đào Mộ Hask (B15), BS01 Gorrak (B10), BS02 Valcor (B20) | WD03+, BS03+ |
| Địa Tầng S01 Hầm Rượu Đổ Nát, S02 Hầm Mộ (art, đèn, nhạc) | S03–S10 |
| B1–B20: FloorIntro → Combat → FloorClear → EchoPick (cầu thang xoắn) → Descent, Downed/hồi sinh, Kết Quả | Bậc Kinh Hoàng, Vực Không Đáy, Thử Thách Ngày |
| Chiếu Nghỉ LD00 (Cổng Boss), LD01, LD02, LD03 | LD04–LD08 |
≈ 60 Hồi Âm tổng: ≈ 40 riêng (trên) + ≈ 20 chung (6 xúc tác ST01–ST06, DF01–DF04, FI01, FR01, TG01–TG03, SUST cơ bản, ECHO00) + toàn bộ 14 op handler |
~80 Hồi Âm chung còn lại, RESO, PACT |
| Combat đủ 01: phòng thủ 5 kết quả, Thế/Tuyệt Sát, Phong Độ, Bộc Phá, Cổng FOCUS/VERDICT | Thức Tỉnh của anh hùng khác |
| Rèn Luyện, Account, Home + RunPrep tối thiểu, save bảo mật, snapshot | Cây Đèn Hồn, Di Vật, Sảnh Anh Hùng đầy đủ, kiếm tiền, LiveOps |
| FTUE bước 1–10 dạng thô (không cinematic) | Cinematic, FTUE 11–14 |
Giao thức playtest slice: ≥ 8 người (đối tượng 00 §1), mỗi người xem 10 phút không chạm + 10 phút chơi; phiếu: "đã mắt" 1–5 (P1, mục tiêu ≥ 4), nhận ra Gạt/Chặn/Né không cần giải thích (≥ 80%), chọn thẻ có hiểu hệ quả (≥ 70% nói được "combo mới xuất hiện"). Ghi hình màn hình để đo khoảng trống phòng thủ.
4Thứ tự build cho /planning-task
4.1 Cách dùng
- Mỗi dòng là một module có thể đi riêng qua
/planning-task GDD/Final/<doc> §<mục>; dòng ghi/planning-systemlà hệ lớn → pipeline 04→05→06 sinh nhiều task theo thứ tự topo;×N= tách N task (ví dụ anh hùng: 4 task × ~12 đòn, đúng ghi chú 00 §11 M8). - Phụ thuộc phải ở trạng thái DONE trước khi
/add-to-backlogtask phụ thuộc (promote cảnh báo phụ thuộc gãy). - Bốn nhóm "cấm tự bịa" mà
/planning-systemdừng để hỏi đã có câu trả lời trong GDD: kinh tế/phần thưởng → 08 (+ CSV); save-migration → 13 §11.4; backend/IAP/bảo mật → 09 + 13 §11.2; luồng UX lõi → 11. Task chỉ dẫn mục đó trong**Context docs:**. - Task chạm
*DataPlayer*,*SaveData*,*Purchase*,*IAP*→ tự gọisecurity-auditor; task chạm Sim/Pixel/Feel →performance-reviewer. - Ánh xạ 00 §11: M1 pixelfx · M2 Pixel runtime · M3 Combat Core · M4 Combo · M5 AI · M6 Floor/Run · M7 Echoes · M8 Hero content · M9 Enemies · M10 Meta · M11 Kinh tế/Kiếm tiền · M12 LiveOps · M13 UI/FTUE · M14 Audio/VFX/Art · M15 Analytics/RC/Tier/Autosim.
4.2 Bảng build
| Task | Module 00 §11 | Nội dung | Nguồn | Phụ thuộc | Tier | Mốc | Lệnh |
|---|---|---|---|---|---|---|---|
| T01 | M1 | pixelfx deepstair: costume (phụ kiện rig, ramp phụ) + 8 vũ khí mới |
02 §3–4 | — | L | M0 | /planning-task |
| T02 | M1 | pixelfx exporter body-sheet.mjs + move-export.mjs (khung khóa vào tick hit/contact) |
02 §5, 13 §9.1 | T01 | M | M0 | /planning-task |
| T03 | M2 | Project setup: URP 2D, PixelViewport, layer/sorting, asmdef 3.GAMEPLAY(+Editor/Tests), Ports, sửa ProjectSettings | 13 §1–4 | — | M | M0 | /planning-task |
| T04 | M2 | SimWorld + CombatClock + Rng/stream + BodyClip/MoveDef importer + PixelClipPlayer | 13 §5, §9; 02 §7 | T02, T03 | L | M0 | /planning-system |
| T05 | M3 | StatSheet + DamageService + HitboxQuery2D + Posture/Poise/Reaction + StatusService (EffectRegistry ≥ 1001) | 01 §3–4, §12–13 | T04 | L | M0 | /planning-system |
| T06 | M3 | DefenseResolver + ClashDetector + clip phòng thủ + bằng chứng khung chạm (CombatSandbox) | 01 §5, 13 §6 | T05 | L | M0 | /planning-system |
| T07 | M4 | MoveRunner + RouteRunner + ComboDirector + parser cond (Kaito 12 đòn) |
01 §6, 13 §7 | T05 | L | M0 | /planning-system |
| T08 | M10 | SecureSaveStore (mã hóa, checksum, 2 backup, migration) + module save mới | 13 §11 | T03 | M | M1 | /planning-task |
| T09 | M3 | Feel: hit-stop cục bộ, slow-mo, ShakeService, TintService, AfterimagePool, DamageNumberPool | 01 §14, 13 §9.3 | T05 | M | M1 | /planning-task |
| T10 | M4 | Style + Overdrive/Thức Tỉnh + khung HeroGauge + Kỹ Năng AUTO + Tuyệt Sát | 01 §7–9 | T07 | M | M1 | /planning-task |
| T11 | M5 | HeroBrain + chọn mục tiêu + khoảng giao chiến | 01 §10 | T06, T07 | M | M1 | /planning-task |
| T12 | M5 | EnemyBrain + CombatDirector (token, vòng vây, báo hiệu, giãn 0.25 s) | 01 §11, 04 | T06 | L | M1 | /planning-system |
| T13 | M6 | Floor/Wave/Spawn + giới hạn tier + layout S01–S02 | 05 §1–4 | T12 | M | M1 | /planning-task |
| T14 | M6 | Run state machine + Descent + seed + snapshot + hồi sinh + ports RunSetup/RunResult | 05 §5–9, §16; 13 §11.5 | T13, T08 | L | M1 | /planning-system |
| T15 | M7 | EchoDatabase + EchoDslParser + op list biên dịch + validator | 06 §8, 13 §8 | T07, T10 | L | M1 | /planning-system |
| T16 | M7 | Op handlers + RunEventBus + trigger + trần (2%/s, độ sâu 2, ICD) | 06 §8.2–8.6 | T15 | L | M1 | /planning-system |
| T17 | M7 | OfferGenerator + pity + Đổi/Loại/Bỏ qua + lưu trước khi hiện | 06 §4–5 | T15, T14 | M | M1 | /planning-task |
| T18 | M8 | Kaito H01: bộ gốc + Hồi Âm TT 0–5 ở M1, phần còn lại M2 (4 task × ~12 đòn, rule KAI_*) | Heroes/H01 | T16, T01 | L | M1 | /planning-task ×4 |
| T19 | M8 | Aldric H02: như Kaito (4 task) | Heroes/H02 | T18 | L | M1 | /planning-task ×4 |
| T20 | M9 | EN01–EN06 + khung affix + đạn PJ | 04 §2–3 | T12 | L | M1 | /planning-task |
| T21 | M9 | WD01–WD02 + BS01–BS02 (1 task/trùm) | 04 §4–5 | T20, T10 | L | M1 | /planning-task ×4 |
| T22 | M10 | Account + Rèn Luyện + kỷ lục độ sâu + hàng đợi FeatureUnlock | 07 §2–3, 00 §8 | T08 | M | M1 | /planning-task |
| T23 | M13 | UI trong run: RunHud, EchoPick, BuildView, Downed, RunResults, Pause | 11 §4 | T14, T17 | L | M1 | /new-ui |
| T24 | M13 | Home + RunPrep tối thiểu | 11 §3 | T22 | M | M1 | /new-ui |
| T25 | M6 | Chiếu Nghỉ LD00–LD03 (M1), LD04–LD08 (M2) | 05 §6 | T14, T17 | M | M1 | /planning-task |
| T26 | M15 | Headless autosim CLI + xuất CSV + hiệu chỉnh balance_sim | 13 §17 | T14, T17 | M | M2 | /planning-task |
| T27 | M15 | Hồi quy tất định 1,000 seed + golden + CI batchmode | 13 §5.7, §18 | T26 | M | M2 | /planning-task |
| T28 | M7 | Auto-Pick + Tiêu Điểm Build (preset) | 06 §6 | T17 | S | M2 | /planning-task |
| T29 | M8 | Vex H03, Brann H04, Lyra H05 (4 task/anh hùng) | Heroes/H03–H05 | T19 | L | M2 | /planning-task ×12 |
| T30 | M9 | EN07–EN14 + AF01–AF10; WD03–WD06, BS03–BS06 | 04 | T21 | L | M2 | /planning-task ×9 |
| T31 | M10 | Sảnh Anh Hùng: cấp/sao/Thông Thạo/thưởng sở hữu | 03 §5, 07 | T22 | L | M2 | /planning-system |
| T32 | M10 | Cây Đèn Hồn | 07 §4 | T22 | M | M2 | /planning-task |
| T33 | M10 | Di Vật + nâng cấp + bộ | 07 §5 | T22 | L | M2 | /planning-system |
| T34 | M10 | Sổ Ký Ức + Lửa Trại | 07 §7–8 | T22 | M | M2 | /planning-task |
| T35 | M6 | Xuống Nhanh + Auto-Rerun + tốc độ x1.5/x2/x3 | 05 §11, 01 §15 | T14, T28 | M | M2 | /planning-task |
| T36 | M8 | Rook H06, Mora H07, Sable H08 (4 task/anh hùng) | Heroes/H06–H08 | T29 | L | M3 | /planning-task ×12 |
| T37 | M9 | EN15–EN20; WD07–WD10, BS07–BS10 (BS09 Bóng Gương sao chép anh hùng) | 04 | T30 | L | M3 | /planning-task ×9 |
| T38 | M6 | Bậc Kinh Hoàng DR01–DR20 + Vực Không Đáy + Thử Thách Ngày | 05 §12–15 | T35 | M | M3 | /planning-task |
| T39 | M11 | Shop + Triệu Hồi (pity, công khai tỉ lệ) + Rương Di Vật | 09 §4 | T31, T33 | L | M3 | /planning-system |
| T40 | M11 | IAP: gói/Thẻ Tháng/Quỹ/Heo Đất/Gỡ QC + quảng cáo thưởng/xen kẽ | 09 §2–3 | T39 | L | M3 | /new-package |
| T41 | M12 | LiveOps: nhiệm vụ, đăng nhập, Lantern Pass, sự kiện, push | 10 | T22 | L | M3 | /planning-system |
| T42 | M10 | Trang Phục (Wardrobe) + body sheet skin | 07 §6, 02 §3.4 | T31, T01 | M | M3 | /planning-task |
| T43 | M13 | UI meta còn lại (HeroHall, Tree, Relics, Codex, Campfire, Summon…) | 11 | T31, T32, T33, T34 | L | M3 | /new-ui ×10 |
| T44 | M13 | FTUE 14 bước + FirstLaunchCinematic + BossIntro | 00 §7.1, 11 | T43, T21 | L | M3 | /planning-task |
| T45 | M14 | Âm thanh: nhạc lớp theo Phong Độ/Dòng Chảy, bank SFX, pitch chuỗi Gạt | 12 | T23 | M | M3 | /planning-task |
| T46 | M14 | Art Địa Tầng S01–S10 (tileset, parallax, đèn) + icon | 12 | T13 | L | M3 | /planning-task ×10 |
| T47 | M15 | Analytics + Remote Config + PerfTierService + gói tier | 13 §14–16 | T23, T40 | M | M3 | /planning-task |
4.3 Làn song song (1 dev + vòng lặp agent)
| Làn | Task | Chế độ chạy | Ghi chú |
|---|---|---|---|
| A — Lõi sim | T03–T07, T09–T17, T25–T28, T35, T38 | current + Unity MCP |
Tuần tự, cần compile-check; mọi task đổi logic sim cập nhật golden |
| B — Nội dung act/dữ liệu/art | T01–T02, T18–T21, T29–T30, T36–T37, T45–T46 | worktree cho dữ liệu thuần, current khi có rule C# |
Duyệt contact sheet mỗi sáng |
| C — Meta/UI/kiếm tiền | T08, T22–T24, T31–T34, T39–T44, T47 | current (**Requires:** unity-editor) |
UI qua mockup tự duyệt, owner chỉ xem bảng review; T08/T39/T40 có security-auditor |
5Kế hoạch sản xuất asset
| Hạng mục | Số lượng | Cách sản xuất | Mốc |
|---|---|---|---|
| Act anh hùng (MoveDef pixelfx) | 869 | Agent viết act pixelfx → contact sheet → duyệt | M0–M3 |
| Biến thể trang phục (re-export body sheet) | 20 | Costume preset pixelfx, không act mới | M3 |
| Act địch thường (20 loại × ~10) | 200 | pixelfx act (rig địch) | M1–M3 |
| Act Thủ Vệ (10 × ~16) | 160 | pixelfx act | M1–M3 |
| Act Boss (10 × ~24, gồm pha + Tuyệt Sát bị nhận) | 240 | pixelfx act | M1–M3 |
| VFX pixelfx dùng lại (recolor) | 120 | Thư viện 244 hiệu ứng sẵn | M0–M3 |
| VFX mới (parry, va kiếm, chữ ký 8 anh hùng, nguyên tố) | 60 | pixelfx skill 'new effect' | M1–M3 |
| Icon Hồi Âm chung (64×64 tĩnh) | 100 | Pillow → agy (thang image-generation) | M1–M2 |
| Icon Hồi Âm riêng (ảnh động 8 khung từ act) | 195 | Tự động card-icon.mjs từ act |
M1–M3 |
| Icon Di Vật (24 mẫu) + khung 6 độ hiếm | 30 | Pillow + agy | M2 |
| Chân dung anh hùng (portrait + full) + skin | 36 | pixelfx render tư thế + Pillow viền | M2–M3 |
| Tileset + parallax 10 Địa Tầng | 40 | Pillow + pixelfx prop | M1–M3 |
| Nhạc (10 Địa Tầng + Home + 3 Boss + Kết Quả + Pass) | 16 | Gói nhạc bản quyền | M2–M3 |
| SFX | 220 | Freesound CC0/CC BY qua bf-sfx + xử lý | M1–M3 |
| Tổng act pixelfx | 1,469 | anh hùng: 21/8 anh hùng từ dữ liệu, còn lại ước tính |
5.1 Năng suất & cổng duyệt act
- Mỗi task act: ≤ 12 act cùng anh hùng/địch → agent viết act pixelfx (
act.mjs), render contact sheet + GIF 1×/4× (montage.mjs), tự kiểm (check.mjs),ActSyncValidator(hit tick khớp CSV, guard key INV-16, ô khung ≤ trần) → owner duyệt sheet (5 phút/act) →body-sheet.mjsexport. - Năng suất giả định A1: 30 phút agent + 5 phút người mỗi act → tổng act ở bảng trên (≈ 1,170) ≈ 585 h agent + ≈ 100 h người trải trên M0–M3 (25 tuần ≈ 4 h người/tuần). Act anh hùng đếm cả đòn phòng thủ + loco (≈ 70/anh hùng theo dữ liệu Heroes).
- Tiêu chí duyệt act: đọc được ở 1× trên khung 270 px; lấy đà ↔ báo hiệu khớp loại đòn (01 §11.3); khung va có tư thế "ăn" (impact pose) đúng tick; đầu/cuối ở guard key; vũ khí không đổi hình (INV-04); silhouette khác mọi địch.
- Tái dùng: một đòn xuất hiện trong nhiều lộ trình (01 §6.1); địch cùng họ dùng chung rig + biến thể phụ kiện; phản ứng trúng đòn (flinch/stagger/knockdown/launch…) dùng chung theo rig.
5.2 Chuỗi bản địa hóa (VI + EN lúc ra mắt)
| Nhóm chuỗi | Số key | × 2 ngôn ngữ |
|---|---|---|
| Tên + mô tả đòn (anh hùng) | 1,738 | 3,476 |
| Tên + mô tả lộ trình | 772 | 1,544 |
| Hồi Âm riêng (tên, dòng ngắn, mô tả) | 945 | 1,890 |
| Hồi Âm chung (tên, dòng ngắn, mô tả) | 300 | 600 |
| Anh hùng (tên, danh hiệu, lore, phong cách, Cổng, đặc tính ×3) | 80 | 160 |
| Địch/Thủ Vệ/Boss (tên, mô tả, đòn có tên) | 160 | 320 |
| Địa Tầng, Chiếu Nghỉ, Bậc Kinh Hoàng | 96 | 192 |
| Meta (Rèn Luyện, Cây Đèn Hồn 40 nút, Di Vật, Trang Phục, Sổ Ký Ức) | 234 | 468 |
| UI chung + FTUE + toast + lỗi | 900 | 1,800 |
| Kiếm tiền + LiveOps (gói, nhiệm vụ, Pass, sự kiện, push) | 450 | 900 |
| Store listing + chính sách + tỉ lệ gacha | 60 | 120 |
| Tổng | 5,735 | 11,470 |
Nguồn chuỗi nội dung là name_vi/en, short_vi/en, desc_vi trong data/*.py → Localization.csv (key #echo_<id>_short…). Mô tả EN của Hồi Âm/đòn dịch bằng agent theo bảng thuật ngữ 00 §10, owner duyệt mẫu 10%; loc_lint.py kiểm dòng ngắn ≤ 40 ký tự, không id/thuật ngữ nội bộ (06 §13). Font: Tiny5 + font pixel có dấu tiếng Việt (11 §3).
5.3 Âm thanh
SFX lấy từ Freesound qua bf-sfx (CC0 ưu tiên; CC BY ghi công ở màn Credits), xử lý cắt/chuẩn hóa −14 LUFS; nhạc: 1 gói bản quyền dark-fantasy (≤ $600, A13) tách stem để xếp lớp theo Phong Độ/Dòng Chảy (01 §5.6, §7). Mọi file lưu giấy phép ở Design/Licenses/.
5.9 Dây chuyền anh hùng sau ra mắt (H09–H21, 1 anh hùng / mùa 28 ngày)
| Tuần (trước ngày mùa mở) | Việc | Đầu ra | Cổng |
|---|---|---|---|
| −8 → −7 | Chốt chương Heroes/H<nn>-*.md + hero_*.py (đã có trong GDD), rà §15 "Khác biệt với roster" |
Validator sạch, DPS band đạt | build_tables.py |
| −7 → −4 | Costume + vũ khí pixelfx (02 §4), ~45 act chiến đấu + 5 phòng thủ + 10 di chuyển, VFX chữ ký | .pxbody / .pxmove, contact sheet |
ds-check.mjs, art-style-reviewer |
| −4 → −3 | Quy tắc <CODE>_* + hook mới (nếu có) trong 3.GAMEPLAY.Sim; autosim 200 run B1–B50 |
Tỉ lệ thắng Boss B50 ±15% trung vị roster | 03 §10 |
| −3 → −2 | 40 icon Hồi Âm (8 khung động), âm thanh (~20 sfx + 3 tiếng hô + 2 sfx Cổng), 2 trang phục | Asset vào Addressables nhóm hero_<code> |
DoD §10 |
| −2 → 0 | Banner Nổi Bật/Tiêu Điểm, Pass mùa, sự kiện Tiêu Điểm, localisation (~250 chuỗi/anh hùng) | Remote-config bật theo ngày mùa | QA hồi quy |
Năng lực: 1 anh hùng ≈ 6 tuần-người (act chiếm ~55%); để giữ nhịp 28 ngày cần chồng 2 anh hùng cùng lúc ở hai pha khác nhau. Thứ tự ra mắt khóa ở 03 §9 (H09 S2 → H21 S14); anh hùng chưa kịp → hoãn sang mùa sau, mùa đó chạy tái xuất (09 §4.6), không ra mắt nửa vời.
6Thang cắt giảm
Không bao giờ cắt: cấu trúc 100 tầng xuống với nhịp 10 tầng (INV-12: Boss x0, Thủ Vệ x5, Chiếu Nghỉ x3/x7, Cổng Boss x9) và đủ 10 Boss/10 Thủ Vệ; hệ phòng thủ (Gạt/Gạt Hoàn Hảo/Chặn/Né/Phản Đòn/Va Kiếm, Thế → Tuyệt Sát); lượt chọn 1-trong-3 mỗi tầng; tất định + snapshot; FTUE.
| Bước | Cắt | Tiết kiệm | Ảnh hưởng tài liệu |
|---|---|---|---|
| 1 | Thức Tỉnh (ART) chỉ đổi ngoại hình bằng aura/ramp, không clip riêng | ~16 act, 1 tuần | 06 §2, Heroes §8 |
| 2 | Hồi Âm riêng 40 → 34/anh hùng (giữ đúng 4 EVO, ≥ 1 ART; bỏ COMBO trùng vai trò) | ~50 act, 1.5 tuần | Heroes, 03 §2 (vẫn trong dải 34–46) |
| 3 | Boss BS03–BS08: 3 pha → 2 pha | ~60 act, 1.5 tuần | 04 |
| 4 | Địch 20 → 16 loại (4 loại thành biến thể recolor + đổi đòn của rig sẵn) | ~40 act, 1 tuần | 04 |
| 5 | Sable (H08) dời v1.1 — banner mùa chẵn lùi 1 mùa; Mora giữ vai L nổi bật | ~55 act + 40 thẻ, 2 tuần | 00 §6.1, 03 §6, 09 §4 |
| 6 | Chiếu Nghỉ 8 → 6 (bỏ LD06 Hồn Đồng Đội — tiết kiệm 8 MB RAM, LD08 Giếng Con Bạc) | 1 tuần | 05 §6 |
| 7 | Bậc Kinh Hoàng 20 → 10 khi ra mắt; Trang Phục 20 → 8; Thử Thách Ngày dời v1.1 | 1.5 tuần | 05, 07, 10 |
Mỗi bước cắt là một task /planning-task riêng sửa data/*.py + chương liên quan; build lại bảng, autosim xác nhận không vỡ nhịp tiến trình.
7Phụ thuộc bên ngoài
| Phụ thuộc | Cần trước | Trạng thái / ghi chú |
|---|---|---|
Submodule Tools/pixelfx nhánh deepstair (upstream có LICENSE + NOTICE) |
M0 tuần 1 | Đã add submodule; giữ ghi công theo NOTICE |
| Node.js LTS + canvas cho pixelfx | M0 | Máy dev |
| Máy test Android Low/Mid/High, iPhone 11, iPad 9 | M0 (Mid, Low) / M3 (iOS) | Mua/mượn; cấp quyền BugHub TesterAccess |
Firebase project (Analytics, Crashlytics, RC, FCM) + google-services.json/plist |
M3 | Template đã tích hợp SDK (BLACKFACE_FIREBASE) |
LevelPlay app key + ad unit (qua bf-ads) |
M3 | irs_setup_app dry-run trước |
Google Play Console + App Store Connect, SKU IAP theo IapCatalog.csv |
M3 | Bundle id com.blackface.deepstair (sửa 13 §1.2) |
Apple Developer + Mac runner (build iOS, /build) |
M3 | Runner đã có cho Android/AutoBuild |
Khóa ký Android (AndroidSigningFromEnv) |
M3 | Lưu secret ngoài repo |
BugHub Worker (bug-hub.blackface.workers.dev) |
M1 | Đã có endpoint trong project-profile |
| Supabase + Cloudflare Worker | v1.1 (bảng xếp hạng) | Không chặn ra mắt (INV-09) |
| Gói nhạc bản quyền, tài khoản Freesound | M2 | A13 |
| Trang chính sách quyền riêng tư + trang tỉ lệ gacha | M4 | Bắt buộc store/luật |
| Bảng câu hỏi IARC / App Store age rating | M4 | Khai "random items" |
8Rủi ro
| # | Rủi ro | Xác suất | Ảnh hưởng | Giảm thiểu |
|---|---|---|---|---|
| R1 | Act pixel không 'đã mắt' ở 1× (biên đạo đọc kém trên 270 px) | TB | Rất cao | M0 chứng minh bằng Kaito 12 đòn trước mọi thứ; cổng contact sheet + playtest 5 giây/đòn; act chữ ký làm tay kỹ |
| R2 | Mở rộng costume/vũ khí pixelfx phức tạp (8 vũ khí, phụ kiện rig, ramp phụ, xích/giáo dài vượt ô) | Cao | Cao | Làm trên nhánh deepstair của submodule; vũ khí = mesh/polyline dữ liệu; xích dùng sim verlet sẵn của pixelfx; spike 1 tuần ở M0, fallback: xích/giáo vẽ bằng nét 2D trong exporter |
| R3 | Năng suất viết ≈ 570 act anh hùng (400+ đòn chiến đấu) + ≈ 600 act địch/Boss | Cao | Cao | Thư viện tư thế + act dùng lại giữa lộ trình (một đòn trong nhiều lộ trình); agent batch 12 act/task; địch dùng chung rig theo họ; cut ladder bước 2–3 |
| R4 | Lỗi tất định (khôi phục wave lệch, thứ tự RNG, float khác máy) | TB | Cao | Luật §5.6; tick nguyên; RNG theo luồng/wave; golden 1,000 seed trong CI; hash từng giây khi debug |
| R5 | 10 địch trên khung 270 px khó đọc | TB | Cao | Lệch dọc 0–6 px, viền ink, màu địch khác anh hùng (INV-04), tier Low 6 địch, nhịp chồng đòn ≥ 0.25 s, đo bằng ảnh thumbnail 128 px (P5) |
| R6 | Tần suất phòng thủ sai cảm giác (ít → vô hình, nhiều → đơn điệu) | TB | Cao | Telemetry defense_stats (khoảng trống tối đa giữa 2 sự kiện phòng thủ); mục tiêu 1 sự kiện/3–6 s; chỉnh token + lấy đà qua CSV/RC |
| R7 | ~420 Hồi Âm tương tác lỗi (DSL, trigger lồng) | Cao | TB | Handler theo op, độ sâu trigger 2, test parse toàn bộ, autosim fuzz 'nhặt ngẫu nhiên' 10,000 run |
| R8 | Đạo Diễn Combo lặp, một lộ trình chiếm sóng | TB | TB | Hệ số novelty, QA 03 §10 (≤ 25% số lần chọn), route_usage telemetry |
| R9 | Hiệu năng máy Low (URP 2D, uGUI HUD, x3) | TB | Cao | Render 270×H, đèn 2D tắt ở Low, HUD tách canvas, trần bước sim, profile từ M0 trên máy Low thật |
| R10 | Kinh tế/tiến trình lệch nhịp mốc 00 §7.2 | Cao | TB | Mọi số ở CSV + RC; autosim hiệu chỉnh balance_sim; telemetry tầng chết theo ngày |
| R11 | Save hỏng / migration sai làm mất tiến trình | Thấp | Rất cao | File đơn nguyên tử + 2 backup + checksum + test migration mỗi bản; flush ngay sau giao dịch giá trị |
| R12 | Phụ thuộc 1 developer | Cao | Cao | Backlog tự động, GDD đầy đủ, task nhỏ có tiêu chí, CI headless |
| R13 | Chính sách store/luật loot box (Triệu Hồi, Rương) | Thấp | Cao | Công khai tỉ lệ + pity, không bán Hồi Âm (INV-08), chặn mua với tuổi < 13 theo store, UMP/ATT |
| R14 | PAD fast-follow chưa tải xong khi người chơi tới S03 | Thấp | TB | S01–S02 install-time; chặn ở cầu thang với tiến độ tải + offline toast; S03 tới sớm nhất ~D1 |
| R15 | Idle quá thụ động → chán sau D7 | TB | Cao | Lượt chọn mỗi tầng, Chiếu Nghỉ, Bộc Phá thủ công, Thử Thách Ngày, Bậc Kinh Hoàng, xem Build có số liệu |
Theo dõi: mỗi thứ Sáu chấm lại xác suất; rủi ro "Cao/Cao" chưa có kết quả spike trong 2 tuần → owner quyết định cắt theo §6. Rủi ro kỹ thuật chi tiết: 13 §21.
9Giả định
| # | Tham số | Giá trị | Lý do | Kiểm chứng bởi |
|---|---|---|---|---|
| A1 | Năng suất act | 1 act ≈ 25 phút agent + 5 phút duyệt người | Ước tính từ pixelfx 12 move sẵn | Đo ở M0 (12 act Kaito) |
| A2 | Số act/anh hùng | 44–56 đòn chiến đấu; ≈ 70 clip gồm phòng thủ + loco | 03 §2 | Dữ liệu hero_*.py |
| A3 | Máy Mid tham chiếu | Helio G99 / 4–6 GB giữ 60 FPS với 8 địch + 45 đạn | Render 270×H rẻ | Profile M0 |
| A4 | Tần suất phòng thủ hiển thị | 1 sự kiện Gạt/Chặn/Né/Va Kiếm mỗi 3–6 s trong Combat | P1, P4 | Playtest M1 + defense_stats |
| A5 | Thời gian tầng | 30–75 s ở x1 | constants FLOOR_TIME_TARGET | Autosim M2 |
| A6 | Tốc độ | ≥ 70% thời gian chơi từ D2 ở x2+ | Mở x2 ở kỷ lục B10 | Telemetry avg_speed |
| A7 | Số Hồi Âm | ≈ 8 × 40 riêng + ≈ 100 chung | 00 §6 | Dữ liệu 06 + Heroes |
| A8 | Độ đọc địch | Lính ≥ 16 px cao, ≤ 10 địch sống | P5, 01 §11.4 | Ảnh thumbnail 128 px + playtest |
| A9 | Dung lượng | Base AAB ≤ 150 MB, tổng ≤ 330 MB | §16 Addressables | Build M3 |
| A10 | Chi phí analytics | BigQuery export < $50/tháng ở 5k DAU nhờ lấy mẫu 10% | Firebase free + sample | Hóa đơn tháng đầu soft launch |
| A11 | Thị trường soft launch | Việt Nam, Philippines, Canada | VI + EN, CPI thấp + 1 thị trường Tier-1 đo ARPDAU | Owner chốt M4 |
| A12 | Ngân sách ảnh | $0 (pixelfx + Pillow + agy); bf-img chỉ khi owner cho phép | 00 D8 | — |
| A13 | Ngân sách âm thanh | Nhạc gói bản quyền ≤ $600 một lần; SFX CC0/CC BY $0 | Không có sound designer | Owner duyệt M2 |
| A14 | Run/ngày F2P | 4–6 run (Auto-Rerun dừng sau 5 run không chạm) | Benchmark idle | Telemetry runs/DAU |
| A15 | Thời gian dự án | 33 tuần (M0–M5) | Năng suất agent + 1 dev | Hiệu chỉnh sau M1 |
10Kế hoạch QA
10.1 Theo khu vực
| Khu vực | Checklist nguồn | Tự động | Thủ công / thiết bị | Cổng |
|---|---|---|---|---|
| Chiến đấu & phòng thủ | 01 §19 | DamageServiceTests, DefenseRollDistributionTests, DefenseTimingTests, CombatSandbox |
Overlay timeline phòng thủ, quay chậm 0.25× kiểm khung chạm; ép kết quả bằng cheat | M0, mỗi bản |
| Pixel & act | 02 QA, 13 §9.1 | ActSyncValidator, ô khung, guard key |
Duyệt contact sheet 1×/4×, thumbnail 128 px (P5) | Mỗi task act |
| Anh hùng | 03 §10, Heroes §14 | Validator hero_*.py, autosim 200 run/anh hùng, DPS factor ±10% |
Playtest 5 giây nhận phong cách (P2) | M1/M2/M3 |
| Địch/Thủ Vệ/Boss | 04 QA | Autosim tỉ lệ thắng Boss theo meta; báo hiệu tối thiểu theo loại đòn | Đọc được 10 địch trên 270 px (R5), mù màu đỏ/đỏ thẫm | M1–M3 |
| Run/Descent/Snapshot | 05 QA, 13 §11.5 | RestoreEquivalence, SnapshotRoundTrip, kill app giả lập |
Kill app ở mọi state 00 §5.2 (G1, G2) trên máy thật | M1, mỗi bản |
| Hồi Âm | 06 §13 | EchoDslParseAllTests, OfferDeterminismTests, autosim fuzz random 10,000 run |
Đọc dòng ngắn ≤ 40 ký tự, chip tag, "Thay:" | M1–M3 |
| Meta & kinh tế | 07, 08 QA | Giá CSV khớp công thức, balance_sim vs autosim |
Mốc 00 §7.2 theo tài khoản test D1/D3/D7 (dịch giờ TimeManager) |
M2–M4 |
| Kiếm tiền & IAP | 09 QA | Test mode Purchasing, grant idempotent, khôi phục giao dịch | Mua thật sandbox Android/iOS, hoàn tiền, mất mạng giữa mua (G4/G5) | M3–M4 |
| LiveOps | 10 QA | Reset ngày/tuần qua TimeManager, RC mặc định |
Nhiệm vụ/Pass/sự kiện qua đổi giờ | M3 |
| UI/UX & FTUE | 11 QA, .claude/docs/new-ui-guide.md §5 |
ui-visual-reviewer, autouitester (bấm mọi nút) |
4 tỉ lệ màn (13 §18), safe area, INV-07 (45% dưới), một tay | M1–M3 |
| Hiệu năng | 13 §16 | GcAllocTests, ProfilerMarker trong build dev |
30 phút x3 trên máy Low: FPS, nhiệt, RAM ≤ trần | M0, M2, M4 |
| Tất định & save | 13 §5.7, §11 | Determinism1000, SaveMigrationTests, SaveRecoveryTests |
Làm hỏng save bằng cheat → phục hồi | M2, mỗi bản |
| Bản địa hóa | 06 §13, 11 §3 | loc_lint.py, thiếu key, tràn chữ (QA probe audit) |
VI/EN toàn màn hình, dấu tiếng Việt font pixel | M3 |
| Tuân thủ | 09 §compliance | — | UMP/ATT, trang tỉ lệ, không IAP trong run (INV-08), không xen kẽ trong trận (INV-10) | M4 |
10.2 Mức độ bug & SLA
| Mức | Định nghĩa | SLA |
|---|---|---|
| Blocker | Crash, mất save/tiền, kẹt run, vi phạm INV-05/08/10/11 | Sửa trước mọi task khác; chặn build |
| Critical | Sai kết quả kinh tế, lệch tất định, phòng thủ hiện sai khung, IAP không grant | Trong 48 h |
| Major | Tính năng sai nhưng có đường vòng, rớt FPS dưới ngân sách | Trong mốc hiện tại |
| Minor | Hình/chữ/âm nhỏ | Gom theo đợt |
Bug từ tester/QA agent vào BugHub → /fix-bug (≥ 4 bug → mỗi bug thành task backlog); issue giữ mở tới khi QA xác nhận.
10.3 Definition of Done
Mỗi task: compile sạch (/compile-check, rule compile-validation); preflight + cổng review đạt (≤ 2 vòng sửa); mọi tiêu chí trong task spec đạt; test mới/cũ liên quan xanh; 0 GC trong Combat với code sim/pixel/feel/HUD; chuỗi hiển thị đã localize VI/EN; analytics đúng tên AnalyticsEvents.g.cs (nếu có); cheat để test (feature có trạng thái — skill feature-cheat); số liệu lấy từ CSV/constants.py, không hằng số ma thuật; SimVersion/golden cập nhật nếu đổi logic sim.
Mỗi mốc: tiêu chí thoát §2; regression EditMode + PlayMode + autosim smoke + Determinism1000 xanh; build IL2CPP chạy trên máy Low + Mid; danh sách rủi ro cập nhật.
Phát hành: crash-free nội bộ ≥ 99.5% (≥ 200 phiên test); ANR 0 trong 30 phút x3; save phục hồi qua cập nhật từ bản trước (migration test); store listing + tỉ lệ gacha + chính sách đầy đủ.
11KPI
| KPI | Mục tiêu | Nguồn | Khi đo |
|---|---|---|---|
| D1 / D7 / D30 retention | ≥ 40% / ≥ 15% / ≥ 5% | Firebase cohort | Soft launch |
| Phiên TB / phiên mỗi ngày | ≥ 12 phút / ≥ 4 | session_start, user_engagement | Soft launch |
| Run / DAU | ≥ 3 | run_start | Soft launch |
| Tỉ lệ chọn Hồi Âm tay (D7+) | ≥ 60% (P4) | echo_pick.auto | Mỗi bản |
| Lộ trình Hồi Âm ở tầng 30 | ≥ 60% số lần chạy (P3) | route_usage.echo_route_pct | Mỗi bản |
| Khoảng trống phòng thủ tối đa / tầng (trung vị) | ≤ 8 s | defense_stats.defense_gap_s_max | Mỗi bản |
| Sự kiện phòng thủ / phút Combat | 8–20 | defense_stats | Mỗi bản |
| Gạt thực vs Gạt hiển thị | |Δ| ≤ 1.5 điểm % | defense_stats.exp/real_deflect_pct | Mỗi bản |
| Run có Dòng Chảy (D3+) | ≥ 50% | defense_stats.flow_states | Soft launch |
| Thắng BS01 ở run 1 | ≥ 70% (sim ≥ 15/20) | boss_attempt | Mỗi bản |
| Payer conversion D30 | 3–4% | iap_purchase | Soft launch |
| ARPDAU | $0.10–0.15 (soft launch ≥ $0.08) | iap_purchase + ad_impression | Soft launch |
| Rewarded impressions / DAU | 5–7 | ads_reward | Soft launch |
| Crash-free sessions / ANR | ≥ 99.5% / ≤ 0.3% | Crashlytics, Play vitals | Mọi bản |
| Save phục hồi từ backup | ≤ 0.05% phiên | save_recovered | Mọi bản |
| Tier Low tự hạ | ≤ 15% thiết bị | perf_tier | Soft launch |
Bảng điều khiển (BigQuery export Firebase): funnel FTUE (tutorial_step), phễu tầng (floor_clear theo ngày cài), tỉ lệ thắng Boss theo anh hùng/meta (boss_attempt), sức khỏe phòng thủ (defense_stats: tần suất, khoảng trống tối đa, Gạt thực vs hiển thị), đa dạng lộ trình (route_usage), lựa chọn Hồi Âm (echo_pick: tỉ lệ chọn/thắng theo thẻ), kinh tế (earn_resource/spend_resource), doanh thu (iap_purchase, ad_impression), kỹ thuật (perf_tier, save_recovered, Crashlytics). Ngưỡng cảnh báo: KPI kỹ thuật lệch mục tiêu 2 ngày liên tiếp → task sửa ưu tiên.
12Go / No-go
| Mốc | Điều kiện |
|---|---|
| Soft launch (cuối M4) | Mọi KPI kỹ thuật đạt (crash-free, ANR, save, tier Low ≤ 15%); D1 cohort nội bộ/closed test ≥ 40%; chọn tay D7+ ≥ 60%; không bug Blocker/Critical; store + tuân thủ xong |
| Global (cuối M5) | KPI soft launch giữ ≥ 90% qua 2 cohort tuần; ARPDAU ≥ $0.08; Lantern Pass mùa 1 + sự kiện đầu sẵn sàng; autosim xác nhận nhịp mốc 00 §7.2 (±3 ngày) |