Making Stuff


I love making things. I've spent the last six months really locked in, building a following on my Lego instagram account. But that wasn't going to last forever. A couple of months ago, I decided to get back into game development. I'm going to decrease my post frequency on the Lego front and start work on some new video games.


Game Development


Game development is such an involved process. My last game, Prismo, took two years to create from start-to-finish. (though some of that is because I took a year-long break in the middle) Even so, I spent hundreds of hours working on that game, and it takes about 15 minutes to beat.


I made Prismo based on my childhood love for flash games. While I wasn't given tons of computer time, I loved to play free platformers on the family computer with my brothers or friends. Even back then, I dreamed of some day creating my own game. Realizing this childhood dream was a big reason I decided to create Prismo.


I also loved playing more complex video games either on our secondhand PlayStation 2 or Dylan's (my best friend's) GameCube. I wanted to someday make a 3-D video game, but even as a kid I knew that sounded really complicated. In spite of that, I finally decided to start that uphill battle and try my hand at 3-D game development.


Game Ideas


You can't just start making a game if you don't have an idea of what it is going to be about. One idea I found very appealing was to make a game that captures the essence of my anxiety dreams. This game is less of something you 'play' for fun, and more of an experience. You could think about it as a short story that you play instead of reading, or as an art exhibit in a virtual world.


I have anxiety or stress dreams fairly often, and they include many of the same themes and locations. I'm often inside of impossibly large and eerily empty structures -- a school, mall, or airport that's much larger than any of those buildings are in real life. There's something oddly unfamiliar about the setting in spite of the fact they are happy, safe places. Many of my other dreams involve being out at night, driving-- walking through an unfamiliar parking garage, etc. I want to distil and communicate that feeling.


So how can I capture that in a game? The first decision I made was regarding the aesthetic. This game is made in an early-2000's style in an effort to ground the game in the time period of my childhood. The graphics are downscaled to what computers back then could handle, and the aspect ratio is locked in a 4:3 instead of a modern 16:9. I found a public domain font that I like with very strong 2000's game vibes. (Big thanks to Ray Larabie, my favorite font artist.)


A psx style city at night. An onscreen prompt tells you you can turn off a radio
Screenshot of the game.

The game is in first-person. You are supposed to be experiencing the liminal spaces, the unfamiliarity, etc. Sound design is very important. You can hear every footstep you take, the hum of streetlights, etc. All sound in the game is diegetic, meaning that all the sounds that you hear are sounds your character can hear. No background music, no helpful audio prompts. You are meant to be immersed in the world.


Gameplay is simple and is designed not to distract from the setting and story. The player can move and look around with standard first-person controls. They can jump, run, and crouch to sneak, and there is one 'interact' button for everything else. This button is used to open doors, pick things up, turn switches, talk to NPCs, etc.



Making Games is so Much Work


If there's one lesson I've learned when it comes to game development, it's that everything takes forever. Players expect everything to go smoothly, but you don't get credit for all of the work you do to make the game experience good.

For example, in a game, you are expected to have menus that pop up and let you pause, restart the level, change the volume, etc. If you work for a weekend and implement a pause menu with volume controls, the player doesn't think of that as a 'cool' game feature, but if you don't have it, people complain.


As another example, let's take the crouch mechanic from the game I'm working on. It seems pretty simple to crouch, but it's not at all. First, you need to move the camera downwards so the player 'feels' shorter. But the move needs to be smooth, the camera can't just pop to the other height. Then, you need to slow the walk speed while crouched. Because of that, you need to change how often the footsteps play while crouching. But that causes an issue where crouching resets the footstep count when you start crouching, so that's a bunch of effort. Most games help the player know whether they are crouched by enabling a vignette effect on the screen. When I implemented that, it was a little jarring having it pop on and off, so I ended up fading it in and out, tied to the camera's relative position.


Ending the crouch is another beast. If the player is crouched and hits the crouch button, they should stand back up. If the player jumps, they should also uncrouch. Same with sprinting. All of these conditions need to be specified in code.

But that's only gotten us the 'feel' of a crouch. The crouching has to physically affect the player's size so they can climb under low objects. But, you can't let the player uncrouch under objects, or else they get stuck in the object.


I spent around 7 hours one Saturday figuring out all of this, and the only end result is that the player can crouch and uncrouch smoothly without breaking the game.


The crouch in all its glory.

Creating the World


One thing I am very grateful for is that many artists freely license their work for others to use in games and projects. There are several 3-D creators who put their art online for people to use. Because video games are usually created by teams of several people, I can sort of 'add' these people to my 'team' to help me create assets.

That doesn't mean I don't have to do any modeling, however. Many of the assets, including characters, are designed, painted, and/or modified by me.

Blender texture painting interface with a low-poly woman.
Modeling a retro graphics woman for my game

I don't know how long this game will take, but I've been building out a story and gameplay, and I'm really excited to see it take form. Here's a little slice of gameplay that probably won't make it into the final game, but is a good proof of concept.



Getting Distracted


Of course, I couldn't just work on one game. As I built the character controller for my first-person game, I focused really hard on movement. One common problem with smaller games is that the player movement often feels bad. The jumps are floaty, the player has too much momentum or is otherwise hard to control. I spent roughly 1/3 of the Prismo development cycle working on movement. In fact, when I published Prismo on itch.io (a site for sharing indie games), the only comment I got was about how good the movement was.


Itch.io comment, calling my game smooth

So there I was, working on a first-person controller that felt good, and I decided I wanted to also start working on a fast-paced game to take advantage of my character controller. This game, I decided, would be a more traditional video game, with combat and platforming.


I wanted this game to be fast-paced, and importantly to feel fast. I started with my controller from the previous game, but ratcheted up the speed. Then I got rid of the crouching. I know programming the crouch was a lot of work, but crouching slows down gameplay, and I don't want that. I gave the player the ability to dash in any direction, and to dash once in the air. I also added some visual effects to make the sprinting and dashing feel faster. When the player dashes or runs, the FOV changes to sell speed.


I also created some environmental things like climbable ladders, doors you can kick in, and pads that launch you in the air. I haven't done any environmental art, just implemented mechanics in a prototype environment.


Like I mentioned, this game has combat, so I implemented a couple of guns. Just like I focused hard on the movement, I focused a lot on making the shooting feel impactful. The guns have recoil. I sculpted some custom muzzle flashes, and when you fire, the muzzle flash illuminates the surrounding area. The bullets look good, and when they hit the environment, they explode in a shower of particles. I implemented grenades that you can throw that bounce off of the environment and explode.


Baic movement and shooting in a prototype environment.

But guns are only cool if you have some enemies, so I implemented enemies that interact realistically with the environment when they die. The enemy meshes were designed by another artist, but edited by me. I also created custom shaders to make them glow and change the refraction on them.


Shooting with enemies.

Right now, I'm working on animating the enemies and making them actually attack. 3-D animation is a beast to work with, but I'm making progress.


Basic enemy with movement and chase.

This high-energy game presents different challenges than the slower, environment-focused liminal game. It is also a ton of work. I spent several hours getting the recoil system right for the machine gun. When you fire an automatic weapon, you want it to ride up, so I implemented that. But then, it was weird that the gun didn't return to its initial position, so I had the gun keep track of how far it rode up and go back down when the player stopped firing. When I tried that, I ran into a new issue, which was that the player's reaction is to fight the recoil. That means that the player compensates for the recoil and then at the end, the gun 'returns to its intial position', but because the player compensated, then the gun swings downwards. To fix that, I had the gun also keep track of how much the player fought the recoil and subtract that from the recoil ammount. This was another Saturday where I worked pretty much all day and only got one thing done.


Did you know that in order to prevent the player's weapon from 'clipping' through the environment while pressed up against the wall, the player in this game has two different cameras, one that renders the world and one that renders the weapon. The weapon is rendered on an overlay. This means that whenever the player zooms in/out (to aim, for example) the two cameras have to zoom in sync, but at different scales. Implementing all of this was (you guessed it) another hassle.


Conclusion


In spite of all the hard work, It's been really fun to get back into the gamedev saddle. I notice myself getting better at game design as I work, and it's so fulfilling to see what I imagine come to life.