My First Postmortem
I made a thing!
This game is the first game I've ever made by myself. While I've worked on games in the past, it's always been with teammates. For the first time, I did all of the heavy lifting myself. And I loved it!
Making the Game
When I first heard of the theme, I imagined a wide, harsh, unforgiving desert, with lonely characters wandering about, pinging the skies to find find and meet each other. Then, I scrapped most of that, because it was totally unreasonable for my level of skill in 48 hours. So I thought, what if there was only one character (who was a sphere), the other players were hidden collectibles, and the landscape was 2D, platformer-style? Much easier. I got to work right away.
Right out of the gate, I stole the player controls from the Unity3D Roll A Ball Unity tutorial. It's not the best movement system, but it pushed the player around, which was the most important thing. Unfortunately, the venue where the Corvallis Game Dev met had terrible wi-fi, so I had to wait on complex items like landscape generation until I could watch tutorials at home. Instead, I found a pixel shader and gave the character and ground white materials. Within a few hours, I had more game than I had ever built myself. I clocked out early and went to bed at 11pm.
The next morning, I met my parents for breakfast, then sprawled out in their basement to crunch on DUNE. I procrastinated on the terrain generation, and got to work on particle systems instead. Figuring out how to customize particles was a struggle initially, but I kinda took the easy way out: I wanted the particles for the digging mechanic to emit a sprite I had created, but instead of doing that, I made a white material, and just made the particle system emit white spherical meshes. Close enough.
For the calling mechanic, I had this vision of sending out communication waves, like a little wi-fi icon. After my first experience with the digging particles, I abandoned that hope. Fiddling around with the settings, I just happened to stumble upon the settings for the current implementation. I thought it looked cool -- violently projecting data into the sky -- so I just kept it.
After I finished the particles, I gave the player character a trail, just for fun. I thought it would add a little bit of persistent color to an otherwise monochrome game. Fiddling with the trail system settings was way easier than handling the particles, so that was implemented in a flash. I couldn't hold the beast off much longer.
The beast: terrain generation. It wasn't that difficult, actually, but I did have to design the system myself, because I didn't like any of the tutorials I found. Unfortunately, it meant that I wouldn't get smooth curves, but that was a small price to pay. Here's how it works:
- Spawn an empty GameObject at negative x
- Spawn a capsule primitive, and make it a child of the GameObject
- Move the capsule's transform position so that the origin of its parent is on the left end of the capsule
- Spawn another empty GameObject, and make it a child of the capsule
- Move the second empty GameObject so that its origin is on the right end of the capsule
- Save the global transform position of the second GameObject
- Repeat Step 1, but at the saved transform position
- Repeat Steps 2-5
- Give the parent GameObject a random rotation between 45 and -45 degrees
- Repeat Step 6
- Repeat steps 7-10 until we reach positive x
Kinda difficult to understand in a numbered list, but if you look at the game, I think you'll understand what I'm trying to say. After I got this implemented, I had what looked like a game, minus any objectives. I packed up my laptop, and went to meet my girlfriend for dinner.
The next step was to create the sounds, which were also an important part of the game. The idea was that the player would broadcast a call, and hidden game objects would respond with a unique tone, at a volume determined by their distance from the player. For the sounds, I wanted a chiptune-inspired sound to match the visual aesthetic, similar to the chirps and beeps in English Country Tune. So, I cracked open the one sound application I know and love: Sunvox. Within an hour, I had constructed all of the sound effects I needed, with the exception of a pickup noise. I forgot that one at the time, because, well, sleep is nice. I said good night to my house's cat Klaus and passed out at 11pm again.
Dawn of the final day: I rolled my butt out of bed, showered, and headed downtown to my favorite coffee shop to produce the rest of DUNE. The first order of business was to give all of the implemented actions a complementary sound. I added a little bit of fading title text with the help of a couple of coroutines shanghaied from the Unity forums, and gave it a noise for when it fades out. It was a little bit of a cop-out for a title theme, but it was way faster to implement, and contributed better to the atmosphere. Just be wary of your computer's volume when you start the game up. Anyways, I gave the digging action a noise, the broadcasting action a noise, and a noise for when your character is moving. Everything was going swimmingly.
The next challenge would come with spawning collectibles throughout the level. I figured the best way to do this was just to modify the terrain generation controller. Here's how I have it implemented in the released version:
- After completing the previous creation steps, there's a 2.5% chance to do the following:
- Add a particle system to the capsule
- Add an AudioSource to the capsule
- Load the right clip resource
- Set the AudioSource to 3D audio
- Set the rolloff function to linear, so the volume scales equally with distance from the player
- Set the maximum distance for volume to 70 units
- Attach the CollectibleController
The CollectibleController basically just keeps track of a 'collected' boolean, and exposes a method for playing the particle system and incrementing an integer contained in the PlayerController, if I recall correctly. I don't completely remember, I was in crunch time. My written code quality had been reduced significantly by this point.
After this point, I really had a game! You could roll around a generated landscape, broadcast, and then locate the collectibles that responded! I travelled to the closing venue for GGJ Corvallis, and had a few people try the game. Reception was good, except for the fact that nobody knew what was happening when they picked up a collectible. The furious particle system didn't tell them they had collected something, and the incrementing number in the upper left failed to catch their eye. I needed another cue.
With an hour left, I pulled open Sunvox, quickly cranked out another sound effect, and threw it into the game to signify when you dig up an object. I built the game, uploaded it, and that was a wrap. The end of the jam wasn't too traumatic, thankfully.
I'm not blind to some of my game's issues. It's not really that fun or engaging: You sit down, you play for a little while, then you say "Well, that's neat," and you move on with your life. I get it, which is why there's no win state. Let alone an end state. Once you collect all 30-60 collectibles, there's nothing more to do. I'm kinda banking on the player getting bored and not playing the game to completion, because I didn't design for that.
The movement controls are kinda janky. Since I didn't modify the Roll A Ball controller at all, you can still propel the character even while they're in the air. Originally, I was hoping that there would be more of a feeling of skiing, Tribes-style, but I didn't have the time to tune the movement system.
Finally, the terrain system has a few flaws. Paired with the movement system, going uphill is pretty painful. When it comes to the actual generation system, I'm using the same number for the starting x location and number of platforms to spawn, which doesn't work very well. There will always be more platforms to the right of the player spawn location, because each segment is between longer than 1 coordinate unit. Once again, I'm hoping the player gets bored and never finds out. I also steamrolled over this issue by using 800 for x, so we start at -800 and generate 1600 platform segments.
But, despite these things, I still love the result. I'm satisfied with the presentation I managed to put together. Even though the mechanics are a little lackluster, I'm in love with the atmosphere: The pixelated art style, the black-and-white combo with a splash of turquoise, and the unapologetically digital sound effects really bring the presentation together. It might not be a terribly fun game, but you feel lonely and isolated, which was exactly the feeling I was going for.
Overall, 10/10 development experience. I wish I had a little bit more time during the jam to add some interaction cues and maybe puzzling, but regardless, Global Game Jam 2018 was a great experience. Thanks for giving DUNE a play, and please stay tuned for more of my work!
Leave a comment
Log in with itch.io to leave a comment.