Kappa⁴ Archive

lfg

<:Tea:612680029171875850> <:Tea:612680029171875850> <:Tea:612680029171875850> E3 cancelled, E4 is in.

Jump to date
Pins
taxes lfg
So the general idea behind the trick is this:

You want to pick up a rock and then have it unload from memory without Link becoming aware that it has unloaded. This results in Link's held actor pointer pointing to a memory location that is free for reuse. Most of the "random" stuff happening before the rock is lifted is done to force the rock to load at a specific memory address. With nothing in hand, we reload the room, and now the the memory address that use to store the rotation of the rock now stores the low half of the draw function pointer of the rock that the Kokiri child is trying to lift (which I'll call "kid rock"). Since "kid rock" isn't in view range, the draw function doesn't execute, and we can safely spin Link around to set the draw pointer to jump to a specific address, and lock it in by throwing the held nothing. You then use the slingshot to fire a Deku Seed that has a specific set of X and Y rotation values. You do a few things before this though to force the Deku Seed to be in a memory location such that the draw function pointer points to the seed's X and Y rotation values. Lastly, you get into a specific position and hold down a specific set of joystick and buttons on controller one and controller three. The game camera then moves automatically such that "kid rock" now starts drawing itself and activates it's payload.
taxes lfg
The payload itself works like such:

The "kid rock" draw routine jumps into the XY rotation components of the Deku Seed
the XY rotation forms a jump into the player's name.
the player name is crafted to run a single opcode that sets the current cutscene number to the state of the $gp register (which is 0) and another jump, this time into controller input
the $gp register is special in that the game never uses it for anything
controller 1's input attempts to set the $gp register to either 0xFFF6 or 0xFFF7
controller 3's input simply sets a jump that will eventually give control back to the game
finally, since the draw function is called on multiple frames, the next update cycle will write a cutscene number 0xFFF6/0xFFF7
with the cutscene number set, a cutscene plays. In the RTA route, the last cutscene that was played is going to be the title screen cutscene, which forces Link's position to be out of bounds, forcing a void out
finally, you respawn into the the credits

This archive is read-only — captured July 2020

Channels:
Density:

Jump to date