aboutsummaryrefslogtreecommitdiff
path: root/internal/game
diff options
context:
space:
mode:
Diffstat (limited to 'internal/game')
-rw-r--r--internal/game/act.go7
-rw-r--r--internal/game/act_room.go10
-rw-r--r--internal/game/act_steal.go2
-rw-r--r--internal/game/act_talk.go8
-rw-r--r--internal/game/cmd_inspect.go8
-rw-r--r--internal/game/cmd_move.go8
-rw-r--r--internal/game/cmd_registry.go2
-rw-r--r--internal/game/cmd_room_insert.go4
-rw-r--r--internal/game/cmd_room_remove.go4
-rw-r--r--internal/game/cmd_setglobalflag.go (renamed from internal/game/cmd_setflag.go)8
-rw-r--r--internal/game/condition_test.go22
-rw-r--r--internal/game/core_flagstore.go30
-rw-r--r--internal/game/exit_discovery_test.go6
-rw-r--r--internal/game/game.go10
-rw-r--r--internal/game/map_test.go16
-rw-r--r--internal/game/sys_triggers.go20
16 files changed, 83 insertions, 82 deletions
diff --git a/internal/game/act.go b/internal/game/act.go
index f2ea121..ddeed04 100644
--- a/internal/game/act.go
+++ b/internal/game/act.go
@@ -297,8 +297,8 @@ func (g *Game) checkCondition(sess *net.Session, c *behavior.Condition) bool {
return flagMatches(present, val, c.Value, c.Not)
}
- if c.Flag != "" {
- val, present := g.Flags.Get(c.Flag)
+ if c.GlobalFlag != "" {
+ val, present := g.GlobalFlags.Get(c.GlobalFlag)
return flagMatches(present, val, c.Value, c.Not)
}
if c.HasItem != "" {
@@ -318,7 +318,8 @@ func (g *Game) checkCondition(sess *net.Session, c *behavior.Condition) bool {
return true
}
-// flagMatches evaluates a flag/player_flag condition.
+// flagMatches evaluates a global_flag/player_flag condition. The name is
+// historical; it evaluates both flag types.
//
// If the condition specifies no `value`, the flag matches when it is present
// and truthy (so `{player_flag: x}` means "x is set" and
diff --git a/internal/game/act_room.go b/internal/game/act_room.go
index ddca261..da74d6e 100644
--- a/internal/game/act_room.go
+++ b/internal/game/act_room.go
@@ -161,8 +161,8 @@ func (g *Game) fireEnterStep(seq *enterSeq, step world.EnterStep) {
}
}
}
- if len(step.SetFlags) > 0 || len(step.SetPlayerFlags) > 0 {
- g.applyFlagMutations(p, step.SetFlags, step.SetPlayerFlags)
+ if len(step.SetGlobalFlags) > 0 || len(step.SetPlayerFlags) > 0 {
+ g.applyFlagMutations(p, step.SetGlobalFlags, step.SetPlayerFlags)
g.AccountStore.SaveCharacter(p)
}
if step.SpawnMob != nil {
@@ -229,10 +229,10 @@ func (g *Game) isCharLive(name string, sess *net.Session) bool {
return g.loggedInChars[name] == sess
}
-// applyFlagMutations sets world and player flags, shared by on_enter steps and
+// applyFlagMutations sets global and player flags, shared by on_enter steps and
// exit traversal.
-func (g *Game) applyFlagMutations(p *player.Player, setFlags, setPlayerFlags map[string]any) {
- g.Flags.SetAll(setFlags)
+func (g *Game) applyFlagMutations(p *player.Player, setGlobalFlags, setPlayerFlags map[string]any) {
+ g.GlobalFlags.SetAll(setGlobalFlags)
if len(setPlayerFlags) > 0 {
for k, v := range setPlayerFlags {
g.setPlayerFlag(p, k, v)
diff --git a/internal/game/act_steal.go b/internal/game/act_steal.go
index b5c1210..0aae6d1 100644
--- a/internal/game/act_steal.go
+++ b/internal/game/act_steal.go
@@ -47,7 +47,7 @@ var stallGuardTalk = &behavior.TalkConfig{
},
"fight": {
Messages: []string{"Then defend yourself!"},
- Action: &behavior.NodeAction{SetFlags: map[string]any{"guard_hostile": true}},
+ Action: &behavior.NodeAction{SetGlobalFlags: map[string]any{"guard_hostile": true}},
Options: []behavior.TalkOption{{Text: "(The guard attacks!)"}},
},
},
diff --git a/internal/game/act_talk.go b/internal/game/act_talk.go
index 7cfdf7c..ca6054c 100644
--- a/internal/game/act_talk.go
+++ b/internal/game/act_talk.go
@@ -60,8 +60,8 @@ func (g *Game) startTalk(sess *net.Session, p *player.Player, obj *object.Object
func (g *Game) handleNodeAction(sess *net.Session, na *behavior.NodeAction) (intercepted bool) {
g.applyNodeAction(sess, na)
- if v, ok := g.Flags.Get("guard_hostile"); ok && v != nil {
- g.Flags.Delete("guard_hostile")
+ if v, ok := g.GlobalFlags.Get("guard_hostile"); ok && v != nil {
+ g.GlobalFlags.Delete("guard_hostile")
p := sess.Player
if p != nil && p.Action != nil {
if td, ok := p.Action.Data.(*behavior.TalkData); ok && td.StealGuard {
@@ -348,8 +348,8 @@ func (g *Game) applyNodeAction(sess *net.Session, na *behavior.NodeAction) {
g.AccountStore.SaveCharacter(p)
}
- for k, v := range na.SetFlags {
- g.Flags.Set(k, v)
+ for k, v := range na.SetGlobalFlags {
+ g.GlobalFlags.Set(k, v)
}
for k, v := range na.SetPlayerFlags {
g.setPlayerFlag(p, k, v)
diff --git a/internal/game/cmd_inspect.go b/internal/game/cmd_inspect.go
index 62392b7..7488591 100644
--- a/internal/game/cmd_inspect.go
+++ b/internal/game/cmd_inspect.go
@@ -92,8 +92,8 @@ func (g *Game) executeInspect(sess *net.Session, args []string, rawInput string)
sess.WriteLine(fmt.Sprintf("\nRoom Triggers: %d", len(room.Triggers)))
for _, trigger := range room.Triggers {
kind := ""
- if trigger.OnFlag != "" {
- kind = fmt.Sprintf("world flag %q", trigger.OnFlag)
+ if trigger.OnGlobalFlag != "" {
+ kind = fmt.Sprintf("global flag %q", trigger.OnGlobalFlag)
} else if trigger.OnPlayerFlag != "" {
kind = fmt.Sprintf("player flag %q", trigger.OnPlayerFlag)
}
@@ -101,8 +101,8 @@ func (g *Game) executeInspect(sess *net.Session, args []string, rawInput string)
}
}
- sess.WriteLine("\n--- World Flags ---")
- allFlags := g.Flags.All()
+ sess.WriteLine("\n--- Global Flags ---")
+ allFlags := g.GlobalFlags.All()
if len(allFlags) == 0 {
sess.WriteLine(" (none)")
} else {
diff --git a/internal/game/cmd_move.go b/internal/game/cmd_move.go
index f236d67..2f27eed 100644
--- a/internal/game/cmd_move.go
+++ b/internal/game/cmd_move.go
@@ -67,7 +67,7 @@ func (g *Game) doMove(sess *net.Session, dir string, multiplier float64) {
}
}
- p.MovePendingFlags = exitDef.SetFlags
+ p.MovePendingGlobalFlags = exitDef.SetGlobalFlags
p.MovePendingPlayerFlags = exitDef.SetPlayerFlags
inCombat := g.Combat.Get(p.Name) != nil
@@ -132,7 +132,7 @@ func (g *Game) moveTicks(p *player.Player, multiplier float64) int {
func (g *Game) completeMove(sess *net.Session, p *player.Player) {
exitDir := p.MoveDirection
targetID := p.MoveTarget
- pendingFlags := p.MovePendingFlags
+ pendingGlobalFlags := p.MovePendingGlobalFlags
pendingPlayerFlags := p.MovePendingPlayerFlags
p.ClearMoveState()
@@ -163,8 +163,8 @@ func (g *Game) completeMove(sess *net.Session, p *player.Player) {
if p.EnterSeqRoom != 0 && p.EnterSeqRoom == oldRoom {
p.EnterSeqRoom = 0
}
- if len(pendingFlags) > 0 || len(pendingPlayerFlags) > 0 {
- g.applyFlagMutations(p, pendingFlags, pendingPlayerFlags)
+ if len(pendingGlobalFlags) > 0 || len(pendingPlayerFlags) > 0 {
+ g.applyFlagMutations(p, pendingGlobalFlags, pendingPlayerFlags)
}
g.AccountStore.SaveCharacter(p)
diff --git a/internal/game/cmd_registry.go b/internal/game/cmd_registry.go
index 462bf53..e2c34aa 100644
--- a/internal/game/cmd_registry.go
+++ b/internal/game/cmd_registry.go
@@ -150,7 +150,7 @@ var commandRegistry = map[string]commandDef{
"goto": {(*Game).executeGoto, ClassInstant},
"summon": {(*Game).executeSummon, ClassInstant},
"dig": {(*Game).executeDig, ClassInstant},
- "setflag": {(*Game).executeSetFlag, ClassInstant},
+ "setglobalflag": {(*Game).executeSetGlobalFlag, ClassInstant},
"setplayerflag": {(*Game).executeSetPlayerFlag, ClassInstant},
"reload": {(*Game).executeReload, ClassInstant},
"shutdown": {(*Game).executeShutdown, ClassInstant},
diff --git a/internal/game/cmd_room_insert.go b/internal/game/cmd_room_insert.go
index b72591f..713c5ee 100644
--- a/internal/game/cmd_room_insert.go
+++ b/internal/game/cmd_room_insert.go
@@ -138,7 +138,7 @@ func (g *Game) roomInsert(sess *net.Session, args []string) {
Room: newID,
Condition: exitDef.Condition,
BlockedMessage: exitDef.BlockedMessage,
- SetFlags: exitDef.SetFlags,
+ SetGlobalFlags: exitDef.SetGlobalFlags,
SetPlayerFlags: exitDef.SetPlayerFlags,
Hidden: exitDef.Hidden,
AlwaysBlocked: exitDef.AlwaysBlocked,
@@ -158,7 +158,7 @@ func (g *Game) roomInsert(sess *net.Session, args []string) {
Room: newID,
Condition: targetExit.Condition,
BlockedMessage: targetExit.BlockedMessage,
- SetFlags: targetExit.SetFlags,
+ SetGlobalFlags: targetExit.SetGlobalFlags,
SetPlayerFlags: targetExit.SetPlayerFlags,
Hidden: targetExit.Hidden,
AlwaysBlocked: targetExit.AlwaysBlocked,
diff --git a/internal/game/cmd_room_remove.go b/internal/game/cmd_room_remove.go
index 78c1234..28433ff 100644
--- a/internal/game/cmd_room_remove.go
+++ b/internal/game/cmd_room_remove.go
@@ -171,7 +171,7 @@ func (g *Game) roomRemove(sess *net.Session, args []string) {
Room: cID,
Condition: aExit.Condition,
BlockedMessage: aExit.BlockedMessage,
- SetFlags: aExit.SetFlags,
+ SetGlobalFlags: aExit.SetGlobalFlags,
SetPlayerFlags: aExit.SetPlayerFlags,
Hidden: aExit.Hidden,
AlwaysBlocked: aExit.AlwaysBlocked,
@@ -191,7 +191,7 @@ func (g *Game) roomRemove(sess *net.Session, args []string) {
Room: aID,
Condition: cOppExit.Condition,
BlockedMessage: cOppExit.BlockedMessage,
- SetFlags: cOppExit.SetFlags,
+ SetGlobalFlags: cOppExit.SetGlobalFlags,
SetPlayerFlags: cOppExit.SetPlayerFlags,
Hidden: cOppExit.Hidden,
AlwaysBlocked: cOppExit.AlwaysBlocked,
diff --git a/internal/game/cmd_setflag.go b/internal/game/cmd_setglobalflag.go
index a18c635..1ac5080 100644
--- a/internal/game/cmd_setflag.go
+++ b/internal/game/cmd_setglobalflag.go
@@ -7,13 +7,13 @@ import (
"thehouseoficarus/internal/net"
)
-func (g *Game) executeSetFlag(sess *net.Session, args []string, rawInput string) {
+func (g *Game) executeSetGlobalFlag(sess *net.Session, args []string, rawInput string) {
if !g.checkAdmin(sess) {
sess.WriteLine("Unknown command.")
return
}
if len(args) == 0 {
- sess.WriteLine("Usage: setflag <flag_name> [value]")
+ sess.WriteLine("Usage: setglobalflag <flag_name> [value]")
return
}
name := args[0]
@@ -33,6 +33,6 @@ func (g *Game) executeSetFlag(sess *net.Session, args []string, rawInput string)
}
}
}
- g.Flags.Set(name, value)
- sess.WriteLine(fmt.Sprintf("Flag '%s' set to %v.", name, value))
+ g.GlobalFlags.Set(name, value)
+ sess.WriteLine(fmt.Sprintf("Global flag '%s' set to %v.", name, value))
}
diff --git a/internal/game/condition_test.go b/internal/game/condition_test.go
index f365f2e..f7a5dc6 100644
--- a/internal/game/condition_test.go
+++ b/internal/game/condition_test.go
@@ -39,7 +39,7 @@ func TestIsTruthy(t *testing.T) {
}
func TestCheckConditionPlayerFlagTruthy(t *testing.T) {
- g := &Game{Flags: NewFlagStore()}
+ g := &Game{GlobalFlags: NewGlobalFlagStore()}
set := sessWithFlags(map[string]any{"x": true})
unset := sessWithFlags(map[string]any{})
@@ -73,7 +73,7 @@ func TestCheckConditionPlayerFlagTruthy(t *testing.T) {
}
func TestCheckConditionValueComparisonPreserved(t *testing.T) {
- g := &Game{Flags: NewFlagStore()}
+ g := &Game{GlobalFlags: NewGlobalFlagStore()}
sess := sessWithFlags(map[string]any{"n": 1})
if !g.checkCondition(sess, &behavior.Condition{PlayerFlag: "n", Value: 1}) {
@@ -87,24 +87,24 @@ func TestCheckConditionValueComparisonPreserved(t *testing.T) {
}
}
-func TestCheckConditionWorldFlag(t *testing.T) {
- g := &Game{Flags: NewFlagStore()}
- g.Flags.Set("gate_open", true)
+func TestCheckConditionGlobalFlag(t *testing.T) {
+ g := &Game{GlobalFlags: NewGlobalFlagStore()}
+ g.GlobalFlags.Set("gate_open", true)
sess := sessWithFlags(map[string]any{})
- if !g.checkCondition(sess, &behavior.Condition{Flag: "gate_open"}) {
- t.Error("world flag truthy check should pass")
+ if !g.checkCondition(sess, &behavior.Condition{GlobalFlag: "gate_open"}) {
+ t.Error("global flag truthy check should pass")
}
- if g.checkCondition(sess, &behavior.Condition{Flag: "gate_open", Not: true}) {
+ if g.checkCondition(sess, &behavior.Condition{GlobalFlag: "gate_open", Not: true}) {
t.Error("negated world flag should fail when set")
}
- if g.checkCondition(sess, &behavior.Condition{Flag: "missing"}) {
+ if g.checkCondition(sess, &behavior.Condition{GlobalFlag: "missing"}) {
t.Error("missing world flag should not pass")
}
}
func TestResolveObjDescPresence(t *testing.T) {
- g := &Game{Flags: NewFlagStore()}
+ g := &Game{GlobalFlags: NewGlobalFlagStore()}
def := &object.ObjectDef{
Description: behavior.DescList{
@@ -140,7 +140,7 @@ func TestResolveObjDescPresence(t *testing.T) {
}
func TestRoomDescriptionSelection(t *testing.T) {
- g := &Game{Flags: NewFlagStore()}
+ g := &Game{GlobalFlags: NewGlobalFlagStore()}
room := &world.Room{
Description: behavior.DescList{
{Text: "crowd", Condition: &behavior.Condition{PlayerFlag: "done", Not: true}},
diff --git a/internal/game/core_flagstore.go b/internal/game/core_flagstore.go
index ecefccf..18578b7 100644
--- a/internal/game/core_flagstore.go
+++ b/internal/game/core_flagstore.go
@@ -2,37 +2,37 @@ package game
import "sync"
-// FlagChangeCallback is invoked when a world flag value actually changes
+// GlobalFlagChangeCallback is invoked when a global flag value actually changes
// (old value differs from new, or new flag is created with a truthy value).
-type FlagChangeCallback func(name string, value any)
+type GlobalFlagChangeCallback func(name string, value any)
-// FlagStore holds world flags — shared mutable state visible to all players
-// (e.g. opened doors, quest state). Player-specific flags live on
-// *player.Player.Flags instead. FlagStore is safe for concurrent use.
-type FlagStore struct {
+// GlobalFlagStore holds global flags — shared mutable state visible to all
+// players (e.g. opened doors, quest state). Player-specific flags live on
+// *player.Player.Flags instead. GlobalFlagStore is safe for concurrent use.
+type GlobalFlagStore struct {
mu sync.Mutex
flags map[string]any
- callbacks []FlagChangeCallback
+ callbacks []GlobalFlagChangeCallback
}
-func NewFlagStore() *FlagStore {
- return &FlagStore{flags: make(map[string]any)}
+func NewGlobalFlagStore() *GlobalFlagStore {
+ return &GlobalFlagStore{flags: make(map[string]any)}
}
-func (f *FlagStore) OnChange(cb FlagChangeCallback) {
+func (f *GlobalFlagStore) OnChange(cb GlobalFlagChangeCallback) {
f.mu.Lock()
defer f.mu.Unlock()
f.callbacks = append(f.callbacks, cb)
}
-func (f *FlagStore) Get(name string) (any, bool) {
+func (f *GlobalFlagStore) Get(name string) (any, bool) {
f.mu.Lock()
defer f.mu.Unlock()
v, ok := f.flags[name]
return v, ok
}
-func (f *FlagStore) Set(name string, value any) {
+func (f *GlobalFlagStore) Set(name string, value any) {
f.mu.Lock()
old, existed := f.flags[name]
f.flags[name] = value
@@ -46,7 +46,7 @@ func (f *FlagStore) Set(name string, value any) {
}
}
-func (f *FlagStore) SetAll(m map[string]any) {
+func (f *GlobalFlagStore) SetAll(m map[string]any) {
f.mu.Lock()
changed := make(map[string]any)
for k, v := range m {
@@ -66,13 +66,13 @@ func (f *FlagStore) SetAll(m map[string]any) {
}
}
-func (f *FlagStore) Delete(name string) {
+func (f *GlobalFlagStore) Delete(name string) {
f.mu.Lock()
defer f.mu.Unlock()
delete(f.flags, name)
}
-func (f *FlagStore) All() map[string]any {
+func (f *GlobalFlagStore) All() map[string]any {
f.mu.Lock()
defer f.mu.Unlock()
out := make(map[string]any, len(f.flags))
diff --git a/internal/game/exit_discovery_test.go b/internal/game/exit_discovery_test.go
index 3c0b360..4bf1023 100644
--- a/internal/game/exit_discovery_test.go
+++ b/internal/game/exit_discovery_test.go
@@ -28,7 +28,7 @@ func TestExitDiscoveredUndiscovered(t *testing.T) {
}
func TestExitDiscoveredAfterMark(t *testing.T) {
- g := &Game{Flags: NewFlagStore()}
+ g := &Game{GlobalFlags: NewGlobalFlagStore()}
p := &player.Player{}
roomID := 42
dir := world.East
@@ -54,7 +54,7 @@ func TestExitDiscoveredGodMode(t *testing.T) {
}
func TestExitDiscoveredDifferentRoom(t *testing.T) {
- g := &Game{Flags: NewFlagStore()}
+ g := &Game{GlobalFlags: NewGlobalFlagStore()}
p := &player.Player{}
g.markExitDiscovered(p, 10, world.North)
@@ -67,7 +67,7 @@ func TestExitDiscoveredDifferentRoom(t *testing.T) {
}
func TestExitDisplayState(t *testing.T) {
- g := &Game{Flags: NewFlagStore()}
+ g := &Game{GlobalFlags: NewGlobalFlagStore()}
const roomID = 7
dir := world.North
diff --git a/internal/game/game.go b/internal/game/game.go
index bf7bdc2..b9fb0af 100644
--- a/internal/game/game.go
+++ b/internal/game/game.go
@@ -44,13 +44,13 @@ type Deps struct {
}
// Game is the central orchestrator: it owns the data stores (via the embedded
-// Deps), the shared mutable game state (flags, combat tracker, command queue,
+// Deps), the shared mutable game state (global flags, combat tracker, command queue,
// safespots), and the per-session runtime bookkeeping.
type Game struct {
Deps
Hub *net.Hub
- Flags *FlagStore
+ GlobalFlags *GlobalFlagStore
Combat *combat.Tracker
TriggerStore *world.TriggerStore
queue *CommandQueue
@@ -88,7 +88,7 @@ func New(dataDir string, colorConfig *config.ColorsConfig, valConfig config.Vali
ColorConfig: colorConfig,
DataDir: dataDir,
},
- Flags: NewFlagStore(),
+ GlobalFlags: NewGlobalFlagStore(),
Combat: combat.NewTracker(),
TriggerStore: world.NewTriggerStore(),
queue: NewCommandQueue(),
@@ -127,8 +127,8 @@ func (g *Game) SetHub(hub *net.Hub) {
}
}
})
- g.Flags.OnChange(func(name string, value any) {
- g.TriggerStore.FireWorld(name, value)
+ g.GlobalFlags.OnChange(func(name string, value any) {
+ g.TriggerStore.FireGlobal(name, value)
})
}
diff --git a/internal/game/map_test.go b/internal/game/map_test.go
index 159214c..2fe9c1e 100644
--- a/internal/game/map_test.go
+++ b/internal/game/map_test.go
@@ -29,10 +29,10 @@ func writeTempRoom(t *testing.T, dir string, id int, body string) {
// links draw a bar, one-way links draw a directional arrow, outward-blocked
// links draw a blocked 'X', and links with no traversable direction draw 'X'.
func TestMapConnectorGlyphs(t *testing.T) {
- const condEast = "name: One\nexits:\n east:\n room: 2\n condition:\n flag: gate_open\n"
- const condSouth = "name: Three\nexits:\n south:\n room: 2\n condition:\n flag: gate_open\n"
- const condNE = "name: One\nexits:\n northeast:\n room: 2\n condition:\n flag: gate_open\n"
- const condSE = "name: One\nexits:\n southeast:\n room: 2\n condition:\n flag: gate_open\n"
+ const condEast = "name: One\nexits:\n east:\n room: 2\n condition:\n global_flag: gate_open\n"
+ const condSouth = "name: Three\nexits:\n south:\n room: 2\n condition:\n global_flag: gate_open\n"
+ const condNE = "name: One\nexits:\n northeast:\n room: 2\n condition:\n global_flag: gate_open\n"
+ const condSE = "name: One\nexits:\n southeast:\n room: 2\n condition:\n global_flag: gate_open\n"
cases := []struct {
name string
@@ -161,9 +161,9 @@ func TestMapConnectorGlyphs(t *testing.T) {
writeTempRoom(t, dir, 4, tc.room4)
}
- g := &Game{Deps: Deps{World: world.New(dir)}, Flags: NewFlagStore()}
+ g := &Game{Deps: Deps{World: world.New(dir)}, GlobalFlags: NewGlobalFlagStore()}
if tc.flagOpen {
- g.Flags.Set("gate_open", true)
+ g.GlobalFlags.Set("gate_open", true)
}
sess := &net.Session{Player: &player.Player{Flags: map[string]any{}}}
@@ -401,7 +401,7 @@ func TestMap3DDisconnectedComponent(t *testing.T) {
writeTempRoom(t, dir, 3, "name: Tower Two Base\nexits:\n up: 4\n west: 2\n")
writeTempRoom(t, dir, 4, "name: Tower Two\nexits:\n down: 3\n")
- g := &Game{Deps: Deps{World: world.New(dir)}, Flags: NewFlagStore()}
+ g := &Game{Deps: Deps{World: world.New(dir)}, GlobalFlags: NewGlobalFlagStore()}
mg := mapGlyphsForPlayer(false)
// Player has only visited tower 1. Tower 2 should appear but dimmed (unvisited).
@@ -426,7 +426,7 @@ func TestMap3DDifferentZExcluded(t *testing.T) {
writeTempRoom(t, dir, 1, "name: Ground\nexits:\n up: 2\n")
writeTempRoom(t, dir, 2, "name: Upper\nexits:\n down: 1\n")
- g := &Game{Deps: Deps{World: world.New(dir)}, Flags: NewFlagStore()}
+ g := &Game{Deps: Deps{World: world.New(dir)}, GlobalFlags: NewGlobalFlagStore()}
mg := mapGlyphsForPlayer(false)
sess := &net.Session{Player: &player.Player{
Stats: player.PlayerStats{RoomsVisited: map[int]bool{1: true, 2: true}},
diff --git a/internal/game/sys_triggers.go b/internal/game/sys_triggers.go
index 7c77fc9..b542fdd 100644
--- a/internal/game/sys_triggers.go
+++ b/internal/game/sys_triggers.go
@@ -13,7 +13,7 @@ import (
func (g *Game) TriggerSeqTick() {
g.processPlayerTriggerSequences()
- g.processWorldTriggerSequences()
+ g.processGlobalTriggerSequences()
}
func (g *Game) TransientMobTick() {
@@ -106,8 +106,8 @@ func (g *Game) processPlayerTriggerSequences() {
}
}
-func (g *Game) processWorldTriggerSequences() {
- seqs := g.TriggerStore.SnapshotWorldSeqs()
+func (g *Game) processGlobalTriggerSequences() {
+ seqs := g.TriggerStore.SnapshotGlobalSeqs()
for _, seq := range seqs {
seq.Wait--
if seq.Wait > 0 {
@@ -125,11 +125,11 @@ func (g *Game) processWorldTriggerSequences() {
}
for _, step := range jobs {
- g.executeWorldTriggerStep(&step, seq.RoomID, seq.FlagValue)
+ g.executeGlobalTriggerStep(&step, seq.RoomID, seq.FlagValue)
}
if len(seq.Steps) == 0 {
- g.TriggerStore.RemoveWorldSeq(seq.TriggerID)
+ g.TriggerStore.RemoveGlobalSeq(seq.TriggerID)
}
}
}
@@ -161,8 +161,8 @@ func (g *Game) executeTriggerStep(sess *net.Session, p *player.Player, step *wor
}
}
}
- if len(step.SetFlags) > 0 {
- g.Flags.SetAll(step.SetFlags)
+ if len(step.SetGlobalFlags) > 0 {
+ g.GlobalFlags.SetAll(step.SetGlobalFlags)
}
if len(step.SetPlayerFlags) > 0 {
for k, v := range step.SetPlayerFlags {
@@ -204,7 +204,7 @@ func (g *Game) executeTriggerStep(sess *net.Session, p *player.Player, step *wor
}
}
-func (g *Game) executeWorldTriggerStep(step *world.TriggerStep, roomID int, flagValue any) {
+func (g *Game) executeGlobalTriggerStep(step *world.TriggerStep, roomID int, flagValue any) {
if step.Broadcast != "" && g.Hub != nil {
msg := expandTemplate(step.Broadcast, "", flagValue)
broadcastSpec := g.resolveColor(nil, "broadcast")
@@ -225,8 +225,8 @@ func (g *Game) executeWorldTriggerStep(step *world.TriggerStep, roomID int, flag
}
}
}
- if len(step.SetFlags) > 0 {
- g.Flags.SetAll(step.SetFlags)
+ if len(step.SetGlobalFlags) > 0 {
+ g.GlobalFlags.SetAll(step.SetGlobalFlags)
}
if step.SpawnMob != nil {
g.spawnWorldTriggerMob(step.SpawnMob, roomID)