Merge pull request #121 from PikalaxALT/pikalax_work

Pikalax work
This commit is contained in:
Revo
2020-05-28 18:06:31 -04:00
committed by GitHub
12 changed files with 9295 additions and 6308 deletions

View File

@@ -194,6 +194,7 @@ TOOLBASE = $(TOOLDIRS:$(TOOLS_DIR)/%=%)
TOOLS = $(foreach tool,$(TOOLBASE),$(TOOLS_DIR)/$(tool)/$(tool)$(EXE))
export LM_LICENSE_FILE := $(TOOLS_DIR)/mwccarm/license.dat
export MWCIncludes := arm9/lib/include
######################### Targets ###########################

File diff suppressed because it is too large Load Diff

View File

@@ -17,28 +17,39 @@ cAdpcmIndexTable4: ; 0x020FF5C4
.global cAdpcmStepSizeTable
cAdpcmStepSizeTable: ; 0x020FF5D4
.byte 0x07, 0x00, 0x08, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x0E, 0x00
.byte 0x10, 0x00, 0x11, 0x00, 0x13, 0x00, 0x15, 0x00, 0x17, 0x00, 0x19, 0x00, 0x1C, 0x00, 0x1F, 0x00
.byte 0x22, 0x00, 0x25, 0x00, 0x29, 0x00, 0x2D, 0x00, 0x32, 0x00, 0x37, 0x00, 0x3C, 0x00, 0x42, 0x00
.byte 0x49, 0x00, 0x50, 0x00, 0x58, 0x00, 0x61, 0x00, 0x6B, 0x00, 0x76, 0x00, 0x82, 0x00, 0x8F, 0x00
.byte 0x9D, 0x00, 0xAD, 0x00, 0xBE, 0x00, 0xD1, 0x00, 0xE6, 0x00, 0xFD, 0x00, 0x17, 0x01, 0x33, 0x01
.byte 0x51, 0x01, 0x73, 0x01, 0x98, 0x01, 0xC1, 0x01, 0xEE, 0x01, 0x20, 0x02, 0x56, 0x02, 0x92, 0x02
.byte 0xD4, 0x02, 0x1C, 0x03, 0x6C, 0x03, 0xC3, 0x03, 0x24, 0x04, 0x8E, 0x04, 0x02, 0x05, 0x83, 0x05
.byte 0x10, 0x06, 0xAB, 0x06, 0x56, 0x07, 0x12, 0x08, 0xE0, 0x08, 0xC3, 0x09, 0xBD, 0x0A, 0xD0, 0x0B
.byte 0xFF, 0x0C, 0x4C, 0x0E, 0xBA, 0x0F, 0x4C, 0x11, 0x07, 0x13, 0xEE, 0x14, 0x06, 0x17, 0x54, 0x19
.byte 0xDC, 0x1B, 0xA5, 0x1E, 0xB6, 0x21, 0x15, 0x25, 0xCA, 0x28, 0xDF, 0x2C, 0x5B, 0x31, 0x4B, 0x36
.byte 0xB9, 0x3B, 0xB2, 0x41, 0x44, 0x48, 0x7E, 0x4F, 0x71, 0x57, 0x2F, 0x60, 0xCE, 0x69, 0x62, 0x74
.byte 0xFF, 0x7F, 0x00, 0x00
.short 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E
.short 0x0010, 0x0011, 0x0013, 0x0015, 0x0017, 0x0019, 0x001C, 0x001F
.short 0x0022, 0x0025, 0x0029, 0x002D, 0x0032, 0x0037, 0x003C, 0x0042
.short 0x0049, 0x0050, 0x0058, 0x0061, 0x006B, 0x0076, 0x0082, 0x008F
.short 0x009D, 0x00AD, 0x00BE, 0x00D1, 0x00E6, 0x00FD, 0x0117, 0x0133
.short 0x0151, 0x0173, 0x0198, 0x01C1, 0x01EE, 0x0220, 0x0256, 0x0292
.short 0x02D4, 0x031C, 0x036C, 0x03C3, 0x0424, 0x048E, 0x0502, 0x0583
.short 0x0610, 0x06AB, 0x0756, 0x0812, 0x08E0, 0x09C3, 0x0ABD, 0x0BD0
.short 0x0CFF, 0x0E4C, 0x0FBA, 0x114C, 0x1307, 0x14EE, 0x1706, 0x1954
.short 0x1BDC, 0x1EA5, 0x21B6, 0x2515, 0x28CA, 0x2CDF, 0x315B, 0x364B
.short 0x3BB9, 0x41B2, 0x4844, 0x4F7E, 0x5771, 0x602F, 0x69CE, 0x7462
.short 0x7FFF, 0x0000
.global sCodecInfo
sCodecInfo: ; 0x020FF688
.byte 0x08, 0x00, 0x08, 0x00, 0x02, 0x04, 0x03, 0x04, 0x04, 0x04, 0x00, 0x00
.byte 0x08, 0x00
.byte 0x08, 0x00
.byte 0x02, 0x04
.byte 0x03, 0x04
.byte 0x04, 0x04
.balign 4, 0
.global UNK_020FF694
UNK_020FF694: ; 0x020FF694
.byte 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x02
.byte 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x00
.byte 0x01, 0x01, 0x00
.byte 0x01, 0x01, 0x01
.byte 0x01, 0x01, 0x02
.byte 0x01, 0x02, 0x02
.byte 0x02, 0x02, 0x02
.byte 0x02, 0x02, 0x03
.balign 4, 0
.global UNK_020FF6AC
UNK_020FF6AC: ; 0x020FF6AC
.byte 0x01, 0x08, 0x04, 0x0A, 0x00, 0x00, 0x00, 0x00
@@ -49,58 +60,72 @@ UNK_020FF6B4: ; 0x020FF6B4
.global UNK_020FF6BC
UNK_020FF6BC: ; 0x020FF6BC
.byte 0x04, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF
.byte 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0x05, 0x05, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x05, 0xFE
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFF, 0xFF
.byte 0x00, 0xFF, 0x00, 0x00
.byte 0x04, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00
.byte 0xFE, 0x05, 0x05, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFE, 0xFE, 0x05, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF
.balign 4, 0
.global UNK_020FF700
UNK_020FF700: ; 0x020FF700
.byte 0xFE, 0xFE, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF
.byte 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFF, 0xFE, 0x00, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD
.byte 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0x00, 0x00, 0xFF, 0xFF
.byte 0x00, 0xFF, 0x00, 0x00
.byte 0xFE, 0xFE, 0xFE, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xFF, 0x00
.byte 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFE, 0x00, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.byte 0xFE, 0xFE, 0xFE, 0xFD, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF
.balign 4, 0
.global UNK_020FF744
UNK_020FF744: ; 0x020FF744
.byte 0x01, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE
.byte 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0x02, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE
.byte 0x00, 0xFE, 0x00, 0x00
.byte 0x01, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE
.byte 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0x05, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x02, 0x00, 0x00, 0x00, 0xFE, 0x00
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0xFE
.balign 4, 0
.global UNK_020FF788
UNK_020FF788: ; 0x020FF788
.byte 0xFE, 0xFE, 0xFE, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0x05, 0x05, 0xFE, 0xFF
.byte 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x05, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFE
.byte 0x00, 0xFE, 0x00, 0x00
.byte 0xFE, 0xFE, 0xFE, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0xFE
.byte 0xFE, 0x05, 0x05, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0x05, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFE, 0x00, 0xFE, 0xFE, 0xFE, 0xFE
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0x00
.byte 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0xFE
.section .data
.global UNK_0210646C
UNK_0210646C: ; 0x0210646C
.byte 0x01, 0x00, 0x00, 0x00
.word 1
.global UNK_02106470
UNK_02106470: ; 0x02106470
.byte 0x3F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00
.byte 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00
.word 0x0000003F
.word 0x0000007F
.word 0x000000FF
.word 0x000001FF
.word 0x000003FF
.word 0x000007FF
.word 0x00000FFF
.word 0x00001FFF
.global UNK_02106490
UNK_02106490: ; 0x02106490
.byte 0xF7, 0xB5, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00
; u64
.word 15709687, 0
.global UNK_02106498
UNK_02106498: ; 0x02106498
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00
.word 0x00000000, 0x00000000, 0x0000000F, 0x000003FC
.global UNK_021064A8
UNK_021064A8: ; 0x021064A8
.byte 0xFB, 0xE9, 0x3D, 0x40, 0xBC, 0xC7, 0xD1, 0x2C, 0x2A, 0xD0, 0x7C, 0x03, 0xF0, 0x08, 0x93, 0xF5
.short 0xE9FB, 0x403D, 0xC7BC, 0x2CD1, 0xD02A, 0x037C, 0x08F0, 0xF593
.bss

View File

@@ -2,61 +2,6 @@
.include "global.inc"
.extern OSi_ThreadInfo
.extern UNK_02106A58
.extern UNK_02106AA4
.extern UNK_02106AF0
.extern UNK_02106B3C
.extern UNK_02106B74
.extern UNK_02106B78
.extern UNK_02106B7C
.extern UNK_02106C98
.extern UNK_02106DA0
.extern UNK_02106DA8
.extern UNK_02106DB0
.extern UNK_02106DB8
.extern UNK_02106DBC
.extern UNK_02106DC0
.extern UNK_02106DC8
.extern UNK_02106DD0
.extern UNK_02106DD4
.extern UNK_02106DD8
.extern UNK_02106DDC
.extern UNK_02106DE0
.extern UNK_02106DE4
.extern UNK_02106DF0
.extern UNK_02106DFC
.extern UNK_02106E08
.extern UNK_02106E10
.extern UNK_02106E18
.extern UNK_02106E24
.extern UNK_02106E30
.extern UNK_02106E38
.extern UNK_02106E40
.extern UNK_02106E44
.extern UNK_02106E48
.extern UNK_02106E88
.extern UNK_02106EB8
.extern UNK_02106EE0
.extern UNK_02106EF8
.extern UNK_02106F08
.extern UNK_02106F10
.extern UNK_02106F18
.extern UNK_02106F20
.extern UNK_02106F28
.extern UNK_02106F2C
.extern UNK_02106F30
.extern UNK_02106F34
.extern UNK_02106F38
.extern UNK_02106F3C
.extern UNK_02106F40
.extern UNK_02106F44
.extern UNK_02106F48
.extern UNK_02106F4C
.extern UNK_02106F50
.extern UNK_02106F54
.extern UNK_02106F58
.extern UNK_02106F5C
.section .rodata
.global UNK_0210420C
@@ -229,15 +174,15 @@ UNK_02106B3C: ; 0x02106B3C
.balign 4, 0
.global UNK_02106B74
UNK_02106B74: ; 0x02106B74
.byte 0x00, 0x00, 0x80, 0x7F
.word 0x7F800000 ; inf
.global UNK_02106B78
UNK_02106B78: ; 0x02106B78
.byte 0xFF, 0xFF, 0xFF, 0x7F
.word 0x7FFFFFFF ; nan
.global UNK_02106B7C
UNK_02106B7C: ; 0x02106B7C
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F
.word 0x00000000, 0x7FF00000 ; 1.06047983e-314
.global UNK_02106B84
UNK_02106B84: ; 0x02106B84

View File

@@ -618,6 +618,10 @@
.extern FUN_0200BD20
.extern FUN_0200BE38
.extern FUN_0200BF60
.extern WCM_GetLinkLevel
.extern STD_CompareNString
.extern STD_CompareString
.extern STD_GetStringLength
.extern FUN_0200C00C
.extern FUN_0200C06C
.extern FUN_0200C0DC

View File

@@ -33,7 +33,7 @@ typedef struct FSDirPos
u16 index;
u32 pos;
}
FSDirPos;
FSDirPos; // size = 0xC
typedef struct FSFileID
{
@@ -138,41 +138,41 @@ FSWriteFileInfo;
typedef struct FSFile
{
FSFileLink link;
struct FSArchive *arc;
u32 stat;
FSCommandType command;
FSResult error;
OSThreadQueue queue[1];
FSFileLink link; // 0x00
struct FSArchive *arc; // 0x08
u32 stat; // 0xC
FSCommandType command; // 0x10
FSResult error; // 0x14
OSThreadQueue queue[1]; // 0x18
union {
struct
{
u32 own_id;
u32 top;
u32 bottom;
u32 pos;
u32 own_id; // 0x20
u32 top; // 0x24
u32 bottom; // 0x28
u32 pos; // 0x2C
} file;
struct
{
FSDirPos pos;
u32 parent;
FSDirPos pos; // 0x20
u32 parent; // 0x2C
} dir;
} prop;
} prop; // 0x20
union {
FSReadFileInfo readfile;
FSWriteFileInfo writefile;
FSReadFileInfo readfile; // 0x30
FSWriteFileInfo writefile; // 0x30
FSSeekDirInfo seekdir;
FSReadDirInfo readdir;
FSFindPathInfo findpath;
FSGetPathInfo getpath;
FSOpenFileFastInfo openfilefast;
FSOpenFileDirectInfo openfiledirect;
FSCloseFileInfo closefile;
} arg;
FSSeekDirInfo seekdir; // 0x30
FSReadDirInfo readdir; // 0x30
FSFindPathInfo findpath; // 0x30
FSGetPathInfo getpath; // 0x30
FSOpenFileFastInfo openfilefast; // 0x30
FSOpenFileDirectInfo openfiledirect; // 0x30
FSCloseFileInfo closefile; // 0x30
} arg; // 0x30
}
FSFile;
FSFile; // size = 0x50
void FS_Init(u32 default_dma_no);
BOOL FS_IsAvailable(void);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -22372,13 +22372,13 @@ MOD06_02244758: ; 0x02244758
ldr r1, _02244768 ; =0x0000083E
add r2, r0, #0
add r1, r2, r1
ldr r3, _0224476C ; =0x020CE3E0
ldr r3, _0224476C ; =MI_CpuCopy8
add r0, #0x3e
mov r2, #0x1c
bx r3
nop
_02244768: .word 0x0000083E
_0224476C: .word 0x020CE3E0
_0224476C: .word MI_CpuCopy8
thumb_func_start MOD06_02244770
MOD06_02244770: ; 0x02244770

405
arm9/src/filesystem.c Normal file
View File

@@ -0,0 +1,405 @@
#include "global.h"
#include "FS_file.h"
#include "heap.h"
#include "filesystem.h"
static char * sNarcFileList[] = {
"battle/skill/waza_seq.narc",
"battle/skill/sub_seq.narc",
"poketool/personal/personal.narc",
"poketool/personal/growtbl.narc",
"poketool/pokegra/pokegra.narc",
"poketool/pokegra/height.narc",
"poketool/trgra/trbgra.narc",
"battle/graphic/batt_bg.narc",
"wazaeffect/we.arc",
"poketool/waza/waza_tbl.narc",
"fielddata/script/scr_seq_release.narc",
"msgdata/scenario/scr_msg.narc",
"graphic/poketch.narc",
"graphic/bag_gra.narc",
"graphic/font.narc",
"itemtool/itemdata/item_data.narc",
"itemtool/itemdata/item_icon.narc",
"graphic/tmap_gra.narc",
"graphic/box.narc",
"poketool/icongra/poke_icon.narc",
"graphic/plist_gra.narc",
"wazaeffect/effectclact/wechar.narc",
"wazaeffect/effectclact/wepltt.narc",
"wazaeffect/effectclact/wecell.narc",
"wazaeffect/effectclact/wecellanm.narc",
"graphic/imageclip.narc",
"msgdata/msg.narc",
"battle/graphic/batt_obj.narc",
"data/underg_radar.narc",
"wazaeffect/effectdata/waza_particle.narc",
"battle/skill/be_seq.narc",
"data/namein.narc",
"fielddata/eventdata/zone_event_release.narc",
"poketool/personal/wotbl.narc",
"poketool/personal/evo.narc",
"graphic/fontoam.narc",
"graphic/field_board.narc",
"fielddata/encountdata/d_enc_data.narc",
"graphic/winframe.narc",
"graphic/pst_gra.narc",
"fielddata/build_model/build_model.narc",
"fielddata/mapmatrix/map_matrix.narc",
"fielddata/areadata/area_data.narc",
"fielddata/areadata/area_build_model/area_build.narc",
"fielddata/areadata/area_map_tex/map_tex_set.narc",
"contest/graphic/contest_bg.narc",
"contest/graphic/contest_obj.narc",
"data/ugeffect_obj_graphic.narc",
"demo/title/titledemo.narc",
"fielddata/areadata/area_move_model/move_model_list.narc",
"data/ug_trap.narc",
"graphic/trainer_case.narc",
"data/ug_fossil.narc",
"graphic/ntag_gra.narc",
"data/tradelist.narc",
"data/ug_parts.narc",
"graphic/opening.narc",
"poketool/trainer/trdata.narc",
"poketool/trainer/trpoke.narc",
"poketool/trmsg/trtbl.narc",
"poketool/trgra/trfgra.narc",
"particledata/particledata.narc",
"graphic/shop_gra.narc",
"wazaeffect/we_sub.narc",
"data/ug_anim.narc",
"data/weather_sys.narc",
"graphic/menu_gra.narc",
"fielddata/land_data/land_data_release.narc",
"itemtool/itemdata/nuts_data.narc",
"resource/eng/zukan/zukan.narc",
"poketool/pokefoot/pokefoot.narc",
"fielddata/areadata/area_build_model/areabm_texset.narc",
"battle/graphic/b_plist_gra.narc",
"graphic/config_gra.narc",
"graphic/unionroom.narc",
"application/zukanlist/zkn_data/zukan_data.narc",
"graphic/pmsi.narc",
"battle/graphic/b_bag_gra.narc",
"graphic/oekaki.narc",
"graphic/mail_gra.narc",
"graphic/f_note_gra.narc",
"data/mmodel/mmodel.narc",
"graphic/ev_pokeselect.narc",
"graphic/poru_gra.narc",
"graphic/touch_subwindow.narc",
"graphic/fld_comact.narc",
"graphic/record.narc",
"graphic/porudemo.narc",
"graphic/poruact.narc",
"data/wifinote.narc",
"contest/data/contest_data.narc",
"application/custom_ball/data/cb_data.narc",
"data/wifip2pmatch.narc",
"graphic/demo_trade.narc",
"pokeanime/poke_anm.narc",
"graphic/mysign.narc",
"fielddata/mm_list/move_model_list.narc",
"data/field_cutin.narc",
"data/demo_climax.narc",
"wazaeffect/effectdata/ball_particle.narc",
"wazaeffect/pt_debug/debug_particle.narc",
"graphic/dendou_pc.narc",
"application/wifi_earth/wifi_earth_place.narc",
"battle/tr_ai/tr_ai_seq.narc",
"graphic/worldtrade.narc",
"graphic/dendou_demo.narc",
"arc/encdata_ex.narc",
"data/mmodel/fldeff.narc",
"battle/graphic/vs_demo_gra.narc",
"poketool/pokezukan.narc",
"arc/bm_anime.narc",
"arc/bm_anime_list.narc",
"graphic/field_encounteffect.narc",
"graphic/waza_oshie_gra.narc",
"poketool/pokeanm/pokeanm.narc",
"fielddata/pokemon_trade/fld_trade.narc",
"graphic/mystery.narc",
"poketool/pokegra/otherpoke.narc",
"demo/egg/data/egg_data.narc",
"demo/egg/data/particle/egg_demo_particle.narc",
"arc/ship_demo.narc",
"poketool/pokegra/height_o.narc",
"graphic/nutmixer.narc",
"graphic/btower.narc",
"demo/shinka/data/particle/shinka_demo_particle.narc",
"demo/intro/intro.narc",
"arc/tv.narc",
"graphic/ending.narc",
"demo/title/op_demo.narc",
"application/wifi_earth/wifi_earth.narc",
"graphic/ranking.narc",
"arc/ppark.narc",
"demo/syoujyou/syoujyou.narc",
"data/slot.narc",
"battle/b_tower/btdtr.narc",
"battle/b_tower/btdpm.narc",
"demo/intro/intro_tv.narc",
"poketool/trmsg/trtblofs.narc",
"poketool/pokegra/poke_yofs.narc",
"application/zukanlist/zkn_data/zukan_enc_diamond.narc",
"application/zukanlist/zkn_data/zukan_enc_pearl.narc",
"graphic/hiden_effect.narc",
"poketool/pokegra/poke_shadow.narc",
"fielddata/encountdata/p_enc_data.narc",
"poketool/pokegra/poke_shadow_ofx.narc",
"poketool/shinzukan.narc",
};
THUMB_FUNC void ReadNARCFile(void * dest, const char * path, s32 file_idx, u32 offset, u32 size)
{
FSFile file;
register u32 chunk_starts[3];
u32 btnf_size = 0;
u32 chunk_size = 0;
u32 file_start = 0;
u32 file_end = 0;
u16 num_files = 0;
FS_InitFile(&file);
FS_OpenFile(&file, path);
FS_SeekFile(&file, 12, FS_SEEK_SET);
FS_ReadFile(&file, &chunk_size, 2);
chunk_starts[0] = chunk_size;
FS_SeekFile(&file, chunk_starts[0] + 4, FS_SEEK_SET);
FS_ReadFile(&file, &chunk_size, 4);
FS_ReadFile(&file, &num_files, 2);
if (num_files <= file_idx)
ErrorHandling();
chunk_starts[1] = chunk_starts[0] + chunk_size;
FS_SeekFile(&file, chunk_starts[1] + 4, FS_SEEK_SET);
FS_ReadFile(&file, &chunk_size, 4);
btnf_size = chunk_size;
FS_SeekFile(&file, chunk_starts[0] + 12 + 8 * file_idx, FS_SEEK_SET);
FS_ReadFile(&file, &file_start, 4);
FS_ReadFile(&file, &file_end, 4);
chunk_starts[2] = chunk_starts[1] + btnf_size;
FS_SeekFile(&file, chunk_starts[2] + 8 + file_start + offset, FS_SEEK_SET);
if (size == 0)
chunk_size = file_end - file_start;
else
chunk_size = size;
if (chunk_size == 0)
ErrorHandling();
FS_ReadFile(&file, dest, chunk_size);
FS_CloseFile(&file);
}
THUMB_FUNC void * LoadFileIntoMemory(const char * path, s32 file_idx, u32 heap_id, u32 offset, u32 size, BOOL r4)
{
FSFile file;
register u32 chunk_starts[3];
u32 btnf_size = 0;
u32 chunk_size = 0;
u32 file_start = 0;
u32 file_end = 0;
u16 num_files = 0;
void * dest = NULL;
FS_InitFile(&file);
FS_OpenFile(&file, path);
FS_SeekFile(&file, 12, FS_SEEK_SET);
FS_ReadFile(&file, &chunk_size, 2);
chunk_starts[0] = chunk_size;
FS_SeekFile(&file, chunk_starts[0] + 4, FS_SEEK_SET);
FS_ReadFile(&file, &chunk_size, 4);
FS_ReadFile(&file, &num_files, 2);
if (num_files <= file_idx)
ErrorHandling();
chunk_starts[1] = chunk_starts[0] + chunk_size;
FS_SeekFile(&file, chunk_starts[1] + 4, FS_SEEK_SET);
FS_ReadFile(&file, &chunk_size, 4);
btnf_size = chunk_size;
FS_SeekFile(&file, chunk_starts[0] + 12 + 8 * file_idx, FS_SEEK_SET);
FS_ReadFile(&file, &file_start, 4);
FS_ReadFile(&file, &file_end, 4);
chunk_starts[2] = chunk_starts[1] + btnf_size;
FS_SeekFile(&file, chunk_starts[2] + 8 + file_start + offset, FS_SEEK_SET);
if (size == 0)
chunk_size = file_end - file_start;
else
chunk_size = size;
if (chunk_size == 0)
ErrorHandling();
switch (r4)
{
case 0:
dest = FUN_02016998(heap_id, chunk_size);
break;
default:
dest = FUN_020169D8(heap_id, chunk_size);
break;
}
FS_ReadFile(&file, dest, chunk_size);
FS_CloseFile(&file);
return dest;
}
THUMB_FUNC void LoadFromNARC(void * dest, NarcId narc_id, s32 file_id)
{
ReadNARCFile(dest, sNarcFileList[narc_id], file_id, 0, 0);
}
THUMB_FUNC void * LoadFromNarc_2(NarcId narc_id, s32 file_id, u32 heap_id)
{
return LoadFileIntoMemory(sNarcFileList[narc_id], file_id, heap_id, 0, 0, FALSE);
}
THUMB_FUNC void * FUN_02006528(NarcId narc_id, s32 file_id, u32 heap_id)
{
return LoadFileIntoMemory(sNarcFileList[narc_id], file_id, heap_id, 0, 0, TRUE);
}
THUMB_FUNC void FUN_02006548(void * dest, NarcId narc_id, s32 file_id, u32 offset, u32 size)
{
ReadNARCFile(dest, sNarcFileList[narc_id], file_id, offset, size);
}
THUMB_FUNC void * FUN_02006564(NarcId narc_id, s32 file_id, u32 heap_id, u32 offset, u32 size)
{
return LoadFileIntoMemory(sNarcFileList[narc_id], file_id, heap_id, offset, size, FALSE);
}
THUMB_FUNC void * FUN_02006584(NarcId narc_id, s32 file_id, u32 heap_id, u32 offset, u32 size)
{
return LoadFileIntoMemory(sNarcFileList[narc_id], file_id, heap_id, offset, size, TRUE);
}
THUMB_FUNC u32 LoadFromNARC_7(NarcId narc_id, s32 file_idx)
{
FSFile file;
register u32 chunk_starts[3];
u32 btnf_size = 0;
u32 chunk_size = 0;
u32 file_start = 0;
u32 file_end = 0;
u16 num_files = 0;
FS_InitFile(&file);
FS_OpenFile(&file, sNarcFileList[narc_id]);
FS_SeekFile(&file, 12, FS_SEEK_SET);
FS_ReadFile(&file, &chunk_size, 2);
chunk_starts[0] = chunk_size;
FS_SeekFile(&file, chunk_starts[0] + 4, FS_SEEK_SET);
FS_ReadFile(&file, &chunk_size, 4);
FS_ReadFile(&file, &num_files, 2);
if (num_files <= file_idx)
ErrorHandling();
chunk_starts[1] = chunk_starts[0] + chunk_size;
FS_SeekFile(&file, chunk_starts[1] + 4, FS_SEEK_SET);
FS_ReadFile(&file, &chunk_size, 4);
btnf_size = chunk_size;
FS_SeekFile(&file, chunk_starts[0] + 12 + 8 * file_idx, FS_SEEK_SET);
FS_ReadFile(&file, &file_start, 4);
FS_ReadFile(&file, &file_end, 4);
chunk_starts[2] = chunk_starts[1] + btnf_size;
FS_SeekFile(&file, chunk_starts[2] + 8 + file_start + 0, FS_SEEK_SET);
chunk_size = file_end - file_start;
if (chunk_size == 0)
ErrorHandling();
// Bug: File is never closed
return chunk_size;
}
THUMB_FUNC NARC * FUN_02006670(NarcId narc_id, u32 heap_id)
{
NARC * narc = (NARC *)FUN_02016998(heap_id, sizeof(NARC));
u32 btnf_start;
u32 chunk_size;
if (narc != NULL)
{
narc->btaf_start = 0;
FS_InitFile(&narc->file);
FS_OpenFile(&narc->file, sNarcFileList[narc_id]);
FS_SeekFile(&narc->file, 12, FS_SEEK_SET);
FS_ReadFile(&narc->file, &narc->btaf_start, 2);
FS_SeekFile(&narc->file, narc->btaf_start + 4, FS_SEEK_SET);
FS_ReadFile(&narc->file, &chunk_size, 4);
FS_ReadFile(&narc->file, &narc->num_files, 2);
btnf_start = narc->btaf_start + chunk_size;
FS_SeekFile(&narc->file, btnf_start + 4, FS_SEEK_SET);
FS_ReadFile(&narc->file, &chunk_size, 4);
narc->gmif_start = btnf_start + chunk_size;
}
return narc;
}
THUMB_FUNC void FUN_020066F4(NARC * narc)
{
FS_CloseFile(&narc->file);
FUN_02016A18(narc); // free to heap
}
THUMB_FUNC void * FUN_02006704(NARC * narc, u32 file_id, u32 heap_id)
{
u32 file_start;
u32 file_end;
void * dest;
if (narc->num_files <= file_id)
ErrorHandling();
FS_SeekFile(&narc->file, narc->btaf_start + 12 + 8 * file_id, FS_SEEK_SET);
FS_ReadFile(&narc->file, &file_start, 4);
FS_ReadFile(&narc->file, &file_end, 4);
FS_SeekFile(&narc->file, narc->gmif_start + 8 + file_start, FS_SEEK_SET);
dest = FUN_02016998(heap_id, file_end - file_start);
if (dest != NULL)
{
FS_ReadFile(&narc->file, dest, file_end - file_start);
}
return dest;
}
THUMB_FUNC void FUN_02006774(NARC * narc, u32 file_id, void * dest)
{
u32 file_start;
u32 file_end;
if (narc->num_files <= file_id)
ErrorHandling();
FS_SeekFile(&narc->file, narc->btaf_start + 12 + 8 * file_id, FS_SEEK_SET);
FS_ReadFile(&narc->file, &file_start, 4);
FS_ReadFile(&narc->file, &file_end, 4);
FS_SeekFile(&narc->file, narc->gmif_start + 8 + file_start, FS_SEEK_SET);
FS_ReadFile(&narc->file, dest, file_end - file_start);
}
THUMB_FUNC u32 FUN_020067D0(NARC * narc, u32 file_id)
{
u32 file_start;
u32 file_end;
if (narc->num_files <= file_id)
ErrorHandling();
FS_SeekFile(&narc->file, narc->btaf_start + 12 + 8 * file_id, FS_SEEK_SET);
FS_ReadFile(&narc->file, &file_start, 4);
FS_ReadFile(&narc->file, &file_end, 4);
return file_end - file_start;
}
THUMB_FUNC void FUN_02006814(NARC * narc, u32 file_id, u32 pos, u32 size, void * dest)
{
u32 file_start;
if (narc->num_files <= file_id)
ErrorHandling();
FS_SeekFile(&narc->file, narc->btaf_start + 12 + 8 * file_id, FS_SEEK_SET);
FS_ReadFile(&narc->file, &file_start, 4);
FS_SeekFile(&narc->file, narc->gmif_start + 8 + file_start + pos, FS_SEEK_SET);
FS_ReadFile(&narc->file, dest, size);
}
THUMB_FUNC void FUN_02006864(NARC * narc, u32 size, void * dest)
{
FS_ReadFile(&narc->file, dest, size);
}
THUMB_FUNC u16 FUN_02006874(NARC * narc)
{
return narc->num_files;
}

180
include/filesystem.h Normal file
View File

@@ -0,0 +1,180 @@
#ifndef POKEDIAMOND_FILESYSTEM_H
#define POKEDIAMOND_FILESYSTEM_H
typedef struct NARC
{
FSFile file;
u32 btaf_start;
u32 gmif_start;
u16 num_files;
} NARC;
typedef enum NarcId
{
NARC_BATTLE_SKILL_WAZA_SEQ = 0,
NARC_BATTLE_SKILL_SUB_SEQ,
NARC_POKETOOL_PERSONAL_PERSONAL,
NARC_POKETOOL_PERSONAL_GROWTBL,
NARC_POKETOOL_POKEGRA_POKEGRA,
NARC_POKETOOL_POKEGRA_HEIGHT,
NARC_POKETOOL_TRGRA_TRBGRA,
NARC_BATTLE_GRAPHIC_BATT_BG,
NARC_WAZAEFFECT_WE,
NARC_POKETOOL_WAZA_WAZA_TBL,
NARC_FIELDDATA_SCRIPT_SCR_SEQ_RELEASE,
NARC_MSGDATA_SCENARIO_SCR_MSG,
NARC_GRAPHIC_POKETCH,
NARC_GRAPHIC_BAG_GRA,
NARC_GRAPHIC_FONT,
NARC_ITEMTOOL_ITEMDATA_ITEM_DATA,
NARC_ITEMTOOL_ITEMDATA_ITEM_ICON,
NARC_GRAPHIC_TMAP_GRA,
NARC_GRAPHIC_BOX,
NARC_POKETOOL_ICONGRA_POKE_ICON,
NARC_GRAPHIC_PLIST_GRA,
NARC_WAZAEFFECT_EFFECTCLACT_WECHAR,
NARC_WAZAEFFECT_EFFECTCLACT_WEPLTT,
NARC_WAZAEFFECT_EFFECTCLACT_WECELL,
NARC_WAZAEFFECT_EFFECTCLACT_WECELLANM,
NARC_GRAPHIC_IMAGECLIP,
NARC_MSGDATA_MSG,
NARC_BATTLE_GRAPHIC_BATT_OBJ,
NARC_DATA_UNDERG_RADAR,
NARC_WAZAEFFECT_EFFECTDATA_WAZA_PARTICLE,
NARC_BATTLE_SKILL_BE_SEQ,
NARC_DATA_NAMEIN,
NARC_FIELDDATA_EVENTDATA_ZONE_EVENT_RELEASE,
NARC_POKETOOL_PERSONAL_WOTBL,
NARC_POKETOOL_PERSONAL_EVO,
NARC_GRAPHIC_FONTOAM,
NARC_GRAPHIC_FIELD_BOARD,
NARC_FIELDDATA_ENCOUNTDATA_D_ENC_DATA,
NARC_GRAPHIC_WINFRAME,
NARC_GRAPHIC_PST_GRA,
NARC_FIELDDATA_BUILD_MODEL_BUILD_MODEL,
NARC_FIELDDATA_MAPMATRIX_MAP_MATRIX,
NARC_FIELDDATA_AREADATA_AREA_DATA,
NARC_FIELDDATA_AREADATA_AREA_BUILD_MODEL_AREA_BUILD,
NARC_FIELDDATA_AREADATA_AREA_MAP_TEX_MAP_TEX_SET,
NARC_CONTEST_GRAPHIC_CONTEST_BG,
NARC_CONTEST_GRAPHIC_CONTEST_OBJ,
NARC_DATA_UGEFFECT_OBJ_GRAPHIC,
NARC_DEMO_TITLE_TITLEDEMO,
NARC_FIELDDATA_AREADATA_AREA_MOVE_MODEL_MOVE_MODEL_LIST,
NARC_DATA_UG_TRAP,
NARC_GRAPHIC_TRAINER_CASE,
NARC_DATA_UG_FOSSIL,
NARC_GRAPHIC_NTAG_GRA,
NARC_DATA_TRADELIST,
NARC_DATA_UG_PARTS,
NARC_GRAPHIC_OPENING,
NARC_POKETOOL_TRAINER_TRDATA,
NARC_POKETOOL_TRAINER_TRPOKE,
NARC_POKETOOL_TRMSG_TRTBL,
NARC_POKETOOL_TRGRA_TRFGRA,
NARC_PARTICLEDATA_PARTICLEDATA,
NARC_GRAPHIC_SHOP_GRA,
NARC_WAZAEFFECT_WE_SUB,
NARC_DATA_UG_ANIM,
NARC_DATA_WEATHER_SYS,
NARC_GRAPHIC_MENU_GRA,
NARC_FIELDDATA_LAND_DATA_LAND_DATA_RELEASE,
NARC_ITEMTOOL_ITEMDATA_NUTS_DATA,
NARC_RESOURCE_ENG_ZUKAN_ZUKAN,
NARC_POKETOOL_POKEFOOT_POKEFOOT,
NARC_FIELDDATA_AREADATA_AREA_BUILD_MODEL_AREABM_TEXSET,
NARC_BATTLE_GRAPHIC_B_PLIST_GRA,
NARC_GRAPHIC_CONFIG_GRA,
NARC_GRAPHIC_UNIONROOM,
NARC_APPLICATION_ZUKANLIST_ZKN_DATA_ZUKAN_DATA,
NARC_GRAPHIC_PMSI,
NARC_BATTLE_GRAPHIC_B_BAG_GRA,
NARC_GRAPHIC_OEKAKI,
NARC_GRAPHIC_MAIL_GRA,
NARC_GRAPHIC_F_NOTE_GRA,
NARC_DATA_MMODEL_MMODEL,
NARC_GRAPHIC_EV_POKESELECT,
NARC_GRAPHIC_PORU_GRA,
NARC_GRAPHIC_TOUCH_SUBWINDOW,
NARC_GRAPHIC_FLD_COMACT,
NARC_GRAPHIC_RECORD,
NARC_GRAPHIC_PORUDEMO,
NARC_GRAPHIC_PORUACT,
NARC_DATA_WIFINOTE,
NARC_CONTEST_DATA_CONTEST_DATA,
NARC_APPLICATION_CUSTOM_BALL_DATA_CB_DATA,
NARC_DATA_WIFIP2PMATCH,
NARC_GRAPHIC_DEMO_TRADE,
NARC_POKEANIME_POKE_ANM,
NARC_GRAPHIC_MYSIGN,
NARC_FIELDDATA_MM_LIST_MOVE_MODEL_LIST,
NARC_DATA_FIELD_CUTIN,
NARC_DATA_DEMO_CLIMAX,
NARC_WAZAEFFECT_EFFECTDATA_BALL_PARTICLE,
NARC_WAZAEFFECT_PT_DEBUG_DEBUG_PARTICLE,
NARC_GRAPHIC_DENDOU_PC,
NARC_APPLICATION_WIFI_EARTH_WIFI_EARTH_PLACE,
NARC_BATTLE_TR_AI_TR_AI_SEQ,
NARC_GRAPHIC_WORLDTRADE,
NARC_GRAPHIC_DENDOU_DEMO,
NARC_ARC_ENCDATA_EX,
NARC_DATA_MMODEL_FLDEFF,
NARC_BATTLE_GRAPHIC_VS_DEMO_GRA,
NARC_POKETOOL_POKEZUKAN,
NARC_ARC_BM_ANIME,
NARC_ARC_BM_ANIME_LIST,
NARC_GRAPHIC_FIELD_ENCOUNTEFFECT,
NARC_GRAPHIC_WAZA_OSHIE_GRA,
NARC_POKETOOL_POKEANM_POKEANM,
NARC_FIELDDATA_POKEMON_TRADE_FLD_TRADE,
NARC_GRAPHIC_MYSTERY,
NARC_POKETOOL_POKEGRA_OTHERPOKE,
NARC_DEMO_EGG_DATA_EGG_DATA,
NARC_DEMO_EGG_DATA_PARTICLE_EGG_DEMO_PARTICLE,
NARC_ARC_SHIP_DEMO,
NARC_POKETOOL_POKEGRA_HEIGHT_O,
NARC_GRAPHIC_NUTMIXER,
NARC_GRAPHIC_BTOWER,
NARC_DEMO_SHINKA_DATA_PARTICLE_SHINKA_DEMO_PARTICLE,
NARC_DEMO_INTRO_INTRO,
NARC_ARC_TV,
NARC_GRAPHIC_ENDING,
NARC_DEMO_TITLE_OP_DEMO,
NARC_APPLICATION_WIFI_EARTH_WIFI_EARTH,
NARC_GRAPHIC_RANKING,
NARC_ARC_PPARK,
NARC_DEMO_SYOUJYOU_SYOUJYOU,
NARC_DATA_SLOT,
NARC_BATTLE_B_TOWER_BTDTR,
NARC_BATTLE_B_TOWER_BTDPM,
NARC_DEMO_INTRO_INTRO_TV,
NARC_POKETOOL_TRMSG_TRTBLOFS,
NARC_POKETOOL_POKEGRA_POKE_YOFS,
NARC_APPLICATION_ZUKANLIST_ZKN_DATA_ZUKAN_ENC_DIAMOND,
NARC_APPLICATION_ZUKANLIST_ZKN_DATA_ZUKAN_ENC_PEARL,
NARC_GRAPHIC_HIDEN_EFFECT,
NARC_POKETOOL_POKEGRA_POKE_SHADOW,
NARC_FIELDDATA_ENCOUNTDATA_P_ENC_DATA,
NARC_POKETOOL_POKEGRA_POKE_SHADOW_OFX,
NARC_POKETOOL_SHINZUKAN,
} NarcId;
void ReadNARCFile(void * dest, const char * path, s32 file_idx, u32 offset, u32 size);
void * LoadFileIntoMemory(const char * path, s32 file_idx, u32 heap_id, u32 offset, u32 size, BOOL r4);
void LoadFromNARC(void * dest, NarcId narc_id, s32 file_id);
void * LoadFromNarc_2(NarcId narc_id, s32 file_id, u32 heap_id);
void * FUN_02006528(NarcId narc_id, s32 file_id, u32 heap_id);
void FUN_02006548(void * dest, NarcId narc_id, s32 file_id, u32 offset, u32 size);
void * FUN_02006564(NarcId narc_id, s32 file_id, u32 heap_id, u32 offset, u32 size);
void * FUN_02006584(NarcId narc_id, s32 file_id, u32 heap_id, u32 offset, u32 size);
u32 LoadFromNARC_7(NarcId narc_id, s32 file_idx);
NARC * FUN_02006670(NarcId narc_id, u32 heap_id);
void FUN_020066F4(NARC * narc);
void * FUN_02006704(NARC * narc, u32 file_id, u32 heap_id);
void FUN_02006774(NARC * narc, u32 file_id, void * dest);
u32 FUN_020067D0(NARC * narc, u32 file_id);
void FUN_02006814(NARC * narc, u32 file_id, u32 pos, u32 size, void * dest);
void FUN_02006864(NARC * narc, u32 size, void * dest);
u16 FUN_02006874(NARC * narc);
#endif //POKEDIAMOND_FILESYSTEM_H

8
include/heap.h Normal file
View File

@@ -0,0 +1,8 @@
#ifndef POKEDIAMOND_HEAP_H
#define POKEDIAMOND_HEAP_H
void * FUN_02016998(u32 heap_id, u32 size);
void * FUN_020169D8(u32 heap_id, u32 size);
void FUN_02016A18(void * ptr);
#endif //POKEDIAMOND_HEAP_H