Submission #9273: DarkRiolu27 & MUGG's GB Kirby's Dream Land in 08:45.55

Game Boy
baseline
(Submitted: Hoshi no Kirby (Japan) (Rev A).gb Japan Rev A)
BizHawk 2.8
31390
59.7275005696058
178871
PowerOn
Syncs on BizHawk 2.9.1
			
Submitted by DarkRiolu27 on 9/7/2024 6:38 PM
Submission Comments
For alternative encodes, please see the description of the above video.

About the game

Kirby’s Dream Land is a platforming game that was developed by HAL Laboratory and licensed to Nintendo to be released on the Game Boy. It was designed by Masahiro Sakurai and released in 1992 as the first game in the Kirby franchise. Kirby does not yet have his signature ability to copy powers from enemies, but can still float and inhale enemies.
This TAS is played on the Game Boy Color, which allows for different color palettes to be loaded. The dark blue palette is used since it was found to save two frames during the last two boss fights.
Kirby's Dream Land appears to have framerules. Each framerule is five frames long. Moving through a room faster or slower only matters if it saves or loses a framerule, but time can also be gained or lost by decreasing or increasing the amount of lag that occurs - and this game has a lot of lag. The majority of my time working on this TAS was spent doing actions on different frames to try and minimize the amount of lag that occurred. The game can also lag at different times with the same inputs, depending on which actions were taken earlier on, meaning that any improvement usually requires everything after the change to be completely redone.
This run saved 16.1 seconds - 961 frames - over the previous TAS

About the run

  • Aims for fastest completion
  • Takes damage to save time
  • Uses hardest difficulty
  • Manipulates luck
  • Allows for Left + Right and Up + Down
  • Genre: Platformer

BIOS

GBC World with Gambatte core

Room-by-room comments

Each room will show the time saved or lost compared to the previous TAS.

Green Greens: -87F (-15 framerules, -12F lag)

Room 1 – through Warp Star: -10F (-1 framerule, -5F lag)

Some different enemies were inhaled to reduce lag. The Koozer enemy that spawns behind the Warp Star seems to change its position based on Kirby’s position, and I was able to manipulate it to damage boost directly onto the Warp Star, saving a framerule.

Room 1 – after Warp Star: -8F (-0 framerules, -8F lag)

Normally there is a very long period between the time Kirby inhales an object and when he is able to exhale it. However, triggering the 'swallow' animation makes it so that Kirby can instantly spit out the next thing he sucks up as long as it's nearby when inhaled. This is called the 'TASpit' state. A TASpit can be primed by actually swallowing something, pressing down after shooting out a projectile while moving, and in many other niche ways. The TASpit state is nullified if Kirby inhales for too long or floats. For the Poppy Bros. Sr. miniboss, a TASpit was set up for the last hit in order to instantly exhale the bomb while also damage boosting to move faster. I also had Kirby inhale an extra Koozer and made small changes to movement in order to minimize lag.

Room 2: -24F (-5 framerules, +1F lag)

Based on an improvement that MUGG created and making heavy use of Left + Right to accelerate faster when changing direction, five framerules were saved. Holding Left + Right causes Kirby to accelerate twice as quickly but prevents forward movement. This is very useful to build up horizontal speed when moving vertically, but I discovered that holding Left + Right for two frames even while standing still causes Kirby to reach maximum speed fast enough to make up for the two frames that lacked forward movement, increasing the overall distance covered for a given number of frames. This room is probably the one that benefited the most from finding this fast acceleration.

Whispy Woods: -45F (-9 framerules, -0F lag)

I manipulated RNG to get only useful attacks from Whispy Woods. RNG advances whenever Kirby creates a star sprite (such as when hitting the ground or a wall) or inhales. Pressing Up after B can cancel an inhale, which can be used to quickly advance RNG without losing the TASpit state. When Whispy is damaged, it delays the spawning of every Gordo and apple afterwards, so I held onto the fourth apple until the final one spawned, saving many framerules.

Castle Lololo: -47F (-4 framerules, -27F lag)

Room 1: -10F (-2 framerules, -0F lag)

Kirby’s horizontal speed is maintained through certain loading zones, including after beating a boss, so I made sure to grab the Sparkling Star from Whispy with full floating speed so Kirby would already be near max speed at the start of this room, allowing for a damage boost that reached all the way to the door and therefore didn’t have to re-accelerate afterwards.

Room 2: -8F (-1 framerule, -3F lag)

The previous TAS waited for the Koozer to move before inhaling it, but I was able to have Kirby inhale it without waiting or getting stuck inhaling the Waddle Dee as well.

Room 3: -1F (-0 framerules, -1F lag)

The damage boost in the previous TAS was not enough to save a framerule but it did create a frame of lag, so I cut it out.

Room 4: -1F (-0 framerules, -1F lag)

No significant changes. As mentioned earlier, this game will lag a different amount even when all of the same inputs are used, so even rooms that are the same will often gain or lose frames to lag pseudo-randomly.

Room 5: -1F (-0 framerules, -1F lag)

No significant changes

Room 6: +1F (-0 framerules, +1F lag)

The RNG was different resulting in a different Lololo pattern, but it didn’t affect the speed of the fight.

Room 7: -0F (-0 framerules, -0F lag)

No significant changes.

Room 8: -4F (-1 framerule, +1F lag)

There was a two-subpixel window (out of 256) for the X subpixel to be low enough that Kirby wouldn’t hit the edge of the first step but would barely be able to make it to the door one framerule faster. Luckily I was able to adjust the subpixel during the previous room to a value that would work.

Room 9: -10F (-0 framerules, -10F lag)

Exhaling to the left caused the puff of air to be destroyed by the Gordo rather than linger, saving a significant amount of lag.

Room 10: -2F (-0 framerules, -2F lag)

The Gaspar was causing lag, so I slowed down in order to inhale it while just barely making the same framerule. I also inhaled the Broom Hatter to advance RNG to a more favorable value for the Lololo and Lalala fight, but Kirby didn’t have time to swallow it so he spat it out. Entering a door during the animation of spitting something out primes a TASpit.

Lololo & Lalala: -11F (-0 framerules, -11F lag)

I manipulated Lololo and Lalala so Kirby could get the last hit on the top row, causing some of the explosion to go off-screen and reducing lag. After the fight I used Left + Right to build up speed in place so that Kirby would have max speed at the start of Float Islands.

Float Islands: -97F (-10 framerules, -47F lag)

Room 1: -24F (-2 framerules, -14F lag)

Starting the room at full speed and using fast accel after taking damage was just barely enough to save two framerules, but I had to manipulate Kirby’s Y subpixel so that he could exit the water as quickly as possible on three of the last four jumps, with three being the most times in a row Kirby can quickly jump out of the water before the Y subpixel changes too much. Spending the minimum amount of frames in the water was just enough to make it to the door during the faster framerule.

Room 2: -32F (-3 framerules, -17F lag)

Kirby is considered to have hit a wall if he gets within one pixel of it while moving towards it. In order to go through the wall of star blocks at the end of the room, I had to get Kirby just barely more than one pixel away from them, but still close enough to travel past the wall in the single frame he’s at the correct Y pixel, while also inhaling in order to remove the star block. Marche9th helped figure out the wall mechanics, and once that was known I was able to set Kirby’s subpixels accordingly, saving three framerules.

Room 3: -15F (-1 framerule, -10F lag)

Inhaling the Flotzo and Grumples at the end decreased lag significantly, then Kirby waited for the next bullet instead of damage boosting past it so that he could damage boost directly into the door instead.

Warp Star and Kaboola: -26F (-4 framerules, -6F lag)

Jumping into the Mint Leaf allows the screen to scroll further before being locked into scrolling only one pixel per frame, which is less than Kirby’s max speed. That, in combination with fast accel at the beginning of the room, allowed me to spawn Kaboola a couple of frames sooner. Since Kirby can only shoot two projectiles at once, he started shooting on the frame that would cause the third attack to spawn right after the first one hit Kaboola. I also manipulated all of Kaboola’s attacks to be single shots, minimizing lag.

Bubbly Clouds: -325F (-57 framerules, -40F lag)

Room 1: -25F (-2 framerules, -15F lag)

Rather than turn back to inhale some of the parasols, Kirby moved in such a way that they would swoop under him, only requiring one turn-back total and also saving one HP since he didn’t damage boost at the end. Kirby also slowed down slightly before turning back, since his speed is reduced substantially when turning around near full speed, but not reduced at all if his speed is below a certain amount.

Room 2: -27F (-2 framerules, -17F lag)

Using the extra health saved in the first room, Kirby damage boosted twice in this room, saving two framerules. Because Kirby also destroyed all of the projectiles with his face, there was significantly less lag overall. It's technically possible to save one more framerule in this room if Kirby enters it on X subpixel 254 or 255, damage boosts twice, uses fast accel at the start of the room and on both damage boosts, and doesn't allow his speed to drop below maximum for a single frame except for when floating, which must also be perfectly optimal. Employing such restrictive movement caused way more than five lag frames, so it wasn't worth it.

Room 3: -18F (-2 framerules, -8F lag)

Before floating the second time, I used Left + Right to lock Kirby in place next to the wall, which triggered the hitbox of the wall, stopping Kirby’s leftward momentum and placing him a few subpixels away from the wall so that he could immediately start moving to the right before starting to float. If he didn't move right before floating, he wouldn’t be able to move rightwards while puffing up. I scrolled the screen just high enough to spawn the second Whisker so that it would have time to move next to the other one and Kirby could inhale them both at once.

Kracko Jr.: -10F (-1 framerule, -5F lag)

For the last hit on Kracko Jr., I had Kirby exhale sooner and from higher up to build up more downward speed before taking damage. Kirby’s Y speed is not reset when taking damage, only paused, so he had more speed after being hurt and was able to reach the Warp Star a framerule earlier.

Room 5: -83F (-20 framerules, +17F lag)

WarHippy made a comment that getting the Mint Leaf in this room didn’t seem faster, and MUGG was able to prove that it was more efficient to ignore it. When factoring in lag, Kirby traverses this room at almost the exact same speed both with and without the Mint Leaf, since it allows Kirby to float at walking speed - which is faster than floating speed - and break blocks without slowing down, but falls much slower than normal Kirby and has a much longer animation entering doors. Therefore, it was a waste of time to go to the left in order to obtain the power-up. I was able to improve upon MUGG’s improvement by exhaling near the end of the room to travel at walking speed for a short while. In order to exhale without hitting the ceiling, I had to get Kirby into the spike hitbox without taking damage to have enough room. This was accomplished by carefully controlling Kirby’s Y speed so that it was near zero when touching the spikes, which for some reason avoids triggering their hurtbox.

Room 6: -97F (-22 framerules, +13F lag)

With the Superspicy Curry, Kirby has to slow down occasionally since the fire breath doesn’t destroy the star blocks quickly enough. Kirby also loses speed while inhaling, but not nearly as much. The gaps in the floor are most likely intended to be too wide to jump over, but jumping with a very high X subpixel and very low Y subpixel gives just enough distance to clear the gap before Kirby touches the ground again. There’s not much leeway on this jump, but there is just enough to be able to inhale the star block in the way. Without being able to make these two jumps, going without the Curry would not be faster, since having to float would cancel Kirby’s TASpit state (which, as mentioned earlier, is what allows him to instantly exhale objects), and thus there would be two more inhale animations to wait out, which take about 20 frames each.
I spent about 6 weeks optimizing this room. The falling stars that randomly spawn do damage and also increase lag, and there's no efficient way to manipulate RNG after the start of the room. Most of my time was spent testing different starting RNG values to see which would give the least overall lag. I also spent multiple days inhaling and jumping on different combinations of frames to see what gave the lowest amount of lag.

Room 7: -2F (-1 framerule, +3F lag)

Bonking Kirby’s head against the ceiling and letting go of A for one frame allowed him to descend one pixel, which is the requirement for keeping vertical momentum after exhaling, rather than maintaining his exact height. Jumping up the outside of the sky palace was faster than floating, and just one frame short of saving a second framerule. Because I wasn’t able to save the extra framerule, I instead used the leeway to slow down at certain points during the room to prevent the game from lagging, although it still insisted on lagging during a few frames.

Kracko: -63F (-7 framerules, -28F lag)

Kracko has a slow version and a fast version of each attack. The previous TAS had a slow second bomb attack from Kracko, so I manipulated the RNG to make all of Kracko’s attacks be the faster version. I also had Kracko go from right to left during the second bomb attack, which caused the last bomb to be dropped eight frames later, giving Kirby barely enough time to set up a TASpit for the final hit. Not only did this defeat Kracko sooner; I made sure the fifth hit created the longest-lasting, laggiest star animation possible, which was still playing when the sixth hit landed. Because this animation was still there when Kracko exploded, much of the explosion was unable to load, reducing overall lag by a substantial amount.

Mt. Dedede: -407F (-59.2 framerules, -111F lag)

The partial framerule is due to the run ending on last input, not a loading screen.

Entering Lololo and Lalala stage: -1F (-0 framerules, -1F lag)

No significant changes, but being on a different RNG value caused the star sprites created by the Warp Star to lag one fewer frame than the previous TAS.

Lololo and Lalala stage: -16F (-1 framerule, -11F lag)

During a previous iteration of this TAS, I had taken damage on Mr. P. Umpkin to save time, but in this version, all attempts at damage boosting increased lag so much that saving an extra framerule wasn’t worth it. Jumping up the castle at the start was slightly faster than floating, even with the time-consuming fall at the very start. I had Kirby inhale every enemy within reach to significantly reduce lag.

Lololo and Lalala refight: -15F (-1 framerule, -10F lag)

I manipulated Lololo and Lalala to appear on the top two rows during the third cycle. This made part of the explosion go off-screen like in the first fight against them, but I was also able to have Lololo’s explosion still active when Lalala was defeated, cancelling much of her explosion.

Entering Kracko stage: -4F (-1 framerule, +1F lag)

Speed is maintained after the boss refights as well, so I made sure to build up to full speed after the Lololo & Lalala fight in order to make it to the Kracko door faster.

Kracko stage: -18F (-1 framerule, -13F lag)

It was faster to enter the door leading to Kracko 2 from the top, even though taking damage wasted some time. As mentioned earlier, spitting out an enemy right before entering a door also primes a TASpit, which was needed to beat Kracko without taking damage so that that health could be saved for later. Additionally, I had Kirby inhale two enemies to eliminate nearly all lag in this room.

Kracko refight: -54F (-7 framerules, -19F lag)

During Kracko 2, the previous TAS had a slow second lightning attack, but I was able to get perfect RNG on this fight as well. I also used the same improvements from the first fight of finishing with a TASpit and making sure the sprites from the fifth hit were still there when Kirby finished Kracko off.

Entering Kaboola stage: -6F (-1 framerule, -1F lag)

Starting to float on the last possible frame such that Kirby would still be able to exhale one frame before reaching the door to Kaboola 2’s stage was just enough to save a framerule. Kirby needs to exhale before trying to go in the door since the animation of entering a door takes much longer when floating.

Kaboola stage: -18F (-3 framerules, -3F lag)

Taking damage on the Grumples instead of the spikes propelled Kirby forwards instead of upwards, saving time instead of losing it, and only costing one health instead of half of Kirby’s current HP.

Kaboola refight: -32F (-6 framerules, -2F lag)

The damage boost saved one framerule, and starting to shoot Kaboola at the perfect time saved three. The previous TAS also had a period during the fight where Kirby could not shoot due to two of his attacks already being spawned, which I avoided. I did have to stall one frame before shooting the fifth shot, otherwise Kirby would shoot a null shot which did no damage. This actually happened during both Kaboola fights, but luckily did not cost a framerule on either one. I also manipulated for perfect RNG to minimize lag.

Entering Whispy stage: -0F (-0 framerules, -0F lag)

The stage door for Whispy 2 appears to be one pixel farther away from the edge of the platform it’s on than Kaboola 2’s stage door, making it seemingly impossible to save a framerule here.

Whispy stage: -4F (-0 framerules, -4F lag)

Inhaling the Tookey instead of falling onto it helped reduce lag.

Whispy refight: -38F (-5 framerules, -13F lag)

I used the same improvement as in the first Whispy fight of holding on to the fourth apple until the sixth one spawned, saving five framerules.

Entering Dedede fight: -0F (-0 framerules, -0F lag)

No significant changes.

Dedede fight: -201F (-166 frames, -35F lag)

Dedede has three random delays before his first attack, so I manipulated the shorter delay in all three cases. This caused him to attack so soon that Kirby was unable to trigger his hammer and get out of the way before it came down, meaning it was necessary to take damage for the quickest possible fight. At first I thought manipulating Dedede to jump five times would be the fastest pattern, but I was able to save 90 more frames than that by alternating between hammers and jumps. The reason for this is that Dedede will not flinch when he swings his hammer, and the flinching animation takes upwards of 30 frames, significantly delaying the rest of his attacks. Hitting Dedede with a star at the start and end of each hammer swing saved six flinching animations, more than making up for the extra two overall attacks.

Possible improvements

Using a different color palette could potentially result in less lag overall, but I don’t have a way to test the different palettes other than remaking the entire TAS 16 times, which I will not be doing.
For the first two levels, I wasn’t aware that enemies could have different star sprites when they take damage (either from a projectile or contacting Kirby). Manipulating RNG to get less-laggy star sprites could potentially save a few frames of lag.
Kirby has one extra HP going into the Lololo & Lalala fight. I couldn’t find anywhere to damage boost that would save a framerule, but if there is such a spot, it could save up to five frames.
Manipulating Lololo and Lalala to spawn on the top two levels for the last cycle would allow them to be defeated close enough together that their explosions partially cancel each other out. This might save a few frames of lag.

Closing comments

I hope you enjoy watching! This was my first TAS and I spent well over six months making it, but I love the end result. The TAS is now officially under nine minutes, and so close to beating MUGG's old time with the inaccurate emulator. Maybe some of the improvements listed above would be enough to beat that time, but it's not guaranteed that they would save any time, and they would require redoing the entire TAS. I'm satisfied with what I've accomplished here.

eien86: Claiming for judging.

eien86: A great 16 second improvement over the current movie ([4978] GB Kirby's Dream Land by MUGG & Alyosha in 09:01.64). It obviously looks perfectly optimized, and has had a very positive reception by the community.
Accepting to Standard

despoa: Processing...
Last Edited by despoa on 9/21/2024 5:25 AM
Page History Latest diff List referrers