CallbackLivesMoveRelative

This commit is contained in:
DizzyEggg 2025-05-22 10:59:29 +02:00
parent fa95910392
commit 8beb47ea4b
2 changed files with 187 additions and 457 deletions

View File

@ -6,457 +6,7 @@
.text
thumb_func_start sub_80AAF68
sub_80AAF68:
push {r4,lr}
adds r4, r0, 0
movs r1, 0x8E
lsls r1, 1
adds r0, r4, r1
ldr r0, [r0]
movs r1, 0x80
lsls r1, 7
ands r0, r1
cmp r0, 0
beq _080AB002
movs r2, 0
ldrsh r0, [r4, r2]
movs r1, 0x1
bl sub_80A93F0
lsls r0, 24
cmp r0, 0
beq _080AAFD0
movs r1, 0xE4
lsls r1, 1
adds r0, r4, r1
movs r2, 0
ldrsh r1, [r0, r2]
cmp r1, 0
bne _080AAFA6
movs r0, 0xB5
lsls r0, 1
adds r1, r4, r0
adds r0, 0x4C
b _080AAFB4
_080AAFA6:
movs r0, 0xDB
lsls r0, 1
cmp r1, r0
beq _080AAFC2
subs r0, 0x4C
adds r1, r4, r0
adds r0, 0x56
_080AAFB4:
strh r0, [r1]
movs r2, 0xB6
lsls r2, 1
adds r1, r4, r2
movs r0, 0x1
negs r0, r0
str r0, [r1]
_080AAFC2:
movs r1, 0
ldrsh r0, [r4, r1]
movs r1, 0x80
lsls r1, 17
bl sub_80A8750
b _080AB002
_080AAFD0:
movs r2, 0xE4
lsls r2, 1
adds r0, r4, r2
movs r2, 0
ldrsh r1, [r0, r2]
movs r0, 0xDB
lsls r0, 1
cmp r1, r0
bne _080AAFF6
subs r0, 0x4C
adds r1, r4, r0
adds r0, 0x56
strh r0, [r1]
movs r2, 0xB6
lsls r2, 1
adds r1, r4, r2
movs r0, 0x1
negs r0, r0
str r0, [r1]
_080AAFF6:
movs r1, 0
ldrsh r0, [r4, r1]
movs r1, 0x80
lsls r1, 17
bl sub_80A86C8
_080AB002:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_80AAF68
thumb_func_start CallbackLivesGetIndex
CallbackLivesGetIndex:
movs r1, 0
ldrsh r0, [r0, r1]
bx lr
thumb_func_end CallbackLivesGetIndex
thumb_func_start CallbackLivesGetSize
CallbackLivesGetSize:
ldr r2, [r0, 0xC]
ldr r3, [r0, 0x10]
str r2, [r1]
str r3, [r1, 0x4]
bx lr
thumb_func_end CallbackLivesGetSize
thumb_func_start CallbackLivesSetHitboxPos
CallbackLivesSetHitboxPos:
push {r4,lr}
adds r3, r0, 0
adds r4, r1, 0
cmp r4, 0
beq _080AB05C
movs r0, 0xA2
lsls r0, 1
adds r2, r3, r0
ldr r1, [r4]
ldr r0, [r3, 0x14]
subs r0, r1, r0
str r0, [r2]
movs r0, 0xA6
lsls r0, 1
adds r2, r3, r0
ldr r0, [r3, 0x14]
adds r1, r0
str r1, [r2]
movs r0, 0xA4
lsls r0, 1
adds r2, r3, r0
ldr r1, [r4, 0x4]
ldr r0, [r3, 0x18]
subs r0, r1, r0
str r0, [r2]
movs r0, 0xA8
lsls r0, 1
adds r2, r3, r0
ldr r0, [r3, 0x18]
adds r1, r0
str r1, [r2]
b _080AB0C2
_080AB05C:
movs r0, 0xA2
lsls r0, 1
adds r2, r3, r0
ldr r0, [r3, 0x20]
ldr r1, [r3, 0x14]
subs r0, r1
str r0, [r2]
movs r0, 0xA6
lsls r0, 1
adds r2, r3, r0
ldr r0, [r3, 0x20]
ldr r1, [r3, 0x14]
adds r0, r1
str r0, [r2]
movs r0, 0xA4
lsls r0, 1
adds r2, r3, r0
ldr r0, [r3, 0x24]
ldr r1, [r3, 0x18]
subs r0, r1
str r0, [r2]
movs r0, 0xA8
lsls r0, 1
adds r2, r3, r0
ldr r0, [r3, 0x24]
ldr r1, [r3, 0x18]
adds r0, r1
str r0, [r2]
movs r2, 0xAA
lsls r2, 1
adds r1, r3, r2
adds r2, 0x4
adds r0, r3, r2
str r4, [r0]
str r4, [r1]
movs r0, 0xA1
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 _080AB0BE
movs r0, 0xAE
lsls r0, 1
adds r1, r3, r0
movs r0, 0x1
strb r0, [r1]
_080AB0BE:
ldrb r0, [r3, 0x1C]
strb r0, [r2]
_080AB0C2:
pop {r4}
pop {r0}
bx r0
thumb_func_end CallbackLivesSetHitboxPos
thumb_func_start CallbackLivesSetPositionBounds
CallbackLivesSetPositionBounds:
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 CallbackLivesSetPositionBounds
thumb_func_start CallbackLivesGetHitboxCenter
CallbackLivesGetHitboxCenter:
adds r3, r0, 0
movs r2, 0xA2
lsls r2, 1
adds r0, r3, r2
ldr r0, [r0]
ldr r2, [r3, 0x14]
adds r0, r2
str r0, [r1]
movs r2, 0xA4
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 CallbackLivesGetHitboxCenter
thumb_func_start CallbackLivesMoveReal
CallbackLivesMoveReal:
push {lr}
bl sub_80A9F20
pop {r1}
bx r1
thumb_func_end CallbackLivesMoveReal
thumb_func_start CallbackLivesGetPosHeightAndUnk
CallbackLivesGetPosHeightAndUnk:
push {r4,lr}
adds r3, r0, 0
movs r4, 0xAA
lsls r4, 1
adds r0, r3, r4
ldr r0, [r0]
str r0, [r1]
movs r1, 0xAC
lsls r1, 1
adds r0, r3, r1
ldr r0, [r0]
str r0, [r2]
pop {r4}
pop {r0}
bx r0
thumb_func_end CallbackLivesGetPosHeightAndUnk
thumb_func_start CallbackLivesSetPosHeight
CallbackLivesSetPosHeight:
movs r2, 0xAA
lsls r2, 1
adds r0, r2
str r1, [r0]
bx lr
thumb_func_end CallbackLivesSetPosHeight
thumb_func_start CallbackLivesGetDirection
CallbackLivesGetDirection:
movs r2, 0xA1
lsls r2, 1
adds r0, r2
ldrb r0, [r0]
strb r0, [r1]
bx lr
thumb_func_end CallbackLivesGetDirection
thumb_func_start CallbackLivesSetDirection
CallbackLivesSetDirection:
push {lr}
adds r3, r0, 0
lsls r1, 24
asrs r1, 24
movs r0, 0x1
negs r0, r0
cmp r1, r0
beq _080AB17C
movs r0, 0xA1
lsls r0, 1
adds r2, r3, r0
lsls r0, r1, 24
lsrs r0, 24
strb r0, [r2]
ldr r2, _080AB180
adds r1, r3, r2
ldrb r1, [r1]
lsls r1, 24
asrs r1, 24
lsls r0, 24
asrs r0, 24
cmp r1, r0
beq _080AB17C
movs r0, 0xAE
lsls r0, 1
adds r1, r3, r0
movs r0, 0x1
strb r0, [r1]
_080AB17C:
pop {r0}
bx r0
.align 2, 0
_080AB180: .4byte 0x0000015d
thumb_func_end CallbackLivesSetDirection
thumb_func_start CallbackLivesSetEventIndex
CallbackLivesSetEventIndex:
push {lr}
lsls r1, 16
lsrs r1, 16
bl sub_80A9750
pop {r0}
bx r0
thumb_func_end CallbackLivesSetEventIndex
thumb_func_start CallbackLivesSetUnk_80AB194
CallbackLivesSetUnk_80AB194:
push {lr}
mov r12, r0
lsls r1, 16
asrs r1, 16
adds r3, r1, 0
cmp r1, 0
bne _080AB1A8
movs r0, 0xE0
lsls r0, 1
adds r3, r0, 0
_080AB1A8:
movs r0, 0xB5
lsls r0, 1
add r0, r12
strh r3, [r0]
movs r0, 0xB6
lsls r0, 1
add r0, r12
str r2, [r0]
pop {r0}
bx r0
thumb_func_end CallbackLivesSetUnk_80AB194
thumb_func_start nullsub_211
nullsub_211:
bx lr
thumb_func_end nullsub_211
thumb_func_start CallbackLivesSpriteRelatedCheck_80AB1C0
CallbackLivesSpriteRelatedCheck_80AB1C0:
push {lr}
adds r1, r0, 0
movs r2, 0xAE
lsls r2, 1
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
bne _080AB1DE
adds r2, 0x14
adds r0, r1, r2
bl sub_80A66F8
lsls r0, 24
lsrs r0, 24
b _080AB1E0
_080AB1DE:
movs r0, 0x1
_080AB1E0:
pop {r1}
bx r1
thumb_func_end CallbackLivesSpriteRelatedCheck_80AB1C0
thumb_func_start CallbackLivesSpriteRelated_80AB1E4
CallbackLivesSpriteRelated_80AB1E4:
push {lr}
adds r1, r0, 0
movs r2, 0xB5
lsls r2, 1
adds r0, r1, r2
movs r2, 0
ldrsh r0, [r0, r2]
cmp r0, 0
bne _080AB206
movs r2, 0xB8
lsls r2, 1
adds r0, r1, r2
bl sub_80A671C
lsls r0, 24
lsrs r0, 24
b _080AB208
_080AB206:
movs r0, 0x1
_080AB208:
pop {r1}
bx r1
thumb_func_end CallbackLivesSpriteRelated_80AB1E4
thumb_func_start CallbackLivesGetFlags
CallbackLivesGetFlags:
movs r2, 0x8E
lsls r2, 1
adds r0, r2
ldr r0, [r0]
str r0, [r1]
bx lr
thumb_func_end CallbackLivesGetFlags
thumb_func_start CallbackLivesSetFlags
CallbackLivesSetFlags:
push {lr}
movs r2, 0
ldrsh r0, [r0, r2]
bl sub_80A86C8
pop {r0}
bx r0
thumb_func_end CallbackLivesSetFlags
thumb_func_start CallbackLivesClearFlags
CallbackLivesClearFlags:
push {lr}
movs r2, 0
ldrsh r0, [r0, r2]
bl sub_80A8750
pop {r0}
bx r0
thumb_func_end CallbackLivesClearFlags
thumb_func_start CallbackLivesSpriteRelated_80AB238
CallbackLivesSpriteRelated_80AB238:
push {lr}
movs r2, 0xB8
lsls r2, 1
adds r0, r2
bl sub_80A6EC8
pop {r0}
bx r0
thumb_func_end CallbackLivesSpriteRelated_80AB238
thumb_func_start CallbackLivesMoveRelative
CallbackLivesMoveRelative:
push {lr}
bl sub_80A9F94
pop {r1}
bx r1
thumb_func_end CallbackLivesMoveRelative
thumb_func_start GroundLives_Action
GroundLives_Action:

View File

@ -65,8 +65,8 @@ struct unkStruct_3001B84_sub
u16 unk160;
s32 unk164;
s16 unk168;
u16 unk16A;
u8 fill16C[1];
s16 unk16A;
s32 unk16C;
struct UnkGroundSpriteStruct unk170;
};
@ -906,7 +906,7 @@ void sub_80A8750(s32 id_, u32 flags)
}
extern void sub_809CD8C(struct Struct3001B84_sub120 *dst, s32 a1);
extern bool8 sub_809B1C0(s32 a0, u32 kind, u8 *a2);
extern bool8 sub_809B1C0(s32 a0, u32 kind, PokemonStruct1 *a2);
extern bool8 GetPredefinedScript(Action *param_1, ScriptInfoSmall *script, s32 _index);
extern bool8 sub_809D678(Action *action);
@ -920,7 +920,7 @@ void sub_80A87AC(s32 id_, s32 a1)
}
}
bool8 sub_80A87E0(s32 id_, u8 *a1)
bool8 sub_80A87E0(s32 id_, PokemonStruct1 *a1)
{
s32 id = (s16) id_;
struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id];
@ -1915,7 +1915,7 @@ s32 sub_80AA180(struct unkStruct_3001B84_sub *livesPtr, u32 flags, PixelPos *pix
s8 *dirDst = &livesPtr->unk142;
s8 dirS8 = (s8) dir;
*dirDst = dirS8;
if (livesPtr->unk15D != dirS8) {
if (livesPtr->unk15D != livesPtr->unk142) {
livesPtr->unk15C = 1;
}
if (sub_80AA3F8(livesPtr, livesPtr->unk142))
@ -1938,7 +1938,7 @@ s32 sub_80AA180(struct unkStruct_3001B84_sub *livesPtr, u32 flags, PixelPos *pix
s8 *dirDst = &livesPtr->unk142;
s8 dirS8 = (s8) dir;
*dirDst = dirS8;
if (livesPtr->unk15D != dirS8) {
if (livesPtr->unk15D != livesPtr->unk142) {
livesPtr->unk15C = 1;
}
if (sub_80AA3F8(livesPtr, livesPtr->unk142))
@ -2417,7 +2417,7 @@ void sub_80AAAE8(struct unkStruct_3001B84_sub *livesPtr, u32 a1, s32 dir_)
GetFunctionScript(NULL, &scriptInfo, 6);
GroundLives_ExecuteScript(sp, (void *) &livesPtr->unk38.unk8, &scriptInfo);
_ExecutePlayerScript(livesPtr, NULL, NULL);
sub_809B1C0(7, 0, (void *) sub_80A8E9C(sp)); // TODO: fix
sub_809B1C0(7, 0, sub_80A8E9C(sp)); // TODO: fix
}
else {
sub_809B1C0(7, 0, NULL);
@ -2460,4 +2460,184 @@ void sub_80AAAE8(struct unkStruct_3001B84_sub *livesPtr, u32 a1, s32 dir_)
}
}
void sub_80AAF68(struct unkStruct_3001B84_sub *livesPtr, u32 unused)
{
if (livesPtr->unk11C & 0x4000) {
if (sub_80A93F0(livesPtr->unk0, 1)) {
if (livesPtr->unk170.unk58 == 0) {
livesPtr->unk16A = 438;
livesPtr->unk16C = -1;
}
else if (livesPtr->unk170.unk58 != 438) {
livesPtr->unk16A = 448;
livesPtr->unk16C = -1;
}
sub_80A8750(livesPtr->unk0, 0x1000000);
}
else {
if (livesPtr->unk170.unk58 == 438) {
livesPtr->unk16A = 448;
livesPtr->unk16C = -1;
}
sub_80A86C8(livesPtr->unk0, 0x1000000);
}
}
}
s32 CallbackLivesGetIndex(struct unkStruct_3001B84_sub *livesPtr)
{
return livesPtr->unk0;
}
void CallbackLivesGetSize(struct unkStruct_3001B84_sub *livesPtr, PixelPos *out)
{
*out = livesPtr->unkC;
}
void CallbackLivesSetHitboxPos(struct unkStruct_3001B84_sub *livesPtr, PixelPos *posOrNull)
{
if (posOrNull != NULL) {
livesPtr->unk144.x = posOrNull->x - livesPtr->unk14.x;
livesPtr->unk14C.x = posOrNull->x + livesPtr->unk14.x;
livesPtr->unk144.y = posOrNull->y - livesPtr->unk14.y;
livesPtr->unk14C.y = posOrNull->y + livesPtr->unk14.y;
}
else {
livesPtr->unk144.x = livesPtr->unk20.x - livesPtr->unk14.x;
livesPtr->unk14C.x = livesPtr->unk20.x + livesPtr->unk14.x;
livesPtr->unk144.y = livesPtr->unk20.y - livesPtr->unk14.y;
livesPtr->unk14C.y = livesPtr->unk20.y + livesPtr->unk14.y;
livesPtr->unk154.x = livesPtr->unk154.y = 0;
if (livesPtr->unk142 != livesPtr->unk1C) {
livesPtr->unk15C = 1;
}
livesPtr->unk142 = livesPtr->unk1C;
}
}
void CallbackLivesSetPositionBounds(struct unkStruct_3001B84_sub *livesPtr, PixelPos *from, PixelPos *to)
{
livesPtr->unk28 = *from;
livesPtr->unk30 = *to;
}
void CallbackLivesGetHitboxCenter(struct unkStruct_3001B84_sub *livesPtr, PixelPos *out)
{
out->x = livesPtr->unk144.x + livesPtr->unk14.x;
out->y = livesPtr->unk144.y + livesPtr->unk14.y;
}
bool32 CallbackLivesMoveReal(struct unkStruct_3001B84_sub *livesPtr, PixelPos *pos)
{
return sub_80A9F20(livesPtr, pos);
}
void CallbackLivesGetPosHeightAndUnk(struct unkStruct_3001B84_sub *livesPtr, u32 *height, u32 *unk)
{
*height = livesPtr->unk154.x;
*unk = livesPtr->unk154.y;
}
void CallbackLivesSetPosHeight(struct unkStruct_3001B84_sub *livesPtr, u32 height)
{
livesPtr->unk154.x = height;
}
void CallbackLivesGetDirection(struct unkStruct_3001B84_sub *livesPtr, s8 *dir)
{
*dir = livesPtr->unk142;
}
void CallbackLivesSetDirection(struct unkStruct_3001B84_sub *livesPtr, s32 dir_)
{
s32 dir = (s8) dir_;
if (dir != -1) {
// s8 memes
s8 *dirDst = &livesPtr->unk142;
s8 dirS8 = (s8) dir;
*dirDst = dirS8;
if (livesPtr->unk15D != livesPtr->unk142) {
livesPtr->unk15C = 1;
}
}
}
void CallbackLivesSetEventIndex(struct unkStruct_3001B84_sub *livesPtr, u16 a1)
{
sub_80A9750(livesPtr, a1);
}
// s16 memes forced a fakematch https://decomp.me/scratch/x2ALy
void CallbackLivesSetUnk_80AB194(struct unkStruct_3001B84_sub *livesPtr, s32 a1_, s32 a2)
{
s32 a1Match = (s16) a1_;
#ifndef NONMATCHING
register s16 a1 asm("r3") = a1Match;
#else
s32 a1 = a1Match;
#endif
if (a1Match == 0) {
a1 = 448;
}
livesPtr->unk16A = a1;
livesPtr->unk16C = a2;
}
void nullsub_211(void)
{
}
extern bool8 sub_80A66F8(struct UnkGroundSpriteStruct *ptr);
extern bool8 sub_80A671C(struct UnkGroundSpriteStruct *ptr);
extern void sub_80A6EC8(struct UnkGroundSpriteStruct *ptr, s32 a1);
bool8 CallbackLivesSpriteRelatedCheck_80AB1C0(struct unkStruct_3001B84_sub *livesPtr)
{
if (livesPtr->unk15C != 0) {
return TRUE;
}
else {
return sub_80A66F8(&livesPtr->unk170);
}
}
bool8 CallbackLivesSpriteRelated_80AB1E4(struct unkStruct_3001B84_sub *livesPtr)
{
if (livesPtr->unk16A != 0) {
return TRUE;
}
else {
return sub_80A671C(&livesPtr->unk170);
}
}
void CallbackLivesGetFlags(struct unkStruct_3001B84_sub *livesPtr, u32 *flags)
{
*flags = livesPtr->unk11C;
}
void CallbackLivesSetFlags(struct unkStruct_3001B84_sub *livesPtr, u32 flags)
{
sub_80A86C8(livesPtr->unk0, flags);
}
void CallbackLivesClearFlags(struct unkStruct_3001B84_sub *livesPtr, u32 flags)
{
sub_80A8750(livesPtr->unk0, flags);
}
void CallbackLivesSpriteRelated_80AB238(struct unkStruct_3001B84_sub *livesPtr, s32 a1)
{
sub_80A6EC8(&livesPtr->unk170, a1);
}
s32 CallbackLivesMoveRelative(struct unkStruct_3001B84_sub *livesPtr, PixelPos *pos)
{
return sub_80A9F94(livesPtr, pos);
}
//