diff --git a/Lua/inject/beta.asm b/Lua/inject/beta.asm index 421fa5c..717c9e5 100644 --- a/Lua/inject/beta.asm +++ b/Lua/inject/beta.asm @@ -206,7 +206,7 @@ load_hook: sw v0, rng_seed jal shuffle_all nop - jpop 4, s0, s1, ra, 1 + ret 4, s0, s1, ra, 1 prng: // just a reimplementation of the PRNG the game uses. @@ -232,7 +232,7 @@ randint: addi s0, a0, 1 divu v0, s0 mfhi v0 - jpop 4, s0, ra + ret 4, s0, ra shuffle_all: push 4, s0, s1, s2, ra @@ -259,7 +259,7 @@ shuffle_all: bne s0, s1, - nop +: - jpop 4, s0, s1, s2, ra + ret 4, s0, s1, s2, ra shuffle_get: // a0: exit value @@ -282,7 +282,7 @@ shuffle_get: +: lhu v0, 2(t4) shuffle_get_return: - jpop 4, ra, 1 + ret 4, ra, 1 unset_alt_scene: andi t9, a0, 0x01FF @@ -356,7 +356,7 @@ set_alt_scene: +: set_alt_scene_return: mov v0, s0 - jpop 4, s0, ra + ret 4, s0, ra shuffle_exit: push 4, s0, ra @@ -403,7 +403,7 @@ shuffle_exit: li a2, 0 +: mov v0, s0 - jpop 4, s0, ra + ret 4, s0, ra setup_hook: push 4, a0, ra diff --git a/Lua/inject/bombtornado.asm b/Lua/inject/bombtornado.asm index 08c32e4..d88fd70 100644 --- a/Lua/inject/bombtornado.asm +++ b/Lua/inject/bombtornado.asm @@ -70,7 +70,7 @@ continue: bne s4, t0, typeloop addi s3, s3, @actorlist_dead_space - jpop 4, s1, s3, s4, ra + ret 4, s1, s3, s4, ra process_actor: // args: a0. returns nothing. // TODO: ignore bomb explosions, they share the same type @@ -127,7 +127,7 @@ process_actor: // args: a0. returns nothing. sw t5, current_rotation +: - jpop 4, s0, s1, ra + ret 4, s0, s1, ra rotations: .word 0x00000000 // pi*0/6 diff --git a/Lua/inject/print.asm b/Lua/inject/print.asm index 89459d3..8215b5f 100644 --- a/Lua/inject/print.asm +++ b/Lua/inject/print.asm @@ -31,7 +31,7 @@ sw t0, buffer_pos // and set the string to null sb r0, 0(t0) - jpop 4, 1, ra + ret 4, 1, ra fmt: .asciiz "%s" diff --git a/Lua/inject/simple spawn.asm b/Lua/inject/simple spawn.asm index 4479561..299bbf3 100644 --- a/Lua/inject/simple spawn.asm +++ b/Lua/inject/simple spawn.asm @@ -31,4 +31,4 @@ simple_spawn: sw t9, 0x30(sp) // unknown jal @actor_spawn nop - jpop 4, 9, ra + ret 4, 9, ra diff --git a/Lua/inject/simple text.asm b/Lua/inject/simple text.asm index dfb4a43..74c42d0 100644 --- a/Lua/inject/simple text.asm +++ b/Lua/inject/simple text.asm @@ -28,33 +28,24 @@ simple_text: lw s1, 0(t0) lw t2, @dlist_offset(s1) - mov a0, s0 - mov a1, t2 - jal @DoTxtStruct - nop + call @DoTxtStruct, s0, t2 lbu a1, 36(sp) lbu a2, 37(sp) lbu a3, 38(sp) lbu t1, 39(sp) - sw t1, 0x10(sp) - jal @SetTextRGBA - mov a0, s0 + call @SetTextRGBA, s0, a1, a2, a3, t1 lh a1, 32(sp) lh a2, 34(sp) - jal @SetTextXY - mov a0, s0 + call @SetTextXY, s0, a1, a2 lw a1, 40(sp) lw a2, 44(sp) - jal @SetTextString - mov a0, s0 + call @SetTextString, s0, a1, a2 - mov a0, s0 - jal @UpdateTxtStruct - nop + call @UpdateTxtStruct, s0 sw v0, @dlist_offset(s1) - jpop 4, 1, s0, s1, ra + ret 4, 1, s0, s1, ra diff --git a/Lua/inject/spawn mm.asm b/Lua/inject/spawn mm.asm index 6ffbb54..97032bc 100644 --- a/Lua/inject/spawn mm.asm +++ b/Lua/inject/spawn mm.asm @@ -41,7 +41,7 @@ jal 0x800BB2D0 // original code nop +: - jpop 5, ra + ret 5, ra .org 0x800B9430 // part of scene actor loading routine jal @whatever diff --git a/Lua/inject/spawn.asm b/Lua/inject/spawn.asm index 6c9c009..2772404 100644 --- a/Lua/inject/spawn.asm +++ b/Lua/inject/spawn.asm @@ -32,14 +32,12 @@ spawn: +: // handle dpad bnez s4, + mov a1, s2 - jal dpad_control - mov a0, s0 + call dpad_control, s0, a1 mov s0, v0 b ++ nop +: - jal dpad_control - mov a0, s3 + call dpad_control, s3, a1 andi s3, v0, 0xFFFF +: // set min/max on actor number subi t4, s0, @min_actor_no @@ -61,25 +59,15 @@ spawn: nop return: // render actor number - li a0, 0x0001001C // xy - li a1, 0x88CCFFFF // rgba - la a2, fmt - mov a3, s0 - jal simple_text - nop + call simple_text, 0x0001001C, 0x88CCFFFF, fmt, s0 // render actor variable - li a0, 0x0006001C // xy - li a1, 0xFFCC88FF // rgba - la a2, fmt - mov a3, s3 - jal simple_text - nop + call simple_text, 0x0006001C, 0xFFCC88FF, fmt, s3 // done sh s0, anum sw s1, hold_delay sh s3, avar sw s4, selected - jpop 4, s0, s1, s2, s3, s4, ra, + ret 4, s0, s1, s2, s3, s4, ra, anum: .word 0 @@ -108,8 +96,7 @@ object_spawn_wrap: nop beqi a0, 2, + nop - jal @object_spawn - nop + call @object_spawn, a0, a1 +: jr nop @@ -135,8 +122,7 @@ object_spawn_wrap: addi t0, t0, 68 bnez t1, - nop - jal @object_spawn - nop + call @object_spawn, a0, a1 //subiu v0, r0, -1 // original code +: - jpop 4, ra, 1 + ret 4, ra, 1 diff --git a/Lua/inject/widescreen-either.asm b/Lua/inject/widescreen-either.asm index 75040ac..5a32d53 100644 --- a/Lua/inject/widescreen-either.asm +++ b/Lua/inject/widescreen-either.asm @@ -7,7 +7,7 @@ start: jal adjust_dlist lw a0, 4(t0) ; HUD display list start - jpop 4, 1, ra + ret 4, 1, ra adjust_dlist: ; args: pointer to start of dlist @@ -50,8 +50,7 @@ recurse: bne t3, t9, next nop sw a0, debug - jal adjust_dlist - nop + call adjust_dlist, a0 b next nop @@ -72,16 +71,13 @@ texscale: andi s4, t3, 0xFFFF ; get x scale ; scale coordinates - jal scale_xy - mov a0, s0 + call scale_xy, s0 mov s0, v0 - jal scale_xy - mov a0, s2 + call scale_xy, s2 mov s2, v0 ; scale pixel steps - jal scale_step - mov a0, s4 + call scale_step, s4 mov s4, v0 ; reconstruct commands @@ -152,7 +148,7 @@ setscissor: ;80167FB0 +return: - jpop 4, s0, s1, s2, s3, s4, s5, s6, s7, s8, ra + ret 4, s0, s1, s2, s3, s4, s5, s6, s7, s8, ra .align 4 .word 0xDEADBEEF diff --git a/patch/code.asm b/patch/code.asm index f02c849..52afb2b 100644 --- a/patch/code.asm +++ b/patch/code.asm @@ -22,10 +22,7 @@ li s0, 0x801BD910 ; original code ; pushes removed here ; 6 instructions to work with - li a1, @vstart ; 2 - li a2, @size ; 2 - jal @DMARomToRam ; 1 - li a0, @start ; 1 (just ensure @start can be a LUI!) + call @DMARomToRam, @start, @vstart, @size .org @dma_overwrite j dma_hook ; 1 diff --git a/patch/dma O EUDB MQ.asm b/patch/dma O EUDB MQ.asm index b372b1f..524ed8a 100644 --- a/patch/dma O EUDB MQ.asm +++ b/patch/dma O EUDB MQ.asm @@ -30,11 +30,8 @@ li s0, 0x8011F830 ; original code ; pushes removed here ; 9 instructions to work with? - ; dma args are backwards compared to MM? - li a1, @start - li a2, @size - jal @DMARomToRam - li a0, @vstart + ; a0 and a1 are backwards compared to MM? + call @DMARomToRam, @vstart, @start, @size lui a0 0x8014 ; original code cl a1 cl a2 diff --git a/patch/extra.asm b/patch/extra.asm index a30dcd2..955cc6e 100644 --- a/patch/extra.asm +++ b/patch/extra.asm @@ -22,8 +22,7 @@ rng_seed: dma_hook: push 4, 1, ra - jal setup_hook - nop + call setup_hook pop 4, 1, ra addiu sp, 0xFF58 ; original code j 0x8016A2D0 ; return to scene setup function @@ -113,37 +112,34 @@ load_hook: ; first time setup sb t0, @has_completed_intro(s0) sb t0, @have_tatl(s0) - li a0, 0x001A ; deku intro area - li a1, 2 - jal set_scene_flag - li a2, 2 ; "Hey, you! C'mon! Press Z and talk to me!" - li a0, 0x0063 ; inside clock tower - li a1, 1 ; second word - jal set_scene_flag - li a2, 0 ; first bit ("You've met with a terrible fate") - li a0, @week_event_reg - li a1, 31 - jal set_event_flag - li a2, 2 ; Tatl reminding you about the four directions - li a0, @week_event_reg - li a1, 93 - jal set_event_flag - li a2, 3 ; woken turtle once (shortens cutscene) - li a0, @week_event_reg - li a1, 53 - jal set_event_flag - li a2, 6 ; taken turtle once (skips pirates getting wrekt) + + ; deku intro area + ; "Hey, you! C'mon! Press Z and talk to me!" + call set_scene_flag, 0x001A, 2, 2 + + ; inside clock tower + ; second word + ; first bit ("You've met with a terrible fate") + call set_scene_flag, 0x0063, 1, 0 + + ; Tatl reminding you about the four directions + call set_event_flag, @week_event_reg, 31, 2 + + ; woken turtle once (shortens cutscene) + call set_event_flag, @week_event_reg, 93, 3 + + ; taken turtle once (skips pirates getting wrekt) + call set_event_flag, @week_event_reg, 53, 6 + +: addi a0, s0, @player_name - li a2, 0xFFFFFFFF - jal crc32 - li a1, 8 + call crc32, a0, 8, 0xFFFFFFFF + not v0, v0 sw v0, hash sw v0, rng_seed - jal shuffle_all - nop - jpop 4, s0, s1, ra, 1 + call shuffle_all + ret 4, s0, s1, ra, 1 prng: ; just a reimplementation of the PRNG the game uses. @@ -166,7 +162,7 @@ randint: addi s0, a0, 1 divu v0, s0 mfhi v0 - jpop 4, s0, ra + ret 4, s0, ra shuffle_all: push 4, s0, s1, s2, ra @@ -175,8 +171,7 @@ shuffle_all: li s1, @entries la s2, shuffles -: - jal randint - mov a0, s0 + call randint, s0 ; s0 is i, v0 is j sll t0, s0, 2 ; 1<<2 == 2*sizeof(half) sll t1, v0, 2 ; likewise @@ -193,7 +188,7 @@ shuffle_all: bne s0, s1, - nop +: - jpop 4, s0, s1, s2, ra + ret 4, s0, s1, s2, ra shuffle_get: ; a0: exit value @@ -216,7 +211,7 @@ shuffle_get: +: lhu v0, 2(t4) +return: - jpop 4, ra, 1 + ret 4, ra, 1 unset_alt_scene: andi t9, a0, 0x01FF @@ -250,10 +245,7 @@ set_alt_scene: push 4, s0, ra mov s0, a0 ; use clean swamp when odolwa is beaten - li a0, @week_event_reg - li a1, 20 - jal get_event_flag - li a2, 1 + call get_event_flag, @week_event_reg, 20, 1 beqz v0, + nop andi t9, s0, 0x01FF @@ -265,10 +257,7 @@ set_alt_scene: addu s0, t9, at +: ; use unfrozen mountain when goht is beaten - li a0, @week_event_reg - li a1, 33 - jal get_event_flag - li a2, 7 + call get_event_flag, @week_event_reg, 33, 7 beqz v0, +return nop andi t9, s0, 0x01FF @@ -290,7 +279,7 @@ set_alt_scene: +: +return: mov v0, s0 - jpop 4, s0, ra + ret 4, s0, ra shuffle_exit: push 4, s0, ra @@ -318,26 +307,19 @@ shuffle_exit: lh t2, @exit_mod_setter(t0) bnei t2, 0xFFEF, + nop - ; implicitly passes a0 - jal unset_alt_scene - nop - jal shuffle_get - mov a0, v0 - jal set_alt_scene - mov a0, v0 + call unset_alt_scene, a0 + call shuffle_get, v0 + call set_alt_scene, v0 mov s0, v0 sh v0, new_exit ; set woodfall temple as raised after beating odolwa ; otherwise the swamp won't be cleansed li at, 0x8601 bne s0, at, + - li a1, 20 - li a0, @week_event_reg - jal set_event_flag - li a2, 0 + call set_event_flag, @week_event_reg, 20, 0 +: mov v0, s0 - jpop 4, s0, ra + ret 4, s0, ra setup_hook: push 4, a0, ra @@ -345,6 +327,6 @@ setup_hook: jal shuffle_exit andi a0, 0xFFFF sw v0, @link_save - jpop 4, a0, ra + ret 4, a0, ra .word 0xDEADBEEF