From e6d0d46ac9977e77c7f19f41121ec466a3c53e56 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Fri, 17 Jul 2026 18:36:31 -0400 Subject: feat: update mob flee mechanics with new energy system --- internal/game/cmd_move.go | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'internal/game/cmd_move.go') diff --git a/internal/game/cmd_move.go b/internal/game/cmd_move.go index 594ecd7..576bdd5 100644 --- a/internal/game/cmd_move.go +++ b/internal/game/cmd_move.go @@ -88,17 +88,30 @@ func (g *Game) doMove(sess *net.Session, dir string, isWalk bool) { return } - // moveTicks already set p.MoveUsesEnergy based on this move; preserve it - // across the wait by leaving it set (ClearMoveState resets it on arrival). - p.MoveTicks = ticks - - if inCombat && p.OptionBool("run_countdown") { - if p.MoveTicks > 1 { - sess.WriteLine(fmt.Sprintf("Running in %d ticks...", p.MoveTicks)) - } else { - sess.WriteLine("Running next tick!") + if inCombat { + firstEscape := p.EscapeDir == "" + p.EscapeDir = string(exitDir) + p.EscapeTarget = targetID + p.EscapeTrigger = p.MovePendingTrigger + p.EscapeIsWalk = isWalk + p.MovePendingTrigger = nil + p.MoveDirection = "" + p.MoveTarget = 0 + if firstEscape { + mobName := "" + if cs := g.Combat.Get(p.Name); cs != nil { + if mob := g.MobStore.GetInstance(cs.MobID); mob != nil { + mobName = mobDisplayName(mob, false) + } + } + if mobName != "" { + sess.WriteLine(g.colorize(sess, "miss", fmt.Sprintf("You get ready to flee as soon as %s misses you...", mobName))) + } } + return } + + p.MoveTicks = ticks } // matchExitTrigger returns the first on_traverse Trigger on exitDef whose -- cgit v1.2.3