From 9292634f2f8d71a53879ff07e1330c671b207d51 Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Mon, 6 Jul 2026 23:05:04 -0400 Subject: feat: split the concept of hidden and impassable exits. add player_flag for discovered hidden exits. --- internal/game/cmd_move.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'internal/game/cmd_move.go') diff --git a/internal/game/cmd_move.go b/internal/game/cmd_move.go index 6063160..3b9eeee 100644 --- a/internal/game/cmd_move.go +++ b/internal/game/cmd_move.go @@ -31,8 +31,12 @@ func (g *Game) doMove(sess *net.Session, dir string, multiplier float64) { return } - if exitDef.Hidden && !p.GodMode { - sess.WriteLine("You can't go that way.") + if !p.GodMode && exitDef.AlwaysBlocked { + msg := exitDef.BlockedMessage + if msg == "" { + msg = fmt.Sprintf("The way %s is impassable.", exitDir) + } + sess.WriteLine(msg) return } @@ -153,6 +157,13 @@ func (g *Game) completeMove(sess *net.Session, p *player.Player) { } oldRoom := p.RoomID + if oldRoom != targetID && exitDir != "" { + if room, err := g.World.LoadRoom(oldRoom); err == nil { + if ed, ok := room.Exits[g.World.ResolveExit(exitDir)]; ok && ed.Hidden && ed.Room == targetID { + g.markExitDiscovered(p, oldRoom, g.World.ResolveExit(exitDir)) + } + } + } p.RoomID = targetID p.HazardTimer = 0 p.Stats.RecordRoomVisit(targetID) -- cgit v1.2.3