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

43 — Steam & nền tảng (Steamworks, Deck, trang cửa hàng, vận hành)

đặ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,

Cập nhật: 2026-11-07
19
mục ##
32
mục ###
29
bảng
11 277
từ

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.

Độ dài từng mục (nghìn ký tự)Độ dài từng mục (nghìn ký tự)0. Phạm vi & thứ bậc0. Phạm vi & thứ bậc: 1k1k1. Lịch Steam theo mốc (Bible §10, mil…1. Lịch Steam theo mốc (Bible §10, milestones): 1.2k1.2k2. Trang cửa hàng2. Trang cửa hàng: 9.4k9.4k3. Demo & Next Fest3. Demo & Next Fest: 3.7k3.7k4. Trang Early Access (Q&A bắt buộc củ…4. Trang Early Access (Q&A bắt buộc của Steamworks; VI + EN): 2.6k2.6k5. Thành tựu — chính sách (danh sách d…5. Thành tựu — chính sách (danh sách data/achievements.json sinh sau theo §4.28 doc 51): 3k3k6. Stats & leaderboard6. Stats & leaderboard: 8.8k8.8k7. Steam Cloud (Auto-Cloud)7. Steam Cloud (Auto-Cloud): 3.9k3.9k8. Steam Input & Steam Deck8. Steam Input & Steam Deck: 3.3k3.3k9. Rich presence9. Rich presence: 2.1k2.1k10. Overlay & tạm dừng10. Overlay & tạm dừng: 1.1k1.1k11. Build, depot, nhánh, phiên bản11. Build, depot, nhánh, phiên bản: 2.7k2.7k12. Bản địa hoá12. Bản địa hoá: 1.4k1.4k13. Chính sách không DRM & ngoại tuyến13. Chính sách không DRM & ngoại tuyến: 0.8k0.8k14. Rủi ro hoàn tiền & đánh giá14. Rủi ro hoàn tiền & đánh giá: 1.9k1.9k15. Telemetry & báo crash (có đồng ý)15. Telemetry & báo crash (có đồng ý): 2.4k2.4k16. Mod / Workshop & tính năng Steam k…16. Mod / Workshop & tính năng Steam khác: 1.1k1.1kQuy tắc cho dev/AIQuy tắc cho dev/AI: 1.1k1.1kQuyết định đã chốtQuyết định đã chốt: 2.8k2.8k
Bấm tên mục để nhảy tới mục đó.
Mục lục chi tiết (## và ###)
  1. 0. Phạm vi & thứ bậc
  2. 1. Lịch Steam theo mốc (Bible §10, milestones)
  3. 2. Trang cửa hàng
  4. 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)
  5. 2.2 Ảnh chụp — thứ tự 10 ảnh (EA)
  6. 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)
  7. 2.4 Tag (20, theo thứ tự ưu tiên — 5 tag đầu nặng nhất trong gợi ý của Steam)
  8. 2.5 Mô tả
  9. 2.6 Giá, cấu hình, khảo sát nội dung
  10. 3. Demo & Next Fest
  11. 3.1 Phạm vi demo (= Roadmap §3.5, MS02)
  12. 3.2 Khác biệt kỹ thuật của demo
  13. 3.3 Checklist Next Fest (kỳ 10/2027 = tuần F; mốc lùi theo tuần)
  14. 3.4 KPI demo (Roadmap §3.5, giữ nguyên ngưỡng)
  15. 4. Trang Early Access (Q&A bắt buộc của Steamworks; VI + EN)
  16. 5. Thành tựu — chính sách (danh sách data/achievements.json sinh sau theo §4.28 doc 51)
  17. 5.1 Số lượng theo mốc
  18. 5.2 Nhóm (tổng 60 ở 1.0 · 30 ở EA)
  19. 5.3 Luật thiết kế thành tựu
  20. 6. Stats & leaderboard
  21. 6.1 Stats Steam (ISteamUserStats; INT trừ khi ghi; API name bất biến)
  22. 6.2 Leaderboard (Bible §4.1; STANDARD và CUSTOM không có bảng)
  23. 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)
  24. 6.4 Ví dụ tính
  25. 7. Steam Cloud (Auto-Cloud)
  26. 7.1 File & thư mục
  27. 7.2 Ghi file
  28. 7.3 Luật xung đột (thứ tự áp dụng)
  29. 8. Steam Input & Steam Deck
  30. 8.1 Input
  31. 8.2 Checklist Steam Deck Verified (mục tiêu MS07; MS03 = Playable)
  32. 8.3 Suspend / resume & tiêu điểm
  33. 9. Rich presence
  34. 10. Overlay & tạm dừng
  35. 11. Build, depot, nhánh, phiên bản
  36. 11.1 App & depot
  37. 11.2 Nhánh Steam
  38. 11.3 Phiên bản
  39. 11.4 Checklist phát hành (mỗi bản lên default)
  40. 12. Bản địa hoá
  41. 12.1 Lộ trình ngôn ngữ (Bible §10, milestones)
  42. 12.2 Quy trình
  43. 13. Chính sách không DRM & ngoại tuyến
  44. 14. Rủi ro hoàn tiền & đánh giá
  45. 15. Telemetry & báo crash (có đồng ý)
  46. 15.1 Màn đồng ý (lần chạy đầu, sau chọn ngôn ngữ; điều hướng tay cầm)
  47. 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)
  48. 15.3 Báo crash
  49. 16. Mod / Workshop & tính năng Steam khác
  50. Quy tắc cho dev/AI
  51. 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ưu save/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ốcThángViệc SteamTính năng SDK bậtNgôn ngữDeck
MS01M0 (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—
MS01bM3 (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–M8Steam Playtest kín (app Playtest riêng, ~500 người [ASSUMED])cloud, rich presence, telemetry đồng ý, crashEN, VItest
—M9 (09/2027)demo công khai trên trang (≥ 4 tuần trước Next Fest)như Playtest; thành tựu 0EN, VImục tiêu Playable
MS02M10 (10/2027)Next Fest (lượt duy nhất); mục tiêu ≥ 60k wishlist saunhư trênEN, VIPlayable
MS03M13 (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, cloud5: EN VI zh-CN JA DEPlayable
MS04M17U1: ENDLESS + leaderboard tầng+leaderboard ENDLESS5Playable
MS05M21U2: BOSS_RUSH + leaderboard thời gian+leaderboard BOSS_RUSH5Playable
MS06M26U3: BS_FINAL, CUSTOM, Truy Tuần+leaderboard WEEKLY5Playable
MS07M32 (08/2029)1.0 14.99 USD; báo tăng giá ≥ 30 ngày trước60 thành tựu, thẻ giao dịch nếu Steam cho đủ điều kiện10Verified
MS08M35+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 × kNội dungCần từ
Header capsule920×430230×108 ×4Varek giữa Trăng Máu Trăng Máu H01_UL1 + logo ≥ 55% rộngMS01
Small capsule462×174231×87 ×2chỉ logo + mặt Varek; logo ≥ 66% rộng (đọc được ở 120 px rộng)MS01
Main capsule1232×706308×177 ×4key art đầy đủ (§7.1 doc 30)MS01
Vertical capsule748×896187×224 ×4Varek + chuông câm dọcMS01
Library capsule600×900150×225 ×4như vertical, logo dưới 1/3MS01
Library header920×430= header—MS01
Library hero3840×1240480×155 ×8biển Thây Tro + chuông; không logo/chữMS01
Library logo1280×720320×180 ×4logo nền trong suốtMS01
Page background1438×810360×203 ×4mờ, ít chi tiết giữaMS01
Ảnh chụp1920×1080480×270 ×4in-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×622400×225 ×2 · 480×155 ×4 (cắt)mỗi devlog/cập nhậtM1
Icon cộng đồng / client [STEAMWORKS]184×184 · 32×3246×46 ×4 · 32×32 ×1mặt Varek / mảnh chuôngMS01
  • 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 #b14cff tell 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ảnhThông điệp
1Varek Trăng Máu giữa ~250 thây B1, HUD bật"Số đông" (P2)
2tell vàng ◇ đang sáng trên Tinh Anh, hero sắp ĐÁP"Chính xác" (P3)
3MB_B1_1 Xà Ích Xe Tang nghiền bầykhoảnh khắc đinh #2
4màn draft 3 thẻ (Edge + Then Chốt nếu có)"Build sâu, chọn nhanh" (P5)
5callout "NÓ ĐÃ ĐỌC BẠN" + Mắt Tro 2/3Tro Nhớ (P7)
6BS_B1 pha 3boss
7hub Tháp Chuông Gãy (HUB_BELL_TOWER)meta
8B2 Đầm Vải Liệm với hero thứ 2 (Bodan)đa dạng hero
9bản đồ Hồi (nút CMB/ELT/EVT/SHP…)cấu trúc run
10Veyra bắn xuyên hàng ở B2hero 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âyHìnhÂm
0–3tell vàng ◇ lóe trên Tinh Anh → Varek ĐÁP → 30–40 thây quanh nổ tronốt cao tell + "keng" ĐÁP
3–10màn đen, chuông câm; thẻ "Đại Chuông đã câm"chuông câm "thịch", cello
10–25Varek Lướt xuyên bầy B1, song liềm quét cụm; tím ▲ → Né Hoàn Hảotrống khung vào (B1 132 bpm)
25–38MB_B1_1 Xà Ích Xe Tang lao qua, nghiền chính bầy của nóstem S3–S4
38–50Tră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–56logo BLADEWAKE, tro rơi ngượcchuô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
1Action Roguelike6Dark Fantasy11Procedural Generation162D
2Roguelite7Action12Difficult17Indie
3Hack and Slash8Singleplayer13Fantasy18Character Action Game
4Pixel Graphics9Controller14Atmospheric19Fast-Paced
5Top-Down10Replay Value15Gothic20Combat
  • 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 đề VITiêu đề ENNộ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âutell vàng → ĐÁP → nổ bầy
2Gặt bầy, gạt tinh anhReap the horde, answer the elite150–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
312 Kẻ Thức, 12 trò chơi12 Wakers, 12 gamesmỗ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
4Tro NhớAsh MemoryTinh 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"
5Build sâu, chọn nhanhDeep builds, fast picksEdge, Cộng Hưởng, Tiến Hoá, Then Chốt, Relic; đọc thẻ < 3 sdraft 3 thẻ
6Chết là đi tiếpDeath moves the storyTháp Chuông Gãy, Phục Dựng, codex Sổ Tang; truyện tiến qua mỗi lần chếthub sáng dần
7Thử tháchChallengeKhă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
8Early Access & lộ trìnhEarly Access & roadmaptrạ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ứcCPURAMGPUỔ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 GBGPU tích hợp đời 2018+ hoặc GPU rời DX11 2 GB VRAM4 GB1920×1080, preset Cao, 60 fps, 250 quái (tự hạ 180 khi fps < 50 trong 10 s)
Đề nghị6 nhân ≥ 3.0 GHz16 GBGPU rời 4 GB VRAM, đời ≤ 6 năm4 GB SSD1920×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ụcPhạm vi
HeroH01 Varek (sẵn) · H02 Bodan (xong 1 run) · H07 Veyra (150 ĐÁP + 6 CUR_ECHO_SHARD)
Kit/heroSK01–SK04 · UL1 · AS1 · E01–E20; H01 RS1–RS6
Nội dungHồi I (B1): EN_B1_01–07, EL_B1_01–02, MB_B1_1, BS_B1 (P1–P3); SE001–SE012, RL001–RL010, AF01–AF10
MetaST_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ầnhạ 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
Appapp demo riêng của Steamworks gắn trang chính; depot demo_pc64; nhánh default + qa
Lưuthư 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 / leaderboard0 / 0 / 0 (Roadmap §3.5) — tránh trùng API name với app chính
Rich presencebật, bộ token §9 (chỉ trạng thái hub/run Hồi I)
Wishlistnú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 dung1 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)
Telemetrymàn đồng ý §15 giống bản chính; thêm sự kiện demo_end_screen {wishlist_clicked}
Phản hồinú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ạnViệcChủXong khi
F−16 tuần (M6)chọn kỳ đã chốt (Roadmap Q4); ghi lịch đăng ký Steamworksproducerngà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ạyproducer + D1crash ≤ 0.5/100 phiên, trung vị ≥ 25 phút
F−10FTO Tro Nhớ xong (Roadmap Q10, trước demo công khai)producerkế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 trangD5trailer live
~F−8 [ASSUMED]đăng ký Next Fest trên Steamworks khi mởproducerxác nhận đăng ký
F−7tạo app demo, trang demo, capsule demo (dùng lại bộ MS01)producertrang demo duyệt
F−6nộp build demo duyệt (dự phòng 5 ngày làm việc [STEAMWORKS])D1duyệt qua
F−5 (M9)demo công khai trên trang (≥ 4 tuần trước F)producernút "Tải demo" live
F−5 → F−1gử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−3bản vá demo 1 (từ số liệu M9)D1–D3crash ≤ 0.2/100 phiên
F−2lị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)producerlị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ốngD1build ở 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 htoàn đội—
F+1hậu kiểm: wishlist/ngày, tỉ lệ người chơi demo → wishlist, trung vị giờ chơi, % qua BS_B1producerquyế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ốtNguồn
Trung vị giờ chơi demo< 20 phút → sửa onboarding trước EA> 30 phútSteamworks + 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.2báo crash

64. Trang Early Access (Q&A bắt buộc của Steamworks; VI + EN)

#Câu hỏiVIEN
1Vì 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.
2Early 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.
3Bả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.
4Trạ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.
5Giá 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.
6Cộ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ảnSốGhi chú
Demo / Playtest0Roadmap §3.5
EA MS0330 [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 MS0760 (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óm1.0EAVí dụ điều kiện (condition có cấu trúc, doc 51 §4.0)hiddenmercy_blocked
Truyện & kết82qua 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_opentrue cho 3 mục END_QUIET_SHORE, END_ASH_CROWN, FLAG_SHORE_OPENfalse
Kẻ Thức1251/hero: đạt MR10 với Hxx (EA: 5 hero đã ship)falsefalse
Boss & Cổng64hạ đủ mini-boss 1 biome; hạ BS_Bx không dùng bình máu; …falsefalse
Kỹ năng (ĐÁP/Né)86100 ĐÁP trong 1 run; 10 Né Hoàn Hảo liên tiếp; ĐÁP 1 tell vàng của boss pha 3; …falsefalse
Build75kí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; …falsefalse
Tro Nhớ53thấ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); …falsefalse (Thương Xót đặt Tro Nhớ 0 → tự nhiên không đạt, không cần khoá)
Khăn Tang63hạ 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)falsetrue, mourning_related: true
Mode41xong 1 Lễ Ngày; xong 1 Truy Tuần; ENDLESS tầng 10; xong Đêm Hồi Chuôngfalsefalse
Hub & codex41Phục Dựng GD5; 120 trang codex; dâng đủ LV01–LV06; xong TT1–TT5falsefalse

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ủa id (vd ACH_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 + StoreStats ngay (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[] trong save/meta_<steamId>.json; lần init Steam kế → đẩy hết, xoá hàng chờ khi StoreStats callback 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> (field icon).
  • 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 nameNghĩaCập nhật
STAT_KILLS_TOTALtổng quái hạ (mọi mode trừ CUSTOM)điểm lưu
STAT_RUNS_STARTED · STAT_RUNS_WONrun bắt đầu · run tới kết (bất kỳ END)đầu run · màn kết
STAT_ACTS_CLEAREDHồi đã qua cộng dồnchuyể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_KILLEDhạ 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 buildmàn kết
STAT_DAILY_RUNS · STAT_WEEKLY_CLEARSlượt Lễ Ngày tính điểm · Truy Tuần xongnộp điểm
STAT_ENDLESS_MAX_FLOORtầng ENDLESS cao nhấtchết/thoát ENDLESS
STAT_BOSS_RUSH_BEST_MSthời gian BOSS_RUSH tốt nhất (ms; 0 = chưa có)xong BOSS_RUSH
STAT_CODEX_PAGES · STAT_RELICS_FOUND · STAT_EVOLUTIONStrang codex · Relic đã nhặt · Tiến Hoá đã kíchđiểm lưu
STAT_ASH_CALLOUTS · STAT_SCARS_DEFEATEDcallout Tro Nhớ đã thấy · boss mang Sẹo đã hạđiểm lưu
STAT_HEROES_UNLOCKED · STAT_MR_TOTALhero đã mở · tổng bậc Thông Thạo 12 hero (0–240)hub
STAT_WINS_H01 … STAT_WINS_H12run thắng theo hero (12 stat)màn kết
STAT_DEATHS · STAT_PLAYTIME_MINlần chết · phút chơimàn chết · điểm lưu
  • Luật ghi: SetStat ở sự kiện, StoreStats chỉ ở điểm lưu run (MAP, BOSS_GATE, DOCK — doc 16 §11), hub, màn kết, thoát game; tối đa 1 StoreStats/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ảngModeMốcSắp xếpHiển thịĐiểm (int32)Tạo
DAILY_<YYYYMMDD>DAILY (Lễ Ngày)MS03giảm dầnNumericscore Bible (bên dưới), sàn 0má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)MS06giảm dầnNumericcùng công thức DAILYmáy chủ, thứ Hai 00:00 UTC
ENDLESS_FLOOR + ENDLESS_FLOOR_H01 … _H12ENDLESSMS04giảm dầnNumeric (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)MS05tăng dầnTimeMilliSecondstổng ms các trận + rush_lost_ms (doc 16 Q17), không tính màn hồi 6 smá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, DownloadLeaderboardEntries Global/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ảng DEV_* 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_key vào run_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)

  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 14 daily_key kế tiếp + 2 key tuần kế tiếp, với mỗi content_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ên default/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ào held (không tự chấp nhận). Máy chủ chỉ đọc KV này, không chạy MapGen/Director.
  2. 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).
  3. Client lấy vé GetAuthTicketForWebApi("bw-score") → POST HTTPS tới máy chủ điểm (URL trong config build).
  4. Máy chủ xác thực vé qua Web API (AuthenticateUserTicket), kiểm quyền sở hữu app, tra content_hash → content_version trong danh sách hash live, đọc seedcap/<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_250 nếu alive_cap = 250, ≤ spawn_max_per_min_180 nếu alive_cap = 180 (trần của nền tảng nộp, doc 19 §6; giá trị alive_cap khác 250/180 → held) · (c) mỗi act_times_s[i] ≥ act_min_s[i] · (d) perfect_answers ≤ tells_emitted_yellow + tells_emitted_purple · (e) content_hash thuộc danh sách hash build đang live · (f) chưa có lượt cho daily_key/tuần đó.
  5. Đạt → ghi điểm bằng Web API SetLeaderboardScore (KeepBest cho ENDLESS/BOSS_RUSH, ForceUpdate cho DAILY/WEEKLY) → client nhận accepted + 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.
  6. Ngoại tuyến/máy chủ lỗi: client giữ RunSubmission trong local/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ủa daily_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".
  7. 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].
  8. 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), đọc entry_count (số dòng được ghi, không tính held) và tính cutoff = điểm ở hạng ceil(0.10 × entry_count) (vd 2 347 dòng → hạng 235). Ghi KV daily_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ọi GET /v1/daily/result?key=<daily_key> lúc khởi động và mỗi lần vào hub, cho mọi daily_key có lượt tính điểm accepted chư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ị accepted máy chủ trả ở bước 4) ≥ cutoff và daily_key chưa có trong meta.daily_rewards_claimed[] → cộng 5 Nến Canh CUR_VIGIL_CANDLE, thêm key vào meta.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ế); KV daily_result/ giữ 90 ngày. Điểm held được duyệt chấp nhận sau 02:00 → vào bảng, không đổi cutoff, 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_cap 250 → 4 200 / 32.5 phút = 129 kill/phút ≤ spawn_max_per_min_250 của seed (vd 190) → đạt; cùng run trên Deck đã tự hạ (alive_cap 180) so với spawn_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/.

FileNội dungChủ docCỡ trầnCloud
save/meta_<steamId>.jsontà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_iddoc meta/hub (nội dung) · doc này (tên, luật)512 KBcó
save/run_active.jsonrun dở (doc 16 §11)16256 KBcó
save/ash_profile_<steamId>.jsonPSP MESO + Sổ Thù + Sẹo (doc 14 §9.1)14512 KBcó
save/settings_shared.jsonremap, 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ày32 KBcó
save/*.bakbản trước của mỗi file trên—= filecó
local/settings_device.jsonđộ phân giải, preset đồ hoạ, trần fps, vsync, chế độ cửa sổ, thiết bị âmdoc này16 KBkhông (khác máy)
local/cloud_marker.jsonsave_seq cuối máy này ghi cho từng filedoc này4 KBkhông
local/score_queue/ · local/telemetry_queue/ · local/crash/ · local/logs/hàng chờ mạng, dump, log§6.3, §15≤ 5 MB / ≤ 20 MBkhô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ật local/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ốngLuật
1Steam 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
2Bả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)
3checksum hỏng hoặc JSON lỗidù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)
4run_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
5content_version của file > build đang chạykhoá chỉ-đọc: không ghi đè, báo "Hãy cập nhật game" (xảy ra khi lùi nhánh previous, §11)
6content_version < buildchạ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
7ash_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_seq 410), 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 → GetInputTypeForHandle quyế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): ShowFloatingGamepadTextInput khi đ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ómHạng mụcNgưỡng/luật BladewakeKiểm
Inputtoàn bộ game chơi bằng tay cầm, kể cả màn đồng ý, cài đặt, khởi động lần đầu0 màn cần chuột/bàn phímQA đi hết cây menu bằng tay cầm
Inputglyph đúng Deck0 glyph bàn phím/ABXY khi chạy Deckảnh chụp mọi màn có prompt
Inputnhập chữ qua bàn phím ảo§8.1thử CUSTOM seed
Hiển thịđộ phân giải mặc định trên Deck1280×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àntự chọn ở lần chạy đầu khi IsSteamRunningOnSteamDeck()
Hiển thịchữ đọc đượcui_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ấmtest 5 s trên Deck với 3 hero
Liền mạchkhông launcher, không tài khoản ngoài, không chống gian lận cài thêmkhởi động thẳng vào màn tiêu đề ≤ 15 sđo
Hệ thốngsuspend/resume§8.310 lần suspend giữa trận boss, 0 lỗi
Hiệu năngmặc định chơi mượtcả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 sCI hiệu năng Deck hằng tuần (Roadmap §5.3)
Hiệu năngpintuỳ 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
Âmloa trongpreset "Loa nhỏ" SN_SMALL_SPEAKER (doc 32) tự bật trên Decknghe 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ố qua SetRichPresence(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).
TokenKhiVIEN (bản nháp; loc sở hữu bản cuối)
#Menumàn tiêu đề/cài đặtỞ màn tiêu đềAt the title screen
#HubHUB_BELL_TOWERỞ Tháp Chuông GãyAt the Broken Bell Tower
#YardST_YARDLuyện ở Sân TậpTraining in the Yard
#RunSTANDARD Hồi I–IV, Độ Tang 0{#Hero_%hero%} · Hồi %act% · {#Biome_%biome%}{#Hero_%hero%} · Act %act% · {#Biome_%biome%}
#RunMourningSTANDARD, Độ Tang ≥ 1{#Hero_%hero%} · Hồi %act% · Độ Tang %dotang%{#Hero_%hero%} · Act %act% · Mourning %dotang%
#Bosstrong BOS Hồi I–IV{#Hero_%hero%} · đấu boss Hồi %act%{#Hero_%hero%} · fighting the Act %act% boss
#FinaleHồi V (B5){#Hero_%hero%} · Đỉnh Chuông Câm{#Hero_%hero%} · Mute Bell Summit
#SecretHồi VI (B6){#Hero_%hero%} · ???{#Hero_%hero%} · ???
#DailyDAILYLễ Ngày · {#Hero_%hero%} · Hồi %act%Daily Rite · {#Hero_%hero%} · Act %act%
#WeeklyTruy TuầnTruy Tuần · {#Hero_%hero%} · Hồi %act%Weekly Hunt · {#Hero_%hero%} · Act %act%
#EndlessENDLESSCanh Thâu Đêm · tầng %floor%All-Night Vigil · floor %floor%
#BossRushBOSS_RUSHĐêm Hồi Chuông · trận %fight%/6Night of the Toll · fight %fight%/6
#CustomCUSTOMLễ Tự ChọnCustom Rite
#Hero_H01 … #Hero_H12tham sốVarek, Bodan, Halka, Sậu, Oska, Ruvan, Veyra, Dov, Kessa, Ingra, Wenna, Ambrinnhư VI (tên riêng không dịch, giữ dấu)
#Biome_B1 … #Biome_B4tham sốĐồi Mộ Tro · Đầm Vải Liệm · Lò Đúc Câm · Thành Chuông TreoAsh 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; dotang 1–43; floor 1–999; fight 1–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ệnHà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 Steammọ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 gamekhô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

AppDepotNội dung
Bladewake (chính)content_pc64build phát hành PC 64-bit
Bladewake Demodemo_pc64build DEMO (§3.2)
Bladewake Playtestplaytest_pc64M7–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ánhAi thấyMật khẩuDùng choLên nhánh khi
defaultmọi người chơi—bản phát hànhqua checklist §11.4 trên rc
betangười chơi tự chọnkhôngthử bản lớn U1/U2/U3/1.0 trước 7–14 ngàyrc đạt ≥ 48 h không lỗi A
previousngười chơi tự chọnkhôngbả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àicóứng viên phát hànhđóng băng nội dung
qađộicóbuild đêm qua CI (test + hiệu năng Deck)mỗi đêm
dev_leaderboardđộicóbuild dùng bảng DEV_*theo nhu cầu
  • Lùi về previous sau 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ỏi default (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): demo 0.9.x · EA MS03 0.1.0 · U1 0.2.0 · U2 0.3.0 · U3 0.4.0 · 1.0 1.0.0 · hero hậu 1.0 1.1.0, 1.2.0… · vá nóng tăng PATCH. build_number tă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ục DEC-.

11.4 Checklist phát hành (mỗi bản lên default)

#KiểmNgưỡng
1Test tự động + validate dữ liệu (tools/validate.py --all --strict)0 ERROR
2Migration 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
3Hiệu năng Deck cảnh MS01b60 fps, p95 ≤ 16.6 ms
4Smoke Deck 30 phút bằng tay cầm (hub → Hồi I → boss)0 lỗi A
5Thành tựu/stats trên rc bằng tài khoản test; reset bằng công cụ Steamworks sau testmỗi thành tựu mới mở đúng 1 lần
6Nộp điểm vào DEV_* qua máy chủ thậtđi hết 6 bước §6.3
7Cloud: chơi máy A → máy B (PC + Deck)luật §7.3 đúng
8Loc: 100% chuỗi các ngôn ngữ đã ship, pseudo-loc không tràn0 chuỗi thiếu
9Ghi 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
10Giờ đẩ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ốcNgôn ngữSố
Trang MS01 · demo/Next Fest MS02EN, VI2
EA MS03 → U3 MS06EN, VI, zh-CN, JA, DE5
1.0 MS075 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_Init thấ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ào achievements_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ọi RestartAppIfNecessary để é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 roDấu hiệuGiảm thiểuĐo
RF12 h đầu chưa thấy chiều sâuhoàn tiền với giờ chơi 60–120 phútqua 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 hphân phối giờ chơi lúc hoàn tiền (Steamworks)
RF2hiệu năng máy yếuđánh giá "lag", hoàn tiền < 30 phútlầ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)
RF3Tro 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
RF4EA "í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 EAtỉ lệ đánh giá theo tuần
RF5tă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—
RF6mất save khi cập nhật1 báo cáo mất save (RK10)§7.2–7.3, checklist §11.4 #2, nhánh previousbáo lỗi + crash
RF7glyph/tay cầm saiđánh giá "controller"§8.1, checklist DeckQA mỗi bản
RF8dị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ữ
RF9crash> 1/100 phiên§15 crash + vá nóng ≤ 48 hcrash/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ọnMặc địnhNội dung gửiNế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.2khô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.3dump 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ệnTrườngNguồn spec
session_startbuild_number, content_version, nhánh, ngôn ngữ, is_deck, nhóm CPU/GPU/RAM (bậc thô), độ phân giải, presetdoc này
run_staterun_id, from, to, act, row, lane, t_rundoc 16 §0
gói cuối runquyết định, draft, build, nguyên nhân chếtdoc 13 §16.2
ash_room + KPI Tro Nhớtheo specdoc 14 §15
perf_tierroom, alive, fx_active, p95doc 15 §14
settings_changedkhoá trợ năng/Thương Xót đã bật (không giá trị remap)doc này
demo_end_screenwishlist_clicked§3.2
consent_changedlự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_hash củ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 beta thay 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 đặt SteamPlatformServices + OfflinePlatformServices (§13); gameplay không gọi API Steam trực tiếp (CI grep SteamUserStats, 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.
  • StoreStats chỉ ở đ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ỏiQuyết địnhLý do
S1Ngô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
S2Số thành tựu?0 demo · 30 EA [ASSUMED] · 60 ở 1.0; 9 nhóm §5.2Bible §10.3 + Roadmap §3.5/3.6
S3Thương Xót khoá gì?leaderboard + 6 thành tựu nhóm Khăn Tang (mercy_blocked)Bible §4.3
S4Kiểm hợp lý điểm ở đâu?máy chủ ghi bảng Trusted qua Web API; client chỉ đọcBible §4.1 "kiểm hợp lý phía máy chủ", không replay tất định (#52)
S5Lượ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
S15Má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úthà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)
S16Cấ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
S17Tê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_openkhớ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
S6Mã 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 độ
S7Cloud?Auto-Cloud thư mục save/ theo steamId; local/ không cloud; 7 luật xung đột §7.3cài đặt đồ hoạ khác máy; bảo vệ tiến trình
S8Steam 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/glyph1 lớp remap trong game (Roadmap §5.2)
S9DRM?không DRM, không bắt mở qua Steam, có chế độ ngoại tuyếnpremium, tin người mua; toàn vẹn bảng nhờ máy chủ
S10Workshop/mod?không tới hết MS08; mod không chặn, khoá leaderboard theo hashBible §13; ngân sách 198/200 PM không có chỗ
S11Telemetry 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
S12Nhánh?default · beta · previous · rc · qa · dev_leaderboard; app Demo + Playtest riêngthử trước, lùi được, bảng dev tách
S13Tag thể loại tự đánh?không dùngRoadmap Q1 khác biệt bằng ĐÁP/Lướt
S14Xin đánh giá trong game?không bao giờluật Steam + giữ tin cậy