Combat
Combat and skill checks use one rule: roll a d20 (a 20-sided die), add modifiers, and compare the total with a target number. The engine rolls every die and owns every number; the narrator (the LLM) only describes. A revised combat spec, C1–C9, is meant to fix the prototype's balance and fairness problems. It is proposed and needs operator approval.
The d20 core, step by step
- Roll one d20. With ưu thế (advantage), roll two and keep the higher. With bất lợi (disadvantage), keep the lower.
- Add the ability modifier: mod = ⌊(score − 10) / 2⌋.
- Add the realm bonus R (cảnh giới bonus). It grows with cấp and sub-stage.
- Subtract 2 if you are bị thương (injured).
- Compare the total with the target. A check uses a DC (difficulty class). An attack uses the foe's hộ thể (body shield: the defence number).
- A total equal to or above the target succeeds.
- For checks and saves, a margin of 10 or more moves the result one degree: đại thành công (critical success) or đại bại (critical failure). A natural 20 is always the best result. A natural 1 is always the worst.
A fighter has five abilities:
| Ability | Plain name | Used for |
|---|---|---|
| Thể phách | body | attack, damage, HP |
| Thân pháp | agility | initiative, hộ thể, escape, dodge saves |
| Thần thức | spirit sense | bí pháp DC and damage, mind saves |
| Ngộ tính | insight | event checks |
| Khí vận | luck | event checks |
HP means hit points. Linh lực (spirit energy) pays for bí pháp (secret arts).
Rules: prototype vs proposed spec
In the formulas, cấp is the realm number and stage is the sub-stage number (1–10).
| Topic | Rule in poc/combat.ts |
|---|---|
| Realm bonus R | 2 + ⌊(stage − 1)/3⌋ + 4 × (cấp − 1); on attacks, saves and checks |
| HP | (10 + 2 × stage + 3 × Thể) × 1.3cấp − 1, rounded |
| Linh lực | 2 + 2 × (cấp − 1) + ⌊stage/3⌋ + công pháp (0/2/4) |
| Hộ thể | 10 + Thân + thể chất (+2 … +5) + (cấp − 1) |
| Attack | d20 + Thể + R vs hộ thể; 1d8 + Thể. A natural 20 doubles the dice and inflicts bị thương. |
| Bí pháp | 3 linh lực; bí pháp 2d6 or thần thông 3d6, + Thần thức; save vs 8 + R + Thần thức for half |
| Áp chế (realm suppression) | Target 1 realm up: you attack with bất lợi and it saves with ưu thế. 2+ up: it also takes half damage. |
| Phòng ngự (guard) | +4 hộ thể and ưu thế on saves until your next turn |
| Pill | Hồi Xuân Đan heals cấp × (2d4 + 2) and cures poison |
| Defeat | 1 HP, injury 6/12/24 h by cấp, and lose ⌈n/2⌉ of every carried stack (pills kept) |
| Recovery | No clock: HP and injury never recover between encounters |
| Narrator text | Every log entry; a line with a digit falls back to a template |
| Builds | Presets weak / mid / strong; strong has Thể 16 (+3) |
Known bugs, still in the code:
- bug A breakthrough lowers HP and linh lực (
combat.ts:49-50). From Luyện Thể 9 (LT9) to Ngưng Nguyên 1 (NN1), with Thể +2: HP 34 → 23. - bug A defeat removes half of every carried loot stack (
combat.ts:300-302). - bug The narrator guard only blocks digits (
llm.ts:103), so the narrator can still invent an item in words. - bug The defeat template says "túi đồ vơi đi" (the bag got lighter) (
combat.ts:257). Under C6 that would be false.
Proposed — needs operator decision. Combat council, round 4. The win-rate targets stay unverified until a new balance sweep runs (see the end of this page).
| Item | Rule |
|---|---|
| C1 Indexing |
|
| C2 Realm |
|
| C3 Crits | Attacks crit on a natural 20 only. The ±10 degrees apply only to checks and saves. |
| C4 Builds | Fixed array 14/13/12/11/10. Thần thông is out of v0.1. Thể chất = +10% HP per grade. Target win rates vs a mid build: weak 35–45%, mid 45–55%, strong 60–75%; fights last 4–8 rounds. Unverified until a new sweep runs. |
| C5 Vượt cấp (fighting up) | Boundary LT9 vs NN1: strong wins 40–55%. A full realm up: strong 10–25%, mid ≤ 5%. Two or more realms up: escape, scout or rescue checks, no kill fight. Round 30 ends in a giằng co (draw). |
| C6 Stakes | A solo PvE defeat loses no items. A bí cảnh risks only the listed loot not yet carried out. HP and linh lực refill each encounter. Bị thương = −2 for 6 real hours, cured by a pill or a free 1 h rest. No death outside opt-in ☠︎ options. |
| C7 Narrator | The engine receipt (its saved record of the fight) comes first and is authoritative. The narrator describes only the opening, crits, bí pháp, the ending and heavy hits (~5 calls a fight). It may state outcomes only through fixed phrases that the engine fills in; else a template. |
| C8 Effects | No sustained effects in v0.1. |
| C9 Scope | v0.1 = solo PvE plus tick-resolved bí cảnh group choices. PvP, live party and sect war are deferred. Base bí pháp and thể chất move into v0.1. |
Try it: d20 check roller
This roller uses the check rules above. The browser rolls with crypto.getRandomValues. The dice line follows the prototype's format. When you pick an ability, the modifier box gets Lục Trần's modifier from the seed-1 fight. You can change it.
══════ CƠ DUYÊN · check_1_p_hero ══════
Huyết Linh Chi trên vách Thanh Vân — Thanh Vân Sơn · Lục Trần (Luyện Thể · Túy Cốt)
Sau núi Thanh Vân, một gốc Huyết Linh Chi tỏa hồng quang giữa vách đá dựng đứng. Dưới chân núi, Lý lão bản bày sạp bán thang dây; trên vách còn khắc trận văn cổ.
1. Leo vách đá hái linh chi (Thân pháp DC 15)
2. Thuyết phục Lý lão bản bán rẻ thang dây (Khí vận DC 13)
3. Tham ngộ trận văn cổ trên vách (Ngộ tính DC 14)
4. Bỏ đi
▶ Lục Trần chọn: Thuyết phục Lý lão bản bán rẻ thang dây (Khí vận DC 13)
🎲 d20=19 +1 (Khí vận) +3 (cảnh giới) = 23 vs DC 13 → ĐẠI THÀNH CÔNG
🎁 Huyết Linh Chi (hi hữu) ×2
📜 Dựa vào Khí vận, Lục Trần quyết thuyết phục Lý lão bản bán rẻ thang dây, kết quả lão bản quý mến, cho mượn thang dây, hái được cả hai gốc.
Ghi sổ: check_1_p_hero COMMITTED · ❤ 28/28Try it: stat calculator (proposed spec C1–C2)
Set a fighter. The table shows the stats now and after the next step up. The last rows compare the prototype formulas, so you can see the breakthrough bug.
Thể chất grade: 0 = none, 1 = Tiên cốt, 2 = Tiên thân, 3 = Đạo thể. Out-of-range values are put back in range in the box. The fixed array 14/13/12/11/10 gives mods +2, +1, +1, 0, 0. The spec does not yet say how to round HP with thể chất; the calculator rounds to the nearest whole number. Cấp 3–5 are not playable in v0.1.
Balance sweep (prototype rules)
The sweep runs 1000 bot fights per cell (seed 1): Luyện Thể · Đoán Gân against a mid-build foe at the same stage, 0, 1 or 2 major realms up. These are the current rules. The proposed spec needs a new sweep.
| Realm gap | Weak build: win · avg rounds | Strong build: win · avg rounds |
|---|---|---|
| 0 | 25.5% · 6.8 | 95.5% · 4.6 |
| 1 | 0.4% · 6.2 | 28.7% · 7.8 |
| 2 | 0.0% · 5.7 | 0.0% · 7.1 |
Problem: at gap 0 the spread is 25.5% to 95.5%, far outside the C4 targets (35–45% and 60–75%).
══════ CÂN BẰNG · 1000 trận bot/ô · Luyện Thể · Đoán Gân vs đối thủ build trung, cùng tiểu cảnh giới ══════
chênh cảnh giới │ build yếu: thắng · lượt TB │ build mạnh: thắng · lượt TB
+0 │ 25.5% · 6.8 │ 95.5% · 4.6
+1 │ 0.4% · 6.2 │ 28.7% · 7.8
+2 │ 0.0% · 5.7 │ 0.0% · 7.1══════ YÊU THÚ CHẶN ĐƯỜNG · fight_1_p_hero ══════
Hắc Phong Biên Cảnh — Lục Trần (Luyện Thể · Túy Cốt) gặp Hắc Phong Lang (yêu thú · Luyện Thể · Luyện Nhục)
Lục Trần: ❤ 28 · hộ thể 12 · linh lực 6 · cảnh giới +3 · Thể phách 14(+2) Thân pháp 14(+2) Thần thức 12(+1) Ngộ tính 12(+1) Khí vận 13(+1)
Hắc Phong Lang: ❤ 24 · hộ thể 12 · cảnh giới +3 · Thể phách 14(+2) Thân pháp 14(+2) Thần thức 8(−1) Ngộ tính 6(−2) Khí vận 8(−1)
⚡ Tiên thủ (d20 + Thân pháp): Lục Trần d20=16 +2 = 18 · Hắc Phong Lang d20=9 +2 = 11 → Lục Trần ra tay trước
📜 Giữa đường núi, Hắc Phong Lang gầm gừ chặn lối, nhưng Lục Trần đã sớm cảm nhận được yêu khí.
⟪ Lục Trần ❤ 28/28 · linh lực 6/6 · 💊2 ‖ Hắc Phong Lang ❤ 24/24 ⟫
── Lượt 1 ──
▶ Lục Trần: Thi triển bí pháp · Liệt Hỏa Chưởng
✨ Liệt Hỏa Chưởng (bí pháp, −3 linh lực → 3/6)
Hắc Phong Lang kháng: 🎲 d20=3 +2 (Thân pháp) +3 (cảnh giới) = 8 vs DC 12 → KHÔNG KHÁNG
🗡 2d6=[5,1] +1 (Thần thức) = 7 sát thương → Hắc Phong Lang ❤ 24→17
📜 Lục Trần thi triển Liệt Hỏa Chưởng, Hắc Phong Lang không kịp tránh, hứng trọn uy lực.
▶ Hắc Phong Lang: Công kích
🎲 d20=2 +2 (Thể phách) +3 (cảnh giới) = 7 vs hộ thể 12 → TRƯỢT
📜 Hắc Phong Lang vung đòn về phía Lục Trần, nhưng chỉ chém vào khoảng không.
⟪ Lục Trần ❤ 28/28 · linh lực 3/6 · 💊2 ‖ Hắc Phong Lang ❤ 17/24 ⟫
── Lượt 2 ──
▶ Lục Trần: Thi triển bí pháp · Liệt Hỏa Chưởng
✨ Liệt Hỏa Chưởng (bí pháp, −3 linh lực → 0/6)
Hắc Phong Lang kháng: 🎲 d20=17 +2 (Thân pháp) +3 (cảnh giới) = 22 vs DC 12 → KHÁNG ĐƯỢC
🗡 2d6=[6,1] +1 (Thần thức) ½ (kháng được) = 4 sát thương → Hắc Phong Lang ❤ 17→13
📜 Liệt Hỏa Chưởng của Lục Trần ập tới, Hắc Phong Lang né được nửa đường.
▶ Hắc Phong Lang: Công kích
🎲 d20=9 +2 (Thể phách) +3 (cảnh giới) = 14 vs hộ thể 12 → TRÚNG
🗡 1d8=[4] +2 (Thể phách) = 6 sát thương → Lục Trần ❤ 28→22
📜 Quyền phong của Hắc Phong Lang quét trúng Lục Trần.
⟪ Lục Trần ❤ 22/28 · linh lực 0/6 · 💊2 ‖ Hắc Phong Lang ❤ 13/24 ⟫
── Lượt 3 ──
▶ Lục Trần: Công kích
🎲 d20=18 +2 (Thể phách) +3 (cảnh giới) = 23 vs hộ thể 12 → TRÚNG
🗡 1d8=[4] +2 (Thể phách) = 6 sát thương → Hắc Phong Lang ❤ 13→7
📜 Lục Trần đánh trúng Hắc Phong Lang.
▶ Hắc Phong Lang: Công kích
🎲 d20=20 +2 (Thể phách) +3 (cảnh giới) = 25 vs hộ thể 12 → CHÍ MẠNG
🗡 2d8=[5,3] +2 (Thể phách) = 10 sát thương → Lục Trần ❤ 22→12
📜 Chỉ trong chớp mắt, Hắc Phong Lang đánh trúng yếu huyệt của Lục Trần! Lục Trần bị trọng thương.
⟪ Lục Trần ❤ 12/28 · linh lực 0/6 · 💊2 · [bị thương] ‖ Hắc Phong Lang ❤ 7/24 ⟫
… (rounds 4–6 trimmed)
── Lượt 7 ──
▶ Lục Trần: Công kích
🎲 d20=20 +2 (Thể phách) +3 (cảnh giới) −2 (bị thương) = 23 vs hộ thể 12 → CHÍ MẠNG
🗡 2d8=[1,3] +2 (Thể phách) = 6 sát thương → Hắc Phong Lang ❤ 2→0
📜 Lục Trần nhìn ra sơ hở, một đòn chí mạng xé toạc phòng tuyến của Hắc Phong Lang! Hắc Phong Lang ngã xuống.
🎁 Lang Nha (bình thường)
📜 Hắc Phong Lang rống lên một tiếng cuối cùng rồi nằm im; con đường đã thông.
══════ KẾT CỤC: THẮNG · 7 lượt ══════
Lục Trần ❤ 8/28 · đan dược đã dùng 2 · chiến lợi phẩm: Lang Nha (bình thường)
Ghi sổ: fight_1_p_hero COMMITTED · 15 dòng nhật ký