mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-22 06:58:07 -05:00
more decomp and move some data to src for ground_object
This commit is contained in:
parent
f86970c62b
commit
698ea72f6c
|
|
@ -5,515 +5,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_80AC554
|
||||
sub_80AC554:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
mov r8, r0
|
||||
mov r10, r1
|
||||
adds r4, r2, 0
|
||||
ldr r0, _080AC5C8
|
||||
ldr r0, [r0]
|
||||
mov r12, r0
|
||||
movs r6, 0
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
mov r9, r0
|
||||
movs r7, 0x80
|
||||
lsls r7, 9
|
||||
_080AC576:
|
||||
mov r1, r12
|
||||
movs r2, 0x6
|
||||
ldrsh r0, [r1, r2]
|
||||
cmp r0, r9
|
||||
beq _080AC5CC
|
||||
movs r0, 0x8E
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r0, [r0]
|
||||
mov r5, r8
|
||||
ands r0, r5
|
||||
cmp r0, 0
|
||||
beq _080AC5CC
|
||||
movs r0, 0x92
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r1, [r0]
|
||||
mov r5, r12
|
||||
ldr r0, [r5, 0x14]
|
||||
adds r2, r1, r0
|
||||
movs r0, 0x94
|
||||
lsls r0, 1
|
||||
add r0, r12
|
||||
ldr r1, [r0]
|
||||
ldr r0, [r5, 0x18]
|
||||
adds r3, r1, r0
|
||||
ldr r0, [r4]
|
||||
cmp r2, r0
|
||||
bge _080AC5CC
|
||||
mov r1, r10
|
||||
ldr r0, [r1]
|
||||
cmp r2, r0
|
||||
ble _080AC5CC
|
||||
ldr r0, [r4, 0x4]
|
||||
cmp r3, r0
|
||||
bge _080AC5CC
|
||||
ldr r0, [r1, 0x4]
|
||||
cmp r3, r0
|
||||
ble _080AC5CC
|
||||
adds r0, r6, 0
|
||||
b _080AC5E4
|
||||
.align 2, 0
|
||||
_080AC5C8: .4byte gGroundObjects
|
||||
_080AC5CC:
|
||||
adds r0, r7, 0
|
||||
movs r2, 0x80
|
||||
lsls r2, 9
|
||||
adds r7, r2
|
||||
asrs r6, r0, 16
|
||||
movs r5, 0xE2
|
||||
lsls r5, 1
|
||||
add r12, r5
|
||||
cmp r6, 0xF
|
||||
ble _080AC576
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
_080AC5E4:
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80AC554
|
||||
|
||||
thumb_func_start GetObjectCollision_80AC5F4
|
||||
GetObjectCollision_80AC5F4:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x10
|
||||
mov r8, r0
|
||||
adds r5, r1, 0
|
||||
adds r6, r2, 0
|
||||
ldr r0, [r5]
|
||||
cmp r0, 0
|
||||
bge _080AC60C
|
||||
ldr r1, _080AC670
|
||||
adds r0, r1
|
||||
_080AC60C:
|
||||
asrs r0, 11
|
||||
mov r12, r0
|
||||
str r0, [sp]
|
||||
ldr r0, [r5, 0x4]
|
||||
cmp r0, 0
|
||||
bge _080AC61C
|
||||
ldr r3, _080AC670
|
||||
adds r0, r3
|
||||
_080AC61C:
|
||||
asrs r4, r0, 11
|
||||
str r4, [sp, 0x4]
|
||||
ldr r3, [r6]
|
||||
subs r0, r3, 0x1
|
||||
cmp r0, 0
|
||||
bge _080AC62C
|
||||
ldr r7, _080AC674
|
||||
adds r0, r3, r7
|
||||
_080AC62C:
|
||||
asrs r1, r0, 11
|
||||
ldr r3, [r6, 0x4]
|
||||
subs r0, r3, 0x1
|
||||
cmp r0, 0
|
||||
bge _080AC63A
|
||||
ldr r7, _080AC674
|
||||
adds r0, r3, r7
|
||||
_080AC63A:
|
||||
asrs r2, r0, 11
|
||||
mov r3, r12
|
||||
subs r0, r1, r3
|
||||
adds r0, 0x1
|
||||
str r0, [sp, 0x8]
|
||||
subs r0, r2, r4
|
||||
adds r0, 0x1
|
||||
add r2, sp, 0x8
|
||||
str r0, [r2, 0x4]
|
||||
movs r0, 0x8E
|
||||
lsls r0, 1
|
||||
add r0, r8
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080AC678
|
||||
mov r0, sp
|
||||
adds r1, r2, 0
|
||||
bl CheckMapCollision_80A585C
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080AC678
|
||||
movs r0, 0x1
|
||||
b _080AC6A0
|
||||
.align 2, 0
|
||||
_080AC670: .4byte 0x000007ff
|
||||
_080AC674: .4byte 0x000007fe
|
||||
_080AC678:
|
||||
movs r0, 0x8E
|
||||
lsls r0, 1
|
||||
add r0, r8
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x4
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080AC69E
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
adds r2, r5, 0
|
||||
adds r3, r6, 0
|
||||
bl GetLivesCollision_80A92A0
|
||||
lsls r0, 16
|
||||
cmp r0, 0
|
||||
blt _080AC69E
|
||||
movs r0, 0x4
|
||||
b _080AC6A0
|
||||
_080AC69E:
|
||||
movs r0, 0
|
||||
_080AC6A0:
|
||||
add sp, 0x10
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end GetObjectCollision_80AC5F4
|
||||
|
||||
thumb_func_start TryMoveObjectRelative_80AC6AC
|
||||
TryMoveObjectRelative_80AC6AC:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x10
|
||||
adds r5, r0, 0
|
||||
ldr r2, [r1]
|
||||
ldr r4, [r5, 0x14]
|
||||
subs r0, r2, r4
|
||||
str r0, [sp]
|
||||
ldr r3, [r1, 0x4]
|
||||
ldr r1, [r5, 0x18]
|
||||
subs r0, r3, r1
|
||||
str r0, [sp, 0x4]
|
||||
adds r2, r4
|
||||
str r2, [sp, 0x8]
|
||||
adds r3, r1
|
||||
add r2, sp, 0x8
|
||||
str r3, [r2, 0x4]
|
||||
ldr r1, [r5, 0x28]
|
||||
ldr r0, [sp]
|
||||
cmp r0, r1
|
||||
blt _080AC6EA
|
||||
ldr r1, [r5, 0x30]
|
||||
ldr r0, [sp, 0x8]
|
||||
cmp r0, r1
|
||||
bge _080AC6EA
|
||||
ldr r1, [r5, 0x2C]
|
||||
ldr r0, [sp, 0x4]
|
||||
cmp r0, r1
|
||||
blt _080AC6EA
|
||||
ldr r0, [r5, 0x34]
|
||||
cmp r3, r0
|
||||
blt _080AC6EE
|
||||
_080AC6EA:
|
||||
movs r0, 0x1
|
||||
b _080AC718
|
||||
_080AC6EE:
|
||||
adds r0, r5, 0
|
||||
mov r1, sp
|
||||
bl GetObjectCollision_80AC5F4
|
||||
cmp r0, 0
|
||||
bne _080AC718
|
||||
movs r0, 0x92
|
||||
lsls r0, 1
|
||||
adds r2, r5, r0
|
||||
ldr r0, [sp]
|
||||
ldr r1, [sp, 0x4]
|
||||
str r0, [r2]
|
||||
str r1, [r2, 0x4]
|
||||
movs r0, 0x96
|
||||
lsls r0, 1
|
||||
adds r2, r5, r0
|
||||
ldr r0, [sp, 0x8]
|
||||
ldr r1, [sp, 0xC]
|
||||
str r0, [r2]
|
||||
str r1, [r2, 0x4]
|
||||
movs r0, 0
|
||||
_080AC718:
|
||||
add sp, 0x10
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end TryMoveObjectRelative_80AC6AC
|
||||
|
||||
thumb_func_start TryMoveRelative_80AC720
|
||||
TryMoveRelative_80AC720:
|
||||
push {r4,r5,lr}
|
||||
sub sp, 0x10
|
||||
adds r4, r0, 0
|
||||
movs r2, 0x92
|
||||
lsls r2, 1
|
||||
adds r0, r4, r2
|
||||
ldr r0, [r0]
|
||||
ldr r2, [r1]
|
||||
adds r0, r2
|
||||
str r0, [sp]
|
||||
movs r3, 0x94
|
||||
lsls r3, 1
|
||||
adds r0, r4, r3
|
||||
ldr r0, [r0]
|
||||
ldr r1, [r1, 0x4]
|
||||
adds r0, r1
|
||||
str r0, [sp, 0x4]
|
||||
adds r3, 0x4
|
||||
adds r0, r4, r3
|
||||
ldr r0, [r0]
|
||||
adds r0, r2
|
||||
str r0, [sp, 0x8]
|
||||
movs r2, 0x98
|
||||
lsls r2, 1
|
||||
adds r0, r4, r2
|
||||
ldr r0, [r0]
|
||||
adds r0, r1
|
||||
add r1, sp, 0x8
|
||||
str r0, [r1, 0x4]
|
||||
movs r5, 0
|
||||
ldr r3, [r4, 0x28]
|
||||
ldr r0, [sp]
|
||||
adds r2, r1, 0
|
||||
cmp r0, r3
|
||||
bge _080AC770
|
||||
str r3, [sp]
|
||||
ldr r0, [r4, 0xC]
|
||||
adds r0, r3, r0
|
||||
str r0, [sp, 0x8]
|
||||
b _080AC780
|
||||
_080AC770:
|
||||
ldr r1, [r4, 0x30]
|
||||
ldr r0, [sp, 0x8]
|
||||
cmp r0, r1
|
||||
blt _080AC782
|
||||
ldr r0, [r4, 0xC]
|
||||
subs r0, r1, r0
|
||||
str r0, [sp]
|
||||
str r1, [sp, 0x8]
|
||||
_080AC780:
|
||||
movs r5, 0x1
|
||||
_080AC782:
|
||||
ldr r1, [r4, 0x2C]
|
||||
ldr r0, [sp, 0x4]
|
||||
cmp r0, r1
|
||||
bge _080AC794
|
||||
str r1, [sp, 0x4]
|
||||
ldr r0, [r4, 0x10]
|
||||
adds r0, r1, r0
|
||||
str r0, [r2, 0x4]
|
||||
b _080AC7A4
|
||||
_080AC794:
|
||||
ldr r1, [r4, 0x34]
|
||||
ldr r0, [r2, 0x4]
|
||||
cmp r0, r1
|
||||
blt _080AC7A6
|
||||
ldr r0, [r4, 0x10]
|
||||
subs r0, r1, r0
|
||||
str r0, [sp, 0x4]
|
||||
str r1, [r2, 0x4]
|
||||
_080AC7A4:
|
||||
movs r5, 0x1
|
||||
_080AC7A6:
|
||||
adds r0, r4, 0
|
||||
mov r1, sp
|
||||
bl GetObjectCollision_80AC5F4
|
||||
cmp r0, 0
|
||||
bne _080AC7D8
|
||||
movs r3, 0x92
|
||||
lsls r3, 1
|
||||
adds r2, r4, r3
|
||||
ldr r0, [sp]
|
||||
ldr r1, [sp, 0x4]
|
||||
str r0, [r2]
|
||||
str r1, [r2, 0x4]
|
||||
movs r0, 0x96
|
||||
lsls r0, 1
|
||||
adds r2, r4, r0
|
||||
ldr r0, [sp, 0x8]
|
||||
ldr r1, [sp, 0xC]
|
||||
str r0, [r2]
|
||||
str r1, [r2, 0x4]
|
||||
cmp r5, 0
|
||||
bne _080AC7D6
|
||||
movs r0, 0
|
||||
b _080AC7D8
|
||||
_080AC7D6:
|
||||
movs r0, 0x1
|
||||
_080AC7D8:
|
||||
add sp, 0x10
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end TryMoveRelative_80AC720
|
||||
|
||||
thumb_func_start CallbackObjectGetIndex
|
||||
CallbackObjectGetIndex:
|
||||
movs r1, 0x4
|
||||
ldrsh r0, [r0, r1]
|
||||
bx lr
|
||||
thumb_func_end CallbackObjectGetIndex
|
||||
|
||||
thumb_func_start CallbackObjectGetSize
|
||||
CallbackObjectGetSize:
|
||||
ldr r2, [r0, 0xC]
|
||||
ldr r3, [r0, 0x10]
|
||||
str r2, [r1]
|
||||
str r3, [r1, 0x4]
|
||||
bx lr
|
||||
thumb_func_end CallbackObjectGetSize
|
||||
|
||||
thumb_func_start CallbackObjectSetHitboxPos
|
||||
CallbackObjectSetHitboxPos:
|
||||
push {r4,lr}
|
||||
adds r3, r0, 0
|
||||
adds r4, r1, 0
|
||||
cmp r4, 0
|
||||
beq _080AC834
|
||||
movs r0, 0x92
|
||||
lsls r0, 1
|
||||
adds r2, r3, r0
|
||||
ldr r1, [r4]
|
||||
ldr r0, [r3, 0x14]
|
||||
subs r0, r1, r0
|
||||
str r0, [r2]
|
||||
movs r0, 0x96
|
||||
lsls r0, 1
|
||||
adds r2, r3, r0
|
||||
ldr r0, [r3, 0x14]
|
||||
adds r1, r0
|
||||
str r1, [r2]
|
||||
movs r0, 0x94
|
||||
lsls r0, 1
|
||||
adds r2, r3, r0
|
||||
ldr r1, [r4, 0x4]
|
||||
ldr r0, [r3, 0x18]
|
||||
subs r0, r1, r0
|
||||
str r0, [r2]
|
||||
movs r0, 0x98
|
||||
lsls r0, 1
|
||||
adds r2, r3, r0
|
||||
ldr r0, [r3, 0x18]
|
||||
adds r1, r0
|
||||
str r1, [r2]
|
||||
b _080AC89A
|
||||
_080AC834:
|
||||
movs r0, 0x92
|
||||
lsls r0, 1
|
||||
adds r2, r3, r0
|
||||
ldr r0, [r3, 0x20]
|
||||
ldr r1, [r3, 0x14]
|
||||
subs r0, r1
|
||||
str r0, [r2]
|
||||
movs r0, 0x96
|
||||
lsls r0, 1
|
||||
adds r2, r3, r0
|
||||
ldr r0, [r3, 0x20]
|
||||
ldr r1, [r3, 0x14]
|
||||
adds r0, r1
|
||||
str r0, [r2]
|
||||
movs r0, 0x94
|
||||
lsls r0, 1
|
||||
adds r2, r3, r0
|
||||
ldr r0, [r3, 0x24]
|
||||
ldr r1, [r3, 0x18]
|
||||
subs r0, r1
|
||||
str r0, [r2]
|
||||
movs r0, 0x98
|
||||
lsls r0, 1
|
||||
adds r2, r3, r0
|
||||
ldr r0, [r3, 0x24]
|
||||
ldr r1, [r3, 0x18]
|
||||
adds r0, r1
|
||||
str r0, [r2]
|
||||
movs r2, 0x9A
|
||||
lsls r2, 1
|
||||
adds r1, r3, r2
|
||||
adds r2, 0x4
|
||||
adds r0, r3, r2
|
||||
str r4, [r0]
|
||||
str r4, [r1]
|
||||
movs r0, 0x90
|
||||
lsls r0, 1
|
||||
adds r2, r3, r0
|
||||
movs r1, 0
|
||||
ldrsb r1, [r2, r1]
|
||||
movs r0, 0x1C
|
||||
ldrsb r0, [r3, r0]
|
||||
cmp r1, r0
|
||||
beq _080AC896
|
||||
movs r0, 0x9E
|
||||
lsls r0, 1
|
||||
adds r1, r3, r0
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
_080AC896:
|
||||
ldrb r0, [r3, 0x1C]
|
||||
strb r0, [r2]
|
||||
_080AC89A:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CallbackObjectSetHitboxPos
|
||||
|
||||
thumb_func_start CallbackObjectSetPositionBounds
|
||||
CallbackObjectSetPositionBounds:
|
||||
push {r4,lr}
|
||||
ldr r3, [r1]
|
||||
ldr r4, [r1, 0x4]
|
||||
str r3, [r0, 0x28]
|
||||
str r4, [r0, 0x2C]
|
||||
ldr r1, [r2]
|
||||
ldr r2, [r2, 0x4]
|
||||
str r1, [r0, 0x30]
|
||||
str r2, [r0, 0x34]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CallbackObjectSetPositionBounds
|
||||
|
||||
thumb_func_start CallbackObjectGetHitboxCenter
|
||||
CallbackObjectGetHitboxCenter:
|
||||
adds r3, r0, 0
|
||||
movs r2, 0x92
|
||||
lsls r2, 1
|
||||
adds r0, r3, r2
|
||||
ldr r0, [r0]
|
||||
ldr r2, [r3, 0x14]
|
||||
adds r0, r2
|
||||
str r0, [r1]
|
||||
movs r2, 0x94
|
||||
lsls r2, 1
|
||||
adds r0, r3, r2
|
||||
ldr r0, [r0]
|
||||
ldr r2, [r3, 0x18]
|
||||
adds r0, r2
|
||||
str r0, [r1, 0x4]
|
||||
bx lr
|
||||
thumb_func_end CallbackObjectGetHitboxCenter
|
||||
|
||||
thumb_func_start CallbackObjectMoveReal
|
||||
CallbackObjectMoveReal:
|
||||
push {lr}
|
||||
bl TryMoveObjectRelative_80AC6AC
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end CallbackObjectMoveReal
|
||||
|
||||
thumb_func_start CallbackObjectGetPosHeightAndUnk
|
||||
CallbackObjectGetPosHeightAndUnk:
|
||||
push {r4,lr}
|
||||
|
|
|
|||
|
|
@ -2,126 +2,6 @@
|
|||
|
||||
.align 2
|
||||
|
||||
|
||||
|
||||
|
||||
.string "pksdir0\0"
|
||||
.align 2,0
|
||||
|
||||
.global gGroundObjectCallbacks
|
||||
gGroundObjectCallbacks: @ 81182A0
|
||||
@ replacing .incbin "baserom.gba", 0x1182A0, 0x54
|
||||
.byte 0x02, 0x00, 0x00, 0x00
|
||||
.4byte CallbackObjectGetIndex
|
||||
.4byte CallbackObjectGetSize
|
||||
.4byte CallbackObjectGetHitboxCenter
|
||||
.4byte CallbackObjectGetPosHeightAndUnk
|
||||
.4byte CallbackObjectGetDirection
|
||||
.4byte CallbackObjectGetFlags
|
||||
.4byte CallbackObjectSetHitboxPos
|
||||
.4byte CallbackObjectSetPositionBounds
|
||||
.4byte CallbackObjectMoveReal
|
||||
.4byte CallbackObjectSetPosHeight
|
||||
.4byte CallbackObjectSetDirection
|
||||
.4byte CallbackObjectSetEventIndex
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.4byte CallbackObjectSetUnk_80AC998
|
||||
.4byte CallbackObjectSetFlags
|
||||
.4byte CallbackObjectClearFlags
|
||||
.byte 0x00, 0x00, 0x00, 0x00
|
||||
.4byte CallbackObjectMoveRelative
|
||||
.4byte CallbackObjectSpriteRelatedCheck_80AC9B8
|
||||
.4byte CallbackObjectSpriteRelated_80AC9DC
|
||||
|
||||
.global gUnknown_81182F4
|
||||
gUnknown_81182F4: @ 81182F4
|
||||
.byte 0xF6, 0x0, 0x9F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x34, 0x83, 0x11, 0x8, 0xF4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xDB, 0x0, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xE7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
|
||||
|
||||
.global GroundObjectFile_Text
|
||||
GroundObjectFile_Text: @ Text
|
||||
|
||||
.global gUnknown_8118334
|
||||
gUnknown_8118334: @ 8118334
|
||||
.string "../ground/ground_object.c"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_8118350
|
||||
gUnknown_8118350: @ 8118350
|
||||
@ replacing .incbin "baserom.gba", 0x118350, 0x50
|
||||
.byte 0xf6, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.4byte gUnknown_8118334
|
||||
.byte 0x54, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0xdb, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
.global gUnknown_81183A0
|
||||
gUnknown_81183A0: @ 81183A0
|
||||
.byte 0xFF, 0xFF, 0x0, 0x8, 0x1, 0x8, 0x0, 0x10, 0x1, 0x10, 0x2, 0x10, 0x3, 0x10, 0x0, 0x8, 0x1, 0x8, 0x2, 0x8, 0x3, 0x8, 0x4, 0x8, 0x5, 0x8, 0x6, 0x8, 0x7, 0x8, 0x8, 0x8, 0x9, 0x8, 0xA, 0x8, 0xB, 0x8, 0xC, 0x8, 0xD, 0x8, 0xE, 0x8, 0xF, 0x8, 0x0, 0x0
|
||||
|
||||
.global GroundObject_Select_Text
|
||||
GroundObject_Select_Text: @ Select
|
||||
.string "GroundObject_Select"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_81183E4
|
||||
gUnknown_81183E4: @ 81183E4
|
||||
.4byte GroundObjectFile_Text
|
||||
.4byte 0x126
|
||||
.4byte GroundObject_Select_Text
|
||||
|
||||
.global gUnknown_81183F0
|
||||
gUnknown_81183F0: @ 81183F0
|
||||
.string "GroundObject Select %3d %3d %3d\0"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_8118414
|
||||
gUnknown_8118414: @ 8118414
|
||||
.string "GroundObject Cancel %3d\0"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_811842C
|
||||
gUnknown_811842C: @ 811842C
|
||||
.string "GroundObject CancelBlank\0"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_8118448
|
||||
gUnknown_8118448: @ 8118448
|
||||
.string "GroundObject Add id %3d kind %3d[%3d] type %3d group %3d sector %3d\0"
|
||||
.align 2,0
|
||||
|
||||
.global GroundObject_AddText
|
||||
GroundObject_AddText: @ AddText
|
||||
.string "GroundObject_Add\0"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_81184A4
|
||||
gUnknown_81184A4: @ 81184A4
|
||||
.4byte GroundObjectFile_Text
|
||||
.4byte 0x283
|
||||
.4byte GroundObject_AddText
|
||||
|
||||
.global gUnknown_81184B0
|
||||
gUnknown_81184B0: @ 81184B0
|
||||
.string "GroundObject Delete id %3d\0"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_81184CC
|
||||
gUnknown_81184CC: @ 81184CC
|
||||
.string "GroundObject Execute %3d \0"
|
||||
.align 2,0
|
||||
|
||||
.global GroundObject_ExecuteScript_Text
|
||||
GroundObject_ExecuteScript_Text: @ ExecuteScript
|
||||
.string "GroundObject_ExecuteScript\0"
|
||||
.align 2,0
|
||||
|
||||
.global gUnknown_8118504
|
||||
gUnknown_8118504: @ 8118504
|
||||
.4byte GroundObjectFile_Text
|
||||
.4byte 0x303
|
||||
.4byte GroundObject_ExecuteScript_Text
|
||||
|
||||
.global GroundObject_Action_Text
|
||||
GroundObject_Action_Text: @ Action
|
||||
.string "GroundObject_Action\0"
|
||||
|
|
@ -129,13 +9,13 @@ GroundObject_Action_Text: @ Action
|
|||
|
||||
.global gUnknown_8118524
|
||||
gUnknown_8118524: @ 8118524
|
||||
.4byte GroundObjectFile_Text
|
||||
.4byte gUnknown_8118334
|
||||
.4byte 0x60D
|
||||
.4byte GroundObject_Action_Text
|
||||
|
||||
.global gUnknown_8118530
|
||||
gUnknown_8118530: @ 8118530
|
||||
.4byte GroundObjectFile_Text
|
||||
.4byte gUnknown_8118334
|
||||
.4byte 0x617
|
||||
.4byte GroundObject_Action_Text
|
||||
.string "pksdir0\0"
|
||||
|
|
|
|||
|
|
@ -737,6 +737,7 @@ SECTIONS {
|
|||
data/pksdir_6.o(.rodata);
|
||||
src/ground_script_file.o(.rodata);
|
||||
src/ground_lives.o(.rodata);
|
||||
src/ground_object.o(.rodata);
|
||||
data/data_8115F5C_1.o(.rodata);
|
||||
src/ground_link.o(.rodata);
|
||||
src/ground_event.o(.rodata);
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
#include "gba/types.h"
|
||||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "structs/str_ground_script.h"
|
||||
#include "ground_script.h"
|
||||
#include "debug.h"
|
||||
#include "data_script.h"
|
||||
#include "event_flag.h"
|
||||
#include "ground_script.h"
|
||||
#include "ground_sprite.h"
|
||||
#include "memory.h"
|
||||
|
||||
|
|
@ -16,13 +18,13 @@ typedef struct GroundObject {
|
|||
u8 unkB;
|
||||
PixelPos unkC;
|
||||
PixelPos unk14;
|
||||
u8 unk1C;
|
||||
s8 unk1C;
|
||||
PixelPos unk20;
|
||||
PixelPos unk28;
|
||||
PixelPos unk30;
|
||||
Action unk38;
|
||||
u32 flags;
|
||||
u8 unk120;
|
||||
s8 unk120;
|
||||
PixelPos unk124;
|
||||
PixelPos unk12C;
|
||||
PixelPos unk134;
|
||||
|
|
@ -43,27 +45,14 @@ struct GroundObjectTypeData
|
|||
|
||||
extern struct GroundObjectTypeData gGroundObjectTypes[];
|
||||
|
||||
extern CallbackData gGroundObjectCallbacks[];
|
||||
|
||||
void DeleteGroundObjects(void);
|
||||
void GroundObject_Delete(s32);
|
||||
|
||||
extern DebugLocation gUnknown_81183E4;
|
||||
extern u8 gUnknown_81183F0[];
|
||||
extern u8 gUnknown_8118414[];
|
||||
extern u8 gUnknown_811842C[];
|
||||
extern u8 gUnknown_81184B0[];
|
||||
extern DebugLocation gUnknown_81184A4;
|
||||
extern ScriptCommand gUnknown_8118350;
|
||||
extern ScriptCommand gUnknown_81182F4;
|
||||
extern u8 gUnknown_8118448[];
|
||||
|
||||
const struct GroundScriptHeader *GetGroundScript(s16 a0, DebugLocation *);
|
||||
void sub_80A7658(struct UnkGroundSpriteStruct *);
|
||||
extern bool8 GroundScriptNotify(Action*, s32);
|
||||
extern bool8 GroundScript_Cancel(Action *r0);
|
||||
void SetPredefinedScript(Action *param_1, s16 index, const ScriptCommand *param_3);
|
||||
bool8 ExecutePredefinedScript(Action *param_1, s32 *param_2, s16 index, DebugLocation *debug);
|
||||
|
||||
extern bool8 GetCurrentDungeonBounds(PixelPos *a0, PixelPos *a1);
|
||||
void sub_80A75CC(void *, s32, s32, s32);
|
||||
|
|
@ -72,6 +61,119 @@ bool8 SpriteHasPokemonSize_80A66A4(struct UnkGroundSpriteStruct *ptr);
|
|||
|
||||
s32 GroundObject_Add(s32 id_,const GroundObjectData *objectData,s32 group_,s32 sector_);
|
||||
|
||||
static s16 CallbackObjectGetIndex(void *ptr);
|
||||
static void CallbackObjectGetSize(void *objectPtr_, PixelPos *out);
|
||||
static void CallbackObjectSetHitboxPos(void *objectPtr_, PixelPos *posOrNull);
|
||||
static void CallbackObjectSetPositionBounds(void *objectPtr_, PixelPos *from, PixelPos *to);
|
||||
static void CallbackObjectGetHitboxCenter(void *objectPtr_, PixelPos *out);
|
||||
static s32 CallbackObjectMoveReal(void *objectPtr_, PixelPos *pos);
|
||||
extern void CallbackObjectGetPosHeightAndUnk(void *objectPtr_, u32 *height, u32 *unk);
|
||||
extern void CallbackObjectSetPosHeight(void *objectPtr_, u32 height);
|
||||
extern void CallbackObjectGetDirection(void *objectPtr_, s8 *dir);
|
||||
extern void CallbackObjectSetDirection(void *objectPtr_, s32 dir_);
|
||||
extern void CallbackObjectSetEventIndex(void *objectPtr_, u16 a1);
|
||||
extern void CallbackObjectSetUnk_80AC998(void *objectPtr_, s32 a1_, s32 a2);
|
||||
extern bool8 CallbackObjectSpriteRelatedCheck_80AC9B8(void *objectPtr_);
|
||||
extern bool8 CallbackObjectSpriteRelated_80AC9DC(void *objectPtr_);
|
||||
extern void CallbackObjectGetFlags(void *objectPtr_, u32 *flags);
|
||||
extern void CallbackObjectSetFlags(void *objectPtr_, u32 flags);
|
||||
extern void CallbackObjectClearFlags(void *objectPtr_, u32 flags);
|
||||
extern s32 CallbackObjectMoveRelative(void *objectPtr_, PixelPos *pos);
|
||||
|
||||
|
||||
static const CallbackData gGroundObjectCallbacks = {
|
||||
.maybeId = 2,
|
||||
.getIndex = CallbackObjectGetIndex,
|
||||
.getSize = CallbackObjectGetSize,
|
||||
.getHitboxCenter = CallbackObjectGetHitboxCenter,
|
||||
.getPosHeightAndUnk = CallbackObjectGetPosHeightAndUnk,
|
||||
.getDirection = CallbackObjectGetDirection,
|
||||
.getFlags = CallbackObjectGetFlags,
|
||||
.setHitboxPos = CallbackObjectSetHitboxPos,
|
||||
.setPositionBounds = CallbackObjectSetPositionBounds,
|
||||
.moveReal = CallbackObjectMoveReal,
|
||||
.setPosHeight = CallbackObjectSetPosHeight,
|
||||
.setDirection = CallbackObjectSetDirection,
|
||||
.setEventIndex = CallbackObjectSetEventIndex,
|
||||
.livesOnlyNullsub = NULL,
|
||||
.func38 = CallbackObjectSetUnk_80AC998,
|
||||
.setFlags = CallbackObjectSetFlags,
|
||||
.clearFlags = CallbackObjectClearFlags,
|
||||
.func44_livesOnlySpriteRelated = NULL,
|
||||
.moveRelative = CallbackObjectMoveRelative,
|
||||
.func4C_spriteRelatedCheck = CallbackObjectSpriteRelatedCheck_80AC9B8,
|
||||
.func50_spriteRelated = CallbackObjectSpriteRelated_80AC9DC,
|
||||
};
|
||||
const u8 gUnknown_8118334[];
|
||||
#define FAKE_FILENAME gUnknown_8118334
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static const struct ScriptCommand gUnknown_81182F4[] = {
|
||||
DEBUGINFO, // Needs to be line 159
|
||||
LABEL(0),
|
||||
WAIT(0x78),
|
||||
JUMP_LABEL(0),
|
||||
};
|
||||
ALIGNED(4) const u8 gUnknown_8118334[] = "../ground/ground_object.c";
|
||||
static const struct ScriptCommand gUnknown_8118350[] = {
|
||||
DEBUGINFO, // Needs to be line 166
|
||||
{ 0x54, 0, 1, 0, 0, NULL },
|
||||
LABEL(0),
|
||||
WAIT(0x78),
|
||||
JUMP_LABEL(0),
|
||||
};
|
||||
|
||||
const u8 gUnknown_81183A0[] = {
|
||||
0xFF, 0xFF, 0x0, 0x8, 0x1, 0x8, 0x0, 0x10, 0x1, 0x10, 0x2, 0x10, 0x3, 0x10, 0x0, 0x8, 0x1, 0x8, 0x2, 0x8, 0x3, 0x8, 0x4, 0x8, 0x5, 0x8, 0x6, 0x8, 0x7, 0x8, 0x8, 0x8, 0x9, 0x8, 0xA, 0x8, 0xB, 0x8, 0xC, 0x8, 0xD, 0x8, 0xE, 0x8, 0xF, 0x8, 0x0, 0x0};
|
||||
|
||||
void AllocGroundObjects(void)
|
||||
{
|
||||
|
||||
|
|
@ -123,8 +225,8 @@ void GroundObject_Select(s32 scriptID, s32 group, s32 sector)
|
|||
scriptID_s32 = (s16)scriptID;
|
||||
group_s32 = (s16)group;
|
||||
sector_s32 = (s8)sector;
|
||||
scriptPtr = GetGroundScript(scriptID_s32, &gUnknown_81183E4);
|
||||
Log('\0',gUnknown_81183F0, scriptID_s32, group_s32, sector_s32);
|
||||
scriptPtr = GetGroundScript(scriptID_s32, DEBUG_LOC_PTR(gUnknown_8118334, 0x126, "GroundObject_Select"));
|
||||
Log(0,"GroundObject Select %3d %3d %3d", scriptID_s32, group_s32, sector_s32);
|
||||
|
||||
groupPtr = &scriptPtr->groups[group_s32];
|
||||
sectorPtr = &groupPtr->sectors[sector_s32];
|
||||
|
|
@ -148,7 +250,7 @@ void GroundObject_Cancel(s32 scriptID, s32 sector)
|
|||
sector_s32 = (s8) sector;
|
||||
|
||||
|
||||
Log('\0',gUnknown_8118414, scriptID_s32);
|
||||
Log(0,"GroundObject Cancel %3d", scriptID_s32);
|
||||
|
||||
index = 0;
|
||||
ptr = &gGroundObjects[0];
|
||||
|
|
@ -166,7 +268,7 @@ void GroundObject_CancelBlank(void)
|
|||
GroundObject *ptr;
|
||||
PixelPos stack;
|
||||
|
||||
Log('\0',gUnknown_811842C);
|
||||
Log(0,"GroundObject CancelBlank");
|
||||
|
||||
index = 0;
|
||||
ptr = &gGroundObjects[0];
|
||||
|
|
@ -221,13 +323,13 @@ s32 GroundObject_Add(s32 id_,const GroundObjectData *objectData,s32 group_,s32 s
|
|||
|
||||
kind = objectData->kind;
|
||||
if (kind == 0x1a) {
|
||||
if (GetScriptVarValue(NULL,0x28) < 2) { // BASE_LEVEL
|
||||
if (GetScriptVarValue(NULL,BASE_LEVEL) < 2) {
|
||||
kind = 0x1b;
|
||||
}
|
||||
else {
|
||||
sVar4 = GetScriptVarValue(NULL,0x29); // FLAG_KIND
|
||||
sVar4 = GetScriptVarValue(NULL,FLAG_KIND);
|
||||
if (sVar4 == 0) {
|
||||
sVar3 = GetScriptVarValue(NULL,0x27) + 0x1c; // BASE_KIND
|
||||
sVar3 = GetScriptVarValue(NULL,BASE_KIND) + 0x1c;
|
||||
}
|
||||
else {
|
||||
sVar3 = sVar4 + 0x2b;
|
||||
|
|
@ -265,7 +367,7 @@ s32 GroundObject_Add(s32 id_,const GroundObjectData *objectData,s32 group_,s32 s
|
|||
}
|
||||
}
|
||||
parent = &gGroundObjects[id];
|
||||
Log('\0',gUnknown_8118448,id,kind,objectData->kind,typeDataPtr->unk0,group,sector);
|
||||
Log(0,"GroundObject Add id %3d kind %3d[%3d] type %3d group %3d sector %3d",id,kind,objectData->kind,typeDataPtr->unk0,group,sector);
|
||||
bVar12 = (parent->unk6 == -1);
|
||||
parent->unk4 = id;
|
||||
parent->unk6 = kind;
|
||||
|
|
@ -349,11 +451,11 @@ s32 GroundObject_Add(s32 id_,const GroundObjectData *objectData,s32 group_,s32 s
|
|||
sub_80A75CC(&(parent->unk144),id,parent->unk6, parent->flags);
|
||||
}
|
||||
|
||||
InitActionWithParams(&parent->unk38,gGroundObjectCallbacks,parent,group,sector);
|
||||
InitActionWithParams(&parent->unk38,&gGroundObjectCallbacks,parent,group,sector);
|
||||
|
||||
// What an ugly way of coding that...
|
||||
SetPredefinedScript(&parent->unk38,1, (objectData->scripts[1] != NULL) ? objectData->scripts[1]
|
||||
: (SpriteHasPokemonSize_80A66A4(&parent->unk144)) ? &gUnknown_8118350 : &gUnknown_81182F4);
|
||||
: (SpriteHasPokemonSize_80A66A4(&parent->unk144)) ? gUnknown_8118350 : gUnknown_81182F4);
|
||||
SetPredefinedScript(&parent->unk38,2,(objectData->scripts[2] != NULL) ? objectData->scripts[2]
|
||||
: gFunctionScriptTable[4].script);
|
||||
SetPredefinedScript(&parent->unk38,3,(objectData->scripts[3] != NULL) ? objectData->scripts[3]
|
||||
|
|
@ -361,7 +463,7 @@ s32 GroundObject_Add(s32 id_,const GroundObjectData *objectData,s32 group_,s32 s
|
|||
|
||||
if (objectData->scripts[0] != NULL) {
|
||||
SetPredefinedScript(&parent->unk38,0,objectData->scripts[0]);
|
||||
ExecutePredefinedScript(&parent->unk38,NULL,0,&gUnknown_81184A4);
|
||||
ExecutePredefinedScript(&parent->unk38,NULL,0,DEBUG_LOC_PTR(gUnknown_8118334, 0x283, "GroundObject_Add"));
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
|
@ -373,7 +475,7 @@ void GroundObject_Delete(s32 index_) {
|
|||
s32 index = (s16)index_;
|
||||
GroundObject *parent = &gGroundObjects[index];
|
||||
|
||||
Log(0, gUnknown_81184B0, index);
|
||||
Log(0, "GroundObject Delete id %3d", index);
|
||||
sub_80A7658(&parent->unk144);
|
||||
InitAction2(&parent->unk38);
|
||||
parent->unk6 = -1;
|
||||
|
|
@ -429,7 +531,6 @@ bool8 sub_80AC274(s32 index_, ScriptInfoSmall *scriptInfo, s32 a2_)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
extern u8 gUnknown_81184CC[];
|
||||
extern DebugLocation gUnknown_8118504;
|
||||
|
||||
bool8 GroundObject_ExecuteScript(s32 index_, void *a1, ScriptInfoSmall *script)
|
||||
|
|
@ -437,11 +538,11 @@ bool8 GroundObject_ExecuteScript(s32 index_, void *a1, ScriptInfoSmall *script)
|
|||
s32 index = (s16)index_;
|
||||
GroundObject *parent = &gGroundObjects[index];
|
||||
|
||||
Log(0, gUnknown_81184CC, index);
|
||||
Log(0, "GroundObject Execute %3d ", index);
|
||||
|
||||
if(parent->unk6 != -1)
|
||||
{
|
||||
GroundScript_ExecutePP(&parent->unk38, (ActionUnkIds *)a1, script, &gUnknown_8118504);
|
||||
GroundScript_ExecutePP(&parent->unk38, (ActionUnkIds *)a1, script, DEBUG_LOC_PTR(gUnknown_8118334, 0x303, "GroundObject_ExecuteScript"));
|
||||
parent->unk13C = 1;
|
||||
return 1;
|
||||
}
|
||||
|
|
@ -530,7 +631,7 @@ s16 sub_80AC448(s32 index_, PixelPos *pos)
|
|||
return parent->unk6;
|
||||
}
|
||||
|
||||
extern void TryMoveObjectRelative_80AC6AC(void *, PixelPos *);
|
||||
extern s32 TryMoveObjectRelative_80AC6AC(GroundObject *, PixelPos *);
|
||||
|
||||
|
||||
s16 sub_80AC49C(s32 index_, PixelPos *pos)
|
||||
|
|
@ -564,3 +665,249 @@ s32 sub_80AC4C8(s32 index, PixelPos *a0, PixelPos *a1) {
|
|||
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
// https://decomp.me/scratch/VEJ5Z (96.09% matched)
|
||||
NAKED
|
||||
s32 sub_80AC554(s32 flag, PixelPos *param_2, PixelPos *param_3) {
|
||||
asm_unified(
|
||||
"\tpush {r4-r7,lr}\n"
|
||||
"\tmov r7, r10\n"
|
||||
"\tmov r6, r9\n"
|
||||
"\tmov r5, r8\n"
|
||||
"\tpush {r5-r7}\n"
|
||||
"\tmov r8, r0\n"
|
||||
"\tmov r10, r1\n"
|
||||
"\tadds r4, r2, 0\n"
|
||||
"\tldr r0, _080AC5C8\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tmov r12, r0\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tnegs r0, r0\n"
|
||||
"\tmov r9, r0\n"
|
||||
"\tmovs r7, 0x80\n"
|
||||
"\tlsls r7, 9\n"
|
||||
"_080AC576:\n"
|
||||
"\tmov r1, r12\n"
|
||||
"\tmovs r2, 0x6\n"
|
||||
"\tldrsh r0, [r1, r2]\n"
|
||||
"\tcmp r0, r9\n"
|
||||
"\tbeq _080AC5CC\n"
|
||||
"\tmovs r0, 0x8E\n"
|
||||
"\tlsls r0, 1\n"
|
||||
"\tadd r0, r12\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tmov r5, r8\n"
|
||||
"\tands r0, r5\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080AC5CC\n"
|
||||
"\tmovs r0, 0x92\n"
|
||||
"\tlsls r0, 1\n"
|
||||
"\tadd r0, r12\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmov r5, r12\n"
|
||||
"\tldr r0, [r5, 0x14]\n"
|
||||
"\tadds r2, r1, r0\n"
|
||||
"\tmovs r0, 0x94\n"
|
||||
"\tlsls r0, 1\n"
|
||||
"\tadd r0, r12\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tldr r0, [r5, 0x18]\n"
|
||||
"\tadds r3, r1, r0\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tcmp r2, r0\n"
|
||||
"\tbge _080AC5CC\n"
|
||||
"\tmov r1, r10\n"
|
||||
"\tldr r0, [r1]\n"
|
||||
"\tcmp r2, r0\n"
|
||||
"\tble _080AC5CC\n"
|
||||
"\tldr r0, [r4, 0x4]\n"
|
||||
"\tcmp r3, r0\n"
|
||||
"\tbge _080AC5CC\n"
|
||||
"\tldr r0, [r1, 0x4]\n"
|
||||
"\tcmp r3, r0\n"
|
||||
"\tble _080AC5CC\n"
|
||||
"\tadds r0, r6, 0\n"
|
||||
"\tb _080AC5E4\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_080AC5C8: .4byte gGroundObjects\n"
|
||||
"_080AC5CC:\n"
|
||||
"\tadds r0, r7, 0\n"
|
||||
"\tmovs r2, 0x80\n"
|
||||
"\tlsls r2, 9\n"
|
||||
"\tadds r7, r2\n"
|
||||
"\tasrs r6, r0, 16\n"
|
||||
"\tmovs r5, 0xE2\n"
|
||||
"\tlsls r5, 1\n"
|
||||
"\tadd r12, r5\n"
|
||||
"\tcmp r6, 0xF\n"
|
||||
"\tble _080AC576\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tnegs r0, r0\n"
|
||||
"_080AC5E4:\n"
|
||||
"\tpop {r3-r5}\n"
|
||||
"\tmov r8, r3\n"
|
||||
"\tmov r9, r4\n"
|
||||
"\tmov r10, r5\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r1}\n"
|
||||
"\tbx r1");
|
||||
}
|
||||
|
||||
bool8 CheckMapCollision_80A585C(PixelPos *, PixelPos *);
|
||||
s32 GetLivesCollision_80A92A0(s32 id, u32 flags, PixelPos *, PixelPos *);
|
||||
|
||||
s32 GetObjectCollision_80AC5F4(GroundObject *param_1, PixelPos *param_2, PixelPos *param_3)
|
||||
{
|
||||
PixelPos local_28 = { param_2->x / 2048 , param_2->y / 2048 };
|
||||
PixelPos iVar1 = { (param_3->x - 1) / 2048, (param_3->y - 1) / 2048 };
|
||||
PixelPos local_20 = { (iVar1.x - local_28.x) + 1, (iVar1.y - local_28.y) + 1 };
|
||||
|
||||
if (param_1->flags & 1)
|
||||
{
|
||||
if(CheckMapCollision_80A585C(&local_28,&local_20))
|
||||
return 1;
|
||||
}
|
||||
if (((param_1->flags & 4))) {
|
||||
if(((s16)GetLivesCollision_80A92A0(-1,4,param_2,param_3) >= 0))
|
||||
return 4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 TryMoveObjectRelative_80AC6AC(GroundObject *param_1,PixelPos *param_2)
|
||||
{
|
||||
PixelPos local_1c;
|
||||
PixelPos local_14;
|
||||
|
||||
local_1c.x = param_2->x - (param_1->unk14).x;
|
||||
local_1c.y = param_2->y - (param_1->unk14).y;
|
||||
local_14.x = param_2->x + (param_1->unk14).x;
|
||||
local_14.y = param_2->y + (param_1->unk14).y;
|
||||
if ((((local_1c.x < param_1->unk28.x) || (local_14.x >= param_1->unk30.x)) ||
|
||||
(local_1c.y < param_1->unk28.y)) || (local_14.y >= param_1->unk30.y)) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
s32 ret = GetObjectCollision_80AC5F4(param_1,&local_1c,&local_14);
|
||||
if (ret == 0) {
|
||||
(param_1->unk124) = local_1c;
|
||||
param_1->unk12C = local_14;
|
||||
return 0;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
s32 TryMoveRelative_80AC720(GroundObject *param_1,PixelPos *param_2)
|
||||
{
|
||||
s32 ret;
|
||||
bool8 bVar1;
|
||||
PixelPos iVar2;
|
||||
PixelPos uVar4;
|
||||
|
||||
iVar2.x = (param_1->unk124).x + param_2->x;
|
||||
iVar2.y = (param_1->unk124).y + param_2->y;
|
||||
uVar4.x = param_1->unk12C.x + param_2->x;
|
||||
uVar4.y = param_1->unk12C.y + param_2->y;
|
||||
|
||||
bVar1 = 0;
|
||||
|
||||
|
||||
if (iVar2.x < param_1->unk28.x) {
|
||||
iVar2.x = param_1->unk28.x;
|
||||
uVar4.x = param_1->unk28.x + param_1->unkC.x;
|
||||
bVar1 = 1;
|
||||
}
|
||||
else {
|
||||
if (uVar4.x >= param_1->unk30.x) {
|
||||
iVar2.x = param_1->unk30.x - param_1->unkC.x;
|
||||
uVar4.x = param_1->unk30.x;
|
||||
bVar1 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (iVar2.y < param_1->unk28.y) {
|
||||
iVar2.y = param_1->unk28.y;
|
||||
uVar4.y = param_1->unk28.y + param_1->unkC.y;
|
||||
bVar1 = 1;
|
||||
}
|
||||
else {
|
||||
if (uVar4.y >= param_1->unk30.y){
|
||||
iVar2.y = param_1->unk30.y - param_1->unkC.y;
|
||||
uVar4.y = param_1->unk30.y;
|
||||
bVar1 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
ret = GetObjectCollision_80AC5F4(param_1,&iVar2,&uVar4);
|
||||
if (ret == 0) {
|
||||
(param_1->unk124) = iVar2;
|
||||
param_1->unk12C = uVar4;
|
||||
if (!bVar1) {
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static s16 CallbackObjectGetIndex(void *ptr)
|
||||
{
|
||||
struct GroundObject *groundObject = ptr;
|
||||
return groundObject->unk4;
|
||||
}
|
||||
|
||||
static void CallbackObjectGetSize(void *objectPtr_, PixelPos *out)
|
||||
{
|
||||
struct GroundObject *objectPtr = objectPtr_;
|
||||
*out = objectPtr->unkC;
|
||||
}
|
||||
|
||||
static void CallbackObjectSetHitboxPos(void *objectPtr_, PixelPos *posOrNull)
|
||||
{
|
||||
struct GroundObject *objectPtr = objectPtr_;
|
||||
|
||||
if (posOrNull != NULL) {
|
||||
objectPtr->unk124.x = posOrNull->x - objectPtr->unk14.x;
|
||||
objectPtr->unk12C.x = posOrNull->x + objectPtr->unk14.x;
|
||||
objectPtr->unk124.y = posOrNull->y - objectPtr->unk14.y;
|
||||
objectPtr->unk12C.y = posOrNull->y + objectPtr->unk14.y;
|
||||
}
|
||||
else {
|
||||
objectPtr->unk124.x = objectPtr->unk20.x - objectPtr->unk14.x;
|
||||
objectPtr->unk12C.x = objectPtr->unk20.x + objectPtr->unk14.x;
|
||||
objectPtr->unk124.y = objectPtr->unk20.y - objectPtr->unk14.y;
|
||||
objectPtr->unk12C.y = objectPtr->unk20.y + objectPtr->unk14.y;
|
||||
objectPtr->unk134.x = objectPtr->unk134.y = 0;
|
||||
if (objectPtr->unk120 != objectPtr->unk1C) {
|
||||
objectPtr->unk13C = TRUE;
|
||||
}
|
||||
objectPtr->unk120 = objectPtr->unk1C;
|
||||
}
|
||||
}
|
||||
|
||||
static void CallbackObjectSetPositionBounds(void *objectPtr_, PixelPos *from, PixelPos *to)
|
||||
{
|
||||
struct GroundObject *objectPtr = objectPtr_;
|
||||
|
||||
objectPtr->unk28 = *from;
|
||||
objectPtr->unk30 = *to;
|
||||
}
|
||||
|
||||
static void CallbackObjectGetHitboxCenter(void *objectPtr_, PixelPos *out)
|
||||
{
|
||||
struct GroundObject *objectPtr = objectPtr_;
|
||||
|
||||
out->x = objectPtr->unk124.x + objectPtr->unk14.x;
|
||||
out->y = objectPtr->unk124.y + objectPtr->unk14.y;
|
||||
}
|
||||
|
||||
static s32 CallbackObjectMoveReal(void *objectPtr_, PixelPos *pos)
|
||||
{
|
||||
struct GroundObject *objectPtr = objectPtr_;
|
||||
return TryMoveObjectRelative_80AC6AC(objectPtr, pos);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user