Compiles custom code for 3ds games and injects it into existing code.bin files and patches the exheader
Motivation for this is to create a NSMB2 hack with fully custom code. In theory this should work with all other games as well tho.
Work in progress. Should be in a kinda working state now. Might still have bugs that wait to be reported :)
You can find examples on how to use Magikoopa in combination with NSMB2 here: https://github.com/RicBent/Magikoopa-NSMB2-Examples/
- Build the project in QtCreator.
- Run
Magikoopa
in the build directory.
Hooks can be specified with hks files in {WorkingDirectory}/source or {WorkingDirectory}/hooks. The format is similar to YAML:
hook_name_1:
type: xxx
link: false
addr: 0x00430988
func: FunctionNameHere
hook_name_2:
...
There are several types of hooks.
Type | Description |
---|---|
branch | Branch to a function (overwrites the original instruction) |
softbranch | Branch to a function (preserves the original instruction) |
patch | Patch data at an offset |
symbol | Write the address of a symbol |
The following parameters are common to all hook types:
Parameter | Description |
---|---|
addr | Hook address |
Parameter | Description |
---|---|
link | true to make a BL instruction, false for B |
func | (1) Branch destination function name. This will be converted to an address using the symbol table. |
dest | (2) Branch destination address |
link and one of func and dest are required parameters.
Parameter | Description |
---|---|
func | (1) Branch destination function name. This will be converted to an address using the symbol table. |
dest | (2) Branch destination address |
opcode | "pre", "post" or "ignore". Defaults to "ignore" if not specified. "pre" to branch to func/dest after the original instruction, "post" to branch before the original instruction. |
One of func and dest are required parameters.
Parameter | Description |
---|---|
data | (1) Data to insert (in hexadecimal) |
src | (2) Symbol name of data to insert |
len | (2) Length of data to insert |
data, or both src and len, are required parameters.
- Dirbaio -- Creator of the NSMBDS asm patch template which was used as a basis
- StapleButter -- Partial coding of the Filesystem classes
- Icons8 -- Icons (https://icons8.com/)