TASVideos

Tool-assisted game movies
When human skills are just not enough

Submission #5730: The8bitbeast's PSX Crash Bandicoot: Warped "105%" in 1:55:33.38

Console: Sony PlayStation
Game name: Crash Bandicoot: Warped
Game version: USA
ROM filename: Crash Bandicoot - Warped (USA).bin
Branch: 105%
Emulator: Bizhawk 2.0.1
Movie length: 1:55:33.38
FrameCount: 411100
Re-record count: 221461
Author's real name: Jake Miell
Author's nickname: The8bitbeast
Submitter: The8bitbeast
Submitted at: 2017-12-03 02:24:22
Intended tier: Moons
Text last edited at: 2017-12-06 10:20:36
Text last edited by: Spikestuff
Download: Download (256656 bytes)
Status: publication underway
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
Author's comments and explanations:

(Link to video)

Category Description

This is the full completion category of Crash 3, where you must get 105% and end on beating Cortex and getting the 105% ending.
This category in it’s pure unrestricted form would be very similar to any% since you can use item glitch to get all the needed items and go straight to the end. Without restrictions, 105% would be under 10 minutes and not worth watching over any%. As a result there are 3 restrictions worked into the ruleset for this TAS.
The first restriction is no item glitch, this is the most important restriction and actually makes 105% worth running.
The second restriction is no zip-zagging (zip-zagging video: https://youtu.be/GIbr3T889TQ ). By extension this also means no gate glip. This was probably the most difficult to decide rule for the run. The reason for this is to make the movement closer to what a human would perform and as a result, this makes the run much more entertaining. Zip-zagging is impressive for the first few levels, but after a few levels they begin to all look the same. I asked many people in the community and there was a very strong preference to not using zip-zagging in this TAS. There was also some feedback on the discussion for the branchless Crash 3 TAS indicating that a no zip-zagging run would have been much more entertaining. If a 105% TAS with zip-zagging is submitted in the future, it should be considered a separate branch.
Note: This is not to be confused with zig-zagging which is a fundamentally different technique and is still allowed, it gives a much smaller speed boost and is used RTA.
The last restriction is that SFX will be left on. Usually runners turn off SFX which skips some cutscenes, but as a result only the music plays for the run, but this is undesirable for the viewers of the TAS. While I fundamentally disagree with keeping SFX on in a pure any% TAS, restrictions have already been made for this category so it is more reasonable to make one more. The other argument for SFX on is that the final time can be calculated as if SFX was off which will be seen in the timing section.
To summarize this category gets 105%, then beats Cortex with 3 restrictions:
- No item glitch
- No zip-zagging
- SFX on

TAS Timing vs. RTA Timing

There are 3 differences in timing that makes the TAS time and theoretical RTA time drastically different (over 9 minutes difference) for this category.

This is incredibly important to keep in mind because from looking at the TAS timing it appears that the TAS is only 7 minutes faster than RTA runs on speedrun.com, in reality the TAS is over 15 minutes faster than RTA. Of course these are completely different goals and tool assisted runs should not be compared to RTA, but it’s important to have a consistent final time for both RTA and TAS to get an idea of how fast each method truly is at beating the game.

Standard TAS timing starts from power on and ends when the last button is pressed (triangle to skip speed shoes text in Crash 3). This is a good standard method but it differs from the method that speedrunners use. There are 3 main differences in the timing methods.

The first difference is the timing itself. TAS timing starts from power on, but RTA starts from when you gain control of Crash (about 48 seconds after power on). Both timing methods end on the last input.

The second difference is use of SFX. I chose to keep it on, losing over a minute but most RTA runs turn it off.

The last and most significant difference is the loading times. As it should, Bizhawk emulates the loading times for a PS1 accurately as far as I know. However, it’s possible to play PS1 games on a PS2 slim which has a feature called FDS (Fast Disc Speed) which drastically reduces loading times. Naturally, most speedrunners play using a slim PS2 with FDS. This costs about 6 seconds in every single level.

The final RTA time for this TAS (if SFX was turned off and FDS was used) is 1:46:20.

It is possible that this could vary by up to 5 seconds due to global cycles being affected by absence of SFX cutscenes.

RAM addresses and scripts

Lots of stuff is dynamically allocated in this game, so I rarely used a RAM watch. A few values were always in the same address shown below
069034 Global Timer
065D70 Screen Scrolling Progress

This TAS wouldn’t have been possible without the use of Scripthawk: https://github.com/Isotarge/ScriptHawk

Scripthawk supports multiple games including Crash 3. It was useful for this game by dealing with the dynamic allocation and giving all of the values position, velocity etc. A lot of the way the dynamic allocation works was figured out by Pirohiko, whose original script unfortunately is incompatible with Bizhawk.

Time Trials

This game has you complete each level twice (apart from a few secret levels). The first pass is to get the crystal, then once you have the crystal you can do the time trial. Some levels intend you to do more than 2 passes but this can be avoided in all but one case.

One noticeable thing about the time trials is that almost always the time achieved in the TAS isn’t the fastest possible time. This is because the IGT and RTA strats differ significantly. Furthermore, sometimes I get all the boxes in the time trial pass, which takes significantly longer. Playing for IGT can be extremely boring in some places and take much longer in real time. There are also already TASes of most time trials in the game so it wasn’t worth sacrificing real time to get better time trial times in this TAS.

Miscellaneous Glitches

N. Tropy cutscene skip

When leaving the N. Tropy fight, by skipping the blue vortex cutscene on a specific frame the cutscene of Crash tumbling out of the warp portal is skipped. After getting opinions from the Crash speedrunning community and trying a lot to get this otherwise, it seems that this glitch only works with SFX on since it has something to do with the blue vortex cutscene. The only place where this glitch happens in the run is after the N. Tropy fight.

The vigilant viewer will notice that this glitch happened after the Tiny fight in Lapogne36’s TAS #5368: lapogne36's PSX Crash Bandicoot: Warped "item glitch" in 18:27.42, but not this one. I attempted every single possible frame for skipping the cutscene and many, many different frames for starting the cutscene and couldn’t get the glitch. However, I believe that the glitch is not possible unless you are taking crystals out of the Tiny fight using item glitch (which Lapogne did and I didn’t in this TAS). I used the tiny fight from my TAS, but got a crystal from it and managed to pull off the glitch in 4-5 tries. This is extremely strong evidence to conclude that it’s only possible with crystals and there is no way that I could have done it in this TAS.

Yellow Gem Early

Towards the end of the Hang ‘Em High Time trial I jump to the left of the screen to get the yellow gem early. This avoids entering Hang ‘Em High a third time from the secret warp room. This trick is not as simple as jumping over since the camera often doesn’t follow you. Normally the method used by RTA runners is to land on the moving platform to the right of the gem and wiggle back and forth to scroll the camera. In the process they ride the platform to the right and have to jump back over to the left to get the gem after the ride.

The method used in this TAS skips the platform ride using some very precise camera positioning. The camera position is stored at 0x065D70 and often loops over back to 0 when there is a corner in the path that the camera would normally take, or in this case a T junction. If you get the camera scrolling position to exactly hit 0 while you’re off screen going towards the yellow gem then it will allow the camera to venture off the main path and snap towards the gem. This precise camera position is incredibly hard to hit since at normal movement speed this camera value scrolls hundreds of units per frame. For this reason, this trick would be TAS only unless a very specific setup could be found. One important thing to note about this trick is that I do actually need the camera to look at the yellow gem, otherwise you cannot collect it.

Button glitch

Normally when you enter a portal into a level, you get sucked in and lose control, then the level loads. If you’re spinning and jump on the same frame you touch the portal then you can move around while the level loads. This has an application in 105% with the time trials, you can load the wrong target times for the level by stepping onto another button as the level loads. This often helps especially when I use the time trial pass of a level to also get the box gem.

In this TAS I sometimes use button glitch to have more time for playaround. Sometimes I don’t use it because NSJ is the fastest way to enter the portal and I need to slide spin for button glitch, but when slide spin is the same speed, I do a button glitch. Doing the glitch itself doesn’t save or lose any time as long as your movement doesn’t cause any lag.

Shake a Cutscene

When entering some levels I use a button glitch and body slam just before the level loads in. This has the effect that you hear the sound of the body slam, but Crash never visually hits the ground. Another side effect is that the blue vortex cutscene has a shaking effect like a body slam would normally cause. If you don’t have a blue vortex cutscene, then whatever level you are going into shakes at the start.

Movement and optimization Tech

I’ll explain all that I can about movement below, but I’ve also made a video tutorial explaining all forms of movement in this game aimed at speedrunners: https://www.youtube.com/watch?v=Cun2Eokv9xg (note: I don’t talk about zip-zagging in the video)

Zig-zagging and normal movement

When not invincible the fastest form of intended movement is sliding. Crash will completely stop at the end of a slide, but by performing a spin or a jump at the end it can be avoided. A popular form of movement in Crash 3 is a Neutral Slide Jump (NSJ), this is done by jumping at the end of a slide and letting go of the analog stick. If you don’t let go you snap straight back to walking speed, but if you let go you only gradually lose speed in the air. The other option for movement is spinning after a slide. This snaps you back to walking speed but has the advantage of being able to start a slide again sooner than jumping.

Zig-zagging is another useful technique. It is done by alternating the adjacent directions to your direction of travel. For example to zig-zag when holding up, you will alternate between up+right and up+left. The best results are achieved by using the analog stick. My current theory on zig-zagging is to do with the range of the analog stick. The coordinates for a direction on the analog stick are in a square 0 to 255 for both x and y with (128, 128) being central. It seems that if you are on the edge of the circle with radius 128 around the center then Crash would move at the intended full speed. However in the corners of the analog range, the distance from the center is sqrt(2)*128. I don’t know if this is the cause but it is a consistent theory and the speeds do seem to get multiplied by roughly sqrt(2) when zig-zagging. The analog stick in the virtual pad in Bizhawk provides a good visual representation and an image of this is linked below.

Crash can zig-zag when sliding, spinning and jumping but not walking. It would seem that you wouldn’t gain any forward speed from my explanation since you only get 128 range forward and 128 right or left but you do get more than 128 range worth of forward speed because crash doesn’t turn to face the diagonal direction immediately.

Somewhat counter intuitively, if you have perfect zig-zagging, spinning after a slide is faster than jumping in the long run due to being able to perform more slides. I calculated some averages for these forms of movement which are summarized as follows

Movement type Average units per frame
Slide Spin (no invincibility) 6.63167
NSJ (no invincibility) 6.2721
Running Shoes* 6.7599
Slide Spin (invincibility) 7.05674
Slide Jump (invincibility) 7.4456

(*) With jumping and zig-zagging, applies to both invincibility and no invincibility movement, likely an overestimate.

Zip-zagging

As mentioned earlier, zip-zagging was not used in this run but I’ll give a brief overview here for completeness. Zip-zagging is a glitch allows you to build up negative speed in place reasonably quickly and it’s theoretically unbounded. Then you can use this massive speed to get through the levels extremely quickly. To build up speed you need to be jumping while not moving and alternate between up left and down right (or up right and down left) every single frame (30fps). Spinning makes this process slightly faster. Being on the ground makes you lose speed so you should be jumping as much as possible. The part of this glitch where you build up the speed is TAS only, although it is possible to pause buffer it if you’re bouncing on something (so you don’t have to worry about jumping), however it’s extremely difficult https://www.youtube.com/watch?v=IwZUVGIwZ4c

Global Cycles

This game has a lot of things which are global cycles (some enemies, tomb wader water level, magic carpets, opening and closing doors in tomb levels, etc.). One of the most important global cycle is in the water levels, with the spinning wheel zappy things. Due to these I had to route warp room 1 and 3 completely around them. This meant that I often had to redo multiple levels due to bad cycles. Another important global cycle is the opening and closing doors in the tomb levels. These sometimes get in the way in this run but in almost all places I avoid them. In the time trial for bug lite I have a very close call with one of these doors but I get past frame perfectly. If you can cause a lag frame you move while the global timer doesn’t increment so I had to use this to beat the door in the bug lite time trial. If you take damage just before a door closes, you delay it closing for quite some time. This is used in many places in the run. Also if you get invincibility, the doors will stay open. Similarly the water in tomb wader is a global cycle and it stays down when you have invincibility.

Movement Tech for Non-Platforming Levels

Swimming Levels

In swimming levels, spinning is the fastest form of movement but between spins it’s good to press X to paddle. Paddling is especially good while travelling vertically since spinning is less fast for a little while after you swap from horizontal to vertical. When in the submarine, boosting with circle on the first frame possible is the only real tech. There are also some sneaky shots to get rid of some obstacles. There’s some tech called box boosting (I believe it was found by BlitzPhoenix98). When you’re swimming over a box (or coral) there’s one frame where if you spin, you get a boost in speed (roughly 1.5x speed for the spin). This is frame perfect and doing it any earlier makes you lose all of the speed. Sometimes depending on your position, the frame might not exist or you might gain a different amount of speed.

Tiger levels

These levels generally start with coco walking up to Pura. To optimize this, jumping and zig-zagging is used. You have to start walking for a little bit to reach full speed before jumping and zig-zagging. The main thing to optimize is jump spacing, I want to land directly on the spot that triggers the jumping onto Pura cutscene. Too late and I waste time in the air before the cutscene starts, too early and I have ground movement towards the cutscene which is slower.

The strategy on Pura is to hold the boost button and jump as much as possible. Each time you jump it roughly doubles your speed for a frame (so each jump saves roughly a frame). This adds up quickly over the whole level. I use a strategy where I get underneath the side railing of the level and use the collision down there to jump. I learnt about this method by watching the time trial TASes, as far as I can tell it was originally found by trihex. This is very tricky to do without falling down or accidentally jumping back in bounds and often you can only do it in short bursts before a hill comes up which means you have to get back in bounds. At the end of the 2 tiger levels I do a cuddle skip, which skips the animation of Coco slowly hopping off, then cuddling Pura. This glitch saves about 5 seconds.

Jet ski Levels

These are probably the least tech filled levels but there are still some tricks. The main thing is being aware of the level axes. If you are travelling along an angle within 45 degrees from an axis you will travel at full speed along that axis, so for each direction parallel to an axis, there’s a 90 degree range where you can travel full speed in that direction. The speed in the other axis direction varies along the 90 degree range, minimizing in the middle and maximizing at the edges. This also means that if you move at an angle exactly between a pair of axes, you will move at full speed in both the x and z direction (sqrt(2)*normal full speed). Normally this isn’t used because you need to travel primarily in the direction parallel to an axis. This means that there can be some places where it looks like the TAS loses time, but it isn’t because it’s travelling at full speed along an axis where it needs to.

There are also waves which are on a global cycle. Sometimes these waves can speed up or slow down Coco but it’s rare, I took advantage of the speed ups wherever possible. The waves matter for getting the right height off ramps to break boxes in the air.

Driving Levels

If you press X at the right time at the start of the level, you get a boost and a wheelie for a short time. Depending on when you start holding X for the boost, different results can happen. These vary up to about 1/15th of the distance you’d travel in one frame. I make sure I get the optimal boost in all levels (which varies a lot depending on the level!) but it’s possible that this distance wouldn’t have even saved any frames. The basic strategy in the driving levels is to go over a boost to get a wheelie and try not to lose it. This involves sneaking through gaps in obstacles and driving straight over holes. You can brake to turn a little bit sharper while still keeping the wheelie but this was only useful in the level area 51.

If you do have to lose a wheelie, you let go of X. Somewhat counterintuitively if you let go of X then press it right away you actually slow down faster. What you should do is let go of X and don’t start holding it again until you’ve gone back down to normal driving speed.

Another thing to mention is that you can travel at is a very limited set of possible angles, rather than an approximate continuum like one would expect.

Due to this, precise analog inputs are not extremely important since you ‘snap’ to particular angles on certain frames and finer analog precision doesn’t make that any more precise. Nevertheless, I make sure to always use precise analog inputs when it is necessary.

An interesting thing with angles is that you can travel almost forward and a little bit to the left or right, but still keep the full speed forward. Basically, it doesn’t take away from your forwards speed but just adds sideways speed, so technically you’re covering more distance per frame (although no farther forward). Once you turn too sharply you start covering less distance forward. There are similar ranges like this centered around not forward, e.g. the fastest forward speed is about 38, then there is a range of about 10 degrees where you can travel 37 (with varying horizontal speed), then the next range is about 34 and so on. My strategy for turning sharply is to be right on the edge of a range where it is about to make me travel at less forwards speed, but while turning as left/right as possible still within this range. These ranges are all about 10 degrees, some are bigger than others.

Flying Levels

Not too much tech here. I can turn a little bit during the little cutscene at the start of the level and I use this to get closer to what I need to shoot. Moving up or down reduces your forward speed so I try to avoid it. Instead of matching the height of the blimp or plane, I point my nose up or down at it to shoot. This is so I can do as little up or down movement as possible. Mashing shoot perfectly is the same speed as just holding it and doing a barrel roll doesn’t affect speed. X is a brake which I don’t use except very rarely to line up enemy shots.

The hardest part of the 2 main flying levels was the routing but I managed to find good routes going through both which both differ from the RTA routes due to increased difficulty with shooting from above/below.

There is also a death abuse at the end of bye bye blimps and mad bombers. This happens when you shoot the last thing and die at the same time. This was extremely hard in bye bye blimps because the enemy planes are so weak. The plane shooting is RNG so sometimes I fire a shot seemingly randomly to get them to shoot me sooner. Even though it’s RNG it can only be manipulated to a certain extent. The planes don’t like to shoot you too early in the level even if you try to get hit so most of my damage comes later in each level. The death abuse doesn’t work in the time trials.

Thanks

Pirohiko: For making the original script for Crash 3 and discovering lots of movement tech across the various Crash games.

Isotarge: For porting Pirohiko’s script into Scripthawk and adding tons of new features. Also for helping me find lots of other level specific RAM addresses.

Crash speedrunning community: For being really helpful and friendly and helping me to find lots of subtle tech that is hard to pick up from simply watching runs.


Mothrayas: Judging!

Mothrayas: Nice run with a lot of classic Crash action. Good call on not using zip-zagging to prevent the movie from becoming repetitive even if it would be faster - audience response was very positive as a result. Accepting to Moons as a new branch for this game.

Spikestuff: Publishing.


Similar submissions (by title and categories where applicable):