Lately I have been working on this game which I have had stuck in my head forever. More specifically, I have been building the tools which I will eventually use to build the game. Doing so has forced me to learn a lot in the way of data architecture.
My primary influences for this game are Nethack , the early Ultima games, and Diablo . All of these are adventure games, but there the similarities end. Nethack is – not to belittle it at all – a straightforward dungeon crawl, very simple graphics, simple rules, and astoundingly complex gameplay. Ultima (c. the Commodore-64 era) is middle of the road. Slightly more complex graphics, simpler gameplay, but a much more complicated world. It also gives you the option of controlling multiple characters.
Diablo – specifically Diable II – is an interesting blend of extreme complexity (the size of the world) and extreme simplicity (you play by clicking on stuff).
For the mechanics of the game I am building, Ultima IV – which cost me many a grade-point in college – has the most to teach me.
The interface was quite simple: Your character was always in the center of the screen, and the world shifted around you. Every time you hit a doorway, a city, the entrance to a dungeon, a teleport trap, or any number of other things, you would find yourself somewhere else.
One of the goals for my game is that absolutely all of the data for the game be held in XML files. Flash, while improving with every release, still chokes on huge files, so I had to come up with ways of [1] keeping files small, [2] keeping things modular, [3] keeping things consistent, and [4] keeping things interchangeable. This meant, to coin a phrase, “small pieces, loosely joined”.
Later I decided that, not only did everything have to be saved as XML, but even the images had to be built in XML. And that included multiple-frame animations.
So now I needed a logical system of creating maps and maintaining the internal logic of “When I exit room [1]at door [a] i need to appear in room [2] at room [b]”. How to connect all of these XML documents in a manner which maintains logic at the administration level, the file level, and the gameplay level?
Then it hit me: portals.
In Ultima IV, every time you hit a door, or a cave entrance, or a city, you were dumped into a new map in a specific place. That meant that there was something about the thing you activated which knew where to send you. It didn’t matter WHAT that thing was; every portal, no matter what it looks like, does the same thing: sends you somewhere else. Therefore each door, pit trap, ladder and trampoline has a set of coordinates identifying an XML document and an X and Y coordinate within the map which is built by that document. Scope and scale don’t matter; only the target. Let the new map take care of physics and context once you arrive at the new location.
So this long train of thought has made me think about the various portals in day-to-day life. The door of a house. The door of a car. A stairway. A slide. Each leads (for practical purposes) to a space with its own rules. Inside to outside. Rest to motion. Down here a fall will bruise me. Up there a fall will kill me. Out there is bright and cold. In here smells funny.
Portals, as initiators of action, rest in an indeterminate state. They are neither here nor there, and at the same time are both; like a shoreline. I imagine Schrödinger came up with his famous theorem after watching his cat stand halfway out the door for fifteen minutes. The cat was neither in the state of being inside or outside, but was half of each, yet it was a single cat, so logically it must be oscillating between one state and another. Yet the cat itself isn’t moving, so it must instead be in neither state until it makes up its damn mind.
My next big random train of thought will be on the object-ness of events, and consensual reality with reference to discrete units of time.