I Update, Therefore I Am (ik ûpdäit wik majestic møøse)
As I told you last time, development of Asylum has been ramping up since we finalized the production of Hanwell. When I say production, I'm referring to the actual programming of the building, turning it into a playable game world. Since then, we've been polishing some graphics here and there, taking care the look and feel (especially the annoying lighting) is consistent across every room, and fixing bugs. We are this close to declare that Asylum is in true alpha stage, meaning the game is fully playable to some extent. Our next step is to test this new version with daring folks, including our VIP Visitors, Inmates and Doctors. They will tell us how it feels to explore Hanwell, how easy it is to find their way, and most importantly if the whole thing is stable (so far it really seems like it). To achieve this we need to include a few more details, such as regular maps adorning the many corridors and improving some passages (for instance, walking up and down some stairways is still a bit of a hassle). As soon as we receive this feedback, we will move on to the final task of adding profiles, diplomas, and names of backers throughout Hanwell.
You're probably wondering if we're being a tad obsessive when dedicating so much attention to the building itself, and you may be right. Thing is, the element of exploration in Asylum is so important, and the immersion factor must be so impeccable, that we're striving to make it feel like an "experience" rather than a game. For example, something we have improved a lot is the transition between rooms. It was a bit awkward till now how the protagonist remained still while opening doors, which also revealed a few glitches in the previous builds of the game. We found a solution that greatly improves the overall pacing and movement ("rhythm" as I like to call it), which is to perform a couple of extra steps each time you open a door. The result feels smooth and natural:
Remember folks, this isn't "real" 3D! In fact, many are still curious about Dagon since that update when I discussed it, so I have been preparing a lengthy introduction to the engine for you...
A Lengthy Introduction To The Engine
One crucial aspect of developing any engine is to ensure that it can be easily repurposed for many different projects, so its programming language and feature set must be as "generic" as possible. Because Dagon and Asylum are sister projects, it can be sometimes difficult to determine how much goes in the engine and how much is the game's responsibility. For instance, it's tempting to include quick and dirty patches in the engine (often known as hardcoding) to make programming the current game easier, but that will only bring problems for future games, those that don't benefit or may even conflict with the "X" feature that you hardcoded.
Such a dilemma has been present since the SCream and Scratches days. Back then I made some bad choices code-wise, but thankfully learned from such mistakes and tackled Dagon with a better approach. To understand how things work now, we need to make an important distinction as there are three layers of programming: the engine code, the engine programming language (or API), and the game code.
Roughly speaking, Dagon would be the nuts and bolts while the API is the set of instructions that define how users will program the engine. Then there's the actual game code, or the magic that makes Asylum happen. In short, you always want to make sure that the engine code knows nothing about the game code, and vice-versa, while the API is the nexus between them.
It has a been a huge concern of mine to ensure that the API is as generic as possible and especially makes sense to other programmers. More so, to design a language that at the same time feels simple and powerful, flexible enough to accommodate different styles of adventures, and is easily scalable for future purposes. For instance, Dagon is currently supporting first person adventures only, but as soon as we're done with Asylum I have immediate plans to add third person support.
So how it feels to program with Dagon? The core idea couldn't get any simpler: you create Nodes and arrange them in Rooms. Nodes are the discrete positions where the player can walk and Rooms are the containers that hold them, often applying certain properties to sets of nodes such as shared visual effects and background music. In the future third person implementation, Nodes would become Scenes (since in this style of adventures a scene usually depicts a single room), and Rooms would become Locations, that is, large areas holding similar scenes.
The nodes themselves are, quite literally, 3D cubes.
We're often asked how we're able to render such quality graphics on these cubes without any distortion and so much freedom to look around in every possible direction, and frankly we still don't know. It's like some kind of voodoo magic or Apple computers: It Just Works™. Basically, what we do is project some very large pre-rendered textures on all six faces of the cube:
But the really powerful object here is the Spot.
I designed this as a sort of abstract region in a node that can become anything: a sound, an image, a video, etc. This is achieved by "attaching" media to it. So a spot could be a single point to which you attach a sound effect such as a distant scream of agony, and Dagon will automatically relocate the sound around you as you rotate the camera. Now transform that spot into a square region, then attach a video, and Dagon will project that video on the corresponding face of the cube, all while playing the previously attached sound effect of the scream. But what if we want to interact with that spot? Simple, we attach a custom piece of code where we give Dagon a set of instructions, and suddenly we have... a hotspot! See what I did there?
So Asylum is essentially that: a collection of Nodes with many, many Spots in them, all neatly organized in Rooms. Once you understand how the Spot object is supposed to work, which is like a container for your resources or media, and also may support interactions, it can be straightforward to create a complex adventure game. It did take me a few years (yes, years) to iron out the system and ensure those internal greasy gears work as intended. Curiously, the time spent researching and experimenting may match the actual time spent producing the engine. However, when I see projects like the upcoming Adamantus, a considerably different game than Asylum but built upon the same foundation, I feel like the time invested on Dagon has paved the way for exciting future possibilities. Both Dagon and Asylum are only the first steps of a much longer walk... or the first flowers in a vast garden... rather, the first drips of a bloodbath... heck, the beginning of something beautiful.
To see what I mean, here's a bit of Asylum code:
Repeat for 1000+ spots in 100 rooms.
Wow, look at the hour! It's time for my soup of eyeballs. If there's enough interest, I will continue discussing Dagon next time. Stay tuned for the results of our alpha test as well, and there's definitely a new gameplay video coming up soon.
Have a horrifying weekend!
P.S.: I would like to wish a most happy birthday to Serena Nelson, a staunch supporter of this project, as well as many, many other Kickstarters... rather, an undisputed hero of the entire adventure game community... heck, DIVINE SAVIOR OF PLANET EARTH. We owe her much and are so glad to know her. May your day be filled with many slimy tentacles, dear Serena.
P.P.S.: Riggo is not a lie.