Submission Overview
The primary objective of this run was to achieve the 100% rating (193 fairies, 44 doors, and 40 goals), and complete the game as quickly as possible. Glitches are used, and damage is taken when necessary.
This TAS improves upon the current 100% TAS available on YouTube and NicoNico Douga from 2018 by 9,225 frames while completing all tasks required to trigger the 100% ending. The primary reasons for the time savings are summarized below.
1)Stage routing optimizations on the world map, saving 1,099 frames
2)Movement and path optimizations in stages, saving 6,368 frames
3)More time saved on ending screens (fewer fanfares, fewer start+select exits), saving 1,758 frames
Total Frames: 141,926 @ 60.0988 fps = 39:21.545
Total Re-records: 73,342 (I used a different TAS file to route the stages which added 50,267 re-records to what you see in the .bk2 file. I actually did a lot more re-records than even this, since I ended up having to reload the file without saving countless times.)
Note: The previous 100% TAS did not abuse the left+right momentum glitch for movement. The abuse of this glitch allowed savings of up to 3,909 frames over the course of the run. The previous TAS also takes no damage throughout the entire run. In this updated run, damage is taken to lose the shield which costs no time, but no loss of HP was incurred over the course of the run. The amount of time lost to avoiding damage from the previous TAS is negligible over the course of the run.
The original TAS can be found here (42:30.67):
This optimized TAS can be found here (39:21.545):
Special thanks to TAS legend Tremane for introducing TASing to me, and the awesome people who kept me company while I muddled through this in my Twitch chat. Extra special thanks to the anonymous creator of the original TAS, “mlight” on nicovideo or “Tarou Yamada” on YouTube. While the final product of this submission used little of the previous author’s run, this optimized TAS wouldn’t have been half as successful in saving time without the work that was already put in for reference. Thank you!
Documentation
While simple in nature, Twinbee: Rainbow Bell Adventure has a surprisingly complex momentum system, as well as a jet propulsion mechanism that forces the player to commit to the direction he or she is going for a minimum of 64 frames at a time. Within those 64 or more frames, the character will ricochet around the room depending on the geometry of the environment, much like the jet propulsion of Rocket Knight Adventures or Sparkster. While there is no way to break out of a jet blast, it does achieve (almost) the highest velocity a character can move, so it is often significantly faster to utilize this blast in lieu of traditional running and jumping, even if the character ricochets off walls a number of times.
Maps are sprawling and often go in all directions, making this game an explorer’s delight. It is highly recommended for viewers to try this game briefly before watching the TAS video, as words do not give the challenge of the game justice. Be that as it may, the exploration aspect of the stages, albeit labyrinthine, allow for fantastic replayability. This paired with a happy, upbeat Konami soundtrack makes it an absolute must-play in the Super Nintendo (Famicom) library. Sadly, the European version removed much of the free-exploration aspect of the game, and it was never released in North America. Those fortunate enough to have a NTSC-J copy of the game will agree: it is one of the best action platformers on the system.
Key RAM addresses
All values are 2-byte Signed, and each value pinpoints the exact pixel on the stage map
7E1554 X-Axis Camera (rubber bands back to player)
7E155C Y-Axis Camera (rubber bands back to player)
7E0310 Character X-position
7E0318 Character Y-position
Note: When poking the RAM values, the change must be greater than the current length of the screen (256x224) to cause the screen to begin scrolling. It is recommended to freeze the memory values of the character position when attempting to view the map to prevent a camera rubber banding effect and/or Twinbee being pushed out of an object.
Cheat Codes
Camera Code:
1)While paused, press: A x5, B x5, X x5, Y x5, L x5, R x5
2)A sound will play if the code was input correctly
3)Exit pause menu --> Hold Pause button + directional to move the camera
Note: This allows for free reign of the camera without poking the RAM addresses, however the stage map will always be visible unless the corresponding background layer is disabled on an emulator.
+++++++++++++
Key Gameplay Mechanics
Running speed - Measured to full charge with Winbee – 39 frames
The last input must be held to achieve distance indicated
Holding right = Normal Speed – move 59 pixels
Right, no input, right = Speed up 1 – move 89 pixels
Right, left, right = Speed up 1.5 – move 91 pixels
Right+left = Speed up 2 – move 106 pixels (hold right only after 26 frames)
Right, right+left = Speed up 3 – move 128 pixels (hold right only after 21 frames)
Jump+right, right+left = Speed up 4 – move 158 pixels (must be in the air for speed)
Running speed: 6px per frame (max speed)
Note: velocity increases immediately in a similar nature to “right, left, right” in the left direction if jumped on the second frame. However, air velocity without left+right being held builds slower overall, so it is still faster to walk to the left than utilize this air boost. However, it is useful when jumping up to a platform to the left from 0 x-velocity.
+++++++++++++
Jet Blasts
Blast length: 64 frames (each ricochet increases flight time by 1 frame)
Horizontal: x-velocity = 8px per frame, y-velocity = 0px per frame
Diagonal: x-velocity = 5.656px per frame, y-velocity = 5.656px per frame
Vertical: x-velocity = 0px per frame, y-velocity = 8px per frame
Falling
Post-horizontal blast: 5.406px per frame
Post-downward blast: 6px per frame
Post-diagonal down: 6px per frame
Note: These are indicated as 5.xxx because the speed fluctuates between 5 pixels and 6 pixels on different frames, and does not travel at a steady speed.
+++++++++++++
Slopes
Sliding: x-velocity = 3px per frame, y-velocity = 4px per frame
Running: x-velocity = 3px per frame, y-velocity = 3px per frame
Note 1: Sliding retains the 3px per frame x-velocity on flat ground, so it is rarely faster to slide down a slope. The main exception is the long downward slopes in stage 24.
Note 2 : If TwinBee is close enough to the ground, the x and y-velocities can change dramatically, and thus change the overall trajectory of the Jet Blast significantly. Slopes can also push TwinBee’s x-velocity to the left in a similar fashion to l+r for the right direction in specific conditions (still testing the exact cause of this). See the end of S22 V1 for reference.
+++++++++++++
Other useful mechanics
1)Momentum in the air is maintained as long as or directions are not pressed
2)If not moving at full speed in the air, momentum can be increased by pressing and holding left+right until maximum velocity is met
3)Air momentum is maintained on the ground if the same directional button is pressed and held the frame the ground is touched
4)Pressing the up button in the air post-apex of the jump will reduce x-velocity to 0
5)Shooting the gun on the ground without pressing any buttons will reduce x-velocity to 0
6)Performing special punch attack and jumping on the reverse frame will reduce x-velocity to 0 (forward+y, reverse+b)
7)Sliding down a slope is 1 pixel per frame faster in y-velocity than running, but maintains the same x-velocity as running
8)Running along the surface of moving objects adopts the x-velocity of the object + the running velocity of Twinbee, allowing up to 10 pixels per second x-velocity
+++++++++++++
Stage Hazards
Rainbow Stars: These stars are placed in sinister portions of stages that require jet blasts to reach. They refresh TwinBee's jet blast in-flight cool-down timer and need to be avoided at all costs, because they usually send you careening into a wall or far past your target destination, causing you to lose massive amounts of time.
(Note: This causes the most time loss in S30 V1 after the long vertical jumping section, requiring a long left run to pick up a fairy on the right side of a hidden path (The stars refresh Winbee's jet blast, and she will just go all the way back to the left otherwise, so running is the only way to collect this fairy). Stars are avoided in many of the cave levels, which is why more obvious and seemingly faster jet paths not used.)
Enemies: Most enemies die in one hit and can be knocked to the background with a super punch to avoid Bell Power drops. Grey/Turquoise enemies take many hits to defeat unless knocked into the background with a super punch.
Small Spikes: These spikes can be used for damage boosts. They will cause TwinBee to lose one heart or the shield.
Large Spikes: These spikes are insta-kills. TwinBee can move through them or over them during invulnerability frames after taking damage, or with invincibility. This can be most plainly seen in S30V1 where damage is taken to run through spikes guarding a fairy, and invincibility is collected from an enemy to run through spikes to collect the green key.
Thwamp Blocks: These blocks move up and down to crush TwinBee in the cave zones. These drop upon being triggered by the camera, so no amount of re-routing allowed for faster transit to the secret area below the thwamp in stage 9.
Ice: Ice causes special physics, including physics that void the left+right movement glitch. In order to utilize this l+r speed boost, TwinBee must jump or be airborne.
Water: Blasting into a body of water from outside causes TwinBee to come out of the blast in a swim animation. However, jumping into the water allows TwinBee to retain non-water physics until the B button is pressed, even after a blast! This is used constantly throughout the water stages to optimize trajectory and fall faster when necessary.
Quicksand: In some parts of the jungle area, TwinBee must sink in the quicksand to reach secret areas. This quicksand resets all momentum to 0 and nullifies any frames remaining on a jet blast. Conversely, it is not possible to jet out of the quicksand, so TwinBee must first jump out before a blast.
Springs: It takes one frame for the spring to register, so TwinBee can jump off a spring without being blasted up to retain normal jump height. This is used frequently in rooms with springs. Usually they should be avoided at all costs.
Stage Goals: Frames can be saved by altering the time TwinBee passes through the stage goals, likely due to the falling or ricochet animation before TwinBee reaches the ground. The fastest Goal entry is from a blast that is executed from flat ground that is on the same plane as the goal. The Ricochets are used to enter the goal only if TwinBee is falling from above, otherwise it is always faster to do a jet blast from the same plane as the ground of the goal.
Bells: Collect 100 and get a heart back. No benefit to this run.
Music notes: They ding when you go by... I don't think they do anything else...
+++++++++++++
Target Completion Times
Meeting or exceeding target = 415 frames
Missing the target = 39 frames
This means if you do not finish the stage at least 316 frames ahead of the target time, you will lose time overall and it is faster to wait for the clock to go one second past the target time.
Start+Select Restart = 280 frames from input select first input after reload
This means if you are not saving at least 280 frames traveling back to the start of the stage, it is faster not to use start+select to exit a stage. Like Mario games, this can only be done once the stage has been completed once.
+++++++++++++
Lag Mitigation
Boss fights or screens with many enemies can generate a lot of lag. Sometimes making no movement at all after a boss fight, doing a slide at a frame perfect timing, or changing direction can reduce or completely eliminate lag during the explosion. This is one reason for a “minimalist” approach to many boss fights.
For screens with many enemies, it sometimes reduces/eliminates lag if you take out enemies with the gun. The whip almost always causes lag on a busy screen. Furthermore, if you collect a bell that is dropped by an enemy, lag is almost always generated as a result. There is only one instance where a power up must have been collected (a shield) in order to lose it to the next boss in the stage route. Taking actual damage aside from being a brutally long animation of swirls, also generates a lot of lag. While damage is taken to lose the shield a number of times, actual damage to the TwinBee is never taken because it is never slower to dodge an enemy.
Finally, Winbee was used for her extremely fast jet boost charge time, and the charge shot is used sparingly enough so that it would not even come close to saving time taking a death and switching characters at any point in the run.
Stage Breakdown
+++++++++++++
S01: 39 frames saved
V1 - Better movement, better fairy pickup at end
V2 – Better movement
+++++++++++++
S02: 171 frames saved
V1 – Better movement, better ricochets
V2 – Better movement and route. Blue door takes longer to exit than purple door.
+++++++++++++
S03: 17 frames saved
V1 – Better movement, collected all fairies in one go
V2 – No V2, so saved an additional 280 frames in loading/reselecting time
+++++++++++++
S04: 109 frames saved
V1 – Picked up an early fairy saving more time in V2
V2 – Better movement and route
+++++++++++++
S05: 0 frames saved
Note: Boss must be attacked from the front. Attacking from behind loses 2 frames per hit.
+++++++++++++
S06: 7 frames saved
V1 – Better movement
V2 – Better movement, finished exactly one frame after the clock switched to 10
V3 – Better movement and route.
V4 – No V4, so saved 280 frames in loading/reselecting time
+++++++++++++
S07: 94 frames saved
V1 – Better movement, better route, better jet ricochets, gathered more fairies at V1 to avoid time bonus (saved 376 frames on ending screen)
V2 – Better movement, better jet paths
+++++++++++++
S08: 276 frames saved
Better jet routes and ricochets
+++++++++++++
S09: 369 frames saved
V1 – Better movement, route, and jet paths. Creative use of gun to reduce lag, lost shield for better ricochets, collected all fairies in one go.
V2 – No V2, so saved an additional 280 frames in loading/reselecting time
+++++++++++++
S10: 49 frames saved
Faster boss hits and optimized boss path. Frame perfect slide saves ~6 lag frames during explosion.
Note, if you are on the right side of the center of the boss, it will jump to the right, and land faster, allowing faster hits. 31 frames of invulnerability once he turns blue.
+++++++++++++
S11: 152 frames saved
V1 – Better movement, better jet paths, lost shield to save time with better ricochet
V2 – Better movement, lost time to picking up an extra shield for Stage 26 (still saved 42 frames overall despite this).
+++++++++++++
S12: 137 frames saved
Better movement, better jet path, bounced off enemy to collect fairies at the start faster, Smoother entry to the yellow door, better jet path in spring room. Faster jet path for last 3 fairies.
+++++++++++++
S13: 109 frames saved
V1 – Better movement, better route, lost shield for better ricochet, utilized current boosts better, collected all fairies in one go
V2 - No V2, so saved an additional 280 frames in loading/reselecting time
+++++++++++++
S14: 0 frames saved
Identical boss fight
Note: Something about this fight causes you to lose time, I could not learn what. I had to copy the current TAS to avoid losing 100+ frames.
+++++++++++++
S15: 401 frames saved
V1 – Better movement and route, utilized swimming to optimize jet path, collected more fairies sooner so no need to burn time for the clock.
V2 – Better route, collected one less fairy
V3 – Better movement
+++++++++++++
S16: 438 frames saved
Better movement and route, utilized swimming greatly to improve jet path and reduce ricochets, took advantage of faster fall speed from jumping into water over jet blasts
+++++++++++++
S17: 729 frames saved
V1 – Better movement, better ricochets
V2 – Better movement, better ricochets, used more jumping than jet blasts to save big time on most screens, better climb on spike room with minimal jet blasts.
+++++++++++++
S18: 48 frames saved
Lost shield to end the fight faster
+++++++++++++
S19: 396 frames saved
Better movement, better ricochets, lost shield to save time, and used moving platforms for bonus speed (up to 10 pixels per second!!!)
+++++++++++++
S20: 21 frames saved
V1 – Finished on the exact frame after the clock switched to 17.
V2 – Better movement
+++++++++++++
S21: 385 frames saved
V1 – Better movement, better ricochets, smoother key grab, better jet paths
V2 – Better movement
+++++++++++++
S22: 427 frames saved
V1 – Better movement, got invincibility on screen 1 to pick up fairy faster, found glitch on slope on last screen to get leftward momentum to move as fast as left+right glitch (unable to replicate on other slopes…)
V2 – Better movement, better route, less bonks on floor with descent.
+++++++++++++
S23: 116 frames saved
V1 – Better jet routing
V2 – Finished one frame after time switch to 24
V3 – No V3, so saved an additional 280 frames in loading/reselecting time
+++++++++++++
S24: 124 frames saved
Better movement, better ricochets, sliding down long corridor at end saved 1 pixel per frame in y-velocity.
+++++++++++++
S25: 49 frames saved
V1 – Better movement, route, and jet paths, collected all fairies in one go
V2 – No V2, so saved an additional 280 frames in loading/reselecting time
+++++++++++++
S26: 118 frames saved
Lost shield to defeat the boss sooner and chain hits perfectly.
Note: Boss must be hit from the right side, otherwise it will spew gears all over the place, wasting seconds overall.
+++++++++++++
S27: 423 frames saved
V1 – Better movement, optimized route, lost shield to save time on screen 3, jet boosted under spikes on screen 4 for big time save
V2 – Better movement, better jet path, used guns more effectively to hit switches earlier, lost shield to save time.
V3 – Better movement
+++++++++++++
S28: 14 frames saved
Damaged the boss sooner
+++++++++++++
S29: 90 frames saved
Better movement, better jet path, better fairy grabs at end
+++++++++++++
S30: 960 frames saved
V1 – Changed entire route for stage. Better first fairy grab, lost shield instead of grabbing invincibility from enemy (big time save), better fairy and key grab. Jumping up to the fairy in long shaft saves time from ricochets, picked up last fairy early by jumping up through parachute enemies and discovering tough ricochets.
V2 – Longer, but saved more overall. Better movement, better block breaking
+++++++++++++
S31: 0 frames saved
Identical length boss fight. Boss must be attacked from the front. Attacking from behind loses 2 frames per hit.
+++++++++++++
S32: 12 frames saved
Hitting boss from behind on first hit was faster.
+++++++++++++
S33: 0 frames saved
Identical length boss fight
+++++++++++++
+++++++++++++
Thanks for reading this far, and I hope the TAS was fun for everyone to watch! Can’t wait for someone to do a 2 player 100% run… :OOO!!!
Memory: Optimization seems good for how complex of a game this is.
This is still a really cool game! The quick rocket movement is a treat to watch. 100% allows more of the levels to be explored which is good as well. This might be able to be obsoleted by 2 player if it's faster (which it sounds like it is), but I don't think it should be required for the moment for an otherwise really cool run.
Accepting to Moons as a new branch.
Spikestuff: Publishing. Zinfidel has handled the encodes for this one, there's a priority for getting these subtitle files sorted out.