Merge pull request #426 from DizzyEggg/code_800DAC0

Code 800dac0
This commit is contained in:
AnonymousRandomPerson 2025-07-14 23:28:55 -04:00 committed by GitHub
commit 935b54a85f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
65 changed files with 7123 additions and 8086 deletions

File diff suppressed because it is too large Load Diff

23
data/data_80B9BB0.s Normal file
View File

@ -0,0 +1,23 @@
.section .rodata
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "MultiSio010918\0"
.align 2,0
.string "pksdir0\0"
.align 2,0
.string "pksdir0\0"
.align 2,0

File diff suppressed because it is too large Load Diff

View File

@ -1,33 +0,0 @@
#ifndef GUARD_CODE_800DAC0_H
#define GUARD_CODE_800DAC0_H
#include "structs/sprite_oam.h"
#include "structs/str_position.h"
#include "code_800E9A8.h"
typedef struct unkStruct_80416E0
{
s32 unk0;
s32 unk4;
s32 dir;
u16 x;
u16 y;
u16 unk10;
u16 unk12;
s32 unk14;
u32 unk18;
unkStruct_2039DB0 unk1C;
} unkStruct_80416E0;
u32 sub_800E890(unkStruct_80416E0 *);
void sub_800DC14(s32);
bool8 sub_800E9A8(s32);
void sub_800DAC0(u32);
void sub_800DB7C(void);
void sub_800DBBC(void);
bool8 sub_800E90C(DungeonPos *);
void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, unkStruct_2039DB0 *a4);
#endif // GUARD_CODE_800DAC0_H

View File

@ -1,54 +0,0 @@
#ifndef GUARD_CODE_800E9A8_H
#define GUARD_CODE_800E9A8_H
#include "structs/axdata.h"
#include "structs/sprite_oam.h"
#include "structs/str_position.h"
#include "structs/str_file_system.h"
struct unkStruct_203B0CC_sub
{
// size: 0xD0
u32 unk0;
s32 unk4;
s32 unk8;
s32 unkC;
s32 unk10;
s32 unk14;
DungeonPos unk18;
DungeonPos unk1c;
s32 unk20;
s32 unk24;
unkStruct_2039DB0 spriteMasks;
u32 unk34;
u32 effectID;
s32 paletteNum;
u8 fill40[0x4C - 0x40];
u32 unk4C;
s32 unk50;
u8 unk54;
u8 fill55[0x58 - 0x55];
axObject unk58;
u8 fillA4[0xB8 - 0xA4];
OpenedFile *unkB8;
u8 fillBC[0xCC - 0xBC];
s16 unkCC[2]; // NOTE: might be DungeonPos
};
struct unkStruct_203B0CC
{
// size: 0x1A18
struct unkStruct_203B0CC_sub unk0[0x20];
u32 unk1A00;
/* 0x1A04 */ u32 fileSelection;
u32 unk1A08;
u32 unk1A0C;
u32 unk1A10;
u8 fill1A14[0x1A18 - 0x1A14];
};
bool8 sub_800E9A8(s32 a0);
bool8 sub_800E9E4(u32);
bool8 sub_800E9FC(u8 a0);
#endif

View File

@ -1,45 +0,0 @@
#ifndef GUARD_CODE_800E9E4_H
#define GUARD_CODE_800E9E4_H
typedef struct unkStruct_80B9CC4
{
// size: 0x24
u32 animType;
s32 effectId;
s32 unk8;
s32 animId;
s32 unk10;
s32 unk14;
s8 unk18;
// padding: 3 bytes
s32 unk1c;
s8 unk20;
s8 loop;
// padding: 2 bytes
} unkStruct_80B9CC4;
typedef struct unkStruct_80BDBC4
{
// size: 0x24
s16 unk0;
s16 unk2;
s16 unk4;
s16 unk6;
u8 unk8;
u8 unk9;
u8 fillA[0x0c - 0x0a];
s32 unkC;
s32 unk10;
u8 fill14[0x1c - 0x14];
s32 unk1C;
s32 unk20;
} unkStruct_80BDBC4;
u8 sub_800EC74(void);
unkStruct_80B9CC4 *sub_800ECA4(s32);
unkStruct_80BDBC4 *sub_800ECB8(u16);
s16 sub_800ECE4(u8);
s16 sub_800ECF8(u8);
s16 sub_800ED0C(u8);
#endif

View File

@ -1,7 +0,0 @@
#ifndef GUARD_CODE_800ED38_H
#define GUARD_CODE_800ED38_H
void sub_800EE5C(s32 r0);
void sub_800EF64(void);
#endif // GUARD_CODE_800ED38_H

View File

@ -0,0 +1,9 @@
#ifndef GUARD_EFFECT_ANIM_FILE_H
#define GUARD_EFFECT_ANIM_FILE_H
#include "structs/str_file_system.h"
OpenedFile *OpenEffectFile(u32 animType, s32 effectID);
void CloseEffectFile(OpenedFile *file);
#endif // GUARD_EFFECT_ANIM_FILE_H

55
include/effect_data.h Normal file
View File

@ -0,0 +1,55 @@
#ifndef GUARD_EFFECT_DATA_H
#define GUARD_EFFECT_DATA_H
typedef struct unkStruct_80B9CC4
{
// size: 0x24
u32 animType;
s32 effectId;
s32 unk8;
s32 animId;
s32 unk10;
s32 unk14;
u8 unk18;
// padding: 3 bytes
s32 unk1c;
s8 unk20;
s8 loop;
// padding: 2 bytes
} unkStruct_80B9CC4;
typedef struct unkStruct_80BDBC4
{
// size: 0x24
s16 unk0;
s16 unk2;
s16 unk4;
s16 unk6;
u8 unk8;
u8 unk9;
s32 unkC;
s32 unk10;
s32 unk14;
s32 unk18;
s32 unk1C; // Amount of gUnknown_80C183C entries to scan
s32 unk20; // Index into gUnknown_80C183C
} unkStruct_80BDBC4;
typedef struct unkStruct_80C183C
{
// size: 0xc
s16 unk0;
s16 unk2;
s32 unk4;
s32 unk8;
} unkStruct_80C183C;
const unkStruct_80B9CC4 *sub_800ECA4(s32 param_1);
const unkStruct_80BDBC4 *sub_800ECB8(u16 param_1);
const unkStruct_80C183C *sub_800ECD0(s32 param_1);
s16 sub_800ECE4(u8 param_1);
s16 sub_800ECF8(u8 param_1);
s16 sub_800ED0C(u8 param_1);
s32 sub_800ED20(u16 param_1);
#endif

68
include/effect_main.h Normal file
View File

@ -0,0 +1,68 @@
#ifndef GUARD_EFFECT_MAIN_H
#define GUARD_EFFECT_MAIN_H
#include "structs/sprite_oam.h"
#include "structs/str_position.h"
#include "effect_data.h"
typedef struct unkStruct_80416E0
{
s32 unk0;
s32 unk4;
s32 dir;
DungeonPos pos1;
DungeonPos pos2;
s32 unk14;
u32 unk18;
unkStruct_2039DB0 spriteMasks;
} unkStruct_80416E0;
typedef struct unkStruct_800EA44
{
s16 unk0;
s16 unk2;
} unkStruct_800EA44;
struct UnkStruct_8040094
{
u16 unk0;
s16 unk2;
DungeonPos unk4;
DungeonPos unk8;
s32 unkC;
s32 unk10;
};
void sub_800DAC0(u32 fileSelection);
void sub_800DB7C(void);
void sub_800DBBC(void);
void sub_800DC14(s32 param_1);
s32 sub_800DC9C(s32 a0);
s32 sub_800E308(struct UnkStruct_8040094 *a0, DungeonPos *a1);
void sub_800E3AC(s32 a0, DungeonPos *pos, s32 a2);
s32 sub_800E448(u8 a0, DungeonPos *pos);
s32 sub_800E49C(u8 a0, DungeonPos *pos, DungeonPos posArray[4], bool8 a3, s32 a4);
s32 sub_800E52C(struct UnkStruct_8040094 *a0);
s32 sub_800E6D8(s32 a0);
s32 sub_800E700(s32 a0);
s32 sub_800E710(s32 a0_, s32 a1);
s32 sub_800E790(s32 a0_, s32 a1);
bool8 sub_800E7D0(u16 *param_1);
bool8 sub_800E838(u16 *param_1, s32 param_2);
s32 sub_800E890(unkStruct_80416E0 *param_1);
void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, unkStruct_2039DB0 *a4);
bool8 sub_800E90C(DungeonPos *param_1);
void sub_800E970(void);
bool8 sub_800E9A8(s32 a0);
bool8 sub_800E9E4(u32 param_1);
bool8 sub_800E9FC(u8 a0);
u8 sub_800EA44(unkStruct_800EA44 param_1, s32 param_2);
s32 sub_800EA84(struct UnkStruct_8040094 *a0);
void sub_800EB24(s32 param_1, DungeonPos *param_2, DungeonPos *param_3, s32 r5, s32 r4);
s32 sub_800EBC8(struct UnkStruct_8040094 *a0);
u8 sub_800EC74(void);
u8 sub_800EC84(s32 param_1);
u8 sub_800EC94(s32 param_1);
#endif // GUARD_EFFECT_MAIN_H

16
include/effect_sub_1.h Normal file
View File

@ -0,0 +1,16 @@
#ifndef GUARD_EFFECT_SUB_1_H
#define GUARD_EFFECT_SUB_1_H
void sub_800ED38(s32 r0);
void sub_800ED64(void);
void sub_800ED80(void);
void sub_800EE5C(s32 r0);
void sub_800EEC8(u16 r0);
void sub_800EEE0(u16 r0);
void sub_800EEF8(u16 r0);
void sub_800EF10(u16 r0);
void sub_800EF28(u8 r0);
void sub_800EF40(u8 r0, bool8 r1);
void sub_800EF64(void);
#endif // GUARD_EFFECT_SUB_1_H

16
include/effect_sub_2.h Normal file
View File

@ -0,0 +1,16 @@
#ifndef GUARD_EFFECT_SUB_2_H
#define GUARD_EFFECT_SUB_2_H
#include "structs/str_file_system.h"
#include "effect_data.h"
void sub_800F034(void);
void sub_800F078(void);
void sub_800F094(void);
s32 sub_800F0F4(s32 animType, s32 effectID);
void sub_800F13C(s32 index, OpenedFile *file, const unkStruct_80B9CC4 *r2);
void sub_800F15C(s32 effectID);
struct unkStruct_800F18C *sub_800F18C(s32 index);
s32 sub_800F19C(s32 index);
#endif // GUARD_EFFECT_SUB_2_H

View File

@ -2,6 +2,7 @@
#define GUARD_GRAPHICS_MEMORY_H
#include "structs/axdata.h"
#include "structs/str_8009A7C.h"
extern RGB gFontPalette[128];
@ -20,5 +21,6 @@ void ScheduleBgTilemapCopy(u32);
void DoScheduledMemCopies(void);
void CopyBgTilemaps0And1(void);
void SetFontsBaseColor(RGB);
bool8 sub_8009A7C(struct Struct_8009A7C *a0, s32 a1, s32 a2, s32 a3, bool8 a4, s32 *a5, s16 *a6);
#endif // GUARD_GRAPHICS_MEMORY_H

View File

@ -57,4 +57,17 @@ void sub_800569C(DungeonPos *, axdata *, u8);
void sub_8005700(DungeonPos *dstPos, axdata *axData);
void sub_8005770(s32, const RGB *color, s32 brightness, const RGB *ramp);
static inline bool8 AxFlag8000(axdata *ax)
{
return (ax->flags & 0x8000) != 0;
}
static inline bool8 AxFlag8000_Not2000(axdata *ax)
{
if (ax->flags & 0x2000)
return FALSE;
else
return (ax->flags & 0x8000) != 0;
}
#endif // GUARD_SPRITE_H

View File

@ -1,37 +0,0 @@
#ifndef GUARD_STRUCTS_CODE_800E9E4_H
#define GUARD_STRUCTS_CODE_800E9E4_H
typedef struct unkStruct_80B9C60
{
s32 unk0;
s32 unk1;
s32 unk2;
} unkStruct_80B9C60;
typedef struct unkStruct_80CE37C
{
s16 unk0;
s16 unk2;
} unkStruct_80CE37C;
typedef struct unkStruct_80C183C
{
// size: 0xc
s16 unk0;
s16 unk2;
u8 fill4[0xc - 0x4];
} unkStruct_80C183C;
typedef struct unkStruct_800EA44
{
s16 unk0;
s16 unk2;
} unkStruct_800EA44;
typedef struct unkStruct_800E208
{
s32 unk00[7];
unkStruct_80B9C60 unk1c;
} unkStruct_800E208;
#endif

View File

@ -13,6 +13,8 @@ typedef struct unkStruct_2039DB0
u16 unkA; // SpriteOAM attrib3 value
} unkStruct_2039DB0;
#define DEFAULT_UNK_2039DB0_MASKS (unkStruct_2039DB0) {0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0}
// size: 0x8. Similar to struct OamData but unk6 is not copied to OAM
typedef struct SpriteOAM
{

View File

@ -0,0 +1,11 @@
#ifndef GUARD_STR_8009A7C_H
#define GUARD_STR_8009A7C_H
struct Struct_8009A7C
{
s32 unk0;
u16 **unk4;
u8 fill8[0x14-0x8];
};
#endif // GUARD_STR_8009A7C_H

View File

@ -82,12 +82,11 @@ SECTIONS {
src/flash.o(.text);
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);
src/code_800F034.o(.text);
src/effect_main.o(.text);
src/effect_data.o(.text);
src/effect_sub_1.o(.text);
src/effect_sub_2.o(.text);
src/effect_anim_file.o(.text);
src/dungeon_pokemon_sprites.o(.text);
src/friend_areas_map.o(.text);
src/world_map.o(.text);
@ -454,8 +453,12 @@ SECTIONS {
data/pksdir_8.o(.rodata);
src/main.o(.rodata);
src/reg_control.o(.rodata);
data/data_80B9BB8_2.o(.rodata);
src/code_800F034.o(.rodata);
data/data_80B9BB0.o(.rodata);
src/effect_main.o(.rodata)
src/effect_data.o(.rodata)
src/effect_sub_1.o(.rodata)
src/effect_sub_2.o(.rodata);
src/effect_anim_file.o(.rodata);
src/dungeon_pokemon_sprites.o(.rodata);
src/friend_areas_map.o(.rodata);
src/world_map.o(.rodata);

View File

@ -1,190 +0,0 @@
#include "global.h"
#include "structs/axdata.h"
#include "bg_control.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "music_util.h"
#include "code_803E724.h"
#include "def_filearchives.h"
#include "dungeon_map.h"
#include "file_system.h"
#include "main_loops.h"
#include "memory.h"
#include "sprite.h"
EWRAM_INIT struct unkStruct_203B0CC *gUnknown_203B0CC = NULL;
struct unkStruct_800F18C
{
s32 effectID;
u32 counter;
};
extern s32 sub_800E2C0(u32);
extern u32 sub_800E900(void);
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();
extern void sub_800ED64();
extern void sub_800ED80();
extern void sub_800F094();
void sub_800DAC0(u32 fileSelection)
{
s32 index;
OpenedFile *filePtr;
struct unkStruct_203B0CC_sub *preload;
if (gUnknown_203B0CC != NULL) {
sub_800DB7C();
}
gUnknown_203B0CC = MemoryAlloc(sizeof(struct unkStruct_203B0CC), 0xb);
MemoryClear8(gUnknown_203B0CC, sizeof(struct unkStruct_203B0CC));
gUnknown_203B0CC->fileSelection = fileSelection;
for(index = 0, preload = &gUnknown_203B0CC->unk0[index]; index < 0x20; index++, preload++)
{
preload->unk4 = -1;
}
sub_800ED38(fileSelection);
sub_800F034();
switch(gUnknown_203B0CC->fileSelection)
{
case 1:
filePtr = Call_OpenFileAndGetFileDataPtr(gefob001_string, &gEffectFileArchive);
if (filePtr != NULL) {
sub_8005610(filePtr,0x248,0x1f,0);
CloseFile(filePtr);
}
break;
case 0:
filePtr = Call_OpenFileAndGetFileDataPtr(gefob000_string, &gEffectFileArchive);
if (filePtr != NULL) {
sub_8005610(filePtr,0x248,0x1f,0);
CloseFile(filePtr);
}
break;
}
}
void sub_800DB7C(void)
{
s32 index;
struct unkStruct_203B0CC_sub *preload;
for(index = 0, preload = &gUnknown_203B0CC->unk0[index]; index < 0x20; index++, preload++)
{
if(preload->unk4 != -1)
sub_800DC14(preload->unk4);
}
sub_800F078();
sub_800ED64();
if(gUnknown_203B0CC != NULL)
{
MemoryFree(gUnknown_203B0CC);
gUnknown_203B0CC = NULL;
}
}
void sub_800DBBC(void)
{
s32 index1;
s32 index2;
struct unkStruct_203B0CC_sub *preload;
struct unkStruct_203B0CC_sub *preload2;
for(index1 = 0, preload = &gUnknown_203B0CC->unk0[index1]; index1 < 0x20; index1++, preload++)
{
if(preload->unk4 != -1)
sub_800DC14(preload->unk4);
}
for(index2 = 0, preload2 = &gUnknown_203B0CC->unk0[index2]; index2 < 0x20; index2++, preload2++)
{
preload2->unk4 = -1;
}
sub_800ED80();
sub_800F094();
}
bool8 sub_800DCC0(void)
{
return gUnknown_203B0CC != NULL;
}
void sub_800DC14(s32 param_1)
{
s32 index1;
s32 index2;
struct unkStruct_800F18C *piVar3;
struct unkStruct_800F18C *puVar4;
struct unkStruct_203B0CC_sub *preload;
index1 = sub_800E2C0(param_1);
if (index1 != -1) {
preload = &gUnknown_203B0CC->unk0[index1];
if (preload->unk34 == 4) {
sub_8009BE4();
if (sub_8000728() == 1) {
LoadDungeonMapPalette();
sub_803EAF0(0, NULL);
sub_800CD64(0x8000,0);
}
}
if (preload->unk34 == 3) {
for (index2 = 0; index2 < 2; index2 = index2 + 1) {
piVar3 = sub_800F18C(index2);
if (piVar3->effectID == preload->effectID) {
piVar3->counter--;
break;
}
}
}
else {
puVar4 = sub_800F18C(1);
puVar4->counter = 0;
puVar4->effectID = -1;
}
sub_800DCA8(preload);
}
}
u32 sub_800DC9C(void) {
return sub_800E900();
}
void sub_800DCA8(struct unkStruct_203B0CC_sub *param_1)
{
param_1->unk4 = -1;
param_1->unk54 = 0;
if(param_1->unkB8 != NULL)
{
sub_800F204(param_1->unkB8);
param_1->unkB8 = NULL;
}
}
void sub_800DCD0(struct unkStruct_203B0CC_sub *param_1)
{
if ((param_1->unk4C != -1) && (param_1->unk50 == 0)) {
if (sub_8000728() != 2) {
PlaySound(param_1->unk4C);
}
param_1->unk4C = -1;
param_1->unk50 = -1;
}
if (param_1->unk50 > 0) {
param_1->unk50--;
}
}

View File

@ -1,179 +0,0 @@
#include "global.h"
#include "structs/code_800E9E4.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "code_800E9E4.h"
#include "structs/str_position.h"
s32 sub_800E2C0(u32);
extern struct unkStruct_203B0CC *gUnknown_203B0CC;
void sub_800DE38(struct unkStruct_203B0CC_sub *);
void sub_800DE8C(struct unkStruct_203B0CC_sub *, DungeonPos *);
void sub_800DD0C(struct unkStruct_203B0CC_sub *, DungeonPos *);
void sub_800DCD0(struct unkStruct_203B0CC_sub *);
s32 sub_800E900(s32 r0);
s32 sub_800E208(s32, unkStruct_800E208*);
bool8 sub_800E7D0(u16 *param_1)
{
int local_1c [4];
bool8 flag;
s32 index;
flag = FALSE;
local_1c[0] = sub_800ECB8(*param_1)->unk0;
local_1c[1] = sub_800ECB8(*param_1)->unk2;
local_1c[2] = sub_800ECB8(*param_1)->unk4;
local_1c[3] = sub_800ECB8(*param_1)->unk6;
for(index = 0; index < 4; index++)
{
flag = (sub_800ECA4(local_1c[index])->animType == 4);
if(flag) break;
}
return flag;
}
bool8 sub_800E838(u16 *param_1, s32 param_2)
{
s32 local_1c [4];
local_1c[0] = sub_800ECB8(*param_1)->unk0;
local_1c[1] = sub_800ECB8(*param_1)->unk2;
local_1c[2] = sub_800ECB8(*param_1)->unk4;
local_1c[3] = sub_800ECB8(*param_1)->unk6;
return sub_800ECA4(local_1c[param_2])->animType == 4;
}
// TODO: look at this later
// https://decomp.me/scratch/luz2f
u32 sub_800E890(unkStruct_80416E0 *param_1)
{
param_1->unk14 = sub_800E900(param_1->unk0);
return sub_800E208(7, (void*)&param_1->unk0);
}
void sub_800E8AC(s32 a0, DungeonPos *a1, DungeonPos *a2, s32 a3, unkStruct_2039DB0 *a4)
{
s32 index;
struct unkStruct_203B0CC_sub *ptr;
index = sub_800E2C0(a0);
if(index != -1)
{
ptr = &gUnknown_203B0CC->unk0[index];
if(a1 != NULL) ptr->unk18 = *a1;
if(a2 != NULL) ptr->unk1c = *a2;
if(a3 != 0xFFFF) ptr->unk24 = a3;
if(a4 != NULL) ptr->spriteMasks = *a4;
}
}
s32 sub_800E900(s32 r0)
{
return sub_800ECA4(r0)->unk1c;
}
bool8 sub_800E90C(DungeonPos *param_1)
{
bool8 flag;
s32 iVar1;
struct unkStruct_203B0CC_sub *ptr;
flag = FALSE;
for(iVar1 = 0, ptr = &gUnknown_203B0CC->unk0[iVar1]; iVar1 < 0x20; iVar1++, ptr++)
{
if(ptr->unk4 != -1)
{
if(ptr->unk10 <= 0)
{
if(ptr->unk34 == 4)
{
sub_800DE8C(ptr, param_1);
}
else
{
sub_800DD0C(ptr, param_1);
}
}
if(ptr->unk10 > 0)
ptr->unk10--;
sub_800DCD0(ptr);
if(ptr->unk54 == 0)
flag = TRUE;
}
}
return flag;
}
void sub_800E970(void)
{
s32 iVar1;
struct unkStruct_203B0CC_sub *ptr;
for(iVar1 = 0, ptr = &gUnknown_203B0CC->unk0[iVar1]; iVar1 < 0x20; iVar1++, ptr++)
{
if(ptr->unk4 != -1)
if(ptr->unk10 <= 0)
if(ptr->unk34 != 4)
sub_800DE38(ptr);
}
}
bool8 sub_800E9A8(s32 a0)
{
s32 i;
struct unkStruct_203B0CC_sub *ptr;
if (a0 == -1)
return FALSE;
ptr = gUnknown_203B0CC->unk0;
for (i = 0; i < 32; i++, ptr++) {
if (ptr->unk4 == a0) {
if (ptr->unk54 != 0)
return FALSE;
return TRUE;
}
}
return FALSE;
}
bool8 sub_800E9E4(u32 param_1)
{
if(sub_800E2C0(param_1) != -1)
{
return TRUE;
}
else {
return FALSE;
}
}
bool8 sub_800E9FC(u8 a0)
{
s32 i;
struct unkStruct_203B0CC_sub *ptr;
ptr = gUnknown_203B0CC->unk0;
for (i = 0; i < 32; i++, ptr++) {
if (ptr->unk4 != -1) {
if(a0 != 0)
return TRUE;
if (ptr->unk54 == 0)
return TRUE;
}
}
if(sub_800EC74())
return TRUE;
return FALSE;
}

View File

@ -1,236 +0,0 @@
#include "global.h"
#include "structs/code_800E9E4.h"
#include "code_800E9E4.h"
#include "code_800E9A8.h"
extern s32 sub_800E2C0(u32);
u32 sub_800F19C(s32);
s32 sub_800EBBC(s32);
s32 sub_800EC68(s32);
extern struct unkStruct_203B0CC *gUnknown_203B0CC;
extern unkStruct_80B9C60 gUnknown_80B9C60;
extern s32 gUnknown_80B9C9C[8];
extern s16 gUnknown_80CE73C[20];
extern unkStruct_80CE37C gUnknown_80CE37C[1];
extern unkStruct_80BDBC4 gUnknown_80BDBC4[430];
extern unkStruct_80B9CC4 gUnknown_80B9CC4[448];
extern unkStruct_80C183C gUnknown_80C183C[4336];
unkStruct_80C183C *sub_800ECD0(s32 param_1);
u8 sub_800EA44(unkStruct_800EA44 param_1, s32 param_2)
{
s32 a;
unkStruct_80BDBC4 *ret;
unkStruct_80C183C *unkStruct2;
s32 i;
a = (s32) param_1.unk0;
ret = sub_800ECB8(param_2);
unkStruct2 = sub_800ECD0(ret->unk20);
for (i = 0; i < ret->unk1C; i++, unkStruct2++)
{
if (unkStruct2->unk0 == a)
{
return unkStruct2->unk2;
}
}
return ret->unk10;
}
s32 sub_800E208(s32, unkStruct_800E208*);
s32 sub_800EA84(s32 *param_1)
{
unkStruct_800E208 stack[2];
unkStruct_80BDBC4 *ret1;
u32 size;
ret1 = sub_800ECB8(param_1[0]);
stack[1].unk00[0] = ret1->unk0;
stack[1].unk00[1] = param_1[4];
stack[1].unk00[2] = param_1[3];
stack[1].unk00[3] = param_1[1];
stack[1].unk00[4] = param_1[2];
ret1 = sub_800ECB8(param_1[0]);
stack[1].unk00[5] = sub_800EBBC(ret1->unk0);
stack[1].unk00[6] = 0x0000ffff;
stack[1].unk1c = gUnknown_80B9C60;
size = sizeof(unkStruct_800E208);
memcpy(&stack[0],&stack[1],size);
return sub_800E208(5, &stack[0]);
}
void sub_800EAE4(s32 param_1, DungeonPos *param_2, DungeonPos *param_3)
{
s32 idx = sub_800E2C0(param_1);
if (idx != -1)
{
struct unkStruct_203B0CC_sub *a;
a = &gUnknown_203B0CC->unk0[idx];
a->unk18 = *param_2;
if (a->unk20 != -1)
{
a->unk1c = *param_3;
}
else
{
a->unk1c.x = 0;
a->unk1c.y = 0;
}
}
}
void sub_800EB24(s32 param_1, DungeonPos *param_2, DungeonPos *param_3, s32 r5, s32 r4)
{
s32 idx = sub_800E2C0(param_1);
if (idx != -1) {
struct unkStruct_203B0CC_sub *curStruct;
curStruct = &gUnknown_203B0CC->unk0[idx];
if (curStruct->unkCC[0] == 0 && curStruct->unkCC[1] == 0) {
curStruct->unk18 = *param_2;
}
if (curStruct->unk0 == 6) {
curStruct->unk24 = r5 + 1;
}
else if ((curStruct->unk8 & 0x7) == 0) {
s32 newStruct[8];
memcpy(newStruct, gUnknown_80B9C9C, sizeof(s32) * 8);
curStruct->unk24 = r5 + newStruct[r4 & 7];
}
else {
curStruct->unk24 = r5 + 1;
}
if (curStruct->unk20 != -1) {
curStruct->unk1c = *param_3;
}
else {
curStruct->unk1c.x = 0;
curStruct->unk1c.y = 0;
}
}
}
s32 sub_800EBBC(s32 param_1)
{
unkStruct_80B9CC4 *ret = sub_800ECA4(param_1);
return ret->unk1c;
}
s32 sub_800EBC8(s32 *param_1)
{
unkStruct_800E208 stack[2];
unkStruct_80BDBC4 *ret1;
u32 size;
ret1 = sub_800ECB8(param_1[0]);
stack[1].unk00[0] = ret1->unk4;
stack[1].unk00[1] = param_1[4];
stack[1].unk00[2] = param_1[3];
stack[1].unk00[3] = param_1[1];
stack[1].unk00[4] = param_1[2];
ret1 = sub_800ECB8(param_1[0]);
stack[1].unk00[5] = sub_800EC68(ret1->unk4);
stack[1].unk00[6] = 0x0000ffff;
stack[1].unk1c = gUnknown_80B9C60;
size = sizeof(unkStruct_800E208);
memcpy(&stack[0],&stack[1],size);
return sub_800E208(6, &stack[0]);
}
void sub_800EC28(u32 param_1, DungeonPos *param_2, DungeonPos *param_3)
{
s32 idx;
idx = sub_800E2C0(param_1);
if (idx != -1)
{
struct unkStruct_203B0CC_sub *struct203B0CC;
struct203B0CC = &gUnknown_203B0CC->unk0[idx];
struct203B0CC->unk18 = *param_2;
if (struct203B0CC->unk20 != -1)
{
struct203B0CC->unk1c = *param_3;
}
else
{
struct203B0CC->unk1c.x = 0;
struct203B0CC->unk1c.y = 0;
}
}
}
s32 sub_800EC68(s32 param_1)
{
unkStruct_80B9CC4 *ret = sub_800ECA4(param_1);
return ret->unk1c;
}
u8 sub_800EC74(void)
{
return sub_800F19C(1);
}
u8 sub_800EC84(s32 param_1)
{
unkStruct_80BDBC4 *ret;
ret = sub_800ECB8(param_1);
return ret->unk8;
}
u8 sub_800EC94(s32 param_1)
{
unkStruct_80BDBC4 *ret;
ret = sub_800ECB8(param_1);
return ret->unk9;
}
unkStruct_80B9CC4 *sub_800ECA4(s32 param_1)
{
return &gUnknown_80B9CC4[param_1];
}
unkStruct_80BDBC4 *sub_800ECB8(u16 param_1)
{
return &gUnknown_80BDBC4[param_1];
}
unkStruct_80C183C *sub_800ECD0(s32 param_1)
{
return &gUnknown_80C183C[param_1];
}
s16 sub_800ECE4(u8 param_1)
{
return gUnknown_80CE73C[param_1];
}
s16 sub_800ECF8(u8 param_1)
{
return gUnknown_80CE37C[param_1].unk0;
}
s16 sub_800ED0C(u8 param_1)
{
return gUnknown_80CE37C[param_1].unk2;
}
s32 sub_800ED20(u16 param_1)
{
return gUnknown_80BDBC4[param_1].unkC;
}

View File

@ -7,8 +7,8 @@
#include "structs/str_dungeon.h"
#include "code_800558C.h"
#include "graphics_memory.h"
#include "code_800E9E4.h"
#include "code_800ED38.h"
#include "effect_data.h"
#include "effect_sub_1.h"
#include "dungeon_vram.h"
#include "code_804267C.h"
#include "dungeon_info.h"

View File

@ -7,9 +7,8 @@
#include "structs/sprite_oam.h"
#include "structs/str_dungeon.h"
#include "code_800558C.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "code_800ED38.h"
#include "effect_main.h"
#include "effect_sub_1.h"
#include "dungeon_vram.h"
#include "code_803E724.h"
#include "code_8041AD0.h"
@ -30,7 +29,7 @@
#include "memory.h"
#include "random.h"
#include "dungeon_util_1.h"
#include "code_800E9E4.h"
#include "effect_data.h"
// Unknown dungeon file. File split is correct.
@ -38,7 +37,6 @@ extern const u8 *gPtrFeralFoundItemMessage[];
extern void sub_803ED30(u8, Entity *pokemon, u8, u8);
extern u32 sub_806F62C(u32);
extern u32 sub_800DC9C(s32 a0);
extern void PlaySoundEffect(u32);
void EntityUpdateStatusSprites(Entity *entity);
@ -49,13 +47,11 @@ extern void sub_800DBBC(void);
extern void sub_803EA10(void);
extern void sub_8042E98(void);
extern void sub_800EF28(u8);
extern u32 sub_800E448(u8, DungeonPos *);
extern void sub_80429A0(Entity *);
void sub_8042B34(s32 a0, s32 a1, s32 a2);
extern bool8 sub_8042CC0(void);
extern void sub_8042D7C(void);
extern bool8 sub_8045888(Entity *);
extern u32 sub_800E49C();
extern void sub_800F15C(s32);
extern void sub_800EF40(u8 r0, u8 r1);
extern s32 sub_800E6D8(s32);
@ -246,14 +242,14 @@ s32 sub_8041550(Entity *entity, s32 a1, u8 a2, u8 a3, s32 a4, u8 a5)
sp.unk0 = a1;
sp.unk4 = 0;
sp.dir = -1;
sp.x = pixelPos.x / 256;
sp.y = pixelPos.y / 256;
sp.pos1.x = pixelPos.x / 256;
sp.pos1.y = pixelPos.y / 256;
sp.unk14 = -1;
sp.unk10 = 0;
sp.unk12 = 0;
sp.pos2.x = 0;
sp.pos2.y = 0;
sp.unk18 = var;
sub_8004E8C(&sp.unk1C);
sub_8004E8C(&sp.spriteMasks);
r4 = sub_8041764(&sp, FALSE);
if (a2) {
for (i = 0; i < 100; i++) {
@ -286,14 +282,14 @@ s32 sub_80416E0(PixelPos *pos, u32 param_2, bool8 param_3)
auStack_10.unk4 = 0;
auStack_10.dir = -1;
auStack_10.x = pos->x / 256;
auStack_10.y = pos->y / 256;
auStack_10.pos1.x = pos->x / 256;
auStack_10.pos1.y = pos->y / 256;
auStack_10.unk14 = -1;
auStack_10.unk10 = 0;
auStack_10.unk12 = 0;
auStack_10.pos2.x = 0;
auStack_10.pos2.y = 0;
auStack_10.unk18 = 0xffff;
sub_8004E8C(&auStack_10.unk1C);
sub_8004E8C(&auStack_10.spriteMasks);
ret = sub_8041764(&auStack_10, FALSE);
if (param_3) {
counter = 0;
@ -1232,13 +1228,13 @@ s32 sub_8042520(Entity *a0)
local_58.unk0 = 357;
local_58.unk4 = 0;
local_58.dir = dir;
local_58.x = pos.x;
local_58.y = pos.y;
local_58.unk10 = 0;
local_58.unk12 = 0;
local_58.pos1.x = pos.x;
local_58.pos1.y = pos.y;
local_58.pos2.x = 0;
local_58.pos2.y = 0;
local_58.unk14 = -1;
local_58.unk18 = iVar8;
sub_8004E8C(&local_58.unk1C);
sub_8004E8C(&local_58.spriteMasks);
uVar4 = sub_8041764(&local_58, 0);
for (i = 0; i < 6; i++) {
@ -1556,7 +1552,7 @@ void sub_8042B20(Entity *entity)
sub_8042A84(0x1BC, entity, 0xE);
}
static const unkStruct_2039DB0 gUnknown_80F683C = {0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0};
static const unkStruct_2039DB0 gUnknown_80F683C = DEFAULT_UNK_2039DB0_MASKS;
void sub_8042B34(s32 a0, s32 a1, s32 a2)
{
@ -1578,19 +1574,19 @@ void sub_8042B34(s32 a0, s32 a1, s32 a2)
spStruct.unk0 = gUnknown_80F6624[gUnknown_203B414->unk0][r8].unk0;
spStruct.unk4 = i;
spStruct.dir = 0;
spStruct.x = leader->pixelPos.x / 256;
spStruct.y = leader->pixelPos.y / 256;
spStruct.pos1.x = leader->pixelPos.x / 256;
spStruct.pos1.y = leader->pixelPos.y / 256;
rnd = RandInt(2);
gUnknown_203B414->unk4C[i] = (gUnknown_80F6624[gUnknown_203B414->unk0][r8].unk4 * 2) + rnd;
gUnknown_203B414->unk8C[i].x = RandInt(240) + 152;
gUnknown_203B414->unk8C[i].y = RandInt(8 + (i * 2)) - (((i - (i / 4 * 4)) * 40) - 24);
spStruct.unk10 = gUnknown_203B414->unk8C[i].x;
spStruct.unk12 = gUnknown_203B414->unk8C[i].y;
spStruct.pos2.x = gUnknown_203B414->unk8C[i].x;
spStruct.pos2.y = gUnknown_203B414->unk8C[i].y;
spStruct.unk14 = 4;
spStruct.unk18 = 0xFFFF;
spStruct.unk1C = gUnknown_80F683C;
spStruct.spriteMasks = gUnknown_80F683C;
gUnknown_203B414->unkC[i] = sub_800E890(&spStruct);
r8++;

View File

@ -45,14 +45,6 @@ extern s32 gDungeonFramesCounter;
extern void sub_8042EC8(Entity *a0, s32 a1);
static inline u16 GetUnkFlag(Entity *entity)
{
if ((entity->axObj.axdata.flags & 0x2000))
return 0;
else
return entity->axObj.axdata.flags >> 15;
}
void sub_806C51C(Entity *entity)
{
s32 x, y, y2;
@ -82,7 +74,7 @@ void sub_806C51C(Entity *entity)
if (entity->axObj.unk43_animId2 == entity->axObj.unk42_animId1 && entity->axObj.unk45_orientation == entity->axObj.unk44_direction1 && entity->axObj.unk47 == 0) {
bool8 r2 = FALSE;
if (!GetUnkFlag(entity))
if (!AxFlag8000_Not2000(&entity->axObj.axdata))
r2 = TRUE;
if (r2) {

View File

@ -26,12 +26,11 @@
#include "math.h"
#include "code_8004AA0.h"
#include "bg_palette_buffer.h"
#include "code_800E9A8.h"
#include "items.h"
#include "code_800DAC0.h"
#include "code_800ED38.h"
#include "effect_main.h"
#include "effect_sub_1.h"
#include "sprite.h"
#include "code_800E9E4.h"
#include "effect_data.h"
#include "code_80869E4.h"
#include "pokemon_3.h"
#include "dungeon_boss_dialogue.h"
@ -1332,6 +1331,8 @@ void sub_8085EB0(void)
gDungeon->unk181e8.unk18215 = 1;
}
static const unkStruct_2039DB0 sDefaultSpriteMasks = DEFAULT_UNK_2039DB0_MASKS;
u32 sub_8085EC8(s16 param_1,u32 param_2,u32 param_3,DungeonPos *param_4, bool32 param_5)
{
u32 uVar1;
@ -1349,12 +1350,12 @@ u32 sub_8085EC8(s16 param_1,u32 param_2,u32 param_3,DungeonPos *param_4, bool32
local_40.unk0 = param_1;
local_40.unk4 = param_2;
local_40.dir = param_3;
local_40.x = param_4->x;
local_40.y = param_4->y;
local_40.unk10 = 0;
local_40.unk12 = 0;
local_40.pos1.x = param_4->x;
local_40.pos1.y = param_4->y;
local_40.pos2.x = 0;
local_40.pos2.y = 0;
local_40.unk18 = 0xffff;
local_40.unk1C = (unkStruct_2039DB0) {0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0};
local_40.spriteMasks = sDefaultSpriteMasks;
uVar1 = sub_800E890(&local_40);
if (param_5_bool8) {
@ -1493,14 +1494,14 @@ s32 sub_80861F8(s32 param_1,Entity *param_2,bool32 param_3)
stack.unk0 = param_1Copy;
stack.unk4 = 0;
stack.dir = info->action.direction;
stack.x = (param_2->pixelPos).x / 256;
stack.y = (param_2->pixelPos).y / 256;
stack.pos1.x = (param_2->pixelPos).x / 256;
stack.pos1.y = (param_2->pixelPos).y / 256;
stack.unk10 = pos.x;
stack.unk12 = pos.y;
stack.pos2.x = pos.x;
stack.pos2.y = pos.y;
stack.unk14 = uStack_38;
stack.unk18 = 0xffff;
stack.unk1C = (unkStruct_2039DB0) {0xFFFF, 0xFFFF, 0xFFFF, 0, 0};
stack.spriteMasks = DEFAULT_UNK_2039DB0_MASKS;
uVar2 = sub_800E890(&stack);
if (param_3_bool32) {

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -1,7 +1,6 @@
#include "global.h"
#include "globaldata.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_8041AD0.h"
#include "code_804267C.h"

View File

@ -7,7 +7,7 @@
#include "bg_palette_buffer.h"
#include "cpu.h"
#include "graphics_memory.h"
#include "code_800E9E4.h"
#include "effect_main.h"
#include "def_filearchives.h"
#include "dungeon_info.h"
#include "dungeon_generation.h"

View File

@ -6,7 +6,7 @@
#include "bg_palette_buffer.h"
#include "graphics_memory.h"
#include "code_800D090.h"
#include "code_800E9E4.h"
#include "effect_main.h"
#include "dungeon_vram.h"
#include "code_803E724.h"
#include "dungeon_info.h"

View File

@ -8,9 +8,8 @@
#include "constants/weather.h"
#include "structs/str_damage.h"
#include "dungeon_move_util.h"
#include "code_800DAC0.h"
#include "code_800E9E4.h"
#include "code_800ED38.h"
#include "effect_main.h"
#include "effect_data.h"
#include "dungeon_vram.h"
#include "code_803E724.h"
#include "code_8041AD0.h"
@ -60,7 +59,6 @@ extern bool8 sub_8040BB0(Entity *entity, Move *move, bool8);
extern void sub_8040DA0(Entity *entity, Move *move);
extern u16 sub_80412E0(u16 moveId, u8 weather, u8 a2);
extern void sub_800EF10(u16 r0);
extern s32 sub_800E710(s16 a0, u16 a1);
extern void sub_800E3AC(s32 a0, DungeonPos *pos, s32 a2);
extern void sub_8041168(Entity *entity, Entity *entity2, Move *,DungeonPos *);
extern Entity *sub_80696A8(Entity *a0);

View File

@ -7,9 +7,9 @@
#include "constants/weather.h"
#include "structs/str_damage.h"
#include "dungeon_move_util.h"
#include "code_800DAC0.h"
#include "code_800E9E4.h"
#include "code_800ED38.h"
#include "effect_main.h"
#include "effect_data.h"
#include "effect_sub_1.h"
#include "dungeon_vram.h"
#include "code_803E724.h"
#include "code_8041AD0.h"
@ -54,21 +54,10 @@ extern bool8 sub_8040BB0(Entity *entity, Move *move, bool8);
extern void sub_8040DA0(Entity *entity, Move *move);
extern u16 sub_80412E0(u16 moveId, u8 weather, u8 a2);
extern void sub_800EF10(u16 r0);
extern s32 sub_800E710(s16 a0, u16 a1);
extern void sub_800E3AC(s32 a0, DungeonPos *pos, s32 a2);
extern void sub_8041168(Entity *entity, Entity *entity2, Move *,DungeonPos *);
extern Entity *GetMonsterAtPos(DungeonPos *pos);
extern s32 sub_800ED20(u16 param_1);
struct UnkStruct_sub_800E308_1
{
s16 unk0;
s16 unk2;
DungeonPos unk4;
DungeonPos unk8;
s32 unkC;
s32 unk10;
};
extern s32 sub_800E308(struct UnkStruct_sub_800E308_1 *, DungeonPos *);
static u8 ToItemID(u32 itemID);
@ -546,7 +535,7 @@ bool8 sub_8056468(Entity *entity, Move *move, const u8 *str, Entity **unkArray,
s32 sub_8056564(Entity *entity, DungeonPos *pos, Move *move, s32 r4)
{
struct UnkStruct_sub_800E308_1 unkSp1;
struct UnkStruct_8040094 unkSp1;
DungeonPos unkSp2;
EntityInfo *entInfo = GetEntInfo(entity);

View File

@ -8,7 +8,7 @@
#include "code_8004AA0.h"
#include "code_800558C.h"
#include "graphics_memory.h"
#include "code_800E9E4.h"
#include "effect_data.h"
#include "code_801602C.h"
#include "dungeon_vram.h"
#include "code_803E724.h"
@ -32,6 +32,7 @@
#include "music_util.h"
#include "dungeon_strings.h"
#include "run_dungeon.h"
#include "effect_main.h"
extern s32 gDungeonFramesCounter;

27
src/effect_anim_file.c Normal file
View File

@ -0,0 +1,27 @@
#include "global.h"
#include "globaldata.h"
#include "file_system.h"
#include "def_filearchives.h"
OpenedFile *OpenEffectFile(u32 animType, s32 effectID)
{
u8 fileName[8];
switch (animType) {
case 1:
case 2:
case 3:
sprintf(fileName,"efob%03d",effectID);
break;
case 4:
sprintf(fileName,"efbg%03d",effectID);
break;
}
return Call_OpenFileAndGetFileDataPtr(fileName,&gEffectFileArchive);
}
void CloseEffectFile(OpenedFile *file)
{
CloseFile(file);
}

5513
src/effect_data.c Normal file

File diff suppressed because it is too large Load Diff

1204
src/effect_main.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,12 @@
#include "global.h"
#include "globaldata.h"
#include "effect_sub_1.h"
#include "effect_sub_2.h"
#include "bg_control.h"
#include "structs/axdata.h"
#include "graphics_memory.h"
#include "code_800C9CC.h"
#include "code_800E9E4.h"
#include "code_800ED38.h"
#include "effect_data.h"
#include "code_803E724.h"
#include "dungeon_message.h"
#include "file_system.h"
@ -12,6 +14,7 @@
#include "memory.h"
#include "sprite.h"
#include "text_2.h"
#include "effect_anim_file.h"
struct unkStruct_203B0D0_sub
{
@ -33,21 +36,13 @@ struct unkStruct_203B0D0 {
struct unkStruct_203B0D0_sub unk4[2];
};
EWRAM_INIT struct unkStruct_203B0D0 *gUnknown_203B0D0 = NULL;
EWRAM_INIT void *gUnknown_203B0D4 = NULL; // TODO: figure out the actual struct
OpenedFile *sub_800F1C0(s32, s32);
s32 sub_800F0F4(s32, s32);
void sub_800F204(OpenedFile *file);
void sub_800F13C(s32, OpenedFile *, unkStruct_80B9CC4 *);
void sub_800F15C(s32);
static EWRAM_INIT struct unkStruct_203B0D0 *gUnknown_203B0D0 = NULL;
extern void sub_809971C(u16 a0, const RGB *a1, int a2);
void sub_800ED38(s32 r0)
{
if(gUnknown_203B0D0 == 0)
{
if (gUnknown_203B0D0 == NULL) {
gUnknown_203B0D0 = MemoryAlloc(sizeof(struct unkStruct_203B0D0), 0xB);
MemoryClear8(gUnknown_203B0D0, sizeof(struct unkStruct_203B0D0));
}
@ -56,36 +51,29 @@ void sub_800ED38(s32 r0)
void sub_800ED64(void)
{
if(gUnknown_203B0D0)
{
MemoryFree(gUnknown_203B0D0);
gUnknown_203B0D0 = NULL;
}
TRY_FREE_AND_SET_NULL(gUnknown_203B0D0);
}
void sub_800ED80(void)
{
s32 index;
struct unkStruct_203B0D0_sub *sub;
gUnknown_203B0D0->unk0 = 0;
for(index = 0; index < 2; index++)
{
sub = &gUnknown_203B0D0->unk4[index];
for (index = 0; index < 2; index++) {
struct unkStruct_203B0D0_sub *sub = &gUnknown_203B0D0->unk4[index];
sub->unk0 = 0;
sub->file = NULL;
sub->fileData = NULL;
}
}
bool8 sub_800EDB0(struct unkStruct_203B0D0_sub *r0)
static bool8 sub_800EDB0(struct unkStruct_203B0D0_sub *r0)
{
s32 index;
for(index = 0; index < 2; index++)
{
if(gUnknown_203B0D0->unk4[index].unk0 == 0)
{
for (index = 0; index < 2; index++) {
if (gUnknown_203B0D0->unk4[index].unk0 == 0) {
gUnknown_203B0D0->unk4[index] = *r0;
return TRUE;
}
@ -93,12 +81,11 @@ bool8 sub_800EDB0(struct unkStruct_203B0D0_sub *r0)
return FALSE;
}
void sub_800EDF0(u32 r0, OpenedFile *file)
static void sub_800EDF0(u32 r0, OpenedFile *file)
{
struct unkStruct_203B0D0_sub stack;
switch(r0)
{
switch (r0) {
case 0:
stack.unk0 = 3;
stack.unkC = 0xE;
@ -125,66 +112,53 @@ void sub_800EDF0(u32 r0, OpenedFile *file)
void sub_800EE5C(s32 r0)
{
unkStruct_80B9CC4 *ret;
OpenedFile *file;
s32 ret2;
const unkStruct_80B9CC4 *ret = sub_800ECA4(r0);
ret = sub_800ECA4(r0);
if(r0 != 0)
{
switch (ret->animType - 1) {
case 1 - 1:
case 2 - 1:
if (r0 == 0)
return;
if (ret->animType == 1 || ret->animType == 2)
return;
file = OpenEffectFile(ret->animType, ret->effectId);
if (file != NULL) {
s32 ret2 = sub_800F0F4(ret->animType, ret->effectId);
if (ret2 == -1) {
CloseEffectFile(file);
return;
default:
file = sub_800F1C0(ret->animType, ret->effectId);
if(file)
{
ret2 = sub_800F0F4(ret->animType, ret->effectId);
if(ret2 == -1)
{
sub_800F204(file);
return;
}
else if(ret2 != -2)
{
sub_800F13C(ret2, file, ret);
sub_800EDF0(ret2, file);
}
else {
sub_800F204(file);
}
sub_800F15C(ret->effectId);
}
}
else if(ret2 != -2) {
sub_800F13C(ret2, file, ret);
sub_800EDF0(ret2, file);
}
else {
CloseEffectFile(file);
}
sub_800F15C(ret->effectId);
}
}
void sub_800EEC8(u16 r0)
{
unkStruct_80BDBC4 *ret;
ret = sub_800ECB8(r0);
const unkStruct_80BDBC4 *ret = sub_800ECB8(r0);
sub_800EE5C(ret->unk0);
}
void sub_800EEE0(u16 r0)
{
unkStruct_80BDBC4 *ret;
ret = sub_800ECB8(r0);
const unkStruct_80BDBC4 *ret = sub_800ECB8(r0);
sub_800EE5C(ret->unk4);
}
void sub_800EEF8(u16 r0)
{
unkStruct_80BDBC4 *ret;
ret = sub_800ECB8(r0);
const unkStruct_80BDBC4 *ret = sub_800ECB8(r0);
sub_800EE5C(ret->unk2);
}
void sub_800EF10(u16 r0)
{
unkStruct_80BDBC4 *ret;
ret = sub_800ECB8(r0);
const unkStruct_80BDBC4 *ret = sub_800ECB8(r0);
sub_800EE5C(ret->unk6);
}
@ -193,15 +167,13 @@ void sub_800EF28(u8 r0)
sub_800EE5C(sub_800ECE4(r0));
}
void sub_800EF40(u8 r0, u8 r1)
void sub_800EF40(u8 r0, bool8 r1)
{
s32 ret;
if(r1)
{
if (r1) {
ret = sub_800ECF8(r0);
}
else
{
else {
ret = sub_800ED0C(r0);
}
sub_800EE5C(ret);
@ -217,13 +189,13 @@ void sub_800EF64(void)
continue;
sub = &gUnknown_203B0D0->unk4[i];
switch(sub->unk0) {
switch (sub->unk0) {
case 1:
case 2:
break;
case 3:
sub_8005674(sub->fileData, sub->unk18);
switch(gUnknown_203B0D0->unk0) {
switch (gUnknown_203B0D0->unk0) {
case 1: {
const RGB *pal = sub->fileData->pal;
sub_809971C((sub->unkC + 16) * 16, pal, 0x10);
@ -235,7 +207,7 @@ void sub_800EF64(void)
}
}
if(sub->file != 0) {
sub_800F204(sub->file);
CloseEffectFile(sub->file);
sub->file = NULL;
}
break;
@ -249,7 +221,7 @@ void sub_800EF64(void)
}
sub_8009A1C(sub->fileData, sub->unkC, sub->unk10, sub->unk14);
if(sub->file != NULL) {
sub_800F204(sub->file);
CloseEffectFile(sub->file);
sub->file = NULL;
}
break;

View File

@ -1,9 +1,9 @@
#include "global.h"
#include "globaldata.h"
#include "code_800E9E4.h"
#include "def_filearchives.h"
#include "file_system.h"
#include "effect_sub_2.h"
#include "effect_data.h"
#include "memory.h"
#include "file_system.h"
struct unkStruct_800F18C
{
@ -16,18 +16,17 @@ struct unkStruct_203B0D4
struct unkStruct_800F18C unk0[2];
};
extern struct unkStruct_203B0D4 *gUnknown_203B0D4;
static EWRAM_INIT struct unkStruct_203B0D4 *gUnknown_203B0D4 = NULL;
void sub_800F034(void)
{
s32 index;
if(gUnknown_203B0D4 == NULL)
{
if (gUnknown_203B0D4 == NULL) {
gUnknown_203B0D4 = MemoryAlloc(sizeof(struct unkStruct_203B0D4), 0xB);
MemoryClear8(gUnknown_203B0D4, sizeof(struct unkStruct_203B0D4));
}
for(index = 0; index < 2; index++)
{
for (index = 0; index < 2; index++) {
gUnknown_203B0D4->unk0[index].effectID = -1;
gUnknown_203B0D4->unk0[index].counter = 0;
}
@ -35,24 +34,19 @@ void sub_800F034(void)
void sub_800F078(void)
{
if(gUnknown_203B0D4)
{
MemoryFree(gUnknown_203B0D4);
gUnknown_203B0D4 = NULL;
}
TRY_FREE_AND_SET_NULL(gUnknown_203B0D4);
}
void sub_800F094(void)
{
s32 index;
for(index = 0; index < 2; index++)
{
for (index = 0; index < 2; index++) {
gUnknown_203B0D4->unk0[index].effectID = -1;
gUnknown_203B0D4->unk0[index].counter = 0;
}
}
s32 sub_800F0C0(s32 animType, s32 effectID)
UNUSED static s32 sub_800F0C0(s32 animType, s32 effectID)
{
if (animType == 3) {
if (gUnknown_203B0D4->unk0[0].effectID == effectID) return 0;
@ -63,7 +57,6 @@ s32 sub_800F0C0(s32 animType, s32 effectID)
return -3;
}
s32 sub_800F0F4(s32 animType, s32 effectID)
{
if (animType == 3) {
@ -77,9 +70,9 @@ s32 sub_800F0F4(s32 animType, s32 effectID)
return -1;
}
void sub_800F13C(s32 index, OpenedFile *file, unkStruct_80B9CC4 * r2)
void sub_800F13C(s32 index, OpenedFile *file, const unkStruct_80B9CC4 *r2)
{
if(gUnknown_203B0D4->unk0[index].counter == 0)
if (gUnknown_203B0D4->unk0[index].counter == 0)
gUnknown_203B0D4->unk0[index].effectID = r2->effectId;
}
@ -87,10 +80,8 @@ void sub_800F15C(s32 effectID)
{
s32 index;
for(index = 0; index < 2; index++)
{
if(gUnknown_203B0D4->unk0[index].effectID == effectID)
{
for (index = 0; index < 2; index++) {
if( gUnknown_203B0D4->unk0[index].effectID == effectID) {
gUnknown_203B0D4->unk0[index].counter++;
break;
}
@ -104,33 +95,9 @@ struct unkStruct_800F18C *sub_800F18C(s32 index)
s32 sub_800F19C(s32 index)
{
if(gUnknown_203B0D4->unk0[index].counter == 0)
if (gUnknown_203B0D4->unk0[index].counter == 0)
return 0;
else
return 1;
}
OpenedFile * sub_800F1C0(u32 animType, s32 effectID)
{
u8 fileName [8];
switch(animType)
{
case 1:
case 2:
case 3:
sprintf(fileName,"efob%03d",effectID);
break;
case 4:
sprintf(fileName,"efbg%03d",effectID);
break;
}
return Call_OpenFileAndGetFileDataPtr(fileName,&gEffectFileArchive);
}
void sub_800F204(OpenedFile *file)
{
CloseFile(file);
}

View File

@ -25,11 +25,6 @@
#include "text_2.h"
#include "text_3.h"
static inline bool8 CheckAxFlag8000(axdata *ptr)
{
return (ptr->flags & 0x8000) != 0;
}
static inline bool8 ResetFlags(axdata *ptr)
{
return ptr->flags = 0;
@ -124,7 +119,7 @@ static void AnimateSprites(void)
}
for (dir = 0; dir < NUM_DIRECTIONS; dir++) {
if (CheckAxFlag8000(&gFriendAreasMapPtr->arrowSprites[dir])) {
if (AxFlag8000(&gFriendAreasMapPtr->arrowSprites[dir])) {
RunAxAnimationFrame(&gFriendAreasMapPtr->arrowSprites[dir]);
// Hide non-diagonal arrows when R button is pressed.
if ((gRealInputs.held & R_BUTTON) && (dir % 2) == 0)

View File

@ -250,14 +250,7 @@ void sub_8009A1C(const EfoFileData *r0, u32 palId, u32 vramDstOffset, u32 r3)
}
}
// Todo: Merge this struct with others once sub_800DE8C is decompiled(if possible)
struct Struct_8009A7C
{
s32 unk0;
u16 **unk4;
};
bool8 sub_8009A7C(struct Struct_8009A7C *a0, s32 a1, s32 a2, s32 a3, bool8 a4, s32 *a5, u16 *a6)
bool8 sub_8009A7C(struct Struct_8009A7C *a0, s32 a1, s32 a2, s32 a3, bool8 a4, s32 *a5, s16 *a6)
{
s32 countY;
s32 yId;

View File

@ -1,7 +1,7 @@
#include "global.h"
#include "globaldata.h"
#include "structs/axdata.h"
#include "code_800DAC0.h"
#include "effect_main.h"
#include "debug.h"
#include "def_filearchives.h"
#include "file_system.h"
@ -10,7 +10,7 @@
#include "ground_sprite_data.h"
#include "memory.h"
#include "sprite.h"
#include "code_800ED38.h"
#include "effect_sub_1.h"
static IWRAM_INIT unkStruct_3001B7C *gUnknown_3001B7C = {NULL};
@ -791,7 +791,7 @@ bool8 sub_80A7094(struct UnkGroundSpriteStruct *ptr, PixelPos *r10, PixelPos *po
ptr->unk58 = 0;
}
else if (ptr->unk5C == -1) {
unkStruct_2039DB0 unkSubStruct = {0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0};
unkStruct_2039DB0 unkSubStruct = DEFAULT_UNK_2039DB0_MASKS;
unkStruct_80416E0 unkStruct;
sub_800EE5C(ptr->unk58);
@ -799,13 +799,13 @@ bool8 sub_80A7094(struct UnkGroundSpriteStruct *ptr, PixelPos *r10, PixelPos *po
unkStruct.unk0 = ptr->unk58;
unkStruct.unk4 = 0;
unkStruct.dir = (s8) ptr->unk5A;
unkStruct.x = posArg->x / 256;
unkStruct.y = posArg->y / 256;
unkStruct.unk10 = 0;
unkStruct.unk12 = 0;
unkStruct.pos1.x = posArg->x / 256;
unkStruct.pos1.y = posArg->y / 256;
unkStruct.pos2.x = 0;
unkStruct.pos2.y = 0;
unkStruct.unk14 = -1;
unkStruct.unk18 = 0;
unkStruct.unk1C = unkSubStruct;
unkStruct.spriteMasks = unkSubStruct;
ptr->unk5C = sub_800E890(&unkStruct);
}
else if (!sub_800E9E4(ptr->unk5C)) {

View File

@ -10,10 +10,8 @@
#include "bg_palette_buffer.h"
#include "code_800558C.h"
#include "graphics_memory.h"
#include "code_800DAC0.h"
#include "code_800E9A8.h"
#include "code_800E9E4.h"
#include "code_800ED38.h"
#include "effect_main.h"
#include "effect_data.h"
#include "code_803D110.h"
#include "dungeon_vram.h"
#include "code_803E724.h"

View File

@ -531,20 +531,12 @@ static void AxResInitUnoriented(axdata *a0, axmain *a1, u32 a2, u32 a3, u32 spri
a0->positions = NULL;
}
static inline s16 check_flag_for_80054BC(u16 flags)
{
if (flags & 0x2000)
return 0;
else
return flags >> 15;
}
// arm9.bin::02001AC4
void RunAxAnimationFrame(axdata *a0)
{
const ax_anim *aData;
if (!check_flag_for_80054BC(a0->flags))
if (!AxFlag8000_Not2000(a0))
return;
if (a0->sub1.poseId >= 0) {

View File

@ -13,8 +13,9 @@
.include "src/flash.o"
.include "src/code_800C9CC.o"
.include "src/cpu.o"
.include "src/code_800DAC0.o"
.include "src/code_800ED38.o"
.include "src/effect_main.o"
.include "src/effect_sub_1.o"
.include "src/effect_sub_2.o"
.include "src/dungeon_pokemon_sprites.o"
.include "src/friend_areas_map.o"
.include "src/world_map.o"