package game import "thehouseoficarus/internal/object" // resolveObjectDef returns the ObjectDef for a room object instance. File // objects (the common case) resolve through the cached object store with no // disk I/O on a hit, and a store miss is just a map lookup; only local objects // — which never live in the store — fall through to a freshly-read room, so // they keep live-edit semantics without slowing file-object lookups. defID is // the ObjState DefID (a normalized name for local objects, a file id // otherwise). // // Use this from display or generic-handling sites. Sites that look up a // specific interactable behavior (gather/use-station/safespot/steal/etc.) may // call ObjectStore.Load directly: local objects are guaranteed non-interactable // and simply fall through those sites' existing error guards. func (g *Game) resolveObjectDef(roomID int, defID string) (*object.ObjectDef, bool, error) { def, err := g.ObjectStore.Load(defID) if err == nil { if room, rerr := g.World.LoadRoom(roomID); rerr == nil { for i := range room.Objects { ro := &room.Objects[i] if ro.Local == nil && ro.ID == defID && ro.HiddenOverride { copy := *def copy.Hidden = true return ©, false, nil } } } return def, false, nil } if room, rerr := g.World.LoadRoom(roomID); rerr == nil { for i := range room.Objects { ro := &room.Objects[i] if ro.Local != nil && ro.ID == defID { d := *ro.Local d.ID = defID return &d, true, nil } } } return nil, false, err }