mirror of
https://github.com/notwa/mm
synced 2025-02-05 13:23:23 -08:00
more sophisticated spawning
This commit is contained in:
parent
080bb9340d
commit
4dd384b62e
2 changed files with 75 additions and 21 deletions
|
@ -800,6 +800,7 @@ end
|
||||||
|
|
||||||
function Parser:number()
|
function Parser:number()
|
||||||
if self.tt ~= 'NUM' then
|
if self.tt ~= 'NUM' then
|
||||||
|
-- FIXME: self.line can be nil in DEFINEs
|
||||||
self:error('expected number')
|
self:error('expected number')
|
||||||
end
|
end
|
||||||
local value = self.tok
|
local value = self.tok
|
||||||
|
|
|
@ -1,19 +1,72 @@
|
||||||
[actor_spawn]: 0x800BAE14
|
[actor_spawn]: 0x800BAE14
|
||||||
|
[max_actor_no]: 0x2B1
|
||||||
|
|
||||||
[global_context]: 0x803E6B20
|
[global_context]: 0x803E6B20
|
||||||
[buttons_offset]: 0x14
|
[buttons_offset]: 0x14
|
||||||
[actor_spawn_offset]: 0x1CA0
|
[actor_spawn_offset]: 0x1CA0
|
||||||
|
|
||||||
[button_mask]: 0x0020
|
[link_actor]: 0x803FFDB0
|
||||||
[actor_to_spawn]: 0x0009
|
[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
|
push 4, ra
|
||||||
li t0, @global_context
|
li t0, @link_save
|
||||||
lhu t2, @buttons_offset(t0)
|
li t1, @global_context
|
||||||
andi t2, t2, @button_mask
|
// give max rupee upgrade (set bit 13, clear bit 12 of lower halfword)
|
||||||
beq t2, r0, return
|
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
|
nop
|
||||||
li a0, @actor_to_spawn
|
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
|
bal simple_spawn
|
||||||
nop
|
nop
|
||||||
return:
|
return:
|
||||||
|
@ -24,21 +77,21 @@ simple_spawn: // args: a0 (actor to spawn)
|
||||||
mov a2, a0
|
mov a2, a0
|
||||||
li a1, @global_context
|
li a1, @global_context
|
||||||
addi a0, a1, @actor_spawn_offset
|
addi a0, a1, @actor_spawn_offset
|
||||||
cl a3 // unknown
|
li t0, @link_actor
|
||||||
mtc1 r0, F4 // X position?
|
lw t1, @actor_x(t0)
|
||||||
mtc1 r0, F8 // Y position?
|
lw t2, @actor_y(t0)
|
||||||
mtc1 r0, F16 // Z position?
|
lw t3, @actor_z(t0)
|
||||||
// load up the rest of the args
|
mov a3, t1 // X position
|
||||||
sw r0, 0x10(sp) // unknown
|
sw t2, 0x10(sp) // Y position
|
||||||
sw r0, 0x14(sp) // X, Y rotations?
|
sw t3, 0x14(sp) // Z position
|
||||||
sw r0, 0x18(sp) // Z rotation?
|
sw r0, 0x18(sp) // rotation?
|
||||||
sw r0, 0x1C(sp) // unknown
|
sw r0, 0x1C(sp) // rotation?
|
||||||
sw r0, 0x20(sp) // unknown
|
sw r0, 0x20(sp) // rotation?
|
||||||
sw r0, 0x24(sp) // object number?
|
sw r0, 0x24(sp) // object number?
|
||||||
li t0, 0x0000007F
|
li t9, 0x0000007F
|
||||||
sw t0, 0x28(sp) // unknown
|
sw t9, 0x28(sp) // unknown
|
||||||
li t0, 0x000003FF
|
li t9, 0x000003FF
|
||||||
sw t0, 0x2C(sp) // unknown
|
sw t9, 0x2C(sp) // unknown
|
||||||
sw r0, 0x30(sp) // unknown
|
sw r0, 0x30(sp) // unknown
|
||||||
// and finally..
|
// and finally..
|
||||||
jal @actor_spawn
|
jal @actor_spawn
|
||||||
|
|
Loading…
Add table
Reference in a new issue