Submission #5746: The8bitbeast's SMS Psycho Fox "warpless" in 12:43.92

Sega Master System
warpless
(Submitted: warpless)
(Submitted: Psycho Fox (UE) [!].sms USA/Europe)
BizHawk 2.2.1
45776
59.9227510135505
28038
Unknown
Submitted by The8bitbeast on 12/13/2017 9:35 PM
Submission Comments
Psycho Fox is a platformer on the Master System. It’s possible to beat the game in roughly 2 minutes using secret warps but this TAS doesn’t use any warps meaning that all 21 levels are played.

Useful Addresses

To watch all of the position and velocity I used scripthawk, a collection of Lua scripts and RAM watches for BizHawk. It can be found here https://github.com/Isotarge/ScriptHawk

Pause Glitch

There is a glitch present in many Master System games which can allow you to reduce loading times with the use of the pause button. The following description of the glitch is taken from the submission text of #5518: Sonikkustar & Alyosha's SMS Psycho Fox in 02:02.17 and is given here for completeness:
It’s possible to reduce loading times by abusing non-maskable interrupts (NMIs) that are generated in the SMS when the 'pause' button is hit. It might seem counter-intuitive that pressing the pause button would make a game go faster, but it does turn out to be the case if pressed at the right time.
Here is what the game is doing during typical loading screen frame:
 Halt, wait for interrupt (~50000 cycles)
 Vblank, Execute necessary code for the frame (~7000 cycles)
 Repeat
What happens when you press pause, is that an NMI occurs in those ~50000 cycles where nothing is happening. The NMI itslef doesn't do anything important except for Return to where the code would be executing after a normal interrupt, so basically it's doing two frames in one. EX:
 Halt, wait for interrupt (zero cycles in this case since pause is pressed immediately)
 NMI
 Execute frame code
 Halt again
 VBlank, frame code again
The basic idea is that the return from interrupt returns to the same place regardless of which interrupt is triggered. There is plenty of time in a frame to add another interrupt without effecting anything else.

Velocity building

When you press jump the game keeps your speed, then during the jump you can’t exceed that speed. You can slow down in the jump then speed up again. This means that I often try to leave jumping as late as possible if I’m building up speed.

Duck Clipping

If you duck before jumping up into a roof, then pressing left of right in the roof causes you to snap left or right about one character width. This is not extremely useful but is used in 3 places in the run.
In 5-2 this is used to clip through a pipe to save a slight bit of movement.
At the end of 5-2 there is a very low roof. Instead of running off the right side of the screen I jump duck into the roof and do a little clip to the right. This saves 1 frame.
Finally I use duck clipping for some playaround at the start of the boss in 7-3.

Route Comments

The first thing I do is break the first egg to get the bird fly. While this is not strictly necessary it saves a lot of time over the run. The egg is broken by punching it twice, but after each punch you lose all speed. Since you do 2 punches you lose the speed twice, so if the punches are closer together this saves time. If the egg is punched on the first possible frame the arm takes a long time to reach the egg, then the second punch also takes a long time to hit the egg, which means the punches have to be spread out, so the punches must be left until later to avoid this.
The boss in 1-3 was a section of heavy optimization. Hitting the boss on the first possible frame isn’t too tough but the main thing to optimize for is running at the right edge of the screen at high speed the moment it unlocks after the fight. You can’t reach full speed before it unlocks but you can get close. Most of the boss movement is to setup the movement for this screen unlock.
The boss in 2-3 is one of the few elements of RNG in the run. The RNG can’t be manipulated during the fight without pausing (which loses a lot of time), but by entering the fight later the RNG changes. I didn’t have to manipulate the RNG but I did have to manipulate the boss movement. I leave the second hit slightly later so that the boss is higher when I hit it so it bounces back closer to the left wall. This makes the boss jump towards me rather than doing an upwards jump. Leaving the second hit until later saves 69 frames. Luckily the refight with this boss in 4-3 went very well in terms of RNG.
In 3-1, 3-2 and 3-3 there is sand which slows you down. At the start of these levels it is still best to run until you reach maximum sand speed then jump off. If you’re running at full speed then land on the sand and jump off frame perfectly you slow down very slightly. Every frame you are on the sand causes you to slow down more until you reach maximum sand speed.
7-1, 7-2 and 7-3 have a lot of slopes. These slow you down even if you jump off frame perfectly. If you run up the slope, when you reach the top you will do a little jump automatically. If you are still on a lower speed after hitting the slope then doing this auto jump off the top causes you to speed up quicker. This saves 2 frames at the end of 7-1.
There are also moving stairs in 7-1, 7-2 and 7-3. These speed you up by 6.67% if you’re at full speed. I try to spend as much time as possible on these when the route allows it.
The last hit on the final boss doesn’t matter too much. Once you land the last hit the boss has to run off the screen, but if you hit him later he moves closer to the edge and leaves the screen quicker.
The maps on SMS Power were very helpful with routing the levels.
Suggested Screenshot: 25533

ThunderAxe31: Judging.
ThunderAxe31: Nice run. It shows more of the game than what the currently published movie does, while keeping a reasonable goal. Also, it's enough optimized and entertaining. Accepting to Moons as a new branch.
Fog: Processing.
Last Edited by adelikat on 10/25/2023 12:12 AM
Page History Latest diff List referrers