Note : This will move to it’s own sections of the website! 🙂
In the last few months of COVID lockdown, I started to speedrun and explore the wonderfull world of SM64, a game that, like many others, shaped my love for 3D as a child. This part of website is all about stuff I explored during my speedrunning/exploration of this game. There is not a particular linear way to read those, as it contains tutorial for speedrunning certain part, reflections I had alond the road, TAS tutorial, technical explorations and references I found usefull along the ride.
Notes on Hacking Notes.
Grab star faster when mario is in movement.
Always refer to shadow of the star, from the floor… Then if moving, perform a -90 direction and reverse jump than hit z.
This section contains note regarding Tool Assisted Speedrun
Tools for assisted speedrun.
TAS is a technique used to created tool assisted speedrunning. Meaning that you simply indicated with a tool every button to be pressed frame per frame. In short, it can be used to exploit certain glitches in the gameplay by performing certain key-pressing that would simply be unachievable from a human.
Download the Taspack in here:
TL/DR: For ease of use, and if you do not really care about descriptions of every items, you can simply download this zip file and everything will be good to do. Note that the folder also contains STROOP (SuperMario64 Technical Runtime Observer and Object Processor) we will cover this tool a bit later.
There are few items we need to be able to achieve that:
While you could use Project64 for TAS, by adding a TAS input controller, I would write all these articles with using Mupen64 wich provides some very clever tooling making it easier for us to run the emulation frame by frame and so on. (More on these control later) 🙂
You can get the source code and compiled version on their Github page:
The Input for controlling the game
Normally, you would play using a controller, being your Xbox or keyboard… This is not super practical for what we want to achieve, as we will need to control every button pressed, frame by frame… So we need a sort of software-input that we can use to specify what inputs we want to shoot the software to execute.
Something like that: Where you can control every button
Mupen allows the usage of plugins, we can use a custom dll and specify it in our emulator settings. To do so, simply place the TASDI.dll into the plugins folder and you should be good to go.
Well, we will use SM64.
Setting up Mupen for TAS
Once you have downloaded all the tools and your roms, it is now time to take a look at how to setup Mupen for TAS. From the downloaded zip, you can just extract it wherever you want on your machine and then run the .exe.
First thing we want is to setup the TAS input plugin as our controller:
Note: If you don’t see it, make sure that the .dll is in the plugins folder.
Next step we want to do is make sure we have some hotkeys for controlling the execution of the game: So under Hotkeys–>
Pause/Resume: Will allow you to let the game either run frame by frame or making it run normally.
Frame Advanced: Will allow you to run one simple frame at the time by pressing the button.
So from this point, you will be able to run your rom!
Simple input, pause/play, frame by frame execution:
Let’s assume we simply want Mario to run forward: Make the AnalogStick Controller point in top…
By pressing play/pause wich is space bar in my hotkeys settings you will see that the games runs as normal when play is hit, and pause make iet pause. Then if you press the “next frame” hotkeys, the game will run frame by frame every time you press the hotkey button(in my case D on my keyboard).
So pressing the pause/start makes the game runs as normal, and when paused, you press the next-frame hotkeys to actually run the game frame by frame.
So another thing that might be worth mentionning is if you right-click on a button in the TAS controller, it will make the input pressed every frame. As if you left click, it will make the input pressed only once.
For example, if you want to perform a jump, you left-click on the A button of the TAS-Controller. Making Mario Jump once.
If you want to input A every frame, you activate the button by leftclick, and once activate, right click on the input button of the TAS controller. Making it pressed everyframe.
Stroop stand for SuperMario64 Technical Runtime Observer and Object Processor, wich makes a super handy tool to observe at runtime the value, memory, calls and stuff. You can use P64 for this, but we will use MuPen as it’s making it way simpler.
When launching Stroop from a Mupen running the emulation
We can see in the object Slot the object loaded in Ram for this current frame, and therefore analyse every of their values.
Let’s get to the Mario Tab:
In this tab we can analyse all the informations frame by frame to what makes the character moves and so on.
So we can easily change the Mario position in WorldSpace. For example let’s make the character go super high on the Y axis.
Basically we can manipulate values. Like Mario ws