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/exit_discovery.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 internal/game/exit_discovery.go (limited to 'internal/game/exit_discovery.go') diff --git a/internal/game/exit_discovery.go b/internal/game/exit_discovery.go new file mode 100644 index 0000000..1d07e13 --- /dev/null +++ b/internal/game/exit_discovery.go @@ -0,0 +1,31 @@ +package game + +import ( + "fmt" + "strings" + + "thehouseoficarus/internal/player" + "thehouseoficarus/internal/world" +) + +func discoveredExitFlag(roomID int, dir world.ExitDir) string { + return fmt.Sprintf("hidden_exit_%d_%s", roomID, strings.ToLower(string(dir))) +} + +func (g *Game) exitDiscovered(p *player.Player, roomID int, dir world.ExitDir) bool { + if p.GodMode { + return true + } + return getPlayerFlagInt(p, discoveredExitFlag(roomID, dir)) != 0 +} + +func (g *Game) markExitDiscovered(p *player.Player, roomID int, dir world.ExitDir) { + g.setPlayerFlag(p, discoveredExitFlag(roomID, dir), 1) +} + +func (g *Game) exitHiddenFiltered(p *player.Player, roomID int, dir world.ExitDir, exitHidden bool) bool { + if !exitHidden { + return true + } + return g.exitDiscovered(p, roomID, dir) +} -- cgit v1.2.3