Phase:P4 — Quick Combat
本文件只定義 P4 各 Subphase 完成後什麼必須成立。具體 DB schema、API、module、MCP tool、transaction 與 persistence wiring 放在同目錄的開發設計方針.md;自動/人工驗收與 closeout evidence 放在測試指南.md。
最後更新:2026-09-13
P3 已把 active Session 做成可長時間運作的 Exploration table,具備 durable event stream、Chat / Action / Check、Server authoritative formal rolls、Current State mutation、Human / AI controller、DM proxy 與正式 MCP 入口;M04 又把真實 ChatGPT Web Plus 接入、OAuth、AI Join Kit 與 server-hosted guide 補齊。
P4 是第一個正式 Combat Phase,交付 Quick Combat:保留桌上跑團的敘事與 DM 裁定方式,不建立座標、距離或格線幾何,網站只接手真正值得由 Server 同步、計算、保存與驗證的 Combat State。
P4 關門後,Human DM、Human Player、AI DM、AI Player 必須能在同一場 Quick Combat 中:
P4 不是 Tactical Combat。Grid、token coordinates、movement budget、distance、range geometry、AoE cells、wall / door / terrain、automatic Opportunity Attack detection、battle-map editor 全留 P5。
P4 也不建立 P6 Adventure Runtime / EncounterTemplate,不把 Combat log 擴成 P7 完整 Timeline / Snapshot / Restore,不做 CRPG 式 Victory Screen / Auto Loot。
P4 固定拆成六個可獨立實作、驗證與 commit 的 Subphases:
P4-A — Monster & Combatant Foundation
↓
P4-B — Combat Lifecycle, Initiative & Action Economy
↓
P4-C — Attack, Damage & Core Action Resolution
↓
P4-D — Spells, Conditions, Concentration & Reactions
↓
P4-E — Quick Combat UI, DM Adjudication & AI Tool Surface
↓
P4-F — Full P4 Integration & Closeout
三份 P4 文件必須使用完全一致的名稱與順序。
不得在 P4-A 順手做 Tactical token / grid;不得在 P4-D 為了支援所有特殊能力建立 generic effect DSL;不得在 P4-E 因 AI DM 需要 encounter context 就提前建立 P6 Adventure / Scene / NPC runtime;不得把 P4 event / combat history包裝成 P7 完整 Timeline。
P4 不重造以下既有能力:
TableActorContext 與 acting actor / subject Seat / Character 分離。2026-07-28、OAuth / Bearer authority 與 role-scoped catalog原則。P4 新 Combat action 必須沿用以上 authority 與 event substrate,不另建 Combat-only Human identity、AI roll engine、secret filter 或第二套 Character Current State updater。
產品既有規格明定:End Session 不會結束 Combat、不會清 HP / Conditions / pending gameplay state。P4 因此必須把 active Combat 視為 Campaign gameplay state,而不是只存在某個 Session 的暫存 UI。
結果必須成立:
第一版同一 Campaign 同時只允許一場 active Combat;歷史 ended Combat可保留供未來 Timeline 使用。
Quick Combat 本質是:
Exploration UI + canonical Combat State
以下由 Server正式處理:
以下 不由 P4 自動推導:
Quick Combat 不建立假的 coordinates、Zone System 或 hidden distance number。Position Note完全 optional;真人 DM可全部口頭描述。
P4 的原則是:常見且可可靠結構化的核心戰鬥規則自動化;複雜、敘事型、罕見或需要世界判定的能力交給 DM。
必須自動化的核心:
允許部分結構化 + description + DM adjudication:
P4 不建立 generic rules DSL / scripting language 來追求 100% D&D 自動化。
一般 Attack / Spell 若所有必要輸入都已確定:
Choose action / target
→ Server validate action economy + resources
→ formal roll(s)
→ resolve hit/save
→ damage/healing/effect
→ commit Current State + Combat State + event atomically
不要求每一擊都停給 DM按「Approve Damage」。
只有 Quick Combat 無法自行知道的空間/裁定資訊才需要 DM,例如:
Human DM 可在事後用既有 Direct Edit /合法 state edit修正小錯;第一版仍不做 Undo Transaction。
DM 取得完整 Monster Instance / Combatant combat data。
Player / AI Player 預設不得取得:
Player可取得:
unhurt / wounded / badly_wounded / near_defeat;此為展示 projection,不是另一份 HP truth。所有 secrecy 必須在 Server projection / DTO層完成,不可把精確資料送到 client後靠 CSS隱藏。
建立 P4 / P5 共用的非空間 Combat data foundation,並把 P0 延後的 完整 SRD 5.1 Monster / Beast stat blocks 納入正式 content pipeline。
Monster Template、Monster Instance、Combatant 是不同概念:Template是可重用規則資料;Instance是某個世界/戰鬥中的 live state;Combatant是 Combat Engine共用視圖/行為介面。docs/ parse。P4-A 的 authoritative import source固定為既有 SRD provenance pin:5e-bits/5e-database@ce47a18dfeb3e41a1b2a2dfe00a25761c3c3a4f1 的 src/2014/en/5e-SRD-Monsters.json,該 pinned source共 334 筆 Monster records,其中 type=beast 共 87 筆;Beast是同一 Monster corpus的 subset,不另有第二份 Beast source。Checked-in content manifest必須保存 source commit / path / expected_records=334 / expected_beasts=87,runtime不直接依賴 upstream。
2a. P4-A 同步交付 zh-TW / en 的 user-visible Monster label coverage:至少 Monster name,以及 Trait / Action / Bonus Action / Reaction / Legendary Action 等命名欄位。完整英文 stat block description先作 canonical source;若 P4-A 尚未把 long-form description expose給 Human UI / MCP,可延後 description翻譯到首次 user-visible exposure的 Subphase,但 English fallback 不算 supported-locale completeness。任何 Subphase一旦正式顯示/搜尋某個 description欄位,就必須同 Subphase補齊 zh-TW。建立可 durable resume 的 Quick Combat lifecycle、initiative、round / turn與 action economy,讓一場 Combat可以跨 browser reload、server restart與 Session boundary繼續。
quick;P4沒有 Tactical mode建立入口,也不能中途切 mode。d20 + DEX;支援 monster group initiative、tie resolution、surprise與 mid-combat entrant。把最常見的武器/怪物攻擊、傷害、治療、基本 combat action做成 Server authoritative transaction,Human與AI共用。
damage / healing boundary,而不是以 absolute current_hp patch反推發生了什麼;該 boundary負責 Temp HP順序、Concentration trigger與0 HP consequences。Human DM Direct Edit仍可用 absolute HP作修正,屬明確 correction path,不假裝成一次 damage event。dm_adjudication_required / 等價狀態,而不是猜距離。在不建立 generic rules DSL 的前提下,把 Quick Combat最常見的 Spell、Condition、Concentration與 Reaction正式接進 Combat Engine。
combat_entries:至少包含 Concentration、Exhaustion level、Death Save state與可跨 Combat存在的 Temporary Effects;HP / Temp HP / persistent Conditions / resources沿用既有 Current State。combat_entries只保存 initiative、turn/economy、surprise、Ready / reaction window與 combat-only bookkeeping。這些 shared Character State欄位不得 reference Room / Session / Combat row,保持 Standalone可攜。
7b. Character JSON schema_version="1" 維持 backward-compatible import contract;Current State新增欄位採 additive/default-safe演進,不改既有欄位語意。新版必須持續 import既有 v1 / legacy unstable fixture,並以 Web ↔ Standalone export/import roundtrip證明新增 state不遺失;若未來需要破壞既有 v1語意才另開新 schema version。把 P4-A~D 的 Combat Engine變成真人與外部 AI都能實際跑的桌面體驗;UI保持桌上工具而不是 CRPG command console。
Position Note與 Main Situation完全 optional;空白時 Combat仍可正常跑。get_session_context / briefing在 active Combat時提供 compact Combat context與下一步指引,包含 Round、Current Turn、自身可見 combatants、pending roll / reaction / adjudication;不塞整份 Monster database。ai_attack() 的另一套規則引擎。zh-TW / en UI、errors、tool descriptions與 guide更新同 Subphase交付。以真正可玩的完整 Quick Combat journey驗證 P4,不以單元測試拼湊代替整合證據。
wait_for_event / reconnect continuity,確認新增 Combat tools沒有破壞 M04固定 catalog / auth / role scope。main。P4 明確不做:
這些缺少時,Quick Combat仍必須是一套完整可玩的戰鬥方式,而不是「等 P5 地圖做完才真正能打」。