Greetings all - First, a little about me;
I’ve been a software developer, architect, and research professional for nearly 15 years; and I’ve been an avid PC gamer since before PC gaming was actually a thing. A long, long time ago - a friend and I designed an entire RPG system for a tabletop game that I’ve always wanted to implement as something MMO-Like. The interesting parts of the system centered around things like evolving politics between player and non-player factions, economy, and story-telling, while components of the system like combat, skills, spells, and movement were fairly simple compared to some systems. All that being said, I’ve started laying the groundwork for this system (in all my spare-time) using a combination of PlayerFab (authentication), SpatialOS (World), Firebase (Data Storage), and Unity (Mechanics/Logic/etc).
All that being said, what I’m finding most challenging to wrap my head around with regards to SpatialOS is the world-building aspects of it; without over-architecting, I’ve a tendency to spend a lot of time thinking about scalable design that won’t paint components into a corner if they need to be scaled to accomodate success. Also, since worlds can be really big; I have been thinking about how to design my world(s) in small chunks, allowing me to “build in” those small details that make the world immersive without having to “load in” the entire world anytime I want to do something of the sort. I’ve begun modeling out the design of my world (through PoCs and mockups, primarily) envisioned through the lens of “zones” where a zone is generally made up of a chunk of terrain which is statically generated, a bunch of entities which are scripted (npc’s, buildings, vehicles, etc.), and various procedural components (trees, garbage on the streets, weather, etc.). Obviously, I don’t want all of these things “baked in” to the snapshot, there’s no reason that the terrain itself needs to exist on the server side and be streamed to the client when simply storing the mesh for the terrain will suffice for physics and collisions; likewise, procedural content should be generated on the client, and will serve as an immersive environmental component that has generally little-to-no effect on things that need to be decided authoratatively (with some exceptions, like weather - for instance, it’s a great deal harder to snipe someone with a bow in a torrential downpour with heavy winds than it is to do so on a bright sunny windless afternoon, but more on that in a future post).
So now, on to my actual set of questions:
- What would be the best way to generate this game world?
I’ve begun creation of some custom inspectors and editor windows that provide some world-building functionality already - but I’m curious how others have addressed this particular part of the puzzle as to a) not overthink it, and b) make world-design fun and simple (something you could do by simply opening the scene for that zone, do your thing, then click a button and have all the grunt work “done for you”
- How to hand positioning within the world(s) and universe?
In previous lives, things I’ve built in Unity I’ve relied greatly on containerizing things and using hierarchy’s to make relative positioning simple to calculate and keep in mind; but it’s unclear to me if this approach is tenable or even right for building potentially massive worlds in something like a snapshot.
- Zoning, generally?
Although it seems to be a relatively straight-forward approach (and not new, by any stretch of the imagination) – I’m curious what the community at large feels about the zone approach to world-building, particularly in terms of the way that SpatialOS “handles” scaling the world. Zoning feels like a great approach for “legacy” sharding architectures; but feels a little more unnatural in the component-based micro-things architecture that I see SpatialOS as.