Difference between revisions of "ACE"
Brooklyn9d5 (talk | contribs) (→Explanation) |
|||
(38 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
__TOC__ | __TOC__ | ||
+ | =Introduction= | ||
+ | ACE stands for Arbitrary Code Execution which can be used to activate the credits sequence in 1-2. <br /> | ||
+ | |||
+ | To perform the Credits Warp, the [[Glitch_List#Tongue Glitch|Tongue Glitch]] is used. This causes Yoshi's tongue to increase in length which takes up more and more space in the game's memory and if manipulated correctly, the tongue glitch can cause the game to execute instructions from the memory addresses associated with the positions of recently loaded sprites. By positioning various sprites at sub-pixel perfect locations, a sequence of instructions can be input to activate the credits. This run was made possible by the work of [https://www.youtube.com/user/Arnetehgreat ArneTheGreat]. <br/> | ||
+ | |||
+ | Go to the [[DLC|DLC page]] for useful tools such as Lua with sprite slots and RAM watch set up specifically for Credits Warp. | ||
+ | =Tutorial= | ||
+ | The following video will explain the egg shots, Yoshi positioning and sprite IDs without even having to know why it works. <br /> | ||
− | + | Important info not covered in the video: <br /> | |
− | + | *The Credits Warp won't work if the World 6 title screen was playing, it has to be the default title screen. (This happens if the last file you played on had World 6 unlocked). This is easily fixed by starting a new file and then resetting the console | |
+ | *The file slot and version of the game do not matter. <br/> | ||
+ | {| class="mw-collapsible mw-collapsed wikitable" | ||
+ | ! Egg-Shot Lineups | ||
+ | |- | ||
+ | | [[File:Eggshotlineups.png]] | ||
+ | |} | ||
+ | {{#ev:youtube|s6s9FHktc4M|||'''Any% Credits Warp Tutorial'''|frame}} | ||
− | + | ==Step By Step Walkthrough With Images== | |
+ | https://docs.google.com/document/d/1EbO7-CfophQFAHBsn2hDod6KXKfie5uh_cybcS1JZhA | ||
+ | =Helpful Images= | ||
+ | If you use the RAM watch and Lua Script from the [[DLC|DLC page]], you can use the following images to help you with lining up the egg-shots. Keep in mind that you need a specific sub-pixel value for Yoshi's position at the end. This was not considered during the creation of these images, it's only purpose is to demonstrate the correct egg-shot values, before and after. | ||
− | + | [[File:ACE_shots.PNG]] | |
− | |||
+ | <br />Consider reading the following for additional info. | ||
− | = | + | =Original .txt For Today's Route (updated)= |
− | Go here to | + | Open ROM in snes9x |
+ | Run the lua script | ||
+ | Open the ramwatch file and scroll down so you can see the values for 15, 16, 17, and 18 | ||
+ | |||
+ | Start new file | ||
+ | |||
+ | Make 6 eggs and go down the pipe (don't get the flower) | ||
+ | Go up the pipe with a red egg in front of the other 5 (you can set this up before or after you go down the pipe, doesn't matter) | ||
+ | |||
+ | This is the setup to spawn sprites in the correct sprite slots (this requires pretty specific camera scrolling, but it's not very difficult): | ||
+ | Uptongue the yellow shyguy and shoot the green one with the red egg (we do this to create 2 sprites that won't despawn when they move offscreen) | ||
+ | We don't want the green shyguy to die, so run left right away to make sure he despawns | ||
+ | Jump off the platform and make an egg from the yellow shyguy in Yoshi's mouth | ||
+ | Make an egg from the dayzee first, and then the shyguy | ||
+ | Shoot an egg without destroying a sprite (basic coins don't count, a jumping upshot above the stair cloud is standard here) | ||
+ | Move over to the left side and hold up to scroll the screen up | ||
+ | Jump OVER the info block, and jump immediately as you land next to the piranha | ||
+ | Make an egg from the dayzee first, and then the shyguy | ||
+ | Do two quick neutralish shots towards the shyguys (necessary, ambient sprite stuff) | ||
+ | |||
+ | At this point, looking at the lua script, your 4 eggs should be sprites 15, 16, 17, 18 (although not in that order) | ||
+ | |||
+ | Values in these 4 sprite slots are what is executed as code in 1-2 | ||
+ | For each sprite, we will be despawning an egg at specific x subpixel, x pixel, and screen values (ignore the last one if you want, screens are big square grids so if you use the same lineups it's impossible to get the wrong value) | ||
+ | |||
+ | Here are the values you should have after the egg has gone offscreen | ||
+ | |||
+ | 00 18 subpixel | ||
+ | A9 18 pixel | ||
+ | 0D 18 screen | ||
+ | 18 17 subpixel | ||
+ | 0A 17 pixel | ||
+ | 02 17 screen | ||
+ | 99 16 subpixel | ||
+ | 4C 16 pixel | ||
+ | 00 16 screen | ||
+ | 00 15 subpixel | ||
+ | 6B 15 pixel | ||
+ | 02 15 screen | ||
+ | |||
+ | Shooting an egg straight up will give you a X subpixel value of 00 (DONT HOLD UP THROUGH THE SHOOTING ANIMATION, lock the cursor and let go of up) | ||
+ | The first two shots are screen 02, the third is screen 00, the last is 0D | ||
+ | |||
+ | You'll have to check the WR video for the lineups. | ||
+ | If you want, you can use Yoshi current pos to find the right x pixel, the 1st shot is at pos 78, the 2nd shot is pos 79, etc (iirc) | ||
+ | |||
+ | 1st shot: straight up, | ||
+ | |||
+ | (after shot 15 pixel = 6B) | ||
+ | |||
+ | 2nd shot: lock cursor lined up with the top of the hill background, move right ONE pixel | ||
+ | |||
+ | (after shot 17 subpixel = 18, 17 pixel = 0A) | ||
+ | |||
+ | SWAP EGGS ONE TIME (A, Y) | ||
+ | |||
+ | 3rd shot: lock cursor straight up, hold up to scroll the camera up. move Yoshi so there is no gap between the black of the shoe and the black line on the ground. | ||
+ | advance cursor ONE tick, should overlap the hill in the background a tiny bit | ||
+ | |||
+ | (after shot 16 subpixel = 99, 16 pixel = 4c) | ||
+ | |||
+ | 4rd shot: straight up, the visual cue i use is the first pixel Yoshi moves down. there is a curve on the ground, but sometimes it's covered by the random stage decoration. | ||
+ | |||
+ | (after shot 18 pixel = A9. there are two other AX pixels that work but A9 is the easiest imo) | ||
+ | AFTER SHOOTING THE EGG DO NOT HOLD RIGHT UNTIL YOU JUMP. Yoshi is standing on a slope, and the acceleration moving from standstill is different from flat ground / air. | ||
+ | It is necessary for Yoshi to enter the goal right with a specific amount of speed, so jump, hold right, and do not left go of right until you enter the goal ring. | ||
+ | Once you shoot the eggs, DONT SPAWN ANYTHING ELSE IN THOSE SPRITE SLOTS. It's not very hard to spawn a sprite in slot 15 after the save ring in 1-2. | ||
+ | |||
+ | Make sure you're mashing to speed up the intro. | ||
+ | The very first chomp MUST destroy the ground, if he's slow to jump, you need to wait. | ||
+ | Grab an enemy and spit it after the save ring to get tongue glitch. run into the pipe to kill time (shyguys can only spawn at set intervals and you can't be too close), jump over and run to the foam. wait 10-20(?) frames then run back to the pipe and face right. DONT MOVE RIGHT, just tap right to turn. | ||
+ | Uptongue so that Yoshi's tongue is extended when the shyguy hits. | ||
+ | If the tongue flies away and sprites disappear, that's it. I jump shortly after just in case the shyguy decides to move left. Use the lua script to see it while invisible to learn the timing. | ||
+ | Don't do any more inputs here. Sometimes the shyguy moves left and hits you, it's ok, if you did everything else right it'll still work. | ||
+ | If the screen snaps left and moves right a little before crashing you did the tongue glitch part correctly and messed something else up. | ||
+ | Sometimes you'll get really unlucky and the shyguy will move left AGAIN and hit you, causing the timer to run out. My condolences. | ||
− | = | + | =Explanation= |
− | + | This very old Google doc. has an in-depth explanation: https://docs.google.com/document/d/1ioQ5id4RbE9IOyDtlD8oIGo-rDK0h_quflm9_g0TuEw <br /> | |
− | + | Only go here to read about the technical explanation of how and why Credits Warp works, not how to actually do the run, since the route explained there is outdated and slow. |
Latest revision as of 05:34, 5 November 2023
Contents
Introduction
ACE stands for Arbitrary Code Execution which can be used to activate the credits sequence in 1-2.
To perform the Credits Warp, the Tongue Glitch is used. This causes Yoshi's tongue to increase in length which takes up more and more space in the game's memory and if manipulated correctly, the tongue glitch can cause the game to execute instructions from the memory addresses associated with the positions of recently loaded sprites. By positioning various sprites at sub-pixel perfect locations, a sequence of instructions can be input to activate the credits. This run was made possible by the work of ArneTheGreat.
Go to the DLC page for useful tools such as Lua with sprite slots and RAM watch set up specifically for Credits Warp.
Tutorial
The following video will explain the egg shots, Yoshi positioning and sprite IDs without even having to know why it works.
Important info not covered in the video:
- The Credits Warp won't work if the World 6 title screen was playing, it has to be the default title screen. (This happens if the last file you played on had World 6 unlocked). This is easily fixed by starting a new file and then resetting the console
- The file slot and version of the game do not matter.
Egg-Shot Lineups |
---|
Step By Step Walkthrough With Images
https://docs.google.com/document/d/1EbO7-CfophQFAHBsn2hDod6KXKfie5uh_cybcS1JZhA
Helpful Images
If you use the RAM watch and Lua Script from the DLC page, you can use the following images to help you with lining up the egg-shots. Keep in mind that you need a specific sub-pixel value for Yoshi's position at the end. This was not considered during the creation of these images, it's only purpose is to demonstrate the correct egg-shot values, before and after.
Consider reading the following for additional info.
Original .txt For Today's Route (updated)
Open ROM in snes9x Run the lua script Open the ramwatch file and scroll down so you can see the values for 15, 16, 17, and 18 Start new file Make 6 eggs and go down the pipe (don't get the flower) Go up the pipe with a red egg in front of the other 5 (you can set this up before or after you go down the pipe, doesn't matter) This is the setup to spawn sprites in the correct sprite slots (this requires pretty specific camera scrolling, but it's not very difficult): Uptongue the yellow shyguy and shoot the green one with the red egg (we do this to create 2 sprites that won't despawn when they move offscreen) We don't want the green shyguy to die, so run left right away to make sure he despawns Jump off the platform and make an egg from the yellow shyguy in Yoshi's mouth Make an egg from the dayzee first, and then the shyguy Shoot an egg without destroying a sprite (basic coins don't count, a jumping upshot above the stair cloud is standard here) Move over to the left side and hold up to scroll the screen up Jump OVER the info block, and jump immediately as you land next to the piranha Make an egg from the dayzee first, and then the shyguy Do two quick neutralish shots towards the shyguys (necessary, ambient sprite stuff) At this point, looking at the lua script, your 4 eggs should be sprites 15, 16, 17, 18 (although not in that order) Values in these 4 sprite slots are what is executed as code in 1-2 For each sprite, we will be despawning an egg at specific x subpixel, x pixel, and screen values (ignore the last one if you want, screens are big square grids so if you use the same lineups it's impossible to get the wrong value) Here are the values you should have after the egg has gone offscreen 00 18 subpixel A9 18 pixel 0D 18 screen 18 17 subpixel 0A 17 pixel 02 17 screen 99 16 subpixel 4C 16 pixel 00 16 screen 00 15 subpixel 6B 15 pixel 02 15 screen Shooting an egg straight up will give you a X subpixel value of 00 (DONT HOLD UP THROUGH THE SHOOTING ANIMATION, lock the cursor and let go of up) The first two shots are screen 02, the third is screen 00, the last is 0D You'll have to check the WR video for the lineups. If you want, you can use Yoshi current pos to find the right x pixel, the 1st shot is at pos 78, the 2nd shot is pos 79, etc (iirc) 1st shot: straight up, (after shot 15 pixel = 6B) 2nd shot: lock cursor lined up with the top of the hill background, move right ONE pixel (after shot 17 subpixel = 18, 17 pixel = 0A) SWAP EGGS ONE TIME (A, Y) 3rd shot: lock cursor straight up, hold up to scroll the camera up. move Yoshi so there is no gap between the black of the shoe and the black line on the ground. advance cursor ONE tick, should overlap the hill in the background a tiny bit (after shot 16 subpixel = 99, 16 pixel = 4c) 4rd shot: straight up, the visual cue i use is the first pixel Yoshi moves down. there is a curve on the ground, but sometimes it's covered by the random stage decoration. (after shot 18 pixel = A9. there are two other AX pixels that work but A9 is the easiest imo) AFTER SHOOTING THE EGG DO NOT HOLD RIGHT UNTIL YOU JUMP. Yoshi is standing on a slope, and the acceleration moving from standstill is different from flat ground / air. It is necessary for Yoshi to enter the goal right with a specific amount of speed, so jump, hold right, and do not left go of right until you enter the goal ring.
Once you shoot the eggs, DONT SPAWN ANYTHING ELSE IN THOSE SPRITE SLOTS. It's not very hard to spawn a sprite in slot 15 after the save ring in 1-2. Make sure you're mashing to speed up the intro. The very first chomp MUST destroy the ground, if he's slow to jump, you need to wait. Grab an enemy and spit it after the save ring to get tongue glitch. run into the pipe to kill time (shyguys can only spawn at set intervals and you can't be too close), jump over and run to the foam. wait 10-20(?) frames then run back to the pipe and face right. DONT MOVE RIGHT, just tap right to turn. Uptongue so that Yoshi's tongue is extended when the shyguy hits. If the tongue flies away and sprites disappear, that's it. I jump shortly after just in case the shyguy decides to move left. Use the lua script to see it while invisible to learn the timing. Don't do any more inputs here. Sometimes the shyguy moves left and hits you, it's ok, if you did everything else right it'll still work. If the screen snaps left and moves right a little before crashing you did the tongue glitch part correctly and messed something else up. Sometimes you'll get really unlucky and the shyguy will move left AGAIN and hit you, causing the timer to run out. My condolences.
Explanation
This very old Google doc. has an in-depth explanation: https://docs.google.com/document/d/1ioQ5id4RbE9IOyDtlD8oIGo-rDK0h_quflm9_g0TuEw
Only go here to read about the technical explanation of how and why Credits Warp works, not how to actually do the run, since the route explained there is outdated and slow.