through sub_0200D71C

This commit is contained in:
PikalaxALT 2023-08-28 19:45:35 -04:00
parent 255f47043f
commit ad6fbb130c
No known key found for this signature in database
GPG Key ID: EA3BF6EC343F2308
7 changed files with 183 additions and 501 deletions

View File

@ -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}

View File

@ -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);

View File

@ -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 {

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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);
}