1
0
Fork 0
mirror of https://github.com/notwa/mm synced 2024-06-28 21:07:12 -07:00
mm/Lua/inject/spawn.asm

100 lines
2.5 KiB
NASM

[actor_spawn]: 0x800BAE14
[max_actor_no]: 0x2B1
[global_context]: 0x803E6B20
[buttons_offset]: 0x14
[actor_spawn_offset]: 0x1CA0
[link_actor]: 0x803FFDB0
[actor_x]: 0x24
[actor_y]: 0x28
[actor_z]: 0x2C
[link_save]: 0x801EF670
[rupees_offset]: 0x3A
[upgrades_offset]: 0xB8
[upgrades_2_offset]: 0xBA
[button_L]: 0x0020
[button_D_right]: 0x0100
[button_D_left]: 0x0200
[button_D_down]: 0x0400
[button_D_up]: 0x0800
push 4, ra
li t0, @link_save
li t1, @global_context
// give max rupee upgrade (set bit 13, clear bit 12 of lower halfword)
lh t2, @upgrades_2_offset(t0)
ori t2, t2, 0x2000
andi t2, t2, 0xEFFF
sh t2, @upgrades_2_offset(t0)
//
lhu t2, @buttons_offset(t1)
lh t9, @rupees_offset(t0)
andi t3, t2, @button_D_up
beq t3, r0, no_D_up
nop
addi t9, t9, 1
no_D_up:
andi t3, t2, @button_D_down
beq t3, r0, no_D_down
nop
subi t9, t9, 1
no_D_down:
andi t3, t2, @button_D_right
beq t3, r0, no_D_right
nop
addi t9, t9, 10
no_D_right:
andi t3, t2, @button_D_left
beq t3, r0, no_D_left
nop
subi t9, t9, 10
no_D_left:
subi t4, t9, 1
bgez t4, no_min
nop
li t9, @max_actor_no
no_min:
subi t4, t9, @max_actor_no
blez t4, no_max
nop
li t9, 1
no_max:
sh t9, @rupees_offset(t0)
andi t3, t2, @button_L
beq t3, r0, return
nop
mov a0, t9
bal simple_spawn
nop
return:
jpop 4, ra
simple_spawn: // args: a0 (actor to spawn)
push 4, 9, ra
mov a2, a0
li a1, @global_context
addi a0, a1, @actor_spawn_offset
li t0, @link_actor
lw t1, @actor_x(t0)
lw t2, @actor_y(t0)
lw t3, @actor_z(t0)
mov a3, t1 // X position
sw t2, 0x10(sp) // Y position
sw t3, 0x14(sp) // Z position
sw r0, 0x18(sp) // rotation?
sw r0, 0x1C(sp) // rotation?
sw r0, 0x20(sp) // rotation?
sw r0, 0x24(sp) // object number?
li t9, 0x0000007F
sw t9, 0x28(sp) // unknown
li t9, 0x000003FF
sw t9, 0x2C(sp) // unknown
sw r0, 0x30(sp) // unknown
// and finally..
jal @actor_spawn
nop
jpop 4, 9, ra