From f8bb665a920db486a3d889cf1654ffbb6455f7b1 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 26 Nov 2024 13:52:31 +0100 Subject: [PATCH] code_8069E0C decompiled --- asm/code_8069E0C.s | 907 --------------------------------------------- ld_script.txt | 1 - src/code_8069E0C.c | 298 +++++++++++++++ 3 files changed, 298 insertions(+), 908 deletions(-) delete mode 100644 asm/code_8069E0C.s diff --git a/asm/code_8069E0C.s b/asm/code_8069E0C.s deleted file mode 100644 index 0f57e2d71..000000000 --- a/asm/code_8069E0C.s +++ /dev/null @@ -1,907 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - - thumb_func_start sub_806C51C -sub_806C51C: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x50 - adds r6, r0, 0 - ldr r0, [r6, 0x70] - mov r8, r0 - ldr r0, _0806C544 - ldr r1, [r0] - ldr r2, _0806C548 - adds r0, r1, r2 - ldr r0, [r0] - cmp r0, r6 - bne _0806C54C - movs r3, 0 - str r3, [sp, 0x38] - b _0806C554 - .align 2, 0 -_0806C544: .4byte gDungeon -_0806C548: .4byte 0x000181f8 -_0806C54C: - ldr r4, _0806C5AC - adds r0, r1, r4 - ldrb r0, [r0] - str r0, [sp, 0x38] -_0806C554: - mov r0, r8 - adds r0, 0xC8 - ldrb r1, [r0] - str r0, [sp, 0x40] - cmp r1, 0x2 - bne _0806C564 - movs r7, 0x1 - str r7, [sp, 0x38] -_0806C564: - adds r0, r6, 0 - adds r0, 0x6B - adds r1, r6, 0 - adds r1, 0x6A - ldrb r2, [r0] - str r0, [sp, 0x48] - mov r9, r1 - adds r5, r6, 0 - adds r5, 0x6D - adds r0, 0x1 - str r0, [sp, 0x4C] - adds r4, r6, 0 - adds r4, 0x6F - subs r1, 0x47 - str r1, [sp, 0x44] - mov r3, r9 - ldrb r3, [r3] - cmp r2, r3 - bne _0806C676 - ldrb r0, [r5] - ldr r7, [sp, 0x4C] - ldrb r7, [r7] - cmp r0, r7 - bne _0806C654 - ldrb r0, [r4] - cmp r0, 0 - bne _0806C654 - movs r2, 0 - ldrh r1, [r6, 0x28] - movs r0, 0x80 - lsls r0, 6 - ands r0, r1 - cmp r0, 0 - beq _0806C5B0 - movs r0, 0 - b _0806C5B2 - .align 2, 0 -_0806C5AC: .4byte 0x00018210 -_0806C5B0: - lsrs r0, r1, 15 -_0806C5B2: - cmp r0, 0 - bne _0806C5B8 - movs r2, 0x1 -_0806C5B8: - adds r0, r6, 0 - adds r0, 0x23 - str r0, [sp, 0x44] - cmp r2, 0 - beq _0806C654 - adds r0, r6, 0 - bl sub_806CEBC - lsls r0, 24 - lsrs r3, r0, 24 - adds r1, r6, 0 - adds r1, 0x21 - movs r0, 0x1 - strb r0, [r1] - mov r1, r8 - adds r1, 0xFE - ldrb r0, [r1] - cmp r0, 0x63 - bne _0806C620 - ldr r1, [sp, 0x48] - ldrb r0, [r1] - cmp r0, 0xC - bhi _0806C61C - mov r0, r8 - adds r0, 0xC0 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0806C5F4 - movs r2, 0x2 - b _0806C600 -_0806C5F4: - ldr r2, [sp, 0x44] - ldrb r0, [r2] - movs r2, 0x1 - cmp r0, 0x2 - bhi _0806C600 - movs r2, 0 -_0806C600: - ldr r1, _0806C618 - movs r0, 0xD - muls r0, r2 - ldr r7, [sp, 0x48] - ldrb r7, [r7] - adds r0, r7 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x7 - bne _0806C622 - adds r0, r3, 0 - b _0806C622 - .align 2, 0 -_0806C618: .4byte gUnknown_8106EC8 -_0806C61C: - movs r0, 0x63 - b _0806C622 -_0806C620: - ldrb r0, [r1] -_0806C622: - cmp r0, 0x63 - beq _0806C654 - mov r1, r9 - strb r0, [r1] - ldrb r1, [r5] - movs r0, 0x7 - ands r0, r1 - ldr r2, [sp, 0x4C] - strb r0, [r2] - movs r0, 0x1 - strb r0, [r4] - mov r7, r9 - ldrb r0, [r7] - cmp r0, 0x6 - bne _0806C654 - adds r1, r6, 0 - adds r1, 0x6E - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x10 - bne _0806C654 - strb r3, [r7] -_0806C654: - ldr r1, [sp, 0x48] - ldrb r0, [r1] - mov r2, r9 - ldrb r2, [r2] - cmp r0, r2 - bne _0806C676 - ldrb r0, [r5] - ldr r3, [sp, 0x4C] - ldrb r3, [r3] - cmp r0, r3 - bne _0806C676 - ldrb r0, [r4] - movs r7, 0x28 - adds r7, r6 - mov r10, r7 - cmp r0, 0 - beq _0806C714 -_0806C676: - mov r1, r9 - ldrb r0, [r1] - ldr r2, [sp, 0x48] - strb r0, [r2] - ldr r3, [sp, 0x4C] - mov r10, r3 - ldrb r0, [r3] - strb r0, [r5] - movs r7, 0 - strb r7, [r4] - adds r0, r6, 0 - adds r0, 0x68 - movs r1, 0 - ldrsh r7, [r0, r1] - mov r2, r8 - movs r3, 0x4 - ldrsh r0, [r2, r3] - mov r4, r9 - ldrb r1, [r4] - bl sub_808DA44 - lsls r0, 24 - cmp r0, 0 - beq _0806C6A8 - movs r7, 0 -_0806C6A8: - ldr r0, [sp, 0x38] - cmp r0, 0 - bne _0806C6D6 - bl Rand32Bit - movs r4, 0x3 - ands r4, r0 - adds r5, r6, 0 - adds r5, 0x28 - ldr r1, [r6, 0x64] - mov r3, r9 - ldrb r2, [r3] - mov r0, r10 - ldrb r3, [r0] - str r7, [sp] - str r4, [sp, 0x4] - ldr r4, [sp, 0x38] - str r4, [sp, 0x8] - adds r0, r5, 0 - bl AxResInitFile - mov r10, r5 - b _0806C704 -_0806C6D6: - ldr r0, _0806C774 - bl GetSpriteData - adds r5, r0, 0 - bl Rand32Bit - movs r1, 0x3 - ands r1, r0 - adds r4, r6, 0 - adds r4, 0x28 - mov r0, r9 - ldrb r2, [r0] - ldr r0, [sp, 0x4C] - ldrb r3, [r0] - str r7, [sp] - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - adds r0, r4, 0 - adds r1, r5, 0 - bl AxResInitFile - mov r10, r4 -_0806C704: - mov r2, r9 - ldrb r0, [r2] - cmp r0, 0x6 - beq _0806C714 - adds r1, r6, 0 - adds r1, 0x6E - movs r0, 0 - strb r0, [r1] -_0806C714: - ldr r0, _0806C778 - ldr r1, [r0] - ldr r3, _0806C77C - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, 0 - beq _0806C784 - ldr r4, [sp, 0x48] - ldrb r0, [r4] - cmp r0, 0x7 - bne _0806C73C - mov r7, r8 - movs r1, 0x4 - ldrsh r0, [r7, r1] - bl GetMovementType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _0806C7E2 -_0806C73C: - movs r0, 0xAE - lsls r0, 1 - add r0, r8 - ldrb r0, [r0] - cmp r0, 0 - beq _0806C76A - movs r0, 0xB0 - lsls r0, 1 - add r0, r8 - ldrb r0, [r0] - cmp r0, 0 - bne _0806C7E2 - ldr r0, _0806C780 - add r0, r8 - ldrb r0, [r0] - cmp r0, 0 - beq _0806C76A - mov r0, r10 - bl RunAxAnimationFrame - mov r0, r10 - bl RunAxAnimationFrame -_0806C76A: - mov r0, r10 - bl RunAxAnimationFrame - b _0806C7E2 - .align 2, 0 -_0806C774: .4byte 0x000001a5 -_0806C778: .4byte gDungeon -_0806C77C: .4byte 0x0001356c -_0806C780: .4byte 0x0000015f -_0806C784: - mov r0, r8 - adds r0, 0xB0 - ldrb r0, [r0] - cmp r0, 0x1 - beq _0806C7E2 - cmp r0, 0x6 - beq _0806C7E2 - ldr r2, _0806C7B4 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0806C7BC - ldr r3, _0806C7B8 - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, 0 - bne _0806C7BC - mov r0, r10 - bl RunAxAnimationFrame - mov r0, r10 - bl RunAxAnimationFrame - b _0806C7DC - .align 2, 0 -_0806C7B4: .4byte 0x0000066c -_0806C7B8: .4byte 0x0001c05f -_0806C7BC: - ldr r4, [sp, 0x48] - ldrb r0, [r4] - cmp r0, 0 - beq _0806C7C8 - cmp r0, 0x7 - bne _0806C7DC -_0806C7C8: - ldr r0, [r6, 0x70] - movs r7, 0x82 - lsls r7, 1 - adds r0, r7 - ldr r0, [r0] - cmp r0, 0x1 - ble _0806C7DC - mov r0, r10 - bl RunAxAnimationFrame -_0806C7DC: - mov r0, r10 - bl RunAxAnimationFrame -_0806C7E2: - ldr r1, [r6, 0xC] - ldr r0, [r6, 0x14] - cmp r1, r0 - bne _0806C800 - ldr r1, [r6, 0x10] - ldr r0, [r6, 0x18] - cmp r1, r0 - bne _0806C800 - ldr r1, [sp, 0x44] - ldrb r0, [r1] - cmp r0, 0x9 - bhi _0806C806 - adds r0, 0x1 - strb r0, [r1] - b _0806C806 -_0806C800: - movs r0, 0 - ldr r2, [sp, 0x44] - strb r0, [r2] -_0806C806: - ldr r0, [r6, 0xC] - str r0, [r6, 0x14] - ldr r2, [r6, 0x10] - str r2, [r6, 0x18] - cmp r0, 0 - bge _0806C814 - adds r0, 0xFF -_0806C814: - asrs r1, r0, 8 - ldr r0, _0806C88C - ldr r3, [r0] - ldr r4, _0806C890 - adds r0, r3, r4 - movs r7, 0 - ldrsh r0, [r0, r7] - subs r1, r0 - str r1, [sp, 0x2C] - ldr r0, [r6, 0x1C] - subs r0, r2, r0 - movs r1, 0xBA - lsls r1, 1 - add r1, r8 - ldr r1, [r1] - subs r0, r1 - cmp r0, 0 - bge _0806C83A - adds r0, 0xFF -_0806C83A: - asrs r1, r0, 8 - ldr r4, _0806C894 - adds r0, r3, r4 - movs r7, 0 - ldrsh r3, [r0, r7] - subs r1, r3 - str r1, [sp, 0x30] - adds r0, r2, 0 - cmp r0, 0 - bge _0806C850 - adds r0, 0xFF -_0806C850: - asrs r0, 8 - subs r0, r3 - mov r9, r0 - lsrs r0, 31 - add r0, r9 - asrs r0, 1 - mov r9, r0 - movs r0, 0xAB - lsls r0, 1 - add r0, r8 - ldrb r0, [r0] - cmp r0, 0 - bne _0806C870 - movs r0, 0x1 - negs r0, r0 - add r9, r0 -_0806C870: - movs r0, 0xAE - lsls r0, 1 - add r0, r8 - ldrb r0, [r0] - cmp r0, 0 - bne _0806C898 - adds r0, r6, 0 - bl sub_8042768 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x34] - b _0806C8D8 - .align 2, 0 -_0806C88C: .4byte gDungeon -_0806C890: .4byte 0x000181f0 -_0806C894: .4byte 0x000181f2 -_0806C898: - ldr r0, _0806C8B8 - add r0, r8 - ldrb r0, [r0] - cmp r0, 0 - beq _0806C8C6 - ldr r0, _0806C8BC - ldr r0, [r0] - movs r1, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0806C8C0 - ldr r1, [sp, 0x2C] - adds r1, 0x1 - str r1, [sp, 0x2C] - b _0806C8C6 - .align 2, 0 -_0806C8B8: .4byte 0x0000015d -_0806C8BC: .4byte gUnknown_202EDCC -_0806C8C0: - ldr r2, [sp, 0x2C] - subs r2, 0x1 - str r2, [sp, 0x2C] -_0806C8C6: - movs r1, 0 - movs r0, 0xAF - lsls r0, 1 - add r0, r8 - ldrb r0, [r0] - cmp r0, 0 - bne _0806C8D6 - movs r1, 0x1 -_0806C8D6: - str r1, [sp, 0x34] -_0806C8D8: - ldr r0, [r6, 0xC] - cmp r0, 0 - bge _0806C8E0 - adds r0, 0xFF -_0806C8E0: - lsls r0, 8 - lsrs r0, 16 - ldr r1, _0806C998 - ldr r2, [sp, 0x28] - ands r2, r1 - orrs r2, r0 - str r2, [sp, 0x28] - ldr r1, [r6, 0x10] - ldr r0, [r6, 0x1C] - subs r1, r0 - movs r5, 0xBA - lsls r5, 1 - add r5, r8 - ldr r0, [r5] - subs r0, r1, r0 - cmp r0, 0 - bge _0806C904 - adds r0, 0xFF -_0806C904: - lsls r0, 8 - lsrs r0, 16 - lsls r0, 16 - ldr r1, _0806C99C - ands r2, r1 - orrs r2, r0 - str r2, [sp, 0x28] - add r0, sp, 0xC - mov r1, r10 - bl sub_8005700 - mov r4, r8 - adds r4, 0x98 - ldr r0, [r4] - add r1, sp, 0x28 - ldr r2, _0806C9A0 - ldr r2, [r2] - ldr r3, _0806C9A4 - adds r2, r3 - ldrb r3, [r2] - add r2, sp, 0xC - bl sub_800F958 - adds r0, r6, 0 - bl EntityGetStatusSprites - adds r2, r0, 0 - ldr r4, [r4] - mov r0, r8 - movs r1, 0x4 - ldrsh r7, [r0, r1] - movs r3, 0 - ldr r0, [sp, 0x34] - cmp r0, 0 - beq _0806C958 - movs r0, 0xA6 - lsls r0, 1 - add r0, r8 - ldrb r1, [r0] - negs r0, r1 - orrs r0, r1 - lsrs r3, r0, 31 -_0806C958: - adds r0, r4, 0 - adds r1, r7, 0 - bl UpdateDungeonPokemonSprite - adds r0, r6, 0 - mov r1, r9 - bl sub_8042EC8 - movs r0, 0xAE - lsls r0, 1 - add r0, r8 - ldrb r1, [r0] - cmp r1, 0 - bne _0806C9BA - mov r0, r8 - adds r0, 0xFF - ldrb r0, [r0] - cmp r0, 0x1 - bne _0806C9AC - ldr r1, [r5] - ldr r0, _0806C9A8 - cmp r1, r0 - bgt _0806C9BA - movs r2, 0x80 - lsls r2, 4 - adds r0, r1, r2 - str r0, [r5] - movs r1, 0xC8 - lsls r1, 8 - cmp r0, r1 - ble _0806C9BA - b _0806C9B8 - .align 2, 0 -_0806C998: .4byte 0xffff0000 -_0806C99C: .4byte 0x0000ffff -_0806C9A0: .4byte gDungeon -_0806C9A4: .4byte 0x00018208 -_0806C9A8: .4byte 0x0000c7ff -_0806C9AC: - ldr r0, [r5] - ldr r3, _0806CA5C - adds r0, r3 - str r0, [r5] - cmp r0, 0 - bge _0806C9BA -_0806C9B8: - str r1, [r5] -_0806C9BA: - ldr r4, [sp, 0x34] - cmp r4, 0 - bne _0806C9C2 - b _0806CBDE -_0806C9C2: - movs r4, 0 - adds r0, r6, 0 - bl sub_806CF54 - lsls r0, 24 - lsrs r7, r0, 24 - add r1, sp, 0x1C - ldr r2, _0806CA60 - strh r2, [r1] - ldr r0, _0806CA64 - strh r0, [r1, 0x2] - strh r2, [r1, 0x4] - strh r4, [r1, 0x6] - strh r4, [r1, 0x8] - ldr r0, _0806CA68 - ldr r0, [r0] - ldr r2, _0806CA6C - adds r0, r2 - ldrb r0, [r0] - lsls r0, 10 - strh r0, [r1, 0xA] - mov r3, r8 - ldrb r0, [r3, 0x6] - adds r5, r1, 0 - cmp r0, 0 - beq _0806CA08 - ldr r1, _0806CA70 - adds r0, r1, 0 - ldrh r2, [r3, 0x4] - adds r0, r2 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2 - bhi _0806CA08 - movs r4, 0x1 -_0806CA08: - mov r0, r8 - adds r0, 0xE4 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0806CA22 - ldr r0, _0806CA68 - ldr r0, [r0] - ldr r3, _0806CA74 - adds r0, r3 - ldrb r0, [r0] - cmp r0, 0 - bne _0806CA22 - movs r4, 0x1 -_0806CA22: - cmp r4, 0 - beq _0806CA32 - ldrh r1, [r5, 0x6] - movs r4, 0x80 - lsls r4, 3 - adds r0, r4, 0 - orrs r0, r1 - strh r0, [r5, 0x6] -_0806CA32: - movs r0, 0 - str r0, [sp, 0x3C] - mov r1, r8 - ldrb r0, [r1, 0x6] - cmp r0, 0 - beq _0806CA46 - ldr r2, [sp, 0x40] - ldrb r0, [r2] - cmp r0, 0x2 - bne _0806CA4A -_0806CA46: - movs r3, 0x1 - str r3, [sp, 0x3C] -_0806CA4A: - mov r0, r8 - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x4A - beq _0806CA58 - cmp r0, 0x47 - bne _0806CA78 -_0806CA58: - movs r0, 0x1 - b _0806CA7A - .align 2, 0 -_0806CA5C: .4byte 0xfffff400 -_0806CA60: .4byte 0x0000f3ff -_0806CA64: .4byte 0x0000ffff -_0806CA68: .4byte gDungeon -_0806CA6C: .4byte 0x00018208 -_0806CA70: .4byte 0xfffffe5f -_0806CA74: .4byte 0x0001820f -_0806CA78: - movs r0, 0 -_0806CA7A: - cmp r0, 0 - bne _0806CA88 - mov r0, r8 - adds r0, 0xA4 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0806CA8C -_0806CA88: - movs r4, 0x1 - str r4, [sp, 0x3C] -_0806CA8C: - mov r0, r8 - adds r0, 0xFF - ldrb r0, [r0] - cmp r0, 0x2 - beq _0806CB16 - mov r0, r8 - adds r0, 0xB0 - ldrb r1, [r0] - cmp r1, 0x6 - beq _0806CAAC - subs r0, 0x4 - ldrb r0, [r0] - cmp r0, 0x4 - beq _0806CAAC - cmp r1, 0x2 - bne _0806CABA -_0806CAAC: - ldr r0, _0806CAC4 - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - ldr r1, [sp, 0x2C] - adds r1, r0 - str r1, [sp, 0x2C] -_0806CABA: - ldr r2, [sp, 0x38] - cmp r2, 0 - beq _0806CACC - ldr r0, _0806CAC8 - b _0806CAD2 - .align 2, 0 -_0806CAC4: .4byte gUnknown_202EDCC -_0806CAC8: .4byte 0x000001a5 -_0806CACC: - mov r3, r8 - movs r4, 0x4 - ldrsh r0, [r3, r4] -_0806CAD2: - movs r1, 0 - bl GetPokemonOverworldPalette - lsls r0, 24 - lsrs r2, r0, 24 - adds r0, r6, 0 - adds r0, 0x22 - ldrb r1, [r0] - cmp r1, 0 - bne _0806CAF8 - str r2, [sp] - str r5, [sp, 0x4] - mov r0, r10 - ldr r1, [sp, 0x2C] - ldr r2, [sp, 0x30] - mov r3, r9 - bl DoAxFrame_800558C - b _0806CB16 -_0806CAF8: - cmp r1, 0x1 - bne _0806CB16 - ldr r0, _0806CBF0 - ldr r0, [r0] - ands r0, r1 - cmp r0, 0 - beq _0806CB16 - str r2, [sp] - str r5, [sp, 0x4] - mov r0, r10 - ldr r1, [sp, 0x2C] - ldr r2, [sp, 0x30] - mov r3, r9 - bl DoAxFrame_800558C -_0806CB16: - ldr r0, [r6, 0xC] - cmp r0, 0 - bge _0806CB1E - adds r0, 0xFF -_0806CB1E: - asrs r0, 8 - ldrh r1, [r6, 0x38] - adds r0, r1 - movs r1, 0xB8 - lsls r1, 1 - add r1, r8 - strh r0, [r1] - ldr r0, [r6, 0x10] - cmp r0, 0 - bge _0806CB34 - adds r0, 0xFF -_0806CB34: - asrs r0, 8 - ldrh r2, [r6, 0x3A] - adds r0, r2 - movs r3, 0xB9 - lsls r3, 1 - add r3, r8 - strh r0, [r3] - movs r4, 0 - ldrsh r2, [r1, r4] - ldr r0, _0806CBF4 - ldr r1, [r0] - ldr r4, _0806CBF8 - adds r0, r1, r4 - movs r4, 0 - ldrsh r0, [r0, r4] - subs r4, r2, r0 - movs r0, 0 - ldrsh r2, [r3, r0] - ldr r3, _0806CBFC - adds r1, r3 - movs r3, 0 - ldrsh r0, [r1, r3] - subs r5, r2, r0 - movs r0, 0x20 - negs r0, r0 - cmp r4, r0 - blt _0806CBDE - cmp r5, r0 - blt _0806CBDE - ldr r0, _0806CC00 - cmp r4, r0 - bgt _0806CBDE - cmp r5, 0xBF - bgt _0806CBDE - cmp r7, 0x6 - beq _0806CBDE - adds r0, r6, 0 - adds r0, 0x22 - ldrb r0, [r0] - cmp r0, 0 - bne _0806CBDE - ldr r0, [sp, 0x3C] - lsls r2, r0, 3 - adds r2, r0 - lsls r2, 3 - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 2 - ldr r1, _0806CC04 - adds r0, r1 - adds r3, r2, r0 - movs r0, 0xAB - lsls r0, 1 - add r0, r8 - ldrb r0, [r0] - cmp r0, 0 - beq _0806CBDE - movs r2, 0x8 - ldrsh r1, [r3, r2] - adds r1, r4, r1 - ldr r0, _0806CC08 - ands r1, r0 - ldrh r2, [r3, 0x2] - movs r0, 0xFE - lsls r0, 8 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, 0x2] - movs r4, 0xA - ldrsh r1, [r3, r4] - adds r1, r5, r1 - ldr r0, _0806CC0C - ands r1, r0 - lsls r1, 4 - ldrh r2, [r3, 0x6] - movs r0, 0xF - ands r0, r2 - orrs r0, r1 - strh r0, [r3, 0x6] - adds r0, r3, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl AddSprite -_0806CBDE: - add sp, 0x50 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806CBF0: .4byte gUnknown_202EDCC -_0806CBF4: .4byte gDungeon -_0806CBF8: .4byte 0x000181f0 -_0806CBFC: .4byte 0x000181f2 -_0806CC00: .4byte 0x0000010f -_0806CC04: .4byte gUnknown_202ED28 -_0806CC08: .4byte 0x000001ff -_0806CC0C: .4byte 0x00000fff - thumb_func_end sub_806C51C - - .align 2,0 diff --git a/ld_script.txt b/ld_script.txt index 79bfe76e5..9dcc39f80 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -241,7 +241,6 @@ SECTIONS { src/code_8069D4C.o(.text); src/targeting.o(.text); src/code_8069E0C.o(.text); - asm/code_8069E0C.o(.text); src/code_806CD90.o(.text); src/type_effectiveness.o(.text); src/code_806E8B0.o(.text); diff --git a/src/code_8069E0C.c b/src/code_8069E0C.c index ca22b2b54..67e9621bf 100644 --- a/src/code_8069E0C.c +++ b/src/code_8069E0C.c @@ -3,6 +3,8 @@ #include "code_803E668.h" #include "code_8045A00.h" #include "code_805D8C8.h" +#include "code_804267C.h" +#include "random.h" #include "constants/ability.h" #include "constants/move_id.h" #include "constants/status.h" @@ -2042,4 +2044,300 @@ s32 sub_806C4D4(s32 _species, s32 level, s32 categoryIndex) return defensiveCount; } +extern const u8 gUnknown_8106EC8[][13]; +extern s32 gUnknown_202EDCC; +extern void sub_800F958(s32 dungeonSpriteID, DungeonPos *pos, DungeonPos *statusOffsets, u32 a3); +extern void sub_8005700(DungeonPos *a0, struct axObject *a1); +u32 EntityGetStatusSprites(Entity *entity); +void UpdateDungeonPokemonSprite(int id, short species, int status, char visible); +extern void sub_8042EC8(Entity *a0, s32 a1); +void DoAxFrame_800558C(struct axObject *a0, s32 spriteX, s32 spriteY, u32 a3, u32 paletteNum, u16 *spriteMasks); + +struct unkStruct_202ED28 +{ + SpriteOAM sprite; + s16 unk8; + s16 unkA; +}; + +extern struct unkStruct_202ED28 gUnknown_202ED28[][6]; + +static inline u16 GetUnkFlag(Entity *entity) +{ + if ((entity->axObj.axdata.flags & 0x2000)) + return 0; + else + return entity->axObj.axdata.flags >> 15; +} + +void sub_806C51C(Entity *entity) +{ + s32 x, y, y2; + bool8 var_3C; + bool8 decoySprite; + s32 var_34; + DungeonPos pos1; + DungeonPos posArray[4]; + u32 statusSprites; + bool8 r4; + u8 r7; + u16 spriteMasks[6]; + s32 xSprite, ySprite; + + EntityInfo *entInfo = GetEntInfo(entity); + if (gDungeon->unk181e8.cameraTarget == entity) { + decoySprite = FALSE; + } + else { + decoySprite = gDungeon->unk181e8.hallucinating; + } + + if (entInfo->curseClassStatus.status == STATUS_DECOY) { + decoySprite = TRUE; + } + + if (entity->axObj.unk43_animId2 == entity->axObj.unk42_animId1 && entity->axObj.unk45_orientation == entity->axObj.unk44_direction1 && entity->axObj.unk47 == 0) { + bool8 r2 = FALSE; + + if (!GetUnkFlag(entity)) + r2 = TRUE; + + if (r2) { + s32 r0; + s32 r3 = sub_806CEBC(entity); + entity->fill21 = 1; + if (entInfo->unkFE == 99) { + if (entity->axObj.unk43_animId2 <= 12) { + s32 r2; + if (entInfo->bideClassStatus.status == STATUS_BIDE) { + r2 = 2; + } + else if (entity->fill23 < 3) { + r2 = 0; + } + else { + r2 = 1; + } + + r0 = gUnknown_8106EC8[r2][entity->axObj.unk43_animId2]; + if (r0 == 7) { + r0 = r3; + } + } + else { + r0 = 99; + } + } + else { + r0 = entInfo->unkFE; + } + + if (r0 != 99) { + entity->axObj.unk42_animId1 = r0; + entity->axObj.unk44_direction1 = entity->axObj.unk45_orientation & DIRECTION_MASK; + entity->axObj.unk47 = 1; + if (entity->axObj.unk42_animId1 == 6 && ++entity->axObj.unk46 == 16) { + entity->axObj.unk42_animId1 = r3; + } + } + } + } + + if (entity->axObj.unk43_animId2 != entity->axObj.unk42_animId1 || entity->axObj.unk45_orientation != entity->axObj.unk44_direction1 || entity->axObj.unk47 != 0) { + s32 r7; + + entity->axObj.unk43_animId2 = entity->axObj.unk42_animId1; + entity->axObj.unk45_orientation = entity->axObj.unk44_direction1; + entity->axObj.unk47 = 0; + r7 = entity->axObj.unk40_maybeAnimTimer; + if (sub_808DA44(entInfo->apparentID, entity->axObj.unk42_animId1)) { + r7 = 0; + } + + if (!decoySprite) { + s32 rnd = Rand32Bit() & 3; + AxResInitFile(&entity->axObj.axdata, entity->axObj.spriteFile, entity->axObj.unk42_animId1, entity->axObj.unk44_direction1, r7, rnd, FALSE); + } + else { + OpenedFile *spriteData = GetSpriteData(MONSTER_DECOY); + s32 rnd = Rand32Bit() & 3; + AxResInitFile(&entity->axObj.axdata, spriteData, entity->axObj.unk42_animId1, entity->axObj.unk44_direction1, r7, rnd, FALSE); + } + + if (entity->axObj.unk42_animId1 != 6) { + entity->axObj.unk46 = 0; + } + } + + if (gDungeon->unk1356C) { + if (entity->axObj.unk43_animId2 != 7 || GetMovementType(entInfo->apparentID) == 2) { + if (entInfo->unk15C != 0) { + if (entInfo->unk160 == 0) { + if (entInfo->unk15F != 0) { + RunAxAnimationFrame(&entity->axObj); + RunAxAnimationFrame(&entity->axObj); + RunAxAnimationFrame(&entity->axObj); + } + else { + RunAxAnimationFrame(&entity->axObj); + } + } + } + else { + RunAxAnimationFrame(&entity->axObj); + } + } + } + else { + if (entInfo->frozenClassStatus.status != STATUS_FROZEN && entInfo->frozenClassStatus.status != STATUS_PETRIFIED) { + if (gDungeon->unk644.unk28 != 0 && gDungeon->unk1BDD4.unk1C05F == 0) { + RunAxAnimationFrame(&entity->axObj); + RunAxAnimationFrame(&entity->axObj); + } + else if ((entity->axObj.unk43_animId2 == 0 || entity->axObj.unk43_animId2 == 7) && GetEntInfo(entity)->speedStage > 1) { + RunAxAnimationFrame(&entity->axObj); + } + RunAxAnimationFrame(&entity->axObj); + } + } + + if (entity->pixelPos.x == entity->prevPixelPos.x && entity->pixelPos.y == entity->prevPixelPos.y) { + if (entity->fill23 < 10) { + entity->fill23++; + } + } + else { + entity->fill23 = 0; + } + + entity->prevPixelPos.x = entity->pixelPos.x; + entity->prevPixelPos.y = entity->pixelPos.y; + + x = (entity->pixelPos.x / 256) - gDungeon->unk181e8.cameraPixelPos.x; + y = (((entity->pixelPos.y - entity->unk1C) - entInfo->unk174.raw) / 256) - gDungeon->unk181e8.cameraPixelPos.y; + y2 = (entity->pixelPos.y / 256) - gDungeon->unk181e8.cameraPixelPos.y; + y2 /= 2; + if (entInfo->unk156 == 0) { + y2--; + } + + if (entInfo->unk15C == 0) { + var_3C = sub_8042768(entity); + } + else { + if (entInfo->unk15D != 0) { + if (gUnknown_202EDCC & 4) { + x++; + } + else { + x--; + } + } + var_3C = (entInfo->unk15E == 0); + } + + pos1.x = entity->pixelPos.x / 256; + pos1.y = ((entity->pixelPos.y - entity->unk1C) - entInfo->unk174.raw) / 256; + + sub_8005700(posArray, &entity->axObj); + sub_800F958(entInfo->unk98, &pos1, posArray, gDungeon->unk181e8.unk18208); + + statusSprites = EntityGetStatusSprites(entity); + UpdateDungeonPokemonSprite(entInfo->unk98, entInfo->apparentID, statusSprites, (var_3C && entInfo->unk14C)); + + sub_8042EC8(entity, y2); + if (entInfo->unk15C == 0) { + if (entInfo->unkFF == 1) { + if (entInfo->unk174.raw <= IntToF248_2(199.999).raw) { + entInfo->unk174.raw += IntToF248_2(8).raw; + if (entInfo->unk174.raw > IntToF248_2(200).raw) { + entInfo->unk174.raw = IntToF248_2(200).raw; + } + } + } + else { + entInfo->unk174.raw -= IntToF248_2(12).raw; + if (entInfo->unk174.raw < IntToF248_2(0).raw) { + entInfo->unk174.raw = IntToF248_2(0).raw; + } + } + } + + if (!var_3C) + return; + + r4 = FALSE; + r7 = sub_806CF54(entity); + spriteMasks[0] = 0xF3FF; + spriteMasks[1] = 0xFFFF; + spriteMasks[2] = 0xF3FF; + spriteMasks[3] = 0; + spriteMasks[4] = 0; + spriteMasks[5] = gDungeon->unk181e8.unk18208 << 10; + if (entInfo->isNotTeamMember && (entInfo->apparentID == MONSTER_DEOXYS_ATTACK || entInfo->apparentID == MONSTER_DEOXYS_DEFENSE || entInfo->apparentID == MONSTER_DEOXYS_SPEED)) { + r4 = TRUE; + } + if (entInfo->invisibleClassStatus.status == STATUS_INVISIBLE && !gDungeon->unk181e8.unk1820F) { + r4 = TRUE; + } + if (r4) { + spriteMasks[3] |= 0x400; + } + + var_34 = 0; + if (!entInfo->isNotTeamMember || entInfo->curseClassStatus.status == STATUS_DECOY) { + var_34 = 1; + } + if (IsClientOrTeamBase(entInfo->joinedAt.id) || entInfo->monsterBehavior == 1) { + var_34 = 1; + } + + if (entInfo->unkFF != 2) { + s32 overworldPal; + + if (entInfo->frozenClassStatus.status == STATUS_PETRIFIED || entInfo->burnClassStatus.status == STATUS_PARALYSIS || entInfo->frozenClassStatus.status == STATUS_SHADOW_HOLD) { + x += gUnknown_202EDCC & 2; + } + + if (decoySprite) { + overworldPal = GetPokemonOverworldPalette(MONSTER_DECOY, 0); + } + else { + overworldPal = GetPokemonOverworldPalette(entInfo->apparentID, 0); + } + + if (entity->unk22 == 0) { + DoAxFrame_800558C(&entity->axObj, x, y, y2, overworldPal, spriteMasks); + } + else if (entity->unk22 == 1 && (gUnknown_202EDCC & 1)) { + DoAxFrame_800558C(&entity->axObj, x, y, y2, overworldPal, spriteMasks); + } + } + + entInfo->pixelPos.x = (entity->pixelPos.x / 256) + entity->axObj.axdata.sub1.shadow.x; + entInfo->pixelPos.y = (entity->pixelPos.y / 256) + entity->axObj.axdata.sub1.shadow.y; + + xSprite = entInfo->pixelPos.x - gDungeon->unk181e8.cameraPixelPos.x; + ySprite = entInfo->pixelPos.y - gDungeon->unk181e8.cameraPixelPos.y; + if (xSprite >= -32 && ySprite >= -32 && xSprite <= 271 && ySprite <= 191 && r7 != 6 && entity->unk22 == 0) { + struct unkStruct_202ED28 *spriteStructPtr = &gUnknown_202ED28[var_34][r7]; + if (entInfo->unk156 != 0) { + u32 finalXSprite, finalYSprite; + + finalXSprite = xSprite + spriteStructPtr->unk8; + finalXSprite &= SPRITEOAM_MASK_X; + spriteStructPtr->sprite.attrib2 &= ~SPRITEOAM_MASK_X; + spriteStructPtr->sprite.attrib2 |= finalXSprite; + + finalYSprite = ySprite + spriteStructPtr->unkA; + finalYSprite &= SPRITEOAM_MAX_UNK6_4; + finalYSprite <<= SPRITEOAM_SHIFT_UNK6_4; + spriteStructPtr->sprite.unk6 &= 0xF; + spriteStructPtr->sprite.unk6 |= finalYSprite; + + AddSprite(&spriteStructPtr->sprite, 0, NULL, NULL); + } + } +} + //