From c1f40826445c28c10b1ce02b61f3e30353fad0c9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 19 Feb 2024 09:47:09 -0500 Subject: [PATCH 01/17] through sub_02021910 --- asm/{unk_020215A0.s => unk_020215A0_s.s} | 488 +---------------------- include/unk_020215A0.h | 10 +- include/vram_transfer_manager.h | 2 + lib/include/nitro/gx/gx.h | 8 + main.lsf | 3 +- src/unk_020215A0.c | 209 ++++++++++ 6 files changed, 227 insertions(+), 493 deletions(-) rename asm/{unk_020215A0.s => unk_020215A0_s.s} (78%) create mode 100644 src/unk_020215A0.c diff --git a/asm/unk_020215A0.s b/asm/unk_020215A0_s.s similarity index 78% rename from asm/unk_020215A0.s rename to asm/unk_020215A0_s.s index f56965625f..06aa578951 100644 --- a/asm/unk_020215A0.s +++ b/asm/unk_020215A0_s.s @@ -2,496 +2,10 @@ .include "unk_020215A0.inc" .include "global.inc" - .bss - -_021D21F4: - .space 0x4 + .extern _021D21F4 .text - thumb_func_start sub_020215A0 -sub_020215A0: ; 0x020215A0 - ldr r1, _020215B4 ; =0x04001000 - ldr r2, [r1] - ldr r1, _020215B8 ; =0x00300010 - lsl r3, r1, #0x16 - ldr r3, [r3] - and r2, r1 - and r1, r3 - ldr r3, _020215BC ; =sub_020215C0 - bx r3 - nop -_020215B4: .word 0x04001000 -_020215B8: .word 0x00300010 -_020215BC: .word sub_020215C0 - thumb_func_end sub_020215A0 - - thumb_func_start sub_020215C0 -sub_020215C0: ; 0x020215C0 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r5, r0, #0 - ldr r0, _02021680 ; =_021D21F4 - str r1, [sp] - ldr r0, [r0] - str r2, [sp, #4] - cmp r0, #0 - bne _0202167A - ldr r0, [r5, #0xc] - mov r1, #0x3c - bl AllocFromHeap - add r1, r0, #0 - ldr r0, _02021680 ; =_021D21F4 - mov r2, #0x3c - str r1, [r0] - mov r0, #0 - bl MIi_CpuClear32 - ldr r1, _02021680 ; =_021D21F4 - ldr r2, [r5] - ldr r0, [r1] - str r2, [r0, #4] - ldr r1, [r1] - ldr r0, [r5, #0xc] - ldr r2, [r1, #4] - mov r1, #0x54 - mul r1, r2 - bl AllocFromHeap - ldr r7, _02021680 ; =_021D21F4 - mov r6, #0 - ldr r1, [r7] - str r0, [r1] - ldr r0, [r5] - cmp r0, #0 - ble _02021622 - add r4, r6, #0 -_0202160E: - ldr r0, [r7] - ldr r0, [r0] - add r0, r0, r4 - bl sub_02021C08 - ldr r0, [r5] - add r6, r6, #1 - add r4, #0x54 - cmp r6, r0 - blt _0202160E -_02021622: - ldr r0, [sp] - bl sub_02022448 - ldr r1, _02021680 ; =_021D21F4 - ldr r1, [r1] - str r0, [r1, #0x2c] - ldr r0, [sp, #4] - bl sub_02022448 - ldr r2, _02021680 ; =_021D21F4 - mov r3, #1 - ldr r1, [r2] - lsl r3, r3, #0x1a - str r0, [r1, #0x30] - ldr r0, [r3] - ldr r1, _02021684 ; =0xFFCFFFEF - add r4, r0, #0 - ldr r0, [sp] - and r4, r1 - orr r0, r4 - str r0, [r3] - ldr r3, _02021688 ; =0x04001000 - ldr r0, [r3] - and r1, r0 - ldr r0, [sp, #4] - orr r0, r1 - str r0, [r3] - ldr r1, [r2] - ldr r0, [r5, #4] - ldr r1, [r1, #0x2c] - bl sub_020224A8 - ldr r1, _02021680 ; =_021D21F4 - add r4, r0, #0 - ldr r1, [r1] - ldr r0, [r5, #8] - ldr r1, [r1, #0x30] - bl sub_020224A8 - add r1, r0, #0 - ldr r2, [r5, #0xc] - add r0, r4, #0 - bl sub_020221D0 -_0202167A: - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - nop -_02021680: .word _021D21F4 -_02021684: .word 0xFFCFFFEF -_02021688: .word 0x04001000 - thumb_func_end sub_020215C0 - - thumb_func_start sub_0202168C -sub_0202168C: ; 0x0202168C - push {r3, lr} - ldr r0, _020216C4 ; =_021D21F4 - ldr r0, [r0] - cmp r0, #0 - beq _020216C2 - ldr r0, [r0, #0x34] - bl sub_02022238 - ldr r0, _020216C4 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x38] - bl sub_02022238 - bl sub_020218D4 - ldr r0, _020216C4 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0] - bl FreeToHeap - ldr r0, _020216C4 ; =_021D21F4 - ldr r0, [r0] - bl FreeToHeap - ldr r0, _020216C4 ; =_021D21F4 - mov r1, #0 - str r1, [r0] -_020216C2: - pop {r3, pc} - .balign 4, 0 -_020216C4: .word _021D21F4 - thumb_func_end sub_0202168C - - thumb_func_start sub_020216C8 -sub_020216C8: ; 0x020216C8 - push {r3, lr} - ldr r0, _020216F0 ; =_021D21F4 - mov r2, #0 - ldr r1, [r0] - str r2, [r1, #0xc] - ldr r1, [r0] - str r2, [r1, #0x10] - ldr r0, [r0] - ldr r0, [r0, #0x34] - bl sub_02022278 - ldr r0, _020216F0 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x38] - bl sub_02022278 - bl sub_02022060 - pop {r3, pc} - nop -_020216F0: .word _021D21F4 - thumb_func_end sub_020216C8 - - thumb_func_start sub_020216F4 -sub_020216F4: ; 0x020216F4 - push {r3, r4, lr} - sub sp, #0xc - add r4, r0, #0 - add r3, r1, #0 - cmp r2, #1 - add r0, sp, #4 - bne _0202172A - str r0, [sp] - ldr r0, _02021754 ; =_021D21F4 - add r2, r3, #0 - ldr r0, [r0] - add r1, r4, #0 - ldr r0, [r0, #0x1c] - add r3, sp, #8 - bl sub_0202256C - ldr r3, [sp, #4] - cmp r3, #0 - ble _02021750 - mov r2, #0 - str r2, [sp] - ldr r1, [sp, #8] - mov r0, #1 - bl sub_02021EC0 - add sp, #0xc - pop {r3, r4, pc} -_0202172A: - str r0, [sp] - ldr r0, _02021754 ; =_021D21F4 - add r2, r3, #0 - ldr r0, [r0] - add r1, r4, #0 - ldr r0, [r0, #0x20] - add r3, sp, #8 - bl sub_0202256C - ldr r0, [sp, #4] - cmp r0, #0 - ble _02021750 - str r0, [sp] - mov r1, #0 - ldr r2, [sp, #8] - mov r0, #2 - add r3, r1, #0 - bl sub_02021EC0 -_02021750: - add sp, #0xc - pop {r3, r4, pc} - .balign 4, 0 -_02021754: .word _021D21F4 - thumb_func_end sub_020216F4 - - thumb_func_start sub_02021758 -sub_02021758: ; 0x02021758 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, [r5, #8] - bl sub_0202180C - cmp r0, #1 - bne _0202176A - bl GF_AssertFail -_0202176A: - bl sub_02022024 - add r4, r0, #0 - bne _0202177A - bl GF_AssertFail - mov r0, #0 - pop {r3, r4, r5, pc} -_0202177A: - add r0, r5, #0 - add r1, r4, #0 - bl sub_02021C2C - cmp r0, #0 - bne _0202178A - mov r0, #0 - pop {r3, r4, r5, pc} -_0202178A: - add r0, r4, #0 - bl sub_02021C9C - cmp r0, #0 - bne _0202179E - ldr r0, [r4, #0xc] - bl sub_02021884 - mov r0, #0 - pop {r3, r4, r5, pc} -_0202179E: - ldr r0, _020217AC ; =_021D21F4 - ldr r1, [r0] - ldr r0, [r1, #8] - add r0, r0, #1 - str r0, [r1, #8] - mov r0, #1 - pop {r3, r4, r5, pc} - .balign 4, 0 -_020217AC: .word _021D21F4 - thumb_func_end sub_02021758 - - thumb_func_start sub_020217B0 -sub_020217B0: ; 0x020217B0 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r0, [r5, #8] - bl sub_0202180C - cmp r0, #1 - bne _020217C2 - bl GF_AssertFail -_020217C2: - bl sub_02022024 - add r4, r0, #0 - bne _020217D2 - bl GF_AssertFail - mov r0, #0 - pop {r3, r4, r5, pc} -_020217D2: - add r0, r5, #0 - add r1, r4, #0 - bl sub_02021C2C - cmp r0, #0 - bne _020217E2 - mov r0, #0 - pop {r3, r4, r5, pc} -_020217E2: - mov r0, #1 - str r0, [r4, #0x40] - add r0, r4, #0 - bl sub_02021C9C - cmp r0, #0 - bne _020217FA - ldr r0, [r4, #0xc] - bl sub_02021884 - mov r0, #0 - pop {r3, r4, r5, pc} -_020217FA: - ldr r0, _02021808 ; =_021D21F4 - ldr r1, [r0] - ldr r0, [r1, #8] - add r0, r0, #1 - str r0, [r1, #8] - mov r0, #1 - pop {r3, r4, r5, pc} - .balign 4, 0 -_02021808: .word _021D21F4 - thumb_func_end sub_020217B0 - - thumb_func_start sub_0202180C -sub_0202180C: ; 0x0202180C - push {r3, r4} - ldr r1, _02021838 ; =_021D21F4 - mov r2, #0 - ldr r4, [r1] - ldr r1, [r4, #4] - cmp r1, #0 - ble _02021832 - ldr r3, [r4] -_0202181C: - ldr r1, [r3, #0xc] - cmp r0, r1 - bne _02021828 - mov r0, #1 - pop {r3, r4} - bx lr -_02021828: - ldr r1, [r4, #4] - add r2, r2, #1 - add r3, #0x54 - cmp r2, r1 - blt _0202181C -_02021832: - mov r0, #0 - pop {r3, r4} - bx lr - .balign 4, 0 -_02021838: .word _021D21F4 - thumb_func_end sub_0202180C - - thumb_func_start sub_0202183C -sub_0202183C: ; 0x0202183C - push {r3, r4, r5, lr} - add r4, r0, #0 - add r5, r1, #0 - bne _02021848 - bl GF_AssertFail -_02021848: - add r0, r4, #0 - bl sub_02021D70 - add r4, r0, #0 - bne _02021856 - bl GF_AssertFail -_02021856: - str r5, [r4] - ldr r1, [r4, #4] - mov r0, #1 - tst r0, r1 - beq _0202186C - ldr r1, [r4, #0x34] - ldr r2, [r5, #0x14] - ldr r3, [r5, #0x10] - mov r0, #0x13 - bl GF_CreateNewVramTransferTask -_0202186C: - ldr r1, [r4, #4] - mov r0, #2 - tst r0, r1 - beq _02021880 - ldr r1, [r4, #0x38] - ldr r2, [r5, #0x14] - ldr r3, [r5, #0x10] - mov r0, #0x23 - bl GF_CreateNewVramTransferTask -_02021880: - pop {r3, r4, r5, pc} - .balign 4, 0 - thumb_func_end sub_0202183C - - thumb_func_start sub_02021884 -sub_02021884: ; 0x02021884 - push {r3, r4, r5, r6, r7, lr} - add r6, r0, #0 - mov r5, #1 - mov r7, #0 -_0202188C: - add r0, r6, #0 - bl sub_02021D70 - add r4, r0, #0 - bne _0202189A - bl GF_AssertFail -_0202189A: - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #4 - bne _020218AE - add r0, r4, #0 - add r0, #0x10 - bl sub_02021A50 - b _020218B0 -_020218AE: - add r5, r7, #0 -_020218B0: - cmp r5, #0 - bne _0202188C - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - beq _020218CE - add r0, r4, #0 - bl sub_02021D58 - ldr r0, _020218D0 ; =_021D21F4 - ldr r1, [r0] - ldr r0, [r1, #8] - sub r0, r0, #1 - str r0, [r1, #8] -_020218CE: - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_020218D0: .word _021D21F4 - thumb_func_end sub_02021884 - - thumb_func_start sub_020218D4 -sub_020218D4: ; 0x020218D4 - push {r4, r5, r6, lr} - ldr r6, _0202190C ; =_021D21F4 - mov r4, #0 - ldr r1, [r6] - ldr r0, [r1, #4] - cmp r0, #0 - ble _0202190A - add r5, r4, #0 -_020218E4: - ldr r1, [r1] - add r0, r1, r5 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - beq _020218FE - add r0, r1, r5 - bl sub_02021D58 - ldr r1, [r6] - ldr r0, [r1, #8] - sub r0, r0, #1 - str r0, [r1, #8] -_020218FE: - ldr r1, [r6] - add r4, r4, #1 - ldr r0, [r1, #4] - add r5, #0x54 - cmp r4, r0 - blt _020218E4 -_0202190A: - pop {r4, r5, r6, pc} - .balign 4, 0 -_0202190C: .word _021D21F4 - thumb_func_end sub_020218D4 - - thumb_func_start sub_02021910 -sub_02021910: ; 0x02021910 - push {r4, lr} - bl sub_02021D70 - add r4, r0, #0 - bne _0202191E - bl GF_AssertFail -_0202191E: - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _0202192C - mov r0, #0 - pop {r4, pc} -_0202192C: - add r4, #0x10 - add r0, r4, #0 - pop {r4, pc} - .balign 4, 0 - thumb_func_end sub_02021910 - thumb_func_start sub_02021934 sub_02021934: ; 0x02021934 push {r3, r4, r5, lr} diff --git a/include/unk_020215A0.h b/include/unk_020215A0.h index 17cee5800c..1774a768fb 100644 --- a/include/unk_020215A0.h +++ b/include/unk_020215A0.h @@ -4,7 +4,7 @@ #include "heap.h" typedef struct UnkStruct_020215A0 { - u32 unk_00; + int unk_00; u32 unk_04; u32 unk_08; HeapID heapId; @@ -21,13 +21,13 @@ void sub_020215A0(UnkStruct_020215A0 *template); void sub_020215C0(UnkStruct_020215A0 *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub); void sub_0202168C(void); void sub_020216C8(void); -void sub_020216F4(u32, u32, u32); +void sub_020216F4(u32 a0, u32 a1, u32 a2); BOOL sub_02021758(const UnkStruct_02021758 *a0); BOOL sub_020217B0(const UnkStruct_02021758 *a0); void sub_0202183C(int id, NNSG2dCharacterData *charData); -void sub_02021884(u32); -NNSG2dImageProxy *sub_02021910(int resID); -NNSG2dImageProxy *sub_02021934(int resID, u32 size); +void sub_02021884(int resId); +NNSG2dImageProxy *sub_02021910(int resId); +NNSG2dImageProxy *sub_02021934(int resId, u32 size); NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn); void sub_02021A50(const NNSG2dImageProxy *proxy); diff --git a/include/vram_transfer_manager.h b/include/vram_transfer_manager.h index 43e44149bb..ed8412c316 100644 --- a/include/vram_transfer_manager.h +++ b/include/vram_transfer_manager.h @@ -1,6 +1,8 @@ #ifndef POKEHEARTGOLD_VRAM_TRANSFER_MANAGER_H #define POKEHEARTGOLD_VRAM_TRANSFER_MANAGER_H +#include "global.h" + typedef struct { u32 nMax; u32 nCur; diff --git a/lib/include/nitro/gx/gx.h b/lib/include/nitro/gx/gx.h index 59f8bc9b0f..385cf43cbe 100644 --- a/lib/include/nitro/gx/gx.h +++ b/lib/include/nitro/gx/gx.h @@ -178,4 +178,12 @@ static inline void GXS_SetOBJVRamModeChar(GXOBJVRamModeChar mode) { reg_GXS_DB_DISPCNT = (u32)(reg_GXS_DB_DISPCNT & ~(REG_GXS_DB_DISPCNT_EXOBJ_CH_MASK | REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK) | mode); } +static inline GXOBJVRamModeChar GX_GetOBJVRamModeChar(void) { + return (GXOBJVRamModeChar)(reg_GX_DISPCNT & (REG_GX_DISPCNT_EXOBJ_CH_MASK | REG_GX_DISPCNT_OBJMAP_CH_MASK)); +} + +static inline GXOBJVRamModeChar GXS_GetOBJVRamModeChar(void) { + return (GXOBJVRamModeChar)(reg_GXS_DB_DISPCNT & (REG_GXS_DB_DISPCNT_EXOBJ_CH_MASK | REG_GXS_DB_DISPCNT_OBJMAP_CH_MASK)); +} + #endif //NITRO_GX_GX_H_ diff --git a/main.lsf b/main.lsf index 049e6f6193..bf9c3aff76 100644 --- a/main.lsf +++ b/main.lsf @@ -75,7 +75,8 @@ Static main Object src/ascii_util.o Object asm/unk_02020B8C.o Object asm/unk_020210A0.o - Object asm/unk_020215A0.o + Object src/unk_020215A0.o + Object asm/unk_020215A0_s.o Object asm/unk_02022588.o Object src/gf_gfx_planes.o Object src/camera.o diff --git a/src/unk_020215A0.c b/src/unk_020215A0.c new file mode 100644 index 0000000000..0d23fa658d --- /dev/null +++ b/src/unk_020215A0.c @@ -0,0 +1,209 @@ +#include "global.h" +#include "unk_020215A0.h" +#include "vram_transfer_manager.h" + +typedef struct UnkStruct_021D21F4_sub { + NNSG2dCharacterData *unk_00; + u32 unk_04; // flag + u8 filler_08[4]; + int unk_0C; + NNSG2dImageProxy unk_10; + u32 unk_34; + u32 unk_38; + u8 unk_3C; + int unk_40; + u8 filler_44[16]; +} UnkStruct_021D21F4_sub; // size: 84 + +typedef struct UnkStruct_021D21F4_sub2 { + u8 unk_00[8]; +} UnkStruct_021D21F4_sub2; + +struct UnkStruct_021D21F4 { + UnkStruct_021D21F4_sub *unk_00; + int unk_04; + int unk_08; + int unk_0C; + int unk_10; + u8 filler_14[8]; + int unk_1C; + int unk_20; + int unk_24; + int unk_28; + u32 unk_2C; + u32 unk_30; + UnkStruct_021D21F4_sub2 *unk_34; + UnkStruct_021D21F4_sub2 *unk_38; +} *_021D21F4; + +BOOL sub_0202180C(int resId); +void sub_020218D4(void); +void sub_02021C08(UnkStruct_021D21F4_sub *a0); +BOOL sub_02021C2C(const UnkStruct_02021758 *a0, UnkStruct_021D21F4_sub *a1); +BOOL sub_02021C9C(UnkStruct_021D21F4_sub *a0); +void sub_02021D58(UnkStruct_021D21F4_sub *a0); +UnkStruct_021D21F4_sub *sub_02021D70(int resId); +void sub_02021EC0(int a0, int a1, int a2, int a3, int a4); +UnkStruct_021D21F4_sub *sub_02022024(void); +void sub_02022060(void); +void sub_020221D0(int a0, int a1, int HeapID); +void sub_02022238(UnkStruct_021D21F4_sub2 *a0); +void sub_02022278(UnkStruct_021D21F4_sub2 *a0); +int sub_02022448(GXOBJVRamModeChar mode); +int sub_020224A8(int a0, int a1); +void sub_0202256C(int a0, int a1, int a2, int *a3, int *a4); + +void sub_020215A0(UnkStruct_020215A0 *template) { + sub_020215C0(template, GX_GetOBJVRamModeChar(), GXS_GetOBJVRamModeChar()); +} + +void sub_020215C0(UnkStruct_020215A0 *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub) { + if (_021D21F4 == NULL) { + _021D21F4 = AllocFromHeap(template->heapId, sizeof(struct UnkStruct_021D21F4)); + MI_CpuClear32(_021D21F4, sizeof(struct UnkStruct_021D21F4)); + _021D21F4->unk_04 = template->unk_00; + _021D21F4->unk_00 = (UnkStruct_021D21F4_sub *)AllocFromHeap(template->heapId, sizeof(UnkStruct_021D21F4_sub) * _021D21F4->unk_04); + for (int i = 0; i < template->unk_00; ++i) { + sub_02021C08(&_021D21F4->unk_00[i]); + } + _021D21F4->unk_2C = sub_02022448(modeMain); + _021D21F4->unk_30 = sub_02022448(modeSub); + GX_SetOBJVRamModeChar(modeMain); + GXS_SetOBJVRamModeChar(modeSub); + int r4 = sub_020224A8(template->unk_04, _021D21F4->unk_2C); + int r0 = sub_020224A8(template->unk_08, _021D21F4->unk_30); + sub_020221D0(r4, r0, template->heapId); + } +} + +void sub_0202168C(void) { + if (_021D21F4 != NULL) { + sub_02022238(_021D21F4->unk_34); + sub_02022238(_021D21F4->unk_38); + sub_020218D4(); + FreeToHeap(_021D21F4->unk_00); + FreeToHeap(_021D21F4); + _021D21F4 = NULL; + } +} + +void sub_020216C8(void) { + _021D21F4->unk_0C = 0; + _021D21F4->unk_10 = 0; + sub_02022278(_021D21F4->unk_34); + sub_02022278(_021D21F4->unk_38); + sub_02022060(); +} + +void sub_020216F4(u32 a0, u32 a1, u32 a2) { + int sp8; + int sp4; + if (a2 == 1) { + sub_0202256C(_021D21F4->unk_1C, a0, a1, &sp8, &sp4); + if (sp4 > 0) { + sub_02021EC0(1, sp8, 0, sp4, 0); + } + } else { + sub_0202256C(_021D21F4->unk_20, a0, a1, &sp8, &sp4); + if (sp4 > 0) { + sub_02021EC0(2, 0, sp8, 0, sp4); + } + } +} + +BOOL sub_02021758(const UnkStruct_02021758 *a0) { + GF_ASSERT(sub_0202180C(a0->id) != 1); + UnkStruct_021D21F4_sub *sub = sub_02022024(); + if (sub == NULL) { + GF_ASSERT(FALSE); + return FALSE; + } + if (!sub_02021C2C(a0, sub)) { + return FALSE; + } + if (!sub_02021C9C(sub)) { + sub_02021884(sub->unk_0C); + return FALSE; + } + ++_021D21F4->unk_08; + return TRUE; +} + +BOOL sub_020217B0(const UnkStruct_02021758 *a0) { + GF_ASSERT(sub_0202180C(a0->id) != 1); + UnkStruct_021D21F4_sub *sub = sub_02022024(); + if (sub == NULL) { + GF_ASSERT(FALSE); + return FALSE; + } + if (!sub_02021C2C(a0, sub)) { + return FALSE; + } + sub->unk_40 = 1; + if (!sub_02021C9C(sub)) { + sub_02021884(sub->unk_0C); + return FALSE; + } + ++_021D21F4->unk_08; + return TRUE; +} + +BOOL sub_0202180C(int resId) { + for (int i = 0; i < _021D21F4->unk_04; ++i) { + if (resId == _021D21F4->unk_00[i].unk_0C) { + return TRUE; + } + } + + return FALSE; +} + +void sub_0202183C(int id, NNSG2dCharacterData *charData) { + GF_ASSERT(charData != NULL); + UnkStruct_021D21F4_sub *sub = sub_02021D70(id); + GF_ASSERT(sub != NULL); + sub->unk_00 = charData; + if (sub->unk_04 & 1) { + GF_CreateNewVramTransferTask(NNS_GFD_DST_2D_OBJ_CHAR_MAIN, sub->unk_34, charData->pRawData, charData->szByte); + } + if (sub->unk_04 & 2) { + GF_CreateNewVramTransferTask(NNS_GFD_DST_2D_OBJ_CHAR_SUB, sub->unk_38, charData->pRawData, charData->szByte); + } +} + +void sub_02021884(int resId) { + UnkStruct_021D21F4_sub *sub; + BOOL r5 = TRUE; + do { + sub = sub_02021D70(resId); + GF_ASSERT(sub != NULL); + if (sub->unk_3C == 4) { + sub_02021A50(&sub->unk_10); + } else { + r5 = FALSE; + } + } while (r5); + if (sub->unk_3C != 0) { + sub_02021D58(sub); + --_021D21F4->unk_08; + } +} + +void sub_020218D4(void) { + for (int i = 0; i < _021D21F4->unk_04; ++i) { + if (_021D21F4->unk_00[i].unk_3C != 0) { + sub_02021D58(&_021D21F4->unk_00[i]); + --_021D21F4->unk_08; + } + } +} + +NNSG2dImageProxy *sub_02021910(int resId) { + UnkStruct_021D21F4_sub *sub = sub_02021D70(resId); + GF_ASSERT(sub != NULL); + if (sub->unk_3C == 0) { + return NULL; + } + + return &sub->unk_10; +} From 5286b0f165be6b8660ea90d9c1aa75221fe347ef Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 19 Feb 2024 11:10:08 -0500 Subject: [PATCH 02/17] through sub_02021C9C --- asm/unk_020215A0_s.s | 505 +----------------- include/unk_020215A0.h | 13 + .../nnsys/g2d/fmt/g2d_Character_data.h | 2 + lib/include/nnsys/g2d/g2d_Image.h | 1 + src/unk_020215A0.c | 210 +++++++- 5 files changed, 220 insertions(+), 511 deletions(-) diff --git a/asm/unk_020215A0_s.s b/asm/unk_020215A0_s.s index 06aa578951..b39c3eb2d4 100644 --- a/asm/unk_020215A0_s.s +++ b/asm/unk_020215A0_s.s @@ -3,513 +3,10 @@ .include "global.inc" .extern _021D21F4 + .extern sub_02021C08 .text - thumb_func_start sub_02021934 -sub_02021934: ; 0x02021934 - push {r3, r4, r5, lr} - sub sp, #0x18 - add r5, r1, #0 - bl sub_02021D70 - add r4, r0, #0 - bne _02021946 - bl GF_AssertFail -_02021946: - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #0 - bne _02021956 - add sp, #0x18 - mov r0, #0 - pop {r3, r4, r5, pc} -_02021956: - add r0, sp, #0xc - str r0, [sp] - add r0, sp, #8 - str r0, [sp, #4] - ldr r0, [r4, #4] - add r1, sp, #0x14 - add r2, sp, #0x10 - add r3, r5, #0 - bl sub_02021DE4 - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #3 - bne _0202197A - add sp, #0x18 - mov r0, #0 - pop {r3, r4, r5, pc} -_0202197A: - add r0, r4, #0 - mov r1, #3 - add r0, #0x3c - strb r1, [r0] - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - add r0, r4, #0 - bl sub_02021E90 - mov r0, #1 - str r0, [r4, #0x48] - ldr r0, [sp, #0xc] - str r0, [r4, #0x4c] - ldr r0, [sp, #8] - str r0, [r4, #0x50] - add r0, r4, #0 - bl sub_02021FB0 - ldr r0, [sp, #8] - str r0, [sp] - ldr r0, [r4, #4] - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - ldr r3, [sp, #0xc] - bl sub_02021EC0 - add r4, #0x10 - add r0, r4, #0 - add sp, #0x18 - pop {r3, r4, r5, pc} - .balign 4, 0 - thumb_func_end sub_02021934 - - thumb_func_start sub_020219B8 -sub_020219B8: ; 0x020219B8 - push {r3, r4, r5, lr} - sub sp, #0x18 - bl sub_02021C50 - add r4, r0, #0 - bne _020219C8 - bl GF_AssertFail -_020219C8: - bl sub_02022024 - add r5, r0, #0 - bne _020219D4 - bl GF_AssertFail -_020219D4: - add r0, r4, #0 - add r0, #0x3c - ldrb r0, [r0] - cmp r0, #3 - beq _020219E4 - add sp, #0x18 - mov r0, #0 - pop {r3, r4, r5, pc} -_020219E4: - add r3, r5, #0 - mov r2, #0xa -_020219E8: - ldmia r4!, {r0, r1} - stmia r3!, {r0, r1} - sub r2, r2, #1 - bne _020219E8 - ldr r0, [r4] - mov r1, #4 - str r0, [r3] - add r0, r5, #0 - add r0, #0x3c - strb r1, [r0] - ldr r0, [r5, #4] - mov r1, #1 - tst r1, r0 - beq _02021A08 - ldr r3, [r5, #0x4c] - b _02021A0A -_02021A08: - ldr r3, [r5, #0x50] -_02021A0A: - add r1, sp, #0xc - str r1, [sp] - add r1, sp, #8 - str r1, [sp, #4] - add r1, sp, #0x14 - add r2, sp, #0x10 - bl sub_02021DE4 - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - add r0, r5, #0 - bl sub_02021E90 - mov r0, #1 - str r0, [r5, #0x48] - ldr r0, [sp, #0xc] - str r0, [r5, #0x4c] - ldr r0, [sp, #8] - str r0, [r5, #0x50] - add r0, r5, #0 - bl sub_02021FB0 - ldr r0, [sp, #8] - str r0, [sp] - ldr r0, [r5, #4] - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - ldr r3, [sp, #0xc] - bl sub_02021EC0 - add r5, #0x10 - add r0, r5, #0 - add sp, #0x18 - pop {r3, r4, r5, pc} - .balign 4, 0 - thumb_func_end sub_020219B8 - - thumb_func_start sub_02021A50 -sub_02021A50: ; 0x02021A50 - push {r4, r5, r6, lr} - ldr r2, _02021AC4 ; =_021D21F4 - mov r1, #0 - ldr r5, [r2] - ldr r4, [r5, #4] - cmp r4, #0 - ble _02021A8E - ldr r2, [r5] - add r3, r1, #0 -_02021A62: - add r6, r2, #0 - add r6, #0x3c - ldrb r6, [r6] - cmp r6, #3 - beq _02021A78 - ldr r6, [r5] - add r6, r6, r3 - add r6, #0x3c - ldrb r6, [r6] - cmp r6, #4 - bne _02021A82 -_02021A78: - ldr r6, [r5] - add r6, r6, r3 - add r6, #0x10 - cmp r6, r0 - beq _02021A8E -_02021A82: - ldr r6, [r5, #4] - add r1, r1, #1 - add r2, #0x54 - add r3, #0x54 - cmp r1, r6 - blt _02021A62 -_02021A8E: - cmp r1, r4 - bge _02021AC2 - mov r0, #0x54 - add r4, r1, #0 - mul r4, r0 - ldr r0, [r5] - add r0, r0, r4 - bl sub_020223C4 - ldr r0, _02021AC4 ; =_021D21F4 - ldr r1, [r0] - ldr r2, [r1] - add r2, #0x3c - ldrb r1, [r2, r4] - cmp r1, #3 - bne _02021AB4 - mov r0, #2 - strb r0, [r2, r4] - pop {r4, r5, r6, pc} -_02021AB4: - mov r1, #0 - strb r1, [r2, r4] - ldr r0, [r0] - ldr r0, [r0] - add r0, r0, r4 - bl sub_02021C08 -_02021AC2: - pop {r4, r5, r6, pc} - .balign 4, 0 -_02021AC4: .word _021D21F4 - thumb_func_end sub_02021A50 - - thumb_func_start sub_02021AC8 -sub_02021AC8: ; 0x02021AC8 - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x18 - add r6, r0, #0 - add r5, r2, #0 - add r4, r3, #0 - cmp r1, #0 - bne _02021B02 - add r1, r5, #0 - add r2, sp, #0x14 - add r3, sp, #0x10 - bl sub_020224C0 - add r7, r0, #0 - beq _02021B52 - add r0, r6, #0 - add r1, r5, #0 - bl sub_02022510 - strh r5, [r4, #8] - str r6, [r4] - cmp r5, #1 - bne _02021AF8 - ldr r0, [sp, #0x14] - b _02021AFA -_02021AF8: - ldr r0, [sp, #0x10] -_02021AFA: - str r0, [r4, #4] - mov r0, #0 - strh r0, [r4, #0xa] - b _02021B52 -_02021B02: - add r0, sp, #0xc - str r0, [sp] - add r0, sp, #8 - str r0, [sp, #4] - add r0, r5, #0 - add r1, sp, #0x14 - add r2, sp, #0x10 - add r3, r6, #0 - bl sub_02021DE4 - add r7, r0, #0 - beq _02021B52 - ldr r0, [sp, #8] - str r0, [sp] - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - ldr r3, [sp, #0xc] - add r0, r5, #0 - bl sub_02021EC0 - strh r5, [r4, #8] - cmp r5, #1 - bne _02021B3E - ldr r0, [sp, #0xc] - str r0, [r4] - ldr r0, _02021B58 ; =_021D21F4 - ldr r1, [sp, #0x14] - ldr r0, [r0] - ldr r0, [r0, #0x1c] - b _02021B4A -_02021B3E: - ldr r0, [sp, #8] - str r0, [r4] - ldr r0, _02021B58 ; =_021D21F4 - ldr r1, [sp, #0x10] - ldr r0, [r0] - ldr r0, [r0, #0x20] -_02021B4A: - add r0, r1, r0 - str r0, [r4, #4] - mov r0, #1 - strh r0, [r4, #0xa] -_02021B52: - add r0, r7, #0 - add sp, #0x18 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_02021B58: .word _021D21F4 - thumb_func_end sub_02021AC8 - - thumb_func_start sub_02021B5C -sub_02021B5C: ; 0x02021B5C - push {r3, r4, r5, lr} - add r4, r0, #0 - ldrh r0, [r4, #0xa] - cmp r0, #0 - beq _02021BCA - ldrh r1, [r4, #8] - mov r0, #1 - tst r0, r1 - beq _02021B98 - ldr r1, _02021BCC ; =_021D21F4 - ldr r0, [r4] - ldr r1, [r1] - ldr r1, [r1, #0x2c] - bl sub_020224A8 - add r5, r0, #0 - ldr r0, _02021BCC ; =_021D21F4 - ldr r1, [r4, #4] - ldr r2, [r0] - ldr r0, [r2, #0x1c] - sub r0, r1, r0 - ldr r1, [r2, #0x2c] - bl sub_020224A8 - ldr r2, _02021BCC ; =_021D21F4 - add r1, r5, #0 - ldr r2, [r2] - ldr r2, [r2, #0x34] - bl sub_02022374 -_02021B98: - ldrh r1, [r4, #8] - mov r0, #2 - tst r0, r1 - beq _02021BCA - ldr r1, _02021BCC ; =_021D21F4 - ldr r0, [r4] - ldr r1, [r1] - ldr r1, [r1, #0x30] - bl sub_020224A8 - add r5, r0, #0 - ldr r0, _02021BCC ; =_021D21F4 - ldr r1, [r4, #4] - ldr r2, [r0] - ldr r0, [r2, #0x20] - sub r0, r1, r0 - ldr r1, [r2, #0x30] - bl sub_020224A8 - ldr r2, _02021BCC ; =_021D21F4 - add r1, r5, #0 - ldr r2, [r2] - ldr r2, [r2, #0x38] - bl sub_02022374 -_02021BCA: - pop {r3, r4, r5, pc} - .balign 4, 0 -_02021BCC: .word _021D21F4 - thumb_func_end sub_02021B5C - - thumb_func_start sub_02021BD0 -sub_02021BD0: ; 0x02021BD0 - push {r3, lr} - ldr r0, _02021BE8 ; =_021D21F4 - ldr r0, [r0] - cmp r0, #0 - bne _02021BDE - bl GF_AssertFail -_02021BDE: - ldr r1, _02021BE8 ; =_021D21F4 - mov r2, #0 - ldr r0, [r1] - str r2, [r1] - pop {r3, pc} - .balign 4, 0 -_02021BE8: .word _021D21F4 - thumb_func_end sub_02021BD0 - - thumb_func_start sub_02021BEC -sub_02021BEC: ; 0x02021BEC - push {r4, lr} - add r4, r0, #0 - ldr r0, _02021C04 ; =_021D21F4 - ldr r0, [r0] - cmp r0, #0 - beq _02021BFC - bl GF_AssertFail -_02021BFC: - ldr r0, _02021C04 ; =_021D21F4 - str r4, [r0] - pop {r4, pc} - nop -_02021C04: .word _021D21F4 - thumb_func_end sub_02021BEC - - thumb_func_start sub_02021C08 -sub_02021C08: ; 0x02021C08 - mov r2, #0 - str r2, [r0] - str r2, [r0, #4] - strb r2, [r0, #8] - sub r1, r2, #1 - str r1, [r0, #0xc] - str r2, [r0, #0x34] - add r1, r0, #0 - str r2, [r0, #0x38] - add r1, #0x3c - strb r2, [r1] - str r2, [r0, #0x40] - ldr r3, _02021C28 ; =NNS_G2dInitImageProxy - add r0, #0x10 - bx r3 - nop -_02021C28: .word NNS_G2dInitImageProxy - thumb_func_end sub_02021C08 - - thumb_func_start sub_02021C2C -sub_02021C2C: ; 0x02021C2C - ldr r2, [r0] - str r2, [r1] - ldr r2, [r0, #8] - str r2, [r1, #0xc] - ldr r2, [r0, #4] - str r2, [r1, #4] - ldr r2, [r1] - ldr r2, [r2, #0xc] - lsr r2, r2, #8 - strb r2, [r1, #8] - ldr r0, [r0, #0xc] - str r0, [r1, #0x44] - mov r0, #0 - str r0, [r1, #0x48] - str r0, [r1, #0x4c] - str r0, [r1, #0x50] - mov r0, #1 - bx lr - thumb_func_end sub_02021C2C - - thumb_func_start sub_02021C50 -sub_02021C50: ; 0x02021C50 - push {r3, r4, r5, r6} - ldr r2, _02021C98 ; =_021D21F4 - mov r1, #0 - ldr r5, [r2] - ldr r4, [r5, #4] - cmp r4, #0 - ble _02021C82 - ldr r2, [r5] - add r3, r1, #0 -_02021C62: - add r6, r2, #0 - add r6, #0x3c - ldrb r6, [r6] - cmp r6, #0 - beq _02021C76 - ldr r6, [r5] - add r6, r6, r3 - add r6, #0x10 - cmp r6, r0 - beq _02021C82 -_02021C76: - ldr r6, [r5, #4] - add r1, r1, #1 - add r2, #0x54 - add r3, #0x54 - cmp r1, r6 - blt _02021C62 -_02021C82: - cmp r1, r4 - blt _02021C8C - mov r0, #0 - pop {r3, r4, r5, r6} - bx lr -_02021C8C: - mov r0, #0x54 - ldr r2, [r5] - mul r0, r1 - add r0, r2, r0 - pop {r3, r4, r5, r6} - bx lr - .balign 4, 0 -_02021C98: .word _021D21F4 - thumb_func_end sub_02021C50 - - thumb_func_start sub_02021C9C -sub_02021C9C: ; 0x02021C9C - push {r3, lr} - ldrb r1, [r0, #8] - mov r2, #1 - cmp r1, #0 - beq _02021CAE - mov r1, #2 - add r0, #0x3c - strb r1, [r0] - b _02021CC8 -_02021CAE: - add r1, r0, #0 - add r1, #0x3c - strb r2, [r1] - ldr r1, [r0, #0x44] - cmp r1, #0 - bne _02021CC2 - bl sub_02021CCC - add r2, r0, #0 - b _02021CC8 -_02021CC2: - bl sub_02021D00 - add r2, r0, #0 -_02021CC8: - add r0, r2, #0 - pop {r3, pc} - thumb_func_end sub_02021C9C - thumb_func_start sub_02021CCC sub_02021CCC: ; 0x02021CCC push {r3, r4, r5, lr} diff --git a/include/unk_020215A0.h b/include/unk_020215A0.h index 1774a768fb..31c40a1fee 100644 --- a/include/unk_020215A0.h +++ b/include/unk_020215A0.h @@ -17,6 +17,15 @@ typedef struct UnkStruct_02021758 { BOOL unk_0C; } UnkStruct_02021758; +typedef struct UnkStruct_02021AC8 { + u32 unk_00; + u32 unk_04; + u16 unk_08; + u16 unk_0A; +} UnkStruct_02021AC8; + +typedef struct UnkStruct_021D21F4 UnkStruct_021D21F4; + void sub_020215A0(UnkStruct_020215A0 *template); void sub_020215C0(UnkStruct_020215A0 *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub); void sub_0202168C(void); @@ -30,5 +39,9 @@ NNSG2dImageProxy *sub_02021910(int resId); NNSG2dImageProxy *sub_02021934(int resId, u32 size); NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn); void sub_02021A50(const NNSG2dImageProxy *proxy); +BOOL sub_02021AC8(u32 a0, int a1, int a2, UnkStruct_02021AC8 *a3); +void sub_02021B5C(UnkStruct_02021AC8 *a0); +UnkStruct_021D21F4 *sub_02021BD0(void); +void sub_02021BEC(UnkStruct_021D21F4 *a0); #endif //POKEHEARTGOLD_UNK_020215A0_H diff --git a/lib/include/nnsys/g2d/fmt/g2d_Character_data.h b/lib/include/nnsys/g2d/fmt/g2d_Character_data.h index 33bc315da2..802fb0cff2 100644 --- a/lib/include/nnsys/g2d/fmt/g2d_Character_data.h +++ b/lib/include/nnsys/g2d/fmt/g2d_Character_data.h @@ -1,6 +1,8 @@ #ifndef NNSYS_G2D_FMT_G2D_CHARACTER_DATA_H_ #define NNSYS_G2D_FMT_G2D_CHARACTER_DATA_H_ +#include + typedef enum NNSG2dCharacterDataMapingType { NNS_G2D_CHARACTERMAPING_1D_32, NNS_G2D_CHARACTERMAPING_1D_64, diff --git a/lib/include/nnsys/g2d/g2d_Image.h b/lib/include/nnsys/g2d/g2d_Image.h index e729230b04..d1c5ca3894 100644 --- a/lib/include/nnsys/g2d/g2d_Image.h +++ b/lib/include/nnsys/g2d/g2d_Image.h @@ -35,6 +35,7 @@ typedef struct NNSG2dImagePaletteProxy { NNSG2dVRamLocation vramLocation; } NNSG2dImagePaletteProxy; // size: 0x14 +void NNS_G2dInitImageProxy(NNSG2dImageProxy* pImg); void NNS_G2dLoadPaletteEx(const NNSG2dPaletteData* pSrcData, const NNSG2dPaletteCompressInfo* pCmpInfo, u32 addr, NNS_G2D_VRAM_TYPE type, NNSG2dImagePaletteProxy* pPltProxy); void NNS_G2dLoadPalette(const NNSG2dPaletteData* pSrcData, u32 addr, NNS_G2D_VRAM_TYPE type, NNSG2dImagePaletteProxy* pPltProxy); void NNS_G2dLoadImage1DMapping(const NNSG2dCharacterData* pSrcData, u32 baseAddr, NNS_G2D_VRAM_TYPE type, NNSG2dImageProxy* pImgProxy); diff --git a/src/unk_020215A0.c b/src/unk_020215A0.c index 0d23fa658d..8b32c1c5d9 100644 --- a/src/unk_020215A0.c +++ b/src/unk_020215A0.c @@ -2,22 +2,25 @@ #include "unk_020215A0.h" #include "vram_transfer_manager.h" +typedef struct UnkStruct_021D21F4_sub2 { + u8 unk_00[8]; +} UnkStruct_021D21F4_sub2; + typedef struct UnkStruct_021D21F4_sub { NNSG2dCharacterData *unk_00; u32 unk_04; // flag - u8 filler_08[4]; + u8 unk_08; int unk_0C; NNSG2dImageProxy unk_10; u32 unk_34; u32 unk_38; u8 unk_3C; int unk_40; - u8 filler_44[16]; -} UnkStruct_021D21F4_sub; // size: 84 - -typedef struct UnkStruct_021D21F4_sub2 { - u8 unk_00[8]; -} UnkStruct_021D21F4_sub2; + BOOL unk_44; + int unk_48; + int unk_4C; + int unk_50; +} UnkStruct_021D21F4_sub; struct UnkStruct_021D21F4 { UnkStruct_021D21F4_sub *unk_00; @@ -41,17 +44,27 @@ void sub_020218D4(void); void sub_02021C08(UnkStruct_021D21F4_sub *a0); BOOL sub_02021C2C(const UnkStruct_02021758 *a0, UnkStruct_021D21F4_sub *a1); BOOL sub_02021C9C(UnkStruct_021D21F4_sub *a0); +UnkStruct_021D21F4_sub *sub_02021C50(const NNSG2dImageProxy *proxyIn); +BOOL sub_02021CCC(UnkStruct_021D21F4_sub *a0); +BOOL sub_02021D00(UnkStruct_021D21F4_sub *a0); void sub_02021D58(UnkStruct_021D21F4_sub *a0); UnkStruct_021D21F4_sub *sub_02021D70(int resId); +BOOL sub_02021DE4(int a0, int *a1, int *a2, u32 a3, int *a4, int *a5); +void sub_02021E90(UnkStruct_021D21F4_sub *a0, int a1, int a2); void sub_02021EC0(int a0, int a1, int a2, int a3, int a4); +void sub_02021FB0(UnkStruct_021D21F4_sub *a0); UnkStruct_021D21F4_sub *sub_02022024(void); void sub_02022060(void); void sub_020221D0(int a0, int a1, int HeapID); void sub_02022238(UnkStruct_021D21F4_sub2 *a0); void sub_02022278(UnkStruct_021D21F4_sub2 *a0); +void sub_020223C4(UnkStruct_021D21F4_sub *a0); int sub_02022448(GXOBJVRamModeChar mode); int sub_020224A8(int a0, int a1); +BOOL sub_020224C0(u32 size, int a1, int *a2, int *a3); +void sub_02022510(u32 size, int a1); void sub_0202256C(int a0, int a1, int a2, int *a3, int *a4); +void sub_02022374(int a0, int a1, UnkStruct_021D21F4_sub2 *a2); void sub_020215A0(UnkStruct_020215A0 *template) { sub_020215C0(template, GX_GetOBJVRamModeChar(), GXS_GetOBJVRamModeChar()); @@ -207,3 +220,186 @@ NNSG2dImageProxy *sub_02021910(int resId) { return &sub->unk_10; } + +NNSG2dImageProxy *sub_02021934(int resId, u32 size) { + UnkStruct_021D21F4_sub *sub = sub_02021D70(resId); + GF_ASSERT(sub != NULL); + if (sub->unk_3C == 0) { + return NULL; + } + int sp14; + int sp10; + int spC; + int sp8; + sub_02021DE4(sub->unk_04, &sp14, &sp10, size, &spC, &sp8); + if (sub->unk_3C == 3) { + return NULL; + } + sub->unk_3C = 3; + sub_02021E90(sub, sp14, sp10); + sub->unk_48 = 1; + sub->unk_4C = spC; + sub->unk_50 = sp8; + sub_02021FB0(sub); + sub_02021EC0(sub->unk_04, sp14, sp10, spC, sp8); + + return &sub->unk_10; +} + +NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { + UnkStruct_021D21F4_sub *sub = sub_02021C50(proxyIn); + GF_ASSERT(sub != NULL); + UnkStruct_021D21F4_sub *sub2 = sub_02022024(); + GF_ASSERT(sub2 != NULL); + if (sub->unk_3C != 3) { + return NULL; + } + *sub2 = *sub; + sub2->unk_3C = 4; + int sp14; + int sp10; + int spC; + int sp8; + sub_02021DE4(sub2->unk_04, &sp14, &sp10, (sub2->unk_04 & 1 ? sub2->unk_4C : sub2->unk_50), &spC, &sp8); + sub_02021E90(sub2, sp14, sp10); + sub2->unk_48 = 1; + sub2->unk_4C = spC; + sub2->unk_50 = sp8; + sub_02021FB0(sub2); + sub_02021EC0(sub2->unk_04, sp14, sp10, spC, sp8); + + return &sub2->unk_10; +} + +void sub_02021A50(const NNSG2dImageProxy *proxy) { + int i; + for (i = 0; i < _021D21F4->unk_04; ++i) { + if ((_021D21F4->unk_00[i].unk_3C == 3 || _021D21F4->unk_00[i].unk_3C == 4) && &_021D21F4->unk_00[i].unk_10 == proxy) { + break; + } + } + if (i < _021D21F4->unk_04) { + sub_020223C4(&_021D21F4->unk_00[i]); + if (_021D21F4->unk_00[i].unk_3C == 3) { + _021D21F4->unk_00[i].unk_3C = 2; + } else { + _021D21F4->unk_00[i].unk_3C = 0; + sub_02021C08(&_021D21F4->unk_00[i]); + } + } +} + +BOOL sub_02021AC8(u32 a0, int a1, int a2, UnkStruct_02021AC8 *a3) { + int sp14; + int sp10; + int spC; + int sp8; + BOOL ret; + + if (a1 == 0) { + ret = sub_020224C0(a0, a2, &sp14, &sp10); + if (ret) { + sub_02022510(a0, a2); + a3->unk_08 = a2; + a3->unk_00 = a0; + a3->unk_04 = a2 == 1 ? sp14 : sp10; + a3->unk_0A = 0; + } + } else { + ret = sub_02021DE4(a2, &sp14, &sp10, a0, &spC, &sp8); + if (ret) { + sub_02021EC0(a2, sp14, sp10, spC, sp8); + a3->unk_08 = a2; + if (a2 == 1) { + a3->unk_00 = spC; + a3->unk_04 = sp14 + _021D21F4->unk_1C; + } else { + a3->unk_00 = sp8; + a3->unk_04 = sp10 + _021D21F4->unk_20; + } + a3->unk_0A = 1; + } + } + return ret; +} + +void sub_02021B5C(UnkStruct_02021AC8 *a0) { + if (a0->unk_0A != 0) { + if (a0->unk_08 & 1) { + int r5 = sub_020224A8(a0->unk_00, _021D21F4->unk_2C); + int r0 = sub_020224A8(a0->unk_04 - _021D21F4->unk_1C, _021D21F4->unk_2C); + sub_02022374(r0, r5, _021D21F4->unk_34); + } + if (a0->unk_08 & 2) { + int r5 = sub_020224A8(a0->unk_00, _021D21F4->unk_30); + int r0 = sub_020224A8(a0->unk_04 - _021D21F4->unk_20, _021D21F4->unk_30); + sub_02022374(r0, r5, _021D21F4->unk_38); + } + } +} + +UnkStruct_021D21F4 *sub_02021BD0(void) { + GF_ASSERT(_021D21F4 != NULL); + UnkStruct_021D21F4 *ret = _021D21F4; + _021D21F4 = NULL; + return ret; +} + +void sub_02021BEC(UnkStruct_021D21F4 *a0) { + GF_ASSERT(_021D21F4 == NULL); + _021D21F4 = a0; +} + +void sub_02021C08(UnkStruct_021D21F4_sub *a0) { + a0->unk_00 = NULL; + a0->unk_04 = 0; + a0->unk_08 = 0; + a0->unk_0C = -1; + a0->unk_34 = 0; + a0->unk_38 = 0; + a0->unk_3C = 0; + a0->unk_40 = 0; + NNS_G2dInitImageProxy(&a0->unk_10); +} + +BOOL sub_02021C2C(const UnkStruct_02021758 *a0, UnkStruct_021D21F4_sub *a1) { + a1->unk_00 = a0->charData; + a1->unk_0C = a0->id; + a1->unk_04 = a0->dest; + a1->unk_08 = a1->unk_00->characterFmt >> 8; + a1->unk_44 = a0->unk_0C; + a1->unk_48 = 0; + a1->unk_4C = 0; + a1->unk_50 = 0; + return TRUE; +} + +UnkStruct_021D21F4_sub *sub_02021C50(const NNSG2dImageProxy *proxyIn) { + int i; + + for (i = 0; i < _021D21F4->unk_04; ++i) { + if (_021D21F4->unk_00[i].unk_3C != 0 && &_021D21F4->unk_00[i].unk_10 == proxyIn) { + break; + } + } + if (i >= _021D21F4->unk_04) { + return NULL; + } + + return &_021D21F4->unk_00[i]; +} + +BOOL sub_02021C9C(UnkStruct_021D21F4_sub *a0) { + BOOL ret = TRUE; + if (a0->unk_08 != 0) { + a0->unk_3C = 2; + } else { + a0->unk_3C = 1; + if (a0->unk_44 == 0) { + ret = sub_02021CCC(a0); + } else { + ret = sub_02021D00(a0); + } + } + return ret; +} From 514d08f0c2ad90c4a6705f432844517ed6d567c7 Mon Sep 17 00:00:00 2001 From: pikalaxalt Date: Mon, 19 Feb 2024 16:56:59 -0500 Subject: [PATCH 03/17] through sub_02021F54 --- asm/include/unk_0200ACF0.inc | 2 +- asm/unk_020215A0_s.s | 400 +-------------------------------- include/constants/global.h | 5 + include/unk_0200A090.h | 22 +- include/unk_020215A0.h | 5 +- include/unk_02022588.h | 2 +- src/battle_arcade_game_board.c | 42 ++-- src/certificates_app.c | 20 +- src/choose_starter_app.c | 4 +- src/credits/credits.c | 10 +- src/intro_movie_scene_1.c | 4 +- src/intro_movie_scene_2.c | 10 +- src/intro_movie_scene_3.c | 8 +- src/intro_movie_scene_4.c | 8 +- src/unk_0200A090.c | 62 ++--- src/unk_0200ACF0.c | 12 +- src/unk_020215A0.c | 234 +++++++++++++++---- 17 files changed, 306 insertions(+), 544 deletions(-) diff --git a/asm/include/unk_0200ACF0.inc b/asm/include/unk_0200ACF0.inc index 48279ae719..82bf0d9908 100644 --- a/asm/include/unk_0200ACF0.inc +++ b/asm/include/unk_0200ACF0.inc @@ -6,7 +6,7 @@ .public _2DGfxResObj_GetPlttDataPtr .public _2DGfxResObj_GetCellDataPtr .public _2DGfxResObj_GetResType -.public _2DGfxResObj_GetLoadAddress +.public _2DGfxResObj_GetVRamType .public _2DGfxResObj_GetPlttNum .public sub_0200AA9C .public sub_0200ACF0 diff --git a/asm/unk_020215A0_s.s b/asm/unk_020215A0_s.s index b39c3eb2d4..265dfca2f4 100644 --- a/asm/unk_020215A0_s.s +++ b/asm/unk_020215A0_s.s @@ -4,408 +4,10 @@ .extern _021D21F4 .extern sub_02021C08 + .extern sub_02021DA8 .text - thumb_func_start sub_02021CCC -sub_02021CCC: ; 0x02021CCC - push {r3, r4, r5, lr} - sub sp, #8 - add r5, r0, #0 - ldr r0, [r5] - ldr r1, [r5, #4] - ldr r0, [r0, #0x10] - add r2, sp, #4 - add r3, sp, #0 - bl sub_020224C0 - add r4, r0, #0 - beq _02021CF8 - ldr r1, [sp, #4] - ldr r2, [sp] - add r0, r5, #0 - bl sub_02021DD0 - ldr r0, [r5] - ldr r1, [r5, #4] - ldr r0, [r0, #0x10] - bl sub_02022510 -_02021CF8: - add r0, r4, #0 - add sp, #8 - pop {r3, r4, r5, pc} - .balign 4, 0 - thumb_func_end sub_02021CCC - - thumb_func_start sub_02021D00 -sub_02021D00: ; 0x02021D00 - push {r4, lr} - sub sp, #0x18 - add r4, r0, #0 - add r0, sp, #0xc - str r0, [sp] - add r0, sp, #8 - str r0, [sp, #4] - ldr r3, [r4] - ldr r0, [r4, #4] - ldr r3, [r3, #0x10] - add r1, sp, #0x14 - add r2, sp, #0x10 - bl sub_02021DE4 - cmp r0, #0 - bne _02021D26 - add sp, #0x18 - mov r0, #0 - pop {r4, pc} -_02021D26: - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - add r0, r4, #0 - bl sub_02021E90 - mov r0, #1 - str r0, [r4, #0x48] - ldr r0, [sp, #0xc] - str r0, [r4, #0x4c] - ldr r0, [sp, #8] - str r0, [r4, #0x50] - add r0, r4, #0 - bl sub_02021F28 - ldr r0, [sp, #8] - str r0, [sp] - ldr r0, [r4, #4] - ldr r1, [sp, #0x14] - ldr r2, [sp, #0x10] - ldr r3, [sp, #0xc] - bl sub_02021EC0 - mov r0, #1 - add sp, #0x18 - pop {r4, pc} - thumb_func_end sub_02021D00 - - thumb_func_start sub_02021D58 -sub_02021D58: ; 0x02021D58 - push {r4, lr} - add r4, r0, #0 - ldr r1, [r4, #0x48] - cmp r1, #0 - beq _02021D66 - bl sub_020223C4 -_02021D66: - add r0, r4, #0 - bl sub_02021C08 - pop {r4, pc} - .balign 4, 0 - thumb_func_end sub_02021D58 - - thumb_func_start sub_02021D70 -sub_02021D70: ; 0x02021D70 - push {r4, r5} - ldr r2, _02021DA4 ; =_021D21F4 - mov r1, #0 - ldr r5, [r2] - ldr r2, [r5, #4] - cmp r2, #0 - ble _02021D9C - ldr r2, [r5] - add r4, r2, #0 -_02021D82: - ldr r3, [r4, #0xc] - cmp r0, r3 - bne _02021D92 - mov r0, #0x54 - mul r0, r1 - add r0, r2, r0 - pop {r4, r5} - bx lr -_02021D92: - ldr r3, [r5, #4] - add r1, r1, #1 - add r4, #0x54 - cmp r1, r3 - blt _02021D82 -_02021D9C: - mov r0, #0 - pop {r4, r5} - bx lr - nop -_02021DA4: .word _021D21F4 - thumb_func_end sub_02021D70 - - thumb_func_start sub_02021DA8 -sub_02021DA8: ; 0x02021DA8 - cmp r1, #1 - bne _02021DB4 - mov r1, #1 - lsl r1, r1, #0x1a - ldr r2, [r1] - b _02021DB8 -_02021DB4: - ldr r1, _02021DC8 ; =0x04001000 - ldr r2, [r1] -_02021DB8: - ldr r1, _02021DCC ; =0x00300010 - and r2, r1 - ldr r1, [r0] - str r2, [r1, #8] - ldr r0, [r0] - ldr r0, [r0, #8] - bx lr - nop -_02021DC8: .word 0x04001000 -_02021DCC: .word 0x00300010 - thumb_func_end sub_02021DA8 - - thumb_func_start sub_02021DD0 -sub_02021DD0: ; 0x02021DD0 - push {r3, lr} - str r1, [r0, #0x34] - str r2, [r0, #0x38] - ldrb r1, [r0, #8] - cmp r1, #0 - bne _02021DE0 - bl sub_02021F28 -_02021DE0: - pop {r3, pc} - .balign 4, 0 - thumb_func_end sub_02021DD0 - - thumb_func_start sub_02021DE4 -sub_02021DE4: ; 0x02021DE4 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - ldr r0, [sp, #0x1c] - add r6, r2, #0 - str r0, [sp, #0x1c] - mov r2, #1 - add r0, r5, #0 - add r4, r1, #0 - str r3, [sp] - ldr r7, [sp, #0x18] - tst r0, r2 - beq _02021E3C - ldr r1, _02021E8C ; =_021D21F4 - add r0, r3, #0 - ldr r1, [r1] - ldr r1, [r1, #0x2c] - bl sub_02022488 - ldr r1, _02021E8C ; =_021D21F4 - str r0, [r7] - ldr r1, [r1] - ldr r1, [r1, #0x2c] - bl sub_020224A8 - ldr r1, _02021E8C ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x34] - bl sub_020222EC - mov r1, #0 - mvn r1, r1 - str r0, [r4] - cmp r0, r1 - bne _02021E30 - bl GF_AssertFail - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} -_02021E30: - ldr r1, _02021E8C ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x2c] - bl sub_020224B8 - str r0, [r4] -_02021E3C: - mov r0, #2 - tst r0, r5 - beq _02021E86 - ldr r1, _02021E8C ; =_021D21F4 - ldr r0, [sp] - ldr r1, [r1] - mov r2, #1 - ldr r1, [r1, #0x30] - bl sub_02022488 - ldr r1, [sp, #0x1c] - str r0, [r1] - ldr r1, _02021E8C ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x30] - bl sub_020224A8 - ldr r1, _02021E8C ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x38] - bl sub_020222EC - mov r1, #0 - mvn r1, r1 - str r0, [r6] - cmp r0, r1 - bne _02021E7A - bl GF_AssertFail - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} -_02021E7A: - ldr r1, _02021E8C ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x30] - bl sub_020224B8 - str r0, [r6] -_02021E86: - mov r0, #1 - pop {r3, r4, r5, r6, r7, pc} - nop -_02021E8C: .word _021D21F4 - thumb_func_end sub_02021DE4 - - thumb_func_start sub_02021E90 -sub_02021E90: ; 0x02021E90 - push {r3, r4} - ldr r4, [r0, #4] - mov r3, #1 - tst r3, r4 - beq _02021EA4 - ldr r3, _02021EBC ; =_021D21F4 - ldr r3, [r3] - ldr r3, [r3, #0x1c] - add r1, r1, r3 - str r1, [r0, #0x34] -_02021EA4: - ldr r3, [r0, #4] - mov r1, #2 - tst r1, r3 - beq _02021EB6 - ldr r1, _02021EBC ; =_021D21F4 - ldr r1, [r1] - ldr r1, [r1, #0x20] - add r1, r2, r1 - str r1, [r0, #0x38] -_02021EB6: - pop {r3, r4} - bx lr - nop -_02021EBC: .word _021D21F4 - thumb_func_end sub_02021E90 - - thumb_func_start sub_02021EC0 -sub_02021EC0: ; 0x02021EC0 - push {r3, r4, r5, r6, r7, lr} - add r5, r0, #0 - mov r0, #1 - add r4, r1, #0 - add r6, r2, #0 - tst r0, r5 - beq _02021EF4 - ldr r1, _02021F24 ; =_021D21F4 - add r0, r3, #0 - ldr r1, [r1] - ldr r1, [r1, #0x2c] - bl sub_020224A8 - ldr r1, _02021F24 ; =_021D21F4 - add r7, r0, #0 - ldr r1, [r1] - add r0, r4, #0 - ldr r1, [r1, #0x2c] - bl sub_020224A8 - ldr r2, _02021F24 ; =_021D21F4 - add r1, r7, #0 - ldr r2, [r2] - ldr r2, [r2, #0x34] - bl sub_02022290 -_02021EF4: - mov r0, #2 - tst r0, r5 - beq _02021F20 - ldr r1, _02021F24 ; =_021D21F4 - ldr r0, [sp, #0x18] - ldr r1, [r1] - ldr r1, [r1, #0x30] - bl sub_020224A8 - ldr r1, _02021F24 ; =_021D21F4 - add r4, r0, #0 - ldr r1, [r1] - add r0, r6, #0 - ldr r1, [r1, #0x30] - bl sub_020224A8 - ldr r2, _02021F24 ; =_021D21F4 - add r1, r4, #0 - ldr r2, [r2] - ldr r2, [r2, #0x38] - bl sub_02022290 -_02021F20: - pop {r3, r4, r5, r6, r7, pc} - nop -_02021F24: .word _021D21F4 - thumb_func_end sub_02021EC0 - - thumb_func_start sub_02021F28 -sub_02021F28: ; 0x02021F28 - push {r4, lr} - add r4, r0, #0 - add r0, #0x10 - bl NNS_G2dInitImageProxy - ldr r1, [r4, #4] - cmp r1, #3 - beq _02021F40 - add r0, r4, #0 - bl sub_02021F54 - pop {r4, pc} -_02021F40: - add r0, r4, #0 - mov r1, #1 - bl sub_02021F54 - add r0, r4, #0 - mov r1, #2 - bl sub_02021F54 - pop {r4, pc} - .balign 4, 0 - thumb_func_end sub_02021F28 - - thumb_func_start sub_02021F54 -sub_02021F54: ; 0x02021F54 - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r2, [r5, #0x40] - add r4, r1, #0 - cmp r2, #0 - beq _02021F66 - bl sub_02021DA8 - b _02021F68 -_02021F66: - add r0, r4, #0 -_02021F68: - cmp r4, #1 - bne _02021F76 - mov r2, #1 - lsl r2, r2, #0x1a - ldr r1, [r5, #0x34] - ldr r2, [r2] - b _02021F7C -_02021F76: - ldr r2, _02021FAC ; =0x04001000 - ldr r1, [r5, #0x38] - ldr r2, [r2] -_02021F7C: - cmp r0, #0 - ldr r0, [r5] - bne _02021F8E - add r5, #0x10 - add r2, r4, #0 - add r3, r5, #0 - bl NNS_G2dLoadImage2DMapping - b _02021F98 -_02021F8E: - add r5, #0x10 - add r2, r4, #0 - add r3, r5, #0 - bl NNS_G2dLoadImage1DMapping -_02021F98: - cmp r4, #1 - bne _02021FA4 - mov r0, #1 - lsl r0, r0, #0x1a - ldr r0, [r0] - pop {r3, r4, r5, pc} -_02021FA4: - ldr r0, _02021FAC ; =0x04001000 - ldr r0, [r0] - pop {r3, r4, r5, pc} - nop -_02021FAC: .word 0x04001000 - thumb_func_end sub_02021F54 - thumb_func_start sub_02021FB0 sub_02021FB0: ; 0x02021FB0 push {r4, lr} diff --git a/include/constants/global.h b/include/constants/global.h index 3488467b28..2a625fcce1 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -13,4 +13,9 @@ #define PARTY_SIZE 6 +// alias +#ifndef PM_ASM +#define NNS_G2D_VRAM_TYPE_BOTH ((NNS_G2D_VRAM_TYPE)(NNS_G2D_VRAM_TYPE_2DMAIN|NNS_G2D_VRAM_TYPE_2DSUB)) +#endif //PM_ASM + #endif //POKEHEARTGOLD_CONSTANTS_GLOBAL_H diff --git a/include/unk_0200A090.h b/include/unk_0200A090.h index 2bc3afc2f6..db45da1be8 100644 --- a/include/unk_0200A090.h +++ b/include/unk_0200A090.h @@ -6,12 +6,12 @@ struct CharResExtraData { NNSG2dCharacterData *charData; - int vram; + NNS_G2D_VRAM_TYPE vram; }; struct PlttResExtraData { - NNSG2dPaletteData *plttData; - int vram; + NNSG2dPaletteData *plttData; + NNS_G2D_VRAM_TYPE vram; int pltt_num; }; @@ -90,15 +90,15 @@ typedef struct _2DGfxResObjList { struct _2DGfxResMan *Create2DGfxResObjMan(int num, GfGfxResType type, HeapID heapId); void Destroy2DGfxResObjMan(struct _2DGfxResMan *mgr); struct _2DGfxResObj *Add2DGfxResObjFromHeader(struct _2DGfxResMan *mgr, const struct _2DGfxResHeader *header, int idx, HeapID heapId); -struct _2DGfxResObj *AddCharResObjFromNarc(struct _2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, HeapID heapId); -struct _2DGfxResObj *AddPlttResObjFromNarc(struct _2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId); +struct _2DGfxResObj *AddCharResObjFromNarc(struct _2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId); +struct _2DGfxResObj *AddPlttResObjFromNarc(struct _2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId); struct _2DGfxResObj *AddCellOrAnimResObjFromNarc(struct _2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, GfGfxResType type, HeapID heapId); void ReplaceCharResObjFromNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, HeapID heapId); void ReplacePlttResObjFromNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, HeapID heapId); -struct _2DGfxResObj *AddCharResObjFromOpenNarc(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, HeapID heapId); -struct _2DGfxResObj *AddCharResObjFromOpenNarcWithAtEndFlag(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, HeapID heapId, BOOL atEnd); -struct _2DGfxResObj *AddPlttResObjFromOpenNarc(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId); -struct _2DGfxResObj *AddPlttResObjFromOpenNarcWithAtEndFlag(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId, BOOL atEnd); +struct _2DGfxResObj *AddCharResObjFromOpenNarc(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId); +struct _2DGfxResObj *AddCharResObjFromOpenNarcWithAtEndFlag(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId, BOOL atEnd); +struct _2DGfxResObj *AddPlttResObjFromOpenNarc(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId); +struct _2DGfxResObj *AddPlttResObjFromOpenNarcWithAtEndFlag(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId, BOOL atEnd); struct _2DGfxResObj *AddCellOrAnimResObjFromOpenNarc(struct _2DGfxResMan *resMan, NARC *narc, int fileId, BOOL compressed, int id, GfGfxResType type, HeapID heapId); void ReplaceCharResObjFromOpenNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, HeapID heapId); void ReplacePlttResObjFromOpenNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, HeapID heapId); @@ -117,7 +117,7 @@ NNSG2dAnimBankData *_2DGfxResObj_GetAnimDataPtr(struct _2DGfxResObj *obj); NNSG2dMultiCellDataBank *_2DGfxResObj_GetMultiCellDataPtr(struct _2DGfxResObj *obj); NNSG2dAnimBankData *_2DGfxResObj_GetMultiAnimDataPtr(struct _2DGfxResObj *obj); GfGfxResType _2DGfxResObj_GetResType(struct _2DGfxResObj *obj); -int _2DGfxResObj_GetLoadAddress(struct _2DGfxResObj *obj); +NNS_G2D_VRAM_TYPE _2DGfxResObj_GetVRamType(struct _2DGfxResObj *obj); int _2DGfxResObj_GetPlttNum(struct _2DGfxResObj *obj); u32 sub_0200A8FC(void); struct _2DGfxResHeader *sub_0200A900(struct _2DGfxResHeader *headers, int num); @@ -129,6 +129,6 @@ int sub_0200A9B0(struct _2DGfxResHeader *header, int idx); BOOL sub_0200A9DC(struct _2DGfxResHeader *header, int idx); int sub_0200AA08(struct _2DGfxResHeader *header, int idx); int sub_0200AA3C(struct _2DGfxResHeader *header, int idx); -void sub_0200AA9C(struct _2DGfxResObj *obj, GfGfxResType type, int vram, int pltt_num, HeapID heapId); +void sub_0200AA9C(struct _2DGfxResObj *obj, GfGfxResType type, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId); #endif //POKEHEARTGOLD_UNK_0200A090_H diff --git a/include/unk_020215A0.h b/include/unk_020215A0.h index 31c40a1fee..83a11d01b1 100644 --- a/include/unk_020215A0.h +++ b/include/unk_020215A0.h @@ -2,6 +2,7 @@ #define POKEHEARTGOLD_UNK_020215A0_H #include "heap.h" +#include typedef struct UnkStruct_020215A0 { int unk_00; @@ -12,7 +13,7 @@ typedef struct UnkStruct_020215A0 { typedef struct UnkStruct_02021758 { NNSG2dCharacterData *charData; - u32 dest; + NNS_G2D_VRAM_TYPE vram; int id; BOOL unk_0C; } UnkStruct_02021758; @@ -39,7 +40,7 @@ NNSG2dImageProxy *sub_02021910(int resId); NNSG2dImageProxy *sub_02021934(int resId, u32 size); NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn); void sub_02021A50(const NNSG2dImageProxy *proxy); -BOOL sub_02021AC8(u32 a0, int a1, int a2, UnkStruct_02021AC8 *a3); +BOOL sub_02021AC8(u32 a0, int a1, NNS_G2D_VRAM_TYPE a2, UnkStruct_02021AC8 *a3); void sub_02021B5C(UnkStruct_02021AC8 *a0); UnkStruct_021D21F4 *sub_02021BD0(void); void sub_02021BEC(UnkStruct_021D21F4 *a0); diff --git a/include/unk_02022588.h b/include/unk_02022588.h index 0d6787d2f6..89951de36d 100644 --- a/include/unk_02022588.h +++ b/include/unk_02022588.h @@ -5,7 +5,7 @@ typedef struct UnkStruct_02022660 { NNSG2dPaletteData *plttData; - u32 dest; + NNS_G2D_VRAM_TYPE vram; int plttNum; int id; } UnkStruct_02022660; diff --git a/src/battle_arcade_game_board.c b/src/battle_arcade_game_board.c index f591dcb913..5758d07819 100644 --- a/src/battle_arcade_game_board.c +++ b/src/battle_arcade_game_board.c @@ -1228,11 +1228,11 @@ static void ov84_0223F2B4(GAME_BOARD_SUB_3E8 *work, Party *playerParty, Party *o ov84_0223F5E4(work, playerParty, opponentParty, type); for (i = 0; i < 11; i++) { - sub_0200ACF0(work->resourceObj[i][0]); + sub_0200ACF0(work->resourceObj[i][GF_GFX_RES_TYPE_CHAR]); } for (i = 0; i < 4; i++) { - sub_0200AF94(work->resourceObj[i][1]); + sub_0200AF94(work->resourceObj[i][GF_GFX_RES_TYPE_PLTT]); } GfGfx_EngineBTogglePlanes(GX_PLANEMASK_OBJ, GF_PLANE_TOGGLE_ON); @@ -1279,11 +1279,11 @@ static void ov84_0223F418(GAME_BOARD_SUB_3E8 *work) { u8 i; for (i = 0; i < 11; i++) { - sub_0200AEB0(work->resourceObj[i][0]); + sub_0200AEB0(work->resourceObj[i][GF_GFX_RES_TYPE_CHAR]); } for (i = 0; i < 4; i++) { - sub_0200B0A8(work->resourceObj[i][1]); + sub_0200B0A8(work->resourceObj[i][GF_GFX_RES_TYPE_PLTT]); } for (i = 0; i < 4; i++) { @@ -1307,19 +1307,19 @@ static void ov84_0223F480(void) { } static void ov84_0223F4B4(GAME_BOARD_SUB_3E8 *work) { - work->resourceObj[1][0] = AddCharResObjFromNarc(work->resourceMan[0], NARC_a_1_8_4, 18, TRUE, 1, 1, HEAP_ID_GAME_BOARD); - work->resourceObj[1][1] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_1_8_4, 56, FALSE, 1, 1, 8, HEAP_ID_GAME_BOARD); - work->resourceObj[1][2] = AddCellOrAnimResObjFromNarc(work->resourceMan[2], NARC_a_1_8_4, 20, TRUE, 1, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); - work->resourceObj[1][3] = AddCellOrAnimResObjFromNarc(work->resourceMan[3], NARC_a_1_8_4, 19, TRUE, 1, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); + work->resourceObj[1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(work->resourceMan[0], NARC_a_1_8_4, 18, TRUE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_GAME_BOARD); + work->resourceObj[1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_1_8_4, 56, FALSE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, 8, HEAP_ID_GAME_BOARD); + work->resourceObj[1][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(work->resourceMan[2], NARC_a_1_8_4, 20, TRUE, 1, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); + work->resourceObj[1][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(work->resourceMan[3], NARC_a_1_8_4, 19, TRUE, 1, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); } static void ov84_0223F538(GAME_BOARD_SUB_3E8 *work) { NARC *narc = NARC_New(NARC_a_0_2_1, HEAP_ID_GAME_BOARD); - work->resourceObj[2][0] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, sub_0207CA9C(), FALSE, 2, 1, HEAP_ID_GAME_BOARD); - work->resourceObj[2][1] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_0_2_1, sub_0207CAA0(), FALSE, 2, 1, 3, HEAP_ID_GAME_BOARD); - work->resourceObj[2][2] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[2], narc, sub_0207CAA4(), FALSE, 2, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); - work->resourceObj[2][3] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[3], narc, sub_0207CAA8(), FALSE, 2, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); + work->resourceObj[2][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, sub_0207CA9C(), FALSE, 2, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_GAME_BOARD); + work->resourceObj[2][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_0_2_1, sub_0207CAA0(), FALSE, 2, NNS_G2D_VRAM_TYPE_2DMAIN, 3, HEAP_ID_GAME_BOARD); + work->resourceObj[2][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[2], narc, sub_0207CAA4(), FALSE, 2, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); + work->resourceObj[2][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[3], narc, sub_0207CAA8(), FALSE, 2, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); NARC_Delete(narc); } @@ -1330,9 +1330,9 @@ static void ov84_0223F5E4(GAME_BOARD_SUB_3E8 *work, Party *playerParty, Party *o Pokemon *opponentMon; NARC *narc = NARC_New(NARC_a_0_2_0, HEAP_ID_GAME_BOARD); - work->resourceObj[3][1] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_0_2_0, sub_02074490(), FALSE, 3, 1, 3, HEAP_ID_GAME_BOARD); - work->resourceObj[3][2] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[2], narc, sub_02074498(), FALSE, 3, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); - work->resourceObj[3][3] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[3], narc, sub_020744A4(), FALSE, 3, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); + work->resourceObj[3][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_0_2_0, sub_02074490(), FALSE, 3, NNS_G2D_VRAM_TYPE_2DMAIN, 3, HEAP_ID_GAME_BOARD); + work->resourceObj[3][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[2], narc, sub_02074498(), FALSE, 3, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); + work->resourceObj[3][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromOpenNarc(work->resourceMan[3], narc, sub_020744A4(), FALSE, 3, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); for (i = 0; i < 4; i++) { if (i == 3) { @@ -1348,18 +1348,18 @@ static void ov84_0223F5E4(GAME_BOARD_SUB_3E8 *work, Party *playerParty, Party *o opponentMon = Party_GetMonByIndex(opponentParty, i); } - work->resourceObj[3 + i][0] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, Pokemon_GetIconNaix(playerMon), FALSE, 3 + i, 1, HEAP_ID_GAME_BOARD); - work->resourceObj[7 + i][0] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, Pokemon_GetIconNaix(opponentMon), FALSE, 7 + i, 1, HEAP_ID_GAME_BOARD); + work->resourceObj[3 + i][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, Pokemon_GetIconNaix(playerMon), FALSE, 3 + i, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_GAME_BOARD); + work->resourceObj[7 + i][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromOpenNarc(work->resourceMan[0], narc, Pokemon_GetIconNaix(opponentMon), FALSE, 7 + i, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_GAME_BOARD); } NARC_Delete(narc); } static void ov84_0223F714(GAME_BOARD_SUB_3E8 *work) { - work->resourceObj[0][0] = AddCharResObjFromNarc(work->resourceMan[0], NARC_a_1_8_4, 21, TRUE, 0, 2, HEAP_ID_GAME_BOARD); - work->resourceObj[0][1] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_1_8_4, 57, FALSE, 0, 2, 2, HEAP_ID_GAME_BOARD); - work->resourceObj[0][2] = AddCellOrAnimResObjFromNarc(work->resourceMan[2], NARC_a_1_8_4, 23, TRUE, 0, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); - work->resourceObj[0][3] = AddCellOrAnimResObjFromNarc(work->resourceMan[3], NARC_a_1_8_4, 22, TRUE, 0, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); + work->resourceObj[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(work->resourceMan[0], NARC_a_1_8_4, 21, TRUE, 0, NNS_G2D_VRAM_TYPE_2DSUB, HEAP_ID_GAME_BOARD); + work->resourceObj[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(work->resourceMan[1], NARC_a_1_8_4, 57, FALSE, 0, NNS_G2D_VRAM_TYPE_2DSUB, 2, HEAP_ID_GAME_BOARD); + work->resourceObj[0][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(work->resourceMan[2], NARC_a_1_8_4, 23, TRUE, 0, GF_GFX_RES_TYPE_CELL, HEAP_ID_GAME_BOARD); + work->resourceObj[0][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(work->resourceMan[3], NARC_a_1_8_4, 22, TRUE, 0, GF_GFX_RES_TYPE_ANIM, HEAP_ID_GAME_BOARD); } static BATTLE_ARCADE_OBJECT *BattleArcadeObject_Create(GAME_BOARD_SUB_3E8 *work, u32 chara, u32 pal, u32 cell, u32 anim, u16 x, u16 y, u32 priority, int bgPrio, u8 display) { diff --git a/src/certificates_app.c b/src/certificates_app.c index 117200654c..c3af4d8b6d 100644 --- a/src/certificates_app.c +++ b/src/certificates_app.c @@ -119,7 +119,7 @@ static const UnkTemplate_0200D748 ov78_021E68B4 = { .animation = 0, .spritePriority = 1, .pal = 3, - .vram = NNS_G2D_VRAM_TYPE_MAX, + .vram = NNS_G2D_VRAM_TYPE_BOTH, .resIdList = { 2, 2, 2, 2, 0, 0 }, .bgPriority = 0, .vramTransfer = 0, @@ -132,7 +132,7 @@ static const UnkTemplate_0200D748 ov78_021E6880 = { .animation = 0, .spritePriority = 0, .pal = 0xFFFF, - .vram = NNS_G2D_VRAM_TYPE_MAX, + .vram = NNS_G2D_VRAM_TYPE_BOTH, .resIdList = {}, .bgPriority = 0, .vramTransfer = 0, @@ -145,7 +145,7 @@ static const UnkTemplate_0200D748 ov78_021E68E8 = { .animation = 0, .spritePriority = 0, .pal = 2, - .vram = NNS_G2D_VRAM_TYPE_MAX, + .vram = NNS_G2D_VRAM_TYPE_BOTH, .resIdList = { 1, 1, 1, 1, 0, 0 }, .bgPriority = 0, .vramTransfer = 0, @@ -626,8 +626,8 @@ static void ov78_021E636C(CertificatesApp_Data *data) { { NARC *narc = NARC_New(NARC_a_1_6_2, data->heapId); - SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 65, FALSE, 2, NNS_G2D_VRAM_TYPE_MAX, 0); - SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 66, FALSE, NNS_G2D_VRAM_TYPE_MAX, 0); + SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 65, FALSE, 2, NNS_G2D_VRAM_TYPE_BOTH, 0); + SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 66, FALSE, NNS_G2D_VRAM_TYPE_BOTH, 0); SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 67, FALSE, 0); SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 68, FALSE, 0); @@ -637,13 +637,13 @@ static void ov78_021E636C(CertificatesApp_Data *data) { { NARC *narc = NARC_New(NARC_a_1_2_6, data->heapId); - SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_MAX, 1); - SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19, FALSE, NNS_G2D_VRAM_TYPE_MAX, 1); + SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_BOTH, 1); + SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19, FALSE, NNS_G2D_VRAM_TYPE_BOTH, 1); SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 20, FALSE, 1); SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 21, FALSE, 1); - SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_MAX, 2); - SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19 + (data->unk58 * 3), FALSE, NNS_G2D_VRAM_TYPE_MAX, 2); + SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_BOTH, 2); + SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19 + (data->unk58 * 3), FALSE, NNS_G2D_VRAM_TYPE_BOTH, 2); SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 20 + (data->unk58 * 3), FALSE, 2); SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 21 + (data->unk58 * 3), FALSE, 2); @@ -670,7 +670,7 @@ static void ov78_021E652C(CertificatesApp_Data *data) { } static void ov78_021E656C(Sprite *sprite, void *unkBuffer, u32 unkBufferSize, u32 srcOffset) { - GF_ASSERT(Sprite_GetVramType(sprite) == NNS_G2D_VRAM_TYPE_MAX); + GF_ASSERT(Sprite_GetVramType(sprite) == NNS_G2D_VRAM_TYPE_BOTH); DC_FlushRange(unkBuffer, unkBufferSize); diff --git a/src/choose_starter_app.c b/src/choose_starter_app.c index 42ef209a23..d5ccfa30c0 100644 --- a/src/choose_starter_app.c +++ b/src/choose_starter_app.c @@ -1177,8 +1177,8 @@ static void createMonSprites(struct ChooseStarterAppWork *work) { struct StarterChooseMonSpriteData *spriteData = &work->monSpriteData; for (i = 0; i < 3; i++) { - spriteData->objs[i].charResObj = AddCharResObjFromOpenNarc(spriteData->charResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000009_NCGR, FALSE, i, 2, work->heapId); - spriteData->objs[i].plttResObj = AddPlttResObjFromOpenNarc(spriteData->plttResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000006_NCLR, FALSE, i, 2, 1, work->heapId); + spriteData->objs[i].charResObj = AddCharResObjFromOpenNarc(spriteData->charResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000009_NCGR, FALSE, i, NNS_G2D_VRAM_TYPE_2DSUB, work->heapId); + spriteData->objs[i].plttResObj = AddPlttResObjFromOpenNarc(spriteData->plttResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000006_NCLR, FALSE, i, NNS_G2D_VRAM_TYPE_2DSUB, 1, work->heapId); spriteData->objs[i].cellResObj = AddCellOrAnimResObjFromOpenNarc(spriteData->cellResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000010_NCER, FALSE, i, GF_GFX_RES_TYPE_CELL, work->heapId); spriteData->objs[i].animResObj = AddCellOrAnimResObjFromOpenNarc(spriteData->animResMan, narc, NARC_choose_starter_sub_res_choose_starter_sub_res_00000016_NANR, FALSE, i, GF_GFX_RES_TYPE_ANIM, work->heapId); GetMonSpriteCharAndPlttNarcIdsEx( diff --git a/src/credits/credits.c b/src/credits/credits.c index 624cbcb885..4025b2617d 100644 --- a/src/credits/credits.c +++ b/src/credits/credits.c @@ -498,9 +498,9 @@ static void FreeOamAndObjResMgrs(CreditsAppWork *work) { static void ov76_021E6170(CreditsAppWork *work) { work->_2dGfxResObj[GF_GFX_RES_TYPE_CHAR] = - AddCharResObjFromNarc(work->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], NARC_a_2_6_3, 1, TRUE, 1, 3, HEAP_ID_CREDITS); + AddCharResObjFromNarc(work->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], NARC_a_2_6_3, 1, TRUE, 1, NNS_G2D_VRAM_TYPE_BOTH, HEAP_ID_CREDITS); work->_2dGfxResObj[GF_GFX_RES_TYPE_PLTT] = - AddPlttResObjFromNarc(work->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], NARC_a_2_6_3, 0, FALSE, 1, 3, 7, HEAP_ID_CREDITS); + AddPlttResObjFromNarc(work->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], NARC_a_2_6_3, 0, FALSE, 1, NNS_G2D_VRAM_TYPE_BOTH, 7, HEAP_ID_CREDITS); work->_2dGfxResObj[GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(work->_2dGfxResMan[GF_GFX_RES_TYPE_CELL], NARC_a_2_6_3, 2, TRUE, 1, GF_GFX_RES_TYPE_CELL, HEAP_ID_CREDITS); work->_2dGfxResObj[GF_GFX_RES_TYPE_ANIM] = @@ -513,9 +513,9 @@ static void ov76_021E6170(CreditsAppWork *work) { for (u8 i = 0; i < UNIQUE_SPRITES_PER_CUTSCENE; i++) { work->cutsceneRsrs[i].charResObj = - AddCharResObjFromOpenNarc(work->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], *narc, 20, TRUE, i + 2, 1, HEAP_ID_CREDITS); + AddCharResObjFromOpenNarc(work->_2dGfxResMan[GF_GFX_RES_TYPE_CHAR], *narc, 20, TRUE, i + 2, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_CREDITS); work->cutsceneRsrs[i].plttResObj = - AddPlttResObjFromOpenNarc(work->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], *narc, 149, FALSE, i + 2, 1, 1, HEAP_ID_CREDITS); + AddPlttResObjFromOpenNarc(work->_2dGfxResMan[GF_GFX_RES_TYPE_PLTT], *narc, 149, FALSE, i + 2, NNS_G2D_VRAM_TYPE_2DMAIN, 1, HEAP_ID_CREDITS); } sub_0200ACF0(work->_2dGfxResObj[GF_GFX_RES_TYPE_CHAR]); @@ -547,7 +547,7 @@ static void InitSprites(CreditsAppWork *work) { u8 yIdx; SceneWork *ptr = &work->sceneWork; - InitDancingSpriteResources(1, work, 1, NNS_G2D_VRAM_TYPE_MAX, &tmpl, &header); + InitDancingSpriteResources(1, work, 1, NNS_G2D_VRAM_TYPE_BOTH, &tmpl, &header); // Dancing Pokémon that start on top screen for (u8 i = 0; i < MONS_PER_SCREEN; i++) { diff --git a/src/intro_movie_scene_1.c b/src/intro_movie_scene_1.c index 4cfe93f979..990d333e01 100644 --- a/src/intro_movie_scene_1.c +++ b/src/intro_movie_scene_1.c @@ -385,8 +385,8 @@ void IntroMovie_Scene1_SetBrightnessAndBgMaskColor(IntroMovieOvyData *data) { void IntroMovie_Scene1_LoadSpriteGfx(IntroMovieOvyData *data, IntroMovieScene1Data *sceneData) { IntroMovie_CreateSpriteResourceManagers(data, sIntroMovieScene1SpriteResCounts); _2DGfxResMan **ppMgr = IntroMovie_GetSpriteResourceManagersArray(data); - sceneData->charResObj = AddCharResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_CHARRES, TRUE, 1, 1, HEAP_ID_INTRO_MOVIE); - sceneData->plttResObj = AddPlttResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_PLTTRES, FALSE, 1, 1, 2, HEAP_ID_INTRO_MOVIE); + sceneData->charResObj = AddCharResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_CHARRES, TRUE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_INTRO_MOVIE); + sceneData->plttResObj = AddPlttResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_PLTTRES, FALSE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, 2, HEAP_ID_INTRO_MOVIE); sceneData->cellResObj = AddCellOrAnimResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_CELLRES, TRUE, 1, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->animResObj = AddCellOrAnimResObjFromNarc(ppMgr[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, INTRO_MOVIE_SCENE1_BIRD_ANIMRES, TRUE, 1, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); sub_0200ACF0(sceneData->charResObj); diff --git a/src/intro_movie_scene_2.c b/src/intro_movie_scene_2.c index 0254c7c180..fae67b3465 100644 --- a/src/intro_movie_scene_2.c +++ b/src/intro_movie_scene_2.c @@ -300,12 +300,12 @@ void IntroMovie_Scene2_LoadBgGfx(BgConfig *bgConfig) { void IntroMovie_Scene2_LoadSpriteGfx(IntroMovieOvyData *data, IntroMovieScene2Data *sceneData) { IntroMovie_CreateSpriteResourceManagers(data, sIntroMovieScene2SpriteResCounts); _2DGfxResMan **resMen = IntroMovie_GetSpriteResourceManagersArray(data); - sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000078_NCGR_lz, TRUE, 0, 3, HEAP_ID_INTRO_MOVIE); - sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000077_NCLR, FALSE, 0, 3, 1, HEAP_ID_INTRO_MOVIE); + sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000078_NCGR_lz, TRUE, 0, NNS_G2D_VRAM_TYPE_BOTH, HEAP_ID_INTRO_MOVIE); + sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000077_NCLR, FALSE, 0, NNS_G2D_VRAM_TYPE_BOTH, 1, HEAP_ID_INTRO_MOVIE); sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000080_NCER_lz, TRUE, 0, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000079_NANR_lz, TRUE, 0, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); - sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000074_NCGR_lz, TRUE, 1, 1, HEAP_ID_INTRO_MOVIE); - sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000073_NCLR, FALSE, 1, 1, 2, HEAP_ID_INTRO_MOVIE); + sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000074_NCGR_lz, TRUE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_INTRO_MOVIE); + sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000073_NCLR, FALSE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, 2, HEAP_ID_INTRO_MOVIE); sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000076_NCER_lz, TRUE, 1, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000075_NANR_lz, TRUE, 1, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); for (u8 i = 0; i < 2; ++i) { @@ -340,7 +340,7 @@ void IntroMovie_Scene2_CreateSprites(IntroMovieOvyData *data, IntroMovieScene2Da 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, }; - IntroMovie_BuildSpriteResourcesHeaderAndTemplate(0, data, 0, NNS_G2D_VRAM_TYPE_MAX, &spriteTemplate, &spriteHeader); + IntroMovie_BuildSpriteResourcesHeaderAndTemplate(0, data, 0, NNS_G2D_VRAM_TYPE_BOTH, &spriteTemplate, &spriteHeader); spriteTemplate.position.x = 128 * FX32_ONE; spriteTemplate.position.y = 192 * FX32_ONE; diff --git a/src/intro_movie_scene_3.c b/src/intro_movie_scene_3.c index deacca0c4a..d784107193 100644 --- a/src/intro_movie_scene_3.c +++ b/src/intro_movie_scene_3.c @@ -609,13 +609,13 @@ void IntroMovie_Scene3_LoadOBJGraphics(IntroMovieOvyData *data, IntroMovieScene3 IntroMovie_CreateSpriteResourceManagers(data, sIntroMovieScene3SpriteResCounts); _2DGfxResMan **resMen = IntroMovie_GetSpriteResourceManagersArray(data); - sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000066_NCGR_lz, TRUE, 2, 2, HEAP_ID_INTRO_MOVIE); - sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000065_NCLR, FALSE, 2, 2, 1, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000066_NCGR_lz, TRUE, 2, NNS_G2D_VRAM_TYPE_2DSUB, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000065_NCLR, FALSE, 2, NNS_G2D_VRAM_TYPE_2DSUB, 1, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000068_NCER_lz, TRUE, 2, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000067_NANR_lz, TRUE, 2, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); - sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000070_NCGR_lz, TRUE, 3, 2, HEAP_ID_INTRO_MOVIE); - sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000069_NCLR, FALSE, 3, 2, 2, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000070_NCGR_lz, TRUE, 3, NNS_G2D_VRAM_TYPE_2DSUB, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000069_NCLR, FALSE, 3, NNS_G2D_VRAM_TYPE_2DSUB, 2, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000072_NCER_lz, TRUE, 3, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[1][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000071_NANR_lz, TRUE, 3, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); diff --git a/src/intro_movie_scene_4.c b/src/intro_movie_scene_4.c index b290d3f9b8..0da61bab94 100644 --- a/src/intro_movie_scene_4.c +++ b/src/intro_movie_scene_4.c @@ -450,15 +450,15 @@ void IntroMovie_Scene4_LoadSpriteGfx(IntroMovieOvyData *data, IntroMovieScene4Da IntroMovie_CreateSpriteResourceManagers(data, sIntroMovieScene4SpriteResCounts); resMen = IntroMovie_GetSpriteResourceManagersArray(data); - sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000082_NCGR_lz, TRUE, 0, 3, HEAP_ID_INTRO_MOVIE); - sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000081_NCLR, FALSE, 0, 3, 2, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000082_NCGR_lz, TRUE, 0, NNS_G2D_VRAM_TYPE_BOTH, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000081_NCLR, FALSE, 0, NNS_G2D_VRAM_TYPE_BOTH, 2, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000084_NCER_lz, TRUE, 0, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000083_NANR_lz, TRUE, 0, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); for (i = 0; i < 3; ++i) { s32 id = sp18[i]; - sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, sp3C[i], TRUE, id, 1, HEAP_ID_INTRO_MOVIE); - sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, sp48[i], FALSE, id, 1, 1, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, sp3C[i], TRUE, id, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, sp48[i], FALSE, id, NNS_G2D_VRAM_TYPE_2DMAIN, 1, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, sp24[i], TRUE, id, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[i + 1][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, sp30[i], TRUE, id, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); } diff --git a/src/unk_0200A090.c b/src/unk_0200A090.c index 320357fea7..107fe98cbe 100644 --- a/src/unk_0200A090.c +++ b/src/unk_0200A090.c @@ -5,17 +5,17 @@ static void loadAll2DGfxResObjFromHeaderInternal(struct _2DGfxResMan *mgr, const struct _2DGfxResHeader *header, int first, int count, struct _2DGfxResObjList *list, HeapID heapId); static void destroyAllObjects(struct _2DGfxResMan *mgr); static struct _2DGfxResObj *sub_0200AA70(struct _2DGfxResMan *mgr); -static struct CharResExtraData *GetResourceExtraCharData(void *resource, int vram, HeapID heapId); -static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, int vram, int pltt_num, HeapID heapId); +static struct CharResExtraData *GetResourceExtraCharData(void *resource, NNS_G2D_VRAM_TYPE vram, HeapID heapId); +static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId); static struct CellResExtraData *GetResourceExtraCellData(void *resource, HeapID heapId); static struct AnimResExtraData *GetResourceExtraAnimData(void *resource, HeapID heapId); static struct MulticellResExtraData *GetResourceExtraMulticellData(void *resource, HeapID heapId); static struct MultianimResExtraData *GetResourceExtraMultianimData(void *resource, HeapID heapId); static void destroyResObjExtra(struct _2DGfxResObj *obj); static void *getResObjExtra(struct _2DGfxResObj *obj); -static void Add2DGfxResObjFromFile(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, char *name, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId); -static void Add2DGfxResObjFromNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd); -static void Add2DGfxResObjFromOpenNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd); +static void Add2DGfxResObjFromFile(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, char *name, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId); +static void Add2DGfxResObjFromNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd); +static void Add2DGfxResObjFromOpenNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd); static int sub_0200AC88(const struct _2DGfxResHeaderNarc *a0); static void *sub_0200ACA4(NARC *narc, int fileId, BOOL compressed, HeapID heapId, BOOL atEnd); @@ -57,17 +57,17 @@ struct _2DGfxResObj *Add2DGfxResObjFromHeader(struct _2DGfxResMan *mgr, const st if (!header->isNarc) { headerFile = &((struct _2DGfxResHeaderFile *)header->table)[idx]; GF_ASSERT(_2DGfxResObjExistsById(mgr, headerFile->id) == TRUE); - Add2DGfxResObjFromFile(mgr, ret, headerFile->filename, headerFile->id, headerFile->extra[0], headerFile->extra[1], header->type, heapId); + Add2DGfxResObjFromFile(mgr, ret, headerFile->filename, headerFile->id, (NNS_G2D_VRAM_TYPE)headerFile->extra[0], headerFile->extra[1], header->type, heapId); } else { headerNarc = &((struct _2DGfxResHeaderNarc *)header->table)[idx]; GF_ASSERT(_2DGfxResObjExistsById(mgr, headerNarc->id) == TRUE); - Add2DGfxResObjFromNarc(mgr, ret, (NarcId)headerNarc->narcId, headerNarc->fileId, headerNarc->compressed, headerNarc->id, headerNarc->extra[0], headerNarc->extra[1], header->type, heapId, FALSE); + Add2DGfxResObjFromNarc(mgr, ret, (NarcId)headerNarc->narcId, headerNarc->fileId, headerNarc->compressed, headerNarc->id, (NNS_G2D_VRAM_TYPE)headerNarc->extra[0], headerNarc->extra[1], header->type, heapId, FALSE); } mgr->num++; return ret; } -struct _2DGfxResObj *AddCharResObjFromNarc(struct _2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, HeapID heapId) { +struct _2DGfxResObj *AddCharResObjFromNarc(struct _2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId) { struct _2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR); @@ -78,7 +78,7 @@ struct _2DGfxResObj *AddCharResObjFromNarc(struct _2DGfxResMan *mgr, NarcId narc return ret; } -struct _2DGfxResObj *AddPlttResObjFromNarc(struct _2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId) { +struct _2DGfxResObj *AddPlttResObjFromNarc(struct _2DGfxResMan *mgr, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId) { struct _2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT); @@ -95,40 +95,40 @@ struct _2DGfxResObj *AddCellOrAnimResObjFromNarc(struct _2DGfxResMan *mgr, NarcI //GF_ASSERT(mgr->type == type); ret = sub_0200AA70(mgr); GF_ASSERT(ret != NULL); - Add2DGfxResObjFromNarc(mgr, ret, narcId, fileId, compressed, id, 0, 0, type, heapId, FALSE); + Add2DGfxResObjFromNarc(mgr, ret, narcId, fileId, compressed, id, NNS_G2D_VRAM_TYPE_3DMAIN, 0, type, heapId, FALSE); mgr->num++; return ret; } void ReplaceCharResObjFromNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, HeapID heapId) { int id; - int vram; + NNS_G2D_VRAM_TYPE vram; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR); GF_ASSERT(obj != NULL); GF_ASSERT(obj->type == GF_GFX_RES_TYPE_CHAR); id = _2DGfxResObj_GetResID(obj); - vram = _2DGfxResObj_GetLoadAddress(obj); + vram = _2DGfxResObj_GetVRamType(obj); DestroySingle2DGfxResObj(mgr, obj); Add2DGfxResObjFromNarc(mgr, obj, narcId, fileId, compressed, id, vram, 0, GF_GFX_RES_TYPE_CHAR, heapId, FALSE); } void ReplacePlttResObjFromNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, HeapID heapId) { int id; - int vram; + NNS_G2D_VRAM_TYPE vram; int pltt_num; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT); GF_ASSERT(obj != NULL); GF_ASSERT(obj->type == GF_GFX_RES_TYPE_PLTT); id = _2DGfxResObj_GetResID(obj); - vram = _2DGfxResObj_GetLoadAddress(obj); + vram = _2DGfxResObj_GetVRamType(obj); pltt_num = _2DGfxResObj_GetPlttNum(obj); DestroySingle2DGfxResObj(mgr, obj); Add2DGfxResObjFromNarc(mgr, obj, narcId, fileId, compressed, id, vram, pltt_num, GF_GFX_RES_TYPE_PLTT, heapId, FALSE); } -struct _2DGfxResObj *AddCharResObjFromOpenNarc(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, HeapID heapId) { +struct _2DGfxResObj *AddCharResObjFromOpenNarc(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId) { struct _2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR); @@ -139,7 +139,7 @@ struct _2DGfxResObj *AddCharResObjFromOpenNarc(struct _2DGfxResMan *mgr, NARC *n return ret; } -struct _2DGfxResObj *AddCharResObjFromOpenNarcWithAtEndFlag(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, HeapID heapId, BOOL atEnd) { +struct _2DGfxResObj *AddCharResObjFromOpenNarcWithAtEndFlag(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, HeapID heapId, BOOL atEnd) { struct _2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR); @@ -150,7 +150,7 @@ struct _2DGfxResObj *AddCharResObjFromOpenNarcWithAtEndFlag(struct _2DGfxResMan return ret; } -struct _2DGfxResObj *AddPlttResObjFromOpenNarc(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId) { +struct _2DGfxResObj *AddPlttResObjFromOpenNarc(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId) { struct _2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT); @@ -161,7 +161,7 @@ struct _2DGfxResObj *AddPlttResObjFromOpenNarc(struct _2DGfxResMan *mgr, NARC *n return ret; } -struct _2DGfxResObj *AddPlttResObjFromOpenNarcWithAtEndFlag(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, HeapID heapId, BOOL atEnd) { +struct _2DGfxResObj *AddPlttResObjFromOpenNarcWithAtEndFlag(struct _2DGfxResMan *mgr, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId, BOOL atEnd) { struct _2DGfxResObj *ret; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT); @@ -178,34 +178,34 @@ struct _2DGfxResObj *AddCellOrAnimResObjFromOpenNarc(struct _2DGfxResMan *resMan //GF_ASSERT(mgr->type == type); ret = sub_0200AA70(resMan); GF_ASSERT(ret != NULL); - Add2DGfxResObjFromOpenNarc(resMan, ret, narc, fileId, compressed, id, 0, 0, type, heapId, FALSE); + Add2DGfxResObjFromOpenNarc(resMan, ret, narc, fileId, compressed, id, NNS_G2D_VRAM_TYPE_3DMAIN, 0, type, heapId, FALSE); resMan->num++; return ret; } void ReplaceCharResObjFromOpenNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, HeapID heapId) { int id; - int vram; + NNS_G2D_VRAM_TYPE vram; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_CHAR); GF_ASSERT(obj != NULL); GF_ASSERT(obj->type == GF_GFX_RES_TYPE_CHAR); id = _2DGfxResObj_GetResID(obj); - vram = _2DGfxResObj_GetLoadAddress(obj); + vram = _2DGfxResObj_GetVRamType(obj); DestroySingle2DGfxResObj(mgr, obj); Add2DGfxResObjFromOpenNarc(mgr, obj, narc, fileId, compressed, id, vram, 0, GF_GFX_RES_TYPE_CHAR, heapId, FALSE); } void ReplacePlttResObjFromOpenNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, HeapID heapId) { int id; - int vram; + NNS_G2D_VRAM_TYPE vram; int pltt_num; GF_ASSERT(mgr != NULL); GF_ASSERT(mgr->type == GF_GFX_RES_TYPE_PLTT); GF_ASSERT(obj != NULL); GF_ASSERT(obj->type == GF_GFX_RES_TYPE_PLTT); id = _2DGfxResObj_GetResID(obj); - vram = _2DGfxResObj_GetLoadAddress(obj); + vram = _2DGfxResObj_GetVRamType(obj); pltt_num = _2DGfxResObj_GetPlttNum(obj); DestroySingle2DGfxResObj(mgr, obj); Add2DGfxResObjFromOpenNarc(mgr, obj, narc, fileId, compressed, id, vram, pltt_num, GF_GFX_RES_TYPE_PLTT, heapId, FALSE); @@ -342,7 +342,7 @@ GfGfxResType _2DGfxResObj_GetResType(struct _2DGfxResObj *obj) { return obj->type; } -int _2DGfxResObj_GetLoadAddress(struct _2DGfxResObj *obj) { +NNS_G2D_VRAM_TYPE _2DGfxResObj_GetVRamType(struct _2DGfxResObj *obj) { GF_ASSERT(obj != NULL); if (obj->type == GF_GFX_RES_TYPE_CHAR) { struct CharResExtraData *res = getResObjExtra(obj); @@ -351,7 +351,7 @@ int _2DGfxResObj_GetLoadAddress(struct _2DGfxResObj *obj) { struct PlttResExtraData *res = getResObjExtra(obj); return res->vram; } else { - return 0; + return NNS_G2D_VRAM_TYPE_3DMAIN; } } @@ -471,7 +471,7 @@ static struct _2DGfxResObj *sub_0200AA70(struct _2DGfxResMan *mgr) { return NULL; } -void sub_0200AA9C(struct _2DGfxResObj *obj, GfGfxResType type, int vram, int pltt_num, HeapID heapId) { +void sub_0200AA9C(struct _2DGfxResObj *obj, GfGfxResType type, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId) { void *resource = sub_020256FC(obj->resource); switch (type) { case GF_GFX_RES_TYPE_CHAR: @@ -495,14 +495,14 @@ void sub_0200AA9C(struct _2DGfxResObj *obj, GfGfxResType type, int vram, int plt } } -static struct CharResExtraData *GetResourceExtraCharData(void *resource, int vram, HeapID heapId) { +static struct CharResExtraData *GetResourceExtraCharData(void *resource, NNS_G2D_VRAM_TYPE vram, HeapID heapId) { struct CharResExtraData *ret = AllocFromHeap(heapId, sizeof(struct CharResExtraData)); NNS_G2dGetUnpackedCharacterData(resource, &ret->charData); ret->vram = vram; return ret; } -static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, int vram, int pltt_num, HeapID heapId) { +static struct PlttResExtraData *GetResourceExtraPlttData(void *resource, NNS_G2D_VRAM_TYPE vram, int pltt_num, HeapID heapId) { struct PlttResExtraData *ret = AllocFromHeap(heapId, sizeof(struct PlttResExtraData)); NNS_G2dGetUnpackedPaletteData(resource, &ret->plttData); ret->vram = vram; @@ -547,20 +547,20 @@ static void *getResObjExtra(struct _2DGfxResObj *obj) { return obj->extra; } -static void Add2DGfxResObjFromFile(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, char *name, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId) { +static void Add2DGfxResObjFromFile(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, char *name, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId) { obj->resource = sub_02025600(mgr->resourceMgr, name, id, heapId); obj->type = type; sub_0200AA9C(obj, type, vram, pltt_num, heapId); } -static void Add2DGfxResObjFromNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd) { +static void Add2DGfxResObjFromNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NarcId narcId, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd) { void *res = GfGfxLoader_LoadFromNarc(narcId, fileId, compressed, heapId, atEnd); obj->resource = sub_020255C4(mgr->resourceMgr, res, id); obj->type = type; sub_0200AA9C(obj, type, vram, pltt_num, heapId); } -static void Add2DGfxResObjFromOpenNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, int id, int vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd) { +static void Add2DGfxResObjFromOpenNarc(struct _2DGfxResMan *mgr, struct _2DGfxResObj *obj, NARC *narc, int fileId, BOOL compressed, int id, NNS_G2D_VRAM_TYPE vram, int pltt_num, GfGfxResType type, HeapID heapId, BOOL atEnd) { void *res = sub_0200ACA4(narc, fileId, compressed, heapId, atEnd); obj->resource = sub_020255C4(mgr->resourceMgr, res, id); obj->type = type; diff --git a/src/unk_0200ACF0.c b/src/unk_0200ACF0.c index 597ca7b963..1d121f4db9 100644 --- a/src/unk_0200ACF0.c +++ b/src/unk_0200ACF0.c @@ -9,7 +9,7 @@ BOOL sub_0200ACF0(_2DGfxResObj *obj) { UnkStruct_02021758 sp00; sp00.charData = _2DGfxResObj_GetCharDataPtr(obj); - sp00.dest = _2DGfxResObj_GetLoadAddress(obj); + sp00.vram = _2DGfxResObj_GetVRamType(obj); sp00.id = _2DGfxResObj_GetResID(obj); sp00.unk_0C = FALSE; return sub_02021758(&sp00); @@ -30,7 +30,7 @@ BOOL sub_0200AD64(_2DGfxResObj *obj) { UnkStruct_02021758 sp00; sp00.charData = _2DGfxResObj_GetCharDataPtr(obj); - sp00.dest = _2DGfxResObj_GetLoadAddress(obj); + sp00.vram = _2DGfxResObj_GetVRamType(obj); sp00.id = _2DGfxResObj_GetResID(obj); sp00.unk_0C = FALSE; return sub_020217B0(&sp00); @@ -42,7 +42,7 @@ BOOL sub_0200ADA4(_2DGfxResObj *obj) { UnkStruct_02021758 sp00; sp00.charData = _2DGfxResObj_GetCharDataPtr(obj); - sp00.dest = _2DGfxResObj_GetLoadAddress(obj); + sp00.vram = _2DGfxResObj_GetVRamType(obj); sp00.id = _2DGfxResObj_GetResID(obj); sp00.unk_0C = TRUE; return sub_02021758(&sp00); @@ -63,7 +63,7 @@ BOOL sub_0200AE18(_2DGfxResObj *obj) { UnkStruct_02021758 sp00; sp00.charData = _2DGfxResObj_GetCharDataPtr(obj); - sp00.dest = _2DGfxResObj_GetLoadAddress(obj); + sp00.vram = _2DGfxResObj_GetVRamType(obj); sp00.id = _2DGfxResObj_GetResID(obj); sp00.unk_0C = TRUE; return sub_020217B0(&sp00); @@ -141,7 +141,7 @@ BOOL sub_0200AF94(_2DGfxResObj *plttResObj) { UnkStruct_02022660 sp00; sp00.plttData = _2DGfxResObj_GetPlttDataPtr(plttResObj); - sp00.dest = _2DGfxResObj_GetLoadAddress(plttResObj); + sp00.vram = _2DGfxResObj_GetVRamType(plttResObj); sp00.id = _2DGfxResObj_GetResID(plttResObj); sp00.plttNum = _2DGfxResObj_GetPlttNum(plttResObj); return sub_02022660(&sp00); @@ -162,7 +162,7 @@ BOOL sub_0200B00C(_2DGfxResObj *plttResObj) { UnkStruct_02022660 sp00; sp00.plttData = _2DGfxResObj_GetPlttDataPtr(plttResObj); - sp00.dest = _2DGfxResObj_GetLoadAddress(plttResObj); + sp00.vram = _2DGfxResObj_GetVRamType(plttResObj); sp00.id = _2DGfxResObj_GetResID(plttResObj); sp00.plttNum = _2DGfxResObj_GetPlttNum(plttResObj); return sub_020226A4(&sp00); diff --git a/src/unk_020215A0.c b/src/unk_020215A0.c index 8b32c1c5d9..aefb65aab7 100644 --- a/src/unk_020215A0.c +++ b/src/unk_020215A0.c @@ -2,13 +2,9 @@ #include "unk_020215A0.h" #include "vram_transfer_manager.h" -typedef struct UnkStruct_021D21F4_sub2 { - u8 unk_00[8]; -} UnkStruct_021D21F4_sub2; - typedef struct UnkStruct_021D21F4_sub { NNSG2dCharacterData *unk_00; - u32 unk_04; // flag + NNS_G2D_VRAM_TYPE unk_04; u8 unk_08; int unk_0C; NNSG2dImageProxy unk_10; @@ -18,8 +14,8 @@ typedef struct UnkStruct_021D21F4_sub { int unk_40; BOOL unk_44; int unk_48; - int unk_4C; - int unk_50; + u32 unk_4C; + u32 unk_50; } UnkStruct_021D21F4_sub; struct UnkStruct_021D21F4 { @@ -29,14 +25,14 @@ struct UnkStruct_021D21F4 { int unk_0C; int unk_10; u8 filler_14[8]; - int unk_1C; - int unk_20; + u32 unk_1C; + u32 unk_20; int unk_24; int unk_28; u32 unk_2C; u32 unk_30; - UnkStruct_021D21F4_sub2 *unk_34; - UnkStruct_021D21F4_sub2 *unk_38; + u32 unk_34; + u32 unk_38; } *_021D21F4; BOOL sub_0202180C(int resId); @@ -49,22 +45,30 @@ BOOL sub_02021CCC(UnkStruct_021D21F4_sub *a0); BOOL sub_02021D00(UnkStruct_021D21F4_sub *a0); void sub_02021D58(UnkStruct_021D21F4_sub *a0); UnkStruct_021D21F4_sub *sub_02021D70(int resId); -BOOL sub_02021DE4(int a0, int *a1, int *a2, u32 a3, int *a4, int *a5); -void sub_02021E90(UnkStruct_021D21F4_sub *a0, int a1, int a2); -void sub_02021EC0(int a0, int a1, int a2, int a3, int a4); +GXOBJVRamModeChar sub_02021DA8(UnkStruct_021D21F4_sub *a0, int a1); +void sub_02021DD0(UnkStruct_021D21F4_sub *a0, int a1, int a2); +BOOL sub_02021DE4(int a0, u32 *a1, u32 *a2, u32 a3, u32 *a4, u32 *a5); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match +void sub_02021E90(UnkStruct_021D21F4_sub *a0, u32 a1, u32 a2); +void sub_02021EC0(NNS_G2D_VRAM_TYPE a0, u32 a1, u32 a2, u32 a3, u32 a4); +void sub_02021F28(UnkStruct_021D21F4_sub *a0); +void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE a1); void sub_02021FB0(UnkStruct_021D21F4_sub *a0); UnkStruct_021D21F4_sub *sub_02022024(void); void sub_02022060(void); void sub_020221D0(int a0, int a1, int HeapID); -void sub_02022238(UnkStruct_021D21F4_sub2 *a0); -void sub_02022278(UnkStruct_021D21F4_sub2 *a0); +void sub_02022238(u32 a0); +void sub_02022278(u32 a0); +void sub_02022290(int a0, int a1, int a2); +int sub_020222EC(int a0, u32 a1); void sub_020223C4(UnkStruct_021D21F4_sub *a0); int sub_02022448(GXOBJVRamModeChar mode); +int sub_020224B8(int a0, int a1); int sub_020224A8(int a0, int a1); -BOOL sub_020224C0(u32 size, int a1, int *a2, int *a3); +BOOL sub_020224C0(u32 size, NNS_G2D_VRAM_TYPE a1, u32 *a2, u32 *a3); void sub_02022510(u32 size, int a1); void sub_0202256C(int a0, int a1, int a2, int *a3, int *a4); -void sub_02022374(int a0, int a1, UnkStruct_021D21F4_sub2 *a2); +void sub_02022374(int a0, int a1, u32 a2); +int sub_02022488(u32 a0, int a1, int a2); void sub_020215A0(UnkStruct_020215A0 *template) { sub_020215C0(template, GX_GetOBJVRamModeChar(), GXS_GetOBJVRamModeChar()); @@ -114,12 +118,12 @@ void sub_020216F4(u32 a0, u32 a1, u32 a2) { if (a2 == 1) { sub_0202256C(_021D21F4->unk_1C, a0, a1, &sp8, &sp4); if (sp4 > 0) { - sub_02021EC0(1, sp8, 0, sp4, 0); + sub_02021EC0(NNS_G2D_VRAM_TYPE_2DMAIN, sp8, 0, sp4, 0); } } else { sub_0202256C(_021D21F4->unk_20, a0, a1, &sp8, &sp4); if (sp4 > 0) { - sub_02021EC0(2, 0, sp8, 0, sp4); + sub_02021EC0(NNS_G2D_VRAM_TYPE_2DSUB, 0, sp8, 0, sp4); } } } @@ -176,10 +180,10 @@ void sub_0202183C(int id, NNSG2dCharacterData *charData) { UnkStruct_021D21F4_sub *sub = sub_02021D70(id); GF_ASSERT(sub != NULL); sub->unk_00 = charData; - if (sub->unk_04 & 1) { + if (sub->unk_04 & NNS_G2D_VRAM_TYPE_2DMAIN) { GF_CreateNewVramTransferTask(NNS_GFD_DST_2D_OBJ_CHAR_MAIN, sub->unk_34, charData->pRawData, charData->szByte); } - if (sub->unk_04 & 2) { + if (sub->unk_04 & NNS_G2D_VRAM_TYPE_2DSUB) { GF_CreateNewVramTransferTask(NNS_GFD_DST_2D_OBJ_CHAR_SUB, sub->unk_38, charData->pRawData, charData->szByte); } } @@ -227,10 +231,10 @@ NNSG2dImageProxy *sub_02021934(int resId, u32 size) { if (sub->unk_3C == 0) { return NULL; } - int sp14; - int sp10; - int spC; - int sp8; + u32 sp14; + u32 sp10; + u32 spC; + u32 sp8; sub_02021DE4(sub->unk_04, &sp14, &sp10, size, &spC, &sp8); if (sub->unk_3C == 3) { return NULL; @@ -247,20 +251,30 @@ NNSG2dImageProxy *sub_02021934(int resId, u32 size) { } NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { - UnkStruct_021D21F4_sub *sub = sub_02021C50(proxyIn); + UnkStruct_021D21F4_sub *sub; + UnkStruct_021D21F4_sub *sub2; + u32 sp14; + u32 sp10; + u32 spC; + u32 sp8; + u32 r2; + + sub = sub_02021C50(proxyIn); GF_ASSERT(sub != NULL); - UnkStruct_021D21F4_sub *sub2 = sub_02022024(); + sub2 = sub_02022024(); GF_ASSERT(sub2 != NULL); if (sub->unk_3C != 3) { return NULL; } *sub2 = *sub; sub2->unk_3C = 4; - int sp14; - int sp10; - int spC; - int sp8; - sub_02021DE4(sub2->unk_04, &sp14, &sp10, (sub2->unk_04 & 1 ? sub2->unk_4C : sub2->unk_50), &spC, &sp8); + if (sub2->unk_04 & NNS_G2D_VRAM_TYPE_2DMAIN) { + r2 = sub2->unk_4C; + } else { + r2 = sub2->unk_50; + } + + sub_02021DE4(sub2->unk_04, &sp14, &sp10, r2, &spC, &sp8); sub_02021E90(sub2, sp14, sp10); sub2->unk_48 = 1; sub2->unk_4C = spC; @@ -289,11 +303,11 @@ void sub_02021A50(const NNSG2dImageProxy *proxy) { } } -BOOL sub_02021AC8(u32 a0, int a1, int a2, UnkStruct_02021AC8 *a3) { - int sp14; - int sp10; - int spC; - int sp8; +BOOL sub_02021AC8(u32 a0, int a1, NNS_G2D_VRAM_TYPE a2, UnkStruct_02021AC8 *a3) { + u32 sp14; + u32 sp10; + u32 spC; + u32 sp8; BOOL ret; if (a1 == 0) { @@ -352,7 +366,7 @@ void sub_02021BEC(UnkStruct_021D21F4 *a0) { void sub_02021C08(UnkStruct_021D21F4_sub *a0) { a0->unk_00 = NULL; - a0->unk_04 = 0; + a0->unk_04 = NNS_G2D_VRAM_TYPE_3DMAIN; a0->unk_08 = 0; a0->unk_0C = -1; a0->unk_34 = 0; @@ -365,7 +379,7 @@ void sub_02021C08(UnkStruct_021D21F4_sub *a0) { BOOL sub_02021C2C(const UnkStruct_02021758 *a0, UnkStruct_021D21F4_sub *a1) { a1->unk_00 = a0->charData; a1->unk_0C = a0->id; - a1->unk_04 = a0->dest; + a1->unk_04 = a0->vram; a1->unk_08 = a1->unk_00->characterFmt >> 8; a1->unk_44 = a0->unk_0C; a1->unk_48 = 0; @@ -403,3 +417,143 @@ BOOL sub_02021C9C(UnkStruct_021D21F4_sub *a0) { } return ret; } + +BOOL sub_02021CCC(UnkStruct_021D21F4_sub *a0) { + u32 sp4; + u32 sp0; + BOOL ret = sub_020224C0(a0->unk_00->szByte, a0->unk_04, &sp4, &sp0); + if (ret) { + sub_02021DD0(a0, sp4, sp0); + sub_02022510(a0->unk_00->szByte, a0->unk_04); + } + return ret; +} + +BOOL sub_02021D00(UnkStruct_021D21F4_sub *a0) { + u32 sp14; + u32 sp10; + u32 spC; + u32 sp8; + if (!sub_02021DE4(a0->unk_04, &sp14, &sp10, a0->unk_00->szByte, &spC, &sp8)) { + return FALSE; + } + sub_02021E90(a0, sp14, sp10); + a0->unk_48 = 1; + a0->unk_4C = spC; + a0->unk_50 = sp8; + sub_02021F28(a0); + sub_02021EC0(a0->unk_04, sp14, sp10, spC, sp8); + return TRUE; +} + +void sub_02021D58(UnkStruct_021D21F4_sub *a0) { + if (a0->unk_48) { + sub_020223C4(a0); + } + sub_02021C08(a0); +} + +UnkStruct_021D21F4_sub *sub_02021D70(int resId) { + for (int i = 0; i < _021D21F4->unk_04; ++i) { + if (_021D21F4->unk_00[i].unk_0C == resId) { + return &_021D21F4->unk_00[i]; + } + } + + return NULL; +} + +GXOBJVRamModeChar sub_02021DA8(UnkStruct_021D21F4_sub *a0, int a1) { + if (a1 == 1) { + a0->unk_00->mapingType = GX_GetOBJVRamModeChar(); + } else { + a0->unk_00->mapingType = GXS_GetOBJVRamModeChar(); + } + return a0->unk_00->mapingType; +} + +void sub_02021DD0(UnkStruct_021D21F4_sub *a0, int a1, int a2) { + a0->unk_34 = a1; + a0->unk_38 = a2; + if (a0->unk_08 == 0) { + sub_02021F28(a0); + } +} + +BOOL sub_02021DE4(int a0, u32 *a1, u32 *a2, u32 a3, u32 *a4, u32 *a5) { + if (a0 & NNS_G2D_VRAM_TYPE_2DMAIN) { + *a4 = sub_02022488(a3, _021D21F4->unk_2C, 1); + int r0 = sub_020224A8(*a4, _021D21F4->unk_2C); + *a1 = sub_020222EC(r0, _021D21F4->unk_34); + if (*a1 == -1) { + GF_ASSERT(FALSE); + return FALSE; + } + *a1 = sub_020224B8(*a1, _021D21F4->unk_2C); + } + if (a0 & NNS_G2D_VRAM_TYPE_2DSUB) { + *a5 = sub_02022488(a3, _021D21F4->unk_30, 1); + int r0 = sub_020224A8(*a5, _021D21F4->unk_30); + *a2 = sub_020222EC(r0, _021D21F4->unk_38); + if (*a2 == -1) { + GF_ASSERT(FALSE); + return FALSE; + } + *a2 = sub_020224B8(*a2, _021D21F4->unk_30); + } + return TRUE; +} + +void sub_02021E90(UnkStruct_021D21F4_sub *a0, u32 a1, u32 a2) { + if (a0->unk_04 & NNS_G2D_VRAM_TYPE_2DMAIN) { + a0->unk_34 = a1 + _021D21F4->unk_1C; + } + if (a0->unk_04 & NNS_G2D_VRAM_TYPE_2DSUB) { + a0->unk_38 = a2 + _021D21F4->unk_20; + } +} + +void sub_02021EC0(NNS_G2D_VRAM_TYPE a0, u32 a1, u32 a2, u32 a3, u32 a4) { + if (a0 & NNS_G2D_VRAM_TYPE_2DMAIN) { + int r7 = sub_020224A8(a3, _021D21F4->unk_2C); + int r0 = sub_020224A8(a1, _021D21F4->unk_2C); + sub_02022290(r0, r7, _021D21F4->unk_34); + } + if (a0 & NNS_G2D_VRAM_TYPE_2DSUB) { + int r7 = sub_020224A8(a4, _021D21F4->unk_30); + int r0 = sub_020224A8(a2, _021D21F4->unk_30); + sub_02022290(r0, r7, _021D21F4->unk_38); + } +} + +void sub_02021F28(UnkStruct_021D21F4_sub *a0) { + NNS_G2dInitImageProxy(&a0->unk_10); + if (a0->unk_04 != NNS_G2D_VRAM_TYPE_BOTH) { + sub_02021F54(a0, a0->unk_04); + } else { + sub_02021F54(a0, NNS_G2D_VRAM_TYPE_2DMAIN); + sub_02021F54(a0, NNS_G2D_VRAM_TYPE_2DSUB); + } +} + +void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE a1) { + int r0 = a0->unk_40 ? sub_02021DA8(a0, a1) : a1; + u32 r1; + if (a1 == NNS_G2D_VRAM_TYPE_2DMAIN) { + r1 = a0->unk_34; + GX_GetOBJVRamModeChar(); + } else { + r1 = a0->unk_38; + GXS_GetOBJVRamModeChar(); + } + if (r0 == 0) { + NNS_G2dLoadImage2DMapping(a0->unk_00, r1, a1, &a0->unk_10); + } else { + NNS_G2dLoadImage1DMapping(a0->unk_00, r1, a1, &a0->unk_10); + } + if (a1 == NNS_G2D_VRAM_TYPE_2DMAIN) { + GX_GetOBJVRamModeChar(); + } else { + GXS_GetOBJVRamModeChar(); + } +} From c98bdb21a7911412297444d7d119f4183642ed1b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 19 Feb 2024 13:25:45 -0500 Subject: [PATCH 04/17] Finish unk_020215A0 decomp --- asm/include/unk_020215A0.inc | 34 -- asm/unk_020215A0_s.s | 859 ------------------------------ include/constants/global.h | 3 + lib/include/nitro/gx/gx_vramcnt.h | 2 + lib/include/nnsys/g2d/g2d_Image.h | 2 + main.lsf | 1 - src/unk_0200A090.c | 6 +- src/unk_020215A0.c | 357 ++++++++++++- 8 files changed, 341 insertions(+), 923 deletions(-) delete mode 100644 asm/include/unk_020215A0.inc delete mode 100644 asm/unk_020215A0_s.s diff --git a/asm/include/unk_020215A0.inc b/asm/include/unk_020215A0.inc deleted file mode 100644 index 27d0549279..0000000000 --- a/asm/include/unk_020215A0.inc +++ /dev/null @@ -1,34 +0,0 @@ -#include -#pragma once -.public AllocFromHeap -.public FreeToHeap -.public GF_CreateNewVramTransferTask -.public sub_020215A0 -.public sub_020215C0 -.public sub_0202168C -.public sub_020216C8 -.public sub_020216F4 -.public sub_02021758 -.public sub_020217B0 -.public sub_0202183C -.public sub_02021884 -.public sub_02021910 -.public sub_02021934 -.public sub_020219B8 -.public sub_02021A50 -.public sub_02021AC8 -.public sub_02021B5C -.public sub_02021BD0 -.public sub_02021BEC -.public sub_02022448 -.public GF_AssertFail -.public NNS_G2dInitImageProxy -.public NNS_G2dGetImageLocation -.public NNS_G2dLoadImage1DMapping -.public NNS_G2dLoadImage2DMapping -.public NNS_G2dLoadImageVramTransfer -.public GX_GetBankForOBJ -.public GX_GetBankForSubOBJ -.public MIi_CpuClear32 -.public memset -.public _s32_div_f diff --git a/asm/unk_020215A0_s.s b/asm/unk_020215A0_s.s deleted file mode 100644 index 265dfca2f4..0000000000 --- a/asm/unk_020215A0_s.s +++ /dev/null @@ -1,859 +0,0 @@ - .include "asm/macros.inc" - .include "unk_020215A0.inc" - .include "global.inc" - - .extern _021D21F4 - .extern sub_02021C08 - .extern sub_02021DA8 - - .text - - thumb_func_start sub_02021FB0 -sub_02021FB0: ; 0x02021FB0 - push {r4, lr} - add r4, r0, #0 - add r0, #0x10 - bl NNS_G2dInitImageProxy - ldr r1, [r4, #4] - cmp r1, #3 - beq _02021FC8 - add r0, r4, #0 - bl sub_02021FDC - pop {r4, pc} -_02021FC8: - add r0, r4, #0 - mov r1, #1 - bl sub_02021FDC - add r0, r4, #0 - mov r1, #2 - bl sub_02021FDC - pop {r4, pc} - .balign 4, 0 - thumb_func_end sub_02021FB0 - - thumb_func_start sub_02021FDC -sub_02021FDC: ; 0x02021FDC - push {r3, r4, r5, lr} - add r5, r0, #0 - ldr r2, [r5, #0x40] - add r4, r1, #0 - cmp r2, #0 - beq _02021FEC - bl sub_02021DA8 -_02021FEC: - cmp r4, #1 - bne _02021FFA - mov r0, #1 - lsl r0, r0, #0x1a - ldr r1, [r5, #0x34] - ldr r0, [r0] - b _02022000 -_02021FFA: - ldr r0, _02022020 ; =0x04001000 - ldr r1, [r5, #0x38] - ldr r0, [r0] -_02022000: - ldr r0, [r5] - add r5, #0x10 - add r2, r4, #0 - add r3, r5, #0 - bl NNS_G2dLoadImageVramTransfer - cmp r4, #1 - bne _02022018 - mov r0, #1 - lsl r0, r0, #0x1a - ldr r0, [r0] - pop {r3, r4, r5, pc} -_02022018: - ldr r0, _02022020 ; =0x04001000 - ldr r0, [r0] - pop {r3, r4, r5, pc} - nop -_02022020: .word 0x04001000 - thumb_func_end sub_02021FDC - - thumb_func_start sub_02022024 -sub_02022024: ; 0x02022024 - push {r3, r4} - ldr r1, _0202205C ; =_021D21F4 - mov r0, #0 - ldr r4, [r1] - ldr r1, [r4, #4] - cmp r1, #0 - ble _02022054 - ldr r1, [r4] - add r3, r1, #0 -_02022036: - add r2, r3, #0 - add r2, #0x3c - ldrb r2, [r2] - cmp r2, #0 - bne _0202204A - mov r2, #0x54 - mul r2, r0 - add r0, r1, r2 - pop {r3, r4} - bx lr -_0202204A: - ldr r2, [r4, #4] - add r0, r0, #1 - add r3, #0x54 - cmp r0, r2 - blt _02022036 -_02022054: - mov r0, #0 - pop {r3, r4} - bx lr - nop -_0202205C: .word _021D21F4 - thumb_func_end sub_02022024 - - thumb_func_start sub_02022060 -sub_02022060: ; 0x02022060 - push {r3, lr} - bl GX_GetBankForOBJ - cmp r0, #0x30 - bgt _02022090 - bge _020220D8 - cmp r0, #0x10 - bgt _0202208A - bge _020220CC - cmp r0, #3 - bhi _02022108 - add r1, r0, r0 - add r1, pc - ldrh r1, [r1, #6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_02022082: ; jump table - .short _020220AA - _02022082 - 2 ; case 0 - .short _020220F0 - _02022082 - 2 ; case 1 - .short _020220F0 - _02022082 - 2 ; case 2 - .short _020220FC - _02022082 - 2 ; case 3 -_0202208A: - cmp r0, #0x20 - beq _020220B4 - b _02022108 -_02022090: - cmp r0, #0x50 - bgt _0202209C - bge _020220D8 - cmp r0, #0x40 - beq _020220B4 - b _02022108 -_0202209C: - cmp r0, #0x60 - bgt _020220A4 - beq _020220C0 - b _02022108 -_020220A4: - cmp r0, #0x70 - beq _020220E4 - b _02022108 -_020220AA: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x14] - b _02022110 -_020220B4: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #1 - ldr r0, [r0] - lsl r1, r1, #0xe - str r1, [r0, #0x14] - b _02022110 -_020220C0: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #2 - ldr r0, [r0] - lsl r1, r1, #0xe - str r1, [r0, #0x14] - b _02022110 -_020220CC: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #1 - ldr r0, [r0] - lsl r1, r1, #0x10 - str r1, [r0, #0x14] - b _02022110 -_020220D8: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #5 - ldr r0, [r0] - lsl r1, r1, #0xe - str r1, [r0, #0x14] - b _02022110 -_020220E4: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #6 - ldr r0, [r0] - lsl r1, r1, #0xe - str r1, [r0, #0x14] - b _02022110 -_020220F0: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #2 - ldr r0, [r0] - lsl r1, r1, #0x10 - str r1, [r0, #0x14] - b _02022110 -_020220FC: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #1 - ldr r0, [r0] - lsl r1, r1, #0x12 - str r1, [r0, #0x14] - b _02022110 -_02022108: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x14] -_02022110: - bl GX_GetBankForSubOBJ - cmp r0, #0 - beq _02022126 - cmp r0, #8 - beq _0202213A - mov r1, #1 - lsl r1, r1, #8 - cmp r0, r1 - beq _02022130 - b _02022146 -_02022126: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x18] - b _0202214E -_02022130: - ldr r0, _020221B0 ; =_021D21F4 - lsl r1, r1, #6 - ldr r0, [r0] - str r1, [r0, #0x18] - b _0202214E -_0202213A: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #2 - ldr r0, [r0] - lsl r1, r1, #0x10 - str r1, [r0, #0x18] - b _0202214E -_02022146: - ldr r0, _020221B0 ; =_021D21F4 - mov r1, #0 - ldr r0, [r0] - str r1, [r0, #0x18] -_0202214E: - ldr r0, _020221B0 ; =_021D21F4 - ldr r1, [r0] - ldr r0, [r1, #0x24] - ldr r1, [r1, #0x2c] - bl sub_020224B8 - ldr r1, _020221B0 ; =_021D21F4 - ldr r3, [r1] - ldr r2, [r3, #0x14] - sub r0, r2, r0 - str r0, [r3, #0x1c] - ldr r1, [r1] - ldr r0, [r1, #0x28] - ldr r1, [r1, #0x30] - bl sub_020224B8 - ldr r1, _020221B0 ; =_021D21F4 - ldr r3, [r1] - ldr r2, [r3, #0x18] - sub r0, r2, r0 - str r0, [r3, #0x20] - ldr r1, [r1] - mov r2, #0 - ldr r0, [r1, #0x1c] - cmp r0, #0 - blt _0202218A - ldr r0, [r1, #0x20] - cmp r0, #0 - blt _0202218A - mov r2, #1 -_0202218A: - cmp r2, #0 - bne _02022192 - bl GF_AssertFail -_02022192: - ldr r0, _020221B0 ; =_021D21F4 - mov r2, #0 - ldr r1, [r0] - ldr r0, [r1, #0x1c] - cmp r0, #0 - blt _020221A6 - ldr r0, [r1, #0x20] - cmp r0, #0 - blt _020221A6 - mov r2, #1 -_020221A6: - cmp r2, #0 - bne _020221AE - bl GF_AssertFail -_020221AE: - pop {r3, pc} - .balign 4, 0 -_020221B0: .word _021D21F4 - thumb_func_end sub_02022060 - - thumb_func_start sub_020221B4 -sub_020221B4: ; 0x020221B4 - push {r3, lr} - ldr r0, _020221CC ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x34] - bl sub_02022278 - ldr r0, _020221CC ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x38] - bl sub_02022278 - pop {r3, pc} - .balign 4, 0 -_020221CC: .word _021D21F4 - thumb_func_end sub_020221B4 - - thumb_func_start sub_020221D0 -sub_020221D0: ; 0x020221D0 - push {r4, r5, r6, lr} - add r5, r0, #0 - ldr r0, _02022234 ; =_021D21F4 - add r4, r1, #0 - ldr r1, [r0] - add r6, r2, #0 - str r5, [r1, #0x24] - ldr r1, [r0] - str r4, [r1, #0x28] - ldr r0, [r0] - ldr r0, [r0, #0x34] - cmp r0, #0 - beq _020221EE - bl FreeToHeap -_020221EE: - ldr r0, _02022234 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x38] - cmp r0, #0 - beq _020221FC - bl FreeToHeap -_020221FC: - ldr r0, _02022234 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x24] - cmp r0, #0 - beq _02022214 - add r0, r6, #0 - lsr r1, r5, #3 - bl AllocFromHeap - ldr r1, _02022234 ; =_021D21F4 - ldr r1, [r1] - str r0, [r1, #0x34] -_02022214: - ldr r0, _02022234 ; =_021D21F4 - ldr r0, [r0] - ldr r0, [r0, #0x28] - cmp r0, #0 - beq _0202222C - add r0, r6, #0 - lsr r1, r4, #3 - bl AllocFromHeap - ldr r1, _02022234 ; =_021D21F4 - ldr r1, [r1] - str r0, [r1, #0x38] -_0202222C: - bl sub_020221B4 - pop {r4, r5, r6, pc} - nop -_02022234: .word _021D21F4 - thumb_func_end sub_020221D0 - - thumb_func_start sub_02022238 -sub_02022238: ; 0x02022238 - push {r3, lr} - cmp r0, #0 - beq _0202225A - ldr r1, _0202225C ; =_021D21F4 - ldr r2, [r1] - ldr r1, [r2, #0x34] - cmp r0, r1 - bne _02022252 - mov r1, #0 - str r1, [r2, #0x24] - bl FreeToHeap - pop {r3, pc} -_02022252: - mov r1, #0 - str r1, [r2, #0x28] - bl FreeToHeap -_0202225A: - pop {r3, pc} - .balign 4, 0 -_0202225C: .word _021D21F4 - thumb_func_end sub_02022238 - - thumb_func_start sub_02022260 -sub_02022260: ; 0x02022260 - ldr r1, _02022274 ; =_021D21F4 - ldr r2, [r1] - ldr r1, [r2, #0x34] - cmp r0, r1 - bne _0202226E - ldr r0, [r2, #0x24] - bx lr -_0202226E: - ldr r0, [r2, #0x28] - bx lr - nop -_02022274: .word _021D21F4 - thumb_func_end sub_02022260 - - thumb_func_start sub_02022278 -sub_02022278: ; 0x02022278 - push {r4, lr} - add r4, r0, #0 - beq _0202228E - bl sub_02022260 - add r2, r0, #0 - add r0, r4, #0 - mov r1, #0 - lsr r2, r2, #3 - bl memset -_0202228E: - pop {r4, pc} - thumb_func_end sub_02022278 - - thumb_func_start sub_02022290 -sub_02022290: ; 0x02022290 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r5, r0, #0 - add r6, r1, #0 - add r4, r2, #0 - beq _020222E6 - add r0, r4, #0 - bl sub_02022260 - add r6, r5, r6 - add r7, r0, #0 - cmp r5, r6 - bhs _020222E6 -_020222AA: - cmp r5, r7 - bhs _020222E6 - add r0, r5, #0 - add r1, sp, #4 - add r2, sp, #0 - bl sub_02022560 - add r0, sp, #0 - ldrb r1, [r0] - mov r0, #1 - lsl r0, r1 - ldr r1, [sp, #4] - ldrb r1, [r4, r1] - tst r0, r1 - beq _020222CC - bl GF_AssertFail -_020222CC: - add r2, sp, #0 - ldrb r3, [r2] - ldr r1, [sp, #4] - mov r2, #1 - lsl r2, r3 - lsl r2, r2, #0x18 - ldrb r0, [r4, r1] - lsr r2, r2, #0x18 - add r5, r5, #1 - orr r0, r2 - strb r0, [r4, r1] - cmp r5, r6 - blo _020222AA -_020222E6: - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 - thumb_func_end sub_02022290 - - thumb_func_start sub_020222EC -sub_020222EC: ; 0x020222EC - push {r3, r4, r5, r6, r7, lr} - sub sp, #0x10 - add r7, r0, #0 - str r1, [sp] - cmp r1, #0 - beq _0202236A - add r0, r1, #0 - bl sub_02022260 - mov r6, #0 - str r0, [sp, #4] - cmp r0, #0 - bls _0202236A -_02022306: - add r0, r6, #0 - add r1, sp, #0xc - add r2, sp, #8 - bl sub_02022560 - add r0, sp, #8 - ldrb r1, [r0] - mov r0, #1 - mov r4, #0 - lsl r0, r1 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - b _02022348 -_02022320: - add r5, r6, r4 - add r0, r5, #0 - add r1, sp, #0xc - add r2, sp, #8 - bl sub_02022560 - add r0, sp, #8 - ldrb r1, [r0] - mov r0, #1 - lsl r0, r1 - lsl r0, r0, #0x18 - ldr r1, [sp, #4] - lsr r0, r0, #0x18 - cmp r5, r1 - blo _02022346 - mov r0, #0 - add sp, #0x10 - mvn r0, r0 - pop {r3, r4, r5, r6, r7, pc} -_02022346: - add r4, r4, #1 -_02022348: - ldr r2, [sp, #0xc] - ldr r1, [sp] - ldrb r1, [r1, r2] - tst r0, r1 - bne _02022356 - cmp r4, r7 - bls _02022320 -_02022356: - cmp r4, r7 - bls _02022360 - add sp, #0x10 - add r0, r6, #0 - pop {r3, r4, r5, r6, r7, pc} -_02022360: - add r0, r6, r4 - add r6, r0, #1 - ldr r0, [sp, #4] - cmp r6, r0 - blo _02022306 -_0202236A: - mov r0, #0 - mvn r0, r0 - add sp, #0x10 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 - thumb_func_end sub_020222EC - - thumb_func_start sub_02022374 -sub_02022374: ; 0x02022374 - push {r3, r4, r5, r6, r7, lr} - sub sp, #8 - add r5, r0, #0 - add r4, r2, #0 - beq _020223BE - add r6, r5, r1 - cmp r5, r6 - bhs _020223BE - add r7, sp, #0 -_02022386: - add r0, r5, #0 - add r1, sp, #4 - add r2, sp, #0 - bl sub_02022560 - ldrb r1, [r7] - mov r0, #1 - lsl r0, r1 - ldr r1, [sp, #4] - ldrb r1, [r4, r1] - tst r0, r1 - bne _020223A2 - bl GF_AssertFail -_020223A2: - ldrb r0, [r7] - mov r1, #1 - ldr r3, [sp, #4] - lsl r1, r0 - mov r0, #0xff - eor r0, r1 - lsl r0, r0, #0x18 - ldrb r2, [r4, r3] - lsr r0, r0, #0x18 - add r5, r5, #1 - and r0, r2 - strb r0, [r4, r3] - cmp r5, r6 - blo _02022386 -_020223BE: - add sp, #8 - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 - thumb_func_end sub_02022374 - - thumb_func_start sub_020223C4 -sub_020223C4: ; 0x020223C4 - push {r3, r4, r5, lr} - add r4, r0, #0 - ldr r0, [r4, #4] - mov r1, #1 - tst r0, r1 - beq _02022402 - add r0, r4, #0 - add r0, #0x10 - bl NNS_G2dGetImageLocation - ldr r1, _02022444 ; =_021D21F4 - ldr r2, [r1] - ldr r1, [r2, #0x1c] - sub r0, r0, r1 - ldr r1, [r2, #0x2c] - bl sub_020224A8 - ldr r1, _02022444 ; =_021D21F4 - add r5, r0, #0 - ldr r1, [r1] - ldr r0, [r4, #0x4c] - ldr r1, [r1, #0x2c] - bl sub_020224A8 - ldr r2, _02022444 ; =_021D21F4 - add r1, r0, #0 - ldr r2, [r2] - add r0, r5, #0 - ldr r2, [r2, #0x34] - bl sub_02022374 -_02022402: - ldr r0, [r4, #4] - mov r1, #2 - tst r0, r1 - beq _0202243C - add r0, r4, #0 - add r0, #0x10 - bl NNS_G2dGetImageLocation - ldr r1, _02022444 ; =_021D21F4 - ldr r2, [r1] - ldr r1, [r2, #0x20] - sub r0, r0, r1 - ldr r1, [r2, #0x30] - bl sub_020224A8 - ldr r1, _02022444 ; =_021D21F4 - add r5, r0, #0 - ldr r1, [r1] - ldr r0, [r4, #0x50] - ldr r1, [r1, #0x30] - bl sub_020224A8 - ldr r2, _02022444 ; =_021D21F4 - add r1, r0, #0 - ldr r2, [r2] - add r0, r5, #0 - ldr r2, [r2, #0x38] - bl sub_02022374 -_0202243C: - mov r0, #0 - str r0, [r4, #0x48] - pop {r3, r4, r5, pc} - nop -_02022444: .word _021D21F4 - thumb_func_end sub_020223C4 - - thumb_func_start sub_02022448 -sub_02022448: ; 0x02022448 - ldr r1, _0202247C ; =0x00100010 - cmp r0, r1 - bgt _02022456 - bge _0202246C - cmp r0, #0x10 - beq _02022468 - b _02022478 -_02022456: - ldr r1, _02022480 ; =0x00200010 - cmp r0, r1 - bgt _02022460 - beq _02022470 - b _02022478 -_02022460: - ldr r1, _02022484 ; =0x00300010 - cmp r0, r1 - beq _02022474 - b _02022478 -_02022468: - mov r0, #1 - bx lr -_0202246C: - mov r0, #2 - bx lr -_02022470: - mov r0, #4 - bx lr -_02022474: - mov r0, #8 - bx lr -_02022478: - mov r0, #1 - bx lr - .balign 4, 0 -_0202247C: .word 0x00100010 -_02022480: .word 0x00200010 -_02022484: .word 0x00300010 - thumb_func_end sub_02022448 - - thumb_func_start sub_02022488 -sub_02022488: ; 0x02022488 - push {r4, r5, r6, lr} - add r4, r1, #0 - lsl r4, r4, #5 - add r1, r4, #0 - add r5, r0, #0 - add r6, r2, #0 - bl _s32_div_f - cmp r1, #0 - beq _020224A4 - sub r5, r5, r1 - cmp r6, #1 - bne _020224A4 - add r5, r5, r4 -_020224A4: - add r0, r5, #0 - pop {r4, r5, r6, pc} - thumb_func_end sub_02022488 - - thumb_func_start sub_020224A8 -sub_020224A8: ; 0x020224A8 - asr r2, r0, #4 - lsr r2, r2, #0x1b - add r2, r0, r2 - ldr r3, _020224B4 ; =_s32_div_f - asr r0, r2, #5 - bx r3 - .balign 4, 0 -_020224B4: .word _s32_div_f - thumb_func_end sub_020224A8 - - thumb_func_start sub_020224B8 -sub_020224B8: ; 0x020224B8 - mul r1, r0 - lsl r0, r1, #5 - bx lr - .balign 4, 0 - thumb_func_end sub_020224B8 - - thumb_func_start sub_020224C0 -sub_020224C0: ; 0x020224C0 - push {r3, r4, r5, r6, r7, lr} - add r4, r1, #0 - add r5, r0, #0 - add r1, r2, #0 - mov r0, #1 - add r2, r4, #0 - add r7, r3, #0 - tst r2, r0 - beq _020224EA - ldr r2, _0202250C ; =_021D21F4 - ldr r2, [r2] - ldr r6, [r2, #0xc] - ldr r2, [r2, #0x1c] - add r3, r6, r5 - cmp r3, r2 - bls _020224E8 - bl GF_AssertFail - mov r0, #0 - b _020224EA -_020224E8: - str r6, [r1] -_020224EA: - mov r1, #2 - tst r1, r4 - beq _02022508 - ldr r1, _0202250C ; =_021D21F4 - ldr r1, [r1] - ldr r3, [r1, #0x10] - ldr r1, [r1, #0x20] - add r2, r3, r5 - cmp r2, r1 - bls _02022506 - bl GF_AssertFail - mov r0, #0 - pop {r3, r4, r5, r6, r7, pc} -_02022506: - str r3, [r7] -_02022508: - pop {r3, r4, r5, r6, r7, pc} - nop -_0202250C: .word _021D21F4 - thumb_func_end sub_020224C0 - - thumb_func_start sub_02022510 -sub_02022510: ; 0x02022510 - push {r3, r4, r5, lr} - add r4, r1, #0 - add r5, r0, #0 - mov r2, #1 - add r0, r4, #0 - tst r0, r2 - beq _02022538 - ldr r0, _0202255C ; =_021D21F4 - ldr r3, [r0] - ldr r1, [r3, #0xc] - add r1, r1, r5 - str r1, [r3, #0xc] - ldr r1, [r0] - ldr r0, [r1, #0xc] - ldr r1, [r1, #0x2c] - bl sub_02022488 - ldr r1, _0202255C ; =_021D21F4 - ldr r1, [r1] - str r0, [r1, #0xc] -_02022538: - mov r0, #2 - tst r0, r4 - beq _0202255A - ldr r0, _0202255C ; =_021D21F4 - ldr r2, [r0] - ldr r1, [r2, #0x10] - add r1, r1, r5 - str r1, [r2, #0x10] - ldr r1, [r0] - mov r2, #1 - ldr r0, [r1, #0x10] - ldr r1, [r1, #0x30] - bl sub_02022488 - ldr r1, _0202255C ; =_021D21F4 - ldr r1, [r1] - str r0, [r1, #0x10] -_0202255A: - pop {r3, r4, r5, pc} - .balign 4, 0 -_0202255C: .word _021D21F4 - thumb_func_end sub_02022510 - - thumb_func_start sub_02022560 -sub_02022560: ; 0x02022560 - asr r3, r0, #3 - str r3, [r1] - mov r1, #7 - and r0, r1 - strb r0, [r2] - bx lr - thumb_func_end sub_02022560 - - thumb_func_start sub_0202256C -sub_0202256C: ; 0x0202256C - push {r3, r4} - sub r0, r1, r0 - ldr r4, [sp, #8] - str r0, [r3] - bpl _02022582 - add r0, r2, r0 - str r0, [r4] - mov r0, #0 - str r0, [r3] - pop {r3, r4} - bx lr -_02022582: - str r2, [r4] - pop {r3, r4} - bx lr - thumb_func_end sub_0202256C diff --git a/include/constants/global.h b/include/constants/global.h index 2a625fcce1..7c0d79691e 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -15,6 +15,9 @@ // alias #ifndef PM_ASM +// NNS_G2D_VRAM_TYPE_3DMAIN +#define NNS_G2D_VRAM_TYPE_NEITHER ((NNS_G2D_VRAM_TYPE)0) +// NNS_G2D_VRAM_TYPE_MAX #define NNS_G2D_VRAM_TYPE_BOTH ((NNS_G2D_VRAM_TYPE)(NNS_G2D_VRAM_TYPE_2DMAIN|NNS_G2D_VRAM_TYPE_2DSUB)) #endif //PM_ASM diff --git a/lib/include/nitro/gx/gx_vramcnt.h b/lib/include/nitro/gx/gx_vramcnt.h index f148ad8489..74d232d76f 100644 --- a/lib/include/nitro/gx/gx_vramcnt.h +++ b/lib/include/nitro/gx/gx_vramcnt.h @@ -1,6 +1,8 @@ #ifndef NITRO_GX_GX_VRAMCNT_H_ #define NITRO_GX_GX_VRAMCNT_H_ +#include + typedef enum { GX_VRAM_A = OS_VRAM_BANK_ID_A,// VRAM-A GX_VRAM_B = OS_VRAM_BANK_ID_B,// VRAM-B diff --git a/lib/include/nnsys/g2d/g2d_Image.h b/lib/include/nnsys/g2d/g2d_Image.h index d1c5ca3894..77aff04909 100644 --- a/lib/include/nnsys/g2d/g2d_Image.h +++ b/lib/include/nnsys/g2d/g2d_Image.h @@ -42,5 +42,7 @@ void NNS_G2dLoadImage1DMapping(const NNSG2dCharacterData* pSrcData, u32 baseAddr void NNS_G2dLoadImage2DMapping(const NNSG2dCharacterData* pSrcData, u32 baseAddr, NNS_G2D_VRAM_TYPE type, NNSG2dImageProxy* pImgProxy); u32 NNS_G2dGetImageLocation (const NNSG2dImageProxy* pImg, NNS_G2D_VRAM_TYPE type); u32 NNS_G2dGetImagePaletteLocation(const NNSG2dImagePaletteProxy* pImg, NNS_G2D_VRAM_TYPE type); +void NNS_G2dLoadImageVramTransfer(const NNSG2dCharacterData* pSrcData, u32 baseAddr, NNS_G2D_VRAM_TYPE type, NNSG2dImageProxy* pImgProxy); + #endif //NNSYS_G2D_G2D_IMAGE_H_ diff --git a/main.lsf b/main.lsf index bf9c3aff76..d6b05e82ef 100644 --- a/main.lsf +++ b/main.lsf @@ -76,7 +76,6 @@ Static main Object asm/unk_02020B8C.o Object asm/unk_020210A0.o Object src/unk_020215A0.o - Object asm/unk_020215A0_s.o Object asm/unk_02022588.o Object src/gf_gfx_planes.o Object src/camera.o diff --git a/src/unk_0200A090.c b/src/unk_0200A090.c index 107fe98cbe..b3239b1ab2 100644 --- a/src/unk_0200A090.c +++ b/src/unk_0200A090.c @@ -95,7 +95,7 @@ struct _2DGfxResObj *AddCellOrAnimResObjFromNarc(struct _2DGfxResMan *mgr, NarcI //GF_ASSERT(mgr->type == type); ret = sub_0200AA70(mgr); GF_ASSERT(ret != NULL); - Add2DGfxResObjFromNarc(mgr, ret, narcId, fileId, compressed, id, NNS_G2D_VRAM_TYPE_3DMAIN, 0, type, heapId, FALSE); + Add2DGfxResObjFromNarc(mgr, ret, narcId, fileId, compressed, id, NNS_G2D_VRAM_TYPE_NEITHER, 0, type, heapId, FALSE); mgr->num++; return ret; } @@ -178,7 +178,7 @@ struct _2DGfxResObj *AddCellOrAnimResObjFromOpenNarc(struct _2DGfxResMan *resMan //GF_ASSERT(mgr->type == type); ret = sub_0200AA70(resMan); GF_ASSERT(ret != NULL); - Add2DGfxResObjFromOpenNarc(resMan, ret, narc, fileId, compressed, id, NNS_G2D_VRAM_TYPE_3DMAIN, 0, type, heapId, FALSE); + Add2DGfxResObjFromOpenNarc(resMan, ret, narc, fileId, compressed, id, NNS_G2D_VRAM_TYPE_NEITHER, 0, type, heapId, FALSE); resMan->num++; return ret; } @@ -351,7 +351,7 @@ NNS_G2D_VRAM_TYPE _2DGfxResObj_GetVRamType(struct _2DGfxResObj *obj) { struct PlttResExtraData *res = getResObjExtra(obj); return res->vram; } else { - return NNS_G2D_VRAM_TYPE_3DMAIN; + return NNS_G2D_VRAM_TYPE_NEITHER; } } diff --git a/src/unk_020215A0.c b/src/unk_020215A0.c index aefb65aab7..4097c1fd0d 100644 --- a/src/unk_020215A0.c +++ b/src/unk_020215A0.c @@ -24,15 +24,16 @@ struct UnkStruct_021D21F4 { int unk_08; int unk_0C; int unk_10; - u8 filler_14[8]; - u32 unk_1C; - u32 unk_20; + u32 unk_14; + u32 unk_18; + int unk_1C; + int unk_20; int unk_24; int unk_28; u32 unk_2C; u32 unk_30; - u32 unk_34; - u32 unk_38; + u8 *unk_34; + u8 *unk_38; } *_021D21F4; BOOL sub_0202180C(int resId); @@ -53,22 +54,26 @@ void sub_02021EC0(NNS_G2D_VRAM_TYPE a0, u32 a1, u32 a2, u32 a3, u32 a4); void sub_02021F28(UnkStruct_021D21F4_sub *a0); void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE a1); void sub_02021FB0(UnkStruct_021D21F4_sub *a0); +void sub_02021FDC(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE); UnkStruct_021D21F4_sub *sub_02022024(void); void sub_02022060(void); -void sub_020221D0(int a0, int a1, int HeapID); -void sub_02022238(u32 a0); -void sub_02022278(u32 a0); -void sub_02022290(int a0, int a1, int a2); -int sub_020222EC(int a0, u32 a1); +void sub_020221D0(u32 a0, u32 a1, HeapID heapID); +void sub_020221B4(void); +void sub_02022238(u8 *a0); +u32 sub_02022260(u8 *a0); +void sub_02022278(u8 *a0); +void sub_02022290(u32 a0, u32 a1, u8 *a2); +u32 sub_020222EC(u32 a0, u8 *a1); +void sub_02022374(u32 a0, u32 a1, u8 *a2); void sub_020223C4(UnkStruct_021D21F4_sub *a0); int sub_02022448(GXOBJVRamModeChar mode); +int sub_02022488(int a0, int a1, int a2); +u32 sub_020224A8(int a0, int a1); int sub_020224B8(int a0, int a1); -int sub_020224A8(int a0, int a1); BOOL sub_020224C0(u32 size, NNS_G2D_VRAM_TYPE a1, u32 *a2, u32 *a3); -void sub_02022510(u32 size, int a1); -void sub_0202256C(int a0, int a1, int a2, int *a3, int *a4); -void sub_02022374(int a0, int a1, u32 a2); -int sub_02022488(u32 a0, int a1, int a2); +void sub_02022510(u32 size, NNS_G2D_VRAM_TYPE a1); +void sub_02022560(int a0, u32 *a1, u8 *a2); +void sub_0202256C(u32 a0, u32 a1, u32 a2, int *a3, int *a4); void sub_020215A0(UnkStruct_020215A0 *template) { sub_020215C0(template, GX_GetOBJVRamModeChar(), GXS_GetOBJVRamModeChar()); @@ -340,13 +345,13 @@ BOOL sub_02021AC8(u32 a0, int a1, NNS_G2D_VRAM_TYPE a2, UnkStruct_02021AC8 *a3) void sub_02021B5C(UnkStruct_02021AC8 *a0) { if (a0->unk_0A != 0) { if (a0->unk_08 & 1) { - int r5 = sub_020224A8(a0->unk_00, _021D21F4->unk_2C); - int r0 = sub_020224A8(a0->unk_04 - _021D21F4->unk_1C, _021D21F4->unk_2C); + u32 r5 = sub_020224A8(a0->unk_00, _021D21F4->unk_2C); + u32 r0 = sub_020224A8(a0->unk_04 - _021D21F4->unk_1C, _021D21F4->unk_2C); sub_02022374(r0, r5, _021D21F4->unk_34); } if (a0->unk_08 & 2) { - int r5 = sub_020224A8(a0->unk_00, _021D21F4->unk_30); - int r0 = sub_020224A8(a0->unk_04 - _021D21F4->unk_20, _021D21F4->unk_30); + u32 r5 = sub_020224A8(a0->unk_00, _021D21F4->unk_30); + u32 r0 = sub_020224A8(a0->unk_04 - _021D21F4->unk_20, _021D21F4->unk_30); sub_02022374(r0, r5, _021D21F4->unk_38); } } @@ -366,7 +371,7 @@ void sub_02021BEC(UnkStruct_021D21F4 *a0) { void sub_02021C08(UnkStruct_021D21F4_sub *a0) { a0->unk_00 = NULL; - a0->unk_04 = NNS_G2D_VRAM_TYPE_3DMAIN; + a0->unk_04 = NNS_G2D_VRAM_TYPE_NEITHER; a0->unk_08 = 0; a0->unk_0C = -1; a0->unk_34 = 0; @@ -483,7 +488,7 @@ void sub_02021DD0(UnkStruct_021D21F4_sub *a0, int a1, int a2) { BOOL sub_02021DE4(int a0, u32 *a1, u32 *a2, u32 a3, u32 *a4, u32 *a5) { if (a0 & NNS_G2D_VRAM_TYPE_2DMAIN) { *a4 = sub_02022488(a3, _021D21F4->unk_2C, 1); - int r0 = sub_020224A8(*a4, _021D21F4->unk_2C); + u32 r0 = sub_020224A8(*a4, _021D21F4->unk_2C); *a1 = sub_020222EC(r0, _021D21F4->unk_34); if (*a1 == -1) { GF_ASSERT(FALSE); @@ -493,7 +498,7 @@ BOOL sub_02021DE4(int a0, u32 *a1, u32 *a2, u32 a3, u32 *a4, u32 *a5) { } if (a0 & NNS_G2D_VRAM_TYPE_2DSUB) { *a5 = sub_02022488(a3, _021D21F4->unk_30, 1); - int r0 = sub_020224A8(*a5, _021D21F4->unk_30); + u32 r0 = sub_020224A8(*a5, _021D21F4->unk_30); *a2 = sub_020222EC(r0, _021D21F4->unk_38); if (*a2 == -1) { GF_ASSERT(FALSE); @@ -515,13 +520,13 @@ void sub_02021E90(UnkStruct_021D21F4_sub *a0, u32 a1, u32 a2) { void sub_02021EC0(NNS_G2D_VRAM_TYPE a0, u32 a1, u32 a2, u32 a3, u32 a4) { if (a0 & NNS_G2D_VRAM_TYPE_2DMAIN) { - int r7 = sub_020224A8(a3, _021D21F4->unk_2C); - int r0 = sub_020224A8(a1, _021D21F4->unk_2C); + u32 r7 = sub_020224A8(a3, _021D21F4->unk_2C); + u32 r0 = sub_020224A8(a1, _021D21F4->unk_2C); sub_02022290(r0, r7, _021D21F4->unk_34); } if (a0 & NNS_G2D_VRAM_TYPE_2DSUB) { - int r7 = sub_020224A8(a4, _021D21F4->unk_30); - int r0 = sub_020224A8(a2, _021D21F4->unk_30); + u32 r7 = sub_020224A8(a4, _021D21F4->unk_30); + u32 r0 = sub_020224A8(a2, _021D21F4->unk_30); sub_02022290(r0, r7, _021D21F4->unk_38); } } @@ -557,3 +562,303 @@ void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE a1) { GXS_GetOBJVRamModeChar(); } } + +void sub_02021FB0(UnkStruct_021D21F4_sub *a0) { + NNS_G2dInitImageProxy(&a0->unk_10); + if (a0->unk_04 != NNS_G2D_VRAM_TYPE_BOTH) { + sub_02021FDC(a0, a0->unk_04); + } else { + sub_02021FDC(a0, NNS_G2D_VRAM_TYPE_2DMAIN); + sub_02021FDC(a0, NNS_G2D_VRAM_TYPE_2DSUB); + } +} + +void sub_02021FDC(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE a1) { + int r0 = a0->unk_40 ? sub_02021DA8(a0, a1) : a1; + u32 r1; + if (a1 == NNS_G2D_VRAM_TYPE_2DMAIN) { + r1 = a0->unk_34; + GX_GetOBJVRamModeChar(); + } else { + r1 = a0->unk_38; + GXS_GetOBJVRamModeChar(); + } + NNS_G2dLoadImageVramTransfer(a0->unk_00, r1, a1, &a0->unk_10); + if (a1 == NNS_G2D_VRAM_TYPE_2DMAIN) { + GX_GetOBJVRamModeChar(); + } else { + GXS_GetOBJVRamModeChar(); + } +} + +UnkStruct_021D21F4_sub *sub_02022024(void) { + for (int i = 0; i < _021D21F4->unk_04; ++i) { + if (_021D21F4->unk_00[i].unk_3C == 0) { + return &_021D21F4->unk_00[i]; + } + } + + return NULL; +} + +void sub_02022060(void) { + switch (GX_GetBankForOBJ()) { + case GX_VRAM_OBJ_NONE: + _021D21F4->unk_14 = 0; + break; + case GX_VRAM_OBJ_16_F: + case GX_VRAM_OBJ_16_G: + _021D21F4->unk_14 = 16 * 1024; + break; + case GX_VRAM_OBJ_32_FG: + _021D21F4->unk_14 = 32 * 1024; + break; + case GX_VRAM_OBJ_64_E: + _021D21F4->unk_14 = 64 * 1024; + break; + case GX_VRAM_OBJ_80_EF: + case GX_VRAM_OBJ_80_EG: + _021D21F4->unk_14 = 80 * 1024; + break; + case GX_VRAM_OBJ_96_EFG: + _021D21F4->unk_14 = 96 * 1024; + break; + case GX_VRAM_OBJ_128_A: + case GX_VRAM_OBJ_128_B: + _021D21F4->unk_14 = 128 * 1024; + break; + case GX_VRAM_OBJ_256_AB: + _021D21F4->unk_14 = 256 * 1024; + break; + default: + _021D21F4->unk_14 = 0; + break; + } + + switch (GX_GetBankForSubOBJ()) { + case GX_VRAM_SUB_OBJ_NONE: + _021D21F4->unk_18 = 0; + break; + case GX_VRAM_SUB_OBJ_16_I: + _021D21F4->unk_18 = 16 * 1024; + break; + case GX_VRAM_SUB_OBJ_128_D: + _021D21F4->unk_18 = 128 * 1024; + break; + default: + _021D21F4->unk_18 = 0; + break; + } + + int r0 = sub_020224B8(_021D21F4->unk_24, _021D21F4->unk_2C); + _021D21F4->unk_1C = _021D21F4->unk_14 - r0; + r0 = sub_020224B8(_021D21F4->unk_28, _021D21F4->unk_30); + _021D21F4->unk_20 = _021D21F4->unk_18 - r0; + GF_ASSERT(_021D21F4->unk_1C >= 0 && _021D21F4->unk_20 >= 0); + GF_ASSERT(_021D21F4->unk_1C >= 0 && _021D21F4->unk_20 >= 0); // they wanted to be doubly sure +} + +void sub_020221B4(void) { + sub_02022278(_021D21F4->unk_34); + sub_02022278(_021D21F4->unk_38); +} + +void sub_020221D0(u32 a0, u32 a1, HeapID heapID) { + _021D21F4->unk_24 = a0; + _021D21F4->unk_28 = a1; + if (_021D21F4->unk_34 != NULL) { + FreeToHeap(_021D21F4->unk_34); + } + if (_021D21F4->unk_38 != NULL) { + FreeToHeap(_021D21F4->unk_38); + } + if (_021D21F4->unk_24 != 0) { + _021D21F4->unk_34 = AllocFromHeap(heapID, a0 / 8); + } + if (_021D21F4->unk_28 != 0) { + _021D21F4->unk_38 = AllocFromHeap(heapID, a1 / 8); + } + sub_020221B4(); +} + +void sub_02022238(u8 *a0) { + if (a0 != NULL) { + if (a0 == _021D21F4->unk_34) { + _021D21F4->unk_24 = 0; + FreeToHeap(a0); + } else { + _021D21F4->unk_28 = 0; + FreeToHeap(a0); + } + } +} + +u32 sub_02022260(u8 *a0) { + if (a0 == _021D21F4->unk_34) { + return _021D21F4->unk_24; + } else { + return _021D21F4->unk_28; + } +} + +void sub_02022278(u8 *a0) { + if (a0 != NULL) { + memset(a0, 0, sub_02022260(a0) / 8); + } +} + +void sub_02022290(u32 a0, u32 a1, u8 *a2) { + if (a2 != NULL) { + u32 r7 = sub_02022260(a2); + u32 r6 = a0 + a1; + for (int i = a0; i < r6; ++i) { + if (i >= r7) { + break; + } + u32 sp4; + u8 sp0; + sub_02022560(i, &sp4, &sp0); + GF_ASSERT(!(a2[sp4] & (1 << sp0))); + u8 mask = 1 << sp0; + a2[sp4] |= mask; + } + } +} + +u32 sub_020222EC(u32 a0, u8 *a1) { + if (a1 != NULL) { + u32 sp4 = sub_02022260(a1); + for (int i = 0; i < sp4; ++i) { + u32 spC; + u8 sp8; + sub_02022560(i, &spC, &sp8); + u8 mask = 1 << sp8; + int j = 0; + while ((a1[spC] & mask) == 0 && j <= a0) { + int num = i + j; + sub_02022560(num, &spC, &sp8); + mask = 1 << sp8; + if (num >= sp4) { + return -1; + } + ++j; + } + if (j > a0) { + return i; + } + i += j; + } + } + return -1; +} + +void sub_02022374(u32 a0, u32 a1, u8 *a2) { + if (a2 != NULL) { + u32 r6 = a0 + a1; + for (int i = a0; i < r6; ++i) { + u32 sp4; + u8 sp0; + sub_02022560(i, &sp4, &sp0); + GF_ASSERT(a2[sp4] & (1 << sp0)); + u8 mask = (1 << sp0) ^ 0xFF; + a2[sp4] &= mask; + } + } +} + +void sub_020223C4(UnkStruct_021D21F4_sub *a0) { + if (a0->unk_04 & NNS_G2D_VRAM_TYPE_2DMAIN) { + u32 loc = NNS_G2dGetImageLocation(&a0->unk_10, NNS_G2D_VRAM_TYPE_2DMAIN); + u32 r5 = sub_020224A8(loc - _021D21F4->unk_1C, _021D21F4->unk_2C); + u32 r1 = sub_020224A8(a0->unk_4C, _021D21F4->unk_2C); + sub_02022374(r5, r1, _021D21F4->unk_34); + } + if (a0->unk_04 & NNS_G2D_VRAM_TYPE_2DSUB) { + u32 loc = NNS_G2dGetImageLocation(&a0->unk_10, NNS_G2D_VRAM_TYPE_2DSUB); + u32 r5 = sub_020224A8(loc - _021D21F4->unk_20, _021D21F4->unk_30); + u32 r1 = sub_020224A8(a0->unk_50, _021D21F4->unk_30); + sub_02022374(r5, r1, _021D21F4->unk_38); + } + a0->unk_48 = 0; +} + +int sub_02022448(GXOBJVRamModeChar mode) { + switch (mode) { + case GX_OBJVRAMMODE_CHAR_1D_32K: + return 1; + case GX_OBJVRAMMODE_CHAR_1D_64K: + return 2; + case GX_OBJVRAMMODE_CHAR_1D_128K: + return 4; + case GX_OBJVRAMMODE_CHAR_1D_256K: + return 8; + default: + return 1; + } +} + +int sub_02022488(int a0, int a1, int a2) { + a1 *= 32; + if (a0 % a1) { + a0 -= (a0 % a1); + if (a2 == 1) { + a0 += a1; + } + } + return a0; +} + +u32 sub_020224A8(int a0, int a1) { + return a0 / 32 / a1; +} + +int sub_020224B8(int a0, int a1) { + return a0 * a1 * 32; +} + +BOOL sub_020224C0(u32 size, NNS_G2D_VRAM_TYPE a1, u32 *a2, u32 *a3) { + BOOL result = TRUE; + if (a1 & NNS_G2D_VRAM_TYPE_2DMAIN) { + if (_021D21F4->unk_0C + size > _021D21F4->unk_1C) { + GF_ASSERT(FALSE); + result = FALSE; + } else { + *a2 = _021D21F4->unk_0C; + } + } + if (a1 & NNS_G2D_VRAM_TYPE_2DSUB) { + if (_021D21F4->unk_10 + size > _021D21F4->unk_20) { + GF_ASSERT(FALSE); + result = FALSE; + } else { + *a3 = _021D21F4->unk_10; + } + } + return result; +} + +void sub_02022510(u32 size, NNS_G2D_VRAM_TYPE a1) { + if (a1 & NNS_G2D_VRAM_TYPE_2DMAIN) { + _021D21F4->unk_0C += size; + _021D21F4->unk_0C = sub_02022488(_021D21F4->unk_0C, _021D21F4->unk_2C, 1); + } + if (a1 & NNS_G2D_VRAM_TYPE_2DSUB) { + _021D21F4->unk_10 += size; + _021D21F4->unk_10 = sub_02022488(_021D21F4->unk_10, _021D21F4->unk_30, 1); + } +} + +void sub_02022560(int a0, u32 *a1, u8 *a2) { + *a1 = a0 >> 3; + *a2 = a0 & 7; +} + +void sub_0202256C(u32 a0, u32 a1, u32 a2, int *a3, int *a4) { + *a3 = a1 - a0; + if (*a3 < 0) { + *a4 = a2 + *a3; + *a3 = 0; + } else { + *a4 = a2; + } +} From 6781ed847de0f05842cda75e7e4653f246d1cfb5 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 19 Feb 2024 15:03:21 -0500 Subject: [PATCH 05/17] unk_020215A0.c documentation, 1 --- include/unk_020215A0.h | 2 +- src/unk_020215A0.c | 272 ++++++++++++++++++++--------------------- 2 files changed, 137 insertions(+), 137 deletions(-) diff --git a/include/unk_020215A0.h b/include/unk_020215A0.h index 83a11d01b1..95163374ee 100644 --- a/include/unk_020215A0.h +++ b/include/unk_020215A0.h @@ -40,7 +40,7 @@ NNSG2dImageProxy *sub_02021910(int resId); NNSG2dImageProxy *sub_02021934(int resId, u32 size); NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn); void sub_02021A50(const NNSG2dImageProxy *proxy); -BOOL sub_02021AC8(u32 a0, int a1, NNS_G2D_VRAM_TYPE a2, UnkStruct_02021AC8 *a3); +BOOL sub_02021AC8(u32 a0, int a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 *a3); void sub_02021B5C(UnkStruct_02021AC8 *a0); UnkStruct_021D21F4 *sub_02021BD0(void); void sub_02021BEC(UnkStruct_021D21F4 *a0); diff --git a/src/unk_020215A0.c b/src/unk_020215A0.c index 4097c1fd0d..26d84478b1 100644 --- a/src/unk_020215A0.c +++ b/src/unk_020215A0.c @@ -3,13 +3,13 @@ #include "vram_transfer_manager.h" typedef struct UnkStruct_021D21F4_sub { - NNSG2dCharacterData *unk_00; - NNS_G2D_VRAM_TYPE unk_04; + NNSG2dCharacterData *charData; + NNS_G2D_VRAM_TYPE vram; u8 unk_08; - int unk_0C; - NNSG2dImageProxy unk_10; - u32 unk_34; - u32 unk_38; + int resId; + NNSG2dImageProxy imageProxy; + u32 baseAddrMain; + u32 baseAddrSub; u8 unk_3C; int unk_40; BOOL unk_44; @@ -20,10 +20,10 @@ typedef struct UnkStruct_021D21F4_sub { struct UnkStruct_021D21F4 { UnkStruct_021D21F4_sub *unk_00; - int unk_04; - int unk_08; - int unk_0C; - int unk_10; + int max; + int num; + int offsetMain; + int offsetSub; u32 unk_14; u32 unk_18; int unk_1C; @@ -46,15 +46,15 @@ BOOL sub_02021CCC(UnkStruct_021D21F4_sub *a0); BOOL sub_02021D00(UnkStruct_021D21F4_sub *a0); void sub_02021D58(UnkStruct_021D21F4_sub *a0); UnkStruct_021D21F4_sub *sub_02021D70(int resId); -GXOBJVRamModeChar sub_02021DA8(UnkStruct_021D21F4_sub *a0, int a1); -void sub_02021DD0(UnkStruct_021D21F4_sub *a0, int a1, int a2); +GXOBJVRamModeChar sub_02021DA8(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram); +void sub_02021DD0(UnkStruct_021D21F4_sub *a0, u32 offsetMain, u32 offsetSub); BOOL sub_02021DE4(int a0, u32 *a1, u32 *a2, u32 a3, u32 *a4, u32 *a5); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match void sub_02021E90(UnkStruct_021D21F4_sub *a0, u32 a1, u32 a2); -void sub_02021EC0(NNS_G2D_VRAM_TYPE a0, u32 a1, u32 a2, u32 a3, u32 a4); +void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 a1, u32 a2, u32 a3, u32 a4); void sub_02021F28(UnkStruct_021D21F4_sub *a0); -void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE a1); +void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram); void sub_02021FB0(UnkStruct_021D21F4_sub *a0); -void sub_02021FDC(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE); +void sub_02021FDC(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram); UnkStruct_021D21F4_sub *sub_02022024(void); void sub_02022060(void); void sub_020221D0(u32 a0, u32 a1, HeapID heapID); @@ -70,8 +70,8 @@ int sub_02022448(GXOBJVRamModeChar mode); int sub_02022488(int a0, int a1, int a2); u32 sub_020224A8(int a0, int a1); int sub_020224B8(int a0, int a1); -BOOL sub_020224C0(u32 size, NNS_G2D_VRAM_TYPE a1, u32 *a2, u32 *a3); -void sub_02022510(u32 size, NNS_G2D_VRAM_TYPE a1); +BOOL sub_020224C0(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *a2, u32 *a3); +void sub_02022510(u32 size, NNS_G2D_VRAM_TYPE vram); void sub_02022560(int a0, u32 *a1, u8 *a2); void sub_0202256C(u32 a0, u32 a1, u32 a2, int *a3, int *a4); @@ -83,8 +83,8 @@ void sub_020215C0(UnkStruct_020215A0 *template, GXOBJVRamModeChar modeMain, GXOB if (_021D21F4 == NULL) { _021D21F4 = AllocFromHeap(template->heapId, sizeof(struct UnkStruct_021D21F4)); MI_CpuClear32(_021D21F4, sizeof(struct UnkStruct_021D21F4)); - _021D21F4->unk_04 = template->unk_00; - _021D21F4->unk_00 = (UnkStruct_021D21F4_sub *)AllocFromHeap(template->heapId, sizeof(UnkStruct_021D21F4_sub) * _021D21F4->unk_04); + _021D21F4->max = template->unk_00; + _021D21F4->unk_00 = (UnkStruct_021D21F4_sub *)AllocFromHeap(template->heapId, sizeof(UnkStruct_021D21F4_sub) * _021D21F4->max); for (int i = 0; i < template->unk_00; ++i) { sub_02021C08(&_021D21F4->unk_00[i]); } @@ -110,8 +110,8 @@ void sub_0202168C(void) { } void sub_020216C8(void) { - _021D21F4->unk_0C = 0; - _021D21F4->unk_10 = 0; + _021D21F4->offsetMain = 0; + _021D21F4->offsetSub = 0; sub_02022278(_021D21F4->unk_34); sub_02022278(_021D21F4->unk_38); sub_02022060(); @@ -144,10 +144,10 @@ BOOL sub_02021758(const UnkStruct_02021758 *a0) { return FALSE; } if (!sub_02021C9C(sub)) { - sub_02021884(sub->unk_0C); + sub_02021884(sub->resId); return FALSE; } - ++_021D21F4->unk_08; + ++_021D21F4->num; return TRUE; } @@ -163,16 +163,16 @@ BOOL sub_020217B0(const UnkStruct_02021758 *a0) { } sub->unk_40 = 1; if (!sub_02021C9C(sub)) { - sub_02021884(sub->unk_0C); + sub_02021884(sub->resId); return FALSE; } - ++_021D21F4->unk_08; + ++_021D21F4->num; return TRUE; } BOOL sub_0202180C(int resId) { - for (int i = 0; i < _021D21F4->unk_04; ++i) { - if (resId == _021D21F4->unk_00[i].unk_0C) { + for (int i = 0; i < _021D21F4->max; ++i) { + if (resId == _021D21F4->unk_00[i].resId) { return TRUE; } } @@ -184,12 +184,12 @@ void sub_0202183C(int id, NNSG2dCharacterData *charData) { GF_ASSERT(charData != NULL); UnkStruct_021D21F4_sub *sub = sub_02021D70(id); GF_ASSERT(sub != NULL); - sub->unk_00 = charData; - if (sub->unk_04 & NNS_G2D_VRAM_TYPE_2DMAIN) { - GF_CreateNewVramTransferTask(NNS_GFD_DST_2D_OBJ_CHAR_MAIN, sub->unk_34, charData->pRawData, charData->szByte); + sub->charData = charData; + if (sub->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + GF_CreateNewVramTransferTask(NNS_GFD_DST_2D_OBJ_CHAR_MAIN, sub->baseAddrMain, charData->pRawData, charData->szByte); } - if (sub->unk_04 & NNS_G2D_VRAM_TYPE_2DSUB) { - GF_CreateNewVramTransferTask(NNS_GFD_DST_2D_OBJ_CHAR_SUB, sub->unk_38, charData->pRawData, charData->szByte); + if (sub->vram & NNS_G2D_VRAM_TYPE_2DSUB) { + GF_CreateNewVramTransferTask(NNS_GFD_DST_2D_OBJ_CHAR_SUB, sub->baseAddrSub, charData->pRawData, charData->szByte); } } @@ -200,22 +200,22 @@ void sub_02021884(int resId) { sub = sub_02021D70(resId); GF_ASSERT(sub != NULL); if (sub->unk_3C == 4) { - sub_02021A50(&sub->unk_10); + sub_02021A50(&sub->imageProxy); } else { r5 = FALSE; } } while (r5); if (sub->unk_3C != 0) { sub_02021D58(sub); - --_021D21F4->unk_08; + --_021D21F4->num; } } void sub_020218D4(void) { - for (int i = 0; i < _021D21F4->unk_04; ++i) { + for (int i = 0; i < _021D21F4->max; ++i) { if (_021D21F4->unk_00[i].unk_3C != 0) { sub_02021D58(&_021D21F4->unk_00[i]); - --_021D21F4->unk_08; + --_021D21F4->num; } } } @@ -227,7 +227,7 @@ NNSG2dImageProxy *sub_02021910(int resId) { return NULL; } - return &sub->unk_10; + return &sub->imageProxy; } NNSG2dImageProxy *sub_02021934(int resId, u32 size) { @@ -240,7 +240,7 @@ NNSG2dImageProxy *sub_02021934(int resId, u32 size) { u32 sp10; u32 spC; u32 sp8; - sub_02021DE4(sub->unk_04, &sp14, &sp10, size, &spC, &sp8); + sub_02021DE4(sub->vram, &sp14, &sp10, size, &spC, &sp8); if (sub->unk_3C == 3) { return NULL; } @@ -250,9 +250,9 @@ NNSG2dImageProxy *sub_02021934(int resId, u32 size) { sub->unk_4C = spC; sub->unk_50 = sp8; sub_02021FB0(sub); - sub_02021EC0(sub->unk_04, sp14, sp10, spC, sp8); + sub_02021EC0(sub->vram, sp14, sp10, spC, sp8); - return &sub->unk_10; + return &sub->imageProxy; } NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { @@ -273,31 +273,31 @@ NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { } *sub2 = *sub; sub2->unk_3C = 4; - if (sub2->unk_04 & NNS_G2D_VRAM_TYPE_2DMAIN) { + if (sub2->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { r2 = sub2->unk_4C; } else { r2 = sub2->unk_50; } - sub_02021DE4(sub2->unk_04, &sp14, &sp10, r2, &spC, &sp8); + sub_02021DE4(sub2->vram, &sp14, &sp10, r2, &spC, &sp8); sub_02021E90(sub2, sp14, sp10); sub2->unk_48 = 1; sub2->unk_4C = spC; sub2->unk_50 = sp8; sub_02021FB0(sub2); - sub_02021EC0(sub2->unk_04, sp14, sp10, spC, sp8); + sub_02021EC0(sub2->vram, sp14, sp10, spC, sp8); - return &sub2->unk_10; + return &sub2->imageProxy; } void sub_02021A50(const NNSG2dImageProxy *proxy) { int i; - for (i = 0; i < _021D21F4->unk_04; ++i) { - if ((_021D21F4->unk_00[i].unk_3C == 3 || _021D21F4->unk_00[i].unk_3C == 4) && &_021D21F4->unk_00[i].unk_10 == proxy) { + for (i = 0; i < _021D21F4->max; ++i) { + if ((_021D21F4->unk_00[i].unk_3C == 3 || _021D21F4->unk_00[i].unk_3C == 4) && &_021D21F4->unk_00[i].imageProxy == proxy) { break; } } - if (i < _021D21F4->unk_04) { + if (i < _021D21F4->max) { sub_020223C4(&_021D21F4->unk_00[i]); if (_021D21F4->unk_00[i].unk_3C == 3) { _021D21F4->unk_00[i].unk_3C = 2; @@ -308,7 +308,7 @@ void sub_02021A50(const NNSG2dImageProxy *proxy) { } } -BOOL sub_02021AC8(u32 a0, int a1, NNS_G2D_VRAM_TYPE a2, UnkStruct_02021AC8 *a3) { +BOOL sub_02021AC8(u32 a0, int a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 *a3) { u32 sp14; u32 sp10; u32 spC; @@ -316,20 +316,20 @@ BOOL sub_02021AC8(u32 a0, int a1, NNS_G2D_VRAM_TYPE a2, UnkStruct_02021AC8 *a3) BOOL ret; if (a1 == 0) { - ret = sub_020224C0(a0, a2, &sp14, &sp10); + ret = sub_020224C0(a0, vram, &sp14, &sp10); if (ret) { - sub_02022510(a0, a2); - a3->unk_08 = a2; + sub_02022510(a0, vram); + a3->unk_08 = vram; a3->unk_00 = a0; - a3->unk_04 = a2 == 1 ? sp14 : sp10; + a3->unk_04 = vram == 1 ? sp14 : sp10; a3->unk_0A = 0; } } else { - ret = sub_02021DE4(a2, &sp14, &sp10, a0, &spC, &sp8); + ret = sub_02021DE4(vram, &sp14, &sp10, a0, &spC, &sp8); if (ret) { - sub_02021EC0(a2, sp14, sp10, spC, sp8); - a3->unk_08 = a2; - if (a2 == 1) { + sub_02021EC0(vram, sp14, sp10, spC, sp8); + a3->unk_08 = vram; + if (vram == 1) { a3->unk_00 = spC; a3->unk_04 = sp14 + _021D21F4->unk_1C; } else { @@ -370,22 +370,22 @@ void sub_02021BEC(UnkStruct_021D21F4 *a0) { } void sub_02021C08(UnkStruct_021D21F4_sub *a0) { - a0->unk_00 = NULL; - a0->unk_04 = NNS_G2D_VRAM_TYPE_NEITHER; + a0->charData = NULL; + a0->vram = NNS_G2D_VRAM_TYPE_NEITHER; a0->unk_08 = 0; - a0->unk_0C = -1; - a0->unk_34 = 0; - a0->unk_38 = 0; + a0->resId = -1; + a0->baseAddrMain = 0; + a0->baseAddrSub = 0; a0->unk_3C = 0; a0->unk_40 = 0; - NNS_G2dInitImageProxy(&a0->unk_10); + NNS_G2dInitImageProxy(&a0->imageProxy); } BOOL sub_02021C2C(const UnkStruct_02021758 *a0, UnkStruct_021D21F4_sub *a1) { - a1->unk_00 = a0->charData; - a1->unk_0C = a0->id; - a1->unk_04 = a0->vram; - a1->unk_08 = a1->unk_00->characterFmt >> 8; + a1->charData = a0->charData; + a1->resId = a0->id; + a1->vram = a0->vram; + a1->unk_08 = a1->charData->characterFmt >> 8; a1->unk_44 = a0->unk_0C; a1->unk_48 = 0; a1->unk_4C = 0; @@ -396,12 +396,12 @@ BOOL sub_02021C2C(const UnkStruct_02021758 *a0, UnkStruct_021D21F4_sub *a1) { UnkStruct_021D21F4_sub *sub_02021C50(const NNSG2dImageProxy *proxyIn) { int i; - for (i = 0; i < _021D21F4->unk_04; ++i) { - if (_021D21F4->unk_00[i].unk_3C != 0 && &_021D21F4->unk_00[i].unk_10 == proxyIn) { + for (i = 0; i < _021D21F4->max; ++i) { + if (_021D21F4->unk_00[i].unk_3C != 0 && &_021D21F4->unk_00[i].imageProxy == proxyIn) { break; } } - if (i >= _021D21F4->unk_04) { + if (i >= _021D21F4->max) { return NULL; } @@ -424,12 +424,12 @@ BOOL sub_02021C9C(UnkStruct_021D21F4_sub *a0) { } BOOL sub_02021CCC(UnkStruct_021D21F4_sub *a0) { - u32 sp4; - u32 sp0; - BOOL ret = sub_020224C0(a0->unk_00->szByte, a0->unk_04, &sp4, &sp0); + u32 offsetMain; + u32 offsetSub; + BOOL ret = sub_020224C0(a0->charData->szByte, a0->vram, &offsetMain, &offsetSub); if (ret) { - sub_02021DD0(a0, sp4, sp0); - sub_02022510(a0->unk_00->szByte, a0->unk_04); + sub_02021DD0(a0, offsetMain, offsetSub); + sub_02022510(a0->charData->szByte, a0->vram); } return ret; } @@ -439,7 +439,7 @@ BOOL sub_02021D00(UnkStruct_021D21F4_sub *a0) { u32 sp10; u32 spC; u32 sp8; - if (!sub_02021DE4(a0->unk_04, &sp14, &sp10, a0->unk_00->szByte, &spC, &sp8)) { + if (!sub_02021DE4(a0->vram, &sp14, &sp10, a0->charData->szByte, &spC, &sp8)) { return FALSE; } sub_02021E90(a0, sp14, sp10); @@ -447,7 +447,7 @@ BOOL sub_02021D00(UnkStruct_021D21F4_sub *a0) { a0->unk_4C = spC; a0->unk_50 = sp8; sub_02021F28(a0); - sub_02021EC0(a0->unk_04, sp14, sp10, spC, sp8); + sub_02021EC0(a0->vram, sp14, sp10, spC, sp8); return TRUE; } @@ -459,8 +459,8 @@ void sub_02021D58(UnkStruct_021D21F4_sub *a0) { } UnkStruct_021D21F4_sub *sub_02021D70(int resId) { - for (int i = 0; i < _021D21F4->unk_04; ++i) { - if (_021D21F4->unk_00[i].unk_0C == resId) { + for (int i = 0; i < _021D21F4->max; ++i) { + if (_021D21F4->unk_00[i].resId == resId) { return &_021D21F4->unk_00[i]; } } @@ -468,18 +468,18 @@ UnkStruct_021D21F4_sub *sub_02021D70(int resId) { return NULL; } -GXOBJVRamModeChar sub_02021DA8(UnkStruct_021D21F4_sub *a0, int a1) { - if (a1 == 1) { - a0->unk_00->mapingType = GX_GetOBJVRamModeChar(); +GXOBJVRamModeChar sub_02021DA8(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram) { + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + a0->charData->mapingType = GX_GetOBJVRamModeChar(); } else { - a0->unk_00->mapingType = GXS_GetOBJVRamModeChar(); + a0->charData->mapingType = GXS_GetOBJVRamModeChar(); } - return a0->unk_00->mapingType; + return a0->charData->mapingType; } -void sub_02021DD0(UnkStruct_021D21F4_sub *a0, int a1, int a2) { - a0->unk_34 = a1; - a0->unk_38 = a2; +void sub_02021DD0(UnkStruct_021D21F4_sub *a0, u32 offsetMain, u32 offsetSub) { + a0->baseAddrMain = offsetMain; + a0->baseAddrSub = offsetSub; if (a0->unk_08 == 0) { sub_02021F28(a0); } @@ -510,21 +510,21 @@ BOOL sub_02021DE4(int a0, u32 *a1, u32 *a2, u32 a3, u32 *a4, u32 *a5) { } void sub_02021E90(UnkStruct_021D21F4_sub *a0, u32 a1, u32 a2) { - if (a0->unk_04 & NNS_G2D_VRAM_TYPE_2DMAIN) { - a0->unk_34 = a1 + _021D21F4->unk_1C; + if (a0->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + a0->baseAddrMain = a1 + _021D21F4->unk_1C; } - if (a0->unk_04 & NNS_G2D_VRAM_TYPE_2DSUB) { - a0->unk_38 = a2 + _021D21F4->unk_20; + if (a0->vram & NNS_G2D_VRAM_TYPE_2DSUB) { + a0->baseAddrSub = a2 + _021D21F4->unk_20; } } -void sub_02021EC0(NNS_G2D_VRAM_TYPE a0, u32 a1, u32 a2, u32 a3, u32 a4) { - if (a0 & NNS_G2D_VRAM_TYPE_2DMAIN) { +void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 a1, u32 a2, u32 a3, u32 a4) { + if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { u32 r7 = sub_020224A8(a3, _021D21F4->unk_2C); u32 r0 = sub_020224A8(a1, _021D21F4->unk_2C); sub_02022290(r0, r7, _021D21F4->unk_34); } - if (a0 & NNS_G2D_VRAM_TYPE_2DSUB) { + if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { u32 r7 = sub_020224A8(a4, _021D21F4->unk_30); u32 r0 = sub_020224A8(a2, _021D21F4->unk_30); sub_02022290(r0, r7, _021D21F4->unk_38); @@ -532,31 +532,31 @@ void sub_02021EC0(NNS_G2D_VRAM_TYPE a0, u32 a1, u32 a2, u32 a3, u32 a4) { } void sub_02021F28(UnkStruct_021D21F4_sub *a0) { - NNS_G2dInitImageProxy(&a0->unk_10); - if (a0->unk_04 != NNS_G2D_VRAM_TYPE_BOTH) { - sub_02021F54(a0, a0->unk_04); + NNS_G2dInitImageProxy(&a0->imageProxy); + if (a0->vram != NNS_G2D_VRAM_TYPE_BOTH) { + sub_02021F54(a0, a0->vram); } else { sub_02021F54(a0, NNS_G2D_VRAM_TYPE_2DMAIN); sub_02021F54(a0, NNS_G2D_VRAM_TYPE_2DSUB); } } -void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE a1) { - int r0 = a0->unk_40 ? sub_02021DA8(a0, a1) : a1; - u32 r1; - if (a1 == NNS_G2D_VRAM_TYPE_2DMAIN) { - r1 = a0->unk_34; +void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram) { + int mappingType = a0->unk_40 ? sub_02021DA8(a0, vram) : vram; + u32 baseAddr; + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + baseAddr = a0->baseAddrMain; GX_GetOBJVRamModeChar(); } else { - r1 = a0->unk_38; + baseAddr = a0->baseAddrSub; GXS_GetOBJVRamModeChar(); } - if (r0 == 0) { - NNS_G2dLoadImage2DMapping(a0->unk_00, r1, a1, &a0->unk_10); + if (mappingType == 0) { + NNS_G2dLoadImage2DMapping(a0->charData, baseAddr, vram, &a0->imageProxy); } else { - NNS_G2dLoadImage1DMapping(a0->unk_00, r1, a1, &a0->unk_10); + NNS_G2dLoadImage1DMapping(a0->charData, baseAddr, vram, &a0->imageProxy); } - if (a1 == NNS_G2D_VRAM_TYPE_2DMAIN) { + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { GX_GetOBJVRamModeChar(); } else { GXS_GetOBJVRamModeChar(); @@ -564,27 +564,27 @@ void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE a1) { } void sub_02021FB0(UnkStruct_021D21F4_sub *a0) { - NNS_G2dInitImageProxy(&a0->unk_10); - if (a0->unk_04 != NNS_G2D_VRAM_TYPE_BOTH) { - sub_02021FDC(a0, a0->unk_04); + NNS_G2dInitImageProxy(&a0->imageProxy); + if (a0->vram != NNS_G2D_VRAM_TYPE_BOTH) { + sub_02021FDC(a0, a0->vram); } else { sub_02021FDC(a0, NNS_G2D_VRAM_TYPE_2DMAIN); sub_02021FDC(a0, NNS_G2D_VRAM_TYPE_2DSUB); } } -void sub_02021FDC(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE a1) { - int r0 = a0->unk_40 ? sub_02021DA8(a0, a1) : a1; - u32 r1; - if (a1 == NNS_G2D_VRAM_TYPE_2DMAIN) { - r1 = a0->unk_34; +void sub_02021FDC(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram) { + int r0 = a0->unk_40 ? sub_02021DA8(a0, vram) : vram; + u32 baseAddr; + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + baseAddr = a0->baseAddrMain; GX_GetOBJVRamModeChar(); } else { - r1 = a0->unk_38; + baseAddr = a0->baseAddrSub; GXS_GetOBJVRamModeChar(); } - NNS_G2dLoadImageVramTransfer(a0->unk_00, r1, a1, &a0->unk_10); - if (a1 == NNS_G2D_VRAM_TYPE_2DMAIN) { + NNS_G2dLoadImageVramTransfer(a0->charData, baseAddr, vram, &a0->imageProxy); + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { GX_GetOBJVRamModeChar(); } else { GXS_GetOBJVRamModeChar(); @@ -592,7 +592,7 @@ void sub_02021FDC(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE a1) { } UnkStruct_021D21F4_sub *sub_02022024(void) { - for (int i = 0; i < _021D21F4->unk_04; ++i) { + for (int i = 0; i < _021D21F4->max; ++i) { if (_021D21F4->unk_00[i].unk_3C == 0) { return &_021D21F4->unk_00[i]; } @@ -767,14 +767,14 @@ void sub_02022374(u32 a0, u32 a1, u8 *a2) { } void sub_020223C4(UnkStruct_021D21F4_sub *a0) { - if (a0->unk_04 & NNS_G2D_VRAM_TYPE_2DMAIN) { - u32 loc = NNS_G2dGetImageLocation(&a0->unk_10, NNS_G2D_VRAM_TYPE_2DMAIN); + if (a0->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + u32 loc = NNS_G2dGetImageLocation(&a0->imageProxy, NNS_G2D_VRAM_TYPE_2DMAIN); u32 r5 = sub_020224A8(loc - _021D21F4->unk_1C, _021D21F4->unk_2C); u32 r1 = sub_020224A8(a0->unk_4C, _021D21F4->unk_2C); sub_02022374(r5, r1, _021D21F4->unk_34); } - if (a0->unk_04 & NNS_G2D_VRAM_TYPE_2DSUB) { - u32 loc = NNS_G2dGetImageLocation(&a0->unk_10, NNS_G2D_VRAM_TYPE_2DSUB); + if (a0->vram & NNS_G2D_VRAM_TYPE_2DSUB) { + u32 loc = NNS_G2dGetImageLocation(&a0->imageProxy, NNS_G2D_VRAM_TYPE_2DSUB); u32 r5 = sub_020224A8(loc - _021D21F4->unk_20, _021D21F4->unk_30); u32 r1 = sub_020224A8(a0->unk_50, _021D21F4->unk_30); sub_02022374(r5, r1, _021D21F4->unk_38); @@ -816,35 +816,35 @@ int sub_020224B8(int a0, int a1) { return a0 * a1 * 32; } -BOOL sub_020224C0(u32 size, NNS_G2D_VRAM_TYPE a1, u32 *a2, u32 *a3) { +BOOL sub_020224C0(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub) { BOOL result = TRUE; - if (a1 & NNS_G2D_VRAM_TYPE_2DMAIN) { - if (_021D21F4->unk_0C + size > _021D21F4->unk_1C) { + if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + if (_021D21F4->offsetMain + size > _021D21F4->unk_1C) { GF_ASSERT(FALSE); result = FALSE; } else { - *a2 = _021D21F4->unk_0C; + *pOffsetMain = _021D21F4->offsetMain; } } - if (a1 & NNS_G2D_VRAM_TYPE_2DSUB) { - if (_021D21F4->unk_10 + size > _021D21F4->unk_20) { + if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { + if (_021D21F4->offsetSub + size > _021D21F4->unk_20) { GF_ASSERT(FALSE); result = FALSE; } else { - *a3 = _021D21F4->unk_10; + *pOffsetSub = _021D21F4->offsetSub; } } return result; } -void sub_02022510(u32 size, NNS_G2D_VRAM_TYPE a1) { - if (a1 & NNS_G2D_VRAM_TYPE_2DMAIN) { - _021D21F4->unk_0C += size; - _021D21F4->unk_0C = sub_02022488(_021D21F4->unk_0C, _021D21F4->unk_2C, 1); +void sub_02022510(u32 size, NNS_G2D_VRAM_TYPE vram) { + if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + _021D21F4->offsetMain += size; + _021D21F4->offsetMain = sub_02022488(_021D21F4->offsetMain, _021D21F4->unk_2C, 1); } - if (a1 & NNS_G2D_VRAM_TYPE_2DSUB) { - _021D21F4->unk_10 += size; - _021D21F4->unk_10 = sub_02022488(_021D21F4->unk_10, _021D21F4->unk_30, 1); + if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { + _021D21F4->offsetSub += size; + _021D21F4->offsetSub = sub_02022488(_021D21F4->offsetSub, _021D21F4->unk_30, 1); } } From 115565053541367bfa5bebe7b785f7bdf2313ab1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 19 Feb 2024 15:11:01 -0500 Subject: [PATCH 06/17] remove defunct include --- asm/include/overlay_17.inc | 179 ------------------------------------- 1 file changed, 179 deletions(-) delete mode 100644 asm/include/overlay_17.inc diff --git a/asm/include/overlay_17.inc b/asm/include/overlay_17.inc deleted file mode 100644 index bda622f756..0000000000 --- a/asm/include/overlay_17.inc +++ /dev/null @@ -1,179 +0,0 @@ -#include -#pragma once -.public FontID_Alloc -.public FontID_Release -.public FontID_String_GetWidth -.public LoadFontPal1 -.public sub_02004EC4 -.public PlaySE -.public StopSE -.public PlayFanfare -.public IsFanfarePlaying -.public OverlayManager_CreateAndGetData -.public OverlayManager_GetData -.public OverlayManager_FreeData -.public OverlayManager_GetArgs -.public NARC_New -.public NARC_Delete -.public GfGfxLoader_LoadCharDataFromOpenNarc -.public GfGfxLoader_LoadScrnDataFromOpenNarc -.public GfGfxLoader_GXLoadPalFromOpenNarc -.public sub_0200B2E0 -.public sub_0200B2E8 -.public NewMsgDataFromNarc -.public DestroyMsgData -.public NewString_ReadMsgData -.public MessageFormat_New_Custom -.public MessageFormat_Delete -.public BufferString -.public BufferIntegerAsString -.public BufferItemName -.public StringExpandPlaceholders -.public SpriteRenderer_Create -.public SpriteRenderer_CreateGfxHandler -.public sub_0200CF70 -.public sub_0200CFF4 -.public sub_0200D020 -.public thunk_OamManager_ApplyAndResetBuffers -.public SpriteRenderer_RemoveGfxHandler -.public SpriteRenderer_Delete -.public sub_0200D2A4 -.public SpriteRenderer_CreateSprite -.public SpriteRenderer_Init2DGfxResManagersFromCountsArray -.public SpriteRenderer_LoadCharResObjFromOpenNarc -.public SpriteRenderer_LoadPlttResObjFromOpenNarc -.public SpriteRenderer_LoadCellResObjFromOpenNarc -.public SpriteRenderer_LoadAnimResObjFromOpenNarc -.public SpriteRenderer_LoadResourcesAndCreateSprite -.public SpriteRenderer_UnloadResourcesAndRemoveGfxHandler -.public sub_0200D9DC -.public Sprite_SetPositionXY -.public Sprite_GetPositionXY -.public Sprite_AddPositionXY -.public UnkImageStruct_AddSpritePositionXY -.public sub_0200E2B0 -.public sub_0200E2B4 -.public sub_0200E2B8 -.public sub_0200E2EC -.public SysTask_CreateOnMainQueue -.public SysTask_Destroy -.public LoadUserFrameGfx2 -.public DrawFrameAndWindow2 -.public BeginNormalPaletteFade -.public IsPaletteFadeFinished -.public sub_0200FBDC -.public sub_0200FBF4 -.public GF_RTC_CopyDateTime -.public ListMenuItems_New -.public ListMenuItems_Delete -.public ListMenuItems_AppendFromMsgData -.public YesNoPrompt_Create -.public YesNoPrompt_Destroy -.public sub_020183F0 -.public sub_02018410 -.public sub_02018424 -.public sub_02018474 -.public sub_020185FC -.public sub_02018674 -.public sub_02018680 -.public sub_020186A4 -.public Main_SetVBlankIntrCB -.public HBlankInterruptDisable -.public CreateHeap -.public DestroyHeap -.public AllocFromHeap -.public FreeToHeap -.public BgConfig_Alloc -.public SetBothScreensModesAndDisable -.public InitBgFromTemplate -.public FreeBgTilemapBuffer -.public BG_ClearCharDataRange -.public FillBgTilemapRect -.public BgClearTilemapBufferAndCommit -.public AddWindow -.public RemoveWindow -.public ScheduleWindowCopyToVram -.public ClearWindowTilemapAndCopyToVram -.public FillWindowPixelBuffer -.public DoScheduledBgGpuUpdates -.public AddTextPrinterParameterized -.public AddTextPrinterParameterizedWithColor -.public GF_CreateVramTransferManager -.public GF_DestroyVramTransferManager -.public sub_020210BC -.public sub_02021148 -.public sub_02021238 -.public GfGfx_SetBanks -.public GfGfx_DisableEngineAPlanes -.public GfGfx_EngineATogglePlanes -.public GfGfx_DisableEngineBPlanes -.public Sprite_Delete -.public Set2dSpriteVisibleFlag -.public Set2dSpriteAnimActiveFlag -.public Set2dSpriteAnimSeqNo -.public Sprite_ResetAnimCtrlState -.public Sprite_SetAnimCtrlCurrentFrame -.public TouchscreenHitbox_TouchNewIsIn -.public System_GetTouchNew -.public String_New -.public String_Delete -.public String_Copy -.public Save_PlayerData_GetOptionsAddr -.public Save_BerryPots_Get -.public Save_BerryPotRTC_Get -.public Options_GetTextFrameDelay -.public Options_GetFrame -.public Save_GameStats_Get -.public GameStats_Inc -.public GameStats_AddSpecial -.public GetItemIndexMapping -.public GetItemIconCell -.public GetItemIconAnim -.public ItemIdIsBerry -.public GetNutName -.public Bag_HasSpaceForItem -.public Bag_AddItem -.public Bag_TakeItem -.public Save_Bag_Get -.public NNS_GfdDoVramTransfer -.public MI_CpuFill8 -.public MI_CpuCopy8 -.public RTC_ConvertDateTimeToSecond -.public _ll_sdiv -.public _s32_div_f -.public gSystem -.public ov16_022014A0 -.public BerryPots_GetPotGrowthStage -.public BerryPots_GetPotBerryId -.public BerryPots_GetSoilState -.public BerryPots_GetPotMoisture -.public ov16_022015EC -.public ov16_022015F8 -.public ov16_02201604 -.public ov16_02201610 -.public BerryPots_ResetPotMoisture -.public BerryPots_GetPotMulch -.public BerryPots_SetPotMulch -.public ov16_02201668 -.public ov16_02201674 -.public ov16_02201760 -.public BerryPots_SetBerryDatetime -.public BerryPots_CopyBerryDatetime -.public BerryIdToItemId -.public ItemIdToBerryId -.public MulchIdToItemId -.public ItemIdToMulchId -.public GetTotalBerryQuantity -.public GetTotalMulchQuantity -.public ov17_02201BC0 -.public BerryPotsApp_Initialize -.public BerryPotsApp_Run -.public BerryPotsApp_Exit -.public ov17_022023A0 -.public ov17_022028B8 -.public ov17_02202850 -.public ov17_02202A84 -.public ov17_02202B58 -.public ov17_02202C2C -.public ov17_02203A74 -.public ov17_02203C78 From 4f2eb1af66121ce039213c8fd29fe560a0b80fbd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 20 Feb 2024 20:52:03 -0500 Subject: [PATCH 07/17] unk_020215A0.c documentation, 2 --- asm/include/overlay_01_021E5900.inc | 4 +- asm/include/overlay_102.inc | 4 +- asm/include/overlay_112.inc | 4 +- asm/include/overlay_121.inc | 4 +- asm/include/overlay_18.inc | 4 +- asm/include/overlay_37.inc | 4 +- asm/include/overlay_41.inc | 4 +- asm/include/overlay_43.inc | 4 +- asm/include/overlay_44.inc | 4 +- asm/include/overlay_47.inc | 4 +- asm/include/overlay_48.inc | 4 +- asm/include/overlay_49.inc | 4 +- asm/include/overlay_65.inc | 4 +- asm/include/overlay_70.inc | 4 +- asm/include/overlay_72.inc | 4 +- asm/include/overlay_73.inc | 4 +- asm/include/overlay_74_thumb.inc | 6 +- asm/include/overlay_81.inc | 4 +- asm/include/overlay_82.inc | 4 +- asm/include/overlay_83.inc | 4 +- asm/include/overlay_85.inc | 4 +- asm/include/overlay_87.inc | 4 +- asm/include/overlay_88.inc | 4 +- asm/include/overlay_90.inc | 4 +- asm/include/overlay_91.inc | 4 +- asm/include/overlay_96.inc | 4 +- asm/include/overlay_97.inc | 4 +- asm/include/overlay_trainer_card_main.inc | 4 +- .../overlay_trainer_card_signature.inc | 4 +- asm/include/unk_02082908.inc | 4 +- asm/overlay_01_021E5900.s | 4 +- asm/overlay_102.s | 6 +- asm/overlay_112.s | 4 +- asm/overlay_121.s | 4 +- asm/overlay_18.s | 6 +- asm/overlay_37.s | 4 +- asm/overlay_41.s | 4 +- asm/overlay_43.s | 4 +- asm/overlay_44.s | 8 +- asm/overlay_47.s | 4 +- asm/overlay_48.s | 4 +- asm/overlay_49.s | 4 +- asm/overlay_65.s | 4 +- asm/overlay_70.s | 4 +- asm/overlay_72.s | 4 +- asm/overlay_73.s | 8 +- asm/overlay_74_thumb.s | 8 +- asm/overlay_81.s | 4 +- asm/overlay_82.s | 4 +- asm/overlay_83.s | 4 +- asm/overlay_85.s | 4 +- asm/overlay_87.s | 4 +- asm/overlay_88.s | 4 +- asm/overlay_90.s | 4 +- asm/overlay_91.s | 4 +- asm/overlay_96.s | 16 +- asm/overlay_97.s | 4 +- asm/overlay_trainer_card_main.s | 4 +- asm/overlay_trainer_card_signature.s | 4 +- asm/unk_02082908.s | 4 +- include/unk_02009D48.h | 2 +- include/unk_020215A0.h | 28 +- .../nnsys/g2d/fmt/g2d_Character_data.h | 5 + src/battle_arcade_game_board.c | 6 +- src/choose_starter_app.c | 4 +- src/credits/credits.c | 4 +- src/intro_movie.c | 4 +- src/unk_02009D48.c | 12 +- src/unk_0200ACF0.c | 8 +- src/unk_0200CF18.c | 4 +- src/unk_020215A0.c | 582 +++++++++--------- 71 files changed, 467 insertions(+), 462 deletions(-) diff --git a/asm/include/overlay_01_021E5900.inc b/asm/include/overlay_01_021E5900.inc index 57753a171f..5c204e8e29 100644 --- a/asm/include/overlay_01_021E5900.inc +++ b/asm/include/overlay_01_021E5900.inc @@ -30,8 +30,8 @@ .public GF_CreateVramTransferManager .public GF_DestroyVramTransferManager .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_102.inc b/asm/include/overlay_102.inc index e3d1478abb..880fee3d47 100644 --- a/asm/include/overlay_102.inc +++ b/asm/include/overlay_102.inc @@ -111,8 +111,8 @@ .public SysTask_GetData .public MsgArray_SkipControlCode .public AddTextPrinterParameterizedWithColor -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02021AC8 .public sub_02021B5C diff --git a/asm/include/overlay_112.inc b/asm/include/overlay_112.inc index dcab5ffbd9..96677a955a 100644 --- a/asm/include/overlay_112.inc +++ b/asm/include/overlay_112.inc @@ -165,8 +165,8 @@ .public sub_020210BC .public sub_02021148 .public sub_02021238 -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_121.inc b/asm/include/overlay_121.inc index c1aa9c69a0..1bf27aefe9 100644 --- a/asm/include/overlay_121.inc +++ b/asm/include/overlay_121.inc @@ -65,8 +65,8 @@ .public ResetAllTextPrinters .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_18.inc b/asm/include/overlay_18.inc index c0c4c12562..7b704d7785 100644 --- a/asm/include/overlay_18.inc +++ b/asm/include/overlay_18.inc @@ -194,8 +194,8 @@ .public sub_020210BC .public sub_02021148 .public sub_02021238 -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public GfGfx_SetBanks .public GfGfx_EngineATogglePlanes .public GfGfx_EngineASetPlanes diff --git a/asm/include/overlay_37.inc b/asm/include/overlay_37.inc index bd39b91b85..85470f875e 100644 --- a/asm/include/overlay_37.inc +++ b/asm/include/overlay_37.inc @@ -77,8 +77,8 @@ .public sub_02021148 .public sub_02021238 .public sub_02021280 -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_41.inc b/asm/include/overlay_41.inc index eec375b0d6..c6309e45e3 100644 --- a/asm/include/overlay_41.inc +++ b/asm/include/overlay_41.inc @@ -142,8 +142,8 @@ .public sub_020210BC .public sub_02021148 .public sub_02021238 -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02021884 .public sub_02021AC8 diff --git a/asm/include/overlay_43.inc b/asm/include/overlay_43.inc index f2f4d30ff7..13c244f24b 100644 --- a/asm/include/overlay_43.inc +++ b/asm/include/overlay_43.inc @@ -119,8 +119,8 @@ .public GF_DestroyVramTransferManager .public GF_RunVramTransferTasks .public sub_02020B78 -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_44.inc b/asm/include/overlay_44.inc index c7621ce0e9..a9aec962cf 100644 --- a/asm/include/overlay_44.inc +++ b/asm/include/overlay_44.inc @@ -152,8 +152,8 @@ .public GF_RunVramTransferTasks .public sub_02021148 .public sub_02021238 -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02021AC8 .public sub_02021B5C diff --git a/asm/include/overlay_47.inc b/asm/include/overlay_47.inc index e23c70e24a..6c15776fdc 100644 --- a/asm/include/overlay_47.inc +++ b/asm/include/overlay_47.inc @@ -80,8 +80,8 @@ .public GF_CreateVramTransferManager .public GF_DestroyVramTransferManager .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_48.inc b/asm/include/overlay_48.inc index c3c579804c..15be659002 100644 --- a/asm/include/overlay_48.inc +++ b/asm/include/overlay_48.inc @@ -99,8 +99,8 @@ .public GF_DestroyVramTransferManager .public GF_CreateNewVramTransferTask .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_49.inc b/asm/include/overlay_49.inc index eb96319e08..1b3f243891 100644 --- a/asm/include/overlay_49.inc +++ b/asm/include/overlay_49.inc @@ -159,8 +159,8 @@ .public sub_02020654 .public sub_02020674 .public sub_0202067C -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02021A50 .public sub_02022588 diff --git a/asm/include/overlay_65.inc b/asm/include/overlay_65.inc index c129baaa8a..25b16d1057 100644 --- a/asm/include/overlay_65.inc +++ b/asm/include/overlay_65.inc @@ -113,8 +113,8 @@ .public LCRandom .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_70.inc b/asm/include/overlay_70.inc index 4352fc0394..6f0bca6b4b 100644 --- a/asm/include/overlay_70.inc +++ b/asm/include/overlay_70.inc @@ -140,8 +140,8 @@ .public AddTextPrinterParameterized .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_72.inc b/asm/include/overlay_72.inc index cf1c243034..39d3429f8a 100644 --- a/asm/include/overlay_72.inc +++ b/asm/include/overlay_72.inc @@ -88,8 +88,8 @@ .public AddTextPrinterParameterized .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_73.inc b/asm/include/overlay_73.inc index 80bb4f274e..a7f14958ac 100644 --- a/asm/include/overlay_73.inc +++ b/asm/include/overlay_73.inc @@ -103,8 +103,8 @@ .public sub_020210BC .public sub_02021148 .public sub_02021238 -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_74_thumb.inc b/asm/include/overlay_74_thumb.inc index cb16cd37f1..1c0f0f634c 100644 --- a/asm/include/overlay_74_thumb.inc +++ b/asm/include/overlay_74_thumb.inc @@ -139,9 +139,9 @@ .public TextPrinterCheckActive .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_81.inc b/asm/include/overlay_81.inc index 042cbaccfe..2846dc1cde 100644 --- a/asm/include/overlay_81.inc +++ b/asm/include/overlay_81.inc @@ -126,8 +126,8 @@ .public TextPrinterCheckActive .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_82.inc b/asm/include/overlay_82.inc index d2b98b3003..ad7f3330f2 100644 --- a/asm/include/overlay_82.inc +++ b/asm/include/overlay_82.inc @@ -93,8 +93,8 @@ .public TextPrinterCheckActive .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_83.inc b/asm/include/overlay_83.inc index 9fccf2ae51..51db5629eb 100644 --- a/asm/include/overlay_83.inc +++ b/asm/include/overlay_83.inc @@ -129,8 +129,8 @@ .public GF_CreateVramTransferManager .public GF_DestroyVramTransferManager .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_85.inc b/asm/include/overlay_85.inc index 91e84b123b..f518592bb2 100644 --- a/asm/include/overlay_85.inc +++ b/asm/include/overlay_85.inc @@ -138,8 +138,8 @@ .public sub_02021148 .public sub_02021238 .public sub_02021280 -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_87.inc b/asm/include/overlay_87.inc index b077f36722..2cd56c84a6 100644 --- a/asm/include/overlay_87.inc +++ b/asm/include/overlay_87.inc @@ -99,8 +99,8 @@ .public sub_02021148 .public sub_02021238 .public sub_02021280 -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_88.inc b/asm/include/overlay_88.inc index 56e85e5135..5f995e0555 100644 --- a/asm/include/overlay_88.inc +++ b/asm/include/overlay_88.inc @@ -59,8 +59,8 @@ .public GF_DestroyVramTransferManager .public GF_CreateNewVramTransferTask .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_90.inc b/asm/include/overlay_90.inc index a32ffb56be..20ec2b87b3 100644 --- a/asm/include/overlay_90.inc +++ b/asm/include/overlay_90.inc @@ -105,8 +105,8 @@ .public GF_DestroyVramTransferManager .public GF_CreateNewVramTransferTask .public GF_RunVramTransferTasks -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_91.inc b/asm/include/overlay_91.inc index 58575d6f59..3f2e8a457b 100644 --- a/asm/include/overlay_91.inc +++ b/asm/include/overlay_91.inc @@ -113,8 +113,8 @@ .public sub_020210D8 .public sub_02021238 .public sub_02021280 -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02021AC8 .public sub_02021B5C diff --git a/asm/include/overlay_96.inc b/asm/include/overlay_96.inc index c55c4eae34..3e18524fda 100644 --- a/asm/include/overlay_96.inc +++ b/asm/include/overlay_96.inc @@ -218,8 +218,8 @@ .public sub_02020E80 .public sub_02020EB0 .public sub_02020F4C -.public sub_020215C0 -.public sub_0202168C +.public ObjCharTransfer_InitEx +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02021AC8 .public sub_02021B5C diff --git a/asm/include/overlay_97.inc b/asm/include/overlay_97.inc index 5d8469e85e..d9331643d5 100644 --- a/asm/include/overlay_97.inc +++ b/asm/include/overlay_97.inc @@ -54,8 +54,8 @@ .public FillWindowPixelBuffer .public ResetAllTextPrinters .public AddTextPrinterParameterizedWithColor -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_trainer_card_main.inc b/asm/include/overlay_trainer_card_main.inc index 27fa5d4e19..fb6ff3d264 100644 --- a/asm/include/overlay_trainer_card_main.inc +++ b/asm/include/overlay_trainer_card_main.inc @@ -97,8 +97,8 @@ .public sub_020210BC .public sub_02021148 .public sub_02021238 -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/overlay_trainer_card_signature.inc b/asm/include/overlay_trainer_card_signature.inc index fd60a14274..dfefc47fb8 100644 --- a/asm/include/overlay_trainer_card_signature.inc +++ b/asm/include/overlay_trainer_card_signature.inc @@ -79,8 +79,8 @@ .public sub_02021148 .public sub_02021238 .public sub_02021280 -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/include/unk_02082908.inc b/asm/include/unk_02082908.inc index 41bbe91612..ba39b888d3 100644 --- a/asm/include/unk_02082908.inc +++ b/asm/include/unk_02082908.inc @@ -91,8 +91,8 @@ .public AddTextPrinterParameterized .public AddTextPrinterParameterizedWithColor .public GF_RunVramTransferTasks -.public sub_020215A0 -.public sub_0202168C +.public ObjCharTransfer_Init +.public ObjCharTransfer_Destroy .public sub_020216C8 .public sub_02022588 .public sub_02022608 diff --git a/asm/overlay_01_021E5900.s b/asm/overlay_01_021E5900.s index 64eb88f7b6..e6613dae7b 100644 --- a/asm/overlay_01_021E5900.s +++ b/asm/overlay_01_021E5900.s @@ -1046,7 +1046,7 @@ ov01_021E61E0: ; 0x021E61E0 mov r1, #0x10 add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x14 mov r1, #4 bl sub_02022588 @@ -1061,7 +1061,7 @@ _021E6210: .word ov01_022062DC thumb_func_start ov01_021E6214 ov01_021E6214: ; 0x021E6214 push {r3, lr} - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, pc} thumb_func_end ov01_021E6214 diff --git a/asm/overlay_102.s b/asm/overlay_102.s index c14fc7b325..e2b27711fd 100644 --- a/asm/overlay_102.s +++ b/asm/overlay_102.s @@ -3659,7 +3659,7 @@ ov102_021E9198: ; 0x021E9198 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init bl sub_020216C8 add sp, #0x10 pop {r4, pc} @@ -3669,10 +3669,10 @@ _021E91B8: .word ov102_021EC698 thumb_func_start ov102_021E91BC ov102_021E91BC: ; 0x021E91BC - ldr r3, _021E91C0 ; =sub_0202168C + ldr r3, _021E91C0 ; =ObjCharTransfer_Destroy bx r3 .balign 4, 0 -_021E91C0: .word sub_0202168C +_021E91C0: .word ObjCharTransfer_Destroy thumb_func_end ov102_021E91BC thumb_func_start ov102_021E91C4 diff --git a/asm/overlay_112.s b/asm/overlay_112.s index 3771c03e86..33c9ec71ab 100644 --- a/asm/overlay_112.s +++ b/asm/overlay_112.s @@ -18844,7 +18844,7 @@ ov112_021EF100: ; 0x021EF100 ldr r0, [r4, r0] bl ov112_021F051C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 ldr r0, [r4, #0x18] bl FreeToHeap @@ -18920,7 +18920,7 @@ ov112_021EF19C: ; 0x021EF19C ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x9a bl sub_02022588 diff --git a/asm/overlay_121.s b/asm/overlay_121.s index 491cd51946..4fc38a8078 100644 --- a/asm/overlay_121.s +++ b/asm/overlay_121.s @@ -181,7 +181,7 @@ _021E5A5A: mov r0, #4 bl FontID_Release bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r4, #0 add r0, #0x94 @@ -711,7 +711,7 @@ ov121_021E5EDC: ; 0x021E5EDC ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #1 mov r1, #0x9e bl sub_02022588 diff --git a/asm/overlay_18.s b/asm/overlay_18.s index 85c3ae5e8b..77b8cd3214 100644 --- a/asm/overlay_18.s +++ b/asm/overlay_18.s @@ -38668,7 +38668,7 @@ ov18_021F8F28: ; 0x021F8F28 str r0, [sp, #0xc] add r0, r2, #0 mov r2, #0x10 - bl sub_020215C0 + bl ObjCharTransfer_InitEx add sp, #0x10 pop {r3, r4, r5, pc} nop @@ -38678,10 +38678,10 @@ _021F8F54: .word 0x00100010 thumb_func_start ov18_021F8F58 ov18_021F8F58: ; 0x021F8F58 - ldr r3, _021F8F5C ; =sub_0202168C + ldr r3, _021F8F5C ; =ObjCharTransfer_Destroy bx r3 .balign 4, 0 -_021F8F5C: .word sub_0202168C +_021F8F5C: .word ObjCharTransfer_Destroy thumb_func_end ov18_021F8F58 thumb_func_start ov18_021F8F60 diff --git a/asm/overlay_37.s b/asm/overlay_37.s index ef1e6fb381..bf2306249f 100644 --- a/asm/overlay_37.s +++ b/asm/overlay_37.s @@ -355,7 +355,7 @@ _021E5BF8: ldr r0, [r6, #0x34] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r6, #0 bl ov37_021E6540 @@ -895,7 +895,7 @@ ov37_021E6090: ; 0x021E6090 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x27 bl sub_02022588 diff --git a/asm/overlay_41.s b/asm/overlay_41.s index 3e1d39ada7..4832edab11 100644 --- a/asm/overlay_41.s +++ b/asm/overlay_41.s @@ -1648,7 +1648,7 @@ ov41_02246A94: ; 0x02246A94 mov r1, #0x10 add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #5 mov r1, #0xe bl sub_02022588 @@ -1718,7 +1718,7 @@ _02246B40: add r5, r5, #4 cmp r4, #4 blt _02246B40 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r3, r4, r5, pc} diff --git a/asm/overlay_43.s b/asm/overlay_43.s index d6f8b94b96..28ca17e370 100644 --- a/asm/overlay_43.s +++ b/asm/overlay_43.s @@ -1003,7 +1003,7 @@ ov43_0222A690: ; 0x0222A690 add r0, r2, #0 add r2, r1, #0 str r7, [sp, #0x38] - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x40 add r1, r7, #0 bl sub_02022588 @@ -1193,7 +1193,7 @@ _0222A856: blt _0222A856 ldr r0, [r7, #4] bl SpriteList_Delete - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free bl GF_DestroyVramTransferManager diff --git a/asm/overlay_44.s b/asm/overlay_44.s index 11f3daac11..cdc5f89606 100644 --- a/asm/overlay_44.s +++ b/asm/overlay_44.s @@ -1120,7 +1120,7 @@ _0222A6F0: ldr r0, [r5, r0] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r5, #0 bl ov44_0222B164 @@ -2262,7 +2262,7 @@ ov44_0222AFE8: ; 0x0222AFE8 add r0, r2, #0 ldr r1, _0222B02C ; =0x00200010 mov r2, #0x10 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x14 mov r1, #0x35 bl sub_02022588 @@ -19327,7 +19327,7 @@ ov44_0223376C: ; 0x0223376C ldr r1, _0223381C ; =0x00200010 mov r2, #0x10 str r6, [sp, #0x20] - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #4 add r1, r6, #0 bl sub_02022588 @@ -19404,7 +19404,7 @@ _02233844: add r5, r5, #4 cmp r4, #4 blt _02233844 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r4, r5, r6, pc} diff --git a/asm/overlay_47.s b/asm/overlay_47.s index 434725f799..885c26f966 100644 --- a/asm/overlay_47.s +++ b/asm/overlay_47.s @@ -480,7 +480,7 @@ ov47_02258BB4: ; 0x02258BB4 mov r1, #0x10 ldr r0, _02258C40 ; =ov47_02259E58 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x20 add r1, r6, #0 bl sub_02022588 @@ -539,7 +539,7 @@ _02258C54: add r5, r5, #4 cmp r4, #4 blt _02258C54 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r4, r5, r6, pc} diff --git a/asm/overlay_48.s b/asm/overlay_48.s index 51bdd59c90..f003a64982 100644 --- a/asm/overlay_48.s +++ b/asm/overlay_48.s @@ -1882,7 +1882,7 @@ ov48_02259688: ; 0x02259688 mov r1, #0x10 ldr r0, _02259720 ; =ov48_0225B1A0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x20 add r1, r6, #0 bl sub_02022588 @@ -1947,7 +1947,7 @@ _02259734: add r5, r5, #4 cmp r4, #4 blt _02259734 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r4, r5, r6, pc} diff --git a/asm/overlay_49.s b/asm/overlay_49.s index 190297ba03..31405b3c8e 100644 --- a/asm/overlay_49.s +++ b/asm/overlay_49.s @@ -4323,7 +4323,7 @@ _0225A636: ldr r0, _0225A7B4 ; =ov49_02269744 ldr r2, _0225A7B8 ; =0x00100010 mov r1, #0x10 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x18 add r1, r6, #0 bl sub_02022588 @@ -4449,7 +4449,7 @@ _0225A80E: blt _0225A80E ldr r0, [r6, #4] bl SpriteList_Delete - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free mov r0, #0x51 diff --git a/asm/overlay_65.s b/asm/overlay_65.s index c53788cc71..8fd41c737d 100644 --- a/asm/overlay_65.s +++ b/asm/overlay_65.s @@ -1755,7 +1755,7 @@ _0221CCE4: ldr r0, [r6, r0] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 @@ -2558,7 +2558,7 @@ ov65_0221D3B8: ; 0x0221D3B8 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x1a bl sub_02022588 diff --git a/asm/overlay_70.s b/asm/overlay_70.s index 7192871f7f..05d2079fb9 100644 --- a/asm/overlay_70.s +++ b/asm/overlay_70.s @@ -2091,7 +2091,7 @@ ov70_022388D0: ; 0x022388D0 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x3d bl sub_02022588 @@ -2854,7 +2854,7 @@ _02238ECC: mov r1, #0 str r1, [r6, r0] bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} nop diff --git a/asm/overlay_72.s b/asm/overlay_72.s index be8a77c0f5..41aa5ad910 100644 --- a/asm/overlay_72.s +++ b/asm/overlay_72.s @@ -1121,7 +1121,7 @@ ov72_02238164: ; 0x02238164 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x43 bl sub_02022588 @@ -1937,7 +1937,7 @@ _0223882A: mov r1, #0 str r1, [r6, r0] bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 diff --git a/asm/overlay_73.s b/asm/overlay_73.s index be3585159b..b7cf61ff3b 100644 --- a/asm/overlay_73.s +++ b/asm/overlay_73.s @@ -334,7 +334,7 @@ _021E5BD8: ldr r0, [r6, #0x50] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r6, #0 bl ov73_021E6400 @@ -881,7 +881,7 @@ ov73_021E6060: ; 0x021E6060 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x32 bl sub_02022588 @@ -5145,7 +5145,7 @@ ov73_021E8168: ; 0x021E8168 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x96 bl sub_02022588 @@ -5554,7 +5554,7 @@ _021E8496: mov r1, #0 str r1, [r6, r0] bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 diff --git a/asm/overlay_74_thumb.s b/asm/overlay_74_thumb.s index 17a9ae0c01..9bbb9c8371 100644 --- a/asm/overlay_74_thumb.s +++ b/asm/overlay_74_thumb.s @@ -21706,7 +21706,7 @@ ov74_02231BC0: ; 0x02231BC0 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x4c bl sub_02022588 @@ -24131,7 +24131,7 @@ _02232EEE: mov r0, #0 str r0, [r6, #0x28] bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 ldr r0, _02232F54 ; =0x0000E88C ldr r0, [r6, r0] @@ -29368,7 +29368,7 @@ ov74_0223563C: ; 0x0223563C str r0, [sp, #0xc] add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx ldr r1, _02235678 ; =ov74_0223D454 mov r0, #0x1e ldr r1, [r1, #8] @@ -29884,7 +29884,7 @@ _02235A24: mov r1, #0 str r1, [r0] bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0 add r1, r0, #0 diff --git a/asm/overlay_81.s b/asm/overlay_81.s index dd3d47985b..c94f348b29 100644 --- a/asm/overlay_81.s +++ b/asm/overlay_81.s @@ -9781,7 +9781,7 @@ _02242B66: ldr r0, [r5] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 @@ -9801,7 +9801,7 @@ ov81_02242B90: ; 0x02242B90 ldr r1, _02242BC4 ; =0x00100010 add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #8 mov r1, #0x64 bl sub_02022588 diff --git a/asm/overlay_82.s b/asm/overlay_82.s index 575bdcdcb3..3e4a844b00 100644 --- a/asm/overlay_82.s +++ b/asm/overlay_82.s @@ -3914,7 +3914,7 @@ _0223FBEA: ldr r0, [r5] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 @@ -3934,7 +3934,7 @@ ov82_0223FC14: ; 0x0223FC14 mov r1, #0x10 add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #4 mov r1, #0x69 bl sub_02022588 diff --git a/asm/overlay_83.s b/asm/overlay_83.s index f1e4bb76eb..d513fb64a8 100644 --- a/asm/overlay_83.s +++ b/asm/overlay_83.s @@ -18082,7 +18082,7 @@ _0224723A: ldr r0, [r5] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r4, r5, r6, pc} .balign 4, 0 @@ -18162,7 +18162,7 @@ ov83_022472DC: ; 0x022472DC add r0, r2, #0 ldr r2, _02247310 ; =0x00100010 mov r1, #0x10 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x20 mov r1, #0x6b bl sub_02022588 diff --git a/asm/overlay_85.s b/asm/overlay_85.s index af640fee84..17e9f2ca8f 100644 --- a/asm/overlay_85.s +++ b/asm/overlay_85.s @@ -6750,7 +6750,7 @@ _021E8B34: ldr r0, [r6, #0x60] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r6, #0 bl ov85_021E9288 @@ -7253,7 +7253,7 @@ ov85_021E8F58: ; 0x021E8F58 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x66 bl sub_02022588 diff --git a/asm/overlay_87.s b/asm/overlay_87.s index 55a32a8083..16066cb2df 100644 --- a/asm/overlay_87.s +++ b/asm/overlay_87.s @@ -4873,7 +4873,7 @@ _021E7EC6: ldr r0, [r5] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, r4, r5, r6, r7, pc} .balign 4, 0 @@ -4893,7 +4893,7 @@ ov87_021E7EF0: ; 0x021E7EF0 ldr r1, _021E7F24 ; =0x00200010 add r0, r2, #0 add r2, r1, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0xe mov r1, #0x7a bl sub_02022588 diff --git a/asm/overlay_88.s b/asm/overlay_88.s index 99b46cf631..df8bdbeb44 100644 --- a/asm/overlay_88.s +++ b/asm/overlay_88.s @@ -587,7 +587,7 @@ ov88_02258C98: ; 0x02258C98 ldr r0, _02258D30 ; =ov88_02259914 ldr r1, _02258D34 ; =0x00200010 mov r2, #0x10 - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x20 add r1, r6, #0 bl sub_02022588 @@ -653,7 +653,7 @@ _02258D48: add r5, r5, #4 cmp r4, #4 blt _02258D48 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r4, r5, r6, pc} diff --git a/asm/overlay_90.s b/asm/overlay_90.s index b13de13908..d418f5c0c6 100644 --- a/asm/overlay_90.s +++ b/asm/overlay_90.s @@ -1275,7 +1275,7 @@ ov90_022590CC: ; 0x022590CC add r2, r1, #0 str r6, [sp, #0x1c] str r4, [sp, #0x28] - bl sub_020215C0 + bl ObjCharTransfer_InitEx ldr r0, [sp, #0x18] add r1, r4, #0 bl sub_02022588 @@ -1309,7 +1309,7 @@ ov90_02259158: ; 0x02259158 push {r3, lr} ldr r0, [r0] bl SpriteList_Delete - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r3, pc} diff --git a/asm/overlay_91.s b/asm/overlay_91.s index 89a8c7b0a7..557c1477df 100644 --- a/asm/overlay_91.s +++ b/asm/overlay_91.s @@ -7009,7 +7009,7 @@ ov91_0225FA9C: ; 0x0225FA9C add r0, r2, #0 add r2, r1, #0 str r6, [sp, #0x20] - bl sub_020215C0 + bl ObjCharTransfer_InitEx mov r0, #0x10 add r1, r6, #0 bl sub_02022588 @@ -7079,7 +7079,7 @@ _0225FB62: add r5, r5, #4 cmp r4, #4 blt _0225FB62 - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 bl OamManager_Free pop {r4, r5, r6, pc} diff --git a/asm/overlay_96.s b/asm/overlay_96.s index 07aac0f383..677afe3f94 100644 --- a/asm/overlay_96.s +++ b/asm/overlay_96.s @@ -7801,7 +7801,7 @@ ov96_021E92B0: ; 0x021E92B0 add r5, r1, #0 ldr r2, [sp, #0x10] add r1, r3, #0 - bl sub_020215C0 + bl ObjCharTransfer_InitEx add r0, r5, #0 add r1, r4, #0 bl sub_02022588 @@ -7814,7 +7814,7 @@ ov96_021E92B0: ; 0x021E92B0 ov96_021E92D0: ; 0x021E92D0 push {r3, lr} bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 pop {r3, pc} thumb_func_end ov96_021E92D0 @@ -23202,7 +23202,7 @@ ov96_021F095C: ; 0x021F095C ldr r0, [r4, r0] bl ov96_021E9C0C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0x77 lsl r0, r0, #4 @@ -32885,7 +32885,7 @@ _021F5598: mov r0, #4 bl FontID_Release bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0 add r1, r0, #0 @@ -47998,7 +47998,7 @@ ov96_021FCE10: ; 0x021FCE10 ldr r0, [r4, r0] bl ov96_021E9C0C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0xf7 lsl r0, r0, #2 @@ -57764,7 +57764,7 @@ _02201BF0: ldr r0, [r4, r0] bl ov96_021E9C0C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 ldr r0, _02201C80 ; =0x000005DC ldr r0, [r4, r0] @@ -63931,7 +63931,7 @@ ov96_02204E58: ; 0x02204E58 ldr r0, [r4, r0] bl ov96_021E9C0C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0xdb lsl r0, r0, #2 @@ -89539,7 +89539,7 @@ _0221172E: ldr r0, [r4, r0] bl ov96_021E9C0C bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 ldr r0, _022117BC ; =0x0000074C ldr r0, [r4, r0] diff --git a/asm/overlay_97.s b/asm/overlay_97.s index dc08c7fd17..e94dbcaa00 100644 --- a/asm/overlay_97.s +++ b/asm/overlay_97.s @@ -136,7 +136,7 @@ ov97_0221E69C: ; 0x0221E69C mov r0, #2 bl FontID_Release bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 ldr r0, [r4] bl FreeToHeap @@ -325,7 +325,7 @@ ov97_0221E834: ; 0x0221E834 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x5c bl sub_02022588 diff --git a/asm/overlay_trainer_card_main.s b/asm/overlay_trainer_card_main.s index b5ba3cc30d..3e3c2a7242 100644 --- a/asm/overlay_trainer_card_main.s +++ b/asm/overlay_trainer_card_main.s @@ -4170,7 +4170,7 @@ _021E7CF0: ldr r0, [r5] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r2, #1 lsl r2, r2, #0x1a @@ -4216,7 +4216,7 @@ ov51_021E7D68: ; 0x021E7D68 ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #2 mov r1, #0x19 bl sub_02022588 diff --git a/asm/overlay_trainer_card_signature.s b/asm/overlay_trainer_card_signature.s index e3e7cab4f2..6200188a62 100644 --- a/asm/overlay_trainer_card_signature.s +++ b/asm/overlay_trainer_card_signature.s @@ -261,7 +261,7 @@ _021E82FC: ldr r0, [r6, #0x3c] bl SpriteList_Delete bl OamManager_Free - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 add r0, r6, #0 bl ov52_021E8B94 @@ -715,7 +715,7 @@ ov52_021E86DC: ; 0x021E86DC ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x27 bl sub_02022588 diff --git a/asm/unk_02082908.s b/asm/unk_02082908.s index d1698421a4..1f99c3d06c 100644 --- a/asm/unk_02082908.s +++ b/asm/unk_02082908.s @@ -878,7 +878,7 @@ _02083016: ldr r0, [r4, r0] mov r1, #7 bl FreeBgTilemapBuffer - bl sub_0202168C + bl ObjCharTransfer_Destroy bl sub_02022608 mov r0, #0x16 lsl r0, r0, #4 @@ -1778,7 +1778,7 @@ sub_0208377C: ; 0x0208377C ldmia r4!, {r0, r1} stmia r3!, {r0, r1} add r0, r2, #0 - bl sub_020215A0 + bl ObjCharTransfer_Init mov r0, #0x14 mov r1, #0x12 bl sub_02022588 diff --git a/include/unk_02009D48.h b/include/unk_02009D48.h index a97b190f64..56ed043a2b 100644 --- a/include/unk_02009D48.h +++ b/include/unk_02009D48.h @@ -50,7 +50,7 @@ void SpriteResourceHeaderList_Destroy(SpriteResourceHeaderList *list); SpriteList *G2dRenderer_Init(int a0, GF_G2dRenderer *renderer, HeapID heapId); void G2dRenderer_SetMainSurfaceCoords(GF_G2dRenderer *renderer, s32 x, s32 y); void G2dRenderer_SetSubSurfaceCoords(GF_G2dRenderer *renderer, s32 x, s32 y); -void sub_02009FE8(u32 a0, GXOBJVRamModeChar mode); +void sub_02009FE8(NNS_G2D_VRAM_TYPE vram, GXOBJVRamModeChar mode); void sub_0200A080(u32 a0); #endif //POKEHEARTGOLD_UNK_02009D48_H diff --git a/include/unk_020215A0.h b/include/unk_020215A0.h index 95163374ee..fec100312c 100644 --- a/include/unk_020215A0.h +++ b/include/unk_020215A0.h @@ -16,33 +16,33 @@ typedef struct UnkStruct_02021758 { NNS_G2D_VRAM_TYPE vram; int id; BOOL unk_0C; -} UnkStruct_02021758; +} ObjCharTransferTaskTemplate; typedef struct UnkStruct_02021AC8 { - u32 unk_00; - u32 unk_04; - u16 unk_08; + u32 size; + u32 offset; + u16 vram; u16 unk_0A; } UnkStruct_02021AC8; -typedef struct UnkStruct_021D21F4 UnkStruct_021D21F4; +typedef struct ObjCharTransferTasksManager ObjCharTransferTasksManager; -void sub_020215A0(UnkStruct_020215A0 *template); -void sub_020215C0(UnkStruct_020215A0 *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub); -void sub_0202168C(void); +void ObjCharTransfer_Init(UnkStruct_020215A0 *template); +void ObjCharTransfer_InitEx(UnkStruct_020215A0 *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub); +void ObjCharTransfer_Destroy(void); void sub_020216C8(void); -void sub_020216F4(u32 a0, u32 a1, u32 a2); -BOOL sub_02021758(const UnkStruct_02021758 *a0); -BOOL sub_020217B0(const UnkStruct_02021758 *a0); +void sub_020216F4(u32 a0, u32 a1, NNS_G2D_VRAM_TYPE vram); +BOOL sub_02021758(const ObjCharTransferTaskTemplate *a0); +BOOL sub_020217B0(const ObjCharTransferTaskTemplate *a0); void sub_0202183C(int id, NNSG2dCharacterData *charData); void sub_02021884(int resId); NNSG2dImageProxy *sub_02021910(int resId); NNSG2dImageProxy *sub_02021934(int resId, u32 size); NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn); void sub_02021A50(const NNSG2dImageProxy *proxy); -BOOL sub_02021AC8(u32 a0, int a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 *a3); +BOOL sub_02021AC8(u32 size, BOOL a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 *a3); void sub_02021B5C(UnkStruct_02021AC8 *a0); -UnkStruct_021D21F4 *sub_02021BD0(void); -void sub_02021BEC(UnkStruct_021D21F4 *a0); +ObjCharTransferTasksManager *sub_02021BD0(void); +void sub_02021BEC(ObjCharTransferTasksManager *a0); #endif //POKEHEARTGOLD_UNK_020215A0_H diff --git a/lib/include/nnsys/g2d/fmt/g2d_Character_data.h b/lib/include/nnsys/g2d/fmt/g2d_Character_data.h index 802fb0cff2..df822ffae1 100644 --- a/lib/include/nnsys/g2d/fmt/g2d_Character_data.h +++ b/lib/include/nnsys/g2d/fmt/g2d_Character_data.h @@ -3,6 +3,11 @@ #include +#define NNS_G2D_CHARACTER_FMT_MASK 0xFF // 8 bit +#define NNS_G2D_VRAMTRANSFERDATA_FLAG_MASK 0x1 // 1 bit +#define NNS_G2D_CHARACTER_FMT_SHIFT 0 +#define NNS_G2D_VRAMTRANSFERDATA_FLAG_SHIFT 8 + typedef enum NNSG2dCharacterDataMapingType { NNS_G2D_CHARACTERMAPING_1D_32, NNS_G2D_CHARACTERMAPING_1D_64, diff --git a/src/battle_arcade_game_board.c b/src/battle_arcade_game_board.c index 5758d07819..205a438da4 100644 --- a/src/battle_arcade_game_board.c +++ b/src/battle_arcade_game_board.c @@ -605,7 +605,7 @@ static void BattleArcadeGameBoard_InitObjects(GAME_BOARD_WORK *work) { work->button = BattleArcadeObject_Create(&work->unk3E8, 0, 0, 0, 2, 128, 96, 0, 0, 1); if (sub_02037474()) { - sub_02009FE8(1, GX_OBJVRAMMODE_CHAR_1D_32K); + sub_02009FE8(NNS_G2D_VRAM_TYPE_2DMAIN, GX_OBJVRAMMODE_CHAR_1D_32K); sub_0200A080(1); sub_0203A880(); } @@ -1292,7 +1292,7 @@ static void ov84_0223F418(GAME_BOARD_SUB_3E8 *work) { SpriteList_Delete(work->spriteList); OamManager_Free(); - sub_0202168C(); + ObjCharTransfer_Destroy(); sub_02022608(); } @@ -1300,7 +1300,7 @@ extern UnkStruct_020215A0 ov84_0223F9E8; static void ov84_0223F480(void) { UnkStruct_020215A0 var = ov84_0223F9E8; - sub_020215C0(&var, GX_OBJVRAMMODE_CHAR_1D_32K, GX_OBJVRAMMODE_CHAR_1D_32K); + ObjCharTransfer_InitEx(&var, GX_OBJVRAMMODE_CHAR_1D_32K, GX_OBJVRAMMODE_CHAR_1D_32K); sub_02022588(14, HEAP_ID_GAME_BOARD); sub_020216C8(); sub_02022638(); diff --git a/src/choose_starter_app.c b/src/choose_starter_app.c index d5ccfa30c0..340b7d4021 100644 --- a/src/choose_starter_app.c +++ b/src/choose_starter_app.c @@ -553,7 +553,7 @@ BOOL ChooseStarterApplication_OvyExit(OVY_MANAGER *ovy, int *state) { Destroy2DGfxResObjMan(work->monSpriteData.cellResMan); Destroy2DGfxResObjMan(work->monSpriteData.animResMan); OamManager_Free(); - sub_0202168C(); + ObjCharTransfer_Destroy(); sub_02022608(); freeWindow(work->winTop); freeWindow(work->winBottom); @@ -616,7 +616,7 @@ static void createOamManager(HeapID heapId) { HEAP_ID_DEFAULT }; baseTrans.heapId = heapId; - sub_020215C0(&baseTrans, GX_OBJVRAMMODE_CHAR_1D_128K, GX_OBJVRAMMODE_CHAR_1D_32K); + ObjCharTransfer_InitEx(&baseTrans, GX_OBJVRAMMODE_CHAR_1D_128K, GX_OBJVRAMMODE_CHAR_1D_32K); } sub_02022588(3, heapId); sub_020216C8(); diff --git a/src/credits/credits.c b/src/credits/credits.c index 4025b2617d..4be359f8b9 100644 --- a/src/credits/credits.c +++ b/src/credits/credits.c @@ -470,7 +470,7 @@ static void CreateOamAndObjResMgrs(CreditsAppWork *work) { GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_128K); GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_128K); temp = ov76_021E6EA0; - sub_020215A0(&temp); + ObjCharTransfer_Init(&temp); sub_02022588(0xd, HEAP_ID_CREDITS); sub_020216C8(); sub_02022638(); @@ -492,7 +492,7 @@ static void FreeOamAndObjResMgrs(CreditsAppWork *work) { } SpriteList_Delete(work->spriteList); OamManager_Free(); - sub_0202168C(); + ObjCharTransfer_Destroy(); sub_02022608(); } diff --git a/src/intro_movie.c b/src/intro_movie.c index 9742972970..2f89f899b1 100644 --- a/src/intro_movie.c +++ b/src/intro_movie.c @@ -180,7 +180,7 @@ void ov60_021E6E40(IntroMovieOvyData *data) { GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K); UnkStruct_020215A0 sp14 = {10, 0, 0, HEAP_ID_INTRO_MOVIE}; - sub_020215A0(&sp14); + ObjCharTransfer_Init(&sp14); sub_02022588(10, HEAP_ID_INTRO_MOVIE); sub_020216C8(); sub_02022638(); @@ -192,6 +192,6 @@ void ov60_021E6E40(IntroMovieOvyData *data) { void ov60_021E6EC0(IntroMovieOvyData *data) { SpriteList_Delete(data->spriteList); OamManager_Free(); - sub_0202168C(); + ObjCharTransfer_Destroy(); sub_02022608(); } diff --git a/src/unk_02009D48.c b/src/unk_02009D48.c index 3ba03ae3c9..af46f6d377 100644 --- a/src/unk_02009D48.c +++ b/src/unk_02009D48.c @@ -139,23 +139,23 @@ void G2dRenderer_SetSubSurfaceCoords(struct GF_G2dRenderer *a0, fx32 x, fx32 y) sub_02025C88(&a0->renderSurface[1], &rect); } -void sub_02009FE8(u32 a0, GXOBJVRamModeChar mode) { +void sub_02009FE8(NNS_G2D_VRAM_TYPE vram, GXOBJVRamModeChar mode) { switch (mode) { case GX_OBJVRAMMODE_CHAR_1D_32K: if (GX_GetBankForOBJ() == GX_VRAM_OBJ_16_G || GX_GetBankForOBJ() == GX_VRAM_OBJ_16_F) { - sub_020216F4(0x3E00, 0x200, a0); + sub_020216F4(0x3E00, 0x200, vram); } else { - sub_020216F4(0x7E00, 0x200, a0); + sub_020216F4(0x7E00, 0x200, vram); } break; case GX_OBJVRAMMODE_CHAR_1D_64K: - sub_020216F4(0xFE00, 0x200, a0); + sub_020216F4(0xFE00, 0x200, vram); break; case GX_OBJVRAMMODE_CHAR_1D_128K: if (GX_GetBankForOBJ() == GX_VRAM_OBJ_80_EF || GX_GetBankForOBJ() == GX_VRAM_OBJ_80_EG) { - sub_020216F4(0x13E00, 0x200, a0); + sub_020216F4(0x13E00, 0x200, vram); } else { - sub_020216F4(0x1FE00, 0x200, a0); + sub_020216F4(0x1FE00, 0x200, vram); } break; default: diff --git a/src/unk_0200ACF0.c b/src/unk_0200ACF0.c index 1d121f4db9..6ab5eb07e1 100644 --- a/src/unk_0200ACF0.c +++ b/src/unk_0200ACF0.c @@ -7,7 +7,7 @@ BOOL sub_0200ACF0(_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(_2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - UnkStruct_02021758 sp00; + ObjCharTransferTaskTemplate sp00; sp00.charData = _2DGfxResObj_GetCharDataPtr(obj); sp00.vram = _2DGfxResObj_GetVRamType(obj); sp00.id = _2DGfxResObj_GetResID(obj); @@ -28,7 +28,7 @@ BOOL sub_0200AD64(_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(_2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - UnkStruct_02021758 sp00; + ObjCharTransferTaskTemplate sp00; sp00.charData = _2DGfxResObj_GetCharDataPtr(obj); sp00.vram = _2DGfxResObj_GetVRamType(obj); sp00.id = _2DGfxResObj_GetResID(obj); @@ -40,7 +40,7 @@ BOOL sub_0200ADA4(_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(_2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - UnkStruct_02021758 sp00; + ObjCharTransferTaskTemplate sp00; sp00.charData = _2DGfxResObj_GetCharDataPtr(obj); sp00.vram = _2DGfxResObj_GetVRamType(obj); sp00.id = _2DGfxResObj_GetResID(obj); @@ -61,7 +61,7 @@ BOOL sub_0200AE18(_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(_2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - UnkStruct_02021758 sp00; + ObjCharTransferTaskTemplate sp00; sp00.charData = _2DGfxResObj_GetCharDataPtr(obj); sp00.vram = _2DGfxResObj_GetVRamType(obj); sp00.id = _2DGfxResObj_GetResID(obj); diff --git a/src/unk_0200CF18.c b/src/unk_0200CF18.c index e701ef451b..474dc048e2 100644 --- a/src/unk_0200CF18.c +++ b/src/unk_0200CF18.c @@ -65,7 +65,7 @@ BOOL sub_0200CF70(SpriteRenderer* renderer, const Unk122_021E92FC* a1, const Unk sp14.unk_04 = a2->unk4; sp14.unk_08 = a2->unk8; sp14.heapId = renderer->heapId; - sub_020215C0(&sp14, a2->charModeMain, a2->charModeSub); + ObjCharTransfer_InitEx(&sp14, a2->charModeMain, a2->charModeSub); sub_02022588(a3, renderer->heapId); NNS_G2dInitOamManagerModule(); if (renderer->hasOamManager == TRUE) { @@ -127,7 +127,7 @@ static void SpriteGfxHandler_DestroyResObjsAndMans(SpriteGfxHandler* gfxHandler) static void DeinitSpriteRenderer(SpriteRenderer* renderer) { sub_0202067C(renderer->cellTransferState); - sub_0202168C(); + ObjCharTransfer_Destroy(); sub_02022608(); if (renderer->hasOamManager == TRUE) { OamManager_Free(); diff --git a/src/unk_020215A0.c b/src/unk_020215A0.c index 26d84478b1..5d71a1e537 100644 --- a/src/unk_020215A0.c +++ b/src/unk_020215A0.c @@ -2,10 +2,10 @@ #include "unk_020215A0.h" #include "vram_transfer_manager.h" -typedef struct UnkStruct_021D21F4_sub { +typedef struct ObjCharTransferTask { NNSG2dCharacterData *charData; NNS_G2D_VRAM_TYPE vram; - u8 unk_08; + u8 isTransferred; int resId; NNSG2dImageProxy imageProxy; u32 baseAddrMain; @@ -14,12 +14,12 @@ typedef struct UnkStruct_021D21F4_sub { int unk_40; BOOL unk_44; int unk_48; - u32 unk_4C; - u32 unk_50; -} UnkStruct_021D21F4_sub; + u32 sizeMain; + u32 sizeSub; +} ObjCharTransferTask; -struct UnkStruct_021D21F4 { - UnkStruct_021D21F4_sub *unk_00; +struct ObjCharTransferTasksManager { + ObjCharTransferTask *tasks; int max; int num; int offsetMain; @@ -34,28 +34,28 @@ struct UnkStruct_021D21F4 { u32 unk_30; u8 *unk_34; u8 *unk_38; -} *_021D21F4; +} *sObjCharTransferTasksManager; -BOOL sub_0202180C(int resId); +BOOL ObjCharTransfer_TaskExistsByID(int resId); void sub_020218D4(void); -void sub_02021C08(UnkStruct_021D21F4_sub *a0); -BOOL sub_02021C2C(const UnkStruct_02021758 *a0, UnkStruct_021D21F4_sub *a1); -BOOL sub_02021C9C(UnkStruct_021D21F4_sub *a0); -UnkStruct_021D21F4_sub *sub_02021C50(const NNSG2dImageProxy *proxyIn); -BOOL sub_02021CCC(UnkStruct_021D21F4_sub *a0); -BOOL sub_02021D00(UnkStruct_021D21F4_sub *a0); -void sub_02021D58(UnkStruct_021D21F4_sub *a0); -UnkStruct_021D21F4_sub *sub_02021D70(int resId); -GXOBJVRamModeChar sub_02021DA8(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram); -void sub_02021DD0(UnkStruct_021D21F4_sub *a0, u32 offsetMain, u32 offsetSub); -BOOL sub_02021DE4(int a0, u32 *a1, u32 *a2, u32 a3, u32 *a4, u32 *a5); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match -void sub_02021E90(UnkStruct_021D21F4_sub *a0, u32 a1, u32 a2); -void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 a1, u32 a2, u32 a3, u32 a4); -void sub_02021F28(UnkStruct_021D21F4_sub *a0); -void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram); -void sub_02021FB0(UnkStruct_021D21F4_sub *a0); -void sub_02021FDC(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram); -UnkStruct_021D21F4_sub *sub_02022024(void); +void ObjCharTransferTask_Reset(ObjCharTransferTask *a0); +BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *a0, ObjCharTransferTask *a1); +BOOL sub_02021C9C(ObjCharTransferTask *a0); +ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy *proxyIn); +BOOL sub_02021CCC(ObjCharTransferTask *a0); +BOOL sub_02021D00(ObjCharTransferTask *a0); +void sub_02021D58(ObjCharTransferTask *a0); +ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId); +GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram); +void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *a0, u32 offsetMain, u32 offsetSub); +BOOL sub_02021DE4(int vram, u32 *pOffsetMain, u32 *pOffsetSub, u32 size, u32 *a4, u32 *a5); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match +void sub_02021E90(ObjCharTransferTask *a0, u32 a1, u32 a2); +void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 a3, u32 a4); +void sub_02021F28(ObjCharTransferTask *a0); +void sub_02021F54(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram); +void sub_02021FB0(ObjCharTransferTask *a0); +void sub_02021FDC(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram); +ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void); void sub_02022060(void); void sub_020221D0(u32 a0, u32 a1, HeapID heapID); void sub_020221B4(void); @@ -65,100 +65,100 @@ void sub_02022278(u8 *a0); void sub_02022290(u32 a0, u32 a1, u8 *a2); u32 sub_020222EC(u32 a0, u8 *a1); void sub_02022374(u32 a0, u32 a1, u8 *a2); -void sub_020223C4(UnkStruct_021D21F4_sub *a0); +void sub_020223C4(ObjCharTransferTask *a0); int sub_02022448(GXOBJVRamModeChar mode); int sub_02022488(int a0, int a1, int a2); u32 sub_020224A8(int a0, int a1); int sub_020224B8(int a0, int a1); -BOOL sub_020224C0(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *a2, u32 *a3); -void sub_02022510(u32 size, NNS_G2D_VRAM_TYPE vram); +BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub); +void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram); void sub_02022560(int a0, u32 *a1, u8 *a2); void sub_0202256C(u32 a0, u32 a1, u32 a2, int *a3, int *a4); -void sub_020215A0(UnkStruct_020215A0 *template) { - sub_020215C0(template, GX_GetOBJVRamModeChar(), GXS_GetOBJVRamModeChar()); +void ObjCharTransfer_Init(UnkStruct_020215A0 *template) { + ObjCharTransfer_InitEx(template, GX_GetOBJVRamModeChar(), GXS_GetOBJVRamModeChar()); } -void sub_020215C0(UnkStruct_020215A0 *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub) { - if (_021D21F4 == NULL) { - _021D21F4 = AllocFromHeap(template->heapId, sizeof(struct UnkStruct_021D21F4)); - MI_CpuClear32(_021D21F4, sizeof(struct UnkStruct_021D21F4)); - _021D21F4->max = template->unk_00; - _021D21F4->unk_00 = (UnkStruct_021D21F4_sub *)AllocFromHeap(template->heapId, sizeof(UnkStruct_021D21F4_sub) * _021D21F4->max); +void ObjCharTransfer_InitEx(UnkStruct_020215A0 *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub) { + if (sObjCharTransferTasksManager == NULL) { + sObjCharTransferTasksManager = AllocFromHeap(template->heapId, sizeof(struct ObjCharTransferTasksManager)); + MI_CpuClear32(sObjCharTransferTasksManager, sizeof(struct ObjCharTransferTasksManager)); + sObjCharTransferTasksManager->max = template->unk_00; + sObjCharTransferTasksManager->tasks = (ObjCharTransferTask *)AllocFromHeap(template->heapId, sizeof(ObjCharTransferTask) * sObjCharTransferTasksManager->max); for (int i = 0; i < template->unk_00; ++i) { - sub_02021C08(&_021D21F4->unk_00[i]); + ObjCharTransferTask_Reset(&sObjCharTransferTasksManager->tasks[i]); } - _021D21F4->unk_2C = sub_02022448(modeMain); - _021D21F4->unk_30 = sub_02022448(modeSub); + sObjCharTransferTasksManager->unk_2C = sub_02022448(modeMain); + sObjCharTransferTasksManager->unk_30 = sub_02022448(modeSub); GX_SetOBJVRamModeChar(modeMain); GXS_SetOBJVRamModeChar(modeSub); - int r4 = sub_020224A8(template->unk_04, _021D21F4->unk_2C); - int r0 = sub_020224A8(template->unk_08, _021D21F4->unk_30); + int r4 = sub_020224A8(template->unk_04, sObjCharTransferTasksManager->unk_2C); + int r0 = sub_020224A8(template->unk_08, sObjCharTransferTasksManager->unk_30); sub_020221D0(r4, r0, template->heapId); } } -void sub_0202168C(void) { - if (_021D21F4 != NULL) { - sub_02022238(_021D21F4->unk_34); - sub_02022238(_021D21F4->unk_38); +void ObjCharTransfer_Destroy(void) { + if (sObjCharTransferTasksManager != NULL) { + sub_02022238(sObjCharTransferTasksManager->unk_34); + sub_02022238(sObjCharTransferTasksManager->unk_38); sub_020218D4(); - FreeToHeap(_021D21F4->unk_00); - FreeToHeap(_021D21F4); - _021D21F4 = NULL; + FreeToHeap(sObjCharTransferTasksManager->tasks); + FreeToHeap(sObjCharTransferTasksManager); + sObjCharTransferTasksManager = NULL; } } void sub_020216C8(void) { - _021D21F4->offsetMain = 0; - _021D21F4->offsetSub = 0; - sub_02022278(_021D21F4->unk_34); - sub_02022278(_021D21F4->unk_38); + sObjCharTransferTasksManager->offsetMain = 0; + sObjCharTransferTasksManager->offsetSub = 0; + sub_02022278(sObjCharTransferTasksManager->unk_34); + sub_02022278(sObjCharTransferTasksManager->unk_38); sub_02022060(); } -void sub_020216F4(u32 a0, u32 a1, u32 a2) { - int sp8; +void sub_020216F4(u32 offset, u32 size, NNS_G2D_VRAM_TYPE vram) { + int newOffset; int sp4; - if (a2 == 1) { - sub_0202256C(_021D21F4->unk_1C, a0, a1, &sp8, &sp4); + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + sub_0202256C(sObjCharTransferTasksManager->unk_1C, offset, size, &newOffset, &sp4); if (sp4 > 0) { - sub_02021EC0(NNS_G2D_VRAM_TYPE_2DMAIN, sp8, 0, sp4, 0); + sub_02021EC0(NNS_G2D_VRAM_TYPE_2DMAIN, newOffset, 0, sp4, 0); } } else { - sub_0202256C(_021D21F4->unk_20, a0, a1, &sp8, &sp4); + sub_0202256C(sObjCharTransferTasksManager->unk_20, offset, size, &newOffset, &sp4); if (sp4 > 0) { - sub_02021EC0(NNS_G2D_VRAM_TYPE_2DSUB, 0, sp8, 0, sp4); + sub_02021EC0(NNS_G2D_VRAM_TYPE_2DSUB, 0, newOffset, 0, sp4); } } } -BOOL sub_02021758(const UnkStruct_02021758 *a0) { - GF_ASSERT(sub_0202180C(a0->id) != 1); - UnkStruct_021D21F4_sub *sub = sub_02022024(); +BOOL sub_02021758(const ObjCharTransferTaskTemplate *a0) { + GF_ASSERT(ObjCharTransfer_TaskExistsByID(a0->id) != 1); + ObjCharTransferTask *sub = ObjCharTransfer_GetFreeTask(); if (sub == NULL) { GF_ASSERT(FALSE); return FALSE; } - if (!sub_02021C2C(a0, sub)) { + if (!ObjCharTransferTask_InitFromTemplate(a0, sub)) { return FALSE; } if (!sub_02021C9C(sub)) { sub_02021884(sub->resId); return FALSE; } - ++_021D21F4->num; + ++sObjCharTransferTasksManager->num; return TRUE; } -BOOL sub_020217B0(const UnkStruct_02021758 *a0) { - GF_ASSERT(sub_0202180C(a0->id) != 1); - UnkStruct_021D21F4_sub *sub = sub_02022024(); +BOOL sub_020217B0(const ObjCharTransferTaskTemplate *a0) { + GF_ASSERT(ObjCharTransfer_TaskExistsByID(a0->id) != 1); + ObjCharTransferTask *sub = ObjCharTransfer_GetFreeTask(); if (sub == NULL) { GF_ASSERT(FALSE); return FALSE; } - if (!sub_02021C2C(a0, sub)) { + if (!ObjCharTransferTask_InitFromTemplate(a0, sub)) { return FALSE; } sub->unk_40 = 1; @@ -166,13 +166,13 @@ BOOL sub_020217B0(const UnkStruct_02021758 *a0) { sub_02021884(sub->resId); return FALSE; } - ++_021D21F4->num; + ++sObjCharTransferTasksManager->num; return TRUE; } -BOOL sub_0202180C(int resId) { - for (int i = 0; i < _021D21F4->max; ++i) { - if (resId == _021D21F4->unk_00[i].resId) { +BOOL ObjCharTransfer_TaskExistsByID(int resId) { + for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if (resId == sObjCharTransferTasksManager->tasks[i].resId) { return TRUE; } } @@ -182,7 +182,7 @@ BOOL sub_0202180C(int resId) { void sub_0202183C(int id, NNSG2dCharacterData *charData) { GF_ASSERT(charData != NULL); - UnkStruct_021D21F4_sub *sub = sub_02021D70(id); + ObjCharTransferTask *sub = ObjCharTransfer_GetTaskByID(id); GF_ASSERT(sub != NULL); sub->charData = charData; if (sub->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { @@ -194,10 +194,10 @@ void sub_0202183C(int id, NNSG2dCharacterData *charData) { } void sub_02021884(int resId) { - UnkStruct_021D21F4_sub *sub; + ObjCharTransferTask *sub; BOOL r5 = TRUE; do { - sub = sub_02021D70(resId); + sub = ObjCharTransfer_GetTaskByID(resId); GF_ASSERT(sub != NULL); if (sub->unk_3C == 4) { sub_02021A50(&sub->imageProxy); @@ -207,21 +207,21 @@ void sub_02021884(int resId) { } while (r5); if (sub->unk_3C != 0) { sub_02021D58(sub); - --_021D21F4->num; + --sObjCharTransferTasksManager->num; } } void sub_020218D4(void) { - for (int i = 0; i < _021D21F4->max; ++i) { - if (_021D21F4->unk_00[i].unk_3C != 0) { - sub_02021D58(&_021D21F4->unk_00[i]); - --_021D21F4->num; + for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if (sObjCharTransferTasksManager->tasks[i].unk_3C != 0) { + sub_02021D58(&sObjCharTransferTasksManager->tasks[i]); + --sObjCharTransferTasksManager->num; } } } NNSG2dImageProxy *sub_02021910(int resId) { - UnkStruct_021D21F4_sub *sub = sub_02021D70(resId); + ObjCharTransferTask *sub = ObjCharTransfer_GetTaskByID(resId); GF_ASSERT(sub != NULL); if (sub->unk_3C == 0) { return NULL; @@ -231,110 +231,110 @@ NNSG2dImageProxy *sub_02021910(int resId) { } NNSG2dImageProxy *sub_02021934(int resId, u32 size) { - UnkStruct_021D21F4_sub *sub = sub_02021D70(resId); + ObjCharTransferTask *sub = ObjCharTransfer_GetTaskByID(resId); GF_ASSERT(sub != NULL); if (sub->unk_3C == 0) { return NULL; } - u32 sp14; - u32 sp10; + u32 offsetMain; + u32 offsetSub; u32 spC; u32 sp8; - sub_02021DE4(sub->vram, &sp14, &sp10, size, &spC, &sp8); + sub_02021DE4(sub->vram, &offsetMain, &offsetSub, size, &spC, &sp8); if (sub->unk_3C == 3) { return NULL; } sub->unk_3C = 3; - sub_02021E90(sub, sp14, sp10); + sub_02021E90(sub, offsetMain, offsetSub); sub->unk_48 = 1; - sub->unk_4C = spC; - sub->unk_50 = sp8; + sub->sizeMain = spC; + sub->sizeSub = sp8; sub_02021FB0(sub); - sub_02021EC0(sub->vram, sp14, sp10, spC, sp8); + sub_02021EC0(sub->vram, offsetMain, offsetSub, spC, sp8); return &sub->imageProxy; } NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { - UnkStruct_021D21F4_sub *sub; - UnkStruct_021D21F4_sub *sub2; - u32 sp14; - u32 sp10; + ObjCharTransferTask *task; + ObjCharTransferTask *copiedTask; + u32 offsetMain; + u32 offsetSub; u32 spC; u32 sp8; - u32 r2; + u32 size; - sub = sub_02021C50(proxyIn); - GF_ASSERT(sub != NULL); - sub2 = sub_02022024(); - GF_ASSERT(sub2 != NULL); - if (sub->unk_3C != 3) { + task = ObjCharTransfer_GetTaskByImageProxy(proxyIn); + GF_ASSERT(task != NULL); + copiedTask = ObjCharTransfer_GetFreeTask(); + GF_ASSERT(copiedTask != NULL); + if (task->unk_3C != 3) { return NULL; } - *sub2 = *sub; - sub2->unk_3C = 4; - if (sub2->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { - r2 = sub2->unk_4C; + *copiedTask = *task; + copiedTask->unk_3C = 4; + if (copiedTask->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + size = copiedTask->sizeMain; } else { - r2 = sub2->unk_50; + size = copiedTask->sizeSub; } - sub_02021DE4(sub2->vram, &sp14, &sp10, r2, &spC, &sp8); - sub_02021E90(sub2, sp14, sp10); - sub2->unk_48 = 1; - sub2->unk_4C = spC; - sub2->unk_50 = sp8; - sub_02021FB0(sub2); - sub_02021EC0(sub2->vram, sp14, sp10, spC, sp8); + sub_02021DE4(copiedTask->vram, &offsetMain, &offsetSub, size, &spC, &sp8); + sub_02021E90(copiedTask, offsetMain, offsetSub); + copiedTask->unk_48 = 1; + copiedTask->sizeMain = spC; + copiedTask->sizeSub = sp8; + sub_02021FB0(copiedTask); + sub_02021EC0(copiedTask->vram, offsetMain, offsetSub, spC, sp8); - return &sub2->imageProxy; + return &copiedTask->imageProxy; } void sub_02021A50(const NNSG2dImageProxy *proxy) { int i; - for (i = 0; i < _021D21F4->max; ++i) { - if ((_021D21F4->unk_00[i].unk_3C == 3 || _021D21F4->unk_00[i].unk_3C == 4) && &_021D21F4->unk_00[i].imageProxy == proxy) { + for (i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if ((sObjCharTransferTasksManager->tasks[i].unk_3C == 3 || sObjCharTransferTasksManager->tasks[i].unk_3C == 4) && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxy) { break; } } - if (i < _021D21F4->max) { - sub_020223C4(&_021D21F4->unk_00[i]); - if (_021D21F4->unk_00[i].unk_3C == 3) { - _021D21F4->unk_00[i].unk_3C = 2; + if (i < sObjCharTransferTasksManager->max) { + sub_020223C4(&sObjCharTransferTasksManager->tasks[i]); + if (sObjCharTransferTasksManager->tasks[i].unk_3C == 3) { + sObjCharTransferTasksManager->tasks[i].unk_3C = 2; } else { - _021D21F4->unk_00[i].unk_3C = 0; - sub_02021C08(&_021D21F4->unk_00[i]); + sObjCharTransferTasksManager->tasks[i].unk_3C = 0; + ObjCharTransferTask_Reset(&sObjCharTransferTasksManager->tasks[i]); } } } -BOOL sub_02021AC8(u32 a0, int a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 *a3) { - u32 sp14; - u32 sp10; - u32 spC; - u32 sp8; +BOOL sub_02021AC8(u32 size, BOOL a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 *a3) { + u32 offsetMain; + u32 offsetSub; + u32 sizeMain; + u32 sizeSub; BOOL ret; if (a1 == 0) { - ret = sub_020224C0(a0, vram, &sp14, &sp10); + ret = ObjCharTransfer_TryGetDestVramOffsets(size, vram, &offsetMain, &offsetSub); if (ret) { - sub_02022510(a0, vram); - a3->unk_08 = vram; - a3->unk_00 = a0; - a3->unk_04 = vram == 1 ? sp14 : sp10; + ObjCharTransfer_ReserveVramSpace(size, vram); + a3->vram = vram; + a3->size = size; + a3->offset = vram == NNS_G2D_VRAM_TYPE_2DMAIN ? offsetMain : offsetSub; a3->unk_0A = 0; } } else { - ret = sub_02021DE4(vram, &sp14, &sp10, a0, &spC, &sp8); + ret = sub_02021DE4(vram, &offsetMain, &offsetSub, size, &sizeMain, &sizeSub); if (ret) { - sub_02021EC0(vram, sp14, sp10, spC, sp8); - a3->unk_08 = vram; - if (vram == 1) { - a3->unk_00 = spC; - a3->unk_04 = sp14 + _021D21F4->unk_1C; + sub_02021EC0(vram, offsetMain, offsetSub, sizeMain, sizeSub); + a3->vram = vram; + if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { + a3->size = sizeMain; + a3->offset = offsetMain + sObjCharTransferTasksManager->unk_1C; } else { - a3->unk_00 = sp8; - a3->unk_04 = sp10 + _021D21F4->unk_20; + a3->size = sizeSub; + a3->offset = offsetSub + sObjCharTransferTasksManager->unk_20; } a3->unk_0A = 1; } @@ -344,35 +344,35 @@ BOOL sub_02021AC8(u32 a0, int a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 *a3 void sub_02021B5C(UnkStruct_02021AC8 *a0) { if (a0->unk_0A != 0) { - if (a0->unk_08 & 1) { - u32 r5 = sub_020224A8(a0->unk_00, _021D21F4->unk_2C); - u32 r0 = sub_020224A8(a0->unk_04 - _021D21F4->unk_1C, _021D21F4->unk_2C); - sub_02022374(r0, r5, _021D21F4->unk_34); + if (a0->vram & 1) { + u32 r5 = sub_020224A8(a0->size, sObjCharTransferTasksManager->unk_2C); + u32 r0 = sub_020224A8(a0->offset - sObjCharTransferTasksManager->unk_1C, sObjCharTransferTasksManager->unk_2C); + sub_02022374(r0, r5, sObjCharTransferTasksManager->unk_34); } - if (a0->unk_08 & 2) { - u32 r5 = sub_020224A8(a0->unk_00, _021D21F4->unk_30); - u32 r0 = sub_020224A8(a0->unk_04 - _021D21F4->unk_20, _021D21F4->unk_30); - sub_02022374(r0, r5, _021D21F4->unk_38); + if (a0->vram & 2) { + u32 r5 = sub_020224A8(a0->size, sObjCharTransferTasksManager->unk_30); + u32 r0 = sub_020224A8(a0->offset - sObjCharTransferTasksManager->unk_20, sObjCharTransferTasksManager->unk_30); + sub_02022374(r0, r5, sObjCharTransferTasksManager->unk_38); } } } -UnkStruct_021D21F4 *sub_02021BD0(void) { - GF_ASSERT(_021D21F4 != NULL); - UnkStruct_021D21F4 *ret = _021D21F4; - _021D21F4 = NULL; +ObjCharTransferTasksManager *sub_02021BD0(void) { + GF_ASSERT(sObjCharTransferTasksManager != NULL); + ObjCharTransferTasksManager *ret = sObjCharTransferTasksManager; + sObjCharTransferTasksManager = NULL; return ret; } -void sub_02021BEC(UnkStruct_021D21F4 *a0) { - GF_ASSERT(_021D21F4 == NULL); - _021D21F4 = a0; +void sub_02021BEC(ObjCharTransferTasksManager *a0) { + GF_ASSERT(sObjCharTransferTasksManager == NULL); + sObjCharTransferTasksManager = a0; } -void sub_02021C08(UnkStruct_021D21F4_sub *a0) { +void ObjCharTransferTask_Reset(ObjCharTransferTask *a0) { a0->charData = NULL; a0->vram = NNS_G2D_VRAM_TYPE_NEITHER; - a0->unk_08 = 0; + a0->isTransferred = FALSE; a0->resId = -1; a0->baseAddrMain = 0; a0->baseAddrSub = 0; @@ -381,40 +381,40 @@ void sub_02021C08(UnkStruct_021D21F4_sub *a0) { NNS_G2dInitImageProxy(&a0->imageProxy); } -BOOL sub_02021C2C(const UnkStruct_02021758 *a0, UnkStruct_021D21F4_sub *a1) { - a1->charData = a0->charData; - a1->resId = a0->id; - a1->vram = a0->vram; - a1->unk_08 = a1->charData->characterFmt >> 8; - a1->unk_44 = a0->unk_0C; - a1->unk_48 = 0; - a1->unk_4C = 0; - a1->unk_50 = 0; +BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *template, ObjCharTransferTask *task) { + task->charData = template->charData; + task->resId = template->id; + task->vram = template->vram; + task->isTransferred = task->charData->characterFmt >> NNS_G2D_VRAMTRANSFERDATA_FLAG_SHIFT; + task->unk_44 = template->unk_0C; + task->unk_48 = 0; + task->sizeMain = 0; + task->sizeSub = 0; return TRUE; } -UnkStruct_021D21F4_sub *sub_02021C50(const NNSG2dImageProxy *proxyIn) { +ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy *proxyIn) { int i; - for (i = 0; i < _021D21F4->max; ++i) { - if (_021D21F4->unk_00[i].unk_3C != 0 && &_021D21F4->unk_00[i].imageProxy == proxyIn) { + for (i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if (sObjCharTransferTasksManager->tasks[i].unk_3C != 0 && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxyIn) { break; } } - if (i >= _021D21F4->max) { + if (i >= sObjCharTransferTasksManager->max) { return NULL; } - return &_021D21F4->unk_00[i]; + return &sObjCharTransferTasksManager->tasks[i]; } -BOOL sub_02021C9C(UnkStruct_021D21F4_sub *a0) { +BOOL sub_02021C9C(ObjCharTransferTask *a0) { BOOL ret = TRUE; - if (a0->unk_08 != 0) { + if (a0->isTransferred) { a0->unk_3C = 2; } else { a0->unk_3C = 1; - if (a0->unk_44 == 0) { + if (!a0->unk_44) { ret = sub_02021CCC(a0); } else { ret = sub_02021D00(a0); @@ -423,115 +423,115 @@ BOOL sub_02021C9C(UnkStruct_021D21F4_sub *a0) { return ret; } -BOOL sub_02021CCC(UnkStruct_021D21F4_sub *a0) { +BOOL sub_02021CCC(ObjCharTransferTask *a0) { u32 offsetMain; u32 offsetSub; - BOOL ret = sub_020224C0(a0->charData->szByte, a0->vram, &offsetMain, &offsetSub); + BOOL ret = ObjCharTransfer_TryGetDestVramOffsets(a0->charData->szByte, a0->vram, &offsetMain, &offsetSub); if (ret) { - sub_02021DD0(a0, offsetMain, offsetSub); - sub_02022510(a0->charData->szByte, a0->vram); + ObjCharTransferTask_SetBaseAddrs(a0, offsetMain, offsetSub); + ObjCharTransfer_ReserveVramSpace(a0->charData->szByte, a0->vram); } return ret; } -BOOL sub_02021D00(UnkStruct_021D21F4_sub *a0) { - u32 sp14; - u32 sp10; - u32 spC; - u32 sp8; - if (!sub_02021DE4(a0->vram, &sp14, &sp10, a0->charData->szByte, &spC, &sp8)) { +BOOL sub_02021D00(ObjCharTransferTask *a0) { + u32 offsetMain; + u32 offsetSub; + u32 sizeMain; + u32 sizeSub; + if (!sub_02021DE4(a0->vram, &offsetMain, &offsetSub, a0->charData->szByte, &sizeMain, &sizeSub)) { return FALSE; } - sub_02021E90(a0, sp14, sp10); + sub_02021E90(a0, offsetMain, offsetSub); a0->unk_48 = 1; - a0->unk_4C = spC; - a0->unk_50 = sp8; + a0->sizeMain = sizeMain; + a0->sizeSub = sizeSub; sub_02021F28(a0); - sub_02021EC0(a0->vram, sp14, sp10, spC, sp8); + sub_02021EC0(a0->vram, offsetMain, offsetSub, sizeMain, sizeSub); return TRUE; } -void sub_02021D58(UnkStruct_021D21F4_sub *a0) { +void sub_02021D58(ObjCharTransferTask *a0) { if (a0->unk_48) { sub_020223C4(a0); } - sub_02021C08(a0); + ObjCharTransferTask_Reset(a0); } -UnkStruct_021D21F4_sub *sub_02021D70(int resId) { - for (int i = 0; i < _021D21F4->max; ++i) { - if (_021D21F4->unk_00[i].resId == resId) { - return &_021D21F4->unk_00[i]; +ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId) { + for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if (sObjCharTransferTasksManager->tasks[i].resId == resId) { + return &sObjCharTransferTasksManager->tasks[i]; } } return NULL; } -GXOBJVRamModeChar sub_02021DA8(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram) { +GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { - a0->charData->mapingType = GX_GetOBJVRamModeChar(); + task->charData->mapingType = GX_GetOBJVRamModeChar(); } else { - a0->charData->mapingType = GXS_GetOBJVRamModeChar(); + task->charData->mapingType = GXS_GetOBJVRamModeChar(); } - return a0->charData->mapingType; + return task->charData->mapingType; } -void sub_02021DD0(UnkStruct_021D21F4_sub *a0, u32 offsetMain, u32 offsetSub) { - a0->baseAddrMain = offsetMain; - a0->baseAddrSub = offsetSub; - if (a0->unk_08 == 0) { - sub_02021F28(a0); +void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub) { + task->baseAddrMain = offsetMain; + task->baseAddrSub = offsetSub; + if (!task->isTransferred) { + sub_02021F28(task); } } BOOL sub_02021DE4(int a0, u32 *a1, u32 *a2, u32 a3, u32 *a4, u32 *a5) { if (a0 & NNS_G2D_VRAM_TYPE_2DMAIN) { - *a4 = sub_02022488(a3, _021D21F4->unk_2C, 1); - u32 r0 = sub_020224A8(*a4, _021D21F4->unk_2C); - *a1 = sub_020222EC(r0, _021D21F4->unk_34); + *a4 = sub_02022488(a3, sObjCharTransferTasksManager->unk_2C, 1); + u32 r0 = sub_020224A8(*a4, sObjCharTransferTasksManager->unk_2C); + *a1 = sub_020222EC(r0, sObjCharTransferTasksManager->unk_34); if (*a1 == -1) { GF_ASSERT(FALSE); return FALSE; } - *a1 = sub_020224B8(*a1, _021D21F4->unk_2C); + *a1 = sub_020224B8(*a1, sObjCharTransferTasksManager->unk_2C); } if (a0 & NNS_G2D_VRAM_TYPE_2DSUB) { - *a5 = sub_02022488(a3, _021D21F4->unk_30, 1); - u32 r0 = sub_020224A8(*a5, _021D21F4->unk_30); - *a2 = sub_020222EC(r0, _021D21F4->unk_38); + *a5 = sub_02022488(a3, sObjCharTransferTasksManager->unk_30, 1); + u32 r0 = sub_020224A8(*a5, sObjCharTransferTasksManager->unk_30); + *a2 = sub_020222EC(r0, sObjCharTransferTasksManager->unk_38); if (*a2 == -1) { GF_ASSERT(FALSE); return FALSE; } - *a2 = sub_020224B8(*a2, _021D21F4->unk_30); + *a2 = sub_020224B8(*a2, sObjCharTransferTasksManager->unk_30); } return TRUE; } -void sub_02021E90(UnkStruct_021D21F4_sub *a0, u32 a1, u32 a2) { +void sub_02021E90(ObjCharTransferTask *a0, u32 a1, u32 a2) { if (a0->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { - a0->baseAddrMain = a1 + _021D21F4->unk_1C; + a0->baseAddrMain = a1 + sObjCharTransferTasksManager->unk_1C; } if (a0->vram & NNS_G2D_VRAM_TYPE_2DSUB) { - a0->baseAddrSub = a2 + _021D21F4->unk_20; + a0->baseAddrSub = a2 + sObjCharTransferTasksManager->unk_20; } } -void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 a1, u32 a2, u32 a3, u32 a4) { +void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 sizeMain, u32 sizeSub) { if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { - u32 r7 = sub_020224A8(a3, _021D21F4->unk_2C); - u32 r0 = sub_020224A8(a1, _021D21F4->unk_2C); - sub_02022290(r0, r7, _021D21F4->unk_34); + u32 r7 = sub_020224A8(sizeMain, sObjCharTransferTasksManager->unk_2C); + u32 r0 = sub_020224A8(offsetMain, sObjCharTransferTasksManager->unk_2C); + sub_02022290(r0, r7, sObjCharTransferTasksManager->unk_34); } if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { - u32 r7 = sub_020224A8(a4, _021D21F4->unk_30); - u32 r0 = sub_020224A8(a2, _021D21F4->unk_30); - sub_02022290(r0, r7, _021D21F4->unk_38); + u32 r7 = sub_020224A8(sizeSub, sObjCharTransferTasksManager->unk_30); + u32 r0 = sub_020224A8(offsetSub, sObjCharTransferTasksManager->unk_30); + sub_02022290(r0, r7, sObjCharTransferTasksManager->unk_38); } } -void sub_02021F28(UnkStruct_021D21F4_sub *a0) { +void sub_02021F28(ObjCharTransferTask *a0) { NNS_G2dInitImageProxy(&a0->imageProxy); if (a0->vram != NNS_G2D_VRAM_TYPE_BOTH) { sub_02021F54(a0, a0->vram); @@ -541,8 +541,8 @@ void sub_02021F28(UnkStruct_021D21F4_sub *a0) { } } -void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram) { - int mappingType = a0->unk_40 ? sub_02021DA8(a0, vram) : vram; +void sub_02021F54(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram) { + int mappingType = a0->unk_40 ? ObjCharTransferTask_SetMappingTypeFromHW(a0, vram) : vram; u32 baseAddr; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { baseAddr = a0->baseAddrMain; @@ -563,7 +563,7 @@ void sub_02021F54(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram) { } } -void sub_02021FB0(UnkStruct_021D21F4_sub *a0) { +void sub_02021FB0(ObjCharTransferTask *a0) { NNS_G2dInitImageProxy(&a0->imageProxy); if (a0->vram != NNS_G2D_VRAM_TYPE_BOTH) { sub_02021FDC(a0, a0->vram); @@ -573,8 +573,8 @@ void sub_02021FB0(UnkStruct_021D21F4_sub *a0) { } } -void sub_02021FDC(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram) { - int r0 = a0->unk_40 ? sub_02021DA8(a0, vram) : vram; +void sub_02021FDC(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram) { + int r0 = a0->unk_40 ? ObjCharTransferTask_SetMappingTypeFromHW(a0, vram) : vram; u32 baseAddr; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { baseAddr = a0->baseAddrMain; @@ -591,10 +591,10 @@ void sub_02021FDC(UnkStruct_021D21F4_sub *a0, NNS_G2D_VRAM_TYPE vram) { } } -UnkStruct_021D21F4_sub *sub_02022024(void) { - for (int i = 0; i < _021D21F4->max; ++i) { - if (_021D21F4->unk_00[i].unk_3C == 0) { - return &_021D21F4->unk_00[i]; +ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void) { + for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { + if (sObjCharTransferTasksManager->tasks[i].unk_3C == 0) { + return &sObjCharTransferTasksManager->tasks[i]; } } @@ -604,100 +604,100 @@ UnkStruct_021D21F4_sub *sub_02022024(void) { void sub_02022060(void) { switch (GX_GetBankForOBJ()) { case GX_VRAM_OBJ_NONE: - _021D21F4->unk_14 = 0; + sObjCharTransferTasksManager->unk_14 = 0; break; case GX_VRAM_OBJ_16_F: case GX_VRAM_OBJ_16_G: - _021D21F4->unk_14 = 16 * 1024; + sObjCharTransferTasksManager->unk_14 = 16 * 1024; break; case GX_VRAM_OBJ_32_FG: - _021D21F4->unk_14 = 32 * 1024; + sObjCharTransferTasksManager->unk_14 = 32 * 1024; break; case GX_VRAM_OBJ_64_E: - _021D21F4->unk_14 = 64 * 1024; + sObjCharTransferTasksManager->unk_14 = 64 * 1024; break; case GX_VRAM_OBJ_80_EF: case GX_VRAM_OBJ_80_EG: - _021D21F4->unk_14 = 80 * 1024; + sObjCharTransferTasksManager->unk_14 = 80 * 1024; break; case GX_VRAM_OBJ_96_EFG: - _021D21F4->unk_14 = 96 * 1024; + sObjCharTransferTasksManager->unk_14 = 96 * 1024; break; case GX_VRAM_OBJ_128_A: case GX_VRAM_OBJ_128_B: - _021D21F4->unk_14 = 128 * 1024; + sObjCharTransferTasksManager->unk_14 = 128 * 1024; break; case GX_VRAM_OBJ_256_AB: - _021D21F4->unk_14 = 256 * 1024; + sObjCharTransferTasksManager->unk_14 = 256 * 1024; break; default: - _021D21F4->unk_14 = 0; + sObjCharTransferTasksManager->unk_14 = 0; break; } switch (GX_GetBankForSubOBJ()) { case GX_VRAM_SUB_OBJ_NONE: - _021D21F4->unk_18 = 0; + sObjCharTransferTasksManager->unk_18 = 0; break; case GX_VRAM_SUB_OBJ_16_I: - _021D21F4->unk_18 = 16 * 1024; + sObjCharTransferTasksManager->unk_18 = 16 * 1024; break; case GX_VRAM_SUB_OBJ_128_D: - _021D21F4->unk_18 = 128 * 1024; + sObjCharTransferTasksManager->unk_18 = 128 * 1024; break; default: - _021D21F4->unk_18 = 0; + sObjCharTransferTasksManager->unk_18 = 0; break; } - int r0 = sub_020224B8(_021D21F4->unk_24, _021D21F4->unk_2C); - _021D21F4->unk_1C = _021D21F4->unk_14 - r0; - r0 = sub_020224B8(_021D21F4->unk_28, _021D21F4->unk_30); - _021D21F4->unk_20 = _021D21F4->unk_18 - r0; - GF_ASSERT(_021D21F4->unk_1C >= 0 && _021D21F4->unk_20 >= 0); - GF_ASSERT(_021D21F4->unk_1C >= 0 && _021D21F4->unk_20 >= 0); // they wanted to be doubly sure + int r0 = sub_020224B8(sObjCharTransferTasksManager->unk_24, sObjCharTransferTasksManager->unk_2C); + sObjCharTransferTasksManager->unk_1C = sObjCharTransferTasksManager->unk_14 - r0; + r0 = sub_020224B8(sObjCharTransferTasksManager->unk_28, sObjCharTransferTasksManager->unk_30); + sObjCharTransferTasksManager->unk_20 = sObjCharTransferTasksManager->unk_18 - r0; + GF_ASSERT(sObjCharTransferTasksManager->unk_1C >= 0 && sObjCharTransferTasksManager->unk_20 >= 0); + GF_ASSERT(sObjCharTransferTasksManager->unk_1C >= 0 && sObjCharTransferTasksManager->unk_20 >= 0); // they wanted to be doubly sure } void sub_020221B4(void) { - sub_02022278(_021D21F4->unk_34); - sub_02022278(_021D21F4->unk_38); + sub_02022278(sObjCharTransferTasksManager->unk_34); + sub_02022278(sObjCharTransferTasksManager->unk_38); } void sub_020221D0(u32 a0, u32 a1, HeapID heapID) { - _021D21F4->unk_24 = a0; - _021D21F4->unk_28 = a1; - if (_021D21F4->unk_34 != NULL) { - FreeToHeap(_021D21F4->unk_34); + sObjCharTransferTasksManager->unk_24 = a0; + sObjCharTransferTasksManager->unk_28 = a1; + if (sObjCharTransferTasksManager->unk_34 != NULL) { + FreeToHeap(sObjCharTransferTasksManager->unk_34); } - if (_021D21F4->unk_38 != NULL) { - FreeToHeap(_021D21F4->unk_38); + if (sObjCharTransferTasksManager->unk_38 != NULL) { + FreeToHeap(sObjCharTransferTasksManager->unk_38); } - if (_021D21F4->unk_24 != 0) { - _021D21F4->unk_34 = AllocFromHeap(heapID, a0 / 8); + if (sObjCharTransferTasksManager->unk_24 != 0) { + sObjCharTransferTasksManager->unk_34 = AllocFromHeap(heapID, a0 / 8); } - if (_021D21F4->unk_28 != 0) { - _021D21F4->unk_38 = AllocFromHeap(heapID, a1 / 8); + if (sObjCharTransferTasksManager->unk_28 != 0) { + sObjCharTransferTasksManager->unk_38 = AllocFromHeap(heapID, a1 / 8); } sub_020221B4(); } void sub_02022238(u8 *a0) { if (a0 != NULL) { - if (a0 == _021D21F4->unk_34) { - _021D21F4->unk_24 = 0; + if (a0 == sObjCharTransferTasksManager->unk_34) { + sObjCharTransferTasksManager->unk_24 = 0; FreeToHeap(a0); } else { - _021D21F4->unk_28 = 0; + sObjCharTransferTasksManager->unk_28 = 0; FreeToHeap(a0); } } } u32 sub_02022260(u8 *a0) { - if (a0 == _021D21F4->unk_34) { - return _021D21F4->unk_24; + if (a0 == sObjCharTransferTasksManager->unk_34) { + return sObjCharTransferTasksManager->unk_24; } else { - return _021D21F4->unk_28; + return sObjCharTransferTasksManager->unk_28; } } @@ -766,18 +766,18 @@ void sub_02022374(u32 a0, u32 a1, u8 *a2) { } } -void sub_020223C4(UnkStruct_021D21F4_sub *a0) { +void sub_020223C4(ObjCharTransferTask *a0) { if (a0->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { u32 loc = NNS_G2dGetImageLocation(&a0->imageProxy, NNS_G2D_VRAM_TYPE_2DMAIN); - u32 r5 = sub_020224A8(loc - _021D21F4->unk_1C, _021D21F4->unk_2C); - u32 r1 = sub_020224A8(a0->unk_4C, _021D21F4->unk_2C); - sub_02022374(r5, r1, _021D21F4->unk_34); + u32 r5 = sub_020224A8(loc - sObjCharTransferTasksManager->unk_1C, sObjCharTransferTasksManager->unk_2C); + u32 r1 = sub_020224A8(a0->sizeMain, sObjCharTransferTasksManager->unk_2C); + sub_02022374(r5, r1, sObjCharTransferTasksManager->unk_34); } if (a0->vram & NNS_G2D_VRAM_TYPE_2DSUB) { u32 loc = NNS_G2dGetImageLocation(&a0->imageProxy, NNS_G2D_VRAM_TYPE_2DSUB); - u32 r5 = sub_020224A8(loc - _021D21F4->unk_20, _021D21F4->unk_30); - u32 r1 = sub_020224A8(a0->unk_50, _021D21F4->unk_30); - sub_02022374(r5, r1, _021D21F4->unk_38); + u32 r5 = sub_020224A8(loc - sObjCharTransferTasksManager->unk_20, sObjCharTransferTasksManager->unk_30); + u32 r1 = sub_020224A8(a0->sizeSub, sObjCharTransferTasksManager->unk_30); + sub_02022374(r5, r1, sObjCharTransferTasksManager->unk_38); } a0->unk_48 = 0; } @@ -816,35 +816,35 @@ int sub_020224B8(int a0, int a1) { return a0 * a1 * 32; } -BOOL sub_020224C0(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub) { +BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub) { BOOL result = TRUE; if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { - if (_021D21F4->offsetMain + size > _021D21F4->unk_1C) { + if (sObjCharTransferTasksManager->offsetMain + size > sObjCharTransferTasksManager->unk_1C) { GF_ASSERT(FALSE); result = FALSE; } else { - *pOffsetMain = _021D21F4->offsetMain; + *pOffsetMain = sObjCharTransferTasksManager->offsetMain; } } if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { - if (_021D21F4->offsetSub + size > _021D21F4->unk_20) { + if (sObjCharTransferTasksManager->offsetSub + size > sObjCharTransferTasksManager->unk_20) { GF_ASSERT(FALSE); result = FALSE; } else { - *pOffsetSub = _021D21F4->offsetSub; + *pOffsetSub = sObjCharTransferTasksManager->offsetSub; } } return result; } -void sub_02022510(u32 size, NNS_G2D_VRAM_TYPE vram) { +void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram) { if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { - _021D21F4->offsetMain += size; - _021D21F4->offsetMain = sub_02022488(_021D21F4->offsetMain, _021D21F4->unk_2C, 1); + sObjCharTransferTasksManager->offsetMain += size; + sObjCharTransferTasksManager->offsetMain = sub_02022488(sObjCharTransferTasksManager->offsetMain, sObjCharTransferTasksManager->unk_2C, 1); } if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { - _021D21F4->offsetSub += size; - _021D21F4->offsetSub = sub_02022488(_021D21F4->offsetSub, _021D21F4->unk_30, 1); + sObjCharTransferTasksManager->offsetSub += size; + sObjCharTransferTasksManager->offsetSub = sub_02022488(sObjCharTransferTasksManager->offsetSub, sObjCharTransferTasksManager->unk_30, 1); } } @@ -853,12 +853,12 @@ void sub_02022560(int a0, u32 *a1, u8 *a2) { *a2 = a0 & 7; } -void sub_0202256C(u32 a0, u32 a1, u32 a2, int *a3, int *a4) { - *a3 = a1 - a0; - if (*a3 < 0) { - *a4 = a2 + *a3; - *a3 = 0; +void sub_0202256C(u32 baseOffset, u32 curOffset, u32 size, int *distance, int *a4) { + *distance = curOffset - baseOffset; + if (*distance < 0) { + *a4 = size + *distance; + *distance = 0; } else { - *a4 = a2; + *a4 = size; } } From e87b1260328ca81a8c8fabac14e1cfdbfe27f158 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 14 Apr 2024 12:42:55 -0400 Subject: [PATCH 08/17] documentation --- include/credits/data.h | 3 +- include/unk_0200CF18.h | 6 +- include/unk_020215A0.h | 14 +- src/battle_arcade_game_board.c | 4 +- src/certificates_app.c | 8 +- src/choose_starter_app.c | 2 +- src/credits/credits.c | 2 +- src/intro_movie.c | 2 +- src/options_app.c | 6 +- src/unk_0200ACF0.c | 72 ++--- src/unk_0200CF18.c | 12 +- src/unk_020215A0.c | 497 ++++++++++++++++---------------- src/voltorb_flip/voltorb_flip.c | 2 +- 13 files changed, 316 insertions(+), 314 deletions(-) diff --git a/include/credits/data.h b/include/credits/data.h index b89e08bf33..6c085a1fad 100644 --- a/include/credits/data.h +++ b/include/credits/data.h @@ -3,6 +3,7 @@ #include "global.h" #include "gf_gfx_planes.h" +#include "unk_020215A0.h" #include "bg_window.h" #include "credits/credits.h" @@ -55,7 +56,7 @@ static const WindowTemplate ov76_021E6E98 = { .baseTile = 0x0001, }; -static const UnkStruct_020215A0 ov76_021E6EA0 = { 0x28, 0, 0, HEAP_ID_CREDITS }; +static const ObjCharTransferTemplate ov76_021E6EA0 = { 0x28, 0, 0, HEAP_ID_CREDITS }; static const GraphicsModes ov76_021E6EB0 = { .dispMode = GX_DISPMODE_GRAPHICS, diff --git a/include/unk_0200CF18.h b/include/unk_0200CF18.h index 7fec9286c2..c675f1b0de 100644 --- a/include/unk_0200CF18.h +++ b/include/unk_0200CF18.h @@ -65,9 +65,9 @@ typedef struct Unk122_021E92FC { } Unk122_021E92FC; typedef struct Unk122_021E92D0 { - int unk0; - int unk4; - int unk8; + int maxTasks; + int sizeMain; + int sizeSub; GXOBJVRamModeChar charModeMain; GXOBJVRamModeChar charModeSub; } Unk122_021E92D0; diff --git a/include/unk_020215A0.h b/include/unk_020215A0.h index fec100312c..b136f09e42 100644 --- a/include/unk_020215A0.h +++ b/include/unk_020215A0.h @@ -4,12 +4,12 @@ #include "heap.h" #include -typedef struct UnkStruct_020215A0 { - int unk_00; - u32 unk_04; - u32 unk_08; +typedef struct ObjCharTransferTemplate { + int maxTasks; + u32 sizeMain; + u32 sizeSub; HeapID heapId; -} UnkStruct_020215A0; +} ObjCharTransferTemplate; typedef struct UnkStruct_02021758 { NNSG2dCharacterData *charData; @@ -27,8 +27,8 @@ typedef struct UnkStruct_02021AC8 { typedef struct ObjCharTransferTasksManager ObjCharTransferTasksManager; -void ObjCharTransfer_Init(UnkStruct_020215A0 *template); -void ObjCharTransfer_InitEx(UnkStruct_020215A0 *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub); +void ObjCharTransfer_Init(ObjCharTransferTemplate *template); +void ObjCharTransfer_InitEx(ObjCharTransferTemplate *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub); void ObjCharTransfer_Destroy(void); void sub_020216C8(void); void sub_020216F4(u32 a0, u32 a1, NNS_G2D_VRAM_TYPE vram); diff --git a/src/battle_arcade_game_board.c b/src/battle_arcade_game_board.c index bfbc2016f4..048d5136df 100644 --- a/src/battle_arcade_game_board.c +++ b/src/battle_arcade_game_board.c @@ -1296,10 +1296,10 @@ static void ov84_0223F418(GAME_BOARD_SUB_3E8 *work) { sub_02022608(); } -extern UnkStruct_020215A0 ov84_0223F9E8; +extern ObjCharTransferTemplate ov84_0223F9E8; static void ov84_0223F480(void) { - UnkStruct_020215A0 var = ov84_0223F9E8; + ObjCharTransferTemplate var = ov84_0223F9E8; ObjCharTransfer_InitEx(&var, GX_OBJVRAMMODE_CHAR_1D_32K, GX_OBJVRAMMODE_CHAR_1D_32K); sub_02022588(14, HEAP_ID_GAME_BOARD); sub_020216C8(); diff --git a/src/certificates_app.c b/src/certificates_app.c index 082ebc2584..52640dc4bb 100644 --- a/src/certificates_app.c +++ b/src/certificates_app.c @@ -57,9 +57,9 @@ static const GraphicsModes ov78_021E67E0 = { }; static const Unk122_021E92D0 ov78_021E67F0 = { - .unk0 = 0, - .unk4 = 0x20000, - .unk8 = 0x4000, + .maxTasks = 0, + .sizeMain = 0x20000, + .sizeSub = 0x4000, .charModeMain = GX_OBJVRAMMODE_CHAR_1D_32K, .charModeSub = GX_OBJVRAMMODE_CHAR_1D_32K, }; @@ -592,7 +592,7 @@ static void CertificatesApp_SetupSpriteRenderer(CertificatesApp_Data *data) { Unk122_021E92FC unkTemplate1 = ov78_021E6838; Unk122_021E92D0 unkTemplate2 = ov78_021E67F0; - unkTemplate2.unk0 = 0x20; + unkTemplate2.maxTasks = 0x20; sub_0200CF70(data->spriteRenderer, &unkTemplate1, &unkTemplate2, 0x20); sub_0200CFF4(data->spriteRenderer, data->spriteGfxHandler, 0x20); diff --git a/src/choose_starter_app.c b/src/choose_starter_app.c index 92ba415eea..0a7618ff13 100644 --- a/src/choose_starter_app.c +++ b/src/choose_starter_app.c @@ -609,7 +609,7 @@ static void createOamManager(HeapID heapId) { NNS_G2dInitOamManagerModule(); OamManager_Create(0, 0x80, 0, 0x20, 0, 0x80, 0, 0x20, heapId); { - struct UnkStruct_020215A0 baseTrans = { + ObjCharTransferTemplate baseTrans = { 3, 0, 0x2800, diff --git a/src/credits/credits.c b/src/credits/credits.c index 552ab03c0e..88d47346bd 100644 --- a/src/credits/credits.c +++ b/src/credits/credits.c @@ -463,7 +463,7 @@ static void LoadBgGraphics(CreditsAppWork *work) { } static void CreateOamAndObjResMgrs(CreditsAppWork *work) { - UnkStruct_020215A0 temp; + ObjCharTransferTemplate temp; UnkOv021E60F6 temp2; GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_128K); diff --git a/src/intro_movie.c b/src/intro_movie.c index bdf91748bb..f7f356dfc3 100644 --- a/src/intro_movie.c +++ b/src/intro_movie.c @@ -185,7 +185,7 @@ static void IntroMovie_InitSpriteGraphicsHW(IntroMovieOverlayData *data) { GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K); GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K); - UnkStruct_020215A0 sp14 = {10, 0, 0, HEAP_ID_INTRO_MOVIE}; + ObjCharTransferTemplate sp14 = {10, 0, 0, HEAP_ID_INTRO_MOVIE}; ObjCharTransfer_Init(&sp14); sub_02022588(10, HEAP_ID_INTRO_MOVIE); sub_020216C8(); diff --git a/src/options_app.c b/src/options_app.c index 38ba31aead..7a198b369a 100644 --- a/src/options_app.c +++ b/src/options_app.c @@ -1192,9 +1192,9 @@ static void OptionsApp_SetupSpriteRenderer(OptionsApp_Data *data) { .unk1C = 0x20, }; const Unk122_021E92D0 unk2 = { - .unk0 = 9, - .unk4 = 0x400, - .unk8 = 0x400, + .maxTasks = 9, + .sizeMain = 0x400, + .sizeSub = 0x400, .charModeMain = GX_OBJVRAMMODE_CHAR_1D_32K, .charModeSub = GX_OBJVRAMMODE_CHAR_1D_32K, }; diff --git a/src/unk_0200ACF0.c b/src/unk_0200ACF0.c index 67e5ecabaf..6a599bbfa9 100644 --- a/src/unk_0200ACF0.c +++ b/src/unk_0200ACF0.c @@ -7,12 +7,12 @@ BOOL sub_0200ACF0(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - ObjCharTransferTaskTemplate sp00; - sp00.charData = GF2DGfxResObj_GetCharDataPtr(obj); - sp00.vram = GF2DGfxResObj_GetLoadAddress(obj); - sp00.id = GF2DGfxResObj_GetResID(obj); - sp00.unk_0C = FALSE; - return sub_02021758(&sp00); + ObjCharTransferTaskTemplate template; + template.charData = GF2DGfxResObj_GetCharDataPtr(obj); + template.vram = GF2DGfxResObj_GetLoadAddress(obj); + template.id = GF2DGfxResObj_GetResID(obj); + template.unk_0C = FALSE; + return sub_02021758(&template); } void sub_0200AD30(GF_2DGfxResObjList *charResObjList) { @@ -28,24 +28,24 @@ BOOL sub_0200AD64(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - ObjCharTransferTaskTemplate sp00; - sp00.charData = GF2DGfxResObj_GetCharDataPtr(obj); - sp00.vram = GF2DGfxResObj_GetLoadAddress(obj); - sp00.id = GF2DGfxResObj_GetResID(obj); - sp00.unk_0C = FALSE; - return sub_020217B0(&sp00); + ObjCharTransferTaskTemplate template; + template.charData = GF2DGfxResObj_GetCharDataPtr(obj); + template.vram = GF2DGfxResObj_GetLoadAddress(obj); + template.id = GF2DGfxResObj_GetResID(obj); + template.unk_0C = FALSE; + return sub_020217B0(&template); } BOOL sub_0200ADA4(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - ObjCharTransferTaskTemplate sp00; - sp00.charData = GF2DGfxResObj_GetCharDataPtr(obj); - sp00.vram = GF2DGfxResObj_GetLoadAddress(obj); - sp00.id = GF2DGfxResObj_GetResID(obj); - sp00.unk_0C = TRUE; - return sub_02021758(&sp00); + ObjCharTransferTaskTemplate template; + template.charData = GF2DGfxResObj_GetCharDataPtr(obj); + template.vram = GF2DGfxResObj_GetLoadAddress(obj); + template.id = GF2DGfxResObj_GetResID(obj); + template.unk_0C = TRUE; + return sub_02021758(&template); } void sub_0200ADE4(GF_2DGfxResObjList *charResObjList) { @@ -61,12 +61,12 @@ BOOL sub_0200AE18(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - ObjCharTransferTaskTemplate sp00; - sp00.charData = GF2DGfxResObj_GetCharDataPtr(obj); - sp00.vram = GF2DGfxResObj_GetLoadAddress(obj); - sp00.id = GF2DGfxResObj_GetResID(obj); - sp00.unk_0C = TRUE; - return sub_020217B0(&sp00); + ObjCharTransferTaskTemplate template; + template.charData = GF2DGfxResObj_GetCharDataPtr(obj); + template.vram = GF2DGfxResObj_GetLoadAddress(obj); + template.id = GF2DGfxResObj_GetResID(obj); + template.unk_0C = TRUE; + return sub_020217B0(&template); } void sub_0200AE58(GF_2DGfxResObjList *charResObjList) { @@ -135,12 +135,12 @@ BOOL sub_0200AF94(GF_2DGfxResObj *plttResObj) { GF_ASSERT(plttResObj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(plttResObj) == GF_GFX_RES_TYPE_PLTT); - UnkStruct_02022660 sp00; - sp00.plttData = GF2DGfxResObj_GetPlttDataPtr(plttResObj); - sp00.vram = GF2DGfxResObj_GetLoadAddress(plttResObj); - sp00.id = GF2DGfxResObj_GetResID(plttResObj); - sp00.plttNum = GF2DGfxResObj_GetPlttNum(plttResObj); - return sub_02022660(&sp00); + UnkStruct_02022660 template; + template.plttData = GF2DGfxResObj_GetPlttDataPtr(plttResObj); + template.vram = GF2DGfxResObj_GetLoadAddress(plttResObj); + template.id = GF2DGfxResObj_GetResID(plttResObj); + template.plttNum = GF2DGfxResObj_GetPlttNum(plttResObj); + return sub_02022660(&template); } void sub_0200AFD8(GF_2DGfxResObjList *plttResObjList) { @@ -156,12 +156,12 @@ BOOL sub_0200B00C(GF_2DGfxResObj *plttResObj) { GF_ASSERT(plttResObj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(plttResObj) == GF_GFX_RES_TYPE_PLTT); - UnkStruct_02022660 sp00; - sp00.plttData = GF2DGfxResObj_GetPlttDataPtr(plttResObj); - sp00.vram = GF2DGfxResObj_GetLoadAddress(plttResObj); - sp00.id = GF2DGfxResObj_GetResID(plttResObj); - sp00.plttNum = GF2DGfxResObj_GetPlttNum(plttResObj); - return sub_020226A4(&sp00); + UnkStruct_02022660 template; + template.plttData = GF2DGfxResObj_GetPlttDataPtr(plttResObj); + template.vram = GF2DGfxResObj_GetLoadAddress(plttResObj); + template.id = GF2DGfxResObj_GetResID(plttResObj); + template.plttNum = GF2DGfxResObj_GetPlttNum(plttResObj); + return sub_020226A4(&template); } void sub_0200B050(GF_2DGfxResObjList *plttResObjList) { diff --git a/src/unk_0200CF18.c b/src/unk_0200CF18.c index f92d0d281c..f0ab34603f 100644 --- a/src/unk_0200CF18.c +++ b/src/unk_0200CF18.c @@ -60,12 +60,12 @@ BOOL sub_0200CF70(SpriteRenderer* renderer, const Unk122_021E92FC* a1, const Unk if (renderer == NULL) { return FALSE; } - struct UnkStruct_020215A0 sp14; - sp14.unk_00 = a2->unk0; - sp14.unk_04 = a2->unk4; - sp14.unk_08 = a2->unk8; - sp14.heapId = renderer->heapId; - ObjCharTransfer_InitEx(&sp14, a2->charModeMain, a2->charModeSub); + ObjCharTransferTemplate transferTemplate; + transferTemplate.maxTasks = a2->maxTasks; + transferTemplate.sizeMain = a2->sizeMain; + transferTemplate.sizeSub = a2->sizeSub; + transferTemplate.heapId = renderer->heapId; + ObjCharTransfer_InitEx(&transferTemplate, a2->charModeMain, a2->charModeSub); sub_02022588(a3, renderer->heapId); NNS_G2dInitOamManagerModule(); if (renderer->hasOamManager == TRUE) { diff --git a/src/unk_020215A0.c b/src/unk_020215A0.c index 5d71a1e537..84145bdbed 100644 --- a/src/unk_020215A0.c +++ b/src/unk_020215A0.c @@ -10,7 +10,7 @@ typedef struct ObjCharTransferTask { NNSG2dImageProxy imageProxy; u32 baseAddrMain; u32 baseAddrSub; - u8 unk_3C; + u8 state; int unk_40; BOOL unk_44; int unk_48; @@ -24,84 +24,84 @@ struct ObjCharTransferTasksManager { int num; int offsetMain; int offsetSub; - u32 unk_14; - u32 unk_18; - int unk_1C; - int unk_20; - int unk_24; - int unk_28; - u32 unk_2C; - u32 unk_30; - u8 *unk_34; - u8 *unk_38; + u32 vramCapacityMain; + u32 vramCapacitySub; + int freeSizeMain; + int freeSizeSub; + int numBlocksMain; + int numBlocksSub; + u32 blockSizeMain; + u32 blockSizeSub; + u8 *blockBufMain; + u8 *blockBufSub; } *sObjCharTransferTasksManager; BOOL ObjCharTransfer_TaskExistsByID(int resId); void sub_020218D4(void); -void ObjCharTransferTask_Reset(ObjCharTransferTask *a0); -BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *a0, ObjCharTransferTask *a1); -BOOL sub_02021C9C(ObjCharTransferTask *a0); +void ObjCharTransferTask_Reset(ObjCharTransferTask *task); +BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *template, ObjCharTransferTask *task); +BOOL sub_02021C9C(ObjCharTransferTask *task); ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy *proxyIn); -BOOL sub_02021CCC(ObjCharTransferTask *a0); -BOOL sub_02021D00(ObjCharTransferTask *a0); -void sub_02021D58(ObjCharTransferTask *a0); +BOOL sub_02021CCC(ObjCharTransferTask *task); +BOOL sub_02021D00(ObjCharTransferTask *task); +void sub_02021D58(ObjCharTransferTask *task); ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId); -GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram); -void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *a0, u32 offsetMain, u32 offsetSub); +GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); +void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub); BOOL sub_02021DE4(int vram, u32 *pOffsetMain, u32 *pOffsetSub, u32 size, u32 *a4, u32 *a5); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match -void sub_02021E90(ObjCharTransferTask *a0, u32 a1, u32 a2); +void sub_02021E90(ObjCharTransferTask *task, u32 a1, u32 a2); void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 a3, u32 a4); -void sub_02021F28(ObjCharTransferTask *a0); -void sub_02021F54(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram); -void sub_02021FB0(ObjCharTransferTask *a0); -void sub_02021FDC(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram); +void sub_02021F28(ObjCharTransferTask *task); +void sub_02021F54(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); +void sub_02021FB0(ObjCharTransferTask *task); +void sub_02021FDC(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void); -void sub_02022060(void); -void sub_020221D0(u32 a0, u32 a1, HeapID heapID); +void ObjCharTransfer_GetVramCapacityByBank(void); +void ObjCharTransfer_InitBlocksTransferBuffers(u32 numBlocksMain, u32 numBlocksSub, HeapID heapID); void sub_020221B4(void); -void sub_02022238(u8 *a0); -u32 sub_02022260(u8 *a0); -void sub_02022278(u8 *a0); +void ObjCharTransfer_FreeBlockTransferBuffer(u8 *a0); +u32 ObjCharTransfer_GetBlocksCountFromBufferPtr(u8 *buffer); +void ObjCharTransfer_ClearBlockBuf(u8 *buffer); void sub_02022290(u32 a0, u32 a1, u8 *a2); u32 sub_020222EC(u32 a0, u8 *a1); void sub_02022374(u32 a0, u32 a1, u8 *a2); -void sub_020223C4(ObjCharTransferTask *a0); +void sub_020223C4(ObjCharTransferTask *task); int sub_02022448(GXOBJVRamModeChar mode); int sub_02022488(int a0, int a1, int a2); -u32 sub_020224A8(int a0, int a1); -int sub_020224B8(int a0, int a1); +u32 ObjCharTransfer_CalcBlockNumLimit(int size, int blockSize); +int ObjCharTransfer_GetBlockMemOffset(int blockNum, int blockSize); BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub); void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram); -void sub_02022560(int a0, u32 *a1, u8 *a2); +void ObjCharTransfer_BitPositionToByteAndBitIndexPair(int arrayBitIndex, u32 *byteIndex, u8 *bitIndex); void sub_0202256C(u32 a0, u32 a1, u32 a2, int *a3, int *a4); -void ObjCharTransfer_Init(UnkStruct_020215A0 *template) { +void ObjCharTransfer_Init(ObjCharTransferTemplate *template) { ObjCharTransfer_InitEx(template, GX_GetOBJVRamModeChar(), GXS_GetOBJVRamModeChar()); } -void ObjCharTransfer_InitEx(UnkStruct_020215A0 *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub) { +void ObjCharTransfer_InitEx(ObjCharTransferTemplate *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub) { if (sObjCharTransferTasksManager == NULL) { sObjCharTransferTasksManager = AllocFromHeap(template->heapId, sizeof(struct ObjCharTransferTasksManager)); MI_CpuClear32(sObjCharTransferTasksManager, sizeof(struct ObjCharTransferTasksManager)); - sObjCharTransferTasksManager->max = template->unk_00; + sObjCharTransferTasksManager->max = template->maxTasks; sObjCharTransferTasksManager->tasks = (ObjCharTransferTask *)AllocFromHeap(template->heapId, sizeof(ObjCharTransferTask) * sObjCharTransferTasksManager->max); - for (int i = 0; i < template->unk_00; ++i) { + for (int i = 0; i < template->maxTasks; ++i) { ObjCharTransferTask_Reset(&sObjCharTransferTasksManager->tasks[i]); } - sObjCharTransferTasksManager->unk_2C = sub_02022448(modeMain); - sObjCharTransferTasksManager->unk_30 = sub_02022448(modeSub); + sObjCharTransferTasksManager->blockSizeMain = sub_02022448(modeMain); + sObjCharTransferTasksManager->blockSizeSub = sub_02022448(modeSub); GX_SetOBJVRamModeChar(modeMain); GXS_SetOBJVRamModeChar(modeSub); - int r4 = sub_020224A8(template->unk_04, sObjCharTransferTasksManager->unk_2C); - int r0 = sub_020224A8(template->unk_08, sObjCharTransferTasksManager->unk_30); - sub_020221D0(r4, r0, template->heapId); + int numBlocksMain = ObjCharTransfer_CalcBlockNumLimit(template->sizeMain, sObjCharTransferTasksManager->blockSizeMain); + int numBlocksSub = ObjCharTransfer_CalcBlockNumLimit(template->sizeSub, sObjCharTransferTasksManager->blockSizeSub); + ObjCharTransfer_InitBlocksTransferBuffers(numBlocksMain, numBlocksSub, template->heapId); } } void ObjCharTransfer_Destroy(void) { if (sObjCharTransferTasksManager != NULL) { - sub_02022238(sObjCharTransferTasksManager->unk_34); - sub_02022238(sObjCharTransferTasksManager->unk_38); + ObjCharTransfer_FreeBlockTransferBuffer(sObjCharTransferTasksManager->blockBufMain); + ObjCharTransfer_FreeBlockTransferBuffer(sObjCharTransferTasksManager->blockBufSub); sub_020218D4(); FreeToHeap(sObjCharTransferTasksManager->tasks); FreeToHeap(sObjCharTransferTasksManager); @@ -112,35 +112,35 @@ void ObjCharTransfer_Destroy(void) { void sub_020216C8(void) { sObjCharTransferTasksManager->offsetMain = 0; sObjCharTransferTasksManager->offsetSub = 0; - sub_02022278(sObjCharTransferTasksManager->unk_34); - sub_02022278(sObjCharTransferTasksManager->unk_38); - sub_02022060(); + ObjCharTransfer_ClearBlockBuf(sObjCharTransferTasksManager->blockBufMain); + ObjCharTransfer_ClearBlockBuf(sObjCharTransferTasksManager->blockBufSub); + ObjCharTransfer_GetVramCapacityByBank(); } void sub_020216F4(u32 offset, u32 size, NNS_G2D_VRAM_TYPE vram) { int newOffset; int sp4; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { - sub_0202256C(sObjCharTransferTasksManager->unk_1C, offset, size, &newOffset, &sp4); + sub_0202256C(sObjCharTransferTasksManager->freeSizeMain, offset, size, &newOffset, &sp4); if (sp4 > 0) { sub_02021EC0(NNS_G2D_VRAM_TYPE_2DMAIN, newOffset, 0, sp4, 0); } } else { - sub_0202256C(sObjCharTransferTasksManager->unk_20, offset, size, &newOffset, &sp4); + sub_0202256C(sObjCharTransferTasksManager->freeSizeSub, offset, size, &newOffset, &sp4); if (sp4 > 0) { sub_02021EC0(NNS_G2D_VRAM_TYPE_2DSUB, 0, newOffset, 0, sp4); } } } -BOOL sub_02021758(const ObjCharTransferTaskTemplate *a0) { - GF_ASSERT(ObjCharTransfer_TaskExistsByID(a0->id) != 1); +BOOL sub_02021758(const ObjCharTransferTaskTemplate *template) { + GF_ASSERT(ObjCharTransfer_TaskExistsByID(template->id) != TRUE); ObjCharTransferTask *sub = ObjCharTransfer_GetFreeTask(); if (sub == NULL) { GF_ASSERT(FALSE); return FALSE; } - if (!ObjCharTransferTask_InitFromTemplate(a0, sub)) { + if (!ObjCharTransferTask_InitFromTemplate(template, sub)) { return FALSE; } if (!sub_02021C9C(sub)) { @@ -151,14 +151,14 @@ BOOL sub_02021758(const ObjCharTransferTaskTemplate *a0) { return TRUE; } -BOOL sub_020217B0(const ObjCharTransferTaskTemplate *a0) { - GF_ASSERT(ObjCharTransfer_TaskExistsByID(a0->id) != 1); +BOOL sub_020217B0(const ObjCharTransferTaskTemplate *template) { + GF_ASSERT(ObjCharTransfer_TaskExistsByID(template->id) != TRUE); ObjCharTransferTask *sub = ObjCharTransfer_GetFreeTask(); if (sub == NULL) { GF_ASSERT(FALSE); return FALSE; } - if (!ObjCharTransferTask_InitFromTemplate(a0, sub)) { + if (!ObjCharTransferTask_InitFromTemplate(template, sub)) { return FALSE; } sub->unk_40 = 1; @@ -199,13 +199,13 @@ void sub_02021884(int resId) { do { sub = ObjCharTransfer_GetTaskByID(resId); GF_ASSERT(sub != NULL); - if (sub->unk_3C == 4) { + if (sub->state == 4) { sub_02021A50(&sub->imageProxy); } else { r5 = FALSE; } } while (r5); - if (sub->unk_3C != 0) { + if (sub->state != 0) { sub_02021D58(sub); --sObjCharTransferTasksManager->num; } @@ -213,7 +213,7 @@ void sub_02021884(int resId) { void sub_020218D4(void) { for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { - if (sObjCharTransferTasksManager->tasks[i].unk_3C != 0) { + if (sObjCharTransferTasksManager->tasks[i].state != 0) { sub_02021D58(&sObjCharTransferTasksManager->tasks[i]); --sObjCharTransferTasksManager->num; } @@ -223,7 +223,7 @@ void sub_020218D4(void) { NNSG2dImageProxy *sub_02021910(int resId) { ObjCharTransferTask *sub = ObjCharTransfer_GetTaskByID(resId); GF_ASSERT(sub != NULL); - if (sub->unk_3C == 0) { + if (sub->state == 0) { return NULL; } @@ -233,7 +233,7 @@ NNSG2dImageProxy *sub_02021910(int resId) { NNSG2dImageProxy *sub_02021934(int resId, u32 size) { ObjCharTransferTask *sub = ObjCharTransfer_GetTaskByID(resId); GF_ASSERT(sub != NULL); - if (sub->unk_3C == 0) { + if (sub->state == 0) { return NULL; } u32 offsetMain; @@ -241,10 +241,10 @@ NNSG2dImageProxy *sub_02021934(int resId, u32 size) { u32 spC; u32 sp8; sub_02021DE4(sub->vram, &offsetMain, &offsetSub, size, &spC, &sp8); - if (sub->unk_3C == 3) { + if (sub->state == 3) { return NULL; } - sub->unk_3C = 3; + sub->state = 3; sub_02021E90(sub, offsetMain, offsetSub); sub->unk_48 = 1; sub->sizeMain = spC; @@ -268,11 +268,11 @@ NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { GF_ASSERT(task != NULL); copiedTask = ObjCharTransfer_GetFreeTask(); GF_ASSERT(copiedTask != NULL); - if (task->unk_3C != 3) { + if (task->state != 3) { return NULL; } *copiedTask = *task; - copiedTask->unk_3C = 4; + copiedTask->state = 4; if (copiedTask->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { size = copiedTask->sizeMain; } else { @@ -293,16 +293,16 @@ NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { void sub_02021A50(const NNSG2dImageProxy *proxy) { int i; for (i = 0; i < sObjCharTransferTasksManager->max; ++i) { - if ((sObjCharTransferTasksManager->tasks[i].unk_3C == 3 || sObjCharTransferTasksManager->tasks[i].unk_3C == 4) && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxy) { + if ((sObjCharTransferTasksManager->tasks[i].state == 3 || sObjCharTransferTasksManager->tasks[i].state == 4) && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxy) { break; } } if (i < sObjCharTransferTasksManager->max) { sub_020223C4(&sObjCharTransferTasksManager->tasks[i]); - if (sObjCharTransferTasksManager->tasks[i].unk_3C == 3) { - sObjCharTransferTasksManager->tasks[i].unk_3C = 2; + if (sObjCharTransferTasksManager->tasks[i].state == 3) { + sObjCharTransferTasksManager->tasks[i].state = 2; } else { - sObjCharTransferTasksManager->tasks[i].unk_3C = 0; + sObjCharTransferTasksManager->tasks[i].state = 0; ObjCharTransferTask_Reset(&sObjCharTransferTasksManager->tasks[i]); } } @@ -331,10 +331,10 @@ BOOL sub_02021AC8(u32 size, BOOL a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 a3->vram = vram; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { a3->size = sizeMain; - a3->offset = offsetMain + sObjCharTransferTasksManager->unk_1C; + a3->offset = offsetMain + sObjCharTransferTasksManager->freeSizeMain; } else { a3->size = sizeSub; - a3->offset = offsetSub + sObjCharTransferTasksManager->unk_20; + a3->offset = offsetSub + sObjCharTransferTasksManager->freeSizeSub; } a3->unk_0A = 1; } @@ -344,15 +344,15 @@ BOOL sub_02021AC8(u32 size, BOOL a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 void sub_02021B5C(UnkStruct_02021AC8 *a0) { if (a0->unk_0A != 0) { - if (a0->vram & 1) { - u32 r5 = sub_020224A8(a0->size, sObjCharTransferTasksManager->unk_2C); - u32 r0 = sub_020224A8(a0->offset - sObjCharTransferTasksManager->unk_1C, sObjCharTransferTasksManager->unk_2C); - sub_02022374(r0, r5, sObjCharTransferTasksManager->unk_34); + if (a0->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(a0->size, sObjCharTransferTasksManager->blockSizeMain); + u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(a0->offset - sObjCharTransferTasksManager->freeSizeMain, sObjCharTransferTasksManager->blockSizeMain); + sub_02022374(blockCur, blockMax, sObjCharTransferTasksManager->blockBufMain); } - if (a0->vram & 2) { - u32 r5 = sub_020224A8(a0->size, sObjCharTransferTasksManager->unk_30); - u32 r0 = sub_020224A8(a0->offset - sObjCharTransferTasksManager->unk_20, sObjCharTransferTasksManager->unk_30); - sub_02022374(r0, r5, sObjCharTransferTasksManager->unk_38); + if (a0->vram & NNS_G2D_VRAM_TYPE_2DSUB) { + u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(a0->size, sObjCharTransferTasksManager->blockSizeSub); + u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(a0->offset - sObjCharTransferTasksManager->freeSizeSub, sObjCharTransferTasksManager->blockSizeSub); + sub_02022374(blockCur, blockMax, sObjCharTransferTasksManager->blockBufSub); } } } @@ -369,16 +369,16 @@ void sub_02021BEC(ObjCharTransferTasksManager *a0) { sObjCharTransferTasksManager = a0; } -void ObjCharTransferTask_Reset(ObjCharTransferTask *a0) { - a0->charData = NULL; - a0->vram = NNS_G2D_VRAM_TYPE_NEITHER; - a0->isTransferred = FALSE; - a0->resId = -1; - a0->baseAddrMain = 0; - a0->baseAddrSub = 0; - a0->unk_3C = 0; - a0->unk_40 = 0; - NNS_G2dInitImageProxy(&a0->imageProxy); +void ObjCharTransferTask_Reset(ObjCharTransferTask *task) { + task->charData = NULL; + task->vram = NNS_G2D_VRAM_TYPE_NEITHER; + task->isTransferred = FALSE; + task->resId = -1; + task->baseAddrMain = 0; + task->baseAddrSub = 0; + task->state = 0; + task->unk_40 = 0; + NNS_G2dInitImageProxy(&task->imageProxy); } BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *template, ObjCharTransferTask *task) { @@ -397,7 +397,7 @@ ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy int i; for (i = 0; i < sObjCharTransferTasksManager->max; ++i) { - if (sObjCharTransferTasksManager->tasks[i].unk_3C != 0 && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxyIn) { + if (sObjCharTransferTasksManager->tasks[i].state != 0 && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxyIn) { break; } } @@ -408,54 +408,54 @@ ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy return &sObjCharTransferTasksManager->tasks[i]; } -BOOL sub_02021C9C(ObjCharTransferTask *a0) { +BOOL sub_02021C9C(ObjCharTransferTask *task) { BOOL ret = TRUE; - if (a0->isTransferred) { - a0->unk_3C = 2; + if (task->isTransferred) { + task->state = 2; } else { - a0->unk_3C = 1; - if (!a0->unk_44) { - ret = sub_02021CCC(a0); + task->state = 1; + if (!task->unk_44) { + ret = sub_02021CCC(task); } else { - ret = sub_02021D00(a0); + ret = sub_02021D00(task); } } return ret; } -BOOL sub_02021CCC(ObjCharTransferTask *a0) { +BOOL sub_02021CCC(ObjCharTransferTask *task) { u32 offsetMain; u32 offsetSub; - BOOL ret = ObjCharTransfer_TryGetDestVramOffsets(a0->charData->szByte, a0->vram, &offsetMain, &offsetSub); + BOOL ret = ObjCharTransfer_TryGetDestVramOffsets(task->charData->szByte, task->vram, &offsetMain, &offsetSub); if (ret) { - ObjCharTransferTask_SetBaseAddrs(a0, offsetMain, offsetSub); - ObjCharTransfer_ReserveVramSpace(a0->charData->szByte, a0->vram); + ObjCharTransferTask_SetBaseAddrs(task, offsetMain, offsetSub); + ObjCharTransfer_ReserveVramSpace(task->charData->szByte, task->vram); } return ret; } -BOOL sub_02021D00(ObjCharTransferTask *a0) { +BOOL sub_02021D00(ObjCharTransferTask *task) { u32 offsetMain; u32 offsetSub; u32 sizeMain; u32 sizeSub; - if (!sub_02021DE4(a0->vram, &offsetMain, &offsetSub, a0->charData->szByte, &sizeMain, &sizeSub)) { + if (!sub_02021DE4(task->vram, &offsetMain, &offsetSub, task->charData->szByte, &sizeMain, &sizeSub)) { return FALSE; } - sub_02021E90(a0, offsetMain, offsetSub); - a0->unk_48 = 1; - a0->sizeMain = sizeMain; - a0->sizeSub = sizeSub; - sub_02021F28(a0); - sub_02021EC0(a0->vram, offsetMain, offsetSub, sizeMain, sizeSub); + sub_02021E90(task, offsetMain, offsetSub); + task->unk_48 = 1; + task->sizeMain = sizeMain; + task->sizeSub = sizeSub; + sub_02021F28(task); + sub_02021EC0(task->vram, offsetMain, offsetSub, sizeMain, sizeSub); return TRUE; } -void sub_02021D58(ObjCharTransferTask *a0) { - if (a0->unk_48) { - sub_020223C4(a0); +void sub_02021D58(ObjCharTransferTask *task) { + if (task->unk_48) { + sub_020223C4(task); } - ObjCharTransferTask_Reset(a0); + ObjCharTransferTask_Reset(task); } ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId) { @@ -485,76 +485,76 @@ void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, } } -BOOL sub_02021DE4(int a0, u32 *a1, u32 *a2, u32 a3, u32 *a4, u32 *a5) { +BOOL sub_02021DE4(int a0, u32 *blockNumMain, u32 *blockNumSub, u32 a3, u32 *freeSpaceMain, u32 *freeSpaceSub) { if (a0 & NNS_G2D_VRAM_TYPE_2DMAIN) { - *a4 = sub_02022488(a3, sObjCharTransferTasksManager->unk_2C, 1); - u32 r0 = sub_020224A8(*a4, sObjCharTransferTasksManager->unk_2C); - *a1 = sub_020222EC(r0, sObjCharTransferTasksManager->unk_34); - if (*a1 == -1) { + *freeSpaceMain = sub_02022488(a3, sObjCharTransferTasksManager->blockSizeMain, 1); + u32 numBlocksUsed = ObjCharTransfer_CalcBlockNumLimit(*freeSpaceMain, sObjCharTransferTasksManager->blockSizeMain); + *blockNumMain = sub_020222EC(numBlocksUsed, sObjCharTransferTasksManager->blockBufMain); + if (*blockNumMain == -1) { GF_ASSERT(FALSE); return FALSE; } - *a1 = sub_020224B8(*a1, sObjCharTransferTasksManager->unk_2C); + *blockNumMain = ObjCharTransfer_GetBlockMemOffset(*blockNumMain, sObjCharTransferTasksManager->blockSizeMain); } if (a0 & NNS_G2D_VRAM_TYPE_2DSUB) { - *a5 = sub_02022488(a3, sObjCharTransferTasksManager->unk_30, 1); - u32 r0 = sub_020224A8(*a5, sObjCharTransferTasksManager->unk_30); - *a2 = sub_020222EC(r0, sObjCharTransferTasksManager->unk_38); - if (*a2 == -1) { + *freeSpaceSub = sub_02022488(a3, sObjCharTransferTasksManager->blockSizeSub, 1); + u32 numBlocksUsed = ObjCharTransfer_CalcBlockNumLimit(*freeSpaceSub, sObjCharTransferTasksManager->blockSizeSub); + *blockNumSub = sub_020222EC(numBlocksUsed, sObjCharTransferTasksManager->blockBufSub); + if (*blockNumSub == -1) { GF_ASSERT(FALSE); return FALSE; } - *a2 = sub_020224B8(*a2, sObjCharTransferTasksManager->unk_30); + *blockNumSub = ObjCharTransfer_GetBlockMemOffset(*blockNumSub, sObjCharTransferTasksManager->blockSizeSub); } return TRUE; } -void sub_02021E90(ObjCharTransferTask *a0, u32 a1, u32 a2) { - if (a0->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { - a0->baseAddrMain = a1 + sObjCharTransferTasksManager->unk_1C; +void sub_02021E90(ObjCharTransferTask *task, u32 a1, u32 a2) { + if (task->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + task->baseAddrMain = a1 + sObjCharTransferTasksManager->freeSizeMain; } - if (a0->vram & NNS_G2D_VRAM_TYPE_2DSUB) { - a0->baseAddrSub = a2 + sObjCharTransferTasksManager->unk_20; + if (task->vram & NNS_G2D_VRAM_TYPE_2DSUB) { + task->baseAddrSub = a2 + sObjCharTransferTasksManager->freeSizeSub; } } void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 sizeMain, u32 sizeSub) { if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { - u32 r7 = sub_020224A8(sizeMain, sObjCharTransferTasksManager->unk_2C); - u32 r0 = sub_020224A8(offsetMain, sObjCharTransferTasksManager->unk_2C); - sub_02022290(r0, r7, sObjCharTransferTasksManager->unk_34); + u32 r7 = ObjCharTransfer_CalcBlockNumLimit(sizeMain, sObjCharTransferTasksManager->blockSizeMain); + u32 r0 = ObjCharTransfer_CalcBlockNumLimit(offsetMain, sObjCharTransferTasksManager->blockSizeMain); + sub_02022290(r0, r7, sObjCharTransferTasksManager->blockBufMain); } if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { - u32 r7 = sub_020224A8(sizeSub, sObjCharTransferTasksManager->unk_30); - u32 r0 = sub_020224A8(offsetSub, sObjCharTransferTasksManager->unk_30); - sub_02022290(r0, r7, sObjCharTransferTasksManager->unk_38); + u32 r7 = ObjCharTransfer_CalcBlockNumLimit(sizeSub, sObjCharTransferTasksManager->blockSizeSub); + u32 r0 = ObjCharTransfer_CalcBlockNumLimit(offsetSub, sObjCharTransferTasksManager->blockSizeSub); + sub_02022290(r0, r7, sObjCharTransferTasksManager->blockBufSub); } } -void sub_02021F28(ObjCharTransferTask *a0) { - NNS_G2dInitImageProxy(&a0->imageProxy); - if (a0->vram != NNS_G2D_VRAM_TYPE_BOTH) { - sub_02021F54(a0, a0->vram); +void sub_02021F28(ObjCharTransferTask *task) { + NNS_G2dInitImageProxy(&task->imageProxy); + if (task->vram != NNS_G2D_VRAM_TYPE_BOTH) { + sub_02021F54(task, task->vram); } else { - sub_02021F54(a0, NNS_G2D_VRAM_TYPE_2DMAIN); - sub_02021F54(a0, NNS_G2D_VRAM_TYPE_2DSUB); + sub_02021F54(task, NNS_G2D_VRAM_TYPE_2DMAIN); + sub_02021F54(task, NNS_G2D_VRAM_TYPE_2DSUB); } } -void sub_02021F54(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram) { - int mappingType = a0->unk_40 ? ObjCharTransferTask_SetMappingTypeFromHW(a0, vram) : vram; +void sub_02021F54(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { + int mappingType = task->unk_40 ? ObjCharTransferTask_SetMappingTypeFromHW(task, vram) : vram; u32 baseAddr; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { - baseAddr = a0->baseAddrMain; + baseAddr = task->baseAddrMain; GX_GetOBJVRamModeChar(); } else { - baseAddr = a0->baseAddrSub; + baseAddr = task->baseAddrSub; GXS_GetOBJVRamModeChar(); } if (mappingType == 0) { - NNS_G2dLoadImage2DMapping(a0->charData, baseAddr, vram, &a0->imageProxy); + NNS_G2dLoadImage2DMapping(task->charData, baseAddr, vram, &task->imageProxy); } else { - NNS_G2dLoadImage1DMapping(a0->charData, baseAddr, vram, &a0->imageProxy); + NNS_G2dLoadImage1DMapping(task->charData, baseAddr, vram, &task->imageProxy); } if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { GX_GetOBJVRamModeChar(); @@ -563,27 +563,28 @@ void sub_02021F54(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram) { } } -void sub_02021FB0(ObjCharTransferTask *a0) { - NNS_G2dInitImageProxy(&a0->imageProxy); - if (a0->vram != NNS_G2D_VRAM_TYPE_BOTH) { - sub_02021FDC(a0, a0->vram); +void sub_02021FB0(ObjCharTransferTask *task) { + NNS_G2dInitImageProxy(&task->imageProxy); + if (task->vram != NNS_G2D_VRAM_TYPE_BOTH) { + sub_02021FDC(task, task->vram); } else { - sub_02021FDC(a0, NNS_G2D_VRAM_TYPE_2DMAIN); - sub_02021FDC(a0, NNS_G2D_VRAM_TYPE_2DSUB); + sub_02021FDC(task, NNS_G2D_VRAM_TYPE_2DMAIN); + sub_02021FDC(task, NNS_G2D_VRAM_TYPE_2DSUB); } } -void sub_02021FDC(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram) { - int r0 = a0->unk_40 ? ObjCharTransferTask_SetMappingTypeFromHW(a0, vram) : vram; +void sub_02021FDC(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { + int r0 = task->unk_40 ? ObjCharTransferTask_SetMappingTypeFromHW(task, vram) : vram; + #pragma unused(r0) u32 baseAddr; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { - baseAddr = a0->baseAddrMain; + baseAddr = task->baseAddrMain; GX_GetOBJVRamModeChar(); } else { - baseAddr = a0->baseAddrSub; + baseAddr = task->baseAddrSub; GXS_GetOBJVRamModeChar(); } - NNS_G2dLoadImageVramTransfer(a0->charData, baseAddr, vram, &a0->imageProxy); + NNS_G2dLoadImageVramTransfer(task->charData, baseAddr, vram, &task->imageProxy); if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { GX_GetOBJVRamModeChar(); } else { @@ -593,7 +594,7 @@ void sub_02021FDC(ObjCharTransferTask *a0, NNS_G2D_VRAM_TYPE vram) { ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void) { for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { - if (sObjCharTransferTasksManager->tasks[i].unk_3C == 0) { + if (sObjCharTransferTasksManager->tasks[i].state == 0) { return &sObjCharTransferTasksManager->tasks[i]; } } @@ -601,115 +602,115 @@ ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void) { return NULL; } -void sub_02022060(void) { +void ObjCharTransfer_GetVramCapacityByBank(void) { switch (GX_GetBankForOBJ()) { case GX_VRAM_OBJ_NONE: - sObjCharTransferTasksManager->unk_14 = 0; + sObjCharTransferTasksManager->vramCapacityMain = 0; break; case GX_VRAM_OBJ_16_F: case GX_VRAM_OBJ_16_G: - sObjCharTransferTasksManager->unk_14 = 16 * 1024; + sObjCharTransferTasksManager->vramCapacityMain = 16 * 1024; break; case GX_VRAM_OBJ_32_FG: - sObjCharTransferTasksManager->unk_14 = 32 * 1024; + sObjCharTransferTasksManager->vramCapacityMain = 32 * 1024; break; case GX_VRAM_OBJ_64_E: - sObjCharTransferTasksManager->unk_14 = 64 * 1024; + sObjCharTransferTasksManager->vramCapacityMain = 64 * 1024; break; case GX_VRAM_OBJ_80_EF: case GX_VRAM_OBJ_80_EG: - sObjCharTransferTasksManager->unk_14 = 80 * 1024; + sObjCharTransferTasksManager->vramCapacityMain = 80 * 1024; break; case GX_VRAM_OBJ_96_EFG: - sObjCharTransferTasksManager->unk_14 = 96 * 1024; + sObjCharTransferTasksManager->vramCapacityMain = 96 * 1024; break; case GX_VRAM_OBJ_128_A: case GX_VRAM_OBJ_128_B: - sObjCharTransferTasksManager->unk_14 = 128 * 1024; + sObjCharTransferTasksManager->vramCapacityMain = 128 * 1024; break; case GX_VRAM_OBJ_256_AB: - sObjCharTransferTasksManager->unk_14 = 256 * 1024; + sObjCharTransferTasksManager->vramCapacityMain = 256 * 1024; break; default: - sObjCharTransferTasksManager->unk_14 = 0; + sObjCharTransferTasksManager->vramCapacityMain = 0; break; } switch (GX_GetBankForSubOBJ()) { case GX_VRAM_SUB_OBJ_NONE: - sObjCharTransferTasksManager->unk_18 = 0; + sObjCharTransferTasksManager->vramCapacitySub = 0; break; case GX_VRAM_SUB_OBJ_16_I: - sObjCharTransferTasksManager->unk_18 = 16 * 1024; + sObjCharTransferTasksManager->vramCapacitySub = 16 * 1024; break; case GX_VRAM_SUB_OBJ_128_D: - sObjCharTransferTasksManager->unk_18 = 128 * 1024; + sObjCharTransferTasksManager->vramCapacitySub = 128 * 1024; break; default: - sObjCharTransferTasksManager->unk_18 = 0; + sObjCharTransferTasksManager->vramCapacitySub = 0; break; } - int r0 = sub_020224B8(sObjCharTransferTasksManager->unk_24, sObjCharTransferTasksManager->unk_2C); - sObjCharTransferTasksManager->unk_1C = sObjCharTransferTasksManager->unk_14 - r0; - r0 = sub_020224B8(sObjCharTransferTasksManager->unk_28, sObjCharTransferTasksManager->unk_30); - sObjCharTransferTasksManager->unk_20 = sObjCharTransferTasksManager->unk_18 - r0; - GF_ASSERT(sObjCharTransferTasksManager->unk_1C >= 0 && sObjCharTransferTasksManager->unk_20 >= 0); - GF_ASSERT(sObjCharTransferTasksManager->unk_1C >= 0 && sObjCharTransferTasksManager->unk_20 >= 0); // they wanted to be doubly sure + int sizeToReserve = ObjCharTransfer_GetBlockMemOffset(sObjCharTransferTasksManager->numBlocksMain, sObjCharTransferTasksManager->blockSizeMain); + sObjCharTransferTasksManager->freeSizeMain = sObjCharTransferTasksManager->vramCapacityMain - sizeToReserve; + sizeToReserve = ObjCharTransfer_GetBlockMemOffset(sObjCharTransferTasksManager->numBlocksSub, sObjCharTransferTasksManager->blockSizeSub); + sObjCharTransferTasksManager->freeSizeSub = sObjCharTransferTasksManager->vramCapacitySub - sizeToReserve; + GF_ASSERT(sObjCharTransferTasksManager->freeSizeMain >= 0 && sObjCharTransferTasksManager->freeSizeSub >= 0); + GF_ASSERT(sObjCharTransferTasksManager->freeSizeMain >= 0 && sObjCharTransferTasksManager->freeSizeSub >= 0); // they wanted to be doubly sure } void sub_020221B4(void) { - sub_02022278(sObjCharTransferTasksManager->unk_34); - sub_02022278(sObjCharTransferTasksManager->unk_38); + ObjCharTransfer_ClearBlockBuf(sObjCharTransferTasksManager->blockBufMain); + ObjCharTransfer_ClearBlockBuf(sObjCharTransferTasksManager->blockBufSub); } -void sub_020221D0(u32 a0, u32 a1, HeapID heapID) { - sObjCharTransferTasksManager->unk_24 = a0; - sObjCharTransferTasksManager->unk_28 = a1; - if (sObjCharTransferTasksManager->unk_34 != NULL) { - FreeToHeap(sObjCharTransferTasksManager->unk_34); +void ObjCharTransfer_InitBlocksTransferBuffers(u32 numBlocksMain, u32 numBlocksSub, HeapID heapID) { + sObjCharTransferTasksManager->numBlocksMain = numBlocksMain; + sObjCharTransferTasksManager->numBlocksSub = numBlocksSub; + if (sObjCharTransferTasksManager->blockBufMain != NULL) { + FreeToHeap(sObjCharTransferTasksManager->blockBufMain); } - if (sObjCharTransferTasksManager->unk_38 != NULL) { - FreeToHeap(sObjCharTransferTasksManager->unk_38); + if (sObjCharTransferTasksManager->blockBufSub != NULL) { + FreeToHeap(sObjCharTransferTasksManager->blockBufSub); } - if (sObjCharTransferTasksManager->unk_24 != 0) { - sObjCharTransferTasksManager->unk_34 = AllocFromHeap(heapID, a0 / 8); + if (sObjCharTransferTasksManager->numBlocksMain != 0) { + sObjCharTransferTasksManager->blockBufMain = AllocFromHeap(heapID, numBlocksMain / 8); } - if (sObjCharTransferTasksManager->unk_28 != 0) { - sObjCharTransferTasksManager->unk_38 = AllocFromHeap(heapID, a1 / 8); + if (sObjCharTransferTasksManager->numBlocksSub != 0) { + sObjCharTransferTasksManager->blockBufSub = AllocFromHeap(heapID, numBlocksSub / 8); } sub_020221B4(); } -void sub_02022238(u8 *a0) { - if (a0 != NULL) { - if (a0 == sObjCharTransferTasksManager->unk_34) { - sObjCharTransferTasksManager->unk_24 = 0; - FreeToHeap(a0); +void ObjCharTransfer_FreeBlockTransferBuffer(u8 *buffer) { + if (buffer != NULL) { + if (buffer == sObjCharTransferTasksManager->blockBufMain) { + sObjCharTransferTasksManager->numBlocksMain = 0; + FreeToHeap(buffer); } else { - sObjCharTransferTasksManager->unk_28 = 0; - FreeToHeap(a0); + sObjCharTransferTasksManager->numBlocksSub = 0; + FreeToHeap(buffer); } } } -u32 sub_02022260(u8 *a0) { - if (a0 == sObjCharTransferTasksManager->unk_34) { - return sObjCharTransferTasksManager->unk_24; +u32 ObjCharTransfer_GetBlocksCountFromBufferPtr(u8 *buffer) { + if (buffer == sObjCharTransferTasksManager->blockBufMain) { + return sObjCharTransferTasksManager->numBlocksMain; } else { - return sObjCharTransferTasksManager->unk_28; + return sObjCharTransferTasksManager->numBlocksSub; } } -void sub_02022278(u8 *a0) { - if (a0 != NULL) { - memset(a0, 0, sub_02022260(a0) / 8); +void ObjCharTransfer_ClearBlockBuf(u8 *buff) { + if (buff != NULL) { + memset(buff, 0, ObjCharTransfer_GetBlocksCountFromBufferPtr(buff) / 8); } } void sub_02022290(u32 a0, u32 a1, u8 *a2) { if (a2 != NULL) { - u32 r7 = sub_02022260(a2); + u32 r7 = ObjCharTransfer_GetBlocksCountFromBufferPtr(a2); u32 r6 = a0 + a1; for (int i = a0; i < r6; ++i) { if (i >= r7) { @@ -717,7 +718,7 @@ void sub_02022290(u32 a0, u32 a1, u8 *a2) { } u32 sp4; u8 sp0; - sub_02022560(i, &sp4, &sp0); + ObjCharTransfer_BitPositionToByteAndBitIndexPair(i, &sp4, &sp0); GF_ASSERT(!(a2[sp4] & (1 << sp0))); u8 mask = 1 << sp0; a2[sp4] |= mask; @@ -727,16 +728,16 @@ void sub_02022290(u32 a0, u32 a1, u8 *a2) { u32 sub_020222EC(u32 a0, u8 *a1) { if (a1 != NULL) { - u32 sp4 = sub_02022260(a1); + u32 sp4 = ObjCharTransfer_GetBlocksCountFromBufferPtr(a1); for (int i = 0; i < sp4; ++i) { u32 spC; u8 sp8; - sub_02022560(i, &spC, &sp8); + ObjCharTransfer_BitPositionToByteAndBitIndexPair(i, &spC, &sp8); u8 mask = 1 << sp8; int j = 0; while ((a1[spC] & mask) == 0 && j <= a0) { int num = i + j; - sub_02022560(num, &spC, &sp8); + ObjCharTransfer_BitPositionToByteAndBitIndexPair(num, &spC, &sp8); mask = 1 << sp8; if (num >= sp4) { return -1; @@ -752,34 +753,34 @@ u32 sub_020222EC(u32 a0, u8 *a1) { return -1; } -void sub_02022374(u32 a0, u32 a1, u8 *a2) { - if (a2 != NULL) { - u32 r6 = a0 + a1; - for (int i = a0; i < r6; ++i) { - u32 sp4; - u8 sp0; - sub_02022560(i, &sp4, &sp0); - GF_ASSERT(a2[sp4] & (1 << sp0)); - u8 mask = (1 << sp0) ^ 0xFF; - a2[sp4] &= mask; +void sub_02022374(u32 blockStart, u32 blockMax, u8 *buffer) { + if (buffer != NULL) { + u32 blockEnd = blockStart + blockMax; + for (int i = blockStart; i < blockEnd; ++i) { + u32 byte; + u8 bitIndex; + ObjCharTransfer_BitPositionToByteAndBitIndexPair(i, &byte, &bitIndex); + GF_ASSERT(buffer[byte] & (1 << bitIndex)); + u8 mask = (1 << bitIndex) ^ 0xFF; + buffer[byte] &= mask; } } } -void sub_020223C4(ObjCharTransferTask *a0) { - if (a0->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { - u32 loc = NNS_G2dGetImageLocation(&a0->imageProxy, NNS_G2D_VRAM_TYPE_2DMAIN); - u32 r5 = sub_020224A8(loc - sObjCharTransferTasksManager->unk_1C, sObjCharTransferTasksManager->unk_2C); - u32 r1 = sub_020224A8(a0->sizeMain, sObjCharTransferTasksManager->unk_2C); - sub_02022374(r5, r1, sObjCharTransferTasksManager->unk_34); +void sub_020223C4(ObjCharTransferTask *task) { + if (task->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + u32 loc = NNS_G2dGetImageLocation(&task->imageProxy, NNS_G2D_VRAM_TYPE_2DMAIN); + u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(loc - sObjCharTransferTasksManager->freeSizeMain, sObjCharTransferTasksManager->blockSizeMain); + u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(task->sizeMain, sObjCharTransferTasksManager->blockSizeMain); + sub_02022374(blockCur, blockMax, sObjCharTransferTasksManager->blockBufMain); } - if (a0->vram & NNS_G2D_VRAM_TYPE_2DSUB) { - u32 loc = NNS_G2dGetImageLocation(&a0->imageProxy, NNS_G2D_VRAM_TYPE_2DSUB); - u32 r5 = sub_020224A8(loc - sObjCharTransferTasksManager->unk_20, sObjCharTransferTasksManager->unk_30); - u32 r1 = sub_020224A8(a0->sizeSub, sObjCharTransferTasksManager->unk_30); - sub_02022374(r5, r1, sObjCharTransferTasksManager->unk_38); + if (task->vram & NNS_G2D_VRAM_TYPE_2DSUB) { + u32 loc = NNS_G2dGetImageLocation(&task->imageProxy, NNS_G2D_VRAM_TYPE_2DSUB); + u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(loc - sObjCharTransferTasksManager->freeSizeSub, sObjCharTransferTasksManager->blockSizeSub); + u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(task->sizeSub, sObjCharTransferTasksManager->blockSizeSub); + sub_02022374(blockCur, blockMax, sObjCharTransferTasksManager->blockBufSub); } - a0->unk_48 = 0; + task->unk_48 = 0; } int sub_02022448(GXOBJVRamModeChar mode) { @@ -797,29 +798,29 @@ int sub_02022448(GXOBJVRamModeChar mode) { } } -int sub_02022488(int a0, int a1, int a2) { - a1 *= 32; - if (a0 % a1) { - a0 -= (a0 % a1); +int sub_02022488(int a0, int blockSize, int a2) { + blockSize *= 32; + if (a0 % blockSize) { + a0 -= (a0 % blockSize); if (a2 == 1) { - a0 += a1; + a0 += blockSize; } } return a0; } -u32 sub_020224A8(int a0, int a1) { - return a0 / 32 / a1; +u32 ObjCharTransfer_CalcBlockNumLimit(int size, int blockSize) { + return size / 32 / blockSize; } -int sub_020224B8(int a0, int a1) { - return a0 * a1 * 32; +int ObjCharTransfer_GetBlockMemOffset(int blockNum, int blockSize) { + return blockNum * blockSize * 32; } BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub) { BOOL result = TRUE; if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { - if (sObjCharTransferTasksManager->offsetMain + size > sObjCharTransferTasksManager->unk_1C) { + if (sObjCharTransferTasksManager->offsetMain + size > sObjCharTransferTasksManager->freeSizeMain) { GF_ASSERT(FALSE); result = FALSE; } else { @@ -827,7 +828,7 @@ BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 } } if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { - if (sObjCharTransferTasksManager->offsetSub + size > sObjCharTransferTasksManager->unk_20) { + if (sObjCharTransferTasksManager->offsetSub + size > sObjCharTransferTasksManager->freeSizeSub) { GF_ASSERT(FALSE); result = FALSE; } else { @@ -840,17 +841,17 @@ BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram) { if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { sObjCharTransferTasksManager->offsetMain += size; - sObjCharTransferTasksManager->offsetMain = sub_02022488(sObjCharTransferTasksManager->offsetMain, sObjCharTransferTasksManager->unk_2C, 1); + sObjCharTransferTasksManager->offsetMain = sub_02022488(sObjCharTransferTasksManager->offsetMain, sObjCharTransferTasksManager->blockSizeMain, 1); } if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { sObjCharTransferTasksManager->offsetSub += size; - sObjCharTransferTasksManager->offsetSub = sub_02022488(sObjCharTransferTasksManager->offsetSub, sObjCharTransferTasksManager->unk_30, 1); + sObjCharTransferTasksManager->offsetSub = sub_02022488(sObjCharTransferTasksManager->offsetSub, sObjCharTransferTasksManager->blockSizeSub, 1); } } -void sub_02022560(int a0, u32 *a1, u8 *a2) { - *a1 = a0 >> 3; - *a2 = a0 & 7; +void ObjCharTransfer_BitPositionToByteAndBitIndexPair(int arrayBitIndex, u32 *byteIndex, u8 *bitIndex) { + *byteIndex = arrayBitIndex >> 3; + *bitIndex = arrayBitIndex & 7; } void sub_0202256C(u32 baseOffset, u32 curOffset, u32 size, int *distance, int *a4) { diff --git a/src/voltorb_flip/voltorb_flip.c b/src/voltorb_flip/voltorb_flip.c index bd54de2f15..77c31c98a9 100644 --- a/src/voltorb_flip/voltorb_flip.c +++ b/src/voltorb_flip/voltorb_flip.c @@ -1693,7 +1693,7 @@ static void ov122_021E7AEC(VoltorbFlipAppWork *work) { SpriteResourceCountsListUnion temp1 = ov122_021E92E4; Unk122_021E92FC temp2 = ov122_021E92FC; Unk122_021E92D0 temp3 = ov122_021E92D0; - temp3.unk0 = 0x80; + temp3.maxTasks = 0x80; work->unk144 = SpriteRenderer_Create(work->heapId); work->unk148 = SpriteRenderer_CreateGfxHandler(work->unk144); From fa2d0ee40808b8139e265c856830d4eb5707e18f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 14 Apr 2024 16:19:29 -0400 Subject: [PATCH 09/17] more documentation --- include/credits/data.h | 2 +- .../{unk_020215A0.h => obj_char_transfer.h} | 6 +- src/battle_arcade_game_board.c | 2 +- src/choose_starter_app.c | 2 +- src/credits/credits.c | 2 +- src/intro_movie.c | 2 +- src/intro_movie_scene_1.c | 2 +- src/intro_movie_scene_2.c | 2 +- src/intro_movie_scene_3.c | 2 +- src/intro_movie_scene_4.c | 2 +- src/{unk_020215A0.c => obj_char_transfer.c} | 216 +++++++++--------- src/unk_02009D48.c | 2 +- src/unk_0200ACF0.c | 2 +- src/unk_0200CF18.c | 2 +- 14 files changed, 127 insertions(+), 119 deletions(-) rename include/{unk_020215A0.h => obj_char_transfer.h} (92%) rename src/{unk_020215A0.c => obj_char_transfer.c} (80%) diff --git a/include/credits/data.h b/include/credits/data.h index 6c085a1fad..c5cd8d7375 100644 --- a/include/credits/data.h +++ b/include/credits/data.h @@ -3,7 +3,7 @@ #include "global.h" #include "gf_gfx_planes.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "bg_window.h" #include "credits/credits.h" diff --git a/include/unk_020215A0.h b/include/obj_char_transfer.h similarity index 92% rename from include/unk_020215A0.h rename to include/obj_char_transfer.h index b136f09e42..2231caadcd 100644 --- a/include/unk_020215A0.h +++ b/include/obj_char_transfer.h @@ -1,5 +1,5 @@ -#ifndef POKEHEARTGOLD_UNK_020215A0_H -#define POKEHEARTGOLD_UNK_020215A0_H +#ifndef POKEHEARTGOLD_OBJ_CHAR_TRANSFER_H +#define POKEHEARTGOLD_OBJ_CHAR_TRANSFER_H #include "heap.h" #include @@ -45,4 +45,4 @@ void sub_02021B5C(UnkStruct_02021AC8 *a0); ObjCharTransferTasksManager *sub_02021BD0(void); void sub_02021BEC(ObjCharTransferTasksManager *a0); -#endif //POKEHEARTGOLD_UNK_020215A0_H +#endif //POKEHEARTGOLD_OBJ_CHAR_TRANSFER_H diff --git a/src/battle_arcade_game_board.c b/src/battle_arcade_game_board.c index 048d5136df..174be7758f 100644 --- a/src/battle_arcade_game_board.c +++ b/src/battle_arcade_game_board.c @@ -21,7 +21,7 @@ #include "unk_02005D10.h" #include "touchscreen.h" #include "unk_02022588.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_0200A090.h" #include "unk_02078E30.h" #include "vram_transfer_manager.h" diff --git a/src/choose_starter_app.c b/src/choose_starter_app.c index 0a7618ff13..ac0642f45f 100644 --- a/src/choose_starter_app.c +++ b/src/choose_starter_app.c @@ -15,7 +15,7 @@ #include "unk_02023694.h" #include "unk_0200ACF0.h" #include "unk_0200B150.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "unk_02026E30.h" #include "gf_3d_render.h" diff --git a/src/credits/credits.c b/src/credits/credits.c index 88d47346bd..288301a96e 100644 --- a/src/credits/credits.c +++ b/src/credits/credits.c @@ -13,7 +13,7 @@ #include "unk_0200B150.h" #include "sys_task_api.h" #include "unk_0200FA24.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "unk_02023694.h" #include "bg_window.h" diff --git a/src/intro_movie.c b/src/intro_movie.c index f7f356dfc3..98c5fb7772 100644 --- a/src/intro_movie.c +++ b/src/intro_movie.c @@ -13,7 +13,7 @@ #include "title_screen.h" #include "unk_0200B150.h" #include "unk_0200FA24.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "unk_02023694.h" diff --git a/src/intro_movie_scene_1.c b/src/intro_movie_scene_1.c index 98a6d5ce5d..aa715cad93 100644 --- a/src/intro_movie_scene_1.c +++ b/src/intro_movie_scene_1.c @@ -4,7 +4,7 @@ #include "unk_0200ACF0.h" #include "unk_0200B150.h" #include "unk_0200FA24.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "system.h" #include "demo/opening/gs_opening.naix" diff --git a/src/intro_movie_scene_2.c b/src/intro_movie_scene_2.c index b6ecdd89dd..693880d93a 100644 --- a/src/intro_movie_scene_2.c +++ b/src/intro_movie_scene_2.c @@ -7,7 +7,7 @@ #include "unk_0200ACF0.h" #include "unk_0200B150.h" #include "unk_0200FA24.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "demo/opening/gs_opening.naix" diff --git a/src/intro_movie_scene_3.c b/src/intro_movie_scene_3.c index 32372f7f0f..c0b26f1502 100644 --- a/src/intro_movie_scene_3.c +++ b/src/intro_movie_scene_3.c @@ -6,7 +6,7 @@ #include "unk_0200B150.h" #include "unk_0200FA24.h" #include "gf_3d_render.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "demo/opening/gs_opening.naix" #include "unk_02026E30.h" diff --git a/src/intro_movie_scene_4.c b/src/intro_movie_scene_4.c index 11e3e70690..412f2e44ef 100644 --- a/src/intro_movie_scene_4.c +++ b/src/intro_movie_scene_4.c @@ -8,7 +8,7 @@ #include "unk_0200ACF0.h" #include "unk_0200B150.h" #include "unk_0200FA24.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "unk_02026E30.h" diff --git a/src/unk_020215A0.c b/src/obj_char_transfer.c similarity index 80% rename from src/unk_020215A0.c rename to src/obj_char_transfer.c index 84145bdbed..795a4fcd16 100644 --- a/src/unk_020215A0.c +++ b/src/obj_char_transfer.c @@ -1,7 +1,15 @@ #include "global.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "vram_transfer_manager.h" +typedef enum ObjCharTransferTaskState { + OBJ_CHAR_TRANSFER_TASK_INIT, + OBJ_CHAR_TRANSFER_TASK_1, + OBJ_CHAR_TRANSFER_TASK_2, + OBJ_CHAR_TRANSFER_TASK_3, + OBJ_CHAR_TRANSFER_TASK_4, +} ObjCharTransferTaskState; + typedef struct ObjCharTransferTask { NNSG2dCharacterData *charData; NNS_G2D_VRAM_TYPE vram; @@ -11,9 +19,9 @@ typedef struct ObjCharTransferTask { u32 baseAddrMain; u32 baseAddrSub; u8 state; - int unk_40; + BOOL shouldUpdateMappingTypeFromHW; BOOL unk_44; - int unk_48; + BOOL needResetBlockTransferFlags; u32 sizeMain; u32 sizeSub; } ObjCharTransferTask; @@ -38,7 +46,7 @@ struct ObjCharTransferTasksManager { BOOL ObjCharTransfer_TaskExistsByID(int resId); void sub_020218D4(void); -void ObjCharTransferTask_Reset(ObjCharTransferTask *task); +void ObjCharTransferTask_Init(ObjCharTransferTask *task); BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *template, ObjCharTransferTask *task); BOOL sub_02021C9C(ObjCharTransferTask *task); ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy *proxyIn); @@ -48,8 +56,8 @@ void sub_02021D58(ObjCharTransferTask *task); ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId); GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub); -BOOL sub_02021DE4(int vram, u32 *pOffsetMain, u32 *pOffsetSub, u32 size, u32 *a4, u32 *a5); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match -void sub_02021E90(ObjCharTransferTask *task, u32 a1, u32 a2); +BOOL sub_02021DE4(int vram, u32 *pOffsetMain, u32 *pOffsetSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match +void sub_02021E90(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub); void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 a3, u32 a4); void sub_02021F28(ObjCharTransferTask *task); void sub_02021F54(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); @@ -62,12 +70,12 @@ void sub_020221B4(void); void ObjCharTransfer_FreeBlockTransferBuffer(u8 *a0); u32 ObjCharTransfer_GetBlocksCountFromBufferPtr(u8 *buffer); void ObjCharTransfer_ClearBlockBuf(u8 *buffer); -void sub_02022290(u32 a0, u32 a1, u8 *a2); -u32 sub_020222EC(u32 a0, u8 *a1); -void sub_02022374(u32 a0, u32 a1, u8 *a2); -void sub_020223C4(ObjCharTransferTask *task); -int sub_02022448(GXOBJVRamModeChar mode); -int sub_02022488(int a0, int a1, int a2); +void ObjCharTransfer_ReserveTransferBlocks(u32 blockStart, u32 numBlocks, u8 *buffer); +u32 ObjCharTransfer_FindAvailableTransferBlock(u32 numBlocksUsed, u8 *buffer); +void ObjCharTransfer_ResetBlockTransferFlagsEx(u32 blockStart, u32 blockMax, u8 *buffer); +void ObjCharTransferTask_ResetBlockTransferFlags(ObjCharTransferTask *task); +int ObjCharTransfer_GetBlockSizeFromMode(GXOBJVRamModeChar mode); +int ObjCharTransfer_AlignToBlock(int size, int blockSize, BOOL alignRight); u32 ObjCharTransfer_CalcBlockNumLimit(int size, int blockSize); int ObjCharTransfer_GetBlockMemOffset(int blockNum, int blockSize); BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub); @@ -86,10 +94,10 @@ void ObjCharTransfer_InitEx(ObjCharTransferTemplate *template, GXOBJVRamModeChar sObjCharTransferTasksManager->max = template->maxTasks; sObjCharTransferTasksManager->tasks = (ObjCharTransferTask *)AllocFromHeap(template->heapId, sizeof(ObjCharTransferTask) * sObjCharTransferTasksManager->max); for (int i = 0; i < template->maxTasks; ++i) { - ObjCharTransferTask_Reset(&sObjCharTransferTasksManager->tasks[i]); + ObjCharTransferTask_Init(&sObjCharTransferTasksManager->tasks[i]); } - sObjCharTransferTasksManager->blockSizeMain = sub_02022448(modeMain); - sObjCharTransferTasksManager->blockSizeSub = sub_02022448(modeSub); + sObjCharTransferTasksManager->blockSizeMain = ObjCharTransfer_GetBlockSizeFromMode(modeMain); + sObjCharTransferTasksManager->blockSizeSub = ObjCharTransfer_GetBlockSizeFromMode(modeSub); GX_SetOBJVRamModeChar(modeMain); GXS_SetOBJVRamModeChar(modeSub); int numBlocksMain = ObjCharTransfer_CalcBlockNumLimit(template->sizeMain, sObjCharTransferTasksManager->blockSizeMain); @@ -161,7 +169,7 @@ BOOL sub_020217B0(const ObjCharTransferTaskTemplate *template) { if (!ObjCharTransferTask_InitFromTemplate(template, sub)) { return FALSE; } - sub->unk_40 = 1; + sub->shouldUpdateMappingTypeFromHW = TRUE; if (!sub_02021C9C(sub)) { sub_02021884(sub->resId); return FALSE; @@ -231,28 +239,28 @@ NNSG2dImageProxy *sub_02021910(int resId) { } NNSG2dImageProxy *sub_02021934(int resId, u32 size) { - ObjCharTransferTask *sub = ObjCharTransfer_GetTaskByID(resId); - GF_ASSERT(sub != NULL); - if (sub->state == 0) { + ObjCharTransferTask *task = ObjCharTransfer_GetTaskByID(resId); + GF_ASSERT(task != NULL); + if (task->state == 0) { return NULL; } u32 offsetMain; u32 offsetSub; - u32 spC; - u32 sp8; - sub_02021DE4(sub->vram, &offsetMain, &offsetSub, size, &spC, &sp8); - if (sub->state == 3) { + u32 newSizeMain; + u32 newSizeSub; + sub_02021DE4(task->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); + if (task->state == 3) { return NULL; } - sub->state = 3; - sub_02021E90(sub, offsetMain, offsetSub); - sub->unk_48 = 1; - sub->sizeMain = spC; - sub->sizeSub = sp8; - sub_02021FB0(sub); - sub_02021EC0(sub->vram, offsetMain, offsetSub, spC, sp8); + task->state = 3; + sub_02021E90(task, offsetMain, offsetSub); + task->needResetBlockTransferFlags = TRUE; + task->sizeMain = newSizeMain; + task->sizeSub = newSizeSub; + sub_02021FB0(task); + sub_02021EC0(task->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); - return &sub->imageProxy; + return &task->imageProxy; } NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { @@ -260,8 +268,8 @@ NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { ObjCharTransferTask *copiedTask; u32 offsetMain; u32 offsetSub; - u32 spC; - u32 sp8; + u32 newSizeMain; + u32 newSizeSub; u32 size; task = ObjCharTransfer_GetTaskByImageProxy(proxyIn); @@ -279,13 +287,13 @@ NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { size = copiedTask->sizeSub; } - sub_02021DE4(copiedTask->vram, &offsetMain, &offsetSub, size, &spC, &sp8); + sub_02021DE4(copiedTask->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); sub_02021E90(copiedTask, offsetMain, offsetSub); - copiedTask->unk_48 = 1; - copiedTask->sizeMain = spC; - copiedTask->sizeSub = sp8; + copiedTask->needResetBlockTransferFlags = TRUE; + copiedTask->sizeMain = newSizeMain; + copiedTask->sizeSub = newSizeSub; sub_02021FB0(copiedTask); - sub_02021EC0(copiedTask->vram, offsetMain, offsetSub, spC, sp8); + sub_02021EC0(copiedTask->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); return &copiedTask->imageProxy; } @@ -298,12 +306,12 @@ void sub_02021A50(const NNSG2dImageProxy *proxy) { } } if (i < sObjCharTransferTasksManager->max) { - sub_020223C4(&sObjCharTransferTasksManager->tasks[i]); + ObjCharTransferTask_ResetBlockTransferFlags(&sObjCharTransferTasksManager->tasks[i]); if (sObjCharTransferTasksManager->tasks[i].state == 3) { sObjCharTransferTasksManager->tasks[i].state = 2; } else { sObjCharTransferTasksManager->tasks[i].state = 0; - ObjCharTransferTask_Reset(&sObjCharTransferTasksManager->tasks[i]); + ObjCharTransferTask_Init(&sObjCharTransferTasksManager->tasks[i]); } } } @@ -347,12 +355,12 @@ void sub_02021B5C(UnkStruct_02021AC8 *a0) { if (a0->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(a0->size, sObjCharTransferTasksManager->blockSizeMain); u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(a0->offset - sObjCharTransferTasksManager->freeSizeMain, sObjCharTransferTasksManager->blockSizeMain); - sub_02022374(blockCur, blockMax, sObjCharTransferTasksManager->blockBufMain); + ObjCharTransfer_ResetBlockTransferFlagsEx(blockCur, blockMax, sObjCharTransferTasksManager->blockBufMain); } if (a0->vram & NNS_G2D_VRAM_TYPE_2DSUB) { u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(a0->size, sObjCharTransferTasksManager->blockSizeSub); u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(a0->offset - sObjCharTransferTasksManager->freeSizeSub, sObjCharTransferTasksManager->blockSizeSub); - sub_02022374(blockCur, blockMax, sObjCharTransferTasksManager->blockBufSub); + ObjCharTransfer_ResetBlockTransferFlagsEx(blockCur, blockMax, sObjCharTransferTasksManager->blockBufSub); } } } @@ -369,7 +377,7 @@ void sub_02021BEC(ObjCharTransferTasksManager *a0) { sObjCharTransferTasksManager = a0; } -void ObjCharTransferTask_Reset(ObjCharTransferTask *task) { +void ObjCharTransferTask_Init(ObjCharTransferTask *task) { task->charData = NULL; task->vram = NNS_G2D_VRAM_TYPE_NEITHER; task->isTransferred = FALSE; @@ -377,7 +385,7 @@ void ObjCharTransferTask_Reset(ObjCharTransferTask *task) { task->baseAddrMain = 0; task->baseAddrSub = 0; task->state = 0; - task->unk_40 = 0; + task->shouldUpdateMappingTypeFromHW = FALSE; NNS_G2dInitImageProxy(&task->imageProxy); } @@ -387,7 +395,7 @@ BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *tem task->vram = template->vram; task->isTransferred = task->charData->characterFmt >> NNS_G2D_VRAMTRANSFERDATA_FLAG_SHIFT; task->unk_44 = template->unk_0C; - task->unk_48 = 0; + task->needResetBlockTransferFlags = FALSE; task->sizeMain = 0; task->sizeSub = 0; return TRUE; @@ -443,7 +451,7 @@ BOOL sub_02021D00(ObjCharTransferTask *task) { return FALSE; } sub_02021E90(task, offsetMain, offsetSub); - task->unk_48 = 1; + task->needResetBlockTransferFlags = TRUE; task->sizeMain = sizeMain; task->sizeSub = sizeSub; sub_02021F28(task); @@ -452,10 +460,10 @@ BOOL sub_02021D00(ObjCharTransferTask *task) { } void sub_02021D58(ObjCharTransferTask *task) { - if (task->unk_48) { - sub_020223C4(task); + if (task->needResetBlockTransferFlags) { + ObjCharTransferTask_ResetBlockTransferFlags(task); } - ObjCharTransferTask_Reset(task); + ObjCharTransferTask_Init(task); } ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId) { @@ -485,21 +493,21 @@ void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, } } -BOOL sub_02021DE4(int a0, u32 *blockNumMain, u32 *blockNumSub, u32 a3, u32 *freeSpaceMain, u32 *freeSpaceSub) { - if (a0 & NNS_G2D_VRAM_TYPE_2DMAIN) { - *freeSpaceMain = sub_02022488(a3, sObjCharTransferTasksManager->blockSizeMain, 1); +BOOL sub_02021DE4(int vram, u32 *blockNumMain, u32 *blockNumSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub) { + if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { + *freeSpaceMain = ObjCharTransfer_AlignToBlock(size, sObjCharTransferTasksManager->blockSizeMain, TRUE); u32 numBlocksUsed = ObjCharTransfer_CalcBlockNumLimit(*freeSpaceMain, sObjCharTransferTasksManager->blockSizeMain); - *blockNumMain = sub_020222EC(numBlocksUsed, sObjCharTransferTasksManager->blockBufMain); + *blockNumMain = ObjCharTransfer_FindAvailableTransferBlock(numBlocksUsed, sObjCharTransferTasksManager->blockBufMain); if (*blockNumMain == -1) { GF_ASSERT(FALSE); return FALSE; } *blockNumMain = ObjCharTransfer_GetBlockMemOffset(*blockNumMain, sObjCharTransferTasksManager->blockSizeMain); } - if (a0 & NNS_G2D_VRAM_TYPE_2DSUB) { - *freeSpaceSub = sub_02022488(a3, sObjCharTransferTasksManager->blockSizeSub, 1); + if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { + *freeSpaceSub = ObjCharTransfer_AlignToBlock(size, sObjCharTransferTasksManager->blockSizeSub, TRUE); u32 numBlocksUsed = ObjCharTransfer_CalcBlockNumLimit(*freeSpaceSub, sObjCharTransferTasksManager->blockSizeSub); - *blockNumSub = sub_020222EC(numBlocksUsed, sObjCharTransferTasksManager->blockBufSub); + *blockNumSub = ObjCharTransfer_FindAvailableTransferBlock(numBlocksUsed, sObjCharTransferTasksManager->blockBufSub); if (*blockNumSub == -1) { GF_ASSERT(FALSE); return FALSE; @@ -509,12 +517,12 @@ BOOL sub_02021DE4(int a0, u32 *blockNumMain, u32 *blockNumSub, u32 a3, u32 *free return TRUE; } -void sub_02021E90(ObjCharTransferTask *task, u32 a1, u32 a2) { +void sub_02021E90(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub) { if (task->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { - task->baseAddrMain = a1 + sObjCharTransferTasksManager->freeSizeMain; + task->baseAddrMain = offsetMain + sObjCharTransferTasksManager->freeSizeMain; } if (task->vram & NNS_G2D_VRAM_TYPE_2DSUB) { - task->baseAddrSub = a2 + sObjCharTransferTasksManager->freeSizeSub; + task->baseAddrSub = offsetSub + sObjCharTransferTasksManager->freeSizeSub; } } @@ -522,12 +530,12 @@ void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 siz if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { u32 r7 = ObjCharTransfer_CalcBlockNumLimit(sizeMain, sObjCharTransferTasksManager->blockSizeMain); u32 r0 = ObjCharTransfer_CalcBlockNumLimit(offsetMain, sObjCharTransferTasksManager->blockSizeMain); - sub_02022290(r0, r7, sObjCharTransferTasksManager->blockBufMain); + ObjCharTransfer_ReserveTransferBlocks(r0, r7, sObjCharTransferTasksManager->blockBufMain); } if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { u32 r7 = ObjCharTransfer_CalcBlockNumLimit(sizeSub, sObjCharTransferTasksManager->blockSizeSub); u32 r0 = ObjCharTransfer_CalcBlockNumLimit(offsetSub, sObjCharTransferTasksManager->blockSizeSub); - sub_02022290(r0, r7, sObjCharTransferTasksManager->blockBufSub); + ObjCharTransfer_ReserveTransferBlocks(r0, r7, sObjCharTransferTasksManager->blockBufSub); } } @@ -542,7 +550,7 @@ void sub_02021F28(ObjCharTransferTask *task) { } void sub_02021F54(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { - int mappingType = task->unk_40 ? ObjCharTransferTask_SetMappingTypeFromHW(task, vram) : vram; + int mappingType = task->shouldUpdateMappingTypeFromHW ? ObjCharTransferTask_SetMappingTypeFromHW(task, vram) : vram; u32 baseAddr; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { baseAddr = task->baseAddrMain; @@ -551,7 +559,7 @@ void sub_02021F54(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { baseAddr = task->baseAddrSub; GXS_GetOBJVRamModeChar(); } - if (mappingType == 0) { + if (mappingType == GX_OBJVRAMMODE_CHAR_2D) { NNS_G2dLoadImage2DMapping(task->charData, baseAddr, vram, &task->imageProxy); } else { NNS_G2dLoadImage1DMapping(task->charData, baseAddr, vram, &task->imageProxy); @@ -574,8 +582,8 @@ void sub_02021FB0(ObjCharTransferTask *task) { } void sub_02021FDC(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { - int r0 = task->unk_40 ? ObjCharTransferTask_SetMappingTypeFromHW(task, vram) : vram; - #pragma unused(r0) + int mappingType = task->shouldUpdateMappingTypeFromHW ? ObjCharTransferTask_SetMappingTypeFromHW(task, vram) : vram; + #pragma unused(mappingType) u32 baseAddr; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { baseAddr = task->baseAddrMain; @@ -708,43 +716,43 @@ void ObjCharTransfer_ClearBlockBuf(u8 *buff) { } } -void sub_02022290(u32 a0, u32 a1, u8 *a2) { - if (a2 != NULL) { - u32 r7 = ObjCharTransfer_GetBlocksCountFromBufferPtr(a2); - u32 r6 = a0 + a1; - for (int i = a0; i < r6; ++i) { - if (i >= r7) { +void ObjCharTransfer_ReserveTransferBlocks(u32 blockStart, u32 numBlocks, u8 *buffer) { + if (buffer != NULL) { + u32 blocksMax = ObjCharTransfer_GetBlocksCountFromBufferPtr(buffer); + u32 blockEnd = blockStart + numBlocks; + for (int i = blockStart; i < blockEnd; ++i) { + if (i >= blocksMax) { break; } - u32 sp4; - u8 sp0; - ObjCharTransfer_BitPositionToByteAndBitIndexPair(i, &sp4, &sp0); - GF_ASSERT(!(a2[sp4] & (1 << sp0))); - u8 mask = 1 << sp0; - a2[sp4] |= mask; + u32 byteIndex; + u8 bitIndex; + ObjCharTransfer_BitPositionToByteAndBitIndexPair(i, &byteIndex, &bitIndex); + GF_ASSERT(!(buffer[byteIndex] & (1 << bitIndex))); + u8 mask = 1 << bitIndex; + buffer[byteIndex] |= mask; } } } -u32 sub_020222EC(u32 a0, u8 *a1) { - if (a1 != NULL) { - u32 sp4 = ObjCharTransfer_GetBlocksCountFromBufferPtr(a1); - for (int i = 0; i < sp4; ++i) { - u32 spC; - u8 sp8; - ObjCharTransfer_BitPositionToByteAndBitIndexPair(i, &spC, &sp8); - u8 mask = 1 << sp8; +u32 ObjCharTransfer_FindAvailableTransferBlock(u32 reserveSize, u8 *buffer) { + if (buffer != NULL) { + u32 blocksMax = ObjCharTransfer_GetBlocksCountFromBufferPtr(buffer); + for (int i = 0; i < blocksMax; ++i) { + u32 bitIndex; + u8 byteIndex; + ObjCharTransfer_BitPositionToByteAndBitIndexPair(i, &bitIndex, &byteIndex); + u8 mask = 1 << byteIndex; int j = 0; - while ((a1[spC] & mask) == 0 && j <= a0) { + while ((buffer[bitIndex] & mask) == 0 && j <= reserveSize) { int num = i + j; - ObjCharTransfer_BitPositionToByteAndBitIndexPair(num, &spC, &sp8); - mask = 1 << sp8; - if (num >= sp4) { + ObjCharTransfer_BitPositionToByteAndBitIndexPair(num, &bitIndex, &byteIndex); + mask = 1 << byteIndex; + if (num >= blocksMax) { return -1; } ++j; } - if (j > a0) { + if (j > reserveSize) { return i; } i += j; @@ -753,7 +761,7 @@ u32 sub_020222EC(u32 a0, u8 *a1) { return -1; } -void sub_02022374(u32 blockStart, u32 blockMax, u8 *buffer) { +void ObjCharTransfer_ResetBlockTransferFlagsEx(u32 blockStart, u32 blockMax, u8 *buffer) { if (buffer != NULL) { u32 blockEnd = blockStart + blockMax; for (int i = blockStart; i < blockEnd; ++i) { @@ -767,23 +775,23 @@ void sub_02022374(u32 blockStart, u32 blockMax, u8 *buffer) { } } -void sub_020223C4(ObjCharTransferTask *task) { +void ObjCharTransferTask_ResetBlockTransferFlags(ObjCharTransferTask *task) { if (task->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { u32 loc = NNS_G2dGetImageLocation(&task->imageProxy, NNS_G2D_VRAM_TYPE_2DMAIN); u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(loc - sObjCharTransferTasksManager->freeSizeMain, sObjCharTransferTasksManager->blockSizeMain); u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(task->sizeMain, sObjCharTransferTasksManager->blockSizeMain); - sub_02022374(blockCur, blockMax, sObjCharTransferTasksManager->blockBufMain); + ObjCharTransfer_ResetBlockTransferFlagsEx(blockCur, blockMax, sObjCharTransferTasksManager->blockBufMain); } if (task->vram & NNS_G2D_VRAM_TYPE_2DSUB) { u32 loc = NNS_G2dGetImageLocation(&task->imageProxy, NNS_G2D_VRAM_TYPE_2DSUB); u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(loc - sObjCharTransferTasksManager->freeSizeSub, sObjCharTransferTasksManager->blockSizeSub); u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(task->sizeSub, sObjCharTransferTasksManager->blockSizeSub); - sub_02022374(blockCur, blockMax, sObjCharTransferTasksManager->blockBufSub); + ObjCharTransfer_ResetBlockTransferFlagsEx(blockCur, blockMax, sObjCharTransferTasksManager->blockBufSub); } - task->unk_48 = 0; + task->needResetBlockTransferFlags = FALSE; } -int sub_02022448(GXOBJVRamModeChar mode) { +int ObjCharTransfer_GetBlockSizeFromMode(GXOBJVRamModeChar mode) { switch (mode) { case GX_OBJVRAMMODE_CHAR_1D_32K: return 1; @@ -798,15 +806,15 @@ int sub_02022448(GXOBJVRamModeChar mode) { } } -int sub_02022488(int a0, int blockSize, int a2) { +int ObjCharTransfer_AlignToBlock(int size, int blockSize, BOOL alignRight) { blockSize *= 32; - if (a0 % blockSize) { - a0 -= (a0 % blockSize); - if (a2 == 1) { - a0 += blockSize; + if (size % blockSize) { + size -= (size % blockSize); + if (alignRight == TRUE) { + size += blockSize; } } - return a0; + return size; } u32 ObjCharTransfer_CalcBlockNumLimit(int size, int blockSize) { @@ -841,11 +849,11 @@ BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram) { if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { sObjCharTransferTasksManager->offsetMain += size; - sObjCharTransferTasksManager->offsetMain = sub_02022488(sObjCharTransferTasksManager->offsetMain, sObjCharTransferTasksManager->blockSizeMain, 1); + sObjCharTransferTasksManager->offsetMain = ObjCharTransfer_AlignToBlock(sObjCharTransferTasksManager->offsetMain, sObjCharTransferTasksManager->blockSizeMain, 1); } if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { sObjCharTransferTasksManager->offsetSub += size; - sObjCharTransferTasksManager->offsetSub = sub_02022488(sObjCharTransferTasksManager->offsetSub, sObjCharTransferTasksManager->blockSizeSub, 1); + sObjCharTransferTasksManager->offsetSub = ObjCharTransfer_AlignToBlock(sObjCharTransferTasksManager->offsetSub, sObjCharTransferTasksManager->blockSizeSub, 1); } } diff --git a/src/unk_02009D48.c b/src/unk_02009D48.c index c5166e1129..4ae630e659 100644 --- a/src/unk_02009D48.c +++ b/src/unk_02009D48.c @@ -4,7 +4,7 @@ #include "unk_02023694.h" #include "unk_02025C44.h" #include "unk_0200B150.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" void CreateSpriteResourcesHeader(struct SpriteResourcesHeader *hdr, int charId, int plttId, int cellId, int cellAnmId, int multiCellId, int multiCellAnmId, int transfer, int priority, GF_2DGfxResMan *charMan, GF_2DGfxResMan *plttMan, GF_2DGfxResMan *cellMan, GF_2DGfxResMan *cellAnmMan, GF_2DGfxResMan *multiCellMan, GF_2DGfxResMan *multiCellAnmMan) { diff --git a/src/unk_0200ACF0.c b/src/unk_0200ACF0.c index 6a599bbfa9..08c77899a0 100644 --- a/src/unk_0200ACF0.c +++ b/src/unk_0200ACF0.c @@ -1,6 +1,6 @@ #include "global.h" #include "unk_0200ACF0.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" BOOL sub_0200ACF0(GF_2DGfxResObj *obj) { diff --git a/src/unk_0200CF18.c b/src/unk_0200CF18.c index f0ab34603f..de4679ff61 100644 --- a/src/unk_0200CF18.c +++ b/src/unk_0200CF18.c @@ -4,7 +4,7 @@ #include "gf_gfx_loader.h" #include "palette.h" #include "unk_02009D48.h" -#include "unk_020215A0.h" +#include "obj_char_transfer.h" #include "unk_02022588.h" #include "unk_0200B150.h" #include "unk_0200CF18.h" From fb9527c9297d3f266cc9b1be25fd98241c25ece1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 17 Apr 2024 18:16:56 -0400 Subject: [PATCH 10/17] apply filename change to main.lsf --- main.lsf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.lsf b/main.lsf index 44b0b3ccf9..42aacd7095 100644 --- a/main.lsf +++ b/main.lsf @@ -75,7 +75,7 @@ Static main Object src/ascii_util.o Object asm/unk_02020B8C.o Object asm/unk_020210A0.o - Object src/unk_020215A0.o + Object src/obj_char_transfer.o Object asm/unk_02022588.o Object src/gf_gfx_planes.o Object src/camera.o From daf1fac86c31460ec34b08d8883aebe7206ac005 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 17 Apr 2024 18:44:28 -0400 Subject: [PATCH 11/17] fix building --- asm/include/unk_02013534.inc | 2 +- asm/unk_02013534.s | 6 +++--- include/obj_char_transfer.h | 1 + src/obj_char_transfer.c | 1 - 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/asm/include/unk_02013534.inc b/asm/include/unk_02013534.inc index 7ecfdac411..b37f5940b5 100644 --- a/asm/include/unk_02013534.inc +++ b/asm/include/unk_02013534.inc @@ -27,7 +27,7 @@ .public AllocFromHeap .public AllocFromHeapAtEnd .public FreeToHeap -.public sub_02022448 +.public ObjCharTransfer_GetBlockSizeFromMode .public sub_02024714 .public Sprite_Delete .public Sprite_SetMatrix diff --git a/asm/unk_02013534.s b/asm/unk_02013534.s index b549cddfa4..3c907cbaa3 100644 --- a/asm/unk_02013534.s +++ b/asm/unk_02013534.s @@ -1038,7 +1038,7 @@ _02013C82: add r7, r1, #0 and r7, r0 add r0, r7, #0 - bl sub_02022448 + bl ObjCharTransfer_GetBlockSizeFromMode str r0, [sp, #0x18] ldr r0, [sp, #0x14] ldr r4, [r0, #0xc] @@ -1183,7 +1183,7 @@ _02013DA4: add r5, r1, #0 and r5, r0 add r0, r5, #0 - bl sub_02022448 + bl ObjCharTransfer_GetBlockSizeFromMode ldr r4, [r6, #0xc] str r0, [sp, #0x14] mov r3, #0 @@ -1263,7 +1263,7 @@ _02013E34: _02013E38: ldr r0, _02013E70 ; =0x00300010 and r0, r1 - bl sub_02022448 + bl ObjCharTransfer_GetBlockSizeFromMode ldr r2, [r4, #0xc] mov r3, #0 cmp r2, r4 diff --git a/include/obj_char_transfer.h b/include/obj_char_transfer.h index 2231caadcd..c246ac0369 100644 --- a/include/obj_char_transfer.h +++ b/include/obj_char_transfer.h @@ -44,5 +44,6 @@ BOOL sub_02021AC8(u32 size, BOOL a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 void sub_02021B5C(UnkStruct_02021AC8 *a0); ObjCharTransferTasksManager *sub_02021BD0(void); void sub_02021BEC(ObjCharTransferTasksManager *a0); +int ObjCharTransfer_GetBlockSizeFromMode(GXOBJVRamModeChar mode); #endif //POKEHEARTGOLD_OBJ_CHAR_TRANSFER_H diff --git a/src/obj_char_transfer.c b/src/obj_char_transfer.c index 795a4fcd16..ff7cef5bbb 100644 --- a/src/obj_char_transfer.c +++ b/src/obj_char_transfer.c @@ -74,7 +74,6 @@ void ObjCharTransfer_ReserveTransferBlocks(u32 blockStart, u32 numBlocks, u8 *bu u32 ObjCharTransfer_FindAvailableTransferBlock(u32 numBlocksUsed, u8 *buffer); void ObjCharTransfer_ResetBlockTransferFlagsEx(u32 blockStart, u32 blockMax, u8 *buffer); void ObjCharTransferTask_ResetBlockTransferFlags(ObjCharTransferTask *task); -int ObjCharTransfer_GetBlockSizeFromMode(GXOBJVRamModeChar mode); int ObjCharTransfer_AlignToBlock(int size, int blockSize, BOOL alignRight); u32 ObjCharTransfer_CalcBlockNumLimit(int size, int blockSize); int ObjCharTransfer_GetBlockMemOffset(int blockNum, int blockSize); From f1e8aecc658e61efcba875481ee5fc5ced5f5da7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 24 Apr 2024 19:39:26 -0400 Subject: [PATCH 12/17] documentation --- CMakeLists.txt | 2 +- asm/include/overlay_01_021E5900.inc | 2 +- asm/include/overlay_102.inc | 2 +- asm/include/overlay_112.inc | 2 +- asm/include/overlay_121.inc | 2 +- asm/include/overlay_12_battle_command.inc | 4 +- asm/include/overlay_37.inc | 2 +- asm/include/overlay_41.inc | 4 +- asm/include/overlay_43.inc | 2 +- asm/include/overlay_44.inc | 2 +- asm/include/overlay_47.inc | 2 +- asm/include/overlay_48.inc | 2 +- asm/include/overlay_49.inc | 4 +- asm/include/overlay_65.inc | 2 +- asm/include/overlay_70.inc | 2 +- asm/include/overlay_72.inc | 2 +- asm/include/overlay_73.inc | 2 +- asm/include/overlay_74_thumb.inc | 2 +- asm/include/overlay_81.inc | 2 +- asm/include/overlay_82.inc | 2 +- asm/include/overlay_83.inc | 2 +- asm/include/overlay_85.inc | 2 +- asm/include/overlay_87.inc | 2 +- asm/include/overlay_88.inc | 2 +- asm/include/overlay_90.inc | 2 +- asm/include/overlay_91.inc | 2 +- asm/include/overlay_96.inc | 2 +- asm/include/overlay_97.inc | 2 +- asm/include/overlay_trainer_card_main.inc | 2 +- .../overlay_trainer_card_signature.inc | 2 +- asm/include/unk_0200ACF0.inc | 16 +- asm/include/unk_02082908.inc | 2 +- asm/overlay_01_021E5900.s | 2 +- asm/overlay_102.s | 2 +- asm/overlay_112.s | 2 +- asm/overlay_121.s | 2 +- asm/overlay_12_battle_command.s | 6 +- asm/overlay_37.s | 2 +- asm/overlay_41.s | 4 +- asm/overlay_43.s | 2 +- asm/overlay_44.s | 4 +- asm/overlay_47.s | 2 +- asm/overlay_48.s | 2 +- asm/overlay_49.s | 4 +- asm/overlay_65.s | 2 +- asm/overlay_70.s | 2 +- asm/overlay_72.s | 2 +- asm/overlay_73.s | 4 +- asm/overlay_74_thumb.s | 4 +- asm/overlay_81.s | 2 +- asm/overlay_82.s | 2 +- asm/overlay_83.s | 2 +- asm/overlay_85.s | 2 +- asm/overlay_87.s | 2 +- asm/overlay_88.s | 2 +- asm/overlay_90.s | 2 +- asm/overlay_91.s | 2 +- asm/overlay_96.s | 2 +- asm/overlay_97.s | 2 +- asm/overlay_trainer_card_main.s | 2 +- asm/overlay_trainer_card_signature.s | 2 +- asm/unk_02082908.s | 2 +- include/obj_char_transfer.h | 26 +- src/battle_arcade_game_board.c | 2 +- src/choose_starter_app.c | 2 +- src/credits/credits.c | 2 +- src/intro_movie.c | 2 +- src/intro_movie_scene_1.c | 2 +- src/intro_movie_scene_2.c | 2 +- src/intro_movie_scene_3.c | 2 +- src/intro_movie_scene_4.c | 2 +- src/obj_char_transfer.c | 340 +++++++++--------- src/unk_02009D48.c | 10 +- src/unk_0200ACF0.c | 28 +- src/unk_0200CF18.c | 4 +- 75 files changed, 291 insertions(+), 291 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ac322445eb..823019c90c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,7 +33,7 @@ endforeach() add_executable(PokeHeartGold ${SOURCES}) target_include_directories(PokeHeartGold PUBLIC include files ${CMAKE_SOURCE_DIR}/lib/include ${CMAKE_SOURCE_DIR}/lib/include/cw ${CMAKE_SOURCE_DIR}/lib/include/nitro ${CMAKE_SOURCE_DIR}/lib/include/nnsys ${CMAKE_SOURCE_DIR}/lib/include/nitro/os include/library) -target_compile_definitions(PokeHeartGold PUBLIC __CLION_IDE__ SDK_ARM9 SDK_CW SDK_CODE_ARM _NITRO __arm PLATFORM_INTRINSIC_FUNCTION_BIT_CLZ32=__builtin_clz wchar_t=__WCHAR_TYPE__) +target_compile_definitions(PokeHeartGold PUBLIC __CLION_IDE__ SDK_ARM9 SDK_CW SDK_CODE_ARM _NITRO __arm PLATFORM_INTRINSIC_FUNCTION_BIT_CLZ32=__builtin_clz wchar_t=__WCHAR_TYPE__ PM_KEEP_ASSERTS) target_compile_options(PokeHeartGold PRIVATE -Wimplicit -Wno-endif-labels -fms-extensions -nostdinc -Wno-builtin-declaration-mismatch -Wno-implicit-int -Wno-multichar -Wno-address-of-packed-member -mcpu=arm946e-s) target_compile_features(PokeHeartGold PRIVATE c_std_99 cxx_std_98) diff --git a/asm/include/overlay_01_021E5900.inc b/asm/include/overlay_01_021E5900.inc index 2d244cd4d8..76d8eb1baf 100644 --- a/asm/include/overlay_01_021E5900.inc +++ b/asm/include/overlay_01_021E5900.inc @@ -32,7 +32,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_102.inc b/asm/include/overlay_102.inc index 1271415a28..07ca051c00 100644 --- a/asm/include/overlay_102.inc +++ b/asm/include/overlay_102.inc @@ -113,7 +113,7 @@ .public AddTextPrinterParameterizedWithColor .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02021AC8 .public sub_02021B5C .public GfGfx_SetBanks diff --git a/asm/include/overlay_112.inc b/asm/include/overlay_112.inc index 96677a955a..471a8ce231 100644 --- a/asm/include/overlay_112.inc +++ b/asm/include/overlay_112.inc @@ -167,7 +167,7 @@ .public sub_02021238 .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_121.inc b/asm/include/overlay_121.inc index 1bf27aefe9..e41bf3a8cf 100644 --- a/asm/include/overlay_121.inc +++ b/asm/include/overlay_121.inc @@ -67,7 +67,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_12_battle_command.inc b/asm/include/overlay_12_battle_command.inc index 148e495c8d..4619faa0b0 100644 --- a/asm/include/overlay_12_battle_command.inc +++ b/asm/include/overlay_12_battle_command.inc @@ -61,8 +61,8 @@ .public AddTextPrinterParameterizedWithColor .public sub_02021AC8 .public sub_02021B5C -.public sub_02021BD0 -.public sub_02021BEC +.public ObjCharTransfer_PopTaskManager +.public ObjCharTransfer_PushTaskManager .public sub_02024AA8 .public System_GetTouchNew .public GF_AssertFail diff --git a/asm/include/overlay_37.inc b/asm/include/overlay_37.inc index 85470f875e..7882de411e 100644 --- a/asm/include/overlay_37.inc +++ b/asm/include/overlay_37.inc @@ -79,7 +79,7 @@ .public sub_02021280 .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_41.inc b/asm/include/overlay_41.inc index c5be203d30..8d35270705 100644 --- a/asm/include/overlay_41.inc +++ b/asm/include/overlay_41.inc @@ -144,8 +144,8 @@ .public sub_02021238 .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 -.public sub_02021884 +.public ObjCharTransfer_ClearBuffers +.public ObjCharTransfer_ResetTransferTasksByResID .public sub_02021AC8 .public sub_02021B5C .public sub_02022588 diff --git a/asm/include/overlay_43.inc b/asm/include/overlay_43.inc index 76d2d3edab..bdac562d46 100644 --- a/asm/include/overlay_43.inc +++ b/asm/include/overlay_43.inc @@ -121,7 +121,7 @@ .public sub_02020B78 .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_44.inc b/asm/include/overlay_44.inc index a9aec962cf..f8982a035d 100644 --- a/asm/include/overlay_44.inc +++ b/asm/include/overlay_44.inc @@ -154,7 +154,7 @@ .public sub_02021238 .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02021AC8 .public sub_02021B5C .public sub_02022588 diff --git a/asm/include/overlay_47.inc b/asm/include/overlay_47.inc index 6c15776fdc..0419002d7d 100644 --- a/asm/include/overlay_47.inc +++ b/asm/include/overlay_47.inc @@ -82,7 +82,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_48.inc b/asm/include/overlay_48.inc index 913cea53fa..cf1bb79641 100644 --- a/asm/include/overlay_48.inc +++ b/asm/include/overlay_48.inc @@ -101,7 +101,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_49.inc b/asm/include/overlay_49.inc index d1ea1ccb0d..c08b24a02a 100644 --- a/asm/include/overlay_49.inc +++ b/asm/include/overlay_49.inc @@ -161,8 +161,8 @@ .public sub_0202067C .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 -.public sub_02021A50 +.public ObjCharTransfer_ClearBuffers +.public ObjCharTransfer_DeleteTaskCopyByProxyPtr .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_65.inc b/asm/include/overlay_65.inc index 2a708621e1..fb6d2a927d 100644 --- a/asm/include/overlay_65.inc +++ b/asm/include/overlay_65.inc @@ -115,7 +115,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_70.inc b/asm/include/overlay_70.inc index 8815c302fd..a8ad864cb1 100644 --- a/asm/include/overlay_70.inc +++ b/asm/include/overlay_70.inc @@ -142,7 +142,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_72.inc b/asm/include/overlay_72.inc index 0ce4432bda..332cf54027 100644 --- a/asm/include/overlay_72.inc +++ b/asm/include/overlay_72.inc @@ -90,7 +90,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_73.inc b/asm/include/overlay_73.inc index a7f14958ac..aabe1071a6 100644 --- a/asm/include/overlay_73.inc +++ b/asm/include/overlay_73.inc @@ -105,7 +105,7 @@ .public sub_02021238 .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_74_thumb.inc b/asm/include/overlay_74_thumb.inc index 1c0f0f634c..d787569ae7 100644 --- a/asm/include/overlay_74_thumb.inc +++ b/asm/include/overlay_74_thumb.inc @@ -142,7 +142,7 @@ .public ObjCharTransfer_Init .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_81.inc b/asm/include/overlay_81.inc index 59be01b553..b98b5f0f11 100644 --- a/asm/include/overlay_81.inc +++ b/asm/include/overlay_81.inc @@ -128,7 +128,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_82.inc b/asm/include/overlay_82.inc index 1654dfb6c5..b00104842a 100644 --- a/asm/include/overlay_82.inc +++ b/asm/include/overlay_82.inc @@ -95,7 +95,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_83.inc b/asm/include/overlay_83.inc index 51db5629eb..1d1b3bcdb0 100644 --- a/asm/include/overlay_83.inc +++ b/asm/include/overlay_83.inc @@ -131,7 +131,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_85.inc b/asm/include/overlay_85.inc index 49f730caec..50b564a722 100644 --- a/asm/include/overlay_85.inc +++ b/asm/include/overlay_85.inc @@ -140,7 +140,7 @@ .public sub_02021280 .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_87.inc b/asm/include/overlay_87.inc index f03b8f2020..82e1b88c9b 100644 --- a/asm/include/overlay_87.inc +++ b/asm/include/overlay_87.inc @@ -101,7 +101,7 @@ .public sub_02021280 .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_88.inc b/asm/include/overlay_88.inc index 5f995e0555..10646a936a 100644 --- a/asm/include/overlay_88.inc +++ b/asm/include/overlay_88.inc @@ -61,7 +61,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_90.inc b/asm/include/overlay_90.inc index 20ec2b87b3..4c3059d6b3 100644 --- a/asm/include/overlay_90.inc +++ b/asm/include/overlay_90.inc @@ -107,7 +107,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_91.inc b/asm/include/overlay_91.inc index 95ef7769b8..318ab19eff 100644 --- a/asm/include/overlay_91.inc +++ b/asm/include/overlay_91.inc @@ -115,7 +115,7 @@ .public sub_02021280 .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02021AC8 .public sub_02021B5C .public sub_02022588 diff --git a/asm/include/overlay_96.inc b/asm/include/overlay_96.inc index e7e1657834..df25e5f2cf 100644 --- a/asm/include/overlay_96.inc +++ b/asm/include/overlay_96.inc @@ -220,7 +220,7 @@ .public sub_02020F4C .public ObjCharTransfer_InitEx .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02021AC8 .public sub_02021B5C .public sub_02022588 diff --git a/asm/include/overlay_97.inc b/asm/include/overlay_97.inc index d9331643d5..6d822914b5 100644 --- a/asm/include/overlay_97.inc +++ b/asm/include/overlay_97.inc @@ -56,7 +56,7 @@ .public AddTextPrinterParameterizedWithColor .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_trainer_card_main.inc b/asm/include/overlay_trainer_card_main.inc index 8276188921..a7a1e7c151 100644 --- a/asm/include/overlay_trainer_card_main.inc +++ b/asm/include/overlay_trainer_card_main.inc @@ -99,7 +99,7 @@ .public sub_02021238 .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/overlay_trainer_card_signature.inc b/asm/include/overlay_trainer_card_signature.inc index 2132732f03..ed5c098b55 100644 --- a/asm/include/overlay_trainer_card_signature.inc +++ b/asm/include/overlay_trainer_card_signature.inc @@ -81,7 +81,7 @@ .public sub_02021280 .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/include/unk_0200ACF0.inc b/asm/include/unk_0200ACF0.inc index 5f02acfdc7..6fef20da36 100644 --- a/asm/include/unk_0200ACF0.inc +++ b/asm/include/unk_0200ACF0.inc @@ -31,14 +31,14 @@ .public sub_0200B0CC .public sub_0200B0F8 .public sub_0200B12C -.public sub_02021758 -.public sub_020217B0 -.public sub_0202183C -.public sub_02021884 -.public sub_02021910 -.public sub_02021934 -.public sub_020219B8 -.public sub_02021A50 +.public ObjCharTransfer_CreateTaskAndDoTransferFromTemplate +.public ObjCharTransfer_CreateTaskAndDoTransferFromTemplate_UpdateMappingTypeFromHW +.public ObjCharTransfer_ReplaceGraphicsFromChardataByResID +.public ObjCharTransfer_ResetTransferTasksByResID +.public ObjCharTransfer_GetProxyPtrByResID +.public ObjCharTransfer_ResizeTaskByResID_GetProxyPtr +.public ObjCharTransfer_CopyTransferTaskByProxyPtr +.public ObjCharTransfer_DeleteTaskCopyByProxyPtr .public sub_02022660 .public sub_020226A4 .public sub_020226E4 diff --git a/asm/include/unk_02082908.inc b/asm/include/unk_02082908.inc index 932cc47887..0007b02c46 100644 --- a/asm/include/unk_02082908.inc +++ b/asm/include/unk_02082908.inc @@ -93,7 +93,7 @@ .public GF_RunVramTransferTasks .public ObjCharTransfer_Init .public ObjCharTransfer_Destroy -.public sub_020216C8 +.public ObjCharTransfer_ClearBuffers .public sub_02022588 .public sub_02022608 .public sub_02022638 diff --git a/asm/overlay_01_021E5900.s b/asm/overlay_01_021E5900.s index 0ae70f223c..3d17e32ad7 100644 --- a/asm/overlay_01_021E5900.s +++ b/asm/overlay_01_021E5900.s @@ -1050,7 +1050,7 @@ ov01_021E61E0: ; 0x021E61E0 mov r0, #0x14 mov r1, #4 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_102.s b/asm/overlay_102.s index 025b7f9fd5..5e0269f6b2 100644 --- a/asm/overlay_102.s +++ b/asm/overlay_102.s @@ -3660,7 +3660,7 @@ ov102_021E9198: ; 0x021E9198 stmia r3!, {r0, r1} add r0, r2, #0 bl ObjCharTransfer_Init - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers add sp, #0x10 pop {r4, pc} .balign 4, 0 diff --git a/asm/overlay_112.s b/asm/overlay_112.s index 33c9ec71ab..d51a8283af 100644 --- a/asm/overlay_112.s +++ b/asm/overlay_112.s @@ -18924,7 +18924,7 @@ ov112_021EF19C: ; 0x021EF19C mov r0, #0x14 mov r1, #0x9a bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_121.s b/asm/overlay_121.s index 4fc38a8078..8e86b947ff 100644 --- a/asm/overlay_121.s +++ b/asm/overlay_121.s @@ -715,7 +715,7 @@ ov121_021E5EDC: ; 0x021E5EDC mov r0, #1 mov r1, #0x9e bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_12_battle_command.s b/asm/overlay_12_battle_command.s index 9b56743ba1..82d13aafc0 100644 --- a/asm/overlay_12_battle_command.s +++ b/asm/overlay_12_battle_command.s @@ -851,7 +851,7 @@ _02246A72: bl BattleSystem_GetPokedex bl Pokedex_IsNatDexEnabled str r0, [sp, #0xe0] - bl sub_02021BD0 + bl ObjCharTransfer_PopTaskManager str r0, [r4, #0x54] add r0, sp, #0xd0 bl ov18_021F8974 @@ -958,7 +958,7 @@ _02246BC4: ldr r0, [r4, #0x50] bl ov18_021F89D0 ldr r0, [r4, #0x54] - bl sub_02021BEC + bl ObjCharTransfer_PushTaskManager ldr r0, [r4] bl ov12_02237D00 mov r0, #0x10 @@ -1307,7 +1307,7 @@ _02246E84: ldr r0, [r4, #0x50] bl ov18_021F89D0 ldr r0, [r4, #0x54] - bl sub_02021BEC + bl ObjCharTransfer_PushTaskManager ldr r0, [r4] bl ov12_02237D00 _02246EEC: diff --git a/asm/overlay_37.s b/asm/overlay_37.s index bf2306249f..aa7f0f42f3 100644 --- a/asm/overlay_37.s +++ b/asm/overlay_37.s @@ -899,7 +899,7 @@ ov37_021E6090: ; 0x021E6090 mov r0, #0x14 mov r1, #0x27 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_41.s b/asm/overlay_41.s index fd2b824954..797c142dca 100644 --- a/asm/overlay_41.s +++ b/asm/overlay_41.s @@ -1652,7 +1652,7 @@ ov41_02246A94: ; 0x02246A94 mov r0, #5 mov r1, #0xe bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 bl NNS_G2dInitOamManagerModule mov r0, #0 @@ -9439,7 +9439,7 @@ _0224A3EC: add r1, r4, #0 bl ov41_0224639C add r0, r4, #0 - bl sub_02021884 + bl ObjCharTransfer_ResetTransferTasksByResID add r4, r4, #1 cmp r4, #5 blt _0224A3EC diff --git a/asm/overlay_43.s b/asm/overlay_43.s index 075261639e..0882f7e919 100644 --- a/asm/overlay_43.s +++ b/asm/overlay_43.s @@ -1007,7 +1007,7 @@ ov43_0222A690: ; 0x0222A690 mov r0, #0x40 add r1, r7, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add r1, r6, #0 mov r0, #0x40 diff --git a/asm/overlay_44.s b/asm/overlay_44.s index cdc5f89606..813a110ea2 100644 --- a/asm/overlay_44.s +++ b/asm/overlay_44.s @@ -2266,7 +2266,7 @@ ov44_0222AFE8: ; 0x0222AFE8 mov r0, #0x14 mov r1, #0x35 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 ldr r1, _0222B02C ; =0x00200010 mov r0, #1 @@ -19331,7 +19331,7 @@ ov44_0223376C: ; 0x0223376C mov r0, #4 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 ldr r1, _0223381C ; =0x00200010 mov r0, #1 diff --git a/asm/overlay_47.s b/asm/overlay_47.s index 885c26f966..a442c70b53 100644 --- a/asm/overlay_47.s +++ b/asm/overlay_47.s @@ -484,7 +484,7 @@ ov47_02258BB4: ; 0x02258BB4 mov r0, #0x20 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 mov r0, #1 mov r1, #0x10 diff --git a/asm/overlay_48.s b/asm/overlay_48.s index f98766b2d6..e2294dafac 100644 --- a/asm/overlay_48.s +++ b/asm/overlay_48.s @@ -1886,7 +1886,7 @@ ov48_02259688: ; 0x02259688 mov r0, #0x20 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 mov r0, #1 mov r1, #0x10 diff --git a/asm/overlay_49.s b/asm/overlay_49.s index acc521ad5f..a329cf246c 100644 --- a/asm/overlay_49.s +++ b/asm/overlay_49.s @@ -4327,7 +4327,7 @@ _0225A636: mov r0, #0x18 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 mov r0, #1 mov r1, #0x10 @@ -8027,7 +8027,7 @@ ov49_0225C328: ; 0x0225C328 ldr r0, [r5, #0x68] add r4, r1, #0 bl sub_02024B1C - bl sub_02021A50 + bl ObjCharTransfer_DeleteTaskCopyByProxyPtr ldr r0, [r5, #0x68] bl Sprite_Delete mov r0, #0 diff --git a/asm/overlay_65.s b/asm/overlay_65.s index d5b64bd998..cc6ef57137 100644 --- a/asm/overlay_65.s +++ b/asm/overlay_65.s @@ -2562,7 +2562,7 @@ ov65_0221D3B8: ; 0x0221D3B8 mov r0, #0x14 mov r1, #0x1a bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_70.s b/asm/overlay_70.s index d483d10a44..8ca53746a8 100644 --- a/asm/overlay_70.s +++ b/asm/overlay_70.s @@ -2095,7 +2095,7 @@ ov70_022388D0: ; 0x022388D0 mov r0, #0x14 mov r1, #0x3d bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_72.s b/asm/overlay_72.s index b18d5fb4cd..d264b64e23 100644 --- a/asm/overlay_72.s +++ b/asm/overlay_72.s @@ -1125,7 +1125,7 @@ ov72_02238164: ; 0x02238164 mov r0, #0x14 mov r1, #0x43 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_73.s b/asm/overlay_73.s index b7cf61ff3b..fcbaf2691f 100644 --- a/asm/overlay_73.s +++ b/asm/overlay_73.s @@ -885,7 +885,7 @@ ov73_021E6060: ; 0x021E6060 mov r0, #0x14 mov r1, #0x32 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} @@ -5149,7 +5149,7 @@ ov73_021E8168: ; 0x021E8168 mov r0, #0x14 mov r1, #0x96 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_74_thumb.s b/asm/overlay_74_thumb.s index 9bbb9c8371..65ae482c3e 100644 --- a/asm/overlay_74_thumb.s +++ b/asm/overlay_74_thumb.s @@ -21710,7 +21710,7 @@ ov74_02231BC0: ; 0x02231BC0 mov r0, #0x14 mov r1, #0x4c bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} @@ -29373,7 +29373,7 @@ ov74_0223563C: ; 0x0223563C mov r0, #0x1e ldr r1, [r1, #8] bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_81.s b/asm/overlay_81.s index 6dfaf689dd..1bb217c6d2 100644 --- a/asm/overlay_81.s +++ b/asm/overlay_81.s @@ -9805,7 +9805,7 @@ ov81_02242B90: ; 0x02242B90 mov r0, #8 mov r1, #0x64 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_82.s b/asm/overlay_82.s index 1cd65512ac..6a760efe8b 100644 --- a/asm/overlay_82.s +++ b/asm/overlay_82.s @@ -3938,7 +3938,7 @@ ov82_0223FC14: ; 0x0223FC14 mov r0, #4 mov r1, #0x69 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_83.s b/asm/overlay_83.s index d513fb64a8..ede8b8f469 100644 --- a/asm/overlay_83.s +++ b/asm/overlay_83.s @@ -18166,7 +18166,7 @@ ov83_022472DC: ; 0x022472DC mov r0, #0x20 mov r1, #0x6b bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_85.s b/asm/overlay_85.s index 061fff7ddf..2362328304 100644 --- a/asm/overlay_85.s +++ b/asm/overlay_85.s @@ -7257,7 +7257,7 @@ ov85_021E8F58: ; 0x021E8F58 mov r0, #0x14 mov r1, #0x66 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_87.s b/asm/overlay_87.s index ad6ab3c170..d48b567980 100644 --- a/asm/overlay_87.s +++ b/asm/overlay_87.s @@ -4897,7 +4897,7 @@ ov87_021E7EF0: ; 0x021E7EF0 mov r0, #0xe mov r1, #0x7a bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_88.s b/asm/overlay_88.s index df8bdbeb44..f8f90f0822 100644 --- a/asm/overlay_88.s +++ b/asm/overlay_88.s @@ -591,7 +591,7 @@ ov88_02258C98: ; 0x02258C98 mov r0, #0x20 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 ldr r1, _02258D34 ; =0x00200010 mov r0, #1 diff --git a/asm/overlay_90.s b/asm/overlay_90.s index d418f5c0c6..e10ebd0fd3 100644 --- a/asm/overlay_90.s +++ b/asm/overlay_90.s @@ -1279,7 +1279,7 @@ ov90_022590CC: ; 0x022590CC ldr r0, [sp, #0x18] add r1, r4, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 mov r0, #1 mov r1, #0x10 diff --git a/asm/overlay_91.s b/asm/overlay_91.s index ded3b77fb1..7be9972fda 100644 --- a/asm/overlay_91.s +++ b/asm/overlay_91.s @@ -7013,7 +7013,7 @@ ov91_0225FA9C: ; 0x0225FA9C mov r0, #0x10 add r1, r6, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 ldr r1, _0225FB44 ; =0x00200010 mov r0, #1 diff --git a/asm/overlay_96.s b/asm/overlay_96.s index a910722ead..3f9b084acc 100644 --- a/asm/overlay_96.s +++ b/asm/overlay_96.s @@ -7805,7 +7805,7 @@ ov96_021E92B0: ; 0x021E92B0 add r0, r5, #0 add r1, r4, #0 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 pop {r3, r4, r5, pc} thumb_func_end ov96_021E92B0 diff --git a/asm/overlay_97.s b/asm/overlay_97.s index e94dbcaa00..321991158d 100644 --- a/asm/overlay_97.s +++ b/asm/overlay_97.s @@ -329,7 +329,7 @@ ov97_0221E834: ; 0x0221E834 mov r0, #0x14 mov r1, #0x5c bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/overlay_trainer_card_main.s b/asm/overlay_trainer_card_main.s index 6303039c53..ce9e1285cf 100644 --- a/asm/overlay_trainer_card_main.s +++ b/asm/overlay_trainer_card_main.s @@ -4220,7 +4220,7 @@ ov51_021E7D68: ; 0x021E7D68 mov r0, #2 mov r1, #0x19 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 mov r0, #0x19 bl sub_0200B2E0 diff --git a/asm/overlay_trainer_card_signature.s b/asm/overlay_trainer_card_signature.s index c14c4c9c4a..31d9ddc0b9 100644 --- a/asm/overlay_trainer_card_signature.s +++ b/asm/overlay_trainer_card_signature.s @@ -719,7 +719,7 @@ ov52_021E86DC: ; 0x021E86DC mov r0, #0x14 mov r1, #0x27 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/asm/unk_02082908.s b/asm/unk_02082908.s index 2dd136449c..68425511ce 100644 --- a/asm/unk_02082908.s +++ b/asm/unk_02082908.s @@ -1782,7 +1782,7 @@ sub_0208377C: ; 0x0208377C mov r0, #0x14 mov r1, #0x12 bl sub_02022588 - bl sub_020216C8 + bl ObjCharTransfer_ClearBuffers bl sub_02022638 add sp, #0x10 pop {r4, pc} diff --git a/include/obj_char_transfer.h b/include/obj_char_transfer.h index c246ac0369..5065735e34 100644 --- a/include/obj_char_transfer.h +++ b/include/obj_char_transfer.h @@ -15,7 +15,7 @@ typedef struct UnkStruct_02021758 { NNSG2dCharacterData *charData; NNS_G2D_VRAM_TYPE vram; int id; - BOOL unk_0C; + BOOL atEnd; } ObjCharTransferTaskTemplate; typedef struct UnkStruct_02021AC8 { @@ -30,20 +30,20 @@ typedef struct ObjCharTransferTasksManager ObjCharTransferTasksManager; void ObjCharTransfer_Init(ObjCharTransferTemplate *template); void ObjCharTransfer_InitEx(ObjCharTransferTemplate *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub); void ObjCharTransfer_Destroy(void); -void sub_020216C8(void); -void sub_020216F4(u32 a0, u32 a1, NNS_G2D_VRAM_TYPE vram); -BOOL sub_02021758(const ObjCharTransferTaskTemplate *a0); -BOOL sub_020217B0(const ObjCharTransferTaskTemplate *a0); -void sub_0202183C(int id, NNSG2dCharacterData *charData); -void sub_02021884(int resId); -NNSG2dImageProxy *sub_02021910(int resId); -NNSG2dImageProxy *sub_02021934(int resId, u32 size); -NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn); -void sub_02021A50(const NNSG2dImageProxy *proxy); +void ObjCharTransfer_ClearBuffers(void); +void ObjCharTransfer_SetReservedRegion(u32 a0, u32 a1, NNS_G2D_VRAM_TYPE vram); +BOOL ObjCharTransfer_CreateTaskAndDoTransferFromTemplate(const ObjCharTransferTaskTemplate *a0); +BOOL ObjCharTransfer_CreateTaskAndDoTransferFromTemplate_UpdateMappingTypeFromHW(const ObjCharTransferTaskTemplate *a0); +void ObjCharTransfer_ReplaceGraphicsFromChardataByResID(int id, NNSG2dCharacterData *charData); +void ObjCharTransfer_ResetTransferTasksByResID(int resId); +NNSG2dImageProxy *ObjCharTransfer_GetProxyPtrByResID(int resId); +NNSG2dImageProxy *ObjCharTransfer_ResizeTaskByResID_GetProxyPtr(int resId, u32 size); +NNSG2dImageProxy *ObjCharTransfer_CopyTransferTaskByProxyPtr(NNSG2dImageProxy *proxyIn); +void ObjCharTransfer_DeleteTaskCopyByProxyPtr(const NNSG2dImageProxy *proxy); BOOL sub_02021AC8(u32 size, BOOL a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 *a3); void sub_02021B5C(UnkStruct_02021AC8 *a0); -ObjCharTransferTasksManager *sub_02021BD0(void); -void sub_02021BEC(ObjCharTransferTasksManager *a0); +ObjCharTransferTasksManager *ObjCharTransfer_PopTaskManager(void); +void ObjCharTransfer_PushTaskManager(ObjCharTransferTasksManager *a0); int ObjCharTransfer_GetBlockSizeFromMode(GXOBJVRamModeChar mode); #endif //POKEHEARTGOLD_OBJ_CHAR_TRANSFER_H diff --git a/src/battle_arcade_game_board.c b/src/battle_arcade_game_board.c index 174be7758f..6dbd6008b5 100644 --- a/src/battle_arcade_game_board.c +++ b/src/battle_arcade_game_board.c @@ -1302,7 +1302,7 @@ static void ov84_0223F480(void) { ObjCharTransferTemplate var = ov84_0223F9E8; ObjCharTransfer_InitEx(&var, GX_OBJVRAMMODE_CHAR_1D_32K, GX_OBJVRAMMODE_CHAR_1D_32K); sub_02022588(14, HEAP_ID_GAME_BOARD); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); } diff --git a/src/choose_starter_app.c b/src/choose_starter_app.c index ac0642f45f..feac1d20b5 100644 --- a/src/choose_starter_app.c +++ b/src/choose_starter_app.c @@ -619,7 +619,7 @@ static void createOamManager(HeapID heapId) { ObjCharTransfer_InitEx(&baseTrans, GX_OBJVRAMMODE_CHAR_1D_128K, GX_OBJVRAMMODE_CHAR_1D_32K); } sub_02022588(3, heapId); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); } diff --git a/src/credits/credits.c b/src/credits/credits.c index 288301a96e..62b785997a 100644 --- a/src/credits/credits.c +++ b/src/credits/credits.c @@ -471,7 +471,7 @@ static void CreateOamAndObjResMgrs(CreditsAppWork *work) { temp = ov76_021E6EA0; ObjCharTransfer_Init(&temp); sub_02022588(0xd, HEAP_ID_CREDITS); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); NNS_G2dInitOamManagerModule(); OamManager_Create(0, 0x80, 0, 0x20, 0, 0x80, 0, 0x20, HEAP_ID_CREDITS); diff --git a/src/intro_movie.c b/src/intro_movie.c index 98c5fb7772..c4f42680ab 100644 --- a/src/intro_movie.c +++ b/src/intro_movie.c @@ -188,7 +188,7 @@ static void IntroMovie_InitSpriteGraphicsHW(IntroMovieOverlayData *data) { ObjCharTransferTemplate sp14 = {10, 0, 0, HEAP_ID_INTRO_MOVIE}; ObjCharTransfer_Init(&sp14); sub_02022588(10, HEAP_ID_INTRO_MOVIE); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); NNS_G2dInitOamManagerModule(); OamManager_Create(0, 0x80, 0, 0x20, 0, 0x80, 0, 0x20, HEAP_ID_INTRO_MOVIE); diff --git a/src/intro_movie_scene_1.c b/src/intro_movie_scene_1.c index aa715cad93..01082d553d 100644 --- a/src/intro_movie_scene_1.c +++ b/src/intro_movie_scene_1.c @@ -72,7 +72,7 @@ static void IntroMovie_Scene1_VBlankCB(void *pVoid) { static void IntroMovie_Scene1_Init(IntroMovieOverlayData *data, IntroMovieScene1Data *sceneData) { BgConfig *bgConfig = IntroMovie_GetBgConfig(data); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); gSystem.screensFlipped = TRUE; GfGfx_SwapDisplay(); diff --git a/src/intro_movie_scene_2.c b/src/intro_movie_scene_2.c index 693880d93a..118ad3a785 100644 --- a/src/intro_movie_scene_2.c +++ b/src/intro_movie_scene_2.c @@ -86,7 +86,7 @@ static void IntroMovie_Scene2_Init(IntroMovieOverlayData *data, IntroMovieScene2 sub_0200FBF4(PM_LCD_TOP, RGB_WHITE); sub_0200FBF4(PM_LCD_BOTTOM, RGB_WHITE); BgConfig *bgConfig = IntroMovie_GetBgConfig(data); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); gSystem.screensFlipped = FALSE; GfGfx_SwapDisplay(); diff --git a/src/intro_movie_scene_3.c b/src/intro_movie_scene_3.c index c0b26f1502..b98189bb70 100644 --- a/src/intro_movie_scene_3.c +++ b/src/intro_movie_scene_3.c @@ -185,7 +185,7 @@ static void IntroMovie_Scene3_VBlankCB(void *pVoid) { static void IntroMovie_Scene3_Init(IntroMovieOverlayData *data, IntroMovieScene3Data *sceneData) { BgConfig *bgConfig = IntroMovie_GetBgConfig(data); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); gSystem.screensFlipped = FALSE; GfGfx_SwapDisplay(); diff --git a/src/intro_movie_scene_4.c b/src/intro_movie_scene_4.c index 412f2e44ef..cf6746c389 100644 --- a/src/intro_movie_scene_4.c +++ b/src/intro_movie_scene_4.c @@ -97,7 +97,7 @@ static void IntroMovie_Scene4_VBlankCB(void *pVoid) { static void IntroMovie_Scene4_Init(IntroMovieOverlayData *data, IntroMovieScene4Data *sceneData) { BgConfig *bgConfig = IntroMovie_GetBgConfig(data); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); gSystem.screensFlipped = TRUE; GfGfx_SwapDisplay(); diff --git a/src/obj_char_transfer.c b/src/obj_char_transfer.c index ff7cef5bbb..39034155ec 100644 --- a/src/obj_char_transfer.c +++ b/src/obj_char_transfer.c @@ -6,8 +6,8 @@ typedef enum ObjCharTransferTaskState { OBJ_CHAR_TRANSFER_TASK_INIT, OBJ_CHAR_TRANSFER_TASK_1, OBJ_CHAR_TRANSFER_TASK_2, - OBJ_CHAR_TRANSFER_TASK_3, - OBJ_CHAR_TRANSFER_TASK_4, + OBJ_CHAR_TRANSFER_TASK_COPYABLE, + OBJ_CHAR_TRANSFER_TASK_COPY, } ObjCharTransferTaskState; typedef struct ObjCharTransferTask { @@ -20,7 +20,7 @@ typedef struct ObjCharTransferTask { u32 baseAddrSub; u8 state; BOOL shouldUpdateMappingTypeFromHW; - BOOL unk_44; + BOOL transferFromTail; BOOL needResetBlockTransferFlags; u32 sizeMain; u32 sizeSub; @@ -44,43 +44,43 @@ struct ObjCharTransferTasksManager { u8 *blockBufSub; } *sObjCharTransferTasksManager; -BOOL ObjCharTransfer_TaskExistsByID(int resId); -void sub_020218D4(void); -void ObjCharTransferTask_Init(ObjCharTransferTask *task); -BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *template, ObjCharTransferTask *task); -BOOL sub_02021C9C(ObjCharTransferTask *task); -ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy *proxyIn); -BOOL sub_02021CCC(ObjCharTransferTask *task); -BOOL sub_02021D00(ObjCharTransferTask *task); -void sub_02021D58(ObjCharTransferTask *task); -ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId); -GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); -void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub); -BOOL sub_02021DE4(int vram, u32 *pOffsetMain, u32 *pOffsetSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match -void sub_02021E90(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub); -void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 a3, u32 a4); -void sub_02021F28(ObjCharTransferTask *task); -void sub_02021F54(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); -void sub_02021FB0(ObjCharTransferTask *task); -void sub_02021FDC(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); -ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void); -void ObjCharTransfer_GetVramCapacityByBank(void); -void ObjCharTransfer_InitBlocksTransferBuffers(u32 numBlocksMain, u32 numBlocksSub, HeapID heapID); -void sub_020221B4(void); -void ObjCharTransfer_FreeBlockTransferBuffer(u8 *a0); -u32 ObjCharTransfer_GetBlocksCountFromBufferPtr(u8 *buffer); -void ObjCharTransfer_ClearBlockBuf(u8 *buffer); -void ObjCharTransfer_ReserveTransferBlocks(u32 blockStart, u32 numBlocks, u8 *buffer); -u32 ObjCharTransfer_FindAvailableTransferBlock(u32 numBlocksUsed, u8 *buffer); -void ObjCharTransfer_ResetBlockTransferFlagsEx(u32 blockStart, u32 blockMax, u8 *buffer); -void ObjCharTransferTask_ResetBlockTransferFlags(ObjCharTransferTask *task); -int ObjCharTransfer_AlignToBlock(int size, int blockSize, BOOL alignRight); -u32 ObjCharTransfer_CalcBlockNumLimit(int size, int blockSize); -int ObjCharTransfer_GetBlockMemOffset(int blockNum, int blockSize); -BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub); -void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram); -void ObjCharTransfer_BitPositionToByteAndBitIndexPair(int arrayBitIndex, u32 *byteIndex, u8 *bitIndex); -void sub_0202256C(u32 a0, u32 a1, u32 a2, int *a3, int *a4); +static BOOL ObjCharTransfer_TaskExistsByID(int resId); +static void resetAllTransferTasks(void); +static void ObjCharTransferTask_Init(ObjCharTransferTask *task); +static BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *template, ObjCharTransferTask *task); +static BOOL ObjCharTransferTask_ReserveAndTransfer(ObjCharTransferTask *task); +static ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy *proxyIn); +static BOOL ObjCharTransferTask_ReserveFromHead(ObjCharTransferTask *task); +static BOOL ObjCharTransferTask_ReserveFromTail(ObjCharTransferTask *task); +static void ObjCharTransferTask_Reset(ObjCharTransferTask *task); +static ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId); +static GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); +static void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub); +static BOOL getBlockNumAndFreeSpaceForTransfer(int vram, u32 *pOffsetMain, u32 *pOffsetSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match +static void ObjCharTransferTask_UpdateBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub); +static void reserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 sizeMain, u32 sizeSub); +static void ObjCharTransferTask_G2dLoadImageMapping(ObjCharTransferTask *task); +static void ObjCharTransferTask_G2dLoadImageMappingByScreen(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); +static void ObjCharTransferTask_G2dLoadImageMappingVramTransfer(ObjCharTransferTask *task); +static void ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); +static ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void); +static void ObjCharTransfer_GetVramCapacityByBank(void); +static void ObjCharTransfer_InitBlocksTransferBuffers(u32 numBlocksMain, u32 numBlocksSub, HeapID heapID); +static void ObjCharTransfer_ClearBothScreensBlockBufs(void); +static void ObjCharTransfer_FreeBlockTransferBuffer(u8 *a0); +static u32 ObjCharTransfer_GetBlocksCountFromBufferPtr(u8 *buffer); +static void ObjCharTransfer_ClearBlockBuf(u8 *buffer); +static void ObjCharTransfer_ReserveTransferBlocks(u32 blockStart, u32 numBlocks, u8 *buffer); +static u32 ObjCharTransfer_FindAvailableTransferBlock(u32 numBlocksUsed, u8 *buffer); +static void ObjCharTransfer_ResetBlockTransferFlagsEx(u32 blockStart, u32 blockMax, u8 *buffer); +static void ObjCharTransferTask_ResetBlockTransferFlags(ObjCharTransferTask *task); +static int ObjCharTransfer_AlignToBlock(int size, int blockSize, BOOL alignRight); +static u32 ObjCharTransfer_CalcBlockNumLimit(int size, int blockSize); +static int ObjCharTransfer_GetBlockMemOffset(int blockNum, int blockSize); +static BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub); +static void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram); +static void ObjCharTransfer_BitPositionToByteAndBitIndexPair(int arrayBitIndex, u32 *byteIndex, u8 *bitIndex); +static void boundsFixOffsetAndSize(u32 baseOffset, u32 curOffset, u32 size, int *correctedOffset, int *correctedSize); void ObjCharTransfer_Init(ObjCharTransferTemplate *template) { ObjCharTransfer_InitEx(template, GX_GetOBJVRamModeChar(), GXS_GetOBJVRamModeChar()); @@ -109,14 +109,14 @@ void ObjCharTransfer_Destroy(void) { if (sObjCharTransferTasksManager != NULL) { ObjCharTransfer_FreeBlockTransferBuffer(sObjCharTransferTasksManager->blockBufMain); ObjCharTransfer_FreeBlockTransferBuffer(sObjCharTransferTasksManager->blockBufSub); - sub_020218D4(); + resetAllTransferTasks(); FreeToHeap(sObjCharTransferTasksManager->tasks); FreeToHeap(sObjCharTransferTasksManager); sObjCharTransferTasksManager = NULL; } } -void sub_020216C8(void) { +void ObjCharTransfer_ClearBuffers(void) { sObjCharTransferTasksManager->offsetMain = 0; sObjCharTransferTasksManager->offsetSub = 0; ObjCharTransfer_ClearBlockBuf(sObjCharTransferTasksManager->blockBufMain); @@ -124,23 +124,23 @@ void sub_020216C8(void) { ObjCharTransfer_GetVramCapacityByBank(); } -void sub_020216F4(u32 offset, u32 size, NNS_G2D_VRAM_TYPE vram) { +void ObjCharTransfer_SetReservedRegion(u32 offset, u32 size, NNS_G2D_VRAM_TYPE vram) { int newOffset; - int sp4; + int newSize; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { - sub_0202256C(sObjCharTransferTasksManager->freeSizeMain, offset, size, &newOffset, &sp4); - if (sp4 > 0) { - sub_02021EC0(NNS_G2D_VRAM_TYPE_2DMAIN, newOffset, 0, sp4, 0); + boundsFixOffsetAndSize(sObjCharTransferTasksManager->freeSizeMain, offset, size, &newOffset, &newSize); + if (newSize > 0) { + reserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE_2DMAIN, newOffset, 0, newSize, 0); } } else { - sub_0202256C(sObjCharTransferTasksManager->freeSizeSub, offset, size, &newOffset, &sp4); - if (sp4 > 0) { - sub_02021EC0(NNS_G2D_VRAM_TYPE_2DSUB, 0, newOffset, 0, sp4); + boundsFixOffsetAndSize(sObjCharTransferTasksManager->freeSizeSub, offset, size, &newOffset, &newSize); + if (newSize > 0) { + reserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE_2DSUB, 0, newOffset, 0, newSize); } } } -BOOL sub_02021758(const ObjCharTransferTaskTemplate *template) { +BOOL ObjCharTransfer_CreateTaskAndDoTransferFromTemplate(const ObjCharTransferTaskTemplate *template) { GF_ASSERT(ObjCharTransfer_TaskExistsByID(template->id) != TRUE); ObjCharTransferTask *sub = ObjCharTransfer_GetFreeTask(); if (sub == NULL) { @@ -150,15 +150,15 @@ BOOL sub_02021758(const ObjCharTransferTaskTemplate *template) { if (!ObjCharTransferTask_InitFromTemplate(template, sub)) { return FALSE; } - if (!sub_02021C9C(sub)) { - sub_02021884(sub->resId); + if (!ObjCharTransferTask_ReserveAndTransfer(sub)) { + ObjCharTransfer_ResetTransferTasksByResID(sub->resId); return FALSE; } ++sObjCharTransferTasksManager->num; return TRUE; } -BOOL sub_020217B0(const ObjCharTransferTaskTemplate *template) { +BOOL ObjCharTransfer_CreateTaskAndDoTransferFromTemplate_UpdateMappingTypeFromHW(const ObjCharTransferTaskTemplate *template) { GF_ASSERT(ObjCharTransfer_TaskExistsByID(template->id) != TRUE); ObjCharTransferTask *sub = ObjCharTransfer_GetFreeTask(); if (sub == NULL) { @@ -169,15 +169,15 @@ BOOL sub_020217B0(const ObjCharTransferTaskTemplate *template) { return FALSE; } sub->shouldUpdateMappingTypeFromHW = TRUE; - if (!sub_02021C9C(sub)) { - sub_02021884(sub->resId); + if (!ObjCharTransferTask_ReserveAndTransfer(sub)) { + ObjCharTransfer_ResetTransferTasksByResID(sub->resId); return FALSE; } ++sObjCharTransferTasksManager->num; return TRUE; } -BOOL ObjCharTransfer_TaskExistsByID(int resId) { +static BOOL ObjCharTransfer_TaskExistsByID(int resId) { for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { if (resId == sObjCharTransferTasksManager->tasks[i].resId) { return TRUE; @@ -187,7 +187,7 @@ BOOL ObjCharTransfer_TaskExistsByID(int resId) { return FALSE; } -void sub_0202183C(int id, NNSG2dCharacterData *charData) { +void ObjCharTransfer_ReplaceGraphicsFromChardataByResID(int id, NNSG2dCharacterData *charData) { GF_ASSERT(charData != NULL); ObjCharTransferTask *sub = ObjCharTransfer_GetTaskByID(id); GF_ASSERT(sub != NULL); @@ -200,69 +200,69 @@ void sub_0202183C(int id, NNSG2dCharacterData *charData) { } } -void sub_02021884(int resId) { - ObjCharTransferTask *sub; - BOOL r5 = TRUE; +void ObjCharTransfer_ResetTransferTasksByResID(int resId) { + ObjCharTransferTask *task; + BOOL searchingCopies = TRUE; do { - sub = ObjCharTransfer_GetTaskByID(resId); - GF_ASSERT(sub != NULL); - if (sub->state == 4) { - sub_02021A50(&sub->imageProxy); + task = ObjCharTransfer_GetTaskByID(resId); + GF_ASSERT(task != NULL); + if (task->state == OBJ_CHAR_TRANSFER_TASK_COPY) { + ObjCharTransfer_DeleteTaskCopyByProxyPtr(&task->imageProxy); } else { - r5 = FALSE; + searchingCopies = FALSE; } - } while (r5); - if (sub->state != 0) { - sub_02021D58(sub); + } while (searchingCopies); + if (task->state != OBJ_CHAR_TRANSFER_TASK_INIT) { + ObjCharTransferTask_Reset(task); --sObjCharTransferTasksManager->num; } } -void sub_020218D4(void) { +static void resetAllTransferTasks(void) { for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { - if (sObjCharTransferTasksManager->tasks[i].state != 0) { - sub_02021D58(&sObjCharTransferTasksManager->tasks[i]); + if (sObjCharTransferTasksManager->tasks[i].state != OBJ_CHAR_TRANSFER_TASK_INIT) { + ObjCharTransferTask_Reset(&sObjCharTransferTasksManager->tasks[i]); --sObjCharTransferTasksManager->num; } } } -NNSG2dImageProxy *sub_02021910(int resId) { +NNSG2dImageProxy *ObjCharTransfer_GetProxyPtrByResID(int resId) { ObjCharTransferTask *sub = ObjCharTransfer_GetTaskByID(resId); GF_ASSERT(sub != NULL); - if (sub->state == 0) { + if (sub->state == OBJ_CHAR_TRANSFER_TASK_INIT) { return NULL; } return &sub->imageProxy; } -NNSG2dImageProxy *sub_02021934(int resId, u32 size) { +NNSG2dImageProxy *ObjCharTransfer_ResizeTaskByResID_GetProxyPtr(int resId, u32 size) { ObjCharTransferTask *task = ObjCharTransfer_GetTaskByID(resId); GF_ASSERT(task != NULL); - if (task->state == 0) { + if (task->state == OBJ_CHAR_TRANSFER_TASK_INIT) { return NULL; } u32 offsetMain; u32 offsetSub; u32 newSizeMain; u32 newSizeSub; - sub_02021DE4(task->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); - if (task->state == 3) { + getBlockNumAndFreeSpaceForTransfer(task->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); + if (task->state == OBJ_CHAR_TRANSFER_TASK_COPYABLE) { return NULL; } - task->state = 3; - sub_02021E90(task, offsetMain, offsetSub); + task->state = OBJ_CHAR_TRANSFER_TASK_COPYABLE; + ObjCharTransferTask_UpdateBaseAddrs(task, offsetMain, offsetSub); task->needResetBlockTransferFlags = TRUE; task->sizeMain = newSizeMain; task->sizeSub = newSizeSub; - sub_02021FB0(task); - sub_02021EC0(task->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); + ObjCharTransferTask_G2dLoadImageMappingVramTransfer(task); + reserveTransferBlocksByVramOffsetAndSize(task->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); return &task->imageProxy; } -NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { +NNSG2dImageProxy *ObjCharTransfer_CopyTransferTaskByProxyPtr(NNSG2dImageProxy *proxyIn) { ObjCharTransferTask *task; ObjCharTransferTask *copiedTask; u32 offsetMain; @@ -275,41 +275,41 @@ NNSG2dImageProxy *sub_020219B8(NNSG2dImageProxy *proxyIn) { GF_ASSERT(task != NULL); copiedTask = ObjCharTransfer_GetFreeTask(); GF_ASSERT(copiedTask != NULL); - if (task->state != 3) { + if (task->state != OBJ_CHAR_TRANSFER_TASK_COPYABLE) { return NULL; } *copiedTask = *task; - copiedTask->state = 4; + copiedTask->state = OBJ_CHAR_TRANSFER_TASK_COPY; if (copiedTask->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { size = copiedTask->sizeMain; } else { size = copiedTask->sizeSub; } - sub_02021DE4(copiedTask->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); - sub_02021E90(copiedTask, offsetMain, offsetSub); + getBlockNumAndFreeSpaceForTransfer(copiedTask->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); + ObjCharTransferTask_UpdateBaseAddrs(copiedTask, offsetMain, offsetSub); copiedTask->needResetBlockTransferFlags = TRUE; copiedTask->sizeMain = newSizeMain; copiedTask->sizeSub = newSizeSub; - sub_02021FB0(copiedTask); - sub_02021EC0(copiedTask->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); + ObjCharTransferTask_G2dLoadImageMappingVramTransfer(copiedTask); + reserveTransferBlocksByVramOffsetAndSize(copiedTask->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); return &copiedTask->imageProxy; } -void sub_02021A50(const NNSG2dImageProxy *proxy) { +void ObjCharTransfer_DeleteTaskCopyByProxyPtr(const NNSG2dImageProxy *proxy) { int i; for (i = 0; i < sObjCharTransferTasksManager->max; ++i) { - if ((sObjCharTransferTasksManager->tasks[i].state == 3 || sObjCharTransferTasksManager->tasks[i].state == 4) && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxy) { + if ((sObjCharTransferTasksManager->tasks[i].state == OBJ_CHAR_TRANSFER_TASK_COPYABLE || sObjCharTransferTasksManager->tasks[i].state == OBJ_CHAR_TRANSFER_TASK_COPY) && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxy) { break; } } if (i < sObjCharTransferTasksManager->max) { ObjCharTransferTask_ResetBlockTransferFlags(&sObjCharTransferTasksManager->tasks[i]); - if (sObjCharTransferTasksManager->tasks[i].state == 3) { - sObjCharTransferTasksManager->tasks[i].state = 2; + if (sObjCharTransferTasksManager->tasks[i].state == OBJ_CHAR_TRANSFER_TASK_COPYABLE) { + sObjCharTransferTasksManager->tasks[i].state = OBJ_CHAR_TRANSFER_TASK_2; } else { - sObjCharTransferTasksManager->tasks[i].state = 0; + sObjCharTransferTasksManager->tasks[i].state = OBJ_CHAR_TRANSFER_TASK_INIT; ObjCharTransferTask_Init(&sObjCharTransferTasksManager->tasks[i]); } } @@ -322,19 +322,19 @@ BOOL sub_02021AC8(u32 size, BOOL a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 u32 sizeSub; BOOL ret; - if (a1 == 0) { + if (!a1) { ret = ObjCharTransfer_TryGetDestVramOffsets(size, vram, &offsetMain, &offsetSub); if (ret) { ObjCharTransfer_ReserveVramSpace(size, vram); a3->vram = vram; a3->size = size; a3->offset = vram == NNS_G2D_VRAM_TYPE_2DMAIN ? offsetMain : offsetSub; - a3->unk_0A = 0; + a3->unk_0A = FALSE; } } else { - ret = sub_02021DE4(vram, &offsetMain, &offsetSub, size, &sizeMain, &sizeSub); + ret = getBlockNumAndFreeSpaceForTransfer(vram, &offsetMain, &offsetSub, size, &sizeMain, &sizeSub); if (ret) { - sub_02021EC0(vram, offsetMain, offsetSub, sizeMain, sizeSub); + reserveTransferBlocksByVramOffsetAndSize(vram, offsetMain, offsetSub, sizeMain, sizeSub); a3->vram = vram; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { a3->size = sizeMain; @@ -343,14 +343,14 @@ BOOL sub_02021AC8(u32 size, BOOL a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 a3->size = sizeSub; a3->offset = offsetSub + sObjCharTransferTasksManager->freeSizeSub; } - a3->unk_0A = 1; + a3->unk_0A = TRUE; } } return ret; } void sub_02021B5C(UnkStruct_02021AC8 *a0) { - if (a0->unk_0A != 0) { + if (a0->unk_0A) { if (a0->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { u32 blockMax = ObjCharTransfer_CalcBlockNumLimit(a0->size, sObjCharTransferTasksManager->blockSizeMain); u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(a0->offset - sObjCharTransferTasksManager->freeSizeMain, sObjCharTransferTasksManager->blockSizeMain); @@ -364,47 +364,47 @@ void sub_02021B5C(UnkStruct_02021AC8 *a0) { } } -ObjCharTransferTasksManager *sub_02021BD0(void) { +ObjCharTransferTasksManager *ObjCharTransfer_PopTaskManager(void) { GF_ASSERT(sObjCharTransferTasksManager != NULL); ObjCharTransferTasksManager *ret = sObjCharTransferTasksManager; sObjCharTransferTasksManager = NULL; return ret; } -void sub_02021BEC(ObjCharTransferTasksManager *a0) { +void ObjCharTransfer_PushTaskManager(ObjCharTransferTasksManager *taskManager) { GF_ASSERT(sObjCharTransferTasksManager == NULL); - sObjCharTransferTasksManager = a0; + sObjCharTransferTasksManager = taskManager; } -void ObjCharTransferTask_Init(ObjCharTransferTask *task) { +static void ObjCharTransferTask_Init(ObjCharTransferTask *task) { task->charData = NULL; task->vram = NNS_G2D_VRAM_TYPE_NEITHER; task->isTransferred = FALSE; task->resId = -1; task->baseAddrMain = 0; task->baseAddrSub = 0; - task->state = 0; + task->state = OBJ_CHAR_TRANSFER_TASK_INIT; task->shouldUpdateMappingTypeFromHW = FALSE; NNS_G2dInitImageProxy(&task->imageProxy); } -BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *template, ObjCharTransferTask *task) { +static BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *template, ObjCharTransferTask *task) { task->charData = template->charData; task->resId = template->id; task->vram = template->vram; task->isTransferred = task->charData->characterFmt >> NNS_G2D_VRAMTRANSFERDATA_FLAG_SHIFT; - task->unk_44 = template->unk_0C; + task->transferFromTail = template->atEnd; task->needResetBlockTransferFlags = FALSE; task->sizeMain = 0; task->sizeSub = 0; return TRUE; } -ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy *proxyIn) { +static ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy *proxyIn) { int i; for (i = 0; i < sObjCharTransferTasksManager->max; ++i) { - if (sObjCharTransferTasksManager->tasks[i].state != 0 && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxyIn) { + if (sObjCharTransferTasksManager->tasks[i].state != OBJ_CHAR_TRANSFER_TASK_INIT && &sObjCharTransferTasksManager->tasks[i].imageProxy == proxyIn) { break; } } @@ -415,22 +415,22 @@ ObjCharTransferTask *ObjCharTransfer_GetTaskByImageProxy(const NNSG2dImageProxy return &sObjCharTransferTasksManager->tasks[i]; } -BOOL sub_02021C9C(ObjCharTransferTask *task) { +static BOOL ObjCharTransferTask_ReserveAndTransfer(ObjCharTransferTask *task) { BOOL ret = TRUE; if (task->isTransferred) { - task->state = 2; + task->state = OBJ_CHAR_TRANSFER_TASK_2; } else { - task->state = 1; - if (!task->unk_44) { - ret = sub_02021CCC(task); + task->state = OBJ_CHAR_TRANSFER_TASK_1; + if (!task->transferFromTail) { + ret = ObjCharTransferTask_ReserveFromHead(task); } else { - ret = sub_02021D00(task); + ret = ObjCharTransferTask_ReserveFromTail(task); } } return ret; } -BOOL sub_02021CCC(ObjCharTransferTask *task) { +static BOOL ObjCharTransferTask_ReserveFromHead(ObjCharTransferTask *task) { u32 offsetMain; u32 offsetSub; BOOL ret = ObjCharTransfer_TryGetDestVramOffsets(task->charData->szByte, task->vram, &offsetMain, &offsetSub); @@ -441,31 +441,31 @@ BOOL sub_02021CCC(ObjCharTransferTask *task) { return ret; } -BOOL sub_02021D00(ObjCharTransferTask *task) { +static BOOL ObjCharTransferTask_ReserveFromTail(ObjCharTransferTask *task) { u32 offsetMain; u32 offsetSub; u32 sizeMain; u32 sizeSub; - if (!sub_02021DE4(task->vram, &offsetMain, &offsetSub, task->charData->szByte, &sizeMain, &sizeSub)) { + if (!getBlockNumAndFreeSpaceForTransfer(task->vram, &offsetMain, &offsetSub, task->charData->szByte, &sizeMain, &sizeSub)) { return FALSE; } - sub_02021E90(task, offsetMain, offsetSub); + ObjCharTransferTask_UpdateBaseAddrs(task, offsetMain, offsetSub); task->needResetBlockTransferFlags = TRUE; task->sizeMain = sizeMain; task->sizeSub = sizeSub; - sub_02021F28(task); - sub_02021EC0(task->vram, offsetMain, offsetSub, sizeMain, sizeSub); + ObjCharTransferTask_G2dLoadImageMapping(task); + reserveTransferBlocksByVramOffsetAndSize(task->vram, offsetMain, offsetSub, sizeMain, sizeSub); return TRUE; } -void sub_02021D58(ObjCharTransferTask *task) { +static void ObjCharTransferTask_Reset(ObjCharTransferTask *task) { if (task->needResetBlockTransferFlags) { ObjCharTransferTask_ResetBlockTransferFlags(task); } ObjCharTransferTask_Init(task); } -ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId) { +static ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId) { for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { if (sObjCharTransferTasksManager->tasks[i].resId == resId) { return &sObjCharTransferTasksManager->tasks[i]; @@ -475,7 +475,7 @@ ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId) { return NULL; } -GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { +static GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { task->charData->mapingType = GX_GetOBJVRamModeChar(); } else { @@ -484,15 +484,15 @@ GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask * return task->charData->mapingType; } -void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub) { +static void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub) { task->baseAddrMain = offsetMain; task->baseAddrSub = offsetSub; if (!task->isTransferred) { - sub_02021F28(task); + ObjCharTransferTask_G2dLoadImageMapping(task); } } -BOOL sub_02021DE4(int vram, u32 *blockNumMain, u32 *blockNumSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub) { +static BOOL getBlockNumAndFreeSpaceForTransfer(int vram, u32 *blockNumMain, u32 *blockNumSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub) { if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { *freeSpaceMain = ObjCharTransfer_AlignToBlock(size, sObjCharTransferTasksManager->blockSizeMain, TRUE); u32 numBlocksUsed = ObjCharTransfer_CalcBlockNumLimit(*freeSpaceMain, sObjCharTransferTasksManager->blockSizeMain); @@ -516,7 +516,7 @@ BOOL sub_02021DE4(int vram, u32 *blockNumMain, u32 *blockNumSub, u32 size, u32 * return TRUE; } -void sub_02021E90(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub) { +static void ObjCharTransferTask_UpdateBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub) { if (task->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { task->baseAddrMain = offsetMain + sObjCharTransferTasksManager->freeSizeMain; } @@ -525,30 +525,30 @@ void sub_02021E90(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub) { } } -void sub_02021EC0(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 sizeMain, u32 sizeSub) { +static void reserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 sizeMain, u32 sizeSub) { if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { - u32 r7 = ObjCharTransfer_CalcBlockNumLimit(sizeMain, sObjCharTransferTasksManager->blockSizeMain); - u32 r0 = ObjCharTransfer_CalcBlockNumLimit(offsetMain, sObjCharTransferTasksManager->blockSizeMain); - ObjCharTransfer_ReserveTransferBlocks(r0, r7, sObjCharTransferTasksManager->blockBufMain); + u32 numBlocks = ObjCharTransfer_CalcBlockNumLimit(sizeMain, sObjCharTransferTasksManager->blockSizeMain); + u32 blockStart = ObjCharTransfer_CalcBlockNumLimit(offsetMain, sObjCharTransferTasksManager->blockSizeMain); + ObjCharTransfer_ReserveTransferBlocks(blockStart, numBlocks, sObjCharTransferTasksManager->blockBufMain); } if (vram & NNS_G2D_VRAM_TYPE_2DSUB) { - u32 r7 = ObjCharTransfer_CalcBlockNumLimit(sizeSub, sObjCharTransferTasksManager->blockSizeSub); - u32 r0 = ObjCharTransfer_CalcBlockNumLimit(offsetSub, sObjCharTransferTasksManager->blockSizeSub); - ObjCharTransfer_ReserveTransferBlocks(r0, r7, sObjCharTransferTasksManager->blockBufSub); + u32 numBlocks = ObjCharTransfer_CalcBlockNumLimit(sizeSub, sObjCharTransferTasksManager->blockSizeSub); + u32 blockStart = ObjCharTransfer_CalcBlockNumLimit(offsetSub, sObjCharTransferTasksManager->blockSizeSub); + ObjCharTransfer_ReserveTransferBlocks(blockStart, numBlocks, sObjCharTransferTasksManager->blockBufSub); } } -void sub_02021F28(ObjCharTransferTask *task) { +static void ObjCharTransferTask_G2dLoadImageMapping(ObjCharTransferTask *task) { NNS_G2dInitImageProxy(&task->imageProxy); if (task->vram != NNS_G2D_VRAM_TYPE_BOTH) { - sub_02021F54(task, task->vram); + ObjCharTransferTask_G2dLoadImageMappingByScreen(task, task->vram); } else { - sub_02021F54(task, NNS_G2D_VRAM_TYPE_2DMAIN); - sub_02021F54(task, NNS_G2D_VRAM_TYPE_2DSUB); + ObjCharTransferTask_G2dLoadImageMappingByScreen(task, NNS_G2D_VRAM_TYPE_2DMAIN); + ObjCharTransferTask_G2dLoadImageMappingByScreen(task, NNS_G2D_VRAM_TYPE_2DSUB); } } -void sub_02021F54(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { +static void ObjCharTransferTask_G2dLoadImageMappingByScreen(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { int mappingType = task->shouldUpdateMappingTypeFromHW ? ObjCharTransferTask_SetMappingTypeFromHW(task, vram) : vram; u32 baseAddr; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { @@ -570,17 +570,17 @@ void sub_02021F54(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { } } -void sub_02021FB0(ObjCharTransferTask *task) { +static void ObjCharTransferTask_G2dLoadImageMappingVramTransfer(ObjCharTransferTask *task) { NNS_G2dInitImageProxy(&task->imageProxy); if (task->vram != NNS_G2D_VRAM_TYPE_BOTH) { - sub_02021FDC(task, task->vram); + ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(task, task->vram); } else { - sub_02021FDC(task, NNS_G2D_VRAM_TYPE_2DMAIN); - sub_02021FDC(task, NNS_G2D_VRAM_TYPE_2DSUB); + ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(task, NNS_G2D_VRAM_TYPE_2DMAIN); + ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(task, NNS_G2D_VRAM_TYPE_2DSUB); } } -void sub_02021FDC(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { +static void ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { int mappingType = task->shouldUpdateMappingTypeFromHW ? ObjCharTransferTask_SetMappingTypeFromHW(task, vram) : vram; #pragma unused(mappingType) u32 baseAddr; @@ -599,9 +599,9 @@ void sub_02021FDC(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram) { } } -ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void) { +static ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void) { for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { - if (sObjCharTransferTasksManager->tasks[i].state == 0) { + if (sObjCharTransferTasksManager->tasks[i].state == OBJ_CHAR_TRANSFER_TASK_INIT) { return &sObjCharTransferTasksManager->tasks[i]; } } @@ -609,7 +609,7 @@ ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void) { return NULL; } -void ObjCharTransfer_GetVramCapacityByBank(void) { +static void ObjCharTransfer_GetVramCapacityByBank(void) { switch (GX_GetBankForOBJ()) { case GX_VRAM_OBJ_NONE: sObjCharTransferTasksManager->vramCapacityMain = 0; @@ -666,12 +666,12 @@ void ObjCharTransfer_GetVramCapacityByBank(void) { GF_ASSERT(sObjCharTransferTasksManager->freeSizeMain >= 0 && sObjCharTransferTasksManager->freeSizeSub >= 0); // they wanted to be doubly sure } -void sub_020221B4(void) { +static void ObjCharTransfer_ClearBothScreensBlockBufs(void) { ObjCharTransfer_ClearBlockBuf(sObjCharTransferTasksManager->blockBufMain); ObjCharTransfer_ClearBlockBuf(sObjCharTransferTasksManager->blockBufSub); } -void ObjCharTransfer_InitBlocksTransferBuffers(u32 numBlocksMain, u32 numBlocksSub, HeapID heapID) { +static void ObjCharTransfer_InitBlocksTransferBuffers(u32 numBlocksMain, u32 numBlocksSub, HeapID heapID) { sObjCharTransferTasksManager->numBlocksMain = numBlocksMain; sObjCharTransferTasksManager->numBlocksSub = numBlocksSub; if (sObjCharTransferTasksManager->blockBufMain != NULL) { @@ -686,10 +686,10 @@ void ObjCharTransfer_InitBlocksTransferBuffers(u32 numBlocksMain, u32 numBlocksS if (sObjCharTransferTasksManager->numBlocksSub != 0) { sObjCharTransferTasksManager->blockBufSub = AllocFromHeap(heapID, numBlocksSub / 8); } - sub_020221B4(); + ObjCharTransfer_ClearBothScreensBlockBufs(); } -void ObjCharTransfer_FreeBlockTransferBuffer(u8 *buffer) { +static void ObjCharTransfer_FreeBlockTransferBuffer(u8 *buffer) { if (buffer != NULL) { if (buffer == sObjCharTransferTasksManager->blockBufMain) { sObjCharTransferTasksManager->numBlocksMain = 0; @@ -701,7 +701,7 @@ void ObjCharTransfer_FreeBlockTransferBuffer(u8 *buffer) { } } -u32 ObjCharTransfer_GetBlocksCountFromBufferPtr(u8 *buffer) { +static u32 ObjCharTransfer_GetBlocksCountFromBufferPtr(u8 *buffer) { if (buffer == sObjCharTransferTasksManager->blockBufMain) { return sObjCharTransferTasksManager->numBlocksMain; } else { @@ -709,13 +709,13 @@ u32 ObjCharTransfer_GetBlocksCountFromBufferPtr(u8 *buffer) { } } -void ObjCharTransfer_ClearBlockBuf(u8 *buff) { +static void ObjCharTransfer_ClearBlockBuf(u8 *buff) { if (buff != NULL) { memset(buff, 0, ObjCharTransfer_GetBlocksCountFromBufferPtr(buff) / 8); } } -void ObjCharTransfer_ReserveTransferBlocks(u32 blockStart, u32 numBlocks, u8 *buffer) { +static void ObjCharTransfer_ReserveTransferBlocks(u32 blockStart, u32 numBlocks, u8 *buffer) { if (buffer != NULL) { u32 blocksMax = ObjCharTransfer_GetBlocksCountFromBufferPtr(buffer); u32 blockEnd = blockStart + numBlocks; @@ -733,7 +733,7 @@ void ObjCharTransfer_ReserveTransferBlocks(u32 blockStart, u32 numBlocks, u8 *bu } } -u32 ObjCharTransfer_FindAvailableTransferBlock(u32 reserveSize, u8 *buffer) { +static u32 ObjCharTransfer_FindAvailableTransferBlock(u32 reserveSize, u8 *buffer) { if (buffer != NULL) { u32 blocksMax = ObjCharTransfer_GetBlocksCountFromBufferPtr(buffer); for (int i = 0; i < blocksMax; ++i) { @@ -760,7 +760,7 @@ u32 ObjCharTransfer_FindAvailableTransferBlock(u32 reserveSize, u8 *buffer) { return -1; } -void ObjCharTransfer_ResetBlockTransferFlagsEx(u32 blockStart, u32 blockMax, u8 *buffer) { +static void ObjCharTransfer_ResetBlockTransferFlagsEx(u32 blockStart, u32 blockMax, u8 *buffer) { if (buffer != NULL) { u32 blockEnd = blockStart + blockMax; for (int i = blockStart; i < blockEnd; ++i) { @@ -774,7 +774,7 @@ void ObjCharTransfer_ResetBlockTransferFlagsEx(u32 blockStart, u32 blockMax, u8 } } -void ObjCharTransferTask_ResetBlockTransferFlags(ObjCharTransferTask *task) { +static void ObjCharTransferTask_ResetBlockTransferFlags(ObjCharTransferTask *task) { if (task->vram & NNS_G2D_VRAM_TYPE_2DMAIN) { u32 loc = NNS_G2dGetImageLocation(&task->imageProxy, NNS_G2D_VRAM_TYPE_2DMAIN); u32 blockCur = ObjCharTransfer_CalcBlockNumLimit(loc - sObjCharTransferTasksManager->freeSizeMain, sObjCharTransferTasksManager->blockSizeMain); @@ -805,7 +805,7 @@ int ObjCharTransfer_GetBlockSizeFromMode(GXOBJVRamModeChar mode) { } } -int ObjCharTransfer_AlignToBlock(int size, int blockSize, BOOL alignRight) { +static int ObjCharTransfer_AlignToBlock(int size, int blockSize, BOOL alignRight) { blockSize *= 32; if (size % blockSize) { size -= (size % blockSize); @@ -816,15 +816,15 @@ int ObjCharTransfer_AlignToBlock(int size, int blockSize, BOOL alignRight) { return size; } -u32 ObjCharTransfer_CalcBlockNumLimit(int size, int blockSize) { +static u32 ObjCharTransfer_CalcBlockNumLimit(int size, int blockSize) { return size / 32 / blockSize; } -int ObjCharTransfer_GetBlockMemOffset(int blockNum, int blockSize) { +static int ObjCharTransfer_GetBlockMemOffset(int blockNum, int blockSize) { return blockNum * blockSize * 32; } -BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub) { +static BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub) { BOOL result = TRUE; if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { if (sObjCharTransferTasksManager->offsetMain + size > sObjCharTransferTasksManager->freeSizeMain) { @@ -845,7 +845,7 @@ BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 return result; } -void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram) { +static void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram) { if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { sObjCharTransferTasksManager->offsetMain += size; sObjCharTransferTasksManager->offsetMain = ObjCharTransfer_AlignToBlock(sObjCharTransferTasksManager->offsetMain, sObjCharTransferTasksManager->blockSizeMain, 1); @@ -856,17 +856,17 @@ void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram) { } } -void ObjCharTransfer_BitPositionToByteAndBitIndexPair(int arrayBitIndex, u32 *byteIndex, u8 *bitIndex) { +static void ObjCharTransfer_BitPositionToByteAndBitIndexPair(int arrayBitIndex, u32 *byteIndex, u8 *bitIndex) { *byteIndex = arrayBitIndex >> 3; *bitIndex = arrayBitIndex & 7; } -void sub_0202256C(u32 baseOffset, u32 curOffset, u32 size, int *distance, int *a4) { - *distance = curOffset - baseOffset; - if (*distance < 0) { - *a4 = size + *distance; - *distance = 0; +static void boundsFixOffsetAndSize(u32 baseOffset, u32 curOffset, u32 size, int *correctedOffset, int *correctedSize) { + *correctedOffset = curOffset - baseOffset; + if (*correctedOffset < 0) { + *correctedSize = size + *correctedOffset; + *correctedOffset = 0; } else { - *a4 = size; + *correctedSize = size; } } diff --git a/src/unk_02009D48.c b/src/unk_02009D48.c index 4ae630e659..c0f48bcf1a 100644 --- a/src/unk_02009D48.c +++ b/src/unk_02009D48.c @@ -143,19 +143,19 @@ void sub_02009FE8(NNS_G2D_VRAM_TYPE vram, GXOBJVRamModeChar mode) { switch (mode) { case GX_OBJVRAMMODE_CHAR_1D_32K: if (GX_GetBankForOBJ() == GX_VRAM_OBJ_16_G || GX_GetBankForOBJ() == GX_VRAM_OBJ_16_F) { - sub_020216F4(0x3E00, 0x200, vram); + ObjCharTransfer_SetReservedRegion(0x3E00, 0x200, vram); } else { - sub_020216F4(0x7E00, 0x200, vram); + ObjCharTransfer_SetReservedRegion(0x7E00, 0x200, vram); } break; case GX_OBJVRAMMODE_CHAR_1D_64K: - sub_020216F4(0xFE00, 0x200, vram); + ObjCharTransfer_SetReservedRegion(0xFE00, 0x200, vram); break; case GX_OBJVRAMMODE_CHAR_1D_128K: if (GX_GetBankForOBJ() == GX_VRAM_OBJ_80_EF || GX_GetBankForOBJ() == GX_VRAM_OBJ_80_EG) { - sub_020216F4(0x13E00, 0x200, vram); + ObjCharTransfer_SetReservedRegion(0x13E00, 0x200, vram); } else { - sub_020216F4(0x1FE00, 0x200, vram); + ObjCharTransfer_SetReservedRegion(0x1FE00, 0x200, vram); } break; default: diff --git a/src/unk_0200ACF0.c b/src/unk_0200ACF0.c index 606d6d0839..b4d987a7e6 100644 --- a/src/unk_0200ACF0.c +++ b/src/unk_0200ACF0.c @@ -11,8 +11,8 @@ BOOL sub_0200ACF0(GF_2DGfxResObj *obj) { template.charData = GF2DGfxResObj_GetCharDataPtr(obj); template.vram = GF2DGfxResObj_GetLoadAddress(obj); template.id = GF2DGfxResObj_GetResID(obj); - template.unk_0C = FALSE; - return sub_02021758(&template); + template.atEnd = FALSE; + return ObjCharTransfer_CreateTaskAndDoTransferFromTemplate(&template); } void sub_0200AD30(GF_2DGfxResObjList *charResObjList) { @@ -32,8 +32,8 @@ BOOL sub_0200AD64(GF_2DGfxResObj *obj) { template.charData = GF2DGfxResObj_GetCharDataPtr(obj); template.vram = GF2DGfxResObj_GetLoadAddress(obj); template.id = GF2DGfxResObj_GetResID(obj); - template.unk_0C = FALSE; - return sub_020217B0(&template); + template.atEnd = FALSE; + return ObjCharTransfer_CreateTaskAndDoTransferFromTemplate_UpdateMappingTypeFromHW(&template); } BOOL sub_0200ADA4(GF_2DGfxResObj *obj) { @@ -44,8 +44,8 @@ BOOL sub_0200ADA4(GF_2DGfxResObj *obj) { template.charData = GF2DGfxResObj_GetCharDataPtr(obj); template.vram = GF2DGfxResObj_GetLoadAddress(obj); template.id = GF2DGfxResObj_GetResID(obj); - template.unk_0C = TRUE; - return sub_02021758(&template); + template.atEnd = TRUE; + return ObjCharTransfer_CreateTaskAndDoTransferFromTemplate(&template); } void sub_0200ADE4(GF_2DGfxResObjList *charResObjList) { @@ -65,8 +65,8 @@ BOOL sub_0200AE18(GF_2DGfxResObj *obj) { template.charData = GF2DGfxResObj_GetCharDataPtr(obj); template.vram = GF2DGfxResObj_GetLoadAddress(obj); template.id = GF2DGfxResObj_GetResID(obj); - template.unk_0C = TRUE; - return sub_020217B0(&template); + template.atEnd = TRUE; + return ObjCharTransfer_CreateTaskAndDoTransferFromTemplate_UpdateMappingTypeFromHW(&template); } void sub_0200AE58(GF_2DGfxResObjList *charResObjList) { @@ -83,14 +83,14 @@ void sub_0200AE8C(GF_2DGfxResObj *obj) { int id = GF2DGfxResObj_GetResID(obj); NNSG2dCharacterData *charData = GF2DGfxResObj_GetCharDataPtr(obj); - sub_0202183C(id, charData); + ObjCharTransfer_ReplaceGraphicsFromChardataByResID(id, charData); } void sub_0200AEB0(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - sub_02021884(GF2DGfxResObj_GetResID(obj)); + ObjCharTransfer_ResetTransferTasksByResID(GF2DGfxResObj_GetResID(obj)); } void sub_0200AED4(GF_2DGfxResObjList *charResObjList) { @@ -106,7 +106,7 @@ NNSG2dImageProxy *sub_0200AF00(GF_2DGfxResObj *obj) { GF_ASSERT(obj != NULL); GF_ASSERT(GF2DGfxResObj_GetResType(obj) == GF_GFX_RES_TYPE_CHAR); - return sub_02021910(GF2DGfxResObj_GetResID(obj)); + return ObjCharTransfer_GetProxyPtrByResID(GF2DGfxResObj_GetResID(obj)); } NNSG2dImageProxy *sub_0200AF24(GF_2DGfxResObj *charResObj, GF_2DGfxResObj *cellResObj) { @@ -119,16 +119,16 @@ NNSG2dImageProxy *sub_0200AF24(GF_2DGfxResObj *charResObj, GF_2DGfxResObj *cellR int resID = GF2DGfxResObj_GetResID(charResObj); NNSG2dCellDataBank *cellData = GF2DGfxResObj_GetCellDataPtr(cellResObj); - ret = sub_02021934(resID, cellData->pVramTransferData->szByteMax); + ret = ObjCharTransfer_ResizeTaskByResID_GetProxyPtr(resID, cellData->pVramTransferData->szByteMax); if (ret == NULL) { - ret = sub_020219B8(sub_02021910(resID)); + ret = ObjCharTransfer_CopyTransferTaskByProxyPtr(ObjCharTransfer_GetProxyPtrByResID(resID)); } return ret; } void sub_0200AF80(const NNSG2dImageProxy *imgProxy) { GF_ASSERT(imgProxy != NULL); - sub_02021A50(imgProxy); + ObjCharTransfer_DeleteTaskCopyByProxyPtr(imgProxy); } BOOL sub_0200AF94(GF_2DGfxResObj *plttResObj) { diff --git a/src/unk_0200CF18.c b/src/unk_0200CF18.c index de4679ff61..bffb8739bc 100644 --- a/src/unk_0200CF18.c +++ b/src/unk_0200CF18.c @@ -72,7 +72,7 @@ BOOL sub_0200CF70(SpriteRenderer* renderer, const Unk122_021E92FC* a1, const Unk OamManager_Create(a1->unk0, a1->unk4, a1->unk8, a1->unkC, a1->unk10, a1->unk14, a1->unk18, a1->unk1C, renderer->heapId); } renderer->cellTransferState = sub_02020654(0x20, renderer->heapId); - sub_020216C8(); + ObjCharTransfer_ClearBuffers(); sub_02022638(); return TRUE; } @@ -593,7 +593,7 @@ static BOOL MyUnloadCharById(GF_2DGfxResMan* manager, GF_2DGfxResObjList* list, if (list->obj[i] != NULL) { u32 test_id = GF2DGfxResObj_GetResID(list->obj[i]); if (test_id == charId) { - sub_02021884(charId); + ObjCharTransfer_ResetTransferTasksByResID(charId); DestroySingle2DGfxResObj(manager, list->obj[i]); list->obj[i] = NULL; --list->num; From 01c5a97c1a82ca19fac71a18576028f32ab27456 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 10 May 2024 07:54:29 -0400 Subject: [PATCH 13/17] address review comments --- include/constants/global.h | 2 +- include/credits/data.h | 2 +- src/certificates_app.c | 20 ++++++++++---------- src/credits/credits.c | 12 ++++++------ src/intro_movie.c | 4 ++-- src/intro_movie_scene_2.c | 6 +++--- src/intro_movie_scene_4.c | 4 ++-- src/obj_char_transfer.c | 16 +++++++++------- 8 files changed, 34 insertions(+), 32 deletions(-) diff --git a/include/constants/global.h b/include/constants/global.h index 3a70c50c55..5b73c244f4 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -18,7 +18,7 @@ // NNS_G2D_VRAM_TYPE_3DMAIN #define NNS_G2D_VRAM_TYPE_NEITHER ((NNS_G2D_VRAM_TYPE)0) // NNS_G2D_VRAM_TYPE_MAX -#define NNS_G2D_VRAM_TYPE_BOTH ((NNS_G2D_VRAM_TYPE)(NNS_G2D_VRAM_TYPE_2DMAIN|NNS_G2D_VRAM_TYPE_2DSUB)) +#define NNS_G2D_VRAM_TYPE_2DBOTH ((NNS_G2D_VRAM_TYPE)(NNS_G2D_VRAM_TYPE_2DMAIN|NNS_G2D_VRAM_TYPE_2DSUB)) #endif //PM_ASM // move this to msl header? diff --git a/include/credits/data.h b/include/credits/data.h index c5cd8d7375..556b1693ac 100644 --- a/include/credits/data.h +++ b/include/credits/data.h @@ -56,7 +56,7 @@ static const WindowTemplate ov76_021E6E98 = { .baseTile = 0x0001, }; -static const ObjCharTransferTemplate ov76_021E6EA0 = { 0x28, 0, 0, HEAP_ID_CREDITS }; +static const ObjCharTransferTemplate sObjCharTransferTemplate = { 0x28, 0, 0, HEAP_ID_CREDITS }; static const GraphicsModes ov76_021E6EB0 = { .dispMode = GX_DISPMODE_GRAPHICS, diff --git a/src/certificates_app.c b/src/certificates_app.c index 52640dc4bb..4d165c5fa0 100644 --- a/src/certificates_app.c +++ b/src/certificates_app.c @@ -119,7 +119,7 @@ static const UnkTemplate_0200D748 ov78_021E68B4 = { .animation = 0, .spritePriority = 1, .pal = 3, - .vram = NNS_G2D_VRAM_TYPE_BOTH, + .vram = NNS_G2D_VRAM_TYPE_2DBOTH, .resIdList = { 2, 2, 2, 2, 0, 0 }, .bgPriority = 0, .vramTransfer = 0, @@ -132,7 +132,7 @@ static const UnkTemplate_0200D748 ov78_021E6880 = { .animation = 0, .spritePriority = 0, .pal = 0xFFFF, - .vram = NNS_G2D_VRAM_TYPE_BOTH, + .vram = NNS_G2D_VRAM_TYPE_2DBOTH, .resIdList = {}, .bgPriority = 0, .vramTransfer = 0, @@ -145,7 +145,7 @@ static const UnkTemplate_0200D748 ov78_021E68E8 = { .animation = 0, .spritePriority = 0, .pal = 2, - .vram = NNS_G2D_VRAM_TYPE_BOTH, + .vram = NNS_G2D_VRAM_TYPE_2DBOTH, .resIdList = { 1, 1, 1, 1, 0, 0 }, .bgPriority = 0, .vramTransfer = 0, @@ -626,8 +626,8 @@ static void ov78_021E636C(CertificatesApp_Data *data) { { NARC *narc = NARC_New(NARC_a_1_6_2, data->heapId); - SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 65, FALSE, 2, NNS_G2D_VRAM_TYPE_BOTH, 0); - SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 66, FALSE, NNS_G2D_VRAM_TYPE_BOTH, 0); + SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 65, FALSE, 2, NNS_G2D_VRAM_TYPE_2DBOTH, 0); + SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 66, FALSE, NNS_G2D_VRAM_TYPE_2DBOTH, 0); SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 67, FALSE, 0); SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 68, FALSE, 0); @@ -637,13 +637,13 @@ static void ov78_021E636C(CertificatesApp_Data *data) { { NARC *narc = NARC_New(NARC_a_1_2_6, data->heapId); - SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_BOTH, 1); - SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19, FALSE, NNS_G2D_VRAM_TYPE_BOTH, 1); + SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_2DBOTH, 1); + SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19, FALSE, NNS_G2D_VRAM_TYPE_2DBOTH, 1); SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 20, FALSE, 1); SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 21, FALSE, 1); - SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_BOTH, 2); - SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19 + (data->unk58 * 3), FALSE, NNS_G2D_VRAM_TYPE_BOTH, 2); + SpriteRenderer_LoadPlttResObjFromOpenNarc(renderer, gfxHandler, narc, 18, FALSE, 1, NNS_G2D_VRAM_TYPE_2DBOTH, 2); + SpriteRenderer_LoadCharResObjFromOpenNarc(renderer, gfxHandler, narc, 19 + (data->unk58 * 3), FALSE, NNS_G2D_VRAM_TYPE_2DBOTH, 2); SpriteRenderer_LoadCellResObjFromOpenNarc(renderer, gfxHandler, narc, 20 + (data->unk58 * 3), FALSE, 2); SpriteRenderer_LoadAnimResObjFromOpenNarc(renderer, gfxHandler, narc, 21 + (data->unk58 * 3), FALSE, 2); @@ -670,7 +670,7 @@ static void ov78_021E652C(CertificatesApp_Data *data) { } static void ov78_021E656C(Sprite *sprite, void *unkBuffer, u32 unkBufferSize, u32 srcOffset) { - GF_ASSERT(Sprite_GetVramType(sprite) == NNS_G2D_VRAM_TYPE_BOTH); + GF_ASSERT(Sprite_GetVramType(sprite) == NNS_G2D_VRAM_TYPE_2DBOTH); DC_FlushRange(unkBuffer, unkBufferSize); diff --git a/src/credits/credits.c b/src/credits/credits.c index 62b785997a..efd50308d7 100644 --- a/src/credits/credits.c +++ b/src/credits/credits.c @@ -463,13 +463,13 @@ static void LoadBgGraphics(CreditsAppWork *work) { } static void CreateOamAndObjResMgrs(CreditsAppWork *work) { - ObjCharTransferTemplate temp; + ObjCharTransferTemplate objCharTransferTemplate; UnkOv021E60F6 temp2; GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_128K); GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_128K); - temp = ov76_021E6EA0; - ObjCharTransfer_Init(&temp); + objCharTransferTemplate = sObjCharTransferTemplate; + ObjCharTransfer_Init(&objCharTransferTemplate); sub_02022588(0xd, HEAP_ID_CREDITS); ObjCharTransfer_ClearBuffers(); sub_02022638(); @@ -497,9 +497,9 @@ static void FreeOamAndObjResMgrs(CreditsAppWork *work) { static void ov76_021E6170(CreditsAppWork *work) { work->gf2dGfxResObj[GF_GFX_RES_TYPE_CHAR] = - AddCharResObjFromNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_CHAR], NARC_a_2_6_3, 1, TRUE, 1, NNS_G2D_VRAM_TYPE_BOTH, HEAP_ID_CREDITS); + AddCharResObjFromNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_CHAR], NARC_a_2_6_3, 1, TRUE, 1, NNS_G2D_VRAM_TYPE_2DBOTH, HEAP_ID_CREDITS); work->gf2dGfxResObj[GF_GFX_RES_TYPE_PLTT] = - AddPlttResObjFromNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_PLTT], NARC_a_2_6_3, 0, FALSE, 1, NNS_G2D_VRAM_TYPE_BOTH, 7, HEAP_ID_CREDITS); + AddPlttResObjFromNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_PLTT], NARC_a_2_6_3, 0, FALSE, 1, NNS_G2D_VRAM_TYPE_2DBOTH, 7, HEAP_ID_CREDITS); work->gf2dGfxResObj[GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(work->gf2dGfxResMan[GF_GFX_RES_TYPE_CELL], NARC_a_2_6_3, 2, TRUE, 1, GF_GFX_RES_TYPE_CELL, HEAP_ID_CREDITS); work->gf2dGfxResObj[GF_GFX_RES_TYPE_ANIM] = @@ -546,7 +546,7 @@ static void InitSprites(CreditsAppWork *work) { u8 yIdx; SceneWork *ptr = &work->sceneWork; - InitDancingSpriteResources(1, work, 1, NNS_G2D_VRAM_TYPE_BOTH, &tmpl, &header); + InitDancingSpriteResources(1, work, 1, NNS_G2D_VRAM_TYPE_2DBOTH, &tmpl, &header); // Dancing Pokémon that start on top screen for (u8 i = 0; i < MONS_PER_SCREEN; i++) { diff --git a/src/intro_movie.c b/src/intro_movie.c index c4f42680ab..326039a1b8 100644 --- a/src/intro_movie.c +++ b/src/intro_movie.c @@ -185,8 +185,8 @@ static void IntroMovie_InitSpriteGraphicsHW(IntroMovieOverlayData *data) { GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K); GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K); - ObjCharTransferTemplate sp14 = {10, 0, 0, HEAP_ID_INTRO_MOVIE}; - ObjCharTransfer_Init(&sp14); + ObjCharTransferTemplate template = {10, 0, 0, HEAP_ID_INTRO_MOVIE}; + ObjCharTransfer_Init(&template); sub_02022588(10, HEAP_ID_INTRO_MOVIE); ObjCharTransfer_ClearBuffers(); sub_02022638(); diff --git a/src/intro_movie_scene_2.c b/src/intro_movie_scene_2.c index 118ad3a785..e14bc80541 100644 --- a/src/intro_movie_scene_2.c +++ b/src/intro_movie_scene_2.c @@ -307,8 +307,8 @@ static void IntroMovie_Scene2_LoadBgGfx(BgConfig *bgConfig) { static void IntroMovie_Scene2_LoadSpriteGfx(IntroMovieOverlayData *data, IntroMovieScene2Data *sceneData) { IntroMovie_CreateSpriteResourceManagers(data, sIntroMovieScene2SpriteResCounts); GF_2DGfxResMan **resMen = IntroMovie_GetSpriteResourceManagersArray(data); - sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000078_NCGR_lz, TRUE, 0, NNS_G2D_VRAM_TYPE_BOTH, HEAP_ID_INTRO_MOVIE); - sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000077_NCLR, FALSE, 0, NNS_G2D_VRAM_TYPE_BOTH, 1, HEAP_ID_INTRO_MOVIE); + sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000078_NCGR_lz, TRUE, 0, NNS_G2D_VRAM_TYPE_2DBOTH, HEAP_ID_INTRO_MOVIE); + sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000077_NCLR, FALSE, 0, NNS_G2D_VRAM_TYPE_2DBOTH, 1, HEAP_ID_INTRO_MOVIE); sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000080_NCER_lz, TRUE, 0, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteGfxRes[0][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000079_NANR_lz, TRUE, 0, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); sceneData->spriteGfxRes[1][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000074_NCGR_lz, TRUE, 1, NNS_G2D_VRAM_TYPE_2DMAIN, HEAP_ID_INTRO_MOVIE); @@ -347,7 +347,7 @@ static void IntroMovie_Scene2_CreateSprites(IntroMovieOverlayData *data, IntroMo 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, }; - IntroMovie_BuildSpriteResourcesHeaderAndTemplate(0, data, 0, NNS_G2D_VRAM_TYPE_BOTH, &spriteTemplate, &spriteHeader); + IntroMovie_BuildSpriteResourcesHeaderAndTemplate(0, data, 0, NNS_G2D_VRAM_TYPE_2DBOTH, &spriteTemplate, &spriteHeader); spriteTemplate.position.x = 128 * FX32_ONE; spriteTemplate.position.y = 192 * FX32_ONE; diff --git a/src/intro_movie_scene_4.c b/src/intro_movie_scene_4.c index cf6746c389..b115d9712d 100644 --- a/src/intro_movie_scene_4.c +++ b/src/intro_movie_scene_4.c @@ -468,8 +468,8 @@ static void IntroMovie_Scene4_LoadSpriteGfx(IntroMovieOverlayData *data, IntroMo IntroMovie_CreateSpriteResourceManagers(data, sIntroMovieScene4SpriteResCounts); resMen = IntroMovie_GetSpriteResourceManagersArray(data); - sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000082_NCGR_lz, TRUE, 0, NNS_G2D_VRAM_TYPE_BOTH, HEAP_ID_INTRO_MOVIE); - sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000081_NCLR, FALSE, 0, NNS_G2D_VRAM_TYPE_BOTH, 2, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CHAR] = AddCharResObjFromNarc(resMen[GF_GFX_RES_TYPE_CHAR], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000082_NCGR_lz, TRUE, 0, NNS_G2D_VRAM_TYPE_2DBOTH, HEAP_ID_INTRO_MOVIE); + sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_PLTT] = AddPlttResObjFromNarc(resMen[GF_GFX_RES_TYPE_PLTT], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000081_NCLR, FALSE, 0, NNS_G2D_VRAM_TYPE_2DBOTH, 2, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_CELL] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_CELL], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000084_NCER_lz, TRUE, 0, GF_GFX_RES_TYPE_CELL, HEAP_ID_INTRO_MOVIE); sceneData->spriteResObjs[0][GF_GFX_RES_TYPE_ANIM] = AddCellOrAnimResObjFromNarc(resMen[GF_GFX_RES_TYPE_ANIM], NARC_demo_opening_gs_opening, NARC_gs_opening_gs_opening_00000083_NANR_lz, TRUE, 0, GF_GFX_RES_TYPE_ANIM, HEAP_ID_INTRO_MOVIE); diff --git a/src/obj_char_transfer.c b/src/obj_char_transfer.c index 39034155ec..f475142df3 100644 --- a/src/obj_char_transfer.c +++ b/src/obj_char_transfer.c @@ -26,7 +26,7 @@ typedef struct ObjCharTransferTask { u32 sizeSub; } ObjCharTransferTask; -struct ObjCharTransferTasksManager { +typedef struct ObjCharTransferTasksManager { ObjCharTransferTask *tasks; int max; int num; @@ -42,7 +42,9 @@ struct ObjCharTransferTasksManager { u32 blockSizeSub; u8 *blockBufMain; u8 *blockBufSub; -} *sObjCharTransferTasksManager; +} ObjCharTransferTasksManager; + +ObjCharTransferTasksManager *sObjCharTransferTasksManager; static BOOL ObjCharTransfer_TaskExistsByID(int resId); static void resetAllTransferTasks(void); @@ -67,7 +69,7 @@ static ObjCharTransferTask *ObjCharTransfer_GetFreeTask(void); static void ObjCharTransfer_GetVramCapacityByBank(void); static void ObjCharTransfer_InitBlocksTransferBuffers(u32 numBlocksMain, u32 numBlocksSub, HeapID heapID); static void ObjCharTransfer_ClearBothScreensBlockBufs(void); -static void ObjCharTransfer_FreeBlockTransferBuffer(u8 *a0); +static void ObjCharTransfer_FreeBlockTransferBuffer(u8 *buffer); static u32 ObjCharTransfer_GetBlocksCountFromBufferPtr(u8 *buffer); static void ObjCharTransfer_ClearBlockBuf(u8 *buffer); static void ObjCharTransfer_ReserveTransferBlocks(u32 blockStart, u32 numBlocks, u8 *buffer); @@ -88,8 +90,8 @@ void ObjCharTransfer_Init(ObjCharTransferTemplate *template) { void ObjCharTransfer_InitEx(ObjCharTransferTemplate *template, GXOBJVRamModeChar modeMain, GXOBJVRamModeChar modeSub) { if (sObjCharTransferTasksManager == NULL) { - sObjCharTransferTasksManager = AllocFromHeap(template->heapId, sizeof(struct ObjCharTransferTasksManager)); - MI_CpuClear32(sObjCharTransferTasksManager, sizeof(struct ObjCharTransferTasksManager)); + sObjCharTransferTasksManager = AllocFromHeap(template->heapId, sizeof(ObjCharTransferTasksManager)); + MI_CpuClear32(sObjCharTransferTasksManager, sizeof(ObjCharTransferTasksManager)); sObjCharTransferTasksManager->max = template->maxTasks; sObjCharTransferTasksManager->tasks = (ObjCharTransferTask *)AllocFromHeap(template->heapId, sizeof(ObjCharTransferTask) * sObjCharTransferTasksManager->max); for (int i = 0; i < template->maxTasks; ++i) { @@ -540,7 +542,7 @@ static void reserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE vram, u32 static void ObjCharTransferTask_G2dLoadImageMapping(ObjCharTransferTask *task) { NNS_G2dInitImageProxy(&task->imageProxy); - if (task->vram != NNS_G2D_VRAM_TYPE_BOTH) { + if (task->vram != NNS_G2D_VRAM_TYPE_2DBOTH) { ObjCharTransferTask_G2dLoadImageMappingByScreen(task, task->vram); } else { ObjCharTransferTask_G2dLoadImageMappingByScreen(task, NNS_G2D_VRAM_TYPE_2DMAIN); @@ -572,7 +574,7 @@ static void ObjCharTransferTask_G2dLoadImageMappingByScreen(ObjCharTransferTask static void ObjCharTransferTask_G2dLoadImageMappingVramTransfer(ObjCharTransferTask *task) { NNS_G2dInitImageProxy(&task->imageProxy); - if (task->vram != NNS_G2D_VRAM_TYPE_BOTH) { + if (task->vram != NNS_G2D_VRAM_TYPE_2DBOTH) { ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(task, task->vram); } else { ObjCharTransferTask_G2dLoadImageMappingVramTransferByScreen(task, NNS_G2D_VRAM_TYPE_2DMAIN); From 076a538c7c8ecc3e67a87a786d6707aaa668a971 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 10 May 2024 17:41:53 -0400 Subject: [PATCH 14/17] forgot i'd typedeffed the struct in the header lmao --- src/obj_char_transfer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/obj_char_transfer.c b/src/obj_char_transfer.c index f475142df3..ed8a15c734 100644 --- a/src/obj_char_transfer.c +++ b/src/obj_char_transfer.c @@ -26,7 +26,7 @@ typedef struct ObjCharTransferTask { u32 sizeSub; } ObjCharTransferTask; -typedef struct ObjCharTransferTasksManager { +struct ObjCharTransferTasksManager { ObjCharTransferTask *tasks; int max; int num; @@ -42,7 +42,7 @@ typedef struct ObjCharTransferTasksManager { u32 blockSizeSub; u8 *blockBufMain; u8 *blockBufSub; -} ObjCharTransferTasksManager; +}; ObjCharTransferTasksManager *sObjCharTransferTasksManager; From 9607353761b5623ccefff927786fc1cb7a041e7b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 May 2024 18:43:43 -0400 Subject: [PATCH 15/17] Fine, have your darn prefix! --- include/constants/global.h | 9 +------- include/constants/sdk_extras.h | 17 ++++++++++++++ lib/include/nnsys.h | 2 ++ src/obj_char_transfer.c | 42 +++++++++++++++++----------------- 4 files changed, 41 insertions(+), 29 deletions(-) create mode 100644 include/constants/sdk_extras.h diff --git a/include/constants/global.h b/include/constants/global.h index 5b73c244f4..13247e8f32 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -4,6 +4,7 @@ #include "constants/gx.h" #include "constants/charcode.h" #include "constants/global.fieldmap.h" +#include "constants/sdk_extras.h" #define PLAYER_NAME_LENGTH 7 #define POKEMON_NAME_LENGTH 10 @@ -13,14 +14,6 @@ #define PARTY_SIZE 6 -// alias -#ifndef PM_ASM -// NNS_G2D_VRAM_TYPE_3DMAIN -#define NNS_G2D_VRAM_TYPE_NEITHER ((NNS_G2D_VRAM_TYPE)0) -// NNS_G2D_VRAM_TYPE_MAX -#define NNS_G2D_VRAM_TYPE_2DBOTH ((NNS_G2D_VRAM_TYPE)(NNS_G2D_VRAM_TYPE_2DMAIN|NNS_G2D_VRAM_TYPE_2DSUB)) -#endif //PM_ASM - // move this to msl header? #define S16_MAX 32767 #define U32_MAX 4294967292 diff --git a/include/constants/sdk_extras.h b/include/constants/sdk_extras.h new file mode 100644 index 0000000000..d4ab4619df --- /dev/null +++ b/include/constants/sdk_extras.h @@ -0,0 +1,17 @@ +#ifndef POKEHEARTGOLD_CONSTANTS_SDK_EXTRAS_H +#define POKEHEARTGOLD_CONSTANTS_SDK_EXTRAS_H + +#include + +// Header for constants that play the role of SDK defines but are not actually provided by any SDK +// Any define that should be typed, must be gated behind defined(PM_ASM) + +// alias +#ifndef PM_ASM +// NNS_G2D_VRAM_TYPE_3DMAIN +#define NNS_G2D_VRAM_TYPE_NEITHER ((NNS_G2D_VRAM_TYPE)0) +// NNS_G2D_VRAM_TYPE_MAX +#define NNS_G2D_VRAM_TYPE_2DBOTH ((NNS_G2D_VRAM_TYPE)(NNS_G2D_VRAM_TYPE_2DMAIN|NNS_G2D_VRAM_TYPE_2DSUB)) +#endif //PM_ASM + +#endif //POKEHEARTGOLD_CONSTANTS_SDK_EXTRAS_H diff --git a/lib/include/nnsys.h b/lib/include/nnsys.h index ee210c14e6..c2e254cc17 100644 --- a/lib/include/nnsys.h +++ b/lib/include/nnsys.h @@ -1,6 +1,8 @@ #ifndef NNSYS_H_ #define NNSYS_H_ +#include + #include #include #include diff --git a/src/obj_char_transfer.c b/src/obj_char_transfer.c index ed8a15c734..6eb8b8ec4d 100644 --- a/src/obj_char_transfer.c +++ b/src/obj_char_transfer.c @@ -47,7 +47,7 @@ struct ObjCharTransferTasksManager { ObjCharTransferTasksManager *sObjCharTransferTasksManager; static BOOL ObjCharTransfer_TaskExistsByID(int resId); -static void resetAllTransferTasks(void); +static void ObjCharTransferInternal_ResetAllTransferTasks(void); static void ObjCharTransferTask_Init(ObjCharTransferTask *task); static BOOL ObjCharTransferTask_InitFromTemplate(const ObjCharTransferTaskTemplate *template, ObjCharTransferTask *task); static BOOL ObjCharTransferTask_ReserveAndTransfer(ObjCharTransferTask *task); @@ -58,9 +58,9 @@ static void ObjCharTransferTask_Reset(ObjCharTransferTask *task); static ObjCharTransferTask *ObjCharTransfer_GetTaskByID(int resId); static GXOBJVRamModeChar ObjCharTransferTask_SetMappingTypeFromHW(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); static void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub); -static BOOL getBlockNumAndFreeSpaceForTransfer(int vram, u32 *pOffsetMain, u32 *pOffsetSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match +static BOOL ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(int vram, u32 *pOffsetMain, u32 *pOffsetSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub); // a0 should be NNS_G2D_VRAM_TYPE but needs to be int in order to match static void ObjCharTransferTask_UpdateBaseAddrs(ObjCharTransferTask *task, u32 offsetMain, u32 offsetSub); -static void reserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 sizeMain, u32 sizeSub); +static void ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 sizeMain, u32 sizeSub); static void ObjCharTransferTask_G2dLoadImageMapping(ObjCharTransferTask *task); static void ObjCharTransferTask_G2dLoadImageMappingByScreen(ObjCharTransferTask *task, NNS_G2D_VRAM_TYPE vram); static void ObjCharTransferTask_G2dLoadImageMappingVramTransfer(ObjCharTransferTask *task); @@ -82,7 +82,7 @@ static int ObjCharTransfer_GetBlockMemOffset(int blockNum, int blockSize); static BOOL ObjCharTransfer_TryGetDestVramOffsets(u32 size, NNS_G2D_VRAM_TYPE vram, u32 *pOffsetMain, u32 *pOffsetSub); static void ObjCharTransfer_ReserveVramSpace(u32 size, NNS_G2D_VRAM_TYPE vram); static void ObjCharTransfer_BitPositionToByteAndBitIndexPair(int arrayBitIndex, u32 *byteIndex, u8 *bitIndex); -static void boundsFixOffsetAndSize(u32 baseOffset, u32 curOffset, u32 size, int *correctedOffset, int *correctedSize); +static void ObjCharTransferInternal_BoundsFixOffsetAndSize(u32 baseOffset, u32 curOffset, u32 size, int *correctedOffset, int *correctedSize); void ObjCharTransfer_Init(ObjCharTransferTemplate *template) { ObjCharTransfer_InitEx(template, GX_GetOBJVRamModeChar(), GXS_GetOBJVRamModeChar()); @@ -111,7 +111,7 @@ void ObjCharTransfer_Destroy(void) { if (sObjCharTransferTasksManager != NULL) { ObjCharTransfer_FreeBlockTransferBuffer(sObjCharTransferTasksManager->blockBufMain); ObjCharTransfer_FreeBlockTransferBuffer(sObjCharTransferTasksManager->blockBufSub); - resetAllTransferTasks(); + ObjCharTransferInternal_ResetAllTransferTasks(); FreeToHeap(sObjCharTransferTasksManager->tasks); FreeToHeap(sObjCharTransferTasksManager); sObjCharTransferTasksManager = NULL; @@ -130,14 +130,14 @@ void ObjCharTransfer_SetReservedRegion(u32 offset, u32 size, NNS_G2D_VRAM_TYPE v int newOffset; int newSize; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { - boundsFixOffsetAndSize(sObjCharTransferTasksManager->freeSizeMain, offset, size, &newOffset, &newSize); + ObjCharTransferInternal_BoundsFixOffsetAndSize(sObjCharTransferTasksManager->freeSizeMain, offset, size, &newOffset, &newSize); if (newSize > 0) { - reserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE_2DMAIN, newOffset, 0, newSize, 0); + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE_2DMAIN, newOffset, 0, newSize, 0); } } else { - boundsFixOffsetAndSize(sObjCharTransferTasksManager->freeSizeSub, offset, size, &newOffset, &newSize); + ObjCharTransferInternal_BoundsFixOffsetAndSize(sObjCharTransferTasksManager->freeSizeSub, offset, size, &newOffset, &newSize); if (newSize > 0) { - reserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE_2DSUB, 0, newOffset, 0, newSize); + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE_2DSUB, 0, newOffset, 0, newSize); } } } @@ -220,7 +220,7 @@ void ObjCharTransfer_ResetTransferTasksByResID(int resId) { } } -static void resetAllTransferTasks(void) { +static void ObjCharTransferInternal_ResetAllTransferTasks(void) { for (int i = 0; i < sObjCharTransferTasksManager->max; ++i) { if (sObjCharTransferTasksManager->tasks[i].state != OBJ_CHAR_TRANSFER_TASK_INIT) { ObjCharTransferTask_Reset(&sObjCharTransferTasksManager->tasks[i]); @@ -249,7 +249,7 @@ NNSG2dImageProxy *ObjCharTransfer_ResizeTaskByResID_GetProxyPtr(int resId, u32 s u32 offsetSub; u32 newSizeMain; u32 newSizeSub; - getBlockNumAndFreeSpaceForTransfer(task->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); + ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(task->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); if (task->state == OBJ_CHAR_TRANSFER_TASK_COPYABLE) { return NULL; } @@ -259,7 +259,7 @@ NNSG2dImageProxy *ObjCharTransfer_ResizeTaskByResID_GetProxyPtr(int resId, u32 s task->sizeMain = newSizeMain; task->sizeSub = newSizeSub; ObjCharTransferTask_G2dLoadImageMappingVramTransfer(task); - reserveTransferBlocksByVramOffsetAndSize(task->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(task->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); return &task->imageProxy; } @@ -288,13 +288,13 @@ NNSG2dImageProxy *ObjCharTransfer_CopyTransferTaskByProxyPtr(NNSG2dImageProxy *p size = copiedTask->sizeSub; } - getBlockNumAndFreeSpaceForTransfer(copiedTask->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); + ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(copiedTask->vram, &offsetMain, &offsetSub, size, &newSizeMain, &newSizeSub); ObjCharTransferTask_UpdateBaseAddrs(copiedTask, offsetMain, offsetSub); copiedTask->needResetBlockTransferFlags = TRUE; copiedTask->sizeMain = newSizeMain; copiedTask->sizeSub = newSizeSub; ObjCharTransferTask_G2dLoadImageMappingVramTransfer(copiedTask); - reserveTransferBlocksByVramOffsetAndSize(copiedTask->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(copiedTask->vram, offsetMain, offsetSub, newSizeMain, newSizeSub); return &copiedTask->imageProxy; } @@ -334,9 +334,9 @@ BOOL sub_02021AC8(u32 size, BOOL a1, NNS_G2D_VRAM_TYPE vram, UnkStruct_02021AC8 a3->unk_0A = FALSE; } } else { - ret = getBlockNumAndFreeSpaceForTransfer(vram, &offsetMain, &offsetSub, size, &sizeMain, &sizeSub); + ret = ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(vram, &offsetMain, &offsetSub, size, &sizeMain, &sizeSub); if (ret) { - reserveTransferBlocksByVramOffsetAndSize(vram, offsetMain, offsetSub, sizeMain, sizeSub); + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(vram, offsetMain, offsetSub, sizeMain, sizeSub); a3->vram = vram; if (vram == NNS_G2D_VRAM_TYPE_2DMAIN) { a3->size = sizeMain; @@ -448,7 +448,7 @@ static BOOL ObjCharTransferTask_ReserveFromTail(ObjCharTransferTask *task) { u32 offsetSub; u32 sizeMain; u32 sizeSub; - if (!getBlockNumAndFreeSpaceForTransfer(task->vram, &offsetMain, &offsetSub, task->charData->szByte, &sizeMain, &sizeSub)) { + if (!ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(task->vram, &offsetMain, &offsetSub, task->charData->szByte, &sizeMain, &sizeSub)) { return FALSE; } ObjCharTransferTask_UpdateBaseAddrs(task, offsetMain, offsetSub); @@ -456,7 +456,7 @@ static BOOL ObjCharTransferTask_ReserveFromTail(ObjCharTransferTask *task) { task->sizeMain = sizeMain; task->sizeSub = sizeSub; ObjCharTransferTask_G2dLoadImageMapping(task); - reserveTransferBlocksByVramOffsetAndSize(task->vram, offsetMain, offsetSub, sizeMain, sizeSub); + ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(task->vram, offsetMain, offsetSub, sizeMain, sizeSub); return TRUE; } @@ -494,7 +494,7 @@ static void ObjCharTransferTask_SetBaseAddrs(ObjCharTransferTask *task, u32 offs } } -static BOOL getBlockNumAndFreeSpaceForTransfer(int vram, u32 *blockNumMain, u32 *blockNumSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub) { +static BOOL ObjCharTransferInternal_GetBlockNumAndFreeSpaceForTransfer(int vram, u32 *blockNumMain, u32 *blockNumSub, u32 size, u32 *freeSpaceMain, u32 *freeSpaceSub) { if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { *freeSpaceMain = ObjCharTransfer_AlignToBlock(size, sObjCharTransferTasksManager->blockSizeMain, TRUE); u32 numBlocksUsed = ObjCharTransfer_CalcBlockNumLimit(*freeSpaceMain, sObjCharTransferTasksManager->blockSizeMain); @@ -527,7 +527,7 @@ static void ObjCharTransferTask_UpdateBaseAddrs(ObjCharTransferTask *task, u32 o } } -static void reserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 sizeMain, u32 sizeSub) { +static void ObjCharTransferInternal_ReserveTransferBlocksByVramOffsetAndSize(NNS_G2D_VRAM_TYPE vram, u32 offsetMain, u32 offsetSub, u32 sizeMain, u32 sizeSub) { if (vram & NNS_G2D_VRAM_TYPE_2DMAIN) { u32 numBlocks = ObjCharTransfer_CalcBlockNumLimit(sizeMain, sObjCharTransferTasksManager->blockSizeMain); u32 blockStart = ObjCharTransfer_CalcBlockNumLimit(offsetMain, sObjCharTransferTasksManager->blockSizeMain); @@ -863,7 +863,7 @@ static void ObjCharTransfer_BitPositionToByteAndBitIndexPair(int arrayBitIndex, *bitIndex = arrayBitIndex & 7; } -static void boundsFixOffsetAndSize(u32 baseOffset, u32 curOffset, u32 size, int *correctedOffset, int *correctedSize) { +static void ObjCharTransferInternal_BoundsFixOffsetAndSize(u32 baseOffset, u32 curOffset, u32 size, int *correctedOffset, int *correctedSize) { *correctedOffset = curOffset - baseOffset; if (*correctedOffset < 0) { *correctedSize = size + *correctedOffset; From 0e26345c506b1100bb48ed5cc5f824c88cd7aee7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 20 May 2024 14:49:03 -0400 Subject: [PATCH 16/17] compensate for /actions/runner-images/issues/9679 --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 47d8bbaa48..228093db55 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,10 +22,11 @@ jobs: steps: - name: Update and Install Software run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y sudo apt update sudo ACCEPT_EULA=Y apt -y --fix-missing --allow-downgrades upgrade sudo apt -y --allow-downgrades install g++-10-multilib linux-libc-dev binutils-arm-none-eabi p7zip-full pkg-config libpugixml-dev ppa-purge - sudo ppa-purge -y ppa:ubuntu-toolchain-r/test + sudo ppa-purge -y ppa:ubuntu-toolchain-r/test || true sudo dpkg --add-architecture i386 sudo mkdir -pm755 /etc/apt/keyrings sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key From 2431e23fa6810f91a8771ae14b6ac55c05f7c1c0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 May 2024 19:34:17 -0400 Subject: [PATCH 17/17] fix building --- include/constants/sdk_extras.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/include/constants/sdk_extras.h b/include/constants/sdk_extras.h index d4ab4619df..5aa35de4d3 100644 --- a/include/constants/sdk_extras.h +++ b/include/constants/sdk_extras.h @@ -1,13 +1,12 @@ #ifndef POKEHEARTGOLD_CONSTANTS_SDK_EXTRAS_H #define POKEHEARTGOLD_CONSTANTS_SDK_EXTRAS_H -#include - // Header for constants that play the role of SDK defines but are not actually provided by any SDK // Any define that should be typed, must be gated behind defined(PM_ASM) // alias #ifndef PM_ASM +#include // NNS_G2D_VRAM_TYPE_3DMAIN #define NNS_G2D_VRAM_TYPE_NEITHER ((NNS_G2D_VRAM_TYPE)0) // NNS_G2D_VRAM_TYPE_MAX