From d6d62abdb8b958ef3c70fbc38db65320221a08ed Mon Sep 17 00:00:00 2001 From: Jared Miller Date: Sat, 14 Feb 2026 00:08:50 -0500 Subject: [PATCH] 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. --- src/mudlib/combat/encounter.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/mudlib/combat/encounter.py b/src/mudlib/combat/encounter.py index 93b82d4..071990d 100644 --- a/src/mudlib/combat/encounter.py +++ b/src/mudlib/combat/encounter.py @@ -123,6 +123,23 @@ class CombatEncounter: 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 defense_succeeds = ( self.pending_defense