mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-08 09:05:59 -05:00
code 800dac0 decompiled
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user