Let me start out stating that I know we’re not there yet. As game designers we employ different design patterns to provide the player with the illusion of a fully simulated game world, but it is still just a lot of smoke and mirrors.
Neat tricks for sure, but not the real deal.
Simulations are not games by design. They are used to test other stuff and most of the time the system that is being simulated is treated as a rather boring black box where we provide some input and expect the simulation to give us useful data that we can use to tweak the system in order to better serve the real world when we leave the simulation and go live.
I recall one of the first simulations I ever ran – not sure if it was done in LISP, Prolog or Smalltalk anymore. It was a rather simple system simulating a set of ski lifts, slopes and restaurants, with people arriving by bus or car, stacking up in queues to ride the lift to the top of the ski resort and then take a predictable set of routes down depending on skill level, with age and income as parameters for the chance of them stopping to get a drink on the way down or stay for after-ski, stay the night and so forth.
It was boiled down to math, loads of data points stored in log files and a database and later an equal amount of queries to determine waiting times, queue length and decisions about the quota for parking space as divided between cars and busses to maximize skier throughput and restaurant earnings while keeping time spent in queues below a pain threshold.
It turned out that the simulation did not need to adhere to the finer details of the domain that is simulated if those details are of no value for the simulation in order for it to deliver the expected outcome, so there was not even a GUI needed – just a command line interface.
Imagine how different that would be if it had to be running in a 3D world where you could observe the simulation running, get feedback and adapt by changing those slopes and then re-run to compare the outcomes?
I imagine that business tychoon games arise from a desire to be able to see and experience the system while it is running. The Sims of course do this too even though they seem to aim at simulating the actors (or agents) and their interactions rather than their actions within a specialized subsystem such as a ski resort.
I’ll get back to this to continue pondering about it in public for a while, since it’s the main driver that got me into game design as well as into systems development at large. I ran out of LEGO blocks… but with layered simulations in open 3D worlds it seems the greatest obstacles are CPU/GPU, memory and time.
What if we could simulate the visual aspects while close to the player and let the hidden portions remain a black box numbers game?