through sub_0200D124

This commit is contained in:
PikalaxALT 2023-08-27 19:42:36 -04:00
parent 1c086937e5
commit fa1781984f
No known key found for this signature in database
GPG Key ID: EA3BF6EC343F2308
5 changed files with 87 additions and 203 deletions

View File

@ -219,3 +219,4 @@
.public sub_0200D060
.public sub_0200D0B4
.public sub_0200D0D4
.public sub_0200D124

View File

@ -4,202 +4,6 @@
.text
thumb_func_start sub_0200D108
sub_0200D108: ; 0x0200D108
push {r4, lr}
add r4, r0, #0
ldr r0, [r4, #4]
cmp r0, #0
beq _0200D116
bl GF_AssertFail
_0200D116:
add r0, r4, #0
bl sub_0200D0B4
add r0, r4, #0
bl FreeToHeap
pop {r4, pc}
thumb_func_end sub_0200D108
thumb_func_start sub_0200D124
sub_0200D124: ; 0x0200D124
push {r4, r5, r6, r7, lr}
sub sp, #0x34
add r5, r0, #0
add r4, r1, #0
mov r7, #6
str r2, [sp, #0x10]
str r3, [sp, #0x14]
cmp r5, #0
beq _0200D13A
cmp r4, #0
bne _0200D140
_0200D13A:
add sp, #0x34
mov r0, #0
pop {r4, r5, r6, r7, pc}
_0200D140:
add r0, r2, #0
ldrh r1, [r0, #8]
ldr r0, _0200D290 ; =0x0000FFFF
cmp r1, r0
bne _0200D14C
mov r7, #4
_0200D14C:
str r7, [r4, #0x54]
bl sub_0200A8FC
add r2, r0, #0
add r1, r2, #0
ldr r0, [r5]
mul r1, r7
bl AllocFromHeap
str r0, [r4, #8]
ldr r1, [r5]
mov r0, #0xaf
bl NARC_New
str r0, [sp, #0x20]
mov r0, #0
str r0, [sp, #0x24]
cmp r7, #0
ble _0200D1AA
ldr r6, [sp, #0x10]
_0200D174:
ldr r0, [r4, #8]
ldr r1, [sp, #0x24]
bl sub_0200A900
str r0, [sp, #0x28]
mov r0, #1
str r0, [sp]
ldrh r1, [r6]
ldr r0, [sp, #0x20]
ldr r3, [r5]
mov r2, #0
bl GfGfxLoader_LoadFromOpenNarc
ldr r1, [sp, #0x28]
ldr r2, [r5]
str r0, [sp, #0x2c]
bl sub_0200A908
ldr r0, [sp, #0x2c]
bl FreeToHeap
ldr r0, [sp, #0x24]
add r6, r6, #2
add r0, r0, #1
str r0, [sp, #0x24]
cmp r0, r7
blt _0200D174
_0200D1AA:
mov r6, #0
cmp r7, #0
ble _0200D1D6
str r4, [sp, #0x1c]
_0200D1B2:
ldr r0, [r4, #8]
add r1, r6, #0
bl sub_0200A900
bl sub_0200A96C
ldr r2, [r5]
add r1, r6, #0
bl Create2DGfxResObjMan
ldr r1, [sp, #0x1c]
add r6, r6, #1
str r0, [r1, #0xc]
add r0, r1, #0
add r0, r0, #4
str r0, [sp, #0x1c]
cmp r6, r7
blt _0200D1B2
_0200D1D6:
mov r0, #0
str r0, [sp, #0x18]
cmp r7, #0
ble _0200D210
add r6, r4, #0
_0200D1E0:
ldr r0, [r4, #8]
ldr r1, [sp, #0x18]
bl sub_0200A900
str r0, [sp, #0x30]
bl sub_0200A96C
ldr r1, [r5]
bl Create2DGfxResObjList
add r2, r0, #0
str r2, [r6, #0x24]
ldr r0, [r6, #0xc]
ldr r1, [sp, #0x30]
ldr r3, [r5]
bl LoadAll2DGfxResObjsFromHeader
str r0, [r6, #0x3c]
ldr r0, [sp, #0x18]
add r6, r6, #4
add r0, r0, #1
str r0, [sp, #0x18]
cmp r0, r7
blt _0200D1E0
_0200D210:
ldr r0, [sp, #0x14]
cmp r0, #0
beq _0200D21E
cmp r0, #1
beq _0200D226
cmp r0, #2
b _0200D22E
_0200D21E:
ldr r0, [r4, #0x24]
bl sub_0200ADE4
b _0200D234
_0200D226:
ldr r0, [r4, #0x24]
bl sub_0200AE58
b _0200D234
_0200D22E:
ldr r0, [r4, #0x24]
bl sub_0200AD30
_0200D234:
ldr r0, [sp, #0x48]
cmp r0, #0
beq _0200D23E
cmp r0, #1
b _0200D246
_0200D23E:
ldr r0, [r4, #0x28]
bl sub_0200B050
b _0200D24C
_0200D246:
ldr r0, [r4, #0x28]
bl sub_0200AFD8
_0200D24C:
mov r0, #1
str r0, [sp]
ldr r1, [sp, #0x10]
ldr r0, [sp, #0x20]
ldrh r1, [r1, #0xc]
ldr r3, [r5]
mov r2, #0
bl GfGfxLoader_LoadFromOpenNarc
ldr r1, [r4, #0x14]
add r6, r0, #0
str r1, [sp]
ldr r1, [r4, #0x18]
str r1, [sp, #4]
ldr r1, [r4, #0x1c]
str r1, [sp, #8]
ldr r1, [r4, #0x20]
str r1, [sp, #0xc]
ldr r1, [r5]
ldr r2, [r4, #0xc]
ldr r3, [r4, #0x10]
bl sub_02009E84
str r0, [r4, #4]
add r0, r6, #0
bl FreeToHeap
ldr r0, [sp, #0x20]
bl NARC_Delete
mov r0, #1
add sp, #0x34
pop {r4, r5, r6, r7, pc}
nop
_0200D290: .word 0x0000FFFF
thumb_func_end sub_0200D124
thumb_func_start sub_0200D294
sub_0200D294: ; 0x0200D294
push {r3, lr}

View File

@ -3,16 +3,21 @@
#include "unk_0200A090.h"
void sub_0200ACF0(struct _2DGfxResObj *obj);
void sub_0200AD30(struct _2DGfxResObjList *charResObjList);
void sub_0200ADA4(struct _2DGfxResObj *charResObj);
void sub_0200ADE4(struct _2DGfxResObjList *charResObjList);
void sub_0200AE58(struct _2DGfxResObjList *charResObjList);
void sub_0200AEB0(struct _2DGfxResObj *charResObj);
void sub_0200AED4(struct _2DGfxResObjList *charResObjList);
void sub_0200B0A8(struct _2DGfxResObj *plttResObj);
void sub_0200B0CC(struct _2DGfxResObjList *plttResObjList);
void sub_0200ADA4(struct _2DGfxResObj *charResObj);
void sub_0200B00C(struct _2DGfxResObj *plttResObj);
void sub_0200ACF0(struct _2DGfxResObj *obj);
void sub_0200AF94(struct _2DGfxResObj *obj);
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);
void sub_0200B050(struct _2DGfxResObjList *plttResObjList);
void sub_0200B0A8(struct _2DGfxResObj *plttResObj);
void sub_0200B0CC(struct _2DGfxResObjList *plttResObjList);
NNSG2dImagePaletteProxy *sub_0200B0F8(struct _2DGfxResObj *plttResObj, NNSG2dImageProxy *imageProxy);
#endif //POKEHEARTGOLD_UNK_0200ACF0_H

View File

@ -41,7 +41,7 @@ typedef struct UnkStruct_0200CF38 {
struct _2DGfxResHeader* unk_08;
struct _2DGfxResMan* unk_0C[6];
struct _2DGfxResObjList* unk_24[6];
void* unk_3C[6];
int unk_3C[6];
int unk_54;
} UnkStruct_0200CF38; // size: 0x58

View File

@ -1,6 +1,7 @@
#include "assert.h"
#include "global.h"
#include "heap.h"
#include "gf_gfx_loader.h"
#include "unk_02009D48.h"
#include "unk_020215A0.h"
#include "unk_02022588.h"
@ -15,6 +16,7 @@ void sub_0200D050(UnkStruct_0200CF38* a0);
void sub_0200D060(UnkStruct_0200CF38* a0);
void sub_0200D0B4(UnkStruct_0200CF18* a0);
void sub_0200D0D4(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1);
BOOL sub_0200D124(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, u16* a2, int a3, int a4, int a5);
UnkStruct_0200CF18* sub_0200CF18(HeapID heapId) {
UnkStruct_0200CF18* ret = AllocFromHeap(heapId, sizeof(UnkStruct_0200CF18));
@ -134,3 +136,75 @@ void sub_0200D0E4(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1) {
sub_0200D060(a1);
sub_0200D0D4(a0, a1);
}
void sub_0200D108(UnkStruct_0200CF18* a0) {
GF_ASSERT(a0->unk_004 == 0);
sub_0200D0B4(a0);
FreeToHeap(a0);
}
BOOL sub_0200D124(UnkStruct_0200CF18* a0, UnkStruct_0200CF38* a1, u16* a2, int a3, int a4, int a5) {
int i;
int r7;
int size;
struct _2DGfxResHeader* header;
void* data;
NARC* narc;
r7 = 6;
if (a0 == NULL || a1 == NULL) {
return FALSE;
}
if (a2[4] == 0xFFFF) {
r7 = 4;
}
a1->unk_54 = r7;
size = sub_0200A8FC();
a1->unk_08 = 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);
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);
size = sub_0200A96C(header);
a1->unk_0C[i] = Create2DGfxResObjMan(size, (GfGfxResType)i, a0->heapId);
}
for (i = 0; i < r7; ++i) {
header = sub_0200A900(a1->unk_08, 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);
}
switch (a3) {
case 0:
sub_0200ADE4(a1->unk_24[0]);
break;
case 1:
sub_0200AE58(a1->unk_24[0]);
break;
case 2:
default:
sub_0200AD30(a1->unk_24[0]);
break;
}
switch (a4) {
case 0:
sub_0200B050(a1->unk_24[1]);
break;
case 1:
default:
sub_0200AFD8(a1->unk_24[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]);
FreeToHeap(data);
NARC_Delete(narc);
return TRUE;
}