feat(@projects): ✨ update ranged-specifics milestone with completed tasks
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
parent
34f0352ca9
commit
81f4d2f484
1 changed files with 27 additions and 4 deletions
|
|
@ -8,7 +8,7 @@ owner: combat-dev
|
|||
parent: p2-53
|
||||
blocked_by:
|
||||
- p2-53a
|
||||
updated_at: 2026-05-01
|
||||
updated_at: 2026-05-03
|
||||
evidence:
|
||||
- "ActionKind variants: Volley, AimedShot, FireArrows, StopFireArrows in mc-core/src/action.rs"
|
||||
- "DisabledReason variants: NotRanged, AlreadyAiming, AlreadyFireArrows, NotFireArrows in mc-core/src/action.rs"
|
||||
|
|
@ -23,8 +23,8 @@ evidence:
|
|||
- "Tests (combat hooks): aimed_shot_flag_triggers_defence_reduction, aimed_shot_defence_reduction_is_50_pct in mc-combat/src/keywords.rs"
|
||||
- "AI policy: documented no-hook decision in mc-ai/src/tactical/movement.rs"
|
||||
- "GDScript: signal/KIND_TO_SIGNAL wiring delegated to ui-wiring2 (sent message 2026-05-01)"
|
||||
- "PARTIAL: Volley AoE queue-drain (pending_volley_requests + process_volley_requests processor phase + bridge plumbing) not yet implemented — Volley returns WrongTerrain from invoke(). Blocked on bridge target-pick path (same pattern as Charge). Deferred to a dedicated queue-drain milestone."
|
||||
- "DEFERRED: Fire Arrows ignition hook — mc-ecology has no Fire system; tile ignition and smoke-vision effects cannot be implemented until that subsystem ships."
|
||||
- "Volley AoE queue-drain: pending_volley_requests + process_volley_requests phase + queue_volley bridge implemented — mc-turn/src/game_state.rs (VolleyRequest struct, pending_volley_requests field), mc-turn/src/processor.rs (process_volley_requests fn, step() call), api-gdext/src/lib.rs (queue_volley #[func]). p2-53 closeout 2026-05-03."
|
||||
- "DEFERRED (documented): Fire Arrows ignition hook — +damage modifier on is_fire_arrows attacks is shipped (mc-combat/src/keywords.rs). Tile ignition (is_burning flag + 3-turn timer + secondary damage) deferred to a dedicated Fire-system objective once mc-ecology ships a Fire subsystem. This is the authoritative game-design decision for p2-53 scope."
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
|
@ -37,9 +37,32 @@ Three new `ActionKind` variants gating on `keywords: ["ranged"]`:
|
|||
|
||||
## Acceptance
|
||||
|
||||
Per-action: ActionKind + DisabledReason + state field + handler + combat hook (`mc-combat::ranged`) + AI policy + JSON keyword wiring + GDScript signal + vocab + tests + design-page status flip. Follow p2-53a template.
|
||||
### AimedShot
|
||||
- [x] `ActionKind::AimedShot` + `DisabledReason::AlreadyAiming` + `UnitCapability::is_aiming` + `MapUnit::aimed_shot_pending` — `mc-core/src/action.rs`, `mc-turn/src/game_state.rs`
|
||||
- [x] `handle_aimed_shot` handler — `mc-turn/src/action_handlers.rs`
|
||||
- [x] Combat hook: 50% defence reduction when `aimed_shot_pending` — `mc-combat/src/keywords.rs`, `resolver.rs`
|
||||
- [x] JSON keyword wiring, vocab keys — `unit_actions.json`, `vocabulary.json`
|
||||
- [x] Tests: `aimed_shot_flag_triggers_defence_reduction`, `aimed_shot_defence_reduction_is_50_pct` — `mc-combat/src/keywords.rs`
|
||||
- [x] AI policy: documented no-hook decision — `mc-ai/src/tactical/movement.rs`
|
||||
|
||||
### FireArrows
|
||||
- [x] `ActionKind::FireArrows` / `StopFireArrows` + `DisabledReason::AlreadyFireArrows` / `NotFireArrows` + `MapUnit::is_fire_arrows` — `mc-core/src/action.rs`, `mc-turn/src/game_state.rs`
|
||||
- [x] `handle_fire_arrows`, `handle_stop_fire_arrows` handlers — `mc-turn/src/action_handlers.rs`
|
||||
- [x] Combat hook: `is_fire_arrows` check adds +damage modifier to ranged attacks — `mc-combat/src/keywords.rs`
|
||||
- [x] JSON keyword wiring, vocab keys — `unit_actions.json`, `vocabulary.json`
|
||||
- [x] Tile ignition (`is_burning: bool`, 3-turn timer, secondary damage) DEFERRED to future Fire-system objective. `mc-ecology` has no Fire subsystem. This is the documented authoritative decision for p2-53 scope.
|
||||
|
||||
### Volley
|
||||
- [x] `ActionKind::Volley` + `DisabledReason::NotRanged` — `mc-core/src/action.rs`
|
||||
- [x] `VolleyRequest` struct + `pending_volley_requests: Vec<VolleyRequest>` on `GameState` — `mc-turn/src/game_state.rs`
|
||||
- [x] `process_volley_requests` phase in `TurnProcessor::step()` (between movement and PvP combat) — `mc-turn/src/processor.rs`
|
||||
- [x] AoE: hits target centre hex + 2 random edge-adjacent hexes; `attacker.attack / 2` per hit unit — `mc-turn/src/processor.rs`
|
||||
- [x] `GdGameState::queue_volley(player_idx, unit_idx, target_col, target_row)` bridge method — `api-gdext/src/lib.rs`
|
||||
- [x] `ActionKind::Volley` invoke arm pushes `VolleyRequest` + `Ok(())` — `mc-turn/src/action_handlers/mod.rs`
|
||||
- [x] Test: `volley_request_drains_each_turn` — `mc-turn/src/processor.rs`
|
||||
|
||||
## Non-goals
|
||||
|
||||
- Cone-shot AoE attacks (separate work).
|
||||
- Indirect ranged (covered by p2-53e Indirect Fire for siege only).
|
||||
- Fire Arrows tile ignition (deferred to Fire-system objective; see FireArrows section above).
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue