diff --git a/asm/unk_0200CF18.s b/asm/unk_0200CF18.s index a11af5dae..56dddbf42 100644 --- a/asm/unk_0200CF18.s +++ b/asm/unk_0200CF18.s @@ -4,454 +4,6 @@ .text - thumb_func_start sub_0200D3F8 -sub_0200D3F8: ; 0x0200D3F8 - push {r4, r5, r6, r7, lr} - sub sp, #0xc - str r0, [sp] - mov r0, #6 - str r0, [sp, #4] - ldr r0, [sp] - add r5, r1, #0 - add r6, r2, #0 - cmp r0, #0 - beq _0200D410 - cmp r5, #0 - bne _0200D416 -_0200D410: - add sp, #0xc - mov r0, #0 - pop {r4, r5, r6, r7, pc} -_0200D416: - ldr r0, [r6, #0x10] - cmp r0, #0 - beq _0200D422 - ldr r0, [r6, #0x14] - cmp r0, #0 - bne _0200D426 -_0200D422: - mov r0, #4 - str r0, [sp, #4] -_0200D426: - ldr r0, [sp, #4] - str r0, [r5, #0x54] - mov r0, #0 - str r0, [sp, #8] - ldr r0, [sp, #4] - cmp r0, #0 - ble _0200D456 - add r7, r6, #0 - add r4, r5, #0 -_0200D438: - ldr r2, [sp] - ldr r0, [r7] - ldr r1, [sp, #8] - ldr r2, [r2] - bl Create2DGfxResObjMan - str r0, [r4, #0xc] - ldr r0, [sp, #8] - add r7, r7, #4 - add r1, r0, #1 - ldr r0, [sp, #4] - add r4, r4, #4 - str r1, [sp, #8] - cmp r1, r0 - blt _0200D438 -_0200D456: - ldr r0, [sp, #4] - mov r7, #0 - cmp r0, #0 - ble _0200D49C - add r4, r7, #0 -_0200D460: - ldr r0, [r6] - cmp r0, #0 - beq _0200D490 - ldr r1, [sp] - ldr r1, [r1] - bl Create2DGfxResObjList - str r0, [r5, #0x24] - mov r0, #0 - str r0, [r5, #0x3c] - ldr r3, [r5, #0x24] - add r1, r0, #0 - ldr r0, [r3, #4] - cmp r0, #0 - ble _0200D490 - add r2, r1, #0 -_0200D480: - ldr r0, [r3] - add r1, r1, #1 - str r4, [r0, r2] - ldr r3, [r5, #0x24] - add r2, r2, #4 - ldr r0, [r3, #4] - cmp r1, r0 - blt _0200D480 -_0200D490: - ldr r0, [sp, #4] - add r7, r7, #1 - add r6, r6, #4 - add r5, r5, #4 - cmp r7, r0 - blt _0200D460 -_0200D49C: - mov r0, #1 - add sp, #0xc - pop {r4, r5, r6, r7, pc} - .balign 4, 0 - thumb_func_end sub_0200D3F8 - - thumb_func_start sub_0200D4A4 -sub_0200D4A4: ; 0x0200D4A4 - push {r4, r5, r6, r7, lr} - sub sp, #0xc - add r4, r1, #0 - add r5, r0, #0 - ldr r0, [r4, #0xc] - ldr r1, [sp, #0x28] - add r6, r2, #0 - add r7, r3, #0 - bl _2DGfxResObjExistsById - cmp r0, #0 - bne _0200D4C2 - add sp, #0xc - mov r0, #0 - pop {r4, r5, r6, r7, pc} -_0200D4C2: - ldr r0, [sp, #0x28] - ldr r3, [sp, #0x20] - str r0, [sp] - ldr r0, [sp, #0x24] - add r1, r6, #0 - str r0, [sp, #4] - ldr r0, [r5] - add r2, r7, #0 - str r0, [sp, #8] - ldr r0, [r4, #0xc] - bl AddCharResObjFromNarc - add r5, r0, #0 - beq _0200D4F0 - bl sub_0200ADA4 - ldr r0, [r4, #0x24] - add r1, r5, #0 - bl sub_0200DAE4 - add sp, #0xc - mov r0, #1 - pop {r4, r5, r6, r7, pc} -_0200D4F0: - bl GF_AssertFail - cmp r5, #0 - beq _0200D4FE - add sp, #0xc - mov r0, #1 - pop {r4, r5, r6, r7, pc} -_0200D4FE: - mov r0, #0 - add sp, #0xc - pop {r4, r5, r6, r7, pc} - thumb_func_end sub_0200D4A4 - - thumb_func_start sub_0200D504 -sub_0200D504: ; 0x0200D504 - push {r4, r5, r6, r7, lr} - sub sp, #0xc - add r4, r1, #0 - add r5, r0, #0 - ldr r0, [r4, #0xc] - ldr r1, [sp, #0x28] - add r6, r2, #0 - add r7, r3, #0 - bl _2DGfxResObjExistsById - cmp r0, #0 - bne _0200D522 - add sp, #0xc - mov r0, #0 - pop {r4, r5, r6, r7, pc} -_0200D522: - ldr r0, [sp, #0x28] - ldr r3, [sp, #0x20] - str r0, [sp] - ldr r0, [sp, #0x24] - add r1, r6, #0 - str r0, [sp, #4] - ldr r0, [r5] - add r2, r7, #0 - str r0, [sp, #8] - ldr r0, [r4, #0xc] - bl AddCharResObjFromOpenNarc - add r5, r0, #0 - beq _0200D550 - bl sub_0200ADA4 - ldr r0, [r4, #0x24] - add r1, r5, #0 - bl sub_0200DAE4 - add sp, #0xc - mov r0, #1 - pop {r4, r5, r6, r7, pc} -_0200D550: - bl GF_AssertFail - cmp r5, #0 - beq _0200D55E - add sp, #0xc - mov r0, #1 - pop {r4, r5, r6, r7, pc} -_0200D55E: - mov r0, #0 - add sp, #0xc - pop {r4, r5, r6, r7, pc} - thumb_func_end sub_0200D504 - - thumb_func_start sub_0200D564 -sub_0200D564: ; 0x0200D564 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r4, r1, #0 - add r5, r0, #0 - ldr r0, [r4, #0x10] - ldr r1, [sp, #0x34] - add r6, r2, #0 - add r7, r3, #0 - bl _2DGfxResObjExistsById - cmp r0, #0 - bne _0200D584 - mov r0, #0 - add sp, #0x10 - mvn r0, r0 - pop {r3, r4, r5, r6, r7, pc} -_0200D584: - ldr r0, [sp, #0x34] - ldr r3, [sp, #0x28] - str r0, [sp] - ldr r0, [sp, #0x30] - add r1, r6, #0 - str r0, [sp, #4] - ldr r0, [sp, #0x2c] - add r2, r7, #0 - str r0, [sp, #8] - ldr r0, [r5] - str r0, [sp, #0xc] - ldr r0, [r4, #0x10] - bl AddPlttResObjFromNarc - add r5, r0, #0 - beq _0200D5C8 - bl sub_0200B00C - cmp r0, #1 - beq _0200D5B0 - bl GF_AssertFail -_0200D5B0: - ldr r0, [r4, #0x28] - add r1, r5, #0 - bl sub_0200DAE4 - ldr r1, [sp, #0x30] - add r0, r5, #0 - bl sub_0200B12C - lsl r0, r0, #0x18 - add sp, #0x10 - asr r0, r0, #0x18 - pop {r3, r4, r5, r6, r7, pc} -_0200D5C8: - bl GF_AssertFail - mov r0, #0 - mvn r0, r0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end sub_0200D564 - - thumb_func_start sub_0200D5D4 -sub_0200D5D4: ; 0x0200D5D4 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r4, r1, #0 - add r5, r0, #0 - ldr r0, [r4, #0x10] - ldr r1, [sp, #0x34] - add r6, r2, #0 - add r7, r3, #0 - bl _2DGfxResObjExistsById - cmp r0, #0 - bne _0200D5F4 - mov r0, #0 - add sp, #0x10 - mvn r0, r0 - pop {r3, r4, r5, r6, r7, pc} -_0200D5F4: - ldr r0, [sp, #0x34] - ldr r3, [sp, #0x28] - str r0, [sp] - ldr r0, [sp, #0x30] - add r1, r6, #0 - str r0, [sp, #4] - ldr r0, [sp, #0x2c] - add r2, r7, #0 - str r0, [sp, #8] - ldr r0, [r5] - str r0, [sp, #0xc] - ldr r0, [r4, #0x10] - bl AddPlttResObjFromOpenNarc - add r5, r0, #0 - beq _0200D638 - bl sub_0200B00C - cmp r0, #1 - beq _0200D620 - bl GF_AssertFail -_0200D620: - ldr r0, [r4, #0x28] - add r1, r5, #0 - bl sub_0200DAE4 - ldr r1, [sp, #0x30] - add r0, r5, #0 - bl sub_0200B12C - lsl r0, r0, #0x18 - add sp, #0x10 - asr r0, r0, #0x18 - pop {r3, r4, r5, r6, r7, pc} -_0200D638: - bl GF_AssertFail - mov r0, #0 - mvn r0, r0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - thumb_func_end sub_0200D5D4 - - thumb_func_start sub_0200D644 -sub_0200D644: ; 0x0200D644 - push {r4, r5, r6, lr} - sub sp, #0x10 - add r5, r0, #0 - ldr r0, [sp, #0x28] - add r6, r1, #0 - str r0, [sp] - ldr r0, [sp, #0x2c] - add r1, r3, #0 - str r0, [sp, #4] - ldr r0, [sp, #0x30] - ldr r3, [sp, #0x24] - str r0, [sp, #8] - ldr r0, [sp, #0x34] - str r0, [sp, #0xc] - add r0, r2, #0 - ldr r2, [sp, #0x20] - bl sub_0200D564 - add r4, r0, #0 - mov r0, #0 - mvn r0, r0 - cmp r4, r0 - beq _0200D682 - ldr r3, [sp, #0x2c] - lsl r2, r4, #0x14 - add r0, r5, #0 - add r1, r6, #0 - lsr r2, r2, #0x10 - lsl r3, r3, #5 - bl sub_020032A4 -_0200D682: - lsl r0, r4, #0x18 - lsr r0, r0, #0x18 - add sp, #0x10 - pop {r4, r5, r6, pc} - .balign 4, 0 - thumb_func_end sub_0200D644 - - thumb_func_start sub_0200D68C -sub_0200D68C: ; 0x0200D68C - push {r4, r5, r6, lr} - sub sp, #0x10 - add r5, r0, #0 - ldr r0, [sp, #0x28] - add r6, r1, #0 - str r0, [sp] - ldr r0, [sp, #0x2c] - add r1, r3, #0 - str r0, [sp, #4] - ldr r0, [sp, #0x30] - ldr r3, [sp, #0x24] - str r0, [sp, #8] - ldr r0, [sp, #0x34] - str r0, [sp, #0xc] - add r0, r2, #0 - ldr r2, [sp, #0x20] - bl sub_0200D5D4 - add r4, r0, #0 - mov r0, #0 - mvn r0, r0 - cmp r4, r0 - beq _0200D6CA - ldr r3, [sp, #0x2c] - lsl r2, r4, #0x14 - add r0, r5, #0 - add r1, r6, #0 - lsr r2, r2, #0x10 - lsl r3, r3, #5 - bl sub_020032A4 -_0200D6CA: - lsl r0, r4, #0x18 - lsr r0, r0, #0x18 - add sp, #0x10 - pop {r4, r5, r6, pc} - .balign 4, 0 - thumb_func_end sub_0200D68C - - thumb_func_start sub_0200D6D4 -sub_0200D6D4: ; 0x0200D6D4 - push {r3, r4, lr} - sub sp, #0xc - ldr r4, [sp, #0x18] - str r4, [sp] - mov r4, #2 - str r4, [sp, #4] - ldr r4, [sp, #0x1c] - str r4, [sp, #8] - bl sub_0200DA04 - add sp, #0xc - pop {r3, r4, pc} - thumb_func_end sub_0200D6D4 - - thumb_func_start sub_0200D6EC -sub_0200D6EC: ; 0x0200D6EC - push {r3, r4, lr} - sub sp, #0xc - ldr r4, [sp, #0x18] - str r4, [sp] - mov r4, #2 - str r4, [sp, #4] - ldr r4, [sp, #0x1c] - str r4, [sp, #8] - bl sub_0200DA74 - add sp, #0xc - pop {r3, r4, pc} - thumb_func_end sub_0200D6EC - - thumb_func_start sub_0200D704 -sub_0200D704: ; 0x0200D704 - push {r3, r4, lr} - sub sp, #0xc - ldr r4, [sp, #0x18] - str r4, [sp] - mov r4, #3 - str r4, [sp, #4] - ldr r4, [sp, #0x1c] - str r4, [sp, #8] - bl sub_0200DA04 - add sp, #0xc - pop {r3, r4, pc} - thumb_func_end sub_0200D704 - - thumb_func_start sub_0200D71C -sub_0200D71C: ; 0x0200D71C - push {r3, r4, lr} - sub sp, #0xc - ldr r4, [sp, #0x18] - str r4, [sp] - mov r4, #3 - str r4, [sp, #4] - ldr r4, [sp, #0x1c] - str r4, [sp, #8] - bl sub_0200DA74 - add sp, #0xc - pop {r3, r4, pc} - thumb_func_end sub_0200D71C - thumb_func_start sub_0200D734 sub_0200D734: ; 0x0200D734 push {r3, lr} diff --git a/include/pokemon.h b/include/pokemon.h index eaa832679..479298c32 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -147,7 +147,7 @@ u8 sub_02070848(BoxPokemon *boxMon, u8 whichFacing); u8 sub_02070854(BoxPokemon *boxMon, u8 whichFacing, BOOL a2); u8 sub_020708D8(u16 species, u8 gender, u8 whichFacing, u8 form, u32 pid); u8 sub_02070A64(u16 species, u8 gender, u8 whichFacing, u8 form, u32 pid); -struct UnkStruct_0200D748 *sub_02070C24(UnkStruct_0200CF18 *r6, void *sp18, void *sp1C, s32 sp20, s32 sp88, s32 trainerClass, s32 sp90, s32 sp94, s32 r5, HeapID heapId); +struct UnkStruct_0200D748 *sub_02070C24(UnkStruct_0200CF18 *r6, UnkStruct_0200CF38 *sp18, void *sp1C, int sp20, int sp88, int trainerClass, int sp90, int sp94, int r5, HeapID heapId); void sub_02070D3C(s32 trainer_class, s32 a1, s32 a2, struct UnkStruct_02070D3C *a3); void sub_02070D84(s32 trainer_class, s32 a1, struct UnkStruct_02070D3C *a2); u32 sub_02070D90(void); diff --git a/include/unk_0200A090.h b/include/unk_0200A090.h index 2ba8b571a..01634b4a1 100644 --- a/include/unk_0200A090.h +++ b/include/unk_0200A090.h @@ -38,6 +38,7 @@ typedef enum GF_GraphicsResourceType { GF_GFX_RES_TYPE_ANIM = 3, GF_GFX_RES_TYPE_MCEL = 4, GF_GFX_RES_TYPE_MANM = 5, + GF_GFX_RES_TYPE_MAX = 6, } GfGfxResType; typedef struct _2DGfxResObj { diff --git a/include/unk_0200ACF0.h b/include/unk_0200ACF0.h index e9f76625e..290210c73 100644 --- a/include/unk_0200ACF0.h +++ b/include/unk_0200ACF0.h @@ -14,9 +14,10 @@ NNSG2dImageProxy *sub_0200AF00(struct _2DGfxResObj *charResObj); NNSG2dImageProxy *sub_0200AF24(struct _2DGfxResObj *charResObj, struct _2DGfxResObj *cellResObj); void sub_0200AF94(struct _2DGfxResObj *obj); void sub_0200AFD8(struct _2DGfxResObjList *plttResObjList); -void sub_0200B00C(struct _2DGfxResObj *plttResObj); +BOOL sub_0200B00C(struct _2DGfxResObj *plttResObj); void sub_0200B050(struct _2DGfxResObjList *plttResObjList); void sub_0200B0A8(struct _2DGfxResObj *plttResObj); +int sub_0200B12C(struct _2DGfxResObj* plttResObj, int vram); void sub_0200B0CC(struct _2DGfxResObjList *plttResObjList); NNSG2dImagePaletteProxy *sub_0200B0F8(struct _2DGfxResObj *plttResObj, NNSG2dImageProxy *imageProxy); diff --git a/include/unk_0200CF18.h b/include/unk_0200CF18.h index 759bbf9fe..a5a74c0b4 100644 --- a/include/unk_0200CF18.h +++ b/include/unk_0200CF18.h @@ -4,6 +4,7 @@ #include "filesystem.h" #include "unk_02009D48.h" #include "unk_02023694.h" +#include "palette.h" typedef struct UnkStruct_0200D2B4 { int unk_00; @@ -28,7 +29,7 @@ typedef struct UnkTemplate_0200D748 { u32 unk_08; u32 pal; NNS_G2D_VRAM_TYPE vram; - u32 unk_14[6]; + u32 unk_14[GF_GFX_RES_TYPE_MAX]; u32 unk_2C; u32 unk_30; } UnkTemplate_0200D748; // size=0x34 @@ -41,8 +42,8 @@ typedef struct UnkStruct_0200CF18 { HeapID heapId; u32 unk_004; BOOL unk_008; - NNSG2dCellTransferState* cellTransferState; - GF_G2dRenderer renderer; + NNSG2dCellTransferState* cellTransferState; // 00C + GF_G2dRenderer renderer; // 010 } UnkStruct_0200CF18; // size: 0x138 typedef struct UnkStruct_0200CF38_sub { @@ -52,11 +53,11 @@ typedef struct UnkStruct_0200CF38_sub { typedef struct UnkStruct_0200CF38 { SpriteList* spriteList; - ListOfUnkStruct_02009D48* unk_04; - struct _2DGfxResHeader* unk_08; - struct _2DGfxResMan* unk_0C[6]; - struct _2DGfxResObjList* unk_24[6]; - int unk_3C[6]; + ListOfUnkStruct_02009D48* listOfUnkStruct_9D48; // 4 + struct _2DGfxResHeader* _2dGfxResHeader; // 8 + struct _2DGfxResMan* _2dGfxResMan[GF_GFX_RES_TYPE_MAX]; // C + struct _2DGfxResObjList* _2dGfxResObjList[GF_GFX_RES_TYPE_MAX]; // 24 + int unk_3C[GF_GFX_RES_TYPE_MAX]; int unk_54; } UnkStruct_0200CF38; // size: 0x58 @@ -80,7 +81,7 @@ typedef struct Unk122_021E92D0 { } Unk122_021E92D0; typedef struct Unk122_021E92E4 { - int unk0[6]; + int unk0[GF_GFX_RES_TYPE_MAX]; } Unk122_021E92E4; typedef struct Unk122_021E9374 { @@ -106,13 +107,17 @@ void sub_0200D108(UnkStruct_0200CF18*); BOOL sub_0200D294(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, const u16* a2); BOOL sub_0200D2A4(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, const u16* a2, int a3, int a4); Sprite* sub_0200D2B4(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, const UnkStruct_0200D2B4* a2); - -void sub_0200D3F8(UnkStruct_0200CF18*, UnkStruct_0200CF38*, Unk122_021E92E4*); -void sub_0200D504(UnkStruct_0200CF18*, UnkStruct_0200CF38*, NARC*, int, int, int, int); -void sub_0200D5D4(UnkStruct_0200CF18*, UnkStruct_0200CF38*, NARC*, int, int, int, int, int); -void sub_0200D68C(void*, s32, void*, void*, NARC*, s32, s32, s32, s32, s32); -void sub_0200D6EC(UnkStruct_0200CF18*, UnkStruct_0200CF38*, NARC*, int, int, int); -void sub_0200D71C(void*, UnkStruct_0200CF38*, NARC*, s32, s32, s32); +BOOL sub_0200D3F8(UnkStruct_0200CF18*, UnkStruct_0200CF38*, Unk122_021E92E4*); +BOOL sub_0200D4A4(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NarcId narcId, int fileId, BOOL compressed, int vram, int resId); +BOOL sub_0200D504(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NARC* narc, int fileId, BOOL compressed, int vram, int resId); +s8 sub_0200D564(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NarcId sub_0200D564, int fileId, BOOL compressed, int pltt_num, int vram, int resId); +s8 sub_0200D5D4(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NARC* sub_0200D564, int fileId, BOOL compressed, int pltt_num, int vram, int resId); +u8 sub_0200D644(PaletteData* a0, u32 bufferId, UnkStruct_0200CF18* a2, UnkStruct_0200CF38* a3, NarcId narcId, int fileId, BOOL compressed, int pltt_num, int vram, int resId); +u8 sub_0200D68C(PaletteData* a0, u32 bufferId, UnkStruct_0200CF18* a2, UnkStruct_0200CF38* a3, NARC* narc, int fileId, BOOL compressed, int pltt_num, int vram, int resId); +BOOL sub_0200D6D4(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NarcId narcId, int fileId, BOOL compressed, int resId); +BOOL sub_0200D6EC(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NARC* narc, int fileId, BOOL compressed, int resId); +BOOL sub_0200D704(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NarcId narcId, int fileId, BOOL compressed, int resId); +BOOL sub_0200D71C(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NARC* narc, int fileId, BOOL compressed, int resId); struct UnkStruct_0200D748* sub_0200D734(void*, void*, struct UnkTemplate_0200D748*); UnkStruct_0200D748* sub_0200D740(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, Unk122_021E9374* a2, u32 a3); void sub_0200D958(void* a0, u32 character); diff --git a/src/pokemon.c b/src/pokemon.c index ac32d67cd..b96ac1ae1 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2689,12 +2689,12 @@ static const int _020FF50C[] = { 0, 1, 1, 2, 0, 3 }; -struct UnkStruct_0200D748 *sub_02070C24(UnkStruct_0200CF18 *r6, void *sp18, void *sp1C, s32 sp20, s32 sp88, s32 trainerClass, s32 sp90, s32 sp94, s32 r5, HeapID heapId) { - s32 r7; - NARC *narc_r4; - struct UnkStruct_0200D748 *ret_r4; +struct UnkStruct_0200D748 *sub_02070C24(UnkStruct_0200CF18 *r6, UnkStruct_0200CF38 *sp18, void *sp1C, int sp20, int sp88, int trainerClass, int sp90, int sp94, int r5, HeapID heapId) { struct UnkTemplate_0200D748 sp3C; + struct UnkStruct_0200D748 *ret_r4; + NARC *narc_r4; struct UnkStruct_02070D3C sp24; + int r7; r7 = 1; sub_02070D3C(trainerClass, sp90, sp94, &sp24); @@ -2702,10 +2702,10 @@ struct UnkStruct_0200D748 *sub_02070C24(UnkStruct_0200CF18 *r6, void *sp18, void r7 = 2; } narc_r4 = NARC_New(sp24.narcId, heapId); - sub_0200D504(r6, sp18, narc_r4, sp24.ncgr_id, 0, 1, r5 + 0x4E2F); - sub_0200D68C(sp1C, 2, r6, sp18, narc_r4, sp24.nclr_id, 0, r7, 1, r5 + 0x4E2A); - sub_0200D6EC(r6, sp18, narc_r4, sp24.ncer_id, 0, r5 + 0x4E27); - sub_0200D71C(r6, sp18, narc_r4, sp24.nanr_id, 0, r5 + 0x4E27); + sub_0200D504(r6, sp18, narc_r4, sp24.ncgr_id, FALSE, 1, r5 + 0x4E2F); + sub_0200D68C(sp1C, 2, r6, sp18, narc_r4, sp24.nclr_id, FALSE, r7, 1, r5 + 0x4E2A); + sub_0200D6EC(r6, sp18, narc_r4, sp24.ncer_id, FALSE, r5 + 0x4E27); + sub_0200D71C(r6, sp18, narc_r4, sp24.nanr_id, FALSE, r5 + 0x4E27); NARC_Delete(narc_r4); sp3C = _020FF588; sp3C.unk_14[0] = r5 + 0x4E2F; diff --git a/src/unk_0200CF18_c.c b/src/unk_0200CF18_c.c index d8f623a13..632906db9 100644 --- a/src/unk_0200CF18_c.c +++ b/src/unk_0200CF18_c.c @@ -2,6 +2,7 @@ #include "global.h" #include "heap.h" #include "gf_gfx_loader.h" +#include "palette.h" #include "unk_02009D48.h" #include "unk_020215A0.h" #include "unk_02022588.h" @@ -18,6 +19,9 @@ void sub_0200D0B4(UnkStruct_0200CF18* a0); void sub_0200D0D4(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1); BOOL sub_0200D124(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, const u16* a2, int a3, int a4); Sprite* sub_0200D2F0(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, int a2, s16 x, s16 y, s16 z, u16 animSeqNo, int rotation, int a8, int whichScreen, int a10, int a11, int a12, int a13); +void sub_0200DAE4(struct _2DGfxResObjList* list, _2DGfxResObj* obj); +BOOL sub_0200DA04(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NarcId narcId, int fileId, BOOL compressed, int a6, int resId); +BOOL sub_0200DA74(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NARC* narc, int fileId, BOOL compressed, int a6, int resId); UnkStruct_0200CF18* sub_0200CF18(HeapID heapId) { UnkStruct_0200CF18* ret = AllocFromHeap(heapId, sizeof(UnkStruct_0200CF18)); @@ -37,8 +41,8 @@ UnkStruct_0200CF38* sub_0200CF38(UnkStruct_0200CF18* a0) { return NULL; } ++a0->unk_004; - for (int i = 0; i < 6; ++i) { - ret->unk_0C[i] = NULL; + for (int i = 0; i < GF_GFX_RES_TYPE_MAX; ++i) { + ret->_2dGfxResMan[i] = NULL; } return ret; } @@ -99,21 +103,21 @@ void sub_0200D044(UnkStruct_0200CF38* a0) { } void sub_0200D050(UnkStruct_0200CF38* a0) { - if (a0->unk_04 != NULL) { - sub_02009F24(a0->unk_04); + if (a0->listOfUnkStruct_9D48 != NULL) { + sub_02009F24(a0->listOfUnkStruct_9D48); } } void sub_0200D060(UnkStruct_0200CF38* a0) { for (int i = 0; i < a0->unk_54; ++i) { - sub_0200A954(sub_0200A900(a0->unk_08, i)); + sub_0200A954(sub_0200A900(a0->_2dGfxResHeader, i)); } - FreeToHeap(a0->unk_08); - sub_0200AED4(a0->unk_24[0]); - sub_0200B0CC(a0->unk_24[1]); + FreeToHeap(a0->_2dGfxResHeader); + sub_0200AED4(a0->_2dGfxResObjList[0]); + sub_0200B0CC(a0->_2dGfxResObjList[1]); for (int i = 0; i < a0->unk_54; ++i) { - Delete2DGfxResObjList(a0->unk_24[i]); - Destroy2DGfxResObjMan(a0->unk_0C[i]); + Delete2DGfxResObjList(a0->_2dGfxResObjList[i]); + Destroy2DGfxResObjMan(a0->_2dGfxResMan[i]); } } @@ -152,59 +156,59 @@ BOOL sub_0200D124(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, const u16* a2, void* data; NARC* narc; - r7 = 6; + r7 = GF_GFX_RES_TYPE_MAX; if (a0 == NULL || a1 == NULL) { return FALSE; } - if (a2[4] == 0xFFFF) { - r7 = 4; + if (a2[GF_GFX_RES_TYPE_MCEL] == 0xFFFF) { + r7 = GF_GFX_RES_TYPE_MAX - 2; } a1->unk_54 = r7; size = sub_0200A8FC(); - a1->unk_08 = AllocFromHeap(a0->heapId, size * r7); + a1->_2dGfxResHeader = AllocFromHeap(a0->heapId, size * r7); narc = NARC_New(NARC_a_1_7_5, a0->heapId); for (i = 0; i < r7; ++i) { - header = sub_0200A900(a1->unk_08, i); + header = sub_0200A900(a1->_2dGfxResHeader, i); data = GfGfxLoader_LoadFromOpenNarc(narc, a2[i], FALSE, a0->heapId, TRUE); sub_0200A908(data, header, a0->heapId); FreeToHeap(data); } for (i = 0; i < r7; ++i) { - header = sub_0200A900(a1->unk_08, i); + header = sub_0200A900(a1->_2dGfxResHeader, i); size = sub_0200A96C(header); - a1->unk_0C[i] = Create2DGfxResObjMan(size, (GfGfxResType)i, a0->heapId); + a1->_2dGfxResMan[i] = Create2DGfxResObjMan(size, (GfGfxResType)i, a0->heapId); } for (i = 0; i < r7; ++i) { - header = sub_0200A900(a1->unk_08, i); + header = sub_0200A900(a1->_2dGfxResHeader, i); size = sub_0200A96C(header); - a1->unk_24[i] = Create2DGfxResObjList(size, a0->heapId); - a1->unk_3C[i] = LoadAll2DGfxResObjsFromHeader(a1->unk_0C[i], header, a1->unk_24[i], a0->heapId); + a1->_2dGfxResObjList[i] = Create2DGfxResObjList(size, a0->heapId); + a1->unk_3C[i] = LoadAll2DGfxResObjsFromHeader(a1->_2dGfxResMan[i], header, a1->_2dGfxResObjList[i], a0->heapId); } switch (a3) { case 0: - sub_0200ADE4(a1->unk_24[0]); + sub_0200ADE4(a1->_2dGfxResObjList[GF_GFX_RES_TYPE_CHAR]); break; case 1: - sub_0200AE58(a1->unk_24[0]); + sub_0200AE58(a1->_2dGfxResObjList[GF_GFX_RES_TYPE_CHAR]); break; case 2: default: - sub_0200AD30(a1->unk_24[0]); + sub_0200AD30(a1->_2dGfxResObjList[GF_GFX_RES_TYPE_CHAR]); break; } switch (a4) { case 0: - sub_0200B050(a1->unk_24[1]); + sub_0200B050(a1->_2dGfxResObjList[1]); break; case 1: default: - sub_0200AFD8(a1->unk_24[1]); + sub_0200AFD8(a1->_2dGfxResObjList[1]); break; } data = GfGfxLoader_LoadFromOpenNarc(narc, a2[6], FALSE, a0->heapId, TRUE); - a1->unk_04 = sub_02009E84(data, a0->heapId, a1->unk_0C[0], a1->unk_0C[1], a1->unk_0C[2], a1->unk_0C[3], a1->unk_0C[4], a1->unk_0C[5]); + a1->listOfUnkStruct_9D48 = sub_02009E84(data, a0->heapId, a1->_2dGfxResMan[0], a1->_2dGfxResMan[1], a1->_2dGfxResMan[2], a1->_2dGfxResMan[3], a1->_2dGfxResMan[4], a1->_2dGfxResMan[5]); FreeToHeap(data); NARC_Delete(narc); return TRUE; @@ -227,7 +231,7 @@ Sprite* sub_0200D2F0(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, int headerI SpriteTemplate template; template.spriteList = a1->spriteList; - template.header = &a1->unk_04->headers[headerIndex]; + template.header = &a1->listOfUnkStruct_9D48->headers[headerIndex]; template.position.x = FX32_CONST(x); template.position.y = FX32_CONST(y); @@ -259,3 +263,122 @@ Sprite* sub_0200D2F0(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, int headerI } return ret; } + +BOOL sub_0200D3F8(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, Unk122_021E92E4* a2) { + int i, j; + int sp4 = GF_GFX_RES_TYPE_MAX; + int num; + + if (a0 == NULL || a1 == NULL) { + return FALSE; + } + if (a2->unk0[GF_GFX_RES_TYPE_MCEL] == 0 || a2->unk0[GF_GFX_RES_TYPE_MANM] == 0) { + sp4 = GF_GFX_RES_TYPE_MAX - 2; + } + a1->unk_54 = sp4; + + for (i = 0; i < sp4; ++i) { + a1->_2dGfxResMan[i] = Create2DGfxResObjMan(a2->unk0[i], (GfGfxResType)i, a0->heapId); + } + + for (i = 0; i < sp4; ++i) { + num = a2->unk0[i]; + if (num == 0) { + continue; + } + a1->_2dGfxResObjList[i] = Create2DGfxResObjList(num, a0->heapId); + a1->unk_3C[i] = 0; + for (j = 0; j < a1->_2dGfxResObjList[i]->max; ++j) { + a1->_2dGfxResObjList[i]->obj[j] = NULL; + } + } + return TRUE; +} + +BOOL sub_0200D4A4(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NarcId narcId, int fileId, BOOL compressed, int vram, int resId) { + if (!_2DGfxResObjExistsById(a1->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], resId)) { + return FALSE; + } + _2DGfxResObj* obj = AddCharResObjFromNarc(a1->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], narcId, fileId, compressed, resId, vram, a0->heapId); + if (obj != NULL) { + sub_0200ADA4(obj); + sub_0200DAE4(a1->_2dGfxResObjList[GF_GFX_RES_TYPE_CHAR], obj); + return TRUE; + } + GF_ASSERT(0); + return obj != NULL; +} + +BOOL sub_0200D504(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NARC* narc, int fileId, BOOL compressed, int vram, int resId) { + if (!_2DGfxResObjExistsById(a1->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], resId)) { + return FALSE; + } + _2DGfxResObj* obj = AddCharResObjFromOpenNarc(a1->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], narc, fileId, compressed, resId, vram, a0->heapId); + if (obj != NULL) { + sub_0200ADA4(obj); + sub_0200DAE4(a1->_2dGfxResObjList[GF_GFX_RES_TYPE_CHAR], obj); + return TRUE; + } + GF_ASSERT(0); + return obj != NULL; +} + +s8 sub_0200D564(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NarcId narcId, int fileId, BOOL compressed, int pltt_num, int vram, int resId) { + if (!_2DGfxResObjExistsById(a1->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], resId)) { + return -1; + } + _2DGfxResObj* obj = AddPlttResObjFromNarc(a1->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], narcId, fileId, compressed, resId, vram, pltt_num, a0->heapId); + if (obj != NULL) { + GF_ASSERT(sub_0200B00C(obj) == TRUE); + sub_0200DAE4(a1->_2dGfxResObjList[GF_GFX_RES_TYPE_PLTT], obj); + return sub_0200B12C(obj, vram); + } + GF_ASSERT(0); + return -1; +} + +s8 sub_0200D5D4(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NARC* narc, int fileId, BOOL compressed, int pltt_num, int vram, int resId) { + if (!_2DGfxResObjExistsById(a1->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], resId)) { + return -1; + } + _2DGfxResObj* obj = AddPlttResObjFromOpenNarc(a1->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], narc, fileId, compressed, resId, vram, pltt_num, a0->heapId); + if (obj != NULL) { + GF_ASSERT(sub_0200B00C(obj) == TRUE); + sub_0200DAE4(a1->_2dGfxResObjList[GF_GFX_RES_TYPE_PLTT], obj); + return sub_0200B12C(obj, vram); + } + GF_ASSERT(0); + return -1; +} + +u8 sub_0200D644(PaletteData* a0, u32 bufferId, UnkStruct_0200CF18* a2, UnkStruct_0200CF38* a3, NarcId narcId, int fileId, BOOL compressed, int pltt_num, int vram, int resId) { + int ret = sub_0200D564(a2, a3, narcId, fileId, compressed, pltt_num, vram, resId); + if (ret != -1) { + sub_020032A4(a0, bufferId, ret * 16, pltt_num * 32); + } + return ret; +} + +u8 sub_0200D68C(PaletteData* a0, u32 bufferId, UnkStruct_0200CF18* a2, UnkStruct_0200CF38* a3, NARC* narc, int fileId, BOOL compressed, int pltt_num, int vram, int resId) { + int ret = sub_0200D5D4(a2, a3, narc, fileId, compressed, pltt_num, vram, resId); + if (ret != -1) { + sub_020032A4(a0, bufferId, ret * 16, pltt_num * 32); + } + return ret; +} + +BOOL sub_0200D6D4(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NarcId narcId, int fileId, BOOL compressed, int resId) { + return sub_0200DA04(a0, a1, narcId, fileId, compressed, 2, resId); +} + +BOOL sub_0200D6EC(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NARC* narc, int fileId, BOOL compressed, int resId) { + return sub_0200DA74(a0, a1, narc, fileId, compressed, 2, resId); +} + +BOOL sub_0200D704(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NarcId narcId, int fileId, BOOL compressed, int resId) { + return sub_0200DA04(a0, a1, narcId, fileId, compressed, 3, resId); +} + +BOOL sub_0200D71C(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, NARC* narc, int fileId, BOOL compressed, int resId) { + return sub_0200DA74(a0, a1, narc, fileId, compressed, 3, resId); +}