2015-12-18 11:57:48 -08:00
|
|
|
[button_L]: 0x0020
|
|
|
|
[button_D_right]: 0x0100
|
|
|
|
[button_D_left]: 0x0200
|
|
|
|
[button_D_down]: 0x0400
|
|
|
|
[button_D_up]: 0x0800
|
2015-12-18 14:04:44 -08:00
|
|
|
[button_any]: 0x0F20
|
2015-12-18 10:00:15 -08:00
|
|
|
|
2015-12-18 14:04:44 -08:00
|
|
|
[hold_delay_amount]: 3
|
|
|
|
|
2015-12-22 17:33:38 -08:00
|
|
|
push 4, s1, ra
|
|
|
|
li t0, @link_save
|
|
|
|
li t1, @global_context
|
2015-12-18 11:57:48 -08:00
|
|
|
// give max rupee upgrade (set bit 13, clear bit 12 of lower halfword)
|
2015-12-22 17:33:38 -08:00
|
|
|
lhu t2, @upgrades_2_offset(t0)
|
|
|
|
ori t2, t2, 0x2000
|
|
|
|
andi t2, t2, 0xEFFF
|
|
|
|
sh t2, @upgrades_2_offset(t0)
|
2015-12-18 11:57:48 -08:00
|
|
|
//
|
2015-12-22 17:33:38 -08:00
|
|
|
lhu t2, @buttons_offset(t1)
|
|
|
|
lhu t9, @rupees_offset(t0)
|
|
|
|
lw s1, hold_delay
|
|
|
|
andi t4, t2, @button_any
|
2016-01-02 06:00:05 -08:00
|
|
|
bnez t4, +
|
2015-12-22 17:33:38 -08:00
|
|
|
addi s1, s1, 1
|
|
|
|
li s1, 0
|
2016-01-02 04:07:18 -08:00
|
|
|
+:
|
2016-01-02 06:00:05 -08:00
|
|
|
beqi s1, 1, +
|
2015-12-22 17:33:38 -08:00
|
|
|
nop
|
|
|
|
subi t4, s1, @hold_delay_amount
|
|
|
|
bltz t4, return
|
|
|
|
nop
|
2016-01-02 04:07:18 -08:00
|
|
|
+:
|
2016-01-03 04:44:53 -08:00
|
|
|
andi t3, t2, @button_D_right
|
2016-01-02 06:00:05 -08:00
|
|
|
beqz t3, +
|
2015-12-22 17:33:38 -08:00
|
|
|
nop
|
|
|
|
addi t9, t9, 1
|
2016-01-02 04:07:18 -08:00
|
|
|
+:
|
2016-01-03 04:44:53 -08:00
|
|
|
andi t3, t2, @button_D_left
|
2016-01-02 06:00:05 -08:00
|
|
|
beqz t3, +
|
2015-12-22 17:33:38 -08:00
|
|
|
nop
|
|
|
|
subi t9, t9, 1
|
2016-01-02 04:07:18 -08:00
|
|
|
+:
|
2016-01-03 04:44:53 -08:00
|
|
|
andi t3, t2, @button_D_up
|
2016-01-02 06:00:05 -08:00
|
|
|
beqz t3, +
|
2015-12-22 17:33:38 -08:00
|
|
|
nop
|
|
|
|
addi t9, t9, 10
|
2016-01-02 04:07:18 -08:00
|
|
|
+:
|
2016-01-03 04:44:53 -08:00
|
|
|
andi t3, t2, @button_D_down
|
2016-01-02 06:00:05 -08:00
|
|
|
beqz t3, +
|
2015-12-22 17:33:38 -08:00
|
|
|
nop
|
|
|
|
subi t9, t9, 10
|
2016-01-02 04:07:18 -08:00
|
|
|
+:
|
2015-12-22 17:33:38 -08:00
|
|
|
subi t4, t9, 1
|
2016-01-02 04:07:18 -08:00
|
|
|
bgez t4, +
|
2015-12-22 17:33:38 -08:00
|
|
|
nop
|
|
|
|
li t9, @max_actor_no
|
2016-01-02 04:07:18 -08:00
|
|
|
+:
|
2015-12-22 17:33:38 -08:00
|
|
|
subi t4, t9, @max_actor_no
|
2016-01-02 04:07:18 -08:00
|
|
|
blez t4, +
|
2015-12-22 17:33:38 -08:00
|
|
|
nop
|
|
|
|
li t9, 1
|
2016-01-02 04:07:18 -08:00
|
|
|
+:
|
2015-12-22 17:33:38 -08:00
|
|
|
sh t9, @rupees_offset(t0)
|
|
|
|
andi t3, t2, @button_L
|
2016-01-02 06:00:05 -08:00
|
|
|
beqz t3, return
|
2015-12-22 17:33:38 -08:00
|
|
|
nop
|
|
|
|
mov a0, t9
|
|
|
|
bal simple_spawn
|
|
|
|
nop
|
2015-12-18 10:00:15 -08:00
|
|
|
return:
|
2015-12-22 17:33:38 -08:00
|
|
|
sw s1, hold_delay
|
|
|
|
jpop 4, s1, ra
|
2015-12-18 10:00:15 -08:00
|
|
|
|
|
|
|
simple_spawn: // args: a0 (actor to spawn)
|
2015-12-22 17:33:38 -08:00
|
|
|
push 4, 9, ra
|
2016-01-03 04:11:51 -08:00
|
|
|
mov a2, a0
|
2015-12-22 17:33:38 -08:00
|
|
|
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
|
2015-12-18 14:04:44 -08:00
|
|
|
|
2015-12-22 17:33:38 -08:00
|
|
|
li t9, 0x0
|
|
|
|
sw t9, 0x18(sp) // rotation?
|
|
|
|
lhu t7, @actor_horiz_angle(t0)
|
|
|
|
sw t7, 0x1C(sp) // horizontal rotation
|
|
|
|
li t9, 0x0
|
|
|
|
sw t9, 0x20(sp) // rotation?
|
2015-12-18 14:04:44 -08:00
|
|
|
|
2015-12-22 17:33:38 -08:00
|
|
|
// lhu t7, @actor_horiz_angle(t0)
|
|
|
|
li t7, 0
|
|
|
|
sw t7, 0x24(sp) // actor variable
|
2015-12-18 14:04:44 -08:00
|
|
|
|
2015-12-22 17:33:38 -08:00
|
|
|
li t9, 0x0000007F
|
|
|
|
sw t9, 0x28(sp) // unknown
|
|
|
|
li t9, 0x000003FF
|
2016-01-09 09:19:21 -08:00
|
|
|
sw t9, 0x2C(sp) // spawn time? (probably MM only)
|
2015-12-22 17:33:38 -08:00
|
|
|
li t9, 0x00000000
|
|
|
|
sw t9, 0x30(sp) // unknown
|
|
|
|
jal @actor_spawn
|
|
|
|
nop
|
|
|
|
jpop 4, 9, ra
|
2015-12-18 14:04:44 -08:00
|
|
|
|
|
|
|
hold_delay:
|
2015-12-22 17:33:38 -08:00
|
|
|
.word 0
|
2015-12-22 14:12:20 -08:00
|
|
|
|
2016-01-03 04:11:51 -08:00
|
|
|
.org @object_index
|
|
|
|
// we have space for 22 instructions (on debug, 23 on 1.0?)
|
|
|
|
push 4, ra, 1
|
|
|
|
mov t0, a0
|
|
|
|
lbu t1, 8(a0) // remaining items
|
2015-12-22 17:33:38 -08:00
|
|
|
cl v0
|
2016-01-02 04:07:18 -08:00
|
|
|
-:
|
2015-12-22 17:33:38 -08:00
|
|
|
lh t2, 12(t0) // item's object number
|
2016-01-03 04:11:51 -08:00
|
|
|
// t2 = abs(t2)
|
|
|
|
bgez t2, +
|
|
|
|
nop
|
|
|
|
subu t2, r0, t2
|
|
|
|
+:
|
|
|
|
beq a1, t2, +
|
|
|
|
subi t1, t1, 1
|
|
|
|
addiu v0, v0, 1
|
2015-12-22 17:33:38 -08:00
|
|
|
addi t0, t0, 68
|
2016-01-02 06:00:05 -08:00
|
|
|
bnez t1, -
|
2015-12-22 17:33:38 -08:00
|
|
|
nop
|
2016-01-03 04:11:51 -08:00
|
|
|
// NOTE: this allows object 0002 to load in places it's not meant to.
|
|
|
|
// this can mess up door graphics (among other things?)
|
2016-01-03 04:36:14 -08:00
|
|
|
jal @object_spawn
|
2016-01-03 04:11:51 -08:00
|
|
|
nop
|
|
|
|
//subiu v0, r0, -1 // original code
|
2016-01-02 04:26:18 -08:00
|
|
|
+:
|
2016-01-03 04:11:51 -08:00
|
|
|
jpop 4, ra, 1
|