The main issue here is that there are three different dimensions to cover, so it makes sense to just list them all out and see where I can find common ground.
Global/Instanced
Handcrafted/Procedural
Branched/2D/3D
So 12 possibilities.
Important
I also need to handle how stuff *in* the room works. Having them all in the same "objects" database with a type makes the most sense probably. Then you also have the entities layer that encompasses both objects and rooms and possibly worlds as well even.
Note 2
I want to implement Skeins too but those are going to be more complicated. Think: representing an ik'thulu procedural space.
Branched -- A Rooms database stored like NIFE or XIFNET where rooms have parents or you can have custom connections.
2D -- Rooms have an x and a y. There could still be a roomid, the x and y just make grids easier to manage. And the parent column wouldn't be used. Custom connections could still be a thing.
3D -- same as the above but there's also a z.
So it looks like Handcrafted could use the same universal database for rooms, which looks like this:
The main difference here is that rooms aren't explicitly in the database, you instead have diffs for changes.
I could use the same exact rooms database here for room diffs. The difference is that they're only created when a room changes, and the procedural settings allows more rooms to exist than are in the database. This should work for both 2D and 3D.
Branched is a bit trickier -- the way I'm doing mazes in Skygarden and Junker assigns them IDs but that isn't going to play nice with roomids. So maybe just add another column to rooms to indicate the procedural branched id when a branched room gets a change, ie "procbranid".
It makes sense to have a universal "objects" database that covers everything that can be in a room -- dropped items, vehicles, characters, fixtures. I'm then only instancing exactly two tables. Instancing only the rooms seems like a bad idea if someone gets sent to limbo for whatever reason.
Putting a vehicle into an instanced room would be absolute madness because of how many things inside it get instanced.