Merge pull request #361 from DizzyEggg/sub_800EF64
Some checks are pending
GithubCI / build (push) Waiting to run

sub_800EF64 in code_800ED38.s
This commit is contained in:
AnonymousRandomPerson
2025-03-13 15:51:01 -04:00
committed by GitHub
7 changed files with 108 additions and 169 deletions

View File

@@ -1,112 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_800EF64
sub_800EF64:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
ldr r0, _0800EF9C
mov r9, r0
movs r1, 0x4
mov r8, r1
movs r7, 0
movs r6, 0
movs r5, 0x1
_0800EF7A:
mov r0, r9
ldr r1, [r0]
adds r0, r1, 0x4
adds r0, r7
ldr r0, [r0]
cmp r0, 0
beq _0800F01A
mov r0, r8
adds r4, r1, r0
ldr r0, [r4]
cmp r0, 0x3
beq _0800EFA0
cmp r0, 0x3
bls _0800F018
cmp r0, 0x4
beq _0800EFDA
b _0800F018
.align 2, 0
_0800EF9C: .4byte gUnknown_203B0D0
_0800EFA0:
ldr r0, [r4, 0x8]
ldr r1, [r4, 0x18]
bl sub_8005674
mov r1, r9
ldr r0, [r1]
ldr r0, [r0]
cmp r0, 0
beq _0800EFCA
cmp r0, 0x1
bne _0800F00C
ldr r0, [r4, 0x8]
ldr r1, [r0, 0x18]
ldr r0, [r4, 0xC]
adds r0, 0x10
lsls r0, 20
lsrs r0, 16
movs r2, 0x10
bl sub_809971C
b _0800F00C
_0800EFCA:
ldr r0, [r4, 0xC]
ldr r1, [r4, 0x8]
ldr r1, [r1, 0x18]
ldr r2, [r4, 0x1C]
ldr r3, [r4, 0x20]
bl sub_8005770
b _0800F00C
_0800EFDA:
bl sub_8000728
cmp r0, 0x1
bne _0800F000
movs r0, 0
movs r1, 0x1
bl sub_800CD64
movs r0, 0
bl sub_8052210
movs r0, 0x5
movs r1, 0
bl sub_803EAF0
bl sub_800CB20
bl xxx_call_update_bg_vram
_0800F000:
ldr r0, [r4, 0x8]
ldr r1, [r4, 0xC]
ldr r2, [r4, 0x10]
ldr r3, [r4, 0x14]
bl sub_8009A1C
_0800F00C:
ldr r0, [r4, 0x4]
cmp r0, 0
beq _0800F018
bl sub_800F204
str r6, [r4, 0x4]
_0800F018:
str r6, [r4]
_0800F01A:
movs r0, 0x24
add r8, r0
adds r7, 0x24
subs r5, 0x1
cmp r5, 0
bge _0800EF7A
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_800EF64
.align 2,0

View File

@@ -5,13 +5,22 @@
#include "structs/axdata.h"
#include "file_system.h"
// size: 0x20
struct axMapSprite
typedef struct Palette256
{
axmain axmain;
const u32 *tiles;
const RGB *pal;
s32 tileCount;
RGB pal[256];
} Palette256;
// size: 0x20
struct EfoFileData
{
/* 0x0 */ ax_pose **poses; // TODO: Verify if these fields' names are actually valid
/* 0x4 */ ax_anim ***animations;
/* 0x8 */ s32 animCount;
/* 0xC */ void *spriteData; // ?
/* 0x10 */ Palette256 *unk10; // ?
/* 0x14 */ const u32 *tiles;
/* 0x18 */ const RGB *pal;
/* 0x1C */ s32 tileCount;
};
extern s16 *gUnknown_203B078;
@@ -24,6 +33,7 @@ void nullsub_12(void);
void nullsub_13(void);
void nullsub_14(void);
void sub_8005610(OpenedFile *, s32, s32, const RGB *);
const RGB *sub_8005674(const struct EfoFileData *a0, s32 vramIdx);
void sub_8005770(s32, const RGB *color, s32, const RGB *ramp);
void sub_80057E8(void);
void sub_8005838(s32 *, u8 kind);

View File

@@ -13,8 +13,14 @@ struct unkStruct_202D240
u32 size;
};
void vram_related_8009804(void);
struct unkStruct_8009A1C_ptr
{
u8 fill0;
struct EfoFileData *ptr;
};
void vram_related_8009804(void);
void sub_8009A1C(const struct EfoFileData *r0, u32 palId, u32 vramDstOffset, u32 r3);
void InitFontPalette(void);
void sub_80098A0(void);
void sub_80098BC(u32 *, const u32 *, u32);

View File

@@ -84,7 +84,6 @@ SECTIONS {
src/code_800E9A8.o(.text);
src/code_800E9E4.o(.text);
src/code_800ED38.o(.text);
asm/code_800ED38.o(.text);
src/code_800F034.o(.text);
src/code_800F958.o(.text);
src/friend_areas_map.o(.text);

View File

@@ -29,15 +29,14 @@ extern const s16 gUnknown_80B816A[16 * 10];
extern const s16 gUnknown_80B82AA[16 * 10];
extern const s16 gUnknown_80B83EA[16 * 10];
static void sub_800561C(struct axMapSprite *, s32, s32, const RGB *);
const RGB *sub_8005674(struct axMapSprite *, s32);
static void sub_800561C(struct EfoFileData *, s32, s32, const RGB *);
void sub_8005610(OpenedFile *a0, s32 vramIdx, s32 brightness, const RGB *ramp)
{
sub_800561C((struct axMapSprite *)a0->data, vramIdx, brightness, ramp);
sub_800561C((struct EfoFileData *)a0->data, vramIdx, brightness, ramp);
}
static void sub_800561C(struct axMapSprite *a0, s32 vramIdx, s32 brightness, const RGB *ramp)
static void sub_800561C(struct EfoFileData *a0, s32 vramIdx, s32 brightness, const RGB *ramp)
{
s32 i;
@@ -52,10 +51,10 @@ static void sub_800561C(struct axMapSprite *a0, s32 vramIdx, s32 brightness, con
UNUSED static const RGB *sub_8005668(OpenedFile *a0, s32 vramIdx)
{
return sub_8005674((struct axMapSprite *)a0->data, vramIdx);
return sub_8005674((struct EfoFileData *)a0->data, vramIdx);
}
const RGB *sub_8005674(struct axMapSprite *a0, s32 vramIdx)
const RGB *sub_8005674(const struct EfoFileData *a0, s32 vramIdx)
{
if (a0->tiles != NULL)
CpuCopy(OBJ_VRAM0 + vramIdx * 0x20, a0->tiles, a0->tileCount * 0x20);

View File

@@ -4,6 +4,7 @@
#include "cpu.h"
#include "file_system.h"
#include "text.h"
#include "code_800558C.h"
extern const u8 gUnknown_80B88CC[];
extern const struct FileArchive gSystemFileArchive; // 8300500
@@ -14,27 +15,6 @@ EWRAM_DATA static s32 gUnknown_202D23C = 0;
EWRAM_DATA static struct unkStruct_202D240 gUnknown_202D240[8] = {0};
EWRAM_DATA u32 gUnknown_202D2A0 = 0;
typedef struct Palette256
{
RGB pal[256];
} Palette256;
struct unkStruct_8009A1C
{
u8 fill0[0x8];
s32 unk8;
u32 *unkC;
Palette256 *unk10;
};
struct unkStruct_8009A1C_ptr
{
u8 fill0;
struct unkStruct_8009A1C *ptr;
};
void sub_8009A1C(struct unkStruct_8009A1C *r0, u32 palId, u32 vramDstOffset, u32 r3);
void InitFontPalette(void)
{
OpenedFile *fontpalFile;
@@ -158,16 +138,16 @@ UNUSED static void sub_8009A10(struct unkStruct_8009A1C_ptr *a0, u32 palId, u32
sub_8009A1C(a0->ptr, palId, vramDstOffset, r3);
}
void sub_8009A1C(struct unkStruct_8009A1C *r0, u32 palId, u32 vramDstOffset, u32 r3)
void sub_8009A1C(const struct EfoFileData *r0, u32 palId, u32 vramDstOffset, u32 r3)
{
s32 i;
u32 *dst, *src;
gUnknown_202D2A0 = r3;
src = r0->unkC;
src = r0->spriteData;
dst = (void *)(VRAM) + vramDstOffset;
for (i = 0; i <= r0->unk8; i++) {
for (i = 0; i <= r0->animCount; i++) {
*dst++ = *src++;
*dst++ = *src++;
*dst++ = *src++;

View File

@@ -1,23 +1,28 @@
#include "global.h"
#include "code_800E9E4.h"
#include "dungeon_pokemon_sprites.h"
#include "dungeon_message.h"
#include "file_system.h"
#include "main_loops.h"
#include "memory.h"
#include "sprite.h"
#include "code_800C9CC.h"
#include "code_800558C.h"
#include "bg_control.h"
#include "code_8009804.h"
struct unkStruct_203B0D0_sub
{
// size: 0x24
u32 unk0;
struct unkStruct_203B0D0_sub *unk4;
struct unkStruct_203B0D0_sub *unk8;
OpenedFile *file;
const struct EfoFileData *fileData;
u32 unkC;
s32 unk10;
s32 unk14;
s32 unk18;
s32 unk1C;
u32 unk20;
const RGB *ramp;
};
struct unkStruct_203B0D0 {
@@ -66,8 +71,8 @@ void sub_800ED80(void)
{
sub = &gUnknown_203B0D0->unk4[index];
sub->unk0 = 0;
sub->unk4 = 0;
sub->unk8 = 0;
sub->file = NULL;
sub->fileData = NULL;
}
}
@@ -86,9 +91,9 @@ bool8 sub_800EDB0(struct unkStruct_203B0D0_sub *r0)
return FALSE;
}
void sub_800EDF0(u32 r0, struct unkStruct_203B0D0_sub *r1) {
void sub_800EDF0(u32 r0, OpenedFile *file)
{
struct unkStruct_203B0D0_sub stack;
s32 uVar1;
switch(r0)
{
@@ -96,26 +101,23 @@ void sub_800EDF0(u32 r0, struct unkStruct_203B0D0_sub *r1) {
stack.unk0 = 3;
stack.unkC = 0xE;
stack.unk10 = -1;
stack.unk18 = 0xDC << 2;
stack.unk18 = 0x370;
stack.unk1C = 0x1F;
stack.unk14 = -1;
stack.unk4 = r1;
stack.unk14 = -1;
stack.file = file;
break;
case 1:
stack.unk0 = 4;
stack.unkC = 0xE;
stack.unk10 = 0xF0 << 4;
stack.unk10 = 0xF00;
stack.unk18 = -1;
stack.unk1C = -1;
// TODO: what math op is this again?
uVar1 = sub_8000728();
stack.unk14 = (((int)(-(uVar1 ^ 2) | (uVar1 ^ 2)) >> 0x1f) & 2);
stack.unk4 = r1;
stack.unk14 = (sub_8000728() != 2) ? 2 : 0;
stack.file = file;
break;
}
stack.unk8 = r1->unk4;
stack.unk20 = 0;
stack.fileData = (void *) file->data;
stack.ramp = NULL;
sub_800EDB0(&stack);
}
@@ -145,7 +147,7 @@ void sub_800EE5C(s32 r0)
else if(ret2 != -2)
{
sub_800F13C(ret2, file, ret);
sub_800EDF0(ret2, (void *)file);
sub_800EDF0(ret2, file);
}
else {
sub_800F204(file);
@@ -202,3 +204,58 @@ void sub_800EF40(u8 r0, u8 r1)
}
sub_800EE5C(ret);
}
extern void xxx_call_update_bg_vram(void);
extern void sub_803EAF0(u32 a0, u8 *a1);
extern void sub_809971C(u16 a0, const RGB *a1, int a2);
void sub_800EF64(void)
{
s32 i;
struct unkStruct_203B0D0_sub *sub;
for (i = 0; i < 2; i++) {
if (gUnknown_203B0D0->unk4[i].unk0 == 0)
continue;
sub = &gUnknown_203B0D0->unk4[i];
switch(sub->unk0) {
case 1:
case 2:
break;
case 3:
sub_8005674(sub->fileData, sub->unk18);
switch(gUnknown_203B0D0->unk0) {
case 1: {
const RGB *pal = sub->fileData->pal;
sub_809971C((sub->unkC + 16) * 16, pal, 0x10);
break;
}
case 0: {
sub_8005770(sub->unkC, sub->fileData->pal, sub->unk1C, sub->ramp);
break;
}
}
if(sub->file != 0) {
sub_800F204(sub->file);
sub->file = NULL;
}
break;
case 4:
if (sub_8000728() == 1) {
sub_800CD64(0, TRUE);
sub_8052210(0);
sub_803EAF0(5, NULL);
sub_800CB20();
xxx_call_update_bg_vram();
}
sub_8009A1C(sub->fileData, sub->unkC, sub->unk10, sub->unk14);
if(sub->file != NULL) {
sub_800F204(sub->file);
sub->file = NULL;
}
break;
}
sub->unk0 = 0;
}
}