aboutsummaryrefslogtreecommitdiff
path: root/internal/game/render_map.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-07-07 00:22:32 -0400
committerhistoria <[not public]>2026-07-07 00:22:32 -0400
commita51f7a53aa2c487ebf94ba0363038574ae8bb590 (patch)
treeb393a8f9e4732b40f6fe8058d086bd631537ad3b /internal/game/render_map.go
parent9292634f2f8d71a53879ff07e1330c671b207d51 (diff)
downloadthehouseoficarus-a51f7a53aa2c487ebf94ba0363038574ae8bb590.tar.gz
feat: hidden exits (and related flags) work with commands that change room ids. exit code simplified and unified between impassable and blocked exits.
Diffstat (limited to 'internal/game/render_map.go')
-rw-r--r--internal/game/render_map.go25
1 files changed, 5 insertions, 20 deletions
diff --git a/internal/game/render_map.go b/internal/game/render_map.go
index 5e57bc7..0177595 100644
--- a/internal/game/render_map.go
+++ b/internal/game/render_map.go
@@ -60,9 +60,6 @@ func buildGraph(g *Game, sess *net.Session, startRoomID int) *mapGraph {
rg := world.BuildGrid(startRoomID, func(id int) (*world.Room, bool) {
return loadRoom(g, id)
}, nil, func(fromID int, dir world.ExitDir, targetID int) bool {
- if sess == nil || sess.Player == nil {
- return true
- }
room, ok := loadRoom(g, fromID)
if !ok {
return true
@@ -71,10 +68,7 @@ func buildGraph(g *Game, sess *net.Session, startRoomID int) *mapGraph {
if !ok || exit.Room != targetID {
return true
}
- if exit.Hidden && !g.exitDiscovered(sess.Player, fromID, dir) {
- return false
- }
- return true
+ return g.exitDisplayState(sess, fromID, dir, exit).Visible
}, nil)
return &mapGraph{posToRoom: rg.RoomAt, dist: rg.Dist}
}
@@ -619,23 +613,14 @@ func exitStateTo(g *Game, sess *net.Session, from int, dir world.ExitDir, neighb
if !ok || exit.Room != neighbor {
return exitAbsent
}
- p := sessPlayer(sess)
- if exit.Hidden && !g.exitDiscovered(p, from, dir) {
+ ed := g.exitDisplayState(sess, from, dir, exit)
+ if !ed.Visible {
return exitAbsent
}
- if exit.AlwaysBlocked {
- if p != nil && p.GodMode {
- return exitOpen
- }
+ if ed.Blocked {
return exitBlocked
}
- if exit.Condition == nil || sess == nil || sess.Player == nil {
- return exitOpen
- }
- if sess.Player.GodMode || g.checkCondition(sess, exit.Condition) {
- return exitOpen
- }
- return exitBlocked
+ return exitOpen
}
func sessPlayer(sess *net.Session) *player.Player {