How to made a game solo in two days
- December 16, 2014
- 5 Comments
I made a game from scratch for Ludum Dare in 2 days, 6-7 december. And now I want to share the experience. But before you read further I strongly recommend you to play the game. To gain a player’s experience before you spoil it all by the developer’s experience. And turn your audio on.
What is Ludum Dare?
Ludum Dare is an international contest, in which participants make games based on a specific theme and limited by time. There are two kinds of participation: Jam and Compo. In Jam you can participate with a team and use any assets that you have or can find in public access. Time limit for Jam is 72 hours. The second category, Compo, requires to make a game from scratch and do everything solo. You can use any base-code you may have, but you are required to share all your source code at the end. The time limit in Compo is 48 hours. More details about rules can be found here.
* This contest began in 2002 and could now be the most popular one among game jams. As of the latest LD 2538 games were submitted.
* Markus “Notch” Persson, creator of “Minecraft”, wrote in his letter when he was leaving his company: “I will leave Mojang and go back to doing Ludum Dares.”
* Lucas Pope, creator of “Papers, Please”, also participated in Ludum Dares a few times.
* 16 games created during Ludum Dares can be found in Steam.
* Some of my Russian friends from the indie scene participate in LD too. For example: iWait4, DiscoFish, _Dyn.
When I heard in mid-November that the next Ludum Dare will be held on the weekend of 6-7 December, I couldn’t resist participating. This is a chance to enter the international indie community and show my work to the masters of the craft.
I always believed that thorough preparation is half the victory. So I decided in advance to answer the issues that will arise regardless of the theme.
The first question, of course, was the choice of a game engine. It was a no brainer for me. Particularly for this competition, it is important to have a web version of the game to maximize converting visitors into players. My choice was Unity, as I am already quite familiar with this engine by working on “Message Quest”. It was possible to choose a Flash. Its features are enough to make a competitive game. Unlike GameMaker, which doesn’t have a web version and 3D graphics. Decent-looking games on this engine can be counted with the fingers of one hand. A year ago I made an Android game on this engine.
It is also worth mentioning Unreal Engine 4, which began to give out codes for a 90-day trial the day before the competition. I think that if I had the experience of creating games with it and the ability to quickly model with bumpmap-specular-etc, it would be possible to stand out with the visuals. But all UE4-based submissions had a client version, take up to 800MB, terrible graphics and no gameplay. I think Epic needs to provide participants with tutorials and examples before giving out keys.
Art and sound
Further, I saw two large risks. The game should have decent graphics, but I don’t know how to draw. I can make photos, but this is a bad idea for web games – pictures weigh a lot, so the game will load longer than some players have patience.
The game also has to have music. Although browser users usually prefer silence, most games on LD have music and its absence in a game will stand out as a drawback.
In art, I see simple stylization as the only solution. Like pixel art, but not pixel art (I’m fed up with it). Maybe if it was done in Flash, I would have found something in vector graphics, but Unity has pushed me to study low-poly art, that interested me a long time ago. Also, files with low-poly models have a samall size, which is good for the web version.
It turned out that the first steps are not as difficult as I feared. At first, I tried to create art on those primitives that were in Unity. I did a rough grid of terrain, placed and stretched cubes and spheres. The result was unsatisfactory. Anyway, the terrain hid the edges between polygons and did soft transitions between materials.
Then, after talking with Stanislav Gailunas, developer of Molecats, I decided to learn Blender. The editor is fast, free and it has video tutorials for low poly art. Repeating all the steps from the lesson is all I need to learn the new tools and be able to do something. So, after an hour of training, I was able to replace the terrain and trees from primitives with my own low-poly. It became much closer to what I want.
The next step was the issue of creating music. Here I have no experience, no education. So I asked the community. Eugene Minakov replied to me, suggesting the program Musical Palette to create midi music throughout music theory and LMMS to change instruments. Both programs are freely available.
Musical Palette has a built-in tutorial and help system. A few minutes after starting the program I produced something that resembled music. With LMMS it was even easier, as I only had to replace the instruments and save to a standard audio format. Unity does not recognize midi and rightly so – standard midi instruments are outdated.
There are some issues with LMMS. First I need to set the instrument library in SoundFont format. Internet is great, you can always find something for free. Another problem for me was the freezing during exporting. It’s rare bug. Fortunately, I was able to find a workaround by using export via command line: lmms.exe <project name> -o <name of export file> -f <format, wav for example>.
After that, the result can be loaded into Audacity (also free) and saved again with the desired format and quality settings.
Technical questions solved. It’s time to review the winners of previous competitions to understand the required level of quality. For myself, I have formulated it as a set of requirements:
* Interpretation of the theme must be original, but easy to understand.
* The game should be holistic. Graphics, gameplay, audio – nothing should stand out as a weakness.
* It should be a complete experience. The player must be able to finish the game in 5-15 minutes.
* Core gameplay should be fun in itself, without the help of meta-gameplay. You can read about this in “The Art of Game Design” in a chapter about the difference between games and toys.
Later, when I was examining the works of other participants, I noted that many of them were ruined by the absence of one or more of these points. One game is beautiful, but boring to play. Anther game has an interesting interpretation of a theme, but the game is unfinished. Yet another one was fun to play, but its graphics are bad and have no connection with the theme.
The competition begins with an announcement of the theme, which is scheduled for Friday evening ( Saturday, at 6 AM of my local time). No reason to get up so early in the morning. Doesn’t matter that others will start their work before I do, they will have to go to bed earlier. And being sleepy whilst participating in a creative contest is stupid. So I slept till 9 in the morning, looked up the theme (Entire Game on One Screen) and continued to lie about, sleepily considering the theme.
Needless to say, I immediately rejected the idea that the action of the game will take place on a single screen. It’s too obvious. Besides, this is a theme that must be interpreted, not a rule that must be obeyed. I began to sort through the ideas for games, which have been growing in my head long time, for compliance with the theme.
The first match was the idea to use the new feature UI in Unity 4.6, which allows to have the interface screen hanging in the 3D world, not attached to the camera. Another issue, also born from this engine update is the numerous buttons and progress bars. We all know how nice it is to look at the filling bar. We have a subconscious desire to complete unfinished.
The second idea was the mandatory use of low-poly art. I did not study it in vain.
The third idea was to use a speech synthesizer. I’ve thought about the fact that indie developers don’t usually do the voiceover, because it’s expensive and takes a lot of effort. But to use a speech synthesizer for a robot character is more than appropriate.
All this combined gave me a simple story in the spirit of Portal. There is a boring 2D world of buttons and bars, where the player must perform a pointless action because the computer asks him about it. And an opportunity for the player to escape into a beautiful 3D world. But his happiness will last only until he finds a mobile phone. Some sort of moral in that whereas you can still get away from the influence of the computer screen just by moving away, there’s no escaping the influence of the phone.
As soon as this picture formed in my head, I got to work. The goal of the first day was to do the full gameplay, which included all the necessary functionality and placeholders for key assets. At the end of the day, the version must be in the “ship with shame” condition (read on to see what that means). The second day was to devote to the beauty and polishing. Replace all the placeholders, flesh out the world, write the music.
The first thing I created in Unity was a scene consisting of a flat area, a first person controller and flying in a space canvas with a button and a green progress bar (slider with a disabled handle). When the button is pressed, the progress bar fills up and then empties back. At any time the button can be pressed to stop the reduction and fill the bar again.
Then I made the second bar, a red one, which is filled when the green one is emptied. The first bar contains 100 conventional units, the second – 200. This means the player needs to completely fill and pull the green bar twice to fill the red one.
After that I created the upgrade screen. Three buttons on a background. The background was needed to move all three buttons in a single action. For upgrades, I decided that the first two would accelerate the process of pumping, and the third would be of a decorative nature. That is, whether the player wants to achieve the meaningless result more quickly or will prefer to make the workplace more comfortable. The first two variants of upgrades are repeated in a circle, and the last one changes, hinting at the presence of a unique progression. So the player must sooner or later take the last version of the third upgrade. Here, the MOST IMPORTANT POINT is that the player must reach this himself, without prompts and forcing.
When the player takes the last special upgrade, it enables checking for pressing the S button (step back in WASD control). Once pressed, turn on the first person controller, put a dot in the center of the screen instead of the mouse cursor, and slightly change the FOV.
Now the task is to make the location where the player can walk. I used my classical planning approach. First, I knew that I have a starting point – the place where the computer is located. The objective is to determine what surrounds it. I decided to use a generic nature setting to have an immediate recognition effect .
The objective of the layout is to determine which entities are present and how they are are located relative to each other. Then I made the specification on the large-scale layout.
It’s a layout where I can see the location of the mountains. I need to know it to make the height map.
Set color to the main entities: where the player can go, where the road is, where the player can’t go, where the water is (also impossible to walk).
Add some spruces in random places to allow for the assessment of scale. The brain knows the average size of the spruces, so looking at them allows to subconsciously calculate the distance to them.
From this point I can start playtesting. The objective of the first playtest is to evaluate the magnitude and general shape of terrain from the eyes of the player.
I was initially worried that the location is small and needs to be enlarged, the playtest dispelled my fears. The scale turned out to be just right. Enough to wander, but not too big to not be able to make in due date.
At this point I place the terrain model on the scene and do the mobile phone issue. Kind of a target that the player will find while he will ramble around the location. The phone is made the same way as the computer: a simple 3D model and a UI canvas on the screen.
With the canvas on a small phone model I ran into a problem of my personal inability to work with the new UI. I changed the size of the canvas by changing the height and width. The resulting font size of 1 was too big to render in 2x3px screen. After I found that I need to use the scale to change the size and don’t touch the width-height needlessly.
Another challenge with the phone was to make sure that it was deployed facing the player, so that text would be readable. To do this, I added an invisible child object to the player’s camera object, whose coordinates were used for the purpose, which should be reached by the phone object during the animation of activation. For the smooth change of coordinates I used Vector3.Lerp. As a result, the phone moves to the center of the game screen regardless of where the player stands and where he is looking.
It took many attempts to configure the phone. So that I didn’t have to play through the entire starting sequence of filling the bars each time, I made a cheat button, which enables walking mode. And placed the phone next to the starting position.
The day came to an end. Thanks to my timely efforts I had a ready version, which was allowed to play filling the bar, walk away from the computer, wander through a simple location, find the phone and thereby to complete the game.
It’s time to give the computer a voice. After looking over a few synths, I chose one. I picked the voice of Lee as not too friendly. The result of the synthesis was a bit too high-quality, so I added effect Duration=Long to give it an artificial note.
After adding the first phrases of the computer, the game has radically changed. First, the game got a voice. Second, the voice revealed the character. Third, there was feedback to the player’s actions. Now, filling the bars was not just a mechanical action. It became the way of interacting with the NPC.
In the beginning, the computer explains the player the rules of the game. Kind of a tutorial, familiar to us from other games. And all these rules appear on the screen, as a work instruction.
Then the computer learned to comment on the player’s choice of an upgrade. If the player chooses the accelerating upgrades, the computer praises him. If player chooses the special upgrades, the computer disapproves the choice. Each time, the disapproval is more stern. But it doesn’t respond on the last upgrade – as if it doesn’t notice. But the player can see these rules and see what he needs to do to change the situation – break them.
The computer needs a phrase to demand the player to return when he moves away, and phrases to speak if the player decides to return and continue pressing the button. The player will hear that the computer gets pleasure every time the player clicks on the button. To explain the computer’s motivation, so to speak.
After recording the voice, I began to create an environment – add details to the landscape and create new objects. I added two type of trees to the existing spruce, two type of shrubs and three types of stones. Spruces were placed on one side of the map in groups of 2-4 units. One tree in the group is significantly larger than the rest. Some spruces I extend by height and then scale down by all sides,so that it would appear to be a young one. All trees are slightly rotated in different directions to break visual patterns.
The map gains detail, but still gives a sense of emptiness. So I decided to add big and unique objects. First the lighthouse and then the tower. Initially, I wanted the climbable tower, but failed with the collision. When the object consists of a single mesh, then everything is OK. But when the object is a compound object, the collision breaks – the size and angle of rotation is wrong. I saved the Blender files directly to the assets folder. Unity imports them automatically. I didn’t have time to study the problem, therefore, I left the tower as it is, without any way to climb onto it. Attempts to add traces of destruction to the tower resulted in strange blots, which I decided to turn into a face with eyes and mouth. If the player will see a face in this tower, he will be able to invent a story about it.
The phone, which the player can find, I put on a specially modeled stump. But I didn’t want the road to lead to it. Who makes a road to a stump? So I settled it down casually near the road that led into the clearing. Due to a lack of imagination I placed a standard bonfire onto the clearing. The resulting image is then used as the title picture of the game. This is to show that the game has beauty, but also a hint that this vista can only be seen by those who passed mobile phone.
Unfortunately, I never figured out what to do with the lighthouse, tower and bonfire. The objects are present. The player can approach to them. But it is not clear what to do with them. The most sensible idea was to include a female voice, which told the story about this place. But I could not come up with a coherent story at the end of the second day. So, if I have no idea and no time, I leave the objects as they are to let players invent their own interpretation.
Also, now I understand that the solution to do the twist with the transition from the dull 2D to colorful 3D is a really good move. But the game will start with dull 2D and can scare many unprepared players. Just the ease of gameplay and the voice acting can hook the player. Also the presence of the twist prevents the use low poly arts to promote the game, because they are spoilers.
I can say nothing interesting about making the music. Just move the points in Musical Palette, and then iterate through the instruments to replace in LMMS. And set it up in Unity to change the musical theme when the player moves away from computer.
Also, the phone gets a ringtone to attract attention. A ringing phone is much more likely to provoke to action than just a lying brick.
So, the final tune of the camera position, a bit of magic with the values of upgrade bonuses, compile version and the final tests. All OK. Upload the version (only 2mb, thanks to Unity) and the source to my server. Fill the entry form. Finally submit. The game is made and delivered. Now to go watch the other games, rate them, and wait 20 days until the voting is over.