The Room development story
Before introducing any technical details, here's the game (source included). I encourage you to go through it at least once before reading the remainder of this document.
How it all started
A bunch of my friends at my workplace had broght the topic a few times before. They were planning to meet at Saturday morning and do the festival of coding for the Ludum Dare contest. Everyone was expected to work on their own games, but co-working in a group was the key factor to keep everyone's motivation high.
This was a great success. We've managed to enter the contest and worked two days long in a group of seven people. There was a lot of fun moments when every one of us progressed their own game.
But, let's start at the beginning. You are waking up at Saturday's morning and discover that the current theme is minimalism. What would you do?
Saturday – countdown begins
I quickly switched my way of thinking to a quick decision mode. In this mode, you use all your knowledge to instinctively design a good enough solution. The key to being quick is to not try being good (pursuing your ambitions), but to be good enough (the first thing that does not suck too much is the one).
In about ten minutes I had a vision of a person being trapped in a minimalistic room. I wanted to use the theme as a form, but yet create a compelling story.
I usually don't feel confident at that point of time. All I typically see is one situation and the feeling of this situation. And this being my first story and game, I didn't know at all how to extend this single situation to something bigger.
Then, another idea spawned in my mind. It was a mere word-play. "Room, room, room... what else related to the room do you have in your mind?" I asked and immediately answered: Chinese room argument. "I would like to make a story about a person that is forced to be a Chinese room."
I still didn't know what could I get from it, but I felt it had a potential for a story. With that conclusion I set off to my company where my friends had been working for a few hours straight on their games. I arrived at 1 o'clock.
At this time I didn't really think of it as of challenge. Rather the "gather with some friends and get some fun" kind of event. I was either good with finishing or not finishing the game. But as I put more effort to it, it was more and more precious to me.
Planning and setting the workplace
The first thing was to set up the workplace in the room used as our headquarters. So, I have brought my laptop, headphones and a few more items, grabbed a LOT of paper (I just love to prototype on paper) and put it in a way that I could both write on the computer and scribble notes on paper.
After that I jumped straight into management and planning. I have thought to myself "in order not to stay here at nights, suppose you have two mandays – 16 hours. Let's divide it into different tasks".
My initial plan focused on the following schedule.
- 2 hours for initial story planning
- 4 hours for writing the whole story
- 2 hours for the first part of graphics
- 2 hours for the second part of graphics
- 4 hours for the music
- 2 for final proofreading, release and submit
Although it was completely changed during the real work, it gave me a sense how little should I be approaching in order not to get stuck at the deadline with half-finished game.
In the end, I finished up at 24 hours of work, a half more than expected, but still, having the plan at first was a good thing.
At 2 PM, I started to make use of my paper to design and expand the idea I had in mind. From the beginning I was going to use Ren'Py as a platform. I had used it in the past, so it wasn't totally unknown to me. Ren'Py has several advantages – it works on all popular PC platforms, is easy to work with, and even has a built-in tool to make releases.
Technologically aside, I had a few ideas that I wanted to include in the game.
At the very beginning, I wanted the protagonist to be a manifestation of the player in the game world. The protagonist is not a player, but the player should be able to identify themselves with the protagonist, and all the choices should be made by the player, with no suggestion by the protagonist (or the situation), which one is better. Because in life there are hardly just good or just bad choices. That way players could be, in theory, able to introspect themselves by looking at the choices they made during the playthrough.
In simpler terms: The protagonist being a mirror of player's choices – good. The protagonist suggesting particular choice when asking a player to choose a path – bad. Creating a game to be a river where you can see your reflection very good.
I had another experimental idea that I wanted to explore. I was always curious what language can tell you about the gender and how biased I am given that I'm male. So I tried to conceal the protagonist identity and leave no visible cues that could make the protagonist a man or a woman. One of the purposes of the survey above is to find which words or constructions did reveal the protagonist gender.
I didn't know how to structure a game in order to be interesting, so I quickly turned to classic theory: a quick look at Wikipedia articles for dramatic structure and three-act structure gave me inspiration and I decided to stick to these two rules:
- the writing will be divided into three acts (or storybeats as I had called them).
- the first one will be an introduction to the place, the second one will turn more intristic, and in the third one a player will need to make a decision.
I turned to this structure because I had no time to explore and centuries of playwrights and novelists haven't found any major flaws in these concepts.
After that I have drawn the basic layout of the room because I knew I want to see a few different perspectives of the room in the game. Without a plan, I would end up making a truly Escheresque Room, distracting the player from the real story.
Writing the first storybeat
At around 3 PM I've returned back to the story. At this point I had a skeleton structure and for the most part knew how the first two storybeats would look like, so I went straight on to writing the first one.
For the first storybeat, I wanted to introduce the situation of the protagonist to a player. There were a few key elements I wanted to show in this part.
The first thing was to let the player explore freely the room, but in the end to come to a realization that they are locked in the room and no clever use of the game objects would result in being freed from it. This is why I left the choice of order in which game objects are discovered to the player.
At this point I didn't want to emphasize the internal state of the protagonist. I wanted the player to have the time to become accustomed to the room and start visualizing it in their head. There is a great book titled Why we Buy – The Science Of Shopping that describes a person entering the shopping mall. When you pass the door of a shopping mall, you need some time to slow down, start looking at window displays, and to realize you are here to buy. The same effect I tried to achieve in this storybeat, leting the player to match the pacing of the story. The story wouldn't be incomprehensible after just skimming through this section, but by reading it you immerse yourself in the game's world.
Another thing I wanted to show that there are no magical powers. The protagonist can't transform into anything helpful, there are no pieces of advanced technology and there's no fairy that will be coming. Fiction, but no science fiction or fantasy in this story.
This doesn't count the mirror – from the beginning I wanted the player to experience there's something wrong with the room. Mirror problems are typically connected with dreams, but that's a false lead in this case. Also, with no reflection you cannot guess the gender or dissociate from the protagonist because you look different.
I've forgotten the chair. :) When I drew the plan it was obvious it should be in the room, but I totally forgot it when making the assets.
When I've finished that (after 5 PM, when I remember correctly), we've assembled to eat some pizza.
I was using three different machines. All the coding and testing were done on my laptop. Graphics was done on another machine. I had a Wacom Bamboo tablet installed there and a larger display. The third one was set up by my friends and served for composing music (with two MIDI keyboards connected to it and GarageBand running for the whole time).
I've printed the whole game code on a paper. That way I could be able to search what backgrounds did I need for the story, while working on another computer. Later on I changed this behavior to writing down the list of required assets on a piece of paper, because there was no benefit from printing the whole piece compared to looking at the editor.
I took the approach that there were no redoings. I was going to do each image only once and never return back to it. So I took some thought how to avoid drawing multiple perspectives of harder elements (the doorknob, the desk).
After I had designed some viewer positions for backgrounds, I began to draw particular images. I used two brushes which I called the contour brush and the shading brush.
The contour brush was small, about 1px in diameter with 100 percent opacity and 60 percent fill. The shading brush on the other hand was big, typically 190px wide with 15 percent opacity and 1 percent fill. I changed these base settings when I needed darker or lighter tone.
Also, either my Photoshop knowledge is too low or there is no simple way to let such settings as brush flow and opacity be associated with a particular brush. So I needed to manually set them as I used the contour brush and the shading brush.
Below is an example image with shading layer off and on. With the shading brush, the image looks more watercolour-like. That was probably the best effect I could achieve fast.
As for the canvas size, I've made them two times bigger as the resulting image, so 1600x1200px for all the backgrounds. When scaled down, some of the lines were getting more delicate and finer than in 1:1 scale.
There were almost no colour. I've experimented with some colour changes (i.e. the background at the start of the game has the door painted in blue to make the player feel more repulsive to it, contrasted to the desk, that was described in the way to be more likable), but I've dropped this idea after a few images and went for grayscale.
I've finished the images, made a quick power nap and returned back to my laptop.
Tests, tests, tests...
What I love in software development is that you can set up your environment in order to test changes really fast (i.e. introducing changes in your program and seeing it a few times in a single minute). Ren'Py encourages this type of development. You can change a line of text, run the game, jump to the selected moment (through a saved game), then see if everyting is consistent.
It helped me a lot when putting image assets in the game, because I was able to play with transitions and decide after which line of text the background should change. There were places where putting the image at the beginning of the paragraph of text was not cutting it. Through continuous replays I polished the game in the way I wanted to experience it.
It was also this part when I realized I needed the Shake effect that is used often throughout the game. It's the only non-common transition in the game. It works pretty well in some places, however.
The second storybeat
It was around 8 PM when I started writing the second storybeat. My original plan assumed that I will end at 9 o'clock, but I decided to delay leaving to the moment where I will have at least text finished. Completing it, due to the story being totally linear, took me two hours.
I started with recapitulation of the first storybeat. I've cut the first storybeat in the climax, when the door had opened. It came naturally to me that at the beginning of the second one an explanation of what has happened between these two points was required. The player should have expected anything that moved the plot forward, but unfortunately was contrasted with almost no change in the situation. That's a bummer.
After that, this is the point where exploration shifts from the external to internal direction. At this point, there are no interesting things in the room and no clever way of using them yet. So the room itself becomes a prison, and the inner world of the protagonist becomes a playground, where new things can be found.
When creating the backstory, I thought what kind of reference could be simple enough, short, but powerful enough to make the player ready to make the decision in the approaching third storybeat. I chose children. It came off with a risk of some audience saying I don't like kids so please GTFO. But most people should be able to imagine the situation without overly negative attitude to this idea.
There was also another reason: I'm tired of games and anime (especially the latter one), whose protagonist's age is most likely to be 17 years old. It's OK once or twice, but don't overuse it.
In the latter part the reason of imprisonment is made clear. The protagonist is a part of some sick experiment that have gone bad. What is not clear is why anyone should imprison a person to make them translate text? Isn't this work paid under normal circumstances?
If somebody have asked me these questions at this point of story, without having known the ending, I'd answer somewhere along the lines of: Maybe the experiment in itself was designed in the right way, but someone turned everything unwritten in the specification into a totalitarian authority? Maybe this experiment was only a cover-up for some other kind of experimentation done on humans?
Fun fact: If you remember the desk from the first storybeat, you could actually connect it to the story. It's not clear, or emphasized, but is there. How would you feel revealing the fridge logic in a cold cell that someone actually took effort to make your workplace for the rest of your life more comfortable?
After finishing the second storybeat it was the time to put off the work and go home.
Sunday, a beginning of the end
This part is written from the perspective of one and a half month after finishing the game, so I probably shall focus on other things than writing right after completing the challenge. The good thing is that my friends suggested me recording my progress by taking the screenshots from my computer. With some help of that, I'm able to put together all the fragments into the remainder of this story.
I reached the office at about 11:00AM. I realized that everybody was in there, some even working for a few hours straight. Not wanting to miss the deadline, I've started to work on my own piece. I have cleaned the text left the previous day and walked to my graphics tablet to draw the images remaining. I had a paper checklist of all the images I needed to draw.
Between 12:30PM and 1:30PM I had created all image assets I required. And even one more. I actually didn't need the empty plates in the second chapter. I didn't want not to use it, so I used it in the third one.
The potato stew is of course the Ludum Dare insider joke - my friends had told me about it and i loved to include a reference to it. There are also other ones – the Bluebrick logo on the computer (it's the company where we held our HQ), and the word presented in the instructions (it means freedom for any of you who don't speak Chinese or Japanese).
I've polished the chapter and at 2:00PM moved to the third one. But there was a problem! I still didn't know what to do. Fortunately, when I told others I have no twist in my game, one of my friends responded with a cliché idea. – Well, you could just wake up – he said. This had rescued the finish of my game. I just turned the table and changed a dream into a thought experiment, perfectly fitting into the whole thing. It was brilliant.
After that I designed the different paths. I wanted to make it a little non-linear and finally give the player choice to express themselves. My whole work was until that point was to enable the player to be straight with their desires to choose the outcome they want to.
I also wanted all the outcomes to fail. Some of them were more drammatic, some of them I gave less attention. The first version of player choices looked like this:
- you can die -> failing the experiment
- you can work -> finish, but too much time had passed
- you can do nothing -> integrating with the environment; breaking
- you can break the computer -> failed test
I did change them a little into what can be seen in the game. The whole chapter starts with an exposition that shows a need for resolution. After the exposition a player is presented with choices resembling their mood.
During writing I used the dictionary extensively. It shows at some points in the game that I'm not a native English user.
I started with do nothing scenario. I don't know why, but insanity was the simplest one for me to write. Right after that I jumped into the endgame (with the Professor and Assistant). I wanted to finish one of them completely, see how it works and then complete other routes.
Then I took my favourite scenario, Angered and furious. I think it's the most fine route out there both in terms of pacing and feelings. The second one is the Ready for anything.
It was 3:30PM and I started to test the story and routes to see how the text is going on in them. The polishing here was very extensive, because it was the most important moment of the game. At some time I even started inserting commented out background dissolves into the script just to finish everything up and get back to Photoshop and Wacom tablet. It took me a hour.
At 4:30PM, Vietnamese food has arrived, so we've all took a short break to eat. Right after then I started to draw ch3 assets. The most difficult one was the room with Professor in it, due to two aspects. First – I am not good at drawing, second – at first I wanted this scene in colour as opposing to the whole stylistic. I've failed once and drew it for the second time.
At 7:00PM after long fight with Photoshop, I've returned back to my laptop and started putting back new assets.
When testing the endgame make sure you're making a lot of savegames. For some time I didn't make mine and was running through the whole story to see a particular route. It wasn't too productive.
Catching the pacing of the Angered and furious ending was a little hard for me. My direct inspiration in that matter was the ending of the Umineko no Naku Koro ni Ep 2 – Banquet of the Golden Witch (you can see the scene in question on youtube). Then I realized that there's no credit screens. I quickly run to draw them.
I was mostly finished with both story and graphics at 8:00PM, so I've made a little break for social activities and completed a list of sounds and music that would be required for the game. The list had over 20 items from what I remember. We had two microphones and a preamp, but nobody did setup it up, so I borrowed an iPhone from a friend and started looking up our offices for the sounds required.
And for example, the sound of a dying person was me doing funny voices to the mic. The sound of breaking mirror was actually the bottle of beer in contact with pilers. The sound of the fluorescent bulb was a mix of some signals in Audacity.
All recordings required some processing in Audacity to cut them and reduce noises at the start and the end of a sample. Some of them needed mixing sounds in order to produce something different and more fitting in its place. I've never programmed sounds in Ren'py, so it was the good time to learn how it works. Next half a hour I've put the sounds in various places throughout the game.
At 11:45PM it was the time for music. I wanted something minimalistic and had no time to play with instrument settings so I settled for Grand Piano in GarageBand. I don't play piano, so the aspect of producing chords and stuff was also totally new to me. The fact that I needed over ten fragments similar in style ranging from a few seconds to a minute was not helping.
I sat before the MIDI controllers and started pushing keys. First two chords I produced shaped the rest of the music. It was the main theme recurring in a few pieces.
1:15AM (we had time until 4:00AM) I've finished the music. I reedited two pieces and scripted it all together. I needed to refactor sound channels because I wanted the noise and static to be in the background even if another music was playing in that time.
First user tests were being done on my friend who finished the game before 2:00AM and had time to help others. He catched some spelling errors which were quickly corrected. Then I started looking up how to package Ren'Py games. I grabbed some documentation and created final packages, which I uploaded to Dropbox shortly after.
At 3:00AM I've written the Ludum Dare entry and the simple landing page on my website describing the game. I've uploaded it and shared on social media at 3:20AM. And then it was a time for celebration, party, hot chicks and getting some sleep.