mirror of
https://github.com/notwa/mm
synced 2024-11-05 03:29:02 -08:00
shuffle by hooking scene setup instead
writes exit value before it's read. fixes actors not loading (koume) and simplifies things.
This commit is contained in:
parent
af5e3fec67
commit
4c60e8f05d
1 changed files with 26 additions and 25 deletions
|
@ -25,8 +25,8 @@
|
||||||
|
|
||||||
/* TODO:
|
/* TODO:
|
||||||
short term:
|
short term:
|
||||||
|
don't shuffle termina field skull kid cutscene
|
||||||
test beating each boss and other cutscene stuff (odolwa works)
|
test beating each boss and other cutscene stuff (odolwa works)
|
||||||
make sure koume spawns in the woods
|
|
||||||
allow peeking thru curiosity shop at any time
|
allow peeking thru curiosity shop at any time
|
||||||
set up wallet sizes not unlike mm randomizer
|
set up wallet sizes not unlike mm randomizer
|
||||||
allow buying of biggest bomb bag without an existing bomb bag
|
allow buying of biggest bomb bag without an existing bomb bag
|
||||||
|
@ -59,6 +59,8 @@ v0 is set by the jal at 80169DF0 to 80130768
|
||||||
801322C0 jrs twice until it reaches 8016AA9C,
|
801322C0 jrs twice until it reaches 8016AA9C,
|
||||||
which calls 800B9170 and eventually calls 80169DCC
|
which calls 800B9170 and eventually calls 80169DCC
|
||||||
inbetween: 800BB2D0
|
inbetween: 800BB2D0
|
||||||
|
|
||||||
|
80167058 writes exit value
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.word 0xDEADBEEF
|
.word 0xDEADBEEF
|
||||||
|
@ -244,15 +246,13 @@ shuffle_all:
|
||||||
+:
|
+:
|
||||||
jpop 4, s0, s1, s2, ra
|
jpop 4, s0, s1, s2, ra
|
||||||
|
|
||||||
shuffle_exit:
|
shuffle_get:
|
||||||
// a0: exit value
|
// a0: exit value
|
||||||
// v0: shuffled exit value
|
// v0: shuffled exit value
|
||||||
push 4, ra, 1
|
push 4, ra, 1
|
||||||
mov v0, a0
|
mov v0, a0
|
||||||
li t0, @entries
|
li t0, @entries
|
||||||
li t1, 0
|
li t1, 0
|
||||||
lw t2, crc32
|
|
||||||
sw t2, rng_seed
|
|
||||||
la t3, shuffles
|
la t3, shuffles
|
||||||
mov t4, t3
|
mov t4, t3
|
||||||
-:
|
-:
|
||||||
|
@ -260,13 +260,13 @@ shuffle_exit:
|
||||||
beq a0, t5, +
|
beq a0, t5, +
|
||||||
nop
|
nop
|
||||||
addi t1, t1, 1
|
addi t1, t1, 1
|
||||||
beq t1, t0, shuffle_exit_return
|
beq t1, t0, shuffle_get_return
|
||||||
nop
|
nop
|
||||||
b -
|
b -
|
||||||
addi t4, t4, 4 // 2*sizeof(halfword)
|
addi t4, t4, 4 // 2*sizeof(halfword)
|
||||||
+:
|
+:
|
||||||
lhu v0, 2(t4)
|
lhu v0, 2(t4)
|
||||||
shuffle_exit_return:
|
shuffle_get_return:
|
||||||
jpop 4, ra, 1
|
jpop 4, ra, 1
|
||||||
|
|
||||||
unset_alt_scene:
|
unset_alt_scene:
|
||||||
|
@ -333,7 +333,7 @@ set_alt_scene_return:
|
||||||
mov v0, s0
|
mov v0, s0
|
||||||
jpop 4, s0, ra
|
jpop 4, s0, ra
|
||||||
|
|
||||||
shuffle_hook:
|
shuffle_exit:
|
||||||
push 4, s0, ra
|
push 4, s0, ra
|
||||||
sh a0, old_exit
|
sh a0, old_exit
|
||||||
li t0, @link_save
|
li t0, @link_save
|
||||||
|
@ -358,7 +358,7 @@ shuffle_hook:
|
||||||
// implicitly passes a0
|
// implicitly passes a0
|
||||||
jal unset_alt_scene
|
jal unset_alt_scene
|
||||||
nop
|
nop
|
||||||
jal shuffle_exit
|
jal shuffle_get
|
||||||
mov a0, v0
|
mov a0, v0
|
||||||
jal set_alt_scene
|
jal set_alt_scene
|
||||||
mov a0, v0
|
mov a0, v0
|
||||||
|
@ -373,27 +373,28 @@ shuffle_hook:
|
||||||
jal set_event_flag
|
jal set_event_flag
|
||||||
li a2, 0
|
li a2, 0
|
||||||
+:
|
+:
|
||||||
mov a0, s0
|
mov v0, s0
|
||||||
pop 4, s0, ra
|
jpop 4, s0, ra
|
||||||
j shuffle_hook_return
|
|
||||||
sw a0, 0(sp) // original code
|
|
||||||
|
|
||||||
set_void_hook:
|
setup_hook:
|
||||||
lhu v0, new_exit
|
push 4, a0, ra
|
||||||
jr
|
lw a0, @link_save
|
||||||
|
jal shuffle_exit
|
||||||
|
andi a0, a0, 0xFFFF
|
||||||
|
sw v0, @link_save
|
||||||
|
pop 4, a0, ra
|
||||||
|
addiu sp, sp, 0xFF58 // original code
|
||||||
|
j setup_return
|
||||||
|
sw s1, 0x30(sp) // original code
|
||||||
|
|
||||||
|
.org 0x8016A2C8
|
||||||
|
j setup_hook
|
||||||
nop
|
nop
|
||||||
|
setup_return:
|
||||||
.org 0x801322C0
|
|
||||||
j shuffle_hook
|
|
||||||
andi a0, a0, 0xFFFF // original code
|
|
||||||
shuffle_hook_return:
|
|
||||||
|
|
||||||
.org 0x80169DF0
|
|
||||||
jal set_void_hook
|
|
||||||
|
|
||||||
.org @starting_exit
|
.org @starting_exit
|
||||||
li t8, 0xD800
|
li t8, 0xD800 // modified code
|
||||||
li t4, 0xD800
|
li t4, 0xD800 // modified code
|
||||||
|
|
||||||
.org 0x80145464 // JR of starting_exit's function
|
.org 0x80145464 // JR of starting_exit's function
|
||||||
j load_hook // tail call
|
j load_hook // tail call
|
||||||
|
|
Loading…
Reference in a new issue