decomp sub_80861F8

This commit is contained in:
Seth Barberee 2024-08-12 14:04:39 -07:00
parent 184b6255cd
commit bcfaa6bf3e
2 changed files with 74 additions and 106 deletions

View File

@ -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

View File

@ -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,&param_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;
}