So a little over a week has passed since the release of Bounce Canyon. Given that it's no longer on the front page, I think now is a good time to look back on the game's development.
I first conceived the idea in early December 2019. I had been in a creative rut for a while, and couldn't really get any games off the ground. After a while, I decided to place two restrictions on myself with the game. First, I wanted the game to be a vertically scrolling arcade platformer, with a unique movement mechanic. Secondly, I wanted the game to be feasibly playable on a touch screen.
With those restrictions in place, I remembered the minigame Trampoline Time, which appeared in Super Mario 64 DS. I've had a few people note the similarities to me, and I acknowledge that I took the idea from there. From there, the game began to take shape.
After conceiving the basic gameplay concept, I decided that the game would resemble a Vectrex game. To put it bluntly, this choice was mostly so I wouldn't have to make elaborate graphics for the game. The game and the art style seemed to go hand-in-hand in my mind- the walls and trampoline could easily be represented with simple white lines.
The only challenge with the vector art style was designing the player character, Viv. Upon researching various Vectrex games, I noticed that most games with humans opted for a stickman-like design. I wanted Viv to look recognizable, but still stay within the restrictions of vector art. At one point, I even considered putting a lightning bolt design on her torso, but this was ultimately replaced with a bandana.
With the basic design of the game in place, I began work on the game in mid December. I did not use an engine for this game; in fact, aside from Newgrounds.io, the game only uses JavaScript's default libraries. The very first thing I coded were the walls themselves, which scrolled in a pretty sporadic pattern. Then came the trampoline mechanic, the placeholder character (which was just a circle), and the collision.
One of the more frustrating parts of development was getting the bounce to work in a satisfying way. Initially, I had difficultly implementing the bounce at all, as the trampoline tended to bounce the player at really weird angles. Once I did, I had trouble determining how far the bounce should go.
In the final game, bouncing on the trampoline actually applies more vertical force than horizontal force.
characterVX = 0.01 * Math.cos(angle); characterVY = 0.018 * Math.sin(angle);
I felt this worked well, as it felt good to see the character bounce really high, while still maintaining control over the character.
My next challenge was deciding on the difficulty curve. During an interview about Tengen Tetris, Ed Logg talks about logarithmic tuning. Similarly, Bounce Canyon utilizes a logarithmic difficulty curve, with the space between walls slowly shrinking. The final "space between walls" equation looked like this:
var cliffLength = 1 / (Math.log10(lineCount + 20));
with "lineCount" being the number of times the wall changes angles. Originally, the wall was going to shrink twice as fast, but I found it difficult to get very high with this tuning. A good rule of thumb in game design is if you find something you make is too hard, you should change it, because it'll be even harder for everyone else.
Now that the basic mechanics were in place, I sent an early version of the game to my friends for some feedback, and to challenge them to beat my score of over 6000. My friend Lily offered to stream her attempt to beat my score over discord. It was during this time where I discovered a critical bug. Lily's monitor has a 144hz refresh rate, while mine is only at 60. Her game was running over twice as fast. We mutually discovered that the RequestAnimationFrame() function depends on the monitor's refresh rate, so I hastily implemented delta time into the game.
The next week or so was merely a bunch of small features, like the font, a pause button, and the title screen, since it was close to Christmas. I also began work on the sounds, which I made in Deflemask using the Sega Master System tracker, and trimmed using Audacity.
There's actually an interesting story about the "hit wall" sound- originally, this was going to be only white noise, but I found the Master System's noise channel produced unsatisfying results. However, I later discovered that playing the same note in the third square wave channel created a weird chime sound. It reminded me of whacking an iron bar, so I kept this sound in the game.
The character sprite was originally just a quick Krita sketch, which I traced over with lines. Here's the original sketch:
and here's the final idle sprite:
The biggest challenge I faced with implementing a character was the discrepancy between the collision circle and the character. I remedied this by giving Viv two hitcircles- one on the torso deals with the trampoline, one on the head deals with the walls.
Finally, I needed a name. I just wanted to be done at this point, so I came up with "Bounce Canyon" and slapped some text onto the title screen. With the game pretty much done, I uploaded it onto Newgrounds and itch.io.
While the game was Under Judgement someone asked for there to be a scoreboard. It took me around an hour and a lot of trial and error, but I added one at his request. Admittedly the addition was very hasty; one of my friends even managed to hack the game and called me out on my poor obfuscation.
So, that's pretty much all of my thoughts on the game. Apologies if this retrospective seemed rather long-winded. This has been my most successful game I've ever made (I've made others that I haven't uploaded here), and I'm really happy a lot of people enjoyed it!