Add flying dodge mechanic at resolve time
When altitude differs at resolve time (attacker or defender changed flying state during window phase), attack misses. Treated as successful dodge with zero damage.
This commit is contained in:
parent
4da8d41b45
commit
d6d62abdb8
1 changed files with 17 additions and 0 deletions
|
|
@ -123,6 +123,23 @@ class CombatEncounter:
|
||||||
combat_ended=False,
|
combat_ended=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Check for altitude mismatch (flying dodge)
|
||||||
|
attacker_flying = getattr(self.attacker, "flying", False)
|
||||||
|
defender_flying = getattr(self.defender, "flying", False)
|
||||||
|
if attacker_flying != defender_flying:
|
||||||
|
# Altitude mismatch - attack misses
|
||||||
|
template = "{attacker}'s attack miss{es} — {defender} {is|is} out of reach!"
|
||||||
|
# Reset to IDLE
|
||||||
|
self.state = CombatState.IDLE
|
||||||
|
self.current_move = None
|
||||||
|
self.pending_defense = None
|
||||||
|
return ResolveResult(
|
||||||
|
resolve_template=template,
|
||||||
|
damage=0.0,
|
||||||
|
countered=True,
|
||||||
|
combat_ended=False,
|
||||||
|
)
|
||||||
|
|
||||||
# Check if defense counters attack
|
# Check if defense counters attack
|
||||||
defense_succeeds = (
|
defense_succeeds = (
|
||||||
self.pending_defense
|
self.pending_defense
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue