1
0
Fork 0
mirror of https://github.com/notwa/mm synced 2024-11-05 01:29:03 -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:
Connor Olding 2016-02-01 02:52:33 -08:00
parent af5e3fec67
commit 4c60e8f05d

View file

@ -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