From 6fca01e85cbd692fe3697cbce9ca2457f1fae82b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Calixte?= Date: Sat, 28 Aug 2021 22:56:17 +0200 Subject: remaining functions --- arm9/arm9.lsf | 1 - arm9/asm/unk_02006D98.s | 1736 ----------------------- arm9/global.inc | 6 - arm9/lib/libnns/include/NNS_g2d.h | 2 + arm9/modules/63/include/mod63_021DB450.h | 6 +- arm9/src/unk_02006D98.c | 2224 ++++++++++++++++++++++++++++++ arm9/src/unk_02006D98_c.c | 1524 -------------------- 7 files changed, 2230 insertions(+), 3269 deletions(-) delete mode 100644 arm9/asm/unk_02006D98.s create mode 100644 arm9/src/unk_02006D98.c delete mode 100644 arm9/src/unk_02006D98_c.c diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 0e976777..04756a55 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -21,7 +21,6 @@ Static arm9 Object overlay_manager.o Object filesystem.o Object gf_gfx_loader.o - Object unk_02006D98_c.o Object unk_02006D98.o Object unk_02008AA4.o Object unk_02008DEC.o diff --git a/arm9/asm/unk_02006D98.s b/arm9/asm/unk_02006D98.s deleted file mode 100644 index 5359b45e..00000000 --- a/arm9/asm/unk_02006D98.s +++ /dev/null @@ -1,1736 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern UNK_020ECD4C - .extern FX_SinCosTable_ - - .section .rodata - - - - - - - - - - - - .section .data - - - .text - - - - - thumb_func_start FUN_02007E40 -FUN_02007E40: ; 0x02007E40 - push {r4-r5} - ldr r5, [r0, #0x54] - mov r4, #0x2 - orr r4, r5 - str r4, [r0, #0x54] - add r4, r0, #0x0 - add r4, #0x44 - strb r1, [r4, #0x0] - add r1, r0, #0x0 - add r1, #0x45 - strb r2, [r1, #0x0] - add r1, r0, #0x0 - add r1, #0x46 - strb r3, [r1, #0x0] - ldr r1, [sp, #0x8] - add r0, #0x47 - strb r1, [r0, #0x0] - pop {r4-r5} - bx lr - .balign 4 - - thumb_func_start FUN_02007E68 -FUN_02007E68: ; 0x02007E68 - push {r4-r5} - mov r4, #0x1 - ldr r5, [r0, #0x54] - lsl r4, r4, #0xc - orr r4, r5 - str r4, [r0, #0x54] - add r4, r0, #0x0 - add r4, #0x48 - strb r1, [r4, #0x0] - add r1, r0, #0x0 - add r1, #0x49 - strb r2, [r1, #0x0] - add r1, r0, #0x0 - mov r2, #0x0 - add r1, #0x4a - strb r2, [r1, #0x0] - add r1, r0, #0x0 - add r1, #0x4b - strb r3, [r1, #0x0] - ldr r1, [sp, #0x8] - str r1, [r0, #0x4c] - pop {r4-r5} - bx lr - .balign 4 - - thumb_func_start FUN_02007E98 -FUN_02007E98: ; 0x02007E98 - push {r4-r7} - add r4, r0, #0x0 - add r0, r1, #0x0 - add r5, r2, #0x0 - lsl r0, r0, #0x18 - lsr r6, r0, #0x18 - lsl r0, r5, #0x18 - lsr r5, r0, #0x18 - lsl r0, r3, #0x18 - ldr r2, [sp, #0x10] - mov r1, #0x0 - lsr r0, r0, #0x18 -_02007EB0: - ldr r3, [r4, #0x0] - lsl r3, r3, #0x1f - lsr r3, r3, #0x1f - beq _02007EDE - mov r3, #0x1 - ldr r7, [r4, #0x54] - lsl r3, r3, #0xc - orr r3, r7 - str r3, [r4, #0x54] - add r3, r4, #0x0 - add r3, #0x48 - strb r6, [r3, #0x0] - add r3, r4, #0x0 - add r3, #0x49 - add r7, r4, #0x0 - strb r5, [r3, #0x0] - add r7, #0x4a - mov r3, #0x0 - strb r3, [r7, #0x0] - add r3, r4, #0x0 - add r3, #0x4b - strb r0, [r3, #0x0] - str r2, [r4, #0x4c] -_02007EDE: - add r1, r1, #0x1 - add r4, #0x98 - cmp r1, #0x4 - blt _02007EB0 - pop {r4-r7} - bx lr - .balign 4 - - thumb_func_start FUN_02007EEC -FUN_02007EEC: ; 0x02007EEC - ldr r2, [r0, #0x54] - ldr r1, _02007F1C ; =0xFFFFEFFF - and r1, r2 - str r1, [r0, #0x54] - add r1, r0, #0x0 - mov r2, #0x0 - add r1, #0x48 - strb r2, [r1, #0x0] - add r1, r0, #0x0 - add r1, #0x49 - strb r2, [r1, #0x0] - add r1, r0, #0x0 - add r1, #0x4a - strb r2, [r1, #0x0] - add r1, r0, #0x0 - add r1, #0x4b - strb r2, [r1, #0x0] - str r2, [r0, #0x4c] - mov r1, #0x1 - ldr r2, [r0, #0x0] - lsl r1, r1, #0x8 - orr r1, r2 - str r1, [r0, #0x0] - bx lr - .balign 4 -_02007F1C: .word 0xFFFFEFFF - - thumb_func_start FUN_02007F20 -FUN_02007F20: ; 0x02007F20 - ldr r0, [r0, #0x54] - lsl r0, r0, #0x13 - lsr r0, r0, #0x1f - cmp r0, #0x1 - bne _02007F2E - mov r0, #0x1 - bx lr -_02007F2E: - mov r0, #0x0 - bx lr - .balign 4 - - thumb_func_start FUN_02007F34 -FUN_02007F34: ; 0x02007F34 - mov r2, #0x28 - sub r2, r2, r1 - mov r1, #0x36 - ldrsh r1, [r0, r1] - mul r1, r2 - asr r1, r1, #0x8 - sub r1, r2, r1 - strh r1, [r0, #0x2e] - bx lr - .balign 4 - - thumb_func_start FUN_02007F48 -FUN_02007F48: ; 0x02007F48 - push {r4-r7} - add r1, r0, #0x0 - add r1, #0x58 - ldrb r1, [r1, #0x0] - add r6, r0, #0x0 - add r6, #0x59 - cmp r1, #0x0 - beq _0200800A - add r1, r0, #0x0 - add r1, #0x5a - ldrb r1, [r1, #0x0] - cmp r1, #0x0 - bne _02007FFE - ldrb r1, [r6, #0x0] - add r1, r1, #0x1 - strb r1, [r6, #0x0] - ldrb r3, [r6, #0x0] - mov r1, #0x84 - lsl r4, r3, #0x1 - add r2, r0, r4 - ldrsb r2, [r2, r1] - sub r1, #0x85 - cmp r2, r1 - bge _02007FC6 - mov r2, #0x0 - sub r1, r2, #0x2 -_02007F7C: - add r4, r0, r3 - add r4, #0x5c - ldrb r4, [r4, #0x0] - add r3, r0, r3 - add r3, #0x5c - add r4, r4, #0x1 - strb r4, [r3, #0x0] - ldrb r5, [r6, #0x0] - lsl r3, r5, #0x1 - add r4, r0, r3 - add r3, r4, #0x0 - add r7, r0, r5 - add r3, #0x85 - add r7, #0x5c - ldrb r3, [r3, #0x0] - ldrb r7, [r7, #0x0] - cmp r3, r7 - beq _02007FA4 - cmp r3, #0x0 - bne _02007FAE -_02007FA4: - add r3, r0, r5 - add r3, #0x5c - strb r2, [r3, #0x0] - add r6, r6, #0x1 - b _02007FB6 -_02007FAE: - mov r3, #0x84 - ldrsb r3, [r4, r3] - sub r3, r1, r3 - strb r3, [r6, #0x0] -_02007FB6: - ldrb r3, [r6, #0x0] - mov r5, #0x84 - lsl r4, r3, #0x1 - add r7, r0, r4 - ldrsb r7, [r7, r5] - sub r5, #0x85 - cmp r7, r5 - blt _02007F7C -_02007FC6: - add r2, r0, r4 - mov r1, #0x84 - ldrsb r2, [r2, r1] - sub r1, #0x85 - cmp r2, r1 - beq _02007FD6 - cmp r3, #0xa - blo _02007FE6 -_02007FD6: - add r1, r0, #0x0 - mov r2, #0x0 - add r1, #0x5b - strb r2, [r1, #0x0] - add r0, #0x58 - strb r2, [r0, #0x0] - pop {r4-r7} - bx lr -_02007FE6: - add r1, r0, #0x0 - add r1, #0x5b - strb r2, [r1, #0x0] - ldrb r1, [r6, #0x0] - lsl r1, r1, #0x1 - add r1, r0, r1 - add r1, #0x85 - ldrb r1, [r1, #0x0] - add r0, #0x5a - strb r1, [r0, #0x0] - pop {r4-r7} - bx lr -_02007FFE: - add r1, r0, #0x0 - add r1, #0x5a - ldrb r1, [r1, #0x0] - add r0, #0x5a - sub r1, r1, #0x1 - strb r1, [r0, #0x0] -_0200800A: - pop {r4-r7} - bx lr - .balign 4 - - thumb_func_start FUN_02008010 -FUN_02008010: ; 0x02008010 - mov r2, #0x1 - strb r2, [r0, #0x0] - mov r3, #0x0 - strb r3, [r0, #0x2] - ldrsb r2, [r1, r3] - strb r2, [r0, #0x1] - ldrb r2, [r1, #0x1] - strb r2, [r0, #0x3] - str r1, [r0, #0x10] - add r2, r3, #0x0 -_02008024: - add r1, r0, r3 - add r3, r3, #0x1 - strb r2, [r1, #0x4] - cmp r3, #0xa - blt _02008024 - bx lr - - thumb_func_start FUN_02008030 -FUN_02008030: ; 0x02008030 - push {r4-r7} - ldrb r1, [r0, #0x0] - cmp r1, #0x0 - beq _020080C6 - add r3, r0, #0x2 - ldr r4, [r0, #0x10] - cmp r1, #0x0 - beq _020080C0 - ldrb r1, [r0, #0x3] - cmp r1, #0x0 - bne _020080BC - ldrb r1, [r3, #0x0] - add r1, r1, #0x1 - strb r1, [r3, #0x0] - ldrb r2, [r3, #0x0] - mov r1, #0x0 - mvn r1, r1 - lsl r5, r2, #0x1 - ldrsb r6, [r4, r5] - cmp r6, r1 - bge _02008098 - mov r1, #0x0 -_0200805C: - add r5, r0, r2 - ldrb r2, [r5, #0x4] - add r2, r2, #0x1 - strb r2, [r5, #0x4] - ldrb r2, [r3, #0x0] - add r5, r0, r2 - lsl r2, r2, #0x1 - add r2, r4, r2 - ldrb r7, [r2, #0x1] - ldrb r6, [r5, #0x4] - cmp r7, r6 - beq _02008078 - cmp r7, #0x0 - bne _0200807E -_02008078: - strb r1, [r5, #0x4] - add r3, r3, #0x1 - b _0200808A -_0200807E: - mov r5, #0x0 - ldrsb r5, [r2, r5] - mov r2, #0x1 - mvn r2, r2 - sub r2, r2, r5 - strb r2, [r3, #0x0] -_0200808A: - ldrb r2, [r3, #0x0] - mov r6, #0x0 - mvn r6, r6 - lsl r5, r2, #0x1 - ldrsb r7, [r4, r5] - cmp r7, r6 - blt _0200805C -_02008098: - ldrsb r5, [r4, r5] - mov r1, #0x0 - mvn r1, r1 - cmp r5, r1 - beq _020080A6 - cmp r2, #0xa - blo _020080AE -_020080A6: - mov r1, #0x0 - strb r1, [r0, #0x1] - strb r1, [r0, #0x0] - b _020080C0 -_020080AE: - strb r5, [r0, #0x1] - ldrb r1, [r3, #0x0] - lsl r1, r1, #0x1 - add r1, r4, r1 - ldrb r1, [r1, #0x1] - strb r1, [r0, #0x3] - b _020080C0 -_020080BC: - sub r1, r1, #0x1 - strb r1, [r0, #0x3] -_020080C0: - ldrb r0, [r0, #0x1] - pop {r4-r7} - bx lr -_020080C6: - mov r0, #0x0 - mvn r0, r0 - pop {r4-r7} - bx lr - .balign 4 - - thumb_func_start FUN_020080D0 -FUN_020080D0: ; 0x020080D0 - ldr r2, [r0, #0x0] - mov r1, #0x80 - orr r2, r1 - add r1, #0x80 - orr r1, r2 - str r1, [r0, #0x0] - bx lr - .balign 4 - - thumb_func_start FUN_020080E0 -FUN_020080E0: ; 0x020080E0 - push {r3-r4} - add r2, r0, #0x0 - add r3, r2, #0x0 - add r4, r2, #0x4 - add r3, #0x14 - ldmia r4!, {r0-r1} - stmia r3!, {r0-r1} - ldmia r4!, {r0-r1} - stmia r3!, {r0-r1} - add r0, r2, #0x0 - add r0, #0x6c - ldrh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x78 - strh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x6e - ldrh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x7a - strh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x70 - ldrh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x7c - strh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x72 - ldrh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x7e - strh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x74 - ldrh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x80 - strh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x76 - ldrh r0, [r0, #0x0] - add r2, #0x82 - strh r0, [r2, #0x0] - pop {r3-r4} - bx lr - - thumb_func_start FUN_0200813C -FUN_0200813C: ; 0x0200813C - push {r3-r4} - add r2, r0, #0x0 - add r4, r2, #0x0 - add r4, #0x14 - add r3, r2, #0x4 - ldmia r4!, {r0-r1} - stmia r3!, {r0-r1} - ldmia r4!, {r0-r1} - stmia r3!, {r0-r1} - add r0, r2, #0x0 - add r0, #0x78 - ldrh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x6c - strh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x7a - ldrh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x6e - strh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x7c - ldrh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x70 - strh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x7e - ldrh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x72 - strh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x80 - ldrh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x74 - strh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x82 - ldrh r1, [r0, #0x0] - add r0, r2, #0x0 - add r0, #0x76 - strh r1, [r0, #0x0] - ldr r1, [r2, #0x0] - mov r0, #0x80 - orr r1, r0 - add r0, #0x80 - orr r0, r1 - str r0, [r2, #0x0] - pop {r3-r4} - bx lr - .balign 4 - - thumb_func_start FUN_020081A8 -FUN_020081A8: ; 0x020081A8 - mov r3, #0xa7 - lsl r3, r3, #0x2 - str r1, [r0, r3] - add r1, r3, #0x4 - str r2, [r0, r1] - bx lr - - thumb_func_start FUN_020081B4 -FUN_020081B4: ; 0x020081B4 - mov r3, #0xa9 - lsl r3, r3, #0x2 - str r1, [r0, r3] - add r1, r3, #0x4 - str r2, [r0, r1] - bx lr - - thumb_func_start FUN_020081C0 -FUN_020081C0: ; 0x020081C0 - add r0, r0, #0x4 - bx lr - - thumb_func_start FUN_020081C4 -FUN_020081C4: ; 0x020081C4 - push {r4, lr} - add r4, r0, #0x0 - ldr r0, _02008254 ; =0x000002E1 - ldrb r1, [r4, r0] - cmp r1, #0x0 - beq _02008212 - mov r1, #0x0 - strb r1, [r4, r0] - sub r0, #0x81 - add r0, r4, r0 - bl NNS_G2dInitImageProxy - mov r3, #0xae - lsl r3, r3, #0x2 - mov r1, #0x20 - strh r1, [r4, r3] - add r0, r3, #0x2 - strh r1, [r4, r0] - add r0, r3, #0x0 - sub r0, #0x18 - ldr r1, [r4, r0] - add r0, r3, #0x0 - add r0, #0x10 - str r1, [r4, r0] - add r0, r3, #0x0 - sub r0, #0xc - ldr r1, [r4, r0] - add r0, r3, #0x0 - add r0, #0x14 - str r1, [r4, r0] - add r1, r3, #0x0 - sub r1, #0x1c - add r0, r4, r3 - sub r3, #0x58 - ldr r1, [r4, r1] - mov r2, #0x0 - add r3, r4, r3 - bl NNS_G2dLoadImage2DMapping -_02008212: - ldr r0, _02008258 ; =0x000002E2 - ldrb r1, [r4, r0] - cmp r1, #0x0 - beq _02008252 - mov r1, #0x0 - strb r1, [r4, r0] - sub r0, #0x5e - add r0, r4, r0 - bl NNS_G2dInitImagePaletteProxy - mov r3, #0xaa - lsl r3, r3, #0x2 - add r0, r3, #0x0 - ldr r1, [r4, r3] - add r0, #0x30 - str r1, [r4, r0] - add r0, r3, #0x0 - add r0, #0x8 - ldr r1, [r4, r0] - add r0, r3, #0x0 - add r0, #0x34 - str r1, [r4, r0] - add r0, r3, #0x0 - sub r1, r3, #0x4 - add r0, #0x28 - sub r3, #0x24 - ldr r1, [r4, r1] - add r0, r4, r0 - mov r2, #0x0 - add r3, r4, r3 - bl NNS_G2dLoadPalette -_02008252: - pop {r4, pc} - .balign 4 -_02008254: .word 0x000002E1 -_02008258: .word 0x000002E2 - - thumb_func_start FUN_0200825C -FUN_0200825C: ; 0x0200825C - ldr r2, _02008264 ; =0x000002E3 - strb r1, [r0, r2] - bx lr - nop -_02008264: .word 0x000002E3 - - thumb_func_start FUN_02008268 -FUN_02008268: ; 0x02008268 - push {r4, lr} - add r4, r0, #0x0 - bne _02008272 - bl GF_AssertFail -_02008272: - ldr r0, [r4, #0x0] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _0200827E - mov r0, #0x1 - pop {r4, pc} -_0200827E: - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02008284 -FUN_02008284: ; 0x02008284 - mov r2, #0xb9 - lsl r2, r2, #0x2 - ldr r3, [r0, r2] - orr r1, r3 - str r1, [r0, r2] - bx lr - - thumb_func_start FUN_02008290 -FUN_02008290: ; 0x02008290 - push {r3-r4} - mov r3, #0xb9 - lsl r3, r3, #0x2 - mov r2, #0x0 - mvn r2, r2 - ldr r4, [r0, r3] - eor r1, r2 - and r1, r4 - str r1, [r0, r3] - pop {r3-r4} - bx lr - .balign 4 - - thumb_func_start FUN_020082A8 -FUN_020082A8: ; 0x020082A8 - push {r4-r7, lr} - sub sp, #0x5c - add r6, r0, #0x0 - mov r0, #0x0 - str r0, [sp, #0x48] - str r0, [sp, #0x54] - ldr r0, [sp, #0x48] - str r6, [sp, #0x44] - str r0, [sp, #0x38] -_020082BA: - ldr r0, [sp, #0x44] - ldr r1, [r0, #0x0] - lsl r0, r1, #0x1f - lsr r0, r0, #0x1f - beq _020082CA - lsl r0, r1, #0x18 - lsr r0, r0, #0x1f - bne _020082CC -_020082CA: - b _020086C2 -_020082CC: - mov r0, #0x80 - bic r1, r0 - ldr r0, [sp, #0x44] - mov r2, #0xa6 - str r1, [r0, #0x0] - mov r0, #0x1 - str r0, [sp, #0x48] - ldr r0, [sp, #0x44] - ldr r1, [sp, #0x44] - lsl r2, r2, #0x2 - ldrh r0, [r0, #0x4] - ldrh r1, [r1, #0x6] - ldr r2, [r6, r2] - bl AllocAndReadWholeNarcMemberByIdPair - add r1, sp, #0x58 - str r0, [sp, #0x4c] - bl NNS_G2dGetUnpackedCharacterData - ldr r0, [sp, #0x58] - mov r1, #0xaf - ldr r0, [r0, #0x4] - lsl r1, r1, #0x2 - str r0, [r6, r1] - ldr r0, [sp, #0x58] - ldr r2, [r0, #0x8] - add r0, r1, #0x4 - str r2, [r6, r0] - ldr r0, [sp, #0x58] - add r1, #0x8 - ldr r0, [r0, #0xc] - str r0, [r6, r1] - ldr r0, [sp, #0x58] - ldr r0, [r0, #0x14] - str r0, [sp, #0x50] - bl FUN_02008A74 - ldr r0, [sp, #0x44] - ldr r1, [sp, #0x50] - bl FUN_020088EC - ldr r0, [sp, #0x54] - cmp r0, #0x3 - beq _02008326 - b _02008554 -_02008326: - mov r5, #0x0 - add r0, r5, #0x0 - str r5, [sp, #0x14] - str r0, [sp, #0x24] -_0200832E: - ldr r0, [sp, #0x14] - mov r1, #0x4f - sub r2, r1, r0 - mov r0, #0x50 - add r1, r2, #0x0 - mul r1, r0 - ldr r0, [sp, #0x50] - mov r4, #0x0 - add r0, r0, r1 - str r0, [sp, #0x20] - ldr r1, [sp, #0x50] - ldr r0, [sp, #0x24] - add r7, r1, r0 - ldr r0, [sp, #0x20] - str r7, [sp, #0x18] - str r0, [sp, #0x1c] - ldr r0, [sp, #0x14] - sub r0, r0, #0x1 - lsl r0, r0, #0x7 - str r0, [sp, #0x10] -_02008356: - cmp r4, #0x28 - bge _02008442 - ldr r0, [sp, #0x44] - ldr r1, [r0, #0x54] - lsl r0, r1, #0x16 - lsr r0, r0, #0x1f - beq _02008386 - lsl r1, r1, #0x15 - lsr r1, r1, #0x1f - beq _02008386 - mov r0, #0x27 - sub r1, r0, r4 - ldr r0, [sp, #0x1c] - ldrb r0, [r0, r1] - bl FUN_020088D8 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - add r1, r5, r1 - add r1, r4, r1 - add r1, #0x50 - strb r0, [r1, #0x0] - b _0200852E -_02008386: - cmp r0, #0x0 - beq _020083A6 - mov r0, #0x27 - sub r1, r0, r4 - ldr r0, [sp, #0x18] - ldrb r0, [r0, r1] - bl FUN_020088D8 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - add r1, r5, r1 - add r1, r4, r1 - add r1, #0x50 - strb r0, [r1, #0x0] - b _0200852E -_020083A6: - ldr r0, [sp, #0x44] - ldr r0, [r0, #0x54] - lsl r1, r0, #0x15 - lsr r1, r1, #0x1f - beq _020083C4 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r0, [sp, #0x20] - ldr r1, [r6, r1] - ldrb r0, [r0, #0x0] - add r1, r5, r1 - add r1, r4, r1 - add r1, #0x50 - strb r0, [r1, #0x0] - b _0200852E -_020083C4: - lsl r0, r0, #0xf - lsr r0, r0, #0x1c - str r0, [sp, #0xc] - beq _02008430 - ldr r1, [sp, #0xc] - ldr r0, [sp, #0x14] - lsl r1, r1, #0x1 - bl _u32_div_f - cmp r1, #0x0 - beq _020083F4 - mov r0, #0xab - lsl r0, r0, #0x2 - ldr r1, [r6, r0] - ldr r0, [sp, #0x10] - add r0, r0, r1 - add r0, r4, r0 - add r0, #0x50 - add r1, r5, r1 - add r1, r4, r1 - ldrb r0, [r0, #0x0] - add r1, #0x50 - strb r0, [r1, #0x0] - b _0200852E -_020083F4: - ldr r1, [sp, #0xc] - add r0, r4, #0x0 - bl _u32_div_f - cmp r1, #0x0 - beq _02008416 - mov r0, #0xab - lsl r0, r0, #0x2 - ldr r0, [r6, r0] - add r2, r5, r0 - add r0, r2, r4 - add r0, #0x4f - ldrb r1, [r0, #0x0] - add r0, r2, r4 - add r0, #0x50 - strb r1, [r0, #0x0] - b _0200852E -_02008416: - ldrb r1, [r7, #0x0] - mov r0, #0xf - and r1, r0 - lsl r0, r1, #0x4 - orr r0, r1 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - add r1, r5, r1 - add r1, r4, r1 - add r1, #0x50 - strb r0, [r1, #0x0] - b _0200852E -_02008430: - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - ldrb r0, [r7, #0x0] - add r1, r5, r1 - add r1, r4, r1 - add r1, #0x50 - strb r0, [r1, #0x0] - b _0200852E -_02008442: - ldr r0, [sp, #0x44] - ldr r1, [r0, #0x54] - lsl r0, r1, #0x16 - lsr r0, r0, #0x1f - beq _02008472 - lsl r1, r1, #0x15 - lsr r1, r1, #0x1f - beq _02008472 - add r1, r4, #0x0 - sub r1, #0x28 - mov r0, #0x4f - sub r1, r0, r1 - ldr r0, [sp, #0x1c] - ldrb r0, [r0, r1] - bl FUN_020088D8 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - add r1, r5, r1 - add r2, r4, r1 - ldr r1, _020086E8 ; =0x00002828 - strb r0, [r2, r1] - b _0200852E -_02008472: - cmp r0, #0x0 - beq _02008496 - add r1, r4, #0x0 - sub r1, #0x28 - mov r0, #0x4f - sub r1, r0, r1 - ldr r0, [sp, #0x18] - ldrb r0, [r0, r1] - bl FUN_020088D8 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - add r1, r5, r1 - add r2, r4, r1 - ldr r1, _020086E8 ; =0x00002828 - strb r0, [r2, r1] - b _0200852E -_02008496: - ldr r0, [sp, #0x44] - ldr r0, [r0, #0x54] - lsl r1, r0, #0x15 - lsr r1, r1, #0x1f - beq _020084B4 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r0, [sp, #0x20] - ldr r1, [r6, r1] - ldrb r0, [r0, #0x0] - add r1, r5, r1 - add r2, r4, r1 - ldr r1, _020086E8 ; =0x00002828 - strb r0, [r2, r1] - b _0200852E -_020084B4: - lsl r0, r0, #0xf - lsr r0, r0, #0x1c - str r0, [sp, #0x8] - beq _0200851E - ldr r1, [sp, #0x8] - ldr r0, [sp, #0x14] - lsl r1, r1, #0x1 - bl _u32_div_f - cmp r1, #0x0 - beq _020084E4 - mov r0, #0xab - lsl r0, r0, #0x2 - ldr r1, [r6, r0] - ldr r0, [sp, #0x10] - add r0, r0, r1 - add r2, r4, r0 - ldr r0, _020086E8 ; =0x00002828 - add r1, r5, r1 - ldrb r0, [r2, r0] - add r2, r4, r1 - ldr r1, _020086E8 ; =0x00002828 - strb r0, [r2, r1] - b _0200852E -_020084E4: - ldr r1, [sp, #0x8] - add r0, r4, #0x0 - bl _u32_div_f - cmp r1, #0x0 - beq _02008504 - mov r0, #0xab - lsl r0, r0, #0x2 - ldr r0, [r6, r0] - ldr r1, _020086EC ; =0x00002827 - add r0, r5, r0 - add r0, r0, r4 - ldrb r2, [r0, r1] - add r1, r1, #0x1 - strb r2, [r0, r1] - b _0200852E -_02008504: - ldrb r1, [r7, #0x0] - mov r0, #0xf - and r1, r0 - lsl r0, r1, #0x4 - orr r0, r1 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - add r1, r5, r1 - add r2, r4, r1 - ldr r1, _020086E8 ; =0x00002828 - strb r0, [r2, r1] - b _0200852E -_0200851E: - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - ldrb r0, [r7, #0x0] - add r1, r5, r1 - add r2, r4, r1 - ldr r1, _020086E8 ; =0x00002828 - strb r0, [r2, r1] -_0200852E: - ldr r0, [sp, #0x20] - add r4, r4, #0x1 - add r0, r0, #0x1 - add r7, r7, #0x1 - str r0, [sp, #0x20] - cmp r4, #0x50 - bge _0200853E - b _02008356 -_0200853E: - ldr r0, [sp, #0x24] - add r5, #0x80 - add r0, #0x50 - str r0, [sp, #0x24] - ldr r0, [sp, #0x14] - add r0, r0, #0x1 - str r0, [sp, #0x14] - cmp r0, #0x50 - bge _02008552 - b _0200832E -_02008552: - b _020086BC -_02008554: - mov r0, #0x0 - str r0, [sp, #0x0] - str r0, [sp, #0x40] - str r0, [sp, #0x3c] -_0200855C: - ldr r0, [sp, #0x0] - mov r1, #0x4f - sub r2, r1, r0 - mov r0, #0x50 - add r1, r2, #0x0 - mul r1, r0 - ldr r0, [sp, #0x50] - mov r4, #0x0 - add r0, r0, r1 - str r0, [sp, #0x34] - ldr r1, [sp, #0x50] - ldr r0, [sp, #0x3c] - add r7, r1, r0 - ldr r0, [sp, #0x34] - ldr r1, [sp, #0x38] - str r0, [sp, #0x30] - ldr r0, [sp, #0x40] - str r7, [sp, #0x2c] - add r5, r1, r0 - ldr r0, [sp, #0x0] - sub r0, r0, #0x1 - lsl r1, r0, #0x7 - ldr r0, [sp, #0x38] - add r0, r0, r1 - str r0, [sp, #0x28] -_0200858E: - ldr r0, [sp, #0x44] - ldr r1, [r0, #0x54] - lsl r0, r1, #0x16 - lsr r0, r0, #0x1f - beq _020085D6 - lsl r1, r1, #0x15 - lsr r1, r1, #0x1f - beq _020085D6 - cmp r4, #0x28 - bge _020085BA - mov r0, #0x27 - sub r1, r0, r4 - ldr r0, [sp, #0x30] - ldrb r0, [r0, r1] - bl FUN_020088D8 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - add r1, r5, r1 - strb r0, [r4, r1] - b _02008694 -_020085BA: - add r1, r4, #0x0 - sub r1, #0x28 - mov r0, #0x4f - sub r1, r0, r1 - ldr r0, [sp, #0x30] - ldrb r0, [r0, r1] - bl FUN_020088D8 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - add r1, r5, r1 - strb r0, [r4, r1] - b _02008694 -_020085D6: - cmp r0, #0x0 - beq _02008612 - cmp r4, #0x28 - bge _020085F6 - mov r0, #0x27 - sub r1, r0, r4 - ldr r0, [sp, #0x2c] - ldrb r0, [r0, r1] - bl FUN_020088D8 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - add r1, r5, r1 - strb r0, [r4, r1] - b _02008694 -_020085F6: - add r1, r4, #0x0 - sub r1, #0x28 - mov r0, #0x4f - sub r1, r0, r1 - ldr r0, [sp, #0x2c] - ldrb r0, [r0, r1] - bl FUN_020088D8 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - add r1, r5, r1 - strb r0, [r4, r1] - b _02008694 -_02008612: - ldr r0, [sp, #0x44] - ldr r0, [r0, #0x54] - lsl r1, r0, #0x15 - lsr r1, r1, #0x1f - beq _0200862C - ldr r0, [sp, #0x34] - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - ldrb r0, [r0, #0x0] - add r1, r5, r1 - strb r0, [r4, r1] - b _02008694 -_0200862C: - lsl r0, r0, #0xf - lsr r0, r0, #0x1c - str r0, [sp, #0x4] - beq _02008688 - ldr r1, [sp, #0x4] - ldr r0, [sp, #0x0] - lsl r1, r1, #0x1 - bl _u32_div_f - cmp r1, #0x0 - beq _02008654 - mov r0, #0xab - lsl r0, r0, #0x2 - ldr r0, [r6, r0] - ldr r1, [sp, #0x28] - add r1, r1, r0 - ldrb r1, [r4, r1] - add r0, r5, r0 - strb r1, [r4, r0] - b _02008694 -_02008654: - ldr r1, [sp, #0x4] - add r0, r4, #0x0 - bl _u32_div_f - cmp r1, #0x0 - beq _02008672 - mov r0, #0xab - lsl r0, r0, #0x2 - ldr r0, [r6, r0] - add r1, r5, r0 - add r0, r1, r4 - sub r0, r0, #0x1 - ldrb r0, [r0, #0x0] - strb r0, [r1, r4] - b _02008694 -_02008672: - ldrb r1, [r7, #0x0] - mov r0, #0xf - and r1, r0 - lsl r0, r1, #0x4 - orr r0, r1 - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - add r1, r5, r1 - strb r0, [r4, r1] - b _02008694 -_02008688: - mov r1, #0xab - lsl r1, r1, #0x2 - ldr r1, [r6, r1] - ldrb r0, [r7, #0x0] - add r1, r5, r1 - strb r0, [r4, r1] -_02008694: - ldr r0, [sp, #0x34] - add r4, r4, #0x1 - add r0, r0, #0x1 - add r7, r7, #0x1 - str r0, [sp, #0x34] - cmp r4, #0x50 - bge _020086A4 - b _0200858E -_020086A4: - ldr r0, [sp, #0x40] - add r0, #0x80 - str r0, [sp, #0x40] - ldr r0, [sp, #0x3c] - add r0, #0x50 - str r0, [sp, #0x3c] - ldr r0, [sp, #0x0] - add r0, r0, #0x1 - str r0, [sp, #0x0] - cmp r0, #0x50 - bge _020086BC - b _0200855C -_020086BC: - ldr r0, [sp, #0x4c] - bl FreeToHeap -_020086C2: - ldr r0, [sp, #0x44] - mov r1, #0xa - add r0, #0x98 - str r0, [sp, #0x44] - ldr r0, [sp, #0x38] - lsl r1, r1, #0xa - add r0, r0, r1 - str r0, [sp, #0x38] - ldr r0, [sp, #0x54] - add r0, r0, #0x1 - str r0, [sp, #0x54] - cmp r0, #0x4 - bge _020086DE - b _020082BA -_020086DE: - ldr r1, _020086F0 ; =0x000002E1 - ldr r0, [sp, #0x48] - strb r0, [r6, r1] - add sp, #0x5c - pop {r4-r7, pc} - .balign 4 -_020086E8: .word 0x00002828 -_020086EC: .word 0x00002827 -_020086F0: .word 0x000002E1 - - thumb_func_start FUN_020086F4 -FUN_020086F4: ; 0x020086F4 - push {r4-r7, lr} - sub sp, #0x1c - add r5, r0, #0x0 - mov r0, #0x0 - str r0, [sp, #0xc] - str r0, [sp, #0x14] - ldr r0, [sp, #0xc] - add r4, r5, #0x0 - str r0, [sp, #0x8] -_02008706: - ldr r1, [r4, #0x0] - lsl r0, r1, #0x1f - lsr r0, r0, #0x1f - beq _020087E0 - lsl r0, r1, #0x17 - lsr r0, r0, #0x1f - beq _020087E0 - ldr r0, _020088CC ; =0xFFFFFEFF - mov r2, #0xa6 - and r0, r1 - str r0, [r4, #0x0] - mov r0, #0x1 - str r0, [sp, #0xc] - lsl r2, r2, #0x2 - ldrh r0, [r4, #0x4] - ldrh r1, [r4, #0x8] - ldr r2, [r5, r2] - bl AllocAndReadWholeNarcMemberByIdPair - add r1, sp, #0x18 - str r0, [sp, #0x10] - bl NNS_G2dGetUnpackedPaletteData - ldr r0, [sp, #0x18] - mov r7, #0x0 - ldr r1, [r0, #0x0] - mov r0, #0x2d - lsl r0, r0, #0x4 - str r1, [r5, r0] - ldr r0, [sp, #0x18] - add r2, r7, #0x0 - ldr r1, [r0, #0xc] - ldr r0, [sp, #0x8] - lsl r3, r0, #0x1 -_0200874A: - mov r6, #0x2b - lsl r6, r6, #0x4 - ldr r6, [r5, r6] - ldrh r0, [r1, #0x0] - add r6, r3, r6 - add r7, r7, #0x1 - strh r0, [r2, r6] - mov r6, #0xad - lsl r6, r6, #0x2 - ldrh r0, [r1, #0x0] - ldr r6, [r5, r6] - add r1, r1, #0x2 - add r6, r3, r6 - strh r0, [r2, r6] - add r2, r2, #0x2 - cmp r7, #0x10 - blt _0200874A - ldr r0, [sp, #0x10] - bl FreeToHeap - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1e - beq _020087E0 - mov r2, #0xa6 - lsl r2, r2, #0x2 - ldr r2, [r5, r2] - mov r0, #0x75 ; NARC_POKETOOL_POKEGRA_OTHERPOKE - mov r1, #0xd4 - bl AllocAndReadWholeNarcMemberByIdPair - add r1, sp, #0x18 - str r0, [sp, #0x4] - bl NNS_G2dGetUnpackedPaletteData - ldr r0, [sp, #0x18] - mov r7, #0xad - ldr r0, [r0, #0xc] - mov r1, #0x0 - lsl r7, r7, #0x2 -_0200879E: - add r6, r4, #0x0 - add r6, #0x6c - ldrh r6, [r6, #0x0] - mov r2, #0x2b - lsl r2, r2, #0x4 - lsl r6, r6, #0x1e - lsr r6, r6, #0x1e - add r6, r6, #0x3 - lsl r6, r6, #0x4 - add r6, r1, r6 - ldrh r3, [r0, #0x0] - ldr r2, [r5, r2] - lsl r6, r6, #0x1 - strh r3, [r2, r6] - add r6, r4, #0x0 - add r6, #0x6c - ldrh r6, [r6, #0x0] - ldrh r3, [r0, #0x0] - ldr r2, [r5, r7] - lsl r6, r6, #0x1e - lsr r6, r6, #0x1e - add r6, r6, #0x3 - lsl r6, r6, #0x4 - add r6, r1, r6 - lsl r6, r6, #0x1 - add r1, r1, #0x1 - add r0, r0, #0x2 - strh r3, [r2, r6] - cmp r1, #0x10 - blt _0200879E - ldr r0, [sp, #0x4] - bl FreeToHeap -_020087E0: - ldr r0, [r4, #0x0] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _020088AE - ldr r0, [r4, #0x54] - lsl r0, r0, #0x13 - lsr r0, r0, #0x1f - beq _020088AE - add r0, r4, #0x0 - add r0, #0x4a - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _020088A0 - mov r0, #0x1 - str r0, [sp, #0xc] - add r0, r4, #0x0 - add r0, #0x4b - ldrb r1, [r0, #0x0] - add r0, r4, #0x0 - add r0, #0x4a - strb r1, [r0, #0x0] - ldr r0, [sp, #0x8] - mov r2, #0xad - lsl r1, r0, #0x1 - ldr r0, [r4, #0x4c] - add r3, r4, #0x0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - lsl r2, r2, #0x2 - str r0, [sp, #0x0] - ldr r0, [r5, r2] - sub r2, r2, #0x4 - add r3, #0x48 - ldr r2, [r5, r2] - add r0, r0, r1 - add r1, r2, r1 - ldrb r3, [r3, #0x0] - mov r2, #0x10 - bl BlendPalette - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1e - beq _02008862 - add r0, r0, #0x3 - lsl r1, r0, #0x5 - ldr r0, [r4, #0x4c] - mov r2, #0xad - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - add r3, r4, #0x0 - lsl r2, r2, #0x2 - str r0, [sp, #0x0] - ldr r0, [r5, r2] - sub r2, r2, #0x4 - add r3, #0x48 - ldr r2, [r5, r2] - add r0, r0, r1 - add r1, r2, r1 - ldrb r3, [r3, #0x0] - mov r2, #0x10 - bl BlendPalette -_02008862: - add r0, r4, #0x0 - add r0, #0x49 - ldrb r1, [r0, #0x0] - add r0, r4, #0x0 - add r0, #0x48 - ldrb r0, [r0, #0x0] - cmp r0, r1 - bne _0200887C - ldr r1, [r4, #0x54] - ldr r0, _020088D0 ; =0xFFFFEFFF - and r0, r1 - str r0, [r4, #0x54] - b _020088AE -_0200887C: - cmp r0, r1 - bls _02008890 - add r0, r4, #0x0 - add r0, #0x48 - ldrb r0, [r0, #0x0] - sub r1, r0, #0x1 - add r0, r4, #0x0 - add r0, #0x48 - strb r1, [r0, #0x0] - b _020088AE -_02008890: - add r0, r4, #0x0 - add r0, #0x48 - ldrb r0, [r0, #0x0] - add r1, r0, #0x1 - add r0, r4, #0x0 - add r0, #0x48 - strb r1, [r0, #0x0] - b _020088AE -_020088A0: - add r0, r4, #0x0 - add r0, #0x4a - ldrb r0, [r0, #0x0] - sub r1, r0, #0x1 - add r0, r4, #0x0 - add r0, #0x4a - strb r1, [r0, #0x0] -_020088AE: - ldr r0, [sp, #0x8] - add r4, #0x98 - add r0, #0x10 - str r0, [sp, #0x8] - ldr r0, [sp, #0x14] - add r0, r0, #0x1 - str r0, [sp, #0x14] - cmp r0, #0x4 - bge _020088C2 - b _02008706 -_020088C2: - ldr r1, _020088D4 ; =0x000002E2 - ldr r0, [sp, #0xc] - strb r0, [r5, r1] - add sp, #0x1c - pop {r4-r7, pc} - .balign 4 -_020088CC: .word 0xFFFFFEFF -_020088D0: .word 0xFFFFEFFF -_020088D4: .word 0x000002E2 - - thumb_func_start FUN_020088D8 -FUN_020088D8: ; 0x020088D8 - mov r1, #0xf0 - and r1, r0 - lsl r1, r1, #0x14 - lsl r0, r0, #0x1c - lsr r1, r1, #0x18 - lsr r0, r0, #0x18 - orr r0, r1 - lsl r0, r0, #0x18 - lsr r0, r0, #0x18 - bx lr - - thumb_func_start FUN_020088EC -FUN_020088EC: ; 0x020088EC - push {r3, lr} - add r2, r0, #0x0 - ldrh r0, [r2, #0xa] - cmp r0, #0x0 - beq _02008900 - add r0, r1, #0x0 - ldr r1, [r2, #0x10] - mov r2, #0x1 - bl FUN_02008904 -_02008900: - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02008904 -FUN_02008904: ; 0x02008904 - push {r4-r7, lr} - sub sp, #0x1c - add r3, r0, #0x0 - add r0, r1, #0x0 - mov lr, r0 - mov r0, #0x0 - mov r12, r0 - ldr r0, _02008A50 ; =UNK_02105AE8 - str r1, [sp, #0x0] - str r2, [sp, #0x4] - str r0, [sp, #0x10] -_0200891A: - ldr r0, [sp, #0x10] - mov r1, #0x0 - ldr r6, [r0, #0x0] - ldrb r0, [r6, #0x0] - cmp r0, #0xff - beq _02008992 - ldr r0, [sp, #0x0] - mov r2, #0xf - and r0, r2 - str r0, [sp, #0xc] - sub r0, #0x8 - str r0, [sp, #0xc] - ldr r0, [sp, #0x0] - mov r2, #0xf0 - and r0, r2 - lsr r7, r0, #0x4 - sub r7, #0x8 -_0200893C: - lsl r0, r1, #0x1 - add r2, r6, r0 - ldrb r4, [r6, r0] - ldrb r2, [r2, #0x1] - ldr r0, [sp, #0xc] - add r0, r0, r4 - add r2, r7, r2 - lsl r0, r0, #0x18 - lsl r2, r2, #0x18 - lsr r0, r0, #0x18 - lsr r4, r2, #0x18 - mov r2, #0x50 - mul r2, r4 - lsr r5, r0, #0x1 - add r2, r5, r2 - mov r4, #0x1 - tst r0, r4 - ldrb r4, [r3, r2] - beq _02008974 - mov r0, #0xf0 - and r0, r4 - cmp r0, #0x10 - blt _02008984 - cmp r0, #0x30 - bgt _02008984 - add r4, #0x50 - strb r4, [r3, r2] - b _02008984 -_02008974: - mov r0, #0xf - and r0, r4 - cmp r0, #0x1 - blt _02008984 - cmp r0, #0x3 - bgt _02008984 - add r0, r4, #0x5 - strb r0, [r3, r2] -_02008984: - add r0, r1, #0x1 - lsl r0, r0, #0x18 - lsr r1, r0, #0x18 - lsl r0, r1, #0x1 - ldrb r0, [r6, r0] - cmp r0, #0xff - bne _0200893C -_02008992: - ldr r0, [sp, #0x0] - lsr r0, r0, #0x8 - str r0, [sp, #0x0] - ldr r0, [sp, #0x10] - add r0, r0, #0x4 - str r0, [sp, #0x10] - mov r0, r12 - add r0, r0, #0x1 - mov r12, r0 - cmp r0, #0x4 - blt _0200891A - mov r0, lr - str r0, [sp, #0x0] - ldr r0, [sp, #0x4] - cmp r0, #0x0 - beq _02008A4A - mov r0, #0x0 - str r0, [sp, #0x8] - ldr r0, _02008A50 ; =UNK_02105AE8 - str r0, [sp, #0x18] -_020089BA: - ldr r0, [sp, #0x18] - mov r4, #0x0 - ldr r2, [r0, #0x0] - ldrb r0, [r2, #0x0] - cmp r0, #0xff - beq _02008A34 - ldr r0, [sp, #0x0] - mov r1, #0xf - and r0, r1 - str r0, [sp, #0x14] - add r0, #0x48 - str r0, [sp, #0x14] - ldr r0, [sp, #0x0] - mov r1, #0xf0 - and r0, r1 - lsr r7, r0, #0x4 - sub r7, #0x8 -_020089DC: - lsl r0, r4, #0x1 - add r5, r2, r0 - ldrb r1, [r2, r0] - ldrb r5, [r5, #0x1] - ldr r0, [sp, #0x14] - sub r1, #0xe - add r0, r0, r1 - add r5, r7, r5 - lsl r0, r0, #0x18 - lsl r5, r5, #0x18 - lsr r1, r0, #0x18 - lsr r6, r5, #0x18 - mov r5, #0x50 - lsr r0, r1, #0x1 - mul r5, r6 - add r0, r0, r5 - mov r5, #0x1 - tst r1, r5 - ldrb r5, [r3, r0] - beq _02008A16 - mov r1, #0xf0 - and r1, r5 - cmp r1, #0x10 - blt _02008A26 - cmp r1, #0x30 - bgt _02008A26 - add r5, #0x50 - strb r5, [r3, r0] - b _02008A26 -_02008A16: - mov r1, #0xf - and r1, r5 - cmp r1, #0x1 - blt _02008A26 - cmp r1, #0x3 - bgt _02008A26 - add r1, r5, #0x5 - strb r1, [r3, r0] -_02008A26: - add r0, r4, #0x1 - lsl r0, r0, #0x18 - lsr r4, r0, #0x18 - lsl r0, r4, #0x1 - ldrb r0, [r2, r0] - cmp r0, #0xff - bne _020089DC -_02008A34: - ldr r0, [sp, #0x0] - lsr r0, r0, #0x8 - str r0, [sp, #0x0] - ldr r0, [sp, #0x18] - add r0, r0, #0x4 - str r0, [sp, #0x18] - ldr r0, [sp, #0x8] - add r0, r0, #0x1 - str r0, [sp, #0x8] - cmp r0, #0x4 - blt _020089BA -_02008A4A: - add sp, #0x1c - pop {r4-r7, pc} - nop -_02008A50: .word UNK_02105AE8 - - thumb_func_start FUN_02008A54 -FUN_02008A54: ; 0x02008A54 - ldr r2, [r0, #0x0] - ldr r1, _02008A6C ; =0x41C64E6D - add r3, r2, #0x0 - mul r3, r1 - ldr r1, _02008A70 ; =0x00006073 - add r1, r3, r1 - str r1, [r0, #0x0] - lsr r0, r1, #0x10 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - bx lr - nop -_02008A6C: .word 0x41C64E6D -_02008A70: .word 0x00006073 - - thumb_func_start FUN_02008A74 -FUN_02008A74: ; 0x02008A74 - push {r3-r7, lr} - ldr r1, _02008AA0 ; =0x000018FE - mov r6, #0x0 - ldrh r2, [r0, r1] - lsr r4, r1, #0x1 - add r5, r0, r1 - str r2, [sp, #0x0] - add r7, sp, #0x0 - mvn r6, r6 -_02008A86: - ldrh r1, [r5, #0x0] - ldr r0, [sp, #0x0] - eor r0, r1 - strh r0, [r5, #0x0] - add r0, r7, #0x0 - bl FUN_02008A54 - sub r4, r4, #0x1 - sub r5, r5, #0x2 - cmp r4, r6 - bgt _02008A86 - pop {r3-r7, pc} - nop -_02008AA0: .word 0x000018FE diff --git a/arm9/global.inc b/arm9/global.inc index ee15a6c2..b7a3a6a6 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -8999,9 +8999,3 @@ .extern wcschr .extern wcscpy .extern wmemchr -.extern UNK_020ECBD0 -.extern UNK_020ECC10 -.extern UNK_020ECC78 -.extern UNK_020ECCE2 -.extern UNK_020ECDCC -.extern UNK_02105AE8 diff --git a/arm9/lib/libnns/include/NNS_g2d.h b/arm9/lib/libnns/include/NNS_g2d.h index d65f0430..45d348ef 100644 --- a/arm9/lib/libnns/include/NNS_g2d.h +++ b/arm9/lib/libnns/include/NNS_g2d.h @@ -220,5 +220,7 @@ void NNS_G2dApplyAndResetOamManagerBuffer(NNSG2dOamManager *oamManager); u32 NNS_G2dEntryOamManagerOamWithAffineIdx( NNSG2dOamManager *oamManager, u32 param1, u32 param2); u32 NNS_G2dEntryOamManagerAffine(NNSG2dOamManager *oamManager, u32 param1); +void NNS_G2dInitImageProxy(NNSG2dImageProxy *); +void NNS_G2dInitImagePaletteProxy(NNSG2dImagePaletteProxy *); #endif //NNSYS_NNS_G2D_H diff --git a/arm9/modules/63/include/mod63_021DB450.h b/arm9/modules/63/include/mod63_021DB450.h index ac3da1b6..15c1c477 100644 --- a/arm9/modules/63/include/mod63_021DB450.h +++ b/arm9/modules/63/include/mod63_021DB450.h @@ -23,8 +23,10 @@ typedef struct UnkStruct63_021DB450 //intro base struct type typedef struct UnkStruct63_021DB49C { - u32 field_00; - u32 field_04; + u16 field_00; + u16 field_02; + u16 field_04; + u16 field_06; u32 field_08; u32 field_0C; } UnkStruct63_021DB49C; diff --git a/arm9/src/unk_02006D98.c b/arm9/src/unk_02006D98.c new file mode 100644 index 00000000..154e3284 --- /dev/null +++ b/arm9/src/unk_02006D98.c @@ -0,0 +1,2224 @@ +#include "global.h" +#include "MI_memory.h" +#include "NNS_g2d.h" +#include "filesystem.h" +#include "heap.h" +#include "poketool/pokegra/otherpoke.naix" +#include "registers.h" +#include "mod63_021DB450.h" +#include "palette.h" + +struct UnkStruct4{ + u8 unk0; + u8 unk1; +}; + + + +const u8 UNK_020ECCE0[] = { + 0xFF, 0xFF, 0x1B, 0x0F, 0x1C, 0x0F, 0x1D, 0x0F, 0x1E, 0x0F, 0x1A, 0x10, 0x1B, 0x10, 0x1C, 0x10, 0x1D, 0x10, + 0x1E, 0x10, 0x1F, 0x10, 0x19, 0x11, 0x1A, 0x11, 0x1B, 0x11, 0x1C, 0x11, 0x1D, 0x11, 0x1E, 0x11, + 0x1F, 0x11, 0x20, 0x11, 0x19, 0x12, 0x1A, 0x12, 0x1B, 0x12, 0x1C, 0x12, 0x1D, 0x12, 0x1E, 0x12, + 0x1F, 0x12, 0x20, 0x12, 0x19, 0x13, 0x1A, 0x13, 0x1B, 0x13, 0x1C, 0x13, 0x1D, 0x13, 0x1E, 0x13, + 0x1F, 0x13, 0x20, 0x13, 0x19, 0x14, 0x1A, 0x14, 0x1B, 0x14, 0x1C, 0x14, 0x1D, 0x14, 0x1E, 0x14, + 0x1F, 0x14, 0x20, 0x14, 0x1A, 0x15, 0x1B, 0x15, 0x1C, 0x15, 0x1D, 0x15, 0x1E, 0x15, 0x1F, 0x15, + 0x1B, 0x16, 0x1C, 0x16, 0x1D, 0x16, 0x1E, 0x16, 0xFF, 0xFF, +}; + + + + +const u8 UNK_020ECC10[] = { + 0x1E, 0x21, 0x1F, 0x21, 0x20, 0x21, 0x1D, 0x22, 0x1E, 0x22, 0x1F, 0x22, 0x20, 0x22, 0x21, 0x22, + 0x1C, 0x23, 0x1D, 0x23, 0x1E, 0x23, 0x1F, 0x23, 0x20, 0x23, 0x21, 0x23, 0x22, 0x23, 0x1C, 0x24, + 0x1D, 0x24, 0x1E, 0x24, 0x1F, 0x24, 0x20, 0x24, 0x21, 0x24, 0x22, 0x24, 0x1C, 0x25, 0x1D, 0x25, + 0x1E, 0x25, 0x1F, 0x25, 0x20, 0x25, 0x21, 0x25, 0x22, 0x25, 0x1C, 0x26, 0x1D, 0x26, 0x1E, 0x26, + 0x1F, 0x26, 0x20, 0x26, 0x21, 0x26, 0x22, 0x26, 0x1C, 0x27, 0x1D, 0x27, 0x1E, 0x27, 0x1F, 0x27, + 0x20, 0x27, 0x21, 0x27, 0x22, 0x27, 0x1D, 0x28, 0x1E, 0x28, 0x1F, 0x28, 0x20, 0x28, 0x21, 0x28, + 0x1E, 0x29, 0x1F, 0x29, 0x20, 0x29, 0xFF, 0xFF, +}; + + +const u8 UNK_020ECC78[] = { + 0x33, 0x11, 0x34, 0x11, 0x35, 0x11, 0x36, 0x11, 0x32, 0x12, 0x33, 0x12, 0x34, 0x12, 0x35, 0x12, + 0x36, 0x12, 0x37, 0x12, 0x31, 0x13, 0x32, 0x13, 0x33, 0x13, 0x34, 0x13, 0x35, 0x13, 0x36, 0x13, + 0x37, 0x13, 0x38, 0x13, 0x31, 0x14, 0x32, 0x14, 0x33, 0x14, 0x34, 0x14, 0x35, 0x14, 0x36, 0x14, + 0x37, 0x14, 0x38, 0x14, 0x31, 0x15, 0x32, 0x15, 0x33, 0x15, 0x34, 0x15, 0x35, 0x15, 0x36, 0x15, + 0x37, 0x15, 0x38, 0x15, 0x31, 0x16, 0x32, 0x16, 0x33, 0x16, 0x34, 0x16, 0x35, 0x16, 0x36, 0x16, + 0x37, 0x16, 0x38, 0x16, 0x32, 0x17, 0x33, 0x17, 0x34, 0x17, 0x35, 0x17, 0x36, 0x17, 0x37, 0x17, + 0x33, 0x18, 0x34, 0x18, 0x35, 0x18, 0x36, 0x18, +}; + +const u8 UNK_020ECDCC[] = { + 0x2B, 0x21, 0x2C, 0x21, 0x2D, 0x21, 0x29, 0x22, 0x2A, 0x22, 0x2B, 0x22, 0x2C, 0x22, 0x2D, 0x22, + 0x2E, 0x22, 0x2F, 0x22, 0x28, 0x23, 0x29, 0x23, 0x2A, 0x23, 0x2B, 0x23, 0x2C, 0x23, 0x2D, 0x23, + 0x2E, 0x23, 0x2F, 0x23, 0x30, 0x23, 0x28, 0x24, 0x29, 0x24, 0x2A, 0x24, 0x2B, 0x24, 0x2C, 0x24, + 0x2D, 0x24, 0x2E, 0x24, 0x2F, 0x24, 0x30, 0x24, 0x28, 0x25, 0x29, 0x25, 0x2A, 0x25, 0x2B, 0x25, + 0x2C, 0x25, 0x2D, 0x25, 0x2E, 0x25, 0x2F, 0x25, 0x30, 0x25, 0x28, 0x26, 0x29, 0x26, 0x2A, 0x26, + 0x2B, 0x26, 0x2C, 0x26, 0x2D, 0x26, 0x2E, 0x26, 0x2F, 0x26, 0x30, 0x26, 0x28, 0x27, 0x29, 0x27, + 0x2A, 0x27, 0x2B, 0x27, 0x2C, 0x27, 0x2D, 0x27, 0x2E, 0x27, 0x2F, 0x27, 0x30, 0x27, 0x28, 0x28, + 0x29, 0x28, 0x2A, 0x28, 0x2B, 0x28, 0x2C, 0x28, 0x2D, 0x28, 0x2E, 0x28, 0x2F, 0x28, 0x30, 0x28, + 0x29, 0x29, 0x2A, 0x29, 0x2B, 0x29, 0x2C, 0x29, 0x2D, 0x29, 0x2E, 0x29, 0x2F, 0x29, 0x2B, 0x2A, + 0x2C, 0x2A, 0x2D, 0x2A, 0xFF, 0xFF +}; + + + + +const int UNK_020ECBD0[4][4] = { + {160, 160, 224, 176}, {160, 160, 224, 176}, {160, 176, 224, 192}, {160, 192, 224, 208} +}; + + + +// static const int UNK_020ECD4C[4][2][4] = { +// { +// {0, 0, 0x50, 0x50}, {0x50, 0, 0xA0, 0x50} +// }, { + +// {0, 0x50, 0x50, 0xA0}, {0x50, 0x50, 0xA0, 0xA0} + +// }, { + + +// {0, 0xA0, 0x50, 0xF0}, {0x50, 0xA0, 0xA0, 0xF0} + +// }, { + +// {0xA0, 0, 0xF0, 0x50}, {0xA0, 0x50, 0xF0, 0xA0} + +// } +// }; + + +const u8 UNK_020ECD4C[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, + 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, + 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, +}; + + + +struct UnkStruct4 *UNK_02105AE8[] = { + // ugly hack to fix extra padding added by the compiler + (struct UnkStruct4 *)(UNK_020ECCE0+2), + (struct UnkStruct4 *)UNK_020ECC78, + (struct UnkStruct4 *)UNK_020ECC10, + (struct UnkStruct4 *)UNK_020ECDCC, +}; + + +struct UnkStruct2_sub { + s8 unk0; + u8 unk1; +}; +struct UnkStruct2_sub2 { + u16 unk0_0:2; + u16 unk0_2:1; + u16 unk0_3:1; + u16 unk0_4:1; + u16 unk0_5:2; + s8 unk2; + u8 unk3; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unka; +}; + +struct UnkStruct2 { + u32 unk00_0:1; + u32 unk00_1:6; + u32 unk00_7:1; + u32 unk00_8:1; + struct UnkStruct63_021DB49C unk04; + struct UnkStruct63_021DB49C unk14; + s16 unk24; + s16 unk26; + u32 unk28; + s16 unk2C; + s16 unk2E; + u32 unk30; + s16 unk34; + s16 unk36; + u16 unk38; + u16 unk3A; + u16 unk3C; + u16 unk3E; + s16 unk40; + s16 unk42; + u8 unk44; + u8 unk45; + u8 unk46; + u8 unk47; + u8 unk48; + u8 unk49; + u8 unk4A; + u8 unk4B; + u32 unk4C; + u32 unk50_0:5; + u32 unk50_5:5; + u32 unk50_a:5; + u32 unk50_f:5; + u32 unk50_14:5; + u32 unk50_19:5; + u32 unk50_1E:2; + u32 unk54_0:1; + u32 unk54_1:1; + u32 unk54_2:5; + u32 unk54_7:2; + u32 unk54_9:1; + u32 unk54_A:1; + u32 unk54_B:1; + u32 unk54_C:1; + u32 unk54_D:4; + u8 unk58; + u8 unk59; + u8 unk5A; + u8 unk5B; + u8 unk5C[10]; + void (*unk68)(struct UnkStruct2 *, void *); + struct UnkStruct2_sub2 unk6C; + struct UnkStruct2_sub2 unk78; + struct UnkStruct2_sub unk84[10]; +}; + + +struct UnkStruct1 +{ + struct UnkStruct2 unk000[4]; + NNSG2dImageProxy unk260; + NNSG2dImagePaletteProxy unk284; + u32 unk298; + u32 unk29C; + u32 unk2A0; + u32 unk2A4; + u32 unk2A8; + u8 *unk2AC; + u16 *unk2B0; + u16 *unk2B4; + NNSG2dCharacterData unk2B8; + NNSG2dPaletteData unk2D0; + u8 unk2E0; + u8 unk2E1; + u8 unk2E2; + u8 unk2E3; + u32 unk2E4; +}; + +extern void NNS_G2dSetupSoftwareSpriteCamera(void); +extern void FUN_02008A74(u8 *); + +THUMB_FUNC struct UnkStruct1 *FUN_02006D98(u32 heap_id) +{ + struct UnkStruct1 *ptr = AllocFromHeap(heap_id, sizeof(struct UnkStruct1)); + ptr->unk298 = heap_id; + ptr->unk2E0 = 0; + ptr->unk29C = 0; + ptr->unk2A0 = 0x8000; + ptr->unk2A4 = 0; + ptr->unk2A8 = 0x80; + + ptr->unk2AC = AllocFromHeap(heap_id, 0x8000); + + ptr->unk2B0 = AllocFromHeap(heap_id, 0xc0); + MIi_CpuClearFast(0, ptr->unk2B0, 4); + + ptr->unk2B4 = AllocFromHeap(heap_id, 0xc0); + MIi_CpuClearFast(0, ptr->unk2B4, 4); + + for (int i = 0; i < 4; i++) + { + MIi_CpuClearFast(0, &ptr->unk000[i], sizeof(struct UnkStruct2)); + } + + NNS_G2dSetupSoftwareSpriteCamera(); + ptr->unk2E3 = 0; + + u8 *st8; + void *st4 = AllocAndReadWholeNarcMemberByIdPair( + NARC_POKETOOL_POKEGRA_OTHERPOKE, NARC_otherpoke_narc_0211_NCGR, ptr->unk298); + NNSG2dCharacterData *stc; + NNS_G2dGetUnpackedCharacterData(st4, &stc); + + ptr->unk2B8.pixelFmt = stc->pixelFmt; + ptr->unk2B8.mapingType = stc->mapingType; + ptr->unk2B8.characterFmt = stc->characterFmt; + st8 = stc->pRawData; + + FUN_02008A74(st8); + MI_CpuFill8(ptr->unk2AC, *st8, 0x8000); + + for (int i = 0; i < 0x50; i++) + { + for (int j = 0; j < 0x28; j++) + { + ((u8 *)ptr->unk2AC)[0x5050 + i * 0x80 + j] = st8[i * 0x50 + j]; + } + } + + FreeToHeap(st4); + ptr->unk2E1 = 1; + ptr->unk2E2 = 1; + + return ptr; +} + + +extern void FUN_020082A8(struct UnkStruct1 *); +extern void FUN_020086F4(struct UnkStruct1 *); +extern void NNS_G3dGeFlushBuffer(); +extern void FUN_02007F48(struct UnkStruct2 *); + + + +extern void NNS_G2dDrawSpriteFast(s16 param0, s16 param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8); + +#ifdef NONMATCHING + +// mostly matching, only 2 register writes messed up +THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { + s32 arg3; + s32 arg4; + + FUN_020082A8(param0); + FUN_020086F4(param0); + + NNS_G3dGeFlushBuffer(); + + reg_G3_MTX_PUSH = 0; + + // this is all shuffled however I try + reg_G3_TEXIMAGE_PARAM = (param0->unk29C >> 3) | (param0->unk260.attr.fmt << 26) | (1 << 30) | (param0->unk260.attr.sizeS << 20) | (param0->unk260.attr.sizeT << 23) | (param0->unk260.attr.plttUse << 29); + + for (int st18 = 0; st18 < 4; st18++) { + if (param0->unk000[st18].unk00_0 == 0 || param0->unk000[st18].unk54_0 != 0 || param0->unk000[st18].unk54_B != 0) { + continue; + } + + if (param0->unk000[st18].unk68 != NULL) { + param0->unk000[st18].unk68(¶m0->unk000[st18], ¶m0->unk000[st18].unk24); + } + + NNS_G3dGeFlushBuffer(); + + if (param0->unk2E3 != 1) { + reg_G3_MTX_IDENTITY = 0; + } + + FUN_02007F48(¶m0->unk000[st18]); + + u32 shift; + if (param0->unk260.attr.fmt == 2) { + shift = 1; + } else { + shift = 0; + } + + reg_G3_TEXPLTT_BASE = (param0->unk2A4 + st18*0x20)>>(4-shift); + + u32 r1 = param0->unk000[st18].unk28<<0xc; + u32 r0 = (param0->unk000[st18].unk26 + param0->unk000[st18].unk42)<<0xc; + u32 r3 = (param0->unk000[st18].unk24 + param0->unk000[st18].unk40)<<0xc; + + reg_G3_MTX_TRANS = r3; + reg_G3_MTX_TRANS = r0; + reg_G3_MTX_TRANS = r1; + + + s32 idx = ((s32)param0->unk000[st18].unk38)>>4; + G3_RotX(FX_SinCosTable_[idx*2], FX_SinCosTable_[idx*2+1]); + + s32 idy = ((s32)param0->unk000[st18].unk3A)>>4; + G3_RotY(FX_SinCosTable_[idy*2], FX_SinCosTable_[idy*2+1]); + + s32 idz = ((s32)param0->unk000[st18].unk3C)>>4; + G3_RotZ(FX_SinCosTable_[idz*2], FX_SinCosTable_[idz*2+1]); + + + r1 = -(param0->unk000[st18].unk28<<0xc); + r0 = -((param0->unk000[st18].unk26 + param0->unk000[st18].unk42)<<0xc); + r3 = -((param0->unk000[st18].unk24 + param0->unk000[st18].unk40)<<0xc); + + reg_G3_MTX_TRANS = r3; + reg_G3_MTX_TRANS = r0; + reg_G3_MTX_TRANS = r1; + + reg_G3_DIF_AMB = + ((u16)(param0->unk000[st18].unk50_0 | (param0->unk000[st18].unk50_5<<5) | (param0->unk000[st18].unk50_a<<10))) | + (((u16)(param0->unk000[st18].unk50_f | (param0->unk000[st18].unk50_14<<5) | (param0->unk000[st18].unk50_19<<10)))<<16) | + 0x8000; + + + reg_G3_SPE_EMI = 0x4210; + + + { + // shuffled there as well + u32 r1 = param0->unk000[st18].unk00_1; + u32 r0 = param0->unk000[st18].unk54_2; + reg_G3_POLYGON_ATTR = 0xc0 | (r1<<24) | (r0<<16); + } + + if (param0->unk000[st18].unk54_1 != 0) { + u32 r6 = param0->unk000[st18].unk44 + (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][0]; + u32 r12 = param0->unk000[st18].unk46; + u32 r1 = param0->unk000[st18].unk45 + (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][1]; + u32 r7 = param0->unk000[st18].unk47; + u32 r0 = r12 + r6; + + + NNS_G2dDrawSpriteFast( + param0->unk000[st18].unk24-40 + param0->unk000[st18].unk44 + param0->unk000[st18].unk2C, + param0->unk000[st18].unk26-40 + param0->unk000[st18].unk45 + param0->unk000[st18].unk2E - param0->unk000[st18].unk6C.unk2, + param0->unk000[st18].unk28 + param0->unk000[st18].unk30, + r12, + r7, + r6, + r1, + r0, + r7 + r1 + ); + + } else { + arg3 = (param0->unk000[st18].unk34*80)>>8; + arg4 = (param0->unk000[st18].unk36*80)>>8; + + NNS_G2dDrawSpriteFast( + param0->unk000[st18].unk24-(arg3/2)+param0->unk000[st18].unk2C, + param0->unk000[st18].unk26-(arg4/2)+ param0->unk000[st18].unk2E - param0->unk000[st18].unk6C.unk2, + param0->unk000[st18].unk28 + param0->unk000[st18].unk30, + arg3, + arg4, + (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][0], + (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][1], + (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][2], + (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][3] + ); + } + + + if (param0->unk000[st18].unk6C.unk0_0 == 0 || param0->unk000[st18].unk6C.unk0_5 == 0 || param0->unk000[st18].unk54_1 != 0 || (param0->unk2E4 & 1) != 0) { + continue; + } + + if (param0->unk2E3 != 1) { + reg_G3_MTX_IDENTITY = 0; + } + + u32 shift2; + if (param0->unk260.attr.fmt == 2) { + shift2 = 1; + } else { + shift2 = 0; + } + reg_G3_TEXPLTT_BASE = (param0->unk2A4 + ((param0->unk000[st18].unk6C.unk0_0+3)<<5))>>(4-shift2); + + + + if (param0->unk000[st18].unk6C.unk0_4 != 0) { + arg3 = (param0->unk000[st18].unk34*64)>>8; + arg4 = (param0->unk000[st18].unk36*16)>>8; + } else { + arg3 = 64; + arg4 = 16; + } + + if (param0->unk000[st18].unk6C.unk0_2 != 0) { + param0->unk000[st18].unk6C.unk4 = param0->unk000[st18].unk24+ param0->unk000[st18].unk2C + param0->unk000[st18].unk6C.unk8; + } + + if (param0->unk000[st18].unk6C.unk0_3 != 0) { + param0->unk000[st18].unk6C.unk6 = param0->unk000[st18].unk26 + param0->unk000[st18].unk2E + param0->unk000[st18].unk6C.unka; + } + + + NNS_G2dDrawSpriteFast( + param0->unk000[st18].unk6C.unk4 - (arg3/2), + param0->unk000[st18].unk6C.unk4 - (arg4/2), + 0xFFFFFC18, + arg3, + arg4, + UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][0], + UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][1], + UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][2], + UNK_020ECBD0[param0->unk000[st18].unk6C.unk0_5][3] + ); + + } + + + reg_G3_MTX_POP = 1; +} +#else +asm void FUN_02006ED4(struct UnkStruct1 *param0) { + // clang-format off + push {r3-r7, lr} + sub sp, #0x20 + add r5, r0, #0x0 + bl FUN_020082A8 + add r0, r5, #0x0 + bl FUN_020086F4 + bl NNS_G3dGeFlushBuffer + mov r6, #0x9f + mov r0, #0x0 + ldr r4, =0x04000444 + lsl r6, r6, #0x2 + str r0, [r4, #0x0] + str r0, [sp, #0x18] + add r0, r6, #0x0 + sub r0, #0xc + ldr r1, [r5, r0] + add r3, r6, #0x0 + ldr r2, [r5, r6] + add r0, r6, #0x0 + sub r3, #0x8 + add r6, #0x20 + ldr r3, [r5, r3] + ldr r6, [r5, r6] + sub r0, #0x10 + ldr r0, [r5, r0] + lsr r6, r6, #0x3 + lsl r3, r3, #0x1a + orr r6, r3 + mov r3, #0x1 + lsl r3, r3, #0x1e + lsl r0, r0, #0x14 + orr r3, r6 + lsl r1, r1, #0x17 + orr r0, r3 + lsl r2, r2, #0x1d + orr r0, r1 + orr r0, r2 + str r0, [r4, #0x64] + ldr r0, [sp, #0x18] + add r4, r5, #0x0 + str r0, [sp, #0x14] + ldr r0, =UNK_020ECD4C + str r0, [sp, #0x1c] +_02006F30: + ldr r0, [r4, #0x0] + lsl r0, r0, #0x1f + lsr r0, r0, #0x1f + beq _02006F46 + ldr r0, [r4, #0x54] + lsl r1, r0, #0x1f + lsr r1, r1, #0x1f + bne _02006F46 + lsl r0, r0, #0x14 + lsr r0, r0, #0x1f + beq _02006F48 +_02006F46: + b _020072BC +_02006F48: + ldr r2, [r4, #0x68] + cmp r2, #0x0 + beq _02006F56 + add r1, r4, #0x0 + add r0, r4, #0x0 + add r1, #0x24 + blx r2 +_02006F56: + bl NNS_G3dGeFlushBuffer + ldr r0, =0x000002E3 + ldrb r0, [r5, r0] + cmp r0, #0x1 + beq _02006F68 + ldr r0, =0x04000454 + mov r1, #0x0 + str r1, [r0, #0x0] +_02006F68: + add r0, r4, #0x0 + bl FUN_02007F48 + mov r0, #0x9d + lsl r0, r0, #0x2 + ldr r0, [r5, r0] + cmp r0, #0x2 + bne _02006F7C + mov r0, #0x1 + b _02006F7E +_02006F7C: + mov r0, #0x0 +_02006F7E: + mov r1, #0xa9 + lsl r1, r1, #0x2 + ldr r2, [r5, r1] + ldr r1, [sp, #0x14] + add r2, r2, r1 + mov r1, #0x4 + sub r0, r1, r0 + add r1, r2, #0x0 + lsr r1, r0 + ldr r0, =0x040004AC + str r1, [r0, #0x0] + ldr r0, [r4, #0x28] + lsl r1, r0, #0xc + mov r0, #0x26 + ldrsh r2, [r4, r0] + mov r0, #0x42 + ldrsh r0, [r4, r0] + add r0, r2, r0 + mov r2, #0x24 + ldrsh r3, [r4, r2] + mov r2, #0x40 + ldrsh r2, [r4, r2] + lsl r0, r0, #0xc + add r2, r3, r2 + lsl r3, r2, #0xc + ldr r2, =0x04000470 + str r3, [r2, #0x0] + str r0, [r2, #0x0] + add r0, r2, #0x0 + str r1, [r0, #0x0] + ldrh r0, [r4, #0x38] + asr r0, r0, #0x4 + lsl r1, r0, #0x2 + ldr r0, =FX_SinCosTable_ + add r2, r0, r1 + ldrsh r0, [r0, r1] + mov r1, #0x2 + ldrsh r1, [r2, r1] + bl G3_RotX + ldrh r0, [r4, #0x3a] + asr r0, r0, #0x4 + lsl r1, r0, #0x2 + ldr r0, =FX_SinCosTable_ + add r2, r0, r1 + ldrsh r0, [r0, r1] + mov r1, #0x2 + ldrsh r1, [r2, r1] + bl G3_RotY + ldrh r0, [r4, #0x3c] + asr r0, r0, #0x4 + lsl r1, r0, #0x2 + ldr r0, =FX_SinCosTable_ + add r2, r0, r1 + ldrsh r0, [r0, r1] + mov r1, #0x2 + ldrsh r1, [r2, r1] + bl G3_RotZ + ldr r0, [r4, #0x28] + lsl r0, r0, #0xc + neg r1, r0 + mov r0, #0x26 + ldrsh r2, [r4, r0] + mov r0, #0x42 + ldrsh r0, [r4, r0] + add r0, r2, r0 + mov r2, #0x24 + ldrsh r3, [r4, r2] + mov r2, #0x40 + ldrsh r2, [r4, r2] + lsl r0, r0, #0xc + neg r0, r0 + add r2, r3, r2 + lsl r2, r2, #0xc + neg r3, r2 + ldr r2, =0x04000470 + str r3, [r2, #0x0] + str r0, [r2, #0x0] + add r0, r2, #0x0 + str r1, [r0, #0x0] + ldr r3, [r4, #0x50] + lsl r0, r3, #0x11 + lsr r0, r0, #0x1b + lsl r2, r3, #0x16 + lsl r1, r0, #0xa + lsl r0, r3, #0x1b + lsr r2, r2, #0x1b + lsr r0, r0, #0x1b + lsl r2, r2, #0x5 + orr r0, r2 + orr r0, r1 + lsl r0, r0, #0x10 + lsr r2, r0, #0x10 + lsl r0, r3, #0x2 + lsr r0, r0, #0x1b + lsl r1, r0, #0xa + lsl r0, r3, #0xc + lsl r3, r3, #0x7 + lsr r3, r3, #0x1b + lsr r0, r0, #0x1b + lsl r3, r3, #0x5 + orr r0, r3 + orr r0, r1 + lsl r0, r0, #0x10 + lsr r0, r0, #0x10 + lsl r0, r0, #0x10 + add r1, r2, #0x0 + orr r1, r0 + mov r0, #0x2 + lsl r0, r0, #0xe + orr r1, r0 + ldr r0, =0x040004C0 + str r1, [r0, #0x0] + ldr r1, =0x00004210 + add r0, r0, #0x4 + str r1, [r0, #0x0] + ldr r1, [r4, #0x0] + ldr r0, [r4, #0x54] + lsl r1, r1, #0x19 + lsl r0, r0, #0x19 + lsr r1, r1, #0x1a + lsr r0, r0, #0x1b + lsl r2, r1, #0x18 + mov r1, #0xc0 + lsl r0, r0, #0x10 + orr r1, r2 + orr r1, r0 + ldr r0, =0x040004A4 + str r1, [r0, #0x0] + ldr r0, [r4, #0x54] + lsl r0, r0, #0x1e + lsr r0, r0, #0x1f + beq _02007104 + add r0, r4, #0x0 + add r0, #0x5b + ldrb r0, [r0, #0x0] + add r2, r4, #0x0 + add r2, #0x44 + lsl r1, r0, #0x4 + ldr r0, [sp, #0x1c] + ldrb r3, [r2, #0x0] + add r0, r0, r1 + ldr r2, [sp, #0x1c] + ldr r0, [r0, #0x4] + ldr r1, [r2, r1] + add r6, r3, r1 + add r1, r4, #0x0 + add r1, #0x46 + ldrb r1, [r1, #0x0] + mov r12, r1 + add r1, r4, #0x0 + add r1, #0x45 + ldrb r2, [r1, #0x0] + add r1, r2, r0 + add r0, r4, #0x0 + add r0, #0x47 + ldrb r7, [r0, #0x0] + mov r0, r12 + add r0, r0, r6 + str r7, [sp, #0x0] + str r6, [sp, #0x4] + str r1, [sp, #0x8] + str r0, [sp, #0xc] + add r0, r7, r1 + str r0, [sp, #0x10] + mov r1, #0x24 + ldrsh r1, [r4, r1] + mov r0, #0x2c + ldrsh r0, [r4, r0] + sub r1, #0x28 + add r1, r1, r3 + add r0, r0, r1 + mov r3, #0x26 + ldrsh r3, [r4, r3] + mov r1, #0x2e + lsl r0, r0, #0x10 + sub r3, #0x28 + add r2, r3, r2 + ldrsh r1, [r4, r1] + ldr r3, [r4, #0x28] + asr r0, r0, #0x10 + add r2, r1, r2 + mov r1, #0x6e + ldrsb r1, [r4, r1] + sub r1, r2, r1 + ldr r2, [r4, #0x30] + lsl r1, r1, #0x10 + add r2, r3, r2 + asr r1, r1, #0x10 + mov r3, r12 + bl NNS_G2dDrawSpriteFast + b _02007174 +_02007104: + mov r0, #0x34 + ldrsh r1, [r4, r0] + mov r0, #0x50 + ldr r2, [sp, #0x1c] + mul r0, r1 + asr r3, r0, #0x8 + mov r0, #0x36 + ldrsh r1, [r4, r0] + mov r0, #0x50 + ldr r6, [sp, #0x1c] + mul r0, r1 + asr r1, r0, #0x8 + add r0, r4, #0x0 + add r0, #0x5b + ldrb r0, [r0, #0x0] + lsl r0, r0, #0x4 + str r1, [sp, #0x0] + add r2, r2, r0 + ldr r0, [r6, r0] + lsr r6, r1, #0x1f + str r0, [sp, #0x4] + ldr r0, [r2, #0x4] + add r6, r1, r6 + str r0, [sp, #0x8] + ldr r0, [r2, #0x8] + asr r1, r6, #0x1 + str r0, [sp, #0xc] + ldr r0, [r2, #0xc] + str r0, [sp, #0x10] + mov r0, #0x24 + ldrsh r2, [r4, r0] + lsr r0, r3, #0x1f + add r0, r3, r0 + asr r0, r0, #0x1 + sub r2, r2, r0 + mov r0, #0x2c + ldrsh r0, [r4, r0] + ldr r6, [r4, #0x28] + add r0, r2, r0 + mov r2, #0x26 + ldrsh r2, [r4, r2] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + sub r2, r2, r1 + mov r1, #0x2e + ldrsh r1, [r4, r1] + add r2, r2, r1 + mov r1, #0x6e + ldrsb r1, [r4, r1] + sub r1, r2, r1 + ldr r2, [r4, #0x30] + lsl r1, r1, #0x10 + asr r1, r1, #0x10 + add r2, r6, r2 + bl NNS_G2dDrawSpriteFast +_02007174: + add r0, r4, #0x0 + add r0, #0x6c + ldrh r0, [r0, #0x0] + lsl r1, r0, #0x1e + lsr r1, r1, #0x1e + beq _0200719A + lsl r0, r0, #0x19 + lsr r0, r0, #0x1e + beq _0200719A + ldr r0, [r4, #0x54] + lsl r0, r0, #0x1e + lsr r0, r0, #0x1f + bne _0200719A + mov r0, #0xb9 + lsl r0, r0, #0x2 + ldr r1, [r5, r0] + mov r0, #0x1 + tst r0, r1 + beq _0200719C +_0200719A: + b _020072BC +_0200719C: + ldr r0, =0x000002E3 + ldrb r0, [r5, r0] + cmp r0, #0x1 + beq _020071AA + ldr r0, =0x04000454 + mov r1, #0x0 + str r1, [r0, #0x0] +_020071AA: + mov r0, #0x9d + lsl r0, r0, #0x2 + ldr r0, [r5, r0] + cmp r0, #0x2 + bne _020071B8 + mov r1, #0x1 + b _020071BA +_020071B8: + mov r1, #0x0 +_020071BA: + add r2, r4, #0x0 + add r2, #0x6c + ldrh r2, [r2, #0x0] + mov r0, #0xa9 + lsl r0, r0, #0x2 + lsl r2, r2, #0x1e + lsr r2, r2, #0x1e + add r2, r2, #0x3 + ldr r0, [r5, r0] + lsl r2, r2, #0x5 + add r2, r0, r2 + mov r0, #0x4 + sub r0, r0, r1 + add r1, r2, #0x0 + lsr r1, r0 + ldr r0, =0x040004AC + str r1, [r0, #0x0] + add r0, r4, #0x0 + add r0, #0x6c + ldrh r0, [r0, #0x0] + lsl r0, r0, #0x1b + lsr r0, r0, #0x1f + beq _020071FA + mov r0, #0x34 + ldrsh r0, [r4, r0] + lsl r0, r0, #0x6 + asr r3, r0, #0x8 + mov r0, #0x36 + ldrsh r0, [r4, r0] + lsl r0, r0, #0x4 + asr r1, r0, #0x8 + b _020071FE +_020071FA: + mov r3, #0x40 + mov r1, #0x10 +_020071FE: + add r0, r4, #0x0 + add r0, #0x6c + ldrh r0, [r0, #0x0] + lsl r0, r0, #0x1d + lsr r0, r0, #0x1f + beq _02007220 + mov r0, #0x74 + ldrsh r2, [r4, r0] + mov r0, #0x24 + mov r6, #0x2c + ldrsh r0, [r4, r0] + ldrsh r6, [r4, r6] + add r0, r0, r6 + add r2, r2, r0 + add r0, r4, #0x0 + add r0, #0x70 + strh r2, [r0, #0x0] +_02007220: + add r0, r4, #0x0 + add r0, #0x6c + ldrh r0, [r0, #0x0] + lsl r0, r0, #0x1c + lsr r0, r0, #0x1f + beq _02007242 + mov r0, #0x76 + ldrsh r2, [r4, r0] + mov r0, #0x26 + mov r6, #0x2e + ldrsh r0, [r4, r0] + ldrsh r6, [r4, r6] + add r0, r0, r6 + add r2, r2, r0 + add r0, r4, #0x0 + add r0, #0x72 + strh r2, [r0, #0x0] +_02007242: + add r0, r4, #0x0 + add r0, #0x6c + ldrh r0, [r0, #0x0] + ldr r2, =UNK_020ECBD0 + ldr r6, =UNK_020ECBD0 + lsl r0, r0, #0x19 + lsr r0, r0, #0x1e + lsl r0, r0, #0x4 + str r1, [sp, #0x0] + add r2, r2, r0 + ldr r0, [r6, r0] + lsr r6, r1, #0x1f + str r0, [sp, #0x4] + ldr r0, [r2, #0x4] + add r6, r1, r6 + str r0, [sp, #0x8] + ldr r0, [r2, #0x8] + asr r1, r6, #0x1 + str r0, [sp, #0xc] + ldr r0, [r2, #0xc] + str r0, [sp, #0x10] + mov r0, #0x70 + ldrsh r2, [r4, r0] + lsr r0, r3, #0x1f + add r0, r3, r0 + asr r0, r0, #0x1 + sub r0, r2, r0 + mov r2, #0x72 + ldrsh r2, [r4, r2] + lsl r0, r0, #0x10 + asr r0, r0, #0x10 + sub r1, r2, r1 + lsl r1, r1, #0x10 + ldr r2, =0xFFFFFC18 + asr r1, r1, #0x10 + bl NNS_G2dDrawSpriteFast +_020072BC: + ldr r0, [sp, #0x14] + add r4, #0x98 + add r0, #0x20 + str r0, [sp, #0x14] + ldr r0, [sp, #0x1c] + add r0, #0x20 + str r0, [sp, #0x1c] + ldr r0, [sp, #0x18] + add r0, r0, #0x1 + str r0, [sp, #0x18] + cmp r0, #0x4 + bge _020072D6 + b _02006F30 +_020072D6: + ldr r0, =0x04000448 + mov r1, #0x1 + str r1, [r0, #0x0] + add sp, #0x20 + pop {r3-r7, pc} + // clang-format on +} +#endif + + + +THUMB_FUNC void FUN_020072E8(struct UnkStruct1 *param0) { + FreeToHeap(param0->unk2AC); + FreeToHeap(param0->unk2B0); + FreeToHeap(param0->unk2B4); + FreeToHeap(param0); +} + + +THUMB_FUNC void FUN_02007314(struct UnkStruct2 *param0) { + param0->unk59 = 0; + for (s32 i = 0; i < 10; i++) { + param0->unk5C[i] = 0; + } + if (param0->unk84[param0->unk59].unk0 == -1) { + param0->unk5B = 0; + return; + } + + param0->unk58 = 1; + param0->unk5B = param0->unk84[param0->unk59].unk0; + param0->unk5A = param0->unk84[param0->unk59].unk1; + +} + + +THUMB_FUNC void FUN_0200737C(struct UnkStruct2 *param0, struct UnkStruct2_sub *param1) { + MI_CpuCopy8(param1, param0->unk84, sizeof(struct UnkStruct2_sub)*10); +} + +THUMB_FUNC BOOL FUN_02007390(struct UnkStruct2 *param0) { + if (param0->unk58 != 0) { + return TRUE; + } + return FALSE; +} + +extern u32 FUN_020073E8(struct UnkStruct1 *param0, struct UnkStruct63_021DB49C *param1, u32 param2, u32 param3, u32 param4, u32 param5, s32 param6, u32 param7, u32 param8); + +THUMB_FUNC u32 FUN_020073A0(struct UnkStruct1 *param0, struct UnkStruct63_021DB49C *param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7) { + s32 i; + for (i = 0; i < 4; i++) { + if (param0->unk000[i].unk00_0 == 0) { + break; + } + } + GF_ASSERT(i != 4); + + return FUN_020073E8(param0, param1, param2, param3, param4, param5, i, param6, param7); +} + + +THUMB_FUNC u32 FUN_020073E8(struct UnkStruct1 *param0, struct UnkStruct63_021DB49C *param1, u32 param2, u32 param3, u32 param4, u32 param5, s32 param6, u32 param7, u32 param8) { + GF_ASSERT(param0->unk000[param6].unk00_0 == 0); + + MIi_CpuClearFast(0, ¶m0->unk000[param6], sizeof(struct UnkStruct2)); + param0->unk000[param6].unk00_0 = 1; + param0->unk000[param6].unk00_7 = 1; + param0->unk000[param6].unk00_8 = 1; + param0->unk000[param6].unk00_1 = param5; + + param0->unk000[param6].unk04 = *param1; + param0->unk000[param6].unk14 = *param1; + param0->unk000[param6].unk24 = (s16)param2; + param0->unk000[param6].unk26 = (s16)param3; + param0->unk000[param6].unk28 = param4; + param0->unk000[param6].unk34 = 0x100; + param0->unk000[param6].unk36 = 0x100; + param0->unk000[param6].unk54_2 = 0x1f; + param0->unk000[param6].unk50_0 = 0x1f; + param0->unk000[param6].unk50_5 = 0x1f; + param0->unk000[param6].unk50_a = 0x1f; + param0->unk000[param6].unk50_f = 0x10; + param0->unk000[param6].unk50_14 = 0x10; + param0->unk000[param6].unk50_19 = 0x10; + param0->unk000[param6].unk68 = param8; + param0->unk000[param6].unk6C.unk4 = (s16)param2; + param0->unk000[param6].unk6C.unk6 = (s16)param3; + param0->unk000[param6].unk6C.unk0_2 = 1; + param0->unk000[param6].unk6C.unk0_3 = 1; + param0->unk000[param6].unk6C.unk0_4 = 1; + + if (param7 != 0) { + MI_CpuCopy8(param7, param0->unk000[param6].unk84, 0x14); + } + + return ¶m0->unk000[param6]; +} + + +THUMB_FUNC void FUN_02007534(struct UnkStruct2 *param0) { + param0->unk00_0 = 0; +} + + +THUMB_FUNC void FUN_02007540(struct UnkStruct1 *param0) { + for (s32 i = 0; i < 4; i++) { + FUN_02007534(¶m0->unk000[i]); + } +} + + +THUMB_FUNC void FUN_02007558(struct UnkStruct2 *param0, u32 param1, u32 param2) { + switch (param1) { + case 0: + param0->unk24 = param2; + break; + case 1: + param0->unk26 = param2; + break; + case 2: + param0->unk28 = param2; + break; + case 3: + param0->unk2C = param2; + break; + case 4: + param0->unk2E = param2; + break; + case 5: + param0->unk30 = param2; + break; + case 6: + param0->unk54_0 = param2; + break; + case 7: + param0->unk38 = param2; + break; + case 8: + param0->unk3A = param2; + break; + case 9: + param0->unk3C = param2; + break; + case 10: + param0->unk40 = param2; + break; + case 11: + param0->unk42 = param2; + break; + case 12: + param0->unk34 = param2; + break; + case 13: + param0->unk36 = param2; + break; + case 14: + param0->unk54_1 = param2; + break; + case 15: + param0->unk44 = param2; + break; + case 16: + param0->unk45 = param2; + break; + case 17: + param0->unk46 = param2; + break; + case 18: + param0->unk47 = param2; + break; + case 19: + param0->unk6C.unk4 = param2; + break; + case 20: + param0->unk6C.unk6 = param2; + break; + case 21: + param0->unk6C.unk8 = param2; + break; + case 22: + param0->unk6C.unka = param2; + break; + case 23: + param0->unk54_2 = param2; + break; + case 24: + param0->unk50_0 = param2; + break; + case 25: + param0->unk50_5 = param2; + break; + case 26: + param0->unk50_a = param2; + break; + case 27: + param0->unk50_f = param2; + break; + case 28: + param0->unk50_14 = param2; + break; + case 29: + param0->unk50_19 = param2; + break; + case 30: + param0->unk54_C = param2; + param0->unk00_8 = 1; + break; + case 31: + param0->unk4C = param2; + param0->unk00_8 = 1; + break; + case 32: + param0->unk48 = param2; + param0->unk00_8 = 1; + break; + case 33: + param0->unk49 = param2; + param0->unk00_8 = 1; + break; + case 34: + param0->unk4A = param2; + break; + case 35: + param0->unk54_9 = param2; + param0->unk00_7 = 1; + break; + case 36: + param0->unk54_A = param2; + param0->unk00_7 = 1; + break; + case 37: + param0->unk54_B = param2; + break; + case 38: + param0->unk5B = param2; + break; + case 40: + param0->unk54_D = param2; + param0->unk00_7 = 1; + break; + case 41: + param0->unk6C.unk2 = param2; + break; + case 42: + param0->unk6C.unk0_0 = param2; + param0->unk00_8 = 1; + break; + case 43: + param0->unk6C.unk0_2 = param2; + break; + case 44: + param0->unk6C.unk0_3 = param2; + break; + case 45: + param0->unk6C.unk0_4 = param2; + break; + case 46: + param0->unk6C.unk0_5 = param2; + break; + } +} + + +THUMB_FUNC u32 FUN_0200782C(struct UnkStruct2 *param0, u32 param1) { + switch (param1) { + case 0: + return param0->unk24; + + case 1: + return param0->unk26; + + case 2: + return param0->unk28; + + case 3: + return param0->unk2C; + + case 4: + return param0->unk2E; + + case 5: + return param0->unk30; + + case 6: + return param0->unk54_0; + + case 7: + return param0->unk38; + + case 8: + return param0->unk3A; + + case 9: + return param0->unk3C; + + case 10: + return param0->unk40; + + case 11: + return param0->unk42; + + case 12: + return param0->unk34; + + case 13: + return param0->unk36; + + case 14: + return param0->unk54_1; + + case 15: + return param0->unk44; + + case 16: + return param0->unk45; + + case 17: + return param0->unk46; + + case 18: + return param0->unk47; + + case 19: + return param0->unk6C.unk4; + + case 20: + return param0->unk6C.unk6; + + case 21: + return param0->unk6C.unk8; + + case 22: + return param0->unk6C.unka; + + case 23: + return param0->unk54_2; + + case 24: + return param0->unk50_0; + + case 25: + return param0->unk50_5; + + case 26: + return param0->unk50_a; + + case 27: + return param0->unk50_f; + + case 28: + return param0->unk50_14; + + case 29: + return param0->unk50_19; + + case 30: + return param0->unk54_C; + + case 31: + return param0->unk4C; + + case 32: + return param0->unk48; + + case 33: + return param0->unk49; + + case 34: + return param0->unk4A; + + case 35: + return param0->unk54_9; + + case 36: + return param0->unk54_A; + + case 37: + return param0->unk54_B; + + case 38: + return param0->unk5B; + + case 40: + return param0->unk54_D; + + case 41: + return param0->unk6C.unk2; + + case 42: + return param0->unk6C.unk0_0; + + case 43: + return param0->unk6C.unk0_2; + + case 44: + return param0->unk6C.unk0_3; + + case 45: + return param0->unk6C.unk0_4; + + case 46: + return param0->unk6C.unk0_5; + + } + + GF_AssertFail(); + + return 0; +} + + +THUMB_FUNC void FUN_020079E0(struct UnkStruct2 *param0, u32 param1, u32 param2) { + switch (param1) { + case 0: + param0->unk24 += param2; + break; + case 1: + param0->unk26 += param2; + break; + case 2: + param0->unk28 += param2; + break; + case 3: + param0->unk2C += param2; + break; + case 4: + param0->unk2E += param2; + break; + case 5: + param0->unk30 += param2; + break; + case 6: + param0->unk54_0 += param2; + break; + case 7: + param0->unk38 += param2; + break; + case 8: + param0->unk3A += param2; + break; + case 9: + param0->unk3C += param2; + break; + case 10: + param0->unk40 += param2; + break; + case 11: + param0->unk42 += param2; + break; + case 12: + param0->unk34 += param2; + break; + case 13: + param0->unk36 += param2; + break; + case 14: + param0->unk54_1 += param2; + break; + case 15: + param0->unk44 += param2; + break; + case 16: + param0->unk45 += param2; + break; + case 17: + param0->unk46 += param2; + break; + case 18: + param0->unk47 += param2; + break; + case 19: + param0->unk6C.unk4 += param2; + break; + case 20: + param0->unk6C.unk6 += param2; + break; + case 21: + param0->unk6C.unk8 += param2; + break; + case 22: + param0->unk6C.unka += param2; + break; + case 23: + param0->unk54_2 += param2; + break; + case 24: + param0->unk50_0 += param2; + break; + case 25: + param0->unk50_5 += param2; + break; + case 26: + param0->unk50_a += param2; + break; + case 27: + param0->unk50_f += param2; + break; + case 28: + param0->unk50_14 += param2; + break; + case 29: + param0->unk50_19 += param2; + break; + case 30: + param0->unk54_C += param2; + param0->unk00_8 = 1; + break; + case 31: + param0->unk4C += param2; + param0->unk00_8 = 1; + break; + case 32: + param0->unk48 += param2; + param0->unk00_8 = 1; + break; + case 33: + param0->unk49 += param2; + param0->unk00_8 = 1; + break; + case 34: + param0->unk4A += param2; + break; + case 35: + param0->unk54_9 += param2; + param0->unk00_7 = 1; + break; + case 36: + param0->unk54_A += param2; + param0->unk00_7 = 1; + break; + case 37: + param0->unk54_B += param2; + break; + case 38: + param0->unk5B += param2; + break; + case 40: + param0->unk54_D += param2; + param0->unk00_7 = 1; + break; + case 41: + param0->unk6C.unk2 += param2; + break; + case 42: + param0->unk6C.unk0_0 += param2; + param0->unk00_8 = 1; + break; + case 43: + param0->unk6C.unk0_2 += param2; + break; + case 44: + param0->unk6C.unk0_3 += param2; + break; + case 45: + param0->unk6C.unk0_4 += param2; + break; + case 46: + param0->unk6C.unk0_5 += param2; + break; + } +} + + +THUMB_FUNC void FUN_02007E40(struct UnkStruct2 *param0, u32 param1, u32 param2, u32 param3, u32 param4) { + param0->unk54_1 = 1; + param0->unk44 = param1; + param0->unk45 = param2; + param0->unk46 = param3; + param0->unk47 = param4; +} + + +THUMB_FUNC void FUN_02007E68(struct UnkStruct2 *param0, u32 param1, u32 param2, u32 param3, u32 param4) { + param0->unk54_C = 1; + param0->unk48 = param1; + param0->unk49 = param2; + param0->unk4A = 0; + param0->unk4B = param3; + param0->unk4C = param4; +} + + +THUMB_FUNC void FUN_02007E98(struct UnkStruct1 *param0, u32 param1, u32 param2, u32 param3, u32 param4) { + for (s32 i = 0; i < 4; i++) { + if (param0->unk000[i].unk00_0 == 0) { + continue; + } + + param0->unk000[i].unk54_C = 1; + param0->unk000[i].unk48 = (u8)param1; + param0->unk000[i].unk49 = (u8)param2; + param0->unk000[i].unk4A = 0; + param0->unk000[i].unk4B = (u8)param3; + param0->unk000[i].unk4C = param4; + } +} + + +THUMB_FUNC void FUN_02007EEC(struct UnkStruct2 *param0) { + param0->unk54_C = 0; + param0->unk48 = 0; + param0->unk49 = 0; + param0->unk4A = 0; + param0->unk4B = 0; + param0->unk4C = 0; + param0->unk00_8 = 1; +} + + + +THUMB_FUNC BOOL FUN_02007F20(struct UnkStruct2 *param0) { + return param0->unk54_C == 1; +} + + +THUMB_FUNC void FUN_02007F34(struct UnkStruct2 *param0, s32 param1) { + param0->unk2E = (40-param1) - (((40-param1)*param0->unk36)>>8); +} + + +#ifdef NONMATCHING +THUMB_FUNC void FUN_02007F48(struct UnkStruct2 *param0) { + u8 *r6 = ¶m0->unk59; + if (param0->unk58 == 0) { + return; + } + + if (param0->unk5A == 0) { + (*r6)++; + + while (param0->unk84[*r6].unk0 < -1) { + param0->unk5C[*r6]++; + + if (param0->unk84[*r6].unk1 == param0->unk5C[*r6] || param0->unk84[*r6].unk1 == 0) { + param0->unk5C[*r6] = 0; + r6++; + } else { + *r6 = -2-param0->unk84[*r6].unk0; + } + } + + if (param0->unk84[*r6].unk0 == -1 || *r6 >= 10) { + param0->unk5B = 0; + param0->unk58 = 0; + + return; + } + + param0->unk5B = param0->unk84[*r6].unk0; + param0->unk5A = param0->unk84[*r6].unk1; + + } else { + param0->unk5A--; + } +} +#else +asm void FUN_02007F48(struct UnkStruct2 *param0) { + // clang-format off + push {r4-r7} + add r1, r0, #0x0 + add r1, #0x58 + ldrb r1, [r1, #0x0] + add r6, r0, #0x0 + add r6, #0x59 + cmp r1, #0x0 + beq _0200800A + add r1, r0, #0x0 + add r1, #0x5a + ldrb r1, [r1, #0x0] + cmp r1, #0x0 + bne _02007FFE + ldrb r1, [r6, #0x0] + add r1, r1, #0x1 + strb r1, [r6, #0x0] + ldrb r3, [r6, #0x0] + mov r1, #0x84 + lsl r4, r3, #0x1 + add r2, r0, r4 + ldrsb r2, [r2, r1] + sub r1, #0x85 + cmp r2, r1 + bge _02007FC6 + mov r2, #0x0 + sub r1, r2, #0x2 +_02007F7C: + add r4, r0, r3 + add r4, #0x5c + ldrb r4, [r4, #0x0] + add r3, r0, r3 + add r3, #0x5c + add r4, r4, #0x1 + strb r4, [r3, #0x0] + ldrb r5, [r6, #0x0] + lsl r3, r5, #0x1 + add r4, r0, r3 + add r3, r4, #0x0 + add r7, r0, r5 + add r3, #0x85 + add r7, #0x5c + ldrb r3, [r3, #0x0] + ldrb r7, [r7, #0x0] + cmp r3, r7 + beq _02007FA4 + cmp r3, #0x0 + bne _02007FAE +_02007FA4: + add r3, r0, r5 + add r3, #0x5c + strb r2, [r3, #0x0] + add r6, r6, #0x1 + b _02007FB6 +_02007FAE: + mov r3, #0x84 + ldrsb r3, [r4, r3] + sub r3, r1, r3 + strb r3, [r6, #0x0] +_02007FB6: + ldrb r3, [r6, #0x0] + mov r5, #0x84 + lsl r4, r3, #0x1 + add r7, r0, r4 + ldrsb r7, [r7, r5] + sub r5, #0x85 + cmp r7, r5 + blt _02007F7C +_02007FC6: + add r2, r0, r4 + mov r1, #0x84 + ldrsb r2, [r2, r1] + sub r1, #0x85 + cmp r2, r1 + beq _02007FD6 + cmp r3, #0xa + blo _02007FE6 +_02007FD6: + add r1, r0, #0x0 + mov r2, #0x0 + add r1, #0x5b + strb r2, [r1, #0x0] + add r0, #0x58 + strb r2, [r0, #0x0] + pop {r4-r7} + bx lr +_02007FE6: + add r1, r0, #0x0 + add r1, #0x5b + strb r2, [r1, #0x0] + ldrb r1, [r6, #0x0] + lsl r1, r1, #0x1 + add r1, r0, r1 + add r1, #0x85 + ldrb r1, [r1, #0x0] + add r0, #0x5a + strb r1, [r0, #0x0] + pop {r4-r7} + bx lr +_02007FFE: + add r1, r0, #0x0 + add r1, #0x5a + ldrb r1, [r1, #0x0] + add r0, #0x5a + sub r1, r1, #0x1 + strb r1, [r0, #0x0] +_0200800A: + pop {r4-r7} + bx lr + // clang-format on +} +#endif + + +THUMB_FUNC void FUN_02008010(u8 *param0, struct UnkStruct2_sub *param1) { + param0[0] = 1; + param0[2] = 0; + param0[1] = param1->unk0; + param0[3] = param1->unk1; + ((u32 *)param0)[4] = param1; + + for (s32 i= 0; i<10;i++) { + param0[i+4]=0; + } +} + +#ifdef NONMATCHING +THUMB_FUNC s32 FUN_02008030(u8 *param0) { + if (*param0 != 0) { + u8 *r3 = param0+2; + struct UnkStruct2_sub *r4 = ((struct UnkStruct2_sub **)param0)[4]; + if (*param0 != 0) { + if (param0[3] == 0) { + (*r3)++; + + while (r4[*r3].unk0 < -1) { + param0[*r3+4]++; + if (r4[*r3].unk1 == param0[*r3+4] || r4[*r3].unk1 == 0) { + param0[*r3+4] = 0; + r3++; + } else { + *r3 = -2 - r4[*r3].unk0; + } + } + + if (r4[*r3].unk0 == -1 || *r3 >= 10) { + param0[0] = 0; + param0[1] = 0; + } else { + param0[1] = r4[*r3].unk0; + param0[3] = r4[*r3].unk1; + } + } else { + param0[3]--; + } + } + + return param0[1]; + + } + + return -1; +} +#else +asm s32 FUN_02008030(u8 *param0) { + // clang-format off + push {r4-r7} + ldrb r1, [r0, #0x0] + cmp r1, #0x0 + beq _020080C6 + add r3, r0, #0x2 + ldr r4, [r0, #0x10] + cmp r1, #0x0 + beq _020080C0 + ldrb r1, [r0, #0x3] + cmp r1, #0x0 + bne _020080BC + ldrb r1, [r3, #0x0] + add r1, r1, #0x1 + strb r1, [r3, #0x0] + ldrb r2, [r3, #0x0] + mov r1, #0x0 + mvn r1, r1 + lsl r5, r2, #0x1 + ldrsb r6, [r4, r5] + cmp r6, r1 + bge _02008098 + mov r1, #0x0 +_0200805C: + add r5, r0, r2 + ldrb r2, [r5, #0x4] + add r2, r2, #0x1 + strb r2, [r5, #0x4] + ldrb r2, [r3, #0x0] + add r5, r0, r2 + lsl r2, r2, #0x1 + add r2, r4, r2 + ldrb r7, [r2, #0x1] + ldrb r6, [r5, #0x4] + cmp r7, r6 + beq _02008078 + cmp r7, #0x0 + bne _0200807E +_02008078: + strb r1, [r5, #0x4] + add r3, r3, #0x1 + b _0200808A +_0200807E: + mov r5, #0x0 + ldrsb r5, [r2, r5] + mov r2, #0x1 + mvn r2, r2 + sub r2, r2, r5 + strb r2, [r3, #0x0] +_0200808A: + ldrb r2, [r3, #0x0] + mov r6, #0x0 + mvn r6, r6 + lsl r5, r2, #0x1 + ldrsb r7, [r4, r5] + cmp r7, r6 + blt _0200805C +_02008098: + ldrsb r5, [r4, r5] + mov r1, #0x0 + mvn r1, r1 + cmp r5, r1 + beq _020080A6 + cmp r2, #0xa + blo _020080AE +_020080A6: + mov r1, #0x0 + strb r1, [r0, #0x1] + strb r1, [r0, #0x0] + b _020080C0 +_020080AE: + strb r5, [r0, #0x1] + ldrb r1, [r3, #0x0] + lsl r1, r1, #0x1 + add r1, r4, r1 + ldrb r1, [r1, #0x1] + strb r1, [r0, #0x3] + b _020080C0 +_020080BC: + sub r1, r1, #0x1 + strb r1, [r0, #0x3] +_020080C0: + ldrb r0, [r0, #0x1] + pop {r4-r7} + bx lr +_020080C6: + mov r0, #0x0 + mvn r0, r0 + pop {r4-r7} + bx lr + // clang-format on +} +#endif + + +THUMB_FUNC void FUN_020080D0(struct UnkStruct2 *param0) { + param0->unk00_7 = 1; + param0->unk00_8 = 1; +} + + +THUMB_FUNC void FUN_020080E0(struct UnkStruct2 *param0) { + param0->unk14 = param0->unk04; + param0->unk78 = param0->unk6C; +} + + +THUMB_FUNC void FUN_0200813C(struct UnkStruct2 *param0) { + param0->unk04 = param0->unk14; + param0->unk6C = param0->unk78; + param0->unk00_7 = 1; + param0->unk00_8 = 1; +} + + +THUMB_FUNC void FUN_020081A8(struct UnkStruct1 *param0, u32 param1, u32 param2) { + param0->unk29C = param1; + param0->unk2A0 = param2; +} + + +THUMB_FUNC void FUN_020081B4(struct UnkStruct1 *param0, u32 param1, u32 param2) { + param0->unk2A4 = param1; + param0->unk2A8 = param2; +} + + +THUMB_FUNC u32 FUN_020081C0(u32 param0) { + return param0+4; +} + +THUMB_FUNC void FUN_020081C4(struct UnkStruct1 *param0) { + if (param0->unk2E1 != 0) { + param0->unk2E1 = 0; + NNS_G2dInitImageProxy(¶m0->unk260); + + param0->unk2B8.H = 0x20; + param0->unk2B8.W = 0x20; + param0->unk2B8.szByte = param0->unk2A0; + param0->unk2B8.pRawData = param0->unk2AC; + + NNS_G2dLoadImage2DMapping(¶m0->unk2B8, param0->unk29C, 0, ¶m0->unk260); + + } + + if (param0->unk2E2 != 0) { + param0->unk2E2 = 0; + NNS_G2dInitImagePaletteProxy(¶m0->unk284); + + param0->unk2D0.szByte = param0->unk2A8; + param0->unk2D0.pRawData = param0->unk2B0; + + NNS_G2dLoadPalette(¶m0->unk2D0, param0->unk2A4, 0, ¶m0->unk284); + + } +} + + +THUMB_FUNC void FUN_0200825C(struct UnkStruct1 *param0, u8 param1) { + param0->unk2E3 = param1; +} + + +THUMB_FUNC BOOL FUN_02008268(struct UnkStruct2 *param0) { + GF_ASSERT(param0); + return param0->unk00_0 != 0; +} + + +THUMB_FUNC void FUN_02008284(struct UnkStruct1 *param0, u32 param1) { + param0->unk2E4 |= param1; +} + + +THUMB_FUNC void FUN_02008290(struct UnkStruct1 *param0, u32 param1) { + param0->unk2E4 &= (param1^~0); +} + + +extern void FUN_020088EC(struct UnkStruct2 *, u8 *); +extern u8 FUN_020088D8(u8); + +THUMB_FUNC void FUN_020082A8(struct UnkStruct1 *param0) { + NNSG2dCharacterData *st58; + int st54; + int r4; + int st14; + u8 *st50; + void *st4c; + u8 st48 = 0; + + for (st54 = 0; st54 < 4; st54++) { + if (param0->unk000[st54].unk00_0 != 0 && param0->unk000[st54].unk00_7 != 0) { + param0->unk000[st54].unk00_7 = 0; + st48 = 1; + st4c = AllocAndReadWholeNarcMemberByIdPair(param0->unk000[st54].unk04.field_00, param0->unk000[st54].unk04.field_02, param0->unk298); + NNS_G2dGetUnpackedCharacterData(st4c, &st58); + param0->unk2B8.pixelFmt = st58->pixelFmt; + param0->unk2B8.mapingType = st58->mapingType; + param0->unk2B8.characterFmt = st58->characterFmt; + + st50 = st58->pRawData; + FUN_02008A74(st50); + FUN_020088EC(¶m0->unk000[st54], st50); + + if (st54 == 3) { + for (st14 = 0; st14 < 0x50; st14++) { + for (r4 = 0; r4 < 0x50; r4++) { + if (r4 < 0x28) { + if (param0->unk000[st54].unk54_9 != 0 && param0->unk000[st54].unk54_A != 0) { + param0->unk2AC[st14*0x80+r4+0x50] = FUN_020088D8(st50[(0x4f-st14)*0x50+(0x27-r4)]); + } else if (param0->unk000[st54].unk54_9 != 0) { + param0->unk2AC[st14*0x80+r4+0x50] = FUN_020088D8(st50[st14*0x50+(0x27-r4)]); + } else if (param0->unk000[st54].unk54_A != 0) { + param0->unk2AC[st14*0x80+r4+0x50] = st50[(0x4f-st14)*0x50+r4]; + } else if (param0->unk000[st54].unk54_D != 0) { + if (st14%(param0->unk000[st54].unk54_D*2) != 0) { + param0->unk2AC[st14*0x80+r4+0x50] = param0->unk2AC[(st14-1)*0x80+r4+0x50]; + } else if (r4%param0->unk000[st54].unk54_D != 0) { + param0->unk2AC[st14*0x80+r4+0x50] = param0->unk2AC[st14*0x80+r4+0x4f]; + } else { + param0->unk2AC[st14*0x80+r4+0x50] = ((st50[st14*0x50+r4]&0xf) | ((st50[st14*0x50+r4]&0xf)<<4)); + } + } else { + param0->unk2AC[st14*0x80+r4+0x50] = st50[st14*0x50+r4]; + } + } else { + //_02008442 + if (param0->unk000[st54].unk54_9 != 0 && param0->unk000[st54].unk54_A != 0) { + param0->unk2AC[st14*0x80+r4+0x2828] = FUN_020088D8(st50[(0x4f-st14)*0x50+(0x4f-(r4-0x28))]); + } else if (param0->unk000[st54].unk54_9 != 0) { + param0->unk2AC[st14*0x80+r4+0x2828] = FUN_020088D8(st50[st14*0x50+(0x4f-(r4-0x28))]); + } else if (param0->unk000[st54].unk54_A != 0) { + param0->unk2AC[st14*0x80+r4+0x2828] = st50[(0x4f-st14)*0x50+r4]; + } else if (param0->unk000[st54].unk54_D != 0) { + if (st14%(param0->unk000[st54].unk54_D*2) != 0) { + param0->unk2AC[st14*0x80+r4+0x2828] = param0->unk2AC[(st14-1)*0x80+r4+0x2828]; + } else if (r4%param0->unk000[st54].unk54_D != 0) { + param0->unk2AC[st14*0x80+r4+0x2828] = param0->unk2AC[st14*0x80+(r4-1)+0x2828]; + } else { + param0->unk2AC[st14*0x80+r4+0x2828] = ((st50[st14*0x50+r4]&0xf) | ((st50[st14*0x50+r4]&0xf)<<4)); + } + } else { + param0->unk2AC[st14*0x80+r4+0x2828] = st50[st14*0x50+r4]; + } + } + } + } + + } else { + //_02008554 + for (st14 = 0; st14 < 0x50; st14++) { + for (r4 = 0; r4 < 0x50; r4++) { + if (param0->unk000[st54].unk54_9 != 0 && param0->unk000[st54].unk54_A != 0) { + if (r4 < 0x28) { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = FUN_020088D8(st50[(0x4f-st14)*0x50+(0x27-r4)]); + } else { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = FUN_020088D8(st50[(0x4f-st14)*0x50+(0x4f-(r4-0x28))]); + } + } else if (param0->unk000[st54].unk54_9 != 0) { + if (r4 < 0x28) { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = FUN_020088D8(st50[st14*0x50+(0x27-r4)]); + } else { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = FUN_020088D8(st50[st14*0x50+(0x4f-(r4-0x28))]); + } + } else if (param0->unk000[st54].unk54_A != 0) { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = st50[(0x4f-st14)*0x50+r4]; + } else if (param0->unk000[st54].unk54_D != 0) { + if (st14%(param0->unk000[st54].unk54_D*2) != 0) { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = param0->unk2AC[(st14-1)*0x80+r4+st54*0x2800]; + } else if (r4%(param0->unk000[st54].unk54_D) != 0) { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = param0->unk2AC[st14*0x80+(r4-1)+st54*0x2800]; + } else { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = ((st50[st14*0x50+r4]&0xf) | ((st50[st14*0x50+r4]&0xf)<<4)); + } + } else { + param0->unk2AC[st14*0x80+r4+st54*0x2800] = st50[st14*0x50+r4]; + } + } + } + + } + + FreeToHeap(st4c); + } + //_020086C2 + } + + param0->unk2E1 = st48; +} + + + +THUMB_FUNC void FUN_020086F4(struct UnkStruct1 *param0) { + NNSG2dPaletteData *st18; + int st14, r7; + u16 *r1; + void *st10; + u8 stc = 0; + + + for (st14 = 0 ; st14 < 4; st14++) { + if (param0->unk000[st14].unk00_0 != 0 && param0->unk000[st14].unk00_8 != 0) { + param0->unk000[st14].unk00_8 = 0; + stc = 1; + st10 = AllocAndReadWholeNarcMemberByIdPair(param0->unk000[st14].unk04.field_00, param0->unk000[st14].unk04.field_04, param0->unk298); + NNS_G2dGetUnpackedPaletteData(st10, &st18); + param0->unk2D0.fmt = st18->fmt; + r1 = st18->pRawData; + for (r7 = 0; r7 < 0x10; r7++) { + param0->unk2B0[st14*0x10+r7] = r1[r7]; + param0->unk2B4[st14*0x10+r7] = r1[r7]; + } + FreeToHeap(st10); + + if (param0->unk000[st14].unk6C.unk0_0 != 0) { + st10 = AllocAndReadWholeNarcMemberByIdPair(NARC_POKETOOL_POKEGRA_OTHERPOKE, NARC_otherpoke_narc_0212_NCLR, param0->unk298); + NNS_G2dGetUnpackedPaletteData(st10, &st18); + r1 = st18->pRawData; + for (r7 = 0; r7 < 0x10; r7++) { + param0->unk2B0[(param0->unk000[st14].unk6C.unk0_0+3)*0x10 + r7] = r1[r7]; + param0->unk2B4[(param0->unk000[st14].unk6C.unk0_0+3)*0x10 + r7] = r1[r7]; + } + FreeToHeap(st10); + } + } + //_020087E0 + + if (param0->unk000[st14].unk00_0 != 0 && param0->unk000[st14].unk54_C != 0) { + if (param0->unk000[st14].unk4A == 0) { + stc = 1; + param0->unk000[st14].unk4A = param0->unk000[st14].unk4B; + BlendPalette(param0->unk2B4+st14*0x10, param0->unk2B0+st14*0x10, 0x10, param0->unk000[st14].unk48, (u16)param0->unk000[st14].unk4C); + + if (param0->unk000[st14].unk6C.unk0_0 != 0) { + BlendPalette(param0->unk2B4+(param0->unk000[st14].unk6C.unk0_0+3)*0x10, param0->unk2B0+(param0->unk000[st14].unk6C.unk0_0+3)*0x10, 0x10, param0->unk000[st14].unk48, (u16)param0->unk000[st14].unk4C); + } + + if (param0->unk000[st14].unk48 == param0->unk000[st14].unk49) { + param0->unk000[st14].unk54_C = 0; + } else if (param0->unk000[st14].unk48 > param0->unk000[st14].unk49) { + param0->unk000[st14].unk48--; + } else { + param0->unk000[st14].unk48++; + } + } else { + param0->unk000[st14].unk4A--; + } + } + } + + param0->unk2E2 = stc; + +} + + + +THUMB_FUNC u8 FUN_020088D8(u8 param0) { + return ((u8)((param0&0xf0)>>4)) | ((u8)(param0<<4)); +} + +extern void FUN_02008904(u8 *param0, u32 param1, u32 param2); + +THUMB_FUNC void FUN_020088EC(struct UnkStruct2 *param0, u8 *param1) { + if (param0->unk04.field_06 != 0) { + FUN_02008904(param1, param0->unk04.field_0C,1); + } +} + + +THUMB_FUNC void FUN_02008904(u8 *param0, u32 param1, u32 param2) { + struct UnkStruct4 *st10; + s32 i; + u32 r2; + u8 r0; + u8 r4; + u8 r1; + u32 st0 = param1; + + for (i = 0; i < 4; i++) { + st10 = UNK_02105AE8[i]; + r1 = 0; + while (st10[r1].unk0 != 0xff) { + r0 = st10[r1].unk0+((param1&0xf) - 8); + r4 = st10[r1].unk1+(((param1&0xf0)>>4)-8); + r2 = r0/2 + r4*0x50; + if ((r0&1) != 0) { + if ((param0[r2]&0xf0) >= 0x10 && (param0[r2]&0xf0) <= 0x30) { + param0[r2] += 0x50; + } + } else { + if ((param0[r2]&0xf) >= 1 && (param0[r2]&0xf) <= 3) { + param0[r2]+= 5; + } + } + + r1++; + } + param1 >>= 8; + } + + param1 = st0; + + if (param2 != 0) { + for (i = 0; i < 4; i++) { + st10 = UNK_02105AE8[i]; + r1 = 0; + while (st10[r1].unk0 != 0xff) { + r0 = st10[r1].unk0-14+((param1&0xf)-8)+0x50; + r4 = st10[r1].unk1+(((param1&0xf0)>>4)-8); + r2 = r0/2 + r4*0x50; + if ((r0 &1) != 0) { + if ((param0[r2]&0xf0) >= 0x10 && (param0[r2]&0xf0) <= 0x30) { + param0[r2] += 0x50; + } + } else { + if ((param0[r2]&0xf) >= 1 && (param0[r2]&0xf) <= 3) { + param0[r2]+= 5; + } + } + r1++; + } + param1 >>= 8; + } + } +} + + + +THUMB_FUNC u16 FUN_02008A54(u32 *param0) { + *param0 = (*param0)*0x41C64E6D+0x6073; + + return *param0>>16; +} + + +THUMB_FUNC void FUN_02008A74(u8 *param0) { + u32 st0 = ((u16 *)param0)[0xc7f]; + for (s32 r4 = 0xc7f; r4 > -1; r4--) { + ((u16 *)param0)[r4] ^= st0; + FUN_02008A54(&st0); + } +} diff --git a/arm9/src/unk_02006D98_c.c b/arm9/src/unk_02006D98_c.c deleted file mode 100644 index 1ae1fa6e..00000000 --- a/arm9/src/unk_02006D98_c.c +++ /dev/null @@ -1,1524 +0,0 @@ -#include "global.h" -#include "MI_memory.h" -#include "NNS_g2d.h" -#include "filesystem.h" -#include "heap.h" -#include "poketool/pokegra/otherpoke.naix" -#include "registers.h" -#include "mod63_021DB450.h" - -struct UnkStruct3 { - u32 unk00[8]; -}; - -struct UnkStruct4{ - u8 unk0; - u8 unk1; -}; - - - -static const u8 UNK_020ECCE0[] = { - 0xFF, 0xFF, 0x1B, 0x0F, 0x1C, 0x0F, 0x1D, 0x0F, 0x1E, 0x0F, 0x1A, 0x10, 0x1B, 0x10, 0x1C, 0x10, 0x1D, 0x10, - 0x1E, 0x10, 0x1F, 0x10, 0x19, 0x11, 0x1A, 0x11, 0x1B, 0x11, 0x1C, 0x11, 0x1D, 0x11, 0x1E, 0x11, - 0x1F, 0x11, 0x20, 0x11, 0x19, 0x12, 0x1A, 0x12, 0x1B, 0x12, 0x1C, 0x12, 0x1D, 0x12, 0x1E, 0x12, - 0x1F, 0x12, 0x20, 0x12, 0x19, 0x13, 0x1A, 0x13, 0x1B, 0x13, 0x1C, 0x13, 0x1D, 0x13, 0x1E, 0x13, - 0x1F, 0x13, 0x20, 0x13, 0x19, 0x14, 0x1A, 0x14, 0x1B, 0x14, 0x1C, 0x14, 0x1D, 0x14, 0x1E, 0x14, - 0x1F, 0x14, 0x20, 0x14, 0x1A, 0x15, 0x1B, 0x15, 0x1C, 0x15, 0x1D, 0x15, 0x1E, 0x15, 0x1F, 0x15, - 0x1B, 0x16, 0x1C, 0x16, 0x1D, 0x16, 0x1E, 0x16, 0xFF, 0xFF, -}; - - - - -static const u8 UNK_020ECC10[] = { - 0x1E, 0x21, 0x1F, 0x21, 0x20, 0x21, 0x1D, 0x22, 0x1E, 0x22, 0x1F, 0x22, 0x20, 0x22, 0x21, 0x22, - 0x1C, 0x23, 0x1D, 0x23, 0x1E, 0x23, 0x1F, 0x23, 0x20, 0x23, 0x21, 0x23, 0x22, 0x23, 0x1C, 0x24, - 0x1D, 0x24, 0x1E, 0x24, 0x1F, 0x24, 0x20, 0x24, 0x21, 0x24, 0x22, 0x24, 0x1C, 0x25, 0x1D, 0x25, - 0x1E, 0x25, 0x1F, 0x25, 0x20, 0x25, 0x21, 0x25, 0x22, 0x25, 0x1C, 0x26, 0x1D, 0x26, 0x1E, 0x26, - 0x1F, 0x26, 0x20, 0x26, 0x21, 0x26, 0x22, 0x26, 0x1C, 0x27, 0x1D, 0x27, 0x1E, 0x27, 0x1F, 0x27, - 0x20, 0x27, 0x21, 0x27, 0x22, 0x27, 0x1D, 0x28, 0x1E, 0x28, 0x1F, 0x28, 0x20, 0x28, 0x21, 0x28, - 0x1E, 0x29, 0x1F, 0x29, 0x20, 0x29, 0xFF, 0xFF, -}; - - -static const u8 UNK_020ECC78[] = { - 0x33, 0x11, 0x34, 0x11, 0x35, 0x11, 0x36, 0x11, 0x32, 0x12, 0x33, 0x12, 0x34, 0x12, 0x35, 0x12, - 0x36, 0x12, 0x37, 0x12, 0x31, 0x13, 0x32, 0x13, 0x33, 0x13, 0x34, 0x13, 0x35, 0x13, 0x36, 0x13, - 0x37, 0x13, 0x38, 0x13, 0x31, 0x14, 0x32, 0x14, 0x33, 0x14, 0x34, 0x14, 0x35, 0x14, 0x36, 0x14, - 0x37, 0x14, 0x38, 0x14, 0x31, 0x15, 0x32, 0x15, 0x33, 0x15, 0x34, 0x15, 0x35, 0x15, 0x36, 0x15, - 0x37, 0x15, 0x38, 0x15, 0x31, 0x16, 0x32, 0x16, 0x33, 0x16, 0x34, 0x16, 0x35, 0x16, 0x36, 0x16, - 0x37, 0x16, 0x38, 0x16, 0x32, 0x17, 0x33, 0x17, 0x34, 0x17, 0x35, 0x17, 0x36, 0x17, 0x37, 0x17, - 0x33, 0x18, 0x34, 0x18, 0x35, 0x18, 0x36, 0x18, -}; - -static const u8 UNK_020ECDCC[] = { - 0x2B, 0x21, 0x2C, 0x21, 0x2D, 0x21, 0x29, 0x22, 0x2A, 0x22, 0x2B, 0x22, 0x2C, 0x22, 0x2D, 0x22, - 0x2E, 0x22, 0x2F, 0x22, 0x28, 0x23, 0x29, 0x23, 0x2A, 0x23, 0x2B, 0x23, 0x2C, 0x23, 0x2D, 0x23, - 0x2E, 0x23, 0x2F, 0x23, 0x30, 0x23, 0x28, 0x24, 0x29, 0x24, 0x2A, 0x24, 0x2B, 0x24, 0x2C, 0x24, - 0x2D, 0x24, 0x2E, 0x24, 0x2F, 0x24, 0x30, 0x24, 0x28, 0x25, 0x29, 0x25, 0x2A, 0x25, 0x2B, 0x25, - 0x2C, 0x25, 0x2D, 0x25, 0x2E, 0x25, 0x2F, 0x25, 0x30, 0x25, 0x28, 0x26, 0x29, 0x26, 0x2A, 0x26, - 0x2B, 0x26, 0x2C, 0x26, 0x2D, 0x26, 0x2E, 0x26, 0x2F, 0x26, 0x30, 0x26, 0x28, 0x27, 0x29, 0x27, - 0x2A, 0x27, 0x2B, 0x27, 0x2C, 0x27, 0x2D, 0x27, 0x2E, 0x27, 0x2F, 0x27, 0x30, 0x27, 0x28, 0x28, - 0x29, 0x28, 0x2A, 0x28, 0x2B, 0x28, 0x2C, 0x28, 0x2D, 0x28, 0x2E, 0x28, 0x2F, 0x28, 0x30, 0x28, - 0x29, 0x29, 0x2A, 0x29, 0x2B, 0x29, 0x2C, 0x29, 0x2D, 0x29, 0x2E, 0x29, 0x2F, 0x29, 0x2B, 0x2A, - 0x2C, 0x2A, 0x2D, 0x2A, 0xFF, 0xFF -}; - - - - -static const int UNK_020ECBD0[4][4] = { - {160, 160, 224, 176}, {160, 160, 224, 176}, {160, 176, 224, 192}, {160, 192, 224, 208} -}; - - - -// static const int UNK_020ECD4C[4][2][4] = { -// { -// {0, 0, 0x50, 0x50}, {0x50, 0, 0xA0, 0x50} -// }, { - -// {0, 0x50, 0x50, 0xA0}, {0x50, 0x50, 0xA0, 0xA0} - -// }, { - - -// {0, 0xA0, 0x50, 0xF0}, {0x50, 0xA0, 0xA0, 0xF0} - -// }, { - -// {0xA0, 0, 0xF0, 0x50}, {0xA0, 0x50, 0xF0, 0xA0} - -// } -// }; - - -const u8 UNK_020ECD4C[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, - 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, - 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, - 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, -}; - - - -const struct UnkStruct4 *UNK_02105AE8[] = { - (struct UnkStruct4 *)(UNK_020ECCE0+2), - (struct UnkStruct4 *)UNK_020ECC78, - (struct UnkStruct4 *)UNK_020ECC10, - (struct UnkStruct4 *)UNK_020ECDCC, -}; - -struct UnkStruct2 { - u32 unk00_0:1; - u32 unk00_1:6; - u32 unk00_7:1; - u32 unk00_8:1; - struct UnkStruct63_021DB49C unk04; - struct UnkStruct63_021DB49C unk14; - s16 unk24; - s16 unk26; - u32 unk28; - s16 unk2C; - s16 unk2E; - u32 unk30; - s16 unk34; - s16 unk36; - u16 unk38; - u16 unk3A; - u16 unk3C; - u16 unk3E; - s16 unk40; - s16 unk42; - u8 unk44; - u8 unk45; - u8 unk46; - u8 unk47; - u8 unk48; - u8 unk49; - u8 unk4A; - u8 unk4B; - u32 unk4C; - u32 unk50_0:5; - u32 unk50_5:5; - u32 unk50_a:5; - u32 unk50_f:5; - u32 unk50_14:5; - u32 unk50_19:5; - u32 unk50_1E:2; - u32 unk54_0:1; - u32 unk54_1:1; - u32 unk54_2:5; - u32 unk54_7:2; - u32 unk54_9:1; - u32 unk54_A:1; - u32 unk54_B:1; - u32 unk54_C:1; - u32 unk54_D:4; - u8 unk58; - u8 unk59; - u8 unk5A; - u8 unk5B; - u8 unk5C[10]; - void (*unk68)(struct UnkStruct2 *, void *); - u16 unk6C_0:2; - u16 unk6C_2:1; - u16 unk6C_3:1; - u16 unk6C_4:1; - u16 unk6C_5:2; - s8 unk6E; - u8 unk6F; - s16 unk70; - s16 unk72; - s16 unk74; - s16 unk76; - u8 unk78[0xc]; - struct UnkStruct2_sub { - s8 unk0; - u8 unk1; - } unk84[10]; -}; - - -struct UnkStruct1 -{ - struct UnkStruct2 unk000[4]; - u8 unk260[0xc]; - u32 unk26C; - u32 unk270; - u32 unk274; - u32 unk278; - u32 unk27C; - u8 unk280[0x18]; - u32 unk298; - u32 unk29C; - u32 unk2A0; - u32 unk2A4; - u32 unk2A8; - void *unk2AC; - void *unk2B0; - void *unk2B4; - u32 unk2B8; - u32 unk2BC; - u32 unk2C0; - u32 unk2C4; - u8 unk2C8[0x18]; - u8 unk2E0; - u8 unk2E1; - u8 unk2E2; - u8 unk2E3; - u32 unk2E4; -}; - -extern void NNS_G2dSetupSoftwareSpriteCamera(void); -extern void FUN_02008A74(void *); - -THUMB_FUNC struct UnkStruct1 *FUN_02006D98(u32 heap_id) -{ - struct UnkStruct1 *ptr = AllocFromHeap(heap_id, sizeof(struct UnkStruct1)); - ptr->unk298 = heap_id; - ptr->unk2E0 = 0; - ptr->unk29C = 0; - ptr->unk2A0 = 0x8000; - ptr->unk2A4 = 0; - ptr->unk2A8 = 0x80; - - ptr->unk2AC = AllocFromHeap(heap_id, 0x8000); - - ptr->unk2B0 = AllocFromHeap(heap_id, 0xc0); - MIi_CpuClearFast(0, ptr->unk2B0, 4); - - ptr->unk2B4 = AllocFromHeap(heap_id, 0xc0); - MIi_CpuClearFast(0, ptr->unk2B4, 4); - - for (int i = 0; i < 4; i++) - { - MIi_CpuClearFast(0, &ptr->unk000[i], sizeof(struct UnkStruct2)); - } - - NNS_G2dSetupSoftwareSpriteCamera(); - ptr->unk2E3 = 0; - - u8 *st8; - void *st4 = AllocAndReadWholeNarcMemberByIdPair( - NARC_POKETOOL_POKEGRA_OTHERPOKE, NARC_otherpoke_narc_0211_NCGR, ptr->unk298); - NNSG2dCharacterData *stc; - NNS_G2dGetUnpackedCharacterData(st4, &stc); - - ptr->unk2BC = stc->pixelFmt; - ptr->unk2C0 = stc->mapingType; - ptr->unk2C4 = stc->characterFmt; - st8 = stc->pRawData; - - FUN_02008A74(st8); - MI_CpuFill8(ptr->unk2AC, *st8, 0x8000); - - for (int i = 0; i < 0x50; i++) - { - for (int j = 0; j < 0x28; j++) - { - ((u8 *)ptr->unk2AC)[0x5050 + i * 0x80 + j] = st8[i * 0x50 + j]; - } - } - - FreeToHeap(st4); - ptr->unk2E1 = 1; - ptr->unk2E2 = 1; - - return ptr; -} - - -extern void FUN_020082A8(struct UnkStruct1 *); -extern void FUN_020086F4(struct UnkStruct1 *); -extern void NNS_G3dGeFlushBuffer(); -extern void FUN_02007F48(struct UnkStruct2 *); - - - -extern void NNS_G2dDrawSpriteFast(s16 param0, s16 param1, int param2, int param3, int param4, int param5, int param6, int param7, int param8); - -#ifdef NONMATCHING - -// mostly matching, only 2 register writes messed up -THUMB_FUNC void FUN_02006ED4(struct UnkStruct1 *param0) { - s32 arg3; - s32 arg4; - - FUN_020082A8(param0); - FUN_020086F4(param0); - - NNS_G3dGeFlushBuffer(); - - reg_G3_MTX_PUSH = 0; - - // this is all shuffled however I try - reg_G3_TEXIMAGE_PARAM = (param0->unk29C >> 3) | (param0->unk274 << 26) | (1 << 30) | (param0->unk26C << 20) | (param0->unk270 << 23) | (param0->unk27C << 29); - - for (int st18 = 0; st18 < 4; st18++) { - if (param0->unk000[st18].unk00_0 == 0 || param0->unk000[st18].unk54_0 != 0 || param0->unk000[st18].unk54_B != 0) { - continue; - } - - if (param0->unk000[st18].unk68 != NULL) { - param0->unk000[st18].unk68(¶m0->unk000[st18], ¶m0->unk000[st18].unk24); - } - - NNS_G3dGeFlushBuffer(); - - if (param0->unk2E3 != 1) { - reg_G3_MTX_IDENTITY = 0; - } - - FUN_02007F48(¶m0->unk000[st18]); - - u32 shift; - if (param0->unk274 == 2) { - shift = 1; - } else { - shift = 0; - } - - reg_G3_TEXPLTT_BASE = (param0->unk2A4 + st18*0x20)>>(4-shift); - - u32 r1 = param0->unk000[st18].unk28<<0xc; - u32 r0 = (param0->unk000[st18].unk26 + param0->unk000[st18].unk42)<<0xc; - u32 r3 = (param0->unk000[st18].unk24 + param0->unk000[st18].unk40)<<0xc; - - reg_G3_MTX_TRANS = r3; - reg_G3_MTX_TRANS = r0; - reg_G3_MTX_TRANS = r1; - - - s32 idx = ((s32)param0->unk000[st18].unk38)>>4; - G3_RotX(FX_SinCosTable_[idx*2], FX_SinCosTable_[idx*2+1]); - - s32 idy = ((s32)param0->unk000[st18].unk3A)>>4; - G3_RotY(FX_SinCosTable_[idy*2], FX_SinCosTable_[idy*2+1]); - - s32 idz = ((s32)param0->unk000[st18].unk3C)>>4; - G3_RotZ(FX_SinCosTable_[idz*2], FX_SinCosTable_[idz*2+1]); - - - r1 = -(param0->unk000[st18].unk28<<0xc); - r0 = -((param0->unk000[st18].unk26 + param0->unk000[st18].unk42)<<0xc); - r3 = -((param0->unk000[st18].unk24 + param0->unk000[st18].unk40)<<0xc); - - reg_G3_MTX_TRANS = r3; - reg_G3_MTX_TRANS = r0; - reg_G3_MTX_TRANS = r1; - - reg_G3_DIF_AMB = - ((u16)(param0->unk000[st18].unk50_0 | (param0->unk000[st18].unk50_5<<5) | (param0->unk000[st18].unk50_a<<10))) | - (((u16)(param0->unk000[st18].unk50_f | (param0->unk000[st18].unk50_14<<5) | (param0->unk000[st18].unk50_19<<10)))<<16) | - 0x8000; - - - reg_G3_SPE_EMI = 0x4210; - - - { - // shuffled there as well - u32 r1 = param0->unk000[st18].unk00_1; - u32 r0 = param0->unk000[st18].unk54_2; - reg_G3_POLYGON_ATTR = 0xc0 | (r1<<24) | (r0<<16); - } - - if (param0->unk000[st18].unk54_1 != 0) { - u32 r6 = param0->unk000[st18].unk44 + (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][0]; - u32 r12 = param0->unk000[st18].unk46; - u32 r1 = param0->unk000[st18].unk45 + (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][1]; - u32 r7 = param0->unk000[st18].unk47; - u32 r0 = r12 + r6; - - - NNS_G2dDrawSpriteFast( - param0->unk000[st18].unk24-40 + param0->unk000[st18].unk44 + param0->unk000[st18].unk2C, - param0->unk000[st18].unk26-40 + param0->unk000[st18].unk45 + param0->unk000[st18].unk2E - param0->unk000[st18].unk6E, - param0->unk000[st18].unk28 + param0->unk000[st18].unk30, - r12, - r7, - r6, - r1, - r0, - r7 + r1 - ); - - } else { - arg3 = (param0->unk000[st18].unk34*80)>>8; - arg4 = (param0->unk000[st18].unk36*80)>>8; - - NNS_G2dDrawSpriteFast( - param0->unk000[st18].unk24-(arg3/2)+param0->unk000[st18].unk2C, - param0->unk000[st18].unk26-(arg4/2)+ param0->unk000[st18].unk2E - param0->unk000[st18].unk6E, - param0->unk000[st18].unk28 + param0->unk000[st18].unk30, - arg3, - arg4, - (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][0], - (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][1], - (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][2], - (*((int(*)[4][2][4])&UNK_020ECD4C))[st18][param0->unk000[st18].unk5B][3] - ); - } - - - if (param0->unk000[st18].unk6C_0 == 0 || param0->unk000[st18].unk6C_5 == 0 || param0->unk000[st18].unk54_1 != 0 || (param0->unk2E4 & 1) != 0) { - continue; - } - - if (param0->unk2E3 != 1) { - reg_G3_MTX_IDENTITY = 0; - } - - u32 shift2; - if (param0->unk274 == 2) { - shift2 = 1; - } else { - shift2 = 0; - } - reg_G3_TEXPLTT_BASE = (param0->unk2A4 + ((param0->unk000[st18].unk6C_0+3)<<5))>>(4-shift2); - - - - if (param0->unk000[st18].unk6C_4 != 0) { - arg3 = (param0->unk000[st18].unk34*64)>>8; - arg4 = (param0->unk000[st18].unk36*16)>>8; - } else { - arg3 = 64; - arg4 = 16; - } - - if (param0->unk000[st18].unk6C_2 != 0) { - param0->unk000[st18].unk70 = param0->unk000[st18].unk24+ param0->unk000[st18].unk2C + param0->unk000[st18].unk74; - } - - if (param0->unk000[st18].unk6C_3 != 0) { - param0->unk000[st18].unk72 = param0->unk000[st18].unk26 + param0->unk000[st18].unk2E + param0->unk000[st18].unk76; - } - - - NNS_G2dDrawSpriteFast( - param0->unk000[st18].unk70 - (arg3/2), - param0->unk000[st18].unk72 - (arg4/2), - 0xFFFFFC18, - arg3, - arg4, - UNK_020ECBD0[param0->unk000[st18].unk6C_5][0], - UNK_020ECBD0[param0->unk000[st18].unk6C_5][1], - UNK_020ECBD0[param0->unk000[st18].unk6C_5][2], - UNK_020ECBD0[param0->unk000[st18].unk6C_5][3] - ); - - } - - - reg_G3_MTX_POP = 1; -} -#else -asm void FUN_02006ED4(struct UnkStruct1 *param0) { - // clang-format off - push {r3-r7, lr} - sub sp, #0x20 - add r5, r0, #0x0 - bl FUN_020082A8 - add r0, r5, #0x0 - bl FUN_020086F4 - bl NNS_G3dGeFlushBuffer - mov r6, #0x9f - mov r0, #0x0 - ldr r4, =0x04000444 - lsl r6, r6, #0x2 - str r0, [r4, #0x0] - str r0, [sp, #0x18] - add r0, r6, #0x0 - sub r0, #0xc - ldr r1, [r5, r0] - add r3, r6, #0x0 - ldr r2, [r5, r6] - add r0, r6, #0x0 - sub r3, #0x8 - add r6, #0x20 - ldr r3, [r5, r3] - ldr r6, [r5, r6] - sub r0, #0x10 - ldr r0, [r5, r0] - lsr r6, r6, #0x3 - lsl r3, r3, #0x1a - orr r6, r3 - mov r3, #0x1 - lsl r3, r3, #0x1e - lsl r0, r0, #0x14 - orr r3, r6 - lsl r1, r1, #0x17 - orr r0, r3 - lsl r2, r2, #0x1d - orr r0, r1 - orr r0, r2 - str r0, [r4, #0x64] - ldr r0, [sp, #0x18] - add r4, r5, #0x0 - str r0, [sp, #0x14] - ldr r0, =UNK_020ECD4C - str r0, [sp, #0x1c] -_02006F30: - ldr r0, [r4, #0x0] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - beq _02006F46 - ldr r0, [r4, #0x54] - lsl r1, r0, #0x1f - lsr r1, r1, #0x1f - bne _02006F46 - lsl r0, r0, #0x14 - lsr r0, r0, #0x1f - beq _02006F48 -_02006F46: - b _020072BC -_02006F48: - ldr r2, [r4, #0x68] - cmp r2, #0x0 - beq _02006F56 - add r1, r4, #0x0 - add r0, r4, #0x0 - add r1, #0x24 - blx r2 -_02006F56: - bl NNS_G3dGeFlushBuffer - ldr r0, =0x000002E3 - ldrb r0, [r5, r0] - cmp r0, #0x1 - beq _02006F68 - ldr r0, =0x04000454 - mov r1, #0x0 - str r1, [r0, #0x0] -_02006F68: - add r0, r4, #0x0 - bl FUN_02007F48 - mov r0, #0x9d - lsl r0, r0, #0x2 - ldr r0, [r5, r0] - cmp r0, #0x2 - bne _02006F7C - mov r0, #0x1 - b _02006F7E -_02006F7C: - mov r0, #0x0 -_02006F7E: - mov r1, #0xa9 - lsl r1, r1, #0x2 - ldr r2, [r5, r1] - ldr r1, [sp, #0x14] - add r2, r2, r1 - mov r1, #0x4 - sub r0, r1, r0 - add r1, r2, #0x0 - lsr r1, r0 - ldr r0, =0x040004AC - str r1, [r0, #0x0] - ldr r0, [r4, #0x28] - lsl r1, r0, #0xc - mov r0, #0x26 - ldrsh r2, [r4, r0] - mov r0, #0x42 - ldrsh r0, [r4, r0] - add r0, r2, r0 - mov r2, #0x24 - ldrsh r3, [r4, r2] - mov r2, #0x40 - ldrsh r2, [r4, r2] - lsl r0, r0, #0xc - add r2, r3, r2 - lsl r3, r2, #0xc - ldr r2, =0x04000470 - str r3, [r2, #0x0] - str r0, [r2, #0x0] - add r0, r2, #0x0 - str r1, [r0, #0x0] - ldrh r0, [r4, #0x38] - asr r0, r0, #0x4 - lsl r1, r0, #0x2 - ldr r0, =FX_SinCosTable_ - add r2, r0, r1 - ldrsh r0, [r0, r1] - mov r1, #0x2 - ldrsh r1, [r2, r1] - bl G3_RotX - ldrh r0, [r4, #0x3a] - asr r0, r0, #0x4 - lsl r1, r0, #0x2 - ldr r0, =FX_SinCosTable_ - add r2, r0, r1 - ldrsh r0, [r0, r1] - mov r1, #0x2 - ldrsh r1, [r2, r1] - bl G3_RotY - ldrh r0, [r4, #0x3c] - asr r0, r0, #0x4 - lsl r1, r0, #0x2 - ldr r0, =FX_SinCosTable_ - add r2, r0, r1 - ldrsh r0, [r0, r1] - mov r1, #0x2 - ldrsh r1, [r2, r1] - bl G3_RotZ - ldr r0, [r4, #0x28] - lsl r0, r0, #0xc - neg r1, r0 - mov r0, #0x26 - ldrsh r2, [r4, r0] - mov r0, #0x42 - ldrsh r0, [r4, r0] - add r0, r2, r0 - mov r2, #0x24 - ldrsh r3, [r4, r2] - mov r2, #0x40 - ldrsh r2, [r4, r2] - lsl r0, r0, #0xc - neg r0, r0 - add r2, r3, r2 - lsl r2, r2, #0xc - neg r3, r2 - ldr r2, =0x04000470 - str r3, [r2, #0x0] - str r0, [r2, #0x0] - add r0, r2, #0x0 - str r1, [r0, #0x0] - ldr r3, [r4, #0x50] - lsl r0, r3, #0x11 - lsr r0, r0, #0x1b - lsl r2, r3, #0x16 - lsl r1, r0, #0xa - lsl r0, r3, #0x1b - lsr r2, r2, #0x1b - lsr r0, r0, #0x1b - lsl r2, r2, #0x5 - orr r0, r2 - orr r0, r1 - lsl r0, r0, #0x10 - lsr r2, r0, #0x10 - lsl r0, r3, #0x2 - lsr r0, r0, #0x1b - lsl r1, r0, #0xa - lsl r0, r3, #0xc - lsl r3, r3, #0x7 - lsr r3, r3, #0x1b - lsr r0, r0, #0x1b - lsl r3, r3, #0x5 - orr r0, r3 - orr r0, r1 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - lsl r0, r0, #0x10 - add r1, r2, #0x0 - orr r1, r0 - mov r0, #0x2 - lsl r0, r0, #0xe - orr r1, r0 - ldr r0, =0x040004C0 - str r1, [r0, #0x0] - ldr r1, =0x00004210 - add r0, r0, #0x4 - str r1, [r0, #0x0] - ldr r1, [r4, #0x0] - ldr r0, [r4, #0x54] - lsl r1, r1, #0x19 - lsl r0, r0, #0x19 - lsr r1, r1, #0x1a - lsr r0, r0, #0x1b - lsl r2, r1, #0x18 - mov r1, #0xc0 - lsl r0, r0, #0x10 - orr r1, r2 - orr r1, r0 - ldr r0, =0x040004A4 - str r1, [r0, #0x0] - ldr r0, [r4, #0x54] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1f - beq _02007104 - add r0, r4, #0x0 - add r0, #0x5b - ldrb r0, [r0, #0x0] - add r2, r4, #0x0 - add r2, #0x44 - lsl r1, r0, #0x4 - ldr r0, [sp, #0x1c] - ldrb r3, [r2, #0x0] - add r0, r0, r1 - ldr r2, [sp, #0x1c] - ldr r0, [r0, #0x4] - ldr r1, [r2, r1] - add r6, r3, r1 - add r1, r4, #0x0 - add r1, #0x46 - ldrb r1, [r1, #0x0] - mov r12, r1 - add r1, r4, #0x0 - add r1, #0x45 - ldrb r2, [r1, #0x0] - add r1, r2, r0 - add r0, r4, #0x0 - add r0, #0x47 - ldrb r7, [r0, #0x0] - mov r0, r12 - add r0, r0, r6 - str r7, [sp, #0x0] - str r6, [sp, #0x4] - str r1, [sp, #0x8] - str r0, [sp, #0xc] - add r0, r7, r1 - str r0, [sp, #0x10] - mov r1, #0x24 - ldrsh r1, [r4, r1] - mov r0, #0x2c - ldrsh r0, [r4, r0] - sub r1, #0x28 - add r1, r1, r3 - add r0, r0, r1 - mov r3, #0x26 - ldrsh r3, [r4, r3] - mov r1, #0x2e - lsl r0, r0, #0x10 - sub r3, #0x28 - add r2, r3, r2 - ldrsh r1, [r4, r1] - ldr r3, [r4, #0x28] - asr r0, r0, #0x10 - add r2, r1, r2 - mov r1, #0x6e - ldrsb r1, [r4, r1] - sub r1, r2, r1 - ldr r2, [r4, #0x30] - lsl r1, r1, #0x10 - add r2, r3, r2 - asr r1, r1, #0x10 - mov r3, r12 - bl NNS_G2dDrawSpriteFast - b _02007174 -_02007104: - mov r0, #0x34 - ldrsh r1, [r4, r0] - mov r0, #0x50 - ldr r2, [sp, #0x1c] - mul r0, r1 - asr r3, r0, #0x8 - mov r0, #0x36 - ldrsh r1, [r4, r0] - mov r0, #0x50 - ldr r6, [sp, #0x1c] - mul r0, r1 - asr r1, r0, #0x8 - add r0, r4, #0x0 - add r0, #0x5b - ldrb r0, [r0, #0x0] - lsl r0, r0, #0x4 - str r1, [sp, #0x0] - add r2, r2, r0 - ldr r0, [r6, r0] - lsr r6, r1, #0x1f - str r0, [sp, #0x4] - ldr r0, [r2, #0x4] - add r6, r1, r6 - str r0, [sp, #0x8] - ldr r0, [r2, #0x8] - asr r1, r6, #0x1 - str r0, [sp, #0xc] - ldr r0, [r2, #0xc] - str r0, [sp, #0x10] - mov r0, #0x24 - ldrsh r2, [r4, r0] - lsr r0, r3, #0x1f - add r0, r3, r0 - asr r0, r0, #0x1 - sub r2, r2, r0 - mov r0, #0x2c - ldrsh r0, [r4, r0] - ldr r6, [r4, #0x28] - add r0, r2, r0 - mov r2, #0x26 - ldrsh r2, [r4, r2] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - sub r2, r2, r1 - mov r1, #0x2e - ldrsh r1, [r4, r1] - add r2, r2, r1 - mov r1, #0x6e - ldrsb r1, [r4, r1] - sub r1, r2, r1 - ldr r2, [r4, #0x30] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add r2, r6, r2 - bl NNS_G2dDrawSpriteFast -_02007174: - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r1, r0, #0x1e - lsr r1, r1, #0x1e - beq _0200719A - lsl r0, r0, #0x19 - lsr r0, r0, #0x1e - beq _0200719A - ldr r0, [r4, #0x54] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1f - bne _0200719A - mov r0, #0xb9 - lsl r0, r0, #0x2 - ldr r1, [r5, r0] - mov r0, #0x1 - tst r0, r1 - beq _0200719C -_0200719A: - b _020072BC -_0200719C: - ldr r0, =0x000002E3 - ldrb r0, [r5, r0] - cmp r0, #0x1 - beq _020071AA - ldr r0, =0x04000454 - mov r1, #0x0 - str r1, [r0, #0x0] -_020071AA: - mov r0, #0x9d - lsl r0, r0, #0x2 - ldr r0, [r5, r0] - cmp r0, #0x2 - bne _020071B8 - mov r1, #0x1 - b _020071BA -_020071B8: - mov r1, #0x0 -_020071BA: - add r2, r4, #0x0 - add r2, #0x6c - ldrh r2, [r2, #0x0] - mov r0, #0xa9 - lsl r0, r0, #0x2 - lsl r2, r2, #0x1e - lsr r2, r2, #0x1e - add r2, r2, #0x3 - ldr r0, [r5, r0] - lsl r2, r2, #0x5 - add r2, r0, r2 - mov r0, #0x4 - sub r0, r0, r1 - add r1, r2, #0x0 - lsr r1, r0 - ldr r0, =0x040004AC - str r1, [r0, #0x0] - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1b - lsr r0, r0, #0x1f - beq _020071FA - mov r0, #0x34 - ldrsh r0, [r4, r0] - lsl r0, r0, #0x6 - asr r3, r0, #0x8 - mov r0, #0x36 - ldrsh r0, [r4, r0] - lsl r0, r0, #0x4 - asr r1, r0, #0x8 - b _020071FE -_020071FA: - mov r3, #0x40 - mov r1, #0x10 -_020071FE: - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1d - lsr r0, r0, #0x1f - beq _02007220 - mov r0, #0x74 - ldrsh r2, [r4, r0] - mov r0, #0x24 - mov r6, #0x2c - ldrsh r0, [r4, r0] - ldrsh r6, [r4, r6] - add r0, r0, r6 - add r2, r2, r0 - add r0, r4, #0x0 - add r0, #0x70 - strh r2, [r0, #0x0] -_02007220: - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1c - lsr r0, r0, #0x1f - beq _02007242 - mov r0, #0x76 - ldrsh r2, [r4, r0] - mov r0, #0x26 - mov r6, #0x2e - ldrsh r0, [r4, r0] - ldrsh r6, [r4, r6] - add r0, r0, r6 - add r2, r2, r0 - add r0, r4, #0x0 - add r0, #0x72 - strh r2, [r0, #0x0] -_02007242: - add r0, r4, #0x0 - add r0, #0x6c - ldrh r0, [r0, #0x0] - ldr r2, =UNK_020ECBD0 - ldr r6, =UNK_020ECBD0 - lsl r0, r0, #0x19 - lsr r0, r0, #0x1e - lsl r0, r0, #0x4 - str r1, [sp, #0x0] - add r2, r2, r0 - ldr r0, [r6, r0] - lsr r6, r1, #0x1f - str r0, [sp, #0x4] - ldr r0, [r2, #0x4] - add r6, r1, r6 - str r0, [sp, #0x8] - ldr r0, [r2, #0x8] - asr r1, r6, #0x1 - str r0, [sp, #0xc] - ldr r0, [r2, #0xc] - str r0, [sp, #0x10] - mov r0, #0x70 - ldrsh r2, [r4, r0] - lsr r0, r3, #0x1f - add r0, r3, r0 - asr r0, r0, #0x1 - sub r0, r2, r0 - mov r2, #0x72 - ldrsh r2, [r4, r2] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - sub r1, r2, r1 - lsl r1, r1, #0x10 - ldr r2, =0xFFFFFC18 - asr r1, r1, #0x10 - bl NNS_G2dDrawSpriteFast -_020072BC: - ldr r0, [sp, #0x14] - add r4, #0x98 - add r0, #0x20 - str r0, [sp, #0x14] - ldr r0, [sp, #0x1c] - add r0, #0x20 - str r0, [sp, #0x1c] - ldr r0, [sp, #0x18] - add r0, r0, #0x1 - str r0, [sp, #0x18] - cmp r0, #0x4 - bge _020072D6 - b _02006F30 -_020072D6: - ldr r0, =0x04000448 - mov r1, #0x1 - str r1, [r0, #0x0] - add sp, #0x20 - pop {r3-r7, pc} - // clang-format on -} -#endif - - - -THUMB_FUNC void FUN_020072E8(struct UnkStruct1 *param0) { - FreeToHeap(param0->unk2AC); - FreeToHeap(param0->unk2B0); - FreeToHeap(param0->unk2B4); - FreeToHeap(param0); -} - - -THUMB_FUNC void FUN_02007314(struct UnkStruct2 *param0) { - param0->unk59 = 0; - for (s32 i = 0; i < 10; i++) { - param0->unk5C[i] = 0; - } - if (param0->unk84[param0->unk59].unk0 == -1) { - param0->unk5B = 0; - return; - } - - param0->unk58 = 1; - param0->unk5B = param0->unk84[param0->unk59].unk0; - param0->unk5A = param0->unk84[param0->unk59].unk1; - -} - - -THUMB_FUNC void FUN_0200737C(struct UnkStruct2 *param0, struct UnkStruct2_sub *param1) { - MI_CpuCopy8(param1, param0->unk84, sizeof(struct UnkStruct2_sub)*10); -} - -THUMB_FUNC BOOL FUN_02007390(struct UnkStruct2 *param0) { - if (param0->unk58 != 0) { - return TRUE; - } - return FALSE; -} - -extern u32 FUN_020073E8(struct UnkStruct1 *param0, struct UnkStruct63_021DB49C *param1, u32 param2, u32 param3, u32 param4, u32 param5, s32 param6, u32 param7, u32 param8); - -THUMB_FUNC u32 FUN_020073A0(struct UnkStruct1 *param0, struct UnkStruct63_021DB49C *param1, u32 param2, u32 param3, u32 param4, u32 param5, u32 param6, u32 param7) { - s32 i; - for (i = 0; i < 4; i++) { - if (param0->unk000[i].unk00_0 == 0) { - break; - } - } - GF_ASSERT(i != 4); - - return FUN_020073E8(param0, param1, param2, param3, param4, param5, i, param6, param7); -} - - -THUMB_FUNC u32 FUN_020073E8(struct UnkStruct1 *param0, struct UnkStruct63_021DB49C *param1, u32 param2, u32 param3, u32 param4, u32 param5, s32 param6, u32 param7, u32 param8) { - GF_ASSERT(param0->unk000[param6].unk00_0 == 0); - - MIi_CpuClearFast(0, ¶m0->unk000[param6], sizeof(struct UnkStruct2)); - param0->unk000[param6].unk00_0 = 1; - param0->unk000[param6].unk00_7 = 1; - param0->unk000[param6].unk00_8 = 1; - param0->unk000[param6].unk00_1 = param5; - - param0->unk000[param6].unk04 = *param1; - param0->unk000[param6].unk14 = *param1; - param0->unk000[param6].unk24 = (s16)param2; - param0->unk000[param6].unk26 = (s16)param3; - param0->unk000[param6].unk28 = param4; - param0->unk000[param6].unk34 = 0x100; - param0->unk000[param6].unk36 = 0x100; - param0->unk000[param6].unk54_2 = 0x1f; - param0->unk000[param6].unk50_0 = 0x1f; - param0->unk000[param6].unk50_5 = 0x1f; - param0->unk000[param6].unk50_a = 0x1f; - param0->unk000[param6].unk50_f = 0x10; - param0->unk000[param6].unk50_14 = 0x10; - param0->unk000[param6].unk50_19 = 0x10; - param0->unk000[param6].unk68 = param8; - param0->unk000[param6].unk70 = (s16)param2; - param0->unk000[param6].unk72 = (s16)param3; - param0->unk000[param6].unk6C_2 = 1; - param0->unk000[param6].unk6C_3 = 1; - param0->unk000[param6].unk6C_4 = 1; - - if (param7 != 0) { - MI_CpuCopy8(param7, param0->unk000[param6].unk84, 0x14); - } - - return ¶m0->unk000[param6]; -} - - -THUMB_FUNC void FUN_02007534(struct UnkStruct2 *param0) { - param0->unk00_0 = 0; -} - - -THUMB_FUNC void FUN_02007540(struct UnkStruct1 *param0) { - for (s32 i = 0; i < 4; i++) { - FUN_02007534(¶m0->unk000[i]); - } -} - - -THUMB_FUNC void FUN_02007558(struct UnkStruct2 *param0, u32 param1, u32 param2) { - switch (param1) { - case 0: - param0->unk24 = param2; - break; - case 1: - param0->unk26 = param2; - break; - case 2: - param0->unk28 = param2; - break; - case 3: - param0->unk2C = param2; - break; - case 4: - param0->unk2E = param2; - break; - case 5: - param0->unk30 = param2; - break; - case 6: - param0->unk54_0 = param2; - break; - case 7: - param0->unk38 = param2; - break; - case 8: - param0->unk3A = param2; - break; - case 9: - param0->unk3C = param2; - break; - case 10: - param0->unk40 = param2; - break; - case 11: - param0->unk42 = param2; - break; - case 12: - param0->unk34 = param2; - break; - case 13: - param0->unk36 = param2; - break; - case 14: - param0->unk54_1 = param2; - break; - case 15: - param0->unk44 = param2; - break; - case 16: - param0->unk45 = param2; - break; - case 17: - param0->unk46 = param2; - break; - case 18: - param0->unk47 = param2; - break; - case 19: - param0->unk70 = param2; - break; - case 20: - param0->unk72 = param2; - break; - case 21: - param0->unk74 = param2; - break; - case 22: - param0->unk76 = param2; - break; - case 23: - param0->unk54_2 = param2; - break; - case 24: - param0->unk50_0 = param2; - break; - case 25: - param0->unk50_5 = param2; - break; - case 26: - param0->unk50_a = param2; - break; - case 27: - param0->unk50_f = param2; - break; - case 28: - param0->unk50_14 = param2; - break; - case 29: - param0->unk50_19 = param2; - break; - case 30: - param0->unk54_C = param2; - param0->unk00_8 = 1; - break; - case 31: - param0->unk4C = param2; - param0->unk00_8 = 1; - break; - case 32: - param0->unk48 = param2; - param0->unk00_8 = 1; - break; - case 33: - param0->unk49 = param2; - param0->unk00_8 = 1; - break; - case 34: - param0->unk4A = param2; - break; - case 35: - param0->unk54_9 = param2; - param0->unk00_7 = 1; - break; - case 36: - param0->unk54_A = param2; - param0->unk00_7 = 1; - break; - case 37: - param0->unk54_B = param2; - break; - case 38: - param0->unk5B = param2; - break; - case 40: - param0->unk54_D = param2; - param0->unk00_7 = 1; - break; - case 41: - param0->unk6E = param2; - break; - case 42: - param0->unk6C_0 = param2; - param0->unk00_8 = 1; - break; - case 43: - param0->unk6C_2 = param2; - break; - case 44: - param0->unk6C_3 = param2; - break; - case 45: - param0->unk6C_4 = param2; - break; - case 46: - param0->unk6C_5 = param2; - break; - } -} - - -THUMB_FUNC u32 FUN_0200782C(struct UnkStruct2 *param0, u32 param1) { - switch (param1) { - case 0: - return param0->unk24; - - case 1: - return param0->unk26; - - case 2: - return param0->unk28; - - case 3: - return param0->unk2C; - - case 4: - return param0->unk2E; - - case 5: - return param0->unk30; - - case 6: - return param0->unk54_0; - - case 7: - return param0->unk38; - - case 8: - return param0->unk3A; - - case 9: - return param0->unk3C; - - case 10: - return param0->unk40; - - case 11: - return param0->unk42; - - case 12: - return param0->unk34; - - case 13: - return param0->unk36; - - case 14: - return param0->unk54_1; - - case 15: - return param0->unk44; - - case 16: - return param0->unk45; - - case 17: - return param0->unk46; - - case 18: - return param0->unk47; - - case 19: - return param0->unk70; - - case 20: - return param0->unk72; - - case 21: - return param0->unk74; - - case 22: - return param0->unk76; - - case 23: - return param0->unk54_2; - - case 24: - return param0->unk50_0; - - case 25: - return param0->unk50_5; - - case 26: - return param0->unk50_a; - - case 27: - return param0->unk50_f; - - case 28: - return param0->unk50_14; - - case 29: - return param0->unk50_19; - - case 30: - return param0->unk54_C; - - case 31: - return param0->unk4C; - - case 32: - return param0->unk48; - - case 33: - return param0->unk49; - - case 34: - return param0->unk4A; - - case 35: - return param0->unk54_9; - - case 36: - return param0->unk54_A; - - case 37: - return param0->unk54_B; - - case 38: - return param0->unk5B; - - case 40: - return param0->unk54_D; - - case 41: - return param0->unk6E; - - case 42: - return param0->unk6C_0; - - case 43: - return param0->unk6C_2; - - case 44: - return param0->unk6C_3; - - case 45: - return param0->unk6C_4; - - case 46: - return param0->unk6C_5; - - } - - GF_AssertFail(); - - return 0; -} - - -THUMB_FUNC void FUN_020079E0(struct UnkStruct2 *param0, u32 param1, u32 param2) { - switch (param1) { - case 0: - param0->unk24 += param2; - break; - case 1: - param0->unk26 += param2; - break; - case 2: - param0->unk28 += param2; - break; - case 3: - param0->unk2C += param2; - break; - case 4: - param0->unk2E += param2; - break; - case 5: - param0->unk30 += param2; - break; - case 6: - param0->unk54_0 += param2; - break; - case 7: - param0->unk38 += param2; - break; - case 8: - param0->unk3A += param2; - break; - case 9: - param0->unk3C += param2; - break; - case 10: - param0->unk40 += param2; - break; - case 11: - param0->unk42 += param2; - break; - case 12: - param0->unk34 += param2; - break; - case 13: - param0->unk36 += param2; - break; - case 14: - param0->unk54_1 += param2; - break; - case 15: - param0->unk44 += param2; - break; - case 16: - param0->unk45 += param2; - break; - case 17: - param0->unk46 += param2; - break; - case 18: - param0->unk47 += param2; - break; - case 19: - param0->unk70 += param2; - break; - case 20: - param0->unk72 += param2; - break; - case 21: - param0->unk74 += param2; - break; - case 22: - param0->unk76 += param2; - break; - case 23: - param0->unk54_2 += param2; - break; - case 24: - param0->unk50_0 += param2; - break; - case 25: - param0->unk50_5 += param2; - break; - case 26: - param0->unk50_a += param2; - break; - case 27: - param0->unk50_f += param2; - break; - case 28: - param0->unk50_14 += param2; - break; - case 29: - param0->unk50_19 += param2; - break; - case 30: - param0->unk54_C += param2; - param0->unk00_8 = 1; - break; - case 31: - param0->unk4C += param2; - param0->unk00_8 = 1; - break; - case 32: - param0->unk48 += param2; - param0->unk00_8 = 1; - break; - case 33: - param0->unk49 += param2; - param0->unk00_8 = 1; - break; - case 34: - param0->unk4A += param2; - break; - case 35: - param0->unk54_9 += param2; - param0->unk00_7 = 1; - break; - case 36: - param0->unk54_A += param2; - param0->unk00_7 = 1; - break; - case 37: - param0->unk54_B += param2; - break; - case 38: - param0->unk5B += param2; - break; - case 40: - param0->unk54_D += param2; - param0->unk00_7 = 1; - break; - case 41: - param0->unk6E += param2; - break; - case 42: - param0->unk6C_0 += param2; - param0->unk00_8 = 1; - break; - case 43: - param0->unk6C_2 += param2; - break; - case 44: - param0->unk6C_3 += param2; - break; - case 45: - param0->unk6C_4 += param2; - break; - case 46: - param0->unk6C_5 += param2; - break; - } -} -- cgit v1.2.3