diff options
20 files changed, 2212 insertions, 4100 deletions
diff --git a/arm9/asm/unk_02006D98.s b/arm9/asm/unk_02006D98.s deleted file mode 100644 index 01721a1a..00000000 --- a/arm9/asm/unk_02006D98.s +++ /dev/null @@ -1,4066 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .extern UNK_020ECD4C - .extern FX_SinCosTable_ - - .section .rodata - - .global UNK_020ECBD0 -UNK_020ECBD0: ; 0x020ECBD0 - .byte 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00 - .byte 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00 - .byte 0xA0, 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00 - .byte 0xA0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xD0, 0x00, 0x00, 0x00 - - .global UNK_020ECC10 -UNK_020ECC10: ; 0x020ECC10 - .byte 0x1E, 0x21, 0x1F, 0x21, 0x20, 0x21, 0x1D, 0x22, 0x1E, 0x22, 0x1F, 0x22, 0x20, 0x22, 0x21, 0x22 - .byte 0x1C, 0x23, 0x1D, 0x23, 0x1E, 0x23, 0x1F, 0x23, 0x20, 0x23, 0x21, 0x23, 0x22, 0x23, 0x1C, 0x24 - .byte 0x1D, 0x24, 0x1E, 0x24, 0x1F, 0x24, 0x20, 0x24, 0x21, 0x24, 0x22, 0x24, 0x1C, 0x25, 0x1D, 0x25 - .byte 0x1E, 0x25, 0x1F, 0x25, 0x20, 0x25, 0x21, 0x25, 0x22, 0x25, 0x1C, 0x26, 0x1D, 0x26, 0x1E, 0x26 - .byte 0x1F, 0x26, 0x20, 0x26, 0x21, 0x26, 0x22, 0x26, 0x1C, 0x27, 0x1D, 0x27, 0x1E, 0x27, 0x1F, 0x27 - .byte 0x20, 0x27, 0x21, 0x27, 0x22, 0x27, 0x1D, 0x28, 0x1E, 0x28, 0x1F, 0x28, 0x20, 0x28, 0x21, 0x28 - .byte 0x1E, 0x29, 0x1F, 0x29, 0x20, 0x29, 0xFF, 0xFF - - .global UNK_020ECC78 -UNK_020ECC78: ; 0x020ECC78 - .byte 0x33, 0x11, 0x34, 0x11, 0x35, 0x11, 0x36, 0x11, 0x32, 0x12, 0x33, 0x12, 0x34, 0x12, 0x35, 0x12 - .byte 0x36, 0x12, 0x37, 0x12, 0x31, 0x13, 0x32, 0x13, 0x33, 0x13, 0x34, 0x13, 0x35, 0x13, 0x36, 0x13 - .byte 0x37, 0x13, 0x38, 0x13, 0x31, 0x14, 0x32, 0x14, 0x33, 0x14, 0x34, 0x14, 0x35, 0x14, 0x36, 0x14 - .byte 0x37, 0x14, 0x38, 0x14, 0x31, 0x15, 0x32, 0x15, 0x33, 0x15, 0x34, 0x15, 0x35, 0x15, 0x36, 0x15 - .byte 0x37, 0x15, 0x38, 0x15, 0x31, 0x16, 0x32, 0x16, 0x33, 0x16, 0x34, 0x16, 0x35, 0x16, 0x36, 0x16 - .byte 0x37, 0x16, 0x38, 0x16, 0x32, 0x17, 0x33, 0x17, 0x34, 0x17, 0x35, 0x17, 0x36, 0x17, 0x37, 0x17 - .byte 0x33, 0x18, 0x34, 0x18, 0x35, 0x18, 0x36, 0x18, 0xFF, 0xFF - - .global UNK_020ECCE2 -UNK_020ECCE2: ; 0x020ECCE2 - .byte 0x1B, 0x0F, 0x1C, 0x0F, 0x1D, 0x0F, 0x1E, 0x0F, 0x1A, 0x10, 0x1B, 0x10, 0x1C, 0x10, 0x1D, 0x10 - .byte 0x1E, 0x10, 0x1F, 0x10, 0x19, 0x11, 0x1A, 0x11, 0x1B, 0x11, 0x1C, 0x11, 0x1D, 0x11, 0x1E, 0x11 - .byte 0x1F, 0x11, 0x20, 0x11, 0x19, 0x12, 0x1A, 0x12, 0x1B, 0x12, 0x1C, 0x12, 0x1D, 0x12, 0x1E, 0x12 - .byte 0x1F, 0x12, 0x20, 0x12, 0x19, 0x13, 0x1A, 0x13, 0x1B, 0x13, 0x1C, 0x13, 0x1D, 0x13, 0x1E, 0x13 - .byte 0x1F, 0x13, 0x20, 0x13, 0x19, 0x14, 0x1A, 0x14, 0x1B, 0x14, 0x1C, 0x14, 0x1D, 0x14, 0x1E, 0x14 - .byte 0x1F, 0x14, 0x20, 0x14, 0x1A, 0x15, 0x1B, 0x15, 0x1C, 0x15, 0x1D, 0x15, 0x1E, 0x15, 0x1F, 0x15 - .byte 0x1B, 0x16, 0x1C, 0x16, 0x1D, 0x16, 0x1E, 0x16, 0xFF, 0xFF - - .global UNK_020ECD4C -UNK_020ECD4C: ; 0x020ECD4C - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00 - .byte 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00 - .byte 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00 - .byte 0x50, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00 - .byte 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00 - .byte 0xA0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x00 - - .global UNK_020ECDCC -UNK_020ECDCC: ; 0x020ECDCC - .byte 0x2B, 0x21, 0x2C, 0x21, 0x2D, 0x21, 0x29, 0x22, 0x2A, 0x22, 0x2B, 0x22, 0x2C, 0x22, 0x2D, 0x22 - .byte 0x2E, 0x22, 0x2F, 0x22, 0x28, 0x23, 0x29, 0x23, 0x2A, 0x23, 0x2B, 0x23, 0x2C, 0x23, 0x2D, 0x23 - .byte 0x2E, 0x23, 0x2F, 0x23, 0x30, 0x23, 0x28, 0x24, 0x29, 0x24, 0x2A, 0x24, 0x2B, 0x24, 0x2C, 0x24 - .byte 0x2D, 0x24, 0x2E, 0x24, 0x2F, 0x24, 0x30, 0x24, 0x28, 0x25, 0x29, 0x25, 0x2A, 0x25, 0x2B, 0x25 - .byte 0x2C, 0x25, 0x2D, 0x25, 0x2E, 0x25, 0x2F, 0x25, 0x30, 0x25, 0x28, 0x26, 0x29, 0x26, 0x2A, 0x26 - .byte 0x2B, 0x26, 0x2C, 0x26, 0x2D, 0x26, 0x2E, 0x26, 0x2F, 0x26, 0x30, 0x26, 0x28, 0x27, 0x29, 0x27 - .byte 0x2A, 0x27, 0x2B, 0x27, 0x2C, 0x27, 0x2D, 0x27, 0x2E, 0x27, 0x2F, 0x27, 0x30, 0x27, 0x28, 0x28 - .byte 0x29, 0x28, 0x2A, 0x28, 0x2B, 0x28, 0x2C, 0x28, 0x2D, 0x28, 0x2E, 0x28, 0x2F, 0x28, 0x30, 0x28 - .byte 0x29, 0x29, 0x2A, 0x29, 0x2B, 0x29, 0x2C, 0x29, 0x2D, 0x29, 0x2E, 0x29, 0x2F, 0x29, 0x2B, 0x2A - .byte 0x2C, 0x2A, 0x2D, 0x2A, 0xFF, 0xFF, 0x00, 0x00 - - .section .data - - .global UNK_02105AE8 -UNK_02105AE8: ; 0x02105AE8 - .word UNK_020ECCE2 - .word UNK_020ECC78 - .word UNK_020ECC10 - .word UNK_020ECDCC - - .text - - thumb_func_start FUN_02006D98 -FUN_02006D98: ; 0x02006D98 - push {r3-r7, lr} - sub sp, #0x10 - mov r1, #0xba - lsl r1, r1, #0x2 - add r5, r0, #0x0 - bl AllocFromHeap - add r4, r0, #0x0 - mov r0, #0xa6 - lsl r0, r0, #0x2 - add r1, r0, #0x0 - add r3, r0, #0x0 - str r5, [r4, r0] - mov r2, #0x0 - add r1, #0x48 - strb r2, [r4, r1] - add r1, r0, #0x4 - str r2, [r4, r1] - mov r1, #0x2 - lsl r1, r1, #0xe - add r3, #0x8 - str r1, [r4, r3] - add r3, r0, #0x0 - add r3, #0xc - str r2, [r4, r3] - mov r2, #0x80 - add r0, #0x10 - str r2, [r4, r0] - add r0, r5, #0x0 - bl AllocFromHeap - mov r1, #0xab - lsl r1, r1, #0x2 - str r0, [r4, r1] - add r0, r5, #0x0 - mov r1, #0xc0 - bl AllocFromHeap - mov r1, #0x2b - lsl r1, r1, #0x4 - str r0, [r4, r1] - ldr r1, [r4, r1] - mov r0, #0x0 - mov r2, #0x4 - bl MIi_CpuClearFast - add r0, r5, #0x0 - mov r1, #0xc0 - bl AllocFromHeap - mov r1, #0xad - lsl r1, r1, #0x2 - str r0, [r4, r1] - ldr r1, [r4, r1] - mov r0, #0x0 - mov r2, #0x4 - bl MIi_CpuClearFast - mov r6, #0x0 - add r5, r4, #0x0 - add r7, r6, #0x0 -_02006E12: - add r0, r7, #0x0 - add r1, r5, #0x0 - mov r2, #0x98 - bl MIi_CpuClearFast - add r6, r6, #0x1 - add r5, #0x98 - cmp r6, #0x4 - blt _02006E12 - bl NNS_G2dSetupSoftwareSpriteCamera - ldr r2, _02006EC8 ; =0x000002E3 - mov r0, #0x0 - strb r0, [r4, r2] - sub r2, #0x4b - ldr r2, [r4, r2] - mov r0, #0x75 ; NARC_POKETOOL_POKEGRA_OTHERPOKE - mov r1, #0xd3 - bl AllocAndReadWholeNarcMemberByIdPair - add r1, sp, #0xc - str r0, [sp, #0x4] - bl NNS_G2dGetUnpackedCharacterData - ldr r0, [sp, #0xc] - mov r1, #0xaf - ldr r0, [r0, #0x4] - lsl r1, r1, #0x2 - str r0, [r4, r1] - ldr r0, [sp, #0xc] - ldr r2, [r0, #0x8] - add r0, r1, #0x4 - str r2, [r4, r0] - ldr r0, [sp, #0xc] - add r1, #0x8 - ldr r0, [r0, #0xc] - str r0, [r4, r1] - ldr r0, [sp, #0xc] - ldr r0, [r0, #0x14] - str r0, [sp, #0x8] - bl FUN_02008A74 - ldr r1, [sp, #0x8] - mov r0, #0xab - lsl r0, r0, #0x2 - mov r2, #0x2 - ldrb r1, [r1, #0x0] - ldr r0, [r4, r0] - lsl r2, r2, #0xe - bl MI_CpuFill8 - mov r0, #0x0 - mov r7, #0xab - ldr r6, _02006ECC ; =0x00005050 - mov r12, r0 - str r0, [sp, #0x0] - add r3, r0, #0x0 - lsl r7, r7, #0x2 -_02006E86: - ldr r2, [sp, #0x8] - ldr r0, [sp, #0x0] - mov r1, #0x0 - add r2, r2, r0 -_02006E8E: - ldr r5, [r4, r7] - ldrb r0, [r2, #0x0] - add r5, r3, r5 - add r5, r1, r5 - add r1, r1, #0x1 - add r2, r2, #0x1 - strb r0, [r5, r6] - cmp r1, #0x28 - blt _02006E8E - ldr r0, [sp, #0x0] - add r3, #0x80 - add r0, #0x50 - str r0, [sp, #0x0] - mov r0, r12 - add r0, r0, #0x1 - mov r12, r0 - cmp r0, #0x50 - blt _02006E86 - ldr r0, [sp, #0x4] - bl FreeToHeap - ldr r0, _02006ED0 ; =0x000002E1 - mov r1, #0x1 - strb r1, [r4, r0] - add r0, r0, #0x1 - strb r1, [r4, r0] - add r0, r4, #0x0 - add sp, #0x10 - pop {r3-r7, pc} - .balign 4 -_02006EC8: .word 0x000002E3 -_02006ECC: .word 0x00005050 -_02006ED0: .word 0x000002E1 - - thumb_func_start FUN_02006ED4 -FUN_02006ED4: ; 0x02006ED4 - 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, _02007250 ; =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, _02007254 ; =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, _02007258 ; =0x000002E3 - ldrb r0, [r5, r0] - cmp r0, #0x1 - beq _02006F68 - ldr r0, _0200725C ; =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, _02007260 ; =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, _02007264 ; =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, _02007268 ; =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, _02007268 ; =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, _02007268 ; =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, _02007264 ; =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, _0200726C ; =0x040004C0 - str r1, [r0, #0x0] - ldr r1, _02007270 ; =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, _02007274 ; =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, _02007258 ; =0x000002E3 - ldrb r0, [r5, r0] - cmp r0, #0x1 - beq _020071AA - ldr r0, _0200725C ; =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, _02007260 ; =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, _02007278 ; =UNK_020ECBD0 - ldr r6, _02007278 ; =UNK_020ECBD0 - b _0200727C - nop -_02007250: .word 0x04000444 -_02007254: .word UNK_020ECD4C -_02007258: .word 0x000002E3 -_0200725C: .word 0x04000454 -_02007260: .word 0x040004AC -_02007264: .word 0x04000470 -_02007268: .word FX_SinCosTable_ -_0200726C: .word 0x040004C0 -_02007270: .word 0x00004210 -_02007274: .word 0x040004A4 -_02007278: .word UNK_020ECBD0 -_0200727C: - 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, _020072E0 ; =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, _020072E4 ; =0x04000448 - mov r1, #0x1 - str r1, [r0, #0x0] - add sp, #0x20 - pop {r3-r7, pc} - .balign 4 -_020072E0: .word 0xFFFFFC18 -_020072E4: .word 0x04000448 - - thumb_func_start FUN_020072E8 -FUN_020072E8: ; 0x020072E8 - push {r4, lr} - add r4, r0, #0x0 - mov r0, #0xab - lsl r0, r0, #0x2 - ldr r0, [r4, r0] - bl FreeToHeap - mov r0, #0x2b - lsl r0, r0, #0x4 - ldr r0, [r4, r0] - bl FreeToHeap - mov r0, #0xad - lsl r0, r0, #0x2 - ldr r0, [r4, r0] - bl FreeToHeap - add r0, r4, #0x0 - bl FreeToHeap - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02007314 -FUN_02007314: ; 0x02007314 - push {r3-r4} - add r1, r0, #0x0 - mov r3, #0x0 - add r1, #0x59 - strb r3, [r1, #0x0] - add r1, r3, #0x0 -_02007320: - add r2, r0, r3 - add r2, #0x5c - add r3, r3, #0x1 - strb r1, [r2, #0x0] - cmp r3, #0xa - blt _02007320 - add r2, r0, #0x0 - add r2, #0x59 - ldrb r2, [r2, #0x0] - lsl r2, r2, #0x1 - add r3, r0, r2 - mov r2, #0x84 - ldrsb r4, [r3, r2] - add r3, r2, #0x0 - sub r3, #0x85 - cmp r4, r3 - bne _0200734A - add r0, #0x5b - strb r1, [r0, #0x0] - pop {r3-r4} - bx lr -_0200734A: - add r1, r0, #0x0 - mov r3, #0x1 - add r1, #0x58 - strb r3, [r1, #0x0] - add r1, r0, #0x0 - add r1, #0x59 - ldrb r1, [r1, #0x0] - lsl r1, r1, #0x1 - add r1, r0, r1 - ldrsb r2, [r1, r2] - add r1, r0, #0x0 - add r1, #0x5b - strb r2, [r1, #0x0] - add r1, r0, #0x0 - add r1, #0x59 - ldrb r1, [r1, #0x0] - lsl r1, r1, #0x1 - add r1, r0, r1 - add r1, #0x85 - ldrb r1, [r1, #0x0] - add r0, #0x5a - strb r1, [r0, #0x0] - pop {r3-r4} - bx lr - .balign 4 - - thumb_func_start FUN_0200737C -FUN_0200737C: ; 0x0200737C - add r2, r0, #0x0 - ldr r3, _0200738C ; =MI_CpuCopy8 - add r2, #0x84 - add r0, r1, #0x0 - add r1, r2, #0x0 - mov r2, #0x14 - bx r3 - nop -_0200738C: .word MI_CpuCopy8 - - thumb_func_start FUN_02007390 -FUN_02007390: ; 0x02007390 - add r0, #0x58 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - beq _0200739C - mov r0, #0x1 - bx lr -_0200739C: - mov r0, #0x0 - bx lr - - thumb_func_start FUN_020073A0 -FUN_020073A0: ; 0x020073A0 - push {r3-r7, lr} - sub sp, #0x18 - add r5, r0, #0x0 - add r6, r1, #0x0 - add r7, r2, #0x0 - str r3, [sp, #0x14] - mov r4, #0x0 -_020073AE: - ldr r1, [r0, #0x0] - lsl r1, r1, #0x1f - lsr r1, r1, #0x1f - beq _020073BE - add r4, r4, #0x1 - add r0, #0x98 - cmp r4, #0x4 - blt _020073AE -_020073BE: - cmp r4, #0x4 - bne _020073C6 - bl GF_AssertFail -_020073C6: - ldr r0, [sp, #0x30] - ldr r3, [sp, #0x14] - str r0, [sp, #0x0] - ldr r0, [sp, #0x34] - add r1, r6, #0x0 - str r0, [sp, #0x4] - ldr r0, [sp, #0x38] - str r4, [sp, #0x8] - str r0, [sp, #0xc] - ldr r0, [sp, #0x3c] - add r2, r7, #0x0 - str r0, [sp, #0x10] - add r0, r5, #0x0 - bl FUN_020073E8 - add sp, #0x18 - pop {r3-r7, pc} - - thumb_func_start FUN_020073E8 -FUN_020073E8: ; 0x020073E8 - push {r4-r7, lr} - sub sp, #0xc - str r1, [sp, #0x8] - ldr r1, [sp, #0x28] - add r4, r0, #0x0 - mov r0, #0x98 - add r6, r1, #0x0 - mul r6, r0 - ldr r0, [r4, r6] - str r2, [sp, #0x0] - lsl r0, r0, #0x1f - str r3, [sp, #0x4] - lsr r0, r0, #0x1f - beq _02007408 - bl GF_AssertFail -_02007408: - add r5, r4, r6 - mov r0, #0x0 - add r1, r5, #0x0 - mov r2, #0x98 - bl MIi_CpuClearFast - ldr r1, [r4, r6] - mov r0, #0x1 - bic r1, r0 - mov r0, #0x1 - orr r0, r1 - str r0, [r4, r6] - ldr r1, [r4, r6] - mov r0, #0x80 - orr r0, r1 - str r0, [r4, r6] - mov r0, #0x80 - ldr r1, [r4, r6] - add r0, #0x80 - orr r0, r1 - str r0, [r4, r6] - add r2, r5, #0x0 - ldr r0, [r4, r6] - mov r1, #0x7e - bic r0, r1 - ldr r1, [sp, #0x24] - add r7, r2, #0x4 - lsl r1, r1, #0x1a - lsr r1, r1, #0x19 - orr r0, r1 - str r0, [r4, r6] - ldr r0, [sp, #0x8] - mov r12, r0 - mov r3, r12 - ldmia r3!, {r0-r1} - stmia r7!, {r0-r1} - ldmia r3!, {r0-r1} - stmia r7!, {r0-r1} - add r7, r2, #0x0 - ldr r3, [sp, #0x8] - add r7, #0x14 - ldmia r3!, {r0-r1} - stmia r7!, {r0-r1} - str r3, [sp, #0x8] - ldmia r3!, {r0-r1} - stmia r7!, {r0-r1} - ldr r0, [sp, #0x0] - ldr r1, [sp, #0x4] - lsl r0, r0, #0x10 - asr r0, r0, #0x10 - lsl r1, r1, #0x10 - asr r7, r1, #0x10 - strh r0, [r2, #0x24] - str r3, [sp, #0x8] - ldr r1, [sp, #0x20] - strh r7, [r2, #0x26] - str r1, [r2, #0x28] - mov r1, #0x80 - add r1, #0x80 - strh r1, [r2, #0x34] - strh r1, [r2, #0x36] - ldr r1, [r5, #0x54] - mov r3, #0x7c - bic r1, r3 - mov r3, #0x7c - orr r1, r3 - str r1, [r5, #0x54] - ldr r1, [r5, #0x50] - mov r3, #0x1f - bic r1, r3 - mov r3, #0x1f - orr r3, r1 - ldr r1, _02007520 ; =0xFFFFFC1F - and r1, r3 - mov r3, #0x1f - lsl r3, r3, #0x5 - orr r3, r1 - ldr r1, _02007524 ; =0xFFFF83FF - and r1, r3 - mov r3, #0x1f - lsl r3, r3, #0xa - orr r3, r1 - ldr r1, _02007528 ; =0xFFF07FFF - and r1, r3 - mov r3, #0x80 - lsl r3, r3, #0xc - orr r3, r1 - ldr r1, _0200752C ; =0xFE0FFFFF - and r1, r3 - mov r3, #0x80 - lsl r3, r3, #0x11 - orr r3, r1 - ldr r1, _02007530 ; =0xC1FFFFFF - and r1, r3 - mov r3, #0x80 - lsl r3, r3, #0x16 - orr r1, r3 - str r1, [r5, #0x50] - ldr r1, [sp, #0x30] - str r1, [r2, #0x68] - add r1, r2, #0x0 - add r1, #0x70 - strh r0, [r1, #0x0] - add r2, #0x72 - add r0, r5, #0x0 - strh r7, [r2, #0x0] - add r0, #0x6c - ldrh r1, [r0, #0x0] - mov r0, #0x4 - orr r1, r0 - add r0, r5, #0x0 - add r0, #0x6c - strh r1, [r0, #0x0] - add r0, r5, #0x0 - add r0, #0x6c - ldrh r1, [r0, #0x0] - mov r0, #0x8 - orr r1, r0 - add r0, r5, #0x0 - add r0, #0x6c - strh r1, [r0, #0x0] - add r0, r5, #0x0 - add r0, #0x6c - ldrh r1, [r0, #0x0] - mov r0, #0x10 - add r5, #0x6c - orr r0, r1 - strh r0, [r5, #0x0] - ldr r0, [sp, #0x2c] - cmp r0, #0x0 - beq _02007518 - add r1, r4, r6 - add r1, #0x84 - mov r2, #0x14 - bl MI_CpuCopy8 -_02007518: - add r0, r4, r6 - add sp, #0xc - pop {r4-r7, pc} - nop -_02007520: .word 0xFFFFFC1F -_02007524: .word 0xFFFF83FF -_02007528: .word 0xFFF07FFF -_0200752C: .word 0xFE0FFFFF -_02007530: .word 0xC1FFFFFF - - thumb_func_start FUN_02007534 -FUN_02007534: ; 0x02007534 - ldr r2, [r0, #0x0] - mov r1, #0x1 - bic r2, r1 - str r2, [r0, #0x0] - bx lr - .balign 4 - - thumb_func_start FUN_02007540 -FUN_02007540: ; 0x02007540 - push {r3-r5, lr} - add r5, r0, #0x0 - mov r4, #0x0 -_02007546: - add r0, r5, #0x0 - bl FUN_02007534 - add r4, r4, #0x1 - add r5, #0x98 - cmp r4, #0x4 - blt _02007546 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02007558 -FUN_02007558: ; 0x02007558 - cmp r1, #0x2e - bls _0200755E - b _02007800 -_0200755E: - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #0x6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_0200756A: ; jump table (using 16-bit offset) - .short _020075C8 - _0200756A - 2; case 0 - .short _020075CC - _0200756A - 2; case 1 - .short _020075D0 - _0200756A - 2; case 2 - .short _020075D4 - _0200756A - 2; case 3 - .short _020075D8 - _0200756A - 2; case 4 - .short _020075DC - _0200756A - 2; case 5 - .short _020075E0 - _0200756A - 2; case 6 - .short _020075F0 - _0200756A - 2; case 7 - .short _020075F4 - _0200756A - 2; case 8 - .short _020075F8 - _0200756A - 2; case 9 - .short _020075FC - _0200756A - 2; case 10 - .short _02007602 - _0200756A - 2; case 11 - .short _02007608 - _0200756A - 2; case 12 - .short _0200760C - _0200756A - 2; case 13 - .short _02007610 - _0200756A - 2; case 14 - .short _02007620 - _0200756A - 2; case 15 - .short _02007626 - _0200756A - 2; case 16 - .short _0200762C - _0200756A - 2; case 17 - .short _02007632 - _0200756A - 2; case 18 - .short _02007638 - _0200756A - 2; case 19 - .short _0200763E - _0200756A - 2; case 20 - .short _02007644 - _0200756A - 2; case 21 - .short _0200764A - _0200756A - 2; case 22 - .short _02007650 - _0200756A - 2; case 23 - .short _02007660 - _0200756A - 2; case 24 - .short _02007670 - _0200756A - 2; case 25 - .short _02007680 - _0200756A - 2; case 26 - .short _02007690 - _0200756A - 2; case 27 - .short _020076A0 - _0200756A - 2; case 28 - .short _020076B0 - _0200756A - 2; case 29 - .short _020076C0 - _0200756A - 2; case 30 - .short _020076DA - _0200756A - 2; case 31 - .short _020076E8 - _0200756A - 2; case 32 - .short _020076FA - _0200756A - 2; case 33 - .short _0200770C - _0200756A - 2; case 34 - .short _02007712 - _0200756A - 2; case 35 - .short _0200772A - _0200756A - 2; case 36 - .short _02007742 - _0200756A - 2; case 37 - .short _02007752 - _0200756A - 2; case 38 - .short _02007800 - _0200756A - 2; case 39 - .short _02007758 - _0200756A - 2; case 40 - .short _02007770 - _0200756A - 2; case 41 - .short _02007776 - _0200756A - 2; case 42 - .short _0200779A - _0200756A - 2; case 43 - .short _020077B4 - _0200756A - 2; case 44 - .short _020077CE - _0200756A - 2; case 45 - .short _020077E8 - _0200756A - 2; case 46 -_020075C8: - strh r2, [r0, #0x24] - bx lr -_020075CC: - strh r2, [r0, #0x26] - bx lr -_020075D0: - str r2, [r0, #0x28] - bx lr -_020075D4: - strh r2, [r0, #0x2c] - bx lr -_020075D8: - strh r2, [r0, #0x2e] - bx lr -_020075DC: - str r2, [r0, #0x30] - bx lr -_020075E0: - ldr r3, [r0, #0x54] - mov r1, #0x1 - bic r3, r1 - mov r1, #0x1 - and r1, r2 - orr r1, r3 - str r1, [r0, #0x54] - bx lr -_020075F0: - strh r2, [r0, #0x38] - bx lr -_020075F4: - strh r2, [r0, #0x3a] - bx lr -_020075F8: - strh r2, [r0, #0x3c] - bx lr -_020075FC: - add r0, #0x40 - strh r2, [r0, #0x0] - bx lr -_02007602: - add r0, #0x42 - strh r2, [r0, #0x0] - bx lr -_02007608: - strh r2, [r0, #0x34] - bx lr -_0200760C: - strh r2, [r0, #0x36] - bx lr -_02007610: - ldr r3, [r0, #0x54] - mov r1, #0x2 - bic r3, r1 - lsl r1, r2, #0x1f - lsr r1, r1, #0x1e - orr r1, r3 - str r1, [r0, #0x54] - bx lr -_02007620: - add r0, #0x44 - strb r2, [r0, #0x0] - bx lr -_02007626: - add r0, #0x45 - strb r2, [r0, #0x0] - bx lr -_0200762C: - add r0, #0x46 - strb r2, [r0, #0x0] - bx lr -_02007632: - add r0, #0x47 - strb r2, [r0, #0x0] - bx lr -_02007638: - add r0, #0x70 - strh r2, [r0, #0x0] - bx lr -_0200763E: - add r0, #0x72 - strh r2, [r0, #0x0] - bx lr -_02007644: - add r0, #0x74 - strh r2, [r0, #0x0] - bx lr -_0200764A: - add r0, #0x76 - strh r2, [r0, #0x0] - bx lr -_02007650: - ldr r3, [r0, #0x54] - mov r1, #0x7c - bic r3, r1 - lsl r1, r2, #0x1b - lsr r1, r1, #0x19 - orr r1, r3 - str r1, [r0, #0x54] - bx lr -_02007660: - ldr r3, [r0, #0x50] - mov r1, #0x1f - bic r3, r1 - mov r1, #0x1f - and r1, r2 - orr r1, r3 - str r1, [r0, #0x50] - bx lr -_02007670: - ldr r3, [r0, #0x50] - ldr r1, _02007804 ; =0xFFFFFC1F - and r3, r1 - lsl r1, r2, #0x1b - lsr r1, r1, #0x16 - orr r1, r3 - str r1, [r0, #0x50] - bx lr -_02007680: - ldr r3, [r0, #0x50] - ldr r1, _02007808 ; =0xFFFF83FF - and r3, r1 - lsl r1, r2, #0x1b - lsr r1, r1, #0x11 - orr r1, r3 - str r1, [r0, #0x50] - bx lr -_02007690: - ldr r3, [r0, #0x50] - ldr r1, _0200780C ; =0xFFF07FFF - and r3, r1 - lsl r1, r2, #0x1b - lsr r1, r1, #0xc - orr r1, r3 - str r1, [r0, #0x50] - bx lr -_020076A0: - ldr r3, [r0, #0x50] - ldr r1, _02007810 ; =0xFE0FFFFF - and r3, r1 - lsl r1, r2, #0x1b - lsr r1, r1, #0x7 - orr r1, r3 - str r1, [r0, #0x50] - bx lr -_020076B0: - ldr r3, [r0, #0x50] - ldr r1, _02007814 ; =0xC1FFFFFF - and r3, r1 - lsl r1, r2, #0x1b - lsr r1, r1, #0x2 - orr r1, r3 - str r1, [r0, #0x50] - bx lr -_020076C0: - ldr r3, [r0, #0x54] - ldr r1, _02007818 ; =0xFFFFEFFF - and r3, r1 - lsl r1, r2, #0x1f - lsr r1, r1, #0x13 - orr r1, r3 - str r1, [r0, #0x54] - mov r1, #0x1 - ldr r2, [r0, #0x0] - lsl r1, r1, #0x8 - orr r1, r2 - str r1, [r0, #0x0] - bx lr -_020076DA: - str r2, [r0, #0x4c] - mov r1, #0x1 - ldr r2, [r0, #0x0] - lsl r1, r1, #0x8 - orr r1, r2 - str r1, [r0, #0x0] - bx lr -_020076E8: - add r1, r0, #0x0 - add r1, #0x48 - strb r2, [r1, #0x0] - mov r1, #0x1 - ldr r2, [r0, #0x0] - lsl r1, r1, #0x8 - orr r1, r2 - str r1, [r0, #0x0] - bx lr -_020076FA: - add r1, r0, #0x0 - add r1, #0x49 - strb r2, [r1, #0x0] - mov r1, #0x1 - ldr r2, [r0, #0x0] - lsl r1, r1, #0x8 - orr r1, r2 - str r1, [r0, #0x0] - bx lr -_0200770C: - add r0, #0x4a - strb r2, [r0, #0x0] - bx lr -_02007712: - ldr r3, [r0, #0x54] - ldr r1, _0200781C ; =0xFFFFFDFF - and r3, r1 - lsl r1, r2, #0x1f - lsr r1, r1, #0x16 - orr r1, r3 - str r1, [r0, #0x54] - ldr r2, [r0, #0x0] - mov r1, #0x80 - orr r1, r2 - str r1, [r0, #0x0] - bx lr -_0200772A: - ldr r3, [r0, #0x54] - ldr r1, _02007820 ; =0xFFFFFBFF - and r3, r1 - lsl r1, r2, #0x1f - lsr r1, r1, #0x15 - orr r1, r3 - str r1, [r0, #0x54] - ldr r2, [r0, #0x0] - mov r1, #0x80 - orr r1, r2 - str r1, [r0, #0x0] - bx lr -_02007742: - ldr r3, [r0, #0x54] - ldr r1, _02007824 ; =0xFFFFF7FF - and r3, r1 - lsl r1, r2, #0x1f - lsr r1, r1, #0x14 - orr r1, r3 - str r1, [r0, #0x54] - bx lr -_02007752: - add r0, #0x5b - strb r2, [r0, #0x0] - bx lr -_02007758: - ldr r3, [r0, #0x54] - ldr r1, _02007828 ; =0xFFFE1FFF - and r3, r1 - lsl r1, r2, #0x1c - lsr r1, r1, #0xf - orr r1, r3 - str r1, [r0, #0x54] - ldr r2, [r0, #0x0] - mov r1, #0x80 - orr r1, r2 - str r1, [r0, #0x0] - bx lr -_02007770: - add r0, #0x6e - strb r2, [r0, #0x0] - bx lr -_02007776: - add r1, r0, #0x0 - add r1, #0x6c - ldrh r3, [r1, #0x0] - mov r1, #0x3 - bic r3, r1 - lsl r1, r2, #0x10 - lsr r1, r1, #0x10 - mov r2, #0x3 - and r1, r2 - orr r3, r1 - add r1, r0, #0x0 - add r1, #0x6c - strh r3, [r1, #0x0] - ldr r1, [r0, #0x0] - add r2, #0xfd - orr r1, r2 - str r1, [r0, #0x0] - bx lr -_0200779A: - add r1, r0, #0x0 - add r1, #0x6c - ldrh r3, [r1, #0x0] - mov r1, #0x4 - add r0, #0x6c - bic r3, r1 - lsl r1, r2, #0x10 - lsr r1, r1, #0x10 - lsl r1, r1, #0x1f - lsr r1, r1, #0x1d - orr r1, r3 - strh r1, [r0, #0x0] - bx lr -_020077B4: - add r1, r0, #0x0 - add r1, #0x6c - ldrh r3, [r1, #0x0] - mov r1, #0x8 - add r0, #0x6c - bic r3, r1 - lsl r1, r2, #0x10 - lsr r1, r1, #0x10 - lsl r1, r1, #0x1f - lsr r1, r1, #0x1c - orr r1, r3 - strh r1, [r0, #0x0] - bx lr -_020077CE: - add r1, r0, #0x0 - add r1, #0x6c - ldrh r3, [r1, #0x0] - mov r1, #0x10 - add r0, #0x6c - bic r3, r1 - lsl r1, r2, #0x10 - lsr r1, r1, #0x10 - lsl r1, r1, #0x1f - lsr r1, r1, #0x1b - orr r1, r3 - strh r1, [r0, #0x0] - bx lr -_020077E8: - add r1, r0, #0x0 - add r1, #0x6c - ldrh r3, [r1, #0x0] - mov r1, #0x60 - add r0, #0x6c - bic r3, r1 - lsl r1, r2, #0x10 - lsr r1, r1, #0x10 - lsl r1, r1, #0x1e - lsr r1, r1, #0x19 - orr r1, r3 - strh r1, [r0, #0x0] -_02007800: - bx lr - nop -_02007804: .word 0xFFFFFC1F -_02007808: .word 0xFFFF83FF -_0200780C: .word 0xFFF07FFF -_02007810: .word 0xFE0FFFFF -_02007814: .word 0xC1FFFFFF -_02007818: .word 0xFFFFEFFF -_0200781C: .word 0xFFFFFDFF -_02007820: .word 0xFFFFFBFF -_02007824: .word 0xFFFFF7FF -_02007828: .word 0xFFFE1FFF - - thumb_func_start FUN_0200782C -FUN_0200782C: ; 0x0200782C - push {r3, lr} - cmp r1, #0x2e - bls _02007834 - b _020079D6 -_02007834: - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #0x6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_02007840: ; jump table (using 16-bit offset) - .short _0200789E - _02007840 - 2; case 0 - .short _020078A4 - _02007840 - 2; case 1 - .short _020078AA - _02007840 - 2; case 2 - .short _020078AE - _02007840 - 2; case 3 - .short _020078B4 - _02007840 - 2; case 4 - .short _020078BA - _02007840 - 2; case 5 - .short _020078BE - _02007840 - 2; case 6 - .short _020078C6 - _02007840 - 2; case 7 - .short _020078CA - _02007840 - 2; case 8 - .short _020078CE - _02007840 - 2; case 9 - .short _020078D2 - _02007840 - 2; case 10 - .short _020078D8 - _02007840 - 2; case 11 - .short _020078DE - _02007840 - 2; case 12 - .short _020078E4 - _02007840 - 2; case 13 - .short _020078EA - _02007840 - 2; case 14 - .short _020078F2 - _02007840 - 2; case 15 - .short _020078F8 - _02007840 - 2; case 16 - .short _020078FE - _02007840 - 2; case 17 - .short _02007904 - _02007840 - 2; case 18 - .short _0200790A - _02007840 - 2; case 19 - .short _02007910 - _02007840 - 2; case 20 - .short _02007916 - _02007840 - 2; case 21 - .short _0200791C - _02007840 - 2; case 22 - .short _02007922 - _02007840 - 2; case 23 - .short _0200792A - _02007840 - 2; case 24 - .short _02007932 - _02007840 - 2; case 25 - .short _0200793A - _02007840 - 2; case 26 - .short _02007942 - _02007840 - 2; case 27 - .short _0200794A - _02007840 - 2; case 28 - .short _02007952 - _02007840 - 2; case 29 - .short _0200795A - _02007840 - 2; case 30 - .short _02007962 - _02007840 - 2; case 31 - .short _02007966 - _02007840 - 2; case 32 - .short _0200796C - _02007840 - 2; case 33 - .short _02007972 - _02007840 - 2; case 34 - .short _02007978 - _02007840 - 2; case 35 - .short _02007980 - _02007840 - 2; case 36 - .short _02007988 - _02007840 - 2; case 37 - .short _02007990 - _02007840 - 2; case 38 - .short _020079D6 - _02007840 - 2; case 39 - .short _02007996 - _02007840 - 2; case 40 - .short _0200799E - _02007840 - 2; case 41 - .short _020079A4 - _02007840 - 2; case 42 - .short _020079AE - _02007840 - 2; case 43 - .short _020079B8 - _02007840 - 2; case 44 - .short _020079C2 - _02007840 - 2; case 45 - .short _020079CC - _02007840 - 2; case 46 -_0200789E: - mov r1, #0x24 - ldrsh r0, [r0, r1] - pop {r3, pc} -_020078A4: - mov r1, #0x26 - ldrsh r0, [r0, r1] - pop {r3, pc} -_020078AA: - ldr r0, [r0, #0x28] - pop {r3, pc} -_020078AE: - mov r1, #0x2c - ldrsh r0, [r0, r1] - pop {r3, pc} -_020078B4: - mov r1, #0x2e - ldrsh r0, [r0, r1] - pop {r3, pc} -_020078BA: - ldr r0, [r0, #0x30] - pop {r3, pc} -_020078BE: - ldr r0, [r0, #0x54] - lsl r0, r0, #0x1f - lsr r0, r0, #0x1f - pop {r3, pc} -_020078C6: - ldrh r0, [r0, #0x38] - pop {r3, pc} -_020078CA: - ldrh r0, [r0, #0x3a] - pop {r3, pc} -_020078CE: - ldrh r0, [r0, #0x3c] - pop {r3, pc} -_020078D2: - mov r1, #0x40 - ldrsh r0, [r0, r1] - pop {r3, pc} -_020078D8: - mov r1, #0x42 - ldrsh r0, [r0, r1] - pop {r3, pc} -_020078DE: - mov r1, #0x34 - ldrsh r0, [r0, r1] - pop {r3, pc} -_020078E4: - mov r1, #0x36 - ldrsh r0, [r0, r1] - pop {r3, pc} -_020078EA: - ldr r0, [r0, #0x54] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1f - pop {r3, pc} -_020078F2: - add r0, #0x44 - ldrb r0, [r0, #0x0] - pop {r3, pc} -_020078F8: - add r0, #0x45 - ldrb r0, [r0, #0x0] - pop {r3, pc} -_020078FE: - add r0, #0x46 - ldrb r0, [r0, #0x0] - pop {r3, pc} -_02007904: - add r0, #0x47 - ldrb r0, [r0, #0x0] - pop {r3, pc} -_0200790A: - mov r1, #0x70 - ldrsh r0, [r0, r1] - pop {r3, pc} -_02007910: - mov r1, #0x72 - ldrsh r0, [r0, r1] - pop {r3, pc} -_02007916: - mov r1, #0x74 - ldrsh r0, [r0, r1] - pop {r3, pc} -_0200791C: - mov r1, #0x76 - ldrsh r0, [r0, r1] - pop {r3, pc} -_02007922: - ldr r0, [r0, #0x54] - lsl r0, r0, #0x19 - lsr r0, r0, #0x1b - pop {r3, pc} -_0200792A: - ldr r0, [r0, #0x50] - lsl r0, r0, #0x1b - lsr r0, r0, #0x1b - pop {r3, pc} -_02007932: - ldr r0, [r0, #0x50] - lsl r0, r0, #0x16 - lsr r0, r0, #0x1b - pop {r3, pc} -_0200793A: - ldr r0, [r0, #0x50] - lsl r0, r0, #0x11 - lsr r0, r0, #0x1b - pop {r3, pc} -_02007942: - ldr r0, [r0, #0x50] - lsl r0, r0, #0xc - lsr r0, r0, #0x1b - pop {r3, pc} -_0200794A: - ldr r0, [r0, #0x50] - lsl r0, r0, #0x7 - lsr r0, r0, #0x1b - pop {r3, pc} -_02007952: - ldr r0, [r0, #0x50] - lsl r0, r0, #0x2 - lsr r0, r0, #0x1b - pop {r3, pc} -_0200795A: - ldr r0, [r0, #0x54] - lsl r0, r0, #0x13 - lsr r0, r0, #0x1f - pop {r3, pc} -_02007962: - ldr r0, [r0, #0x4c] - pop {r3, pc} -_02007966: - add r0, #0x48 - ldrb r0, [r0, #0x0] - pop {r3, pc} -_0200796C: - add r0, #0x49 - ldrb r0, [r0, #0x0] - pop {r3, pc} -_02007972: - add r0, #0x4a - ldrb r0, [r0, #0x0] - pop {r3, pc} -_02007978: - ldr r0, [r0, #0x54] - lsl r0, r0, #0x16 - lsr r0, r0, #0x1f - pop {r3, pc} -_02007980: - ldr r0, [r0, #0x54] - lsl r0, r0, #0x15 - lsr r0, r0, #0x1f - pop {r3, pc} -_02007988: - ldr r0, [r0, #0x54] - lsl r0, r0, #0x14 - lsr r0, r0, #0x1f - pop {r3, pc} -_02007990: - add r0, #0x5b - ldrb r0, [r0, #0x0] - pop {r3, pc} -_02007996: - ldr r0, [r0, #0x54] - lsl r0, r0, #0xf - lsr r0, r0, #0x1c - pop {r3, pc} -_0200799E: - mov r1, #0x6e - ldrsb r0, [r0, r1] - pop {r3, pc} -_020079A4: - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1e - lsr r0, r0, #0x1e - pop {r3, pc} -_020079AE: - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1d - lsr r0, r0, #0x1f - pop {r3, pc} -_020079B8: - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1c - lsr r0, r0, #0x1f - pop {r3, pc} -_020079C2: - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x1b - lsr r0, r0, #0x1f - pop {r3, pc} -_020079CC: - add r0, #0x6c - ldrh r0, [r0, #0x0] - lsl r0, r0, #0x19 - lsr r0, r0, #0x1e - pop {r3, pc} -_020079D6: - bl GF_AssertFail - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_020079E0 -FUN_020079E0: ; 0x020079E0 - push {r3-r4} - add r3, r0, #0x0 - add r0, r2, #0x0 - cmp r1, #0x2e - bls _020079EC - b _02007E12 -_020079EC: - add r1, r1, r1 - add r1, pc - ldrh r1, [r1, #0x6] - lsl r1, r1, #0x10 - asr r1, r1, #0x10 - add pc, r1 -_020079F8: ; jump table (using 16-bit offset) - .short _02007A56 - _020079F8 - 2; case 0 - .short _02007A62 - _020079F8 - 2; case 1 - .short _02007A6E - _020079F8 - 2; case 2 - .short _02007A78 - _020079F8 - 2; case 3 - .short _02007A84 - _020079F8 - 2; case 4 - .short _02007A90 - _020079F8 - 2; case 5 - .short _02007A9A - _020079F8 - 2; case 6 - .short _02007AB4 - _020079F8 - 2; case 7 - .short _02007ABE - _020079F8 - 2; case 8 - .short _02007AC8 - _020079F8 - 2; case 9 - .short _02007AD2 - _020079F8 - 2; case 10 - .short _02007AE0 - _020079F8 - 2; case 11 - .short _02007AEE - _020079F8 - 2; case 12 - .short _02007AFA - _020079F8 - 2; case 13 - .short _02007B06 - _020079F8 - 2; case 14 - .short _02007B20 - _020079F8 - 2; case 15 - .short _02007B30 - _020079F8 - 2; case 16 - .short _02007B40 - _020079F8 - 2; case 17 - .short _02007B50 - _020079F8 - 2; case 18 - .short _02007B60 - _020079F8 - 2; case 19 - .short _02007B6E - _020079F8 - 2; case 20 - .short _02007B7C - _020079F8 - 2; case 21 - .short _02007B8A - _020079F8 - 2; case 22 - .short _02007B98 - _020079F8 - 2; case 23 - .short _02007BB2 - _020079F8 - 2; case 24 - .short _02007BCC - _020079F8 - 2; case 25 - .short _02007BE4 - _020079F8 - 2; case 26 - .short _02007BFC - _020079F8 - 2; case 27 - .short _02007C14 - _020079F8 - 2; case 28 - .short _02007C2C - _020079F8 - 2; case 29 - .short _02007C44 - _020079F8 - 2; case 30 - .short _02007C66 - _020079F8 - 2; case 31 - .short _02007C7A - _020079F8 - 2; case 32 - .short _02007C96 - _020079F8 - 2; case 33 - .short _02007CB2 - _020079F8 - 2; case 34 - .short _02007CC2 - _020079F8 - 2; case 35 - .short _02007CE2 - _020079F8 - 2; case 36 - .short _02007D02 - _020079F8 - 2; case 37 - .short _02007D1A - _020079F8 - 2; case 38 - .short _02007E12 - _020079F8 - 2; case 39 - .short _02007D2A - _020079F8 - 2; case 40 - .short _02007D4A - _020079F8 - 2; case 41 - .short _02007D58 - _020079F8 - 2; case 42 - .short _02007D86 - _020079F8 - 2; case 43 - .short _02007DAA - _020079F8 - 2; case 44 - .short _02007DCE - _020079F8 - 2; case 45 - .short _02007DF2 - _020079F8 - 2; case 46 -_02007A56: - mov r1, #0x24 - ldrsh r1, [r3, r1] - add r0, r1, r0 - strh r0, [r3, #0x24] - pop {r3-r4} - bx lr -_02007A62: - mov r1, #0x26 - ldrsh r1, [r3, r1] - add r0, r1, r0 - strh r0, [r3, #0x26] - pop {r3-r4} - bx lr -_02007A6E: - ldr r1, [r3, #0x28] - add r0, r1, r0 - str r0, [r3, #0x28] - pop {r3-r4} - bx lr -_02007A78: - mov r1, #0x2c - ldrsh r1, [r3, r1] - add r0, r1, r0 - strh r0, [r3, #0x2c] - pop {r3-r4} - bx lr -_02007A84: - mov r1, #0x2e - ldrsh r1, [r3, r1] - add r0, r1, r0 - strh r0, [r3, #0x2e] - pop {r3-r4} - bx lr -_02007A90: - ldr r1, [r3, #0x30] - add r0, r1, r0 - str r0, [r3, #0x30] - pop {r3-r4} - bx lr -_02007A9A: - ldr r4, [r3, #0x54] - mov r2, #0x1 - add r1, r4, #0x0 - bic r1, r2 - lsl r2, r4, #0x1f - lsr r2, r2, #0x1f - add r2, r2, r0 - mov r0, #0x1 - and r0, r2 - orr r0, r1 - str r0, [r3, #0x54] - pop {r3-r4} - bx lr -_02007AB4: - ldrh r1, [r3, #0x38] - add r0, r1, r0 - strh r0, [r3, #0x38] - pop {r3-r4} - bx lr -_02007ABE: - ldrh r1, [r3, #0x3a] - add r0, r1, r0 - strh r0, [r3, #0x3a] - pop {r3-r4} - bx lr -_02007AC8: - ldrh r1, [r3, #0x3c] - add r0, r1, r0 - strh r0, [r3, #0x3c] - pop {r3-r4} - bx lr -_02007AD2: - mov r1, #0x40 - ldrsh r1, [r3, r1] - add r3, #0x40 - add r0, r1, r0 - strh r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007AE0: - mov r1, #0x42 - ldrsh r1, [r3, r1] - add r3, #0x42 - add r0, r1, r0 - strh r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007AEE: - mov r1, #0x34 - ldrsh r1, [r3, r1] - add r0, r1, r0 - strh r0, [r3, #0x34] - pop {r3-r4} - bx lr -_02007AFA: - mov r1, #0x36 - ldrsh r1, [r3, r1] - add r0, r1, r0 - strh r0, [r3, #0x36] - pop {r3-r4} - bx lr -_02007B06: - ldr r4, [r3, #0x54] - mov r2, #0x2 - add r1, r4, #0x0 - bic r1, r2 - lsl r2, r4, #0x1e - lsr r2, r2, #0x1f - add r0, r2, r0 - lsl r0, r0, #0x1f - lsr r0, r0, #0x1e - orr r0, r1 - str r0, [r3, #0x54] - pop {r3-r4} - bx lr -_02007B20: - add r1, r3, #0x0 - add r1, #0x44 - ldrb r1, [r1, #0x0] - add r3, #0x44 - add r0, r1, r0 - strb r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007B30: - add r1, r3, #0x0 - add r1, #0x45 - ldrb r1, [r1, #0x0] - add r3, #0x45 - add r0, r1, r0 - strb r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007B40: - add r1, r3, #0x0 - add r1, #0x46 - ldrb r1, [r1, #0x0] - add r3, #0x46 - add r0, r1, r0 - strb r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007B50: - add r1, r3, #0x0 - add r1, #0x47 - ldrb r1, [r1, #0x0] - add r3, #0x47 - add r0, r1, r0 - strb r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007B60: - mov r1, #0x70 - ldrsh r1, [r3, r1] - add r3, #0x70 - add r0, r1, r0 - strh r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007B6E: - mov r1, #0x72 - ldrsh r1, [r3, r1] - add r3, #0x72 - add r0, r1, r0 - strh r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007B7C: - mov r1, #0x74 - ldrsh r1, [r3, r1] - add r3, #0x74 - add r0, r1, r0 - strh r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007B8A: - mov r1, #0x76 - ldrsh r1, [r3, r1] - add r3, #0x76 - add r0, r1, r0 - strh r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007B98: - ldr r4, [r3, #0x54] - mov r2, #0x7c - add r1, r4, #0x0 - bic r1, r2 - lsl r2, r4, #0x19 - lsr r2, r2, #0x1b - add r0, r2, r0 - lsl r0, r0, #0x1b - lsr r0, r0, #0x19 - orr r0, r1 - str r0, [r3, #0x54] - pop {r3-r4} - bx lr -_02007BB2: - ldr r4, [r3, #0x50] - mov r2, #0x1f - add r1, r4, #0x0 - bic r1, r2 - lsl r2, r4, #0x1b - lsr r2, r2, #0x1b - add r2, r2, r0 - mov r0, #0x1f - and r0, r2 - orr r0, r1 - str r0, [r3, #0x50] - pop {r3-r4} - bx lr -_02007BCC: - ldr r2, [r3, #0x50] - ldr r1, _02007E18 ; =0xFFFFFC1F - and r1, r2 - lsl r2, r2, #0x16 - lsr r2, r2, #0x1b - add r0, r2, r0 - lsl r0, r0, #0x1b - lsr r0, r0, #0x16 - orr r0, r1 - str r0, [r3, #0x50] - pop {r3-r4} - bx lr -_02007BE4: - ldr r2, [r3, #0x50] - ldr r1, _02007E1C ; =0xFFFF83FF - and r1, r2 - lsl r2, r2, #0x11 - lsr r2, r2, #0x1b - add r0, r2, r0 - lsl r0, r0, #0x1b - lsr r0, r0, #0x11 - orr r0, r1 - str r0, [r3, #0x50] - pop {r3-r4} - bx lr -_02007BFC: - ldr r2, [r3, #0x50] - ldr r1, _02007E20 ; =0xFFF07FFF - and r1, r2 - lsl r2, r2, #0xc - lsr r2, r2, #0x1b - add r0, r2, r0 - lsl r0, r0, #0x1b - lsr r0, r0, #0xc - orr r0, r1 - str r0, [r3, #0x50] - pop {r3-r4} - bx lr -_02007C14: - ldr r2, [r3, #0x50] - ldr r1, _02007E24 ; =0xFE0FFFFF - and r1, r2 - lsl r2, r2, #0x7 - lsr r2, r2, #0x1b - add r0, r2, r0 - lsl r0, r0, #0x1b - lsr r0, r0, #0x7 - orr r0, r1 - str r0, [r3, #0x50] - pop {r3-r4} - bx lr -_02007C2C: - ldr r2, [r3, #0x50] - ldr r1, _02007E28 ; =0xC1FFFFFF - and r1, r2 - lsl r2, r2, #0x2 - lsr r2, r2, #0x1b - add r0, r2, r0 - lsl r0, r0, #0x1b - lsr r0, r0, #0x2 - orr r0, r1 - str r0, [r3, #0x50] - pop {r3-r4} - bx lr -_02007C44: - ldr r2, [r3, #0x54] - ldr r1, _02007E2C ; =0xFFFFEFFF - and r1, r2 - lsl r2, r2, #0x13 - lsr r2, r2, #0x1f - add r0, r2, r0 - lsl r0, r0, #0x1f - lsr r0, r0, #0x13 - orr r0, r1 - str r0, [r3, #0x54] - mov r0, #0x1 - ldr r1, [r3, #0x0] - lsl r0, r0, #0x8 - orr r0, r1 - str r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007C66: - ldr r1, [r3, #0x4c] - add r0, r1, r0 - str r0, [r3, #0x4c] - mov r0, #0x1 - ldr r1, [r3, #0x0] - lsl r0, r0, #0x8 - orr r0, r1 - str r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007C7A: - add r1, r3, #0x0 - add r1, #0x48 - ldrb r1, [r1, #0x0] - add r1, r1, r0 - add r0, r3, #0x0 - add r0, #0x48 - strb r1, [r0, #0x0] - mov r0, #0x1 - ldr r1, [r3, #0x0] - lsl r0, r0, #0x8 - orr r0, r1 - str r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007C96: - add r1, r3, #0x0 - add r1, #0x49 - ldrb r1, [r1, #0x0] - add r1, r1, r0 - add r0, r3, #0x0 - add r0, #0x49 - strb r1, [r0, #0x0] - mov r0, #0x1 - ldr r1, [r3, #0x0] - lsl r0, r0, #0x8 - orr r0, r1 - str r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007CB2: - add r1, r3, #0x0 - add r1, #0x4a - ldrb r1, [r1, #0x0] - add r3, #0x4a - add r0, r1, r0 - strb r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007CC2: - ldr r2, [r3, #0x54] - ldr r1, _02007E30 ; =0xFFFFFDFF - and r1, r2 - lsl r2, r2, #0x16 - lsr r2, r2, #0x1f - add r0, r2, r0 - lsl r0, r0, #0x1f - lsr r0, r0, #0x16 - orr r0, r1 - str r0, [r3, #0x54] - ldr r1, [r3, #0x0] - mov r0, #0x80 - orr r0, r1 - str r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007CE2: - ldr r2, [r3, #0x54] - ldr r1, _02007E34 ; =0xFFFFFBFF - and r1, r2 - lsl r2, r2, #0x15 - lsr r2, r2, #0x1f - add r0, r2, r0 - lsl r0, r0, #0x1f - lsr r0, r0, #0x15 - orr r0, r1 - str r0, [r3, #0x54] - ldr r1, [r3, #0x0] - mov r0, #0x80 - orr r0, r1 - str r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007D02: - ldr r2, [r3, #0x54] - ldr r1, _02007E38 ; =0xFFFFF7FF - and r1, r2 - lsl r2, r2, #0x14 - lsr r2, r2, #0x1f - add r0, r2, r0 - lsl r0, r0, #0x1f - lsr r0, r0, #0x14 - orr r0, r1 - str r0, [r3, #0x54] - pop {r3-r4} - bx lr -_02007D1A: - add r1, r3, #0x0 - add r1, #0x5b - ldrb r1, [r1, #0x0] - add r3, #0x5b - add r0, r1, r0 - strb r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007D2A: - ldr r2, [r3, #0x54] - ldr r1, _02007E3C ; =0xFFFE1FFF - and r1, r2 - lsl r2, r2, #0xf - lsr r2, r2, #0x1c - add r0, r2, r0 - lsl r0, r0, #0x1c - lsr r0, r0, #0xf - orr r0, r1 - str r0, [r3, #0x54] - ldr r1, [r3, #0x0] - mov r0, #0x80 - orr r0, r1 - str r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007D4A: - mov r1, #0x6e - ldrsb r1, [r3, r1] - add r3, #0x6e - add r0, r1, r0 - strb r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007D58: - add r1, r3, #0x0 - add r1, #0x6c - ldrh r4, [r1, #0x0] - mov r2, #0x3 - add r1, r4, #0x0 - bic r1, r2 - lsl r2, r4, #0x1e - lsr r2, r2, #0x1e - add r0, r2, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - mov r2, #0x3 - and r0, r2 - orr r1, r0 - add r0, r3, #0x0 - add r0, #0x6c - strh r1, [r0, #0x0] - ldr r0, [r3, #0x0] - add r2, #0xfd - orr r0, r2 - str r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007D86: - add r1, r3, #0x0 - add r1, #0x6c - ldrh r4, [r1, #0x0] - mov r2, #0x4 - add r3, #0x6c - add r1, r4, #0x0 - bic r1, r2 - lsl r2, r4, #0x1d - lsr r2, r2, #0x1f - add r0, r2, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - lsl r0, r0, #0x1f - lsr r0, r0, #0x1d - orr r0, r1 - strh r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007DAA: - add r1, r3, #0x0 - add r1, #0x6c - ldrh r4, [r1, #0x0] - mov r2, #0x8 - add r3, #0x6c - add r1, r4, #0x0 - bic r1, r2 - lsl r2, r4, #0x1c - lsr r2, r2, #0x1f - add r0, r2, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - lsl r0, r0, #0x1f - lsr r0, r0, #0x1c - orr r0, r1 - strh r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007DCE: - add r1, r3, #0x0 - add r1, #0x6c - ldrh r4, [r1, #0x0] - mov r2, #0x10 - add r3, #0x6c - add r1, r4, #0x0 - bic r1, r2 - lsl r2, r4, #0x1b - lsr r2, r2, #0x1f - add r0, r2, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - lsl r0, r0, #0x1f - lsr r0, r0, #0x1b - orr r0, r1 - strh r0, [r3, #0x0] - pop {r3-r4} - bx lr -_02007DF2: - add r1, r3, #0x0 - add r1, #0x6c - ldrh r4, [r1, #0x0] - mov r2, #0x60 - add r3, #0x6c - add r1, r4, #0x0 - bic r1, r2 - lsl r2, r4, #0x19 - lsr r2, r2, #0x1e - add r0, r2, r0 - lsl r0, r0, #0x10 - lsr r0, r0, #0x10 - lsl r0, r0, #0x1e - lsr r0, r0, #0x19 - orr r0, r1 - strh r0, [r3, #0x0] -_02007E12: - pop {r3-r4} - bx lr - nop -_02007E18: .word 0xFFFFFC1F -_02007E1C: .word 0xFFFF83FF -_02007E20: .word 0xFFF07FFF -_02007E24: .word 0xFE0FFFFF -_02007E28: .word 0xC1FFFFFF -_02007E2C: .word 0xFFFFEFFF -_02007E30: .word 0xFFFFFDFF -_02007E34: .word 0xFFFFFBFF -_02007E38: .word 0xFFFFF7FF -_02007E3C: .word 0xFFFE1FFF - - 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/lib/NitroSDK/include/GX_g3.h b/arm9/lib/NitroSDK/include/GX_g3.h index 765ecc64..2c093370 100644 --- a/arm9/lib/NitroSDK/include/GX_g3.h +++ b/arm9/lib/NitroSDK/include/GX_g3.h @@ -181,4 +181,40 @@ typedef union } GXBoxTestParam; + + + +#define GX_PACK_TEXIMAGE_PARAM(texFmt, texGen, s, t, repeat, flip, pltt0, addr) \ + ((u32)(((addr) >> 3) | \ + ((texFmt) << REG_G3_TEXIMAGE_PARAM_TEXFMT_SHIFT) | \ + ((texGen) << REG_G3_TEXIMAGE_PARAM_TGEN_SHIFT) | \ + ((s) << REG_G3_TEXIMAGE_PARAM_V_SIZE_SHIFT) | \ + ((t) << REG_G3_TEXIMAGE_PARAM_T_SIZE_SHIFT) | \ + ((repeat) << REG_G3_TEXIMAGE_PARAM_RS_SHIFT) | \ + ((flip) << REG_G3_TEXIMAGE_PARAM_FS_SHIFT) | \ + ((pltt0) << REG_G3_TEXIMAGE_PARAM_TR_SHIFT))) + +#define GX_PACK_POLYGONATTR_PARAM(light, polyMode, cullMode, polygonID, alpha, misc) \ + ((u32)(((light) << REG_G3_POLYGON_ATTR_LE_SHIFT) | \ + ((polyMode) << REG_G3_POLYGON_ATTR_PM_SHIFT) | \ + ((cullMode) << REG_G3_POLYGON_ATTR_BK_SHIFT) | \ + (misc) | \ + ((polygonID) << REG_G3_POLYGON_ATTR_ID_SHIFT) | \ + ((alpha) << REG_G3_POLYGON_ATTR_ALPHA_SHIFT))) + + +#define GX_PACK_TEXPLTTBASE_PARAM(addr, texFmt) \ + ((u32)((addr) >> (4 - ((texFmt) == GX_TEXFMT_PLTT4)))) + + +#define GX_PACK_DIFFAMB_PARAM(diffuse, ambient, IsSetVtxColor) \ + ((u32)((diffuse) | \ + ((ambient) << REG_G3_DIF_AMB_AMBIENT_RED_SHIFT) | \ + ((IsSetVtxColor != FALSE) << REG_G3_DIF_AMB_C_SHIFT))) + +#define GX_PACK_SPECEMI_PARAM(specular, emission, IsShininess) \ + ((u32)((specular) | \ + ((emission) << REG_G3_SPE_EMI_EMISSION_RED_SHIFT) | \ + ((IsShininess != FALSE) << REG_G3_SPE_EMI_S_SHIFT))) + #endif //GUARD_GX_G3_H diff --git a/arm9/lib/NitroSDK/include/GX_g3imm.h b/arm9/lib/NitroSDK/include/GX_g3imm.h index f811dc68..33ebdef2 100644 --- a/arm9/lib/NitroSDK/include/GX_g3imm.h +++ b/arm9/lib/NitroSDK/include/GX_g3imm.h @@ -1,10 +1,68 @@ #ifndef GUARD_GX_G3IMM_H #define GUARD_GX_G3IMM_H +#include "GX_g3.h" #include "fx.h" void G3_LoadMtx43(struct Mtx43 *mtx); void G3_MultMtx43(struct Mtx43 *mtx); void G3_MultMtx33(struct Mtx33 *mtx); -#endif //GUARD_GX_G3IMM_H + +static inline void G3_PushMtx() +{ + reg_G3_MTX_PUSH = 0; +} + +static inline void G3_PopMtx(int num) +{ + reg_G3_MTX_POP = (u32)num; +} + +static inline void G3_Identity() +{ + reg_G3_MTX_IDENTITY = 0; +} + + +static inline void G3_Translate(fx32 x, fx32 y, fx32 z) +{ + reg_G3_MTX_TRANS = (u32)x; + reg_G3_MTX_TRANS = (u32)y; + reg_G3_MTX_TRANS = (u32)z; +} + + +static inline void G3_PolygonAttr(int light, GXPolygonMode polyMode, GXCull cullMode, int polygonID, int alpha, int misc) { + reg_G3_POLYGON_ATTR = GX_PACK_POLYGONATTR_PARAM(light, + polyMode, cullMode, polygonID, alpha, misc); +} + +static inline void G3_TexImageParam(GXTexFmt texFmt, + GXTexGen texGen, + GXTexSizeS s, + GXTexSizeT t, + GXTexRepeat repeat, + GXTexFlip flip, GXTexPlttColor0 pltt0, u32 addr) { + reg_G3_TEXIMAGE_PARAM = GX_PACK_TEXIMAGE_PARAM(texFmt, texGen, s, t, repeat, flip, pltt0, addr); +} + + +static inline void G3_TexPlttBase(u32 addr, GXTexFmt texfmt) +{ + u32 param = GX_PACK_TEXPLTTBASE_PARAM(addr, texfmt); + reg_G3_TEXPLTT_BASE = param; +} + + +static inline void G3_MaterialColorDiffAmb(GXRgb diffuse, GXRgb ambient, BOOL IsSetVtxColor) +{ + reg_G3_DIF_AMB = GX_PACK_DIFFAMB_PARAM(diffuse, ambient, IsSetVtxColor); +} + +static inline void G3_MaterialColorSpecEmi(GXRgb specular, GXRgb emission, BOOL IsShininess) +{ + reg_G3_SPE_EMI = GX_PACK_SPECEMI_PARAM(specular, emission, IsShininess); +} + +#endif //GUARD_GX_G3IMM_H diff --git a/arm9/lib/NitroSDK/include/registers.h b/arm9/lib/NitroSDK/include/registers.h index b4fd8ce7..d31cee22 100644 --- a/arm9/lib/NitroSDK/include/registers.h +++ b/arm9/lib/NitroSDK/include/registers.h @@ -1066,4 +1066,154 @@ #define REG_OS_TM3CNT_H_PS_SIZE 2 #define REG_OS_TM3CNT_H_PS_MASK 0x0003 +// POLYGON_ATTR + +#define REG_G3_POLYGON_ATTR_ID_SHIFT 24 +#define REG_G3_POLYGON_ATTR_ID_SIZE 6 +#define REG_G3_POLYGON_ATTR_ID_MASK 0x3f000000 + +#define REG_G3_POLYGON_ATTR_ALPHA_SHIFT 16 +#define REG_G3_POLYGON_ATTR_ALPHA_SIZE 5 +#define REG_G3_POLYGON_ATTR_ALPHA_MASK 0x001f0000 + +#define REG_G3_POLYGON_ATTR_FE_SHIFT 15 +#define REG_G3_POLYGON_ATTR_FE_SIZE 1 +#define REG_G3_POLYGON_ATTR_FE_MASK 0x00008000 + +#define REG_G3_POLYGON_ATTR_DT_SHIFT 14 +#define REG_G3_POLYGON_ATTR_DT_SIZE 1 +#define REG_G3_POLYGON_ATTR_DT_MASK 0x00004000 + +#define REG_G3_POLYGON_ATTR_D1_SHIFT 13 +#define REG_G3_POLYGON_ATTR_D1_SIZE 1 +#define REG_G3_POLYGON_ATTR_D1_MASK 0x00002000 + +#define REG_G3_POLYGON_ATTR_FC_SHIFT 12 +#define REG_G3_POLYGON_ATTR_FC_SIZE 1 +#define REG_G3_POLYGON_ATTR_FC_MASK 0x00001000 + +#define REG_G3_POLYGON_ATTR_XL_SHIFT 11 +#define REG_G3_POLYGON_ATTR_XL_SIZE 1 +#define REG_G3_POLYGON_ATTR_XL_MASK 0x00000800 + +#define REG_G3_POLYGON_ATTR_FR_SHIFT 7 +#define REG_G3_POLYGON_ATTR_FR_SIZE 1 +#define REG_G3_POLYGON_ATTR_FR_MASK 0x00000080 + +#define REG_G3_POLYGON_ATTR_BK_SHIFT 6 +#define REG_G3_POLYGON_ATTR_BK_SIZE 1 +#define REG_G3_POLYGON_ATTR_BK_MASK 0x00000040 + +#define REG_G3_POLYGON_ATTR_PM_SHIFT 4 +#define REG_G3_POLYGON_ATTR_PM_SIZE 2 +#define REG_G3_POLYGON_ATTR_PM_MASK 0x00000030 + +#define REG_G3_POLYGON_ATTR_LE_SHIFT 0 +#define REG_G3_POLYGON_ATTR_LE_SIZE 4 +#define REG_G3_POLYGON_ATTR_LE_MASK 0x0000000f + +// TEXIMAGE_PARAM + +#define REG_G3_TEXIMAGE_PARAM_TGEN_SHIFT 30 +#define REG_G3_TEXIMAGE_PARAM_TGEN_SIZE 2 +#define REG_G3_TEXIMAGE_PARAM_TGEN_MASK 0xc0000000 + +#define REG_G3_TEXIMAGE_PARAM_TR_SHIFT 29 +#define REG_G3_TEXIMAGE_PARAM_TR_SIZE 1 +#define REG_G3_TEXIMAGE_PARAM_TR_MASK 0x20000000 + +#define REG_G3_TEXIMAGE_PARAM_TEXFMT_SHIFT 26 +#define REG_G3_TEXIMAGE_PARAM_TEXFMT_SIZE 3 +#define REG_G3_TEXIMAGE_PARAM_TEXFMT_MASK 0x1c000000 + +#define REG_G3_TEXIMAGE_PARAM_T_SIZE_SHIFT 23 +#define REG_G3_TEXIMAGE_PARAM_T_SIZE_SIZE 3 +#define REG_G3_TEXIMAGE_PARAM_T_SIZE_MASK 0x03800000 + +#define REG_G3_TEXIMAGE_PARAM_V_SIZE_SHIFT 20 +#define REG_G3_TEXIMAGE_PARAM_V_SIZE_SIZE 3 +#define REG_G3_TEXIMAGE_PARAM_V_SIZE_MASK 0x00700000 + +#define REG_G3_TEXIMAGE_PARAM_FT_SHIFT 19 +#define REG_G3_TEXIMAGE_PARAM_FT_SIZE 1 +#define REG_G3_TEXIMAGE_PARAM_FT_MASK 0x00080000 + +#define REG_G3_TEXIMAGE_PARAM_FS_SHIFT 18 +#define REG_G3_TEXIMAGE_PARAM_FS_SIZE 1 +#define REG_G3_TEXIMAGE_PARAM_FS_MASK 0x00040000 + +#define REG_G3_TEXIMAGE_PARAM_RT_SHIFT 17 +#define REG_G3_TEXIMAGE_PARAM_RT_SIZE 1 +#define REG_G3_TEXIMAGE_PARAM_RT_MASK 0x00020000 + +#define REG_G3_TEXIMAGE_PARAM_RS_SHIFT 16 +#define REG_G3_TEXIMAGE_PARAM_RS_SIZE 1 +#define REG_G3_TEXIMAGE_PARAM_RS_MASK 0x00010000 + +#define REG_G3_TEXIMAGE_PARAM_TEX_ADDR_SHIFT 0 +#define REG_G3_TEXIMAGE_PARAM_TEX_ADDR_SIZE 16 +#define REG_G3_TEXIMAGE_PARAM_TEX_ADDR_MASK 0x0000ffff + + +// DIF_AMB + +#define REG_G3_DIF_AMB_AMBIENT_BLUE_SHIFT 26 +#define REG_G3_DIF_AMB_AMBIENT_BLUE_SIZE 5 +#define REG_G3_DIF_AMB_AMBIENT_BLUE_MASK 0x7c000000 + +#define REG_G3_DIF_AMB_AMBIENT_GREEN_SHIFT 21 +#define REG_G3_DIF_AMB_AMBIENT_GREEN_SIZE 5 +#define REG_G3_DIF_AMB_AMBIENT_GREEN_MASK 0x03e00000 + +#define REG_G3_DIF_AMB_AMBIENT_RED_SHIFT 16 +#define REG_G3_DIF_AMB_AMBIENT_RED_SIZE 5 +#define REG_G3_DIF_AMB_AMBIENT_RED_MASK 0x001f0000 + +#define REG_G3_DIF_AMB_C_SHIFT 15 +#define REG_G3_DIF_AMB_C_SIZE 1 +#define REG_G3_DIF_AMB_C_MASK 0x00008000 + +#define REG_G3_DIF_AMB_DIFFUSE_BLUE_SHIFT 10 +#define REG_G3_DIF_AMB_DIFFUSE_BLUE_SIZE 5 +#define REG_G3_DIF_AMB_DIFFUSE_BLUE_MASK 0x00007c00 + +#define REG_G3_DIF_AMB_DIFFUSE_GREEN_SHIFT 5 +#define REG_G3_DIF_AMB_DIFFUSE_GREEN_SIZE 5 +#define REG_G3_DIF_AMB_DIFFUSE_GREEN_MASK 0x000003e0 + +#define REG_G3_DIF_AMB_DIFFUSE_RED_SHIFT 0 +#define REG_G3_DIF_AMB_DIFFUSE_RED_SIZE 5 +#define REG_G3_DIF_AMB_DIFFUSE_RED_MASK 0x0000001f + + +// SPE_EMI + +#define REG_G3_SPE_EMI_EMISSION_BLUE_SHIFT 26 +#define REG_G3_SPE_EMI_EMISSION_BLUE_SIZE 5 +#define REG_G3_SPE_EMI_EMISSION_BLUE_MASK 0x7c000000 + +#define REG_G3_SPE_EMI_EMISSION_GREEN_SHIFT 21 +#define REG_G3_SPE_EMI_EMISSION_GREEN_SIZE 5 +#define REG_G3_SPE_EMI_EMISSION_GREEN_MASK 0x03e00000 + +#define REG_G3_SPE_EMI_EMISSION_RED_SHIFT 16 +#define REG_G3_SPE_EMI_EMISSION_RED_SIZE 5 +#define REG_G3_SPE_EMI_EMISSION_RED_MASK 0x001f0000 + +#define REG_G3_SPE_EMI_S_SHIFT 15 +#define REG_G3_SPE_EMI_S_SIZE 1 +#define REG_G3_SPE_EMI_S_MASK 0x00008000 + +#define REG_G3_SPE_EMI_SPECULAR_BLUE_SHIFT 10 +#define REG_G3_SPE_EMI_SPECULAR_BLUE_SIZE 5 +#define REG_G3_SPE_EMI_SPECULAR_BLUE_MASK 0x00007c00 + +#define REG_G3_SPE_EMI_SPECULAR_GREEN_SHIFT 5 +#define REG_G3_SPE_EMI_SPECULAR_GREEN_SIZE 5 +#define REG_G3_SPE_EMI_SPECULAR_GREEN_MASK 0x000003e0 + +#define REG_G3_SPE_EMI_SPECULAR_RED_SHIFT 0 +#define REG_G3_SPE_EMI_SPECULAR_RED_SIZE 5 +#define REG_G3_SPE_EMI_SPECULAR_RED_MASK 0x0000001f + #endif //POKEDIAMOND_ARM9_REGISTERS_H 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..ff42aef5 100644 --- a/arm9/modules/63/include/mod63_021DB450.h +++ b/arm9/modules/63/include/mod63_021DB450.h @@ -2,11 +2,12 @@ #define POKEDIAMOND_MOD63_021DB450_H #include "global.h" +#include "unk_02006D98.h" typedef struct UnkStruct63_021DB450 //intro base struct type { - struct UnkStruct63_021DB450 * field_00; //oddly requires this to be set to progress past copyright/pokemon screen. - u32 field_04[3]; //mon animations? + struct UnkStruct_02006D98 * field_00; //oddly requires this to be set to progress past copyright/pokemon screen. + struct UnkStruct_02006D98_2 * field_04[3]; //mon animations? u32 field_10; void * field_14; void * field_18; @@ -21,13 +22,7 @@ typedef struct UnkStruct63_021DB450 //intro base struct type u8 filler_34[0x30]; } UnkStruct63_021DB450; -typedef struct UnkStruct63_021DB49C -{ - u32 field_00; - u32 field_04; - u32 field_08; - u32 field_0C; -} UnkStruct63_021DB49C; + typedef struct UnkStruct63_021DBEF0 { diff --git a/arm9/modules/63/src/mod63_021DB450.c b/arm9/modules/63/src/mod63_021DB450.c index 31917596..f3608116 100644 --- a/arm9/modules/63/src/mod63_021DB450.c +++ b/arm9/modules/63/src/mod63_021DB450.c @@ -3,6 +3,7 @@ #include "constants/species.h" #include "gx.h" #include "mod63_021DB450.h" +#include "unk_02006D98.h" //todo resolve to static code extern u32 (*NNS_GfdDefaultFuncAllocTexVram)(u32 param0, u32 param1, u32 param2); @@ -12,38 +13,30 @@ extern void FUN_0201327C(u32 param0); extern void FUN_020132BC(u32 param0); extern void * FUN_02012CDC(void *, void *, void *, u32, u32, u32); -extern u32 FUN_020073A0(struct UnkStruct63_021DB450 *, struct UnkStruct63_021DB49C *, u32, u32, u32, u32, u32, u32); -extern struct UnkStruct63_021DB450 * FUN_02006D98(u32); -extern void FUN_02068C00(struct UnkStruct63_021DB49C*, u16, u32, u32, u32, u32, u32); +extern void FUN_02068C00(struct UnkStruct_02006D98_4*, u16, u32, u32, u32, u32, u32); extern void FUN_02012CC8(void); -extern void FUN_02007558(u32, u32, u32); extern void Camera_SetPerspectiveClippingPlane(u32, u32, u32); extern u32 FUN_0201343C(void); extern void FUN_02013194(void *, u32, u32, u32); extern u32 FUN_0201318C(u32, u32, u32); extern void FUN_02012DE4(void *); -extern void FUN_020072E8(struct UnkStruct63_021DB450 *); -extern void FUN_020081C4(struct UnkStruct63_021DB450 *); extern void FUN_020222AC(void); extern void NNS_G2dSetupSoftwareSpriteCamera(void); -extern u32 FUN_02006ED4(struct UnkStruct63_021DB450 *); extern void FUN_020222B4(u32, u32); extern void FUN_02013440(void *, u32); -extern void FUN_020133AC(void *, u32, const void *, u32); +extern void FUN_020133AC(void *, u32, const void *, struct UnkStruct_02006D98_2 *); extern BOOL FUN_020133C8(void *); -extern void FUN_020079E0(u32, u32, s32); extern void FUN_02013364(void); extern void FUN_02013388(void); -void * FUN_0201341C(struct UnkStruct63_021DB450 *); -int FUN_0200782C(void *, int); +struct UnkStruct_02006D98_2 * FUN_0201341C(struct UnkStruct63_021DB450 *); const s32 MOD63_021DBEC0[3] = {0x703, 0x7CE, 0x8A8}; const struct UnkStruct63_021DBEF0 MOD63_021DBEF0[3]; @@ -71,7 +64,7 @@ THUMB_FUNC u32 MOD63_021DB498(void) THUMB_FUNC void Title_SetupMonAnimationSprites(struct UnkStruct63_021DB450 * arg0) //TODO: this does a lot more than setup anim sprites { - struct UnkStruct63_021DB49C sp1C; + struct UnkStruct_02006D98_4 sp1C; int introMonArray[3] = {SPECIES_TURTWIG, SPECIES_CHIMCHAR, SPECIES_PIPLUP}; arg0->field_00 = FUN_02006D98(76); //this is needed to get into the world view, otherwise it is just black @@ -115,7 +108,7 @@ THUMB_FUNC void MOD63_021DB5A8(UnkStruct63_021DB450 *param0) } FUN_020222AC(); NNS_G2dSetupSoftwareSpriteCamera(); - (void)FUN_02006ED4(param0->field_00); + FUN_02006ED4(param0->field_00); MOD63_021DB934(); FUN_020222B4(1, 0); } @@ -193,7 +186,7 @@ THUMB_FUNC BOOL MOD63_021DB5CC(UnkStruct63_021DB450 *param0, u32 param1, s32 par THUMB_FUNC BOOL MOD63_021DB720(UnkStruct63_021DB450 *param0, u32 param1) { - u32 field = param0->field_04[param1]; + struct UnkStruct_02006D98_2 *field = param0->field_04[param1]; FUN_020079E0(field, 0x0, 0x6); FUN_020079E0(field, 0x1, -0x10); FUN_020079E0(field, 0xC, -0x80); @@ -210,7 +203,7 @@ THUMB_FUNC BOOL MOD63_021DB720(UnkStruct63_021DB450 *param0, u32 param1) THUMB_FUNC BOOL MOD63_021DB784(UnkStruct63_021DB450 *param0, u32 param1) { - u32 field = param0->field_04[param1]; + struct UnkStruct_02006D98_2 *field = param0->field_04[param1]; FUN_020079E0(field, 0x0, -0x3); FUN_020079E0(field, 0x1, -0x12); param0->field_1D++; @@ -225,7 +218,7 @@ THUMB_FUNC BOOL MOD63_021DB784(UnkStruct63_021DB450 *param0, u32 param1) THUMB_FUNC BOOL MOD63_021DB7D0(UnkStruct63_021DB450 *param0, u32 param1) { - u32 field = param0->field_04[param1]; + struct UnkStruct_02006D98_2 *field = param0->field_04[param1]; FUN_020079E0(field, 0x0, -0x10); FUN_020079E0(field, 0x1, -0x10); FUN_020079E0(field, 0xC, -0x80); @@ -242,7 +235,7 @@ THUMB_FUNC BOOL MOD63_021DB7D0(UnkStruct63_021DB450 *param0, u32 param1) THUMB_FUNC BOOL MOD63_021DB838(UnkStruct63_021DB450 *param0, u32 param1) { - u32 field = param0->field_04[param1]; + struct UnkStruct_02006D98_2 *field = param0->field_04[param1]; FUN_020079E0(field, 0, -0x6); FUN_020079E0(field, 1, -0x10); param0->field_1D++; @@ -257,7 +250,7 @@ THUMB_FUNC BOOL MOD63_021DB838(UnkStruct63_021DB450 *param0, u32 param1) THUMB_FUNC BOOL MOD63_021DB884(UnkStruct63_021DB450 *param0, u32 param1) { - u32 field = param0->field_04[param1]; + struct UnkStruct_02006D98_2 *field = param0->field_04[param1]; FUN_020079E0(field, 0, 0x8); FUN_020079E0(field, 1, -0x10); FUN_020079E0(field, 0xC, -0x80); @@ -274,7 +267,7 @@ THUMB_FUNC BOOL MOD63_021DB884(UnkStruct63_021DB450 *param0, u32 param1) THUMB_FUNC BOOL MOD63_021DB8E8(UnkStruct63_021DB450 *param0, u32 param1) { - u32 field = param0->field_04[param1]; + struct UnkStruct_02006D98_2 *field = param0->field_04[param1]; FUN_020079E0(field, 0, 0x6); FUN_020079E0(field, 1, -0x14); param0->field_1D++; @@ -295,7 +288,7 @@ THUMB_FUNC void MOD63_021DB934(void) THUMB_FUNC void MOD63_021DB940(struct UnkStruct63_021DB450 * a0) { - void * r4 = FUN_0201341C(a0); + struct UnkStruct_02006D98_2 * r4 = FUN_0201341C(a0); int sp0[3] = {0, 0, 0}; sp0[0] = (FUN_0200782C(r4, 0) - 0x80) * 0xAC; sp0[1] = (FUN_0200782C(r4, 1) - 0x60) * 0xAC; diff --git a/arm9/src/render_window.c b/arm9/src/render_window.c index 33682cc0..95edb982 100644 --- a/arm9/src/render_window.c +++ b/arm9/src/render_window.c @@ -9,6 +9,7 @@ #include "unk_020061E8.h" #include "unk_0200BB14.h" #include "unk_0200CA44.h" +#include "unk_02006D98.h" const struct UnkStruct_0200CABC_3 UNK_020ECE88 = { 10, @@ -50,8 +51,6 @@ extern void MOD05_021D971C(struct UnkStruct_0200CABC_2 *param0, u32 param4, u32 param5); extern u32 *MOD05_021D9820(struct UnkStruct_0200CABC_2 *param0, void *); -extern struct UnkStruct63_021DB450 *FUN_02006D98(u32); -extern void FUN_020072E8(struct UnkStruct63_021DB450 *param0); extern void FUN_02012400(u16, u16, u16, void *, void *); extern u32 NNS_G2dGetImageLocation(u32, u32); extern void *FUN_02012470(u16, u16, u16); @@ -898,7 +897,7 @@ THUMB_FUNC void FUN_0200DE30(struct UnkStruct_0200CABC_2 *param0, u8 param1, u8 THUMB_FUNC void FUN_0200DE80(struct UnkStruct_0200CABC_2 *param0, u16 param1, u8 param2) { - struct UnkStruct63_021DB450 *r7 = FUN_02006D98(param0->unk162); + struct UnkStruct_02006D98 *r7 = FUN_02006D98(param0->unk162); struct SomeDrawPokemonStruct stc; FUN_02068C00(&stc, param1, param2, 2, 0, 0, 0); FUN_0200DEF4(param0, &stc); @@ -907,7 +906,7 @@ THUMB_FUNC void FUN_0200DE80(struct UnkStruct_0200CABC_2 *param0, u16 param1, u8 THUMB_FUNC void FUN_0200DEC0(struct UnkStruct_0200CABC_2 *param0, struct Pokemon *param1) { - struct UnkStruct63_021DB450 *r6 = FUN_02006D98(param0->unk162); + struct UnkStruct_02006D98 *r6 = FUN_02006D98(param0->unk162); struct SomeDrawPokemonStruct st0; FUN_02068B68(&st0, param1, 2); FUN_0200DEF4(param0, &st0); diff --git a/arm9/src/unk_02006D98.c b/arm9/src/unk_02006D98.c new file mode 100644 index 00000000..ee7a8341 --- /dev/null +++ b/arm9/src/unk_02006D98.c @@ -0,0 +1,1719 @@ +#include "unk_02006D98.h" + +#include "global.h" +#include "MI_memory.h" +#include "NNS_g2d.h" +#include "filesystem.h" +#include "heap.h" +#include "mod63_021DB450.h" +#include "palette.h" +#include "poketool/pokegra/otherpoke.naix" +#include "registers.h" + +const struct UnkStruct_02006D98_3 UNK_020ECCE2[] = { + { 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 struct UnkStruct_02006D98_3 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 }, + { 0xFF, 0xFF }, +}; + +const struct UnkStruct_02006D98_3 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 struct UnkStruct_02006D98_3 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 } +}; + +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 struct UnkStruct_02006D98_3 *UNK_02105AE8[] = { + UNK_020ECCE2, + UNK_020ECC78, + UNK_020ECC10, + UNK_020ECDCC, +}; + +extern void NNS_G2dSetupSoftwareSpriteCamera(void); +extern void NNS_G3dGeFlushBuffer(); +extern void NNS_G2dDrawSpriteFast(s16 param0, + s16 param1, + int param2, + int param3, + int param4, + int param5, + int param6, + int param7, + int param8); + +THUMB_FUNC struct UnkStruct_02006D98 *FUN_02006D98(u32 heap_id) +{ + struct UnkStruct_02006D98 *ptr = AllocFromHeap(heap_id, sizeof(struct UnkStruct_02006D98)); + 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 UnkStruct_02006D98_2)); + } + + 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; +} + +THUMB_FUNC void FUN_02006ED4(struct UnkStruct_02006D98 *param0) +{ + s32 arg3; + s32 arg4; + + FUN_020082A8(param0); + FUN_020086F4(param0); + + NNS_G3dGeFlushBuffer(); + + G3_PushMtx(); + + G3_TexImageParam(param0->unk260.attr.fmt, + GX_TEXGEN_TEXCOORD, + param0->unk260.attr.sizeS, + param0->unk260.attr.sizeT, + GX_TEXREPEAT_NONE, + GX_TEXFLIP_NONE, + param0->unk260.attr.plttUse, + param0->unk29C); + + 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) + { + G3_Identity(); + } + + FUN_02007F48(¶m0->unk000[st18]); + + G3_TexPlttBase(param0->unk2A4 + st18 * 0x20, param0->unk260.attr.fmt); + G3_Translate((fx32)((param0->unk000[st18].unk24 + param0->unk000[st18].unk40) << 0xc), + (fx32)((param0->unk000[st18].unk26 + param0->unk000[st18].unk42) << 0xc), + (fx32)(param0->unk000[st18].unk28 << 0xc)); + + 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]); + + G3_Translate(-(fx32)((param0->unk000[st18].unk24 + param0->unk000[st18].unk40) << 0xc), + -(fx32)((param0->unk000[st18].unk26 + param0->unk000[st18].unk42) << 0xc), + -(fx32)(param0->unk000[st18].unk28 << 0xc)); + + G3_MaterialColorDiffAmb( + (GXRgb)(param0->unk000[st18].unk50_0 | (param0->unk000[st18].unk50_5 << 5) | + (param0->unk000[st18].unk50_a << 10)), + (GXRgb)(param0->unk000[st18].unk50_f | (param0->unk000[st18].unk50_14 << 5) | + (param0->unk000[st18].unk50_19 << 10)), + TRUE); + + G3_MaterialColorSpecEmi(0x4210, 0, FALSE); + + G3_PolygonAttr(GX_LIGHTMASK_NONE, + GX_POLYGONMODE_MODULATE, + GX_CULL_NONE, + (int)param0->unk000[st18].unk00_1, + (int)param0->unk000[st18].unk54_2, + 0); + + if (param0->unk000[st18].unk54_1 != 0) + { + int r6 = param0->unk000[st18].unk44 + UNK_020ECD4C[st18][param0->unk000[st18].unk5B][0]; + int r12 = param0->unk000[st18].unk46; + int r1 = param0->unk000[st18].unk45 + UNK_020ECD4C[st18][param0->unk000[st18].unk5B][1]; + int r7 = param0->unk000[st18].unk47; + int r0 = r12 + r6; + + NNS_G2dDrawSpriteFast((s16)(param0->unk000[st18].unk24 - 40 + + param0->unk000[st18].unk44 + param0->unk000[st18].unk2C), + (s16)(param0->unk000[st18].unk26 - 40 + param0->unk000[st18].unk45 + + param0->unk000[st18].unk2E - param0->unk000[st18].unk6C.unk2), + (int)(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( + (s16)(param0->unk000[st18].unk24 - (arg3 / 2) + param0->unk000[st18].unk2C), + (s16)(param0->unk000[st18].unk26 - (arg4 / 2) + param0->unk000[st18].unk2E - + param0->unk000[st18].unk6C.unk2), + (int)(param0->unk000[st18].unk28 + param0->unk000[st18].unk30), + arg3, + arg4, + UNK_020ECD4C[st18][param0->unk000[st18].unk5B][0], + UNK_020ECD4C[st18][param0->unk000[st18].unk5B][1], + UNK_020ECD4C[st18][param0->unk000[st18].unk5B][2], + 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) + { + G3_Identity(); + } + + G3_TexPlttBase((param0->unk2A4 + ((param0->unk000[st18].unk6C.unk0_0 + 3) << 5)), + param0->unk260.attr.fmt); + + 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 = + (s16)(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 = + (s16)(param0->unk000[st18].unk26 + param0->unk000[st18].unk2E + + param0->unk000[st18].unk6C.unka); + } + + NNS_G2dDrawSpriteFast((s16)(param0->unk000[st18].unk6C.unk4 - (arg3 / 2)), + (s16)(param0->unk000[st18].unk6C.unk6 - (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]); + } + + G3_PopMtx(1); +} + +THUMB_FUNC void FUN_020072E8(struct UnkStruct_02006D98 *param0) +{ + FreeToHeap(param0->unk2AC); + FreeToHeap(param0->unk2B0); + FreeToHeap(param0->unk2B4); + FreeToHeap(param0); +} + +THUMB_FUNC void FUN_02007314(struct UnkStruct_02006D98_2 *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 = (u8)param0->unk84[param0->unk59].unk0; + param0->unk5A = param0->unk84[param0->unk59].unk1; +} + +THUMB_FUNC void FUN_0200737C( + struct UnkStruct_02006D98_2 *param0, struct UnkStruct_02006D98_sub *param1) +{ + MI_CpuCopy8(param1, param0->unk84, sizeof(struct UnkStruct_02006D98_sub) * 10); +} + +THUMB_FUNC BOOL FUN_02007390(struct UnkStruct_02006D98_2 *param0) +{ + if (param0->unk58 != 0) + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC struct UnkStruct_02006D98_2 *FUN_020073A0(struct UnkStruct_02006D98 *param0, + struct UnkStruct_02006D98_4 *param1, + u32 param2, + u32 param3, + u32 param4, + u32 param5, + const void *param6, + void (*param7)(struct UnkStruct_02006D98_2 *, void *)) +{ + 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 struct UnkStruct_02006D98_2 *FUN_020073E8(struct UnkStruct_02006D98 *param0, + struct UnkStruct_02006D98_4 *param1, + u32 param2, + u32 param3, + u32 param4, + u32 param5, + s32 param6, + const void *param7, + void (*param8)(struct UnkStruct_02006D98_2 *, void *)) +{ + GF_ASSERT(param0->unk000[param6].unk00_0 == 0); + + MIi_CpuClearFast(0, ¶m0->unk000[param6], sizeof(struct UnkStruct_02006D98_2)); + 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 != NULL) + { + MI_CpuCopy8(param7, param0->unk000[param6].unk84, 0x14); + } + + return ¶m0->unk000[param6]; +} + +THUMB_FUNC void FUN_02007534(struct UnkStruct_02006D98_2 *param0) +{ + param0->unk00_0 = 0; +} + +THUMB_FUNC void FUN_02007540(struct UnkStruct_02006D98 *param0) +{ + for (s32 i = 0; i < 4; i++) + { + FUN_02007534(¶m0->unk000[i]); + } +} + +THUMB_FUNC void FUN_02007558(struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2) +{ + switch (param1) + { + case 0: + param0->unk24 = (s16)param2; + break; + case 1: + param0->unk26 = (s16)param2; + break; + case 2: + param0->unk28 = param2; + break; + case 3: + param0->unk2C = (s16)param2; + break; + case 4: + param0->unk2E = (s16)param2; + break; + case 5: + param0->unk30 = param2; + break; + case 6: + param0->unk54_0 = param2; + break; + case 7: + param0->unk38 = (u16)param2; + break; + case 8: + param0->unk3A = (u16)param2; + break; + case 9: + param0->unk3C = (u16)param2; + break; + case 10: + param0->unk40 = (s16)param2; + break; + case 11: + param0->unk42 = (s16)param2; + break; + case 12: + param0->unk34 = (s16)param2; + break; + case 13: + param0->unk36 = (s16)param2; + break; + case 14: + param0->unk54_1 = param2; + break; + case 15: + param0->unk44 = (u8)param2; + break; + case 16: + param0->unk45 = (u8)param2; + break; + case 17: + param0->unk46 = (u8)param2; + break; + case 18: + param0->unk47 = (u8)param2; + break; + case 19: + param0->unk6C.unk4 = (s16)param2; + break; + case 20: + param0->unk6C.unk6 = (s16)param2; + break; + case 21: + param0->unk6C.unk8 = (s16)param2; + break; + case 22: + param0->unk6C.unka = (s16)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 = (u8)param2; + param0->unk00_8 = 1; + break; + case 33: + param0->unk49 = (u8)param2; + param0->unk00_8 = 1; + break; + case 34: + param0->unk4A = (u8)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 = (u8)param2; + break; + case 40: + param0->unk54_D = param2; + param0->unk00_7 = 1; + break; + case 41: + param0->unk6C.unk2 = (s8)param2; + break; + case 42: + param0->unk6C.unk0_0 = (u16)param2; + param0->unk00_8 = 1; + break; + case 43: + param0->unk6C.unk0_2 = (u16)param2; + break; + case 44: + param0->unk6C.unk0_3 = (u16)param2; + break; + case 45: + param0->unk6C.unk0_4 = (u16)param2; + break; + case 46: + param0->unk6C.unk0_5 = (u16)param2; + break; + } +} + +THUMB_FUNC u32 FUN_0200782C(struct UnkStruct_02006D98_2 *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 UnkStruct_02006D98_2 *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 UnkStruct_02006D98_2 *param0, u32 param1, u32 param2, u32 param3, u32 param4) +{ + param0->unk54_1 = 1; + param0->unk44 = (u8)param1; + param0->unk45 = (u8)param2; + param0->unk46 = (u8)param3; + param0->unk47 = (u8)param4; +} + +THUMB_FUNC void FUN_02007E68( + struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2, u32 param3, u32 param4) +{ + param0->unk54_C = 1; + param0->unk48 = (u8)param1; + param0->unk49 = (u8)param2; + param0->unk4A = 0; + param0->unk4B = (u8)param3; + param0->unk4C = param4; +} + +THUMB_FUNC void FUN_02007E98( + struct UnkStruct_02006D98 *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 UnkStruct_02006D98_2 *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 UnkStruct_02006D98_2 *param0) +{ + return param0->unk54_C == 1; +} + +THUMB_FUNC void FUN_02007F34(struct UnkStruct_02006D98_2 *param0, s32 param1) +{ + param0->unk2E = (s16)((40 - param1) - (((40 - param1) * param0->unk36) >> 8)); +} + +static inline void inlineLoop(u8 *unk58, + u8 *unk59, + u8 *unk5A, + u8 *unk5B, + u8 *unk5C, + const struct UnkStruct_02006D98_sub *unk84) +{ + if (*unk58 == 0) + { + return; + } + + if (*unk5A == 0) + { + (*unk59)++; + + while (unk84[*unk59].unk0 < -1) + { + unk5C[*unk59]++; + + if (unk84[*unk59].unk1 == unk5C[*unk59] || unk84[*unk59].unk1 == 0) + { + unk5C[*unk59] = 0; + unk59++; + } + else + { + *unk59 = (u8)(-2 - unk84[*unk59].unk0); + } + } + + if (unk84[*unk59].unk0 == -1 || *unk59 >= 10) + { + *unk5B = 0; + *unk58 = 0; + + return; + } + + *unk5B = (u8)unk84[*unk59].unk0; + *unk5A = unk84[*unk59].unk1; + } + else + { + (*unk5A)--; + } +} + +THUMB_FUNC void FUN_02007F48(struct UnkStruct_02006D98_2 *param0) +{ + inlineLoop(¶m0->unk58, + ¶m0->unk59, + ¶m0->unk5A, + ¶m0->unk5B, + param0->unk5C, + param0->unk84); +} + +THUMB_FUNC void FUN_02008010( + struct UnkStruct_02006D98_5 *param0, struct UnkStruct_02006D98_sub *param1) +{ + param0->unk00 = 1; + param0->unk02 = 0; + param0->unk01 = (u8)param1->unk0; + param0->unk03 = param1->unk1; + param0->unk10 = param1; + + for (s32 i = 0; i < 10; i++) + { + param0->unk04[i] = 0; + } +} + +THUMB_FUNC s32 FUN_02008030(struct UnkStruct_02006D98_5 *param0) +{ + if (param0->unk00 != 0) + { + inlineLoop(¶m0->unk00, + ¶m0->unk02, + ¶m0->unk03, + ¶m0->unk01, + param0->unk04, + param0->unk10); + return param0->unk01; + } + + return -1; +} + +THUMB_FUNC void FUN_020080D0(struct UnkStruct_02006D98_2 *param0) +{ + param0->unk00_7 = 1; + param0->unk00_8 = 1; +} + +THUMB_FUNC void FUN_020080E0(struct UnkStruct_02006D98_2 *param0) +{ + param0->unk14 = param0->unk04; + param0->unk78 = param0->unk6C; +} + +THUMB_FUNC void FUN_0200813C(struct UnkStruct_02006D98_2 *param0) +{ + param0->unk04 = param0->unk14; + param0->unk6C = param0->unk78; + param0->unk00_7 = 1; + param0->unk00_8 = 1; +} + +THUMB_FUNC void FUN_020081A8(struct UnkStruct_02006D98 *param0, u32 param1, u32 param2) +{ + param0->unk29C = param1; + param0->unk2A0 = param2; +} + +THUMB_FUNC void FUN_020081B4(struct UnkStruct_02006D98 *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 UnkStruct_02006D98 *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, NNS_G2D_VRAM_TYPE_3DMAIN, ¶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, NNS_G2D_VRAM_TYPE_3DMAIN, ¶m0->unk284); + } +} + +THUMB_FUNC void FUN_0200825C(struct UnkStruct_02006D98 *param0, u8 param1) +{ + param0->unk2E3 = param1; +} + +THUMB_FUNC BOOL FUN_02008268(struct UnkStruct_02006D98_2 *param0) +{ + GF_ASSERT(param0); + return param0->unk00_0 != 0; +} + +THUMB_FUNC void FUN_02008284(struct UnkStruct_02006D98 *param0, u32 param1) +{ + param0->unk2E4 |= param1; +} + +THUMB_FUNC void FUN_02008290(struct UnkStruct_02006D98 *param0, u32 param1) +{ + param0->unk2E4 &= (param1 ^ ~0); +} + +THUMB_FUNC void FUN_020082A8(struct UnkStruct_02006D98 *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((NarcId)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] = + (u8)((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] = + (u8)((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] = + (u8)((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 UnkStruct_02006D98 *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((NarcId)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)(((u8)((param0 & 0xf0) >> 4)) | ((u8)(param0 << 4))); +} + +THUMB_FUNC void FUN_020088EC(struct UnkStruct_02006D98_2 *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) +{ + const struct UnkStruct_02006D98_3 *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 = (u8)(st10[r1].unk0 + ((param1 & 0xf) - 8)); + r4 = (u8)(st10[r1].unk1 + (((param1 & 0xf0) >> 4) - 8)); + r2 = (u32)(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 = (u8)(st10[r1].unk0 - 14 + ((param1 & 0xf) - 8) + 0x50); + r4 = (u8)(st10[r1].unk1 + (((param1 & 0xf0) >> 4) - 8)); + r2 = (u32)(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 (u16)(*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/files/battle/graphic/batt_obj/.knarcignore b/files/battle/graphic/batt_obj/.knarcignore index 9cb3ee46..50b4e110 100644 --- a/files/battle/graphic/batt_obj/.knarcignore +++ b/files/battle/graphic/batt_obj/.knarcignore @@ -408,3 +408,4 @@ narc_0173.NCGR narc_0198.NCGR *.png *.pal +*.txt
\ No newline at end of file diff --git a/files/battle/graphic/batt_obj/files.txt b/files/battle/graphic/batt_obj/files.txt new file mode 100644 index 00000000..33518d57 --- /dev/null +++ b/files/battle/graphic/batt_obj/files.txt @@ -0,0 +1,33 @@ +all recn after 203 seem to be equal (PokéBall throw animation) + +195: + 47.rlcn + 203.recn + +196: + 48.rlcn + 204.recn + +197: + 49.rlcn + 205.recn + +198: + 50.rlcn + 206.recn + +199: + 51.rlcn + 207.recn + +200: + 52.rlcn + 208.recn + +201: + 53.rlcn + 209.recn + +202: + 54.rlcn + 210.recn
\ No newline at end of file diff --git a/files/battle/graphic/batt_obj/narc_0195.png b/files/battle/graphic/batt_obj/narc_0195.png Binary files differnew file mode 100644 index 00000000..ff94198c --- /dev/null +++ b/files/battle/graphic/batt_obj/narc_0195.png diff --git a/files/battle/graphic/batt_obj/narc_0196.png b/files/battle/graphic/batt_obj/narc_0196.png Binary files differnew file mode 100644 index 00000000..a7c9478a --- /dev/null +++ b/files/battle/graphic/batt_obj/narc_0196.png diff --git a/files/battle/graphic/batt_obj/narc_0197.png b/files/battle/graphic/batt_obj/narc_0197.png Binary files differnew file mode 100644 index 00000000..9055895d --- /dev/null +++ b/files/battle/graphic/batt_obj/narc_0197.png diff --git a/files/battle/graphic/batt_obj/narc_0198.png b/files/battle/graphic/batt_obj/narc_0198.png Binary files differnew file mode 100644 index 00000000..c404ddbf --- /dev/null +++ b/files/battle/graphic/batt_obj/narc_0198.png diff --git a/files/battle/graphic/batt_obj/narc_0199.png b/files/battle/graphic/batt_obj/narc_0199.png Binary files differnew file mode 100644 index 00000000..efac1234 --- /dev/null +++ b/files/battle/graphic/batt_obj/narc_0199.png diff --git a/files/battle/graphic/batt_obj/narc_0200.png b/files/battle/graphic/batt_obj/narc_0200.png Binary files differnew file mode 100644 index 00000000..4e00e2a1 --- /dev/null +++ b/files/battle/graphic/batt_obj/narc_0200.png diff --git a/files/battle/graphic/batt_obj/narc_0201.png b/files/battle/graphic/batt_obj/narc_0201.png Binary files differnew file mode 100644 index 00000000..de6fb27f --- /dev/null +++ b/files/battle/graphic/batt_obj/narc_0201.png diff --git a/files/battle/graphic/batt_obj/narc_0202.png b/files/battle/graphic/batt_obj/narc_0202.png Binary files differnew file mode 100644 index 00000000..c947531a --- /dev/null +++ b/files/battle/graphic/batt_obj/narc_0202.png diff --git a/include/unk_02006D98.h b/include/unk_02006D98.h new file mode 100644 index 00000000..42ed8217 --- /dev/null +++ b/include/unk_02006D98.h @@ -0,0 +1,192 @@ +#ifndef POKEDIAMOND_UNK_02006D98_H +#define POKEDIAMOND_UNK_02006D98_H + +#include "global.h" +#include "NNS_g2d.h" +struct UnkStruct_02006D98_4 +{ + u16 field_00; + u16 field_02; + u16 field_04; + u16 field_06; + u32 field_08; + u32 field_0C; +}; + +struct UnkStruct_02006D98_sub +{ + s8 unk0; + u8 unk1; +}; +struct UnkStruct_02006D98_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 UnkStruct_02006D98_2 +{ + u32 unk00_0 : 1; + u32 unk00_1 : 6; + u32 unk00_7 : 1; + u32 unk00_8 : 1; + struct UnkStruct_02006D98_4 unk04; + struct UnkStruct_02006D98_4 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 UnkStruct_02006D98_2 *, void *); + struct UnkStruct_02006D98_sub2 unk6C; + struct UnkStruct_02006D98_sub2 unk78; + struct UnkStruct_02006D98_sub unk84[10]; +}; + +struct UnkStruct_02006D98 +{ + struct UnkStruct_02006D98_2 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; +}; + +struct UnkStruct_02006D98_3 +{ + u8 unk0; + u8 unk1; +}; + + +struct UnkStruct_02006D98_5 +{ + u8 unk00; + u8 unk01; + u8 unk02; + u8 unk03; + u8 unk04[10]; + struct UnkStruct_02006D98_sub *unk10; +}; + +struct UnkStruct_02006D98 *FUN_02006D98(u32 heap_id); +void FUN_02006ED4(struct UnkStruct_02006D98 *param0); +void FUN_020072E8(struct UnkStruct_02006D98 *param0); +void FUN_02007314(struct UnkStruct_02006D98_2 *param0); +void FUN_0200737C(struct UnkStruct_02006D98_2 *param0, struct UnkStruct_02006D98_sub *param1); +BOOL FUN_02007390(struct UnkStruct_02006D98_2 *param0); +struct UnkStruct_02006D98_2 *FUN_020073A0(struct UnkStruct_02006D98 *param0, + struct UnkStruct_02006D98_4 *param1, + u32 param2, + u32 param3, + u32 param4, + u32 param5, + const void *param6, + void (*param7)(struct UnkStruct_02006D98_2 *, void *)); +struct UnkStruct_02006D98_2 *FUN_020073E8(struct UnkStruct_02006D98 *param0, + struct UnkStruct_02006D98_4 *param1, + u32 param2, + u32 param3, + u32 param4, + u32 param5, + s32 param6, + const void *param7, + void (*param8)(struct UnkStruct_02006D98_2 *, void *)); +void FUN_02007534(struct UnkStruct_02006D98_2 *param0); +void FUN_02007540(struct UnkStruct_02006D98 *param0); +void FUN_02007558(struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2); +u32 FUN_0200782C(struct UnkStruct_02006D98_2 *param0, u32 param1); +void FUN_020079E0(struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2); +void FUN_02007E40( + struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2, u32 param3, u32 param4); +void FUN_02007E68( + struct UnkStruct_02006D98_2 *param0, u32 param1, u32 param2, u32 param3, u32 param4); +void FUN_02007E98( + struct UnkStruct_02006D98 *param0, u32 param1, u32 param2, u32 param3, u32 param4); +void FUN_02007EEC(struct UnkStruct_02006D98_2 *param0); +BOOL FUN_02007F20(struct UnkStruct_02006D98_2 *param0); +void FUN_02007F34(struct UnkStruct_02006D98_2 *param0, s32 param1); +void FUN_02007F48(struct UnkStruct_02006D98_2 *param0); +void FUN_02008010(struct UnkStruct_02006D98_5 *param0, struct UnkStruct_02006D98_sub *param1); +s32 FUN_02008030(struct UnkStruct_02006D98_5 *param0); +void FUN_020080D0(struct UnkStruct_02006D98_2 *param0); +void FUN_020080E0(struct UnkStruct_02006D98_2 *param0); +void FUN_0200813C(struct UnkStruct_02006D98_2 *param0); +void FUN_020081A8(struct UnkStruct_02006D98 *param0, u32 param1, u32 param2); +void FUN_020081B4(struct UnkStruct_02006D98 *param0, u32 param1, u32 param2); +u32 FUN_020081C0(u32 param0); +void FUN_020081C4(struct UnkStruct_02006D98 *param0); +void FUN_0200825C(struct UnkStruct_02006D98 *param0, u8 param1); +BOOL FUN_02008268(struct UnkStruct_02006D98_2 *param0); +void FUN_02008284(struct UnkStruct_02006D98 *param0, u32 param1); +void FUN_02008290(struct UnkStruct_02006D98 *param0, u32 param1); +void FUN_020082A8(struct UnkStruct_02006D98 *param0); +void FUN_020086F4(struct UnkStruct_02006D98 *param0); +u8 FUN_020088D8(u8 param0); +void FUN_020088EC(struct UnkStruct_02006D98_2 *param0, u8 *param1); +void FUN_02008904(u8 *param0, u32 param1, u32 param2); +u16 FUN_02008A54(u32 *param0); +void FUN_02008A74(u8 *param0); + +#endif // POKEDIAMOND_UNK_02006D98_H |