Switch Hitter Development Log

Behold as I pretend that I am a game developer.

Sprint #15: "I'll have a jam sandwich."

November 5th, 2018

Going in, I knew Sprint #15 was going to be a creative one. I decided to spend the two weeks focusing, once again, on assets: artwork, levels, and music. If that weren't enough to take me out of my comfort zone, looming over my head were two game jams I'd signed up for, each of which would task me with creating a brand new game in accordance with a theme. It was a good reminder that there's no rest for the weary.

Background art was always off in the distance

In the first few days of the sprint, I was able to create a horizontally tileable background image for use in Ensue's levels. There was a false start where I sort of forgot that backgrounds tend to, in fact, be tileable but, once I remembered that, this is what I came up with.

During its creation, it became an interesting challenge to choose colors and design it so that it truly exists behind the foreground. One criticism I have of Celeste is that I surprisingly often get confused as to what's in the foreground and what's in the background (i.e. what I can interact with and what I can't). Generally, I think this background image is representative of how I'll solve that problem. Soft colors and little, if any, outlining in the background; darker colors and more deliberate outlining in the foreground. If this sounds familiar to you, well, you may be on to something.

It's not a majestic piece of art or anything but, for someone who really doesn't know what they're doing when it comes to this type of thing, I like the way it came out and I look forward to making more of them in the future. What's more, just about anything provides a huge jolt of flavor to the basic look of Ensue. Here are some before and after screenshots.

In no uncertain terms, it's just a major boost in the "wow, this is actually starting to feel like a real video game" department. I also happen to think I nailed the outfield fence colors and I'm even really happy with the dithering I used for the warning track and grass.

Death to brown-ish boxes

Straddling the first game jam was the addition of two sorely needed animations: a swiping glove and a swinging bat. To be honest with you, I'm so embarrassed at how long it's taken me to produce this artwork--given the fact that I've produced any at all--I'm not even going to bother reminding you what things looked like before this. This is what they look like now.

The bat took an incredible amount of tweaking to get right (to the extent that I think it's "right") and I was actively using the Slugger's sprite as a reference image. The glove, thankfully, went a bit faster. Overall, I'm happy with the animations themselves but I'd like to tweak the hero's movement during the swipe/swing actions to sort of reinforce what's going on. That's for a medium-term sprint, though, I think.

As good as feedback gets

At the end of the first sprint week, I posted on the r/gamedev Feedback Friday thread, something I hadn't done in months. Pretty quickly, a player told me the keyboard controls weren't working. In my performance/optimization work, I'd actually introduced a bug that totally broke everything besides left and right movement. So I fixed that. A different player, however, recorded an amazing video of his completely blind playthrough experience. It's hard to overstate how incredibly helpful it is to actually see somebody playing and hear their thought processes. The notes I jotted down are too numerous to even consider including here but let's just say that several things are getting reprioritized up near the top of my list. I'll keep this with me: if I really want to offer some grade-A feedback to a game developer, this is the way to do it. If u/-PHI- happens to be reading this, again, thank you so much!

Jamming in a game jam

At some point during the first week, I decided to sign up for the Pizza Jam to act as sort of a warm-up to the Seattle Indies Game Jam that I'd be participating in the following week. I found the Pizza Jam by just going to itch.io's excellent game jam calendar and looking for one that had a decent number of people and seemed to take itself just the right amount of seriously. The Pizza Jam had about 100 entrants and offered a large pizza as a prize to be awarded to the top two vote-getters.

The jam theme was announced on Friday evening: "one of the seven deadly sins". Lately, I've been interested in making a puzzle game, so I did a little brainstorming to see if I could impose a vice upon that basic format. What I came up with was Getting to Retire. In this fast-paced puzzler, I attempt to establish the concept of greed as a bad thing, something that can very quickly lead to your demise. Going into specifics about the game deserves a post all its own, so I'll reserve those thoughts for later this week. Just know that I came away from the Pizza Jam very satisfied with my ability to produce a functioning video game in short order.

Trying to find structure

One of the recurring bloopers in the development of Ensue has been my complete inability--or unwillingness--to decide on how I want the game to be structured. Is it just a left-to-right platformer in the Mario style? Is it more of a one-screen-at-a-time Celeste-style affair? Long ago, I made levels to indulge the latter; then, I decided that I wanted to explore the former; now, I've basically swung the other way. I've arrived at wanting every level to have four distinct segments that are metaphorically represented as having to touch first base, second base, third base, and then home plate. For the most part, I think these segments are going to be very short and, more importantly, very numerous.

In order to link them up with each other, they need to exist. I've decided to allow myself, for the foreseeable future, to go on a "level design blitz" where I just focus on churning out levels that I can assemble into something more cohesive later.

To help me do this, I wrote a quick program that generates a set of constraints that I have to design a level around. The dimensions it factors in are a set of fundamental mechanics native to Ensue (e.g. "triple jump", "bat/swing", "enemy"), potentially combining up to three of them, and an overall difficulty (2-8, as I wrote about after Sprint #12). Everything's weighted equally when it's generated so it's a good challenge to try to think of ways to design levels around mechanics I maybe hadn't yet considered combining.

For now, I'm leaving these levels hidden from the prototype but for the release at the end of this sprint, I bet some of them will see the light of day.

Smoothing out the rough edges

I've somewhat specifically told myself that I'm not to use on-the-clock time for messing around with the camera, which works perfectly well. That, of course, doesn't prevent me from learning about how video game cameras work. During this sprint, I took half an hour to watch this absolutely incredible GDC talk by Squirrel Eiserloh that goes into detail about the math surrounding the way that cameras move in modern games. I've been loosely interested in smoothing out Ensue's camera for a while but I thought it was going to be a much bigger time investment than literally just multiplying a number by something. Anyway, I made that nearly trivial change while watching the talk and I'm very pleased with the results. So, for real, no more camera work.

The regenerative properties of strikes

At some point this week, I also decided to experiment with making collectible strikes automatically regenerate. I don't really know how to describe why I feel like this works but, when I tried it, I did feel like it worked. It's interesting how it influences level design, though, now that strikes can almost act as doors that lock behind you. In short, doing this sort of thing introduces more strikes into the system, which will eventually have the effect of making the game harder. We'll see how long this era lasts.

Bonus jam

Finally, I got to the Seattle Indies Game Jam. I was pretty intimidated going in, to tell you the truth. I very quickly got the sense that Unity was an almost standard language that you needed to know how to speak at these team jam events and, well, I've just never taken the time to learn it. I was able to find an awesome partner (who streams on Twitch and has a website of his own) that needed some help with his idea to make a platformer that lacked a jump button. I told him that I'd be interested in working on it and that, given my lack of Unity experience, maybe it'd be best for me to concentrate on level design while he did the programming.

That separation of powers ended up being perfect for us. Before anything was programmed by him, I actually started ripping apart Ensue to try to get a very crude prototype going so that I could start experimenting with the jump-less mechanics we were envisioning. After a night doing that, I was able to get Unity up and running on my computer and start designing levels natively. It all culminated in a game that we named "Deleveled". We think it came out pretty well, for what it is, and our fellow jammers agreed: we won the community choice award for the jam.

Closing thoughts

So now I have two game jams under my belt along with something that resembles a portfolio of video games that I've released. As somebody who still insists that he has no idea what he's doing, that's a pretty good feeling to take from this whole experience. I'll definitely be interested in participating in future jams (maybe the Global Game Jam this January?), even if I'm not still working full-time on a video game at that point. I also no longer have any ugly placeholder boxes in the portions of Ensue that are publicly available. Sprint #15 was pretty good to me.

Next sprint

Hopefully, Sprint #16 will be the same. It's going to be a pure level design blitz sprint as I attempt to make roughly five short levels every single day. Near the end of the sprint, I'll see if I can't assemble several of them into something that feels like a real thing. Wish me luck.