1Tổng quan
Mục đích: tổng quát hoá hệ phòng thủ demo cho cả 12 hero: ngôn ngữ tell Y/P/N, loại đạn, hợp đồng ĐÁP/verb giữ/Lướt/Né Hoàn Hảo/Phản chung, bảng phòng thủ từng hero, trợ năng, luật công bằng mọi hạng địch. Phụ thuộc: 00-Design-Bible.md + data/_bible.json (INV-01..INV-18, §5.1 bảng ĐÁP/verb giữ, §5.2 mass_class, §4.3 Thương Xót, meta.accessibility); 10-Combat-Core.md (tick, §4 Thế, §5 trạng thái, §6 feedback, §7.4 thứ tự phân giải); GDD demo GDD/03-Defense.md, Tuning.csv. Được dùng bởi: doc hero H01–H12 (verb ĐÁP, verb giữ, đòn Phản), doc kẻ địch/Tinh Anh/mini/boss (soạn đòn, tell, token), doc hazard/mutator/Khăn Tang, doc âm thanh/VFX/UI, Sân Tập (Sân Tập ST_YARD), code Defense/Tell/Tokens.
2Ba lớp phòng thủ (mọi hero)
| Lớp | Nút | Trả lời | Rủi ro | Thưởng |
|---|---|---|---|---|
| ĐÁP | chạm RB/RMB | 100% tell vàng Y (cận chiến + đạn), 360° | hụt khoá 0.30 s | khựng/Thế địch, làm chậm, Dư Âm +4, tài nguyên hero, mở Phản (cận chiến) |
| Verb giữ | giữ RB/RMB | theo từng hero (chặn/giảm/đặt bẫy/di chuyển), không bao giờ trả lời P | tốn Thế hoặc giới hạn riêng; P trong verb chặn/giảm = Vỡ Thế | an toàn, chiến thuật riêng |
| Lướt | A/Space | mọi thứ, kể cả P và N | tốn lượt | Né Hoàn Hảo: World chậm, hoàn lượt, Dư Âm +4 |
- Tím P: chỉ Lướt/đi ra. Vùng đọng N: đi ra hoặc Lướt; không ĐÁP được. Không tồn tại đòn địch không tell (INV-02).
3Ngôn ngữ tell (INV-02, mọi hạng gồm boss)
📊 Màu tell & windup tối thiểu (tuning.defense)
- Y
#ffd84aINV-02- P
#b14cffINV-02- N
#e8e4f0vùng đọng N / ấn spawn
| Núm | Giá trị | Đơn vị | Ghi chú |
|---|---|---|---|
windup_y_s | 0.3 | s | S; M/L/XL 0.45 (INV-03) |
windup_y_mlxl | 0.45 | s | M/L/XL |
windup_p_s_m | 0.45 | s | P vùng hiện trước va chạm S/M |
windup_p_lxl | 0.6 | s | L/XL |
chain_gap | 0.35 | s | khe chuỗi Y (21 tick) |
proj_p_lead | 0.45 | s | đường tím trước khi đạn P tới (INV-13) |
feint_max | 0.35 | s | nhịp lừa ASH thêm windup ≤ 0.35 s |
1.1 Ba lớp tell
| Lớp | Dùng cho | Hình (world-space) | Âm | Trả lời |
|---|---|---|---|---|
Y vàng #ffd84a | đòn rời: 1 cú đánh hoặc 1 viên đạn, đúng 1 frame va chạm | glint 1 ở mũi vũ khí/đầu đạn khi windup bắt đầu · glint 2 đúng 7 tick (0.12 s) trước va chạm · viền trắng #ffffff 1 px quanh thân địch bật ≥ 2 frame từ glint 2 · pose windup giữ ≥ 3 frame, khác pose đi | EnemyWindupStart tellClass=Y (frame đầu windup = glint 1); lịch PlayS… SFX_SHARED_tell_y_glint1 (glint 1, lớp nhẹ) + EnemyWindupStart tellClass=Y → lịch PlayScheduled đỉnh transient đúng… SFX_SHARED_tell_y_tinh "tinh" (glint 2, lớp chính) — id theo doc 32 §2 | ĐÁP · verb giữ (nếu hình che) · Lướt |
P tím #b14cff | vùng sàn, nổ, lao/nhảy nghiền, đạn không đỡ | vùng sàn đúng hình hitbox: viền 2 px hiện ngay kích thước cuối từ tick 0 (độ mờ 60% → 100%), fill 25% lớn dần từ tâm, đầy đúng tick va chạm · hào quang tím 2 px quanh thân · ! tím 7×9 px trên đầu (lớp Prioritize) | EnemyWindupStart tellClass=P (cả hazard/Khăn Tang/mutator P); chọn bả… SFX_SHARED_tell_p_swell ù trầm, cao độ lên dần tới va chạm + EnemyImpact tellClass=P (frame va chạm tím) SFX_SHARED_tell_p_impact đúng frame va chạm — id theo doc 32 §2 | chỉ Lướt / ra khỏi vùng |
N vùng đọng #e8e4f0 | sát thương sàn kéo dài, bẫy, luồng phun, vùng lưu lại | viền chấm 2 px + fill chấm thưa 15%; hiện mờ dần 0.30 s KHÔNG gây sát thương trong lúc hiện; không glint, không gạch chéo | không SFX tell (chỉ âm môi trường) | đi ra / Lướt; ≤ 4 sát thương mỗi tick 0.5 s |
- Đòn nhiều nhịp Y (Y×n): mỗi nhịp có glint 1 ở đầu khe + glint 2 + SFX riêng; khe giữa 2 nhịp ≥ 0.35 s (21 tick).
- P còn lưu sau va chạm (lửa, vũng) → đổi sang hình N ngay tick hết active.
- Ấn spawn
#e8e4f0(INV-14): vòng LIỀN + xoáy tro, không bao giờ là chấm → không lẫn với N. - Boss: cùng màu, cùng luật; glint ×1.5 (7×7 px thay 5×5 px); SFX thêm lớp trầm "boss" nhưng giữ "tinh"/"ù" làm lớp chính.
- Bảo vệ tell: dải hue 32–62° (S ≥ 45%) và 260–290° chỉ cho tell (INV-01a); FX hero trong r24 quanh viền P giảm 30% độ mờ; mây/sương/bóng tối vẽ dưới lớp tell (INV-18); Ẩn Ảnh EM07 vẫn vẽ tell/viền/glint/vòng sàn 100%.
1.2 Thời lượng tối thiểu
| Khoá | S (thường) | M (Tinh Anh) | L (mini) | XL (boss) |
|---|---|---|---|---|
| Windup Y | 0.30 s · 18 tick | 0.45 · 27 | 0.45 · 27 | 0.45 · 27 |
| Windup P (vùng hiện trước va chạm) | 0.45 · 27 | 0.45 · 27 (EM06 Gai Ngược = 0.45) | 0.60 · 36 [ASSUMED] | 0.60 · 36 [ASSUMED] |
| Khe chuỗi Y | 0.35 · 21 | 0.35 · 21 | 0.35 · 21 | 0.35 · 21 |
| Đạn P: đường tím trên sàn trước khi tới | 0.45 · 27 | 0.45 | 0.45 | 0.45 (INV-13) |
| Glint 1 hiển thị | 4 frame | 4 | 4 | 4 |
| Glint 2 → va chạm | 7 tick | 7 | 7 | 7 |
| Báo đổi thế Tro Nhớ trước khi hiệu lực | — | 1.0 s | 1.0 s | 1.0 s (INV-15) |
- MRN12 (−20% thời gian hồi sau đòn), Ấn, mutator, Tro Nhớ KHÔNG giảm các số trên (INV-03, INV-15). Nhịp lừa ASH: windup thêm ≤ 0.35 s, glint 2 vẫn đúng 7 tick trước va chạm.
1.3 Loại đạn
Loại (proj_cat) | Tell | Hình | ĐÁP | Verb giữ | Lướt | Đánh hero |
|---|---|---|---|---|---|---|
Y_REFLECT (đạn nhẹ: cầu, tên, móc, dao) | Y | lõi tối #2e464c, viền 1 px #9ff3ff (alt LUT ramp #e8e4f0 khi chơi H10/H12, 30 §3.5), vành #ffd84a nháy 8 Hz suốt đường bay (runtime, không nướng vào sheet; 31 §10.2), bóng sàn; KHÔNG tâm trắng (INV-01c); ≤ 7 tick tới hero (dự đoán quét) → vòng trắng 2 frame | trả lời; kết quả theo hero (bảng §3: phản / huỷ / bắt / cắt / quăng ngược) | verb chặn đạn (H01 Thủ, H02 tường, H05 Quỹ Đạo, H09 Lưới Xu) dập tắt | xuyên qua | không phá (trừ cờ destructible) |
Y_HEAVY (vật nặng: đá lăn, đe, thùng, quan tài) | Y | sprite vật + glint vàng + viền trắng như đòn cận chiến | trả lời: dừng/vỡ vật, KHÔNG bao giờ phản ngược | tường H02 chặn; verb khác không chặn | xuyên qua | không phá |
P (đạn không đỡ) | P | lõi rỗng + đuôi ! tím; đường/vòng tím trên sàn ≥ 0.45 s trước khi tới; ≤ 140 px/s; ≤ 2 viên P trên màn (INV-13) | không tác dụng | xuyên qua mọi tường/lưới/vòng | chỉ Lướt / tránh | không phá |
cờ destructible (gắn thêm cho Y, vd cầu độc EN_B2_03) | Y | như Y_REFLECT (lõi tối #2e464c, vành #ffd84a 8 Hz) + vỏ nứt: viền 1 px #9ff3ff nét đứt (alt LUT #e8e4f0 khi H10/H12) | như Y | như Y | như Y | 1 cú hero bất kỳ phá (HP 1) |
- Khuôn phản đạn chung (mọi kết quả "phản"): đạn đổi sang màu slot hero + lõi
#fff6f0(INV-01a); tốc ×1.6; sát thương = 3 × sát thương gốc của đạn × (1 + DMG_INC),PROJ, được chí mạng; bẻ hướng 540°/s về kẻ bắn nếu còn sống trong 300 px, nếu không về quái gần nhất trong nón 120° phía trước hero; xuyên 3. Kẻ bắn trúng đạn của chính nó: S chết; M/L/XL −40 Thế + khựng anim 0.6 s (canon demo, không phải Choáng STS_STUN). - Đạn địch tối đa 12 trên màn; mỗi loạt nhắm hero ăn 1 token đạn (≤ 3, INV-08).
4Hợp đồng phòng thủ chung (mọi verb của mọi hero phải thoả)
📊 Núm phòng thủ (tuning.defense)
| Núm | Giá trị | Đơn vị | Ghi chú |
|---|---|---|---|
windup_y_s | 0.3 | s | S; M/L/XL 0.45 (INV-03) |
windup_y_mlxl | 0.45 | s | M/L/XL |
windup_p_s_m | 0.45 | s | P vùng hiện trước va chạm S/M |
windup_p_lxl | 0.6 | s | L/XL |
chain_gap | 0.35 | s | khe chuỗi Y (21 tick) |
proj_p_lead | 0.45 | s | đường tím trước khi đạn P tới (INV-13) |
glint1_frames | 4 | frame | glint 1 hiển thị |
glint2_ticks | 7 | tick | glint 2 → va chạm (0.12 s) |
glint_px | 5 | px | boss 7×7 (×1.5) |
glint_px_boss | 7 | px | — |
ash_telegraph | 1 | s | báo đổi thế Tro Nhớ (INV-15) |
feint_max | 0.35 | s | nhịp lừa ASH thêm windup ≤ 0.35 s |
tell_y_hex | #ffd84a | hex | INV-02 |
tell_p_hex | #b14cff | hex | INV-02 |
tell_n_hex | #e8e4f0 | hex | vùng đọng N / ấn spawn |
tell_p_fill_pct | 25 | % | fill P lớn dần từ tâm |
tell_n_fill_pct | 15 | % | fill chấm N |
tell_n_fade_in | 0.3 | s | không sát thương lúc hiện |
tell_hero_fx_fade_pct | 30 | % | FX hero trong r24 quanh viền P giảm 30% độ mờ |
proj_p_speed_max | 140 | px/s | INV-13 |
proj_p_onscreen_max | 2 | viên | INV-13 |
proj_glint_hz | 8 | Hz | glint Y_REFLECT nhấp nháy |
reflect_speed_mult | 1.6 | × | khuôn phản đạn chung |
reflect_dmg_mult | 3 | × | 3 × sát thương gốc × (1 + DMG_INC) |
reflect_homing | 540 | °/s | bẻ hướng về kẻ bắn |
reflect_seek_range | 300 | px | — |
reflect_seek_cone | 120 | ° | nếu kẻ bắn chết |
reflect_pierce | 3 | mục tiêu | — |
reflect_self_hit_poise | 40 | điểm | kẻ bắn trúng đạn của mình: M/L/XL −40 Thế + khựng anim 0.6 s |
reflect_self_hit_stagger | 0.6 | s | — |
answer_window_min_ticks | 9 | tick | kẹp W 9–15 tick |
answer_window_max_ticks | 15 | tick | — |
answer_refresh | 0.1 | s | thành công: phần còn lại W = max(còn lại, 6 tick) |
answer_whiff_lock | 0.3/0.45/0.6 | s | MRN07 bậc 0/1/2 (18/27/36 tick) |
answer_move_mult | 0.5 | × | trong W đi ×0.5 |
answer_res_floor_mrn07 | 20 | % | MRN07 bậc 2: không cộng tài nguyên khi < 20% |
answer_bonus_dmg_cap | 2 | × POWER | thưởng riêng ≤ 2.0 × POWER/mục tiêu |
answer_stun_s | 1 | s | ĐÁP lên S: STS_STUN 1.0 s + đẩy 30 px |
answer_knock_s | 30 | px | — |
answer_shield_stun | 1.5 | s | quái khiên vỡ + STUN 1.5 s |
answer_last_chain_stagger | 1 | s | Tinh Anh khựng anim nhịp cuối chuỗi |
answer_ult_gain | 4 | Dư Âm | ĐÁP +4 |
perfect_dodge_ult_gain | 4 | Dư Âm | Né Hoàn Hảo +4 |
answer_hitstop | 0.08 | s | — |
poise_cost_mult | 1 | × sát thương chặn | verb giữ tốn Thế |
poise_min_cost | 6 | điểm/đòn | — |
guard_break_time | 0.9 | s | Vỡ Thế hero 54 tick, không huỷ được |
guard_break_dmg_mult | 1.5 | × | — |
dash_time | 0.14 | s | 9 tick |
dash_dist_min | 72 | px | theo hero 72–96 |
dash_dist_max | 96 | px | INV-12 |
dash_iframes | 0.2 | s | 12 tick (INV-12) |
perfect_dodge_lead | 0.15 | s | Lướt bắt đầu ≤ 9 tick trước va chạm |
perfect_dodge_cd | 1 | s | ≤ 1 lần/1.0 s |
perfect_dodge_refund | 1 | lượt | — |
riposte_window | 1 | s | cửa sổ Phản 60 tick |
counter_dmg_budget | 180 | sát thương | POWER 10, không build; lệch ≤ ±10% (H01 90 luôn chí mạng ×2) |
counter_area_r_min | 40 | px | vùng ≥ r40 |
counter_startup_max | 0.1 | s | — |
riposte_lunge | 80 | px | lao ≤ 80 px |
riposte_lunge_time | 0.1 | s | — |
2.1 Hợp đồng ĐÁP (INV-11)
| Khoá | Luật |
|---|---|
| Nút | chạm RB/RMB; cửa sổ mở ở tick bấm (tick 0) |
| Cửa sổ W | W = ceil((answer_window_hero + mercy + edge_relic) × 60), kẹp 9–15 tick (0.14–0.24 s) |
| Hit-test | mọi đòn Y có frame active chạm hurtbox hero (CIRCLE r7 / hộp màn với đạn) trong W → Answered; 360°, không xét hướng mặt; anim tự xoay về mối đe doạ Y gần nhất |
| Hình của verb | chỉ là nơi HIỆU ỨNG thưởng rơi xuống (nón, đường, xung tại kẻ đánh…); không thu hẹp phần bảo vệ 360° |
| Nhiều đòn | 1 cửa sổ trả lời mọi đòn Y trong nó; mỗi đòn nhận kết quả riêng |
| Thành công | phần còn lại của W = max(còn lại, 6 tick); không khoá sau thành công (ĐÁP lại ngay được) |
| Hụt | W đóng mà 0 Answered → khoá ĐÁP 18 tick (MRN07: 27 / 36); trong khoá, giữ RB chỉ ra verb giữ |
| Không bị khoá bởi | tài nguyên, thời gian hồi chiêu, trạng thái hero, Câm Câm STS_MUTE — TRỪ Vỡ Thế, 7 tick đầu Hurt, khống chế tím boss, cửa sổ bất tử khoá (10-Combat-Core §7.3) |
| Di chuyển | trong W đi ×0.5; Lướt huỷ ĐÁP bất kỳ tick nào |
| Tài nguyên 0 | ĐÁP vẫn trung hoà đòn + hiệu ứng chung §2.2; bỏ "thưởng riêng" cần tài nguyên (bảng §3, cột *); MRN07 bậc 2: không cộng tài nguyên khi tài nguyên < 20% |
| Giữ → verb giữ | còn giữ nút ở tick W → verb giữ bắt đầu (ngưỡng giữ = W); thả trước W → không gì thêm |
| Sát thương của bản thân ĐÁP | 0; hiệu ứng thưởng riêng của hero ≤ 2.0 × POWER sát thương/mục tiêu (kích nổ tài nguyên như Vỡ Âm H03 tính theo luật tài nguyên của hero) |
2.2 Kết quả ĐÁP thành công (chung, trước thưởng riêng)
| Mục tiêu | Đòn cận chiến Y | Đạn Y |
|---|---|---|
| Kẻ địch S | Choáng STS_STUN 1.0 s + đẩy 30 px; quái khiên (EN_B1_04, EN_B4_01, EM09): vỡ khiên + Choáng STS_STUN 1.5 s | đạn trung hoà theo hero (§3) |
| Tinh Anh M | −45 Thế (hoặc số hero Bible §5.1); khựng anim 1.0 s nếu là nhịp cuối chuỗi; chain_answer trọn chuỗi → hiệu ứng chuỗi (10-Combat-Core §4.1) | như trên |
| Mini L / Boss XL | −40 / −35 Thế (hoặc số hero); chain_answer = BROKEN trọn chuỗi → Vỡ Thế ngay | như trên |
| Hero | hitstop 0.08 s; World ×0.20 trong 0.25 s (chỉ đạn: 0.12 s); Dư Âm +4; tài nguyên theo §3; callout với M+; SFX_<Hxx>_answer (to nhất trong mix); VFX_<Hxx>_answer màu slot | như trên, không mở Phản |
2.3 Thất bại & Thế hero
- Đòn Y trúng (không ĐÁP, không bị che): sát thương đủ + Hurt 0.22 s + i-frame 0.60 s; tài nguyên mất theo luật hero (H01 −25 Dòng Chảy).
- Đòn P trúng khi hero đang ở verb giữ che thân / đứng chịu đòn tại chỗ (H01 Thủ, H05 Quỹ Đạo, H06 Hấp Nhiệt, H08 Tì Báng Nạp, H11 Cắm Xẻng) → sát thương đủ (không giảm) + Vỡ Thế 0.9 s. Verb đặt vật thể/di chuyển (H02 tường, H04, H07, H09, H10, H12) → P trúng thường, không Vỡ Thế.
- Thế hero (
POISE_MAX100): verb giữ chặn/giảm sát thương tốn Thế = phần sát thương bị chặn/giảm × 1.0 (tối thiểu 6/đòn); hồi 40/s sau 0.5 s không giữ verb và không chịu đòn. Thế = 0 → Vỡ Thế: choáng 0.9 s (54 tick), KHÔNG huỷ được bằng Lướt/ĐÁP (INV-06), nhận ×1.5 sát thương, xong → Thế đầy. HUD: thanh bạc dưới HP khi < 100.
2.4 Hợp đồng verb giữ (1 verb riêng/hero, Bible #70)
| Khoá | Luật |
|---|---|
| Bắt đầu | giữ RB/RMB tới tick W (§2.1); Thương Xót "giữ/bật": giữ tới W rồi thả = verb chốt bật, chạm lại = tắt + mở 1 ĐÁP |
| Huỷ | Lướt bất kỳ tick; thả nút (0 tick hồi) rồi chạm = ĐÁP mới |
| Không bao giờ | trả lời P; chặn N tick (trừ verb ghi rõ giảm sát thương "mọi hướng" — chỉ giảm, không chặn); làm hero bất tử, trừ canon H03 Nhảy Sào 0.35 s |
| Chặn mặt trước | CHỈ H01 Thủ (Bible §5) |
| Tốn | Thế (§2.3) cho verb chặn/giảm sát thương, hoặc giá riêng ghi ở §3 |
| Trạng thái chặn ĐÁP/Lướt | phải bất tử (INV-11); còn lại FIRM/HYPER theo 10-Combat-Core §7.2 |
2.5 Hợp đồng Lướt & Né Hoàn Hảo (INV-12, mọi hero)
| Khoá | Giá trị |
|---|---|
| Nút · hướng | A/Space · hướng cần trái/WASD, không có → hướng ngắm |
| Thời lượng · cự ly | 0.14 s (9 tick) · theo hero 72–96 px (§3) |
| i-frame | 0.20 s (12 tick) từ frame 0 — vượt thời lượng Lướt 3 tick |
| Lượt · nạp | 2 lượt · 0.70 s/lượt, nạp tuần tự; hậu Lướt 3 tick; Lướt 2 sau 6 tick |
| Va chạm | xuyên mọi thân địch; không xuyên tường/vật cao |
| Điều kiện | không có (dùng được mọi trạng thái trừ Vỡ Thế, khống chế tím boss, cửa sổ bất tử khoá, chết) |
| Né Hoàn Hảo | đòn Y/P/đạn lẽ ra trúng trong i-frame VÀ Lướt bắt đầu ≤ 9 tick (0.15 s) trước tick va chạm → World ×0.25 trong 0.35 s (21 tick), hero tốc thường; hoàn 1 lượt; Dư Âm +4; tài nguyên theo §3; dư ảnh slot + trắng ở chỗ cũ; callout "NÉ HOÀN HẢO"; ≤ 1 lần/1.0 s |
| Tick va chạm của P | tick đầu vùng gây sát thương; vòng lan (BS_B1_A02) = tick vòng chạm hurtbox hero |
| N | không tạo Né Hoàn Hảo (không có tick va chạm) |
| Khác giữa hero | CHỈ anim + cự ly (INV-12); mọi số khác chung |
2.6 Khuôn thưởng Phản (COUNTER)
| Khoá | Luật |
|---|---|
| Mở | ĐÁP thành công vào đòn cận chiến Y (không mở bằng đạn — phần thưởng đạn là kết quả §3) |
| Cửa sổ | 1.0 s (60 tick); HUD: vòng đếm ngược màu slot quanh chân; dấu ✦ màu slot trên mục tiêu (INV-01a) |
| Kích | Đánh (X/LMB) trong cửa sổ → đòn Phản của hero vào mục tiêu ✦ (đã chết → điểm cũ) |
| Ngân sách sát thương | ở POWER 10, không build: tương đương 180 lên mục tiêu chính (H01 canon 90 luôn chí mạng ×2), lệch ≤ ±10% giữa hero; vùng ≥ r40 quanh điểm trúng |
| Hiệu ứng | −30 Thế; shieldbreak; hit_class COUNTER; bất tử từ input tới hết active; startup ≤ 0.10 s; lao ≤ 80 px nếu đòn là cận chiến |
| Giới hạn | 1 Phản / lần mở; ĐÁP thành công mới trong lúc mở → làm mới cửa sổ, vẫn 1 Phản |
| Sở hữu | doc hero đặt tên + hình đòn Phản, phải nằm trong khuôn này; Edge/Relic (tag COUNTER) đổi tham số |
5Bảng phòng thủ từng hero
Cửa sổ gốc, hình, verb giữ: canon Bible §5.1 / heroes[]. Thưởng riêng, tài nguyên khi ĐÁP/Né Hoàn Hảo ngoài canon = [ASSUMED] lượt đầu; doc hero chỉnh trong ±25% không cần DEC. * = thưởng cần tài nguyên > 0 (bỏ khi tài nguyên 0, INV-11).
3.1 ĐÁP
| Hero | ĐÁP · W (s · tick) | Hình hiệu ứng | Thưởng riêng — cận chiến Y | Kết quả đạn Y | Tài nguyên khi ĐÁP | Lướt (px) · Né Hoàn Hảo |
|---|---|---|---|---|---|---|
| H01 Varek | Gạt · 0.16 · 10 | quanh thân bằng vũ khí | chung §2.2 + mở Phản (Riposte canon: lao ≤ 80, 90 luôn chí mạng, AoE 44, −30 Thế, +10 Dòng Chảy) | phản ngược (khuôn §1.3) | +20 Dòng Chảy (canon) | 84 · +15 Dòng Chảy (canon) |
| H02 Bodan | Chặn Nắp · 0.18 · 11 | nón 120° r48 về mối đe doạ | Dội: M/L/XL −40 Thế (thay số chung); S trong nón đẩy 30 + choáng 1.0 | đạn đập vào nắp: huỷ; Y_HEAVY dừng tại chỗ | +1 Đinh | 72 (Lăn Vai) · +1 Đinh |
| H03 Halka | Gõ Chuông · 0.16 · 10 | xung r48 TÂM TẠI kẻ tấn công | xung +1 Vang mọi kẻ trong r48; kẻ đủ 3 Vang → Vỡ Âm (lan dây chuyền r90, Bible §5.2) | đạn vỡ; xung r48 đặt tại kẻ bắn nếu ≤ 300 px, nếu không tại điểm đạn | +1 Vang (qua xung) | 90 (vọt sào) · +1 Vang lên kẻ gần nhất r90 |
| H04 Sậu | Khép Compa · 0.15 · 9 | đường 64 px tới mối đe doạ | Tước Khí STS_DISARM 2.0 s (đòn Y kế của nó huỷ; L/XL đổi −15 Thế) | cắt đôi: 2 nửa bay ±25° thành đạn hero, mỗi nửa 1.5 × sát thương gốc, xuyên 1, không bẻ hướng | +1 Mực | 80 (Bước Phấn) · +1 Mực |
| H05 Oska | Quay Chắn · 0.16 · 10; đe đang ném → xích rỗng 0.14 · 9 | vòng r40 quanh thân | S trong r40 đẩy 40 px | đạn bị quất văng theo tiếp tuyến thành đạn hero ×2 sát thương, không bẻ hướng | +15 Đà* (xích rỗng: +0) | 88 (Quăng Mình) · +15 Đà |
| H06 Ruvan | Bắt Đòn · 0.15 · 9 | tóm 1 mục tiêu tiếp xúc (gần nhất; đòn khác trong W vẫn được trung hoà) | theo mass_class: S ném bowling 120 px (quái bị ném = AREA lăn, 1.5 × POWER mỗi quái trên đường) · M ném, −35 Thế · L Bẻ Đòn −25 Thế · XL Bẻ Đòn −35 Thế | tóm đạn → bóp nát | +10 Nhiệt (canon với đạn; cận chiến cũng +10) | 76 (Lộn) · +8 Nhiệt |
| H07 Veyra | Bắn Ngắt · 0.16 · 10 | đường bắn tới kẻ tấn công | mũi tên hông trúng kẻ đánh: 1.0 × POWER, đẩy 20 | bắn rơi đạn; mũi tên bay tiếp tới kẻ bắn (≤ 300 px) 1.5 × POWER | +20 Hơi | 80 (Lách) · +15 Hơi |
| H08 Dov | Nổ Chặn · 0.15 · 9 | nón 90° r48 | nổ tiêu 1 viên trong ổ đang lắp → hiệu ứng viên đó trong nón (Đinh 2.0 × POWER · Muối Choáng STS_STUN S 0.8 / M 0.4 · Ma Trơi lửa sàn 3 s)*; ổ rỗng: chỉ trung hoà | đạn bị thổi tan (huỷ) + hiệu ứng viên* | −1 viên (đổi lấy hiệu ứng); ổ rỗng 0 | 76 (Lăn Ngang) · nạp 1 viên vào ổ trống (loại vừa bắn) |
| H09 Kessa | Quăng Vòng Xu · 0.16 · 10 | dây thẳng tới kẻ tấn công | giật ngược: S bị quấn (+1 Vòng, vào bó); M −25 Thế (canon, thay −45); L/XL số chung | đạn quăng ngược theo dây: ×3 sát thương, xuyên 3, không bẻ hướng | +1 Vòng | 84 (Đu Dây) · cú quăng kế bắt đầu với 1 Vòng sẵn |
| H10 Ingra | Màn Khói · 0.18 · 11 | khói phụt r40 TẠI kẻ tấn công | đám phụt = 1 vùng Khói 8 s (nguyên tố kế trong vòng xoay lửa → ngạt → tay hồn; đầy 5 → thay vùng cũ nhất) | đạn tan; đám khói đặt tại kẻ bắn nếu ≤ 300 px, nếu không tại điểm đạn | +1 Khói (vùng đó) | 80 (Bước Khói) · +1 Khói tại điểm bắt đầu Lướt |
| H11 Wenna | Hất Đất · 0.15 · 9 | nón 100° r56 | kẻ cận chiến trong nón Mù STS_BLIND 1.0 s (canon; M ×0.5; L/XL −15 Thế) | cục đất chặn: huỷ đạn | +1 Đất | 80 (Chui Đất) · +1 Đất |
| H12 Ambrin | Thổi Dội · 0.16 · 10; đúng phách ±0.12 s: 0.20 · 12 | sóng âm r44 quanh thân | S trong r44 đẩy 30 | đạn dội ngược theo hướng tâm → ngoài, ×2 sát thương, không bẻ hướng | +2 Nhịp đúng phách / +1 lệch phách (không chia đôi) | 80 (Bước Đưa Tang) · +1 Nhịp |
- Thương Xót cộng +0.03/+0.06 vào mọi W (H12 cộng sau phách: tối đa 0.26 → kẹp 0.24 s = 15 tick). Đỉnh Hơi H07 +0.04 là cửa sổ tài nguyên, không phải ĐÁP.
- Dư Âm: ĐÁP +4, Né Hoàn Hảo +4 với mọi hero (Bible §5.1), cộng thêm nạp riêng ở Bible §5.1.
3.2 Verb giữ
| Hero | Verb giữ | Cơ chế (canon) | Giá / giới hạn | Giáp | P khi đang giữ |
|---|---|---|---|---|---|
| H01 | Thủ | chặn Y trước 180° (đạn bị dập tắt), đi ×0.35, mặt theo ngắm | Thế = sát thương × 1.0 (≥ 6); đẩy lùi 6 px, hitstop 0.03 s | FIRM trước | Vỡ Thế |
| H02 | Dựng Quan | cắm nắp thành tường LINE 64 × 12 px tại chỗ: HP 80, chặn đạn Y + thân quái; Bodan đi ×0.8 | tồn 3 s kể từ lúc cắm (thả nút không gỡ); chạm ĐÁP = rút nắp (tường mất ngay); hồi 1.0 s sau khi tường mất [ASSUMED] | NONE | tường không chặn P; Bodan không giảm → không Vỡ Thế |
| H03 | Nhảy Sào | cung vọt bất tử 0.35 s, đáp sau 60 px theo hướng nhập, +1 Vang lên kẻ bị vượt | hồi 1.2 s | INVULN 0.35 s | né được (bất tử), không tính Né Hoàn Hảo |
| H04 | Kẻ Vòng | vạch vòng phấn r56 quanh thân (vẽ 0.5 s, giữ ≤ 3 s, đi ×0.5): quái cận chiến vượt vạch Choáng STS_STUN 0.3 s, đạn Y qua vạch chậm 50% | hồi 1.0 s [ASSUMED]; vẽ huỷ được | NONE | không giảm → trúng thường |
| H05 | Quỹ Đạo | vòng đe r56 di động (đi ×0.6) chặn đạn Y chạm vòng, đẩy quái S | Thế = sát thương đạn bị chặn × 1.0 (≥ 6) | NONE | Vỡ Thế |
| H06 | Hấp Nhiệt | đứng yên, KHÔNG giảm sát thương; 60% sát thương Y/N → HP xám (3 s), +8 Nhiệt/đòn (BRACE, GREY_HP, DEC-2026-11-07-10) | Thế = phần thành HP xám × 1.0 (≥ 6) | HYPER | Vỡ Thế |
| H07 | Lùi Lắp | lùi 40 px + tự kéo 0.35 s (đạt mốc kéo 1) | hồi 0.8 s [ASSUMED]; kéo tốn Hơi như thường (30/s) | NONE | không giảm → trúng thường |
| H08 | Tì Báng Nạp | nhận đủ sát thương, miễn đẩy trước 120°, nạp 1 viên/0.4 s (DEC-2026-11-07-10) | không tốn Thế | HYPER trước 120° | Vỡ Thế |
| H09 | Lưới Xu | thả lưới r48 tại chỗ 4 s: quái bước vào Trói STS_BIND 0.6 s, đạn Y qua lưới bị chặn | 1 lưới tồn tại; thả lưới mới thay lưới cũ | NONE | lưới không chặn P; không giảm → trúng thường |
| H10 | Hoá Khói | tan thành khói, không bị nhắm (quái không bắt đầu windup Y nhắm Ingra; đòn Y đang chạy bỏ qua Ingra), chỉ đi trong/giữa vùng Khói, đi ×1.3 [ASSUMED] | tốn 1 Khói/s (vùng cũ nhất); ngoài vùng không bật / tự thoát | NONE | P/N trúng thường (không bất tử) |
| H11 | Cắm Xẻng | bất động, không bị đẩy/kéo; nhận đủ; đòn nhận đội hố nông r16 dưới kẻ tấn công + 1 Đất; +1 Đất/0.5 s giữ (DEC-2026-11-07-10) | không tốn Thế | HYPER | Vỡ Thế |
| H12 | Nốt Ngân | giữ ≤ 6 đạn Y đứng yên, phách kế phóng thành nốt ×1.0; không chậm %; Nhịp không giảm, khoá phách; không chặn cận chiến (DEC-2026-11-07-10) | không tốn Thế (không chặn/giảm) | NONE | trúng thường |
- Hoá Khói H10 và Nhảy Sào H03 huỷ được bằng Lướt bất kỳ tick (Nhảy Sào: chỉ sau khi đáp, vì đang bất tử khoá).
6Trợ năng
4.1 Thương Xót (khoá leaderboard + thành tựu Độ Tang; Bible §4.3)
| Tuỳ chọn | Giá trị | Luật |
|---|---|---|
| Cửa sổ ĐÁP | +0.03 / +0.06 s | cộng vào W, kẹp 15 tick |
| Sát thương nhận | −25 / −50 / −75% | bước 6 pipeline 10-Combat-Core §3.3 |
| Tốc game | 70–100% (bước 5%) | nhân MỌI đồng hồ gồm máy nhịp H12 (BPM × tỉ lệ) |
| Phòng Thủ Tự Động 50% | tự ĐÁP 1/2 đòn Y | tất định: bộ đếm luân phiên mỗi đòn Y lẽ ra trúng hero (chưa ĐÁP/che/Lướt), đòn lẻ được tự ĐÁP; chỉ hiệu ứng chung §2.2, không Dư Âm, không tài nguyên, không Phản |
| Verb giữ | giữ / bật | §2.4 |
| Nhịp H12 · Đỉnh Hơi H07 | ±0.16 s · +0.04 s | canon |
| Tự ngắm | bật | 10-Combat-Core §9 |
| Tro Nhớ | 0 | INV-15 |
| Hiệu chỉnh trễ | −0.10…+0.10 s (bước 0.01) | dời mốc so input với cửa sổ ĐÁP, phách H12, Đỉnh Hơi |
4.2 Trợ năng (không khoá gì; meta.accessibility)
| Tuỳ chọn | Hiệu ứng |
|---|---|
| Tell mù màu | Y: glint thành hình thoi ◇ + nốt cao hơn · P: thêm gạch chéo + ▲ + ! · N: chấm (sẵn) — hình khác nhau, không chỉ màu |
| Âm tell theo vị trí | "tinh"/"ù" pan 3D theo hướng nguồn, âm lượng theo khoảng cách; SFX tell không bao giờ bị cắt bởi trần voice |
| Phụ đề tell | "[tinh · trái]", "[ù · sau lưng]", "[ĐÁP]" ở đáy màn, 1 dòng, ≤ 3 dòng chồng |
| Chỉ hình (người nghe kém) | mọi SFX tell nhân đôi bằng hình: cung sáng 8 px quanh vòng chân hero hướng về nguồn Y ở glint 2 (vàng ◇) / nguồn P ở đầu windup (tím ▲) |
| Âm tăng cường (người nhìn kém) | "tinh" ở glint 2 to +6 dB, cao độ theo khoảng cách; "ù" P to dần theo độ gần vùng; âm "rì" khi bước vào N; tăng tương phản sàn/tell 20% |
| Mũi tên ngoài màn | mọi đòn Y/P nhắm hero có nguồn ngoài vùng an toàn hoặc cách mép ≤ 32 px: mũi tên mép màn theo lớp tell ≥ 0.45 s trước va chạm |
| Giảm chớp | viền trắng nháy → viền trắng liền 2 px; tắt chớp màn khi làm chậm |
| Rung tay cầm | Y: 40 ms cao ở glint 2 · P: 300 ms trầm tăng dần · Vỡ Thế: 2 × 80 ms; cường độ 0–100% |
| Khác | chữ 100–150% · viền hero 1–3 px · giảm hạt FX · preset FX Deck 70% · remap toàn bộ · chế độ 1 tay |
- Sân Tập (Sân Tập ST_YARD): dummy tell Y/P/N từng hạng, bài tập ĐÁP, frame data, replay 10 s — mọi tuỳ chọn trên xem trước được ở đây.
7Luật công bằng (mọi hạng, không Khăn Tang/Ấn/mutator/Tro Nhớ nào phá)
5.1 Token & mật độ (INV-08)
| Khoá | Giới hạn |
|---|---|
| Windup cận chiến nhắm hero (quái S) | ≤ 4 cùng lúc; ≤ 2 khi có M/L/XL đang windup; 0 windup mới trong 0.6 s cuối windup P của boss |
| Loạt đạn nhắm hero | ≤ 3 (gồm triệu hồi boss); ≤ 12 đạn địch trên màn |
| P sàn từ quái thường | ≤ 3 cùng lúc |
| P tổng (gồm hazard, Ấn, mutator, Khăn Tang) | ≤ 5; quái không có token P → dùng đòn Y hoặc chờ |
| Boss đang windup P | không tell P nào khác được bắt đầu; đòn chữ ký boss miễn token |
| M/L/XL | không giữ token cận chiến/đạn của quái thường; EM16 Thề Thù chiếm 1/4 token (canon) |
| Không token | đi vòng 38–70 px, tiếp tuyến, 30% tốc |
| Cấp token | ưu tiên quái trên màn và trước mặt hero |
| Vùng N sống (gồm vũng xác, ô cháy, vệt EM11, P→N chuyển đổi, Khăn Tang) | ≤ 16; vùng thứ 17 → vùng cũ nhất mờ tắt 0.3 s |
| Vũng xác MRN15 | chỉ 1/4 xác quái S sinh vũng (đếm tất định theo thứ tự chết); ≤ 8 vũng sống, vượt → vũng cũ nhất mờ 0.3 s |
5.2 Đòn không đỡ đồng thời
- ≤ 5 vùng P + ≤ 2 đạn P trên màn (INV-08, INV-13).
- Lối thoát: tổng diện tích P (đang windup) trong đĩa r120 quanh hero ≤ 70% đĩa; vùng P mới vượt → trì 0.3 s; trì 2 lần vẫn vượt → huỷ đòn đó (quái về hồi chiêu).
- Vùng P mới trong 80 px của vùng P khác đã đầy > 60% → trì 0.3 s (demo).
- ≤ 2 va chạm P vào vị trí hero trong cùng 0.30 s; cái thứ 3 trì 0.3 s.
- Phủ N: tổng diện tích vùng N trong đĩa r120 quanh hero ≤ 35% đĩa; vùng N sinh thêm khi đã vượt → chỉ là hình (cosmetic, α 0.5, không làm chậm/không sát thương), giữ vòng chân hero + FX sàn hero đọc được và lối "đi ra" luôn tồn tại. Ví dụ: đĩa r120 = 45 239 px²; 6 vũng r30 (2 827 px² mỗi vũng = 16 965 px², 37.5%) → vũng thứ 6 cosmetic.
5.3 Ngoài màn
- Quái ngoài vùng an toàn gameplay (+16 px) không bắt đầu windup Y/P nhắm hero; kẻ bắn ngoài màn không bắn.
- Đòn boss khởi phát ngoài màn (lao, bổ nhào): mũi tên mép màn ≥ 0.45 s + vùng P hiện đủ phần trong vùng an toàn trước va chạm.
- Vùng P cắt mép màn: phần trong vùng an toàn phải chứa mọi điểm hero có thể đứng trong 0.45 s tới.
5.4 Trung thực hitbox
- Hitbox đòn địch = hình VFX/vùng ±2 px; tầm Y cận chiến ≤ tầm vũ khí nhìn thấy + 8 px; active Y cận chiến ≤ 0.12 s (8 tick), trừ đòn lao (active suốt quãng lao, có ghi
lunge). - Y = đúng 1 va chạm/nhịp; đòn nhiều va chạm phải là Y×n (mỗi nhịp glint riêng) hoặc P/N.
- Hurtbox hero không phóng to theo sprite (
10-Combat-Core§1.4).
5.5 Khác
- Spawn (INV-14): ấn tro 0.6 s không sát thương, ngoài r90, không windup 0.8 s; triệu hồi boss/Tinh Anh = xoáy trung tính 1.0 s.
- Nghỉ 6 s sau khi Tinh Anh chết trước Tinh Anh kế (demo); sân boss/mini rỉ ≥ 6 quái S/20 s ngoài r90, không trong lúc boss windup P.
- Tro Nhớ (INV-15): không đổi tell/windup/sát thương/hitbox/token; ≥ 50% đòn mỗi M/L/XL là Y (ĐÁP được); báo ≥ 1.0 s; nhịp lừa ≤ 1/chuỗi.
- CI
fairness_linttrênenemy_attacks.csv: windup ≥ sàn theo hạng (§1.2) ·tell ∈ {Y, P, N}· Y = 1 va chạm · đạn P ≤ 140 px/s · khe chuỗi ≥ 21 tick · cóadaptive_source· ≥ 50% đòn Y mỗi M/L/XL. Trượt = chặn merge. Bộ đếm runtime (build debug + soak bot, trượt = bug chặn release):n_zones_live ≤ 16·mrn15_puddles_live ≤ 8·n_cover_r120 ≤ 0.35(vùng N có hiệu lực; cosmetic không tính) ·p_zones_live ≤ 5·p_proj_live ≤ 2.
8Quy tắc cho dev/AI
- Tell là dữ liệu runtime (glint, vùng,
!, SFX) sinh từ fieldtell+windupcủa đòn; anim không nướng tell. - Mỗi hero đúng 1 verb ĐÁP + 1 verb giữ; không hero nào ngoài H01 chặn mặt trước; không verb ĐÁP nào yêu cầu tài nguyên để trung hoà đòn.
- ĐÁP hit-test luôn 360° trên hurtbox hero; hình của verb chỉ là nơi thưởng rơi.
- Verb giữ không bao giờ trả lời P; P trúng khi giữ verb che thân = Vỡ Thế.
- Lướt và Né Hoàn Hảo giống hệt nhau giữa hero trừ anim + cự ly.
- Đòn Phản mới phải nằm trong khuôn §2.6 (180 ±10% ở POWER 10).
- Không màu tell (hue 32–62°, 260–290°) trên FX hero, thân địch, UI khung.
- Mọi đòn địch mới chạy
fairness_linttrước merge.
9Quyết định đã chốt
| Q | Quyết định | Lý do |
|---|---|---|
| Q1 Windup P tối thiểu | 2026-11-07 — vùng P hiện ≥ 0.45 s (S, M), ≥ 0.60 s (L, XL) [ASSUMED]; chặt hơn INV-03, không phá | vùng sàn cần thời gian đọc dài hơn glint; EM06 0.45 s vẫn hợp lệ |
| Q2 Kẹp cửa sổ ĐÁP | 9–15 tick (0.14–0.24 s) | sàn INV-11; trần giữ P3 "chính xác" khi chồng Thương Xót + Edge |
| Q3 Ngưỡng giữ | = W của hero | 1 nút, chạm/giữ không trễ thêm (Bible #14) |
| Q4 Vỡ Thế khi P | chỉ verb giữ che thân (H01, H05, H06, H08, H11) | verb đặt vật/di chuyển không hứa bảo vệ thân |
Q5 Y_HEAVY | không bao giờ phản ngược | vật nặng phản = khó đọc, phá cân bằng |
| Q6 Khuôn Phản | 180 tương đương ±10% ở POWER 10, −30 Thế, bất tử | giữ canon Riposte H01 làm chuẩn cho 12 hero |
| Q7 Phòng Thủ Tự Động | luân phiên tất định, không thưởng | công bằng, đoán được, không thay kỹ năng |
| Q8 Vùng N | hiện mờ 0.30 s không sát thương | không có sát thương chưa báo (P3) |
| Q9 Lối thoát P | ≤ 70% đĩa r120 quanh hero | "dày nhưng luôn có lối thoát" (demo) |
| Q10 Ngoài màn | cấm windup nhắm hero ngoài vùng an toàn | P4 dễ đọc, Deck 16:10 |
| Q11 Phản của H01 | mở chỉ bằng Gạt cận chiến (demo canon); Thủ chặn không mở Phản | demo 03-Defense.md §4; câu "Thủ → Phản đòn" ở Bible §5.1 đọc là luồng chung |
Q12 Lõi đạn Y_REFLECT/destructible | 2026-11-07 — lõi tối #2e464c + viền 1 px #9ff3ff (alt LUT #e8e4f0 khi H10/H12) + vành #ffd84a 8 Hz; bỏ "tâm trắng" | INV-01c: FX địch rỗng/lõi tối, lõi trắng = ngôn ngữ hero; khớp 31 §14 |
| Q13 Trần vùng N | 2026-11-07 — ≤ 16 vùng N sống; phủ N ≤ 35% đĩa r120 (vượt → cosmetic); MRN15 1/4 xác, ≤ 8 vũng | ≥ 120 kill/phút + MRN15 + ô cháy/vệt phủ kín sàn, che vòng chân hero, mất lối "đi ra" |
| Q14 Verb giữ H06/H08/H11/H12 | 2026-11-07 - theo DEC-2026-11-07-10 (Bible #70): H06 60% sát thương → HP xám 3 s, Thế = phần thành HP xám × 1.0 (≥ 6) · H08 bỏ −50%, giữ miễn đẩy trước 120° + nạp 1/0.4 s, không tốn Thế · H11 bỏ −40%, đòn nhận đội hố nông r16 + 1 Đất · H12 bỏ chậm đạn 50%, giữ ≤ 6 đạn Y, phóng thành nốt ×1.0 đúng phách | chỉ H01 chặn mặt trước; không verb giữ nào khác giảm sát thương phẳng; không lặp cơ chế H04/H12, H06/H08/H11 |