I've been working roughly full-time on Kinematic for almost 5 months now. It gets a little messy how it's counted in the early months, as parts of the engine are from previous projects. And I was still at my previous company until the end of 2019, so the amount of time I was spending was very limited. But in 2020, it has been my job that I work on 5-6 days a week, 4-12 hours a day.
For this week's blog post, I decided to go into my History folder and look back over the progress in these recent months. Mostly through gifs and images.
Thankfully my oldest gif is the only one with a boring white male protagonist. At this point, I stood up some quick Axis-Aligned Bounding Box collision that has remained largely untouched since the first implementation.
Here's a demo of how I handle jumping button presses. Based on how long you hold down the button, you get different jump heights. But I solve for your position and velocity each frame as if that had been your intended height all along. For easy tuning, I set the heights in terms of how many tiles high your feet go, rather than upward velocity.
Before I had nice swinging, basic grapple point images, or a decent environment, I stood up the basics of grapple point attachment. Kinematic heavily features grapple points, because the physics puzzle gameplay of setting up your factory needs points in space for you to be able to change trajectories. Thus they can be used both for moving your character through the world, and also for chaining together steps in your manufacturing.
Getting Jem in Game
Here's my first attempt at a run animation for Jem. Everything is super wrong, but that's ok. It helped me build the Blender export pipeline, and got something in game.
Here is the first set of animations that made it from Blender into the engine. A run cycle and an idle.
Here I got bone positions exported from Blender so I could attach this tether to Jem's hands. Also, I made it so the animation system can set the current frame of the animation based on arbitrary parameters, instead of just time.
As discussed in my previous blog post, I soon stood up normal maps and simple cel shading for the protagonist.
The first Kinematic art I was actually proud of. Once I had this portrait, Jem started to shift from being a weird physics object that has a name into a real character. I could start to hear her voice, identify her personality, and understand how she feels about the situation she's in.
Rumbling of Machinery
Here's some proof-of-concept work on machines being able to shoot resources around the world. I wasn't trying to make something fun yet. Just prove out the tools for manipulating the kinematic behavior of simple physics objects.
More recently the "arc miner" that mines pink goo out of the ground got an art pass. I'm really happy with the alien tentacle feel, and the smooth shading. Also, I'm firmly committed to blobs of pink goo as a basic resource, because it makes me happy.
Building a World
I called this first tileset "Blue Civ". I'm aiming for a mildly aquatic/tentacley aesthetic. It's been fun to learn about pixel art and practice using a tablet for drawing.
I'm using the Tiled map editor, which is a fantastic bit of software. My first playtestable build consisted of 12 rooms in a little puzzle dungeon that I called Production Playground. This was the first outline of the space, before I filled in any content. Players generally took 45-90 minutes to play through it, and I learned a TON from observing them.
My second tileset is for the Polluted Lake area of the game. Adding foreground and background tiles made a huge different for adding visual interest.
Recently I converted my tilesets to a material-plus-heightmap authoring paradigm, instead of hand shading. This saves me a lot of time on authoring, and enables me to have dynamic lighting for everything in the game. I have an Aseprite export plugin that converts into normal maps for the game to use.
Earlier this week I created a basic cutscene scripting solution. When a cutscene is running, everything else in the game is paused except for the entities engaged in the cutscene. The first one I created is for using a magnet powerup to tear down metal barriers. There's plenty of animation/FX polish to work on. But now I have shortcuts and 1 way passages that can be used in my level design.
Then I added a shield powerup. One of my favorite types of work is shader work. I already had a texture coordinate backsolver that lets you draw a large rectangle with smaller sub-rectangles each possessing their own UV space. So I could just expand the square by a couple pixels and count how close the nearest opaque pixel was in order to fake a nice fresnel effect.
Finally, I stood up some basic water rendering and physics, and added swimming animations for Jem to stay afloat.
It's fun to look back at old screenshots to remember all the progress that's been made. And it's also helpful to maintain motivation. Making a game, particularly in a genre like metroidvania, is a long process. And it often doesn't feel like the end will ever come. But comparing what the game looked like at the beginning of the year with how it is now gives me hope.