The main theme in the last couple of changelogs has been “entering” and “exiting”.
In Vespers, there are several objects that act as traditional interactive fiction-style “supporters” and “containers” — that is, objects that allow you to mount them (supporters) or enter them (containers). These would be objects like chairs, benches, and beds. The latter is particularly important for Vespers, but either way if we’re going to include objects like these in the 3D world, there should be a process in place for sitting and lying down, even if it’s not crucial for the completion of the game. Without that, the world would just seem too non-interactive and uninviting.
In text, the process of mounting or entering objects is fairly straightforward, and is communicated through a few simple cues:
>GET IN BED You get onto the bed.
>LOOK
Your Bedroom (on the bed) The room is small; the same as all the others. But it seems smaller of late. The hall extends to the west.
In 3D, there are a few additional things to consider. Do we animate the sitting/lying action, or just pop the player right into the chair/bed? If the player is lying down, should the camera be rotated 90 degrees? What will be the impact of not showing the player’s body once in the chair or bed? Do we allow the player to get up by moving, or do we freeze movement and require the player to enter a specific command, like GET UP?
I think I was able to find a reasonable solution to each of those issues. Fortunately for me, the player character in the game engine comes with pre-existing animations for getting into and out of “crouch” and “crawl” positions, which work very nicely for sitting and lying positions, respectively. So when getting into a chair or bed, I reposition the player to the same coordinates as the object, play the “crouch” or “crawl” animation, and then freeze movement controls so all that can be done is to look around, click on objects, or type commands. If the player wants to rise, the GET UP command has to be given, and then I just do the reverse actions.
It does come across as a little weird to appear bodiless in a chair or bed, but I don’t think it’s different enough from the rest of the game to come across as jarring. As for the camera angle while lying down, I think it’s pretty clear that rotating the camera sideways would serve only to make things very confusing for players. As it turns out, keeping the same camera orientation while in bed really doesn’t come across as strange.
Once that was done, then I had to create all of the various ways of ENTERing or EXITing these objects. ENTER, EXIT, GET IN, GET INTO, GET ON, GET ONTO, GO IN, GO INTO, SIT, SIT ON, SIT ON TOP OF, SIT DOWN ON, SIT DOWN IN, STAND, STAND UP, GET UP, GET OUT OF, GET OFF, and GET OFF OF, and so on and so forth. It’s quite fascinating (and exhausting) how many different ways there are to say it.
Then there was just the process of making all of the different beds, chairs, and benches “enterable” and “supporters”, and we’re set.
The choir stalls were a different matter, though. I wanted to restrict the player from entering the choir stalls for various reasons, the most important of which is that they just weren’t designed for it. But because they are so large they also created problems with the parser. So I had to come up with a customized way of responding to the various commands for entering or sitting in the choir stalls, while gracefully not allowing it. In the end, I think it works well.
Enjoyed this article? Subscribe to The Monk's Brew RSS feed.