1Giới thiệu & bản đồ tài liệu
Mục đích: đặc tả mọi thứ Bladewake cần trên Steam: trang cửa hàng (capsule, trailer, tag, mô tả VI/EN), demo + checklist Next Fest, trang Early Access, chính sách thành tựu, stats & leaderboard (DAILY / Truy Tuần / ENDLESS / BOSS_RUSH), Steam Cloud (file, luật xung đột), Steam Input & Steam Deck (checklist Verified), rich presence, overlay/tạm dừng, build & nhánh, kế hoạch bản địa hoá, chính sách không DRM, rủi ro hoàn tiền/đánh giá, telemetry + báo crash có đồng ý, quyết định mod/Workshop. Phụ thuộc: 00-Design-Bible.md §1 (USP, khoảnh khắc đinh), §1.1 (bản đồ nút), §4 + §4.1 (Khăn Tang, mode, điểm DAILY, chống gian lận), §4.3 (Thương Xót), §10 (mốc, ngôn ngữ, Deck, giá), §10.3 (60 thành tựu), §10.4 (hiệu năng, camera), §13 + data/_bible.json (milestones, modes, meta.accessibility, adaptive.legal_gate, endings); 01-Roadmap.md §1.2, §3.2, §3.5, §3.6, §3.10, §4, §5; 14-Adaptive-AI.md §9.1 (ash_profile), §15; 16-Run-Structure-Map.md §11 (lưu/tạm dừng); 30-Art-Direction.md §7 (key art, capsule); 32-Audio-Bible.md §3.7 (cue nhạc); 51-Data-Schema.md §4.28 (achievements.json). Được dùng bởi: producer (trang Steam, Next Fest, EA, phát hành), code PlatformServices/SteamBridge/SaveService/CloudGuard/LeaderboardClient/RichPresence/Telemetry/CrashReporter, máy chủ kiểm hợp lý điểm, agent sinh data/achievements.json, doc UI (màn đồng ý, màn kết demo, bảng xếp hạng), QA (checklist Deck, checklist phát hành), loc.
Mục lục chi tiết (## và ###)
- 0. Phạm vi & thứ bậc
- 1. Lịch Steam theo mốc (Bible §10, milestones)
- 2. Trang cửa hàng
- 2.1 Capsule & ảnh (kích thước = 30-Art-Direction.md §7.2; vẽ gốc rồi phóng NEAREST số nguyên)
- 2.2 Ảnh chụp — thứ tự 10 ảnh (EA)
- 2.3 Trailer (khoảnh khắc đinh Bible §1: Trăng Máu giữa 250 thây · Xà Ích Xe Tang nghiền bầy · đòn cuối vào Mũ Chuông BS_FINAL, tro rơi ngược → title)
- 2.4 Tag (20, theo thứ tự ưu tiên — 5 tag đầu nặng nhất trong gợi ý của Steam)
- 2.5 Mô tả
- 2.6 Giá, cấu hình, khảo sát nội dung
- 3. Demo & Next Fest
- 3.1 Phạm vi demo (= Roadmap §3.5, MS02)
- 3.2 Khác biệt kỹ thuật của demo
- 3.3 Checklist Next Fest (kỳ 10/2027 = tuần F; mốc lùi theo tuần)
- 3.4 KPI demo (Roadmap §3.5, giữ nguyên ngưỡng)
- 4. Trang Early Access (Q&A bắt buộc của Steamworks; VI + EN)
- 5. Thành tựu — chính sách (danh sách data/achievements.json sinh sau theo §4.28 doc 51)
- 5.1 Số lượng theo mốc
- 5.2 Nhóm (tổng 60 ở 1.0 · 30 ở EA)
- 5.3 Luật thiết kế thành tựu
- 6. Stats & leaderboard
- 6.1 Stats Steam (ISteamUserStats; INT trừ khi ghi; API name bất biến)
- 6.2 Leaderboard (Bible §4.1; STANDARD và CUSTOM không có bảng)
- 6.3 Luồng nộp điểm có kiểm hợp lý (Bible §4.1 "Chống gian lận DAILY"; 1 PM tech Bible §10.1)
- 6.4 Ví dụ tính
- 7. Steam Cloud (Auto-Cloud)
- 7.1 File & thư mục
- 7.2 Ghi file
- 7.3 Luật xung đột (thứ tự áp dụng)
- 8. Steam Input & Steam Deck
- 8.1 Input
- 8.2 Checklist Steam Deck Verified (mục tiêu MS07; MS03 = Playable)
- 8.3 Suspend / resume & tiêu điểm
- 9. Rich presence
- 10. Overlay & tạm dừng
- 11. Build, depot, nhánh, phiên bản
- 11.1 App & depot
- 11.2 Nhánh Steam
- 11.3 Phiên bản
- 11.4 Checklist phát hành (mỗi bản lên default)
- 12. Bản địa hoá
- 12.1 Lộ trình ngôn ngữ (Bible §10, milestones)
- 12.2 Quy trình
- 13. Chính sách không DRM & ngoại tuyến
- 14. Rủi ro hoàn tiền & đánh giá
- 15. Telemetry & báo crash (có đồng ý)
- 15.1 Màn đồng ý (lần chạy đầu, sau chọn ngôn ngữ; điều hướng tay cầm)
- 15.2 Sự kiện (chỉ khi đồng ý; telemetry_id = UUID ngẫu nhiên lưu settings_shared.json, không suy ra từ steamId)
- 15.3 Báo crash
- 16. Mod / Workshop & tính năng Steam khác
- Quy tắc cho dev/AI
- Quyết định đã chốt
20. Phạm vi & thứ bậc
- Canon: Bible +
_bible.json> doc nền (10–17, 20, 30–32, 51) >01-Roadmap.md> doc này. Số[ASSUMED]= lượt đầu, chốt bằng số đo ở mốc tương ứng (ghi lại vào doc này, thay nhãn). - Doc này không tạo ID gameplay mới. ID nền tảng định nghĩa ở đây (tên stat Steam
STAT_*, tên leaderboard, token rich presence#*, tên nhánh, tên depot, file lưusave/meta_<steamId>.json,save/settings_shared.json) là định danh hạ tầng, không phải thực thể gameplay; bất biến sau khi ship giống luật ID Bible §11. - Tên thương hiệu: chỉ viết Steam, Steam Deck, Steamworks, Next Fest và tên tính năng/API có tiền tố Steam (Roadmap Q12). Phần cứng, hệ điều hành, nền tảng video, dịch vụ backend, cửa hàng khác → viết chung ("HĐH PC 64-bit", "nền tảng video dọc ngắn", "máy chủ cộng đồng", "dịch vụ báo crash").
- Luật Steamworks (kích thước ảnh, hạn nộp, luật giá) đổi theo thời gian → mọi số mang nhãn
[STEAMWORKS]phải đối chiếu trang tài liệu Steamworks hiện hành khi làm việc đó; lệch → theo Steamworks, sửa doc này cùng lượt.
31. Lịch Steam theo mốc (Bible §10, milestones)
| Mốc | Tháng | Việc Steam | Tính năng SDK bật | Ngôn ngữ | Deck |
|---|---|---|---|---|---|
| MS01 | M0 (12/2026) | trang cửa hàng "Sắp ra mắt" live ≤ 2026-12-15 [ASSUMED], teaser "Đêm Câm" 60 s, ≥ 5 ảnh, mục tiêu 25k wishlist trước Next Fest | — | trang EN + VI | — |
| MS01b | M3 (03/2027) | cổng hiệu năng trên Deck (§8.4) | SDK init + overlay (build nội bộ) | — | test nội bộ |
| — | M7–M8 | Steam Playtest kín (app Playtest riêng, ~500 người [ASSUMED]) | cloud, rich presence, telemetry đồng ý, crash | EN, VI | test |
| — | M9 (09/2027) | demo công khai trên trang (≥ 4 tuần trước Next Fest) | như Playtest; thành tựu 0 | EN, VI | mục tiêu Playable |
| MS02 | M10 (10/2027) | Next Fest (lượt duy nhất); mục tiêu ≥ 60k wishlist sau | như trên | EN, VI | Playable |
| MS03 | M13 (01/2028) | Early Access 11.99 USD, giảm ra mắt 10% 7 ngày [ASSUMED] | thành tựu 30, stats, leaderboard DAILY, cloud | 5: EN VI zh-CN JA DE | Playable |
| MS04 | M17 | U1: ENDLESS + leaderboard tầng | +leaderboard ENDLESS | 5 | Playable |
| MS05 | M21 | U2: BOSS_RUSH + leaderboard thời gian | +leaderboard BOSS_RUSH | 5 | Playable |
| MS06 | M26 | U3: BS_FINAL, CUSTOM, Truy Tuần | +leaderboard WEEKLY | 5 | Playable |
| MS07 | M32 (08/2029) | 1.0 14.99 USD; báo tăng giá ≥ 30 ngày trước | 60 thành tựu, thẻ giao dịch nếu Steam cho đủ điều kiện | 10 | Verified |
| MS08 | M35+ | hero miễn phí mỗi 3 tháng; sự kiện mùa trong DAILY/Truy Tuần | — | 10 (+ §12.3) | Verified |
42. Trang cửa hàng
2.1 Capsule & ảnh (kích thước = 30-Art-Direction.md §7.2; vẽ gốc rồi phóng NEAREST số nguyên)
| Tài sản | Đích (px) | Gốc × k | Nội dung | Cần từ |
|---|---|---|---|---|
| Header capsule | 920×430 | 230×108 ×4 | Varek giữa Trăng Máu Trăng Máu H01_UL1 + logo ≥ 55% rộng | MS01 |
| Small capsule | 462×174 | 231×87 ×2 | chỉ logo + mặt Varek; logo ≥ 66% rộng (đọc được ở 120 px rộng) | MS01 |
| Main capsule | 1232×706 | 308×177 ×4 | key art đầy đủ (§7.1 doc 30) | MS01 |
| Vertical capsule | 748×896 | 187×224 ×4 | Varek + chuông câm dọc | MS01 |
| Library capsule | 600×900 | 150×225 ×4 | như vertical, logo dưới 1/3 | MS01 |
| Library header | 920×430 | = header | — | MS01 |
| Library hero | 3840×1240 | 480×155 ×8 | biển Thây Tro + chuông; không logo/chữ | MS01 |
| Library logo | 1280×720 | 320×180 ×4 | logo nền trong suốt | MS01 |
| Page background | 1438×810 | 360×203 ×4 | mờ, ít chi tiết giữa | MS01 |
| Ảnh chụp | 1920×1080 | 480×270 ×4 | in-game, không chỉnh; HUD bật ≥ 3/5 ảnh; ≥ 5 ảnh (MS01), 10 ảnh (EA) | MS01 |
Ảnh sự kiện (cover / header) [STEAMWORKS] | 800×450 · 1920×622 | 400×225 ×2 · 480×155 ×4 (cắt) | mỗi devlog/cập nhật | M1 |
Icon cộng đồng / client [STEAMWORKS] | 184×184 · 32×32 | 46×46 ×4 · 32×32 ×1 | mặt Varek / mảnh chuông | MS01 |
- Luật: capsule chỉ art + logo — không chữ quảng cáo, giải thưởng, điểm đánh giá, giá (luật Steam + doc 30). Vàng
#ffd84a/ tím#b14cfftell không có trong key art (dành gameplay). Logo "BLADEWAKE" 1 bản cho mọi ngôn ngữ (không capsule bản địa hoá). - Bản 12 hero xếp vòng quanh chuông (doc 30 §7.1 "bản phụ") thay main capsule ở 1.0; trước đó dùng bản Varek.
- A/B capsule: M3 nếu dưới sàn wishlist (Roadmap §4.3) → làm 2 header khác hướng (A: Varek cận + Trăng Máu; B: biển thây toàn cảnh) dùng tính năng thử nghiệm capsule của Steamworks
[STEAMWORKS], chạy ≥ 14 ngày, giữ bản có CTR trang cao hơn ≥ 10% tương đối.
2.2 Ảnh chụp — thứ tự 10 ảnh (EA)
| # | Cảnh | Thông điệp |
|---|---|---|
| 1 | Varek Trăng Máu giữa ~250 thây B1, HUD bật | "Số đông" (P2) |
| 2 | tell vàng ◇ đang sáng trên Tinh Anh, hero sắp ĐÁP | "Chính xác" (P3) |
| 3 | MB_B1_1 Xà Ích Xe Tang nghiền bầy | khoảnh khắc đinh #2 |
| 4 | màn draft 3 thẻ (Edge + Then Chốt nếu có) | "Build sâu, chọn nhanh" (P5) |
| 5 | callout "NÓ ĐÃ ĐỌC BẠN" + Mắt Tro 2/3 | Tro Nhớ (P7) |
| 6 | BS_B1 pha 3 | boss |
| 7 | hub Tháp Chuông Gãy (HUB_BELL_TOWER) | meta |
| 8 | B2 Đầm Vải Liệm với hero thứ 2 (Bodan) | đa dạng hero |
| 9 | bản đồ Hồi (nút CMB/ELT/EVT/SHP…) | cấu trúc run |
| 10 | Veyra bắn xuyên hàng ở B2 | hero tầm xa |
Mỗi mốc U thay ảnh 8–10 bằng nội dung mới; ảnh 1–3 cố định tới 1.0.
2.3 Trailer (khoảnh khắc đinh Bible §1: Trăng Máu giữa 250 thây · Xà Ích Xe Tang nghiền bầy · đòn cuối vào Mũ Chuông BS_FINAL, tro rơi ngược → title)
Luật chung: 3 s đầu là gameplay (Steam tự phát tắt tiếng → hiểu được không cần âm thanh) · ≥ 80% thời lượng là cảnh quay in-game 1920×1080 60 fps H.264 (máy quay + Autopilot seed cố định, Roadmap §4.2) · không cảnh dựng giả, không UI giả · thẻ chữ ≤ 6 từ, ≥ 48 px ở 1080p · âm −14 LUFS-I, đỉnh ≤ −1 dBTP · nhạc chỉ từ cue 32-Audio-Bible.md §3.7 · xuất thêm bản 9:16 1080×1920 cho video dọc ngắn.
Teaser "Đêm Câm" 60 s (MS01, M0) — 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 → EXPLORE/COMBAT · Hồi I B1 Đồi Mộ Tro · bản đồ + mọi nút CMB/ELT/CHL/RSC/EVT/SHP/RST/SEC c… MUS_b1_grave_hill
| Giây | Hình | Âm |
|---|---|---|
| 0–3 | tell vàng ◇ lóe trên Tinh Anh → Varek ĐÁP → 30–40 thây quanh nổ tro | nốt cao tell + "keng" ĐÁP |
| 3–10 | màn đen, chuông câm; thẻ "Đại Chuông đã câm" | chuông câm "thịch", cello |
| 10–25 | Varek Lướt xuyên bầy B1, song liềm quét cụm; tím ▲ → Né Hoàn Hảo | trống khung vào (B1 132 bpm) |
| 25–38 | MB_B1_1 Xà Ích Xe Tang lao qua, nghiền chính bầy của nó | stem S3–S4 |
| 38–50 | Trăng Máu Trăng Máu H01_UL1 giữa 250 thây (cảnh 1 cắt liền ≥ 4 s) | đỉnh mix, ducking tell |
| 50–56 | logo BLADEWAKE, tro rơi ngược | chuông câm |
| 56–60 | "Thêm vào danh sách mong muốn" + tháng/năm | — |
Trailer demo 90 s (M8, trước Next Fest) — 0–3 s hook như teaser · 3–20 s 3 hero (H01 Varek, H02 Bodan, H07 Veyra) mỗi người 1 đòn chữ ký + 1 ĐÁP · 20–40 s horde + draft (thẻ trên màn ≤ 1.5 s) · 40–55 s Tro Nhớ: callout "NÓ ĐÃ ĐỌC BẠN" + Tinh Anh đổi đòn · 55–75 s BS_B1 P1→P3 (BOSS · nút BOS Hồi I · BS_B1 Người Gác Chuông · stem theo pha (không theo I) · P3 "Chuông… MUS_boss_b1_bell_warden) · 75–84 s Trăng Máu · 84–90 s "Chơi demo — Next Fest 10/2027" + wishlist. Trailer EA 90 s (M11) — hook · 5 hero (thêm H03 Halka, H06 Ruvan) · B2 Đầm Vải Liệm + BS_B2 · DAILY (bảng xếp hạng thật trên màn) · thẻ "Early Access 01/2028 · lộ trình 12 Kẻ Thức". Trailer U1/U2/U3 45–60 s — mỗi bản: 2 hero mới (Bible §10) + Hồi mới + mode mới; mở bằng đòn chữ ký hero mới trong 3 s đầu. Trailer 1.0 120 s (M31) — hook · 12 Kẻ Thức lần lượt 3 s/người (36 s, mỗi người 1 ĐÁP riêng) · B1→B4 · Tro Nhớ · FINALE · 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 · đòn cuối vào Mũ Chuông BS_FINAL, tro rơi ngược → title (không lộ lựa chọn "Giữ lõi", không lộ B6/BS_TRUE) · "Phát hành 1.0".
2.4 Tag (20, theo thứ tự ưu tiên — 5 tag đầu nặng nhất trong gợi ý của Steam)
| # | Tag | # | Tag | # | Tag | # | Tag |
|---|---|---|---|---|---|---|---|
| 1 | Action Roguelike | 6 | Dark Fantasy | 11 | Procedural Generation | 16 | 2D |
| 2 | Roguelite | 7 | Action | 12 | Difficult | 17 | Indie |
| 3 | Hack and Slash | 8 | Singleplayer | 13 | Fantasy | 18 | Character Action Game |
| 4 | Pixel Graphics | 9 | Controller | 14 | Atmospheric | 19 | Fast-Paced |
| 5 | Top-Down | 10 | Replay Value | 15 | Gothic | 20 | Combat |
- Không dùng tag thể loại "tự đánh/sinh tồn bầy" (Roadmap Q1: khác biệt bằng ĐÁP/Lướt có kỹ năng), không dùng tag khen ("Great Soundtrack", "Masterpiece"). "Early Access" do Steam tự gắn.
- Rà lại mỗi mốc: nếu 1 tag người chơi gắn đứng top 5 mà không có trong danh sách → giữ nếu đúng sản phẩm, gỡ nếu sai (ví dụ "Bullet Hell" sai: đạn tím ≤ 2 trên màn, INV-13).
- Hạng mục Steam: Single-player · Steam Achievements (từ EA) · Full controller support · Steam Cloud · Steam Leaderboards (từ EA) · Steam Trading Cards (1.0, nếu đủ điều kiện) · Remote Play on TV/Tablet/Phone · Family Sharing. Không: co-op, PvP, Remote Play Together (Bible #57).
2.5 Mô tả
Mô tả ngắn (≤ 300 ký tự [STEAMWORKS])
- VI (229 ký tự): "Đại Chuông Vọng câm tiếng, người chết hoá Tro. Chém xuyên bầy 250 thây cùng 12 Kẻ Thức — mỗi người một vũ khí, một nhịp, một cách ĐÁP tell vàng. Kẻ địch nhớ cách bạn đánh. Chết, thức dậy bên Lửa Canh, đi tiếp."
- EN (≈ 265 ký tự): "The Great Bell has gone silent and the dead turn to ash. Carve through hordes of 250 as 12 Wakers — each with one weapon, one rhythm, one way to answer the golden tell. Your enemies remember how you fight. Die, wake by the Vigil Fire, go again."
Mô tả dài — khung 8 khối (VI và EN cùng cấu trúc; GIF/webm 616 px rộng, ≤ 3 MB, 3–6 s lặp [STEAMWORKS])
| # | Tiêu đề VI | Tiêu đề EN | Nội dung (2–3 câu + 1 GIF) | GIF |
|---|---|---|---|---|
| 1 | (không tiêu đề) — câu móc | (hook) | logline Bible §1 rút còn 2 câu | tell vàng → ĐÁP → nổ bầy |
| 2 | Gặt bầy, gạt tinh anh | Reap the horde, answer the elite | 150–250 quái; ít đòn nguy hiểm, luôn báo trước; ĐÁP thưởng lớn (U1) | Trăng Máu giữa 250 thây |
| 3 | 12 Kẻ Thức, 12 trò chơi | 12 Wakers, 12 games | mỗi hero 1 vũ khí, 1 tài nguyên, 1 combo, 1 verb ĐÁP + 1 verb giữ riêng (U2) | 4 hero × 1.5 s |
| 4 | Tro Nhớ | Ash Memory | Tinh Anh và boss dịch trọng số đòn theo thói quen bạn, luôn báo, có trần công bằng (U3, INV-15) | callout "NÓ ĐÃ ĐỌC BẠN" |
| 5 | Build sâu, chọn nhanh | Deep builds, fast picks | Edge, Cộng Hưởng, Tiến Hoá, Then Chốt, Relic; đọc thẻ < 3 s | draft 3 thẻ |
| 6 | Chết là đi tiếp | Death moves the story | Tháp Chuông Gãy, Phục Dựng, codex Sổ Tang; truyện tiến qua mỗi lần chết | hub sáng dần |
| 7 | Thử thách | Challenge | Khăn Tang (Độ Tang 0–43), Lễ Ngày, Canh Thâu Đêm, Đêm Hồi Chuông (theo mốc đã có) | bảng xếp hạng |
| 8 | Early Access & lộ trình | Early Access & roadmap | trạng thái hiện tại + bảng U1–U3–1.0 (§4); Deck, trợ năng (tell mù màu ◇/▲/chấm, remap, 1 tay) | ảnh lộ trình |
- Luật chữ: không so sánh với game có thật, không "giống X"; số trên trang = số canon (150–250 quái, 12 hero, 60 thành tựu…); khối 7 chỉ liệt kê mode đã ship ở build hiện tại.
- Thuật ngữ EN chốt cho trang (bảng loc sở hữu bản cuối): ĐÁP = Answer · Lướt = Dash · Kẻ Thức = Waker · Tro Nhớ = Ash Memory · Khăn Tang = Mourning Band · Độ Tang = Mourning · Dư Âm = Afterring · Dạng Rèn = Forging · Then Chốt = Linchpin · Lửa Canh = Vigil Fire · Đại Chuông Vọng = Great Bell.
2.6 Giá, cấu hình, khảo sát nội dung
- Giá: EA 11.99 USD → 1.0 14.99 USD (Bible §1). Giá vùng = bảng đề xuất của Steamworks, không chỉnh tay trừ khi > ±15% so với đề xuất. Giảm ra mắt EA 10% × 7 ngày
[ASSUMED]. Không giảm giá trong 30 ngày trước ngày tăng giá 1.0 và không giảm sau 1.0 trước 1.0 + 2 tháng (Roadmap §3.10). Báo tăng giá trên trang + sự kiện ≥ 30 ngày trước MS07. Không DLC, không gói hỗ trợ, không IAP (Bible §13). - Cấu hình (điền model phần cứng thật trực tiếp trên Steamworks sau đo ở MS01b; không ghi tên hãng vào repo):
| Mức | CPU | RAM | GPU | Ổ | Mục tiêu |
|---|---|---|---|---|---|
Tối thiểu (= doc 50 §5.1, [ASSUMED] tới đo MS01b) | 4 nhân/4 luồng ~2.5 GHz (đời 2015+) | 8 GB | GPU tích hợp đời 2018+ hoặc GPU rời DX11 2 GB VRAM | 4 GB | 1920×1080, preset Cao, 60 fps, 250 quái (tự hạ 180 khi fps < 50 trong 10 s) |
| Đề nghị | 6 nhân ≥ 3.0 GHz | 16 GB | GPU rời 4 GB VRAM, đời ≤ 6 năm | 4 GB SSD | 1920×1080, preset Cao, 60 fps, 250 quái |
- Steam Deck (APU 4 nhân/8 luồng, 16 GB, 1280×800) = trần thiết kế riêng, ngưỡng ở §8.2 / doc 50 §5.1; không phải hàng "Tối thiểu".
- Ngân sách: RAM tiến trình ≤ 3 GB, texture thường trú ≤ 1 GB, cài đặt ≤ 4 GB (Roadmap §5.3). HĐH: PC 64-bit được Steam hỗ trợ; không build gốc cho HĐH khác ở 1.0 (Deck chạy build PC qua lớp tương thích của Steam — kiểm ở §8).
- Khảo sát nội dung trưởng thành
[STEAMWORKS]: bạo lực giả tưởng thường xuyên (pixel, quái là Tro, máu tối giản: hạt đỏ/tro, không mảnh xác chi tiết); chủ đề cái chết, tang lễ, linh hồn. Không khoả thân, không tình dục, không cờ bạc, không mua bán trong game. Nhãn tuổi khu vực: tự khai qua bảng câu hỏi của Steamworks; dự kiến 12+/13+[ASSUMED].
53. Demo & Next Fest
3.1 Phạm vi demo (= Roadmap §3.5, MS02)
| Hạng mục | Phạm vi |
|---|---|
| Hero | H01 Varek (sẵn) · H02 Bodan (xong 1 run) · H07 Veyra (150 ĐÁP + 6 CUR_ECHO_SHARD) |
| Kit/hero | SK01–SK04 · UL1 · AS1 · E01–E20; H01 RS1–RS6 |
| Nội dung | Hồi I (B1): EN_B1_01–07, EL_B1_01–02, MB_B1_1, BS_B1 (P1–P3); SE001–SE012, RL001–RL010, AF01–AF10 |
| Meta | ST_HEARTH, ST_FORGE, ST_DOCK, ST_YARD; CUR_SOUL_ASH, CUR_ECHO_SHARD, CUR_PAPER_GOLD; MR01–MR05; codex rút gọn |
| Tro Nhớ | MICRO + MESO (Mắt Tro, callout); không MACRO/Sẹo |
| Mode · ngôn ngữ | STANDARD · EN, VI |
| Trần | hạ BS_B1 → màn "Còn tiếp ở Early Access" + nút Wishlist; chơi lại tự do không giới hạn thời gian, demo không hết hạn |
3.2 Khác biệt kỹ thuật của demo
| Khoá | Luật |
|---|---|
| App | app demo riêng của Steamworks gắn trang chính; depot demo_pc64; nhánh default + qa |
| Lưu | thư mục save_demo/; không chuyển sang EA/1.0 (Roadmap Q8); cloud bật (cùng luật §7) |
| Thành tựu / stats / leaderboard | 0 / 0 / 0 (Roadmap §3.5) — tránh trùng API name với app chính |
| Rich presence | bật, bộ token §9 (chỉ trạng thái hub/run Hồi I) |
| Wishlist | nút ở menu chính + màn kết BS_B1 + màn chết lần thứ 3: mở overlay tới trang cửa hàng app chính (ActivateGameOverlayToStore); overlay tắt → mở trình duyệt Steam |
| Cờ nội dung | 1 code base, build cấu hình DEMO bật cờ nội dung theo mốc (Roadmap: không #if theo mốc); kiểm CI: build demo không chứa asset ID ngoài bảng §3.1 (quét danh sách atlas/bundle) |
| Telemetry | màn đồng ý §15 giống bản chính; thêm sự kiện demo_end_screen {wishlist_clicked} |
| Phản hồi | nút "Góp ý" mở form web (URL trong config, không thu thập ngoài form) |
3.3 Checklist Next Fest (kỳ 10/2027 = tuần F; mốc lùi theo tuần)
| Hạn | Việc | Chủ | Xong khi |
|---|---|---|---|
| F−16 tuần (M6) | chọn kỳ đã chốt (Roadmap Q4); ghi lịch đăng ký Steamworks | producer | ngày mở đăng ký ghi vào checklist M5 |
| F−12 → F−9 (M7–M8) | Steam Playtest kín ~500 người; bảng KPI telemetry chạy | producer + D1 | crash ≤ 0.5/100 phiên, trung vị ≥ 25 phút |
| F−10 | FTO Tro Nhớ xong (Roadmap Q10, trước demo công khai) | producer | kết luận luật sư; trượt → MACRO/Sẹo chỉ-thoại (demo không có MACRO nên demo vẫn đi) |
| F−9 (M8) | đóng băng tính năng demo; công bố ngày demo + trailer 90 s lên trang | D5 | trailer live |
~F−8 [ASSUMED] | đăng ký Next Fest trên Steamworks khi mở | producer | xác nhận đăng ký |
| F−7 | tạo app demo, trang demo, capsule demo (dùng lại bộ MS01) | producer | trang demo duyệt |
| F−6 | nộp build demo duyệt (dự phòng 5 ngày làm việc [STEAMWORKS]) | D1 | duyệt qua |
| F−5 (M9) | demo công khai trên trang (≥ 4 tuần trước F) | producer | nút "Tải demo" live |
| F−5 → F−1 | gửi link demo ≥ 150 người sáng tạo nội dung; press kit (ảnh 1920×1080, logo, GIF, fact sheet VI/EN) | D5 | ≥ 30 phản hồi [ASSUMED] |
| F−3 | bản vá demo 1 (từ số liệu M9) | D1–D3 | crash ≤ 0.2/100 phiên |
| F−2 | lịch phát trực tiếp: mỗi ngày 2 khung (Mỹ + Âu) [ASSUMED]; kịch bản stream (Autopilot không dùng khi stream) | producer | lịch đăng sự kiện Steam |
| F−1 | đóng băng build Next Fest; trực hotfix theo ca; bảng số liệu sống | D1 | build ở default + qa khớp |
| F (7 ngày) | stream mỗi ngày; tối đa 2 bản vá demo (chỉ sửa crash/lỗi A); trả lời thảo luận ≤ 24 h | toàn đội | — |
| F+1 | hậu kiểm: wishlist/ngày, tỉ lệ người chơi demo → wishlist, trung vị giờ chơi, % qua BS_B1 | producer | quyết định ngày EA (Roadmap §4.3) |
- Kiểm chất lượng demo trước F−5: chạy được 100% bằng tay cầm (§8) · Deck: 60 fps cảnh MS01b, chữ đọc được ở 1280×800 · màn đồng ý telemetry điều hướng được bằng tay cầm · 0 lỗi A, ≤ 5 lỗi B · ngôn ngữ EN + VI 100% chuỗi · không chuỗi debug · nút Wishlist hoạt động có/không overlay.
3.4 KPI demo (Roadmap §3.5, giữ nguyên ngưỡng)
| KPI | Đỏ | Tốt | Nguồn |
|---|---|---|---|
| Trung vị giờ chơi demo | < 20 phút → sửa onboarding trước EA | > 30 phút | Steamworks + telemetry |
| % qua BS_B1 | < 15% | 25–40% [ASSUMED] | telemetry |
| % chạy ≥ 2 run | < 40% | ≥ 60% [ASSUMED] | telemetry |
| Wishlist thêm tuần lễ | < 2k | ≥ 10k [ASSUMED] | Steamworks |
| Crash/100 phiên | > 1 | ≤ 0.2 | báo crash |
64. Trang Early Access (Q&A bắt buộc của Steamworks; VI + EN)
| # | Câu hỏi | VI | EN |
|---|---|---|---|
| 1 | Vì sao Early Access? | Lõi chiến đấu đã chắc (5 Kẻ Thức, 2 Hồi); bọn mình muốn cân bằng 12 nhịp hero và Tro Nhớ bằng số liệu thật của người chơi trước khi khoá 1.0. | The core combat is solid (5 Wakers, 2 Acts). We want to tune 12 hero rhythms and Ash Memory against real player data before locking 1.0. |
| 2 | Early Access kéo dài bao lâu? | Khoảng 19 tháng (01/2028 → 08/2029), 3 bản cập nhật lớn cách nhau 4–5 tháng. | About 19 months (Jan 2028 → Aug 2029), with 3 major updates 4–5 months apart. |
| 3 | Bản đầy đủ khác gì? | 12 Kẻ Thức (EA: 5) · 4 Hồi + Kết + 1 vùng bí mật · 5 chế độ · 3 kết · 60 thành tựu · 10 ngôn ngữ · Steam Deck Verified. | 12 Wakers (EA: 5) · 4 Acts + a finale + 1 secret region · 5 modes · 3 endings · 60 achievements · 10 languages · Steam Deck Verified. |
| 4 | Trạng thái bản EA hiện tại? | 5 Kẻ Thức (mỗi người 8 kỹ năng, 2 ult, 2 Dạng Rèn, 36 Edge), Hồi I–II với 14 quái thường, 4 Tinh Anh, 3 mini-boss, 2 boss; Khăn Tang 10 bậc; Lễ Ngày có bảng xếp hạng; 30 thành tựu; 5 ngôn ngữ; Deck Playable. Mở đủ 5 hero ≈ 8–12 giờ [ASSUMED, đo ở M12]. | 5 Wakers (8 skills, 2 ults, 2 Forgings, 36 Edges each), Acts I–II with 14 enemies, 4 elites, 3 mini-bosses, 2 bosses; 10 Mourning Bands; a Daily rite with leaderboards; 30 achievements; 5 languages; Deck Playable. Unlocking all 5 Wakers takes about 8–12 hours. |
| 5 | Giá có đổi không? | Có: 11.99 USD trong EA, 14.99 USD ở 1.0; báo trước ≥ 30 ngày. Mọi cập nhật tới 1.0 miễn phí cho người đã mua. | Yes: 11.99 USD in Early Access, 14.99 USD at 1.0, announced at least 30 days ahead. Every update up to 1.0 is free for owners. |
| 6 | Cộng đồng tham gia thế nào? | Lộ trình công khai trên trang; devlog mỗi tháng; nhánh beta thử trước 1–2 tuần mỗi bản lớn; diễn đàn Steam + máy chủ cộng đồng; dữ liệu chơi ẩn danh chỉ khi bạn đồng ý. | Public roadmap on this page; a monthly devlog; a beta branch 1–2 weeks before each major update; Steam forums and our community server; anonymous play data only if you opt in. |
- Bảng lộ trình trên trang (ảnh 616 px, cập nhật mỗi mốc): U1 (05/2028) +H10 Ingra, +H04 Sậu, Hồi III, Canh Thâu Đêm · U2 (09/2028) +H11 Wenna, +H08 Dov, Hồi IV, Đêm Hồi Chuông, Khăn Tang 11–15, Act Mutator · U3 (02/2029) +H09 Kessa, +H05 Oska, trận cuối + kết đầu, Lễ Tự Chọn, Truy Tuần · 1.0 (08/2029) +H12 Ambrin, vùng bí mật, 2 kết, 10 ngôn ngữ.
- Luật EA: chỉ hứa nội dung đã có trong Bible §10; trễ mốc → cập nhật ảnh lộ trình + sự kiện Steam trong 7 ngày, ghi lý do; không bao giờ hứa ngày cụ thể dưới mức tháng. Màn "tiến độ EA" trong game (Roadmap §3.6) đọc cùng bảng này từ
config/ea_roadmap.json(tải theo build, không gọi mạng).
75. Thành tựu — chính sách (danh sách data/achievements.json sinh sau theo §4.28 doc 51)
5.1 Số lượng theo mốc
| Bản | Số | Ghi chú |
|---|---|---|
| Demo / Playtest | 0 | Roadmap §3.5 |
| EA MS03 | 30 [ASSUMED, Roadmap §3.6] | chỉ nội dung Hồi I–II, 5 hero, STANDARD + DAILY |
| U1–U3 | +nhóm theo nội dung mới (ENDLESS, BOSS_RUSH, Hồi III–IV, BS_FINAL…) | tổng tăng dần, không vượt 60 |
| 1.0 MS07 | 60 (Bible §10.3, schema 1..60) | ID ACH_<slug> ≤ 60, không thêm sau 1.0 trừ mục DEC- (hero hậu 1.0 → cân nhắc ở MS08) |
5.2 Nhóm (tổng 60 ở 1.0 · 30 ở EA)
| Nhóm | 1.0 | EA | Ví dụ điều kiện (condition có cấu trúc, doc 51 §4.0) | hidden | mercy_blocked |
|---|---|---|---|---|---|
| Truyện & kết | 8 | 2 | qua Hồi I · II · III · IV; END_BELL_TOLL = ACH_bell_toll (ACH_BELL_TOLL) · END_QUIET_SHORE = ACH_quiet_shore (ACH_QUIET_SHORE) · END_ASH_CROWN = ACH_ash_crown (canon) · FLAG_SHORE_OPEN = ACH_shore_open | true cho 3 mục END_QUIET_SHORE, END_ASH_CROWN, FLAG_SHORE_OPEN | false |
| Kẻ Thức | 12 | 5 | 1/hero: đạt MR10 với Hxx (EA: 5 hero đã ship) | false | false |
| Boss & Cổng | 6 | 4 | hạ đủ mini-boss 1 biome; hạ BS_Bx không dùng bình máu; … | false | false |
| Kỹ năng (ĐÁP/Né) | 8 | 6 | 100 ĐÁP trong 1 run; 10 Né Hoàn Hảo liên tiếp; ĐÁP 1 tell vàng của boss pha 3; … | false | false |
| Build | 7 | 5 | kích 1 Cộng Hưởng II; 1 Tiến Hoá; Then Chốt (1.0); thắng Hồi với 3 Relic Lời Nguyền; … | false | false |
| Tro Nhớ | 5 | 3 | thấy Mắt Tro 3/3; thắng trận có thế đáp ASH bật; hạ boss mang Sẹo (sau END_BELL_TOLL); … | false | false (Thương Xót đặt Tro Nhớ 0 → tự nhiên không đạt, không cần khoá) |
| Khăn Tang | 6 | 3 | hạ boss Hồi cuối của build với Độ Tang ≥ 4 · 8 · 16 · 24 · 32 · 43 (EA: 4 · 8 · 16; trần EA 29) | false | true, mourning_related: true |
| Mode | 4 | 1 | xong 1 Lễ Ngày; xong 1 Truy Tuần; ENDLESS tầng 10; xong Đêm Hồi Chuông | false | false |
| Hub & codex | 4 | 1 | Phục Dựng GD5; 120 trang codex; dâng đủ LV01–LV06; xong TT1–TT5 | false | false |
5.3 Luật thiết kế thành tựu
- Dạy hệ thống, không cày: ≤ 3 thành tựu cần > 40 h (MR10 × 12 hero tính là nhóm hero, mỗi mục ≤ 8 run, DEC-2026-11-07-02); không thành tựu "chơi N ngày liên tiếp", không thành tựu theo thứ hạng leaderboard (top %), không thành tựu "bỏ lỡ vĩnh viễn" (mọi mục làm lại được, kể cả END_ASH_CROWN: "lần sau chọn lại được").
- Ẩn chỉ để giấu truyện (B6, 2 kết sau); mô tả ẩn hiện "Bí mật của Sổ Tang".
- CUSTOM: 0 thành tựu (Bible §4.1). Thương Xót bật: khoá đúng các mục
mercy_blocked: true= 6 mục nhóm Khăn Tang (Bible §4.3: Thương Xót chỉ khoá leaderboard + thành tựu Độ Tang); mọi nhóm khác vẫn mở. UI chọn Thương Xót ghi rõ số mục bị khoá. - Mod/nội dung lệch hash (§16): thành tựu vẫn mở (chơi đơn), leaderboard khoá.
- API:
steam_api_name=ACH_<SLUG>viết hoa củaid(vdACH_ash_crown→ACH_ASH_CROWN); bất biến sau khi ship; không xoá thành tựu đã ship (chỉ sửa chữ). Mở khoá →SetAchievement+StoreStatsngay (thành tựu là sự kiện hiếm, không gom). - Ngoại tuyến: Steam không chạy → ghi
achievements_pending[]trongsave/meta_<steamId>.json; lần init Steam kế → đẩy hết, xoá hàng chờ khiStoreStatscallback OK. - Icon: 256×256 = gốc 64×64 ×4 pixel; bản khoá = cùng hình, độ bão hoà 0, sáng 40% (sinh bằng script, không vẽ 2 lần); tên icon
icon_<slug>(fieldicon). - Thứ tự hiển thị trên Steam = thứ tự nhóm bảng §5.2; agent sinh file đánh số theo nhóm.
86. Stats & leaderboard
6.1 Stats Steam (ISteamUserStats; INT trừ khi ghi; API name bất biến)
| API name | Nghĩa | Cập nhật |
|---|---|---|
STAT_KILLS_TOTAL | tổng quái hạ (mọi mode trừ CUSTOM) | điểm lưu |
STAT_RUNS_STARTED · STAT_RUNS_WON | run bắt đầu · run tới kết (bất kỳ END) | đầu run · màn kết |
STAT_ACTS_CLEARED | Hồi đã qua cộng dồn | chuyển Hồi |
STAT_PERFECT_ANSWERS · STAT_PERFECT_DODGES | ĐÁP · Né Hoàn Hảo | điểm lưu |
STAT_ELITES_KILLED · STAT_MINIBOSSES_KILLED · STAT_BOSSES_KILLED | hạ Tinh Anh · mini · boss Hồi | điểm lưu |
STAT_MAX_DO_TANG_WIN | Độ Tang cao nhất khi hạ boss Hồi cuối của build | màn kết |
STAT_DAILY_RUNS · STAT_WEEKLY_CLEARS | lượt Lễ Ngày tính điểm · Truy Tuần xong | nộp điểm |
STAT_ENDLESS_MAX_FLOOR | tầng ENDLESS cao nhất | chết/thoát ENDLESS |
STAT_BOSS_RUSH_BEST_MS | thời gian BOSS_RUSH tốt nhất (ms; 0 = chưa có) | xong BOSS_RUSH |
STAT_CODEX_PAGES · STAT_RELICS_FOUND · STAT_EVOLUTIONS | trang codex · Relic đã nhặt · Tiến Hoá đã kích | điểm lưu |
STAT_ASH_CALLOUTS · STAT_SCARS_DEFEATED | callout Tro Nhớ đã thấy · boss mang Sẹo đã hạ | điểm lưu |
STAT_HEROES_UNLOCKED · STAT_MR_TOTAL | hero đã mở · tổng bậc Thông Thạo 12 hero (0–240) | hub |
STAT_WINS_H01 … STAT_WINS_H12 | run thắng theo hero (12 stat) | màn kết |
STAT_DEATHS · STAT_PLAYTIME_MIN | lần chết · phút chơi | màn chết · điểm lưu |
- Luật ghi:
SetStatở sự kiện,StoreStatschỉ ở điểm lưu run (MAP,BOSS_GATE,DOCK— doc 16 §11), hub, màn kết, thoát game; tối đa 1StoreStats/60 s trừ khi có thành tựu mới. Không bao giờ ghi trong vòng lặp frame. - Thành tựu tiến trình (vd 100 ĐÁP) dùng stat + "progress stat" của Steamworks để Steam hiện thanh tiến độ.
- CUSTOM và chế độ Thương Xót: stats vẫn cộng (thống kê cá nhân), chỉ thành tựu/leaderboard khoá.
6.2 Leaderboard (Bible §4.1; STANDARD và CUSTOM không có bảng)
| Tên bảng | Mode | Mốc | Sắp xếp | Hiển thị | Điểm (int32) | Tạo |
|---|---|---|---|---|---|---|
DAILY_<YYYYMMDD> | DAILY (Lễ Ngày) | MS03 | giảm dần | Numeric | score Bible (bên dưới), sàn 0 | máy chủ tạo trước 00:00 UTC ngày đó |
WEEKLY_<YYYY>W<ww> | Truy Tuần (DAILY tuần, Độ Tang cố định 8) | MS06 | giảm dần | Numeric | cùng công thức DAILY | máy chủ, thứ Hai 00:00 UTC |
ENDLESS_FLOOR + ENDLESS_FLOOR_H01 … _H12 | ENDLESS | MS04 | giảm dần | Numeric (UI giải mã) | floor × 1 000 000 + (999 999 − min(999 999, giây chơi)) | tĩnh, tạo ở Steamworks |
BOSS_RUSH_<YYYY>W<ww> (MS05, 5 trận) → BOSS_RUSH_<YYYY>W<ww>_V2 từ MS06 (6 trận) | BOSS_RUSH (mini mở màn theo seed tuần) | MS05 | tăng dần | TimeMilliSeconds | tổng ms các trận + rush_lost_ms (doc 16 Q17), không tính màn hồi 6 s | máy chủ, thứ Hai 00:00 UTC |
- Tuần = tuần ISO, đổi thứ Hai 00:00 UTC (Bible: seed Truy Tuần).
<YYYYMMDD>theo UTC. Bảng cũ giữ 90 ngày rồi ẩn trong UI (vẫn còn trên Steam). - Tất cả bảng ghi "Trusted"
[STEAMWORKS]: client không ghi điểm; chỉ máy chủ ghi qua Web API sau kiểm hợp lý (§6.3). Client chỉ đọc (FindLeaderboard,DownloadLeaderboardEntriesGlobal/AroundUser/Friends). - Khoá nộp điểm: CUSTOM · Thương Xót bật bất kỳ mục · build debug/
qa(nộp vào bảngDEV_*riêng) · hash nội dung lệch (§16) · trạng thái ngoại tuyến quá hạn (§6.3 bước 5). - 1 lượt tính điểm: DAILY 1/ngày, Truy Tuần 1/tuần (Bible). Lượt bị tiêu khi bắt đầu run tính điểm (ghi
daily_keyvàorun_active.json+ meta) → thoát/crash không reroll được; chơi lại sau đó = luyện tập, không nộp. BOSS_RUSH và ENDLESS: nộp mọi lần, bảng giữ điểm tốt nhất mỗi người. - Chi tiết đính kèm (
details, int32[], ≤ 64[STEAMWORKS]):[0]schema=1 ·[1]hero 1–12 ·[2]Dạng Rèn 1–3 ·[3]ult 1–3 ·[4]Độ Tang ·[5]kills ·[6]perfectAnswers ·[7]actsCleared ·[8]giây chơi ·[9]content_version ·[10]build_number ·[11–16]BOSS_RUSH ms từng trận (0 nếu mode khác) ·[17]tầng ENDLESS. UI bảng xếp hạng đọc[1]–[4]để hiện hero/Dạng Rèn/Độ Tang mỗi dòng.
6.3 Luồng nộp điểm có kiểm hợp lý (Bible §4.1 "Chống gian lận DAILY"; 1 PM tech Bible §10.1)
- Nướng trần theo seed (CI, trước khi bảng mở): job CI
daily_seed_bake(Unity headless,-batchmode -nographics) chạy đúng code C# MapGen + ngân sách Director + bảng encounter của build cho 14daily_keykế tiếp + 2 key tuần kế tiếp, với mỗicontent_versionđang live (danh sách hash live §11.4). Mỗi tổ hợp tải lên kho khoá-giá trịseedcap/<daily_key>/<content_version>= {spawn_max_per_min_250,spawn_max_per_min_180,act_min_s[4],score_per_s_cap[4]} (kills/phút tối đa Director sinh được với trần 250 và 180 quái sống; giây tối thiểu mỗi Hồi I–IV = 60% trung vị Bible, vd Hồi I 6:30 → 234 s[ASSUMED]; trần điểm/giây mỗi Hồi). Job chạy mỗi ngày 00:00 UTC + mỗi lần đẩy build mới lêndefault/beta; thiếu key → cảnh báo kênh vận hành, máy chủ đưa mọi bài nộp của key đó vàoheld(không tự chấp nhận). Máy chủ chỉ đọc KV này, không chạy MapGen/Director. - Kết run tính điểm → client dựng
RunSubmission{steam_id, board, seed64, daily_key, mode, hero, aspect, ult, do_tang, kills, perfect_answers, acts_cleared, seconds_played, tells_emitted_yellow, tells_emitted_purple, act_times_s[], alive_cap, content_hash, build_number, details[]}.alive_cap= 250 | 180: trần quái sống thấp nhất đã áp trong run (preset Deck/máy yếu tự hạ 180 khi fps < 50 trong 10 s — doc 01 §5.1; một khi xuống 180 thì ghi 180 cho cả run). - Client lấy vé
GetAuthTicketForWebApi("bw-score")→ POST HTTPS tới máy chủ điểm (URL trong config build). - Máy chủ xác thực vé qua Web API (
AuthenticateUserTicket), kiểm quyền sở hữu app, tracontent_hash→content_versiontrong danh sách hash live, đọcseedcap/<daily_key>/<content_version>(bước 0; key tuần dùng key tuần), rồi kiểm: (a) điểm/giây mỗi Hồi ≤score_per_s_cap[act]· (b) kills/phút ≤spawn_max_per_min_250nếualive_cap= 250, ≤spawn_max_per_min_180nếualive_cap= 180 (trần của nền tảng nộp, doc 19 §6; giá trịalive_capkhác 250/180 →held) · (c) mỗiact_times_s[i]≥act_min_s[i]· (d) perfect_answers ≤ tells_emitted_yellow + tells_emitted_purple · (e)content_hashthuộc danh sách hash build đang live · (f) chưa có lượt chodaily_key/tuần đó. - Đạt → ghi điểm bằng Web API
SetLeaderboardScore(KeepBest cho ENDLESS/BOSS_RUSH, ForceUpdate cho DAILY/WEEKLY) → client nhậnaccepted+ hạng. Trượt →held(không ghi), lưu vào hàng duyệt tay; UI: "Điểm đang chờ duyệt" (không buộc tội). Top 50 mỗi bảng duyệt tay mỗi ngày (Bible); gỡ điểm sai bằng Web API xoá điểm. - Ngoại tuyến/máy chủ lỗi: client giữ
RunSubmissiontronglocal/score_queue/, thử lại khi khởi động + mỗi 5 phút ở hub. Hạn nộp (theo giờ máy chủ nhận, doc 19 §5.2): DAILY nhận chỉ khi tới máy chủ trước 02:00 UTC ngày kế ngày củadaily_key· tuần trước 02:00 UTC thứ Hai sau tuần đó; sau hạn → máy chủ trảexpired, client xoá bài khỏi hàng chờ, báo "Đã quá hạn nộp". - Máy chủ: 1 hàm không trạng thái + kho khoá-giá trị (
seedcap/,daily_result/, hàng duyệt, log 90 ngày); khoá Web API publisher chỉ nằm ở máy chủ, không bao giờ trong build. Tải thiết kế: 20k nộp/ngày[ASSUMED]. - Chốt bảng ngày & thưởng top 10% (+5 Nến Canh, Bible / doc 17 / doc 19 §5.2): lúc 02:00 UTC ngày kế, tác vụ hẹn giờ của máy chủ đóng bảng DAILY của
daily_key(từ đó mọi bài nộp key này =expired), đọcentry_count(số dòng được ghi, không tínhheld) và tínhcutoff= điểm ở hạngceil(0.10 × entry_count)(vd 2 347 dòng → hạng 235). Ghi KVdaily_result/<daily_key>= {cutoff,entry_count}; bất biến sau khi ghi (gỡ điểm gian lận sau đó không tính lại). Client gọiGET /v1/daily/result?key=<daily_key>lúc khởi động và mỗi lần vào hub, cho mọidaily_keycó lượt tính điểmacceptedchưa nhận thưởng trong 30 ngày qua (chưa có kết quả → 404, thử lại lần sau). Nếu điểm của mình (giá trịacceptedmáy chủ trả ở bước 4) ≥cutoffvàdaily_keychưa có trongmeta.daily_rewards_claimed[]→ cộng 5 Nến Canh CUR_VIGIL_CANDLE, thêm key vàometa.daily_rewards_claimed[]trong cùng một lần ghi nguyên tửmeta_<steamId>.json(§7.2), hiện toast "Top 10% Daily — +5 Nến Canh". Key đã có trong danh sách → bỏ qua (chống nhận đôi kể cả khi 2 máy cùng gọi: luật xung đột §7.3 giữ một bản, danh sách đi cùng số dư).daily_rewards_claimed[]giữ key ≤ 30 ngày (key cũ hơn xoá ở lần ghi meta kế); KVdaily_result/giữ 90 ngày. Điểmheldđược duyệt chấp nhận sau 02:00 → vào bảng, không đổicutoff, vẫn được nhận nếu ≥cutoff.
6.4 Ví dụ tính
- DAILY: kills 4 200 · perfectAnswers 180 · actsCleared 4 · Độ Tang của seed 5 · giây chơi 1 950 →
(4 200 + 50×180 + 2 000×4) × (1 + 0.05×5) − 1 950 = 21 200 × 1.25 − 1 950 = 24 550. Kiểm (b):alive_cap250 → 4 200 / 32.5 phút = 129 kill/phút ≤spawn_max_per_min_250của seed (vd 190) → đạt; cùng run trên Deck đã tự hạ (alive_cap180) so vớispawn_max_per_min_180(vd 140) → 129 ≤ 140 → đạt. Thưởng (bước 7): bảng ngày 2 347 dòng →cutoff= điểm hạng 235 = 23 900 → 24 550 ≥ 23 900 → +5 Nến Canh ở lần mở game kế. - ENDLESS: qua tầng 14, tổng 3 725 s →
14 × 1 000 000 + (999 999 − 3 725) = 14 996 274; UI hiện "Tầng 14 · 62:05". Cùng tầng 14 nhưng 3 600 s → 14 996 399 > 14 996 274 → nhanh hơn xếp trên. - BOSS_RUSH: 6 trận 41 200 + 55 800 + 63 100 + 70 400 + 88 900 + 102 600 ms = 422 000 ms → hiện "7:02.000".
97. Steam Cloud (Auto-Cloud)
7.1 File & thư mục
Gốc lưu = thư mục dữ liệu người dùng của game + /<steamId64>/ (mỗi tài khoản Steam 1 hồ sơ; Bible §8: Tro Nhớ lưu phía người chơi). Auto-Cloud đồng bộ save/ (mẫu *.json, *.bak); không đồng bộ local/.
| File | Nội dung | Chủ doc | Cỡ trần | Cloud |
|---|---|---|---|---|
save/meta_<steamId>.json | tài khoản: tiền meta (CUR_SOUL_ASH, CUR_ECHO_SHARD, CUR_VIGIL_CANDLE), mở khoá hero/Dạng Rèn/ult, Thông Thạo MR, Phục Dựng GD, nâng trạm UP_, Lễ Vật, Thử Thách, codex, cờ (FLAG_*, END đã đạt), lượt DAILY/Truy Tuần đã dùng, daily_rewards_claimed[] (daily_key đã nhận +5 Nến Canh, giữ 30 ngày — §6.3 bước 7), achievements_pending[], active_run_id | doc meta/hub (nội dung) · doc này (tên, luật) | 512 KB | có |
save/run_active.json | run dở (doc 16 §11) | 16 | 256 KB | có |
save/ash_profile_<steamId>.json | PSP MESO + Sổ Thù + Sẹo (doc 14 §9.1) | 14 | 512 KB | có |
save/settings_shared.json | remap, preset 1 tay, trợ năng (meta.accessibility), Thương Xót, ngôn ngữ, phụ đề, rung, cỡ chữ, lựa chọn đồng ý telemetry/crash (§15) | doc này | 32 KB | có |
save/*.bak | bản trước của mỗi file trên | — | = file | có |
local/settings_device.json | độ phân giải, preset đồ hoạ, trần fps, vsync, chế độ cửa sổ, thiết bị âm | doc này | 16 KB | không (khác máy) |
local/cloud_marker.json | save_seq cuối máy này ghi cho từng file | doc này | 4 KB | không |
local/score_queue/ · local/telemetry_queue/ · local/crash/ · local/logs/ | hàng chờ mạng, dump, log | §6.3, §15 | ≤ 5 MB / ≤ 20 MB | không |
- Quota Steamworks: 64 MB, 40 file / người
[ASSUMED](dùng thực ~3 MB, 8 file). - Demo: gốc
save_demo/(app riêng → cloud riêng), cùng luật.
7.2 Ghi file
- Mọi file
save/có khối đầu{schema_version, content_version, save_seq, utc_written, device_id, checksum};save_seq+1 mỗi lần ghi;device_id= UUID ngẫu nhiên lưu ởlocal/(không phải mã phần cứng);checksum= CRC32 phần thân. - Ghi nguyên tử (doc 16 §11):
.tmp→ fsync → đổi tên file cũ thành.bak→ rename.tmp→ cập nhậtlocal/cloud_marker.json. Không ghi trong phòng chiến đấu; tần suất: điểm lưu run, hub, màn kết, thoát game. - Meta tiền tệ gửi vào
meta_<steamId>.jsonở mỗi điểm lưu (doc 16) → crash/mất cloud tối đa mất 1 phòng.
7.3 Luật xung đột (thứ tự áp dụng)
| # | Tình huống | Luật |
|---|---|---|
| 1 | Steam phát hiện xung đột trước khi chạy (2 máy cùng sửa khi ngoại tuyến) | hộp thoại của Steam client quyết định (người chơi chọn bản Cloud/bản máy); game không can thiệp |
| 2 | Bản tải vào có save_seq < cloud_marker của máy này (cloud cũ đè bản mới hơn) | màn "Chọn bản lưu" (điều hướng tay cầm): 2 thẻ tóm tắt {ngày giờ, giờ chơi, Tro Hồn, hero đã mở, Hồi xa nhất}; bản không chọn chép vào local/conflict/<file>_<utc>.json (giữ 3 bản, 30 ngày) |
| 3 | checksum hỏng hoặc JSON lỗi | dùng .bak; .bak cũng hỏng → giữ file hỏng ở local/conflict/, báo "Bản lưu hỏng, đã khôi phục bản gần nhất" (meta) hoặc bỏ run dở (run) |
| 4 | run_active.json có run_id ≠ meta.active_run_id (run từ máy khác/cũ) | bỏ run dở (tiền meta đã gửi giữ nguyên, doc 16 §11), báo 1 dòng |
| 5 | content_version của file > build đang chạy | khoá chỉ-đọc: không ghi đè, báo "Hãy cập nhật game" (xảy ra khi lùi nhánh previous, §11) |
| 6 | content_version < build | chạy migration tuần tự v→v+1 (mỗi bản có test, Roadmap RK10); lỗi → giữ bản gốc ở local/conflict/, không ghi |
| 7 | ash_profile lệch meta (khác máy) | không gộp; dùng bản có save_seq cao hơn; Sổ Thù tự suy giảm (doc 14 §9.2) nên mất vài bản ghi không phá trải nghiệm |
- Không bao giờ tự xoá dữ liệu cloud. "Xoá toàn bộ tiến trình" trong Cài đặt: xác nhận 2 lần (giữ nút 2 s) + chép bản sao vào
local/conflict/. - Ví dụ: chơi PC tới GD2 (
meta.save_seq410), tắt mạng, chơi Deck từ bản cũ seq 380 thêm 2 run (seq 395), bật mạng → Steam báo xung đột (luật 1), người chơi chọn "Cloud" (PC, 410) trên Deck → Deck tải seq 410 > marker Deck 395 → không hiện luật 2; 2 run trên Deck mất, bản seq 395 không còn (do Steam đè) → chấp nhận (người chơi đã chọn). Nếu Steam tự tải bản cloud cũ hơn mà không hỏi (seq 380 < marker 410 trên PC) → luật 2 hiện màn chọn.
108. Steam Input & Steam Deck
8.1 Input
- Game đọc tay cầm qua lớp input của engine (1
InputActions,InputFrame— Roadmap §5.2); không bắt buộc Steam Input. Steamworks: cấu hình Steam Input mặc định = mẫu "Gamepad" cho Deck; tay cầm PC khác theo thiết lập Steam của người chơi. - Bản đồ nút = Bible §1.1 (khoá): Đánh X/LMB · ĐÁP chạm / verb giữ RB/RMB · Lướt A/Space · Kỹ năng LB·LT·RT / Q·E·F · Ult Y/R · Bình máu d-pad xuống/1 · Xem Tro Nhớ View/Tab · Bản đồ/tạm dừng d-pad lên·Menu / M·Esc · Tương tác B/G. Remap toàn bộ + preset 1 tay ở Trợ năng.
- Nút lưng Deck (L4/R4/L5/R5) trong cấu hình chính thức: L4 = Bình máu, R4 = Ult, L5 = Xem Tro Nhớ, R5 = Tương tác (bản sao, không thay nút chính)
[ASSUMED]; gyro tắt; trackpad phải = chuột chỉ trong menu. - Glyph: 5 bộ (Roadmap §5.2): bàn phím/chuột · bố cục ABXY · bố cục ký hiệu hình học · Deck · chạm (sau). Chọn bộ theo thiết bị input cuối; nếu Steam Input khởi tạo được →
GetInputTypeForHandlequyết định (Deck → bộ Deck). Đổi glyph sống ≤ 1 frame sau input đầu tiên của thiết bị mới. - Nhập chữ (chỉ: seed ở CUSTOM, tên preset remap):
ShowFloatingGamepadTextInputkhi đang dùng tay cầm; không có ô nào bắt buộc gõ. - Mất kết nối tay cầm trong run → tự tạm dừng (§10) + "Kết nối lại tay cầm".
8.2 Checklist Steam Deck Verified (mục tiêu MS07; MS03 = Playable)
| Nhóm | Hạng mục | Ngưỡng/luật Bladewake | Kiểm |
|---|---|---|---|
| Input | toàn bộ game chơi bằng tay cầm, kể cả màn đồng ý, cài đặt, khởi động lần đầu | 0 màn cần chuột/bàn phím | QA đi hết cây menu bằng tay cầm |
| Input | glyph đúng Deck | 0 glyph bàn phím/ABXY khi chạy Deck | ảnh chụp mọi màn có prompt |
| Input | nhập chữ qua bàn phím ảo | §8.1 | thử CUSTOM seed |
| Hiển thị | độ phân giải mặc định trên Deck | 1280×800; render 427×267 ×3 = 1281×801 cắt 1 px (Bible §10.4); vùng an toàn gameplay 427×267 giữa màn | tự chọn ở lần chạy đầu khi IsSteamRunningOnSteamDeck() |
| Hiển thị | chữ đọc được | ui_text_scale_min 1.25 trên Deck (Roadmap §5.1); chữ nhỏ nhất ≥ 12 px cao trên màn 1280×800 (CJK cũng ≥ 12 px, Bible §10.3); chữ thân ≥ 16 px | đo trên ảnh chụp 1280×800, 0 chuỗi < 12 px |
| Hiển thị | tell đọc được trên 7" | vàng/tím/chấm giữ INV-01; tuỳ chọn tell mù màu ◇/▲/chấm | test 5 s trên Deck với 3 hero |
| Liền mạch | không launcher, không tài khoản ngoài, không chống gian lận cài thêm | khởi động thẳng vào màn tiêu đề ≤ 15 s | đo |
| Hệ thống | suspend/resume | §8.3 | 10 lần suspend giữa trận boss, 0 lỗi |
| Hiệu năng | mặc định chơi mượt | cảnh MS01b: 60 fps, p95 ≤ 16.6 ms, CPU ≤ 10 ms; FX trần 1 050 hạt (preset 70%); tự hạ 180 quái khi fps < 50 trong 10 s | CI hiệu năng Deck hằng tuần (Roadmap §5.3) |
| Hiệu năng | pin | tuỳ chọn trần fps 30/40/45/60 (mặc định 60); ≥ 2 h pin ở 60 fps [ASSUMED] | đo 1 run 32 phút |
| Âm | loa trong | preset "Loa nhỏ" SN_SMALL_SPEAKER (doc 32) tự bật trên Deck | nghe tell ở 30% âm lượng |
- Nộp đánh giá Deck: M12 (cho nhãn Playable lúc EA) và M30 (Verified trước 1.0); lỗi trả về → sửa trong ≤ 2 tuần, nộp lại.
8.3 Suspend / resume & tiêu điểm
- Mất tiêu điểm cửa sổ, Deck suspend, overlay mở, tay cầm rời → Menu tạm dừng ngay trong frame đó (World + Hero dừng — doc 16 §11), âm thanh vào snapshot tạm dừng; không cần lưu.
- Resume: đồng hồ run không tính thời gian suspend (giây chơi DAILY = đồng hồ run, không tính tạm dừng); hiện lại khung cuối ≤ 2 s; hàng chờ mạng (§6.3, §15) thử lại sau 10 s; không nhả tạm dừng tự động (người chơi bấm Menu/B để tiếp).
- Suspend > 30 phút giữa DAILY: vẫn hợp lệ (đồng hồ không chạy), nhưng bước 5 §6.3 vẫn áp hạn nộp 02:00 UTC ngày kế.
119. Rich presence
- Khoá
steam_display= 1 token dưới đây; tham số quaSetRichPresence(key, value); file token Steamworks có 1 khối/ngôn ngữ đã ship (§12). Token lồng:{#Hero_%hero%}→ tên hero,{#Biome_%biome%}→ tên vùng. - Cập nhật chỉ khi đổi trạng thái (vào hub, đổi Hồi, vào/ra boss, đổi tầng/trận), tối đa 1 lần/5 s; không bao giờ đưa chữ người chơi gõ; Hồi VI (B6) và boss B5/B6 không lộ tên (chống spoil).
| Token | Khi | VI | EN (bản nháp; loc sở hữu bản cuối) |
|---|---|---|---|
#Menu | màn tiêu đề/cài đặt | Ở màn tiêu đề | At the title screen |
#Hub | HUB_BELL_TOWER | Ở Tháp Chuông Gãy | At the Broken Bell Tower |
#Yard | ST_YARD | Luyện ở Sân Tập | Training in the Yard |
#Run | STANDARD Hồi I–IV, Độ Tang 0 | {#Hero_%hero%} · Hồi %act% · {#Biome_%biome%} | {#Hero_%hero%} · Act %act% · {#Biome_%biome%} |
#RunMourning | STANDARD, Độ Tang ≥ 1 | {#Hero_%hero%} · Hồi %act% · Độ Tang %dotang% | {#Hero_%hero%} · Act %act% · Mourning %dotang% |
#Boss | trong BOS Hồi I–IV | {#Hero_%hero%} · đấu boss Hồi %act% | {#Hero_%hero%} · fighting the Act %act% boss |
#Finale | Hồi V (B5) | {#Hero_%hero%} · Đỉnh Chuông Câm | {#Hero_%hero%} · Mute Bell Summit |
#Secret | Hồi VI (B6) | {#Hero_%hero%} · ??? | {#Hero_%hero%} · ??? |
#Daily | DAILY | Lễ Ngày · {#Hero_%hero%} · Hồi %act% | Daily Rite · {#Hero_%hero%} · Act %act% |
#Weekly | Truy Tuần | Truy Tuần · {#Hero_%hero%} · Hồi %act% | Weekly Hunt · {#Hero_%hero%} · Act %act% |
#Endless | ENDLESS | Canh Thâu Đêm · tầng %floor% | All-Night Vigil · floor %floor% |
#BossRush | BOSS_RUSH | Đêm Hồi Chuông · trận %fight%/6 | Night of the Toll · fight %fight%/6 |
#Custom | CUSTOM | Lễ Tự Chọn | Custom Rite |
#Hero_H01 … #Hero_H12 | tham số | Varek, Bodan, Halka, Sậu, Oska, Ruvan, Veyra, Dov, Kessa, Ingra, Wenna, Ambrin | như VI (tên riêng không dịch, giữ dấu) |
#Biome_B1 … #Biome_B4 | tham số | Đồi Mộ Tro · Đầm Vải Liệm · Lò Đúc Câm · Thành Chuông Treo | Ash Grave Hill · Shroud Marsh · Mute Foundry · Hanging Bell City |
- Tham số:
hero= Varek H01…Ambrin H12;act= I…IV (số La Mã, giống UI);biome= Đồi Mộ Tro B1…Thành Chuông Treo B4;dotang1–43;floor1–999;fight1–6. Demo chỉ dùng#Menu,#Hub,#Yard,#Run,#Boss. - Không dùng
steam_player_group(không co-op). Bộ token mới (hero hậu 1.0) thêm bằng#Hero_<id>khi ID được cấp.
1210. Overlay & tạm dừng
| Sự kiện | Hành vi |
|---|---|
GameOverlayActivated(true) | trong run/boss: Menu tạm dừng ngay (§8.3); trong hub/menu: không đổi; âm thanh giảm theo snapshot tạm dừng |
GameOverlayActivated(false) | giữ tạm dừng; người chơi tự tiếp tục (không nhả tự động để tránh bị đánh ngay) |
| Overlay tắt trong Steam | mọi nút mở overlay (Wishlist, hồ sơ bạn bè trên bảng xếp hạng, trang cửa hàng) → mở trình duyệt Steam; có thông báo 1 dòng |
| Phím tắt overlay trùng nút game | không giữ phím nào của Steam; bàn phím mặc định Bible §1.1 không dùng Shift+Tab |
| Ảnh chụp Steam (F12 mặc định) | không chặn; không đè UI tạm dừng |
Steam Timeline [STEAMWORKS] | đánh dấu sự kiện: bắt đầu run, vào boss, hạ boss/mini, ĐÁP tell vàng của boss, chết, kết; trạng thái "đang chơi"/"menu" theo §9 — chi phí ~0, giúp người chơi cắt clip (hỗ trợ marketing Roadmap §4) |
| Thông báo Steam (bạn online, thành tựu) | đặt ở góc không chứa HUD chính (theo doc UI; mặc định trên phải) bằng SetOverlayNotificationPosition |
- Tạm dừng không được dùng để "đọc tell": khi tạm dừng, tell đang chạy đóng băng nhưng hiện mờ 50% dưới menu; tiếp tục → 0.3 s đếm ngược trước khi World chạy (không đổi INV-03, vì windup dừng cùng World).
1311. Build, depot, nhánh, phiên bản
11.1 App & depot
| App | Depot | Nội dung |
|---|---|---|
| Bladewake (chính) | content_pc64 | build phát hành PC 64-bit |
| Bladewake Demo | demo_pc64 | build DEMO (§3.2) |
| Bladewake Playtest | playtest_pc64 | M7–M8 (đóng sau Next Fest) |
- File symbol debug không nằm trong depot; lưu nội bộ theo
build_numberđể giải mã dump crash (§15).
11.2 Nhánh Steam
| Nhánh | Ai thấy | Mật khẩu | Dùng cho | Lên nhánh khi |
|---|---|---|---|---|
default | mọi người chơi | — | bản phát hành | qua checklist §11.4 trên rc |
beta | người chơi tự chọn | không | thử bản lớn U1/U2/U3/1.0 trước 7–14 ngày | rc đạt ≥ 48 h không lỗi A |
previous | người chơi tự chọn | không | bản default trước, giữ 1 bản (lùi khi bản mới lỗi máy lạ) | tự động khi default đổi |
rc | đội + QA ngoài | có | ứng viên phát hành | đóng băng nội dung |
qa | đội | có | build đêm qua CI (test + hiệu năng Deck) | mỗi đêm |
dev_leaderboard | đội | có | build dùng bảng DEV_* | theo nhu cầu |
- Lùi về
previoussau khi đã chơi bản mới → luật 5 §7.3 (khoá chỉ-đọc nếu save mới hơn); ghi cảnh báo trong mô tả nhánh. - Build
qa/rc/dev_leaderboard: watermark góc màn "build_number + nhánh"; phím debug chỉ ở đây, bị gỡ khỏidefault(Roadmap §3.10, kiểm bằng CI: build release không chứa symbol lệnh debug).
11.3 Phiên bản
- Chuỗi hiển thị
MAJOR.MINOR.PATCH (build_number): demo0.9.x· EA MS030.1.0· U10.2.0· U20.3.0· U30.4.0· 1.01.0.0· hero hậu 1.01.1.0,1.2.0… · vá nóng tăng PATCH.build_numbertăng đơn điệu toàn dự án (CI). content_version(int, trong save +details[9]) tăng khi dữ liệu gameplay đổi theo cách cần migration hoặc làm điểm không so được; bảng leaderboard theo ngày/tuần nên không cần reset;ENDLESS_FLOOR*reset (đổi tên bảng thêm hậu tố_V2) chỉ khi cân bằng ENDLESS đổi > 10% sức mạnh — cần mụcDEC-.
11.4 Checklist phát hành (mỗi bản lên default)
| # | Kiểm | Ngưỡng |
|---|---|---|
| 1 | Test tự động + validate dữ liệu (tools/validate.py --all --strict) | 0 ERROR |
| 2 | Migration save từ 2 bản default trước (demo không migrate — Roadmap Q8) | 0 lỗi trên bộ save mẫu ≥ 20 file |
| 3 | Hiệu năng Deck cảnh MS01b | 60 fps, p95 ≤ 16.6 ms |
| 4 | Smoke Deck 30 phút bằng tay cầm (hub → Hồi I → boss) | 0 lỗi A |
| 5 | Thành tựu/stats trên rc bằng tài khoản test; reset bằng công cụ Steamworks sau test | mỗi thành tựu mới mở đúng 1 lần |
| 6 | Nộp điểm vào DEV_* qua máy chủ thật | đi hết 6 bước §6.3 |
| 7 | Cloud: chơi máy A → máy B (PC + Deck) | luật §7.3 đúng |
| 8 | Loc: 100% chuỗi các ngôn ngữ đã ship, pseudo-loc không tràn | 0 chuỗi thiếu |
| 9 | Ghi chú cập nhật (sự kiện Steam VI + EN, tóm tắt ≤ 10 dòng + chi tiết) | có trước khi đẩy |
| 10 | Giờ đẩy: thứ Ba–Thứ Năm, 16:00–18:00 UTC; không thứ Sáu/cuối tuần trừ vá nóng | — |
- Vá nóng: lỗi A (crash > 1/100 phiên, mất save, chặn tiến trình) → bản vá ≤ 48 h; lỗi B gom vào bản vá kế (≤ 14 ngày trong EA).
- Lùi: bản mới lỗi A không vá kịp trong 12 h → đặt lại build trước lên
default(Steamworks giữ lịch sử build), báo bằng sự kiện Steam.
1412. Bản địa hoá
12.1 Lộ trình ngôn ngữ (Bible §10, milestones)
| Mốc | Ngôn ngữ | Số |
|---|---|---|
| Trang MS01 · demo/Next Fest MS02 | EN, VI | 2 |
| EA MS03 → U3 MS06 | EN, VI, zh-CN, JA, DE | 5 |
| 1.0 MS07 | 5 trên + FR, ES-419, PT-BR, RU, KO [ASSUMED: chọn theo thị phần Steam; chốt ở M24] | 10 |
| Hậu 1.0 (thứ 11+) | zh-TW, PL, TR, IT, ES-ES (thứ tự theo số wishlist/bán theo vùng) | +1–2/năm |
- Cut-line bước 9 (Bible §10.2): trễ → 1.0 giữ 5 ngôn ngữ, 5 ngôn ngữ mới vào bản vá sau.
- Trên Steamworks khai: Giao diện + Phụ đề = có cho mọi ngôn ngữ đã ship; Lồng tiếng = không (Bible §13: không voice có nghĩa).
12.2 Quy trình
- Nguồn: VI (viết gốc,
*_vi) → EN (bản trục cho dịch giả) → 8 ngôn ngữ còn lại dịch từ EN, có bảng thuật ngữ (§2.5 + glossary loc) và ngữ cảnh (ảnh chụp, giới hạn ký tự,{param}). - Khối lượng ~65–70k từ nguồn (Bible §10.3); đóng băng loc 4 tuần trước mỗi MS (khoá nội dung M12 cho EA).
- Không ship bản dịch máy chưa qua người duyệt. Mỗi ngôn ngữ: 1 dịch giả + 1 người duyệt chơi build
rc≥ 4 h. - UI chừa chỗ 140% độ dài EN (DE/RU/PT-BR dài nhất); pseudo-loc (kéo dài 40% + ký tự có dấu chồng) chạy trong CI.
- Font: pixel Latin có đủ dấu chồng tiếng Việt (2 tầng dấu trong chiều cao dòng); CJK glyph ≥ 12 px, canvas UI riêng (Bible §10.3); KO dùng cùng chuẩn CJK; RU Cyrillic cùng lưới pixel Latin.
- Trang cửa hàng, ghi chú cập nhật lớn, rich presence (§9), mô tả thành tựu: dịch cùng bộ ngôn ngữ đã ship trong game. Devlog nhỏ: chỉ VI + EN.
1513. Chính sách không DRM & ngoại tuyến
- Không dùng lớp DRM bên thứ ba, không vỏ DRM của Steam, không chống gian lận cài thêm, không yêu cầu trực tuyến. Game chạy khi Steam ngoại tuyến (chế độ Offline của Steam client).
SteamAPI_Initthất bại (không có Steam) → vẫn vào game ở chế độ ngoại tuyến: lưu cục bộ cùng định dạng (không cloud), thành tựu vàoachievements_pending[], stats cộng cục bộ, leaderboard ẩn, rich presence tắt, DAILY chơi được dạng luyện tập (seed vẫn sinh tất định từ ngày UTC, không nộp). Không gọiRestartAppIfNecessaryđể ép mở qua Steam.- Lý do: người chơi mua game sở hữu bản chạy được; rủi ro sao chép chấp nhận (game premium giá thấp; leaderboard + cloud là giá trị chỉ có khi mua).
- Mã nguồn và dữ liệu không mã hoá (ngoài đóng gói asset bình thường); toàn vẹn leaderboard dựa vào máy chủ (§6.3), không dựa vào làm rối mã.
1614. Rủi ro hoàn tiền & đánh giá
Cửa hoàn tiền Steam: < 2 h chơi và < 14 ngày từ ngày mua [STEAMWORKS] → 2 giờ đầu quyết định. KPI EA (Roadmap §3.6): hoàn tiền ≤ 8% an toàn, > 12% đỏ; đánh giá ≥ 80% an toàn, < 70% đỏ.
| # | Rủi ro | Dấu hiệu | Giảm thiểu | Đo |
|---|---|---|---|---|
| RF1 | 2 h đầu chưa thấy chiều sâu | hoàn tiền với giờ chơi 60–120 phút | qua Hồi I 1–1.5 h (Bible §3.8); mở H02 sau run 1; hub + Thông Thạo hiện trong 30 phút đầu; BS_B1 với Tro Nhớ MESO trong 2 h | phân phối giờ chơi lúc hoàn tiền (Steamworks) |
| RF2 | hiệu năng máy yếu | đánh giá "lag", hoàn tiền < 30 phút | lần chạy đầu tự đo 20 s → chọn preset; trần 180 quái tự bật (fps < 50 trong 10 s); cấu hình tối thiểu trung thực (§2.6) | telemetry perf_tier (doc 15 §14) |
| RF3 | Tro Nhớ bị thấy là "bất công" | đánh giá chứa "cheat/unfair" | luôn báo (callout, Mắt Tro, thẻ "X nhớ: bạn…"); trần INV-15; tắt 60 s đầu + 3 run đầu đời; công tắc "Trí nhớ xuyên run" | KPI P7 ≤ 15% thấy bất công |
| RF4 | EA "ít nội dung" | đánh giá gần đây < 75% (RK11) | mô tả + Q&A ghi rõ 2 Hồi, 5 hero, lộ trình; U1 ≤ 4 tháng sau EA | tỉ lệ đánh giá theo tuần |
| RF5 | tăng giá 1.0 làm người mua EA phật ý | đánh giá nhắc giá | Q&A #5 từ ngày 1; báo ≥ 30 ngày; giá EA thấp hơn là phần thưởng mua sớm | — |
| RF6 | mất save khi cập nhật | 1 báo cáo mất save (RK10) | §7.2–7.3, checklist §11.4 #2, nhánh previous | báo lỗi + crash |
| RF7 | glyph/tay cầm sai | đánh giá "controller" | §8.1, checklist Deck | QA mỗi bản |
| RF8 | dịch kém | đánh giá theo ngôn ngữ < 70% | §12.2 người duyệt; sửa chuỗi trong bản vá ≤ 14 ngày | đánh giá theo ngôn ngữ |
| RF9 | crash | > 1/100 phiên | §15 crash + vá nóng ≤ 48 h | crash/100 phiên |
- Luật đánh giá: không bao giờ thưởng/khuyến khích đánh giá (cấm theo luật Steam); không hộp thoại xin đánh giá trong game; chỉ 1 mục "Góp ý" ở menu chính. Key cho người sáng tạo/báo chí chỉ qua công cụ key Steamworks, ghi sổ; không bán key cho bên trung gian.
- Trả lời đánh giá: 2 tuần đầu EA và 1.0: trả lời mọi đánh giá tiêu cực có lỗi cụ thể trong ≤ 72 h với hướng xử lý; không tranh luận về sở thích.
1715. Telemetry & báo crash (có đồng ý)
15.1 Màn đồng ý (lần chạy đầu, sau chọn ngôn ngữ; điều hướng tay cầm)
| Lựa chọn | Mặc định | Nội dung gửi | Nếu không đồng ý |
|---|---|---|---|
| "Gửi dữ liệu chơi ẩn danh để cân bằng game" | chưa chọn — 2 nút "Đồng ý" / "Không" cùng cỡ, cùng màu; không thể bỏ qua bằng "Tiếp" | sự kiện §15.2 | không gửi gì; game đầy đủ |
| "Báo lỗi khi game bị crash" | "Hỏi mỗi lần" (3 lựa chọn: Luôn gửi · Hỏi mỗi lần · Không bao giờ) | §15.3 | dump giữ cục bộ 7 ngày rồi xoá |
- Đổi bất cứ lúc nào ở Cài đặt › Quyền riêng tư; có nút "Xoá dữ liệu đã gửi" (gửi yêu cầu xoá theo
telemetry_id, xử lý ≤ 30 ngày) và "Tạo mã ẩn danh mới". - Nộp điểm leaderboard (§6.3) là chức năng, không phải telemetry: lần đầu vào DAILY/ENDLESS/BOSS_RUSH hiện 1 thông báo "Điểm và thống kê run sẽ gửi tới máy chủ bảng xếp hạng" + lựa chọn "Chơi không xếp hạng".
- Liên kết chính sách quyền riêng tư trên trang Steam + trong màn đồng ý. Không thu thập: tên tài khoản, email, IP lưu lâu (> 24 h ở log mạng), danh sách bạn bè, đường dẫn thư mục người dùng, ảnh màn hình.
15.2 Sự kiện (chỉ khi đồng ý; telemetry_id = UUID ngẫu nhiên lưu settings_shared.json, không suy ra từ steamId)
| Sự kiện | Trường | Nguồn spec |
|---|---|---|
session_start | build_number, content_version, nhánh, ngôn ngữ, is_deck, nhóm CPU/GPU/RAM (bậc thô), độ phân giải, preset | doc này |
run_state | run_id, from, to, act, row, lane, t_run | doc 16 §0 |
| gói cuối run | quyết định, draft, build, nguyên nhân chết | doc 13 §16.2 |
ash_room + KPI Tro Nhớ | theo spec | doc 14 §15 |
perf_tier | room, alive, fx_active, p95 | doc 15 §14 |
settings_changed | khoá trợ năng/Thương Xót đã bật (không giá trị remap) | doc này |
demo_end_screen | wishlist_clicked | §3.2 |
consent_changed | lựa chọn mới (gửi cuối cùng rồi dừng nếu tắt) | doc này |
- Gửi theo lô ở hub/màn kết/thoát; nén ≤ 50 KB/run; hàng chờ ngoại tuyến ≤ 5 MB (đầy → bỏ cũ nhất); không gửi trong phòng chiến đấu. Lưu thô 13 tháng, tổng hợp lâu dài. Máy chủ telemetry = cùng hạ tầng máy chủ điểm (§6.3), khác endpoint.
15.3 Báo crash
- Bộ bắt crash ghi: minidump + 2 000 dòng log cuối + build_number + content_version + 30 sự kiện run gần nhất + preset; xoá đường dẫn người dùng/tên máy trong log trước khi lưu. Lần chạy kế → theo lựa chọn §15.1 (hỏi: hộp thoại "Game đã gặp lỗi lần trước. Gửi báo lỗi?" với "Gửi" / "Không").
- ≤ 2 MB nén/báo; giữ 90 ngày; symbol theo
build_number(§11.1). Gộp theo chữ ký stack; KPI ≤ 0.2 crash/100 phiên (Roadmap §3.5). - Báo lỗi không crash: phím "Báo lỗi" trong menu tạm dừng (bản
qa/rc+ bản phát hành) gửi log + ảnh chụp chỉ khi người chơi tick "Đính kèm ảnh".
1816. Mod / Workshop & tính năng Steam khác
- Quyết định: không Workshop, không công cụ mod chính thức tới hết MS08 (Bible §13: không công cụ mod/editor màn ở 1.0). Xem lại ở cổng port M33–M35 chỉ khi đạt cổng "Steam tốt" (Roadmap §3.11) và có ≥ 1 PM dư — mục
DEC-mới. - Không chặn mod cộng đồng (dữ liệu không mã hoá, §13), không hỗ trợ: lúc khởi động tính
content_hashcủa gói dữ liệu; lệch danh sách hash của build → cờ "nội dung đã sửa": leaderboard khoá (§6.2), thành tựu + stats vẫn mở, crash report gắn cờ để lọc; telemetry gắn cờ, loại khỏi số liệu cân bằng. - Family Sharing: cho phép. Remote Play (lên TV/máy tính bảng/điện thoại): cho phép, không tối ưu riêng. Remote Play Together: không (không co-op, Bible #57).
- Thẻ giao dịch Steam: đăng ký khi Steam xác nhận đủ điều kiện, mục tiêu 1.0: 6 thẻ = 6 khoảnh khắc (Varek Trăng Máu, Bodan, Veyra, Xà Ích Xe Tang, BS_B1, Tháp Chuông Gãy), 5 emoticon (◇ tell vàng, ▲ tím, Mắt Tro, chuông câm, Lửa Canh), 3 nền hồ sơ (B1, B2, hub) — art từ asset đã duyệt, vẽ mới ≤ 0.5 PM.
- Steam Playtest: chỉ M7–M8 (§1), không dùng lại sau Next Fest (nhánh
betathay thế). - Hồ sơ Steam/điểm Steam (vật phẩm hồ sơ mua bằng điểm): không làm.
19Quy tắc cho dev/AI
- Mọi lệnh gọi Steamworks đi qua 1 interface
IPlatformServices(Roadmap §3.11) — cài đặtSteamPlatformServices+OfflinePlatformServices(§13); gameplay không gọi API Steam trực tiếp (CI grepSteamUserStats,SteamFriends… ngoài thư mục Platform). - API name thành tựu/stat/leaderboard và token rich presence bất biến sau khi ship; thêm mới được, đổi tên/xoá = không (chỉ sửa chữ hiển thị).
- Leaderboard luôn Trusted; khoá Web API publisher chỉ ở máy chủ; build có khoá → chặn phát hành.
StoreStatschỉ ở điểm lưu/hub/kết/thoát, ≤ 1/60 s trừ khi có thành tựu mới.- File
save/chỉ ghi nguyên tử với khối đầu §7.2; thêm file cloud mới → thêm vào bảng §7.1 + mẫu Auto-Cloud cùng lượt. - Mọi màn hình phải điều hướng được bằng tay cầm và đọc được ở 1280×800 (chữ ≥ 12 px); thêm màn mới phải qua 2 kiểm này trước merge.
- Không gửi telemetry/crash khi chưa có đồng ý tương ứng; trường mới vào sự kiện → thêm vào bảng §15.2.
- Chỉ viết tên thương hiệu Steam/Steam Deck/Steamworks/Next Fest; số
[STEAMWORKS]đối chiếu tài liệu Steamworks hiện hành khi thực hiện. - Số
[ASSUMED]thay bằng số đo ở mốc tương ứng (ghi ngày) — không đổi luật canon Bible.
20Quyết định đã chốt
| # | Câu hỏi | Quyết định | Lý do |
|---|---|---|---|
| S1 | Ngôn ngữ lúc ra mắt? | 2026-11-07 — theo Bible §10: demo/Next Fest EN + VI · EA 5 (EN VI zh-CN JA DE) · 1.0 10 (+FR ES-419 PT-BR RU KO [ASSUMED]) | brief giao việc ghi "VN + EN at launch" chỉ đúng cho demo; Bible thắng |
| S2 | Số thành tựu? | 0 demo · 30 EA [ASSUMED] · 60 ở 1.0; 9 nhóm §5.2 | Bible §10.3 + Roadmap §3.5/3.6 |
| S3 | Thương Xót khoá gì? | leaderboard + 6 thành tựu nhóm Khăn Tang (mercy_blocked) | Bible §4.3 |
| S4 | Kiểm hợp lý điểm ở đâu? | máy chủ ghi bảng Trusted qua Web API; client chỉ đọc | Bible §4.1 "kiểm hợp lý phía máy chủ", không replay tất định (#52) |
| S5 | Lượt DAILY tính khi nào? | tiêu khi bắt đầu run, không reroll; 2026-11-07 — hạn nộp DAILY 02:00 UTC ngày kế, tuần 02:00 UTC thứ Hai (thay "≤ 48 h" cũ để khớp doc 19 §5.2); bảng chốt 02:00 → daily_result → thưởng top 10% (§6.3 bước 7) | 1 lượt/ngày (Bible) + chịu ngoại tuyến 2 h; top 10% không đổi sau khi trả thưởng |
| S15 | Máy chủ biết trần seed thế nào? | 2026-11-07 — CI daily_seed_bake (Unity headless) nướng seedcap/<daily_key>/<content_version> 14 ngày + 2 tuần trước; máy chủ chỉ đọc; RunSubmission.alive_cap 250|180 chọn trần kills/phút | hàm không trạng thái không chạy được MapGen/Director C#; Deck/máy yếu tự hạ 180 quái (doc 19 §6) |
| S16 | Cấu hình tối thiểu? | 2026-11-07 — = doc 50 §5.1: 4 nhân/4 luồng ~2.5 GHz, 8 GB, GPU tích hợp đời 2018+, 1920×1080, preset Cao, 250 quái (tự hạ 180) | bản cũ "2.4 GHz, preset Thấp, 1280×720, 180 quái" lệch doc 50 §5.1 / doc 60 §7.1 |
| S17 | Tên bảng & điểm BOSS_RUSH; id thành tựu kết? | 2026-11-07 — bảng BOSS_RUSH_<YYYY>W<ww> (MS05, 5 trận) đổi thành ..._V2 từ MS06 (6 trận); điểm = tổng ms trận + rush_lost_ms; thành tựu kết theo data/achievements.json: ACH_bell_toll · ACH_quiet_shore · ACH_ash_crown · ACH_shore_open | khớp doc 16 §10.4 + Q17 (tổng 5 và 6 trận không so được; crash không reset trận xấu) và data |
| S6 | Mã hoá điểm ENDLESS? | floor × 1 000 000 + (999 999 − giây) | 1 bảng sắp được cả tầng lẫn tốc độ |
| S7 | Cloud? | Auto-Cloud thư mục save/ theo steamId; local/ không cloud; 7 luật xung đột §7.3 | cài đặt đồ hoạ khác máy; bảo vệ tiến trình |
| S8 | Steam Input bắt buộc? | không; lớp input engine + mẫu Gamepad cho Deck; Steam Input chỉ để nhận loại tay cầm/glyph | 1 lớp remap trong game (Roadmap §5.2) |
| S9 | DRM? | không DRM, không bắt mở qua Steam, có chế độ ngoại tuyến | premium, tin người mua; toàn vẹn bảng nhờ máy chủ |
| S10 | Workshop/mod? | không tới hết MS08; mod không chặn, khoá leaderboard theo hash | Bible §13; ngân sách 198/200 PM không có chỗ |
| S11 | Telemetry mặc định? | chưa chọn, 2 nút ngang nhau; crash "Hỏi mỗi lần" | đồng ý thật sự, không mẫu tối |
| S12 | Nhánh? | default · beta · previous · rc · qa · dev_leaderboard; app Demo + Playtest riêng | thử trước, lùi được, bảng dev tách |
| S13 | Tag thể loại tự đánh? | không dùng | Roadmap Q1 khác biệt bằng ĐÁP/Lướt |
| S14 | Xin đánh giá trong game? | không bao giờ | luật Steam + giữ tin cậy |