World architecture and internal construction?

I have a WorldMap class that currently stores arrays of Rooms, Regions, and Connections, kinda like a big node-looking map.

  • Rooms are more broad than a house room, a room can be thought of as any one screen, or one level, but much less complex at the moment.
  • Connections connect two Rooms at specific points. The entrances have specific styles associated with them (fancy, plain, (boss!), etc).
  • Regions are simply a bucket of Rooms that will later provide rendering details (styles, etc), so rooms within a Castle region will have brick walls (probably).

My question is, what would JGO recommend when it comes to just how stuff is structured internally? The ideas I have in mind are:

  1. see the above, basically the world is a big bag of everything. Objects have a global identifier instead of more localized ones. Arguably with this approach, I could get rid of Regions and instead make rooms self-contained with stuff for styles and traps and everything else. It feels a lot closer to entity-component-based design at that point, unless I’m crazy, which could potentially work very well for whenever I decide to add dungeon traps and loot and everything else that a game could probably have, since stuff is “decoupled” so to speak.

  2. The world stores an array of regions and an array of connections between regions. The regions store a collection of rooms and a collection of connections between those rooms. The objects would instead have a local identifier value, instead of one as it would be in the entire world. This feels more like regular object-orientated, inheritance-like (or at least tree-like), since the tree of objects is world, region, room. (Connections kinda exist in limbo like branches, whatever) This approach is kinda nice since I won’t have spare rooms floating about that I forget to attach or something. I also don’t want to slip into the mindset that I should try to fit everything into ECS design, because there are some things that I feel just don’t quite jive with it.

  3. Kinda weak-feeling, but posted for the sake of completeness: make each room self-contained, with references to its own paths and the region it is in, along with whatever else might come along. The only problem is that I feel like this is inefficient, not in an optimization sense, but in the sense that I need to store objects repeatedly in different objects and have multiple references. It sounds like a web instead of a well-ordered chaos, and potentially very messy.

Any feedback is appreciated! I’m not looking for hard answers, just for some feedback for those that have likely been doing this for probably quite a bit longer than I have.

[EDIT]: Now that I think about it, this probably belongs in Game Design. Kinda muddled.