I recently made an attempt at building a simulation game. I found it challenging even though I'm a seasoned software developer. I was finding that my experience in building out web apps, dashboards, and crud stacks didn't immediately lend itself to architecting a game properly. It feels like everything is business logic and it has been tough to see ways to tease out and modularize concepts. I don't know if I am making good trade-offs w.r.t performance and immutability. I find myself copying an entire "world" structure with every loop in an attempt to represent the world immutably, but I also seem to need to process changes serially as entities interact with one another inside the world. It doesn't matter that the world is immutable, I can't easily parallelize the simulation. Perhaps immutability is only making things harder, then?
I'm not too concerned about graphics or 3D math. I'm working in a 2D space with the most amateur of graphics. I'm interested in having some looming trade-offs pointed out to me so that I can make decisions with my architecture to best receive those trade-offs. I'm interested in design patterns that allow me to modularly enrich the complexity of my simulation.
If you're curious, https://github.com/MeoMix/antfarm/blob/main/src/util.ts Here is a file that became quite the dumping ground. I am not proud of this code. I had intended to tease out some utility methods which take a world and return a cloned and updated world. It's easy enough to separate out view concepts, and it's easy enough to separate out constructors, but all of the "interesting" simulation logic found its way to this dumping ground.
One book I am going to purchase is https://tynansylvester.com/book/ as it's by the developer of RimWorld which is a world-class simulation game. I don't think this will approach technical trade-offs, though, only functional.
Another resource I found is the development blog for Sandspiel, https://maxbittker.com/making-sandspiel This is actually quite a useful resource and I think I would do well to internalize it more, but it also focuses heavily on particle physics and automata-driven simulations. These are good concepts to explore and ones I should strive to master, but they aren't the only ways to slice a simulation game.