1Tổng quan
Mục đích: đạo diễn bầy cho mọi biome + Kết + Bí mật: mô hình ngân sách đe doạ (điểm theo hạng/vai, ngân sách theo Hồi/phút/Khăn Tang), mẫu spawn, luật công bằng, trần mật độ & hiệu năng (LOD/hạ cấp), bể token, chèn Tinh Anh, luật mini-boss/boss, 10 loại mục tiêu trận, định dạng kịch bản sóng + 10 ví dụ Hồi I, hook dịch thành phần composition_bias.<axis>. Phụ thuộc: 00-Design-Bible.md §1 (INV-02/03/08/13/14/15/17/18), §2 (nút, mục tiêu), §4 (MRN02/05/10/14/15, mode), §7 (biome, roster, Ấn EM01–EM16, mini, boss), §8.2–8.3 (MESO), §10.4 (hiệu năng) + data/_bible.json; 10-Combat-Core.md §2.2/§2.4/§6.5/§10; 14-Adaptive-AI.md §2.3 (archetype), §3 (vòng vây), §4 (token), §8.2 (MESO dịch spawn); 16-Run-Structure-Map.md (nút, thời lượng, thưởng); GDD demo GDD/05-Horde-Director.md, GDD/Data/Waves.csv (lịch sử). Được dùng bởi: doc kẻ địch/biome/Tinh Anh/mini/boss, doc Khăn Tang/mutator/mode, doc level/arena (đạo cụ mục tiêu, điểm phục kích), doc UI/HUD (bộ đếm mục tiêu, mũi tên báo), doc âm thanh (cường độ nhạc), code Director/SpawnPlanner/EncounterRunner/AttackTokens/AshMemory/PerfGovernor, tool wave_lint.
2Phạm vi & thứ bậc
- Doc này định nghĩa cách quái vào sân và trận thắng/thua thế nào. Kit từng quái (đòn, windup, HP) ở doc kẻ địch; AI cá thể + token + Tro Nhớ ở
14; khung run/bản đồ ở16. - Mâu thuẫn số với Bible → Bible thắng; với
14về token/MESO →14thắng; về ngân sách/mục tiêu/kịch bản → doc này thắng. - Mọi số
[ASSUMED]chỉnh quadirector.csv/wave_scripts.csv(key = tên field ở doc này), không cần DEC nếu không chạm INV. - Thuật ngữ: điểm đe doạ (TP) = chi phí 1 quái trong ngân sách · TOF = tổng TP quái đang sống · B_obj = TOF mục tiêu của phòng · BPS = TP nạp vào ví mỗi giây · beat = sự kiện spawn kịch bản (vòng vây, phục kích…) · Y/P/N = tell vàng/tím/vùng đọng (INV-02) · hạng S/M/L/XL = thường/Tinh Anh/mini/boss.
3Tổng quan Director
mỗi 0.25 s (World clock; draft ×0.15 làm chậm cả Director):
1. EncounterRunner.Tick(): cập nhật mục tiêu, trigger kịch bản (§11) → beats, ELITE/MINI/BOSS, OBJ, HAZ
2. Budget: wallet += BPS(t)·0.25 ; wallet ≤ 0.5·B_obj
3. target = B_obj · phase(t/t_target) · density_mult (§2.4–2.5)
4. while wallet ≥ cost(g) ∧ TOF + cost(g) ≤ target ∧ alive + |g| ≤ cap_count:
g = SpawnPlanner.Pick(MIX ⊕ composition_bias, role caps) (§2.2, §12)
SpawnPlanner.Place(g, pattern mặc định của vai) (§3, §4)
wallet −= cost(g)
5. PerfGovernor.Tick() (§5.3) · AttackTokens.Tick() (`14` §4)
- Hai lớp spawn: lớp ngân sách (dòng liên tục theo trọng số
MIX, giữ mật độ) + lớp kịch bản (beat có ngày giờ, tạo khoảnh khắc). Beat trừ ví; ví thiếu → ví âm (nợ ≤ −0.3·B_obj), lớp ngân sách dừng tới khi ví ≥ 0 → tổng mật độ không vượt đích. - Quái hạng M/L/XL không mua bằng ví: chèn bằng hàng
ELITE/MINI/BOSSvà giữ chỗ TP của chúng trong TOF (§2.1) → bầy thưa đi khi Tinh Anh có mặt (dễ đọc).
4Mô hình ngân sách đe doạ
📊 Đường cong ngân sách đe doạ theo Hồi
Bảng TP từng quái (33)
| Quái | TP | Nhóm trần | Trần sống |
|---|---|---|---|
| Thây Tro EN_B1_01 | 0.5 | SWARM | — |
| Quỷ Rãnh EN_B1_02 | 1 | LUNGE | 16 |
| Thầy Bùa Tro EN_B1_03 | 1.5 | RANGED | 10 |
| Khiên Mộ EN_B1_04 | 2 | SHIELD | 10 |
| Xác Trương EN_B1_05 | 1.5 | BOMB | 8 |
| Xạ Thủ Lồng Than EN_B1_06 | 1.5 | RANGED | 10 |
| Hồn Khói EN_B1_07 | 1 | AMBUSH | 6 |
| Thây Đuối EN_B2_01 | 0.5 | SWARM | — |
| Ếch Vây EN_B2_02 | 1 | LUNGE | 16 |
| Rắn Bùa EN_B2_03 | 1.5 | RANGED | 10 |
| Mộc Thi EN_B2_04 | 2.5 | STATIC | 4 |
| Bướm Liệm EN_B2_05 | 0.5 | FLOCK | 40 |
| Càng Bùn EN_B2_06 | 1.5 | AMBUSH | 6 |
| Đò Thây EN_B2_07 | 4 | NEST | 2 |
| Phu Xỉ EN_B3_01 | 0.5 | SWARM | — |
| Thợ Bễ EN_B3_02 | 3 | SUPPORT | 3 |
| Đá Lăn Lò EN_B3_03 | 1.5 | ROLL | 6 |
| Phu Bom EN_B3_04 | 1.5 | BOMB | 8 |
| Bò Giáp EN_B3_05 | 2 | CHARGE | 6 |
| Cưa Đồng EN_B3_06 | 1.5 | GRAPPLE | 6 |
| Nhím Gai Lò EN_B3_07 | 2 | RETAL | 8 |
| Cận Vệ Rỗng EN_B4_01 | 0.8 | SHIELD | 24 |
| Thú Đá Mái EN_B4_02 | 0.6 | SWARM | — |
| Chim Than EN_B4_03 | 1.5 | BOMB | 8 |
| Rồng Non Tro EN_B4_04 | 2 | CONE | 8 |
| Lục Lạc Sét EN_B4_05 | 1 | TETHER | 6 |
| Pha Lê Tro EN_B4_06 | 2 | RANGED | 6 |
| Tiểu Đồng Chuông EN_B4_07 | 3 | SUPPORT | 3 |
| Bóng Kẻ Thức EN_B6_01 | 0 | SCRIPT | 2 |
| Tiếng Câm EN_B6_02 | 1.5 | DRIFT | 12 |
| ELITE | 12 | ELITE | 2 |
| MINI | 30 | MINI | 1 |
| Boss BOSS | 60 | BOSS | 1 |
2.1 Điểm đe doạ (TP) & trần sống theo vai
| id | Vai (Bible §7.2) | Archetype (14 §2.3) | TP | Nhóm trần | Trần sống/phòng |
|---|---|---|---|---|---|
| EN_B1_01 | bầy | swarm_melee | 0.5 | SWARM | — |
| EN_B1_02 | vồ/lao | lunger | 1.0 | LUNGE | 16 |
| EN_B1_03 | đánh xa/ném | ranged_kiter | 1.5 | RANGED | 10 (chung nhóm) |
| EN_B1_04 | khiên | shield_bearer | 2.0 | SHIELD | 10 |
| EN_B1_05 | tự nổ | bomber_self | 1.5 | BOMB | 8 (chung nhóm) |
| EN_B1_06 | bắn đón đầu | ranged_lead | 1.5 | RANGED | (chung 10) |
| EN_B1_07 | phục kích/ẩn | ambusher | 1.0 | AMBUSH | 6 |
| EN_B2_01 | bầy | swarm_melee | 0.5 | SWARM | — |
| EN_B2_02 | vồ/lao | lunger | 1.0 | LUNGE | 16 |
| EN_B2_03 | đánh xa/ném | ranged_kiter | 1.5 | RANGED | 10 |
| EN_B2_04 | trụ đứng yên | stationary | 2.5 | STATIC | 4 |
| EN_B2_05 | bay/làm chậm | flyer_swarm | 0.5 | FLOCK | 40 |
| EN_B2_06 | phục kích/ẩn | ambusher | 1.5 | AMBUSH | 6 |
| EN_B2_07 | tổ sinh quái | spawner_mobile | 4.0 | NEST | 2 |
| EN_B3_01 | bầy | swarm_melee | 0.5 | SWARM | — |
| EN_B3_02 | hỗ trợ/buff | support_aura | 3.0 | SUPPORT | 3 |
| EN_B3_03 | lăn theo đường | roller | 1.5 | ROLL | 6 |
| EN_B3_04 | ném bom/mìn | thrower | 1.5 | BOMB | 8 |
| EN_B3_05 | húc | charger | 2.0 | CHARGE | 6 |
| EN_B3_06 | kéo/cưa | grappler | 1.5 | GRAPPLE | 6 |
| EN_B3_07 | phản đòn sau lưng | retaliator | 2.0 | RETAL | 8 |
| EN_B4_01 | khiên | shield_bearer | 0.8 | SHIELD | 24 |
| EN_B4_02 | bay/làm chậm (vai bầy của B4) | diver | 0.6 | SWARM | — |
| EN_B4_03 | bổ nhào bom | diver (bom P) | 1.5 | BOMB | 8 |
| EN_B4_04 | phun nón | cone_breather | 2.0 | CONE | 8 |
| EN_B4_05 | dây nối | tether_pair | 1.0/chiếc, spawn theo cặp | TETHER | 3 cặp |
| EN_B4_06 | trụ tái tụ | reformer | 2.0 | RANGED | 6 |
| EN_B4_07 | hỗ trợ/buff | support_aura | 3.0 | SUPPORT | 3 |
| EN_B6_02 | Tiếng Câm | drifter | 1.5 | DRIFT | 12 |
| Tinh Anh (M) | — | — | giữ chỗ 12 | ELITE | 2 (HUNT/MRN14: 3) |
| Mini-boss (L) | — | — | giữ chỗ 30 | MINI | 1 |
| Boss (XL) | — | — | giữ chỗ 60 | BOSS | 1 |
- Quái mang Ấn (MRN05) TP × 1.5. Con do quái sinh (EN_B2_07 thả, EM04 Gọi Bầy, Thả Quan của MB_B1_1, Gọi Hồn của BS_B1) không trừ ví nhưng tính vào TOF và trần sống; người sinh bỏ lượt khi
TOF + TP_con > targethoặc chạm trần nhóm. - EN_B6_01 (Bóng Kẻ Thức) chỉ do kịch bản BS_TRUE P3 sinh (≤ 2), không có TP.
- Trần nhóm RANGED tính cả đạn: ≤ 10 quái bắn sống + token PROJ 3 loạt + ≤ 12 đạn địch trên màn (
10§10) → không bao giờ "rừng xạ thủ" chờ token.
2.2 Chọn nhóm spawn (SpawnPlanner.Pick)
MIX= trọng số theo số con của từngenemyId(tổng 100) do kịch bản đặt; mặc định = cột MIX của biome (§9). Pick: cuộn id theo trọng số đã lọc (bỏ id chạm trần nhóm, id chưa "giới thiệu" ở Hồi này nếu phòng thuộc R1).- Kích thước nhóm theo vai: SWARM/FLOCK 6–12 (gói, toả r40) · LUNGE 2–4 · RANGED/BOMB/AMBUSH/ROLL/GRAPPLE/CONE 1–2 · SHIELD (B1) 1–3 · SHIELD (B4) 2–4 (hàng ngang) · STATIC/SUPPORT/NEST/RETAL/CHARGE 1 · TETHER 1 cặp.
cost(g) = Σ TP. - Không quá 2 nhóm cùng
enemyIdliên tiếp (trừ SWARM/FLOCK) → bầy luôn trộn vai.
2.3 Ngân sách phòng B_obj
B_obj = round5(B_room[act] × obj_mult[objective])
| Hồi | B_room (TP) | Sống tối đa ước tính (TP TB biome) | BPS_act (TP/s) |
|---|---|---|---|
| I (B1) | 130 | 171 (0.76) | 3.4 |
| II (B2) | 145 | 175 (0.83) | 3.8 |
| III (B3) | 160 | 172 (0.93) | 4.2 |
| IV (B4) | 170 | 187 (0.91) | 4.5 |
| Kết ải (B5) | 180 | 225 (0.80) | 5.0 |
| Bí mật ải (B6) | 150 | 170 (0.88) | 4.4 |
| obj | PURGE | VIGIL | BELLS | TIDE | NEST | GAUNTLET | CHASE | DUEL | HUNT | RESCUE |
|---|---|---|---|---|---|---|---|---|---|---|
obj_mult | 1.00 | 0.85 | 1.00 | sóng 0.80 / 1.00 / 1.25 | 0.90 | 0.60 | 0.70 | 0.50 | 0.85 | 0.90 |
- Ví dụ: VIGIL Hồi II = round5(145 × 0.85) = 125; TIDE sóng 3 Hồi IV = round5(170 × 1.25) = 215 (≈ 220 quái → trần 250 đủ chỗ).
- Đích người chơi thấy: 150–250 quái trong khung nhìn ± 96 px ở đỉnh phòng (bầy hội tụ về hero nhờ flow field; leash §5.2 kéo quái xa về).
2.4 BPS theo Hồi / phút / Khăn Tang
BPS(t) = BPS_act × (1 + 0.04 × min(m_act, 6)) × (1 + 0.15 × MRN02) × mut_bps × bps_mult_script
m_act = số phút nguyên đã qua từ đầu Hồi (đồng hồ run, gồm phòng tiện ích) → phòng cuối Hồi nạp nhanh hơn ~16–24%
mut_bps = MUT09 Bầy Liền 1.20 · khác 1.00
bps_mult_script = hàng BUDGET p1 (mặc định 1.0)
| Hồi | phút 0 | phút 3 | phút 6+ | + MRN02 bậc 2 (phút 6) |
|---|---|---|---|---|
| I | 3.40 | 3.81 | 4.22 | 5.48 |
| II | 3.80 | 4.26 | 4.71 | 6.13 |
| III | 4.20 | 4.70 | 5.21 | 6.77 |
| IV | 4.50 | 5.04 | 5.58 | 7.25 |
2.5 Đường cong pha phase(x), x = t / t_target
| id | 0–0.10 | 0.10–0.40 | 0.40–0.85 | 0.85–1.00 | > 1.00 |
|---|---|---|---|---|---|
CURVE_STD | 0.55 | 0.55 → 0.85 tuyến tính | 0.85 → 1.00 | 1.00 | 1.00 |
CURVE_FLAT (VIGIL, RESCUE) | 0.70 | 0.70 → 0.90 | 0.90 | 0.95 | 0.95 |
CURVE_GATE (DUEL, HUNT, MBS) | 0.40 | 0.40 → 0.60 | 0.60 | 0.60 | 0.60 |
CURVE_TIDE | theo sóng: mỗi sóng 0.50 → 1.00 trong 60% thời lượng sóng, giữ 1.00; nghỉ giữa sóng 0.30 | ||||
CURVE_RUN (GAUNTLET, CHASE) | 0.60 | 0.60 → 0.80 | 0.80 | 0.80 | 0.80 |
- Mở màn: t = 0, ví = 0.45 × B_obj (chi ngay cho mở màn qua
PACK/EDGE, rải trong 2 s) → sân có quái từ giây đầu, không màn trống.
2.6 Nhân mật độ density_mult (nhân target, kẹp trần đếm)
| Nguồn | Hệ số | Ghi chú |
|---|---|---|
| MRN02 Bầy Đói | 1 + 0.15 × bậc | cũng nhân BPS; trần 250 quái giữ |
| MUT09 Bầy Liền | 1.20 | XP +15% (Bible) |
| MUT04 Đàn Vồ | 1.00 | thay 30% số con vai bầy bằng vai vồ/lao của biome: B1 EN_B1_02 · B2 EN_B2_02 · B3 EN_B3_05 (húc) · B4: vai bầy EN_B4_02 đã là bổ nhào → giữ id, 30% nhóm EN_B4_02 spawn FLANK thay PACK; TP tính lại |
| ENDLESS vòng k | 1 + 0.05 × k (trần 1.25) | HP/sát thương theo 10 §2.4 |
| CUSTOM mật độ | 0.25–3.00 (trượt) | kẹp trần 250 |
| Preset Deck | 1.00 | trần đếm 180 (Bible §10.4) thay 250 |
| PerfGovernor bậc 2 | 0.90 | §5.3 |
cap_count= 250 (Deck preset 180);targetkhông bao giờ đẩy số sống vượtcap_count.
2.7 Ví dụ đã tính (Hồi I, R2 CMB PURGE, m_act = 1, Độ Tang 0)
- B_obj = round5(130 × 1.00) = 130; BPS = 3.4 × 1.04 = 3.54 TP/s; t_target 55 s.
- t = 0: ví 58.5 → mở màn: 3 gói EN_B1_01 × 12 (18 TP) + 4 EN_B1_02 (4) + 2 EN_B1_03 (3) + … tới phase(0) × 130 = 71.5 → ví chỉ đủ ~58 TP (≈ 80 quái, rải 2 s); sau đó nạp 3.54/s, chạm target 71.5 ở t ≈ 4 s.
- t = 22 s (x = 0.40): target = 0.85 × 130 = 110.5 TP; người chơi diệt ~3/s (≈ 2.2 TP/s) → ví nạp 3.54/s đủ bù, TOF bám target ~110 (≈ 145 quái).
- t = 47 s (x = 0.85): target 130 TP (≈ 171 quái); kill đạt 150 ở ~50 s → phòng xong; quái còn sống tan tro (
16§3.2). - Tổng spawn ≈ 58.5 + 3.54 × 50 = 236 TP ≈ 310 quái; kill 150; còn ~160 tan tro.
5Mẫu spawn (pattern)
📊 Mẫu spawn
| Mẫu | Hình dạng | Trong khung | Tối thiểu |
|---|---|---|---|
| EDGE | điểm ngẫu nhiên trên viền ngoài khung (+32 px); 60% lệch về phía trước vận tốc hero (nón ±60°); lớp ngân sách mặc định RANGED/BOMB/đơn lẻ | no | hero_clear_px: 90, margin_px: 32 |
| PACK | gói quanh 1 điểm EDGE, toả r = p1, lệch giờ 0–0.3 s/con; mặc định SWARM/FLOCK/LUNGE | no | hero_clear_px: 90, margin_px: 32 |
| RING | n con trên vòng tâm hero bán kính p1, chừa 1 khe p2° về phía mật độ thấp nhất/hướng di chuyển; ấn tro 0.6 s; không RING khi hero trong 160 px của tường (dời 1 s) | yes | hero_clear_px: 90, r: 140, gap_deg: 45 |
| ARC | n con trên cung p2° bán kính p1, tâm cung = hướng mặt hero; beat chặn đầu/dồn | partial | hero_clear_px: 90 |
| ARC_BACK | như ARC nhưng tâm cung sau lưng hero; beat dồn | partial | hero_clear_px: 90 |
| FLANK | 2 nhóm n/2 ở ±90° so với hướng di chuyển hero, ngoài khung, tới cùng lúc ± 0.3 s; beat kẹp | no | hero_clear_px: 90, margin_px: 32 |
| BURST | n con từ 1 điểm (cổng, tổ, đạo cụ) trong 0.5 s; beat bùng | depends | hero_clear_px: 90 |
| TRICKLE | 1–2 con mỗi p1 s từ EDGE; sân rỉ boss/mini, nghỉ | no | hero_clear_px: 90, margin_px: 32 |
| SWARM | dòng n con trong p1 s từ 1 hướng p2 (0 = Bắc sân; BACK = sau hero theo trục hành lang; RAND = ngẫu nhiên), chảy theo flow field; TIDE, GAUNTLET đuổi sau | no | hero_clear_px: 90, margin_px: 32 |
| AMBUSH | n con trồi ở neo ambush_anchor của sân, 120–220 px từ hero; báo p1 s; vai AMBUSH | yes | hero_clear_px: 90, r: 120, warn_s: 1 |
| GATE | từ cổng đạo cụ của sân (N/S/E/W); demo canon, sân có cổng | depends | hero_clear_px: 90 |
| FAR | điểm sân xa hero nhất (lưới 64 px), cách ≥ 220 px; Tinh Anh, mini, boss, người mang báu | depends | hero_clear_px: 90, dist_px: 220 |
| NEST | từ đạo cụ tổ/mục tiêu (Mộ Mở, Bè Liệm, Khuôn Nứt, Lồng Xích, EN_B2_07); ấn tro 0.6 s | yes | hero_clear_px: 90 |
| LINE | hàng n con vuông góc trục hành lang (sân mở: trục = hướng tới mục tiêu kế), cách hero p1 px phía trước, chừa khe giữa p2 px; GAUNTLET chặn, khiên B4 | no | hero_clear_px: 90, dist_px: 240, gap_px: 48 |
Khung nhìn (Bible §10.4, 16:9): 480 × 270 px màn = 480 px ngang × 540 px sâu trên sàn (tilt 0.5). Ngoài khung = ngoài hình chữ nhật khung nhìn + lề 32 px. Mọi mẫu chạy qua luật công bằng §4 trước khi đặt.
| id | Hình | p1 | p2 | Trong khung? | Dùng cho |
|---|---|---|---|---|---|
EDGE | điểm ngẫu nhiên trên viền ngoài khung; 60% lệch về phía trước vận tốc hero (nón ±60°) | — | — | không | lớp ngân sách mặc định (RANGED, BOMB, đơn lẻ) |
PACK | gói quanh 1 điểm EDGE, toả r = p1, lệch giờ 0–0.3 s/con | r toả (40) | — | không | SWARM/FLOCK/LUNGE mặc định |
RING | n con trên vòng tâm hero bán kính p1, chừa 1 khe p2° | r (160, sàn 140) | khe ° (60, sàn 45) | có (ấn tro 0.6 s) | beat vòng vây |
ARC | n con trên cung p2° bán kính p1, tâm cung = hướng mặt hero (như ARC nhưng tâm cung sau lưng hero; beat dồn ARC_BACK = sau lưng) | r (200) | góc (120) | một phần | beat chặn đầu/dồn |
FLANK | 2 nhóm n/2 ở ±90° so với hướng di chuyển hero, ngoài khung, tới cùng lúc ± 0.3 s | lệch thêm ° (0) | — | không | beat kẹp |
BURST | n con từ 1 điểm (cổng, tổ, đạo cụ) trong 0.5 s | id điểm (GATE_N…) hoặc FAR | — | có nếu điểm trong khung | beat bùng |
TRICKLE | 1–2 con mỗi p1 s từ EDGE | chu kỳ s (6.5) | số/lần (2) | không | sân rỉ boss/mini, nghỉ |
SWARM | dòng n con trong p1 s từ 1 hướng p2 (độ, 0 = phía Bắc sân), chảy theo flow field | thời lượng s (6) | hướng ° | không | TIDE, GAUNTLET đuổi sau |
AMBUSH | n con trồi ở neo ambush_anchor của sân, 120–220 px từ hero | báo s (1.0) | id neo hoặc NEAREST | có (báo 1.0 s) | beat phục kích, vai AMBUSH |
GATE | từ cổng đạo cụ của sân (N/S/E/W) | id cổng | — | tuỳ | demo canon, sân có cổng |
FAR | điểm sân xa hero nhất (lưới 64 px), cách ≥ 220 px | — | — | tuỳ | Tinh Anh, mini, người mang báu |
NEST | từ đạo cụ tổ/mục tiêu (Mộ Mở…) | id đạo cụ | — | có (ấn 0.6 s) | NEST, EN_B2_07 |
LINE | hàng n con vuông góc trục hành lang, cách hero p1 px phía trước | khoảng cách (260) | khe giữa (48) | không (p1 > nửa khung) | GAUNTLET chặn |
- Mặc định theo vai (lớp ngân sách): SWARM/FLOCK/LUNGE →
PACK· SHIELD B4 →LINEdọc (hàng 2–4) từEDGE· AMBUSH →AMBUSH(n 1–2, báo bằng tell của chính quái) · STATIC →EDGErồi đứng tại điểm cách hero 220 px · NEST (EN_B2_07) →EDGE· còn lại →EDGE.
6Công bằng spawn (cứng, mọi mẫu)
| # | Luật | Số | Nguồn |
|---|---|---|---|
| F1 | ấn tro #e8e4f0 trước khi thân hiện, không sát thương | 0.6 s (AMBUSH 1.0 s; tái tụ EN_B4_06 0.8 s) | INV-14 |
| F2 | không spawn trong bán kính quanh hero | r90 mọi mẫu; RING ≥ 140; AMBUSH ≥ 120 | INV-14 + doc này |
| F3 | quái mới không windup | 0.8 s sau khi hiện | INV-14 |
| F4 | Tinh Anh/mini/boss/triệu hồi M+ | xoáy trung tính 1.0 s | INV-14 |
| F5 | ngoài khung mặc định | ngoài khung + 32 px; trong khung chỉ RING/AMBUSH/NEST/BURST tại đạo cụ | demo §2.2 |
| F6 | RING luôn chừa khe | ≥ 45° (mặc định 60°) về phía mật độ thấp nhất hoặc hướng di chuyển; không RING khi hero trong 160 px của tường (dời 1 s) | "dày nhưng luôn có lối" |
| F7 | không đặt lên vùng P/N đang hiện, trong vật cao, ngoài sân, trên hố | thử lại 6 điểm, rồi bỏ con đó (hoàn TP vào ví) | demo §2.2 |
| F8 | beat vây (RING/ARC/như ARC nhưng tâm cung sau lưng hero; beat dồn ARC_BACK/FLANK/AMBUSH) cách nhau ≥ 8 s, sau beat vây 4 s chỉ lớp ngân sách SWARM; beat dồn (SWARM/LINE/BURST) cách nhau ≥ 4 s và cách beat vây ≥ 4 s; các dòng cùng trigger+at = 1 beat | ≥ 8 s / ≥ 4 s | doc này |
| F9 | báo beat ngoài khung | mũi tên viền màn trắng ngà 0.8 s trước khi quái vào khung (FLANK/SWARM/như ARC nhưng tâm cung sau lưng hero; beat dồn ARC_BACK) | doc này |
| F10 | báo phục kích | ấn tro 1.0 s + gợn sàn + AmbushWarn (F10 báo phục kích doc 15: ấn tro 1.0 s + gợn sàn), âm có … SFX_SHARED_ambush_rise (âm có vị trí); EN_B2_06 dùng Trồi Lên P (tell tím của nó, ăn token P) | INV-02/14 |
| F11 | nghỉ sau Tinh Anh chết | 6 s: không beat, không vai nguy (chỉ SWARM/FLOCK) | demo §5 |
| F12 | không chồng tím | vùng P mới trì 0.3 s nếu P khác > 60% đầy trong r80 (demo); lối thoát P 14 §4.2 (> 70% đĩa r120 → trì/huỷ) | INV-08 |
| F13 | boss windup | quái phụ không bắt đầu windup trong 0.6 s trước va chạm đòn boss; không spawn sân rỉ khi boss windup P | demo §5 + Bible §2 |
| F14 | sau Lướt | không đặt quái mới trong nón ±45° hướng Lướt, < 200 px, trong 0.5 s sau Lướt | doc này [ASSUMED] |
| F15 | Ult hero | trong lúc hero bất tử Ult: Director không beat; lớp ngân sách chạy | doc này |
| F16 | đầu phòng | 2.0 s đầu không quái nào windup (cả mở màn) | doc này |
| F17 | quái ngoài khung không bắn | RANGED/BOMB chỉ windup khi trong vùng an toàn khung nhìn | demo + 14 §3.3 |
- Mọi luật F1–F17 không bị Khăn Tang/mutator/Tro Nhớ/CUSTOM tắt (CUSTOM "bất tử" chỉ đổi sát thương nhận).
7Mật độ & trần hiệu năng
5.1 Trần cứng (Bible §10.4, 10 §10)
| Khoá | Trần | Khi chạm |
|---|---|---|
| Quái sống | 250 (preset Deck 180) | lớp ngân sách dừng; beat cắt bớt con, hoàn TP |
| Đạn địch | 12 trên màn; ≤ 3 loạt nhắm hero | quái chờ token PROJ |
| Vùng địch (P + N) | 16; token P_FLOOR 3 / P_TOTAL 5 | quái không token P → đòn Y hoặc chờ |
| VFX | trúng ≤ 16/khung · chết quái ≤ 12/khung · hạt ≤ 1.500 · sheet hoạt động ≤ 40 | hàng đợi chết dồn sang khung sau (≤ 3 khung), quá hạn → tan tro tối giản 1 sprite |
| Số sát thương | 260 trên màn · 24 mới/tick | thứ tự bỏ 10 §6.5 |
| Xác chết đang chạy anim | 80 | xác thứ 81+ bỏ trượt/hất, chỉ tan tro 0.2 s |
| Shard XP trên sàn | 120 | gộp vào shard gần nhất (giá trị cộng dồn) |
| Cầu máu trên sàn | 6 | rơi thêm → gộp HP vào cầu gần nhất |
SFX (32 §5.3) | voice thật 64 · ảo 256 · pool one-shot 48 (+ 12 nhạc + 4 ambience); trúng ≤ 3/50 ms · chết ≤ 4/100 ms (gộp 32 §6); 29 voice dành không bị cướp (tell Y 7 · tell P 5 · ĐÁP 2 · Ult 3 · nhạc 12); SFX tell không cắt | đầy 64 → Unity ảo hoá nguồn priority số cao trước (Pickup → Status → Ambience → EnemyCrowd); mục tiêu p95 voice thật ≤ 56 khi 250 quái + Ult |
| AI tick | trong r200 mỗi frame; ngoài 10 Hz | — |
5.2 Leash & dọn dẹp
- Quái S cách hero > 600 px quá 3 s (ngoài khung) → biến mất, hoàn 100% TP vào ví, Director spawn lại phía trước hero theo
EDGE(giữ áp lực; demo leash 900 px chỉnh theo khung 480 px). - Quái RANGED/STATIC không leash khi còn nhìn thấy (trong khung); M/L/XL không bao giờ leash (Tinh Anh chạy theo,
14§6). - Không xoá quái đang windup hoặc đang giữ token.
5.3 PerfGovernor (hạ cấp theo thời gian khung)
| Bậc | Vào khi | Hạ | Ra khi |
|---|---|---|---|
| 0 | — | — | — |
| 1 | p95 khung > 16.6 ms trong 2 s | số sát thương phụ tắt · VFX chết ≤ 6/khung · hạt × 0.5 · anim quái ngoài khung đứng hình | p95 < 14 ms trong 5 s |
| 2 | bậc 1 + vẫn > 16.6 ms 2 s | density_mult × 0.90 · tan tro tối giản cho quái S · AI ngoài r200 → 5 Hz | p95 < 14 ms trong 5 s → bậc 1 |
| 3 | bậc 2 + vẫn > 16.6 ms 3 s | cap_count 180 (như preset Deck) · bóng quái S tắt | chỉ ra ở phòng sau |
- Không bao giờ hạ: tell Y/P/N (glint, vùng, SFX), va chạm, sát thương, token, vòng chân hero, x-ray (INV-09), ấn tro spawn (INV-14), mũi tên báo beat.
- Telemetry
perf_tiermỗi lần đổi bậc {room, alive, fx_active, p95}. MS01b (Bible §10.4) phải đạt bậc 0 với 250 quái.
8Bể token theo hạng (tóm tắt 14 §4 — 14 là nguồn)
| Token | Trần | Giữ bởi | Hệ quả cho Director |
|---|---|---|---|
MELEE | 4 · 2 khi M/L/XL windup nhắm hero · 0 trong 0.6 s cuối windup P của boss | S | > 12 quái cận chiến S trong r100 không tăng đòn cùng lúc → mật độ an toàn |
PROJ | 3 loạt nhắm hero; 12 đạn trên màn | S + đạn M/L/XL | trần nhóm RANGED 10 (§2.1) |
P_FLOOR | 3 tell P sàn từ S | S | trần nhóm BOMB 8 |
P_TOTAL | 5 (gồm hazard, Ấn, mutator, Khăn Tang, P của M+) | mọi nguồn | hazard/HAZ trong kịch bản xin token như quái (§11) |
HEAVY | 1 windup M/L/XL nhắm hero | M, L, XL | HUNT: Tinh Anh thứ 2 chờ (STALK); không bao giờ 2 Tinh Anh windup cùng lúc |
OBJECTIVE | 6 windup nhắm vật mục tiêu | S có cờ objective_attacker | VIGIL (§10); RESCUE không quái nào đánh kén |
- Trần token không đổi theo Khăn Tang/Ấn/mutator/Tro Nhớ (INV-08/15).
9Tinh Anh trong phòng
7.1 Chèn Tinh Anh (ELITE)
ELITE(id | '*', em | '*'):
id '*' → Tinh Anh biome chưa gặp trong run, rồi ngẫu nhiên đều
giữ chỗ 12 TP: lớp ngân sách dừng tới khi TOF ≤ target − 12
điểm = FAR (≥ 220 px, ưu tiên mép trong khung để người chơi thấy xoáy) → xoáy 1.0 s (F4)
callout "TINH ANH XUẤT HIỆN" + nameplate (tên + Ấn + tag thế đáp nếu có)
MELEE token → 2 khi nó windup; HEAVY 1
chết → F11 nghỉ 6 s; XP 40, Tro Hồn 25 (Bible)
| Nơi | Tinh Anh | Ấn |
|---|---|---|
ELT DUEL | 1 (HP × 1.4 [ASSUMED], thời lượng Cổng 65–75 s) | 1 |
ELT HUNT | 2 (HP × 1.0) | 1 mỗi con, không trùng |
CMB TIDE sóng 3 | Hồi II+ : 1 | 1 |
CMB BELLS / NEST | Hồi III+ : 1 canh chuông 3 / tổ cuối | 1 |
CHL biến thể ASH | 1 ở 40% thời lượng, 1 thế đáp bật sẵn (tính ngân sách Hồi 14 §11) | 1 |
| MRN14 Kẻ Truy Tang | mỗi 3 phòng chiến: 1 ở 30% thời lượng, đuổi hero (STALK → ENGAGE) | 1 ngẫu nhiên |
7.2 Gán Ấn (EM01–EM16)
| Hồi | Pool | Luật |
|---|---|---|
| I | an toàn: EM01, EM02, EM03, EM07, EM11 | 3 run đầu đời: Tinh Anh Hồi I không Ấn |
| II | EM01–EM11, EM13, EM14 | EM14 Xích Hồn chỉ khi có ≥ 2 Tinh Anh (HUNT) |
| III–IV, Kết | EM01–EM16 | EM12 [ASH] tính vào trần thế đáp/Hồi; Tro Nhớ tắt → EM12 = Ấn trống (cuộn lại) |
- MUT05 Hồn Nặng: +1 Ấn (2 Ấn khác nhau). MRN05: 10% quái thường từ Hồi II mang 1 Ấn nhóm an toàn (EM01/02/03/07/11), TP × 1.5, viền nameplate nhỏ.
- EM04 Gọi Bầy: 6 quái SWARM biome / 8 s qua xoáy 1.0 s ngoài r90; con không trừ ví (§2.1). EM16 Thề Thù: chiếm 1/4 MELEE cho đàn, thêm 1 Relic lựa khi chết.
10Mini-boss & boss
| Khoá | MBS mini-boss | BOS boss Hồi | BS_FINAL / BS_TRUE |
|---|---|---|---|
| Sân | tròn r200, cửa đóng khi vào [ASSUMED] | tròn r220 (demo), cửa đóng | B5 vành r260 · B6 r240 [ASSUMED] |
| Vào | hero tới tâm − 120 px → cửa đóng → xoáy 1.0 s → thoại lần đầu ≤ 3 s (boss bất tử) | như mini | như mini; sau ải |
| Sân rỉ (Bible ≥ 6 S/20 s) | TRICKLE 2 con/6.5 s (≈ 6.2/20 s), quái SWARM biome (B4: EN_B4_02) | như mini | BS_FINAL: SWARM B1–B4 xoay; BS_TRUE: EN_B6_02 1 con/10 s + SWARM |
| Trần quái phụ | 30 sống (gồm con triệu hồi) | 40 (BS_B1 Gọi Hồn 24 con: tính vào 40) | 40 |
| Ngân sách | không ví; chỉ TRICKLE + triệu hồi kit | như mini | như mini |
| Đổi pha | sân rỉ dừng 3 s; quái phụ trong r160 bị đẩy theo quỳ của boss | như mini | như mini |
| Draft | xếp hàng tới hết trận (Bible §2.1) | như mini | như mini |
| Kết trận | quái phụ tan tro 0.8 s | + hồi phục ≥ 60% | → kết / B6 |
- Không chèn Tinh Anh trong phòng mini/boss (MRN14 bỏ qua phòng
MBS/BOS). MRN10 Cổng Kép:ELTrồiMBScùng sân, nghỉ 4 s (16§3.1). - Quái phụ dùng token như thường; F13 áp dụng.
11Hồ sơ Director theo biome
📊 Hồ sơ Director theo biome
Đồi Mộ Tro
- B_room
- 130
- BPS_act
- 3.4
- Rỉ boss
- Thây Tro EN_B1_01
- Ưu tiên diệt
- —
- Kẻ mang
- Kẻ Đào Trộm Mộ (biped, ôm hũ tro)
- R1: Thây Tro EN_B1_01 · Quỷ Rãnh EN_B1_02 · Thầy Bùa Tro EN_B1_03
- R2: Khiên Mộ EN_B1_04 · Xác Trương EN_B1_05
- R3: Xạ Thủ Lồng Than EN_B1_06 · Hồn Khói EN_B1_07
RING Thây Tro trồi từ mộ · NEST Mộ Mở. Hazard (INV-18, xin P_TOTAL): HZ_B1_collapse sàn sụp P r40, 1 vùng/12 s ở sân có cờ · HZ_B1_bell chuông làng (hero đánh → choáng r100, trúng cả quái) · HZ_B1_bone_field bãi xương −15% tốc (cả quái). Nhạc: intensity = clamp(alive / 200, 0, 1) + 0.3 khi beat/Tinh Anh.
Đầm Vải Liệm
- B_room
- 145
- BPS_act
- 3.8
- Rỉ boss
- Thây Đuối EN_B2_01
- Ưu tiên diệt
- Đò Thây EN_B2_07
- Kẻ mang
- Hồn Đèn Liệm (đèn lồng trôi trên bè)
- R1: Thây Đuối EN_B2_01 · Ếch Vây EN_B2_02 · Rắn Bùa EN_B2_03
- R2: Mộc Thi EN_B2_04 · Bướm Liệm EN_B2_05
- R3: Càng Bùn EN_B2_06 · Đò Thây EN_B2_07
AMBUSH Càng Bùn dưới nước · SWARM Bướm Liệm theo gió. Hazard: HZ_B2_bridge cầu tre sập P 1.0 s khi ≥ 6 thân trên cầu, hồi 15 s · HZ_B2_gas túi khí ma trơi: đòn nặng → nổ P r60 (trì 0.45 s) · HZ_B2_water nước nông −15% tốc. Đạo cụ: VIGIL đèn lồng đò, BELLS chuông phao, NEST Bè Liệm, RESCUE kén treo đước (cùng id OBJ_, sprite theo biome).
Lò Đúc Câm
- B_room
- 160
- BPS_act
- 4.2
- Rỉ boss
- Phu Xỉ EN_B3_01
- Ưu tiên diệt
- Thợ Bễ EN_B3_02
- Kẻ mang
- Thây Thợ Học Việc ôm lưỡi chuông
- R1: Phu Xỉ EN_B3_01 · Thợ Bễ EN_B3_02 · Đá Lăn Lò EN_B3_03
- R2: Phu Bom EN_B3_04 · Bò Giáp EN_B3_05
- R3: Cưa Đồng EN_B3_06 · Nhím Gai Lò EN_B3_07
LINE Bò Giáp dọc băng chuyền · BURST từ cửa lò. Hazard: HZ_B3_pour rót đồng P r50, 1 lần/10 s · HZ_B3_mold khuôn rơi P r56, 1 lần/14 s, nghiền quái · HZ_B3_conveyor băng chuyền 24 px/s · HZ_B3_hook móc cẩu (Lướt vào = quét bầy). Đạo cụ: VIGIL lò canh xưởng, BELLS chuông mộc chưa đúc, NEST Khuôn Nứt, RESCUE kén trong khuôn.
Thành Chuông Treo
- B_room
- 170
- BPS_act
- 4.5
- Rỉ boss
- Thú Đá Mái EN_B4_02
- Ưu tiên diệt
- Tiểu Đồng Chuông EN_B4_07
- Kẻ mang
- Thây Đưa Thư (đu theo xích)
- R1: Cận Vệ Rỗng EN_B4_01 · Thú Đá Mái EN_B4_02 · Chim Than EN_B4_03
- R2: Rồng Non Tro EN_B4_04 · Lục Lạc Sét EN_B4_05
- R3: Pha Lê Tro EN_B4_06 · Tiểu Đồng Chuông EN_B4_07
ARC đàn Thú Đá Mái từ trên vực (bầy chính) · LINE hàng ngắn 2–4 Cận Vệ Rỗng. Hazard: HZ_B4_wind gió đẩy 30 px/s (cờ báo 1.0 s, thổi 4 s, mỗi 12 s) · HZ_B4_pendulum chuông con lắc P quét làn, 1 lần/8 s · HZ_B4_signal_bell chuông hiệu (hero đánh → choáng r120). Đạo cụ: VIGIL đèn hiệu tháp, BELLS chuông hiệu, NEST Lồng Xích, RESCUE kén treo xích.
Đỉnh Chuông Câm
- B_room
- 180
- BPS_act
- 5
- Rỉ boss
- Thây Tro EN_B1_01
- Ưu tiên diệt
- —
- Kẻ mang
- —
- R1: Thây Tro EN_B1_01 · Quỷ Rãnh EN_B1_02 · Xác Trương EN_B1_05 · Thây Đuối EN_B2_01 · Bướm Liệm EN_B2_05 · Rắn Bùa EN_B2_03 · Phu Xỉ EN_B3_01 · Phu Bom EN_B3_04 · Bò Giáp EN_B3_05 · Thú Đá Mái EN_B4_02 · Cận Vệ Rỗng EN_B4_01 · Rồng Non Tro EN_B4_04
Ải Kết 4 đoạn 15 s: RING 48 r180 (B1) → SWARM 40 Bướm Liệm hướng ngẫu nhiên (B2) → FLANK 6 Bò Giáp (B3) → ARC 24 Thú Đá Mái r220 (B4). MIX mặc định = đoạn 1; kịch bản WS_B5_TRIAL_01 đổi MIX mỗi đoạn. Sân rỉ BS_FINAL: SWARM B1–B4 xoay (EN_B1_01 → EN_B2_01 → EN_B3_01 → EN_B4_02).
Bờ Lặng
- B_room
- 150
- BPS_act
- 4.4
- Rỉ boss
- Tiếng Câm EN_B6_02
- Ưu tiên diệt
- —
- Kẻ mang
- —
- R1: Tiếng Câm EN_B6_02
Tiếng Câm EN_B6_02 (Nuốt P câm kỹ năng 2 s, ăn P_FLOOR, trần DRIFT 12) trộn SWARM B1–B4 xoay 15 s/lượt + chuyên biệt B1–B4 ngẫu nhiên (≤ 2 vai/lượt). Âm thanh biome tắt dần, SFX tell giữ nguyên. Sân rỉ BS_TRUE: EN_B6_02 1 con/10 s + SWARM xoay.
9.1 MIX mặc định (% số con) & thứ tự giới thiệu
| Biome | 01 | 02 | 03 | 04 | 05 | 06 | 07 | TP TB |
|---|---|---|---|---|---|---|---|---|
| B1 | 70 | 8 | 6 | 4 | 5 | 3 | 4 | 0.76 |
| B2 | 60 | 7 | 6 | 4 | 15 | 5 | 3 | 0.83 |
| B3 | 68 | 4 | 6 | 6 | 5 | 6 | 5 | 0.93 |
| B4 | 12 | 63 | 6 | 6 | 6 | 4 | 3 | 0.91 |
| Giới thiệu theo hàng (lần đầu trong run) | R1: 01, 02, 03 · R2: + 04, 05 · R3+: + 06, 07 |
- B4: vai bầy = cột 02 (EN_B4_02, TP 0.6, bay → mọi hero PROJ/AREA/MELEE đánh trúng); cột 01 EN_B4_01 khiên chỉ 12% (trần sống 24, hàng 2–4) để bầy Hồi IV không miễn đòn chính diện.
- "Chưa giới thiệu" → trọng số 0, phần dư chia về 01 (B4: về 02). Lần đầu một id xuất hiện trong đời tài khoản: 1 con đi trước nhóm, nameplate tên 2 s, codex mở trang.
- Phòng R1 mỗi Hồi chỉ dùng MIX 01–03 kể cả khi đã giới thiệu ở run trước (nhịp khởi động).
9.2 Hồ sơ từng biome
| Khoá | B1 Đồi Mộ Tro | B2 Đầm Vải Liệm | B3 Lò Đúc Câm | B4 Thành Chuông Treo |
|---|---|---|---|---|
B_room · BPS_act | 130 · 3.4 | 145 · 3.8 | 160 · 4.2 | 170 · 4.5 |
| Mẫu đặc trưng | RING Thây Tro trồi từ mộ · NEST Mộ Mở | AMBUSH Càng Bùn dưới nước · SWARM Bướm Liệm theo gió | LINE Bò Giáp dọc băng chuyền · BURST từ cửa lò | ARC đàn Thú Đá Mái từ trên vực (bầy chính) · LINE hàng ngắn 2–4 Cận Vệ Rỗng |
Hazard (INV-18, xin P_TOTAL) | sàn sụp P r40: 1 vùng/12 s ở sân có cờ; chuông làng (hero đánh → choáng r100, trúng cả quái); bãi xương −15% tốc (cả quái) | cầu tre sập P 1.0 s khi ≥ 6 thân trên cầu, hồi 15 s; túi khí ma trơi: đòn nặng → nổ P r60 (trì 0.45 s); nước nông −15% | rót đồng P r50: 1 lần/10 s; khuôn rơi P r56: 1 lần/14 s, nghiền quái; băng chuyền 24 px/s; móc cẩu (Lướt vào = quét bầy) | gió đẩy 30 px/s: cờ báo 1.0 s, thổi 4 s, mỗi 12 s; chuông con lắc P quét làn: 1 lần/8 s; chuông hiệu (hero đánh → choáng r120) |
| Đạo cụ mục tiêu | VIGIL lò lửa canh OBJ_BRAZIER · BELLS chuông làng OBJ_BELL · NEST Mộ Mở OBJ_NEST_B1 · RESCUE kén OBJ_COCOON | VIGIL đèn lồng đò OBJ_BRAZIER_B2 · BELLS chuông phao OBJ_BELL_B2 · NEST Bè Liệm OBJ_NEST_B2 · RESCUE kén treo đước OBJ_COCOON_B2 | VIGIL lò canh xưởng OBJ_BRAZIER_B3 · BELLS chuông mộc chưa đúc OBJ_BELL_B3 · NEST Khuôn Nứt OBJ_NEST_B3 · RESCUE kén trong khuôn OBJ_COCOON_B3 | VIGIL đèn hiệu tháp OBJ_BRAZIER_B4 · BELLS chuông hiệu OBJ_BELL_B4 · NEST Lồng Xích OBJ_NEST_B4 · RESCUE kén treo xích OBJ_COCOON_B4 |
| Người mang báu (CHASE) | Kẻ Đào Trộm Mộ (biped, ôm hũ tro) OBJ_CARRIER | Hồn Đèn Liệm (đèn lồng trôi trên bè) OBJ_CARRIER_B2 | Thây Thợ Học Việc ôm lưỡi chuông OBJ_CARRIER_B3 | Thây Đưa Thư (đu theo xích) OBJ_CARRIER_B4 |
| Sân rỉ boss/mini | EN_B1_01 | EN_B2_01 | EN_B3_01 | EN_B4_02 |
| Ưu tiên diệt (vai hỗ trợ) | — | EN_B2_07 tổ | EN_B3_02 Thợ Bễ | EN_B4_07 Tiểu Đồng Chuông |
| Nhạc cường độ | intensity = clamp(alive / 200, 0, 1) + 0.3 khi beat/Tinh Anh; Tinh Anh/boss → lớp nhạc boss (32-Audio-Bible) |
- Đạo cụ mục tiêu là đạo cụ sân, không phải kẻ địch: id
OBJ_<NAME>chỉ dùng trong dữ liệu sân/kịch bản, không vào roster, không có kit đòn. Hình đạo cụ biến thể theo biome: mỗi biome 1 idOBJ_<NAME>_B<n>(B1 giữOBJ_<NAME>), cùng luật HP/tương tác. - Hazard gây sát thương dùng cờ
hits_enemies = true(INV-18); Director tính quái chết do hazard như kill bình thường (XP, MESO).
9.3 Ải Kết (B5, 60 s, FINALE_TRIAL)
| Đoạn | Giây | MIX | Beat |
|---|---|---|---|
| 1 | 0–15 | SWARM B1 70 · EN_B1_02 15 · EN_B1_05 15 | mở màn RING 48 r180 |
| 2 | 15–30 | SWARM B2 60 · EN_B2_05 25 · EN_B2_03 15 | SWARM EN_B2_05 40 con hướng ngẫu nhiên |
| 3 | 30–45 | SWARM B3 65 · EN_B3_04 15 · EN_B3_05 20 | FLANK EN_B3_05 6 |
| 4 | 45–60 | EN_B4_02 70 · EN_B4_01 12 · EN_B4_04 18 | ARC EN_B4_02 24 r220 |
B_obj180,CURVE_STDtheo từng đoạn 15 s (mỗi đoạn x tính lại, sàn 0.70); quái đoạn trước không bị xoá. Co giãn ngoài Hồi gốc theo10§2.4 (act = 5). t = 60 s: mọi quái tan tro hướng tâm, vành Đại Chuông hiện, sân tròn trống → BS_FINAL.- Không Tinh Anh, không mục tiêu; chỉ sống sót 60 s (chết ở đây = chết run).
9.4 Ải Bí mật (B6, 45 s, SHORE_TRIAL)
B_obj150; MIX: EN_B6_02 20 · SWARM B1–B4 xoay 15 s/lượt 60 · chuyên biệt B1–B4 ngẫu nhiên 20 (≤ 2 vai/lượt).- EN_B6_02 Nuốt P (câm kỹ năng 2 s) ăn
P_FLOOR; trần nhóm DRIFT 12. Âm thanh biome tắt dần ("không vọng"), SFX tell giữ nguyên. - t = 45 s: tan tro → BS_TRUE.
12Mục tiêu trận (10 loại, Bible run.objectives)
📊 Mục tiêu trận
| Mục tiêu | Nút | t_target (s) | obj_mult | Đường pha | Trần (s) | MESO | Thắng | Thua |
|---|---|---|---|---|---|---|---|---|
| Thanh Tẩy PURGE | Giao Tranh CMB · Thử Lửa CHL | I: 50, II_IV: 55 | 1 | STD | 60 | — | diệt N quái (150 / 170 / 180 / 175 ở Hồi I / II / III / IV) hoặc sống 60 s; MRN02 không đổi N | — |
| Canh Lửa VIGIL | Giao Tranh CMB · Thử Lửa CHL | I: 50, II_IV: 50 | 0.85 | FLAT | 50 | có | lò OBJ_BRAZIER (HP 300) còn HP ở giây 50; ĐÁP thành công trong r80 quanh lò → lò +15 HP (≤ 300) | lò HP 0 → mất icon thưởng nút, phòng chạy tiếp tới 50 s |
| Gõ Chuông BELLS | Giao Tranh CMB · Thử Lửa CHL | I: 55, II_IV: 60 | 1 | STD | — | có | gõ đủ 3 chuông OBJ_BELL (ngân 3 / 4 / 5 / 5 nhịp ở Hồi I–IV; cú HEAVY/kỹ năng/ult = 2 nhịp); chuông ngân: sóng r140 diệt quái S | — |
| Thuỷ Triều TIDE | Giao Tranh CMB · Thử Lửa CHL | I: 55, II_IV: 60 | 0.8/1/1.25 | TIDE | 60 | — | hết sóng 3 (Hồi I 15 / 18 / 22 s · Hồi II–IV 16 / 20 / 24 s) và Tinh Anh sóng 3 (Hồi II+) chết | — |
| Đập Tổ NEST | Giao Tranh CMB · Thử Lửa CHL | I: 55, II_IV: 60 | 0.9 | STD | — | có | phá 3 tổ OBJ_NEST_B* (HP 260 / 420 / 570 / 750 × (1 + 0.12 × MRN01)); mỗi tổ thả 4 SWARM / 6 s | — |
| Hành Lang GAUNTLET | Giao Tranh CMB · Thử Lửa CHL | I: 50, II_IV: 55 | 0.6 | RUN | — | có | hero vào vùng thoát r48 cuối hành lang (1.800 / 2.000 / 2.200 / 2.200 px, rộng 360 px) | — |
| Truy Đuổi CHASE | Giao Tranh CMB | I: 50, II_IV: 50 | 0.7 | RUN | 50 | có | người mang báu OBJ_CARRIER HP 0 trước hết 45 s chạy → thưởng nút ×2; hết 45 s → ×1 (HP 180 / 290 / 400 / 520 × (1 + 0.12 × MRN01)) | — |
| Quyết Đấu DUEL | Tinh Anh ELT | I: 65, II_IV: 70 | 0.5 | GATE | — | — | Tinh Anh chết (HP × 1.4 [ASSUMED]; t_target Hồi II 70 · III–IV 75) → Relic chọn 1/2 | — |
| Săn Tinh Anh HUNT | Tinh Anh ELT | I: 65, II_IV: 70 | 0.85 | GATE | — | — | 2 Tinh Anh chết (con 2 vào ở 40% t_target hoặc khi con 1 < 40% HP; t_target Hồi II 70 · III–IV 75) → Relic chọn 1/2 | — |
| Giải Cứu RESCUE | Giải Cứu RSC | I: 55, II_IV: 60 | 0.9 | FLAT | — | có | kén OBJ_COCOON (HP 400, ≤ 25 sát thương/cú) HP 0 → Kẻ Thức thoát; lần đầu Hồi II mở H04 | — |
| Mini-boss MINIBOSS | Mini-boss MBS | I: 65, II_IV: 70 | 0 | GATE | — | — | mini-boss chết (loại trận kịch bản của nút MBS, không phải mục tiêu Bible; t_target Hồi II 70 · III–IV 75); không ví, sân rỉ + trần phụ 30 | — |
| Boss BOSS | Boss Hồi BOS | I: 90, II_IV: 105 | 0 | GATE | — | — | boss chết (loại trận kịch bản của nút BOS; Hồi III–IV 110 · BS_FINAL 150 · BS_TRUE 180); không ví, sân rỉ + trần phụ 40 | — |
| Ải TRIAL | Boss Hồi BOS | I: 60, II_IV: 60 | 1 | STD | 60 | — | sống tới hết đồng hồ ải (FINALE_TRIAL B5 60 s · SHORE_TRIAL B6 45 s) trước boss cuối; chết = chết run | — |
10.1 Bảng tổng
t_target theo Hồi I / II–IV (giây). "Thua mục tiêu" ≠ thua run: phòng vẫn xong, mất phần thưởng ghi ở cột. Chết = chết run (16 §8).
| id | Tên | Nút | t_target | obj_mult · curve | Thắng | Thua mục tiêu | MESO |
|---|---|---|---|---|---|---|---|
PURGE | Thanh Tẩy | CMB/CHL | 50 / 55 | 1.00 · STD | diệt N hoặc sống 60 s | — | không |
VIGIL | Canh Lửa | CMB/CHL | 50 / 50 | 0.85 · FLAT | lò OBJ_BRAZIER còn HP ở 50 s | lò HP 0 → mất icon thưởng nút, phòng chạy tới 50 s | có |
BELLS | Gõ Chuông | CMB/CHL | 55 / 60 | 1.00 · STD | gõ đủ 3 chuông | — | có |
TIDE | Thuỷ Triều | CMB/CHL | 55 / 60 | sóng 0.80/1.00/1.25 · TIDE | hết sóng 3 + Tinh Anh sóng 3 chết | — | không |
NEST | Đập Tổ | CMB/CHL | 55 / 60 | 0.90 · STD | phá 3 tổ | — | có |
GAUNTLET | Hành Lang | CMB/CHL | 50 / 55 | 0.60 · RUN | hero vào vùng thoát r48 cuối hành lang | — | có |
CHASE | Truy Đuổi | CMB | 50 / 50 | 0.70 · RUN | người mang báu HP 0 trước 45 s (thưởng nút ×2) hoặc hết 45 s (×1) | — (thoát = ×1) | có |
DUEL | Quyết Đấu | ELT | 65 / 70–75 | 0.50 · GATE | Tinh Anh chết | — | không (Cổng) |
HUNT | Săn Tinh Anh | ELT | 65 / 70–75 | 0.85 · GATE | 2 Tinh Anh chết | — | không (Cổng) |
RESCUE | Giải Cứu | RSC | 55 / 60 | 0.90 · FLAT | kén OBJ_COCOON HP 0 | — | có |
t_target= thời điểm trung vị đạt mục tiêu (dùng chophase); thời lượng nút ở16§3.1 =t_target+ ~5 s (mở màn, tan tro, hút shard); TB có trọng số mục tiêu ≈ 57 s (Hồi I) / 61 s (II–IV) ≈ Bible 55 / 60 (±20 s).- Phòng không trần thời gian trừ PURGE (60 s), VIGIL (50 s), TIDE (theo sóng), CHASE (45 s); các mục tiêu khác áp lực tăng theo
phase+ beat cho tới khi xong. - Thưởng: icon thưởng nút (
16§4.2) + thưởng chung (16§3.2) + cột "Thưởng thêm" §10.2.
10.2 Luật chi tiết
PURGE — Thanh Tẩy
- N = 150 / 170 / 180 / 175 (Hồi I/II/III/IV; B4 quái nặng hơn); MRN02 không đổi N. HUD: "DIỆT 87/150 · 0:42" (đồng hồ đếm tới 60).
- Beat:
RINGSWARM ở 45%,FLANKvai vồ/lao ở 70%. Sân: mở ≥ 1200 × 900 px, ≥ 2 cổng/hướng vào.
VIGIL — Canh Lửa
OBJ_BRAZIERtâm sân, r20, HP 300 (Bible). Nhận sát thương cố định: đòn quái S 6 · đòn M 20 · vùng P chạm 10/lần; không DoT. 40% quái spawn có cờobjective_attacker(14§5.1); tokenOBJECTIVE6.- Tiếp lửa: hero ĐÁP thành công trong r80 quanh lò → lò +15 HP (≤ 300). HUD: thanh lửa trên lò + "CANH LỬA 0:31".
- Beat:
FLANKở 30%,ARChướng vào lò (tâm cung = lò, r220) ở 60%. Sân: tâm trống r160, 4 hướng tiếp cận, không vật cao trong r100.
BELLS — Gõ Chuông
- 3
OBJ_BELLtam giác, cách nhau 350–450 px; sáng lần lượt (chuông kế có mũi tên viền màn). Gõ = đầy thanh "ngân" 3 / 4 / 5 / 5 nhịp (Hồi I/II/III/IV): mỗi cú trúng ≥ 1 sát thương = 1 nhịp, cúHEAVY/kỹ năng/ult = 2; cách nhau ≥ 0.25 s. - Chuông ngân: sóng r140 diệt mọi quái S trong vùng (không ảnh hưởng M+, không gây sát thương hero), +10 XP gốc; ngay sau đó
BURST8 SWARM tại chuông kế (ngoài r90 hero). Hồi III+: Tinh Anh canh chuông 3 (§7.1). - Sân: 3 ổ chuông, tầm nhìn thẳng giữa các ổ.
TIDE — Thuỷ Triều
- 3 sóng: Hồi I 15 / 18 / 22 s · Hồi II–IV 16 / 20 / 24 s; mỗi sóng 3 s đầu là nghỉ (phase 0.30, chỉ SWARM). Callout "THUỶ TRIỀU 1/3" đầu mỗi sóng.
- Sóng 2:
SWARM1 hướng; sóng 3:SWARM2 hướng đối nhau + Hồi II+ 1 Tinh Anh (§7.1). Không MESO (Bible). Sân: mở ≥ 1400 × 1000.
NEST — Đập Tổ
- 3 tổ
OBJ_NEST_B*: HP 260 / 420 / 570 / 750 (× power curve10§2.4) × (1 + 0.12 × MRN01); không đẩy, nhận DoT; mỗi tổ thả gói 4 SWARM biome / 6 s quaNEST(con không trừ ví, tính TOF). - Tổ vỡ: sóng đẩy r100 (quái S), +10 XP gốc; tổ cuối Hồi III+ có Tinh Anh canh. Sân: 3 ổ tổ cách nhau ≥ 300 px, cách điểm vào của hero ≥ 250 px.
GAUNTLET — Hành Lang
- Hành lang dài 1.800 / 2.000 / 2.200 / 2.200 px, rộng 360 px; ổ bẫy mỗi 200 px dùng hazard P của biome (§9.2), nhịp 1.6–2.4 s lệch pha, xin
P_TOTALnhư hazard (≤ 3 bẫy P cùng lúc trong khung); bẫy trúng cả quái. - MIX bỏ vai BOMB/ranged-P (không tranh token P với bẫy).
SWARMđuổi sau mỗi 8 s;LINEchặn ở 30% và 60% chiều dài. Không quay đầu bị chặn (tường tro mờ sau hero mỗi 600 px). - Thắng: vào vùng thoát r48 → cửa tro mở, quái tan tro. Sân: khuôn hành lang có ổ bẫy + 2 hốc né mỗi 400 px.
CHASE — Truy Đuổi
OBJ_CARRIER(§9.2) chạy vòng waypointcarrier_path, tốc = tốc cơ bản hero đang chơi / 1.15 (≤ / 1.1, INV-17); HP 180 / 290 / 400 / 520 × (1 + 0.12 × MRN01); không đòn, không token.- 5 s đầu bị khoá (bất tử, đứng yên, vòng sáng ngà) rồi chạy 45 s. Hero trong 60 px → nó Lướt né 120 px (ấn tro 0.6 s tại điểm đến), hồi 6 s; cú
HEAVYlàm khựng 0.5 s. - HP 0 → rơi hũ báu: thưởng icon nút ×2; hết 45 s → biến thành tro, thưởng ×1. Sân: vòng đường ≥ 2.400 px, ≥ 8 waypoint, không ngõ cụt.
DUEL — Quyết Đấu
- 1 Tinh Anh (
ELITEở 2 s,FAR), HP × 1.4 [ASSUMED] để lấp Cổng 65–75 s; bầyobj_mult0.50CURVE_GATE. Thắng: Tinh Anh chết → Relic chọn 1/2. Sân: mở ≥ 1000 × 800, 2–4 vật cao (cho A08, chặn đạn).
HUNT — Săn Tinh Anh
- Tinh Anh 1 ở 3 s; Tinh Anh 2 ở 40%
t_targetHOẶC khi Tinh Anh 1 < 40% HP (cái nào trước); HP × 1.0;HEAVY1 → chỉ 1 con windup nhắm hero; con chờSTALKcách 140–200 px. Bầy 0.85CURVE_GATE. Sân: mở ≥ 1400 × 1000.
RESCUE — Giải Cứu
OBJ_COCOONtâm sân, HP 400 (Bible), mỗi cú ≤ 25 sát thương (ult/AoE không phá tức thì); mất mỗi 100 HP → "rung vỏ": bất tử 3 s +RING12 SWARM tâm kén r160 (vẫn F2 với hero). Không quái nào đánh kén.- HP 0 → Kẻ Thức thoát (cảnh 2 s, World ×0.3), quái tan tro. Lần đầu ở Hồi II: mở H04 (Bible §3.4); sau đó thưởng
SKILL+META(16§3.1). Sân: ổ kén tâm, trống r120.
10.3 Ma trận co giãn mục tiêu
| Tham số | Hồi I | II | III | IV | Khăn Tang |
|---|---|---|---|---|---|
| PURGE N | 150 | 170 | 180 | 175 | — |
| Chuông "ngân" | 3 | 4 | 5 | 5 | — |
| HP tổ | 260 | 420 | 570 | 750 | × (1 + 0.12 MRN01) |
| HP người mang báu | 180 | 290 | 400 | 520 | × (1 + 0.12 MRN01) |
| Dài hành lang (px) | 1.800 | 2.000 | 2.200 | 2.200 | — |
| HP lò canh / kén | 300 / 400 | 300 / 400 | 300 / 400 | 300 / 400 | không đổi (Bible) |
| Tinh Anh trong CMB | 0 | TIDE s3 | TIDE s3, BELLS, NEST | như III | MRN14 thêm |
13Định dạng kịch bản sóng (wave_scripts.csv)
📊 Kịch bản sóng
| Kịch bản | Biome | Mục tiêu | Nút | Hồi gốc | t_target | Dòng | Mô tả |
|---|---|---|---|---|---|---|---|
| WS_B1_PURGE_01 | Đồi Mộ Tro B1 | Thanh Tẩy PURGE | Giao Tranh CMB · Thử Lửa CHL | I | 50 | 13 | Thanh Tẩy: diệt 150 quái hoặc trụ 60 giây. Vòng vây ở 45% và đòn kẹp ở 70% thời gian. |
| WS_B1_VIGIL_01 | Đồi Mộ Tro B1 | Canh Lửa VIGIL | Giao Tranh CMB · Thử Lửa CHL | I | 50 | 17 | Canh Lửa: giữ lò lửa canh còn HP tới giây 50. ĐÁP thành công cạnh lò tiếp 15 HP. |
| WS_B1_BELLS_01 | Đồi Mộ Tro B1 | Gõ Chuông BELLS | Giao Tranh CMB · Thử Lửa CHL | I | 55 | 16 | Gõ Chuông: gõ đủ 3 chuông; mỗi chuông cần 3 nhịp ngân và quét sạch quái nhỏ trong r140. |
| WS_B1_TIDE_01 | Đồi Mộ Tro B1 | Thuỷ Triều TIDE | Giao Tranh CMB · Thử Lửa CHL | I | 55 | 21 | Thuỷ Triều: trụ qua 3 sóng 15 / 18 / 22 giây; mỗi sóng 3 giây đầu là nghỉ. |
| WS_B1_NEST_01 | Đồi Mộ Tro B1 | Đập Tổ NEST | Giao Tranh CMB · Thử Lửa CHL | I | 55 | 15 | Đập Tổ: phá 3 Mộ Mở; mỗi tổ còn đứng thả 4 Thây Tro mỗi 6 giây. |
| WS_B1_GAUNTLET_01 | Đồi Mộ Tro B1 | Hành Lang GAUNTLET | Giao Tranh CMB · Thử Lửa CHL | I | 50 | 14 | Hành Lang: băng qua 1.800 px bẫy tím tới cửa tro; bầy dồn sau lưng mỗi 10 giây. |
| WS_B1_CHASE_01 | Đồi Mộ Tro B1 | Truy Đuổi CHASE | Giao Tranh CMB | I | 50 | 13 | Truy Đuổi: hạ Kẻ Đào Trộm Mộ trước khi hết 45 giây để nhận thưởng nút ×2. |
| WS_B1_DUEL_01 | Đồi Mộ Tro B1 | Quyết Đấu DUEL | Tinh Anh ELT | I | 65 | 10 | Quyết Đấu: hạ Tinh Anh giữa bầy thưa để chọn 1 trong 2 Relic. |
| WS_B1_HUNT_01 | Đồi Mộ Tro B1 | Săn Tinh Anh HUNT | Tinh Anh ELT | I | 65 | 14 | Săn Tinh Anh: hạ 2 Tinh Anh; chỉ 1 con được vung đòn nặng vào bạn cùng lúc. |
| WS_B1_RESCUE_01 | Đồi Mộ Tro B1 | Giải Cứu RESCUE | Giải Cứu RSC | I | 55 | 14 | Giải Cứu: phá kén Kẻ Thức HP 400; mỗi 100 HP mất kén rung vỏ và gọi vòng bầy. |
| WS_B2_PURGE_01 | Đầm Vải Liệm B2 | Thanh Tẩy PURGE | Giao Tranh CMB · Thử Lửa CHL | II | 55 | 14 | Thanh Tẩy: diệt 170 quái hoặc trụ 60 giây. |
| WS_B2_VIGIL_01 | Đầm Vải Liệm B2 | Canh Lửa VIGIL | Giao Tranh CMB · Thử Lửa CHL | II | 50 | 18 | Canh Lửa: giữ lò lửa canh còn HP tới giây 50. |
| WS_B2_BELLS_01 | Đầm Vải Liệm B2 | Gõ Chuông BELLS | Giao Tranh CMB · Thử Lửa CHL | II | 60 | 16 | Gõ Chuông: gõ đủ 3 chuông, mỗi chuông 4 nhịp ngân. |
| WS_B2_TIDE_01 | Đầm Vải Liệm B2 | Thuỷ Triều TIDE | Giao Tranh CMB · Thử Lửa CHL | II | 60 | 22 | Thuỷ Triều: trụ qua 3 sóng 16 / 20 / 24 giây và hạ Tinh Anh sóng 3. |
| WS_B2_NEST_01 | Đầm Vải Liệm B2 | Đập Tổ NEST | Giao Tranh CMB · Thử Lửa CHL | II | 60 | 15 | Đập Tổ: phá 3 Bè Liệm HP 420; tổ còn đứng thả bầy mỗi 6 giây. |
| WS_B2_GAUNTLET_01 | Đầm Vải Liệm B2 | Hành Lang GAUNTLET | Giao Tranh CMB · Thử Lửa CHL | II | 55 | 13 | Hành Lang: băng qua 2000 px bẫy tím tới cửa tro. |
| WS_B2_CHASE_01 | Đầm Vải Liệm B2 | Truy Đuổi CHASE | Giao Tranh CMB | II | 50 | 13 | Truy Đuổi: hạ Hồn Đèn Liệm trước khi hết 45 giây để nhận thưởng nút ×2. |
| WS_B2_DUEL_01 | Đầm Vải Liệm B2 | Quyết Đấu DUEL | Tinh Anh ELT | II | 70 | 10 | Quyết Đấu: hạ Tinh Anh giữa bầy thưa để chọn 1 trong 2 Relic. |
| WS_B2_HUNT_01 | Đầm Vải Liệm B2 | Săn Tinh Anh HUNT | Tinh Anh ELT | II | 70 | 14 | Săn Tinh Anh: hạ 2 Tinh Anh; chỉ 1 con vung đòn nặng vào bạn cùng lúc. |
| WS_B2_RESCUE_01 | Đầm Vải Liệm B2 | Giải Cứu RESCUE | Giải Cứu RSC | II | 60 | 14 | Giải Cứu: phá kén Kẻ Thức HP 400 giữa bầy. |
| WS_B3_PURGE_01 | Lò Đúc Câm B3 | Thanh Tẩy PURGE | Giao Tranh CMB · Thử Lửa CHL | III | 55 | 15 | Thanh Tẩy: diệt 180 quái hoặc trụ 60 giây. |
| WS_B3_VIGIL_01 | Lò Đúc Câm B3 | Canh Lửa VIGIL | Giao Tranh CMB · Thử Lửa CHL | III | 50 | 18 | Canh Lửa: giữ lò lửa canh còn HP tới giây 50. |
| WS_B3_BELLS_01 | Lò Đúc Câm B3 | Gõ Chuông BELLS | Giao Tranh CMB · Thử Lửa CHL | III | 60 | 16 | Gõ Chuông: gõ đủ 3 chuông, mỗi chuông 5 nhịp ngân. |
| WS_B3_TIDE_01 | Lò Đúc Câm B3 | Thuỷ Triều TIDE | Giao Tranh CMB · Thử Lửa CHL | III | 60 | 22 | Thuỷ Triều: trụ qua 3 sóng 16 / 20 / 24 giây và hạ Tinh Anh sóng 3. |
| WS_B3_NEST_01 | Lò Đúc Câm B3 | Đập Tổ NEST | Giao Tranh CMB · Thử Lửa CHL | III | 60 | 16 | Đập Tổ: phá 3 Khuôn Nứt HP 570; tổ còn đứng thả bầy mỗi 6 giây. |
| WS_B3_GAUNTLET_01 | Lò Đúc Câm B3 | Hành Lang GAUNTLET | Giao Tranh CMB · Thử Lửa CHL | III | 55 | 13 | Hành Lang: băng qua 2200 px bẫy tím tới cửa tro. |
| WS_B3_CHASE_01 | Lò Đúc Câm B3 | Truy Đuổi CHASE | Giao Tranh CMB | III | 50 | 13 | Truy Đuổi: hạ Thây Thợ Học Việc trước khi hết 45 giây để nhận thưởng nút ×2. |
| WS_B3_DUEL_01 | Lò Đúc Câm B3 | Quyết Đấu DUEL | Tinh Anh ELT | III | 75 | 10 | Quyết Đấu: hạ Tinh Anh giữa bầy thưa để chọn 1 trong 2 Relic. |
| WS_B3_HUNT_01 | Lò Đúc Câm B3 | Săn Tinh Anh HUNT | Tinh Anh ELT | III | 75 | 14 | Săn Tinh Anh: hạ 2 Tinh Anh; chỉ 1 con vung đòn nặng vào bạn cùng lúc. |
| WS_B3_RESCUE_01 | Lò Đúc Câm B3 | Giải Cứu RESCUE | Giải Cứu RSC | III | 60 | 14 | Giải Cứu: phá kén Kẻ Thức HP 400 giữa bầy. |
| WS_B4_PURGE_01 | Thành Chuông Treo B4 | Thanh Tẩy PURGE | Giao Tranh CMB · Thử Lửa CHL | IV | 55 | 15 | Thanh Tẩy: diệt 175 quái hoặc trụ 60 giây. |
| WS_B4_VIGIL_01 | Thành Chuông Treo B4 | Canh Lửa VIGIL | Giao Tranh CMB · Thử Lửa CHL | IV | 50 | 18 | Canh Lửa: giữ lò lửa canh còn HP tới giây 50. |
| WS_B4_BELLS_01 | Thành Chuông Treo B4 | Gõ Chuông BELLS | Giao Tranh CMB · Thử Lửa CHL | IV | 60 | 16 | Gõ Chuông: gõ đủ 3 chuông, mỗi chuông 5 nhịp ngân. |
| WS_B4_TIDE_01 | Thành Chuông Treo B4 | Thuỷ Triều TIDE | Giao Tranh CMB · Thử Lửa CHL | IV | 60 | 22 | Thuỷ Triều: trụ qua 3 sóng 16 / 20 / 24 giây và hạ Tinh Anh sóng 3. |
| WS_B4_NEST_01 | Thành Chuông Treo B4 | Đập Tổ NEST | Giao Tranh CMB · Thử Lửa CHL | IV | 60 | 16 | Đập Tổ: phá 3 Lồng Xích HP 750; tổ còn đứng thả bầy mỗi 6 giây. |
| WS_B4_GAUNTLET_01 | Thành Chuông Treo B4 | Hành Lang GAUNTLET | Giao Tranh CMB · Thử Lửa CHL | IV | 55 | 13 | Hành Lang: băng qua 2200 px bẫy tím tới cửa tro. |
| WS_B4_CHASE_01 | Thành Chuông Treo B4 | Truy Đuổi CHASE | Giao Tranh CMB | IV | 50 | 14 | Truy Đuổi: hạ Thây Đưa Thư trước khi hết 45 giây để nhận thưởng nút ×2. |
| WS_B4_DUEL_01 | Thành Chuông Treo B4 | Quyết Đấu DUEL | Tinh Anh ELT | IV | 75 | 10 | Quyết Đấu: hạ Tinh Anh giữa bầy thưa để chọn 1 trong 2 Relic. |
| WS_B4_HUNT_01 | Thành Chuông Treo B4 | Săn Tinh Anh HUNT | Tinh Anh ELT | IV | 75 | 14 | Săn Tinh Anh: hạ 2 Tinh Anh; chỉ 1 con vung đòn nặng vào bạn cùng lúc. |
| WS_B4_RESCUE_01 | Thành Chuông Treo B4 | Giải Cứu RESCUE | Giải Cứu RSC | IV | 60 | 14 | Giải Cứu: phá kén Kẻ Thức HP 400 giữa bầy. |
| WS_B1_MINIBOSS_01 | Đồi Mộ Tro B1 | Mini-boss MINIBOSS | Mini-boss MBS | I | 65 | 5 | Mini-boss: hạ mini-boss trong sân tròn r200 có quái rỉ. |
| WS_B1_BOSS_01 | Đồi Mộ Tro B1 | Boss BOSS | Boss Hồi BOS | I | 90 | 5 | Boss Hồi: hạ boss trong sân tròn r220 có quái rỉ. |
| WS_B2_MINIBOSS_01 | Đầm Vải Liệm B2 | Mini-boss MINIBOSS | Mini-boss MBS | II | 70 | 5 | Mini-boss: hạ mini-boss trong sân tròn r200 có quái rỉ. |
| WS_B2_BOSS_01 | Đầm Vải Liệm B2 | Boss BOSS | Boss Hồi BOS | II | 105 | 5 | Boss Hồi: hạ boss trong sân tròn r220 có quái rỉ. |
| WS_B3_MINIBOSS_01 | Lò Đúc Câm B3 | Mini-boss MINIBOSS | Mini-boss MBS | III | 75 | 5 | Mini-boss: hạ mini-boss trong sân tròn r200 có quái rỉ. |
| WS_B3_BOSS_01 | Lò Đúc Câm B3 | Boss BOSS | Boss Hồi BOS | III | 110 | 5 | Boss Hồi: hạ boss trong sân tròn r220 có quái rỉ. |
| WS_B4_MINIBOSS_01 | Thành Chuông Treo B4 | Mini-boss MINIBOSS | Mini-boss MBS | IV | 75 | 5 | Mini-boss: hạ mini-boss trong sân tròn r200 có quái rỉ. |
| WS_B4_BOSS_01 | Thành Chuông Treo B4 | Boss BOSS | Boss Hồi BOS | IV | 110 | 5 | Boss Hồi: hạ boss trong sân tròn r220 có quái rỉ. |
| WS_B5_BOSS_01 | Đỉnh Chuông Câm B5 | Boss BOSS | Boss Hồi BOS | V | 150 | 8 | Trận cuối: hạ Vua Dravos trên vành Đại Chuông. |
| WS_B6_BOSS_01 | Bờ Lặng B6 | Boss BOSS | Boss Hồi BOS | VI | 180 | 6 | Trận ẩn: hạ Cái Lặng bên bờ không tiếng vọng. |
| WS_B5_TRIAL_01 | Đỉnh Chuông Câm B5 | Ải TRIAL | Boss Hồi BOS | V | 60 | 22 | Ải Kết: trụ 60 giây trước bầy trộn của 4 Hồi. |
| WS_B6_TRIAL_01 | Bờ Lặng B6 | Ải TRIAL | Boss Hồi BOS | VI | 45 | 10 | Ải Bờ Lặng: trụ 45 giây giữa Tiếng Câm và bầy trộn. |
Thay Waves.csv demo (dòng theo giây tuyệt đối, không ngân sách). Runtime đọc từng dòng, không hard-code wave. Header-addressed, UTF-8, # = chú thích, danh sách bằng |.
| Cột | Kiểu | Nghĩa |
|---|---|---|
script_id | WS_<biome>_<OBJ>_<nn> | 1 kịch bản = 1 (biome, mục tiêu) biến thể; chọn ngẫu nhiên đều trong các biến thể khớp (luồng spawn) |
row | int | thứ tự dòng (duy nhất trong script) |
trigger | T · PCT · PH · EV | T giây từ đầu phòng (World clock) · PCT % t_target · PH bắt đầu pha mục tiêu (PH1…) · EV sự kiện |
at | số / tên | giá trị trigger: 22 · 45 · PH2 · ELITE_DEAD, BELL_1, NEST_DEAD_2, WAVE_START_3, OBJ_HP<0.5, ALIVE<40, HP_HERO<0.25 |
until | số / trống | hết hiệu lực (giây/PCT cùng đơn vị trigger); trống = tới hết phòng |
action | enum | bảng dưới |
target | id | enemyId · EL_*/* · MB_* · OBJ_* · hazard id · callout key |
n | số | ý nghĩa theo action |
every | s | chu kỳ lặp (trống = 1 lần) |
pattern | enum §3 | RING ARC như ARC nhưng tâm cung sau lưng hero; beat dồn ARC_BACK FLANK BURST TRICKLE SWARM AMBUSH GATE FAR NEST LINE PACK EDGE; hậu tố @OBJ = tâm là đạo cụ mục tiêu; SWARM p2 nhận BACK (sau hero theo trục hành lang) |
p1, p2 | số / id | tham số mẫu (§3) hoặc action |
flags | list | NO_MESO · ARROW (mũi tên báo F9) · NO_ELITE · OBJ_ATTACK[:pct] (cờ objective_attacker cho con của dòng; trên BUDGET = % lớp ngân sách) · CHILD (con của đạo cụ/quái sinh: không trừ ví, vẫn tính TOF + trần) |
note | text | ghi chú thiết kế (không loc) |
action | n | p1 | p2 | Luật |
|---|---|---|---|---|
BUDGET | obj_mult ghi đè | BPS mult | curve id | 1 dòng ở T 0 + tuỳ chọn 1 dòng mỗi PH (TIDE); thiếu → mặc định §2.3/§2.5 |
MIX | trọng số % | — | — | đặt trọng số 1 id; các dòng MIX cùng at tạo 1 bộ (tổng 100, wave_lint kiểm); bộ mới thay bộ cũ |
BEAT | số con | tham số mẫu | tham số mẫu | trừ ví (cho phép nợ §1); qua F1–F17; chịu F8 khoảng cách beat |
ELITE | 1 | Ấn id hoặc * | HP mult (mặc định 1.0) | §7.1 |
MINI / BOSS | 1 | — | — | §8 |
OBJ | số đạo cụ | HP | khoảng cách tối thiểu | đặt đạo cụ mục tiêu vào ổ sân |
HAZ | — | chu kỳ s (≥ 1.0) | bán kính | bật hazard biome; xin P_TOTAL |
CALL | — | thời lượng s | — | callout (key loc), ≤ 1 cùng lúc (10 §6.5) |
REST | giây | — | — | không beat, MIX → chỉ SWARM/FLOCK |
CAP | trần đếm | — | — | ≤ cap_count |
WIN / FAIL | — | biểu thức | — | kills>=150 | t>=60, obj_hp<=0, bells>=3, nests_dead>=3, elites_dead>=2, zone_exit, carrier_hp<=0 | t>=50, wave>=3 & wave_end & elites_alive==0 |
REWARD | hệ số | điều kiện | — | 2 khi carrier_hp<=0; 0 (mất icon) khi obj_hp<=0 |
Luật soạn & co giãn
- Script soạn ở Hồi gốc của biome. Dùng ngoài Hồi gốc (ải Kết, ENDLESS):
ncủaBEAT×B_room[act] / B_room[home], làm tròn xuống, ≥ 1. BEATkhông vượt 30%B_objTP/beat (wave_lint); tổng TP beat ≤ 60% tổng TP spawn dự kiến của phòng (bầy chủ yếu do lớp ngân sách).- Mỗi script ≥ 1 dòng
WIN; mục tiêu có thua thì cóFAIL; phòng R1 / PURGE / TIDE / Cổng tự gắnNO_MESO. wave_lint(CI): id tồn tại trong roster biome · tổng MIX = 100 ·HAZchu kỳ ≥ 1.0 s · không beat trong 2 s đầu (F16) · beat cách ≥ 8 s ·RINGp1 ≥ 140, p2 ≥ 45 · đạo cụOBJ_*có ổ trên sân · không vai BOMB trong GAUNTLET.balance_calc(CI,py -3 GDD/Full/tools/balance_calc.py director --check-kpm): với MIX B4 §9.1 +B_room170 /BPS4.5, mô phỏng build trung vị (17) của từng hero H01–H12 → kill/phút ≥ 120 từ phút 3; hero nào < 120 → đỏ, sửa MIX/trần SHIELD trước, không buff hero. Kiểm cùng cho B1–B3 và đoạn 4 ải Kết.
14Hook thích nghi composition_bias.<axis> (Đạo Diễn Tro, MESO)
Nguồn luật: 14 §8.2 (điều kiện, độ dịch s, thưởng, báo). Doc này định nghĩa hook và ánh xạ vai → id mà Director áp.
Director.OnRoomStart(room):
if room.flags ∋ NO_MESO: bias = none
else bias = AshMemory.QueryCompositionBias(room_ctx) // → { hook, s ∈ {0, .05, .10, .15}, axis_dir }
if bias.s > 0:
pts = bias.s × B_obj
nguồn = vai bầy của biome (01; B4: 02), trừ id thuộc vai khắc
đích = id vai khắc trong roster biome (bảng dưới), chia đều
MIX' = MIX đổi pts TP từ nguồn sang đích (quy đổi số con theo TP), giữ trần nhóm §2.1;
phần không đặt được vì trần → trả về nguồn (s hiệu dụng giảm, thưởng theo s hiệu dụng)
CALL "TRO DỒN BẦY: <vai> · +<s>% Tro Hồn" 2.5 s trước mở màn; Mắt Tro loé
Director.OnRoomEnd(room) → AshMemory.CommitRoom(x_room, objective, s_effective)
| Hook | Thói quen (14) | B1 | B2 | B3 | B4 |
|---|---|---|---|---|---|
composition_bias.A02_HIGH | đánh xa Tinh Anh | EN_B1_02 | EN_B2_02 | EN_B3_06 | EN_B4_03 |
composition_bias.A02_LOW | áp sát | EN_B1_05 | — (s = 0) | EN_B3_04, EN_B3_07 | — (s = 0) |
composition_bias.A03_HIGH | Lướt liên tục | — (s = 0) | EN_B2_05, EN_B2_04 | — (s = 0) | EN_B4_05, EN_B4_02 |
composition_bias.A05_HIGH | gom cụm diệt AoE | EN_B1_04, EN_B1_03 | EN_B2_03, EN_B2_05 | — (s = 0) | EN_B4_06, EN_B4_05 |
composition_bias.A06_HIGH | đạn/ném | EN_B1_04, EN_B1_07 | EN_B2_06, EN_B2_05 | — (s = 0) | EN_B4_06 |
composition_bias.A08_HIGH | núp vật cao | — (s = 0) | — (s = 0) | EN_B3_04, EN_B3_03 | EN_B4_03 |
composition_bias.A10_LOW | bỏ mặc quái xa/hỗ trợ | EN_B1_03, EN_B1_06 | EN_B2_03 | EN_B3_02 | EN_B4_07 |
composition_bias.none | — | — | — | — | — |
- B4: nguồn = EN_B4_02 (vai bầy B4); khi EN_B4_02 là đích (A03) → nguồn = EN_B4_04 theo MIX. EN_B4_01 (khiên chính diện ×0.15) không bao giờ là đích của hook nào (giữ trần 24, tránh bầy miễn đòn với hero PROJ/AREA).
- Ải Kết/B6: roster trộn → đích = hợp các cột B1–B4 có trong MIX đoạn hiện tại.
- Debug:
director.force_bias <hook> <s>(chỉ bản dev,14§16); telemetryash_spawn_shift{room, hook, s_req, s_eff, pts}. - Hook là điểm nối duy nhất giữa Director và Tro Nhớ cho thành phần spawn; Director không đọc PSP trực tiếp.
15Kịch bản mẫu Hồi I (B1), 1 cho mỗi mục tiêu
Chung: B_room 130, BPS_act 3.4, t_target theo §10.1. Beat từ EV vi phạm F8 → xếp hàng tới khi hợp lệ (≤ 6 s), quá hạn → bỏ. Header CSV:
script_id,row,trigger,at,until,action,target,n,every,pattern,p1,p2,flags,note
Bộ MIX chuẩn B1 (MIX_B1_STD, viết tắt trong các script dưới = 7 dòng MIX 70/8/6/4/5/3/4 cho EN_B1_01…07, §9.1).
13.1 Thanh Tẩy: diệt 150 quái hoặc trụ 60 giây. Vòng vây ở 45% và đòn kẹp ở 70% thời gian. WS_B1_PURGE_01 — Thanh Tẩy (R2–R5)
WS_B1_PURGE_01,1,T,0,,BUDGET,,1.00,,,1.0,CURVE_STD,NO_MESO,B_obj 130
WS_B1_PURGE_01,2,T,0,,MIX,EN_B1_01,70,,,,,,MIX_B1_STD (dòng 2-8)
WS_B1_PURGE_01,3,T,0,,MIX,EN_B1_02,8,,,,,,
WS_B1_PURGE_01,4,T,0,,MIX,EN_B1_03,6,,,,,,
WS_B1_PURGE_01,5,T,0,,MIX,EN_B1_04,4,,,,,,
WS_B1_PURGE_01,6,T,0,,MIX,EN_B1_05,5,,,,,,
WS_B1_PURGE_01,7,T,0,,MIX,EN_B1_06,3,,,,,,
WS_B1_PURGE_01,8,T,0,,MIX,EN_B1_07,4,,,,,,
WS_B1_PURGE_01,9,T,0,,CALL,OBJ_PURGE_START,,,,2,,,"THANH TẨY: diệt 150"
WS_B1_PURGE_01,10,T,0,,HAZ,HZ_B1_FLOOR_COLLAPSE,,,,12,40,,chỉ sân có cờ sàn sụp
WS_B1_PURGE_01,11,PCT,45,,BEAT,EN_B1_01,40,,RING,160,60,ARROW,vòng vây 40 Thây Tro = 20 TP
WS_B1_PURGE_01,12,PCT,70,,BEAT,EN_B1_02,8,,FLANK,0,,ARROW,kẹp 2×4 Quỷ Rãnh = 8 TP
WS_B1_PURGE_01,13,T,0,,WIN,,,,,kills>=150 | t>=60,,,
- Phòng R1: thay dòng 2–8 bằng MIX 80/12/8 (EN_B1_01/02/03), bỏ dòng 10, N giữ 150.
13.2 Canh Lửa: giữ lò lửa canh còn HP tới giây 50. ĐÁP thành công cạnh lò tiếp 15 HP. WS_B1_VIGIL_01 — Canh Lửa
WS_B1_VIGIL_01,1,T,0,,BUDGET,,0.85,,,1.0,CURVE_FLAT,OBJ_ATTACK:40,B_obj round5(110.5)=110
WS_B1_VIGIL_01,2,T,0,,MIX,EN_B1_01,72,,,,,,
WS_B1_VIGIL_01,3,T,0,,MIX,EN_B1_02,10,,,,,,
WS_B1_VIGIL_01,4,T,0,,MIX,EN_B1_03,6,,,,,,
WS_B1_VIGIL_01,5,T,0,,MIX,EN_B1_04,4,,,,,,
WS_B1_VIGIL_01,6,T,0,,MIX,EN_B1_05,4,,,,,,
WS_B1_VIGIL_01,7,T,0,,MIX,EN_B1_06,2,,,,,,
WS_B1_VIGIL_01,8,T,0,,MIX,EN_B1_07,2,,,,,,
WS_B1_VIGIL_01,9,T,0,,OBJ,OBJ_BRAZIER,1,,,300,0,,tâm sân
WS_B1_VIGIL_01,10,T,0,,CALL,OBJ_VIGIL_START,,,,2,,,"CANH LỬA: giữ lò 50 giây"
WS_B1_VIGIL_01,11,PCT,30,,BEAT,EN_B1_01,24,,FLANK,0,,ARROW|OBJ_ATTACK,
WS_B1_VIGIL_01,12,PCT,60,,BEAT,EN_B1_01,30,,ARC@OBJ,220,120,OBJ_ATTACK,dồn vào lò (15 TP)
WS_B1_VIGIL_01,13,PCT,60,,BEAT,EN_B1_05,3,,ARC@OBJ,240,90,,Xác Trương nhắm lò: nổ P trúng lò 10
WS_B1_VIGIL_01,14,EV,OBJ_HP<0.5,,CALL,OBJ_VIGIL_LOW,,,,2,,,"LỬA SẮP TẮT"
WS_B1_VIGIL_01,15,T,0,,WIN,,,,,t>=50 & obj_hp>0,,,
WS_B1_VIGIL_01,16,T,0,,FAIL,,,,,obj_hp<=0,,,phòng chạy tiếp tới 50 s
WS_B1_VIGIL_01,17,T,0,,REWARD,,0,,,obj_hp<=0,,,mất icon thưởng nút
13.3 Gõ Chuông: gõ đủ 3 chuông; mỗi chuông cần 3 nhịp ngân và quét sạch quái nhỏ trong r140. WS_B1_BELLS_01 — Gõ Chuông
WS_B1_BELLS_01,1,T,0,,BUDGET,,1.00,,,1.0,CURVE_STD,,
WS_B1_BELLS_01,2,T,0,,MIX,EN_B1_01,70,,,,,,MIX_B1_STD (dòng 2-8)
WS_B1_BELLS_01,9,T,0,,OBJ,OBJ_BELL,3,,,3,380,,ngân 3 nhịp; cách 380 px
WS_B1_BELLS_01,10,T,0,,CALL,OBJ_BELLS_START,,,,2,,,"GÕ CHUÔNG: 0/3"
WS_B1_BELLS_01,11,EV,BELL_1,,BEAT,EN_B1_01,8,,BURST,BELL_2,,,canh chuông 2
WS_B1_BELLS_01,12,EV,BELL_1,,BEAT,EN_B1_07,2,,AMBUSH,1.0,BELL_2,,Hồn Khói phục quanh chuông 2
WS_B1_BELLS_01,13,EV,BELL_2,,BEAT,EN_B1_01,8,,BURST,BELL_3,,,
WS_B1_BELLS_01,14,EV,BELL_2,,BEAT,EN_B1_01,36,,RING,160,60,ARROW,
WS_B1_BELLS_01,15,PCT,75,,BEAT,EN_B1_04,3,,ARC,200,120,,Khiên Mộ chặn hướng chuông 3
WS_B1_BELLS_01,16,T,0,,WIN,,,,,bells>=3,,,
- Dòng 11+12 cùng
EV BELL_1= 1 beat (F8). Dòng 13 (dồn) và 14 (vây) cùng trigger = 1 beat.
13.4 Thuỷ Triều: trụ qua 3 sóng 15 / 18 / 22 giây; mỗi sóng 3 giây đầu là nghỉ. WS_B1_TIDE_01 — Thuỷ Triều (15 / 18 / 22 s)
WS_B1_TIDE_01,1,T,0,,BUDGET,,0.80,,,1.0,CURVE_TIDE,NO_MESO,sóng 1: B_obj 105
WS_B1_TIDE_01,2,T,0,,MIX,EN_B1_01,80,,,,,,
WS_B1_TIDE_01,3,T,0,,MIX,EN_B1_02,10,,,,,,
WS_B1_TIDE_01,4,T,0,,MIX,EN_B1_03,5,,,,,,
WS_B1_TIDE_01,5,T,0,,MIX,EN_B1_05,5,,,,,,
WS_B1_TIDE_01,6,PH,PH1,,CALL,OBJ_TIDE_WAVE,,,,2,1,,"THUỶ TRIỀU 1/3"
WS_B1_TIDE_01,7,PH,PH2,,BUDGET,,1.00,,,1.1,CURVE_TIDE,NO_MESO,PH2 = T 15; B_obj 130
WS_B1_TIDE_01,8,PH,PH2,,CALL,OBJ_TIDE_WAVE,,,,2,2,,
WS_B1_TIDE_01,9,PH,PH2,,BEAT,EN_B1_01,48,,SWARM,6,0,ARROW,dòng 48 từ Bắc (24 TP)
WS_B1_TIDE_01,10,PH,PH3,,BUDGET,,1.25,,,1.2,CURVE_TIDE,NO_MESO,PH3 = T 33; B_obj 165
WS_B1_TIDE_01,11,PH,PH3,,MIX,EN_B1_01,70,,,,,,MIX_B1_STD (dòng 11-17)
WS_B1_TIDE_01,18,PH,PH3,,CALL,OBJ_TIDE_WAVE,,,,2,3,,
WS_B1_TIDE_01,19,PH,PH3,,BEAT,EN_B1_01,30,,SWARM,6,90,ARROW,2 hướng đối nhau = 1 beat (30 TP)
WS_B1_TIDE_01,20,PH,PH3,,BEAT,EN_B1_01,30,,SWARM,6,270,ARROW,
WS_B1_TIDE_01,21,T,0,,WIN,,,,,wave>=3 & wave_end & elites_alive==0,,,Hồi I không Tinh Anh sóng 3
- Mốc pha: PH1 = T 0, PH2 = T 15, PH3 = T 33, hết sóng 3 = T 55. Mỗi sóng 3 s đầu phase 0.30.
13.5 Đập Tổ: phá 3 Mộ Mở; mỗi tổ còn đứng thả 4 Thây Tro mỗi 6 giây. WS_B1_NEST_01 — Đập Tổ
WS_B1_NEST_01,1,T,0,,BUDGET,,0.90,,,1.0,CURVE_STD,,B_obj round5(117)=115
WS_B1_NEST_01,2,T,0,,MIX,EN_B1_01,70,,,,,,MIX_B1_STD (dòng 2-8)
WS_B1_NEST_01,9,T,0,,OBJ,OBJ_NEST_B1,3,,,260,300,,3 Mộ Mở HP 260; cách ≥ 300 px
WS_B1_NEST_01,10,T,0,,BEAT,EN_B1_01,4,6,NEST@OBJ,,,CHILD,mỗi tổ còn sống: 4 Thây Tro/6 s
WS_B1_NEST_01,11,T,0,,CALL,OBJ_NEST_START,,,,2,,,"ĐẬP TỔ: 0/3"
WS_B1_NEST_01,12,PCT,50,,BEAT,EN_B1_05,4,,FLANK,0,,ARROW,Xác Trương kẹp
WS_B1_NEST_01,13,EV,NEST_DEAD_1,,BEAT,EN_B1_07,3,,AMBUSH,1.0,NEAREST,,
WS_B1_NEST_01,14,EV,NEST_DEAD_2,,BEAT,EN_B1_01,36,,RING,160,60,ARROW,
WS_B1_NEST_01,15,T,0,,WIN,,,,,nests_dead>=3,,,
- Dòng 10 là sinh của đạo cụ (
CHILD), không tính F8.
13.6 Hành Lang: băng qua 1.800 px bẫy tím tới cửa tro; bầy dồn sau lưng mỗi 10 giây. WS_B1_GAUNTLET_01 — Hành Lang (1.800 px, t_target 50)
WS_B1_GAUNTLET_01,1,T,0,,BUDGET,,0.60,,,1.0,CURVE_RUN,,B_obj 80
WS_B1_GAUNTLET_01,2,T,0,,MIX,EN_B1_01,76,,,,,,không vai BOMB (EN_B1_05) / tên cháy (EN_B1_06)
WS_B1_GAUNTLET_01,3,T,0,,MIX,EN_B1_02,12,,,,,,
WS_B1_GAUNTLET_01,4,T,0,,MIX,EN_B1_03,4,,,,,,
WS_B1_GAUNTLET_01,5,T,0,,MIX,EN_B1_04,4,,,,,,
WS_B1_GAUNTLET_01,6,T,0,,MIX,EN_B1_07,4,,,,,,
WS_B1_GAUNTLET_01,7,T,0,,HAZ,HZ_B1_FLOOR_COLLAPSE,,,,2.0,40,,ổ bẫy mỗi 200 px; lệch pha; xin P_TOTAL
WS_B1_GAUNTLET_01,8,T,0,,CALL,OBJ_GAUNTLET_START,,,,2,,,"HÀNH LANG: tới cửa tro"
WS_B1_GAUNTLET_01,9,T,4,,BEAT,EN_B1_01,16,10,SWARM,4,BACK,,dồn sau lưng mỗi 10 s (T 4/14/24/34/44)
WS_B1_GAUNTLET_01,10,T,19,,BEAT,EN_B1_04,4,,LINE,260,48,,hàng Khiên Mộ chừa khe 48 px
WS_B1_GAUNTLET_01,11,T,27,,BEAT,EN_B1_07,2,,AMBUSH,1.0,NEAREST,,
WS_B1_GAUNTLET_01,12,T,39,,BEAT,EN_B1_01,14,,LINE,260,48,,
WS_B1_GAUNTLET_01,13,T,39,,BEAT,EN_B1_04,2,,LINE,280,48,,
WS_B1_GAUNTLET_01,14,T,0,,WIN,,,,,zone_exit,,,
- Kiểm F8: dồn T 4/14/24/34/44 · LINE T 19 (cách 5 s) · vây T 27 · LINE T 39 (cách 5 s) ✓.
13.7 Truy Đuổi: hạ Kẻ Đào Trộm Mộ trước khi hết 45 giây để nhận thưởng nút ×2. WS_B1_CHASE_01 — Truy Đuổi
WS_B1_CHASE_01,1,T,0,,BUDGET,,0.70,,,1.0,CURVE_RUN,,B_obj 90
WS_B1_CHASE_01,2,T,0,,MIX,EN_B1_01,72,,,,,,
WS_B1_CHASE_01,3,T,0,,MIX,EN_B1_02,14,,,,,,
WS_B1_CHASE_01,4,T,0,,MIX,EN_B1_03,4,,,,,,
WS_B1_CHASE_01,5,T,0,,MIX,EN_B1_04,4,,,,,,
WS_B1_CHASE_01,6,T,0,,MIX,EN_B1_07,6,,,,,,
WS_B1_CHASE_01,7,T,0,,OBJ,OBJ_CARRIER,1,,,180,0,,Kẻ Đào Trộm Mộ; khoá 5 s rồi chạy 45 s
WS_B1_CHASE_01,8,T,0,,CALL,OBJ_CHASE_START,,,,2,,,"TRUY ĐUỔI: bắt kẻ trộm tro"
WS_B1_CHASE_01,9,T,14,,BEAT,EN_B1_02,6,,FLANK,0,,ARROW,
WS_B1_CHASE_01,10,T,26,,BEAT,EN_B1_07,2,,AMBUSH,1.0,NEAREST,,
WS_B1_CHASE_01,11,T,38,,BEAT,EN_B1_01,30,,RING,170,90,ARROW,khe 90° để còn đuổi
WS_B1_CHASE_01,12,T,0,,WIN,,,,,carrier_hp<=0 | t>=50,,,
WS_B1_CHASE_01,13,T,0,,REWARD,,2,,,carrier_hp<=0,,,thưởng icon ×2
13.8 Quyết Đấu: hạ Tinh Anh giữa bầy thưa để chọn 1 trong 2 Relic. WS_B1_DUEL_01 — Quyết Đấu (ELT, t_target 65)
WS_B1_DUEL_01,1,T,0,,BUDGET,,0.50,,,1.0,CURVE_GATE,NO_MESO,B_obj 65
WS_B1_DUEL_01,2,T,0,,MIX,EN_B1_01,80,,,,,,
WS_B1_DUEL_01,3,T,0,,MIX,EN_B1_02,10,,,,,,
WS_B1_DUEL_01,4,T,0,,MIX,EN_B1_03,6,,,,,,
WS_B1_DUEL_01,5,T,0,,MIX,EN_B1_05,4,,,,,,
WS_B1_DUEL_01,6,T,0,,CALL,OBJ_DUEL_START,,,,2,,,"QUYẾT ĐẤU"
WS_B1_DUEL_01,7,T,2,,ELITE,EL_B1_01,1,,FAR,*,1.4,,Đồ Tể Mộ; Ấn nhóm an toàn Hồi I
WS_B1_DUEL_01,8,EV,ELITE_HP<0.5,,BEAT,EN_B1_01,24,,RING,170,60,ARROW,ép khi Tinh Anh nửa máu
WS_B1_DUEL_01,9,PCT,60,,BEAT,EN_B1_03,3,,EDGE,,,,3 Thầy Bùa: đạn Y phản được
WS_B1_DUEL_01,10,T,0,,WIN,,,,,elites_dead>=1,,,Relic chọn 1/2
13.9 Săn Tinh Anh: hạ 2 Tinh Anh; chỉ 1 con được vung đòn nặng vào bạn cùng lúc. WS_B1_HUNT_01 — Săn Tinh Anh (ELT, t_target 65)
WS_B1_HUNT_01,1,T,0,,BUDGET,,0.85,,,1.0,CURVE_GATE,NO_MESO,B_obj 110
WS_B1_HUNT_01,2,T,0,,MIX,EN_B1_01,70,,,,,,MIX_B1_STD (dòng 2-8)
WS_B1_HUNT_01,9,T,0,,CALL,OBJ_HUNT_START,,,,2,,,"SĂN TINH ANH: 0/2"
WS_B1_HUNT_01,10,T,3,,ELITE,EL_B1_01,1,,FAR,*,1.0,,
WS_B1_HUNT_01,11,PCT,25,,BEAT,EN_B1_01,36,,RING,160,60,ARROW,
WS_B1_HUNT_01,12,EV,ELITE1_HP<0.4 | PCT>=40,,ELITE,EL_B1_02,1,,FAR,*,1.0,,Kẻ Tụng Tro: hồi sinh xác bầy
WS_B1_HUNT_01,13,PCT,70,,BEAT,EN_B1_02,8,,FLANK,0,,ARROW,
WS_B1_HUNT_01,14,T,0,,WIN,,,,,elites_dead>=2,,,Relic chọn 1/2
- HEAVY 1: EL_B1_02 vào khi EL_B1_01 còn sống → chờ
STALKtới khi token rảnh; Tụng Hồi (2.5 s) là đòn hỗ trợ không nhắm hero → không cần HEAVY.
13.10 Giải Cứu: phá kén Kẻ Thức HP 400; mỗi 100 HP mất kén rung vỏ và gọi vòng bầy. WS_B1_RESCUE_01 — Giải Cứu
WS_B1_RESCUE_01,1,T,0,,BUDGET,,0.90,,,1.0,CURVE_FLAT,,B_obj 115
WS_B1_RESCUE_01,2,T,0,,MIX,EN_B1_01,70,,,,,,MIX_B1_STD (dòng 2-8)
WS_B1_RESCUE_01,9,T,0,,OBJ,OBJ_COCOON,1,,,400,0,,≤ 25 sát thương/cú; rung vỏ mỗi 100 HP
WS_B1_RESCUE_01,10,T,0,,CALL,OBJ_RESCUE_START,,,,2,,,"GIẢI CỨU: phá kén"
WS_B1_RESCUE_01,11,EV,COCOON_SHELL,,BEAT,EN_B1_01,12,,RING@OBJ,160,60,,mỗi lần rung vỏ (3 lần); bất tử 3 s
WS_B1_RESCUE_01,12,PCT,40,,BEAT,EN_B1_07,2,,AMBUSH,1.0,NEAREST,,
WS_B1_RESCUE_01,13,PCT,65,,BEAT,EN_B1_02,8,,FLANK,0,,ARROW,
WS_B1_RESCUE_01,14,T,0,,WIN,,,,,obj_hp<=0,,,Hồi I: SKILL + META
RING@OBJ12 con (6 TP) là beat dồn nhỏ quanh kén; F2 với hero vẫn áp (con nào < r90 hero → dời).
16Telemetry, debug, núm chỉnh
📊 Núm chỉnh Director (tuning.director)
| Núm | Giá trị | Đơn vị | Ghi chú |
|---|---|---|---|
tick_s | 0.25 | s | World clock; draft ×0.15 làm chậm cả Director |
wallet_cap | 0.5 | × B_obj | wallet ≤ 0.5 · B_obj |
wallet_debt_min | −0.3 | × B_obj | beat được nợ tới −0.3 · B_obj |
opening_fill | 0.45 | × B_obj | ví mở màn, rải trong 2 s |
opening_spread_s | 2 | s | — |
b_room | I: 130, II: 145, III: 160, IV: 170, V: 180, VI: 150 | TP | B_obj = round5(B_room × obj_mult) |
bps | I: 3.4, II: 3.8, III: 4.2, IV: 4.5, V: 5, VI: 4.4 | TP/s | = CRV_bps_act |
obj_mult | PURGE: 1, VIGIL: 0.85, BELLS: 1, TIDE: 0.8/1/1.25, NEST: 0.9, GAUNTLET: 0.6, CHASE: 0.7, DUEL: 0.5, HUNT: 0.85, RESCUE: 0.9 | × | TIDE theo sóng 1/2/3 |
minute_ramp | 0.04 | ×/phút | BPS × (1 + 0.04 × min(m_act, 6)) |
minute_ramp_max | 6 | phút | — |
mrn02_per_rank | 0.15 | ×/bậc | BPS + density × (1 + 0.15 × MRN02) |
mut09_mult | 1.2 | × | MUT09 Bầy Liền BPS + density |
endless_density_per_loop | 0.05 | ×/vòng | trần 1.25 |
endless_density_cap | 1.25 | × | — |
perf_t2_density | 0.9 | × | PerfGovernor bậc 2 |
cap_count | 250 | quái | Deck preset 180 |
group_size | SWARM: 6/12, FLOCK: 6/12, LUNGE: 2/4, RANGED: 1/2, BOMB: 1/2, AMBUSH: 1/2, ROLL: 1/2, GRAPPLE: 1/2, CONE: 1/2, SHIELD_B1: 1/3, SHIELD_B4: 2/4, STATIC: 1/1, SUPPORT: 1/1, NEST: 1/1, RETAL: 1/1, CHARGE: 1/1, TETHER: 2/2 | quái | TETHER = 1 cặp; SHIELD_B4 = EN_B4_01 hàng ngang 2–4; EN_B4_02 (vai bầy B4) dùng SWARM 6–12. 2026-11-07 - doc 15 Q16: SHIELD_B4 [4, 8] → [2, 4] |
same_id_groups_max | 2 | nhóm liên tiếp | trừ SWARM/FLOCK |
group_caps | SWARM: None, LUNGE: 16, RANGED: 10, SHIELD: 10, SHIELD_B4: 24, BOMB: 8, AMBUSH: 6, STATIC: 4, FLOCK: 40, NEST: 2, SUPPORT: 3, ROLL: 6, CHARGE: 6, GRAPPLE: 6, RETAL: 8, CONE: 8, TETHER: 3, DRIFT: 12, ELITE: 2, MINI: 1, BOSS: 1 | quái sống/phòng | SHIELD = B1 (EN_B1_04) 10; SHIELD_B4 = EN_B4_01 24 (MIX 12%, không là đích composition_bias); SWARM null = không trần (gồm EN_B4_02 vai bầy B4, MIX 63%, sân rỉ boss/mini); FLOCK = EN_B2_05 40; ELITE HUNT/MRN14 3; TETHER = cặp. 2026-11-07 - doc 15 Q16: bỏ SHIELD B4 70 / FLOCK B4 60 |
reserve_tp | ELITE: 12, MINI: 30, BOSS: 60 | TP | giữ chỗ trong TOF |
marked_tp_mult | 1.5 | × | quái mang Ấn (MRN05) |
target_alive | 150/250 | quái | đích người chơi thấy ở đỉnh phòng |
pattern_defaults | PACK_r: 40, PACK_stagger_s: 0.3, RING_r: 160, RING_r_min: 140, RING_gap: 60, RING_gap_min: 45, ARC_r: 200, ARC_deg: 120, TRICKLE_period: 6.5, TRICKLE_n: 2, SWARM_s: 6, AMBUSH_warn_s: 1, AMBUSH_r: 120/220, FAR_min: 220, FAR_grid: 64, LINE_dist: 260, LINE_gap: 48, BURST_s: 0.5, FLANK_sync_s: 0.3, EDGE_fwd_pct: 60, EDGE_fwd_cone: 60 | px · s · ° | — |
offscreen_margin | 32 | px | ngoài khung + 32 px (demo spawn_margin 30) |
spawn_mark_s | 0.6 | s | F1; AMBUSH 1.0; tái tụ EN_B4_06 0.8 |
spawn_safe_radius | 90 | px | F2; RING ≥ 140; AMBUSH ≥ 120 |
spawn_no_windup_s | 0.8 | s | F3 |
summon_vortex_s | 1 | s | F4 |
ring_wall_r | 160 | px | không RING khi hero trong 160 px của tường (dời 1 s) |
place_retries | 6 | điểm | F7 |
beat_gap_s | 8 | s | F8 beat vây |
push_gap_s | 4 | s | F8 beat dồn |
post_surround_swarm_only_s | 4 | s | F8 |
offscreen_arrow_s | 0.8 | s | F9 |
elite_breather | 6 | s | F11 (demo) |
p_overlap | 0.3/60/80 | s · % · px | F12 P mới trì 0.3 s nếu P khác > 60% đầy trong r80 (demo violet_overlap_radius) |
boss_windup_guard_s | 0.6 | s | F13 |
post_dash_block | 45/200/0.5 | ° · px · s | F14 |
room_start_no_windup_s | 2 | s | F16 |
leash_px | 600 | px | 15 §5.2 (14 §16.2: 900 — open issue) |
leash_s | 3 | s | hoàn 100% TP |
perf_enter_ms | 16.6 | ms | p95 trong 2 s (bậc 3: 3 s) |
perf_exit_ms | 14 | ms | p95 trong 5 s |
perf_t1 | death_vfx_frame: 6, particles_mult: 0.5 | — | bậc 1 |
perf_t2_far_ai_hz | 5 | Hz | bậc 2 |
perf_t3_cap | 180 | quái | bậc 3 |
death_vfx_queue_frames | 3 | khung | — |
elite_spawn_min_dist | 220 | px | FAR |
elite_duel_hp_mult | 1.4 | × | ELT DUEL |
elite_room_hp_mult | 0.8 | × | Tinh Anh trong CMB/CHL, không Relic |
chl_elite_at | 0.4 | × t_target | CHL biến thể ASH |
mrn14_every_rooms | 3 | phòng | 1 Tinh Anh ở 30% thời lượng |
mrn14_at | 0.3 | × t | — |
mrn05_marked_pct | 10 | % | quái thường từ Hồi II mang 1 Ấn an toàn |
em04_call | 6/8 | quái · s | EM04 Gọi Bầy 6/8 s |
em_pool | I: EM01/EM02/EM03/EM07/EM11, II: EM01/EM02/EM03/EM04/EM05/EM06/EM07/EM08/EM09/EM10/EM11/EM13/EM14, III: EM01–EM16 | Ấn | III–IV, Kết: EM01–EM16 |
arena_r | MBS: 200, BOS: 220, B5: 260, B6: 240 | px | MBS/B5/B6 [ASSUMED] |
arena_close_px | 120 | px | hero tới tâm − 120 px → cửa đóng |
feeder_every_s | 6.5 | s | TRICKLE sân rỉ |
feeder_n | 2 | quái | ≈ 6.2/20 s |
adds_cap | MBS: 30, BOS: 40, FINAL: 40 | quái | — |
phase_feeder_pause_s | 3 | s | đổi pha |
phase_push_r | 160 | px | — |
t_target | PURGE: 50/55, VIGIL: 50/50, BELLS: 55/60, TIDE: 55/60, NEST: 55/60, GAUNTLET: 50/55, CHASE: 50/50, DUEL: 65/70, HUNT: 65/70, RESCUE: 55/60 | s | Hồi I / II–IV (DUEL/HUNT II–IV 70–75) |
objective_caps | PURGE_s: 60, VIGIL_s: 50, CHASE_s: 45 | s | — |
kill_per_min | 0_10s: 90, 10_30s: 180, 30s_end: 200, floor_from_15s: 120 | kill/phút | ~600 kill/Hồi |
raw_threat_cap | I: 15, II: 16, III: 17, IV: 18, V: 19 | % HP_hero_ref/s | vượt → hoãn token |
gate_alive | DUEL: 60, HUNT: 140 | quái | add boss/mini ≤ 40 |
tp_class | swarm: 0.5, lunger: 1, ranged: 1.5, shield: 2, support: 3, nest: 4 | TP | TP trung bình theo lớp, cùng thang TP từng id (15 §2.1, 0.5–4.0) mà director tiêu; Tinh Anh/Mini/Boss không có TP lớp, giữ chỗ bằng director.reserve_tp |
| Sự kiện | Field |
|---|---|
| room_start | run_id, act, node, objective, script_id, B_obj, density_mult, bias hook + s |
room_end | t_room, kills, kills_by_id{}, max_alive, avg_alive, tof_avg, beats_fired, beats_dropped, obj_result (win/fail/×2), hp_lost_pct |
beat | script_id, row, pattern, n_req, n_placed, t |
perf_tier | room, tier, alive, fx_active, p95 |
ash_spawn_shift | room, hook, s_req, s_eff, pts |
- KPI: kill/phút ≥ 120 từ phút 3 mỗi Hồi (Bible P2) ·
max_alive150–250 ở đỉnh phòng · trúng đòn tím < 30% ·hp_lost_pcttrung vị/phòng 25–40% · thời lượng phòng trung vị trong16§6 ± 20 s. - Debug (bản dev): overlay TOF/target/ví/BPS + vòng spawn + ô cấm r90 ·
director.force_script <id>·director.force_bias <hook> <s>·director.freeze· F10 demo (+150 quái) giữ. - Núm
director.csv:B_room_*,BPS_*,obj_mult_*,minute_ramp0.04,minute_ramp_max6,wallet_cap0.5,opening_fill0.45,beat_gap_s8,push_gap_s4,leash_px600,leash_s3,feeder_every_s6.5,feeder_n2.
17Quy tắc cho dev/AI
- Không hard-code wave: mọi phòng chạy từ
wave_scripts.csv+director.csv; thêm phòng = thêm script,wave_lintphải xanh. - Director chỉ spawn qua
SpawnPlanner.Place→ luật F1–F17 luôn chạy; không đường tắt "spawn tại chỗ" cho bất kỳ hệ nào (Ấn, mutator, Khăn Tang, boss triệu hồi dùng cùng API với cờCHILD/vortex). - TP chỉ ở bảng §2.1; quái mới hậu 1.0 phải có TP + nhóm trần trước khi vào MIX.
- Quái có miễn/giảm sát thương theo hướng (khiên chính diện) không bao giờ là vai bầy, trần sống ≤ 24/phòng, không là đích
composition_bias; đổi MIX phải quabalance_calc director --check-kpm(≥ 120 kill/phút mọi hero). - Không chạm token, tell, windup, sát thương từ Director; Director chỉ quyết ai, bao nhiêu, ở đâu, khi nào.
- Tro Nhớ chỉ đổi thành phần qua
composition_bias.<axis>(§12), trần s 15%, không ở phòngNO_MESO; Director không đọc PSP. - Trần 250 (Deck 180) là cứng; PerfGovernor không bao giờ hạ tell/va chạm/ấn spawn/mũi tên báo.
- Mục tiêu chỉ 10 id Bible (
PURGEVIGILBELLSTIDENESTGAUNTLETCHASEDUELHUNTRESCUE); thêm loại = mụcDEC-. - Đạo cụ mục tiêu dùng id
OBJ_<NAME>, không vào roster kẻ địch, không có kit đòn, không tell. - Số
[ASSUMED]chỉnh qua CSV; KPI §14 lệch → chỉnhB_room/BPS/obj_multtrước, không đổi luật công bằng. - Tên UI tiếng Việt có dấu; không tên/thuật ngữ của sản phẩm có thật.
18Quyết định đã chốt
| Q | Quyết định | Lý do |
|---|---|---|
| Q1 Mô hình | 2 lớp: ngân sách TP (ví + target theo phase) + beat kịch bản trừ ví (nợ ≤ 30%) | demo theo giây không co giãn theo Hồi/Khăn Tang/hero; ngân sách giữ mật độ, beat tạo khoảnh khắc |
| Q2 TP | bầy 0.5 · thường 1.0–2.5 · hỗ trợ 3 · tổ 4; M/L/XL giữ chỗ 12/30/60 | sống ~171–175 ở B_room, đỉnh 250 với TIDE/MRN02 (khoá "150–250 trên màn") |
Q3 B_room | 130 / 145 / 160 / 170, ải Kết 180, B6 150 | TP TB biome 0.76–0.93 → số sống gần đều qua Hồi (B4 ~187), độ khó tăng theo vai |
| Q4 BPS | 3.4 / 3.8 / 4.2 / 4.5 (+4%/phút trong Hồi, trần 6) | kill ~150–180/phòng → ~600 kill/Hồi (Bible §2.1), ≥ 120 kill/phút |
Q5 Số ví dụ của 14 | 2026-11-07 — 14 §8.2/§13 dùng "ngân sách 100/120 điểm" làm minh hoạ; số thật = B_obj §2.3 (VIGIL Hồi II 125, NEST Hồi III 145); công thức s · B không đổi | doc chạy song song; giữ 1 nguồn số |
| Q6 Không trần thời gian | chỉ PURGE (60 s), VIGIL (50 s), TIDE (sóng), CHASE (45 s) có đồng hồ; còn lại áp lực tăng tới khi xong | không "hết giờ = thua" ngoài Bible; giữ P1 tốc độ |
| Q7 Thua mục tiêu | chỉ VIGIL có thua (mất icon thưởng nút); CHASE thoát = thưởng ×1 | Bible không định nghĩa thua phòng; thua run chỉ khi chết |
| Q8 Vật mục tiêu | sát thương cố định theo hạng (S 6, M 20, P 10), lò HP 300 / kén HP 400 không co giãn | Bible ghi HP cố định; số cố định → không lệch theo Hồi/Khăn Tang |
Q9 OBJ_* | 2026-11-07 — tiền tố dữ liệu OBJ_<NAME> cho đạo cụ mục tiêu (lò, chuông, tổ, kén, người mang báu) | Bible §11 không có id đạo cụ; không phải thực thể roster, không đổi số lượng khoá |
Q10 WS_ | 2026-11-07 — tiền tố dữ liệu WS_<biome>_<OBJ>_<nn> cho dòng kịch bản sóng | id dữ liệu nội bộ, không hiển thị |
| Q11 Leash | 600 px / 3 s, hoàn TP | khung 480 px nhỏ hơn demo (640) |
| Q12 F8 | beat vây ≥ 8 s, beat dồn ≥ 4 s | "dày nhưng luôn có lối thoát" (demo §1) |
| Q13 PerfGovernor | 3 bậc theo p95; bậc 3 = trần 180 | Bible §10.4 dự phòng preset Deck 180 |
| Q14 Sân boss | rỉ 2 con/6.5 s (≈ 6.2/20 s), trần phụ 30/40 | Bible "≥ 6 quái S/20 s" |
| Q15 DUEL HP × 1.4 [ASSUMED] | lấp Cổng 65–75 s khi bầy chỉ 0.50 | Tinh Anh TTK 25–45 s (10 §2.4) |
| Q16 Vai bầy B4 | 2026-11-07 — vai bầy B4 = EN_B4_02 (MIX 63%, nhóm SWARM, sân rỉ boss/mini); EN_B4_01 khiên MIX 12%, trần sống 24, hàng 2–4, không là đích composition_bias (A05 → EN_B4_06 + EN_B4_05, A06 → EN_B4_06); MUT04 ở B4 = 30% EN_B4_02 spawn FLANK | khiên chính diện ×0.15 làm bầy Hồi IV miễn đòn → hero PROJ/AREA (H03, H05, H07, H08) không đạt P2 ≥ 120 kill/phút, hero ZONE/DOT được lợi; TP 0.6 bay giữ mật độ ~187 |
| Q17 Id đạo cụ theo biome | 2026-11-07 - đạo cụ mục tiêu có id riêng theo biome (giống OBJ_NEST_B1..B4) vì doc 51 §1362 bắt id duy nhất; encounters.json directors[].objective_props đã trỏ id _Bn | B1 giữ OBJ_BRAZIER · OBJ_BELL · OBJ_CARRIER · OBJ_COCOON; B2–B4 thêm hậu tố _B2/_B3/_B4; khớp biome B2–B4, encounters.json, doc 20 |