code_803E724 decompiled

This commit is contained in:
DizzyEggg 2024-10-09 10:50:25 +02:00
parent 4b7e9c6597
commit 0f72d97ac4
3 changed files with 88 additions and 221 deletions

View File

@ -1,158 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_803FF18
sub_803FF18:
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r5, r0, 0
adds r3, r1, 0
lsls r2, 24
lsrs r2, 24
movs r6, 0
cmp r2, 0
bne _0803FF2E
movs r6, 0x1
_0803FF2E:
movs r1, 0
cmp r2, 0
bne _0803FF36
movs r1, 0x37
_0803FF36:
ldr r0, _0803FF54
cmp r5, r0
ble _0803FF7C
ldr r0, _0803FF58
lsls r1, r6, 3
adds r1, r6
lsls r1, 1
adds r1, r0
ldrh r0, [r1]
strh r0, [r3]
adds r3, 0x2
strh r0, [r3]
strh r0, [r3, 0x2]
b _0804001A
.align 2, 0
_0803FF54: .4byte 0x000003e7
_0803FF58: .4byte gUnknown_80F6544
_0803FF5C:
ldr r1, _0803FF78
lsls r0, r6, 3
adds r0, r6
adds r0, r4
lsls r0, 1
adds r0, r1
ldrh r0, [r0]
strh r0, [r3]
adds r3, 0x2
subs r5, r2
mov r1, r8
lsls r0, r1, 24
lsrs r7, r0, 24
b _0803FF98
.align 2, 0
_0803FF78: .4byte gUnknown_80F6544
_0803FF7C:
movs r7, 0x20
movs r4, 0
adds r1, 0x30
mov r8, r1
ldr r2, _0803FFC0
mov r12, r2
ldr r0, _0803FFC4
_0803FF8A:
ldr r2, [r0]
cmp r2, r5
ble _0803FF5C
adds r0, 0x4
adds r4, 0x1
cmp r4, 0x8
ble _0803FF8A
_0803FF98:
cmp r4, 0x9
bne _0803FFAC
movs r1, 0x96
lsls r1, 2
adds r0, r7, r1
ldr r2, _0803FFC8
adds r1, r2, 0
orrs r0, r1
strh r0, [r3]
adds r3, 0x2
_0803FFAC:
movs r4, 0
mov r0, r12
ldr r2, [r0]
cmp r2, r5
bgt _0803FFD0
ldr r0, _0803FFCC
lsls r1, r6, 3
adds r1, r6
b _0803FFE8
.align 2, 0
_0803FFC0: .4byte gUnknown_80F6520
_0803FFC4: .4byte gUnknown_80F64FC
_0803FFC8: .4byte 0xfffff000
_0803FFCC: .4byte gUnknown_80F6544
_0803FFD0:
adds r4, 0x1
cmp r4, 0x8
bgt _0803FFF4
lsls r0, r4, 2
add r0, r12
ldr r2, [r0]
cmp r2, r5
bgt _0803FFD0
ldr r0, _08040024
lsls r1, r6, 3
adds r1, r6
adds r1, r4
_0803FFE8:
lsls r1, 1
adds r1, r0
ldrh r0, [r1]
strh r0, [r3]
adds r3, 0x2
subs r5, r2
_0803FFF4:
cmp r4, 0x9
bne _08040008
movs r1, 0x96
lsls r1, 2
adds r0, r7, r1
ldr r2, _08040028
adds r1, r2, 0
orrs r0, r1
strh r0, [r3]
adds r3, 0x2
_08040008:
mov r1, r8
adds r0, r5, r1
movs r2, 0x96
lsls r2, 2
adds r0, r2
ldr r2, _08040028
adds r1, r2, 0
orrs r0, r1
strh r0, [r3]
_0804001A:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08040024: .4byte gUnknown_80F6544
_08040028: .4byte 0xfffff000
thumb_func_end sub_803FF18
.align 2,0 @ Don't pad with nop

View File

@ -209,7 +209,6 @@ SECTIONS {
asm/code_803D110.o(.text);
src/code_803E46C.o(.text);
src/code_803E724.o(.text);
asm/code_803E724.o(.text);
src/code_8040094.o(.text);
asm/code_8040094.o(.text);
src/code_8041AD0.o(.text);

View File

@ -25,6 +25,7 @@
extern s32 gUnknown_202EDC8;
extern u32 gUnknown_202EDD0;
extern s32 gUnknown_202EDD8;
extern u32 gUnknown_202EDFC;
struct DungeonPalFile
{
@ -37,14 +38,52 @@ extern struct DungeonPalFile *gDungeonNameBannerPalette;
extern struct DungeonPalFile *gUnknown_202EC94;
extern u8 gUnknown_202ECA4[];
extern u8 gUnknown_202D058[];
extern u8 gUnknown_203B40C;
extern MenuInputStruct gUnknown_202EE10;
extern SpriteOAM gUnknown_202EDDC;
extern const u8 gUnknown_80F62AC[];
extern const struct UnkTextStruct2 gUnknown_80F62B0[];
extern const struct UnkTextStruct2 gUnknown_80F6310[];
extern const struct UnkTextStruct2 gUnknown_80F6370[];
extern const struct UnkTextStruct2 gUnknown_80F63D0[];
extern const u32 gUnknown_80F6490[];
extern const s32 gUnknown_80F64B4[];
extern const s32 gUnknown_80F64FC[];
extern const s32 gUnknown_80F6520[];
extern const u16 gUnknown_80F64D8[][9];
extern const u16 gUnknown_80F6544[][9];
extern u8 gUnknown_20274A5;
extern u8 gUnknown_202D06C[];
// 2d array? possibly the same as gUnknown_202D06C TODO: merge the variables
extern u8 gUnknown_202D068[];
extern s32 gUnknown_202EDCC;
extern u32 gUnknown_3001018[];
extern void sub_8052210(u32);
extern void sub_8040A84();
extern void sub_8083D44(void);
extern void sub_8052210(u32);
extern void sub_8049ED4(void);
extern void sub_8040A84(void);
extern void sub_80400D4(void);
extern void sub_8041888(u8 param_1);
extern void sub_804A1F0(s32 a0, s32 a1);
extern void sub_804A49C(s32 a0, s32 a1);
extern void sub_80402AC(s32, s32);
void sub_803EC94(void);
void sub_8040ABC(u8 a0);
s32 sub_803EF90(s32 a0, u8 a1);
void sub_803F580(u8 a0);
void sub_803F7BC(void);
void sub_803F38C(void);
void sub_803FB74(void);
void sub_803FE30(s32 a0, u16 *a1, bool8 a2, bool8 a3);
void sub_803FF18(s32 a0, u16 *a1, bool8 a2);
void sub_803E874(bool8 r10, s32 r9)
{
@ -146,15 +185,6 @@ void sub_803EA10(void)
SetBGPaletteBufferColorRGB(248, gUnknown_202D058, gUnknown_202EDC8, NULL);
}
extern u8 gUnknown_203B40C;
extern const struct UnkTextStruct2 gUnknown_80F62B0[];
extern const struct UnkTextStruct2 gUnknown_80F6310[];
extern const struct UnkTextStruct2 gUnknown_80F6370[];
extern const struct UnkTextStruct2 gUnknown_80F63D0[];
void sub_8040ABC(u8 a0);
void sub_803EAF0(u32 a0, u8 *a1)
{
if (a0 == gUnknown_202EDD0)
@ -237,8 +267,6 @@ void sub_803EAF0(u32 a0, u8 *a1)
gUnknown_202EDD0 = a0;
}
extern MenuInputStruct gUnknown_202EE10;
void sub_803EC94(void)
{
gUnknown_202EE10.unk1E = 0;
@ -249,8 +277,6 @@ void sub_803EC94(void)
sub_801317C(&gUnknown_202EE10.unk28);
}
extern void sub_8052210(u32);
void sub_803ECB4(UnkTextStruct2 *a0, bool8 a1)
{
gUnknown_202EDD0 = 10;
@ -270,8 +296,6 @@ void sub_803ECE0(void)
sub_80098BC((void *)VRAM + 0x14400, gUnknown_202EC94->unk4 + ((gUnknown_202EDD8 / 4) * 0x240), 0x240);
}
s32 sub_803EF90(s32 a0, u8 a1);
struct UnkStruct_202EDE8
{
s16 unk0;
@ -322,8 +346,6 @@ void sub_803ED30(s32 a0, Entity *mon, u8 a2, s32 a3)
sub_80098BC((void *) VRAM + 0x142C0, gDungeon->unk18, 0x80);
}
extern SpriteOAM gUnknown_202EDDC;
void sub_803EDF0(void)
{
EntityInfo *entInfo;
@ -806,10 +828,6 @@ NAKED s32 sub_803EF90(s32 a0, u8 a1)
" bx r1\n");
}
void sub_803F38C(void);
extern u32 gUnknown_202EDFC;
void sub_803F27C(bool8 a0)
{
UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8;
@ -861,8 +879,6 @@ void sub_803F27C(bool8 a0)
}
}
extern u8 gUnknown_202D06C[];
void sub_803F38C(void)
{
s32 palAdd;
@ -901,12 +917,6 @@ bool8 sub_803F428(Position *pos)
return FALSE;
}
void sub_803F580(u8 a0);
void sub_803F7BC(void);
extern void sub_8049ED4(void);
extern void sub_8040A84(void);
extern void sub_80400D4(void);
void sub_803F4A0(Entity *a0)
{
UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8;
@ -954,11 +964,6 @@ void sub_803F508(Entity *a0)
sub_8040A84();
}
extern void sub_8041888(u8 param_1);
extern void sub_804A1F0(s32 a0, s32 a1);
extern void sub_804A49C(s32 a0, s32 a1);
extern void sub_80402AC(s32, s32);
void sub_803F580(u8 a0)
{
UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8;
@ -1156,9 +1161,6 @@ s32 GetCameraYPos(void)
return (strPtr->cameraPixelPos.y + 96) * 256;
}
void sub_803FB74(void);
extern u8 gUnknown_20274A5;
void sub_803F9CC(void)
{
s32 i;
@ -1185,9 +1187,6 @@ void sub_803F9CC(void)
gUnknown_20274A5 = 1;
}
extern u32 gUnknown_3001018[];
extern const u32 gUnknown_80F6490[];
void sub_803FA4C(s32 a0, s32 a1, bool8 a2)
{
s32 i;
@ -1252,14 +1251,6 @@ void sub_803FA4C(s32 a0, s32 a1, bool8 a2)
sub_80098BC((void *) VRAM + 0x5980, gUnknown_3001018, 0x180);
}
extern s32 gUnknown_202EDCC;
// 2d array? possibly the same as gUnknown_202D06C TODO: merge the variables
extern u8 gUnknown_202D068[];
void sub_803FE30(s32 a0, u16 *a1, u8 a2, u8 a3);
void sub_803FF18(s32 a0, u16 *a1, u8 a2);
void sub_803FB74(void)
{
s32 i;
@ -1380,15 +1371,9 @@ void sub_803FB74(void)
}
}
extern const s32 gUnknown_80F64B4[];
extern const u16 gUnknown_80F64D8[][9];
void sub_803FE30(s32 a0, u16 *a1, u8 a2, u8 a3)
void sub_803FE30(s32 a0, u16 *a1, bool8 a2, bool8 a3)
{
s32 var = 0;
if (!a2) {
var = 55;
}
s32 var = (a2) ? 0 : 55;
if (a0 > 100) {
if (a2) {
@ -1407,11 +1392,11 @@ void sub_803FE30(s32 a0, u16 *a1, u8 a2, u8 a3)
else {
// I thought 'ptr' was a compiler generated variable, but I couldn't match the function without declaring it.
u16 *ptr = a1 + 1;
s32 r7 = var + 48;
s32 varAdd = var + 48;
if (a0 >= 10) {
s32 i;
s32 arrId = (a2 == 0) ? 1 : 0;
s32 arrId = (!a2) ? 1 : 0;
for (i = 0; i < 9; i++) {
#ifndef NONMATCHING
@ -1419,17 +1404,58 @@ void sub_803FE30(s32 a0, u16 *a1, u8 a2, u8 a3)
#endif // NONMATCHING
if (gUnknown_80F64B4[i] <= a0) {
*a1 = gUnknown_80F64D8[arrId][i];
*ptr = (((a0 - gUnknown_80F64B4[i]) + r7) + 0x258) | 0xF000;
*ptr = (((a0 - gUnknown_80F64B4[i]) + varAdd) + 0x258) | 0xF000;
return;
}
}
}
if (a3 == 0) {
if (!a3) {
*(a1++) = 0xF278;
}
*a1 = (a0 + r7 + 0x258) | 0xF000;
*a1 = (a0 + varAdd + 0x258) | 0xF000;
}
}
//
void sub_803FF18(s32 a0, u16 *a1, bool8 a2)
{
s32 arrId = (!a2) ? 1 : 0;
s32 var = (a2) ? 0 : 55;
if (a0 > 999) {
u16 val = gUnknown_80F6544[arrId][0];
*(a1++) = val;
*(a1++) = val;
*a1 = val;
}
else {
u8 toAdd = 32;
s32 i = 0;
s32 varAdd = var + 48;
for (i = 0; i < 9; i++) {
if (gUnknown_80F64FC[i] <= a0) {
*(a1++) = gUnknown_80F6544[arrId][i];
a0 -= gUnknown_80F64FC[i];
toAdd = varAdd;
break;
}
}
if (i == 9) {
*(a1++) = (toAdd + 0x258) | 0xF000;
}
for (i = 0; i < 9; i++) {
if (gUnknown_80F6520[i] <= a0) {
*(a1++) = gUnknown_80F6544[arrId][i];
a0 -= gUnknown_80F6520[i];
break;
}
}
if (i == 9) {
*(a1++) = (toAdd + 0x258) | 0xF000;
}
*a1 = (a0 + varAdd + 0x258) | 0xF000;
}
}