code 800dac0 decompiled

This commit is contained in:
DizzyEggg
2025-07-09 09:41:22 +02:00
parent 1e2c4a2a8a
commit 74e6d58fd1
6 changed files with 92 additions and 211 deletions

View File

@@ -1,194 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_800E698
sub_800E698:
push {r4,r5,lr}
adds r4, r1, 0
adds r5, r2, 0
bl sub_800E2C0
adds r1, r0, 0
movs r3, 0x1
negs r3, r3
cmp r1, r3
beq _0800E6D2
ldr r2, _0800E6C8
movs r0, 0xD0
muls r1, r0
ldr r0, [r2]
adds r1, r0, r1
ldr r0, [r4]
str r0, [r1, 0x18]
ldr r0, [r1, 0x20]
cmp r0, r3
beq _0800E6CC
ldr r0, [r5]
str r0, [r1, 0x1C]
b _0800E6D2
.align 2, 0
_0800E6C8: .4byte gUnknown_203B0CC
_0800E6CC:
movs r0, 0
strh r0, [r1, 0x1C]
strh r0, [r1, 0x1E]
_0800E6D2:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_800E698
thumb_func_start sub_800E6D8
sub_800E6D8:
push {lr}
bl sub_800E2C0
adds r1, r0, 0
movs r0, 0x1
negs r0, r0
cmp r1, r0
bne _0800E6EC
adds r0, r1, 0
b _0800E6F8
_0800E6EC:
ldr r2, _0800E6FC
movs r0, 0xD0
muls r1, r0
ldr r0, [r2]
adds r0, r1
ldr r0, [r0, 0x20]
_0800E6F8:
pop {r1}
bx r1
.align 2, 0
_0800E6FC: .4byte gUnknown_203B0CC
thumb_func_end sub_800E6D8
thumb_func_start sub_800E700
sub_800E700:
push {lr}
lsls r0, 16
asrs r0, 16
bl sub_800E900
pop {r1}
bx r1
thumb_func_end sub_800E700
thumb_func_start sub_800E710
sub_800E710:
push {r4-r6,lr}
lsls r0, 16
asrs r5, r0, 16
lsls r1, 16
lsrs r1, 16
adds r0, r1, 0
bl sub_800ECB8
adds r4, r0, 0
ldr r0, [r4, 0x20]
bl sub_800ECD0
adds r1, r0, 0
movs r2, 0
ldr r0, [r4, 0x1C]
cmp r2, r0
bge _0800E748
adds r3, r0, 0
_0800E734:
movs r6, 0
ldrsh r0, [r1, r6]
cmp r0, r5
bne _0800E740
ldr r0, [r1, 0x4]
b _0800E74A
_0800E740:
adds r2, 0x1
adds r1, 0xC
cmp r2, r3
blt _0800E734
_0800E748:
ldr r0, [r4, 0x14]
_0800E74A:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_800E710
thumb_func_start sub_800E750
sub_800E750:
push {r4-r6,lr}
lsls r0, 16
asrs r5, r0, 16
lsls r1, 16
lsrs r1, 16
adds r0, r1, 0
bl sub_800ECB8
adds r4, r0, 0
ldr r0, [r4, 0x20]
bl sub_800ECD0
adds r1, r0, 0
movs r2, 0
ldr r0, [r4, 0x1C]
cmp r2, r0
bge _0800E788
adds r3, r0, 0
_0800E774:
movs r6, 0
ldrsh r0, [r1, r6]
cmp r0, r5
bne _0800E780
ldr r0, [r1, 0x4]
b _0800E78A
_0800E780:
adds r2, 0x1
adds r1, 0xC
cmp r2, r3
blt _0800E774
_0800E788:
ldr r0, [r4, 0x14]
_0800E78A:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_800E750
thumb_func_start sub_800E790
sub_800E790:
push {r4-r6,lr}
lsls r0, 16
asrs r5, r0, 16
lsls r1, 16
lsrs r1, 16
adds r0, r1, 0
bl sub_800ECB8
adds r4, r0, 0
ldr r0, [r4, 0x20]
bl sub_800ECD0
adds r1, r0, 0
movs r2, 0
ldr r0, [r4, 0x1C]
cmp r2, r0
bge _0800E7C8
adds r3, r0, 0
_0800E7B4:
movs r6, 0
ldrsh r0, [r1, r6]
cmp r0, r5
bne _0800E7C0
ldr r0, [r1, 0x8]
b _0800E7CA
_0800E7C0:
adds r2, 0x1
adds r1, 0xC
cmp r2, r3
blt _0800E7B4
_0800E7C8:
ldr r0, [r4, 0x18]
_0800E7CA:
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_800E790
.align 2,0

View File

@@ -25,11 +25,6 @@ gUnknown_80B9C60: @ 80B9C60
.byte 0xFF, 0xFF, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
gefob001_string:: @ 80B9C6C
.string "efob001\0"
.align 2,0
gefob000_string:: @ 80B9C74
.string "efob000\0"
.align 2,0

View File

@@ -30,7 +30,8 @@ typedef struct unkStruct_80BDBC4
u8 fillA[0x0c - 0x0a];
s32 unkC;
s32 unk10;
u8 fill14[0x1c - 0x14];
s32 unk14;
s32 unk18;
s32 unk1C;
s32 unk20;
} unkStruct_80BDBC4;

View File

@@ -19,7 +19,8 @@ typedef struct unkStruct_80C183C
// size: 0xc
s16 unk0;
s16 unk2;
u8 fill4[0xc - 0x4];
s32 unk4;
s32 unk8;
} unkStruct_80C183C;
typedef struct unkStruct_800EA44

View File

@@ -82,7 +82,6 @@ SECTIONS {
src/code_800D090.o(.text);
src/code_800D090_1.o(.text);
src/code_800DAC0.o(.text);
asm/code_800DAC0.o(.text);
src/code_800E9A8.o(.text);
src/code_800E9E4.o(.text);
src/code_800ED38.o(.text);

View File

@@ -26,15 +26,12 @@ struct unkStruct_800F18C
};
extern s32 sub_800E2C0(s32);
extern u32 sub_800E900(void);
extern s32 sub_800E900(s32 a0);
extern void sub_8009BE4(void);
extern void sub_800F204(OpenedFile *file);
extern struct unkStruct_800F18C *sub_800F18C(s32);
extern void sub_800DCA8(struct unkStruct_203B0CC_sub *);
extern u8 gefob000_string[];
extern u8 gefob001_string[];
extern void sub_800F034(void);
extern void sub_800ED38(u32);
extern void sub_800F078();
@@ -62,14 +59,14 @@ void sub_800DAC0(u32 fileSelection)
switch (gUnknown_203B0CC->fileSelection) {
case 1:
filePtr = Call_OpenFileAndGetFileDataPtr(gefob001_string, &gEffectFileArchive);
filePtr = Call_OpenFileAndGetFileDataPtr("efob001", &gEffectFileArchive);
if (filePtr != NULL) {
sub_8005610(filePtr,0x248,0x1f,0);
CloseFile(filePtr);
}
break;
case 0:
filePtr = Call_OpenFileAndGetFileDataPtr(gefob000_string, &gEffectFileArchive);
filePtr = Call_OpenFileAndGetFileDataPtr("efob000", &gEffectFileArchive);
if (filePtr != NULL) {
sub_8005610(filePtr,0x248,0x1f,0);
CloseFile(filePtr);
@@ -149,9 +146,9 @@ void sub_800DC14(s32 param_1)
}
}
u32 sub_800DC9C(void)
s32 sub_800DC9C(s32 a0)
{
return sub_800E900();
return sub_800E900(a0);
}
void sub_800DCA8(struct unkStruct_203B0CC_sub *param_1)
@@ -830,4 +827,86 @@ s32 sub_800E52C(struct UnkStruct_8040094 *a0)
}
}
UNUSED static void sub_800E698(s32 a0, DungeonPos *pos1, DungeonPos *pos2)
{
s32 id = sub_800E2C0(a0);
if (id != -1) {
struct unkStruct_203B0CC_sub *ptr = &gUnknown_203B0CC->unk0[id];
ptr->unkC.unk18 = *pos1;
if (ptr->unkC.unk20 != -1) {
ptr->unkC.unk1c = *pos2;
}
else {
ptr->unkC.unk1c.x = 0;
ptr->unkC.unk1c.y = 0;
}
}
}
s32 sub_800E6D8(s32 a0)
{
s32 id = sub_800E2C0(a0);
if (id != -1) {
struct unkStruct_203B0CC_sub *ptr = &gUnknown_203B0CC->unk0[id];
return ptr->unkC.unk20;
}
else {
return -1;
}
}
s32 sub_800E700(s32 a0)
{
return sub_800E900((s16) a0);
}
unkStruct_80C183C *sub_800ECD0(s32 param_1);
s32 sub_800E710(s32 a0_, s32 a1)
{
s32 i;
s32 a0 = (s16) (a0_);
unkStruct_80BDBC4 *unkPtr1 = sub_800ECB8(a1);
unkStruct_80C183C *unkPtr2 = sub_800ECD0(unkPtr1->unk20);
for (i = 0; i < unkPtr1->unk1C; i++, unkPtr2++) {
if (unkPtr2->unk0 == a0) {
return unkPtr2->unk4;
}
}
return unkPtr1->unk14;
}
// Literally the same as the func above.
s32 sub_800E750(s32 a0_, s32 a1)
{
s32 i;
s32 a0 = (s16) (a0_);
unkStruct_80BDBC4 *unkPtr1 = sub_800ECB8(a1);
unkStruct_80C183C *unkPtr2 = sub_800ECD0(unkPtr1->unk20);
for (i = 0; i < unkPtr1->unk1C; i++, unkPtr2++) {
if (unkPtr2->unk0 == a0) {
return unkPtr2->unk4;
}
}
return unkPtr1->unk14;
}
// Almost the same as the two funcs above, but returns different fields.
s32 sub_800E790(s32 a0_, s32 a1)
{
s32 i;
s32 a0 = (s16) (a0_);
unkStruct_80BDBC4 *unkPtr1 = sub_800ECB8(a1);
unkStruct_80C183C *unkPtr2 = sub_800ECD0(unkPtr1->unk20);
for (i = 0; i < unkPtr1->unk1C; i++, unkPtr2++) {
if (unkPtr2->unk0 == a0) {
return unkPtr2->unk8;
}
}
return unkPtr1->unk18;
}
//