The Bouncing Ball is a homebrew Gameboy game made by HuCABBAGE for the 4th annual GBJam (2015).
In this neat little platformer with no music, thus only sound effects, you are in control of a little ball, which is constantly bouncing around.
Your goal is to bounce through all the 50 unique levels by collecting every heart you can find on your way.

About the game:

The Bouncing Ball is a homebrew GameBoy game made by HuCABBAGE for the 4th annual GBJam (2015). In this game you play as a little ball that automatically bounces and your goal is to collect all hearts throughout the 50 different levels featured in the game.

Game objectives:

  • Emulator used: BizHawk 2.4.1
  • Core: Gambatte
  • BIOS: Game Boy (World)
  • Unofficial/homebrew game
  • Genre: Platform
  • Aims for fastest completion (real time)
  • Abuses programming errors in the game
  • This movie beats the cancelled submission by 4939 frames

Making of the TAS:

After BrunoValads introduced KiwiCracker to some glitches he had missed in his original submission, they collaborated to further improve the movie. Development started on BizHawk 2.4 and was finished on 2.4.1. The game is simple but the glitches made this an interesting TAS game.

Game mechanics:

  • Modes
    • Marathon: main mode, start on level 1 and end on level 50, after beating each level you get a password;
    • Continue: continue main mode, via the password system;
    • Practice: can select each one of the 50 levels for training;
  • Controlling the ball
    • D-pad left: move left;
    • D-pad right: move right;
    • Bouncing is automatic;
  • Blocks
    • Unbreakable blocks: solid, just bounce on its 4 sides;
    • Breakable blocks: can be broken if you bounce on the top 2 times;
    • Moving platforms: sprites that have a defined path, you can pass under it and bounce over;
    • Arrow blocks:
      • Up-arrow: boosts your bounce like a spring;
      • Sideway-arrow: shoots your ball in the arrows direction like a cannon. You can stop your flight by either pressing a button (any button will do) or by flying into something else;
    • Spikes: If the ball touches them, you die. Note: the bottom pit is actually a line of spikes, as seen in the GPU viewer;
    • Hearts: If the ball touches a heart, the heart is collected. If all hearts are collected, you proceed to the next level. After collecting a heart, the ball’s momentum is preserved;
  • Physics:
    • The game precision is pixels and 16 subpixels per pixel. Speed is given in subpixels/frame;
    • X speed: max moving speed to the right is 0x08, to the left is -0x09, sideway-arrow shot speed is ±0x10;
    • Y speed: terminal falling speed is +0x18, upward bouncing speed is -0x19, upward arrow boost speed is -0x22.

Strategy:

When the last heart is collected, the ball flies upwards until it reaches the top of the screen. Only after that you can transition to the next level. So, when going for fastest completion in real time, the strategy is not necessarily to collect all hearts as fast as possible, but to transition the fastest. What this essentially means, is that the ball should have as much upwards momentum as possible, when collecting the last heart. Since the bouncing is automatic, optimization usually involves minimizing bounce cycles. On some levels it’s clear that you’re close to the heart but have to wait the bounce.

Tricks and glitches:

  • Bumping against a wall reverses the x speed of the ball. The default x speed to the right is 8 while it’s 9 to the left. So, when bumping off a wall to the left the 9 speed mirrors and you can hold it indefinitely. This was used to move faster in some levels.
  • When it comes to moving platforms, the ball is actually able to bounce off of their bottom part as well, which is a few frames faster than a regular bounce (usually 1~2).
  • Corner bounce: When doing a corner bounce, the ball kind of falls one pixel further before it then suddenly clips up onto the block again. Therefore, the corner bounce is usually 2 frames slower than a regular bounce (two frames, because of the one more frame of free fall and the one frame needed to clip up). A corner bounce reverses the x speed just like a bump against a wall, since the game interprets it as a wall and a floor at the same time. The corner bounce have different outcomes depending on the block you’re touching:
    • Breakable blocks: Instead of destroying the block itself, it turns whatever is underneath the block into a breakable block and destroys it instead.
    • Arrow blocks:
      • Up-arrow: Can destroy the arrow block (not always the case);
      • Sideway-arrow: Corner bounce doesn’t work on sideway-arrow-blocks (which makes sense, since the ball simply can’t bounce off those);
    • Solid blocks and moving platforms: Nothing special. It’s just slower than a usual bounce (which sometimes actually comes in handy).
  • Clipping through walls:
    • The ball must be moving with high x speed (such as the normal max horizontal speed of 0x08), then in the very last frame before touching the block you hold the opposite direction for at least 7 frames. The game “forgets” to handle collision since you’re holding the opposite direction, so the ball can end up inside the block.
    • Corner clip: Doing a corner clip is possible from both left and right:
      • Breakable blocks: Usually destroys the block underneath
      • Arrow blocks:
        • Up-Arrow: Destroys the arrow-block;
        • Sideway-arrow: Doesn’t work;
      • Unbreakable block: Just clips through it, forcing the ball to zip downwards;
      • Movable platforms: Doesn’t work;
    • Clipping into walls directly (only possible when clipping from the left or with very high speed from the right):
      • Breakable blocks: Usually destroys the block underneath;
      • Unbreakable block: Clips through it, forcing the ball to zip downwards;
      • Movable platforms: Doesn’t work.
  • Clip bounce: When coming from beneath, the ball can kind of clip upwards to instantly bounce off the platform. On different platforms:
    • Breakable blocks: Either the block itself or the block underneath gets destroyed
    • Arrow blocks:
      • Up-Arrow: Can destroy the arrow block (not always the case);
      • Sideway-arrow: Doesn’t work;
    • Unbreakable block: Just a simple clip bounce, nothing special happens;
    • Movable platforms: Doesn’t work.
  • Out of Bounds: by clipping the wall on the level/screen boundary, the ball can end up out of bounds, which is fully navigable. When checking the VRAM in the GPU Viewer, you can see that the main game region is the Background, and the secondary region is the Window. We don’t know exactly the details here, but when the ball is moving OOB it can reach the Window as well, right below the Background. While in the Window, the ball interacts with blocks from both the Background and the Window, with exception of the moving platforms and the level hearts. This is useful for 2 instances:
    • Skipping portions of the level, by using it as a shortcut to get hearts faster, which was used a lot in the run and the research;
    • Getting the OOB Heart: the pause menu is loaded in the Window, and it has a heart as cursor to select between “Resume” or “Quit”. This heart actually works the same way as the normal ones in the level, so if you get OOB and reach it you can end the level, as long you pause to load the heart there. Also it must be the last heart to take (the remaining heart counter at $00D6 must be 1), otherwise the level still waits for you to get the remaining ones, and down there you can’t get back to the level — unless you fall down and wait the overflow in the y position. This strat takes around 650 frames, depending on where the ball starts in the level, so levels that are slower than that were candidates for this trick. Unfortunately, it was only faster in level 23.

Level by level commentary: (number between parentheses is the frame count inside the level, transitions are ignored)

  • Level 1 (176): Nothing special can be done here
  • Level 2 (325): First abuse of the extra x speed by bumping the wall to the left and carrying this speed til the end, where wall clip is used to zip to the heart getting it faster.
  • Level 3 (338): Wall zip to reach the heart faster.
  • Level 4 (315): Nothing special can be done here.
  • Level 5 (384): Small clips to interact with solid block earlier when advancing the steps.
  • Level 6 (359): Nothing special can be done here.
  • Level 7 (409): Nothing special can be done here.
  • Level 8 (457): Nothing special can be done here.
  • Level 9 (496): Corner clip in the end to zip and grab heart faster.
  • Level 10 (168): Corner bounce to avoid dying to spike. A wall zip here would require an extra bounce, which is slower.
  • Level 11 (112): OOB clip to skip all the level and get heart earlier.
  • Level 12 (308): Corner bounce to get speed 9, and wall clip to zip and reach heart faster.
  • Level 13 (314): Corner clip to reach the lateral spring earlier.
  • Level 14 (429): Matching speed 9 with the moving platform cycle to bounce the least possible.
  • Level 15 (379): Wall clip to skip the arrow block.
  • Level 16 (123): Corner clip to zip straight to the heart, skipping the whole level.
  • Level 17 (375): Saves one bounce in the start due speed 9, and saves another bounce in the end by clipping inside blocks with corner clip.
  • Level 18 (338): Corner bouncing over. the spike in the top to skip most of the level.
  • Level 19 (122): Corner clip to wall zip to get the heart faster.
  • Level 20 (463): Clip through the block under the heart.
  • Level 21 (427): Wallclip OOB into the heart.
  • Level 22 (426): Nothing special can be done here.
  • Level 23 (791): Grab 2 hearts on the right (one with zip), then clip out of bounds to get the OOB Heart.
  • Level 24 (848): Nothing special can be done here. OOB Heart was an option but is slower.
  • Level 25 (1168): Very slow level, really can't do anything special here.
  • Level 26 (120): Corner clip the spring block and the block diagonally underneath to skip the whole level and get the heart earlier.
  • Level 27 (145): Clip the brick block to zip downwards overwriting the spike block there.
  • Level 28 (422): Skips the block cluster by wallclipping and zipping straight out of it.
  • Level 29 (676): Corner clip zip to skip a small part of the level.
  • Level 30 (476): Corner bounce in the spring block to erase it, enabling a corner clip in the solid block right next to it, skipping half the level.
  • Level 31 (516): OOB wall zip to reach cannon faster.
  • Level 32 (530): Wall zips to reach the heart faster.
  • Level 33 (744): OOB clip to reach the last heart faster.
  • Level 34 (482): Forgoes first 2 cannons with OOB clip. OOB Heart is impossible due the amount of spikes in the level, since when you are OOB the collision with some blocks still happen in the normal coordinates.
  • Level 35 (216): OOB zip through the 1st heart until the 2nd, skipping almost the whole level
  • Level 36 (338): Wallclip into the narrow passage, skipping almost the entire level.
  • Level 37 (111): OOB zip to skip the entire level.
  • Level 38 (788): Small clips to move faster.
  • Level 39 (122): Corner clip to zip and skip most the level
  • Level 40 (644): Kept the momentum from the cannon until the firsts heart, then wallclip to the left. OOB Heart is impossible here.
  • Level 41 (652): OOB zip to get 2nd heart faster, then some precise tricks to pass thru the center of the level without backtracking.
  • Level 42 (224): OOB clip to get 1st heart faster, then OOB zip to get 2nd heart faster.
  • Level 43 (621): Just skip the last spring block.
  • Level 44 (617): OOB Heart was an option, but it is a little bit slower
  • Level 45 (605): Corner clip to adjust timing with the moving platform, to get the best cycle. Also took advantage of the cannon x speed until the end of the level.
  • Level 46 (806): Nothing too special can be done here. OOB Heart was an option, but it's slower.
  • Level 47 (2086): Nothing fancy can be done here, too many hearts, movement is tied to the moving platform cycles, and they lag a lot. OOB Heart to replace the last heart is slower...
  • Level 48 (1267): Getting the 1st heart as usual, then going back to wall zip passing thru the 2nd heart. OOB Heart replacing the 1st was an option, but is impossible to get.
  • Level 49 (852): Took advantage of the cannon x speed to reach the moving platform earlier, then wall zip to get 3rd heart faster.
  • Level 50 (286): Sequence of wall clips and jump delays to ignore the need of the moving platform.

Lua script:

BrunoValads made a Lua script for BizHawk that displays the main values and show the OOB tiles to aid movement there.

Screenshot suggestion:

Frame 13769

Memory: Judging
Memory: Optimization appears quite good.
This homebrew is decently notable, having popped up in top gameboy homebrew lists.
Entertainment was quite the divisive topic. I personally enjoyed it and felt that the various tricks were quite interesting. However, the lack of any music was a bit of a letdown. Some other people shared this sentiment, however others felt it was basic. There are some basic levels but I feel that the experience was good enough. It is borderline though so I'll accept to Moons with the expectation that it be re-evaluated upon collecting ratings.
Accepting to Moons.
feos: Pub.


TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15594
Location: 127.0.0.1
This topic is for the purpose of discussing #6749: KiwiCracker & brunovalads's GB The Bouncing Ball in 08:28.06
Memory
She/Her
Site Admin, Skilled player (1556)
Joined: 3/20/2014
Posts: 1766
Location: Dumpster
I enjoyed this for the most part, but was a little offput by the lack of music. Any other thoughts?
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
Feels drab and painfully slow at the beginning but gets interesting some three minutes in when some of the more surprising routes start being taken thanks to the glitches. Good job. Not to say I enjoyed it, but it kept me watching. The game would've certainly benefited from a bit more open (or less obvious) level solutions. And from less-grating sound effects.
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Arc
Editor, Experienced player (826)
Joined: 3/8/2004
Posts: 534
Location: Arizona
Syllabus There is no known history of TASing or competitive speedrunning for the game. It is a homebrew made in 2015. It falls into the Platform-Puzzle genre. The game works with the GB World BIOS. There is a clear ending that congratulates the player after completing level 50. Opinion At a minimum, the quality and notability of the homebrew is good enough for Vault consideration, and the debate is really over whether it is good enough for Moons. While watching the movie, I felt that the most similar game to it is Solomon’s Key. The commonalities are the static-screen levels, moving on blocks suspended in mid-air, and the need to avoid the dangers on the screen. I consider Solomon’s Key more entertaining between the two, but I’m higher than the consensus view on Solomon’s Key. Other less similar games that came to mind are Maoi-kun on the optimistic side and Kwirk on the duller side. Compared only to other puzzle games, The Bouncing Ball is on the higher end of the entertainment scale, but that still leaves it in an uncertain place between the Vault and Moons. On a technical level, it is clear that the authors have put in a lot of effort. The game appears simple, but the authors have deeply analyzed both the movement and strategic aspects of the game, which are surprisingly rich. There are many solutions displayed that are not intuitive. In the few situations in which there is waiting time, the authors make an effort to create entertaining movements. The movie has gone through much refinement. It seems that it would be difficult for a speedrunner to replicate all of the tricks used. Feedback has been mostly positive. The main cause for concern seems to be the lack of music in the game. I actually felt more immersed in the game because of the lack of music. The ball makes different sounds when it comes into contact with different types of objects, all of which I felt were appropriate and useful for increasing focus on the gameplay. Overall, I found it entertaining, rather than a mere guide to solving the puzzles. The levels become increasingly complex as the game progresses, creating a sort of “rags to riches” storytelling arc that increases the emotional connection. Because of the level of optimization, the length of the movie feels just right to avoid boredom. The game is not too short to establish a proper feel, nor does it drag on too long like Boxxle. The authors deserve acknowledgement for elevating the game beyond expectations. For the reasons stated above, this movie deserves to be Accepted to Moons.
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11480
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
It was much cooler than I expected. Not mind-blowing, but still rather nice. Especially loved the OOB heart. Voting Yes.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Blazephlozard
He/Him
Banned User
Joined: 2/27/2013
Posts: 175
Location: Ohio
The lack of music is a huge shame, and it can feel repetitive, but I'm incredibly impressed with the Lua script and the effort put into this improvement. The amount of collision abuse is definitely unexpected, and collecting the menu cursor is beyond unexpected. It's on the fence tier-wise but I'm voting yes, more for the effort and optimization than the game itself.
Spikestuff
They/Them
Editor, Publisher, Expert player (2649)
Joined: 10/12/2011
Posts: 6442
Location: The land down under.
Great job again for your first movie, and this one where you were able to knock off another minute with that assistance. I'll still be voting Meh even with this improvement as this game isn't as entertaining to me.
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
fsvgm777
She/Her
Senior Publisher, Player (226)
Joined: 5/28/2009
Posts: 1214
Location: Luxembourg
The run starts off a bit boring, but the entertainment value starts rising a bit starting at Level 9, where you start clipping through the wall. My favourite was probably Level 23. However, the entertainment value drops down a notch near the end, with some pretty long levels where you have to collect multiple hearts. I was a bit bothered by the lack of music, but I got used to it after a while. I can see it hurt the entertainment value, however. I personally don't find the sound effects to be really grating on my ears. All in all, this gets a mid-to-high Meh on entertainment for me. I'd say the game is fairly notable with its 1500 views on the page linked in the submission and is of decently high quality. As such, the game is Vaultable, but it has a chance to go to Moons.
Steam Community page - Bluesky profile Oh, I'm just a concerned observer.
Editor, Reviewer, Skilled player (1359)
Joined: 9/12/2016
Posts: 1646
Location: Italy
It's been three days since when I've begun tying to watch this movie. Today I was finally able to, from start to end. I didn't feel entertained, so I voted no. The gameplay flow is too much basic to me, despited the fact that it looked optimized. The only part that I really liked was level 23, and I think that I would feel entertained if there were more instances of such broken play. Edit: oh btw, I didn't read the submission text or Arc's post yet, in order to not get influenced.
my personal page - my YouTube channel - my GitHub - my Discord: thunderaxe31 <Masterjun> if you look at the "NES" in a weird angle, it actually clearly says "GBA"
EZGames69
He/They
Publisher, Reviewer, Expert player (4463)
Joined: 5/29/2017
Posts: 2762
I liked it, the movement was fun and cute to watch, plus the zips made to really interesting to watch entire levels get skipped. I’ll give it a yes vote
[14:15] <feos> WinDOES what DOSn't 12:33:44 PM <Mothrayas> "I got an oof with my game!" Mothrayas Today at 12:22: <Colin> thank you for supporting noble causes such as my feet MemoryTAS Today at 11:55 AM: you wouldn't know beauty if it slapped you in the face with a giant fish [Today at 4:51 PM] Mothrayas: although if you like your own tweets that's the online equivalent of sniffing your own farts and probably tells a lot about you as a person MemoryTAS Today at 7:01 PM: But I exert big staff energy honestly lol Samsara Today at 1:20 PM: wouldn't ACE in a real life TAS just stand for Actually Cease Existing
CoolHandMike
He/Him
Editor, Judge, Experienced player (896)
Joined: 3/9/2019
Posts: 699
Yes vote. Bouncing ball of steel walls of spikes and brick below Pass through untouched
discord: CoolHandMike#0352
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15594
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [4202] GB The Bouncing Ball by KiwiCracker & brunovalads in 08:28.06