mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-24 17:54:43 -05:00
Merge pull request #361 from DizzyEggg/sub_800EF64
Some checks are pending
GithubCI / build (push) Waiting to run
Some checks are pending
GithubCI / build (push) Waiting to run
sub_800EF64 in code_800ED38.s
This commit is contained in:
@@ -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
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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++;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user