aboutsummaryrefslogtreecommitdiff
path: root/internal/game/cmd_move.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-07-17 18:36:31 -0400
committerhistoria <[not public]>2026-07-17 18:36:31 -0400
commite6d0d46ac9977e77c7f19f41121ec466a3c53e56 (patch)
tree86063e0dfda2206ccdda1b8e1070dc4da7dea9d9 /internal/game/cmd_move.go
parent6e6c4a157564100249bb58f412485055bb2d10cf (diff)
downloadthehouseoficarus-e6d0d46ac9977e77c7f19f41121ec466a3c53e56.tar.gz
feat: update mob flee mechanics with new energy system
Diffstat (limited to 'internal/game/cmd_move.go')
-rw-r--r--internal/game/cmd_move.go31
1 files changed, 22 insertions, 9 deletions
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