ShiftyBalls Postmortem

Posted by (twitter: @aaghgames)
April 30th, 2016 9:01 pm

Here is our ShiftyBalls postmortem. It’s a little on the long side, but we hope that you enjoy it. If you want to try our game, ShiftyBalls, you can do so right here. Thank you, by the way, to everyone who has rated ShiftyBalls and provided feedback!

Day One:

When the theme was announced at 9 PM Friday night, Floata (our musician/level designer) immediately suggested an exploration/treasure hunting game where the player had to shift elemental form to survive hazards. Sounded straight forward enough, so off we went. I (Budaniel) do the programming and art, and shortly after we got the movement in, I moved on to try and create a humanoid avatar. The issue is that I’m primarily a 2D artist, and our game was going to be 3D. The resulting 3D model wasn’t bad. The rigging and animation, on the other hand, became the stuff of nightmares.


So, with that horror set aside, I made what was intended to be a temporary avatar – a smiling red ball. We liked it enough, though, to keep it and build the rest of the game around it. We added ice-, fire- and rock-based forms and tied them into the game play: ice freezes water, fire is fast but dies in water, and rock can survive trips through lava. At this point I forwarded Floata the game and he built our first level.


The level, once completed worked well as a tutorial to introduce the basic mechanics to the player. The hardest part, surprisingly, was getting the block to rise out of the lava. For whatever reason, we fought that one piece for almost an hour. We could have worked around it, we could have removed it, we could have come back later, but nope – we had to finish it right now, darn it. We did eventually finish it so we could move on with a clear conscience.

We eventually finished up laying out level one and half of level two before day one drew to a close Saturday night. Our vision was coming together, and we still had 48 hours before the deadline.


Day Two:

I began day two by working on key graphics. Specifically, I made the key for unlocking the gate in the levels. For all my desire to learn 3D graphics, I’m still not really there, so thankfully a key isn’t too hard to make.


Once that was completed we moved to complete the design on level one (we’d left the end point unfinished earlier). Floata wanted the level to finish on a sailing ship, but I failed at making a serviceable sailing ship, so that ship sailed and we went a simpler route. It was about this time that I noticed a bug in our player movement.

Apparently I had set the player to detect as being on the ground if their vertical velocity was less than zero. What that meant was that as long as the player was falling they could jump again, resulting in the ability to bounce through the air. How on earth we got this far without noticing that is beyond me, but it was quickly fixed – fun as it was, it kind of ruined any challenge the game had.


Taking a break from level design, work began on the title screen, which meant we needed a name for the game. After some deliberation we settled on ShiftyBalls. It may be kind of juvenile, but we’re ok with that. While I was posting a progress post on the Ludum Dare site, the tagline of the game came to me like an epiphany.


With that out of the way we went to work on level three. Working as a team over Skype went well and the level came together in no time. We had originally intended for this to be a large, multi-path level but we pared it back down after a discussion as to its relationship in scale to the rest of the game.

We had been discussing up this point adding indicators for the various forms and a timer of sorts, so when better than now to add them? I toyed with various styles and settled on an seriously boring “colored circle with a number in it” look after failing at multiple flashier variations. Looking back, I wish I’d used pics of the ball in its various forms for the buttons, but I am not a very smart person sometimes.

The timer turned out to be the biggest headache so far, as tying it to the forms and their transformations turns out to be a little harder than I’d expected. The problem was as simple as me misunderstanding how to use a single line of code (InvokeRepeating, to be exact), but it delayed progress for over an hour. That led into the evening, and the end of day two.

Day Three:

Most everything we’d aimed for was in the game now. We had three levels (more is always better, but we liked the three we had) so day three was bug-fixing and graphics-polishing day. The first order of business was doing away with the gray boxes that had stood in for textures throughout the game. Originally intended to look like tiled flooring, the way it got stretched all over the place gave it a really chintzy, low-res look. We opted to go for a simple two-piece approach, with a darker body of the surfaces with a shiny, lighter top surface. While this meant I basically had to go back and double up every single surface in the game, the results (combined with a starfield skybox) were a positive step.


We tested the hell out of it in the morning, but one issue stuck out: the ice kept blinking back to water for a half second while you were freezing it. This began a small odyssey that nearly derailed the entire project.

I told Floata I would fix the issue, and then sat down on my own to do just that. I figured it would take 30 minutes, tops, but in trying to isolate the problem, I broke the freezing mechanic entirely. We were only about 6 hours until deadline and I had just destroyed a core part of our game. I tried to put it back together, but in doing so, it didn’t work anymore. Panic and stress began to set in, knowing that I had to find and fix the problem right now. Here’s a small rundown of the events as it went all wrong.

  1. The water stopped freezing on contact
  2. The water froze on contact, but then immediately unfroze
  3. The water started as ice and became water instead of vice versa
  4. The water froze as soon as I turned to ice, even if I wasn’t touching it
  5. The water froze but never unfroze
  6. The water turned to ice but didn’t become solid
  7. The water rapidly blinked frozen/unfrozen

None of these were ideal. It took me probably two hours or so, but not only did I get it working again (the issued turned out to be three different, conflicting scripts all trying to do the same thing), I also fixed the original issue in the process. Hooray for success! I’m glad that I fixed it and I didn’t have to be guilty of ruining our game at the last minute.

With deadline rapidly approaching, we ran the game through its paces a few more times and finally posted it, and now its fate is in the hands of you fine people for judgement.

Tags: , ,

Leave a Reply

You must be logged in to post a comment.

[cache: storing page]