1Mục tiêu
- Trận đấu tự động trông như một pha hack&slash được biên đạo: combo nhanh, nặng, hủy đòn mượt, đỡ–gạt–phản đòn đúng khung hình.
- Mọi chỉ số/Hồi Âm tác động qua một pipeline sát thương và một bộ giải phòng thủ duy nhất — dễ cân bằng, dễ test, tất định.
- Người chơi đọc được: mỗi đòn địch có báo hiệu, mỗi kết quả phòng thủ có hình + chữ + âm riêng.
- Hiệu năng: ≤ 10 địch đồng thời + 60 đạn trên máy tầm trung, 60 FPS, 0 GC trong trận.
2Không gian chiến đấu (2D side-view)
| Tham số | Giá trị | Ghi chú |
|---|---|---|
| Đơn vị | pixel nghệ thuật (px); 1 unit Unity = 16 px (PPU 16) | Mọi tọa độ gameplay là số nguyên px sau khi làm tròn hiển thị; mô phỏng dùng float |
| Màn hình native | 270 × 480 (×4 = 1080×1920); tỉ lệ nguyên ưu tiên, thế giới rộng 270–384 px theo máy; chiều cao dư → mở rộng vùng trần/khung dưới | 02 §2, 13 §2.2 |
| Phòng | x ∈ [−176, +176] (352 px), sàn y = 0, trần CEILING_Y = 200 |
Phòng rộng hơn khung nhìn 270 px → camera bám |
| Tường | x = ±176, va chạm cứng | Dội tường khi bị đẩy ≥ WALL_SPLAT_SPEED 220 px/s |
| Cầu thang | Vào từ cửa cầu thang trái (x = −150, rơi xuống từ trần), ra qua miệng hầm phải (x = +150) | 05 §5 |
| Điểm spawn | Cửa ngục trái/phải (x = ±176), 2 khe tường (x = −90, +70; trèo ra), 2 lỗ trần (x = −40, +110; rơi từ y = 200) + điểm đặc thù Địa Tầng | 05 §4 |
| Làn sâu | Logic 1D theo x + trục đứng y; vẽ có lệch dọc 0–6 px theo id actor để đám đông không chồng khít (chỉ hiển thị) | Không có trục z gameplay |
| Camera | Orthographic, Pixel Perfect Camera (ref 270×480, PPU 16). Bám x của anh hùng (deadzone ±24 px), kẹp trong phòng; khung dọc: sàn ở 66% chiều cao vùng chiến đấu | 11 §4.3 |
| Zoom | Chỉ số nguyên: 1× mặc định, 2× cho Tuyệt Sát/Tuyệt Kỹ (crop quanh điểm va) | Pixel perfect không cho zoom lẻ |
| Hướng nhân vật | Chỉ trái/phải (flip X). Quay mặt 0.08 s; có đòn "quay chém" (TURN) nếu anh hùng có | |
| Tách đám đông | Bán kính thân ACTOR_RADIUS 7 px (to 12, boss ≥ 20); đẩy mềm giữa địch 300 px/s²; anh hùng không bị đẩy |
Mọi actor di chuyển kinematic (không Rigidbody/Collider); hitbox là hình học 2D thuần (§4.4).
3Chỉ số
3.1 Danh sách chỉ số (enum RPGStatType)
| Id | Key | Gốc anh hùng (trước hệ số anh hùng) | Ghi chú |
|---|---|---|---|
| 1 | MaxHP |
HERO_HP0 400 × hp_mult × rarity × cấp × sao + lõi tài khoản 200 |
Vital |
| 2 | ATK |
HERO_ATK0 40 × atk_mult × rarity × cấp × sao + lõi 20 |
|
| 3 | DEF |
20 (+ hero) | Giảm ST tối đa 70% (§4.3) |
| 4 | AtkSpeed |
1.00 × hero aspd | Nhân tốc phát clip tấn công (cả hit-time) |
| 5 | MoveSpeed |
96 px/s × hero | Chạy giao chiến; ngoài giao chiến ×1.3 |
| 6 | CritRate |
5% (+ hero) | |
| 7 | CritDmg |
150% (+ hero) | |
| 8 | Lifesteal |
0% | Trên sát thương trực tiếp |
| 9 | Regen |
0%/s | % Max HP/s trong tầng |
| 10 | DmgReduction |
0% | Cộng dồn cộng |
| 11 | DeflectRate |
hero (3–15%) | Tỉ lệ Gạt (§5) |
| 12 | BlockRate |
hero (0–35%) | Tỉ lệ Chặn |
| 13 | EvadeRate |
hero (0–26%) | Tỉ lệ Né |
| 14 | BlockPower |
+0% | Cộng vào mức giảm khi Chặn (trần giảm 90% nhẹ / 70% nặng) |
| 15 | GuardMax |
100 (hero) | Khí Thủ |
| 16 | GuardRegen |
25/s | Sau 1.0 s không chặn |
| 17 | CounterDmg |
+0% | Bucket bối cảnh cho hit lớp K |
| 18 | BlockCounterRate |
hero (20–45%) | Xác suất Phản Đòn sau Chặn |
| 19 | EvadeCounterRate |
hero (30–70%) | Xác suất Phản Đòn sau Né |
| 20 | PostureDmg |
+0% | Nhân sát thương Thế |
| 21 | ExecutionDmg |
+0% | Hit lớp X |
| 22 | Reach |
+0% | Nhân kích thước hitbox theo chiều ngang |
| 23 | AoeSize |
+0% | Nhân bán kính AoE |
| 24 | Knockback |
+0% | |
| 25 | Poise |
100 (hero) | Ngưỡng chịu đòn |
| 26 | SkillCdr |
0% | |
| 27 | OverdriveGain |
+0% | |
| 28 | DmgBonus |
0% | Bucket nhân riêng (Khế Ước, bộ Di Vật, Phong Độ không vào đây) |
| 29 | BossDmg |
0% | |
| 30 | EliteDmg |
0% | Tinh Anh + Thủ Vệ |
| 31 | StatusDmg |
0% | DoT, sét, nổ nguyên tố |
| 32 | StatusChance |
+0 điểm | Cộng thẳng vào % kích hoạt |
| 33 | StatusDuration |
+0% | |
| 34 | Luck |
0 | 06 §4.2 |
| 35 | GoldGain |
0% | Áp ở Kết Quả; phần từ Hồi Âm trần +200% |
| 36 | EmberGain |
0% | |
| 37 | SoulAshGain |
0% | |
| 38 | ComboDmg |
0% | % mỗi 10 Combo (tính tối đa 100 Combo) |
| 39 | LightDmg |
0% | Hit lớp L/M |
| 40 | HeavyDmg |
0% | Hit lớp H/F |
| 41 | AirDmg |
0% | Hit khi mục tiêu hoặc anh hùng trên không |
| 42 | SkillDmg |
0% | |
| 43 | UltDmg |
0% | |
| 44 | HealRecv |
0% | |
| 45 | ShieldMax |
0 | Vital phụ; trần 100% Max HP |
| 46 | Thorns |
0% | Phản lại theo raw trước giảm |
| 47 | RangedDR |
0% | Giảm ST đạn (cộng sau DR) |
| 48 | ComboWindow |
2.0 s | |
| 49 | ExecuteThreshold |
0% | Địch thường (không Boss) dưới ngưỡng HP này cũng được Tuyệt Sát dù chưa Vỡ Thế |
| 50 | StyleGain |
+0% | |
| 51 | ArmorPierce |
0% | Bỏ qua % DEF địch |
| 52 | ReflectDmg |
+0% | Đạn bị Gạt bật ngược |
Trần (áp sau mọi hệ số nhân):
| Chỉ số | Trần |
|---|---|
| AtkSpeed | 2.0 |
| MoveSpeedMult | 1.8 |
| CritRate | 1.0 |
| Lifesteal | 0.2 |
| Regen | 0.02 |
| DmgReduction | 0.6 |
| TotalReductionMin | 0.15 |
| DeflectRate | 0.6 |
| BlockRate | 0.6 |
| EvadeRate | 0.5 |
| AvoidTotal | 0.7 |
| DefenseTotal | 0.9 |
| SkillCdr | 0.5 |
| StatusDuration | 2.0 |
| Luck | 30 |
| ExecuteThreshold | 0.3 |
| ShieldMaxOfHp | 1.0 |
| CardGoldGain | 2.0 |
| ComboWindow | 4.0 |
| ReachBonus | 0.6 |
| AoeBonus | 1.2 |
Giải thích trần phòng thủ: AvoidTotal = Gạt + Né ≤ 70%; DefenseTotal = Gạt + Chặn + Né ≤ 90%. Khi tổng vượt trần, các tỉ lệ được co theo tỉ lệ (giữ cơ cấu) — ví dụ Gạt 50% + Né 40% = 90% > 70% → nhân 0.778 → Gạt 38.9%, Né 31.1%.
3.2 Thứ tự cộng chỉ số
4 lớp modifier (thứ tự áp 1→4) — hiện thực bằng StatSheet phẳng, tất định, 0 GC trong 3.GAMEPLAY.Sim (13 §4; không dùng trực tiếp com.blackface.rpgstats vì cấp phát qua reflection), cùng công thức:
| Lớp | Modifier | Nguồn |
|---|---|---|
| 1 | BaseAdd |
Chỉ số anh hùng theo cấp/sao, Rèn Luyện, chỉ số chính Di Vật |
| 2 | BasePercent |
Cây Đèn Hồn, dòng phụ Di Vật, thưởng sưu tầm Trang Phục, Thông Thạo, Sổ Ký Ức |
| 3 | TotalAdd |
Hồi Âm cộng phẳng (hiếm) — gồm mọi tỉ lệ phòng thủ cộng điểm % |
| 4 | TotalPercent |
Hồi Âm % trong run |
Final = ((Base + ΣBaseAdd) × (1 + ΣBasePercent) + ΣTotalAdd) × (1 + ΣTotalPercent) → kẹp trần.
Tỉ lệ (Crit, Gạt, Chặn, Né, phản đòn, hút máu…) luôn cộng điểm phần trăm (lớp 1 hoặc 3), không nhân. % meta và % trong run nhân nhau; Hồi Âm cùng loại trong run cộng nhau.
3.3 Chỉ số anh hùng theo cấp/sao
HeroHP(L, ★) = HERO_HP0 × hp_mult × RARITY_MULT[r] × (1 + LEVEL_GROWTH × (L − 1)) × STAR_MULT[★] + ACCOUNT_BASE_HP
HeroATK(L, ★) = HERO_ATK0 × atk_mult × RARITY_MULT[r] × (1 + LEVEL_GROWTH × (L − 1)) × STAR_MULT[★] + ACCOUNT_BASE_ATK
hp_mult, atk_mult, DEF, tốc độ, Crit, Gạt/Chặn/Né, GuardMax, Poise, tầm là hồ sơ của anh hùng (03 §3, bảng roster). Rarity R/E/L = ×1.00/1.06/1.12 — chênh lệch nhỏ có chủ đích (khác biệt nằm ở phong cách, không ở sức mạnh thô).
4Công thức sát thương
4.1 Sát thương trực tiếp (anh hùng → địch)
raw = ATK × HitMult × EchoLv × (1 + DmgBonus) × (1 + Context)
Context = [L/M]LightDmg + [H/F]HeavyDmg + [air]AirDmg + [K]CounterDmg + [S]SkillDmg + [U]UltDmg + [X]ExecutionDmg
+ ComboDmg × min(10, ⌊Combo/10⌋) + [boss]BossDmg + [elite|warden]EliteDmg
+ Codex(type) // Sổ Ký Ức: +1%/mốc, tối đa +3%
+ STYLE_DMG_BONUS[rank] // Phong Độ §7
crit = rand(combat) < CritRate (+0.50 nếu lớp K) ? CritDmg : 1
mitig = 100 / (100 + DEF_target × (1 − ArmorPierce))
vuln = 1 + Σ(Broken 0.50, Shock, Hex, Sunder…) // Marked chỉ cộng vào CritDmg
guard = (địch đang thủ mặt trước & hit không có tag gb) ? (1 − GuardRed_enemy) : 1
final = max(1, round(raw × crit × mitig × vuln × guard × U(0.95, 1.05)))
HitMulttừHitDef.multcủa đòn;EchoLv= 1.00/1.25/1.50 cho đòn đến từ Hồi Âm Lv1/2/3 (ECHO_DMG_BY_LV), đòn gốc = 1.- DEF địch không tăng theo tầng (04 §1).
GuardRed_enemymặc định 0.75 (04 §3). - Hiển thị rút gọn:
1,234→12.3K→4.56M→7.89B→1.23aa.
4.2 Sát thương trạng thái (DoT, nổ nguyên tố)
tick = ATK_snapshot × DoTMult × stacks × (1 + StatusDmg) × vuln (không chí mạng, bỏ qua DEF)
Tick mỗi 0.5 s (hiển thị gộp mỗi 1 s). ATK_snapshot = ATK lúc áp.
4.3 Sát thương nhận vào (địch → anh hùng)
raw = EnemyATK(f, type) × HitMult_enemy
defRed = min(0.70, DEF_hero / (DEF_hero + 100 + 8 × floor))
mult = max(0.15, (1 − defRed) × (1 − DR) × [ranged](1 − RangedDR))
outcome = DefenseResolver (§5) → Gạt/Né: 0 ; Chặn: × (1 − BlockRed) ; Trúng: × 1
final = round(raw × mult × outcomeMult × dreadMult)
Thứ tự hấp thụ: i-frame/bất tử → bộ giải phòng thủ → Khiên → HP. Khiên là một pool chung, trần ShieldMax 100% Max HP, về 0 khi sang tầng mới. Gai (Thorns) phản theo raw trước giảm, chỉ với đòn cận chiến trúng hoặc bị Chặn.
4.4 Hitbox
HitDef.box dùng 4 hình (px, gốc tại chân anh hùng, hướng phải; lật theo hướng mặt):
| Hình | Cú pháp | Ý nghĩa |
|---|---|---|
| Cung | arc(r, deg, dy) |
Hình quạt bán kính r, mở ±deg/2 quanh hướng mặt, tâm cao dy |
| Hộp | box(w, h, dx, dy) |
Hình chữ nhật tâm (dx, dy) |
| Tròn | circle(r, dx, dy) |
AoE |
| Đường | line(len, h, dy) |
Từ thân ra phía trước dài len, dày h (đâm, xuyên) |
Reach nhân chiều ngang (r, w, len), AoeSize nhân bán kính circle. Mỗi hit trúng một lần mỗi mục tiêu; multi giới hạn số mục tiêu (mặc định không giới hạn).
5Hệ phòng thủ — Gạt / Chặn / Né / Phản Đòn / Va Kiếm
Đây là phần định danh của Deepstair. Mọi đòn cận chiến và đạn của địch nhắm vào anh hùng đi qua DefenseResolver.
5.1 Dòng thời gian một đòn địch
t_start ─── lấy đà (báo hiệu) ─── t_commit = t_hit − 0.15 s ─── t_hit (hit-frame địch) ─── hồi đòn
│ │
DefenseResolver quyết định kết quả Kết quả HIỆN RA đúng khung này
+ anh hùng bắt đầu clip phòng thủ (tia lửa/đóng băng/âm, số sát thương)
sao cho "khung chạm" trùng t_hit
- Kết quả được roll ở t_commit trên luồng RNG
defense(tất định). - Clip phòng thủ có
contact(khung chạm) — ví dụ clip Gạt 0.24 s cócontact = 0.15→ bắt đầu ở t_commit thì khung chạm rơi đúng t_hit. Đây là cách "timing chuẩn" được đảm bảo dù chiến đấu tự động. - Mọi clip phòng thủ có
contact= 0.15 s = 9 tick =DEFENSE_LEAD(validator 03 §4) → clip luôn bắt đầu đúng t_commit và khung chạm luôn trùng t_hit. Từ t_commit tới t_hit anh hùng ở trạng thái Defending (không bắt đầu đòn mới). - Nếu địch bị gián đoạn trước t_hit (bị hất, choáng, chết) → hủy kết quả, anh hùng thoát Defending ngay, không tiêu ICD.
5.2 Anh hùng có "sẵn sàng phòng thủ" không
| Trạng thái anh hùng ở t_commit | Gạt | Chặn | Né |
|---|---|---|---|
| Tự do (đứng, chạy, giữa 2 đòn, trong cửa sổ hủy) | ✔ | ✔ | ✔ (clip né) |
| Đang ra đòn, ngoài ±3 tick quanh mọi hit-time của đòn | ✔ (hủy đòn đang chạy) | ✔ (hủy) | ✔ (hủy) |
| Đang ra đòn, trong ±3 tick một hit-time của chính mình | ✗ → kiểm tra Va Kiếm (§5.7) | ✗ | ✔ ×0.6 (nghiêng né, chữ MISS, đòn vẫn chạy) |
Đòn có giáp siêu cứng (armor) |
✗ | ✗ | ✗ — trúng nhưng không khựng, ST ×0.7 |
| i-frame / Tuyệt Sát / Tuyệt Kỹ | bất tử (không roll) | ||
| Trên không (combo trên không) | ✔ ×0.7 (gạt trên không) | ✗ | ✔ ×0.8 (lướt trên không) |
| Khựng / ngã / Vỡ Thủ / bị túm | ✗ | ✗ | ✗ |
Hủy đòn để phòng thủ: lộ trình đang chạy tạm dừng; sau phòng thủ (+ phản đòn nếu có), Đạo Diễn Combo tiếp tục lộ trình từ đòn kế nếu ≤ 0.6 s đã trôi và mục tiêu còn hợp lệ, ngược lại chọn lộ trình mới (§6.6).
5.3 Roll phân vùng
D, B, E = DeflectRate, BlockRate, EvadeRate (sau trần §3.1)
áp hệ số loại đòn (bảng dưới) và hệ số trạng thái (§5.2) → D', B', E'
co lại nếu D'+E' > 0.70 hoặc D'+B'+E' > 0.90
r = rand(defense)
r < D' → GẠT
r < D'+B' → CHẶN
r < D'+B'+E' → NÉ
còn lại → TRÚNG
Loại đòn địch (AttackKind) |
Báo hiệu tối thiểu | Gạt | Chặn | Né | Ghi chú |
|---|---|---|---|---|---|
light |
Dáng lấy đà ≥ 0.35 s | ×1.0 | ×1.0 | ×1.0 | |
heavy |
≥ 0.6 s, thân nháy đỏ 2 khung + biểu tượng "!" | ×1.0 → Gạt Hoàn Hảo | ×0.5 | ×1.0 → Né Hoàn Hảo | Chặn đòn nặng tốn Khí Thủ ×1.0 posture đòn (thường 30–40) |
thrust (đâm, không chặn được) |
≥ 0.7 s, glyph mũi tên đỏ thẫm + âm trầm | ×0 (×1.0 nếu có quy tắc mikiri) |
×0 | ×1.0 | Gạt bằng mikiri = Gạt Hoàn Hảo |
sweep (quét thấp) |
≥ 0.7 s, glyph sóng đỏ thẫm | ×0 | ×0 | ×1.0 (clip nhảy) | Né = nhảy qua, có thể nối Phản Đòn Né trên không |
grab (túm) |
≥ 0.7 s, glyph bàn tay đỏ thẫm | ×0 | ×0 | ×1.2 | Trúng = bị túm (paired), không thể phòng thủ tiếp tới khi thả |
projectile |
Ngắm 0.5–0.6 s (đường ngắm / dấu đất) | ×1.0 | ×1.0 | ×1.0 | Gạt bật ngược nếu có quy tắc reflect |
area (vùng đất/tia) |
Dấu vùng ≥ 0.8 s | ✗ | ✗ | — | Không roll: Tránh Vùng (§5.8) |
Đòn bị Gạt/Chặn/Né không gây hiệu ứng phụ (trạng thái, đẩy lùi, túm) — trừ Chặn: vẫn đẩy lùi 4 px và nhận trạng thái với 50% thời lượng.
5.4 Kết quả
GẠT (Deflect)
- Sát thương 0. Hit-stop 100 ms cả hai (Gạt Hoàn Hảo 133 ms) + nháy trắng 1 khung tại điểm chạm + tia lửa (
impacts/parry, recolor theo anh hùng) + chữ pixel "GẠT!" / "HOÀN HẢO!" + âm kim loại "keng" (pitch tăng theo chuỗi). - Địch nhận sát thương Thế = posture của đòn ×
DEFLECT_POSTURE_MULT(nhẹ ×1.0, nặng ×2.5) × (1 + PostureDmg) và Mất Thăng Bằng (Off-balance) 0.35 s (nặng 0.70 s; Boss chỉ 0.40 s với đòn nặng, đòn nhẹ không khựng). - Chuỗi Gạt: Gạt trong
DEFLECT_CHAIN_WINDOW1.2 s kể từ lần Gạt trước → chuỗi +1, mỗi bậc +4% Gạt (tối đa 5 bậc = +20%). Bậc 5 → Dòng Chảy (Flow State) 3 s: +20% tốc đánh, tia lửa vàng, viền sáng anh hùng. - Đạn: bị phá hủy; nếu anh hùng có quy tắc
reflect→ bật ngược về kẻ bắn, sát thương = sát thương đạn × (1 + ReflectDmg). - Phong Độ +60 (Hoàn Hảo +120); Bộc Phá +6 (+12); Khí Thủ +5.
- Mở Phản Đòn (§5.5).
CHẶN (Block)
- Sát thương × (1 − BlockRed),
BlockRed= 0.75 (nhẹ) / 0.45 (nặng) + BlockPower (trần 0.90 / 0.70). - Tiêu Khí Thủ = posture của đòn × 1.0 (nhẹ ≈ 8–12, nặng ≈ 30–40). Khí Thủ = 0 → Vỡ Thủ: anh hùng choáng
GUARD_BREAK_STUN0.9 s, đòn trúng kế tiếp ×1.5, Khí Thủ hồi đầy sau choáng. - Khí Thủ hồi
GuardRegen25/s sau 1.0 s không chặn; giữ nguyên giữa các wave; đầy lại khi sang tầng. - Hit-stop 50 ms, anh hùng trượt lùi 4 px, tia lửa nhỏ + chữ "CHẶN".
- Roll Phản Đòn Chặn với
BlockCounterRate(ICD 1.5 s). - Phong Độ +10; Bộc Phá +2.
NÉ (Evade)
- Sát thương 0; anh hùng phát clip né theo loại đòn:
sweep→ nhảy,thrust→ nghiêng/bước ngang,heavy/light→ lướt lùi,grab→ lăn qua sau lưng địch (evade_roll), đạn → cúi. i-frame phủ hit-frame địch. - Né Hoàn Hảo (né đòn
heavy/thrust/sweep/grab): slow-mo toàn cục 0.3× trong 0.4 s thực (ICD 6 s), dư ảnh 3 bản. - Roll Phản Đòn Né với
EvadeCounterRate(ICD 1.2 s). - Phong Độ +25 (Hoàn Hảo +60); Bộc Phá +4.
- Né khi đang ra đòn (×0.6): nghiêng 3 px + chữ "MISS", không clip né, không phản đòn.
TRÚNG (Hit)
- Sát thương đầy đủ; Poise anh hùng (§10.4); Combo đứt; Phong Độ −30%; Bộc Phá +2.
5.5 Phản Đòn (Counter)
| Nguồn | Điều kiện | ICD | Đòn dùng |
|---|---|---|---|
| Sau Gạt | Luôn (nếu bể Phản Đòn Gạt có đòn) | COUNTER_ICD.deflect 0.8 s |
Bể counter của anh hùng (≥ 1 đòn gốc) |
| Sau Chặn | Roll BlockCounterRate |
1.5 s | Bể block_counter (rỗng → dùng counter) |
| Sau Né | Roll EvadeCounterRate |
1.2 s | Bể evade_counter (rỗng → bỏ qua) |
- Phản Đòn bắt đầu ngay khung kế tiếp sau khung chạm phòng thủ, nhắm kẻ vừa tấn công (nếu ngoài tầm ≤ 64 px → biến thể lướt-phản đòn:
movecộng thêm tối đa 48 px). - Hit lớp K: +50% Crit, cộng
CounterDmg, posture 28, hit-stop 100 ms. - Bể Phản Đòn bốc theo trọng số + chống lặp như lộ trình (§6.5); Hồi Âm Kỹ Pháp có thể thêm đòn vào bể (
move_add(<id>, counter)). - Phản Đòn không bị Gạt bởi địch (địch đang Mất Thăng Bằng); Boss có thể Chặn (giảm 75%) nếu không Mất Thăng Bằng.
5.6 Chuỗi Gạt & Dòng Chảy — hiển thị
- Mỗi bậc chuỗi tăng: tia lửa nhiều hơn 2 hạt, nốt "keng" cao thêm 1 bán cung, chữ "GẠT ×N".
- Dòng Chảy: nền hơi tối 10% (dither), viền anh hùng ánh vàng, nhạc thêm lớp trống.
5.7 Va Kiếm (Clash)
- Điều kiện: hit-time của anh hùng và hit-time của địch (cận chiến, cùng nhắm nhau) chênh ≤
CLASH_WINDOW50 ms, đòn anh hùng lớp ≥ M, đòn địch không phảigrab. - Kết quả: không ai nhận sát thương; cả hai bật lùi 0.25 s (8 px); cả hai nhận sát thương Thế = posture đòn của đối phương × 0.5; tia lửa lớn + nháy trắng toàn đối tượng 1 khung + hit-stop 117 ms; Phong Độ +50.
- Anh hùng có quy tắc
clash_win→ anh hùng không bật lùi và đòn vẫn trúng (Brann, Aldric qua Hồi Âm). - Boss Va Kiếm với anh hùng: Boss mất 60 Thế (nặng 100).
5.8 Tránh Vùng (đòn area)
Dấu vùng nhắm vị trí anh hùng, windup ≥ 0.8 s → anh hùng luôn rời vùng (chạy/lướt) nếu đang tự do hoặc tới cửa sổ hủy trước khi vùng nổ; 0.6–0.8 s → 70%. Không rời kịp → trúng (không roll). Tránh Vùng không tiêu ICD, cho Phong Độ +15.
5.9 Phòng thủ của địch
Một số địch (04 §3) có:
- Thủ mặt trước (
guard_front): đòn từ phía trước không có taggbbị giảmGuardRed75% và cộng Thế cho địch thay vì trừ. - Gạt của địch (
enemy_deflect): xác suất gạt đòn L/M của anh hùng (Kiếm Sĩ Bóng 25%, Thủ Vệ/Boss đấu kiếm 30–40%). Bị gạt: anh hùng khựng 0.3 s (clip "bị gạt", không mất máu), địch được một đòn phản (báo hiệu 0.35 s) — anh hùng vẫn được roll phòng thủ cho đòn phản đó → tạo trao đổi kiếm qua lại. - Hit có tag
gb(guard break: đòn nặng, đâm, đòn từ sau lưng) bỏ qua cả hai và gây Thế ×2 lên địch đang thủ.
6Combo Engine
6.1 Khái niệm
MoveDef — một đòn (animation + hit-frame) → "chém ngang", "rút đao", "đá xoay"
RouteDef — chuỗi 2–8 MoveDef có điều kiện vào → "Trăng Khuyết: chém–chém–hất tung"
Cây Combo — mọi RouteDef anh hùng sở hữu trong run (gốc + Hồi Âm)
Đạo Diễn Combo — mỗi lần anh hùng rảnh, chọn RouteDef phù hợp nhất cho tình huống, rồi chạy nó
Khác với bể đòn theo vai trò của Inkfu: đơn vị lựa chọn là lộ trình (một câu combo trọn vẹn, có đầu–thân–kết), giúp mỗi Hồi Âm Combo = một "câu" nhận ra được bằng mắt. Lộ trình dùng chung các MoveDef (một đòn có thể xuất hiện trong nhiều lộ trình), nên số clip tăng chậm hơn số combo.
6.2 MoveDef (schema gameplay — 02 §5 thêm trường nghệ thuật)
| Trường | Kiểu | Ý nghĩa |
|---|---|---|
id |
string | <CODE>_<NHÓM><NN> — vd KAI_L1, KAI_AIR2, ALD_SB1; duy nhất toàn game |
name_vi, name_en |
string | Tên hiển thị (Sổ Ký Ức, xem build) |
cat |
enum | LIGHT HEAVY LAUNCH AIR SLAM DASH THRUST SPIN GRAB THROW COUNTER SKILL ULT EXEC EVADE BLOCK DEFLECT TAUNT LOCO |
dur |
s | Tổng thời lượng ở AtkSpeed 1 (gồm hồi đòn) |
cancel |
s | Từ mốc này đòn kế của lộ trình được phép bắt đầu |
hits |
list HitDef | Rỗng với clip phòng thủ/di chuyển |
armor |
[t0, t1] | — | Giáp siêu cứng (không khựng, nhận ST ×0.7) |
iframe |
[t0, t1] | — | Bất tử |
move |
(dx, dy) px | Root motion tổng (dx dương = về phía trước); dy > 0 = nhảy lên |
air |
bool | Đòn trên không (yêu cầu anh hùng đang ở trên không, hoặc là đòn nhảy lên) |
ends |
GROUND | AIR |
Anh hùng ở đâu khi kết thúc |
contact |
s | Chỉ clip phòng thủ: khung chạm (§5.1) |
tags |
list | gb (phá thủ), pierce, multi, pull, proj, wall, otg, delay, grab, noflip |
src |
base | id Hồi Âm |
Nguồn |
fx, sfx |
id | VFX pixelfx & âm thanh chính (02 §6) |
HitDef
| Trường | Ý nghĩa |
|---|---|
t |
Thời điểm hit (s, từ đầu đòn, chia cho AtkSpeed) |
mult |
× ATK |
cls |
L M H F K S U X (§11) |
react |
flinch stagger knockback launch knockdown wallbounce groundbounce crumple spin pull juggle spike stun none |
box |
arc(r,deg,dy) / box(w,h,dx,dy) / circle(r,dx,dy) / line(len,h,dy) |
kb |
Tốc đẩy ngang px/s (dương = ra xa) |
lift |
Đỉnh hất px (launch) hoặc lực nâng trên không |
post |
Ghi đè sát thương Thế (mặc định theo cls) |
status |
burn(chance,stacks,dur), bleed(...), stun(dur)… |
proj |
Id đạn (đòn ném/sóng kiếm) |
multi |
Số mục tiêu tối đa |
Quy ước nhịp (Q-rhythm): lấy đà 0.06–0.20 s, hit ≤ 0.08 s sau khung "release", hồi 0.10–0.30 s. Tổng mỗi đòn L 0.28–0.45 s, H 0.5–0.9 s.
Hệ số DPS đòn (kiểm tra cân bằng): Σ mult / dur của bộ đòn cơ bản mỗi lộ trình nằm trong 2.2–3.0 (sau khi tính tỉ lệ thời gian di chuyển). Lộ trình CROWD có thể thấp hơn (1.8) vì đánh nhiều mục tiêu; SIGNATURE cao hơn (tới 3.6) vì tốn Cổng.
6.3 RouteDef (Lộ Trình Combo)
| Trường | Ý nghĩa |
|---|---|
id |
<CODE>_R<NN> |
name_vi, name_en |
Tên lộ trình (hiện trên thẻ Hồi Âm và chữ nhỏ khi ra mắt) |
type |
GROUND LAUNCH AIR CROWD BREAK WALL OTG GAP SIGNATURE AWAKEN |
seq |
Danh sách MoveDef id (2–8) |
cond |
Điều kiện vào (§6.4) |
ends |
Trạng thái mục tiêu dự định khi kết thúc: stand air down wall broken any |
next |
Loại lộ trình bắt buộc kế tiếp (vd LAUNCH → AIR), rỗng = tự do |
weight |
Gốc 1.0; lộ trình từ Hồi Âm theo cấp 1.5 / 2.0 / 2.5 |
cd |
Hồi (s), 0 = không |
gauge |
Tác động Cổng cơ chế. Cú pháp: <ID>-n = tiêu n khi đòn đầu bắt đầu · <ID>-ALL = tiêu toàn bộ (sát thương lộ trình × lượng tiêu theo luật anh hùng) · <ID>+n = cộng n khi lộ trình kết thúc · <ID>>=n = chỉ điều kiện (không tiêu) |
src |
base hoặc id Hồi Âm |
tags |
Tag lộ trình (safe, shield, chain, dive…) — dùng cho route_mod(tag:X, …) và hệ số situ |
6.4 Ngôn ngữ điều kiện (cond)
Nối bằng &, lựa chọn bằng /.
| Token | Đúng khi |
|---|---|
dist<=N / dist>=N |
Khoảng cách tới mục tiêu (px, mép thân) |
crowd>=N@R |
≥ N địch trong bán kính R quanh anh hùng |
tgt:air / tgt:down / tgt:broken / tgt:guard / tgt:offbal |
Trạng thái mục tiêu (trên không / nằm / Vỡ Thế / đang thủ mặt trước / Mất Thăng Bằng) |
tgt:wall<=N |
Mục tiêu cách tường phía sau nó ≤ N px |
tgt:boss / tgt:elite / tgt:big / tgt:grab |
Loại mục tiêu (grab = túm được: không boss, không thân to) |
tgt:behind |
Mục tiêu sau lưng |
hero:air |
Anh hùng đang trên không |
hero:hp<=X |
HP anh hùng ≤ X (0–1) |
gauge>=N / gauge<=N |
Cổng cơ chế |
combo>=N |
Bộ đếm hit |
style>=R |
Phong Độ ≥ hạng R |
after:TYPE |
Lộ trình trước thuộc loại TYPE |
od |
Bộc Phá/Thức Tỉnh đang hoạt động |
first |
Lộ trình đầu tiên của wave |
6.5 Đạo Diễn Combo — chọn lộ trình
Gọi mỗi khi anh hùng rảnh (hết lộ trình, sau phòng thủ không tiếp được, sau khi đổi mục tiêu).
- Mục tiêu: §10.2.
- Ứng viên: lộ trình đang sở hữu, ngoài hồi chiêu,
condđúng,nextbắt buộc của lộ trình trước được tôn trọng (nếu có ứng viên thuộc loại đó; không có → bỏ qua ràng buộc). - Ưu tiên tuyệt đối (theo thứ tự): mục tiêu Vỡ Thế & có
EXEC→ Tuyệt Sát;nextbắt buộc; lộ trình mới ra mắt (vừa nhặt ở tầng trước, chưa dùng — mỗi lộ trình mới chắc chắn xuất hiện một lần ở lượt hợp lệ đầu tiên của tầng kế; lưu trong snapshot). - Điểm mỗi ứng viên:
score = weight × situ × novelty
Tình huống (situ) |
Hệ số |
|---|---|
CROWD khi crowd ≥ 3 trong 48 px |
× (1 + 0.4 × (crowd − 2)), tối đa ×3 |
CROWD khi crowd ≤ 1 |
× 0.2 |
BREAK khi mục tiêu guard / Thế ≥ 70% / Thủ Vệ / Boss |
× 2.5 |
WALL khi tgt:wall<=40 |
× 2.0 |
LAUNCH vs Boss/thân to chưa Vỡ Thế |
× 0 (Boss không bị hất trừ khi Vỡ Thế) |
LAUNCH vs đơn mục tiêu thường |
× 1.3 |
GAP |
chỉ khi dist > tầm đòn đầu + 16 px |
SIGNATURE khi đủ Cổng |
× 1.5 |
GROUND/BREAK vs Boss |
× 1.3 |
hero:hp<=0.35 |
lộ trình có tag safe × 1.5 |
Mới lạ (novelty) |
Hệ số |
|---|---|
| Trùng lộ trình vừa chạy (khi ≥ 2 ứng viên) | × 0 |
| Đã chạy trong 3 lộ trình gần nhất | × 0.4 |
| Chưa chạy trong tầng này | × 1.25 |
- Bốc theo trọng số
scoretrên luồng RNGcombat(tất định). - Không ứng viên nào: chạy tới tầm (MoveSpeed) hoặc dùng đòn
DASHnếu có; mục tiêu sau lưng →TURNhoặc quay mặt.
6.6 Chạy lộ trình
- Đòn kế bắt đầu ở
cancelcủa đòn trước (không chờ hết hồi đòn). - Giữa hai đòn: nếu mục tiêu ra khỏi tầm của đòn kế ≤ 24 px → trượt root (warp) tối đa 24 px trong 0.06 s; xa hơn → kết thúc lộ trình.
- Mục tiêu chết giữa lộ trình: chọn địch gần nhất trong tầm đòn kế + 24 px và chạy tiếp (route carry); không có → kết thúc.
- Phòng thủ chen vào (§5.2): tạm dừng → phòng thủ → phản đòn → tiếp từ đòn kế nếu ≤ 0.6 s & mục tiêu hợp lệ.
- Kỹ Năng chen vào: Kỹ Năng sẵn sàng & điều kiện AUTO (§9.3) → chen ở
cancelcủa đòn hiện tại, sau đó lộ trình bị hủy (Đạo Diễn chọn lại). - Lộ trình
LAUNCHkết thúc khi mục tiêu đang bay →next: AIR→ anh hùng nhảy theo (đònAIRđầu tiên cómove.dy). Lộ trìnhAIRthường kết thúc bằngspike(đập xuống) → mục tiêudown→ ưu tiênOTGnếu có. - Hệ số tốc đánh nhân tốc phát toàn bộ đòn; tối thiểu 0.08 s/đòn — vượt thì hit bổ sung thành "dư âm" (echo hit 30% ST, không clip mới).
6.7 Cấu trúc Cây Combo chuẩn của một anh hùng
| Thành phần | Số lượng | Bắt buộc |
|---|---|---|
| Lộ trình gốc | 10–12: ≥ 3 GROUND, 1 LAUNCH, 1 AIR, 1 CROWD, 1 BREAK, 1 GAP, 1 OTG hoặc WALL, 1 SIGNATURE (dùng Cổng) | ✔ |
| Bể Phản Đòn | counter ≥ 2 đòn gốc; block_counter, evade_counter theo phong cách |
✔ (counter) |
| Kỹ Năng | A + B (hồi chiêu) | ✔ |
| Tuyệt Kỹ | 1 (Bộc Phá) | ✔ |
| Tuyệt Sát | ≥ 1 đòn EXEC |
✔ |
| Đòn phòng thủ | DEFLECT, BLOCK (nếu B > 0), EVADE_BACK, EVADE_JUMP, EVADE_ROLL |
✔ |
| Di chuyển & trạng thái | idle, run, hurt ×2, knockdown, getup, death, victory, descent (đi cầu thang), intro | ✔ |
| Lộ trình từ Hồi Âm | 20–26 | — |
6.8 Bộ đếm Combo (hit)
| Luật | Giá trị |
|---|---|
| Tăng | +1 mỗi mục tiêu trúng một hit, tối đa +3/hit |
| Cửa sổ | ComboWindow 2.0 s từ hit trúng gần nhất |
| Đứt | Hết cửa sổ, hoặc anh hùng Trúng đòn (Gạt/Chặn/Né không làm đứt; khiên hấp thụ hết không đứt) |
| Mốc | 25 GOOD · 50 GREAT · 100 SAVAGE · 200 BRUTAL · 500 LEGEND → +5/+10/+15/+20/+30 Bộc Phá |
| Hiển thị | Số pixel lớn góc phải khung chiến đấu, nảy 1 px mỗi lần tăng, đổi màu theo mốc |
7Phong Độ (Style Rank)
Đo "đẹp mắt": đa dạng đòn, phòng thủ hoàn hảo, không bị trúng.
| Hạng | Ngưỡng điểm | +Sát thương | +Than Hồng khi hạ địch |
|---|---|---|---|
| D | 0 | +0% | +0% |
| C | 120 | +4% | +5% |
| B | 300 | +8% | +10% |
| A | 550 | +12% | +15% |
| S | 850 | +16% | +25% |
| SS | 1200 | +20% | +35% |
| SSS | 1600 | +30% | +50% |
Điểm cộng:
| Sự kiện | Điểm Phong Độ |
|---|---|
| L | 3 |
| M | 4 |
| H | 6 |
| F | 10 |
| launch | 8 |
| air | 6 |
| K | 20 |
| deflect | 60 |
| perfect_deflect | 120 |
| evade | 25 |
| perfect_evade | 60 |
| block | 10 |
| clash | 50 |
| execution | 150 |
| S | 5 |
| U | 8 |
| wall_bounce | 20 |
| kill | 15 |
| multikill | 40 |
| route_variety | 30 |
- Điểm hit × 0.5 nếu cùng
MoveDef.idđã xuất hiện trong 5 đòn gần nhất (STYLE_REPEAT_MULT) — khuyến khích đa dạng;route_variety+30 khi lộ trình mới khác loại lộ trình trước. - × (1 + StyleGain).
- Giảm: sau 2.0 s không có điểm → −60/s; Trúng đòn → −30% điểm hiện có và tụt tối thiểu 1 hạng. Trần 2,000. Sang tầng mới: giữ 50%.
- Hiển thị: chữ cái pixel lớn (D…SSS) dưới số Combo, viền màu theo hạng, khi lên hạng: nảy + lóe + âm "chime"; S trở lên nhạc thêm lớp; SSS chữ rung 1 px liên tục.
- Phong Độ cộng
STYLE_DMG_BONUSvào Context vàSTYLE_EMBER_BONUSvào Than Hồng khi hạ địch; Hồi Âm có thể dùng Phong Độ làm điều kiện/kích hoạt (on_style_rank).
8Bộc Phá (Overdrive) & Thức Tỉnh
| Nguồn | Năng lượng Bộc Phá |
|---|---|
| hit | 1 |
| hit_cap | 3 |
| deflect | 6 |
| perfect_deflect | 12 |
| evade | 4 |
| counter | 5 |
| block | 2 |
| hurt | 2 |
| kill | 3 |
| rank_up | 5 |
Tất cả × (1 + OverdriveGain). Tối đa 100; giữ khi sang tầng.
- Tuyệt Kỹ (mặc định): đầy 100 + điều kiện AUTO (§9.3) → anh hùng bất tử, letterbox 16 px trên/dưới, nền tối 40%, zoom 2× quanh anh hùng nếu Tuyệt Kỹ là đòn đơn mục tiêu, hit cuối slow-mo 0.25× trong 0.6 s thực. Mỗi anh hùng 1 Tuyệt Kỹ (
ULT). - Thức Tỉnh (nếu có Hồi Âm Tuyệt Truyền
ARTcủa anh hùng): đầy 100 → biến hình 8 s: lộ trình cócond: odmở, đòn gốc +X% (theo thẻ), hiệu ứng ngoại hình (ramp sáng/viền/aura pixelfx) → kết thúc bằng Tuyệt Kỹ (cường hóa nếu thẻ nói vậy). Trong Thức Tỉnh Bộc Phá không tích. - Chế độ THỦ CÔNG (toggle HUD): Bộc Phá chỉ kích hoạt khi người chơi chạm nút; Auto-Rerun luôn ép AUTO.
- Chỉ kích hoạt ở cửa sổ hủy/giữa hai đòn (không cắt hit-frame).
9Cổng cơ chế riêng, Kỹ Năng, Tuyệt Sát
9.1 Cổng cơ chế (HeroGauge)
Mỗi anh hùng có đúng một Cổng, định nghĩa dữ liệu:
| Trường | Ý nghĩa |
|---|---|
id, name_vi/en |
FOCUS Ý Kiếm, VERDICT Phán Xét, MOMENTUM Đà, FURY Cuồng Nộ, SKY Thiên Khí, CHI Chân Khí, SOULS Linh Hồn, TENSION Xích Căng |
max |
3 / 100 / 30 / 100 / 3 / 5 / 10 / 100 |
gain |
Danh sách sự kiện → lượng (vd on_deflect:+1, on_hit:+1, on_block:dmgBlocked/MaxHP×200) |
decay |
Giảm theo thời gian (vd −1/0.25 s sau 1.5 s không đánh) |
threshold |
Ngưỡng → hiệu ứng (vd Đà 30 → Cuồng Sát 5 s) |
spend |
Lộ trình/kỹ năng tiêu Cổng (gauge trong RouteDef) |
ui |
Dạng hiển thị (điểm sáng, thanh, ô) cạnh thanh HP |
Chi tiết từng Cổng ở chương anh hùng. Cổng giữ nguyên khi sang wave, về giá trị khởi đầu khi sang tầng trừ khi Cổng ghi khác.
9.2 Kỹ Năng A/B
Mỗi anh hùng 2 Kỹ Năng (SKILL) có hồi chiêu 6–16 s × (1 − SkillCdr), giáp siêu cứng trong suốt đòn, hit cuối dùng cảm giác Finisher. Hồi Âm Bí Kỹ có thể thay một Kỹ Năng trong run (move_replace(skill_a, <id>)) hoặc biến đổi (skill_mod).
9.3 Điều kiện AUTO
- Kỹ Năng: hồi xong VÀ (≥ 2 địch trong vùng kỹ năng HOẶC mục tiêu Tinh Anh/Thủ Vệ/Boss HOẶC điều kiện riêng của kỹ năng) — hoặc đã sẵn sàng > 3 s.
- Bộc Phá: 100 VÀ (≥ 4 địch trong 64 px HOẶC Thủ Vệ/Boss trong tầm HOẶC HP anh hùng < 35%) — hoặc đầy > 6 s.
- Không bao giờ dùng khi mục tiêu Vỡ Thế (để dành Tuyệt Sát) trừ khi không có Tuyệt Sát nào sẵn.
9.4 Tuyệt Sát (Execution)
- Điều kiện: mục tiêu Vỡ Thế (§10.5) trong tầm Tuyệt Sát (thường 32–48 px), hoặc địch thường (không Boss) có HP ≤
ExecuteThreshold. Hồi 4 s (theo anh hùng). - Anh hùng bất tử suốt đòn. Địch thường/Tinh Anh/Thủ Vệ: chết ngay (Thủ Vệ: chỉ khi HP ≤ 30%, ngược lại nhận 25% Max HP). Boss: 10% Max HP sát thương chuẩn, một lần mỗi lần Vỡ Thế.
- Cảm giác: zoom 2×, letterbox, slow-mo khung trước va 0.4× trong 0.3 s, hit-stop 250 ms, rung 4 px, nháy đảo màu 1 khung (tắt được), chữ pixel tên đòn.
- Phong Độ +150; Bộc Phá +10.
10AI anh hùng (HeroBrain)
10.1 Trạng thái
Enter (xuống cầu thang) → Idle → Seek → Approach → Route ⇄ Skill / Ultimate / Defending / Counter → Victory (đi tới miệng hầm). Phản ứng: Flinch, Stagger, Knockdown, GuardBroken, Grabbed, Downed.
10.2 Chọn mục tiêu
Đánh giá mỗi 0.25 s, chỉ đổi tại ranh giới đòn/cửa sổ hủy hoặc khi mục tiêu chết:
S(e) = 100/(1 + dist/16) + 40·[đang giữ token & đang lấy đà vào anh hùng] + 30·[tầm xa & dist > 64]
+ 60·[Vỡ Thế] + 25·[Mất Thăng Bằng] + 50·[hồi máu/triệu hồi] + 30·[Tinh Anh/Thủ Vệ] + 60·[Boss]
+ 25·(1 − hp%) + 20·[mục tiêu hiện tại] − 30·[thủ mặt trước & anh hùng không có BREAK]
10.3 Khoảng giao chiến
| Tham số | Giá trị |
|---|---|
| Tầm đòn | Từ hitbox đòn đầu của lộ trình được chọn × (1 + Reach) |
| Khoảng ưa thích | Theo anh hùng (spacing): Vex 14 px, Kaito 22, Aldric 20, Brann 28, Rook 12, Lyra 44, Mora 34, Sable 52 |
| Giữ khoảng | Địch áp sát hơn spacing − 8 và anh hùng có đòn lùi/lướt → dùng; anh hùng tầm xa ưu tiên GAP/đẩy lùi |
| Mục tiêu sau lưng | Dùng TURN nếu có; ngược lại quay mặt 0.08 s |
| Mục tiêu trên không | Sau LAUNCH → AIR; mục tiêu bị hất bởi nguồn khác → chỉ nhảy theo nếu có AIR hợp lệ |
10.4 Poise anh hùng
Poise 100 (+ hero, Cây Đèn Hồn, Hồi Âm). Đòn nhẹ địch 15, nặng 60, nặng Boss 100–150. Hồi 50/s sau 1 s không bị đánh. Poise ≤ 0 → Khựng 0.5 s (Boss nặng: Ngã 1.2 s), Poise đầy lại. Giáp siêu cứng trong đòn có armor, Kỹ Năng, Tuyệt Kỹ: vẫn nhận ST ×0.7 nhưng không khựng. Không bị khóa khựng > 1.5 s liên tục (bất tử 0.5 s sau 1.5 s khựng tích lũy).
11AI địch & Combat Director
11.1 Token tấn công
| Tham số | Giá trị |
|---|---|
| Token cận chiến | min(4, 2 + ⌊f/30⌋) |
| Token tầm xa | min(3, 1 + ⌊f/35⌋) |
| Phân phát | Mỗi 0.5 s: token trống → địch chờ, xếp theo (khoảng cách tăng, thời gian chờ giảm) |
| Giữ | Tới hết chuỗi đòn + 0.5 s; hồi 1.0 s mới xin lại |
| Nhịp chồng đòn | Hai hit-frame của hai địch khác nhau nhắm anh hùng phải cách ≥ 0.25 s (Director dời lấy đà) — để mỗi lần phòng thủ đọc được; Boss/Thủ Vệ được phép phối hợp combo riêng |
| Ngoại lệ | Thủ Vệ, Boss, Quỷ Bom, đàn dơi không cần token |
11.2 Vòng vây
Địch không token đứng ở vòng 48–72 px quanh anh hùng, chia đều hai bên. Mỗi 2–4 s chọn hành vi phụ: khiêu khích, bước nhử ±8 px, đổi bên (đi vòng phía sau với 20% xác suất).
11.3 Báo hiệu đòn (bắt buộc với mọi đòn địch)
| Loại | Thời gian lấy đà | Báo hiệu pixel | Âm |
|---|---|---|---|
light |
≥ 0.35 s | Dáng lấy đà rõ (2–3 khung giữ) | Hơi thở/rít |
heavy |
≥ 0.6 s | Thân nháy đỏ (#ff2040, 2 khung/0.1 s) + "!" 5×7 trên đầu | "Rèn" ngắn |
thrust / sweep / grab |
≥ 0.7 s | Glyph đỏ thẫm (#a0102a) 9×9 trên đầu: mũi tên / sóng / bàn tay + viền thân đỏ thẫm | Âm trầm "boong" |
projectile |
0.5–0.6 s | Đường ngắm 1 px đứt (ranged) / dấu tròn đất (ném) | Tiếng lên dây |
area |
≥ 0.8 s | Vùng đất dither đỏ nhấp nháy nhanh dần | Ù tăng |
Anh hùng trúng địch trong lúc lấy đà và làm địch Khựng (vượt Poise) → hủy đòn của địch.
11.4 Giới hạn đám đông
| Tier | Địch sống đồng thời | Đạn | Afterimage / light buffer |
|---|---|---|---|
| High | 10 | 60 | Bật |
| Mid | 8 | 45 | Bật |
| Low | 6 | 30 | Tắt |
Vượt giới hạn → hàng đợi spawn (05 §4).
12Thế (Posture) & phản ứng trúng đòn
12.1 Lớp hit
| Lớp | Tên | Posture | Hit-stop (ms) | Rung (px) | Rung (s) | Cỡ số ST (px@1080) |
|---|---|---|---|---|---|---|
| L | Light | 6 | 33 | 0 | 0.0 | 36 |
| M | Medium | 10 | 50 | 1 | 0.06 | 36 |
| H | Heavy | 18 | 83 | 2 | 0.1 | 44 |
| F | Finisher | 30 | 117 | 3 | 0.14 | 52 |
| K | Counter | 28 | 100 | 2 | 0.12 | 52 |
| S | Skill | 20 | 50 | 1 | 0.08 | 44 |
| U | Ultimate | 60 | 200 | 4 | 0.25 | 60 |
| X | Execution | 0 | 250 | 4 | 0.3 | 64 |
12.2 Thế của địch
- Mỗi loại địch có
posture(04 §2): lính thường 20–40 (không hiện thanh), Tinh Anh ×2, Thủ Vệ 200–320, Boss300 + 30 × idx. - Sát thương Thế = posture của lớp hit (hoặc
post) × (1 + PostureDmg) × [×2 nếugbvào địch đang thủ] × [×1.5 nếu địch Mất Thăng Bằng]. - Hồi Thế: sau 1.5 s không nhận Thế, hồi 12% Max Thế/s (Boss 8%/s).
- Vỡ Thế khi Thế đầy: địch đứng choáng 2.5 s (Boss 3.5 s, sau đó miễn Vỡ 12 s), nhận +50% sát thương, quỳ một gối (clip
broken), viền trắng nhấp nháy. Anh hùng ưu tiên Tuyệt Sát (§9.4). - Lính thường không hiện thanh: Vỡ Thế = ngã (knockdown) ngay; Tinh Anh/Thủ Vệ/Boss hiện thanh Thế dưới thanh HP.
12.3 Poise của địch (gián đoạn)
Tích Poise nhận trong 1.5 s ≥ Poise địch → phản ứng đầy đủ (react của hit); chưa đủ → chỉ giật nhẹ (lùi 1 px, nháy trắng 1 khung) và không bị ngắt đòn. Địch Poise 0 phản ứng mọi hit. Siêu giáp của Boss/Thủ Vệ theo kịch bản.
12.4 Bảng phản ứng
| Phản ứng | Điều kiện | Thời lượng / vật lý | Ghi chú |
|---|---|---|---|
| Flinch | L/M, trên đất | 0.25 s, lùi 2 px | 2 biến thể (cao/thấp) |
| Stagger | H/F hoặc vỡ Poise | 0.6 s, trượt lùi 8 px | |
| Knockback | kb ≥ 120 px/s |
Trượt, giảm tốc 600 px/s² | Chạm tường ≥ 220 px/s → Wallbounce |
| Launch | react: launch |
v₀ = √(2·g·lift), g = 950 px/s² | Boss/thân to chỉ khi Vỡ Thế |
| Juggle | Hit trúng mục tiêu trên không | Nâng AIR_HIT_LIFT 140 px/s |
Tối đa 10 hit/lượt tung; sau 6 hit trọng lực ×1.5 |
| Spike | react: spike trên không |
Đập xuống 600 px/s → Groundbounce (1 lần) hoặc Knockdown | |
| Knockdown | Đòn quật/rơi xuống | Nằm 0.8 s + dậy 0.5 s | Đánh nằm (OTG) 50% ST, tối đa 3 hit |
| Wallbounce | Va tường | Dính 0.15 s → bật ngược 60% tốc, 1 lần/lượt | Vết nứt tường |
| Groundbounce | Spike chạm đất | Bật lên 40 px, 1 lần/lượt | Bụi đất |
| Crumple | Phản Đòn/Gạt Hoàn Hảo lên địch đang lấy đà | Sụm chậm 0.8 s (mở OTG) | |
| Spin | Đòn xoay mạnh | Xoay tại chỗ 0.4 s | |
| Pull | react: pull |
Kéo về phía anh hùng tới khoảng 16 px | Liềm xích, lưỡi hái móc |
| Off-balance | Bị Gạt | 0.35–0.7 s, không hành động | Thế nhận ×1.5 |
| Broken | Thế đầy | 2.5 / 3.5 s | §12.2 |
| Grabbed | Đòn túm (Rook, Boss) | Theo clip đôi | Không boss |
| Frozen / Stunned | Trạng thái | §13 | |
| Death | HP ≤ 0 | Biến thể theo hit cuối (02 §9) |
Ưu tiên khống chế: Grabbed > Broken > Frozen > Stunned > Knockdown > Launch/Juggle > Off-balance > Stagger > Flinch.
13Hiệu ứng trạng thái & nguyên tố
6 nguyên tố + vật lý; màu lấy ramp PAL của pixelfx (12 §2).
| Hiệu ứng | Nguồn | Cộng dồn | Thời lượng | Tác dụng | Với Boss | EffectType |
|---|---|---|---|---|---|---|
| Bỏng (Burn) | Hỏa | 3, làm mới chung | 3 s | 20% ATK/s mỗi tầng | đủ | built-in Burn (5) |
| Lạnh (Chill) | Băng | 3 | 3 s | −12% tốc chạy/tốc đánh/tầng; đủ 3 → Đóng Băng | không đóng băng; chậm tối đa 36% | custom 1001 |
| Đóng Băng (Freeze) | Lạnh 3 | — | 1.5 s | Bất động; hit H/F làm vỡ (+60% ST hit đó) | miễn | built-in Freeze (2) |
| Điện Giật (Shock) | Lôi | 1 | 4 s | +15/20/25% sát thương nhận; 25% lan sang 1 địch gần | đủ | custom 1002 |
| Độc (Venom) | Độc | 10, hẹn giờ riêng | 6 s | 5% ATK/s mỗi tầng | đủ | custom 1003 |
| Chảy Máu (Bleed) | Vật lý (Vex, Kaito, Mora) | 5 | 4 s | 8% ATK/s mỗi tầng; khi đủ 5 → Xuất Huyết nổ 150% ATK, xóa tầng | đủ | built-in Bleed (4) |
| Ám Ấn (Hex) | Ám | 3 | 5 s | −8% DEF & +5% ST nhận mỗi tầng | đủ | custom 1004 |
| Phá Giáp (Sunder) | Đòn gb, Brann |
5 | 4 s | −6% DEF mỗi tầng | đủ | custom 1005 |
| Thánh Quang (Radiance) | Quang | 1 | 4 s | Hạ địch đang Thánh Quang → hồi 1% Max HP (ICD 0.5 s); +25% ST lên địch Bất Tử (xương, ma) | đủ | custom 1006 |
| Đánh Dấu (Marked) | Hồi Âm | 1 | 5 s | CritDmg lên mục tiêu +20/30/40% | đủ | custom 1007 |
| Choáng (Stun) | nhiều | — | theo nguồn | Không hành động | quy đổi Thế: 40 điểm/s hiệu lực | built-in Stun (21) |
| Chậm (Slow) | nhiều | lấy mạnh nhất | theo nguồn | −X% tốc chạy | 50% hiệu lực | built-in Slow (20) |
| Đẩy lùi | đòn | — | — | Dịch chuyển | miễn (trừ Vỡ Thế) | built-in KnockBack (1) |
Trạng thái địch áp lên anh hùng (Độc, Bỏng, Lạnh — không bao giờ Đóng Băng anh hùng —, Chậm, Choáng) theo bảng enemies_hero_status (04). Thời lượng thực = gốc × (1 + StatusDuration); Tỷ lệ = gốc + StatusChance. Custom effect đăng ký EffectRegistry.Configure, id ≥ 1000 (13 §4).
14Game feel
14.1 Hit-stop & đóng băng
- Cục bộ: chỉ attacker + nạn nhân của hit đó dừng (đồng hồ actor = 0); địch khác vẫn chạy.
- Thời lượng theo lớp hit (§12.1); chí mạng +17 ms (1 tick ×1); tổng hit-stop của anh hùng ≤ 300 ms trong cửa sổ trượt 1 s (phần vượt bỏ). Chồng hit-stop: lấy giá trị lớn nhất còn lại.
- pixelfx
act.hits[].stoplà nguồn gốc giá trị cho từng đòn; bảng lớp hit là mặc định khi đòn không ghi. - Toàn cục (slow-mo
CombatClock0.25× trong 0.6 s thực + zoom 2× nếu điểm va trong khung): hit cuối Tuyệt Kỹ, Tuyệt Sát, hạ địch cuối của tầng, hạ Thủ Vệ/Boss. Né Hoàn Hảo: 0.3× 0.4 s.
14.2 Rung & camera
- Rung tính bằng px nguyên, công thức pixelfx (
x = sin(f·2.4)·k,y = cos(f·3.7)·0.7k, f = ⌊t·60⌋), k giảm tuyến tính; biên độ theo lớp hit (§12.1). Không rung khiamp= 0. - Camera punch: lệch 2 px theo hướng đòn trong 2 tick ở hit H/F/K.
- Cài đặt "Giảm nhấp nháy": tắt nháy đảo màu, nháy trắng toàn màn, rung −50%.
14.3 VFX/SFX/chữ
| Lớp hit | VFX pixelfx (mặc định) | SFX | Chữ |
|---|---|---|---|
| L | impacts/hit-spark (nhỏ) + vệt chém của đòn |
sfx_hit_light_[1-4] |
— |
| M | hit-spark + impacts/hit-flash |
sfx_hit_med_[1-4] |
— |
| H / F | impacts/crit-hit hoặc blunt-hit + bụi |
sfx_hit_heavy_[1-3] |
25% chữ pixel "SLASH!/CRACK!" |
| K | impacts/parry → vệt phản đòn |
sfx_counter_[1-3] |
"PHẢN!" |
| X | Theo anh hùng + impacts/impact-frame (re-author 270×480) |
sfx_exec_<hero> |
Tên Tuyệt Sát |
| Gạt / Chặn / Va Kiếm | impacts/parry / impacts/shield-block / parry ×2 + ricochet |
sfx_deflect_[1-5] (pitch theo chuỗi) / sfx_block / sfx_clash |
"GẠT!", "CHẶN", "VA KIẾM!" |
Số sát thương: font pixel (Tiny5 hoặc font thay thế có tiếng Việt — 11 §3), viền 1 px ink, bay lên 0.6 s theo bậc 1 px, gộp DoT mỗi 1 s, chí mạng màu cam #ffa040 + "!", Phản Đòn màu vàng. Tắt được trong Cài đặt.
14.4 Chết
Địch thường: tan bằng spawn/shatter-death hoặc dissolve-burn theo nguyên tố hit cuối (recolor), xác rơi 1 lần bật, mờ 0.8 s; vết máu tối/tro trên sàn (mờ sau 6 s). Tinh Anh: + nổ nhỏ. Boss: slow-mo + spawn/soul-rise + tro bay.
15Tốc độ game
x1 · x1.5 (kỷ lục B5) · x2 (kỷ lục B10) · x3 (Thẻ Tháng; dùng thử 1 run/ngày). Áp lên CombatClock (không phải Time.timeScale); UI dùng unscaled. Hit-stop/slow-mo nhân thêm. Lựa chọn lưu theo người chơi.
16Gục & hồi sinh
HP = 0 → slow-mo 0.5 s, clip downed (quỳ, đèn hồn chập chờn) → hồi sinh theo thứ tự 05 §8. Hồi sinh: bật dậy với vòng lửa đèn hồn đẩy lùi mọi địch trong 64 px (0 ST), bất tử 2 s, Combo = 0, giữ Bộc Phá, Cổng cơ chế về khởi đầu, Khí Thủ đầy.
17Edge cases
| # | Tình huống | Xử lý |
|---|---|---|
| C1 | Mục tiêu chết giữa lộ trình | Route carry (§6.6); không có ai → kết thúc |
| C2 | Hết địch giữa lộ trình | Chạy hết đòn hiện tại → Victory (clip thắng/thu vũ khí) |
| C3 | Địch ra ngoài phòng | Kẹp vị trí; ngoài biên > 1 s → dịch về điểm spawn gần nhất |
| C4 | Địch tầm xa chạy vòng mãi | Anh hùng luôn có ≥ 1 GAP; địch tầm xa không lùi quá x = ±150 |
| C5 | Boss bất tử theo kịch bản | ≤ 4 s liên tục; anh hùng đánh lính |
| C6 | Hai khống chế cùng lúc | Ưu tiên §12.4 |
| C7 | Hit-stop chồng | Lấy lớn nhất còn lại, không cộng |
| C8 | Tốc đánh rất cao | Tối thiểu 0.08 s/đòn; vượt → hit "dư âm" |
| C9 | Kẹt giữa hai thân to | Đòn DASH/GAP xuyên địch; Poise đảm bảo không khóa > 1.5 s |
| C10 | Hai đòn địch cam kết cùng tick | Director đã giãn ≥ 0.25 s (§11.1); nếu vẫn trùng (Boss + lính): roll riêng từng đòn, phòng thủ đòn đầu, đòn sau chỉ được Né ×0.6 |
| C11 | Đòn địch thứ hai tới khi anh hùng đang Defending | Clip phòng thủ hủy được sang clip phòng thủ khác từ contact + 2 tick; đòn đa hit của địch được roll từng hit (các hit cách ≥ 0.22 s — 04 §3). Nếu đòn thứ hai cam kết trước mốc đó: chỉ roll Né ×0.6 |
| C12 | Tất cả tỉ lệ phòng thủ = 0 | Bỏ qua roll, mọi đòn Trúng (Brann đầu game với đòn thrust) |
| C13 | Phản Đòn nhắm địch đã chết | Đổi sang địch gần nhất trong 32 px, không có → hủy, không tiêu ICD |
| C14 | Vỡ Thế khi đang trên không | Rơi xuống, Vỡ Thế bắt đầu khi chạm đất |
| C15 | Lộ trình next: AIR nhưng mục tiêu đã rơi |
Bỏ ràng buộc, chọn lại |
18Cấu hình (CombatConfig.csv)
Toàn bộ hằng số §2–§16 (constants.py) xuất ra CombatConfig.csv (key/value) để chỉnh không cần build: combo_window_base, defense_lead_s, deflect_chain_*, counter_icd_*, block_reduction_*, guard_*, posture_*, broken_*, style_*, overdrive_*, hitstop_*, gravity, air_hit_cap, otg_*, tokens_*, max_alive_*, descent_heal…
| Key | Giá trị |
|---|---|
| tick_hz | 60 |
| ppu | 16 |
| room_half_w | 176 |
| ceiling_y | 200 |
| gravity | 950 |
| launch_height_low | 48 |
| launch_height_mid | 80 |
| launch_height_high | 120 |
| air_hit_lift | 140 |
| air_hit_cap | 10 |
| juggle_decay_after | 6 |
| otg_dmg_mult | 0.5 |
| otg_hit_cap | 3 |
| wall_splat_speed | 220 |
| bounce_per_combo | 1 |
| hero_hp0 | 400 |
| hero_atk0 | 40 |
| account_base_hp | 200 |
| account_base_atk | 20 |
| hero_def0 | 20 |
| hero_move0 | 96 |
| hero_poise0 | 100 |
| guard0 | 100 |
| guard_regen | 25 |
| guard_regen_delay | 1.0 |
| guard_break_stun | 0.9 |
| guard_break_vuln | 0.5 |
| level_growth | 0.08 |
| block_reduction_light | 0.75 |
| block_reduction_heavy | 0.45 |
| defense_lead_s | 0.15 |
| deflect_offbalance_light | 0.35 |
| deflect_offbalance_heavy | 0.7 |
| deflect_offbalance_boss_heavy | 0.4 |
| deflect_posture_light | 1.0 |
| deflect_posture_heavy | 2.5 |
| deflect_chain_window | 1.2 |
| deflect_chain_bonus | 0.04 |
| deflect_chain_max | 5 |
| flow_state_s | 3.0 |
| flow_state_aspd | 0.2 |
| counter_icd_deflect | 0.8 |
| counter_icd_block | 1.5 |
| counter_icd_evade | 1.2 |
| counter_crit_bonus | 0.5 |
| perfect_evade_slowmo | 0.3 |
| perfect_evade_real_s | 0.4 |
| perfect_evade_icd | 6.0 |
| evade_sway_mult | 0.6 |
| clash_window_s | 0.05 |
| hitstop_crit_bonus_ms | 17 |
| hitstop_budget_ms_per_s | 300 |
| posture_regen_delay | 1.5 |
| posture_regen_per_s | 0.12 |
| broken_time_normal | 2.5 |
| broken_time_boss | 3.5 |
| broken_vuln | 0.5 |
| boss_break_immune_s | 12.0 |
| execution_boss_dmg | 0.1 |
| style_cap | 2000 |
| style_decay_delay | 2.0 |
| style_decay_per_s | 60 |
| style_hit_taken_loss | 0.3 |
| style_repeat_mult | 0.5 |
| overdrive_max | 100 |
| combo_window_base | 2.0 |
| descent_heal | 0.08 |
| gate_heal | 0.3 |
| revive_hp | 0.5 |
| free_revive_cap | 3 |
| boss_enrage_s | 150 |
| hit_L_posture | 6 |
| hit_L_hitstop_ms | 33 |
| hit_L_shake_px | 0 |
| hit_L_shake_s | 0.0 |
| hit_M_posture | 10 |
| hit_M_hitstop_ms | 50 |
| hit_M_shake_px | 1 |
| hit_M_shake_s | 0.06 |
| hit_H_posture | 18 |
| hit_H_hitstop_ms | 83 |
| hit_H_shake_px | 2 |
| hit_H_shake_s | 0.1 |
| hit_F_posture | 30 |
| hit_F_hitstop_ms | 117 |
| hit_F_shake_px | 3 |
| hit_F_shake_s | 0.14 |
| hit_K_posture | 28 |
| hit_K_hitstop_ms | 100 |
| hit_K_shake_px | 2 |
| hit_K_shake_s | 0.12 |
| hit_S_posture | 20 |
| hit_S_hitstop_ms | 50 |
| hit_S_shake_px | 1 |
| hit_S_shake_s | 0.08 |
| hit_U_posture | 60 |
| hit_U_hitstop_ms | 200 |
| hit_U_shake_px | 4 |
| hit_U_shake_s | 0.25 |
| hit_X_posture | 0 |
| hit_X_hitstop_ms | 250 |
| hit_X_shake_px | 4 |
| hit_X_shake_s | 0.3 |
| style_D_threshold | 0 |
| style_D_dmg | 0.0 |
| style_D_ember | 0.0 |
| style_C_threshold | 120 |
| style_C_dmg | 0.04 |
| style_C_ember | 0.05 |
| style_B_threshold | 300 |
| style_B_dmg | 0.08 |
| style_B_ember | 0.1 |
| style_A_threshold | 550 |
| style_A_dmg | 0.12 |
| style_A_ember | 0.15 |
| style_S_threshold | 850 |
| style_S_dmg | 0.16 |
| style_S_ember | 0.25 |
| style_SS_threshold | 1200 |
| style_SS_dmg | 0.2 |
| style_SS_ember | 0.35 |
| style_SSS_threshold | 1600 |
| style_SSS_dmg | 0.3 |
| style_SSS_ember | 0.5 |
| style_gain_L | 3 |
| style_gain_M | 4 |
| style_gain_H | 6 |
| style_gain_F | 10 |
| style_gain_launch | 8 |
| style_gain_air | 6 |
| style_gain_K | 20 |
| style_gain_deflect | 60 |
| style_gain_perfect_deflect | 120 |
| style_gain_evade | 25 |
| style_gain_perfect_evade | 60 |
| style_gain_block | 10 |
| style_gain_clash | 50 |
| style_gain_execution | 150 |
| style_gain_S | 5 |
| style_gain_U | 8 |
| style_gain_wall_bounce | 20 |
| style_gain_kill | 15 |
| style_gain_multikill | 40 |
| style_gain_route_variety | 30 |
| od_gain_hit | 1 |
| od_gain_hit_cap | 3 |
| od_gain_deflect | 6 |
| od_gain_perfect_deflect | 12 |
| od_gain_evade | 4 |
| od_gain_counter | 5 |
| od_gain_block | 2 |
| od_gain_hurt | 2 |
| od_gain_kill | 3 |
| od_gain_rank_up | 5 |
| cap_AtkSpeed | 2.0 |
| cap_MoveSpeedMult | 1.8 |
| cap_CritRate | 1.0 |
| cap_Lifesteal | 0.2 |
| cap_Regen | 0.02 |
| cap_DmgReduction | 0.6 |
| cap_TotalReductionMin | 0.15 |
| cap_DeflectRate | 0.6 |
| cap_BlockRate | 0.6 |
| cap_EvadeRate | 0.5 |
| cap_AvoidTotal | 0.7 |
| cap_DefenseTotal | 0.9 |
| cap_SkillCdr | 0.5 |
| cap_StatusDuration | 2.0 |
| cap_Luck | 30 |
| cap_ExecuteThreshold | 0.3 |
| cap_ShieldMaxOfHp | 1.0 |
| cap_CardGoldGain | 2.0 |
| cap_ComboWindow | 4.0 |
| cap_ReachBonus | 0.6 |
| cap_AoeBonus | 1.2 |
| max_alive_high | 10 |
| max_alive_mid | 8 |
| max_alive_low | 6 |
| max_projectiles_high | 60 |
| max_projectiles_mid | 45 |
| max_projectiles_low | 30 |
| attack_thrust_mods | {"block": 0.0, "deflect": 0.0, "evade": 1.0} |
| attack_sweep_mods | {"block": 0.0, "deflect": 0.0, "evade": 1.0} |
| attack_grab_mods | {"block": 0.0, "deflect": 0.0, "evade": 1.2} |
| attack_heavy_mods | {"block": 0.5, "deflect": 1.0, "evade": 1.0} |
| attack_projectile_mods | {"block": 1.0, "deflect": 1.0, "evade": 1.0} |
18bHook engine dùng chung (do dữ liệu anh hùng/địch yêu cầu)
Các cơ chế dưới đây được dữ liệu 03/Heroes//04 sử dụng; hiện thực một lần trong engine, bật bằng tag/rule — không code riêng từng đòn. Chi tiết tham số nằm ở chương anh hùng §3 tương ứng.
| Id | Hook | Đặc tả | Dùng bởi |
|---|---|---|---|
| ENG-01 | Sát thương trễ (delay + marker release) |
Hit delay cất sát thương vào "túi trễ" của mục tiêu (đã tính crit/vuln), nổ ở marker release của đòn sau hoặc sau 1.2 s; mục tiêu chết → mất |
Kaito |
| ENG-02 | Lộ trình ép buộc khi Cổng đầy | Cổng chạm max → lộ trình SIGNATURE chỉ định chạy ngay ở ranh giới đòn kế (ưu tiên trên Tuyệt Sát); -ALL nhân sát thương theo lượng tiêu |
Aldric (ALD_JUDGMENT) |
| ENG-03 | Khóa Cổng ở max trong trạng thái |
Trong Bạo Nộ / Cuồng Sát / Dạng Tử Thần, Cổng giữ max tới hết thời lượng rồi về 0 → gauge>=max nghĩa là "đang trong trạng thái" |
Brann, Vex, Mora |
| ENG-04 | Giáp theo ngưỡng Cổng | Cổng ≥ ngưỡng → đòn cat HEAVY (hoặc mọi đòn) nhận armor toàn thời lượng |
Brann |
| ENG-05 | Đổi clip theo cấp gồng | Đòn có charge_levels [id L1, L2, L3]: runtime chọn clip cấp cao hơn khi mục tiêu Choáng/Vỡ Thế/Mất Thăng Bằng hoặc Cổng ≥ ngưỡng (BRN_CHARGE) |
Brann |
| ENG-06 | Khiên chặn đạn tự động | Trong đòn có tag shield, đạn từ phía trước bị Chặn 100% (không roll), vẫn tốn Khí Thủ |
Aldric |
| ENG-07 | Quỹ sát thương đã chặn | Tổng sát thương bị Chặn tích vào quỹ; Phản Đòn Chặn kế tiếp cộng % quỹ rồi xóa | Aldric |
| ENG-08 | Dịch chuyển sau lưng (blink) |
Đòn tag blink: anh hùng xuất hiện sau lưng mục tiêu ở khung đầu; mọi hit của đòn tính là đánh từ sau lưng |
Vex, Kaito (iai) |
| ENG-09 | Kích nổ trạng thái (rupture) |
Hit tag rupture: nổ sớm Chảy Máu (30% ATK/tầng, xóa tầng); mục tiêu không có tầng → nhận 2 tầng |
Vex |
| ENG-10 | Kéo mục tiêu / kéo ngược | react: pull lên mục tiêu thường → kéo về 16 px; lên Boss/thân to/đang thủ chắc → anh hùng bị kéo tới (zip) |
Mora, Sable |
| ENG-11 | Trói & người làm chùy (bind/flail) |
Mục tiêu bị trói (không Boss) gắn vào socket vũ khí, thành hitbox động gây % ATK lên kẻ khác (tái trúng 0.4 s) | Sable |
| ENG-12 | Túm đôi (grab) |
Clip đôi: nạn nhân bám socket tay anh hùng theo track khung; địch cần 5 tư thế "bị giữ" chung; không áp Boss/thân to | Rook |
| ENG-13 | Thân bị ném thành đạn | Mục tiêu bị ném (throw) thành projectile thân người, va kẻ khác gây % ATK, rơi Ngã |
Rook |
| ENG-14 | Lọc bể Phản Đòn theo tag | Bể Phản Đòn có thể lọc theo tag mục tiêu/đòn (vd chỉ bốc đòn grab khi mục tiêu túm được) |
Rook (ROK_PALM) |
| ENG-15 | Hệ số hit từ quy tắc anh hùng | Rule anh hùng nhân HitMult theo Cổng (vd +25%/khối Chân Khí khi tiêu) |
Rook, Aldric |
| ENG-16 | Ghi đè clip né theo rule | Rule anh hùng thay bảng clip né §5.4 (pha xuyên, nhảy sào qua đầu, dịch chuyển); có thể đánh dấu "đòn kế tính từ sau lưng" | Mora, Lyra, Vex |
| ENG-17 | Bay không thể bị nhắm | Trong đòn tag dive pha bay lên trần: anh hùng không thể bị nhắm, đạn bỏ qua |
Lyra |
| ENG-18 | Xoay gạt đạn | Đòn tag spin: đạn chạm hitbox xoay bị Gạt (×2 tỉ lệ, bật ngược) không chịu khóa ±3 tick |
Sable, Lyra |
| ENG-19 | Hit vùng điểm ngọt | Hitbox line/arc có vùng ngoài 30% (tip): +% sát thương và Thế |
Lyra |
| ENG-20 | Chèn đòn ngoài lộ trình | AI chèn đòn TAUNT/gầm/tra kiếm khi lặng hoặc khi rule yêu cầu (vd KAI_NOTO sau đòn trễ, gầm của Brann) |
Kaito, Brann |
| ENG-21 | Cổng mang sang tầng một phần | Trường carry của Cổng: % giữ lại khi sang tầng (Mora 50%) |
Mora |
| ENG-22 | Chuỗi trạng thái trong HitDef.status |
Cú pháp elem(chance, stacks, dur) cho mọi trạng thái §13 (burn, chill, shock, venom, bleed, hex, sunder, radiance, stun, slow) |
mọi anh hùng |
| ENG-23 | Hitbox sau lưng | box với dx âm = vùng phía sau anh hùng |
Sable, Kaito (quay chém) |
| ENG-24 | Hủy clip phòng thủ nối tiếp | §17 C11 | mọi anh hùng |
| ENG-25 | Trạng thái vũ khí / thế | Cổng kiểu "trạng thái" (giá trị rời rạc) đổi khi lộ trình kết thúc hoặc khi đòn có marker state {to}; lộ trình/đòn khai báo trạng thái yêu cầu (gauge=N trong cond); trạng thái đổi được tỉ lệ phòng thủ, clip thủ/idle, khả năng lượn; hoãn đổi khi LAUNCH còn chờ AIR |
Zerran (Nhị Thức), Tsubaki (ô mở/đóng), Juno (loại đạn) |
| ENG-26 | Giá máu | Đòn tag blood/blood2 tự trừ % HP hiện tại khi bắt đầu (không bao giờ dưới sàn 30% Max HP, không gây chết), ghi nhật ký HP đã trả 10 s cho hiệu ứng hoàn trả |
Zerran |
| ENG-27 | Đâm chặn (chặn trong lúc địch lấy đà) | Khi địch cam kết đòn light/heavy mà anh hùng có rule chặn: roll riêng (trước bộ giải phòng thủ) → anh hùng ra đòn tag stophit chạm trong cửa sổ lấy đà, hủy đòn địch, mở "thủ hở" (bỏ qua Khí Thủ/Poise) trên kẻ đó N s |
Ignis |
| ENG-28 | Vòng cấm áp sát | Thực thể vùng tạm thời quanh anh hùng: địch cận chiến không vào được, mất token cận chiến khi đang ở trong | Ignis |
| ENG-29 | Mồi nhử | Thực thể có HP, kéo mục tiêu của địch (ưu tiên trong TargetSelector của địch), vỡ khi hết HP/thời gian |
Isolde (tượng băng), Ignis (áo choàng) |
| ENG-30 | Triệu hồi bản sao/đồng minh | Thực thể có HP, thời lượng, trần số lượng, % ATK; AI: lặp lại lộ trình của anh hùng (trễ 0.2 s) hoặc hành vi riêng; có thể thu hút đòn | Momo (phân thân), Aurelle (quả cầu theo sau) |
| ENG-31 | Đạn quay về (boomerang) | Đạn bay ra rồi quay về tay chủ; trúng cả lượt đi và lượt về (mỗi lượt 1 lần/mục tiêu); sự kiện catch khi bắt lại; biến thể nối xích kéo vệt |
Kazane (quạt), Vulkar (liêm xích) |
| ENG-32 | Vùng địa hình tạm thời | Thực thể vùng trên sàn (dung nham, sương băng, mưa lông vũ, bẫy tĩnh): thời lượng, tick hiệu ứng, trần số vùng, có thể bị kích nổ bởi đòn khác | Vulkar, Isolde, Aurelle, Elowen |
| ENG-33 | Biến thể đạn | ricochet (bật tường/trần, tối đa n lần), split (tách n tia), homing (về mục tiêu đánh dấu), nail (kéo mục tiêu theo tới tường rồi ghim), intercept (bắn hạ đạn địch) |
Elowen, Juno (tia ray dội tường) |
| ENG-34 | Biến thể phòng thủ | Kết quả absorb (đạn bị Gạt/Chặn nạp lại Cổng thay vì bật ngược), Gạt tách nón (đạn bị gạt bay thành nón phía trước), lăng kính tĩnh phản đạn, Chặn mọi hướng |
Tsubaki, Kazane, Isolde, Aurelle |
| ENG-35 | Dấu của anh hùng trên địch | Tầng dấu do anh hùng sở hữu (con mồi, ấn thánh, linh phù, ấn trăng) có trần, thời lượng; kích nổ đồng loạt; dây nối giữa các dấu gây sát thương; đòn đặc biệt sinh hitbox tại mọi dấu | Sorin, Aurelle, Tsubaki, Elowen |
| ENG-36 | Chèn đòn theo sự kiện | Sự kiện (hạ địch, khiêu khích thành công, Gạt) chèn ngay một đòn chỉ định có tầm bám (homing) tới mục tiêu kế | Sorin (vồ chuỗi), Feng (nhảy đầu), Momo (né-phản sau khiêu khích) |
| ENG-37 | Độ cao bay & bám tường | Anh hùng có offset độ cao mặc định (lơ lửng) với hitbox neo sàn bên dưới; đường cong descend/swoop/rise; hero:air theo độ cao; trạng thái bám tường không bị cận chiến nhắm |
Aurelle, Sorin |
| ENG-38 | Dịch chuyển đám đông | Kéo/đẩy địch về một điểm (gom cụm), mang nhiều địch theo khi húc, ném kẻ bị Gạt vào kẻ khác bằng chính đòn của nó | Kazane, Taurok, Feng |
| ENG-39 | Sóng chạy sàn | Đạn chạy dọc mặt sàn, dội tường, hai sóng gặp nhau thì nổ | Taurok |
| ENG-40 | Nguồn Cổng mở rộng | Cổng tăng theo quãng đường di chuyển, theo thời gian giao chiến, theo chuỗi đổi chi thể (lặp → reset), theo mỗi đòn hoàn tất không bị trúng; nhiều bậc ngưỡng + khóa sau phun trào | Taurok, Vulkar, Feng, Kazane |
| ENG-41 | Điều chỉnh tung hứng | Giảm tốc rơi của mục tiêu bị nâng, giữ độ cao khi chạm, hất lại kẻ đang nằm (tính 1 lượt tung mới, trần 1 lần/mục tiêu/lộ trình) | Kazane, Feng |
| ENG-42 | Giật lùi & lùi giữ khoảng | Đòn bắn đẩy chính anh hùng lùi (chống tường, bật lên không, lơ lửng nhờ giật); AI lùi giữ khoảng giữa hai lộ trình | Juno, Elowen |
| ENG-43 | Nhả sớm khi bị trúng | Đòn tích lực (kéo cung) bị trúng → bắn ngay với % lực đã tích thay vì hủy | Elowen |
| ENG-44 | Hình vũ khí theo khung | Độ dài/hình dạng vũ khí đổi theo từng khung (côn dài–ngắn, vũ khí băng triệu hồi khác nhau mỗi đòn); hitbox co giãn theo khoảng cách mục tiêu trong giới hạn | Momo, Isolde |
| ENG-45 | Tương tác trạng thái mở rộng | Lạnh tràn lên mục tiêu miễn Đóng Băng → quy đổi Thế; "lún sàn" (gốc rễ tại chỗ); kết quả phòng thủ "bị cày" cho địch bị húc | Isolde, Taurok |
| ENG-46 | Thân to theo anh hùng | Bán kính thân, tỉ lệ sprite, ô ảnh riêng từng anh hùng | Taurok, Vulkar |
| ENG-47 | Lớp hấp thụ trước khiên | Điểm hấp thụ (tinh thể) chặn trọn một đòn trước Khiên/HP | Isolde |
| ENG-48 | Tường tạm thời | Thực thể tường (gió, băng) tính là tường cho tgt:wall, dội tường, ghim |
Momo |
Mỗi chương anh hùng §3 nêu hook dùng và tham số; hook chỉ một anh hùng dùng vẫn hiện thực tổng quát để anh hùng sau dùng lại.
Tag đòn đặc thù được phép (ngoài §6.2): iai delay release shield blink rupture dive vault tip hook chain bind flail zip spin grab throw pin chi palm charge. Validator dữ liệu (03 §4) không chặn tag; QA kiểm mỗi tag có hook tương ứng.
19QA checklist
- [ ] Mỗi MoveDef: số hit-frame trong log khớp số số sát thương hiển thị (INV-05); hit-time khớp
act.hits[].txuất từ pixelfx. - [ ] Phòng thủ: khung chạm của clip Gạt/Chặn/Né trùng hit-frame địch ±1 tick ở x1 và x3 (log
defense_contact_error_ticks). - [ ] Roll phòng thủ: tần suất thực trên 10,000 đòn mô phỏng khớp tỉ lệ hiển thị ±1.5% (sau hệ số loại đòn).
- [ ] Trần: Gạt 60, Chặn 60, Né 50, Gạt+Né 70, tổng 90 — co theo tỉ lệ đúng.
- [ ] Chuỗi Gạt 5 → Dòng Chảy; ICD Phản Đòn đúng 0.8/1.5/1.2 s.
- [ ] Va Kiếm chỉ khi |Δt| ≤ 50 ms;
clash_winhoạt động. - [ ] Hit-stop không làm địch khác đứng hình.
- [ ] Combo đứt đúng khi Trúng; không đứt khi Gạt/Chặn/Né/khiên hấp thụ.
- [ ] Không bị khóa khựng > 1.5 s liên tục trong 100 run tự động.
- [ ] Token: không bao giờ quá giới hạn; hai hit-frame lính cách ≥ 0.25 s.
- [ ] Tung hứng: ≤ 10 hit/lượt (trừ quy tắc thẻ), 1 dội tường + 1 dội đất/lượt.
- [ ] Boss: Vỡ Thế 3.5 s + 12 s miễn; Tuyệt Sát Boss đúng 10% Max HP; Boss không bị hất khi chưa Vỡ Thế.
- [ ] Đạo Diễn Combo: không lộ trình nào chạy 2 lần liền khi có ≥ 2 ứng viên; lộ trình mới ra mắt ở lượt hợp lệ đầu tiên tầng kế; cùng seed → cùng chuỗi lộ trình (autosim headless).
- [ ] Tốc độ x3 + hit-stop: không mất hit-frame (đếm hit x1 = x3).
- [ ] Phong Độ: tụt ≥ 1 hạng khi Trúng; hệ số lặp 0.5 áp đúng.
- [ ] Cài đặt Giảm nhấp nháy tắt mọi nháy toàn màn.