move most ground_effects funcs to src

This commit is contained in:
Seth Barberee 2025-06-29 15:43:41 -07:00
parent c41404b429
commit 6fe3168caf
4 changed files with 427 additions and 707 deletions

View File

@ -1,677 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_80AD3E0
sub_80AD3E0:
push {r4-r7,lr}
mov r12, r0
ldr r3, [r1]
ldr r2, [r0, 0x14]
subs r6, r3, r2
ldr r1, [r1, 0x4]
ldr r0, [r0, 0x18]
subs r7, r1, r0
adds r4, r3, r2
adds r5, r1, r0
mov r1, r12
ldr r0, [r1, 0x28]
cmp r6, r0
blt _080AD40E
ldr r0, [r1, 0x30]
cmp r4, r0
bge _080AD40E
ldr r0, [r1, 0x2C]
cmp r7, r0
blt _080AD40E
ldr r0, [r1, 0x34]
cmp r5, r0
blt _080AD412
_080AD40E:
movs r0, 0x1
b _080AD428
_080AD412:
movs r0, 0x92
lsls r0, 1
add r0, r12
str r6, [r0]
str r7, [r0, 0x4]
movs r0, 0x96
lsls r0, 1
add r0, r12
str r4, [r0]
str r5, [r0, 0x4]
movs r0, 0
_080AD428:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_80AD3E0
thumb_func_start sub_80AD430
sub_80AD430:
push {r4-r6,lr}
mov r12, r0
movs r0, 0x92
lsls r0, 1
add r0, r12
ldr r0, [r0]
ldr r2, [r1]
adds r5, r0, r2
movs r0, 0x94
lsls r0, 1
add r0, r12
ldr r0, [r0]
ldr r1, [r1, 0x4]
adds r6, r0, r1
movs r0, 0x96
lsls r0, 1
add r0, r12
ldr r0, [r0]
adds r3, r0, r2
movs r0, 0x98
lsls r0, 1
add r0, r12
ldr r0, [r0]
adds r4, r0, r1
mov r0, r12
ldr r1, [r0, 0x28]
cmp r5, r1
bge _080AD470
adds r5, r1, 0
ldr r0, [r0, 0xC]
adds r3, r1, r0
b _080AD47E
_080AD470:
mov r2, r12
ldr r1, [r2, 0x30]
cmp r3, r1
blt _080AD47E
ldr r0, [r2, 0xC]
subs r5, r1, r0
adds r3, r1, 0
_080AD47E:
mov r0, r12
ldr r1, [r0, 0x2C]
cmp r6, r1
bge _080AD48E
adds r6, r1, 0
ldr r0, [r0, 0x10]
adds r4, r1, r0
b _080AD49C
_080AD48E:
mov r2, r12
ldr r1, [r2, 0x34]
cmp r4, r1
blt _080AD49C
ldr r0, [r2, 0x10]
subs r6, r1, r0
adds r4, r1, 0
_080AD49C:
movs r0, 0x92
lsls r0, 1
add r0, r12
str r5, [r0]
str r6, [r0, 0x4]
movs r0, 0x96
lsls r0, 1
add r0, r12
str r3, [r0]
str r4, [r0, 0x4]
movs r0, 0
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_80AD430
thumb_func_start CallbackEffectGetIndex
CallbackEffectGetIndex:
movs r1, 0x4
ldrsh r0, [r0, r1]
bx lr
thumb_func_end CallbackEffectGetIndex
thumb_func_start CallbackEffectGetSize
CallbackEffectGetSize:
ldr r2, [r0, 0xC]
ldr r3, [r0, 0x10]
str r2, [r1]
str r3, [r1, 0x4]
bx lr
thumb_func_end CallbackEffectGetSize
thumb_func_start CallbackEffectSetHitboxPos
CallbackEffectSetHitboxPos:
push {r4,lr}
adds r3, r0, 0
adds r4, r1, 0
cmp r4, 0
beq _080AD50C
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 _080AD572
_080AD50C:
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 _080AD56E
movs r0, 0x9E
lsls r0, 1
adds r1, r3, r0
movs r0, 0x1
strb r0, [r1]
_080AD56E:
ldrb r0, [r3, 0x1C]
strb r0, [r2]
_080AD572:
pop {r4}
pop {r0}
bx r0
thumb_func_end CallbackEffectSetHitboxPos
thumb_func_start CallbackEffectSetPositionBounds
CallbackEffectSetPositionBounds:
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 CallbackEffectSetPositionBounds
thumb_func_start CallbackEffectGetHitboxCenter
CallbackEffectGetHitboxCenter:
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 CallbackEffectGetHitboxCenter
thumb_func_start CallbackEffectMoveReal
CallbackEffectMoveReal:
push {lr}
bl sub_80AD3E0
pop {r1}
bx r1
thumb_func_end CallbackEffectMoveReal
thumb_func_start CallbackEffectGetPosHeightAndUnk
CallbackEffectGetPosHeightAndUnk:
push {r4,lr}
adds r3, r0, 0
movs r4, 0x9A
lsls r4, 1
adds r0, r3, r4
ldr r0, [r0]
str r0, [r1]
movs r1, 0x9C
lsls r1, 1
adds r0, r3, r1
ldr r0, [r0]
str r0, [r2]
pop {r4}
pop {r0}
bx r0
thumb_func_end CallbackEffectGetPosHeightAndUnk
thumb_func_start CallbackEffectSetPosHeight
CallbackEffectSetPosHeight:
movs r2, 0x9A
lsls r2, 1
adds r0, r2
str r1, [r0]
bx lr
thumb_func_end CallbackEffectSetPosHeight
thumb_func_start CallbackEffectGetDirection
CallbackEffectGetDirection:
movs r2, 0x90
lsls r2, 1
adds r0, r2
ldrb r0, [r0]
strb r0, [r1]
bx lr
thumb_func_end CallbackEffectGetDirection
thumb_func_start CallbackEffectSetDirection
CallbackEffectSetDirection:
push {lr}
adds r2, r0, 0
lsls r1, 24
asrs r1, 24
movs r0, 0x1
negs r0, r0
cmp r1, r0
beq _080AD60C
movs r3, 0x90
lsls r3, 1
adds r0, r2, r3
strb r1, [r0]
_080AD60C:
pop {r0}
bx r0
thumb_func_end CallbackEffectSetDirection
thumb_func_start CallbackEffectSetEventIndex
CallbackEffectSetEventIndex:
push {r4,r5,lr}
lsls r1, 16
adds r3, r0, 0
movs r0, 0xFF
lsls r0, 16
ands r0, r1
lsrs r0, 16
cmp r0, 0
beq _080AD630
ldr r1, _080AD62C
lsls r0, 1
adds r0, r1
b _080AD636
.align 2, 0
_080AD62C: .4byte gUnknown_81185F2
_080AD630:
movs r5, 0x9F
lsls r5, 1
adds r0, r3, r5
_080AD636:
movs r1, 0
ldrsh r2, [r0, r1]
movs r5, 0x9F
lsls r5, 1
adds r1, r3, r5
ldrh r4, [r1]
movs r5, 0
ldrsh r0, [r1, r5]
cmp r0, r2
beq _080AD654
strh r2, [r1]
movs r0, 0x9E
lsls r0, 1
adds r1, r3, r0
b _080AD664
_080AD654:
movs r0, 0x80
lsls r0, 5
ands r0, r4
cmp r0, 0
beq _080AD668
movs r5, 0x9E
lsls r5, 1
adds r1, r3, r5
_080AD664:
movs r0, 0x1
strb r0, [r1]
_080AD668:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end CallbackEffectSetEventIndex
thumb_func_start CallbackEffectSetUnk_80AD670
CallbackEffectSetUnk_80AD670:
push {lr}
lsls r1, 16
asrs r1, 16
adds r2, r1, 0
cmp r1, 0
bne _080AD682
movs r1, 0xE0
lsls r1, 1
adds r2, r1, 0
_080AD682:
movs r1, 0xA0
lsls r1, 1
adds r0, r1
strh r2, [r0]
pop {r0}
bx r0
thumb_func_end CallbackEffectSetUnk_80AD670
thumb_func_start CallbackEffectSpriteRelatedCheck_80AD690
CallbackEffectSpriteRelatedCheck_80AD690:
push {lr}
adds r1, r0, 0
movs r2, 0x9E
lsls r2, 1
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
bne _080AD6AE
adds r2, 0x8
adds r0, r1, r2
bl sub_80A66F8
lsls r0, 24
lsrs r0, 24
b _080AD6B0
_080AD6AE:
movs r0, 0x1
_080AD6B0:
pop {r1}
bx r1
thumb_func_end CallbackEffectSpriteRelatedCheck_80AD690
thumb_func_start CallbackEffectSpriteRelated_80AD6B4
CallbackEffectSpriteRelated_80AD6B4:
push {lr}
adds r1, r0, 0
movs r2, 0xA0
lsls r2, 1
adds r0, r1, r2
movs r2, 0
ldrsh r0, [r0, r2]
cmp r0, 0
bne _080AD6D6
movs r2, 0xA2
lsls r2, 1
adds r0, r1, r2
bl sub_80A671C
lsls r0, 24
lsrs r0, 24
b _080AD6D8
_080AD6D6:
movs r0, 0x1
_080AD6D8:
pop {r1}
bx r1
thumb_func_end CallbackEffectSpriteRelated_80AD6B4
thumb_func_start CallbackEffectGetFlags
CallbackEffectGetFlags:
movs r2, 0x8E
lsls r2, 1
adds r0, r2
ldr r0, [r0]
str r0, [r1]
bx lr
thumb_func_end CallbackEffectGetFlags
thumb_func_start CallbackEffectSetFlags
CallbackEffectSetFlags:
push {lr}
movs r2, 0x4
ldrsh r0, [r0, r2]
bl sub_80AD0C8
pop {r0}
bx r0
thumb_func_end CallbackEffectSetFlags
thumb_func_start CallbackEffectClearFlags
CallbackEffectClearFlags:
push {lr}
movs r2, 0x4
ldrsh r0, [r0, r2]
bl sub_80AD10C
pop {r0}
bx r0
thumb_func_end CallbackEffectClearFlags
thumb_func_start CallbackEffectMoveRelative
CallbackEffectMoveRelative:
push {lr}
bl sub_80AD430
pop {r1}
bx r1
thumb_func_end CallbackEffectMoveRelative
thumb_func_start GroundEffect_Action
GroundEffect_Action:
push {r4-r7,lr}
mov r7, r8
push {r7}
ldr r0, _080AD754
ldr r5, [r0]
movs r7, 0
movs r0, 0x1
negs r0, r0
mov r8, r0
movs r1, 0x9E
lsls r1, 1
adds r6, r5, r1
_080AD72C:
movs r3, 0x6
ldrsh r0, [r5, r3]
cmp r0, r8
beq _080AD78A
adds r4, r5, 0
adds r4, 0x38
adds r0, r4, 0
ldr r1, _080AD758
bl HandleAction
lsls r0, 16
asrs r0, 16
cmp r0, 0
beq _080AD75C
cmp r0, 0x4
bne _080AD768
adds r0, r7, 0
bl GroundEffect_Delete
b _080AD78A
.align 2, 0
_080AD754: .4byte gGroundEffects
_080AD758: .4byte gUnknown_811874C
_080AD75C:
adds r0, r4, 0
movs r1, 0
movs r2, 0x1
ldr r3, _080AD7A8
bl ExecutePredefinedScript
_080AD768:
ldrb r0, [r6]
cmp r0, 0
beq _080AD78A
movs r0, 0
strb r0, [r6]
movs r1, 0xA2
lsls r1, 1
adds r0, r5, r1
ldrh r2, [r6, 0x2]
movs r3, 0xF8
lsls r3, 5
adds r1, r3, 0
ands r1, r2
lsls r2, 24
asrs r2, 24
bl sub_80A6EFC
_080AD78A:
adds r0, r7, 0x1
lsls r0, 16
asrs r7, r0, 16
movs r0, 0xE2
lsls r0, 1
adds r6, r0
adds r5, r0
cmp r7, 0xF
ble _080AD72C
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080AD7A8: .4byte gUnknown_8118758
thumb_func_end GroundEffect_Action
thumb_func_start sub_80AD7AC
sub_80AD7AC:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x8
ldr r0, _080AD864
ldr r6, [r0]
movs r0, 0
mov r8, r0
movs r1, 0x1
negs r1, r1
mov r9, r1
movs r2, 0x90
lsls r2, 1
adds r4, r6, r2
_080AD7CA:
movs r0, 0x6
ldrsh r1, [r6, r0]
mov r2, r9
lsls r0, r2, 16
asrs r0, 16
cmp r1, r0
beq _080AD83C
ldr r0, [r4, 0x4]
ldr r1, [r6, 0x14]
adds r0, r1
str r0, [sp]
ldr r0, [r4, 0x8]
ldr r1, [r6, 0x18]
adds r0, r1
str r0, [sp, 0x4]
ldr r1, [r4, 0x14]
ldr r0, [r4, 0x18]
adds r7, r1, r0
movs r0, 0xA2
lsls r0, 1
adds r5, r6, r0
adds r0, r5, 0
bl sub_80A66D4
lsls r0, 24
cmp r0, 0
beq _080AD818
movs r0, 0
strb r0, [r4, 0x1C]
ldrh r2, [r4, 0x1E]
movs r0, 0xF8
lsls r0, 5
adds r1, r0, 0
ands r1, r2
lsls r2, 24
asrs r2, 24
adds r0, r5, 0
bl sub_80A6EFC
_080AD818:
movs r1, 0x20
ldrsh r0, [r4, r1]
cmp r0, 0
beq _080AD832
adds r1, r0, 0
movs r2, 0
ldrsb r2, [r4, r2]
adds r0, r5, 0
movs r3, 0
bl sub_80A7040
movs r0, 0
strh r0, [r4, 0x20]
_080AD832:
adds r0, r5, 0
mov r1, sp
adds r2, r7, 0
bl sub_80A7720
_080AD83C:
mov r0, r8
adds r0, 0x1
lsls r0, 16
asrs r0, 16
mov r8, r0
movs r0, 0xE2
lsls r0, 1
adds r4, r0
adds r6, r0
mov r1, r8
cmp r1, 0xF
ble _080AD7CA
add sp, 0x8
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080AD864: .4byte gGroundEffects
thumb_func_end sub_80AD7AC
.align 2,0

View File

@ -1,15 +1,7 @@
.section .rodata
.align 2
@ ground_effect.c
.byte 0xf6, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.4byte gUnknown_81185D8
.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_81185D8
gUnknown_81185D8: @ 81185D8
.string "../ground/ground_effect.c\0"

View File

@ -357,7 +357,6 @@ SECTIONS {
src/ground_lives.o(.text);
src/ground_object.o(.text);
src/ground_effect.o(.text);
asm/ground_effect.o(.text);
src/ground_link.o(.text);
src/ground_event.o(.text);
src/unk_dungeon_load_maybe.o(.text);

View File

@ -51,6 +51,7 @@ struct GroundEffectTypeData
extern struct GroundEffectTypeData gGroundEffectTypes[];
extern const s16 gUnknown_81185F2[];
extern DebugLocation gUnknown_8118610;
extern const u8 gUnknown_811861C[];
extern const u8 gUnknown_8118640[];
@ -75,25 +76,31 @@ void sub_80A7714(struct UnkGroundSpriteStruct *);
void sub_80A6688(struct UnkGroundSpriteStruct *, s32);
extern bool8 GroundScriptNotify(Action*, s32);
extern bool8 GroundScript_Cancel(Action *r0);
s32 sub_80AD3E0(GroundEffect *, PixelPos *);
extern bool8 sub_80A66F8(struct UnkGroundSpriteStruct *ptr);
extern bool8 sub_80A671C(struct UnkGroundSpriteStruct *ptr);
bool8 sub_80A66D4(struct UnkGroundSpriteStruct *ptr);
void sub_80A7720(struct UnkGroundSpriteStruct *ptr, PixelPos *pixelPos, s32 a2);
extern s16 CallbackEffectGetIndex(void *ptr);
extern void CallbackEffectGetSize(void *effectPtr_, PixelPos *out);
extern void CallbackEffectSetHitboxPos(void *effectPtr_, PixelPos *posOrNull);
extern void CallbackEffectSetPositionBounds(void *effectPtr_, PixelPos *from, PixelPos *to);
extern void CallbackEffectGetHitboxCenter(void *effectPtr_, PixelPos *out);
extern s32 CallbackEffectMoveReal(void *effectPtr_, PixelPos *pos);
extern void CallbackEffectGetPosHeightAndUnk(void *effectPtr_, u32 *height, u32 *unk);
extern void CallbackEffectSetPosHeight(void *effectPtr_, u32 height);
extern void CallbackEffectGetDirection(void *effectPtr_, s8 *dir);
extern void CallbackEffectSetDirection(void *effectPtr_, s32 dir_);
extern void CallbackEffectSetEventIndex(void *effectPtr_, u16 a1);
extern void CallbackEffectSetUnk_80AD670(void *effectPtr_, s32 a1_, s32 a2);
extern bool8 CallbackEffectSpriteRelatedCheck_80AD690(void *effectPtr_);
extern bool8 CallbackEffectSpriteRelated_80AD6B4(void *effectPtr_);
extern void CallbackEffectGetFlags(void *effectPtr_, u32 *flags);
extern void CallbackEffectSetFlags(void *effectPtr_, u32 flags);
extern void CallbackEffectClearFlags(void *effectPtr_, u32 flags);
extern s32 CallbackEffectMoveRelative(void *effectPtr_, PixelPos *pos);
static s16 CallbackEffectGetIndex(void *ptr);
static void CallbackEffectGetSize(void *effectPtr_, PixelPos *out);
static void CallbackEffectSetHitboxPos(void *effectPtr_, PixelPos *posOrNull);
static void CallbackEffectSetPositionBounds(void *effectPtr_, PixelPos *from, PixelPos *to);
static void CallbackEffectGetHitboxCenter(void *effectPtr_, PixelPos *out);
static s32 CallbackEffectMoveReal(void *effectPtr_, PixelPos *pos);
static void CallbackEffectGetPosHeightAndUnk(void *effectPtr_, u32 *height, u32 *unk);
static void CallbackEffectSetPosHeight(void *effectPtr_, u32 height);
static void CallbackEffectGetDirection(void *effectPtr_, s8 *dir);
static void CallbackEffectSetDirection(void *effectPtr_, s32 dir_);
static void CallbackEffectSetEventIndex(void *effectPtr_, u16 a1);
static void CallbackEffectSetUnk_80AD670(void *effectPtr_, s32 a1_, s32 a2);
static bool8 CallbackEffectSpriteRelatedCheck_80AD690(void *effectPtr_);
static bool8 CallbackEffectSpriteRelated_80AD6B4(void *effectPtr_);
static void CallbackEffectGetFlags(void *effectPtr_, u32 *flags);
static void CallbackEffectSetFlags(void *effectPtr_, u32 flags);
static void CallbackEffectClearFlags(void *effectPtr_, u32 flags);
static s32 CallbackEffectMoveRelative(void *effectPtr_, PixelPos *pos);
static const CallbackData gGroundEffectCallbacks = {
.maybeId = 3,
@ -118,6 +125,40 @@ static const CallbackData gGroundEffectCallbacks = {
.func4C_spriteRelatedCheck = CallbackEffectSpriteRelatedCheck_80AD690,
.func50_spriteRelated = CallbackEffectSpriteRelated_80AD6B4,
};
extern const u8 gUnknown_81185D8[];
#define FAKE_FILENAME gUnknown_81185D8
static const struct ScriptCommand gUnusedScript[] = {
DEBUGINFO, // Needs to be line 155
LABEL(0),
WAIT(0x78),
JUMP_LABEL(0),
};
//ALIGNED(4) const u8 gUnknown_81185D8[] = "../ground/ground_effect.c";
void AllocGroundEffects()
{
@ -765,9 +806,6 @@ s16 sub_80AD360(s32 index_, PixelPos *pos)
return parent->kind;
}
extern s32 sub_80AD3E0(GroundEffect *, PixelPos *);
s16 sub_80AD3B4(s32 index_, PixelPos *pos)
{
s32 index = (s16)index_;
@ -778,3 +816,371 @@ s16 sub_80AD3B4(s32 index_, PixelPos *pos)
return parent->kind;
}
NAKED
s32 sub_80AD3E0(GroundEffect *r0, PixelPos *r1)
{
asm_unified(
"\tpush {r4-r7,lr}\n"
"\tmov r12, r0\n"
"\tldr r3, [r1]\n"
"\tldr r2, [r0, 0x14]\n"
"\tsubs r6, r3, r2\n"
"\tldr r1, [r1, 0x4]\n"
"\tldr r0, [r0, 0x18]\n"
"\tsubs r7, r1, r0\n"
"\tadds r4, r3, r2\n"
"\tadds r5, r1, r0\n"
"\tmov r1, r12\n"
"\tldr r0, [r1, 0x28]\n"
"\tcmp r6, r0\n"
"\tblt _080AD40E\n"
"\tldr r0, [r1, 0x30]\n"
"\tcmp r4, r0\n"
"\tbge _080AD40E\n"
"\tldr r0, [r1, 0x2C]\n"
"\tcmp r7, r0\n"
"\tblt _080AD40E\n"
"\tldr r0, [r1, 0x34]\n"
"\tcmp r5, r0\n"
"\tblt _080AD412\n"
"_080AD40E:\n"
"\tmovs r0, 0x1\n"
"\tb _080AD428\n"
"_080AD412:\n"
"\tmovs r0, 0x92\n"
"\tlsls r0, 1\n"
"\tadd r0, r12\n"
"\tstr r6, [r0]\n"
"\tstr r7, [r0, 0x4]\n"
"\tmovs r0, 0x96\n"
"\tlsls r0, 1\n"
"\tadd r0, r12\n"
"\tstr r4, [r0]\n"
"\tstr r5, [r0, 0x4]\n"
"\tmovs r0, 0\n"
"_080AD428:\n"
"\tpop {r4-r7}\n"
"\tpop {r1}\n"
"\tbx r1");
}
NAKED
s32 sub_80AD430(GroundEffect *r0, PixelPos *r1)
{
asm_unified(
"\tpush {r4-r6,lr}\n"
"\tmov r12, r0\n"
"\tmovs r0, 0x92\n"
"\tlsls r0, 1\n"
"\tadd r0, r12\n"
"\tldr r0, [r0]\n"
"\tldr r2, [r1]\n"
"\tadds r5, r0, r2\n"
"\tmovs r0, 0x94\n"
"\tlsls r0, 1\n"
"\tadd r0, r12\n"
"\tldr r0, [r0]\n"
"\tldr r1, [r1, 0x4]\n"
"\tadds r6, r0, r1\n"
"\tmovs r0, 0x96\n"
"\tlsls r0, 1\n"
"\tadd r0, r12\n"
"\tldr r0, [r0]\n"
"\tadds r3, r0, r2\n"
"\tmovs r0, 0x98\n"
"\tlsls r0, 1\n"
"\tadd r0, r12\n"
"\tldr r0, [r0]\n"
"\tadds r4, r0, r1\n"
"\tmov r0, r12\n"
"\tldr r1, [r0, 0x28]\n"
"\tcmp r5, r1\n"
"\tbge _080AD470\n"
"\tadds r5, r1, 0\n"
"\tldr r0, [r0, 0xC]\n"
"\tadds r3, r1, r0\n"
"\tb _080AD47E\n"
"_080AD470:\n"
"\tmov r2, r12\n"
"\tldr r1, [r2, 0x30]\n"
"\tcmp r3, r1\n"
"\tblt _080AD47E\n"
"\tldr r0, [r2, 0xC]\n"
"\tsubs r5, r1, r0\n"
"\tadds r3, r1, 0\n"
"_080AD47E:\n"
"\tmov r0, r12\n"
"\tldr r1, [r0, 0x2C]\n"
"\tcmp r6, r1\n"
"\tbge _080AD48E\n"
"\tadds r6, r1, 0\n"
"\tldr r0, [r0, 0x10]\n"
"\tadds r4, r1, r0\n"
"\tb _080AD49C\n"
"_080AD48E:\n"
"\tmov r2, r12\n"
"\tldr r1, [r2, 0x34]\n"
"\tcmp r4, r1\n"
"\tblt _080AD49C\n"
"\tldr r0, [r2, 0x10]\n"
"\tsubs r6, r1, r0\n"
"\tadds r4, r1, 0\n"
"_080AD49C:\n"
"\tmovs r0, 0x92\n"
"\tlsls r0, 1\n"
"\tadd r0, r12\n"
"\tstr r5, [r0]\n"
"\tstr r6, [r0, 0x4]\n"
"\tmovs r0, 0x96\n"
"\tlsls r0, 1\n"
"\tadd r0, r12\n"
"\tstr r3, [r0]\n"
"\tstr r4, [r0, 0x4]\n"
"\tmovs r0, 0\n"
"\tpop {r4-r6}\n"
"\tpop {r1}\n"
"\tbx r1");
}
static s16 CallbackEffectGetIndex(void *ptr)
{
struct GroundEffect *groundObject = ptr;
return groundObject->id;
}
static void CallbackEffectGetSize(void *objectPtr_, PixelPos *out)
{
struct GroundEffect *objectPtr = objectPtr_;
*out = objectPtr->unkC;
}
static void CallbackEffectSetHitboxPos(void *objectPtr_, PixelPos *posOrNull)
{
struct GroundEffect *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->direction != objectPtr->direction1) {
objectPtr->directionRelated = TRUE;
}
objectPtr->direction = objectPtr->direction1;
}
}
static void CallbackEffectSetPositionBounds(void *objectPtr_, PixelPos *from, PixelPos *to)
{
struct GroundEffect *objectPtr = objectPtr_;
objectPtr->unk28 = *from;
objectPtr->unk30 = *to;
}
static void CallbackEffectGetHitboxCenter(void *objectPtr_, PixelPos *out)
{
struct GroundEffect *objectPtr = objectPtr_;
out->x = objectPtr->unk124.x + objectPtr->unk14.x;
out->y = objectPtr->unk124.y + objectPtr->unk14.y;
}
static s32 CallbackEffectMoveReal(void *objectPtr_, PixelPos *pos)
{
struct GroundEffect *objectPtr = objectPtr_;
return sub_80AD3E0(objectPtr, pos);
}
static void CallbackEffectGetPosHeightAndUnk(void *objectPtr_, u32 *height, u32 *unk)
{
struct GroundEffect *objectPtr = objectPtr_;
*height = objectPtr->unk134.x;
*unk= objectPtr->unk134.y;
}
static void CallbackEffectSetPosHeight(void *objectPtr_, u32 height)
{
struct GroundEffect *objectPtr = objectPtr_;
objectPtr->unk134.x = height;
}
static void CallbackEffectGetDirection(void *objectPtr_, s8 *dir)
{
struct GroundEffect *objectPtr = objectPtr_;
*dir = objectPtr->direction;
}
static void CallbackEffectSetDirection(void *livesPtr_, s32 direction)
{
struct GroundEffect *livesPtr = livesPtr_;
s32 dir = (s8) direction;
if (dir != -1) {
livesPtr->direction = dir;
}
}
static void CallbackEffectSetEventIndex(void *livesPtr_, u16 a1) {
struct GroundEffect *livesPtr = livesPtr_;
u32 r1;
u16 f1 = a1 & 0xFF;
if (f1 != 0)
{
r1 = gUnknown_81185F2[f1];
}
else
{
r1 = livesPtr->unk13E;
}
if(livesPtr->unk13E != (s16) r1)
{
livesPtr->unk13E = r1;
livesPtr->directionRelated = 1;
}
else if((livesPtr->unk13E & 0x1000))
livesPtr->directionRelated = 1;
}
static void CallbackEffectSetUnk_80AD670(void *objectPtr_, s32 a1_, s32 a2) {
struct GroundEffect *livesPtr = objectPtr_;
s32 a1Match = (s16) a1_;
#ifndef NONMATCHING
register s16 a1 asm("r2") = a1Match;
#else
s32 a1 = a1Match;
#endif
if (a1Match == 0) {
a1 = 448;
}
livesPtr->unk140 = a1;
}
static bool8 CallbackEffectSpriteRelatedCheck_80AD690(void *objectPtr_)
{
struct GroundEffect *livesPtr = objectPtr_;
if (livesPtr->directionRelated) {
return TRUE;
}
else {
return sub_80A66F8(&livesPtr->unk144);
}
}
static bool8 CallbackEffectSpriteRelated_80AD6B4(void *objectPtr_)
{
struct GroundEffect *livesPtr = objectPtr_;
if (livesPtr->unk140 != 0) {
return TRUE;
}
else {
return sub_80A671C(&livesPtr->unk144);
}
}
static void CallbackEffectGetFlags(void *livesPtr_, u32 *flags)
{
struct GroundEffect *livesPtr = livesPtr_;
*flags = livesPtr->flags;
}
static void CallbackEffectSetFlags(void *livesPtr_, u32 flags)
{
struct GroundEffect *livesPtr = livesPtr_;
sub_80AD0C8(livesPtr->id, flags);
}
static void CallbackEffectClearFlags(void *livesPtr_, u32 flags)
{
struct GroundEffect *livesPtr = livesPtr_;
sub_80AD10C(livesPtr->id, flags);
}
static s32 CallbackEffectMoveRelative(void *livesPtr_, PixelPos *pos)
{
struct GroundEffect *livesPtr = livesPtr_;
return sub_80AD430(livesPtr, pos);
}
extern DebugLocation gUnknown_811874C;
extern DebugLocation gUnknown_8118758;
extern s16 HandleAction(Action *action, DebugLocation *debug);
void GroundEffect_Action(void)
{
GroundEffect *objectPtr;
s32 i;
s32 ret;
for (objectPtr = &gGroundEffects[0], i = 0; i < NUM_GROUND_EFFECTS; i = (s16)(i + 1), objectPtr++)
{
if (objectPtr->kind != -1) {
ret = HandleAction(&objectPtr->action, &gUnknown_811874C);
switch(ret)
{
case 4:
GroundEffect_Delete(i);
continue;
case 0:
ExecutePredefinedScript(&objectPtr->action, NULL, 1, &gUnknown_8118758);
break;
}
if (objectPtr->directionRelated) {
objectPtr->directionRelated = FALSE;
sub_80A6EFC(&objectPtr->unk144,objectPtr->unk13E & 0x1f00,(s8)objectPtr->unk13E);
}
}
}
}
void sub_80AD7AC(void)
{
GroundEffect *objectPtr;
s32 i;
s32 minus1;
for (objectPtr = &gGroundEffects[0], i = 0, minus1 = -1; i < NUM_GROUND_EFFECTS; i = (s16)(i + 1), objectPtr++)
{
minus1 = (s16)minus1;
if (objectPtr->kind != (s16)minus1) {
PixelPos pos = {objectPtr->unk124.x + (objectPtr->unk14).x, objectPtr->unk124.y + (objectPtr->unk14).y};
s32 num = objectPtr->unk134.x + objectPtr->unk134.y;
if ((sub_80A66D4(&objectPtr->unk144))) {
objectPtr->directionRelated = 0;
sub_80A6EFC(&objectPtr->unk144,objectPtr->unk13E & 0x1f00,(s8)objectPtr->unk13E);
}
if (objectPtr->unk140 != 0) {
sub_80A7040(&objectPtr->unk144,objectPtr->unk140,objectPtr->direction,0);
objectPtr->unk140 = 0;
}
sub_80A7720(&objectPtr->unk144, &pos, num);
}
}
}