Submission #2123: theenglishman's GBA Prince of Persia - The Sands of Time in 36:17.73

Game Boy Advance
(Submitted: Prince of Persia - The Sands of Time)
baseline
(Submitted: Prince of Persia - The Sands of Time (U) (M3).gba USA)
VBA-rr v20
130664
60
44035
Unknown
Submitted by theenglishman on 10/24/2008 1:16 AM
Submission Comments
This run is dedicated to
JOHN “DOV” WAGNER
(1931-2008)

A wonderful source of information, support, humour and guidance; he wouldn't understand why I was doing this run, but he'd at least smile politely and pretend to be interested.
Suggested screenshots:

I HIGHLY recommend reading through this novel of comments because not only will it help you in your understanding of how the game works, it also serves as a sort of memoir, chronicling how this run absorbed eight months of my life, and the many trials and tribulations throughout. It’s also pretty funny (imho). I put nearly as much effort into these comments as I did the run itself, and I hope you enjoy the fruit of my labours.
PROLOGUE
Grasping the Dagger of Time like a lifeline, the Prince stood over the broken body of the Vizier. At last, at long last, his quest was complete; no more killing, no more headache-inducing acrobatics. It was finally over.
But doubt began to seep through him like the Sands he so often consumed; it was this unknown thought that plagued the Prince even as he took Farah into his arms.
“Is there something on your mind, Prince?” whispered Farah, waiting for her lover’s next move. “You look...distant.”
The Prince sighed. “It’s...it wasn’t good enough.”
“What do you mean?” said Farah. “If you’re talking about last night, I can make it – ”
“No,” snapped the Prince, but realizing his mistake, added warmly, “you are wonderful as you are, Farah. But my journey was not. It wasn’t...perfect.”
Farah began to stir with impatience. “What are you saying?”
“I missed opportunities to rescue you faster, to complete my quest before the Vizier gained more power! There were seconds, minutes that I could have saved if only I had looked a little closer at my surroundings. My quest for fame and glory was ruined because of my mistakes. Even with this,” he muttered, more to himself than Farah, staring at the still-bloody Dagger at his side.
“You are good enough for me, Prince,” whispered Farah. “The Vizier is dead, Babylon has returned to normal...you have won! You don’t need to be perfect.”
There was a slight whistling noise as the irony of this last statement flew over the Prince’s head.
Farah moved closer towards him. “Please...don’t go...”
But he stepped backward, fingering the Dagger in its scabbard. It was time for another Grand Rewind.
Memories of his slower, sloppier journey flashed before him, in reverse. Wind tore at his hair. His fatigue lifted; he felt energized, youthful and ready to fight. And as suddenly as it had begun, it stopped. The Prince blinked; the Dagger and Farah were no longer at his side. He found himself standing in a familiar room: a chamber, empty of life, containing a rope, a pillar and a horizontal pole.
He smiled contentedly. Already he felt 42 minutes and 15 seconds younger. Everything had come full circle; he would rescue Farah properly this time...
  • Emulator used: VBA rerecording 20
  • Aims for fastest real time
  • Abuses death
  • Takes damage to save time
  • Abuses a ridiculous amount of programming errors in the game, making bloody fools out of the programmers responsible for the physics engine
  • PARENTAL ADVISORY: contains hot parkour action
  • Total Improvement: 21,436 frames
Make sure to enable left+right before starting this run.
Run description: This 2D reimagining of the console classic asks the age-old question: what happens when you combine one of those parkour dudes with a ninja and let him run around unchecked in a poorly programmed environment for half an hour? The answer was so traumatizing for the programmers that they spent the next year cutting their wrists and listening to Godsmack, which inspired their next game.
This is a substantial improvement over the author’s previous run, mainly due to optimization in key places. There are also old tricks, new tricks, and old tricks in new places.
   Well, I’ve gone through hell and back making this movie. Hopefully I will
   never have to touch this game ever, ever again. I’d love to see someone else
   do a 100% run ... and I’d gladly help with a route, but as for TASing it again – 
   not a chance.
     - Noah Tomlin, #1805: theenglishman's GBA "any%" Prince of Persia: The Sands of Time in 42:15.00
It seems that promises are made to be broken. Here I am again, and after eight months of development and tinkering (minus a three-week trip to Morocco, 10-day trip to Israel, a further 12 days at camp and time spent preparing to move to Halifax, Nova Scotia), I’ve managed to humiliate myself by destroying my previous run by almost six minutes.

Acknowledgements

Special thanks go to PJBoy and Comicalflop for being invaluable resources during the second phase of this redo (see history for more info), especially while Comicalflop was getting caught up in his Mischief Makers run in the fall.
Over at IRC, thanks (in no particular order) to Ferret Warlord (who actually "bought the game" to help me), Bisqwit, Blublu, Deign, AnotherGamer, Atma, mmbossman, pirate_sephiroth, adelikat, Nach, Tub, stickyman05, Tompa, Raiscan and Bag of Magic Food – you’re all amazing guys who kept encouraging (and tolerating) me while I posted frame differences in the chatroom and launched 30-line monologues about trick theory =P.
Also thanks to JXQ for his early encouragement and helping me to edit the prologue you read at the beginning; to alden for helping beta an early version of these comments; to Dragonfangs for some hex editing work; and to ShinyDoofy for encoding my WIPs as I went along.

History of the v2 run

In January of 2008, after my first run was published, I already had ideas brewing about a version 2, with my goal being under 42 minutes. I knew that sections of the first half of the run were unoptimized because of new movement techniques I had discovered late in the development of v1.
However, one major event served as the primary motivation for me to start working again: the ass-kicking my first run received in the post-publication ratings. Seeing all of these low ratings (entertainment-quality) – 7-5, 5-7, 6-7, 5-6 – from some of the top runners on the site made me realize that I needed to push this game further and entertain the elite at the same time if I was to make a name for myself in the world of tool-assisted speedrunning. (If it turns out later that these are average or above-average scores for a first-time TAS then I apologize; I needed all the motivation I could get, even if it happened to be false).
I started casually route planning a few days after seeing the ratings. Almost immediately, I discovered a nice glitch in S2R14b (all rooms in the comments get their names from cthrag yaska’s excellent guide over at GameFAQs), saving about 10 seconds alone. I reasoned that with this glitch, along with abusing a similar glitch in S4R5 and optimizing the first 10 minutes of the old run (which even I admit was sloppy and rushed), I could get the run under forty minutes, which I found to be no problem in subsequent route testing. I found more glitches along the way, of course. I started recording version 2 on and off, starting on January 22nd.
Fast-forward to May 12th, 2008, a critical day in the history of my run. At this point, I was about 25 minutes into version 2. I felt that I was being mean by depriving everyone of a WIP on IRC, so I decided to break my previous silence on technique and show a sneak preview work-in-progress, which ended just before the fourth boss. Then Comicalflop started frame hunting and asking questions about dodgy movement present in my old run. I protested, explaining away my movement choices and airhopping skills. That was when The Flop took matters into his own hands. It went something like this.
   (10:53:14 PM) Comicalflop: wow
   (10:53:20 PM) Comicalflop: ok, I found a way to get more height
   (10:53:23 PM) Comicalflop: when double jumping
   (10:53:53 PM) Kazuma: start run from scratch? 
   (10:53:57 PM) theenglishman: God no
   (10:53:58 PM) Comicalflop: well, no
   (10:53:58 PM) theenglishman: please
   (10:54:02 PM) Comicalflop: hey
   (10:54:11 PM) Comicalflop: nothing wrong from starting from scratch
   (10:54:39 PM) theenglishman: yeah but I'm so far in and the levels are such a pain in the ass
   (10:55:27 PM) Comicalflop: haha
   (10:55:35 PM) Comicalflop: I found a faster way to swing as well
   (10:55:38 PM) Comicalflop: lemme test this
   (10:56:07 PM) Comicalflop: ok
   (10:56:13 PM) Comicalflop: you're really going to hate me for this
And he obsoleted the very first room of my run without a single rerecord.
But far from leaving my ass sore from this savage beating, Comicalflop sent me on my way as only he could do, challenging me to beat his time and explaining his discovery of the 9/9 jump (see tricks below). (After two days of hemming and hawing, I did beat his time by two frames.)
Later on that night, PJBoy stepped in and provided me with memory addresses that helped me further understand the Prince’s subpixel movement. It turned out that the addresses shifted with every room transition. Adding packets onto the initial memory address proved to be too tedious and time-consuming and wasn’t all that effective. Thankfully, I got all the speed information I needed by fooling around with the addresses in the first room. I had to restart again on July 9th, when I was 15 minutes in, after discovering new essential properties of the 9/9 jump. Restarts, both large and small, became a recurring theme throughout the run's production
In Mid-October 2008, a close friend of my stepmother's passed away after a lengthy battle with lung cancer (see the dedication at the top). I was unable to attend the funeral (as I live 1800 km from home at the moment) but production of the run obviously stopped while I paid my own respects. It was around this time that Dov's death, along with essay upon essay and general work stress, caused to me to lose interest in the run throughout October, but eventually I was somehow able to get through.
Several restarts (I've lost count; I think it's six) later, along with many more partial restarts, this run is finally ready for your viewing pleasure.

Tricks used in the movie (new and old)

This section will reiterate old tricks and introduce new ones.

Basic Movement

  • Rolling is the fastest method of horizontal travel in the game (running up walls is faster vertically, but that technique is learned late in the game). Rolling is 1 frame faster than running, which in turn is 1 frame faster than jumping. If you hold down v>A[1] constantly, the Prince stops moving for a frame. However, if you roll optimally, the Prince runs for that “gap” frame instead of stalling, making this the most-used movement in the game.
  • Jumping right or left and then releasing the D-pad after one frame is the fastest way to climb up ropes or cloth. However, whenever I need to climb up just a bit to make a jump, I climb normally and save more time than I would performing that one extra rappel.
  • In a few rare cases, the Prince stops moving for one frame when transitioning from a roll to normal running. By starting to hold right at the optimal time, the Prince will keep running without stopping. It only saves one frame, and such instances are rare, but it’s still useful.

9/9 Jump

This trick, discovered by Comicalflop, allows the Prince to gain extra height when jumping, the equivalent of a whole other jump. I press >A, then press <>A up to nine frames after that. The prince will jump again, but the game still only registers it as one jump, allowing for triple jumping (see below). Because I don't have to press anything in between, allowing me to backflip cancel (see below) to perform a 9/9 immediately when turning around. Initiating a 9/9 before the ninth frame is sometimes needed to get the Prince on the ground faster.
It is not possible to 9/9 from a double-jump, or when jumping from a rope or pillar.

Airhop

Airhopping is a unique glitch that allows you to indefinitely jump underneath a platform. If the Prince jumps and hits his head underneath a platform (it must have collision detection on the bottom) or the underside of a wall, the game will reset the Prince’s movement status to “walking” for 2 frames. Jumping on either of those two frames will cause him to hit the wall again and repeat the process, moving forward slightly. This allows the player to skip small sections of the game by jumping underneath obstacles to the other side.
Airhopping must be performed with preexisting horizontal movement; therefore, double-jumping normally will never result in an airhop (I can get around this; see Double-jump landing cancel below). However, despite being an invaluable trick, airhopping is slightly slower than running because of the constant jumping, so the amount of airhopping that I use in this run is minimized to make the Prince go faster. This trick also works with Farah, but because of her short jumping height and the uncooperative level design, I don't use it with her in this run.

Backflip cancel

Normally, turning around on the x-axis creates a 10-frame opportunity to hold down A and perform a backflip. However, by only pressing A for one frame, the Prince does not perform a backflip but instead jumps normally, crucial in setting up optimal 9/9's. This is really a physics quip more than a full-blown trick, but it's crucial enough to be listed here.

Cutscene cancel

This trick is exclusive to S2. Cutscenes that show puzzles being “solved” can be skipped by switching to the other character 2 frames after triggering a cutscene. This saves around three seconds, depending on the cutscene in question. When playing as the Prince alone, such cutscenes cannot be skipped.

Death-Damage cancel

This is another S2-exclusive trick (and only useful in one room). If Farah is hit with something that pushes her back (i.e. a Sand Enemy or a jet of fire) the game resets how far she has fallen, a similar effect to grabbing a ledge in this and other games. Therefore, they can fall down much farther without dying.

Death Warp

Yet another S2-exclusive trick! When the Prince dies (or you save and then reset the game; not used in this run because it’s slower), Farah will always be by the Prince’s side now matter how far away she might have been from him when he died. This simultaneously helps break the game and avoids unnecessary and tedious backtracking.

Double-Jump Landing Cancel

If the Prince double-jumps and lands within 45 frames of triggering the second jump, he will go through a stalled landing animation which lasts 6 frames (if holding >) or 24 frames (if there’s no input). Pressing > optimally will stall the Prince for only one frame, similar to rolling suboptimally (see Basic Movement for more).
However, there’s a way to cancel even that one frame. Slashing the dagger 3 frames before landing will cancel the animation and allow the Prince to run normally. In the previous movie this was done well in advance, but further testing shows that slashing the sword at the latest possible time is faster, because jumping while slashing is one frame slower than jumping regularly (slashing also extends the Prince's hitbox, a serious Achilles heel when dealing with jumping near spiked platforms).

Down-B Sword Attack

Holding v and spamming B on the even frame is the fastest method of attack, which loops in 16-frame cycles (as opposed to 18-frame cycles with my old attack method, holding vAB). This requires meticulous subpixel optimization because of the crouch attack’s unusual hitbox.

Early Soul-Sucking

There are two types of enemies: regular enemies and Sand Enemies. Like the enemies in the console game, Sand Enemies require a finishing move where the Prince absorbs their souls with the Dagger of Time. This trick concerns the latter group.
Sex jokes aside, some Sand Monsters can be sucked in almost instantly (archers, spear jabbers) while other enemies (disc throwers, genies, whip mistresses and most other enemies) need to wait until their animation is complete for a certain number of frames (different for each enemy) before they can be absorbed. There is also an additional hitbox that determines how far away the Prince can be and still suck an enemy’s soul.

Event Trigger Freeze Cancel

When transitioning between characters, regaining control after a cutscene, pulling up from a ledge, or recovering from a fall, arrow shot or other heavy damage, pressing right (or left) at the optimal moment instead of holding down the direction makes your character move anywhere from three to seven frames sooner, depending on the context.

Freeze Ring Manipulation

In my last run, the Freeze Ring was only used during boss fights, but now I’m able to abuse the ring against enemies with long invulnerability periods or attack cycles, such as hammer swingers and spear jumpers. There is no set time-stop length for killing Sand enemies, as the amount of Sands required for such a fight is context sensitive, with factors such as the Prince’s attack level, the enemy’s HP, the amount of Sand remaining and the terrain playing large roles.

Hovering

Discovered by PJBoy, this trick works under similar conditions to the airhop, but instead of initiating a ground check by hitting the bottom of a platform, it initiates it by performing a sword attack. It is much slower than a regular airhop but is useful in a few places, most notably the (now non-existent) bridge in S1R12.

Instant Turnaround

Slashing the Prince's dagger allows him to turn around instantly in the middle of a backflip, which can then be followed by a double jump. This is especially useful once I acquire the Wall Rebound technique.

Wall Clip Jump

PJBoy discovered this invaluable trick that cancels out the ledge pull animation. It abuses the wall-clip (see below) for one frame, jumping into then out of the wall and performing an additional 9/9 to get onto higher ground (later on in the run, this is replaced with a double-jump). It saves 23 frames per occurrence. The diagram to the right demonstrates where one can use a WCJ.

Lion Statue Skip

Each Lion Statue has an invisible wall that lifts once the Statue is killed. However, it is sometimes possible to jump over the invisible wall (usually when given a boost via an airhop or 9/9) and bypass the Statue altogether. Unfortunately, this can only be done if killing a Lion Statue is not a required event to open a door, and because of this harsh condition it is only used once in this run, in S2R14b (S4R5 applies a slightly different tactic).

Smallhop

If you roll off a platform and into a pit, it is sometimes possible to jump out of it with what would normally be a double-jump, getting on the ground sooner and setting up a new roll. However, because it saves such an incidental amount of time (mostly four frames, but the amount can differ depending on the situation) it’s usually not worth it to waste frames setting up a roll optimized for a smallhop; however, when the opportunity rears its head I use it.

Thinroll

Sorry for the awful name, but I can’t think of a more appropriate one. This trick allows you to roll on thin platforms that have no bottom collision detection. Normally, when you hit vA on such platforms, the Prince drops through the floor, and when you hit v>A, he jumps forward. The key is to trick the game into thinking the Prince is on a different kind of platform. This is done by holding vA for two frames before landing, tricking the game into landing normally, then holding v>A for the remainder of the roll.

Triple Jump

This trick is a derivate of the 9/9 jump. At the peak of a 9/9, pressing A again makes the Prince jump 1.5 times higher than a normal double-jump when combined with a 9/9. Triple jumps can also lead into an airhop for an added combo bonus =P

Clipping through Walls

This is probably the easiest trick in the entire game; it was actually discovered in real-time and can easily be pulled off on a real Game Boy Advance. You need two intersecting walls/platforms in an L shape. If you grab the ledge of the top wall and hold v while dropping, the Prince will pass right through it. While inside a wall, the Prince can do a crouching-slash to move faster, or roll if his hitbox overlaps with the other side.

Anti-Tricks

These are the rules and limitations against the Prince and Farah’s abilities to move however they/I want.

Roll cancelling

It is impossible to cancel out of a roll without doing a crouch attack (which costs 16 frames). Therefore, when I have to travel a distance less than a full roll, I run, which is the second-fastest normal movement. In some cases where I have to wait for Lion Statues or other enemies with long attack cycles, I roll-cancel to get as close as I can to them.

Backflip-pillar rule

You cannot backflip onto a pillar without losing serious height because the game won’t register that you’re latching onto a pillar unless you are facing it. This can be remedied (somewhat) by performing an instant turnaround (see above).

Death rule

This applies exclusively to the Prince. Unlike Farah, the Prince is unable to cancel out of the death animation once he has started it. Only certain conditions can be used to cheat death (all of which are suboptimal and never used in the run).

Wall rebound freeze

Depending on the Prince's Y position when he rebounds from one wall onto a platform, the game will freeze his X speed for a certain amount of frames. I don't know the exact math behind it, but it's easy enough to manipulate that I was able to get optimal results.

Two-arrow rule

This applies exclusively to Farah. The game cannot register more than three (sometimes two) arrows on the screen (or even in a room) at once. If Farah attempts to fire another arrow, she will dry-fire, go through the animation but with no arrow for her effort. This is most problematic in S2R5a (see the room-by-room written commentary for more details)

(Lengthy) Time-Saving Commentary

The following is a blow-by-blow analysis of my new movie, and assumes a general knowledge of each of the terms listed in the Tricks and Anti-Tricks sections (if you haven’t done so already, go read it. Like, right now). If you want to see a frame-by-frame comparison of each room in the two runs, you have a lot of page-downing ahead of you. I'll try not to bore you with numbers, but no promises :/.

Title Screen

Oh God...I saved four frames on the title screen, name entry and opening cutscene skip. I feel ashamed.

S0R1

A quick 9/9 jump and earlier movements gets me to the rope faster. I also manage to get on the highest point on the rope, saving a whopping 40 frames of slow vertical movement up the pillar. Five more frames were saved due to tighter optimization and rolling immediately after landing.
Oh, and it’s not possible to skip the cutscene after this. (PJBoy made a habit of fucking around with me, claiming he found a way to skip this cutscene whenever I was well into my run.) I recommend turboing through it. Another four frames were saved by skipping the next cutscene earlier :(

Section 1: Real Princes Don't Need Tutorials

This section was designed as a tutorial, and as such, singular gameplay elements pop up in each level. When I was route planning, it gave me a good excuse to fool around and try to find the optimal input for each scenario, which would later come in handy when planning the more complicated rooms.

S1R1

Taking damage isn’t that much of an issue here (there’s a refill flare at the end of S1R3) so I focus more on running/rolling in a straight line and less time dodging bats. I cancel the lengthy “taking-damage” animation by grabbing onto the ledge, resetting the Prince’s falling distance, saving about a second. Additional time is saved due to the use of 9/9 and more optimal rolling, though I lost a few frames because of the different timing on the vertical spike.
I think I owe an explanation for what might seem like suboptimal movement at the end of this and many levels, in both the old and new runs. The optimal time for this room is actually 1,346 frames, four frames faster, if I had rolled at the end of the level. However, because you can’t cancel out of a roll (see the “anti-tricks” section above) the save room afterwards would be twelve frames slower, making it eight frames slower overall. Even with that, I saved four frames in the save room due to more optimal rolling in more convenient places.

S1R2

This room had me in a tizzy when route-planning because of what I believed to be a potential shortcut. Killing the mother bug, two of the three of the baby bugs and THEN the archer allows you to regain control of the Prince much earlier (like in my old run), but forces you to backtrack slightly and kill the second bug. I thought that, perhaps, killing all three bugs would be faster because of the lack of backtracking. It made sense to me; it took only 1 additional frame to kill the mother and all her kin, leaving the archer for last. But, through testing, I discovered that this method was actually slower.
The actual fight with the archer was faster thanks to earlier soul-sucking and a more optimal attack pattern. Grabbing onto the ledge afterwards instead of falling would have made me move faster, but I would also miss the bug entirely. I also used the low ceiling to airhop partly up the pillar at the end, saving a further second and a half.

S1R3

I killed most of the lag from the old run by using 9/9 to take a higher route and not exposing the game to an unnecessary amount of flame jets, as well as not having to spend another twenty frames climbing up the last pillar to reach level ground. Nothing else was changed, except the input was made a little cleaner if you’re watching with that on. It's possible to kill all the lag in this room but that would require taking an even higher route, wasting precious time to set it up.

S1R4

S1R2 was bad enough with its route-planning shenanigans, but S1R4 was the first room in the game to truly drive me up the fucking wall. When I realized that 9/9ing up the pillar was the only substantial improvement to be had in this room, I made an initial testrun of the level which lasted 1,358 frames. I saved three frames getting to and fighting the first Lion Statue, but for whatever reason, whenever I tried to replicate the rest of the level, I was always six frames slower.
I was eventually forced to painstakingly recreate the initial 9/9 pillar climb frame by frame (hex editing programs like TASEdit and QuickHex do not act kindly to this game for some reason), and then waste one frame getting into an optimal subpixel position for the second Statue. I spent two days experimenting with rolling and other tricks to get as close as I could to the Statue, eventually arriving one frame slower but a few pixels closer to the statue. This more intimate hitbox saved me two frames on top of the three saved during the first fight.

S1R5

I skipped the Sand Lizard this time using 9/9. It’s a shame, because in my old improvement (the one destroyed by Comicalflop) I had a slower but much cooler trick, a backflip right over his hitbox that needed frame-perfect precision to pull off and stretched the collision detection to its limits (it's not possible to single-jump normally over the lizard). Oh well, it’s all in the name of a few frames saved I guess. The timing of the bats is friendlier for me here, saving more time not having to refill my health at the altar. For the curious, there's an entire section I skip further up the pillar. I suggest you check it out to see what you've missed.

S1R6

This was my first real test optimizing 9/9 in a backtrack-heavy level. The route planning for this room was pretty interesting, because I always had several options open for optimizing backtracking in any given section or on any given platform.
That second rope was a pain because I had to do a stalled 9/9 up to the optimal part of the cloth while abusing the spiked wheel’s uneven hitbox. In the end, it was impossible to get a full 9/9 off that jump, but what you see is the highest I can get without being hit by the spike and dying.
It might seem suboptimal to backflip at frame 8,658 instead of 9/9ing, but it’s actually a bit faster because of how the timing works on the way to the yellow switch. When jumping from the yellow switch to the cloth and then rolling under the wall, standing to the right puts you in a slightly better subpixel position but it’s not enough to save an additional frame in this room.

S1R7

For whatever reason, the game won’t allow the Prince to roll optimally on frame 9,316 so I have no choice but to stall for one frame (so that part is optimal). This room marks the first instance of Wall-clip-jumping (a.k.a. WCJ) in this run. In this particular case, the WCJ, instead of pulling up as in the old run, allows for better trap positioning, allowing me to roll right past the second spiked wheel without having to wait for it like last time, saving 2/3 of a second. Positioning the Prince after the WCJ to get two rolls in without overshooting the platform (thus falling and dying) was...interesting to say the least. =P

S1R8

9/9’s like the one at the start of this level are laughably easy because I can use the spikes at the top as a marker for how high I can go. I used the crouch-attack method on the lizard and axe boomerang guy, and another WCJ on the last ledge in that room.

S1R10

Just so you know, S1R9 is marked on cthrag yaska’s map as an optional room to get some Sands of Time potions. Going there is not required and therefore I don’t do so in this run.
Anyway, this is the first of two rooms in the game which use the invisibility flame, and it’s no exaggeration when I say that this was absolute hell to optimize. Firstly, I would waste more time breaking the fall than taking damage, meaning I had to rearrange some of my later damage modeling to compensate for this. Secondly, you can hardly see the fucking Prince when he’s invisible, and I can’t imagine how hard these sections must be on a small GBA handheld. They were hard enough for me playing full-screen, 800x600. So yeah, most of this level was just a tedious slog. Mind you, getting rid of the first two graphics layers helped a bit, but not much.

S1R11

For a room that consists of so little, it was surprisingly hard to chart an optimal route, especially the movement on the pillars. I found that right after the archer, rolling into the fall on the pillar would cause the Prince to fall short enough so he didn’t take damage on the way to the axe thrower. Said axe thrower wasn’t cooperating on the soul-sucking side either. I eventually managed to kill him properly. Jumping over the archer's arrow is 8 frames faster, but it throws off the jump count and would go against the Halftime Rule, losing my essential smallhop in S1R12a.

S1R12

Waiting for the spikes on the first pillar is way faster than damage boosting off of them. I also used 9/9 to get up higher on the pillar, and I was less concerned about damage now because of the required refill before S2R1 anyway (thanks to the damage layout I created). The Prince becomes a slightly bigger target for the bats when rolling, but subpixel optimization allowed to me save a few health points for the backtracking portion after the boss.
Thanks to PJBoy, I’m able to skip the bridge here by hovering over it. I wait one frame before initiating each attack in the hover so as to spend more time running, the fastest method of travel in this situation.

S1BOSS

For the first three boss fights with the griffin, it has to complete its attack cycle before it dies. Therefore, I try to minimize lag and provide entertainment by killing the griffin as quickly as possible. It’s possible, but a lot slower, to stay on the ground while the griffin is attacking, but even though attack frequency would be faster, I would get in less hits because the griffin swoops in very low on the ground, and his attacks cost 5 HP.
Additionally, staying on the ground rather than jumping makes the death animation lag one frame less. And yes, for some reason your first attack ALWAYS misses, so I whiffed one swing before I started attacking so I could nail everything else after.
I think it might be possible (but much, much slower) to skip the double-jump scroll entirely. If I ever do a minimalist run (pretty unlikely due to potential viewer boredom) I’ll look into it.

S1R12a

This room was initially hell to optimize during my first few restarts, mainly because I became convinced that my newly-created route was slower and, therefore, spent days trying to create a faster frame route rather than stick with what I had. Even worse, I became so convinced that I overwrote the savestate containing my old route, a newbie mistake for which I will never forgive myself.
Later I had to trade off lots of tiny little shortcuts to optimize the timing of the spikes while still getting to the pillar as fast as possible. Three days spent on that stupid room. This was all before I discovered the hovering trick in the first pass of this room, of course. In the end, it turns out the lack of a bridge actually helps set up a smallhop that skips the pillar altogether!
And yes, I am actually swiping the dagger near the end of my jumps to continue momentum, but I’m doing it on the last possible frame, as explained in the tricks section, so you can’t see it while the emulator’s running at 100%. The health refill at the end is mandatory resource-management-wise, because going out of my way to save damage would not compensate for the time spent at the altar here.

Section 2: A Whore! A Whore! My Kingdom for a Whore!

FINALLY, we move on to section 2! *cheer* This section consists mainly of optimizing old routes through 9/9, optimal rolling and the like, as well some major major sequence breaks which I’ll get into later on. The entire section is designed around quote-unquote “teamwork”; you’re supposed to alternate frequently between the Prince and the princess, Farah, to solve puzzles and backtrack. But as I show here, there’s not a lot of “teamwork” do be done =P

S2R1

This room is a perfect example of the kind of improvements you’ll see early on in this section. Every improvement comes from basic optimization and speed abuse.
You might be wondering why, right after hitting the bell, I keep jumping when I have continually stated in these comments that rolling is faster. The answer: the 82-frame cutscene with the door triggers when your feet touch ground after activating the switch; therefore, I try to stay in the air as long as I can and move continuously before the cutscene inevitably triggers. As for that last jumping puzzle, you can’t smallhop off those retracting platforms for some reason, so I have to settle with regular jumping.
On a completely unrelated (and equally useless) note, if you grab onto the ledge after hitting the bell the cutscene won’t trigger and the puzzle-solved chime will loop indefinitely. However, the cutscene will trigger once you let go of that ledge. Plus it’s really slow, even if it is funny.

S2R2

The first smallhop in the run right out of the gate, and we’re off (so much for the fragments). Going up to the bell, I use the momentum of that moving platform to gain some extra speed. The longer sword swipe I take at 19,492 makes no difference movement-wise, because I’m moving vertically, not horizontally. I found a new technique for boosting off the spike and onto the switch that is 41 frames faster. I delay for a frame before hitting select because if you hit it right away, the cutscene won’t cancel properly and will immediately trigger once control is brought back to the Prince.

S2R3

   <Comicalflop> "new from theenglishman! suicide yourself in under 26 seconds! guaranteed!"
Yes, the death at the beginning of this stage was intentional (see “Death Warping” in the tricks section). The rest of the route was mostly a pain to optimize. Because the platforms in this section are so small, not allowing much maneuvering for rolling, most of this room is just running and jumping, meaning a headache for me trying to keep the jumping to a minimum to make the Prince move faster. Similarly, each of those dagger swipes are done at the last possible moment in order to minimize the amount of time doing it.

S2R4

Allow me to introduce...the 9/9 triple-jump freeze-cancel airhop to double-jump (for massive damage time saved). This trick, found on frame 21,528, showcases all five major movement tricks in one (except rolling)! A quick backflip after letting the basket fall slows the Prince down a bit but skips the momentum delay cause by grabbing onto the rope below. Then it’s time to hit the select button and start backtracking with Farah.

S2R3a

It’s time to play as Farah for a while. Allow me to digress for a moment: Farah’s controls, especially compared to the Prince’s, are absolute bullshit. Her movement is painfully awkward, and her speed lags all over the place. Her jumping hitbox is awful, sometimes clipping right through platforms that she should be able to clear with her eyes closed. Not only that, she can take less damage and is much more fragile than the Prince, and her jumping controls are stiff and imprecise. Thank God I only need to use the bitch for a few minutes in this run.
Like the Prince, jumping is one frame slower than running, and even slower than that is letting an arrow fly while in midair (as if that wasn’t enough, it also has a slight landing lag that can be partially nullified by pressing the D-pad on the optimal frame or by landing while the initial animation is running). I love it how that second arrow breaks as it is about to pass through the obviously open door. I guess Ubisoft added an invisible wall that works only on projectiles.

S2R4a

It’s possible to duck under that spiked wheel three frames sooner than I did, but that would involve taking damage and going through the damage animation, and ends up being three frames slower. And no, it’s not possible to jump over the crate from that angle as Farah, no matter how many times I tried. Her jump is just way too short.

S2R5

There’s not much to the first pass of this room. The only notable improvement comes from rolling instead of using the much slower <vAB attack before touching the switch and ending the room. That saves six frames.

S2R4b

I saved two frames by holding right at the optimal time instead of straight through. Not much else in this room.

S2R5a

This room is sped up by abusing Farah’s arrows. When she fires an arrow, Farah’s jump elongates, and while it’s slower than jumping normally, it can sometimes be used to jump earlier and save time, or even bypass obstacles altogether (like a few of the ropes in this level). In addition, the excellent timing near the switch lets me jump right over the spiked wheel without delay, saving around five seconds frames alone. By moving while waiting for my arrow to hit the bell, I get to be in a better position for S2R5b. The route to the door after switching back to the Prince has also been improved to take advantage of 9/9 and smallhopping. No point in stopping at the fountain; it would just waste time and I have enough health as it is.
Interesting note: if you knock one of your own arrows out of the air, Farah won’t shoot any arrows from her bow for a while (like near the spiked wheel). It doesn’t impact my play, but I just thought it was cool.

S2R6

Most of the improvements here come from smallhopping at the start, using 9/9 and not airhopping in the latter half of the room. Since airhopping is slower than normal movement (though it looks cooler), I save a lot of time just in that last third of the level. Also, a lot of care was given to the damage mapping in this room, making sure I lost a specific amount of HP without losing time. I balanced it out so that, when I got to S2R11, I had 14 HP remaining. You’ll see why then. Also, it’s actually slightly slower to thinroll on those platforms in that context; it ruins the timing and subpixel positioning needed for the jumps I take. Thus, I don’t do it.

S2R7

Anyone who saw my old run remembers how I jumped right on the edge of those spiked platforms without taking damage, and the same trick returns in this run too! But because it abuses the back part of the Prince’s hitbox, it can only be done on the far edge of a spiked platform.
There are three flame jets near the beginning of the level that I run right past without destroying. This is because it takes five extra frames to destroy them as the Prince, compared to three extra frames to shoot them down as Farah when returning to this level in S2R7a. This room contains the first example of thinrolling, and unlike in S2R6, here it’s actually useful.

S2R5b

Those 10 frames spent running come in handy here. Otherwise, it’s the same old route. I run right past the fountain, and what looks like a suboptimal save room is actually perfect because of Farah’s maddening small jump hitbox.

S2R6a

I use Farah’s arrow to elongate a jump and take out that extra flame jet on the way up the rope. I changed the route here slightly by jumping onto that other platform slightly to the left instead of wasting all that time pulling up on the ledge.

S2R7a

This room is three frames faster despite the addition of the flame jets, mainly due to route tweaking and optimization, as well as more optimal rolling. It was quite annoying trying to perfect it this time.

S2R8

You really need to play the game to understand just how much is skipped in this room. This inane and incredibly stupid puzzle involves crate pushing, backtracking with Farah and the like, as well as having to visit two additional rooms (which are skipped with this break). This major sequence break was also in my old run, but now it’s fully optimized. Every one of the 55 frames saved in this room had its roots in routine optimization, which is kinda sad when you think about it.

S2R11

This is why I needed 14 HP going into this room. Each flame jet deals 7 damage: I perform a quick 9/9 over the flame jet, taking 7 damage, hit the checkpoint, and commit suicide with 7 further damage (warping Farah in) without having to jump into the pit and waste more time. It’s quick and (relatively) simple. I minimized airhopping with the Prince while bringing him in from the seesaw, and other than that this room is more or less the same.

S2R12

This room was already broken, and now it’s optimized! Another 17 frames saved due to thinrolling, minimizing the sword-swing time and other basic new maneuvers. On an unrelated note, I love the music in this game. It’s a shame it gets cut out halfway through this room :(

S2R13

Oh God, this room is so boring, both in realtime and tool-assisting it. There’s nothing interesting here. However, it is interesting that there is nothing interesting considering the amount of interesting things that happen in this run.........*head explosion*

S2R11a

One of two rooms in the game that's remained exactly the same.

S2R12a

The main timesaver here is the ability to cancel out of part of the damage animation (it wouldn’t be enough to save time in S2R4a. Again, the actual ROUTE in my old run was perfect, I just needed to optimize the input.

S2R13a

Farah’s swan song *sheds a non-existent tear*. The death cancel I mentioned in the tricks section is used to avoid a few jumping puzzles, abusing the highly convenient flame jets so Farah can take damage and cancel the fall. Unlike the Prince, Farah can basically cancel death anywhere because her fall only takes away your control of Farah and doesn’t render her dead until you hit the ground. Therefore, I’m able to abuse this bug on two different occasions to cheat death.
We hit the switch, and – say goodbye to Farah. You probably won’t miss her. I didn’t. For the Prince’s section, the new damage mapping means I needed to improvise a bit in this room, but it’s all good. For this route, this part’s perfect obviously =P

S2R14

Whoa...how could I have missed this break in my old improvement?? Well, it’s self explanatory I guess; I use a 9/9 triple jump airhop (oy vey!) to hit the bottom of that platform early, rendering Farah even more useless than she was before, and saving around 900 frames on its own. Yay. I also saved time doing a triple-jump up a large section of the pillar. On to the boss!

S2BOSS

Finally, the Prince manages to save some laundry money by killing the boss in only one cycle. This was HELL to plan, and even worse to optimize. I don’t like this boss much because it moves around constantly. Most of the later bosses just stand there and throw fireballs at you, but this boss forces you to get off the couch and move.

S2R14a

This is one of the big new tricks, abusing the Lion-Statue skip. You won’t see this trick for a while (and only in one other spot after this anyway) so don’t blink. You’ll miss it. Make sure to laugh at the right moment for maximum impact.
Commentary for Sections 3-5 and the final boss fights is coming soon. Please be patient!

Frame Improvements: v1 vs. v2 (aka The Big Fat Statistics Table)

If you dislike looking at a bunch of numbers, you have quite a bit of scrolling down ahead of you.
Here’s a breakdown of how my movie has been improved (room names are modeled after cthrag yaska’s GameFAQs guide). Levels begin on the first frame loaded and end the frame before the loading blackout.
UNUSALLY LONG NOTE: The 10 loading frames between each room, the altar/fountain rooms (which have with some exceptions remain the same), the title screen/name entry (4 frames saved) and skipped cutscenes have been combined into a separate category in the bottom and are not part of the individual level frame total. Also, if I have to backtrack in a room (i.e. after a boss or switching to Farah who’s in another room) I’ve added extra letters (S2R4a, S2R4b etc) to denote which backtrack sequence it is.
Room NameOld Movie (length, frames)New Movie (length, frames)Frames Saved
S0R139234052
S1R11435134685
S1R213951276121
S1R352249824
S1R41423134875
S1R556548976
S1R612891131158
S1R774970466
S1R81358129375
S1R101200113962
S1R111319124575
S1R12 17071597111
S1BOSS1537151919
S1R12a73864495
S2R173671323
S2R21075955120
S2R31110109813
S2R457352153
S2R3a56755612
S2R4a6346296
S2R51801765
S2R4b44422
S2R515031117386
S2R617361623113
S2R712841166117
S2R5b998910
S2R6a104897276
S2R7a96995514
S2R8107799087
S2R111307128225
S2R1287985821
S2R1312761173103
S2R11a80800
S2R12a4984980
S2R13a1167975192
S2R14,S2R13b,S2R14a[2]20751108967
S2BOSS25622176386
S2R14a(formerly S2R14b)1109414695
S3R12068198287
S3R2829645184
S3R3496936681301
S3R473970732
S3R539563527429
S3R626832305378
S3R720691952115
S3R8719518201
S3R9780572208
S3R101393978415
S3R1127232552171
S3R1271464767
S3R131367127394
S3BOSS1888186721
S3R13a919745174
S4R11092990112
S4R220351739296
S4R316341318316
S4R413232701053
S4R565558075
S4R615051169336
S4R727562655101
S4R81426136561
S4R935713338233
S4R101125875250
S4R1144183644774
S4R1214961325171
S4R131252115795
S4R1418291258571
S4BOSS36533402251
S4R14a4794763
S5R152134336877
S5R215491314235
S5R313221132190
S5R419701418552
S5R535783412166
S5R651934750443
S5R71450848602
S5R823778741503
S5R979273656
S5R1044633939524
S5R11768644124
S5R12868710158
S5R1318391285554
S5R14595947841175
S5BOSS28932563330
S1R1a3033012
CAVE42240814
FINENC349323731120

Conclusion

Well, I had fun making this run, despite the hard work and heartbreak. As the cliché goes, I hope you all enjoy watching it as much as I did making it. So long for now. I won’t pull a Saturn and say it’s perfect, but I for one think it’s pretty damn good. But then again, my opinion is a bit partial :P. All I can say is I've given it my all and I will leave this game alone, and I'm just glad it's finally, finally over.
[1]v = down, > = right, < = left, ^ = up
[2] Because a sequence break allows me to skip some of these rooms, they have been combined into one section to compare.

NesVideoAgent: Hi! I am a robot. I took a few screenshots of this movie and placed them here. Oh! I also corrected the ROM name.
  • You indicated 1232 - Prince of Persia - The Sands of Time (U) (M3).gba
  • I updated it to Prince of Persia - The Sands of Time (U) (M3).gba

mmbossman: Impressive improvement, both in speed and in style. The difference between this and your last run was very distinct. Accepting as an improvement to the published movie.
ShinyDoofy: Processing...
Last Edited by adelikat on 8/31/2023 6:53 PM
Page History Latest diff List referrers