From bcfaa6bf3ed606b295c88fdca19fbc07c3a9bd85 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Mon, 12 Aug 2024 14:04:39 -0700 Subject: [PATCH] decomp sub_80861F8 --- asm/code_80861B8.s | 105 --------------------------------------------- src/code_80861A8.c | 75 +++++++++++++++++++++++++++++++- 2 files changed, 74 insertions(+), 106 deletions(-) delete mode 100644 asm/code_80861B8.s diff --git a/asm/code_80861B8.s b/asm/code_80861B8.s deleted file mode 100644 index 5ebc47bec..000000000 --- a/asm/code_80861B8.s +++ /dev/null @@ -1,105 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80861F8 -sub_80861F8: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - adds r6, r1, 0 - lsls r0, 16 - asrs r0, 16 - adds r5, r0, 0 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - bl sub_800EE5C - bl sub_800EF64 - movs r0, 0x46 - bl sub_803E46C - ldr r0, [r6, 0x70] - mov r8, r0 - movs r1, 0 - mov r9, r1 - str r1, [sp, 0x28] - adds r0, r5, 0 - bl sub_800E700 - adds r7, r0, 0 - add r4, sp, 0x28 - movs r2, 0x1 - negs r2, r2 - cmp r7, r2 - beq _0808624A - adds r1, r6, 0 - adds r1, 0x28 - lsls r2, r7, 24 - lsrs r2, 24 - adds r0, r4, 0 - bl sub_800569C -_0808624A: - str r5, [sp] - mov r3, r9 - str r3, [sp, 0x4] - mov r0, r8 - adds r0, 0x46 - ldrb r0, [r0] - str r0, [sp, 0x8] - mov r1, sp - ldr r0, [r6, 0xC] - cmp r0, 0 - bge _08086262 - adds r0, 0xFF -_08086262: - asrs r0, 8 - strh r0, [r1, 0xC] - mov r1, sp - ldr r0, [r6, 0x10] - cmp r0, 0 - bge _08086270 - adds r0, 0xFF -_08086270: - asrs r0, 8 - strh r0, [r1, 0xE] - mov r1, sp - ldrh r0, [r4] - strh r0, [r1, 0x10] - add r0, sp, 0x28 - ldrh r0, [r0, 0x2] - strh r0, [r1, 0x12] - str r7, [sp, 0x14] - ldr r0, _080862B4 - str r0, [sp, 0x18] - add r1, sp, 0x1C - ldr r0, _080862B8 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - mov r0, sp - bl sub_800E890 - mov r4, r10 - cmp r4, 0 - beq _080862A2 - bl sub_8085F44 - movs r0, 0x1 - negs r0, r0 -_080862A2: - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080862B4: .4byte 0x0000ffff -_080862B8: .4byte gUnknown_8107380 - thumb_func_end sub_80861F8 - - .align 2,0 diff --git a/src/code_80861A8.c b/src/code_80861A8.c index 93d70bf63..115c55b2e 100644 --- a/src/code_80861A8.c +++ b/src/code_80861A8.c @@ -6,15 +6,41 @@ #include "code_806CD90.h" #include "dungeon_music.h" +typedef struct unkStruct_80416E0 +{ + s32 unk0; + s32 unk4; + s32 unk8; + u16 x; + u16 y; + u16 unk10; + u16 unk12; + s32 unk14; + u32 unk18; +} unkStruct_80416E0; +extern s32 sub_800E890(unkStruct_80416E0 *); + +struct unkStruct_8107380 +{ + u8 unk0[12]; +}; +extern struct unkStruct_8107380 gUnknown_8107380; + extern const u8 *gUnknown_810665C[]; extern const u8 *gUnknown_810668C[]; extern const u8 *gUnknown_81066D4[]; extern const u8 *gUnknown_81066F0[]; extern const u8 *gUnknown_810671C[]; - static void sub_80861EC(Entity *); +void sub_800EE5C(s32); +void sub_800EF64(); +void sub_803E46C(s32); +s32 sub_800E700(s32); +void sub_800569C(Position *, EntitySpriteInfo *, u8); +void sub_8085F44(void); + void sub_8052FB8(const u8 *); void sub_8086124(Entity *entity, u8 param_2) @@ -63,3 +89,50 @@ void sub_80861EC(Entity *a0) { a0->info->unkFE = 0x63; } + +s32 sub_80861F8(s16 param_1,Entity *param_2,bool32 param_3) +{ + EntityInfo *info; + s32 uVar2; + s32 uStack_38; + Position pos; + unkStruct_80416E0 stack; + struct unkStruct_8107380 stack4; + +#ifdef NONMATCHING + s32 param_1_s32 = param_1; +#else + register s32 param_1_s32 asm("r5") = param_1; +#endif + + u8 param_3_bool32 = param_3; + + sub_800EE5C(param_1); + sub_800EF64(); + sub_803E46C(0x46); + info = param_2->info; + pos.x = 0; + pos.y = 0; + uStack_38 = sub_800E700(param_1_s32); + if (uStack_38 != -1) { + sub_800569C(&pos,¶m_2->spriteInfo,uStack_38); + } + stack.unk0 = param_1_s32; + stack.unk4 = 0; + stack.unk8 = (u32)(info->action).direction; + stack.x = (param_2->pixelPos).x / 256; + stack.y = (param_2->pixelPos).y / 256; + + stack.unk10 = pos.x; + stack.unk12 = pos.y; + stack.unk14 = uStack_38; + stack.unk18 = 0xffff; + stack4 = gUnknown_8107380; + + uVar2 = sub_800E890(&stack); + if (param_3_bool32 != '\0') { + sub_8085F44(); + uVar2 = -1; + } + return uVar2; +}