From 9773fcf278cd9e830440c993a3e79899c2f89b67 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Nov 2019 10:57:16 -0500 Subject: [PATCH 01/33] Battle Tower through nonmatching sub_80E61DC --- asm/battle_tower.s | 1489 -------------------------------------------- src/battle_tower.c | 919 +++++++++++++++++++++++++++ 2 files changed, 919 insertions(+), 1489 deletions(-) diff --git a/asm/battle_tower.s b/asm/battle_tower.s index d4bad6bd1..3d4169293 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -5,1495 +5,6 @@ .text - thumb_func_start sub_80E5970 -sub_80E5970: @ 80E5970 - push {r4,r5,lr} - movs r4, 0 - movs r5, 0 -_080E5976: - ldr r0, _080E5990 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, _080E5994 @ =0x0000055e - adds r0, r1 - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0x6 - bhi _080E59B8 - lsls r0, 2 - ldr r1, _080E5998 @ =_080E599C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080E5990: .4byte gSaveBlock2Ptr -_080E5994: .4byte 0x0000055e -_080E5998: .4byte _080E599C - .align 2, 0 -_080E599C: - .4byte _080E59B8 - .4byte _080E59D0 - .4byte _080E59F0 - .4byte _080E5A00 - .4byte _080E59E0 - .4byte _080E59E8 - .4byte _080E5A00 -_080E59B8: - lsls r0, r5, 24 - lsrs r0, 24 - bl sub_80E5A38 - cmp r4, 0 - bne _080E5A00 - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x5 - bl VarSet - b _080E5A00 -_080E59D0: - lsls r0, r5, 24 - lsrs r0, 24 - bl sub_80E5A38 - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x1 - b _080E59F6 -_080E59E0: - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x2 - b _080E59F6 -_080E59E8: - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x3 - b _080E59F6 -_080E59F0: - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x4 -_080E59F6: - bl VarSet - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_080E5A00: - adds r5, 0x1 - cmp r5, 0x1 - ble _080E5976 - ldr r0, _080E5A2C @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, _080E5A30 @ =0x0000055e - adds r0, r1 - ldrh r1, [r0] - ldr r0, _080E5A34 @ =0x00000303 - cmp r1, r0 - bne _080E5A20 - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x5 - bl VarSet -_080E5A20: - bl sub_80E7064 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E5A2C: .4byte gSaveBlock2Ptr -_080E5A30: .4byte 0x0000055e -_080E5A34: .4byte 0x00000303 - thumb_func_end sub_80E5970 - - thumb_func_start sub_80E5A38 -sub_80E5A38: @ 80E5A38 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _080E5A64 @ =gSaveBlock2Ptr - ldr r1, [r3] - ldr r2, _080E5A68 @ =0x0000055e - adds r1, r2 - adds r1, r0 - movs r2, 0 - strb r2, [r1] - ldr r2, [r3] - lsls r0, 1 - movs r3, 0xAC - lsls r3, 3 - adds r1, r2, r3 - adds r1, r0 - movs r3, 0x1 - strh r3, [r1] - ldr r1, _080E5A6C @ =0x00000564 - adds r2, r1 - adds r2, r0 - strh r3, [r2] - bx lr - .align 2, 0 -_080E5A64: .4byte gSaveBlock2Ptr -_080E5A68: .4byte 0x0000055e -_080E5A6C: .4byte 0x00000564 - thumb_func_end sub_80E5A38 - - thumb_func_start sub_80E5A70 -sub_80E5A70: @ 80E5A70 - push {r4-r7,lr} - sub sp, 0x2C - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r6, r1, 16 - add r4, sp, 0x28 - movs r0, 0 - strb r0, [r4] - bl ValidateEReaderTrainer - ldr r0, _080E5AA4 @ =gSpecialVar_Result - ldrh r0, [r0] - adds r7, r4, 0 - cmp r0, 0 - bne _080E5A9E - ldr r0, _080E5AA8 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, _080E5AAC @ =0x000004a2 - adds r0, r1 - ldrh r0, [r0] - cmp r0, r6 - beq _080E5AB0 -_080E5A9E: - movs r0, 0 - b _080E5B02 - .align 2, 0 -_080E5AA4: .4byte gSpecialVar_Result -_080E5AA8: .4byte gSaveBlock2Ptr -_080E5AAC: .4byte 0x000004a2 -_080E5AB0: - movs r6, 0x32 - cmp r5, 0 - beq _080E5AB8 - movs r6, 0x64 -_080E5AB8: - movs r4, 0 -_080E5ABA: - ldr r0, _080E5B0C @ =gSaveBlock2Ptr - ldr r1, [r0] - movs r0, 0x2C - muls r0, r4 - adds r1, r0 - movs r2, 0x9C - lsls r2, 3 - adds r0, r1, r2 - ldrb r2, [r0] - cmp r2, r6 - bne _080E5A9E - ldr r3, _080E5B10 @ =0x000004d4 - adds r0, r1, r3 - ldrh r0, [r0] - adds r3, 0x2 - adds r1, r3 - ldrh r1, [r1] - str r2, [sp] - add r2, sp, 0x10 - str r2, [sp, 0x4] - add r2, sp, 0x1C - str r2, [sp, 0x8] - str r7, [sp, 0xC] - movs r2, 0x1 - adds r3, r5, 0 - bl sub_80E6564 - adds r4, 0x1 - cmp r4, 0x2 - ble _080E5ABA - movs r1, 0 - ldrb r0, [r7] - cmp r0, 0x3 - bne _080E5B00 - movs r1, 0x1 -_080E5B00: - adds r0, r1, 0 -_080E5B02: - add sp, 0x2C - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080E5B0C: .4byte gSaveBlock2Ptr -_080E5B10: .4byte 0x000004d4 - thumb_func_end sub_80E5A70 - - thumb_func_start sub_80E5B14 -sub_80E5B14: @ 80E5B14 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - movs r0, 0 - str r0, [sp, 0x14] - ldr r4, _080E5B58 @ =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, _080E5B5C @ =0x0000055c - adds r0, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - mov r8, r0 - bl sub_80E7188 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - mov r0, r8 - mov r1, r9 - bl sub_80E5A70 - lsls r0, 24 - cmp r0, 0 - beq _080E5B64 - ldr r0, [r4] - ldr r2, _080E5B60 @ =0x0000056c - adds r0, r2 - movs r1, 0xC8 - strb r1, [r0] - b _080E5C0C - .align 2, 0 -_080E5B58: .4byte gSaveBlock2Ptr -_080E5B5C: .4byte 0x0000055c -_080E5B60: .4byte 0x0000056c -_080E5B64: - movs r6, 0 - movs r3, 0xA4 - mov r10, r3 - movs r7, 0xAA - lsls r7, 1 - mov r12, r7 - ldr r0, _080E5BE8 @ =gSaveBlock2Ptr - ldr r0, [r0] - str r0, [sp, 0x18] - mov r1, sp - str r1, [sp, 0x1C] -_080E5B7A: - mov r0, r10 - muls r0, r6 - add r0, r12 - movs r4, 0 - movs r5, 0 - movs r1, 0 - adds r2, r6, 0x1 - str r2, [sp, 0x20] - ldr r3, [sp, 0x18] - adds r2, r3, r0 -_080E5B8E: - ldm r2!, {r0} - orrs r4, r0 - adds r5, r0 - adds r1, 0x1 - cmp r1, 0x27 - bls _080E5B8E - ldr r7, _080E5BE8 @ =gSaveBlock2Ptr - ldr r2, [r7] - mov r3, r10 - muls r3, r6 - adds r1, r2, r3 - movs r7, 0xAB - lsls r7, 1 - adds r0, r1, r7 - ldrh r0, [r0] - cmp r0, r9 - bne _080E5BD8 - mov r7, r12 - adds r0, r1, r7 - ldrb r0, [r0] - cmp r0, r8 - bne _080E5BD8 - cmp r4, 0 - beq _080E5BD8 - movs r1, 0xFA - lsls r1, 1 - adds r0, r2, r1 - adds r0, r3 - ldr r0, [r0] - cmp r0, r5 - bne _080E5BD8 - ldr r2, [sp, 0x1C] - stm r2!, {r6} - str r2, [sp, 0x1C] - ldr r3, [sp, 0x14] - adds r3, 0x1 - str r3, [sp, 0x14] -_080E5BD8: - ldr r6, [sp, 0x20] - cmp r6, 0x4 - ble _080E5B7A - ldr r7, [sp, 0x14] - cmp r7, 0 - bne _080E5BEC - movs r0, 0 - b _080E5C0E - .align 2, 0 -_080E5BE8: .4byte gSaveBlock2Ptr -_080E5BEC: - bl Random - ldr r1, _080E5C20 @ =gSaveBlock2Ptr - ldr r4, [r1] - lsls r0, 16 - lsrs r0, 16 - ldr r1, [sp, 0x14] - bl __modsi3 - lsls r0, 2 - add r0, sp - ldr r0, [r0] - adds r0, 0x64 - ldr r1, _080E5C24 @ =0x0000056c - adds r4, r1 - strb r0, [r4] -_080E5C0C: - movs r0, 0x1 -_080E5C0E: - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080E5C20: .4byte gSaveBlock2Ptr -_080E5C24: .4byte 0x0000056c - thumb_func_end sub_80E5B14 - - thumb_func_start ChooseNextBattleTowerTrainer -ChooseNextBattleTowerTrainer: @ 80E5C28 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r5, _080E5C6C @ =gSaveBlock2Ptr - ldr r0, [r5] - ldr r1, _080E5C70 @ =0x0000055c - adds r0, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r6, r0, 31 - bl sub_80E5B14 - lsls r0, 24 - cmp r0, 0 - beq _080E5C7C - ldr r0, [r5] - ldr r4, _080E5C74 @ =0x0000056c - adds r0, r4 - ldrb r0, [r0] - bl sub_80E5E5C - ldr r1, [r5] - lsls r2, r6, 1 - movs r3, 0xAC - lsls r3, 3 - adds r0, r1, r3 - adds r0, r2 - ldrh r0, [r0] - adds r0, r1, r0 - ldr r2, _080E5C78 @ =0x00000571 - adds r0, r2 - adds r1, r4 - b _080E5E3E - .align 2, 0 -_080E5C6C: .4byte gSaveBlock2Ptr -_080E5C70: .4byte 0x0000055c -_080E5C74: .4byte 0x0000056c -_080E5C78: .4byte 0x00000571 -_080E5C7C: - ldr r2, [r5] - lsls r0, r6, 1 - ldr r3, _080E5D1C @ =0x00000564 - adds r1, r2, r3 - adds r1, r0 - ldrh r1, [r1] - adds r6, r0, 0 - cmp r1, 0x7 - bls _080E5C90 - b _080E5DB8 -_080E5C90: - movs r1, 0xAC - lsls r1, 3 - adds r0, r2, r1 - adds r0, r6 - ldrh r0, [r0] - cmp r0, 0x7 - bne _080E5D2C - adds r7, r6, 0 - mov r8, r5 -_080E5CA2: - bl Random - movs r1, 0xFF - ands r1, r0 - lsls r2, r1, 2 - adds r2, r1 - mov r3, r8 - ldr r4, [r3] - ldr r1, _080E5D1C @ =0x00000564 - adds r0, r4, r1 - adds r0, r7 - ldrh r1, [r0] - subs r1, 0x1 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - adds r0, 0x14 - lsrs r2, 7 - adds r2, r0 - lsls r2, 16 - lsrs r5, r2, 16 - movs r3, 0 - movs r0, 0xAC - lsls r0, 3 - adds r2, r4, r0 - adds r0, r2, r7 - ldrh r0, [r0] - subs r0, 0x1 - cmp r3, r0 - bge _080E5CFC - ldr r0, _080E5D20 @ =0x00000572 - adds r1, r4, r0 - ldrb r0, [r1] - cmp r0, r5 - beq _080E5CFC - adds r0, r2, r6 - ldrh r0, [r0] - subs r4, r0, 0x1 -_080E5CEE: - adds r3, 0x1 - cmp r3, r4 - bge _080E5CFC - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, r5 - bne _080E5CEE -_080E5CFC: - mov r1, r8 - ldr r0, [r1] - movs r2, 0xAC - lsls r2, 3 - adds r0, r2 - adds r0, r6 - ldrh r0, [r0] - subs r0, 0x1 - ldr r4, _080E5D24 @ =gSaveBlock2Ptr - cmp r3, r0 - bne _080E5CA2 - ldr r0, [r4] - ldr r3, _080E5D28 @ =0x0000056c - adds r0, r3 - b _080E5E16 - .align 2, 0 -_080E5D1C: .4byte 0x00000564 -_080E5D20: .4byte 0x00000572 -_080E5D24: .4byte gSaveBlock2Ptr -_080E5D28: .4byte 0x0000056c -_080E5D2C: - adds r7, r6, 0 - mov r8, r5 -_080E5D30: - bl Random - movs r1, 0xFF - ands r1, r0 - lsls r0, r1, 2 - adds r0, r1 - lsrs r5, r0, 6 - mov r0, r8 - ldr r4, [r0] - ldr r1, _080E5DA8 @ =0x00000564 - adds r0, r4, r1 - adds r0, r7 - ldrh r1, [r0] - subs r1, 0x1 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - adds r0, r5, r0 - lsls r0, 16 - lsrs r5, r0, 16 - movs r3, 0 - movs r0, 0xAC - lsls r0, 3 - adds r2, r4, r0 - adds r0, r2, r7 - ldrh r0, [r0] - subs r0, 0x1 - cmp r3, r0 - bge _080E5D88 - ldr r0, _080E5DAC @ =0x00000572 - adds r1, r4, r0 - ldrb r0, [r1] - cmp r0, r5 - beq _080E5D88 - adds r0, r2, r6 - ldrh r0, [r0] - subs r4, r0, 0x1 -_080E5D7A: - adds r3, 0x1 - cmp r3, r4 - bge _080E5D88 - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, r5 - bne _080E5D7A -_080E5D88: - mov r1, r8 - ldr r0, [r1] - movs r2, 0xAC - lsls r2, 3 - adds r0, r2 - adds r0, r6 - ldrh r0, [r0] - subs r0, 0x1 - ldr r4, _080E5DB0 @ =gSaveBlock2Ptr - cmp r3, r0 - bne _080E5D30 - ldr r0, [r4] - ldr r3, _080E5DB4 @ =0x0000056c - adds r0, r3 - b _080E5E16 - .align 2, 0 -_080E5DA8: .4byte 0x00000564 -_080E5DAC: .4byte 0x00000572 -_080E5DB0: .4byte gSaveBlock2Ptr -_080E5DB4: .4byte 0x0000056c -_080E5DB8: - adds r7, r5, 0 -_080E5DBA: - bl Random - movs r1, 0xFF - ands r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 1 - asrs r0, 8 - adds r0, 0x46 - lsls r0, 16 - lsrs r5, r0, 16 - movs r3, 0 - ldr r1, [r7] - movs r2, 0xAC - lsls r2, 3 - adds r0, r1, r2 - adds r0, r6 - ldrh r0, [r0] - subs r4, r0, 0x1 - cmp r3, r4 - bge _080E5DFC - ldr r0, _080E5E4C @ =0x00000572 - adds r1, r0 - ldrb r0, [r1] - cmp r0, r5 - beq _080E5DFC -_080E5DEE: - adds r3, 0x1 - cmp r3, r4 - bge _080E5DFC - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, r5 - bne _080E5DEE -_080E5DFC: - ldr r0, [r7] - movs r1, 0xAC - lsls r1, 3 - adds r0, r1 - adds r0, r6 - ldrh r0, [r0] - subs r0, 0x1 - ldr r4, _080E5E50 @ =gSaveBlock2Ptr - cmp r3, r0 - bne _080E5DBA - ldr r0, [r4] - ldr r2, _080E5E54 @ =0x0000056c - adds r0, r2 -_080E5E16: - strb r5, [r0] - ldr r0, [r4] - ldr r3, _080E5E54 @ =0x0000056c - adds r0, r3 - ldrb r0, [r0] - bl sub_80E5E5C - ldr r1, [r4] - movs r2, 0xAC - lsls r2, 3 - adds r0, r1, r2 - adds r2, r0, r6 - ldrh r0, [r2] - cmp r0, 0x6 - bhi _080E5E42 - adds r0, r1, r0 - ldr r3, _080E5E58 @ =0x00000571 - adds r0, r3 - ldr r2, _080E5E54 @ =0x0000056c - adds r1, r2 -_080E5E3E: - ldrb r1, [r1] - strb r1, [r0] -_080E5E42: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E5E4C: .4byte 0x00000572 -_080E5E50: .4byte gSaveBlock2Ptr -_080E5E54: .4byte 0x0000056c -_080E5E58: .4byte 0x00000571 - thumb_func_end ChooseNextBattleTowerTrainer - - thumb_func_start sub_80E5E5C -sub_80E5E5C: @ 80E5E5C - push {lr} - ldr r0, _080E5E6C @ =0x00004010 - movs r1, 0x12 - bl VarSet - pop {r0} - bx r0 - .align 2, 0 -_080E5E6C: .4byte 0x00004010 - thumb_func_end sub_80E5E5C - - thumb_func_start SetEReaderTrainerGfxId -SetEReaderTrainerGfxId: @ 80E5E70 - push {lr} - movs r0, 0xC8 - bl sub_80E5E5C - pop {r0} - bx r0 - thumb_func_end SetEReaderTrainerGfxId - - thumb_func_start sub_80E5E7C -sub_80E5E7C: @ 80E5E7C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - movs r1, 0 - mov r8, r1 - mov r10, r0 - movs r5, 0 - ldr r2, _080E5F08 @ =gSaveBlock2Ptr - ldr r0, [r2] - mov r4, r10 - ldrb r4, [r4, 0xC] - str r4, [sp, 0x18] - mov r9, r5 - movs r7, 0x4 - str r7, [sp, 0x1C] - movs r1, 0xB0 - lsls r1, 1 - adds r1, r0 - mov r12, r1 -_080E5EA8: - movs r6, 0 - movs r3, 0 - mov r2, r12 - ldrb r0, [r2] - ldr r4, [sp, 0x18] - cmp r0, r4 - bne _080E5EDA - mov r4, r9 - mov r2, r10 - adds r2, 0xC -_080E5EBC: - adds r3, 0x1 - cmp r3, 0x3 - bgt _080E5EDA - ldr r7, _080E5F08 @ =gSaveBlock2Ptr - ldr r0, [r7] - adds r1, r3, r4 - movs r7, 0xB0 - lsls r7, 1 - adds r0, r7 - adds r0, r1 - adds r1, r2, r3 - ldrb r0, [r0] - ldrb r1, [r1] - cmp r0, r1 - beq _080E5EBC -_080E5EDA: - cmp r3, 0x4 - bne _080E5F20 - movs r6, 0 - ldr r1, _080E5F08 @ =gSaveBlock2Ptr - ldr r0, [r1] - movs r3, 0xAC - lsls r3, 1 - adds r0, r3 - ldr r2, [sp, 0x1C] - adds r0, r2 - ldrb r0, [r0] - mov r4, r10 - ldrb r4, [r4, 0x8] - cmp r0, r4 - bne _080E5F20 - adds r1, r0, 0 - mov r2, r9 - adds r2, 0x4 -_080E5EFE: - cmp r1, 0xFF - bne _080E5F0C - movs r6, 0x7 - b _080E5F20 - .align 2, 0 -_080E5F08: .4byte gSaveBlock2Ptr -_080E5F0C: - adds r6, 0x1 - cmp r6, 0x6 - bgt _080E5F20 - ldr r7, _080E5F4C @ =gSaveBlock2Ptr - ldr r0, [r7] - adds r0, r3 - adds r0, r2 - ldrb r0, [r0] - cmp r0, r1 - beq _080E5EFE -_080E5F20: - cmp r6, 0x7 - beq _080E5F36 - movs r0, 0xA4 - add r9, r0 - ldr r1, [sp, 0x1C] - adds r1, 0xA4 - str r1, [sp, 0x1C] - add r12, r0 - adds r5, 0x1 - cmp r5, 0x4 - ble _080E5EA8 -_080E5F36: - cmp r5, 0x4 - bgt _080E5F50 - ldr r2, _080E5F4C @ =gSaveBlock2Ptr - ldr r0, [r2] - movs r1, 0xA4 - muls r1, r5 - adds r0, r1 - movs r4, 0xAA - lsls r4, 1 - adds r0, r4 - b _080E5F90 - .align 2, 0 -_080E5F4C: .4byte gSaveBlock2Ptr -_080E5F50: - movs r5, 0 - ldr r7, _080E5F9C @ =gSaveBlock2Ptr - ldr r0, [r7] - movs r1, 0xAB - lsls r1, 1 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0 - beq _080E5F7C - adds r3, r7, 0 - adds r2, r1, 0 - movs r1, 0 -_080E5F68: - adds r1, 0xA4 - adds r5, 0x1 - cmp r5, 0x4 - bgt _080E5FA0 - ldr r0, [r3] - adds r0, r1 - adds r0, r2 - ldrh r0, [r0] - cmp r0, 0 - bne _080E5F68 -_080E5F7C: - cmp r5, 0x4 - bgt _080E5FA0 - ldr r1, _080E5F9C @ =gSaveBlock2Ptr - ldr r0, [r1] - movs r1, 0xA4 - muls r1, r5 - adds r0, r1 - movs r2, 0xAA - lsls r2, 1 - adds r0, r2 -_080E5F90: - mov r1, r10 - movs r2, 0xA4 - bl memcpy - b _080E6062 - .align 2, 0 -_080E5F9C: .4byte gSaveBlock2Ptr -_080E5FA0: - mov r2, sp - ldr r4, _080E5FF8 @ =gSaveBlock2Ptr - ldr r0, [r4] - movs r3, 0xAB - lsls r3, 1 - adds r0, r3 - ldrh r0, [r0] - movs r1, 0 - strh r0, [r2] - add r0, sp, 0xC - strh r1, [r0] - movs r7, 0x1 - add r8, r7 - movs r5, 0x1 - add r0, sp, 0xC - mov r9, r0 - mov r12, r3 -_080E5FC2: - movs r3, 0 - adds r7, r5, 0x1 - cmp r3, r8 - bge _080E6006 - ldr r1, _080E5FF8 @ =gSaveBlock2Ptr - ldr r0, [r1] - movs r2, 0xA4 - adds r1, r5, 0 - muls r1, r2 - adds r0, r1 - mov r1, r12 - adds r4, r0, r1 - mov r6, sp -_080E5FDC: - lsls r0, r3, 1 - add r0, sp - ldrh r2, [r4] - adds r1, r2, 0 - ldrh r0, [r0] - cmp r1, r0 - bcs _080E5FFC - movs r3, 0 - movs r4, 0x1 - mov r8, r4 - strh r2, [r6] - mov r0, r9 - strh r5, [r0] - b _080E6006 - .align 2, 0 -_080E5FF8: .4byte gSaveBlock2Ptr -_080E5FFC: - cmp r1, r0 - bhi _080E6006 - adds r3, 0x1 - cmp r3, r8 - blt _080E5FDC -_080E6006: - cmp r3, r8 - bne _080E602C - mov r1, r8 - lsls r2, r1, 1 - mov r4, sp - adds r3, r4, r2 - ldr r1, _080E6074 @ =gSaveBlock2Ptr - ldr r0, [r1] - movs r4, 0xA4 - adds r1, r5, 0 - muls r1, r4 - adds r0, r1 - add r0, r12 - ldrh r0, [r0] - strh r0, [r3] - add r2, r9 - strh r5, [r2] - movs r0, 0x1 - add r8, r0 -_080E602C: - adds r5, r7, 0 - cmp r5, 0x4 - ble _080E5FC2 - bl Random - lsls r0, 16 - lsrs r0, 16 - mov r1, r8 - bl __modsi3 - adds r5, r0, 0 - ldr r0, _080E6074 @ =gSaveBlock2Ptr - ldr r0, [r0] - lsls r1, r5, 1 - add r1, sp - adds r1, 0xC - ldrh r2, [r1] - movs r1, 0xA4 - muls r1, r2 - adds r0, r1 - movs r1, 0xAA - lsls r1, 1 - adds r0, r1 - mov r1, r10 - movs r2, 0xA4 - bl memcpy -_080E6062: - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E6074: .4byte gSaveBlock2Ptr - thumb_func_end sub_80E5E7C - - thumb_func_start GetBattleTowerTrainerFrontSpriteId -GetBattleTowerTrainerFrontSpriteId: @ 80E6078 - push {lr} - ldr r0, _080E6094 @ =gSaveBlock2Ptr - ldr r3, [r0] - ldr r0, _080E6098 @ =0x0000056c - adds r1, r3, r0 - ldrb r0, [r1] - cmp r0, 0xC8 - bne _080E60A4 - ldr r1, _080E609C @ =gFacilityClassToPicIndex - ldr r2, _080E60A0 @ =0x000004a1 - adds r0, r3, r2 - ldrb r0, [r0] - adds r0, r1 - b _080E60D6 - .align 2, 0 -_080E6094: .4byte gSaveBlock2Ptr -_080E6098: .4byte 0x0000056c -_080E609C: .4byte gFacilityClassToPicIndex -_080E60A0: .4byte 0x000004a1 -_080E60A4: - cmp r0, 0x63 - bls _080E60C4 - ldr r2, _080E60C0 @ =gFacilityClassToPicIndex - ldrb r0, [r1] - subs r0, 0x64 - movs r1, 0xA4 - muls r0, r1 - adds r0, r3, r0 - adds r1, 0xB1 - adds r0, r1 - ldrb r0, [r0] - adds r0, r2 - b _080E60D6 - .align 2, 0 -_080E60C0: .4byte gFacilityClassToPicIndex -_080E60C4: - ldr r3, _080E60DC @ =gFacilityClassToPicIndex - ldr r2, _080E60E0 @ =gBattleTowerTrainers - ldrb r1, [r1] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - adds r0, r3 -_080E60D6: - ldrb r0, [r0] - pop {r1} - bx r1 - .align 2, 0 -_080E60DC: .4byte gFacilityClassToPicIndex -_080E60E0: .4byte gBattleTowerTrainers - thumb_func_end GetBattleTowerTrainerFrontSpriteId - - thumb_func_start sub_80E60E4 -sub_80E60E4: @ 80E60E4 - push {lr} - ldr r0, _080E6100 @ =gSaveBlock2Ptr - ldr r3, [r0] - ldr r0, _080E6104 @ =0x0000056c - adds r1, r3, r0 - ldrb r0, [r1] - cmp r0, 0xC8 - bne _080E6110 - ldr r1, _080E6108 @ =gFacilityClassToTrainerClass - ldr r2, _080E610C @ =0x000004a1 - adds r0, r3, r2 - ldrb r0, [r0] - adds r0, r1 - b _080E6144 - .align 2, 0 -_080E6100: .4byte gSaveBlock2Ptr -_080E6104: .4byte 0x0000056c -_080E6108: .4byte gFacilityClassToTrainerClass -_080E610C: .4byte 0x000004a1 -_080E6110: - cmp r0, 0x63 - bhi _080E6130 - ldr r3, _080E6128 @ =gFacilityClassToTrainerClass - ldr r2, _080E612C @ =gBattleTowerTrainers - ldrb r1, [r1] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - adds r0, r3 - b _080E6144 - .align 2, 0 -_080E6128: .4byte gFacilityClassToTrainerClass -_080E612C: .4byte gBattleTowerTrainers -_080E6130: - ldr r2, _080E614C @ =gFacilityClassToTrainerClass - ldrb r0, [r1] - subs r0, 0x64 - movs r1, 0xA4 - muls r0, r1 - adds r0, r3, r0 - adds r1, 0xB1 - adds r0, r1 - ldrb r0, [r0] - adds r0, r2 -_080E6144: - ldrb r0, [r0] - pop {r1} - bx r1 - .align 2, 0 -_080E614C: .4byte gFacilityClassToTrainerClass - thumb_func_end sub_80E60E4 - - thumb_func_start sub_80E6150 -sub_80E6150: @ 80E6150 - push {r4-r6,lr} - adds r4, r0, 0 - ldr r0, _080E6178 @ =gSaveBlock2Ptr - ldr r1, [r0] - ldr r2, _080E617C @ =0x0000056c - adds r0, r1, r2 - ldrb r2, [r0] - cmp r2, 0xC8 - bne _080E6184 - movs r3, 0 - ldr r0, _080E6180 @ =0x000004a4 - adds r2, r1, r0 -_080E6168: - adds r0, r4, r3 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r3, 0x1 - cmp r3, 0x6 - ble _080E6168 - b _080E61CE - .align 2, 0 -_080E6178: .4byte gSaveBlock2Ptr -_080E617C: .4byte 0x0000056c -_080E6180: .4byte 0x000004a4 -_080E6184: - cmp r2, 0x63 - bhi _080E61AC - movs r3, 0 - adds r5, r0, 0 - ldr r6, _080E61A8 @ =gBattleTowerTrainers + 1 -_080E618E: - adds r2, r4, r3 - ldrb r1, [r5] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r3, r0 - adds r0, r6 - ldrb r0, [r0] - strb r0, [r2] - adds r3, 0x1 - cmp r3, 0x2 - ble _080E618E - b _080E61CE - .align 2, 0 -_080E61A8: .4byte gBattleTowerTrainers + 1 -_080E61AC: - movs r3, 0 - adds r5, r0, 0 - movs r0, 0xAC - lsls r0, 1 - adds r2, r1, r0 - movs r6, 0xA4 -_080E61B8: - adds r1, r4, r3 - ldrb r0, [r5] - subs r0, 0x64 - muls r0, r6 - adds r0, r3, r0 - adds r0, r2, r0 - ldrb r0, [r0] - strb r0, [r1] - adds r3, 0x1 - cmp r3, 0x6 - ble _080E61B8 -_080E61CE: - adds r1, r4, r3 - movs r0, 0xFF - strb r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80E6150 - - thumb_func_start sub_80E61DC -sub_80E61DC: @ 80E61DC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - movs r0, 0 - str r0, [sp, 0x18] - movs r1, 0x3C - str r1, [sp, 0x1C] - add r4, sp, 0xC - movs r0, 0xFF - strb r0, [r4] - bl ZeroEnemyPartyMons - ldr r1, _080E6210 @ =gSaveBlock2Ptr - ldr r0, [r1] - ldr r2, _080E6214 @ =0x0000056c - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0x13 - bhi _080E6218 - movs r3, 0x6 - str r3, [sp, 0x14] - b _080E62F4 - .align 2, 0 -_080E6210: .4byte gSaveBlock2Ptr -_080E6214: .4byte 0x0000056c -_080E6218: - cmp r0, 0x1D - bhi _080E6226 - movs r0, 0x9 - str r0, [sp, 0x14] - movs r1, 0x1E - str r1, [sp, 0x18] - b _080E62F4 -_080E6226: - cmp r0, 0x27 - bhi _080E6234 - movs r2, 0xC - str r2, [sp, 0x14] - movs r3, 0x3C - str r3, [sp, 0x18] - b _080E62F4 -_080E6234: - cmp r0, 0x31 - bhi _080E6242 - movs r0, 0xF - str r0, [sp, 0x14] - movs r1, 0x5A - str r1, [sp, 0x18] - b _080E62F4 -_080E6242: - cmp r0, 0x3B - bhi _080E6250 - movs r2, 0x12 - str r2, [sp, 0x14] - movs r3, 0x78 - str r3, [sp, 0x18] - b _080E62F4 -_080E6250: - cmp r0, 0x45 - bhi _080E625E - movs r0, 0x15 - str r0, [sp, 0x14] - movs r1, 0x96 - str r1, [sp, 0x18] - b _080E62F4 -_080E625E: - cmp r0, 0x4F - bhi _080E626C - movs r2, 0x1F - str r2, [sp, 0x14] - movs r3, 0xB4 - str r3, [sp, 0x18] - b _080E62F4 -_080E626C: - cmp r0, 0x63 - bhi _080E627E - movs r0, 0x1F - str r0, [sp, 0x14] - movs r1, 0xC8 - str r1, [sp, 0x18] - movs r2, 0x64 - str r2, [sp, 0x1C] - b _080E62F4 -_080E627E: - cmp r0, 0xC8 - bne _080E62B0 - movs r6, 0 - adds r4, r1, 0 -_080E6286: - movs r0, 0x64 - muls r0, r6 - ldr r1, _080E62A8 @ =gEnemyParty - adds r0, r1 - movs r1, 0x2C - adds r2, r6, 0 - muls r2, r1 - ldr r3, _080E62AC @ =0x000004d4 - adds r2, r3 - ldr r1, [r4] - adds r1, r2 - bl CreateBattleTowerMon - adds r6, 0x1 - cmp r6, 0x2 - ble _080E6286 - b _080E64A6 - .align 2, 0 -_080E62A8: .4byte gEnemyParty -_080E62AC: .4byte 0x000004d4 -_080E62B0: - movs r6, 0 -_080E62B2: - movs r0, 0x64 - muls r0, r6 - ldr r1, _080E62E4 @ =gEnemyParty - adds r0, r1 - ldr r1, _080E62E8 @ =gSaveBlock2Ptr - ldr r1, [r1] - ldr r3, _080E62EC @ =0x0000056c - adds r2, r1, r3 - ldrb r3, [r2] - movs r2, 0xA4 - muls r2, r3 - ldr r3, _080E62F0 @ =0xffffc144 - adds r2, r3 - adds r1, r2 - movs r2, 0x2C - muls r2, r6 - adds r2, 0x1C - adds r1, r2 - bl CreateBattleTowerMon - adds r6, 0x1 - cmp r6, 0x2 - ble _080E62B2 - b _080E64A6 - .align 2, 0 -_080E62E4: .4byte gEnemyParty -_080E62E8: .4byte gSaveBlock2Ptr -_080E62EC: .4byte 0x0000056c -_080E62F0: .4byte 0xffffc144 -_080E62F4: - ldr r2, _080E6314 @ =gSaveBlock2Ptr - ldr r0, [r2] - ldr r1, _080E6318 @ =0x0000055c - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - adds r1, r2, 0 - cmp r0, 0 - beq _080E6320 - ldr r2, _080E631C @ =gBattleTowerLevel100Mons - mov r10, r2 - movs r3, 0x64 - str r3, [sp, 0x10] - b _080E6328 - .align 2, 0 -_080E6314: .4byte gSaveBlock2Ptr -_080E6318: .4byte 0x0000055c -_080E631C: .4byte gBattleTowerLevel100Mons -_080E6320: - ldr r0, _080E6378 @ =gBattleTowerLevel50Mons - mov r10, r0 - movs r2, 0x32 - str r2, [sp, 0x10] -_080E6328: - ldr r2, _080E637C @ =gBattleTowerTrainers - ldr r0, [r1] - ldr r3, _080E6380 @ =0x0000056c - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x4] - str r0, [sp, 0x20] - movs r6, 0 -_080E6340: - bl Random - movs r1, 0xFF - ands r1, r0 - ldr r2, [sp, 0x1C] - adds r0, r1, 0 - muls r0, r2 - asrs r0, 8 - ldr r3, [sp, 0x18] - adds r7, r0, r3 - ldr r0, [sp, 0x20] - cmp r0, 0 - beq _080E636A - lsls r0, r7, 4 - add r0, r10 - ldrb r0, [r0, 0x3] - ldr r1, [sp, 0x20] - ands r0, r1 - cmp r0, r1 - beq _080E636A - b _080E64A0 -_080E636A: - movs r5, 0 - lsls r0, r7, 4 - mov r2, r10 - adds r3, r0, r2 - movs r4, 0 - b _080E6388 - .align 2, 0 -_080E6378: .4byte gBattleTowerLevel50Mons -_080E637C: .4byte gBattleTowerTrainers -_080E6380: .4byte 0x0000056c -_080E6384: - adds r4, 0x64 - adds r5, 0x1 -_080E6388: - cmp r5, r6 - bge _080E63A2 - ldr r1, _080E64B8 @ =gEnemyParty - adds r0, r4, r1 - movs r1, 0xB - movs r2, 0 - str r3, [sp, 0x24] - bl GetMonData - ldr r3, [sp, 0x24] - ldrh r2, [r3] - cmp r0, r2 - bne _080E6384 -_080E63A2: - cmp r5, r6 - bne _080E64A0 - movs r5, 0 - cmp r5, r6 - bge _080E63F0 - ldr r3, _080E64BC @ =sBattleTowerHeldItems - mov r9, r3 - lsls r0, r7, 4 - add r0, r10 - mov r8, r0 - movs r3, 0 -_080E63B8: - ldr r0, _080E64B8 @ =gEnemyParty - adds r4, r3, r0 - adds r0, r4, 0 - movs r1, 0xC - movs r2, 0 - str r3, [sp, 0x24] - bl GetMonData - ldr r3, [sp, 0x24] - cmp r0, 0 - beq _080E63E8 - adds r0, r4, 0 - movs r1, 0xC - movs r2, 0 - bl GetMonData - mov r2, r8 - ldrb r1, [r2, 0x2] - lsls r1, 1 - add r1, r9 - ldr r3, [sp, 0x24] - ldrh r1, [r1] - cmp r0, r1 - beq _080E63F0 -_080E63E8: - adds r3, 0x64 - adds r5, 0x1 - cmp r5, r6 - blt _080E63B8 -_080E63F0: - cmp r5, r6 - bne _080E64A0 - movs r5, 0 - cmp r5, r6 - bge _080E6412 - add r0, sp, 0x4 - ldrh r0, [r0] - cmp r0, r7 - beq _080E6412 - add r1, sp, 0x4 -_080E6404: - adds r1, 0x2 - adds r5, 0x1 - cmp r5, r6 - bge _080E6412 - ldrh r0, [r1] - cmp r0, r7 - bne _080E6404 -_080E6412: - cmp r5, r6 - bne _080E64A0 - lsls r0, r6, 1 - add r0, sp - adds r0, 0x4 - strh r7, [r0] - movs r3, 0x64 - adds r0, r6, 0 - muls r0, r3 - ldr r1, _080E64B8 @ =gEnemyParty - adds r0, r1 - lsls r4, r7, 4 - mov r3, r10 - adds r2, r4, r3 - ldrh r1, [r2] - ldrb r2, [r2, 0xC] - str r2, [sp] - ldr r2, [sp, 0x10] - ldr r3, [sp, 0x14] - bl CreateMonWithEVSpread - movs r5, 0 - adds r0, r6, 0x1 - mov r9, r0 - mov r8, r4 - movs r0, 0x64 - adds r7, r6, 0 - muls r7, r0 - mov r0, r10 - adds r0, 0x4 - adds r4, r0 - ldr r3, _080E64B8 @ =gEnemyParty -_080E6452: - ldrh r1, [r4] - lsls r2, r5, 24 - lsrs r2, 24 - adds r0, r7, r3 - str r3, [sp, 0x24] - bl SetMonMoveSlot - ldrh r0, [r4] - ldr r3, [sp, 0x24] - cmp r0, 0xDA - bne _080E646E - movs r0, 0 - mov r1, sp - strb r0, [r1, 0xC] -_080E646E: - adds r4, 0x2 - adds r5, 0x1 - cmp r5, 0x3 - ble _080E6452 - movs r2, 0x64 - adds r4, r6, 0 - muls r4, r2 - ldr r3, _080E64B8 @ =gEnemyParty - adds r4, r3 - adds r0, r4, 0 - movs r1, 0x20 - add r2, sp, 0xC - bl SetMonData - mov r0, r8 - add r0, r10 - ldrb r2, [r0, 0x2] - lsls r2, 1 - ldr r0, _080E64BC @ =sBattleTowerHeldItems - adds r2, r0 - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData - mov r6, r9 -_080E64A0: - cmp r6, 0x3 - beq _080E64A6 - b _080E6340 -_080E64A6: - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E64B8: .4byte gEnemyParty -_080E64BC: .4byte sBattleTowerHeldItems - thumb_func_end sub_80E61DC - thumb_func_start sub_80E64C0 sub_80E64C0: @ 80E64C0 push {r4-r6,lr} diff --git a/src/battle_tower.c b/src/battle_tower.c index feab13d69..0ed20d6c9 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,9 +1,20 @@ #include "global.h" #include "battle_tower.h" +#include "random.h" +#include "text.h" +#include "event_data.h" #include "constants/species.h" #include "constants/items.h" #include "constants/moves.h" #include "constants/pokemon.h" +#include "constants/vars.h" +#include "constants/map_objects.h" + +void sub_80E5A38(u8 levelType); +void sub_80E5E5C(u8 trainerClass); +u16 sub_80E7188(u8 levelType); +void sub_80E7064(void); +void sub_80E6564(u16 species, u16 heldItem, u8 unused, u8 levelType, u8 monLevel, u16 *validSpecies, u16 *validHeldItems, u8 *numValid); #include "data/battle_tower/trainers.h" @@ -131,3 +142,911 @@ const u16 sLongStreakPrizes[] = { ITEM_CHOICE_BAND }; +void sub_80E5970(void) +{ + u8 count = 0; + s32 levelType; + + for (levelType = 0; levelType < 2; levelType++) + { + switch (gSaveBlock2Ptr->battleTower.var_4AE[levelType]) + { + default: + case 0: + sub_80E5A38(levelType); + if (count == 0) + VarSet(VAR_0x4000, 5); + break; + case 1: + sub_80E5A38(levelType); + VarSet(VAR_0x4000, 1); + count++; + break; + case 3: + break; + case 4: + VarSet(VAR_0x4000, 2); + count++; + break; + case 5: + VarSet(VAR_0x4000, 3); + count++; + break; + case 6: + break; + case 2: + VarSet(VAR_0x4000, 4); + count++; + break; + } + } + if (gSaveBlock2Ptr->battleTower.var_4AE[0] == 3 && gSaveBlock2Ptr->battleTower.var_4AE[1] == 3) + VarSet(VAR_0x4000, 5); + sub_80E7064(); +} + +void sub_80E5A38(u8 levelType) +{ + gSaveBlock2Ptr->battleTower.var_4AE[levelType] = 0; + gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] = 1; + gSaveBlock2Ptr->battleTower.curStreakChallengesNum[levelType] = 1; +} + +bool8 sub_80E5A70(u8 levelType, u16 winStreak) +{ + u8 trainerTeamLevel; + u8 monLevel; + s32 i; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 numValid; + + numValid = 0; + + ValidateEReaderTrainer(); + + if (gSpecialVar_Result != 0 || gSaveBlock2Ptr->battleTower.ereaderTrainer.winStreak != winStreak) + return FALSE; + + if (levelType != 0) + trainerTeamLevel = 100; + else + trainerTeamLevel = 50; + + for (i = 0; i < 3; i++) + { + monLevel = gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i].level; + if (gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) + return FALSE; + + sub_80E6564( + gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i].species, + gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i].heldItem, + 1, + levelType, + monLevel, + validPartySpecies, + validPartyHeldItems, + &numValid); + } + + return (numValid == 3); +} + +bool8 sub_80E5B14(void) +{ + s32 recordIndex, i; + u8 battleTowerLevelType; + u16 winStreak; + bool8 retVal; + s32 numCandidates; + u32 trainerIds[5]; + + numCandidates = 0; + battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + winStreak = sub_80E7188(battleTowerLevelType); + if (sub_80E5A70(battleTowerLevelType, winStreak)) + { + gSaveBlock2Ptr->battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; + retVal = TRUE; + } + else + { + // Check if one of the battle tower trainers from record mixing should be the next trainer. + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + struct BattleTowerRecord *record = &gSaveBlock2Ptr->battleTower.records[recordIndex]; + u32 recordHasData = 0; + u32 checksum = 0; + + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; i++) + { + recordHasData |= ((u32 *) record)[i]; + checksum += ((u32 *) record)[i]; + } + + if (gSaveBlock2Ptr->battleTower.records[recordIndex].winStreak == winStreak + && gSaveBlock2Ptr->battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType + && recordHasData + && gSaveBlock2Ptr->battleTower.records[recordIndex].checksum == checksum) + { + trainerIds[numCandidates] = recordIndex; + numCandidates++; + } + } + + if (numCandidates == 0) + { + retVal = FALSE; + } + else + { + gSaveBlock2Ptr->battleTower.battleTowerTrainerId = + trainerIds[Random() % numCandidates] + BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID; + retVal = TRUE; + } + } + return retVal; +} + +void ChooseNextBattleTowerTrainer(void) +{ + int i; + u16 trainerId; + bool8 levelType; + + levelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + if (sub_80E5B14()) + { + sub_80E5E5C(gSaveBlock2Ptr->battleTower.battleTowerTrainerId); + gSaveBlock2Ptr->battleTower.battledTrainerIds[gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] - 1] = gSaveBlock2Ptr->battleTower.battleTowerTrainerId; + return; + } + + if (gSaveBlock2Ptr->battleTower.curStreakChallengesNum[levelType] <= 7) + { + if (gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] == 7) + { + do + { + trainerId = ((Random() & 0xFF) * 5) >> 7; + trainerId += (gSaveBlock2Ptr->battleTower.curStreakChallengesNum[levelType] - 1) * 10 + 20; + + // Ensure trainer wasn't previously fought in this challenge. + for (i = 0; i < gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2Ptr->battleTower.battledTrainerIds[i] != trainerId; i++); + } + while (i != gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] - 1); + gSaveBlock2Ptr->battleTower.battleTowerTrainerId = trainerId; + } + else + { + do + { + trainerId = (((Random() & 0xFF) * 5) >> 6); + trainerId += (gSaveBlock2Ptr->battleTower.curStreakChallengesNum[levelType] - 1) * 10; + + // Ensure trainer wasn't previously fought in this challenge. + for (i = 0; i < gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2Ptr->battleTower.battledTrainerIds[i] != trainerId; i++); + } + while (i != gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] - 1); + gSaveBlock2Ptr->battleTower.battleTowerTrainerId = trainerId; + } + } + else + { + do + { + trainerId = (((Random() & 0xFF) * 30) >> 8) + 70; + + // Ensure trainer wasn't previously fought in this challenge. + for (i = 0; i < gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2Ptr->battleTower.battledTrainerIds[i] != trainerId; i++); + } + while (i != gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] - 1); + gSaveBlock2Ptr->battleTower.battleTowerTrainerId = trainerId; + } + + sub_80E5E5C(gSaveBlock2Ptr->battleTower.battleTowerTrainerId); + // Don't bother saving this trainer, since it's the last one in the challenge. + if (gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] < 7) + gSaveBlock2Ptr->battleTower.battledTrainerIds[gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] - 1] = gSaveBlock2Ptr->battleTower.battleTowerTrainerId; +} + +void sub_80E5E5C(u8 trainerClass) +{ + VarSet(VAR_OBJ_GFX_ID_0, MAP_OBJ_GFX_YOUNGSTER); +} + +void SetEReaderTrainerGfxId(void) +{ + sub_80E5E5C(BATTLE_TOWER_EREADER_TRAINER_ID); +} + +void sub_80E5E7C(struct BattleTowerRecord * record0) +{ + s32 i; + s32 j; + s32 k; + s32 l = 0; + struct BattleTowerRecord * record = record0; + + u16 winStreaks[6]; + u16 indices[6]; + + for (i = 0; i < 5; i++) + { + k = 0; + for (j = 0; j < 4; j++) + { + if (gSaveBlock2Ptr->battleTower.records[i].trainerId[j] != record->trainerId[j]) + break; + } + if (j == 4) + { + for (k = 0; k < 7; k++) + { + if (gSaveBlock2Ptr->battleTower.records[i].name[j] != record->name[j]) + break; + if (record->name[j] == EOS) + { + k = 7; + break; + } + } + } + if (k == 7) + break; + } + + if (i < 5) + { + gSaveBlock2Ptr->battleTower.records[i] = *record; + return; + } + + for (i = 0; i < 5; i++) + { + if (gSaveBlock2Ptr->battleTower.records[i].winStreak == 0) + break; + } + + if (i < 5) + { + gSaveBlock2Ptr->battleTower.records[i] = *record; + return; + } + + winStreaks[0] = gSaveBlock2Ptr->battleTower.records[0].winStreak; + indices[0] = 0; + l++; + + for (i = 1; i < 5; i++) + { + for (j = 0; j < l; j++) + { + if (gSaveBlock2Ptr->battleTower.records[i].winStreak < winStreaks[j]) + { + j = 0; + l = 1; + winStreaks[0] = gSaveBlock2Ptr->battleTower.records[i].winStreak; + indices[0] = i; + break; + } + if (gSaveBlock2Ptr->battleTower.records[i].winStreak > winStreaks[j]) + break; + } + if (j == l) + { + winStreaks[l] = gSaveBlock2Ptr->battleTower.records[i].winStreak; + indices[l] = i; + l++; + } + } + i = Random() % l; + gSaveBlock2Ptr->battleTower.records[indices[i]] = *record; +} + +u8 GetBattleTowerTrainerFrontSpriteId(void) +{ + if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + return gFacilityClassToPicIndex[gSaveBlock2Ptr->battleTower.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + return gFacilityClassToPicIndex[gBattleTowerTrainers[gSaveBlock2Ptr->battleTower.battleTowerTrainerId].trainerClass]; + } + else + { + return gFacilityClassToPicIndex[gSaveBlock2Ptr->battleTower.records[gSaveBlock2Ptr->battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; + } +} + +u8 sub_80E60E4(void) +{ + if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + return gFacilityClassToTrainerClass[gSaveBlock2Ptr->battleTower.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + return gFacilityClassToTrainerClass[gSaveBlock2Ptr->battleTower.records[gSaveBlock2Ptr->battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; + } + else + { + return gFacilityClassToTrainerClass[gBattleTowerTrainers[gSaveBlock2Ptr->battleTower.battleTowerTrainerId].trainerClass]; + } +} + +void sub_80E6150(u8 *dest) +{ + s32 i; + if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + for (i = 0; i < 7; i++) + dest[i] = gSaveBlock2Ptr->battleTower.ereaderTrainer.name[i]; + } + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + for (i = 0; i < 3; i++) + dest[i] = gBattleTowerTrainers[gSaveBlock2Ptr->battleTower.battleTowerTrainerId].name[i]; + } + else + { + for (i = 0; i < 7; i++) + dest[i] = gSaveBlock2Ptr->battleTower.records[gSaveBlock2Ptr->battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].name[i]; + } + dest[i] = EOS; +} + +#ifdef NONMATCHING // r6/r7 swap +void sub_80E61DC(void) +{ + s32 partyIndex; + s32 i; + u16 chosenMonIndices[3]; + u8 friendship; + u8 level; + u8 fixedIV; + u8 battleMonsOffset; + u8 monPoolSize; + u8 teamFlags; + const struct BattleTowerPokemonTemplate *battleTowerMons; + + battleMonsOffset = 0; + monPoolSize = 60; + friendship = 255; + + ZeroEnemyPartyMons(); + + // Different trainers have access to different sets of pokemon to use in battle. + // The pokemon later in gBattleTowerLevel100Mons or gBattleTowerLevel50Mons are + // stronger. Additionally, the later trainers' pokemon are granted higher IVs. + if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < 20) + { + fixedIV = 6; + } + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < 30) + { + fixedIV = 9; + battleMonsOffset = 30; + } + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < 40) + { + fixedIV = 12; + battleMonsOffset = 60; + } + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < 50) + { + fixedIV = 15; + battleMonsOffset = 90; + } + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < 60) + { + fixedIV = 18; + battleMonsOffset = 120; + } + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < 70) + { + fixedIV = 21; + battleMonsOffset = 150; + } + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < 80) + { + fixedIV = 31; + battleMonsOffset = 180; + } + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + fixedIV = 31; + battleMonsOffset = 200; + monPoolSize = 100; + } + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + // Load E-Reader trainer's party. + for (partyIndex = 0; partyIndex < 3; partyIndex++) + CreateBattleTowerMon(&gEnemyParty[partyIndex], &gSaveBlock2Ptr->battleTower.ereaderTrainer.party[partyIndex]); + return; + } + else + { + // Load a battle tower record's party. (From record mixing) + for (partyIndex = 0; partyIndex < 3; partyIndex++) + { + CreateBattleTowerMon( + &gEnemyParty[partyIndex], + &gSaveBlock2Ptr->battleTower.records[gSaveBlock2Ptr->battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].party[partyIndex]); + } + return; + } + + // Use the appropriate list of pokemon and level depending on the + // current challenge type. (level 50 or level 100 challenge) + if (gSaveBlock2Ptr->battleTower.battleTowerLevelType != 0) + { + battleTowerMons = gBattleTowerLevel100Mons; + level = 100; + } + else + { + battleTowerMons = gBattleTowerLevel50Mons; + level = 50; + } + + teamFlags = gBattleTowerTrainers[gSaveBlock2Ptr->battleTower.battleTowerTrainerId].teamFlags; + + // Attempt to fill the trainer's party with random Pokemon until 3 have been + // successfully chosen. The trainer's party may not have duplicate pokemon species + // or duplicate held items. Each pokemon must have all of the trainer's team flags + // set, as well. If any of those conditions are not met, then the loop starts over + // and another pokemon is chosen at random. + partyIndex = 0; + while (partyIndex != 3) + { + // Pick a random pokemon index based on the number of pokemon available to choose from + // and the starting offset in the battle tower pokemon array. + s32 battleMonIndex = ((Random() & 0xFF) * monPoolSize) / 256 + battleMonsOffset; + + // Ensure the chosen pokemon has compatible team flags with the trainer. + if (teamFlags == 0 || (battleTowerMons[battleMonIndex].teamFlags & teamFlags) == teamFlags) + { + // Ensure this pokemon species isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) == battleTowerMons[battleMonIndex].species) + break; + } + + if (i != partyIndex) + continue; + + // Ensure this pokemon's held item isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 + && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) + break; + } + + if (i != partyIndex) + continue; + + // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary + // because the species and held items were already checked directly above. Perhaps this + // is leftover code before the logic for duplicate species and held items was added. + //for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++); + for (i = 0; i < partyIndex; i++) + { + if (chosenMonIndices[i] == battleMonIndex) + break; + } + + if (i != partyIndex) + continue; + + chosenMonIndices[partyIndex] = battleMonIndex; + + // Place the chosen pokemon into the trainer's party. + CreateMonWithEVSpread( + &gEnemyParty[partyIndex], + battleTowerMons[battleMonIndex].species, + level, + fixedIV, + battleTowerMons[battleMonIndex].evSpread); + + // Give the chosen pokemon its specified moves. + for (i = 0; i < 4; i++) + { + SetMonMoveSlot(&gEnemyParty[partyIndex], battleTowerMons[battleMonIndex].moves[i], i); + if (battleTowerMons[battleMonIndex].moves[i] == MOVE_FRUSTRATION) + friendship = 0; // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is. + } + + SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); + SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, &sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); + + // The pokemon was successfully added to the trainer's party, so it's safe to move on to + // the next party slot. + partyIndex++; + } + } +} +#else +NAKED +void sub_80E61DC(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x28\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x18]\n" + "\tmovs r1, 0x3C\n" + "\tstr r1, [sp, 0x1C]\n" + "\tadd r4, sp, 0xC\n" + "\tmovs r0, 0xFF\n" + "\tstrb r0, [r4]\n" + "\tbl ZeroEnemyPartyMons\n" + "\tldr r1, _080E6210 @ =gSaveBlock2Ptr\n" + "\tldr r0, [r1]\n" + "\tldr r2, _080E6214 @ =0x0000056c\n" + "\tadds r0, r2\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0x13\n" + "\tbhi _080E6218\n" + "\tmovs r3, 0x6\n" + "\tstr r3, [sp, 0x14]\n" + "\tb _080E62F4\n" + "\t.align 2, 0\n" + "_080E6210: .4byte gSaveBlock2Ptr\n" + "_080E6214: .4byte 0x0000056c\n" + "_080E6218:\n" + "\tcmp r0, 0x1D\n" + "\tbhi _080E6226\n" + "\tmovs r0, 0x9\n" + "\tstr r0, [sp, 0x14]\n" + "\tmovs r1, 0x1E\n" + "\tstr r1, [sp, 0x18]\n" + "\tb _080E62F4\n" + "_080E6226:\n" + "\tcmp r0, 0x27\n" + "\tbhi _080E6234\n" + "\tmovs r2, 0xC\n" + "\tstr r2, [sp, 0x14]\n" + "\tmovs r3, 0x3C\n" + "\tstr r3, [sp, 0x18]\n" + "\tb _080E62F4\n" + "_080E6234:\n" + "\tcmp r0, 0x31\n" + "\tbhi _080E6242\n" + "\tmovs r0, 0xF\n" + "\tstr r0, [sp, 0x14]\n" + "\tmovs r1, 0x5A\n" + "\tstr r1, [sp, 0x18]\n" + "\tb _080E62F4\n" + "_080E6242:\n" + "\tcmp r0, 0x3B\n" + "\tbhi _080E6250\n" + "\tmovs r2, 0x12\n" + "\tstr r2, [sp, 0x14]\n" + "\tmovs r3, 0x78\n" + "\tstr r3, [sp, 0x18]\n" + "\tb _080E62F4\n" + "_080E6250:\n" + "\tcmp r0, 0x45\n" + "\tbhi _080E625E\n" + "\tmovs r0, 0x15\n" + "\tstr r0, [sp, 0x14]\n" + "\tmovs r1, 0x96\n" + "\tstr r1, [sp, 0x18]\n" + "\tb _080E62F4\n" + "_080E625E:\n" + "\tcmp r0, 0x4F\n" + "\tbhi _080E626C\n" + "\tmovs r2, 0x1F\n" + "\tstr r2, [sp, 0x14]\n" + "\tmovs r3, 0xB4\n" + "\tstr r3, [sp, 0x18]\n" + "\tb _080E62F4\n" + "_080E626C:\n" + "\tcmp r0, 0x63\n" + "\tbhi _080E627E\n" + "\tmovs r0, 0x1F\n" + "\tstr r0, [sp, 0x14]\n" + "\tmovs r1, 0xC8\n" + "\tstr r1, [sp, 0x18]\n" + "\tmovs r2, 0x64\n" + "\tstr r2, [sp, 0x1C]\n" + "\tb _080E62F4\n" + "_080E627E:\n" + "\tcmp r0, 0xC8\n" + "\tbne _080E62B0\n" + "\tmovs r6, 0\n" + "\tadds r4, r1, 0\n" + "_080E6286:\n" + "\tmovs r0, 0x64\n" + "\tmuls r0, r6\n" + "\tldr r1, _080E62A8 @ =gEnemyParty\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x2C\n" + "\tadds r2, r6, 0\n" + "\tmuls r2, r1\n" + "\tldr r3, _080E62AC @ =0x000004d4\n" + "\tadds r2, r3\n" + "\tldr r1, [r4]\n" + "\tadds r1, r2\n" + "\tbl CreateBattleTowerMon\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x2\n" + "\tble _080E6286\n" + "\tb _080E64A6\n" + "\t.align 2, 0\n" + "_080E62A8: .4byte gEnemyParty\n" + "_080E62AC: .4byte 0x000004d4\n" + "_080E62B0:\n" + "\tmovs r6, 0\n" + "_080E62B2:\n" + "\tmovs r0, 0x64\n" + "\tmuls r0, r6\n" + "\tldr r1, _080E62E4 @ =gEnemyParty\n" + "\tadds r0, r1\n" + "\tldr r1, _080E62E8 @ =gSaveBlock2Ptr\n" + "\tldr r1, [r1]\n" + "\tldr r3, _080E62EC @ =0x0000056c\n" + "\tadds r2, r1, r3\n" + "\tldrb r3, [r2]\n" + "\tmovs r2, 0xA4\n" + "\tmuls r2, r3\n" + "\tldr r3, _080E62F0 @ =0xffffc144\n" + "\tadds r2, r3\n" + "\tadds r1, r2\n" + "\tmovs r2, 0x2C\n" + "\tmuls r2, r6\n" + "\tadds r2, 0x1C\n" + "\tadds r1, r2\n" + "\tbl CreateBattleTowerMon\n" + "\tadds r6, 0x1\n" + "\tcmp r6, 0x2\n" + "\tble _080E62B2\n" + "\tb _080E64A6\n" + "\t.align 2, 0\n" + "_080E62E4: .4byte gEnemyParty\n" + "_080E62E8: .4byte gSaveBlock2Ptr\n" + "_080E62EC: .4byte 0x0000056c\n" + "_080E62F0: .4byte 0xffffc144\n" + "_080E62F4:\n" + "\tldr r2, _080E6314 @ =gSaveBlock2Ptr\n" + "\tldr r0, [r2]\n" + "\tldr r1, _080E6318 @ =0x0000055c\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tadds r1, r2, 0\n" + "\tcmp r0, 0\n" + "\tbeq _080E6320\n" + "\tldr r2, _080E631C @ =gBattleTowerLevel100Mons\n" + "\tmov r10, r2\n" + "\tmovs r3, 0x64\n" + "\tstr r3, [sp, 0x10]\n" + "\tb _080E6328\n" + "\t.align 2, 0\n" + "_080E6314: .4byte gSaveBlock2Ptr\n" + "_080E6318: .4byte 0x0000055c\n" + "_080E631C: .4byte gBattleTowerLevel100Mons\n" + "_080E6320:\n" + "\tldr r0, _080E6378 @ =gBattleTowerLevel50Mons\n" + "\tmov r10, r0\n" + "\tmovs r2, 0x32\n" + "\tstr r2, [sp, 0x10]\n" + "_080E6328:\n" + "\tldr r2, _080E637C @ =gBattleTowerTrainers\n" + "\tldr r0, [r1]\n" + "\tldr r3, _080E6380 @ =0x0000056c\n" + "\tadds r0, r3\n" + "\tldrb r1, [r0]\n" + "\tlsls r0, r1, 2\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tadds r0, r2\n" + "\tldrb r0, [r0, 0x4]\n" + "\tstr r0, [sp, 0x20]\n" + "\tmovs r6, 0\n" + "_080E6340:\n" + "\tbl Random\n" + "\tmovs r1, 0xFF\n" + "\tands r1, r0\n" + "\tldr r2, [sp, 0x1C]\n" + "\tadds r0, r1, 0\n" + "\tmuls r0, r2\n" + "\tasrs r0, 8\n" + "\tldr r3, [sp, 0x18]\n" + "\tadds r7, r0, r3\n" + "\tldr r0, [sp, 0x20]\n" + "\tcmp r0, 0\n" + "\tbeq _080E636A\n" + "\tlsls r0, r7, 4\n" + "\tadd r0, r10\n" + "\tldrb r0, [r0, 0x3]\n" + "\tldr r1, [sp, 0x20]\n" + "\tands r0, r1\n" + "\tcmp r0, r1\n" + "\tbeq _080E636A\n" + "\tb _080E64A0\n" + "_080E636A:\n" + "\tmovs r5, 0\n" + "\tlsls r0, r7, 4\n" + "\tmov r2, r10\n" + "\tadds r3, r0, r2\n" + "\tmovs r4, 0\n" + "\tb _080E6388\n" + "\t.align 2, 0\n" + "_080E6378: .4byte gBattleTowerLevel50Mons\n" + "_080E637C: .4byte gBattleTowerTrainers\n" + "_080E6380: .4byte 0x0000056c\n" + "_080E6384:\n" + "\tadds r4, 0x64\n" + "\tadds r5, 0x1\n" + "_080E6388:\n" + "\tcmp r5, r6\n" + "\tbge _080E63A2\n" + "\tldr r1, _080E64B8 @ =gEnemyParty\n" + "\tadds r0, r4, r1\n" + "\tmovs r1, 0xB\n" + "\tmovs r2, 0\n" + "\tstr r3, [sp, 0x24]\n" + "\tbl GetMonData\n" + "\tldr r3, [sp, 0x24]\n" + "\tldrh r2, [r3]\n" + "\tcmp r0, r2\n" + "\tbne _080E6384\n" + "_080E63A2:\n" + "\tcmp r5, r6\n" + "\tbne _080E64A0\n" + "\tmovs r5, 0\n" + "\tcmp r5, r6\n" + "\tbge _080E63F0\n" + "\tldr r3, _080E64BC @ =sBattleTowerHeldItems\n" + "\tmov r9, r3\n" + "\tlsls r0, r7, 4\n" + "\tadd r0, r10\n" + "\tmov r8, r0\n" + "\tmovs r3, 0\n" + "_080E63B8:\n" + "\tldr r0, _080E64B8 @ =gEnemyParty\n" + "\tadds r4, r3, r0\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0xC\n" + "\tmovs r2, 0\n" + "\tstr r3, [sp, 0x24]\n" + "\tbl GetMonData\n" + "\tldr r3, [sp, 0x24]\n" + "\tcmp r0, 0\n" + "\tbeq _080E63E8\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0xC\n" + "\tmovs r2, 0\n" + "\tbl GetMonData\n" + "\tmov r2, r8\n" + "\tldrb r1, [r2, 0x2]\n" + "\tlsls r1, 1\n" + "\tadd r1, r9\n" + "\tldr r3, [sp, 0x24]\n" + "\tldrh r1, [r1]\n" + "\tcmp r0, r1\n" + "\tbeq _080E63F0\n" + "_080E63E8:\n" + "\tadds r3, 0x64\n" + "\tadds r5, 0x1\n" + "\tcmp r5, r6\n" + "\tblt _080E63B8\n" + "_080E63F0:\n" + "\tcmp r5, r6\n" + "\tbne _080E64A0\n" + "\tmovs r5, 0\n" + "\tcmp r5, r6\n" + "\tbge _080E6412\n" + "\tadd r0, sp, 0x4\n" + "\tldrh r0, [r0]\n" + "\tcmp r0, r7\n" + "\tbeq _080E6412\n" + "\tadd r1, sp, 0x4\n" + "_080E6404:\n" + "\tadds r1, 0x2\n" + "\tadds r5, 0x1\n" + "\tcmp r5, r6\n" + "\tbge _080E6412\n" + "\tldrh r0, [r1]\n" + "\tcmp r0, r7\n" + "\tbne _080E6404\n" + "_080E6412:\n" + "\tcmp r5, r6\n" + "\tbne _080E64A0\n" + "\tlsls r0, r6, 1\n" + "\tadd r0, sp\n" + "\tadds r0, 0x4\n" + "\tstrh r7, [r0]\n" + "\tmovs r3, 0x64\n" + "\tadds r0, r6, 0\n" + "\tmuls r0, r3\n" + "\tldr r1, _080E64B8 @ =gEnemyParty\n" + "\tadds r0, r1\n" + "\tlsls r4, r7, 4\n" + "\tmov r3, r10\n" + "\tadds r2, r4, r3\n" + "\tldrh r1, [r2]\n" + "\tldrb r2, [r2, 0xC]\n" + "\tstr r2, [sp]\n" + "\tldr r2, [sp, 0x10]\n" + "\tldr r3, [sp, 0x14]\n" + "\tbl CreateMonWithEVSpread\n" + "\tmovs r5, 0\n" + "\tadds r0, r6, 0x1\n" + "\tmov r9, r0\n" + "\tmov r8, r4\n" + "\tmovs r0, 0x64\n" + "\tadds r7, r6, 0\n" + "\tmuls r7, r0\n" + "\tmov r0, r10\n" + "\tadds r0, 0x4\n" + "\tadds r4, r0\n" + "\tldr r3, _080E64B8 @ =gEnemyParty\n" + "_080E6452:\n" + "\tldrh r1, [r4]\n" + "\tlsls r2, r5, 24\n" + "\tlsrs r2, 24\n" + "\tadds r0, r7, r3\n" + "\tstr r3, [sp, 0x24]\n" + "\tbl SetMonMoveSlot\n" + "\tldrh r0, [r4]\n" + "\tldr r3, [sp, 0x24]\n" + "\tcmp r0, 0xDA\n" + "\tbne _080E646E\n" + "\tmovs r0, 0\n" + "\tmov r1, sp\n" + "\tstrb r0, [r1, 0xC]\n" + "_080E646E:\n" + "\tadds r4, 0x2\n" + "\tadds r5, 0x1\n" + "\tcmp r5, 0x3\n" + "\tble _080E6452\n" + "\tmovs r2, 0x64\n" + "\tadds r4, r6, 0\n" + "\tmuls r4, r2\n" + "\tldr r3, _080E64B8 @ =gEnemyParty\n" + "\tadds r4, r3\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0x20\n" + "\tadd r2, sp, 0xC\n" + "\tbl SetMonData\n" + "\tmov r0, r8\n" + "\tadd r0, r10\n" + "\tldrb r2, [r0, 0x2]\n" + "\tlsls r2, 1\n" + "\tldr r0, _080E64BC @ =sBattleTowerHeldItems\n" + "\tadds r2, r0\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0xC\n" + "\tbl SetMonData\n" + "\tmov r6, r9\n" + "_080E64A0:\n" + "\tcmp r6, 0x3\n" + "\tbeq _080E64A6\n" + "\tb _080E6340\n" + "_080E64A6:\n" + "\tadd sp, 0x28\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080E64B8: .4byte gEnemyParty\n" + "_080E64BC: .4byte sBattleTowerHeldItems"); +} +#endif //NONMATCHING From 55bede6ca279483a0e4b9b51ebe152d4be135b93 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Nov 2019 13:59:24 -0500 Subject: [PATCH 02/33] Finish decomp of battle_tower --- asm/battle_message.s | 2 +- asm/battle_tower.s | 2175 ------------------------- asm/link_rfu_3.s | 8 +- asm/party_menu.s | 42 +- asm/script_pokemon_util_80A0058.s | 12 +- include/battle_tower.h | 4 +- include/party_menu.h | 1 + include/script_pokemon_util_80A0058.h | 1 + ld_script.txt | 1 - src/battle_tower.c | 764 ++++++++- src/mevent.c | 2 +- sym_ewram.txt | 26 +- 12 files changed, 802 insertions(+), 2236 deletions(-) delete mode 100644 asm/battle_tower.s diff --git a/asm/battle_message.s b/asm/battle_message.s index 28d7b196d..18d4106e1 100644 --- a/asm/battle_message.s +++ b/asm/battle_message.s @@ -1781,7 +1781,7 @@ _080D80F0: cmp r0, 0 beq _080D810C mov r0, sp - bl sub_80E6150 + bl get_trainer_name b _080D8382 .align 2, 0 _080D8108: .4byte gBattleTypeFlags diff --git a/asm/battle_tower.s b/asm/battle_tower.s deleted file mode 100644 index 3d4169293..000000000 --- a/asm/battle_tower.s +++ /dev/null @@ -1,2175 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80E64C0 -sub_80E64C0: @ 80E64C0 - push {r4-r6,lr} - lsls r0, 16 - lsrs r0, 16 - adds r5, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl GetSetPokedexFlag - lsls r0, 24 - cmp r0, 0 - beq _080E6554 - cmp r4, 0 - bne _080E64EC - ldr r0, _080E6514 @ =gStringVar1 - ldr r1, _080E6518 @ =gUnknown_83FE859 - bl StringAppend -_080E64EC: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r6, _080E6514 @ =gStringVar1 - movs r0, 0xB - adds r1, r5, 0 - muls r1, r0 - ldr r0, _080E651C @ =gSpeciesNames - adds r1, r0 - adds r0, r6, 0 - bl StringAppend - cmp r4, 0x5 - beq _080E6538 - cmp r4, 0x5 - bgt _080E6520 - cmp r4, 0x2 - beq _080E652A - b _080E654C - .align 2, 0 -_080E6514: .4byte gStringVar1 -_080E6518: .4byte gUnknown_83FE859 -_080E651C: .4byte gSpeciesNames -_080E6520: - cmp r4, 0x8 - beq _080E6538 - cmp r4, 0xB - beq _080E6538 - b _080E654C -_080E652A: - ldr r1, _080E6534 @ =gUnknown_83FE85E - adds r0, r6, 0 - bl StringAppend - b _080E6554 - .align 2, 0 -_080E6534: .4byte gUnknown_83FE85E -_080E6538: - ldr r0, _080E6544 @ =gStringVar1 - ldr r1, _080E6548 @ =gUnknown_83FE85C - bl StringAppend - b _080E6554 - .align 2, 0 -_080E6544: .4byte gStringVar1 -_080E6548: .4byte gUnknown_83FE85C -_080E654C: - ldr r0, _080E655C @ =gStringVar1 - ldr r1, _080E6560 @ =gUnknown_83FE859 - bl StringAppend -_080E6554: - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080E655C: .4byte gStringVar1 -_080E6560: .4byte gUnknown_83FE859 - thumb_func_end sub_80E64C0 - - thumb_func_start sub_80E6564 -sub_80E6564: @ 80E6564 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r2, [sp, 0x20] - ldr r4, [sp, 0x24] - mov r9, r4 - ldr r4, [sp, 0x28] - mov r10, r4 - ldr r7, [sp, 0x2C] - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r3, 24 - lsrs r3, 24 - mov r12, r3 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - movs r2, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - beq _080E6632 - cmp r4, 0 - beq _080E6632 - ldr r0, _080E6640 @ =gBattleTowerBannedSpecies - ldrh r1, [r0] - ldr r5, _080E6644 @ =0x0000ffff - adds r3, r0, 0 - cmp r1, r5 - beq _080E65C8 - cmp r1, r4 - beq _080E65BC - adds r1, r3, 0 -_080E65AE: - adds r1, 0x2 - adds r2, 0x1 - ldrh r0, [r1] - cmp r0, r5 - beq _080E65C8 - cmp r0, r4 - bne _080E65AE -_080E65BC: - lsls r0, r2, 1 - adds r0, r3 - ldrh r1, [r0] - ldr r0, _080E6644 @ =0x0000ffff - cmp r1, r0 - bne _080E6632 -_080E65C8: - mov r0, r12 - cmp r0, 0 - bne _080E65D4 - mov r1, r8 - cmp r1, 0x32 - bhi _080E6632 -_080E65D4: - movs r2, 0 - ldrb r3, [r7] - cmp r2, r3 - bge _080E65F4 - mov r1, r9 - ldrh r0, [r1] - cmp r0, r4 - beq _080E65F4 - adds r5, r3, 0 -_080E65E6: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r5 - bge _080E65F4 - ldrh r0, [r1] - cmp r0, r4 - bne _080E65E6 -_080E65F4: - cmp r2, r3 - bne _080E6632 - cmp r6, 0 - beq _080E661E - movs r2, 0 - cmp r2, r3 - bge _080E661A - mov r1, r10 - ldrh r0, [r1] - cmp r0, r6 - beq _080E661A - adds r5, r3, 0 -_080E660C: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r5 - bge _080E661A - ldrh r0, [r1] - cmp r0, r6 - bne _080E660C -_080E661A: - cmp r2, r3 - bne _080E6632 -_080E661E: - lsls r0, r3, 1 - add r0, r9 - strh r4, [r0] - ldrb r0, [r7] - lsls r0, 1 - add r0, r10 - strh r6, [r0] - ldrb r0, [r7] - adds r0, 0x1 - strb r0, [r7] -_080E6632: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E6640: .4byte gBattleTowerBannedSpecies -_080E6644: .4byte 0x0000ffff - thumb_func_end sub_80E6564 - - thumb_func_start CheckPartyBattleTowerBanlist -CheckPartyBattleTowerBanlist: @ 80E6648 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - add r1, sp, 0x28 - movs r0, 0 - strb r0, [r1] - movs r7, 0 - mov r9, r1 - add r0, sp, 0x1C - mov r10, r0 -_080E6662: - movs r0, 0x64 - adds r5, r7, 0 - muls r5, r0 - ldr r0, _080E6724 @ =gPlayerParty - adds r5, r0 - adds r0, r5, 0 - movs r1, 0x41 - bl GetMonData - mov r8, r0 - mov r1, r8 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - adds r0, r5, 0 - movs r1, 0xC - bl GetMonData - adds r6, r0, 0 - lsls r6, 16 - lsrs r6, 16 - adds r0, r5, 0 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - adds r2, r0, 0 - lsls r2, 16 - lsrs r2, 16 - ldr r5, _080E6728 @ =gSpecialVar_Result - ldrb r3, [r5] - str r4, [sp] - add r0, sp, 0x10 - str r0, [sp, 0x4] - mov r1, r10 - str r1, [sp, 0x8] - mov r0, r9 - str r0, [sp, 0xC] - mov r0, r8 - adds r1, r6, 0 - bl sub_80E6564 - adds r7, 0x1 - cmp r7, 0x5 - ble _080E6662 - mov r1, r9 - ldrb r0, [r1] - cmp r0, 0x2 - bhi _080E6750 - ldr r1, _080E672C @ =gStringVar1 - movs r0, 0xFF - strb r0, [r1] - ldr r1, _080E6730 @ =gSpecialVar_0x8004 - movs r0, 0x1 - strh r0, [r1] - movs r0, 0 - mov r1, r9 - strb r0, [r1] - ldr r2, _080E6734 @ =gBattleTowerBannedSpecies - ldrh r0, [r2] - ldr r1, _080E6738 @ =0x0000ffff - cmp r0, r1 - beq _080E6704 - mov r5, r9 - adds r6, r1, 0 - adds r4, r2, 0 -_080E66F2: - ldrh r0, [r4] - ldrb r1, [r5] - bl sub_80E64C0 - strb r0, [r5] - adds r4, 0x2 - ldrh r0, [r4] - cmp r0, r6 - bne _080E66F2 -_080E6704: - ldr r4, _080E672C @ =gStringVar1 - adds r0, r4, 0 - bl StringLength - lsls r0, 16 - lsrs r7, r0, 16 - subs r0, r7, 0x1 - adds r0, r4 - movs r1, 0xFF - strb r1, [r0] - mov r1, r9 - ldrb r0, [r1] - cmp r0, 0x2 - bhi _080E6740 - ldr r1, _080E673C @ =gUnknown_83FE860 - b _080E6742 - .align 2, 0 -_080E6724: .4byte gPlayerParty -_080E6728: .4byte gSpecialVar_Result -_080E672C: .4byte gStringVar1 -_080E6730: .4byte gSpecialVar_0x8004 -_080E6734: .4byte gBattleTowerBannedSpecies -_080E6738: .4byte 0x0000ffff -_080E673C: .4byte gUnknown_83FE860 -_080E6740: - ldr r1, _080E674C @ =gUnknown_83FE864 -_080E6742: - adds r0, r4, 0 - bl StringAppend - b _080E6770 - .align 2, 0 -_080E674C: .4byte gUnknown_83FE864 -_080E6750: - ldr r1, _080E6780 @ =gSpecialVar_0x8004 - movs r0, 0 - strh r0, [r1] - ldr r0, _080E6784 @ =gSaveBlock2Ptr - ldr r2, [r0] - ldrb r0, [r5] - ldr r1, _080E6788 @ =0x0000055c - adds r2, r1 - movs r1, 0x1 - ands r1, r0 - ldrb r3, [r2] - movs r0, 0x2 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] -_080E6770: - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E6780: .4byte gSpecialVar_0x8004 -_080E6784: .4byte gSaveBlock2Ptr -_080E6788: .4byte 0x0000055c - thumb_func_end CheckPartyBattleTowerBanlist - - thumb_func_start sub_80E678C -sub_80E678C: @ 80E678C - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x3 - movs r2, 0x2 - movs r3, 0x12 - bl EC_DoesEasyChatStringFitOnLine - lsls r0, 24 - cmp r0, 0 - beq _080E67E4 - ldr r5, _080E67E0 @ =gStringVar4 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x2 - movs r3, 0x3 - bl ConvertEasyChatWordsToString - ldrb r0, [r5] - movs r1, 0x1 - cmp r0, 0xFE - beq _080E67C2 - adds r2, r5, 0 -_080E67B8: - adds r0, r1, r2 - ldrb r0, [r0] - adds r1, 0x1 - cmp r0, 0xFE - bne _080E67B8 -_080E67C2: - ldr r2, _080E67E0 @ =gStringVar4 - adds r0, r1, r2 - ldrb r0, [r0] - adds r3, r2, 0 - cmp r0, 0xFE - beq _080E67D8 -_080E67CE: - adds r1, 0x1 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0xFE - bne _080E67CE -_080E67D8: - adds r1, r3 - movs r0, 0xFA - strb r0, [r1] - b _080E67F0 - .align 2, 0 -_080E67E0: .4byte gStringVar4 -_080E67E4: - ldr r0, _080E67F8 @ =gStringVar4 - adds r1, r4, 0 - movs r2, 0x3 - movs r3, 0x2 - bl ConvertEasyChatWordsToString -_080E67F0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E67F8: .4byte gStringVar4 - thumb_func_end sub_80E678C - - thumb_func_start PrintBattleTowerTrainerGreeting -PrintBattleTowerTrainerGreeting: @ 80E67FC - push {lr} - ldr r0, _080E6818 @ =gSaveBlock2Ptr - ldr r2, [r0] - ldr r1, _080E681C @ =0x0000056c - adds r0, r2, r1 - ldrb r1, [r0] - cmp r1, 0xC8 - bne _080E6820 - movs r1, 0x96 - lsls r1, 3 - adds r0, r2, r1 - bl sub_80E678C - b _080E684C - .align 2, 0 -_080E6818: .4byte gSaveBlock2Ptr -_080E681C: .4byte 0x0000056c -_080E6820: - cmp r1, 0x63 - bhi _080E683C - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - ldr r1, _080E6838 @ =gBattleTowerTrainers + 6 - adds r0, r1 - bl sub_80E678C - b _080E684C - .align 2, 0 -_080E6838: .4byte gBattleTowerTrainers + 6 -_080E683C: - ldrb r1, [r0] - movs r0, 0xA4 - muls r0, r1 - adds r0, r2 - ldr r1, _080E6850 @ =0xffffc154 - adds r0, r1 - bl sub_80E678C -_080E684C: - pop {r0} - bx r0 - .align 2, 0 -_080E6850: .4byte 0xffffc154 - thumb_func_end PrintBattleTowerTrainerGreeting - - thumb_func_start sub_80E6854 -sub_80E6854: @ 80E6854 - push {r4-r6,lr} - sub sp, 0x4 - ldr r0, _080E686C @ =gUnknown_203AAB8 - ldrh r0, [r0] - cmp r0, 0x1 - beq _080E6870 - cmp r0, 0x1 - ble _080E68B0 - cmp r0, 0x2 - beq _080E68AC - b _080E68B0 - .align 2, 0 -_080E686C: .4byte gUnknown_203AAB8 -_080E6870: - movs r5, 0 - ldr r6, _080E68A4 @ =gSaveBlock1Ptr -_080E6874: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - adds r1, r4, 0 - adds r1, 0x38 - ldr r0, [r6] - adds r0, r1 - movs r1, 0xC - bl GetMonData - mov r1, sp - strh r0, [r1] - ldr r0, _080E68A8 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - adds r5, 0x1 - cmp r5, 0x5 - ble _080E6874 - b _080E68B0 - .align 2, 0 -_080E68A4: .4byte gSaveBlock1Ptr -_080E68A8: .4byte gPlayerParty -_080E68AC: - bl sub_80E7550 -_080E68B0: - ldr r0, _080E68C0 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl SetMainCallback2 - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E68C0: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end sub_80E6854 - - thumb_func_start sub_80E68C4 -sub_80E68C4: @ 80E68C4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl BT_IsDone - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080E68EC - ldr r0, _080E68F4 @ =gMain - ldr r1, _080E68F8 @ =sub_80E6854 - str r1, [r0, 0x8] - bl CleanupOverworldWindowsAndTilemaps - ldr r0, _080E68FC @ =CB2_InitBattle - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_080E68EC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E68F4: .4byte gMain -_080E68F8: .4byte sub_80E6854 -_080E68FC: .4byte CB2_InitBattle - thumb_func_end sub_80E68C4 - - thumb_func_start StartSpecialBattle -StartSpecialBattle: @ 80E6900 - push {r4-r6,lr} - sub sp, 0x4 - ldr r0, _080E691C @ =gUnknown_203AAB8 - ldr r1, _080E6920 @ =gSpecialVar_0x8004 - ldrh r1, [r1] - strh r1, [r0] - ldrh r2, [r0] - cmp r2, 0x1 - beq _080E6944 - cmp r2, 0x1 - bgt _080E6924 - cmp r2, 0 - beq _080E692A - b _080E69E6 - .align 2, 0 -_080E691C: .4byte gUnknown_203AAB8 -_080E6920: .4byte gSpecialVar_0x8004 -_080E6924: - cmp r2, 0x2 - beq _080E6998 - b _080E69E6 -_080E692A: - ldr r1, _080E693C @ =gBattleTypeFlags - movs r0, 0x84 - lsls r0, 1 - str r0, [r1] - ldr r0, _080E6940 @ =gTrainerBattleOpponent_A - strh r2, [r0] - bl sub_80E61DC - b _080E6970 - .align 2, 0 -_080E693C: .4byte gBattleTypeFlags -_080E6940: .4byte gTrainerBattleOpponent_A -_080E6944: - movs r5, 0 - ldr r6, _080E698C @ =gSaveBlock1Ptr -_080E6948: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _080E6990 @ =gPlayerParty - adds r0, r4, r0 - movs r1, 0xC - bl GetMonData - mov r1, sp - strh r0, [r1] - adds r4, 0x38 - ldr r0, [r6] - adds r0, r4 - movs r1, 0xC - mov r2, sp - bl SetMonData - adds r5, 0x1 - cmp r5, 0x5 - ble _080E6948 -_080E6970: - ldr r0, _080E6994 @ =sub_80E68C4 - movs r1, 0x1 - bl CreateTask - movs r0, 0 - bl PlayMapChosenOrBattleBGM - bl BattleSetup_GetBattleTowerBattleTransition - lsls r0, 24 - lsrs r0, 24 - bl BT_StartOnField - b _080E69E6 - .align 2, 0 -_080E698C: .4byte gSaveBlock1Ptr -_080E6990: .4byte gPlayerParty -_080E6994: .4byte sub_80E68C4 -_080E6998: - bl ZeroEnemyPartyMons - movs r5, 0 - ldr r4, _080E69F0 @ =gSaveBlock2Ptr -_080E69A0: - movs r0, 0x64 - muls r0, r5 - ldr r1, _080E69F4 @ =gEnemyParty - adds r0, r1 - movs r1, 0x2C - adds r2, r5, 0 - muls r2, r1 - ldr r1, _080E69F8 @ =0x000004d4 - adds r2, r1 - ldr r1, [r4] - adds r1, r2 - bl CreateBattleTowerMon - adds r5, 0x1 - cmp r5, 0x2 - ble _080E69A0 - ldr r1, _080E69FC @ =gBattleTypeFlags - ldr r0, _080E6A00 @ =0x00000808 - str r0, [r1] - ldr r1, _080E6A04 @ =gTrainerBattleOpponent_A - movs r0, 0 - strh r0, [r1] - ldr r0, _080E6A08 @ =sub_80E68C4 - movs r1, 0x1 - bl CreateTask - movs r0, 0 - bl PlayMapChosenOrBattleBGM - bl BattleSetup_GetBattleTowerBattleTransition - lsls r0, 24 - lsrs r0, 24 - bl BT_StartOnField -_080E69E6: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E69F0: .4byte gSaveBlock2Ptr -_080E69F4: .4byte gEnemyParty -_080E69F8: .4byte 0x000004d4 -_080E69FC: .4byte gBattleTypeFlags -_080E6A00: .4byte 0x00000808 -_080E6A04: .4byte gTrainerBattleOpponent_A -_080E6A08: .4byte sub_80E68C4 - thumb_func_end StartSpecialBattle - - thumb_func_start SetBattleTowerProperty -SetBattleTowerProperty: @ 80E6A0C - push {r4-r6,lr} - ldr r1, _080E6A34 @ =gSaveBlock2Ptr - ldr r0, [r1] - ldr r2, _080E6A38 @ =0x0000055c - adds r0, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r5, r0, 31 - ldr r0, _080E6A3C @ =gSpecialVar_0x8004 - ldrh r0, [r0] - adds r6, r1, 0 - cmp r0, 0xE - bls _080E6A28 - b _080E6C80 -_080E6A28: - lsls r0, 2 - ldr r1, _080E6A40 @ =_080E6A44 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080E6A34: .4byte gSaveBlock2Ptr -_080E6A38: .4byte 0x0000055c -_080E6A3C: .4byte gSpecialVar_0x8004 -_080E6A40: .4byte _080E6A44 - .align 2, 0 -_080E6A44: - .4byte _080E6A80 - .4byte _080E6AAC - .4byte _080E6AD0 - .4byte _080E6AE4 - .4byte _080E6AFC - .4byte _080E6B14 - .4byte _080E6B3C - .4byte _080E6BA4 - .4byte _080E6BD8 - .4byte _080E6C80 - .4byte _080E6C00 - .4byte _080E6C14 - .4byte _080E6C30 - .4byte _080E6C4C - .4byte _080E6C6C -_080E6A80: - ldr r0, _080E6AA0 @ =gBattleStruct - ldr r1, [r0] - adds r1, 0xDA - ldr r0, [r6] - ldr r2, _080E6AA4 @ =0x0000055e - adds r0, r2 - adds r0, r5 - ldrb r0, [r0] - strb r0, [r1] - ldr r0, [r6] - adds r0, r2 - adds r0, r5 - ldr r1, _080E6AA8 @ =gSpecialVar_0x8005 - ldrh r1, [r1] - strb r1, [r0] - b _080E6C80 - .align 2, 0 -_080E6AA0: .4byte gBattleStruct -_080E6AA4: .4byte 0x0000055e -_080E6AA8: .4byte gSpecialVar_0x8005 -_080E6AAC: - ldr r2, [r6] - ldr r0, _080E6AC8 @ =gSpecialVar_0x8005 - ldrb r0, [r0] - ldr r3, _080E6ACC @ =0x0000055c - adds r2, r3 - movs r1, 0x1 - ands r1, r0 - ldrb r3, [r2] - movs r0, 0x2 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - b _080E6C80 - .align 2, 0 -_080E6AC8: .4byte gSpecialVar_0x8005 -_080E6ACC: .4byte 0x0000055c -_080E6AD0: - ldr r0, [r6] - lsls r1, r5, 1 - movs r2, 0xAC - lsls r2, 3 - adds r0, r2 - adds r0, r1 - ldr r1, _080E6AE0 @ =gSpecialVar_0x8005 - b _080E6BC6 - .align 2, 0 -_080E6AE0: .4byte gSpecialVar_0x8005 -_080E6AE4: - ldr r0, [r6] - lsls r1, r5, 1 - ldr r3, _080E6AF4 @ =0x00000564 - adds r0, r3 - adds r0, r1 - ldr r1, _080E6AF8 @ =gSpecialVar_0x8005 - b _080E6BC6 - .align 2, 0 -_080E6AF4: .4byte 0x00000564 -_080E6AF8: .4byte gSpecialVar_0x8005 -_080E6AFC: - ldr r0, [r6] - ldr r1, _080E6B0C @ =gSpecialVar_0x8005 - ldrh r1, [r1] - ldr r2, _080E6B10 @ =0x0000056c - adds r0, r2 - strb r1, [r0] - b _080E6C80 - .align 2, 0 -_080E6B0C: .4byte gSpecialVar_0x8005 -_080E6B10: .4byte 0x0000056c -_080E6B14: - movs r2, 0 - ldr r5, _080E6B30 @ =gSaveBlock2Ptr - ldr r4, _080E6B34 @ =0x0000056d - ldr r3, _080E6B38 @ =gUnknown_203B0D4 -_080E6B1C: - ldr r0, [r5] - adds r0, r4 - adds r0, r2 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _080E6B1C - b _080E6C80 - .align 2, 0 -_080E6B30: .4byte gSaveBlock2Ptr -_080E6B34: .4byte 0x0000056d -_080E6B38: .4byte gUnknown_203B0D4 -_080E6B3C: - ldr r1, [r6] - ldr r3, _080E6B94 @ =0x0000056c - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, 0xC8 - bne _080E6B52 - movs r2, 0x94 - lsls r2, 3 - adds r0, r1, r2 - bl sub_80E7524 -_080E6B52: - ldr r0, [r6] - movs r3, 0xAF - lsls r3, 3 - adds r2, r0, r3 - ldrh r1, [r2] - ldr r0, _080E6B98 @ =0x0000270e - cmp r1, r0 - bhi _080E6B66 - adds r0, r1, 0x1 - strh r0, [r2] -_080E6B66: - ldr r1, [r6] - lsls r5, 1 - movs r4, 0xAC - lsls r4, 3 - adds r1, r4 - adds r1, r5 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - bl sub_80E6E48 - ldr r1, _080E6B9C @ =gSpecialVar_Result - ldr r0, [r6] - adds r0, r4 - adds r0, r5 - ldrh r0, [r0] - strh r0, [r1] - ldr r1, _080E6BA0 @ =gStringVar1 - adds r0, 0xA1 - strb r0, [r1] - movs r0, 0xFF - strb r0, [r1, 0x1] - b _080E6C80 - .align 2, 0 -_080E6B94: .4byte 0x0000056c -_080E6B98: .4byte 0x0000270e -_080E6B9C: .4byte gSpecialVar_Result -_080E6BA0: .4byte gStringVar1 -_080E6BA4: - ldr r0, [r6] - lsls r5, 1 - ldr r4, _080E6BCC @ =0x00000564 - adds r0, r4 - adds r2, r0, r5 - ldrh r1, [r2] - ldr r0, _080E6BD0 @ =0x00000595 - cmp r1, r0 - bhi _080E6BBA - adds r0, r1, 0x1 - strh r0, [r2] -_080E6BBA: - bl sub_80E6E48 - ldr r0, _080E6BD4 @ =gSpecialVar_Result - ldr r1, [r6] - adds r1, r4 - adds r1, r5 -_080E6BC6: - ldrh r1, [r1] - strh r1, [r0] - b _080E6C80 - .align 2, 0 -_080E6BCC: .4byte 0x00000564 -_080E6BD0: .4byte 0x00000595 -_080E6BD4: .4byte gSpecialVar_Result -_080E6BD8: - ldr r3, [r6] - ldr r0, _080E6BF8 @ =gSpecialVar_0x8005 - ldrb r0, [r0] - ldr r1, _080E6BFC @ =0x0000055c - adds r3, r1 - movs r1, 0x1 - ands r1, r0 - lsls r1, 1 - ldrb r2, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _080E6C80 - .align 2, 0 -_080E6BF8: .4byte gSpecialVar_0x8005 -_080E6BFC: .4byte 0x0000055c -_080E6C00: - ldr r0, [r6] - ldr r2, _080E6C10 @ =0x0000057a - adds r0, r2 - ldrh r1, [r0] - movs r0, 0x20 - bl SetGameStat - b _080E6C80 - .align 2, 0 -_080E6C10: .4byte 0x0000057a -_080E6C14: - ldr r0, [r6] - ldr r3, _080E6C2C @ =0x0000055e - adds r0, r3 - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0x3 - beq _080E6C80 - adds r0, r5, 0 - bl sub_80E5A38 - b _080E6C80 - .align 2, 0 -_080E6C2C: .4byte 0x0000055e -_080E6C30: - ldr r1, [r6] - ldr r0, _080E6C44 @ =0x0000055e - adds r1, r0 - adds r1, r5 - ldr r0, _080E6C48 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0xDA - ldrb r0, [r0] - b _080E6C7E - .align 2, 0 -_080E6C44: .4byte 0x0000055e -_080E6C48: .4byte gBattleStruct -_080E6C4C: - adds r0, r5, 0 - bl sub_80E7188 - ldr r1, _080E6C64 @ =gSaveBlock2Ptr - ldr r1, [r1] - lsls r2, r5, 1 - ldr r3, _080E6C68 @ =0x0000057c - adds r1, r3 - adds r1, r2 - strh r0, [r1] - b _080E6C80 - .align 2, 0 -_080E6C64: .4byte gSaveBlock2Ptr -_080E6C68: .4byte 0x0000057c -_080E6C6C: - ldr r1, [r6] - ldr r2, _080E6C88 @ =0x0000055c - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - movs r3, 0xB0 - lsls r3, 3 - adds r1, r3 -_080E6C7E: - strb r0, [r1] -_080E6C80: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E6C88: .4byte 0x0000055c - thumb_func_end SetBattleTowerProperty - - thumb_func_start BattleTowerUtil -BattleTowerUtil: @ 80E6C8C - push {r4,lr} - ldr r1, _080E6CB4 @ =gSaveBlock2Ptr - ldr r0, [r1] - ldr r2, _080E6CB8 @ =0x0000055c - adds r0, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r4, r0, 31 - ldr r0, _080E6CBC @ =gSpecialVar_0x8004 - ldrh r0, [r0] - adds r3, r1, 0 - cmp r0, 0xE - bls _080E6CA8 - b _080E6E08 -_080E6CA8: - lsls r0, 2 - ldr r1, _080E6CC0 @ =_080E6CC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080E6CB4: .4byte gSaveBlock2Ptr -_080E6CB8: .4byte 0x0000055c -_080E6CBC: .4byte gSpecialVar_0x8004 -_080E6CC0: .4byte _080E6CC4 - .align 2, 0 -_080E6CC4: - .4byte _080E6D00 - .4byte _080E6D14 - .4byte _080E6D2C - .4byte _080E6D3C - .4byte _080E6D58 - .4byte _080E6E08 - .4byte _080E6E08 - .4byte _080E6E08 - .4byte _080E6D70 - .4byte _080E6D8C - .4byte _080E6D9C - .4byte _080E6DB0 - .4byte _080E6DB8 - .4byte _080E6DD4 - .4byte _080E6DF4 -_080E6D00: - ldr r0, _080E6D0C @ =gSpecialVar_Result - ldr r1, [r3] - ldr r3, _080E6D10 @ =0x0000055e - adds r1, r3 - adds r1, r4 - b _080E6D60 - .align 2, 0 -_080E6D0C: .4byte gSpecialVar_Result -_080E6D10: .4byte 0x0000055e -_080E6D14: - ldr r0, _080E6D24 @ =gSpecialVar_Result - ldr r1, [r3] - ldr r2, _080E6D28 @ =0x0000055c - adds r1, r2 - ldrb r1, [r1] - lsls r1, 31 - b _080E6D7C - .align 2, 0 -_080E6D24: .4byte gSpecialVar_Result -_080E6D28: .4byte 0x0000055c -_080E6D2C: - ldr r2, _080E6D38 @ =gSpecialVar_Result - ldr r0, [r3] - lsls r1, r4, 1 - movs r3, 0xAC - lsls r3, 3 - b _080E6D44 - .align 2, 0 -_080E6D38: .4byte gSpecialVar_Result -_080E6D3C: - ldr r2, _080E6D50 @ =gSpecialVar_Result - ldr r0, [r3] - lsls r1, r4, 1 - ldr r3, _080E6D54 @ =0x00000564 -_080E6D44: - adds r0, r3 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - b _080E6E08 - .align 2, 0 -_080E6D50: .4byte gSpecialVar_Result -_080E6D54: .4byte 0x00000564 -_080E6D58: - ldr r0, _080E6D68 @ =gSpecialVar_Result - ldr r1, [r3] - ldr r2, _080E6D6C @ =0x0000056c - adds r1, r2 -_080E6D60: - ldrb r1, [r1] - strh r1, [r0] - b _080E6E08 - .align 2, 0 -_080E6D68: .4byte gSpecialVar_Result -_080E6D6C: .4byte 0x0000056c -_080E6D70: - ldr r0, _080E6D84 @ =gSpecialVar_Result - ldr r1, [r3] - ldr r3, _080E6D88 @ =0x0000055c - adds r1, r3 - ldrb r1, [r1] - lsls r1, 30 -_080E6D7C: - lsrs r1, 31 - strh r1, [r0] - b _080E6E08 - .align 2, 0 -_080E6D84: .4byte gSpecialVar_Result -_080E6D88: .4byte 0x0000055c -_080E6D8C: - adds r0, r4, 0 - bl sub_80E7188 - ldr r1, _080E6D98 @ =gSpecialVar_Result - strh r0, [r1] - b _080E6E08 - .align 2, 0 -_080E6D98: .4byte gSpecialVar_Result -_080E6D9C: - ldr r0, [r3] - ldr r1, _080E6DAC @ =0x0000057a - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x20 - bl SetGameStat - b _080E6E08 - .align 2, 0 -_080E6DAC: .4byte 0x0000057a -_080E6DB0: - adds r0, r4, 0 - bl sub_80E5A38 - b _080E6E08 -_080E6DB8: - ldr r1, [r3] - ldr r2, _080E6DCC @ =0x0000055e - adds r1, r2 - adds r1, r4 - ldr r0, _080E6DD0 @ =gBattleStruct - ldr r0, [r0] - adds r0, 0xDA - ldrb r0, [r0] - b _080E6E06 - .align 2, 0 -_080E6DCC: .4byte 0x0000055e -_080E6DD0: .4byte gBattleStruct -_080E6DD4: - adds r0, r4, 0 - bl sub_80E7188 - ldr r1, _080E6DEC @ =gSaveBlock2Ptr - ldr r1, [r1] - lsls r2, r4, 1 - ldr r3, _080E6DF0 @ =0x0000057c - adds r1, r3 - adds r1, r2 - strh r0, [r1] - b _080E6E08 - .align 2, 0 -_080E6DEC: .4byte gSaveBlock2Ptr -_080E6DF0: .4byte 0x0000057c -_080E6DF4: - ldr r1, [r3] - ldr r2, _080E6E10 @ =0x0000055c - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - movs r3, 0xB0 - lsls r3, 3 - adds r1, r3 -_080E6E06: - strb r0, [r1] -_080E6E08: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E6E10: .4byte 0x0000055c - thumb_func_end BattleTowerUtil - - thumb_func_start SetBattleTowerParty -SetBattleTowerParty: @ 80E6E14 - push {r4,r5,lr} - movs r2, 0 - ldr r5, _080E6E3C @ =gUnknown_203B0D4 - ldr r4, _080E6E40 @ =gSaveBlock2Ptr - ldr r3, _080E6E44 @ =0x0000056d -_080E6E1E: - adds r0, r2, r5 - ldr r1, [r4] - adds r1, r3 - adds r1, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _080E6E1E - bl ReducePlayerPartyToThree - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E6E3C: .4byte gUnknown_203B0D4 -_080E6E40: .4byte gSaveBlock2Ptr -_080E6E44: .4byte 0x0000056d - thumb_func_end SetBattleTowerParty - - thumb_func_start sub_80E6E48 -sub_80E6E48: @ 80E6E48 - push {r4-r6,lr} - ldr r6, _080E6E98 @ =gSaveBlock2Ptr - ldr r0, [r6] - ldr r1, _080E6E9C @ =0x0000055c - adds r0, r1 - ldrb r4, [r0] - lsls r4, 31 - lsrs r4, 31 - adds r0, r4, 0 - bl sub_80E7188 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, [r6] - lsls r4, 1 - movs r2, 0xAD - lsls r2, 3 - adds r0, r2 - adds r1, r0, r4 - ldrh r0, [r1] - cmp r0, r5 - bcs _080E6E76 - strh r5, [r1] -_080E6E76: - ldr r0, [r6] - adds r2, r0, r2 - ldr r3, _080E6EA0 @ =0x0000056a - adds r1, r0, r3 - ldrh r0, [r2] - ldrh r3, [r1] - cmp r0, r3 - bls _080E6EA8 - adds r5, r0, 0 - movs r0, 0x20 - adds r1, r5, 0 - bl SetGameStat - ldr r1, _080E6EA4 @ =0x0000270f - cmp r5, r1 - bhi _080E6EB8 - b _080E6ECC - .align 2, 0 -_080E6E98: .4byte gSaveBlock2Ptr -_080E6E9C: .4byte 0x0000055c -_080E6EA0: .4byte 0x0000056a -_080E6EA4: .4byte 0x0000270f -_080E6EA8: - ldrh r5, [r1] - movs r0, 0x20 - adds r1, r5, 0 - bl SetGameStat - ldr r1, _080E6EC4 @ =0x0000270f - cmp r5, r1 - bls _080E6ECC -_080E6EB8: - ldr r0, [r6] - ldr r2, _080E6EC8 @ =0x0000057a - adds r0, r2 - strh r1, [r0] - b _080E6ED4 - .align 2, 0 -_080E6EC4: .4byte 0x0000270f -_080E6EC8: .4byte 0x0000057a -_080E6ECC: - ldr r0, [r6] - ldr r3, _080E6EDC @ =0x0000057a - adds r0, r3 - strh r5, [r0] -_080E6ED4: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E6EDC: .4byte 0x0000057a - thumb_func_end sub_80E6E48 - - thumb_func_start sub_80E6EE0 -sub_80E6EE0: @ 80E6EE0 - push {r4-r6,lr} - ldr r0, _080E6F00 @ =gSaveBlock2Ptr - ldr r2, [r0] - adds r5, r2, 0 - adds r5, 0xB0 - ldr r1, _080E6F04 @ =0x0000055c - adds r0, r2, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r6, r0, 31 - ldrb r0, [r2, 0x8] - cmp r0, 0 - beq _080E6F0C - ldr r4, _080E6F08 @ =sFemaleTrainerClasses - b _080E6F0E - .align 2, 0 -_080E6F00: .4byte gSaveBlock2Ptr -_080E6F04: .4byte 0x0000055c -_080E6F08: .4byte sFemaleTrainerClasses -_080E6F0C: - ldr r4, _080E6FA0 @ =sMaleTrainerClasses -_080E6F0E: - ldrb r0, [r2, 0xA] - ldrb r1, [r2, 0xB] - adds r0, r1 - ldrb r1, [r2, 0xC] - adds r0, r1 - ldrb r1, [r2, 0xD] - adds r0, r1 - movs r1, 0 - bl __umodsi3 - adds r0, r4 - ldrb r0, [r0] - strb r6, [r5] - strb r0, [r5, 0x1] - adds r0, r5, 0 - adds r0, 0xC - ldr r4, _080E6FA4 @ =gSaveBlock2Ptr - ldr r1, [r4] - adds r1, 0xA - bl CopyTrainerId - adds r0, r5, 0x4 - ldr r1, [r4] - bl StringCopy7 - adds r0, r6, 0 - bl sub_80E7188 - strh r0, [r5, 0x2] - movs r4, 0 - ldr r6, _080E6FA8 @ =gSaveBlock1Ptr - ldr r3, _080E6FAC @ =0x00002cac - adds r2, r5, 0 - adds r2, 0x10 -_080E6F52: - lsls r0, r4, 1 - ldr r1, [r6] - adds r1, r3 - adds r1, r0 - ldrh r0, [r1] - strh r0, [r2] - adds r2, 0x2 - adds r4, 0x1 - cmp r4, 0x5 - ble _080E6F52 - movs r4, 0 -_080E6F68: - ldr r6, _080E6FA4 @ =gSaveBlock2Ptr - ldr r0, [r6] - ldr r1, _080E6FB0 @ =0x0000056d - adds r0, r1 - adds r0, r4 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080E6FB4 @ =gEnemyParty + 500 @ &gEnemyParty[5] - adds r0, r1 - movs r1, 0x2C - muls r1, r4 - adds r1, 0x1C - adds r1, r5, r1 - bl sub_803E23C - adds r4, 0x1 - cmp r4, 0x2 - ble _080E6F68 - ldr r0, [r6] - adds r0, 0xB0 - bl SetBattleTowerRecordChecksum - bl sub_80E6E48 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E6FA0: .4byte sMaleTrainerClasses -_080E6FA4: .4byte gSaveBlock2Ptr -_080E6FA8: .4byte gSaveBlock1Ptr -_080E6FAC: .4byte 0x00002cac -_080E6FB0: .4byte 0x0000056d -_080E6FB4: .4byte gEnemyParty + 500 @ &gEnemyParty[5] - thumb_func_end sub_80E6EE0 - - thumb_func_start SaveBattleTowerProgress -SaveBattleTowerProgress: @ 80E6FB8 - push {r4,r5,lr} - ldr r0, _080E703C @ =gSaveBlock2Ptr - ldr r1, [r0] - ldr r2, _080E7040 @ =0x0000055c - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r5, r0, 31 - ldr r0, _080E7044 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x3 - beq _080E6FD4 - cmp r0, 0 - bne _080E6FF2 -_080E6FD4: - lsls r2, r5, 1 - ldr r3, _080E7048 @ =0x00000564 - adds r0, r1, r3 - adds r0, r2 - ldrh r0, [r0] - cmp r0, 0x1 - bhi _080E6FEE - subs r3, 0x4 - adds r0, r1, r3 - adds r0, r2 - ldrh r0, [r0] - cmp r0, 0x1 - bls _080E6FF2 -_080E6FEE: - bl sub_80E6EE0 -_080E6FF2: - bl sub_80E712C - ldr r4, _080E703C @ =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, _080E704C @ =gBattleOutcome - ldrb r1, [r1] - ldr r2, _080E7050 @ =0x0000055d - adds r0, r2 - strb r1, [r0] - ldr r0, _080E7044 @ =gSpecialVar_0x8004 - ldrh r1, [r0] - cmp r1, 0x3 - beq _080E7016 - ldr r0, [r4] - ldr r3, _080E7054 @ =0x0000055e - adds r0, r3 - adds r0, r5 - strb r1, [r0] -_080E7016: - movs r0, 0x80 - lsls r0, 7 - movs r1, 0 - bl VarSet - ldr r1, [r4] - ldr r0, _080E7040 @ =0x0000055c - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x2 - orrs r0, r2 - strb r0, [r1] - movs r0, 0x2 - bl TrySavingData - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E703C: .4byte gSaveBlock2Ptr -_080E7040: .4byte 0x0000055c -_080E7044: .4byte gSpecialVar_0x8004 -_080E7048: .4byte 0x00000564 -_080E704C: .4byte gBattleOutcome -_080E7050: .4byte 0x0000055d -_080E7054: .4byte 0x0000055e - thumb_func_end SaveBattleTowerProgress - - thumb_func_start BattleTower_SoftReset -BattleTower_SoftReset: @ 80E7058 - push {lr} - bl DoSoftReset - pop {r0} - bx r0 - thumb_func_end BattleTower_SoftReset - - thumb_func_start sub_80E7064 -sub_80E7064: @ 80E7064 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _080E70F0 @ =gSaveBlock2Ptr - ldr r0, [r0] - movs r3, 0 - movs r2, 0 - adds r1, r0, 0 - adds r1, 0xB0 -_080E7076: - ldm r1!, {r0} - adds r3, r0 - adds r2, 0x1 - cmp r2, 0x27 - bls _080E7076 - ldr r5, _080E70F0 @ =gSaveBlock2Ptr - ldr r1, [r5] - movs r2, 0xA8 - lsls r2, 1 - adds r0, r1, r2 - ldr r0, [r0] - cmp r0, r3 - beq _080E7098 - adds r0, r1, 0 - adds r0, 0xB0 - bl ClearBattleTowerRecord -_080E7098: - movs r4, 0 - adds r7, r5, 0 - movs r6, 0xA4 - mov r8, r7 -_080E70A0: - adds r0, r4, 0 - muls r0, r6 - movs r3, 0xAA - lsls r3, 1 - adds r0, r3 - ldr r1, [r7] - movs r3, 0 - movs r2, 0 - adds r5, r4, 0x1 - adds r1, r0 -_080E70B4: - ldm r1!, {r0} - adds r3, r0 - adds r2, 0x1 - cmp r2, 0x27 - bls _080E70B4 - mov r0, r8 - ldr r2, [r0] - adds r1, r4, 0 - muls r1, r6 - movs r4, 0xFA - lsls r4, 1 - adds r0, r2, r4 - adds r0, r1 - ldr r0, [r0] - cmp r0, r3 - beq _080E70E0 - movs r3, 0xAA - lsls r3, 1 - adds r0, r1, r3 - adds r0, r2, r0 - bl ClearBattleTowerRecord -_080E70E0: - adds r4, r5, 0 - cmp r4, 0x4 - ble _080E70A0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E70F0: .4byte gSaveBlock2Ptr - thumb_func_end sub_80E7064 - - thumb_func_start SetBattleTowerRecordChecksum -SetBattleTowerRecordChecksum: @ 80E70F4 - push {r4,lr} - adds r2, r0, 0 - adds r2, 0xA0 - movs r1, 0 - str r1, [r2] - movs r3, 0 - adds r4, r0, 0 -_080E7102: - ldr r0, [r2] - ldm r4!, {r1} - adds r0, r1 - str r0, [r2] - adds r3, 0x1 - cmp r3, 0x27 - bls _080E7102 - pop {r4} - pop {r0} - bx r0 - thumb_func_end SetBattleTowerRecordChecksum - - thumb_func_start ClearBattleTowerRecord -ClearBattleTowerRecord: @ 80E7118 - push {lr} - movs r1, 0 - movs r2, 0 -_080E711E: - stm r0!, {r2} - adds r1, 0x1 - cmp r1, 0x28 - bls _080E711E - pop {r0} - bx r0 - thumb_func_end ClearBattleTowerRecord - - thumb_func_start sub_80E712C -sub_80E712C: @ 80E712C - push {r4,r5,lr} - ldr r4, _080E7174 @ =gSaveBlock2Ptr - ldr r0, [r4] - ldr r1, _080E7178 @ =0x0000048c - adds r0, r1 - bl sub_80E6150 - ldr r1, [r4] - ldr r3, _080E717C @ =gBattleMons - adds r0, r3, 0 - adds r0, 0x58 - ldrh r2, [r0] - ldr r5, _080E7180 @ =0x0000048a - adds r0, r1, r5 - strh r2, [r0] - ldrh r0, [r3] - movs r2, 0x91 - lsls r2, 3 - adds r1, r2 - strh r0, [r1] - movs r2, 0 - adds r5, r4, 0 - ldr r4, _080E7184 @ =0x00000494 - adds r3, 0x30 -_080E715C: - ldr r0, [r5] - adds r0, r4 - adds r0, r2 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x9 - ble _080E715C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E7174: .4byte gSaveBlock2Ptr -_080E7178: .4byte 0x0000048c -_080E717C: .4byte gBattleMons -_080E7180: .4byte 0x0000048a -_080E7184: .4byte 0x00000494 - thumb_func_end sub_80E712C - - thumb_func_start sub_80E7188 -sub_80E7188: @ 80E7188 - push {lr} - lsls r0, 24 - ldr r1, _080E71C0 @ =gSaveBlock2Ptr - ldr r3, [r1] - lsrs r0, 23 - ldr r2, _080E71C4 @ =0x00000564 - adds r1, r3, r2 - adds r1, r0 - ldrh r2, [r1] - subs r2, 0x1 - lsls r1, r2, 3 - subs r1, r2 - movs r2, 0xAC - lsls r2, 3 - adds r3, r2 - adds r3, r0 - ldr r0, _080E71C8 @ =0x0000ffff - adds r1, r0 - ldrh r3, [r3] - adds r1, r3 - lsls r1, 16 - lsrs r0, r1, 16 - ldr r1, _080E71CC @ =0x0000270f - cmp r0, r1 - bls _080E71BC - adds r0, r1, 0 -_080E71BC: - pop {r1} - bx r1 - .align 2, 0 -_080E71C0: .4byte gSaveBlock2Ptr -_080E71C4: .4byte 0x00000564 -_080E71C8: .4byte 0x0000ffff -_080E71CC: .4byte 0x0000270f - thumb_func_end sub_80E7188 - - thumb_func_start DetermineBattleTowerPrize -DetermineBattleTowerPrize: @ 80E71D0 - push {r4,r5,lr} - ldr r4, _080E7214 @ =gSaveBlock2Ptr - ldr r1, [r4] - ldr r2, _080E7218 @ =0x0000055c - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - lsls r0, 1 - adds r2, 0x8 - adds r1, r2 - adds r1, r0 - ldrh r0, [r1] - subs r0, 0x1 - cmp r0, 0x5 - ble _080E7220 - bl Random - ldr r4, [r4] - ldr r5, _080E721C @ =sLongStreakPrizes - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x9 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 15 - adds r0, r5 - ldrh r0, [r0] - movs r1, 0xAE - lsls r1, 3 - adds r4, r1 - b _080E7240 - .align 2, 0 -_080E7214: .4byte gSaveBlock2Ptr -_080E7218: .4byte 0x0000055c -_080E721C: .4byte sLongStreakPrizes -_080E7220: - bl Random - ldr r4, [r4] - ldr r5, _080E7248 @ =sShortStreakPrizes - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 15 - adds r0, r5 - ldrh r0, [r0] - movs r2, 0xAE - lsls r2, 3 - adds r4, r2 -_080E7240: - strh r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E7248: .4byte sShortStreakPrizes - thumb_func_end DetermineBattleTowerPrize - - thumb_func_start GiveBattleTowerPrize -GiveBattleTowerPrize: @ 80E724C - push {r4-r6,lr} - ldr r5, _080E7288 @ =gSaveBlock2Ptr - ldr r1, [r5] - ldr r2, _080E728C @ =0x0000055c - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r6, r0, 31 - movs r0, 0xAE - lsls r0, 3 - adds r1, r0 - ldrh r0, [r1] - movs r1, 0x1 - bl AddBagItem - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - bne _080E7298 - ldr r0, [r5] - movs r1, 0xAE - lsls r1, 3 - adds r0, r1 - ldrh r0, [r0] - ldr r1, _080E7290 @ =gStringVar1 - bl CopyItemName - ldr r0, _080E7294 @ =gSpecialVar_Result - strh r4, [r0] - b _080E72AA - .align 2, 0 -_080E7288: .4byte gSaveBlock2Ptr -_080E728C: .4byte 0x0000055c -_080E7290: .4byte gStringVar1 -_080E7294: .4byte gSpecialVar_Result -_080E7298: - ldr r1, _080E72B0 @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] - ldr r0, [r5] - ldr r2, _080E72B4 @ =0x0000055e - adds r0, r2 - adds r0, r6 - movs r1, 0x6 - strb r1, [r0] -_080E72AA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E72B0: .4byte gSpecialVar_Result -_080E72B4: .4byte 0x0000055e - thumb_func_end GiveBattleTowerPrize - - thumb_func_start AwardBattleTowerRibbons -AwardBattleTowerRibbons: @ 80E72B8 - push {r4-r7,lr} - ldr r0, _080E7334 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, _080E7338 @ =0x0000055c - adds r0, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - adds r1, r0, 0 - movs r7, 0x44 - cmp r1, 0 - beq _080E72D2 - movs r7, 0x45 -_080E72D2: - ldr r4, _080E733C @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r4] - adds r0, r1, 0 - bl sub_80E7188 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x37 - bls _080E7320 - movs r5, 0 - adds r6, r4, 0 -_080E72EA: - ldr r0, _080E7334 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, _080E7340 @ =0x0000056d - adds r0, r1 - adds r0, r5 - ldrb r0, [r0] - subs r0, 0x1 - movs r1, 0x64 - muls r1, r0 - ldr r0, _080E7344 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - adds r1, r7, 0 - bl GetMonData - cmp r0, 0 - bne _080E731A - movs r0, 0x1 - strh r0, [r6] - adds r0, r4, 0 - adds r1, r7, 0 - adds r2, r6, 0 - bl SetMonData -_080E731A: - adds r5, 0x1 - cmp r5, 0x2 - ble _080E72EA -_080E7320: - ldr r0, _080E733C @ =gSpecialVar_Result - ldrh r0, [r0] - cmp r0, 0 - beq _080E732E - movs r0, 0x2A - bl IncrementGameStat -_080E732E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E7334: .4byte gSaveBlock2Ptr -_080E7338: .4byte 0x0000055c -_080E733C: .4byte gSpecialVar_Result -_080E7340: .4byte 0x0000056d -_080E7344: .4byte gPlayerParty - thumb_func_end AwardBattleTowerRibbons - - thumb_func_start sub_80E7348 -sub_80E7348: @ 80E7348 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r1, _080E7368 @ =gSaveBlock2Ptr - ldr r2, [r1] - movs r0, 0x94 - lsls r0, 3 - adds r7, r2, r0 - ldrb r0, [r2, 0x8] - adds r5, r1, 0 - cmp r0, 0 - beq _080E7370 - ldr r4, _080E736C @ =sFemaleTrainerClasses - b _080E7372 - .align 2, 0 -_080E7368: .4byte gSaveBlock2Ptr -_080E736C: .4byte sFemaleTrainerClasses -_080E7370: - ldr r4, _080E7410 @ =sMaleTrainerClasses -_080E7372: - ldrb r0, [r2, 0xA] - ldrb r1, [r2, 0xB] - adds r0, r1 - ldrb r1, [r2, 0xC] - adds r0, r1 - ldrb r1, [r2, 0xD] - adds r0, r1 - movs r1, 0 - bl __umodsi3 - adds r0, r4 - ldrb r0, [r0] - strb r0, [r7, 0x1] - adds r0, r7, 0 - adds r0, 0xC - ldr r1, [r5] - adds r1, 0xA - bl CopyTrainerId - adds r0, r7, 0x4 - ldr r1, [r5] - bl StringCopy7 - movs r0, 0x1 - strh r0, [r7, 0x2] - movs r6, 0x7 - movs r4, 0 - ldr r0, _080E7414 @ =gSaveBlock1Ptr - mov r8, r0 - adds r5, r7, 0 - adds r5, 0x10 - ldr r1, _080E7418 @ =0x00002cac - mov r12, r1 - adds r3, r7, 0 - adds r3, 0x28 - adds r2, r7, 0 - adds r2, 0x1C -_080E73BC: - lsls r0, r4, 1 - mov r9, r0 - mov r1, r8 - ldr r0, [r1] - add r0, r12 - add r0, r9 - ldrh r0, [r0] - strh r0, [r5] - strh r6, [r2] - adds r0, r6, 0x6 - strh r0, [r3] - adds r6, 0x1 - adds r5, 0x2 - adds r3, 0x2 - adds r2, 0x2 - adds r4, 0x1 - cmp r4, 0x5 - ble _080E73BC - movs r4, 0 -_080E73E2: - movs r0, 0x64 - muls r0, r4 - ldr r1, _080E741C @ =gPlayerParty - adds r0, r1 - movs r1, 0x2C - muls r1, r4 - adds r1, 0x34 - adds r1, r7, r1 - bl sub_803E23C - adds r4, 0x1 - cmp r4, 0x2 - ble _080E73E2 - adds r0, r7, 0 - bl sub_80E7500 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E7410: .4byte sMaleTrainerClasses -_080E7414: .4byte gSaveBlock1Ptr -_080E7418: .4byte 0x00002cac -_080E741C: .4byte gPlayerParty - thumb_func_end sub_80E7348 - - thumb_func_start GetEreaderTrainerFrontSpriteId -GetEreaderTrainerFrontSpriteId: @ 80E7420 - ldr r1, _080E7434 @ =gFacilityClassToPicIndex - ldr r0, _080E7438 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r2, _080E743C @ =0x000004a1 - adds r0, r2 - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_080E7434: .4byte gFacilityClassToPicIndex -_080E7438: .4byte gSaveBlock2Ptr -_080E743C: .4byte 0x000004a1 - thumb_func_end GetEreaderTrainerFrontSpriteId - - thumb_func_start GetEreaderTrainerClassId -GetEreaderTrainerClassId: @ 80E7440 - ldr r1, _080E7454 @ =gFacilityClassToTrainerClass - ldr r0, _080E7458 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r2, _080E745C @ =0x000004a1 - adds r0, r2 - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_080E7454: .4byte gFacilityClassToTrainerClass -_080E7458: .4byte gSaveBlock2Ptr -_080E745C: .4byte 0x000004a1 - thumb_func_end GetEreaderTrainerClassId - - thumb_func_start CopyEReaderTrainerName5 -CopyEReaderTrainerName5: @ 80E7460 - push {r4,lr} - adds r3, r0, 0 - movs r2, 0 - ldr r0, _080E7488 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, _080E748C @ =0x000004a4 - adds r4, r0, r1 -_080E746E: - adds r0, r3, r2 - adds r1, r4, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x4 - ble _080E746E - adds r1, r3, r2 - movs r0, 0xFF - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E7488: .4byte gSaveBlock2Ptr -_080E748C: .4byte 0x000004a4 - thumb_func_end CopyEReaderTrainerName5 - - thumb_func_start ValidateEReaderTrainer -ValidateEReaderTrainer: @ 80E7490 - push {r4-r6,lr} - ldr r2, _080E74C0 @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r2] - ldr r1, _080E74C4 @ =gSaveBlock2Ptr - ldr r0, [r1] - movs r3, 0x94 - lsls r3, 3 - adds r5, r0, r3 - movs r4, 0 - movs r3, 0 - adds r6, r1, 0 - adds r1, r5, 0 -_080E74AA: - ldm r1!, {r0} - orrs r4, r0 - adds r3, 0x1 - cmp r3, 0x2D - bls _080E74AA - cmp r4, 0 - bne _080E74C8 - movs r0, 0x1 - strh r0, [r2] - b _080E74F6 - .align 2, 0 -_080E74C0: .4byte gSpecialVar_Result -_080E74C4: .4byte gSaveBlock2Ptr -_080E74C8: - movs r4, 0 - movs r3, 0 - adds r2, r5, 0 -_080E74CE: - ldm r2!, {r0} - adds r4, r0 - adds r3, 0x1 - cmp r3, 0x2D - bls _080E74CE - ldr r1, [r6] - movs r2, 0xAB - lsls r2, 3 - adds r0, r1, r2 - ldr r0, [r0] - cmp r0, r4 - beq _080E74F6 - movs r3, 0x94 - lsls r3, 3 - adds r0, r1, r3 - bl sub_80E7524 - ldr r1, _080E74FC @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] -_080E74F6: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E74FC: .4byte gSpecialVar_Result - thumb_func_end ValidateEReaderTrainer - - thumb_func_start sub_80E7500 -sub_80E7500: @ 80E7500 - push {r4,lr} - adds r2, r0, 0 - adds r2, 0xB8 - movs r1, 0 - str r1, [r2] - movs r3, 0 - adds r4, r0, 0 -_080E750E: - ldr r0, [r2] - ldm r4!, {r1} - adds r0, r1 - str r0, [r2] - adds r3, 0x1 - cmp r3, 0x2D - bls _080E750E - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80E7500 - - thumb_func_start sub_80E7524 -sub_80E7524: @ 80E7524 - push {lr} - movs r1, 0 - movs r2, 0 -_080E752A: - stm r0!, {r2} - adds r1, 0x1 - cmp r1, 0x2E - bls _080E752A - pop {r0} - bx r0 - thumb_func_end sub_80E7524 - - thumb_func_start PrintEReaderTrainerGreeting -PrintEReaderTrainerGreeting: @ 80E7538 - push {lr} - ldr r0, _080E754C @ =gSaveBlock2Ptr - ldr r0, [r0] - movs r1, 0x96 - lsls r1, 3 - adds r0, r1 - bl sub_80E678C - pop {r0} - bx r0 - .align 2, 0 -_080E754C: .4byte gSaveBlock2Ptr - thumb_func_end PrintEReaderTrainerGreeting - - thumb_func_start sub_80E7550 -sub_80E7550: @ 80E7550 - push {lr} - ldr r0, _080E7564 @ =gBattleOutcome - ldrb r0, [r0] - cmp r0, 0x3 - bne _080E756C - ldr r1, _080E7568 @ =gStringVar4 - movs r0, 0xFF - strb r0, [r1] - b _080E7590 - .align 2, 0 -_080E7564: .4byte gBattleOutcome -_080E7568: .4byte gStringVar4 -_080E756C: - cmp r0, 0x1 - bne _080E7584 - ldr r0, _080E7580 @ =gSaveBlock2Ptr - ldr r0, [r0] - movs r1, 0x99 - lsls r1, 3 - adds r0, r1 - bl sub_80E678C - b _080E7590 - .align 2, 0 -_080E7580: .4byte gSaveBlock2Ptr -_080E7584: - ldr r0, _080E7594 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, _080E7598 @ =0x000004bc - adds r0, r1 - bl sub_80E678C -_080E7590: - pop {r0} - bx r0 - .align 2, 0 -_080E7594: .4byte gSaveBlock2Ptr -_080E7598: .4byte 0x000004bc - thumb_func_end sub_80E7550 - - thumb_func_start Dummy_TryEnableBravoTrainerBattleTower -Dummy_TryEnableBravoTrainerBattleTower: @ 80E759C - push {lr} - movs r0, 0x1 -_080E75A0: - subs r0, 0x1 - cmp r0, 0 - bge _080E75A0 - pop {r0} - bx r0 - thumb_func_end Dummy_TryEnableBravoTrainerBattleTower - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index 63a894247..24125485e 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -12663,7 +12663,7 @@ sub_811C04C: @ 811C04C ldr r6, _0811C0CC @ =gPlayerParty ldr r5, _0811C0D0 @ =gEnemyParty _0811C05C: - ldr r0, _0811C0D4 @ =gUnknown_203B0D4 + ldr r0, _0811C0D4 @ =gSelectedOrderFromParty adds r0, r4, r0 ldrb r0, [r0] subs r0, 0x1 @@ -12717,7 +12717,7 @@ _0811C096: .align 2, 0 _0811C0CC: .4byte gPlayerParty _0811C0D0: .4byte gEnemyParty -_0811C0D4: .4byte gUnknown_203B0D4 +_0811C0D4: .4byte gSelectedOrderFromParty _0811C0D8: .4byte gTrainerBattleOpponent_A _0811C0DC: .4byte CB2_InitBattle thumb_func_end sub_811C04C @@ -13029,7 +13029,7 @@ _0811C3BC: movs r1, 0 movs r2, 0x20 bl memset - ldr r0, _0811C3DC @ =gUnknown_203B0D4 + ldr r0, _0811C3DC @ =gSelectedOrderFromParty ldrb r1, [r0] ldrb r0, [r0, 0x1] cmn r1, r0 @@ -13038,7 +13038,7 @@ _0811C3BC: b _0811C3E2 .align 2, 0 _0811C3D8: .4byte gBlockSendBuffer -_0811C3DC: .4byte gUnknown_203B0D4 +_0811C3DC: .4byte gSelectedOrderFromParty _0811C3E0: movs r0, 0x51 _0811C3E2: diff --git a/asm/party_menu.s b/asm/party_menu.s index aab14bbf0..dfe4e02c0 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -1152,7 +1152,7 @@ sub_811F388: @ 811F388 muls r0, r4 ldr r1, _0811F3AC @ =gPlayerParty adds r0, r1 - ldr r5, _0811F3B0 @ =gUnknown_203B0D4 + ldr r5, _0811F3B0 @ =gSelectedOrderFromParty bl sub_8127550 lsls r0, 24 cmp r0, 0 @@ -1163,7 +1163,7 @@ sub_811F388: @ 811F388 b _0811F3F8 .align 2, 0 _0811F3AC: .4byte gPlayerParty -_0811F3B0: .4byte gUnknown_203B0D4 +_0811F3B0: .4byte gSelectedOrderFromParty _0811F3B4: adds r1, 0x2 lsls r1, 24 @@ -11131,7 +11131,7 @@ _0812418C: adds r0, r1 mov r10, r0 _081241B6: - ldr r0, _0812420C @ =gUnknown_203B0D4 + ldr r0, _0812420C @ =gSelectedOrderFromParty adds r4, r5, r0 ldrb r0, [r4] cmp r0, 0 @@ -11168,7 +11168,7 @@ _081241FC: .4byte gUnknown_8416B16 _08124200: .4byte gUnknown_203B09C _08124204: .4byte gUnknown_203B0A0 _08124208: .4byte gTasks -_0812420C: .4byte gUnknown_203B0D4 +_0812420C: .4byte gSelectedOrderFromParty _08124210: .4byte gUnknown_203B0B4 _08124214: .4byte sub_811FB28 _08124218: @@ -11237,7 +11237,7 @@ sub_8124278: @ 8124278 adds r0, 0xD bl sub_8121CE4 movs r4, 0 - ldr r3, _081242C0 @ =gUnknown_203B0D4 + ldr r3, _081242C0 @ =gSelectedOrderFromParty ldr r6, _081242C4 @ =gUnknown_203B0A0 adds r5, r6, 0 _0812429E: @@ -11257,7 +11257,7 @@ _0812429E: b _081242E6 .align 2, 0 _081242BC: .4byte gUnknown_203B09C -_081242C0: .4byte gUnknown_203B0D4 +_081242C0: .4byte gSelectedOrderFromParty _081242C4: .4byte gUnknown_203B0A0 _081242C8: ldrb r0, [r3, 0x1] @@ -11287,7 +11287,7 @@ _081242E6: movs r0, 0x1 movs r2, 0x1 bl sub_8121C70 - ldr r4, _08124348 @ =gUnknown_203B0D4 + ldr r4, _08124348 @ =gSelectedOrderFromParty ldrb r0, [r4] cmp r0, 0 beq _08124312 @@ -11324,7 +11324,7 @@ _08124328: bx r0 .align 2, 0 _08124344: .4byte gUnknown_203B0B4 -_08124348: .4byte gUnknown_203B0D4 +_08124348: .4byte gSelectedOrderFromParty _0812434C: .4byte gTasks _08124350: .4byte sub_811FB28 thumb_func_end sub_8124278 @@ -17411,14 +17411,14 @@ _081274F8: .4byte sub_812773C thumb_func_start sub_81274FC sub_81274FC: @ 81274FC push {lr} - ldr r0, _0812750C @ =gUnknown_203B0D4 + ldr r0, _0812750C @ =gSelectedOrderFromParty movs r1, 0 movs r2, 0x3 bl memset pop {r0} bx r0 .align 2, 0 -_0812750C: .4byte gUnknown_203B0D4 +_0812750C: .4byte gSelectedOrderFromParty thumb_func_end sub_81274FC thumb_func_start sub_8127510 @@ -17564,18 +17564,18 @@ sub_81275F8: @ 81275F8 _08127618: .4byte gPlayerParty _0812761C: .4byte gUnknown_203B0A0 _08127620: - ldr r1, _0812762C @ =gUnknown_203B0D4 + ldr r1, _0812762C @ =gSelectedOrderFromParty ldrb r0, [r1, 0x2] cmp r0, 0 bne _08127630 movs r0, 0x11 b _08127702 .align 2, 0 -_0812762C: .4byte gUnknown_203B0D4 +_0812762C: .4byte gSelectedOrderFromParty _08127630: movs r5, 0 _08127632: - ldr r2, _081276DC @ =gUnknown_203B0D4 + ldr r2, _081276DC @ =gSelectedOrderFromParty adds r4, r2, r5 ldrb r0, [r4] movs r1, 0x64 @@ -17618,7 +17618,7 @@ _0812767E: adds r0, r2 movs r1, 0 ldrsh r4, [r0, r1] - ldr r2, _081276DC @ =gUnknown_203B0D4 + ldr r2, _081276DC @ =gSelectedOrderFromParty adds r6, r2, r5 ldrb r0, [r6] muls r0, r7 @@ -17660,18 +17660,18 @@ _081276D0: bls _08127632 b _08127700 .align 2, 0 -_081276DC: .4byte gUnknown_203B0D4 +_081276DC: .4byte gSelectedOrderFromParty _081276E0: .4byte gUnknown_203B09C _081276E4: .4byte 0x00000236 _081276E8: - ldr r2, _081276F4 @ =gUnknown_203B0D4 + ldr r2, _081276F4 @ =gSelectedOrderFromParty ldrb r0, [r2, 0x1] cmp r0, 0 bne _08127700 movs r0, 0x12 b _08127702 .align 2, 0 -_081276F4: .4byte gUnknown_203B0D4 +_081276F4: .4byte gSelectedOrderFromParty _081276F8: movs r0, 0x13 b _08127702 @@ -17696,7 +17696,7 @@ sub_8127710: @ 8127710 lsls r0, 24 lsrs r2, r0, 24 movs r1, 0 - ldr r3, _08127728 @ =gUnknown_203B0D4 + ldr r3, _08127728 @ =gSelectedOrderFromParty _0812771A: adds r0, r1, r3 ldrb r0, [r0] @@ -17705,7 +17705,7 @@ _0812771A: movs r0, 0x1 b _08127738 .align 2, 0 -_08127728: .4byte gUnknown_203B0D4 +_08127728: .4byte gSelectedOrderFromParty _0812772C: adds r0, r1, 0x1 lsls r0, 24 @@ -17740,7 +17740,7 @@ sub_812773C: @ 812773C .align 2, 0 _08127764: .4byte gTasks _08127768: - ldr r0, _08127780 @ =gUnknown_203B0D4 + ldr r0, _08127780 @ =gSelectedOrderFromParty ldrb r0, [r0] cmp r0, 0 beq _08127784 @@ -17750,7 +17750,7 @@ _08127768: bl sub_811FA78 b _0812779E .align 2, 0 -_08127780: .4byte gUnknown_203B0D4 +_08127780: .4byte gSelectedOrderFromParty _08127784: movs r0, 0x1A bl PlaySE diff --git a/asm/script_pokemon_util_80A0058.s b/asm/script_pokemon_util_80A0058.s index 525293081..81b3b7efe 100644 --- a/asm/script_pokemon_util_80A0058.s +++ b/asm/script_pokemon_util_80A0058.s @@ -396,7 +396,7 @@ _080A034C: .4byte sub_80A0350 thumb_func_start sub_80A0350 sub_80A0350: @ 80A0350 push {lr} - ldr r0, _080A0360 @ =gUnknown_203B0D4 + ldr r0, _080A0360 @ =gSelectedOrderFromParty ldrb r1, [r0] cmp r1, 0 bne _080A0368 @@ -404,7 +404,7 @@ sub_80A0350: @ 80A0350 strh r1, [r0] b _080A036E .align 2, 0 -_080A0360: .4byte gUnknown_203B0D4 +_080A0360: .4byte gSelectedOrderFromParty _080A0364: .4byte gSpecialVar_Result _080A0368: ldr r1, _080A0378 @ =gSpecialVar_Result @@ -438,7 +438,7 @@ _080A0398: .4byte sub_80A039C thumb_func_start sub_80A039C sub_80A039C: @ 80A039C push {r4,lr} - ldr r0, _080A03B0 @ =gUnknown_203B0D4 + ldr r0, _080A03B0 @ =gSelectedOrderFromParty ldrb r4, [r0] cmp r4, 0 bne _080A03B8 @@ -447,7 +447,7 @@ sub_80A039C: @ 80A039C strh r4, [r0] b _080A03C2 .align 2, 0 -_080A03B0: .4byte gUnknown_203B0D4 +_080A03B0: .4byte gSelectedOrderFromParty _080A03B4: .4byte gSpecialVar_Result _080A03B8: bl ReducePlayerPartyToThree @@ -481,7 +481,7 @@ ReducePlayerPartyToThree: @ 80A03D8 ldr r6, _080A0454 @ =gPlayerParty adds r4, r7, 0 _080A03F4: - ldr r0, _080A0458 @ =gUnknown_203B0D4 + ldr r0, _080A0458 @ =gSelectedOrderFromParty adds r1, r5, r0 ldrb r0, [r1] cmp r0, 0 @@ -528,7 +528,7 @@ _080A042C: bx r0 .align 2, 0 _080A0454: .4byte gPlayerParty -_080A0458: .4byte gUnknown_203B0D4 +_080A0458: .4byte gSelectedOrderFromParty _080A045C: .4byte 0x05000096 thumb_func_end ReducePlayerPartyToThree diff --git a/include/battle_tower.h b/include/battle_tower.h index b7b106107..9bb93f1c2 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -12,7 +12,7 @@ struct BattleTowerTrainer u8 trainerClass; u8 name[3]; u8 teamFlags; - u16 speech[6]; + u16 greeting[6]; }; struct BattleTowerPokemonTemplate @@ -26,7 +26,7 @@ struct BattleTowerPokemonTemplate }; u16 sub_8164FCC(u8, u8); -void sub_80E7524(struct BattleTowerEReaderTrainer *); +void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); void ValidateEReaderTrainer(void); u8 GetBattleTowerTrainerFrontSpriteId(void); u8 GetEreaderTrainerFrontSpriteId(void); diff --git a/include/party_menu.h b/include/party_menu.h index c07371a5d..6c81a248c 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -45,6 +45,7 @@ extern u8 gUnknown_203B0C0; extern u8 gUnknown_203B0C1; extern u8 gUnknown_203B0DC[3]; extern void (*gUnknown_3005E98)(u8 taskId, TaskFunc func); +extern u8 gSelectedOrderFromParty[3]; bool8 FieldCallback_PrepareFadeInFromMenu(void); bool8 MonKnowsMove(struct Pokemon *, u16); diff --git a/include/script_pokemon_util_80A0058.h b/include/script_pokemon_util_80A0058.h index 768e838dd..b63a7b0ef 100644 --- a/include/script_pokemon_util_80A0058.h +++ b/include/script_pokemon_util_80A0058.h @@ -5,5 +5,6 @@ bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3 bool8 ScriptGiveEgg(u16 species); void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot); void sp000_heal_pokemon(void); +void ReducePlayerPartyToThree(void); #endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H diff --git a/ld_script.txt b/ld_script.txt index 50e6faea4..b2a1f11e7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -209,7 +209,6 @@ SECTIONS { asm/learn_move.o(.text); src/fldeff_softboiled.o(.text); src/battle_tower.o(.text); - asm/battle_tower.o(.text); src/battle_controller_oak_old_man.o(.text); src/player_pc.o(.text); src/intro.o(.text); diff --git a/src/battle_tower.c b/src/battle_tower.c index 0ed20d6c9..421d9cf3b 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3,6 +3,22 @@ #include "random.h" #include "text.h" #include "event_data.h" +#include "string_util.h" +#include "battle_message.h" +#include "data.h" +#include "pokedex.h" +#include "overworld.h" +#include "battle_transition.h" +#include "easy_chat.h" +#include "battle_setup.h" +#include "battle_main.h" +#include "task.h" +#include "battle.h" +#include "party_menu.h" +#include "new_game.h" +#include "save.h" +#include "item.h" +#include "script_pokemon_util_80A0058.h" #include "constants/species.h" #include "constants/items.h" #include "constants/moves.h" @@ -10,11 +26,21 @@ #include "constants/vars.h" #include "constants/map_objects.h" -void sub_80E5A38(u8 levelType); +EWRAM_DATA u16 gUnknown_203AAB8 = 0; + +#define TakeBravoTrainerBattleTowerOffTheAir() + +void ResetBattleTowerStreak(u8 levelType); void sub_80E5E5C(u8 trainerClass); -u16 sub_80E7188(u8 levelType); -void sub_80E7064(void); -void sub_80E6564(u16 species, u16 heldItem, u8 unused, u8 levelType, u8 monLevel, u16 *validSpecies, u16 *validHeldItems, u8 *numValid); +void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid); +void SaveCurrentWinStreak(void); +void ValidateBattleTowerRecordChecksums(void); +void SetBattleTowerRecordChecksum(struct BattleTowerRecord * record); +void ClearBattleTowerRecord(struct BattleTowerRecord * record); +void sub_80E712C(void); +u16 GetCurrentBattleTowerWinStreak(u8 levelType); +void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer * eReaderTrainer); +void PrintEReaderTrainerFarewellMessage(void); #include "data/battle_tower/trainers.h" @@ -153,12 +179,12 @@ void sub_80E5970(void) { default: case 0: - sub_80E5A38(levelType); + ResetBattleTowerStreak(levelType); if (count == 0) VarSet(VAR_0x4000, 5); break; case 1: - sub_80E5A38(levelType); + ResetBattleTowerStreak(levelType); VarSet(VAR_0x4000, 1); count++; break; @@ -182,10 +208,10 @@ void sub_80E5970(void) } if (gSaveBlock2Ptr->battleTower.var_4AE[0] == 3 && gSaveBlock2Ptr->battleTower.var_4AE[1] == 3) VarSet(VAR_0x4000, 5); - sub_80E7064(); + ValidateBattleTowerRecordChecksums(); } -void sub_80E5A38(u8 levelType) +void ResetBattleTowerStreak(u8 levelType) { gSaveBlock2Ptr->battleTower.var_4AE[levelType] = 0; gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] = 1; @@ -219,7 +245,7 @@ bool8 sub_80E5A70(u8 levelType, u16 winStreak) if (gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) return FALSE; - sub_80E6564( + CheckMonBattleTowerBanlist( gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i].species, gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i].heldItem, 1, @@ -245,7 +271,7 @@ bool8 sub_80E5B14(void) numCandidates = 0; battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; - winStreak = sub_80E7188(battleTowerLevelType); + winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); if (sub_80E5A70(battleTowerLevelType, winStreak)) { gSaveBlock2Ptr->battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; @@ -478,7 +504,7 @@ u8 sub_80E60E4(void) } } -void sub_80E6150(u8 *dest) +void get_trainer_name(u8 *dest) { s32 i; if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) @@ -500,7 +526,7 @@ void sub_80E6150(u8 *dest) } #ifdef NONMATCHING // r6/r7 swap -void sub_80E61DC(void) +void FillBattleTowerTrainerParty(void) { s32 partyIndex; s32 i; @@ -674,7 +700,7 @@ void sub_80E61DC(void) } #else NAKED -void sub_80E61DC(void) +void FillBattleTowerTrainerParty(void) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" @@ -1050,3 +1076,715 @@ void sub_80E61DC(void) "_080E64BC: .4byte sBattleTowerHeldItems"); } #endif //NONMATCHING + +u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 count) +{ + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + { + if (count == 0) + StringAppend(gStringVar1, gUnknown_83FE859); + count++; + StringAppend(gStringVar1, gSpeciesNames[species]); + switch (count) + { + case 2: + StringAppend(gStringVar1, gUnknown_83FE85E); + break; + case 5: + case 8: + case 11: + StringAppend(gStringVar1, gUnknown_83FE85C); + break; + default: + StringAppend(gStringVar1, gUnknown_83FE859); + break; + } + } + return count; +} + +void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid) +{ + s32 i; + u32 counter = 0; + + if (species == SPECIES_EGG || species == SPECIES_NONE) + return; + + while (1) + { + if (gBattleTowerBannedSpecies[counter] == 0xFFFF) + break; + + if (gBattleTowerBannedSpecies[counter] == species) + break; + + counter++; + } + + if (gBattleTowerBannedSpecies[counter] != 0xFFFF) + return; + + if (battleTowerLevelType == 0 && monLevel > 50) + return; + + for (i = 0; i < *numValid && validPartySpecies[i] != species ; i++); + if (i != *numValid) + return; + + if (heldItem != 0) + { + for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++); + if (i != *numValid) + return; + } + + validPartySpecies[*numValid] = species; + validPartyHeldItems[*numValid] = heldItem; + *numValid = *numValid + 1; +} + +void CheckPartyBattleTowerBanlist(void) +{ + s32 i; + u16 species2; + u16 heldItem; + u8 level; + u16 hp; + u32 numBanlistCaught; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 counter; + + counter = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + + CheckMonBattleTowerBanlist(species2, heldItem, hp, gSpecialVar_Result, level, validPartySpecies, validPartyHeldItems, &counter); + } + + if (counter < 3) + { + gStringVar1[0] = EOS; + gSpecialVar_0x8004 = 1; + counter = 0; + + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) + counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter); + + i = StringLength(gStringVar1); + gStringVar1[i - 1] = EOS; + if (counter < 3) + StringAppend(gStringVar1, gUnknown_83FE860); + else + StringAppend(gStringVar1, gUnknown_83FE864); + } + else + { + gSpecialVar_0x8004 = 0; + gSaveBlock2Ptr->battleTower.battleTowerLevelType = gSpecialVar_Result; + } +} + +void PrintBattleTowerTrainerMessage(const u16 *greeting) +{ + s32 i; + if (EC_DoesEasyChatStringFitOnLine(greeting, 3, 2, 18)) + { + ConvertEasyChatWordsToString(gStringVar4, greeting, 2, 3); + i = 0; + while (gStringVar4[i++] != CHAR_NEWLINE) + ; + while (gStringVar4[i] != CHAR_NEWLINE) + i++; + gStringVar4[i] = CHAR_PROMPT_SCROLL; + } + else + { + ConvertEasyChatWordsToString(gStringVar4, greeting, 3, 2); + } +} + +void PrintBattleTowerTrainerGreeting(void) +{ + if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.greeting); + else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + PrintBattleTowerTrainerMessage(gBattleTowerTrainers[gSaveBlock2Ptr->battleTower.battleTowerTrainerId].greeting); + else + PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.records[gSaveBlock2Ptr->battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting); +} + +void sub_80E6854(void) +{ + s32 i; + u16 heldItem; + + switch (gUnknown_203AAB8) + { + case 0: + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gSaveBlock1Ptr->playerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + break; + case 2: + PrintEReaderTrainerFarewellMessage(); + break; + } + + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void sub_80E68C4(u8 taskId) +{ + if (BT_IsDone() == TRUE) + { + gMain.savedCallback = sub_80E6854; + CleanupOverworldWindowsAndTilemaps(); + SetMainCallback2(CB2_InitBattle); + DestroyTask(taskId); + } +} + + +void StartSpecialBattle(void) +{ + s32 i; + u16 heldItem; + u8 transition; + + gUnknown_203AAB8 = gSpecialVar_0x8004; + switch (gUnknown_203AAB8) + { + case 0: // battle tower battle + gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent_A = 0; + + FillBattleTowerTrainerParty(); + + CreateTask(sub_80E68C4, 1); + PlayMapChosenOrBattleBGM(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BT_StartOnField(transition); + break; + case 1: // secret base battle + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gSaveBlock1Ptr->playerParty[i], MON_DATA_HELD_ITEM, &heldItem); + } + + CreateTask(sub_80E68C4, 1); + PlayMapChosenOrBattleBGM(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BT_StartOnField(transition); + break; + case 2: // e-reader trainer battle + ZeroEnemyPartyMons(); + + for (i = 0; i < 3; i++) + CreateBattleTowerMon(&gEnemyParty[i], &gSaveBlock2Ptr->battleTower.ereaderTrainer.party[i]); + + gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent_A = 0; + + CreateTask(sub_80E68C4, 1); + PlayMapChosenOrBattleBGM(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BT_StartOnField(transition); + break; + } +} + +void SetBattleTowerProperty(void) +{ + s32 i; + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + // Weird cast required to match + // Leftover from RS macro? + *((u8 *)&gBattleStruct->arenaTurnCounter) = gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType]; + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 1: + gSaveBlock2Ptr->battleTower.battleTowerLevelType = gSpecialVar_0x8005; + break; + case 2: + gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 3: + gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 4: + gSaveBlock2Ptr->battleTower.battleTowerTrainerId = gSpecialVar_0x8005; + break; + case 5: + for (i = 0; i < 3; i++) + gSaveBlock2Ptr->battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i]; + break; + case 6: + if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer); + if (gSaveBlock2Ptr->battleTower.totalBattleTowerWins < 9999) + gSaveBlock2Ptr->battleTower.totalBattleTowerWins++; + gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType]++; + SaveCurrentWinStreak(); + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType]; + gStringVar1[0] = gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; + gStringVar1[1] = 0xFF; + break; + case 7: + if (gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430) + gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType]++; + SaveCurrentWinStreak(); + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType]; + break; + case 8: + gSaveBlock2Ptr->battleTower.unk_554 = gSpecialVar_0x8005; + break; + case 9: + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak); + break; + case 11: + if (gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] != 3) + ResetBattleTowerStreak(battleTowerLevelType); + break; + case 12: + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = *((u8 *)&gBattleStruct->arenaTurnCounter); + break; + case 13: + gSaveBlock2Ptr->battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 14: + gSaveBlock2Ptr->battleTower.lastStreakLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + break; + } +} + +void BattleTowerUtil(void) +{ + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType]; + break; + case 1: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + break; + case 2: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType]; + break; + case 3: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType]; + break; + case 4: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.battleTowerTrainerId; + break; + case 5: + case 6: + case 7: + break; + case 8: + gSpecialVar_Result = gSaveBlock2Ptr->battleTower.unk_554; + break; + case 9: + gSpecialVar_Result = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak); + break; + case 11: + ResetBattleTowerStreak(battleTowerLevelType); + break; + case 12: + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = *((u8 *)&gBattleStruct->arenaTurnCounter); + break; + case 13: + gSaveBlock2Ptr->battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 14: + gSaveBlock2Ptr->battleTower.lastStreakLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + break; + } +} + +void SetBattleTowerParty(void) +{ + s32 i; + + for (i = 0; i < 3; i++) + gSelectedOrderFromParty[i] = gSaveBlock2Ptr->battleTower.selectedPartyMons[i]; + + ReducePlayerPartyToThree(); +} + +void SaveCurrentWinStreak(void) +{ + u8 levelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + u16 streak = GetCurrentBattleTowerWinStreak(levelType); + + if (gSaveBlock2Ptr->battleTower.recordWinStreaks[levelType] < streak) + gSaveBlock2Ptr->battleTower.recordWinStreaks[levelType] = streak; + + if (gSaveBlock2Ptr->battleTower.recordWinStreaks[0] > gSaveBlock2Ptr->battleTower.recordWinStreaks[1]) + { + streak = gSaveBlock2Ptr->battleTower.recordWinStreaks[0]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + + if (streak > 9999) + gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak = 9999; + else + gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak = streak; + } + else + { + streak = gSaveBlock2Ptr->battleTower.recordWinStreaks[1]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + + if (streak > 9999) + gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak = 9999; + else + gSaveBlock2Ptr->battleTower.bestBattleTowerWinStreak = streak; + } +} + +void sub_80E6EE0(void) +{ + s32 i; + u8 trainerClass; + struct BattleTowerRecord *playerRecord = &gSaveBlock2Ptr->battleTower.playerRecord; + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + if (gSaveBlock2Ptr->playerGender != MALE) + { + trainerClass = sFemaleTrainerClasses[(gSaveBlock2Ptr->playerTrainerId[0] + gSaveBlock2Ptr->playerTrainerId[1] + + gSaveBlock2Ptr->playerTrainerId[2] + gSaveBlock2Ptr->playerTrainerId[3]) % NELEMS(sFemaleTrainerClasses)]; + } + else + { + trainerClass = sMaleTrainerClasses[(gSaveBlock2Ptr->playerTrainerId[0] + gSaveBlock2Ptr->playerTrainerId[1] + + gSaveBlock2Ptr->playerTrainerId[2] + gSaveBlock2Ptr->playerTrainerId[3]) % NELEMS(sMaleTrainerClasses)]; + } + + playerRecord->battleTowerLevelType = battleTowerLevelType; + playerRecord->trainerClass = trainerClass; + + CopyTrainerId(playerRecord->trainerId, gSaveBlock2Ptr->playerTrainerId); + StringCopy7(playerRecord->name, gSaveBlock2Ptr->playerName); + + playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + + for (i = 0; i < 6; i++) + playerRecord->greeting[i] = gSaveBlock1Ptr->easyChatBattleStart[i]; + + for (i = 0; i < 3; i++) + sub_803E23C(&gPlayerParty[gSaveBlock2Ptr->battleTower.selectedPartyMons[i] - 1], &playerRecord->party[i]); + + SetBattleTowerRecordChecksum(&gSaveBlock2Ptr->battleTower.playerRecord); + SaveCurrentWinStreak(); +} + +void SaveBattleTowerProgress(void) +{ + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) + { + if (gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 + || gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) + sub_80E6EE0(); + } + + sub_80E712C(); + + gSaveBlock2Ptr->battleTower.battleOutcome = gBattleOutcome; + + if (gSpecialVar_0x8004 != 3) + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; + + VarSet(VAR_0x4000, 0); + gSaveBlock2Ptr->battleTower.unk_554 = 1; + TrySavingData(SAVE_EREADER); +} + +void BattleTower_SoftReset(void) +{ + DoSoftReset(); +} + +void ValidateBattleTowerRecordChecksums(void) +{ + u32 i; + s32 recordIndex; + struct BattleTowerRecord *record; + u32 checksum; + + record = &gSaveBlock2Ptr->battleTower.playerRecord; + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + checksum += ((u32 *)record)[i]; + + if (gSaveBlock2Ptr->battleTower.playerRecord.checksum != checksum) + ClearBattleTowerRecord(&gSaveBlock2Ptr->battleTower.playerRecord); + + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + record = &gSaveBlock2Ptr->battleTower.records[recordIndex]; + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + checksum += ((u32 *)record)[i]; + + if (gSaveBlock2Ptr->battleTower.records[recordIndex].checksum != checksum) + ClearBattleTowerRecord(&gSaveBlock2Ptr->battleTower.records[recordIndex]); + } +} + +void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) +{ + u32 i; + + record->checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + record->checksum += ((u32 *)record)[i]; +} + +void ClearBattleTowerRecord(struct BattleTowerRecord *record) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++) + ((u32 *)record)[i] = 0; +} + +void sub_80E712C(void) +{ + s32 i; + + get_trainer_name(gSaveBlock2Ptr->battleTower.defeatedByTrainerName); + gSaveBlock2Ptr->battleTower.defeatedBySpecies = gBattleMons[1].species; + gSaveBlock2Ptr->battleTower.firstMonSpecies = gBattleMons[0].species; + + for (i = 0; i < POKEMON_NAME_LENGTH; i++) + gSaveBlock2Ptr->battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; +} + +u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) +{ + u16 winStreak = ((gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + + gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType]; + + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +void DetermineBattleTowerPrize(void) +{ + u8 levelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + if (gSaveBlock2Ptr->battleTower.curStreakChallengesNum[levelType] - 1 > 5) + gSaveBlock2Ptr->battleTower.prizeItem = sLongStreakPrizes[Random() % NELEMS(sLongStreakPrizes)]; + else + gSaveBlock2Ptr->battleTower.prizeItem = sShortStreakPrizes[Random() % NELEMS(sShortStreakPrizes)]; +} + +void GiveBattleTowerPrize(void) +{ + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + if (AddBagItem(gSaveBlock2Ptr->battleTower.prizeItem, 1) == TRUE) + { + CopyItemName(gSaveBlock2Ptr->battleTower.prizeItem, gStringVar1); + gSpecialVar_Result = 1; + } + else + { + gSpecialVar_Result = 0; + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = 6; + } +} + +void AwardBattleTowerRibbons(void) +{ + s32 i; + u32 partyIndex; + struct Pokemon *pokemon; + u8 ribbonType; + u8 battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; + + if (battleTowerLevelType != 0) + ribbonType = MON_DATA_VICTORY_RIBBON; + else + ribbonType = MON_DATA_WINNING_RIBBON; + + gSpecialVar_Result = 0; + + if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55) + { + for (i = 0; i < 3; i++) + { + partyIndex = gSaveBlock2Ptr->battleTower.selectedPartyMons[i] - 1; + pokemon = &gPlayerParty[partyIndex]; + if (!GetMonData(pokemon, ribbonType)) + { + gSpecialVar_Result = 1; + SetMonData(pokemon, ribbonType, &gSpecialVar_Result); + } + } + } + + if (gSpecialVar_Result != 0) + IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); +} + +// This is a leftover debugging function that is used to populate the E-Reader +// trainer with the player's current data. +void Debug_FillEReaderTrainerWithPlayerData(void) +{ + struct BattleTowerEReaderTrainer *ereaderTrainer; + s32 i; + s32 j; + + ereaderTrainer = &gSaveBlock2Ptr->battleTower.ereaderTrainer; + + if (gSaveBlock2Ptr->playerGender != MALE) + { + ereaderTrainer->trainerClass = sFemaleTrainerClasses[(gSaveBlock2Ptr->playerTrainerId[0] + gSaveBlock2Ptr->playerTrainerId[1] + + gSaveBlock2Ptr->playerTrainerId[2] + gSaveBlock2Ptr->playerTrainerId[3]) % NELEMS(sFemaleTrainerClasses)]; + } + else + { + ereaderTrainer->trainerClass = sMaleTrainerClasses[(gSaveBlock2Ptr->playerTrainerId[0] + gSaveBlock2Ptr->playerTrainerId[1] + + gSaveBlock2Ptr->playerTrainerId[2] + gSaveBlock2Ptr->playerTrainerId[3]) % NELEMS(sMaleTrainerClasses)]; + } + + CopyTrainerId(ereaderTrainer->trainerId, gSaveBlock2Ptr->playerTrainerId); + StringCopy7(ereaderTrainer->name, gSaveBlock2Ptr->playerName); + + ereaderTrainer->winStreak = 1; + + j = 7; + for (i = 0; i < 6; i++) + { + ereaderTrainer->greeting[i] = gSaveBlock1Ptr->easyChatBattleStart[i]; + ereaderTrainer->farewellPlayerLost[i] = j; + ereaderTrainer->farewellPlayerWon[i] = j + 6; + j++; + } + + for (i = 0; i < 3; i++) + sub_803E23C(&gPlayerParty[i], &ereaderTrainer->party[i]); + + SetEReaderTrainerChecksum(ereaderTrainer); +} + +u8 GetEreaderTrainerFrontSpriteId(void) +{ + return gFacilityClassToPicIndex[gSaveBlock2Ptr->battleTower.ereaderTrainer.trainerClass]; +} + +u8 GetEreaderTrainerClassId(void) +{ + return gFacilityClassToTrainerClass[gSaveBlock2Ptr->battleTower.ereaderTrainer.trainerClass]; +} + +void CopyEReaderTrainerName5(u8 *trainerName) +{ + s32 i; + + for (i = 0; i < 5; i++) + trainerName[i] = gSaveBlock2Ptr->battleTower.ereaderTrainer.name[i]; + + trainerName[i] = EOS; +} + +// Checks if the saved E-Reader trainer is valid. +void ValidateEReaderTrainer(void) +{ + u32 i; + u32 checksum; + struct BattleTowerEReaderTrainer *ereaderTrainer; + + gSpecialVar_Result = 0; + ereaderTrainer = &gSaveBlock2Ptr->battleTower.ereaderTrainer; + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + checksum |= ((u32 *)ereaderTrainer)[i]; + + if (checksum == 0) + { + gSpecialVar_Result = 1; + return; + } + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + checksum += ((u32 *)ereaderTrainer)[i]; + + if (gSaveBlock2Ptr->battleTower.ereaderTrainer.checksum != checksum) + { + ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer); + gSpecialVar_Result = 1; + } +} + +void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + s32 i; + + ereaderTrainer->checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i]; +} + +void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++) + ((u32 *)ereaderTrainer)[i] = 0; +} + +void PrintEReaderTrainerGreeting(void) +{ + PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.greeting); +} + +void PrintEReaderTrainerFarewellMessage(void) +{ + if (gBattleOutcome == B_OUTCOME_DREW) + gStringVar4[0] = EOS; + else if (gBattleOutcome == B_OUTCOME_WON) + PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.farewellPlayerWon); + else + PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.farewellPlayerLost); +} + +void Dummy_TryEnableBravoTrainerBattleTower(void) +{ + s32 i; + + for (i = 0; i < 2; i++) + { + if (gSaveBlock2Ptr->battleTower.var_4AE[i] == 1) + TakeBravoTrainerBattleTowerOffTheAir(); + } +} diff --git a/src/mevent.c b/src/mevent.c index 671e30ee0..5ed001d09 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -588,7 +588,7 @@ void DestroyWonderCard(void) ClearRamScript(); sub_806E2D0(); sub_806E370(); - sub_80E7524(&gSaveBlock2Ptr->battleTower.ereaderTrainer); + ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer); } bool32 sub_8143F68(const struct MEWonderCardData * data) diff --git a/sym_ewram.txt b/sym_ewram.txt index 14a9fad1e..27b3067ec 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -75,6 +75,7 @@ gUnknown_2031DEA: @ 2031DEA gUnknown_2031DEC: @ 2031DEC .space 0x10 + .align 2 .include "src/fieldmap.o" gUnknown_2036E28: @ 2036E28 @@ -189,7 +190,9 @@ gAnimBattlerSpecies: @ 2037F1C gUnknown_2037F24: @ 2037F24 .space 0x4 + .align 2 .include "src/battle_anim_mons.o" + .align 2 .include "src/title_screen.o" .align 2 @@ -219,6 +222,7 @@ gUnknown_20386A8: @ 20386A8 gFieldEffectArguments: @ 20386E0 .space 0x20 + .align 2 .include "src/scanline_effect.o" .align 2 @@ -352,10 +356,12 @@ gUnknown_2039984: @ 2039984 gUnknown_203998C: @ 203998C .space 0x4 + .align 2 .include "src/money.o" .align 2 .include "src/safari_zone.o" + .align 2 .include "src/item_use.o" .align 2 @@ -413,7 +419,6 @@ gPlayerFacingPosition: @ 2039A04 .align 2 .include "src/field_specials.o" - .align 2 .include "src/battle_records.o" @@ -423,7 +428,9 @@ gUnknown_2039A20: @ 2039A20 gUnknown_2039A24: @ 2039A24 .space 0x4 + .align 2 .include "src/coins.o" + .align 2 .include "src/battle_transition.o" gUnknown_2039A30: @ 2039A30 @@ -432,7 +439,9 @@ gUnknown_2039A30: @ 2039A30 gUnknown_2039A34: @ 2039A34 .space 0x4 + .align 2 .include "src/save.o" + .align 2 .include "src/mystery_event_script.o" gUnknown_203AAB0: @ 203AAB0 @@ -441,14 +450,12 @@ gUnknown_203AAB0: @ 203AAB0 gUnknown_203AAB4: @ 203AAB4 .space 0x4 -gUnknown_203AAB8: @ 203AAB8 - .space 0x4 - + .align 2 + .include "src/battle_tower.o" .align 2 .include "src/player_pc.o" .align 2 .include "src/intro.o" - .align 2 .include "src/hall_of_fame.o" .align 2 @@ -496,6 +503,7 @@ gUnknown_203ACEC: @ 203ACEC gUnknown_203ACF0: @ 203ACF0 .space 0x4 + .align 2 .include "src/list_menu.o" .align 2 gUnknown_203ACFC: @ 203ACFC @@ -539,22 +547,16 @@ gSpecialVar_ItemId: @ 203AD30 .align 2 .include "src/bag.o" - .align 2 .include "src/trainer_pokemon_sprites.o" - .align 2 .include "src/vs_seeker.o" - .align 2 .include "src/item_pc.o" - .align 2 .include "src/mailbox_pc.o" - .align 2 .include "src/menu.o" - .align 2 .include "src/quest_log.o" @@ -640,7 +642,7 @@ gUnknown_203B0CC: @ 203B0CC gUnknown_203B0D0: @ 203B0D0 .space 0x4 -gUnknown_203B0D4: @ 203B0D4 +gSelectedOrderFromParty: @ 203B0D4 .space 0x4 gUnknown_203B0D8: @ 203B0D8 From 807fe60b22bf3cd3deadd2bb40898f3a2727218b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Nov 2019 14:53:30 -0500 Subject: [PATCH 03/33] Document battle_tower.c --- asm/battle_message.s | 4 +- data/specials.inc | 2 +- include/battle.h | 2 +- include/constants/battle_tower.h | 7 ++ src/battle_tower.c | 140 +++++++++++++++---------------- 5 files changed, 81 insertions(+), 74 deletions(-) diff --git a/asm/battle_message.s b/asm/battle_message.s index 18d4106e1..6f4cb083c 100644 --- a/asm/battle_message.s +++ b/asm/battle_message.s @@ -1686,7 +1686,7 @@ _080D8038: ands r0, r1 cmp r0, 0 beq _080D8058 - bl sub_80E60E4 + bl GetBattleTowerTrainerClassNameId lsls r0, 24 lsrs r0, 24 movs r1, 0xD @@ -1781,7 +1781,7 @@ _080D80F0: cmp r0, 0 beq _080D810C mov r0, sp - bl get_trainer_name + bl GetBattleTowerTrainerName b _080D8382 .align 2, 0 _080D8108: .4byte gBattleTypeFlags diff --git a/data/specials.inc b/data/specials.inc index 6a0707184..6c1cbfa8e 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -239,7 +239,7 @@ gSpecials:: @ 815FD60 def_special nullsub_75 def_special nullsub_75 def_special Special_GetLeadMonFriendship - def_special sub_80E5970 + def_special ScrSpecial_BattleTowerMapScript2 def_special ChooseNextBattleTowerTrainer def_special CheckPartyBattleTowerBanlist def_special PrintBattleTowerTrainerGreeting diff --git a/include/battle.h b/include/battle.h index 40a2eba04..d0ea787ef 100644 --- a/include/battle.h +++ b/include/battle.h @@ -432,7 +432,7 @@ struct BattleStruct u16 changedItems[MAX_BATTLERS_COUNT]; u8 intimidateBattler; u8 switchInItemsCounter; - u8 arenaTurnCounter; // not used in FR? + u8 field_DA; // not used in FR? u8 turnSideTracker; u8 fillerDC[0xDF-0xDC]; u8 givenExpMons; diff --git a/include/constants/battle_tower.h b/include/constants/battle_tower.h index b0080caff..6e37d15ec 100644 --- a/include/constants/battle_tower.h +++ b/include/constants/battle_tower.h @@ -72,4 +72,11 @@ #define BATTLE_TOWER_ITEM_LUCKY_PUNCH 61 #define BATTLE_TOWER_ITEM_GANLON_BERRY 62 +#define BTSPECIAL_TEST 0 +#define BTSPECIAL_RESULT_SAVE_SCUM 1 +#define BTSPECIAL_RESULT_WON7 2 +#define BTSPECIAL_RESULT_LOST 3 +#define BTSPECIAL_RESULT_QUICKSAVE 4 +#define BTSPECIAL_RESULT_INACTIVE 5 + #endif //GUARD_CONSTANTS_BATTLE_TOWER_H diff --git a/src/battle_tower.c b/src/battle_tower.c index 421d9cf3b..56eaf93de 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -26,25 +26,26 @@ #include "constants/vars.h" #include "constants/map_objects.h" -EWRAM_DATA u16 gUnknown_203AAB8 = 0; +static EWRAM_DATA u16 sSpecialVar_0x8004_Copy = 0; #define TakeBravoTrainerBattleTowerOffTheAir() +#define ewram160FB (*((u8 *)&gBattleStruct->field_DA)) -void ResetBattleTowerStreak(u8 levelType); -void sub_80E5E5C(u8 trainerClass); -void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid); -void SaveCurrentWinStreak(void); -void ValidateBattleTowerRecordChecksums(void); -void SetBattleTowerRecordChecksum(struct BattleTowerRecord * record); -void ClearBattleTowerRecord(struct BattleTowerRecord * record); -void sub_80E712C(void); -u16 GetCurrentBattleTowerWinStreak(u8 levelType); -void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer * eReaderTrainer); -void PrintEReaderTrainerFarewellMessage(void); +static void ResetBattleTowerStreak(u8 levelType); +static void SetBattleTowerTrainerGfxId(u8 trainerClass); +static void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid); +static void SaveCurrentWinStreak(void); +static void ValidateBattleTowerRecordChecksums(void); +static void SetBattleTowerRecordChecksum(struct BattleTowerRecord * record); +static void ClearBattleTowerRecord(struct BattleTowerRecord * record); +static void PopulateBravoTrainerBattleTowerLostData(void); +static u16 GetCurrentBattleTowerWinStreak(u8 levelType); +static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer * eReaderTrainer); +static void PrintEReaderTrainerFarewellMessage(void); #include "data/battle_tower/trainers.h" -const u16 sBattleTowerHeldItems[] = { +static const u16 sBattleTowerHeldItems[] = { ITEM_NONE, ITEM_KINGS_ROCK, ITEM_SITRUS_BERRY, @@ -113,22 +114,22 @@ const u16 sBattleTowerHeldItems[] = { #include "data/battle_tower/level_50_mons.h" #include "data/battle_tower/level_100_mons.h" -const u8 sMaleTrainerClasses[] = +static const u8 sMaleTrainerClasses[] = { }; -const u8 sFemaleTrainerClasses[] = +static const u8 sFemaleTrainerClasses[] = { }; -const u8 sMaleTrainerGfx[] = +static const u8 sMaleTrainerGfx[] = { }; -const u8 sFemaleTrainerGfx[] = +static const u8 sFemaleTrainerGfx[] = { }; @@ -147,7 +148,7 @@ const u16 gBattleTowerBannedSpecies[] = { 0xFFFF }; -const u16 sShortStreakPrizes[] = { +static const u16 sShortStreakPrizes[] = { ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, @@ -156,7 +157,7 @@ const u16 sShortStreakPrizes[] = { ITEM_ZINC }; -const u16 sLongStreakPrizes[] = { +static const u16 sLongStreakPrizes[] = { ITEM_BRIGHT_POWDER, ITEM_WHITE_HERB, ITEM_QUICK_CLAW, @@ -168,7 +169,7 @@ const u16 sLongStreakPrizes[] = { ITEM_CHOICE_BAND }; -void sub_80E5970(void) +void ScrSpecial_BattleTowerMapScript2(void) { u8 count = 0; s32 levelType; @@ -185,40 +186,40 @@ void sub_80E5970(void) break; case 1: ResetBattleTowerStreak(levelType); - VarSet(VAR_0x4000, 1); + VarSet(VAR_0x4000, BTSPECIAL_RESULT_SAVE_SCUM); count++; break; case 3: break; case 4: - VarSet(VAR_0x4000, 2); + VarSet(VAR_0x4000, BTSPECIAL_RESULT_WON7); count++; break; case 5: - VarSet(VAR_0x4000, 3); + VarSet(VAR_0x4000, BTSPECIAL_RESULT_LOST); count++; break; case 6: break; case 2: - VarSet(VAR_0x4000, 4); + VarSet(VAR_0x4000, BTSPECIAL_RESULT_QUICKSAVE); count++; break; } } if (gSaveBlock2Ptr->battleTower.var_4AE[0] == 3 && gSaveBlock2Ptr->battleTower.var_4AE[1] == 3) - VarSet(VAR_0x4000, 5); + VarSet(VAR_0x4000, BTSPECIAL_RESULT_INACTIVE); ValidateBattleTowerRecordChecksums(); } -void ResetBattleTowerStreak(u8 levelType) +static void ResetBattleTowerStreak(u8 levelType) { gSaveBlock2Ptr->battleTower.var_4AE[levelType] = 0; gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] = 1; gSaveBlock2Ptr->battleTower.curStreakChallengesNum[levelType] = 1; } -bool8 sub_80E5A70(u8 levelType, u16 winStreak) +static bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak) { u8 trainerTeamLevel; u8 monLevel; @@ -259,7 +260,7 @@ bool8 sub_80E5A70(u8 levelType, u16 winStreak) return (numValid == 3); } -bool8 sub_80E5B14(void) +static bool8 ChooseSpecialBattleTowerTrainer(void) { s32 recordIndex, i; u8 battleTowerLevelType; @@ -272,7 +273,7 @@ bool8 sub_80E5B14(void) battleTowerLevelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - if (sub_80E5A70(battleTowerLevelType, winStreak)) + if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak)) { gSaveBlock2Ptr->battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; retVal = TRUE; @@ -323,9 +324,9 @@ void ChooseNextBattleTowerTrainer(void) bool8 levelType; levelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; - if (sub_80E5B14()) + if (ChooseSpecialBattleTowerTrainer()) { - sub_80E5E5C(gSaveBlock2Ptr->battleTower.battleTowerTrainerId); + SetBattleTowerTrainerGfxId(gSaveBlock2Ptr->battleTower.battleTowerTrainerId); gSaveBlock2Ptr->battleTower.battledTrainerIds[gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] - 1] = gSaveBlock2Ptr->battleTower.battleTowerTrainerId; return; } @@ -372,23 +373,24 @@ void ChooseNextBattleTowerTrainer(void) gSaveBlock2Ptr->battleTower.battleTowerTrainerId = trainerId; } - sub_80E5E5C(gSaveBlock2Ptr->battleTower.battleTowerTrainerId); + SetBattleTowerTrainerGfxId(gSaveBlock2Ptr->battleTower.battleTowerTrainerId); // Don't bother saving this trainer, since it's the last one in the challenge. if (gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] < 7) gSaveBlock2Ptr->battleTower.battledTrainerIds[gSaveBlock2Ptr->battleTower.curChallengeBattleNum[levelType] - 1] = gSaveBlock2Ptr->battleTower.battleTowerTrainerId; } -void sub_80E5E5C(u8 trainerClass) +static void SetBattleTowerTrainerGfxId(u8 trainerClass) { VarSet(VAR_OBJ_GFX_ID_0, MAP_OBJ_GFX_YOUNGSTER); } void SetEReaderTrainerGfxId(void) { - sub_80E5E5C(BATTLE_TOWER_EREADER_TRAINER_ID); + SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID); } -void sub_80E5E7C(struct BattleTowerRecord * record0) +// Unreferenced; formerly used by Record Mixing in R/S +static void UpdateOrInsertReceivedBattleTowerRecord(struct BattleTowerRecord * record0) { s32 i; s32 j; @@ -488,7 +490,7 @@ u8 GetBattleTowerTrainerFrontSpriteId(void) } } -u8 sub_80E60E4(void) +u8 GetBattleTowerTrainerClassNameId(void) { if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { @@ -504,7 +506,7 @@ u8 sub_80E60E4(void) } } -void get_trainer_name(u8 *dest) +void GetBattleTowerTrainerName(u8 *dest) { s32 i; if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) @@ -526,7 +528,7 @@ void get_trainer_name(u8 *dest) } #ifdef NONMATCHING // r6/r7 swap -void FillBattleTowerTrainerParty(void) +static void FillBattleTowerTrainerParty(void) { s32 partyIndex; s32 i; @@ -700,7 +702,7 @@ void FillBattleTowerTrainerParty(void) } #else NAKED -void FillBattleTowerTrainerParty(void) +static void FillBattleTowerTrainerParty(void) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" @@ -1077,7 +1079,7 @@ void FillBattleTowerTrainerParty(void) } #endif //NONMATCHING -u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 count) +static u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 count) { if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) { @@ -1103,7 +1105,7 @@ u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 count) return count; } -void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid) +static void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid) { s32 i; u32 counter = 0; @@ -1191,7 +1193,7 @@ void CheckPartyBattleTowerBanlist(void) } } -void PrintBattleTowerTrainerMessage(const u16 *greeting) +static void PrintBattleTowerTrainerMessage(const u16 *greeting) { s32 i; if (EC_DoesEasyChatStringFitOnLine(greeting, 3, 2, 18)) @@ -1220,12 +1222,12 @@ void PrintBattleTowerTrainerGreeting(void) PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.records[gSaveBlock2Ptr->battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting); } -void sub_80E6854(void) +static void CB2_FinishEReaderBattle(void) { s32 i; u16 heldItem; - switch (gUnknown_203AAB8) + switch (sSpecialVar_0x8004_Copy) { case 0: break; @@ -1244,11 +1246,11 @@ void sub_80E6854(void) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } -void sub_80E68C4(u8 taskId) +static void Task_WaitBT(u8 taskId) { if (BT_IsDone() == TRUE) { - gMain.savedCallback = sub_80E6854; + gMain.savedCallback = CB2_FinishEReaderBattle; CleanupOverworldWindowsAndTilemaps(); SetMainCallback2(CB2_InitBattle); DestroyTask(taskId); @@ -1262,8 +1264,8 @@ void StartSpecialBattle(void) u16 heldItem; u8 transition; - gUnknown_203AAB8 = gSpecialVar_0x8004; - switch (gUnknown_203AAB8) + sSpecialVar_0x8004_Copy = gSpecialVar_0x8004; + switch (sSpecialVar_0x8004_Copy) { case 0: // battle tower battle gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); @@ -1271,7 +1273,7 @@ void StartSpecialBattle(void) FillBattleTowerTrainerParty(); - CreateTask(sub_80E68C4, 1); + CreateTask(Task_WaitBT, 1); PlayMapChosenOrBattleBGM(0); transition = BattleSetup_GetBattleTowerBattleTransition(); BT_StartOnField(transition); @@ -1283,7 +1285,7 @@ void StartSpecialBattle(void) SetMonData(&gSaveBlock1Ptr->playerParty[i], MON_DATA_HELD_ITEM, &heldItem); } - CreateTask(sub_80E68C4, 1); + CreateTask(Task_WaitBT, 1); PlayMapChosenOrBattleBGM(0); transition = BattleSetup_GetBattleTowerBattleTransition(); BT_StartOnField(transition); @@ -1297,7 +1299,7 @@ void StartSpecialBattle(void) gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); gTrainerBattleOpponent_A = 0; - CreateTask(sub_80E68C4, 1); + CreateTask(Task_WaitBT, 1); PlayMapChosenOrBattleBGM(0); transition = BattleSetup_GetBattleTowerBattleTransition(); BT_StartOnField(transition); @@ -1313,9 +1315,7 @@ void SetBattleTowerProperty(void) switch (gSpecialVar_0x8004) { case 0: - // Weird cast required to match - // Leftover from RS macro? - *((u8 *)&gBattleStruct->arenaTurnCounter) = gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType]; + ewram160FB = gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType]; gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; break; case 1: @@ -1364,7 +1364,7 @@ void SetBattleTowerProperty(void) ResetBattleTowerStreak(battleTowerLevelType); break; case 12: - gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = *((u8 *)&gBattleStruct->arenaTurnCounter); + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = ewram160FB; break; case 13: gSaveBlock2Ptr->battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); @@ -1413,7 +1413,7 @@ void BattleTowerUtil(void) ResetBattleTowerStreak(battleTowerLevelType); break; case 12: - gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = *((u8 *)&gBattleStruct->arenaTurnCounter); + gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = ewram160FB; break; case 13: gSaveBlock2Ptr->battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); @@ -1434,7 +1434,7 @@ void SetBattleTowerParty(void) ReducePlayerPartyToThree(); } -void SaveCurrentWinStreak(void) +static void SaveCurrentWinStreak(void) { u8 levelType = gSaveBlock2Ptr->battleTower.battleTowerLevelType; u16 streak = GetCurrentBattleTowerWinStreak(levelType); @@ -1464,7 +1464,7 @@ void SaveCurrentWinStreak(void) } } -void sub_80E6EE0(void) +static void SetPlayerBattleTowerRecord(void) { s32 i; u8 trainerClass; @@ -1508,17 +1508,17 @@ void SaveBattleTowerProgress(void) { if (gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 || gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) - sub_80E6EE0(); + SetPlayerBattleTowerRecord(); } - sub_80E712C(); + PopulateBravoTrainerBattleTowerLostData(); gSaveBlock2Ptr->battleTower.battleOutcome = gBattleOutcome; if (gSpecialVar_0x8004 != 3) gSaveBlock2Ptr->battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; - VarSet(VAR_0x4000, 0); + VarSet(VAR_0x4000, BTSPECIAL_TEST); gSaveBlock2Ptr->battleTower.unk_554 = 1; TrySavingData(SAVE_EREADER); } @@ -1528,7 +1528,7 @@ void BattleTower_SoftReset(void) DoSoftReset(); } -void ValidateBattleTowerRecordChecksums(void) +static void ValidateBattleTowerRecordChecksums(void) { u32 i; s32 recordIndex; @@ -1555,7 +1555,7 @@ void ValidateBattleTowerRecordChecksums(void) } } -void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) +static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) { u32 i; @@ -1564,7 +1564,7 @@ void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) record->checksum += ((u32 *)record)[i]; } -void ClearBattleTowerRecord(struct BattleTowerRecord *record) +static void ClearBattleTowerRecord(struct BattleTowerRecord *record) { u32 i; @@ -1572,11 +1572,11 @@ void ClearBattleTowerRecord(struct BattleTowerRecord *record) ((u32 *)record)[i] = 0; } -void sub_80E712C(void) +static void PopulateBravoTrainerBattleTowerLostData(void) { s32 i; - get_trainer_name(gSaveBlock2Ptr->battleTower.defeatedByTrainerName); + GetBattleTowerTrainerName(gSaveBlock2Ptr->battleTower.defeatedByTrainerName); gSaveBlock2Ptr->battleTower.defeatedBySpecies = gBattleMons[1].species; gSaveBlock2Ptr->battleTower.firstMonSpecies = gBattleMons[0].species; @@ -1584,7 +1584,7 @@ void sub_80E712C(void) gSaveBlock2Ptr->battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; } -u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) +static u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) { u16 winStreak = ((gSaveBlock2Ptr->battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2Ptr->battleTower.curChallengeBattleNum[battleTowerLevelType]; @@ -1656,7 +1656,7 @@ void AwardBattleTowerRibbons(void) // This is a leftover debugging function that is used to populate the E-Reader // trainer with the player's current data. -void Debug_FillEReaderTrainerWithPlayerData(void) +static void Debug_FillEReaderTrainerWithPlayerData(void) { struct BattleTowerEReaderTrainer *ereaderTrainer; s32 i; @@ -1746,7 +1746,7 @@ void ValidateEReaderTrainer(void) } } -void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) +static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) { s32 i; @@ -1768,7 +1768,7 @@ void PrintEReaderTrainerGreeting(void) PrintBattleTowerTrainerMessage(gSaveBlock2Ptr->battleTower.ereaderTrainer.greeting); } -void PrintEReaderTrainerFarewellMessage(void) +static void PrintEReaderTrainerFarewellMessage(void) { if (gBattleOutcome == B_OUTCOME_DREW) gStringVar4[0] = EOS; From aba284d3bed0551b1bc12dbd17e2c63b2d5ce1e1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Nov 2019 15:59:49 -0500 Subject: [PATCH 04/33] Update comment on BattleStruct.field_DA --- include/battle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/battle.h b/include/battle.h index d0ea787ef..122ccc894 100644 --- a/include/battle.h +++ b/include/battle.h @@ -432,7 +432,7 @@ struct BattleStruct u16 changedItems[MAX_BATTLERS_COUNT]; u8 intimidateBattler; u8 switchInItemsCounter; - u8 field_DA; // not used in FR? + u8 field_DA; // battle tower related u8 turnSideTracker; u8 fillerDC[0xDF-0xDC]; u8 givenExpMons; From 5acaa57a2afb3c53cde22b8d2e3bc35f37e72b16 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 10 Nov 2019 07:04:21 +0800 Subject: [PATCH 05/33] FillBattleTowerTrainerParty --- src/battle_tower.c | 392 +-------------------------------------------- 1 file changed, 8 insertions(+), 384 deletions(-) diff --git a/src/battle_tower.c b/src/battle_tower.c index 56eaf93de..6720e9f1b 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -527,7 +527,6 @@ void GetBattleTowerTrainerName(u8 *dest) dest[i] = EOS; } -#ifdef NONMATCHING // r6/r7 swap static void FillBattleTowerTrainerParty(void) { s32 partyIndex; @@ -593,9 +592,12 @@ static void FillBattleTowerTrainerParty(void) else if (gSaveBlock2Ptr->battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { // Load E-Reader trainer's party. - for (partyIndex = 0; partyIndex < 3; partyIndex++) - CreateBattleTowerMon(&gEnemyParty[partyIndex], &gSaveBlock2Ptr->battleTower.ereaderTrainer.party[partyIndex]); - return; + do + { + for (partyIndex = 0; partyIndex < 3; partyIndex++) + CreateBattleTowerMon(&gEnemyParty[partyIndex], &gSaveBlock2Ptr->battleTower.ereaderTrainer.party[partyIndex]); + return; + } while (0); } else { @@ -652,7 +654,7 @@ static void FillBattleTowerTrainerParty(void) // Ensure this pokemon's held item isn't a duplicate. for (i = 0; i < partyIndex; i++) { - if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 + if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != ITEM_NONE && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) break; } @@ -700,384 +702,6 @@ static void FillBattleTowerTrainerParty(void) } } } -#else -NAKED -static void FillBattleTowerTrainerParty(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x28\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp, 0x18]\n" - "\tmovs r1, 0x3C\n" - "\tstr r1, [sp, 0x1C]\n" - "\tadd r4, sp, 0xC\n" - "\tmovs r0, 0xFF\n" - "\tstrb r0, [r4]\n" - "\tbl ZeroEnemyPartyMons\n" - "\tldr r1, _080E6210 @ =gSaveBlock2Ptr\n" - "\tldr r0, [r1]\n" - "\tldr r2, _080E6214 @ =0x0000056c\n" - "\tadds r0, r2\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0x13\n" - "\tbhi _080E6218\n" - "\tmovs r3, 0x6\n" - "\tstr r3, [sp, 0x14]\n" - "\tb _080E62F4\n" - "\t.align 2, 0\n" - "_080E6210: .4byte gSaveBlock2Ptr\n" - "_080E6214: .4byte 0x0000056c\n" - "_080E6218:\n" - "\tcmp r0, 0x1D\n" - "\tbhi _080E6226\n" - "\tmovs r0, 0x9\n" - "\tstr r0, [sp, 0x14]\n" - "\tmovs r1, 0x1E\n" - "\tstr r1, [sp, 0x18]\n" - "\tb _080E62F4\n" - "_080E6226:\n" - "\tcmp r0, 0x27\n" - "\tbhi _080E6234\n" - "\tmovs r2, 0xC\n" - "\tstr r2, [sp, 0x14]\n" - "\tmovs r3, 0x3C\n" - "\tstr r3, [sp, 0x18]\n" - "\tb _080E62F4\n" - "_080E6234:\n" - "\tcmp r0, 0x31\n" - "\tbhi _080E6242\n" - "\tmovs r0, 0xF\n" - "\tstr r0, [sp, 0x14]\n" - "\tmovs r1, 0x5A\n" - "\tstr r1, [sp, 0x18]\n" - "\tb _080E62F4\n" - "_080E6242:\n" - "\tcmp r0, 0x3B\n" - "\tbhi _080E6250\n" - "\tmovs r2, 0x12\n" - "\tstr r2, [sp, 0x14]\n" - "\tmovs r3, 0x78\n" - "\tstr r3, [sp, 0x18]\n" - "\tb _080E62F4\n" - "_080E6250:\n" - "\tcmp r0, 0x45\n" - "\tbhi _080E625E\n" - "\tmovs r0, 0x15\n" - "\tstr r0, [sp, 0x14]\n" - "\tmovs r1, 0x96\n" - "\tstr r1, [sp, 0x18]\n" - "\tb _080E62F4\n" - "_080E625E:\n" - "\tcmp r0, 0x4F\n" - "\tbhi _080E626C\n" - "\tmovs r2, 0x1F\n" - "\tstr r2, [sp, 0x14]\n" - "\tmovs r3, 0xB4\n" - "\tstr r3, [sp, 0x18]\n" - "\tb _080E62F4\n" - "_080E626C:\n" - "\tcmp r0, 0x63\n" - "\tbhi _080E627E\n" - "\tmovs r0, 0x1F\n" - "\tstr r0, [sp, 0x14]\n" - "\tmovs r1, 0xC8\n" - "\tstr r1, [sp, 0x18]\n" - "\tmovs r2, 0x64\n" - "\tstr r2, [sp, 0x1C]\n" - "\tb _080E62F4\n" - "_080E627E:\n" - "\tcmp r0, 0xC8\n" - "\tbne _080E62B0\n" - "\tmovs r6, 0\n" - "\tadds r4, r1, 0\n" - "_080E6286:\n" - "\tmovs r0, 0x64\n" - "\tmuls r0, r6\n" - "\tldr r1, _080E62A8 @ =gEnemyParty\n" - "\tadds r0, r1\n" - "\tmovs r1, 0x2C\n" - "\tadds r2, r6, 0\n" - "\tmuls r2, r1\n" - "\tldr r3, _080E62AC @ =0x000004d4\n" - "\tadds r2, r3\n" - "\tldr r1, [r4]\n" - "\tadds r1, r2\n" - "\tbl CreateBattleTowerMon\n" - "\tadds r6, 0x1\n" - "\tcmp r6, 0x2\n" - "\tble _080E6286\n" - "\tb _080E64A6\n" - "\t.align 2, 0\n" - "_080E62A8: .4byte gEnemyParty\n" - "_080E62AC: .4byte 0x000004d4\n" - "_080E62B0:\n" - "\tmovs r6, 0\n" - "_080E62B2:\n" - "\tmovs r0, 0x64\n" - "\tmuls r0, r6\n" - "\tldr r1, _080E62E4 @ =gEnemyParty\n" - "\tadds r0, r1\n" - "\tldr r1, _080E62E8 @ =gSaveBlock2Ptr\n" - "\tldr r1, [r1]\n" - "\tldr r3, _080E62EC @ =0x0000056c\n" - "\tadds r2, r1, r3\n" - "\tldrb r3, [r2]\n" - "\tmovs r2, 0xA4\n" - "\tmuls r2, r3\n" - "\tldr r3, _080E62F0 @ =0xffffc144\n" - "\tadds r2, r3\n" - "\tadds r1, r2\n" - "\tmovs r2, 0x2C\n" - "\tmuls r2, r6\n" - "\tadds r2, 0x1C\n" - "\tadds r1, r2\n" - "\tbl CreateBattleTowerMon\n" - "\tadds r6, 0x1\n" - "\tcmp r6, 0x2\n" - "\tble _080E62B2\n" - "\tb _080E64A6\n" - "\t.align 2, 0\n" - "_080E62E4: .4byte gEnemyParty\n" - "_080E62E8: .4byte gSaveBlock2Ptr\n" - "_080E62EC: .4byte 0x0000056c\n" - "_080E62F0: .4byte 0xffffc144\n" - "_080E62F4:\n" - "\tldr r2, _080E6314 @ =gSaveBlock2Ptr\n" - "\tldr r0, [r2]\n" - "\tldr r1, _080E6318 @ =0x0000055c\n" - "\tadds r0, r1\n" - "\tldrb r1, [r0]\n" - "\tmovs r0, 0x1\n" - "\tands r0, r1\n" - "\tadds r1, r2, 0\n" - "\tcmp r0, 0\n" - "\tbeq _080E6320\n" - "\tldr r2, _080E631C @ =gBattleTowerLevel100Mons\n" - "\tmov r10, r2\n" - "\tmovs r3, 0x64\n" - "\tstr r3, [sp, 0x10]\n" - "\tb _080E6328\n" - "\t.align 2, 0\n" - "_080E6314: .4byte gSaveBlock2Ptr\n" - "_080E6318: .4byte 0x0000055c\n" - "_080E631C: .4byte gBattleTowerLevel100Mons\n" - "_080E6320:\n" - "\tldr r0, _080E6378 @ =gBattleTowerLevel50Mons\n" - "\tmov r10, r0\n" - "\tmovs r2, 0x32\n" - "\tstr r2, [sp, 0x10]\n" - "_080E6328:\n" - "\tldr r2, _080E637C @ =gBattleTowerTrainers\n" - "\tldr r0, [r1]\n" - "\tldr r3, _080E6380 @ =0x0000056c\n" - "\tadds r0, r3\n" - "\tldrb r1, [r0]\n" - "\tlsls r0, r1, 2\n" - "\tadds r0, r1\n" - "\tlsls r0, 2\n" - "\tadds r0, r2\n" - "\tldrb r0, [r0, 0x4]\n" - "\tstr r0, [sp, 0x20]\n" - "\tmovs r6, 0\n" - "_080E6340:\n" - "\tbl Random\n" - "\tmovs r1, 0xFF\n" - "\tands r1, r0\n" - "\tldr r2, [sp, 0x1C]\n" - "\tadds r0, r1, 0\n" - "\tmuls r0, r2\n" - "\tasrs r0, 8\n" - "\tldr r3, [sp, 0x18]\n" - "\tadds r7, r0, r3\n" - "\tldr r0, [sp, 0x20]\n" - "\tcmp r0, 0\n" - "\tbeq _080E636A\n" - "\tlsls r0, r7, 4\n" - "\tadd r0, r10\n" - "\tldrb r0, [r0, 0x3]\n" - "\tldr r1, [sp, 0x20]\n" - "\tands r0, r1\n" - "\tcmp r0, r1\n" - "\tbeq _080E636A\n" - "\tb _080E64A0\n" - "_080E636A:\n" - "\tmovs r5, 0\n" - "\tlsls r0, r7, 4\n" - "\tmov r2, r10\n" - "\tadds r3, r0, r2\n" - "\tmovs r4, 0\n" - "\tb _080E6388\n" - "\t.align 2, 0\n" - "_080E6378: .4byte gBattleTowerLevel50Mons\n" - "_080E637C: .4byte gBattleTowerTrainers\n" - "_080E6380: .4byte 0x0000056c\n" - "_080E6384:\n" - "\tadds r4, 0x64\n" - "\tadds r5, 0x1\n" - "_080E6388:\n" - "\tcmp r5, r6\n" - "\tbge _080E63A2\n" - "\tldr r1, _080E64B8 @ =gEnemyParty\n" - "\tadds r0, r4, r1\n" - "\tmovs r1, 0xB\n" - "\tmovs r2, 0\n" - "\tstr r3, [sp, 0x24]\n" - "\tbl GetMonData\n" - "\tldr r3, [sp, 0x24]\n" - "\tldrh r2, [r3]\n" - "\tcmp r0, r2\n" - "\tbne _080E6384\n" - "_080E63A2:\n" - "\tcmp r5, r6\n" - "\tbne _080E64A0\n" - "\tmovs r5, 0\n" - "\tcmp r5, r6\n" - "\tbge _080E63F0\n" - "\tldr r3, _080E64BC @ =sBattleTowerHeldItems\n" - "\tmov r9, r3\n" - "\tlsls r0, r7, 4\n" - "\tadd r0, r10\n" - "\tmov r8, r0\n" - "\tmovs r3, 0\n" - "_080E63B8:\n" - "\tldr r0, _080E64B8 @ =gEnemyParty\n" - "\tadds r4, r3, r0\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0xC\n" - "\tmovs r2, 0\n" - "\tstr r3, [sp, 0x24]\n" - "\tbl GetMonData\n" - "\tldr r3, [sp, 0x24]\n" - "\tcmp r0, 0\n" - "\tbeq _080E63E8\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0xC\n" - "\tmovs r2, 0\n" - "\tbl GetMonData\n" - "\tmov r2, r8\n" - "\tldrb r1, [r2, 0x2]\n" - "\tlsls r1, 1\n" - "\tadd r1, r9\n" - "\tldr r3, [sp, 0x24]\n" - "\tldrh r1, [r1]\n" - "\tcmp r0, r1\n" - "\tbeq _080E63F0\n" - "_080E63E8:\n" - "\tadds r3, 0x64\n" - "\tadds r5, 0x1\n" - "\tcmp r5, r6\n" - "\tblt _080E63B8\n" - "_080E63F0:\n" - "\tcmp r5, r6\n" - "\tbne _080E64A0\n" - "\tmovs r5, 0\n" - "\tcmp r5, r6\n" - "\tbge _080E6412\n" - "\tadd r0, sp, 0x4\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, r7\n" - "\tbeq _080E6412\n" - "\tadd r1, sp, 0x4\n" - "_080E6404:\n" - "\tadds r1, 0x2\n" - "\tadds r5, 0x1\n" - "\tcmp r5, r6\n" - "\tbge _080E6412\n" - "\tldrh r0, [r1]\n" - "\tcmp r0, r7\n" - "\tbne _080E6404\n" - "_080E6412:\n" - "\tcmp r5, r6\n" - "\tbne _080E64A0\n" - "\tlsls r0, r6, 1\n" - "\tadd r0, sp\n" - "\tadds r0, 0x4\n" - "\tstrh r7, [r0]\n" - "\tmovs r3, 0x64\n" - "\tadds r0, r6, 0\n" - "\tmuls r0, r3\n" - "\tldr r1, _080E64B8 @ =gEnemyParty\n" - "\tadds r0, r1\n" - "\tlsls r4, r7, 4\n" - "\tmov r3, r10\n" - "\tadds r2, r4, r3\n" - "\tldrh r1, [r2]\n" - "\tldrb r2, [r2, 0xC]\n" - "\tstr r2, [sp]\n" - "\tldr r2, [sp, 0x10]\n" - "\tldr r3, [sp, 0x14]\n" - "\tbl CreateMonWithEVSpread\n" - "\tmovs r5, 0\n" - "\tadds r0, r6, 0x1\n" - "\tmov r9, r0\n" - "\tmov r8, r4\n" - "\tmovs r0, 0x64\n" - "\tadds r7, r6, 0\n" - "\tmuls r7, r0\n" - "\tmov r0, r10\n" - "\tadds r0, 0x4\n" - "\tadds r4, r0\n" - "\tldr r3, _080E64B8 @ =gEnemyParty\n" - "_080E6452:\n" - "\tldrh r1, [r4]\n" - "\tlsls r2, r5, 24\n" - "\tlsrs r2, 24\n" - "\tadds r0, r7, r3\n" - "\tstr r3, [sp, 0x24]\n" - "\tbl SetMonMoveSlot\n" - "\tldrh r0, [r4]\n" - "\tldr r3, [sp, 0x24]\n" - "\tcmp r0, 0xDA\n" - "\tbne _080E646E\n" - "\tmovs r0, 0\n" - "\tmov r1, sp\n" - "\tstrb r0, [r1, 0xC]\n" - "_080E646E:\n" - "\tadds r4, 0x2\n" - "\tadds r5, 0x1\n" - "\tcmp r5, 0x3\n" - "\tble _080E6452\n" - "\tmovs r2, 0x64\n" - "\tadds r4, r6, 0\n" - "\tmuls r4, r2\n" - "\tldr r3, _080E64B8 @ =gEnemyParty\n" - "\tadds r4, r3\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0x20\n" - "\tadd r2, sp, 0xC\n" - "\tbl SetMonData\n" - "\tmov r0, r8\n" - "\tadd r0, r10\n" - "\tldrb r2, [r0, 0x2]\n" - "\tlsls r2, 1\n" - "\tldr r0, _080E64BC @ =sBattleTowerHeldItems\n" - "\tadds r2, r0\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0xC\n" - "\tbl SetMonData\n" - "\tmov r6, r9\n" - "_080E64A0:\n" - "\tcmp r6, 0x3\n" - "\tbeq _080E64A6\n" - "\tb _080E6340\n" - "_080E64A6:\n" - "\tadd sp, 0x28\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_080E64B8: .4byte gEnemyParty\n" - "_080E64BC: .4byte sBattleTowerHeldItems"); -} -#endif //NONMATCHING static u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 count) { @@ -1134,7 +758,7 @@ static void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 bat if (i != *numValid) return; - if (heldItem != 0) + if (heldItem != ITEM_NONE) { for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++); if (i != *numValid) From 89b1087c3795fe5313f3f29ac2a31ed509ebcbd6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 9 Nov 2019 22:06:56 -0500 Subject: [PATCH 06/33] Decomp learn_move and start documentation --- asm/learn_move.s | 1954 --------------------- baserom.ips | Bin 414160 -> 413412 bytes data/battle_anim_effects_3.s | 2 +- data/learn_move.s | 21 - graphics/learn_move/interface_sprites.png | Bin 0 -> 316 bytes include/graphics.h | 6 + include/strings.h | 11 + ld_script.txt | 4 +- src/battle_tower.c | 8 + src/learn_move.c | 843 +++++++++ sym_ewram.txt | 5 +- 11 files changed, 873 insertions(+), 1981 deletions(-) delete mode 100644 asm/learn_move.s create mode 100644 graphics/learn_move/interface_sprites.png create mode 100644 src/learn_move.c diff --git a/asm/learn_move.s b/asm/learn_move.s deleted file mode 100644 index 36b88bc20..000000000 --- a/asm/learn_move.s +++ /dev/null @@ -1,1954 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80E4620 -sub_80E4620: @ 80E4620 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80E4620 - - thumb_func_start DisplayMoveTutorMenu -DisplayMoveTutorMenu: @ 80E4634 - push {lr} - sub sp, 0x4 - bl ScriptContext2_Enable - ldr r0, _080E465C @ =sub_80E4660 - movs r1, 0xA - bl CreateTask - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080E465C: .4byte sub_80E4660 - thumb_func_end DisplayMoveTutorMenu - - thumb_func_start sub_80E4660 -sub_80E4660: @ 80E4660 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080E468C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080E4684 - ldr r0, _080E4690 @ =sub_80E478C - bl SetMainCallback2 - ldr r1, _080E4694 @ =gFieldCallback - ldr r0, _080E4698 @ =FieldCallback_ReturnToEventScript2 - str r0, [r1] - adds r0, r4, 0 - bl DestroyTask -_080E4684: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E468C: .4byte gPaletteFade -_080E4690: .4byte sub_80E478C -_080E4694: .4byte gFieldCallback -_080E4698: .4byte FieldCallback_ReturnToEventScript2 - thumb_func_end sub_80E4660 - - thumb_func_start sub_80E469C -sub_80E469C: @ 80E469C - push {r4,r5,lr} - sub sp, 0xC - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _080E4774 @ =gUnknown_83FFA3C - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - bl ResetTempTileDataBuffers - ldr r0, _080E4778 @ =gUnknown_83FFA44 - bl InitWindows - lsls r0, 16 - cmp r0, 0 - beq _080E476C - bl DeactivateAllTextPrinters - movs r5, 0 -_080E46C6: - lsls r4, r5, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl ClearWindowTilemap - adds r0, r4, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r5, 0x1 - cmp r5, 0x8 - bls _080E46C6 - movs r0, 0x7 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0xF - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - ldr r0, _080E477C @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x99 - lsls r0, 2 - adds r1, r0 - movs r0, 0x1 - bl SetBgTilemapBuffer - movs r0, 0 - movs r1, 0x1 - movs r2, 0xE0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0xD0 - movs r1, 0x1 - bl sub_8107D38 - ldr r0, _080E4780 @ =gUnknown_8E97DDC - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _080E4784 @ =gUnknown_8E97DFC - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndLoadBgGfxUsingHeap - ldr r1, _080E4788 @ =gUnknown_8E97EC4 - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x16 - movs r1, 0 - bl SetGpuReg - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg -_080E476C: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E4774: .4byte gUnknown_83FFA3C -_080E4778: .4byte gUnknown_83FFA44 -_080E477C: .4byte gUnknown_203AAB4 -_080E4780: .4byte gUnknown_8E97DDC -_080E4784: .4byte gUnknown_8E97DFC -_080E4788: .4byte gUnknown_8E97EC4 - thumb_func_end sub_80E469C - - thumb_func_start sub_80E478C -sub_80E478C: @ 80E478C - push {r4,lr} - movs r0, 0 - movs r1, 0 - bl SetGpuReg - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - ldr r4, _080E47EC @ =gUnknown_203AAB4 - ldr r0, _080E47F0 @ =0x00000a6c - bl AllocZeroed - str r0, [r4] - bl sub_80E4F54 - ldr r0, [r4] - ldr r1, _080E47F4 @ =gSpecialVar_0x8004 - ldrh r1, [r1] - movs r2, 0x98 - lsls r2, 2 - adds r0, r2 - strb r1, [r0] - bl sub_80E50CC - ldr r0, _080E47F8 @ =sub_80E4620 - bl SetVBlankCallback - bl sub_80E469C - bl sub_80E5004 - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - ldr r0, _080E47FC @ =sub_80E4870 - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E47EC: .4byte gUnknown_203AAB4 -_080E47F0: .4byte 0x00000a6c -_080E47F4: .4byte gSpecialVar_0x8004 -_080E47F8: .4byte sub_80E4620 -_080E47FC: .4byte sub_80E4870 - thumb_func_end sub_80E478C - - thumb_func_start sub_80E4800 -sub_80E4800: @ 80E4800 - push {lr} - movs r0, 0 - movs r1, 0 - bl SetGpuReg - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - bl sub_80E50CC - ldr r0, _080E485C @ =gUnknown_203AAB4 - ldr r0, [r0] - ldr r1, _080E4860 @ =gSpecialVar_0x8005 - ldrh r1, [r1] - ldr r2, _080E4864 @ =0x00000261 - adds r0, r2 - strb r1, [r0] - ldr r0, _080E4868 @ =sub_80E4620 - bl SetVBlankCallback - bl sub_80E469C - bl sub_80E5004 - movs r0, 0 - movs r1, 0 - movs r2, 0x2 - bl FillPalette - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - ldr r0, _080E486C @ =sub_80E4870 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_080E485C: .4byte gUnknown_203AAB4 -_080E4860: .4byte gSpecialVar_0x8005 -_080E4864: .4byte 0x00000261 -_080E4868: .4byte sub_80E4620 -_080E486C: .4byte sub_80E4870 - thumb_func_end sub_80E4800 - - thumb_func_start sub_80E4870 -sub_80E4870: @ 80E4870 - push {r4,lr} - movs r0, 0x7 - bl IsTextPrinterActive - lsls r0, 16 - cmp r0, 0 - bne _080E4882 - bl sub_80E48F4 -_080E4882: - ldr r4, _080E48B8 @ =gUnknown_203AAB4 - ldr r0, [r4] - ldr r1, _080E48BC @ =0x0000025f - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080E489E - bl sub_80E54C0 - ldr r0, [r4] - ldr r1, _080E48BC @ =0x0000025f - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_080E489E: - bl RunTasks - bl RunTextPrinters - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E48B8: .4byte gUnknown_203AAB4 -_080E48BC: .4byte 0x0000025f - thumb_func_end sub_80E4870 - - thumb_func_start sub_80E48C0 -sub_80E48C0: @ 80E48C0 - push {r4,lr} - sub sp, 0x8 - adds r1, r0, 0 - ldr r4, _080E48F0 @ =gStringVar4 - adds r0, r4, 0 - bl StringExpandPlaceholders - bl GetTextSpeedSetting - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x7 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x2 - bl sub_80E559C - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E48F0: .4byte gStringVar4 - thumb_func_end sub_80E48C0 - - thumb_func_start sub_80E48F4 -sub_80E48F4: @ 80E48F4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - ldr r1, _080E4918 @ =gUnknown_203AAB4 - ldr r0, [r1] - ldrb r0, [r0] - adds r7, r1, 0 - cmp r0, 0x21 - bls _080E490C - b _080E4EDA -_080E490C: - lsls r0, 2 - ldr r1, _080E491C @ =_080E4920 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080E4918: .4byte gUnknown_203AAB4 -_080E491C: .4byte _080E4920 - .align 2, 0 -_080E4920: - .4byte _080E49A8 - .4byte _080E49F4 - .4byte _080E4A0C - .4byte _080E4A14 - .4byte _080E4A38 - .4byte _080E4EDA - .4byte _080E4EDA - .4byte _080E4EDA - .4byte _080E4A3E - .4byte _080E4A68 - .4byte _080E4EDA - .4byte _080E4EDA - .4byte _080E4AF4 - .4byte _080E4B20 - .4byte _080E4CFA - .4byte _080E4D18 - .4byte _080E4B58 - .4byte _080E4B70 - .4byte _080E4B98 - .4byte _080E4C5A - .4byte _080E4C70 - .4byte _080E4CE4 - .4byte _080E4CE8 - .4byte _080E4EDA - .4byte _080E4BDC - .4byte _080E4BF4 - .4byte _080E4C1C - .4byte _080E4C54 - .4byte _080E4D48 - .4byte _080E4D8C - .4byte _080E4E70 - .4byte _080E4E90 - .4byte _080E4EA8 - .4byte _080E4EC0 -_080E49A8: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - bl sub_80E5444 - ldr r4, _080E49EC @ =gUnknown_203AAB4 - ldr r1, [r4] - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bl sub_80E4EF0 - movs r0, 0 - bl sub_80E4F0C - bl sub_80E5300 - ldr r0, [r4] - ldr r1, _080E49F0 @ =0x0000025f - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - b _080E4EDA - .align 2, 0 -_080E49EC: .4byte gUnknown_203AAB4 -_080E49F0: .4byte 0x0000025f -_080E49F4: - ldr r0, _080E4A08 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4A02 - b _080E4EDA -_080E4A02: - ldr r1, [r7] - movs r0, 0x4 - b _080E4ED8 - .align 2, 0 -_080E4A08: .4byte gPaletteFade -_080E4A0C: - ldr r1, [r7] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 -_080E4A14: - movs r0, 0 - bl sub_80E4F0C - ldr r2, _080E4A30 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r3, _080E4A34 @ =0x0000025f - adds r0, r3 - movs r1, 0x1 - strb r1, [r0] - ldr r1, [r2] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4A30: .4byte gUnknown_203AAB4 -_080E4A34: .4byte 0x0000025f -_080E4A38: - bl sub_80E5204 - b _080E4EDA -_080E4A3E: - ldr r0, _080E4A60 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4A64 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4A60: .4byte gUnknown_83FFA8C -_080E4A64: .4byte gUnknown_203AAB4 -_080E4A68: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4A88 - cmp r1, 0 - bgt _080E4A82 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4AE6 - b _080E4EDA -_080E4A82: - cmp r1, 0x1 - beq _080E4AE6 - b _080E4EDA -_080E4A88: - ldr r4, _080E4AC8 @ =gUnknown_203AAB4 - ldr r2, [r4] - movs r6, 0x98 - lsls r6, 2 - adds r0, r2, r6 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080E4ACC @ =gPlayerParty - adds r0, r1 - ldr r3, _080E4AD0 @ =0x00000a67 - adds r1, r2, r3 - ldrb r1, [r1] - lsls r1, 1 - adds r2, 0xE8 - adds r2, r1 - ldrh r1, [r2] - bl GiveMoveToMon - lsls r0, 16 - ldr r1, _080E4AD4 @ =0xffff0000 - cmp r0, r1 - beq _080E4AE0 - ldr r0, _080E4AD8 @ =gUnknown_841E405 - bl sub_80E48C0 - ldr r1, _080E4ADC @ =gSpecialVar_0x8004 - movs r0, 0x1 - strh r0, [r1] - ldr r1, [r4] - movs r0, 0x1F - b _080E4ED8 - .align 2, 0 -_080E4AC8: .4byte gUnknown_203AAB4 -_080E4ACC: .4byte gPlayerParty -_080E4AD0: .4byte 0x00000a67 -_080E4AD4: .4byte 0xffff0000 -_080E4AD8: .4byte gUnknown_841E405 -_080E4ADC: .4byte gSpecialVar_0x8004 -_080E4AE0: - ldr r1, [r4] - movs r0, 0x10 - b _080E4ED8 -_080E4AE6: - ldr r0, _080E4AF0 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x3 - b _080E4ED8 - .align 2, 0 -_080E4AF0: .4byte gUnknown_203AAB4 -_080E4AF4: - ldr r0, _080E4B18 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4B1C @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4B18: .4byte gUnknown_83FFA8C -_080E4B1C: .4byte gUnknown_203AAB4 -_080E4B20: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4B40 - cmp r1, 0 - bgt _080E4B3A - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4B4C - b _080E4EDA -_080E4B3A: - cmp r1, 0x1 - beq _080E4B4C - b _080E4EDA -_080E4B40: - ldr r0, _080E4B48 @ =gSpecialVar_0x8004 - strh r1, [r0] - b _080E4ED2 - .align 2, 0 -_080E4B48: .4byte gSpecialVar_0x8004 -_080E4B4C: - ldr r0, _080E4B54 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x3 - b _080E4ED8 - .align 2, 0 -_080E4B54: .4byte gUnknown_203AAB4 -_080E4B58: - ldr r0, _080E4B68 @ =gUnknown_841E414 - bl sub_80E48C0 - ldr r0, _080E4B6C @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4B68: .4byte gUnknown_841E414 -_080E4B6C: .4byte gUnknown_203AAB4 -_080E4B70: - ldr r0, _080E4B90 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4B94 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x12 - b _080E4ED8 - .align 2, 0 -_080E4B90: .4byte gUnknown_83FFA8C -_080E4B94: .4byte gUnknown_203AAB4 -_080E4B98: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4BB8 - cmp r1, 0 - bgt _080E4BB2 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4BD0 - b _080E4EDA -_080E4BB2: - cmp r1, 0x1 - beq _080E4BD0 - b _080E4EDA -_080E4BB8: - ldr r0, _080E4BC8 @ =gUnknown_841E50C - bl sub_80E48C0 - ldr r0, _080E4BCC @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x13 - b _080E4ED8 - .align 2, 0 -_080E4BC8: .4byte gUnknown_841E50C -_080E4BCC: .4byte gUnknown_203AAB4 -_080E4BD0: - ldr r0, _080E4BD8 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x18 - b _080E4ED8 - .align 2, 0 -_080E4BD8: .4byte gUnknown_203AAB4 -_080E4BDC: - ldr r0, _080E4BEC @ =gUnknown_841E481 - bl sub_80E48C0 - ldr r0, _080E4BF0 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4BEC: .4byte gUnknown_841E481 -_080E4BF0: .4byte gUnknown_203AAB4 -_080E4BF4: - ldr r0, _080E4C14 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4C18 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x1A - b _080E4ED8 - .align 2, 0 -_080E4C14: .4byte gUnknown_83FFA8C -_080E4C18: .4byte gUnknown_203AAB4 -_080E4C1C: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4C3C - cmp r1, 0 - bgt _080E4C36 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4C48 - b _080E4EDA -_080E4C36: - cmp r1, 0x1 - beq _080E4C48 - b _080E4EDA -_080E4C3C: - ldr r0, _080E4C44 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x1B - b _080E4ED8 - .align 2, 0 -_080E4C44: .4byte gUnknown_203AAB4 -_080E4C48: - ldr r0, _080E4C50 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x10 - b _080E4ED8 - .align 2, 0 -_080E4C50: .4byte gUnknown_203AAB4 -_080E4C54: - ldr r1, [r7] - movs r0, 0x3 - b _080E4ED8 -_080E4C5A: - ldr r1, [r7] - movs r2, 0 - movs r0, 0x14 - strb r0, [r1] - subs r0, 0x15 - str r2, [sp] - movs r1, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - b _080E4EDA -_080E4C70: - ldr r0, _080E4CC8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4C7E - b _080E4EDA -_080E4C7E: - ldr r2, [r7] - ldr r6, _080E4CCC @ =0x00000263 - adds r0, r2, r6 - ldrb r0, [r0] - ldr r3, _080E4CD0 @ =0x00000a68 - adds r1, r2, r3 - ldr r6, _080E4CD4 @ =0x00000a6a - adds r2, r6 - bl ListMenuGetScrollAndRow - bl FreeAllWindowBuffers - ldr r0, _080E4CD8 @ =gPlayerParty - ldr r5, [r7] - movs r2, 0x98 - lsls r2, 2 - adds r1, r5, r2 - ldrb r1, [r1] - ldr r2, _080E4CDC @ =gPlayerPartyCount - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _080E4CE0 @ =sub_80E4800 - subs r6, 0x3 - adds r4, r5, r6 - ldrb r4, [r4] - lsls r4, 1 - adds r5, 0xE8 - adds r5, r4 - ldrh r4, [r5] - str r4, [sp] - bl ShowSelectMovePokemonSummaryScreen - ldr r1, [r7] - movs r0, 0x1C - b _080E4ED8 - .align 2, 0 -_080E4CC8: .4byte gPaletteFade -_080E4CCC: .4byte 0x00000263 -_080E4CD0: .4byte 0x00000a68 -_080E4CD4: .4byte 0x00000a6a -_080E4CD8: .4byte gPlayerParty -_080E4CDC: .4byte gPlayerPartyCount -_080E4CE0: .4byte sub_80E4800 -_080E4CE4: - ldr r1, [r7] - b _080E4ED6 -_080E4CE8: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _080E4EDA -_080E4CFA: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080E4D14 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4D14: .4byte gUnknown_203AAB4 -_080E4D18: - ldr r0, _080E4D3C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4D26 - b _080E4EDA -_080E4D26: - bl FreeAllWindowBuffers - ldr r0, _080E4D40 @ =gUnknown_203AAB4 - ldr r0, [r0] - bl Free - ldr r0, _080E4D44 @ =CB2_ReturnToField - bl SetMainCallback2 - b _080E4EDA - .align 2, 0 -_080E4D3C: .4byte gPaletteFade -_080E4D40: .4byte gUnknown_203AAB4 -_080E4D44: .4byte CB2_ReturnToField -_080E4D48: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - ldr r0, _080E4D88 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bl sub_80E5444 - bl sub_80E4EF0 - bl sub_80E5300 - movs r0, 0x1 - bl sub_80E4F0C - bl sub_80E54C0 - b _080E4EDA - .align 2, 0 -_080E4D88: .4byte gUnknown_203AAB4 -_080E4D8C: - ldr r0, _080E4DAC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4D9A - b _080E4EDA -_080E4D9A: - ldr r1, [r7] - ldr r0, _080E4DB0 @ =0x00000261 - adds r2, r1, r0 - ldrb r0, [r2] - cmp r0, 0x4 - bne _080E4DB4 - movs r0, 0x18 - b _080E4ED8 - .align 2, 0 -_080E4DAC: .4byte gPaletteFade -_080E4DB0: .4byte 0x00000261 -_080E4DB4: - movs r4, 0x98 - lsls r4, 2 - adds r0, r1, r4 - ldrb r0, [r0] - movs r6, 0x64 - muls r0, r6 - ldr r5, _080E4E50 @ =gPlayerParty - adds r0, r5 - ldrb r1, [r2] - adds r1, 0xD - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r2, _080E4E54 @ =gStringVar3 - movs r1, 0xD - mov r9, r1 - mov r1, r9 - muls r1, r0 - ldr r3, _080E4E58 @ =gMoveNames - mov r8, r3 - add r1, r8 - adds r0, r2, 0 - bl StringCopy - ldr r1, [r7] - adds r0, r1, r4 - ldrb r0, [r0] - muls r0, r6 - adds r0, r5 - ldr r2, _080E4E5C @ =0x00000261 - adds r1, r2 - ldrb r1, [r1] - bl RemoveMonPPBonus - ldr r3, [r7] - adds r4, r3, r4 - ldrb r0, [r4] - muls r0, r6 - adds r0, r5 - ldr r4, _080E4E60 @ =0x00000a67 - adds r1, r3, r4 - ldrb r2, [r1] - lsls r2, 1 - adds r1, r3, 0 - adds r1, 0xE8 - adds r1, r2 - ldrh r1, [r1] - ldr r6, _080E4E5C @ =0x00000261 - adds r3, r6 - ldrb r2, [r3] - bl SetMonMoveSlot - ldr r0, _080E4E64 @ =gStringVar2 - ldr r2, [r7] - adds r4, r2, r4 - ldrb r1, [r4] - lsls r1, 1 - adds r2, 0xE8 - adds r2, r1 - ldrh r1, [r2] - mov r2, r9 - muls r2, r1 - adds r1, r2, 0 - add r1, r8 - bl StringCopy - ldr r0, _080E4E68 @ =gUnknown_841E493 - bl sub_80E48C0 - ldr r1, [r7] - movs r0, 0x1E - strb r0, [r1] - ldr r1, _080E4E6C @ =gSpecialVar_0x8004 - movs r0, 0x1 - strh r0, [r1] - b _080E4EDA - .align 2, 0 -_080E4E50: .4byte gPlayerParty -_080E4E54: .4byte gStringVar3 -_080E4E58: .4byte gMoveNames -_080E4E5C: .4byte 0x00000261 -_080E4E60: .4byte 0x00000a67 -_080E4E64: .4byte gStringVar2 -_080E4E68: .4byte gUnknown_841E493 -_080E4E6C: .4byte gSpecialVar_0x8004 -_080E4E70: - ldr r0, _080E4E88 @ =gUnknown_841E4C0 - bl sub_80E48C0 - ldr r0, _080E4E8C @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x1F - strb r0, [r1] - adds r0, 0xE2 - bl PlayFanfare - b _080E4EDA - .align 2, 0 -_080E4E88: .4byte gUnknown_841E4C0 -_080E4E8C: .4byte gUnknown_203AAB4 -_080E4E90: - ldr r0, _080E4EA0 @ =0x00000101 - bl PlayFanfare - ldr r0, _080E4EA4 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x20 - b _080E4ED8 - .align 2, 0 -_080E4EA0: .4byte 0x00000101 -_080E4EA4: .4byte gUnknown_203AAB4 -_080E4EA8: - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _080E4EDA - ldr r0, _080E4EBC @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x21 - b _080E4ED8 - .align 2, 0 -_080E4EBC: .4byte gUnknown_203AAB4 -_080E4EC0: - ldr r0, _080E4EE8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080E4EDA - movs r0, 0x5 - bl PlaySE -_080E4ED2: - ldr r0, _080E4EEC @ =gUnknown_203AAB4 - ldr r1, [r0] -_080E4ED6: - movs r0, 0xE -_080E4ED8: - strb r0, [r1] -_080E4EDA: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E4EE8: .4byte gMain -_080E4EEC: .4byte gUnknown_203AAB4 - thumb_func_end sub_80E48F4 - - thumb_func_start sub_80E4EF0 -sub_80E4EF0: @ 80E4EF0 - push {r4,lr} - movs r4, 0x6 -_080E4EF4: - lsls r0, r4, 24 - lsrs r0, 24 - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - adds r4, 0x1 - cmp r4, 0x7 - ble _080E4EF4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80E4EF0 - - thumb_func_start sub_80E4F0C -sub_80E4F0C: @ 80E4F0C - push {r4,r5,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080E4F42 - ldr r4, _080E4F4C @ =gStringVar4 - ldr r1, _080E4F50 @ =gUnknown_841E3E3 - adds r0, r4, 0 - bl StringExpandPlaceholders - str r5, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x7 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x2 - bl sub_80E559C - movs r0, 0x7 - bl PutWindowTilemap - movs r0, 0x7 - movs r1, 0x3 - bl CopyWindowToVram -_080E4F42: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E4F4C: .4byte gStringVar4 -_080E4F50: .4byte gUnknown_841E3E3 - thumb_func_end sub_80E4F0C - - thumb_func_start sub_80E4F54 -sub_80E4F54: @ 80E4F54 - push {r4,lr} - ldr r2, _080E4FA4 @ =gUnknown_203AAB4 - ldr r0, [r2] - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - strb r1, [r0, 0x2] - ldr r0, [r2] - strb r1, [r0, 0x19] - ldr r0, [r2] - strb r1, [r0, 0x18] - ldr r0, [r2] - strb r1, [r0, 0x1C] - ldr r0, [r2] - strb r1, [r0, 0x1A] - ldr r0, [r2] - strb r1, [r0, 0x1B] - ldr r0, [r2] - strb r1, [r0, 0x1D] - ldr r0, [r2] - strb r1, [r0, 0x1E] - ldr r0, [r2] - ldr r3, _080E4FA8 @ =0x0000025f - adds r0, r3 - strb r1, [r0] - movs r3, 0 - adds r4, r2, 0 - movs r2, 0 -_080E4F8C: - ldr r0, [r4] - lsls r1, r3, 1 - adds r0, 0xE8 - adds r0, r1 - strh r2, [r0] - adds r3, 0x1 - cmp r3, 0x13 - ble _080E4F8C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E4FA4: .4byte gUnknown_203AAB4 -_080E4FA8: .4byte 0x0000025f - thumb_func_end sub_80E4F54 - - thumb_func_start sub_80E4FAC -sub_80E4FAC: @ 80E4FAC - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x30 - ldrsh r0, [r4, r1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 1 - movs r0, 0xFF - ands r1, r0 - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0x1 - beq _080E4FD0 - cmp r0, 0x1 - ble _080E4FF6 - cmp r0, 0x2 - beq _080E4FE4 - b _080E4FF6 -_080E4FD0: - adds r0, r1, 0 - movs r1, 0x3 - bl Sin - ldrh r1, [r4, 0x32] - adds r2, r0, 0 - muls r2, r1 - adds r0, r2, 0 - strh r0, [r4, 0x24] - b _080E4FF6 -_080E4FE4: - adds r0, r1, 0 - movs r1, 0x1 - bl Sin - ldrh r1, [r4, 0x32] - adds r2, r0, 0 - muls r2, r1 - adds r0, r2, 0 - strh r0, [r4, 0x26] -_080E4FF6: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80E4FAC - - thumb_func_start sub_80E5004 -sub_80E5004: @ 80E5004 - push {r4-r6,lr} - mov r6, r8 - push {r6} - ldr r0, _080E50B4 @ =gUnknown_83FF9F4 - bl LoadSpriteSheet - ldr r0, _080E50B8 @ =gUnknown_83FF9FC - bl LoadSpritePalette - ldr r0, _080E50BC @ =gUnknown_83FFA24 - mov r8, r0 - movs r1, 0xC8 - movs r2, 0x4 - movs r3, 0 - bl CreateSprite - ldr r5, _080E50C0 @ =gUnknown_203AAB4 - ldr r1, [r5] - strb r0, [r1, 0x3] - ldr r0, [r5] - ldrb r1, [r0, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _080E50C4 @ =gSprites - adds r0, r4 - movs r1, 0x1 - bl StartSpriteAnim - ldr r2, [r5] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r6, 0x2 - strh r6, [r0, 0x2E] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _080E50C8 @ =0x0000ffff - strh r1, [r0, 0x32] - mov r0, r8 - movs r1, 0xC8 - movs r2, 0x6C - movs r3, 0 - bl CreateSprite - ldr r1, [r5] - strb r0, [r1, 0x3] - ldr r2, [r5] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r6, [r0, 0x2E] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x1 - strh r1, [r0, 0x32] - movs r2, 0 - movs r3, 0x4 -_080E508C: - ldr r0, [r5] - adds r0, 0x3 - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x1 - ble _080E508C - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E50B4: .4byte gUnknown_83FF9F4 -_080E50B8: .4byte gUnknown_83FF9FC -_080E50BC: .4byte gUnknown_83FFA24 -_080E50C0: .4byte gUnknown_203AAB4 -_080E50C4: .4byte gSprites -_080E50C8: .4byte 0x0000ffff - thumb_func_end sub_80E5004 - - thumb_func_start sub_80E50CC -sub_80E50CC: @ 80E50CC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - ldr r7, _080E51E8 @ =gUnknown_203AAB4 - ldr r1, [r7] - movs r4, 0x98 - lsls r4, 2 - adds r0, r1, r4 - ldrb r0, [r0] - movs r6, 0x64 - muls r0, r6 - ldr r5, _080E51EC @ =gPlayerParty - adds r0, r5 - adds r1, 0xE8 - bl GetMoveRelearnerMoves - ldr r1, [r7] - strb r0, [r1, 0x1A] - ldr r1, [r7] - adds r4, r1, r4 - ldrb r0, [r4] - muls r0, r6 - adds r0, r5 - adds r1, 0xE8 - bl GetMoveRelearnerMoves - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r5, 0 - ldr r0, [r7] - ldrb r0, [r0, 0x1A] - cmp r5, r0 - bge _080E513C - adds r6, r7, 0 - movs r7, 0xD - movs r4, 0x8D - lsls r4, 1 -_080E511A: - ldr r1, [r6] - adds r0, r1, r4 - lsls r2, r5, 1 - adds r1, 0xE8 - adds r1, r2 - ldrh r1, [r1] - muls r1, r7 - ldr r2, _080E51F0 @ =gMoveNames - adds r1, r2 - bl StringCopy - adds r4, 0xD - adds r5, 0x1 - ldr r0, [r6] - ldrb r0, [r0, 0x1A] - cmp r5, r0 - blt _080E511A -_080E513C: - ldr r4, _080E51E8 @ =gUnknown_203AAB4 - ldr r0, [r4] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080E51EC @ =gPlayerParty - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData - ldr r0, _080E51F4 @ =gStringVar1 - mov r1, sp - bl StringCopy10 - ldr r0, [r4] - ldrb r2, [r0, 0x1A] - movs r1, 0xD - muls r1, r2 - movs r7, 0x8D - lsls r7, 1 - adds r1, r7 - adds r0, r1 - ldr r1, _080E51F8 @ =gFameCheckerText_Cancel - bl StringCopy - ldr r1, [r4] - ldrb r0, [r1, 0x1A] - adds r0, 0x1 - strb r0, [r1, 0x1A] - movs r5, 0 - movs r3, 0x1 - add r3, r8 - mov r12, r3 - cmp r5, r8 - bge _080E51AA - adds r6, r4, 0 - adds r4, r7, 0 -_080E518E: - ldr r0, [r6] - lsls r3, r5, 3 - adds r1, r0, 0 - adds r1, 0x20 - adds r1, r3 - adds r2, r0, r4 - str r2, [r1] - adds r0, 0x24 - adds r0, r3 - str r5, [r0] - adds r4, 0xD - adds r5, 0x1 - cmp r5, r8 - blt _080E518E -_080E51AA: - ldr r4, _080E51E8 @ =gUnknown_203AAB4 - ldr r2, [r4] - lsls r3, r5, 3 - adds r0, r2, 0 - adds r0, 0x20 - adds r0, r3 - ldr r1, _080E51F8 @ =gFameCheckerText_Cancel - str r1, [r0] - adds r2, 0x24 - adds r2, r3 - movs r0, 0xFE - str r0, [r2] - ldr r2, _080E51FC @ =gMultiuseListMenuTemplate - adds r1, r2, 0 - ldr r0, _080E5200 @ =gUnknown_83FFA94 - ldm r0!, {r3,r5,r6} - stm r1!, {r3,r5,r6} - ldm r0!, {r3,r5,r6} - stm r1!, {r3,r5,r6} - ldr r0, [r4] - adds r0, 0x20 - str r0, [r2] - mov r5, r12 - strh r5, [r2, 0xC] - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E51E8: .4byte gUnknown_203AAB4 -_080E51EC: .4byte gPlayerParty -_080E51F0: .4byte gMoveNames -_080E51F4: .4byte gStringVar1 -_080E51F8: .4byte gFameCheckerText_Cancel -_080E51FC: .4byte gMultiuseListMenuTemplate -_080E5200: .4byte gUnknown_83FFA94 - thumb_func_end sub_80E50CC - - thumb_func_start sub_80E5204 -sub_80E5204: @ 80E5204 - push {r4,r5,lr} - ldr r4, _080E5258 @ =gUnknown_203AAB4 - ldr r0, [r4] - ldr r1, _080E525C @ =0x00000263 - adds r0, r1 - ldrb r0, [r0] - bl ListMenu_ProcessInput - ldr r0, _080E5260 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080E5284 - movs r0, 0x5 - bl PlaySE - ldr r1, [r4] - ldr r2, _080E5264 @ =0x00000a67 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0xFE - beq _080E5270 - movs r0, 0x8 - strb r0, [r1] - ldr r0, _080E5268 @ =gStringVar2 - ldr r1, [r4] - adds r2, r1, r2 - ldrb r3, [r2] - movs r2, 0xD - muls r2, r3 - movs r3, 0x8D - lsls r3, 1 - adds r2, r3 - adds r1, r2 - bl StringCopy - ldr r0, _080E526C @ =gUnknown_841E3FB - bl sub_80E48C0 - b _080E529E - .align 2, 0 -_080E5258: .4byte gUnknown_203AAB4 -_080E525C: .4byte 0x00000263 -_080E5260: .4byte gMain -_080E5264: .4byte 0x00000a67 -_080E5268: .4byte gStringVar2 -_080E526C: .4byte gUnknown_841E3FB -_080E5270: - ldr r0, _080E5280 @ =gUnknown_841E4E2 - bl sub_80E48C0 - ldr r1, [r4] - movs r0, 0xC - strb r0, [r1] - b _080E529E - .align 2, 0 -_080E5280: .4byte gUnknown_841E4E2 -_080E5284: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080E529E - movs r0, 0x5 - bl PlaySE - ldr r0, [r4] - movs r1, 0xC - strb r1, [r0] - ldr r0, _080E52DC @ =gUnknown_841E4E2 - bl sub_80E48C0 -_080E529E: - ldr r0, _080E52E0 @ =gUnknown_203AAB4 - ldr r4, [r0] - ldrb r0, [r4, 0x1A] - cmp r0, 0x6 - bls _080E52FA - ldr r2, _080E52E4 @ =gSprites - movs r0, 0x3E - adds r0, r2 - mov r12, r0 - ldrb r0, [r0] - movs r1, 0x5 - negs r1, r1 - adds r3, r1, 0 - ands r3, r0 - mov r0, r12 - strb r3, [r0] - adds r5, r2, 0 - adds r5, 0x82 - ldrb r0, [r5] - adds r2, r1, 0 - ands r2, r0 - strb r2, [r5] - ldrb r0, [r4, 0x19] - cmp r0, 0 - bne _080E52E8 - movs r1, 0x4 - adds r0, r3, 0 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - b _080E52FA - .align 2, 0 -_080E52DC: .4byte gUnknown_841E4E2 -_080E52E0: .4byte gUnknown_203AAB4 -_080E52E4: .4byte gSprites -_080E52E8: - ldrb r1, [r4, 0x19] - ldrb r0, [r4, 0x1A] - subs r0, 0x6 - cmp r1, r0 - bne _080E52FA - movs r1, 0x4 - adds r0, r2, 0 - orrs r0, r1 - strb r0, [r5] -_080E52FA: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80E5204 - - thumb_func_start sub_80E5300 -sub_80E5300: @ 80E5300 - push {r4,lr} - ldr r0, _080E5330 @ =gMultiuseListMenuTemplate - ldr r4, _080E5334 @ =gUnknown_203AAB4 - ldr r2, [r4] - ldr r3, _080E5338 @ =0x00000a68 - adds r1, r2, r3 - ldrh r1, [r1] - adds r3, 0x2 - adds r2, r3 - ldrh r2, [r2] - bl ListMenuInit - ldr r1, [r4] - ldr r2, _080E533C @ =0x00000263 - adds r1, r2 - strb r0, [r1] - movs r0, 0x6 - movs r1, 0x1 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E5330: .4byte gMultiuseListMenuTemplate -_080E5334: .4byte gUnknown_203AAB4 -_080E5338: .4byte 0x00000a68 -_080E533C: .4byte 0x00000263 - thumb_func_end sub_80E5300 - - thumb_func_start sub_80E5340 -sub_80E5340: @ 80E5340 - push {r4,r5,lr} - sub sp, 0x3C - lsls r0, 16 - lsrs r5, r0, 16 - ldr r1, _080E5380 @ =gBattleMoves - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 2 - adds r4, r0, r1 - ldrb r1, [r4, 0x2] - adds r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x2 - movs r2, 0x1 - movs r3, 0x4 - bl BlitMoveInfoIcon - ldrb r0, [r4, 0x1] - cmp r0, 0x1 - bhi _080E5388 - ldr r1, _080E5384 @ =gText_ThreeHyphens - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x3 - movs r2, 0x1 - movs r3, 0x4 - bl sub_80E559C - b _080E53A6 - .align 2, 0 -_080E5380: .4byte gBattleMoves -_080E5384: .4byte gText_ThreeHyphens -_080E5388: - ldrb r1, [r4, 0x1] - add r0, sp, 0x8 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x3 - add r1, sp, 0x8 - movs r2, 0x1 - movs r3, 0x4 - bl sub_80E559C -_080E53A6: - ldr r2, _080E53CC @ =gBattleMoves - lsls r1, r5, 1 - adds r0, r1, r5 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x3] - adds r4, r1, 0 - cmp r2, 0 - bne _080E53D4 - ldr r1, _080E53D0 @ =gText_ThreeHyphens - str r2, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0x3 - movs r2, 0x1 - movs r3, 0x12 - bl sub_80E559C - b _080E53F4 - .align 2, 0 -_080E53CC: .4byte gBattleMoves -_080E53D0: .4byte gText_ThreeHyphens -_080E53D4: - ldrb r1, [r0, 0x3] - add r0, sp, 0x8 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0x3 - add r1, sp, 0x8 - movs r2, 0x1 - movs r3, 0x12 - bl sub_80E559C -_080E53F4: - ldr r1, _080E543C @ =gBattleMoves - adds r0, r4, r5 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x4] - add r0, sp, 0x8 - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - movs r4, 0 - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x4 - add r1, sp, 0x8 - movs r2, 0x2 - movs r3, 0x2 - bl sub_80E559C - ldr r1, _080E5440 @ =gMoveDescriptionPointers - subs r0, r5, 0x1 - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x5 - movs r2, 0x1 - movs r3, 0 - bl sub_80E559C - add sp, 0x3C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E543C: .4byte gBattleMoves -_080E5440: .4byte gMoveDescriptionPointers - thumb_func_end sub_80E5340 - - thumb_func_start sub_80E5444 -sub_80E5444: @ 80E5444 - push {lr} - movs r0, 0 - movs r1, 0x13 - movs r2, 0x1 - movs r3, 0x4 - bl BlitMoveInfoIcon - movs r0, 0x1 - movs r1, 0x14 - movs r2, 0 - movs r3, 0x4 - bl BlitMoveInfoIcon - movs r0, 0x1 - movs r1, 0x15 - movs r2, 0 - movs r3, 0x13 - bl BlitMoveInfoIcon - movs r0, 0 - movs r1, 0x16 - movs r2, 0x1 - movs r3, 0x13 - bl BlitMoveInfoIcon - movs r0, 0 - movs r1, 0x17 - movs r2, 0x1 - movs r3, 0x22 - bl BlitMoveInfoIcon - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x4 - bl PutWindowTilemap - movs r0, 0x3 - bl PutWindowTilemap - movs r0, 0x5 - bl PutWindowTilemap - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0x7 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x1 - movs r1, 0x2 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_80E5444 - - thumb_func_start sub_80E54C0 -sub_80E54C0: @ 80E54C0 - push {r4,r5,lr} - ldr r0, _080E54E0 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldr r0, _080E54E4 @ =0x00000a67 - adds r2, r1, r0 - ldrb r0, [r2] - cmp r0, 0xFE - beq _080E54E8 - lsls r0, 1 - adds r1, 0xE8 - adds r1, r0 - ldrh r0, [r1] - bl sub_80E5340 - b _080E5504 - .align 2, 0 -_080E54E0: .4byte gUnknown_203AAB4 -_080E54E4: .4byte 0x00000a67 -_080E54E8: - movs r5, 0x2 -_080E54EA: - lsls r4, r5, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r0, r4, 0 - movs r1, 0x2 - bl CopyWindowToVram - adds r5, 0x1 - cmp r5, 0x5 - ble _080E54EA -_080E5504: - movs r0, 0x3 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x4 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x5 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x7 - movs r1, 0x3 - bl CopyWindowToVram - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80E54C0 - - thumb_func_start sub_80E553C -sub_80E553C: @ 80E553C - push {r4,lr} - adds r4, r0, 0 - lsls r1, 24 - cmp r1, 0 - bne _080E5560 - movs r0, 0x5 - bl PlaySE - ldr r2, _080E5568 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r1, _080E556C @ =0x0000025f - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E5570 @ =0x00000a67 - adds r0, r1 - strb r4, [r0] -_080E5560: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E5568: .4byte gUnknown_203AAB4 -_080E556C: .4byte 0x0000025f -_080E5570: .4byte 0x00000a67 - thumb_func_end sub_80E553C - - thumb_func_start sub_80E5574 -sub_80E5574: @ 80E5574 - push {r4,lr} - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _080E5594 - movs r0, 0x6 - bl PutWindowTilemap - movs r0, 0x6 - movs r1, 0x1 - bl CopyWindowToVram -_080E5594: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80E5574 - - thumb_func_start sub_80E559C -sub_80E559C: @ 80E559C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - mov r10, r1 - ldr r4, [sp, 0x38] - lsls r0, 24 - lsrs r5, r0, 24 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 24 - lsrs r6, r3, 24 - movs r0, 0x1 - mov r8, r0 - mov r9, r0 - cmp r4, 0x1 - bhi _080E55C8 - movs r1, 0 - mov r8, r1 - mov r9, r1 -_080E55C8: - cmp r4, 0 - blt _080E5622 - cmp r4, 0x1 - ble _080E55D6 - cmp r4, 0x2 - beq _080E5604 - b _080E5622 -_080E55D6: - ldr r2, _080E55F4 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r1, _080E55F8 @ =0x00000a64 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E55FC @ =0x00000a65 - adds r0, r1 - movs r1, 0x2 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E5600 @ =0x00000a66 - b _080E561C - .align 2, 0 -_080E55F4: .4byte gUnknown_203AAB4 -_080E55F8: .4byte 0x00000a64 -_080E55FC: .4byte 0x00000a65 -_080E5600: .4byte 0x00000a66 -_080E5604: - ldr r2, _080E5678 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r1, _080E567C @ =0x00000a64 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E5680 @ =0x00000a65 - adds r0, r1 - strb r4, [r0] - ldr r0, [r2] - adds r1, 0x1 -_080E561C: - adds r0, r1 - movs r1, 0x3 - strb r1, [r0] -_080E5622: - cmp r4, 0x1 - beq _080E563E - ldr r0, _080E5678 @ =gUnknown_203AAB4 - ldr r0, [r0] - ldr r1, _080E567C @ =0x00000a64 - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - orrs r1, r0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FillWindowPixelBuffer -_080E563E: - mov r0, r8 - str r0, [sp] - mov r1, r9 - str r1, [sp, 0x4] - ldr r0, _080E5678 @ =gUnknown_203AAB4 - ldr r0, [r0] - ldr r1, _080E567C @ =0x00000a64 - adds r0, r1 - str r0, [sp, 0x8] - ldr r0, [sp, 0x34] - lsls r0, 24 - asrs r0, 24 - str r0, [sp, 0xC] - mov r0, r10 - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x3 - adds r2, r7, 0 - adds r3, r6, 0 - bl AddTextPrinterParameterized4 - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E5678: .4byte gUnknown_203AAB4 -_080E567C: .4byte 0x00000a64 -_080E5680: .4byte 0x00000a65 - thumb_func_end sub_80E559C - - .align 2, 0 @ Don't pad with nop. diff --git a/baserom.ips b/baserom.ips index 37007325213a1b9b433790beb2e409571455bbea..4a40d3337e4029d3d7cc42a8f59b457d8c002953 100644 GIT binary patch delta 43 zcmcbxSn|nS$%Yoj7N#xCFW)n9ewnU#m|0}||M$!fINMMEVFqHB?Wg~+vW5Zx!~qoJ delta 741 zcmZ9Iv5V9|7{%YrB-yxTlE`jg?_4n#5kxd#p_RJ+2a0goDpq#3Rykq8!p6e81>uU- z#>P%K*lNM?A%sm;6`VF>#4^GDRW0{{h8VGKI*KVXPm)9~iIapkp?fi(dN~fh zXfHbeJi`=I-E4rP0 z6M5#kn$*l0&IfKw0I#UR5_m&BZArYQN=LQumQC9kt$h%ev*TX_cSCGO->6#=ci$l_ z3pQ$|ISciE58N)lyc-ME2dEkrCtiWmUs%XQu^=)vwE%ienfU<+f z{FX`u&-f3Wzzv??13IGZ1wXkEtXjcSVP4Qw*x|MI(%ZGbGsk|4ie28U-i(tw;@o-U3d5>sm@9OOEpz~jPxe%*bAo!kG{ ze__@+F>iaop4a9%YFoRPZjh6E<)fx};BQNF1gB-k)C;Q@eT)?8owg`LNApLuRom{U zwTu2G_zU}STYaojYrB`rw>NC#!ynPUv#Lwy&TKx^RN45{j-5B$VTY6MJ*mX|{=(B4 z^_XMWcJLHP-db_dG^ZfYdwO|iL<1xHa^A;IJI~k&b_&noaNqm0=G1|2nw-)G4<3g4 nNk5&f|9pbg1TilemapBuffer); + TextWindow_SetUserSelectedFrame(0, 1, 0xE0); + sub_8107D38(0xD0, 1); + LoadPalette(gUnknown_8E97DDC, 0x00, 0x20); + DecompressAndLoadBgGfxUsingHeap(1, gUnknown_8E97DFC, 0, 0, 0); + CopyToBgTilemapBuffer(1, gUnknown_8E97EC4, 0, 0); + CopyBgTilemapBufferToVram(1); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG1VOFS, 0); + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + } +} + +static void CB2_SelectMonToRelearnMove(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + sMoveRelearner = AllocZeroed(sizeof(struct LearnMoveGfxResources)); + InitMoveRelearnerStateVariables(); + sMoveRelearner->selectedPartyMember = gSpecialVar_0x8004; + sub_80E50CC(); + SetVBlankCallback(sub_80E4620); + sub_80E469C(); + sub_80E5004(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + SetMainCallback2(CB2_MoveRelearner); +} + +static void CB2_SelectMoveToOverwrite(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + sub_80E50CC(); + sMoveRelearner->selectedMoveSlot = gSpecialVar_0x8005; + SetVBlankCallback(sub_80E4620); + sub_80E469C(); + sub_80E5004(); + FillPalette(RGB_BLACK, 0, 2); + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + SetMainCallback2(CB2_MoveRelearner); +} + +static void CB2_MoveRelearner(void) +{ + if (!IsTextPrinterActive(7)) + MoveRelearnerStateMachine(); + if (sMoveRelearner->scheduleMoveInfoUpdate) + { + PrintMoveInfoHandleCancel_CopyToVram(); + sMoveRelearner->scheduleMoveInfoUpdate = FALSE; + } + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void sub_80E48C0(const u8 *str) +{ + StringExpandPlaceholders(gStringVar4, str); + PrintTextOnWindow(7, gStringVar4, 0, 2, GetTextSpeedSetting(), 2); +} + +static void MoveRelearnerStateMachine(void) +{ + u16 move; + + switch (sMoveRelearner->state) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + ShowBg(0); + ShowBg(1); + LoadMoveInfoUI(); + sMoveRelearner->state++; + DrawTextBorderOnWindows6and7(); + PrintTeachWhichMoveToStrVar1(FALSE); + sub_80E5300(); + sMoveRelearner->scheduleMoveInfoUpdate = TRUE; + break; + case 1: + if (!gPaletteFade.active) + sMoveRelearner->state = 4; + break; + case 2: + sMoveRelearner->state++; + break; + case 3: + PrintTeachWhichMoveToStrVar1(FALSE); + sMoveRelearner->scheduleMoveInfoUpdate = TRUE; + sMoveRelearner->state++; + break; + case 4: + sub_80E5204(); + break; + case 8: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state++; + break; + case 9: + switch (YesNoMenuProcessInput()) + { + case 0: + if (GiveMoveToMon(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]) != 0xFFFF) + { + sub_80E48C0(gUnknown_841E405); + gSpecialVar_0x8004 = TRUE; + sMoveRelearner->state = 31; + } + else + { + sMoveRelearner->state = 16; + } + break; + case 1: + case -1: + sMoveRelearner->state = 3; + break; + } + break; + case 12: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state++; + break; + case 13: + switch (YesNoMenuProcessInput()) + { + case 0: + gSpecialVar_0x8004 = FALSE; + sMoveRelearner->state = 14; + break; + case 1: + case -1: + sMoveRelearner->state = 3; + break; + } + break; + case 16: + sub_80E48C0(gUnknown_841E414); + sMoveRelearner->state++; + break; + case 17: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state = 18; + break; + case 18: + switch (YesNoMenuProcessInput()) + { + case 0: + sub_80E48C0(gUnknown_841E50C); + sMoveRelearner->state = 19; + break; + case 1: + case -1: + sMoveRelearner->state = 24; + break; + } + break; + case 24: + sub_80E48C0(gUnknown_841E481); + sMoveRelearner->state++; + break; + case 25: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state = 26; + break; + case 26: + switch (YesNoMenuProcessInput()) + { + case 0: + sMoveRelearner->state = 27; + break; + case 1: + case -1: + sMoveRelearner->state = 16; + break; + } + break; + case 27: + sMoveRelearner->state = 3; + break; + case 19: + sMoveRelearner->state = 20; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + break; + case 20: + if (!gPaletteFade.active) + { + ListMenuGetScrollAndRow(sMoveRelearner->listMenuTaskId, &sMoveRelearner->listMenuScrollPos, &sMoveRelearner->listMenuScrollRow); + FreeAllWindowBuffers(); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, sMoveRelearner->selectedPartyMember, gPlayerPartyCount - 1, CB2_SelectMoveToOverwrite, sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]); + sMoveRelearner->state = 28; + } + break; + case 21: + sMoveRelearner->state = 14; + break; + case 22: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sMoveRelearner->state++; + break; + case 15: + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + Free(sMoveRelearner); + SetMainCallback2(CB2_ReturnToField); + } + break; + case 28: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + ShowBg(0); + ShowBg(1); + sMoveRelearner->state++; + LoadMoveInfoUI(); + DrawTextBorderOnWindows6and7(); + sub_80E5300(); + PrintTeachWhichMoveToStrVar1(TRUE); + PrintMoveInfoHandleCancel_CopyToVram(); + break; + case 29: + if (!gPaletteFade.active) + { + if (sMoveRelearner->selectedMoveSlot == 4) + { + sMoveRelearner->state = 24; + } + else + { + move = GetMonData(&gPlayerParty[sMoveRelearner->selectedPartyMember], MON_DATA_MOVE1 + sMoveRelearner->selectedMoveSlot); + StringCopy(gStringVar3, gMoveNames[move]); + RemoveMonPPBonus(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->selectedMoveSlot); + SetMonMoveSlot(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex], sMoveRelearner->selectedMoveSlot); + StringCopy(gStringVar2, gMoveNames[sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]]); + sub_80E48C0(gUnknown_841E493); + sMoveRelearner->state = 30; + gSpecialVar_0x8004 = TRUE; + } + } + break; + case 30: + sub_80E48C0(gUnknown_841E4C0); + sMoveRelearner->state = 31; + PlayFanfare(MUS_FANFA1); + break; + case 31: + PlayFanfare(MUS_FANFA1); + sMoveRelearner->state = 32; + break; + case 32: + if (IsFanfareTaskInactive()) + sMoveRelearner->state = 33; + break; + case 33: + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sMoveRelearner->state = 14; + } + break; + } +} + +static void DrawTextBorderOnWindows6and7(void) +{ + int i; + for (i = 6; i < 8; i++) + DrawTextBorderOuter(i, 0x001, 0xE); +} + +static void PrintTeachWhichMoveToStrVar1(bool8 onInit) +{ + if (!onInit) + { + StringExpandPlaceholders(gStringVar4, gUnknown_841E3E3); + PrintTextOnWindow(7, gStringVar4, 0, 2, 0, 2); + PutWindowTilemap(7); + CopyWindowToVram(7, 3); + } +} + +static void InitMoveRelearnerStateVariables(void) +{ + int i; + sMoveRelearner->state = 0; + sMoveRelearner->unk_02 = 0; + sMoveRelearner->scrollPositionMaybe = 0; + sMoveRelearner->unk_18 = 0; + sMoveRelearner->unk_1C = 0; + sMoveRelearner->numLearnableMoves = 0; + sMoveRelearner->unk_1B = 0; + sMoveRelearner->unk_1D = 0; + sMoveRelearner->unk_1E = 0; + sMoveRelearner->scheduleMoveInfoUpdate = FALSE; + for (i = 0; i < 20; i++) + sMoveRelearner->learnableMoves[i] = MOVE_NONE; +} + +static void sub_80E4FAC(struct Sprite * sprite) +{ + s16 abcissa = (sprite->data[1] * 10) & 0xFF; + switch (sprite->data[0]) + { + case 0: + break; + case 1: + sprite->pos2.x = Sin(abcissa, 3) * sprite->data[2]; + break; + case 2: + sprite->pos2.y = Sin(abcissa, 1) * sprite->data[2]; + break; + } + sprite->data[1]++; +} + +static void sub_80E5004(void) +{ + int i; + LoadSpriteSheet(&gUnknown_83FF9F4); + LoadSpritePalette(&gUnknown_83FF9FC); + sMoveRelearner->spriteIds[0] = CreateSprite(&gUnknown_83FFA24, 200, 4, 0); + StartSpriteAnim(&gSprites[sMoveRelearner->spriteIds[0]], 1); + gSprites[sMoveRelearner->spriteIds[0]].data[0] = 2; + gSprites[sMoveRelearner->spriteIds[0]].data[2] = -1; + + // Bug: This should be using the second element of spriteIds. + sMoveRelearner->spriteIds[0] = CreateSprite(&gUnknown_83FFA24, 200, 108, 0); + gSprites[sMoveRelearner->spriteIds[0]].data[0] = 2; + gSprites[sMoveRelearner->spriteIds[0]].data[2] = 1; + for (i = 0; i < 2; i++) + gSprites[sMoveRelearner->spriteIds[i]].invisible = TRUE; +} + +static void sub_80E50CC(void) +{ + int i; + s32 count; + u8 nickname[11]; + + sMoveRelearner->numLearnableMoves = GetMoveRelearnerMoves(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves); + count = GetMoveRelearnerMoves(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves); + for (i = 0; i < sMoveRelearner->numLearnableMoves; i++) + StringCopy(sMoveRelearner->listMenuStrbufs[i], gMoveNames[sMoveRelearner->learnableMoves[i]]); + GetMonData(&gPlayerParty[sMoveRelearner->selectedPartyMember], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar1, nickname); + StringCopy(sMoveRelearner->listMenuStrbufs[sMoveRelearner->numLearnableMoves], gFameCheckerText_Cancel); + sMoveRelearner->numLearnableMoves++; + for (i = 0; i < count; i++) + { + sMoveRelearner->listMenuItems[i].label = sMoveRelearner->listMenuStrbufs[i]; + sMoveRelearner->listMenuItems[i].index = i; + } + sMoveRelearner->listMenuItems[i].label = gFameCheckerText_Cancel; + sMoveRelearner->listMenuItems[i].index = 0xFE; + gMultiuseListMenuTemplate = gUnknown_83FFA94; + gMultiuseListMenuTemplate.items = sMoveRelearner->listMenuItems; + gMultiuseListMenuTemplate.totalItems = count + 1; +} + +static void sub_80E5204(void) +{ + ListMenu_ProcessInput(sMoveRelearner->listMenuTaskId); + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + if (sMoveRelearner->selectedIndex != 0xFE) + { + sMoveRelearner->state = 8; + StringCopy(gStringVar2, sMoveRelearner->listMenuStrbufs[sMoveRelearner->selectedIndex]); + sub_80E48C0(gUnknown_841E3FB); + } + else + { + sub_80E48C0(gUnknown_841E4E2); + sMoveRelearner->state = 12; + } + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sMoveRelearner->state = 12; + sub_80E48C0(gUnknown_841E4E2); + } + if (sMoveRelearner->numLearnableMoves > 6) + { + gSprites[0].invisible = FALSE; + gSprites[1].invisible = FALSE; + if (sMoveRelearner->scrollPositionMaybe == 0) + gSprites[0].invisible = TRUE; + else if (sMoveRelearner->scrollPositionMaybe == sMoveRelearner->numLearnableMoves - 6) + gSprites[1].invisible = TRUE; + } +} + +static void sub_80E5300(void) +{ + sMoveRelearner->listMenuTaskId = ListMenuInit(&gMultiuseListMenuTemplate, sMoveRelearner->listMenuScrollPos, sMoveRelearner->listMenuScrollRow); + CopyWindowToVram(6, 1); +} + +static void PrintMoveInfo(u16 move) +{ + u8 buffer[50]; + BlitMoveInfoIcon(2, gBattleMoves[move].type + 1, 1, 4); + + if (gBattleMoves[move].power < 2) + { + PrintTextOnWindow(3, gText_ThreeHyphens, 1, 4, 0, 0); + } + else + { + ConvertIntToDecimalStringN(buffer, gBattleMoves[move].power, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintTextOnWindow(3, buffer, 1, 4, 0, 0); + } + + if (gBattleMoves[move].accuracy == 0) + { + PrintTextOnWindow(3, gText_ThreeHyphens, 1, 18, 0, 1); + } + else + { + ConvertIntToDecimalStringN(buffer, gBattleMoves[move].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintTextOnWindow(3, buffer, 1, 18, 0, 1); + } + ConvertIntToDecimalStringN(buffer, gBattleMoves[move].pp, STR_CONV_MODE_LEFT_ALIGN, 2); + PrintTextOnWindow(4, buffer, 2, 2, 0, 0); + PrintTextOnWindow(5, gMoveDescriptionPointers[move - 1], 1, 0, 0, 0); +} + +static void LoadMoveInfoUI(void) +{ + BlitMoveInfoIcon(0, 19, 1, 4); + BlitMoveInfoIcon(1, 20, 0, 4); + BlitMoveInfoIcon(1, 21, 0, 19); + BlitMoveInfoIcon(0, 22, 1, 19); + BlitMoveInfoIcon(0, 23, 1, 34); + PutWindowTilemap(0); + PutWindowTilemap(1); + PutWindowTilemap(4); + PutWindowTilemap(3); + PutWindowTilemap(5); + PutWindowTilemap(2); + PutWindowTilemap(7); + CopyWindowToVram(0, 2); + CopyWindowToVram(1, 2); +} + +static void PrintMoveInfoHandleCancel_CopyToVram(void) +{ + int i; + if (sMoveRelearner->selectedIndex != 0xFE) + { + PrintMoveInfo(sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]); + } + else + { + for (i = 2; i < 6; i++) + { + FillWindowPixelBuffer(i, PIXEL_FILL(0)); + CopyWindowToVram(i, 2); + } + } + CopyWindowToVram(3, 2); + CopyWindowToVram(4, 2); + CopyWindowToVram(2, 2); + CopyWindowToVram(2, 2); + CopyWindowToVram(5, 2); + CopyWindowToVram(7, 3); +} + +static void MoveRelearnerMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) +{ + if (!onInit) + { + PlaySE(SE_SELECT); + sMoveRelearner->scheduleMoveInfoUpdate = TRUE; + sMoveRelearner->selectedIndex = itemIndex; + } +} + +static s8 YesNoMenuProcessInput(void) +{ + s8 input = Menu_ProcessInputNoWrapClearOnChoose(); + if (input != -2) + { + PutWindowTilemap(6); + CopyWindowToVram(6, 1); + } + return input; +} + +static void PrintTextOnWindow(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed, s32 colorIdx) +{ + s32 letterSpacing = 1; + s32 lineSpacing = 1; + if (colorIdx == 0 || colorIdx == 1) + { + letterSpacing = 0; + lineSpacing = 0; + } + switch (colorIdx) + { + case 0: + case 1: + sMoveRelearner->textColor[0] = 0; + sMoveRelearner->textColor[1] = 2; + sMoveRelearner->textColor[2] = 3; + break; + case 2: + sMoveRelearner->textColor[0] = 1; + sMoveRelearner->textColor[1] = 2; + sMoveRelearner->textColor[2] = 3; + } + if (colorIdx != 1) + FillWindowPixelBuffer(windowId, PIXEL_FILL(sMoveRelearner->textColor[0])); + AddTextPrinterParameterized4(windowId, 3, x, y, letterSpacing, lineSpacing, sMoveRelearner->textColor, speed, str); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 27b3067ec..a892eb532 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -447,9 +447,8 @@ gUnknown_2039A34: @ 2039A34 gUnknown_203AAB0: @ 203AAB0 .space 0x4 -gUnknown_203AAB4: @ 203AAB4 - .space 0x4 - + .align 2 + .include "src/learn_move.o" .align 2 .include "src/battle_tower.o" .align 2 From fa91b511b918d4497b3f2156cdc4e007c51c9c51 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Nov 2019 19:43:47 -0500 Subject: [PATCH 07/33] Finish documentation of learn_move syms --- data/strings.s | 18 ++--- include/strings.h | 18 ++--- src/learn_move.c | 171 +++++++++++++++++++++++----------------------- 3 files changed, 103 insertions(+), 104 deletions(-) diff --git a/data/strings.s b/data/strings.s index 9b223df62..b6060f97b 100644 --- a/data/strings.s +++ b/data/strings.s @@ -4535,17 +4535,17 @@ gDaycareText_PlayOther:: @ 841E3A8 .string "The two prefer to play with other\n" .string "POKéMON than each other.$" -gUnknown_841E3E3:: @ 841E3E3 +gText_TeachWhichMoveToMon:: @ 841E3E3 .string "Teach which move to {STR_VAR_1}?$" -gUnknown_841E3FB:: @ 841E3FB +gText_TeachMoveQues:: @ 841E3FB .string "Teach {STR_VAR_2}?$" -gUnknown_841E405:: @ 841E405 +gText_MonLearnedMove:: @ 841E405 .string "{STR_VAR_1} learned\n" .string "{STR_VAR_2}.$" -gUnknown_841E414:: @ 841E414 +gText_MonIsTryingToLearnMove:: @ 841E414 .string "{STR_VAR_1} is trying to learn\n" .string "{STR_VAR_2}.\p" .string "But {STR_VAR_1} can't learn more\n" @@ -4553,24 +4553,24 @@ gUnknown_841E414:: @ 841E414 .string "Delete an older move to make\n" .string "room for {STR_VAR_2}?$" -gUnknown_841E481:: @ 841E481 +gText_StopLearningMove:: @ 841E481 .string "Stop learning {STR_VAR_2}?$" -gUnknown_841E493:: @ 841E493 +gText_1_2_and_Poof:: @ 841E493 .string "{PAUSE 0x20}1, {PAUSE 0x0F}2, and {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}{PLAY_SE SE_KON}Poof!\p" .string "$" -gUnknown_841E4C0:: @ 841E4C0 +gText_MonForgotOldMoveAndMonLearnedNewMove:: @ 841E4C0 .string "{STR_VAR_1} forgot {STR_VAR_3}.\p" .string "And‥\p" .string "{STR_VAR_1}\n" .string "learned {STR_VAR_2}.$" -gUnknown_841E4E2:: @ 841E4E2 +gText_GiveUpTryingToTeachNewMove:: @ 841E4E2 .string "Give up trying to teach a new\n" .string "move to {STR_VAR_1}?$" -gUnknown_841E50C:: @ 841E50C +WhichMoveShouldBeForgotten:: @ 841E50C .string "Which move should be forgotten?\p" .string "$" diff --git a/include/strings.h b/include/strings.h index 078a6b2db..14722f7d3 100644 --- a/include/strings.h +++ b/include/strings.h @@ -725,14 +725,14 @@ extern const u8 gText_Name[]; extern const u8 gText_MainMenuTime[]; // learn_move -extern const u8 gUnknown_841E3E3[]; -extern const u8 gUnknown_841E405[]; -extern const u8 gUnknown_841E414[]; -extern const u8 gUnknown_841E481[]; -extern const u8 gUnknown_841E493[]; -extern const u8 gUnknown_841E4C0[]; -extern const u8 gUnknown_841E50C[]; -extern const u8 gUnknown_841E3FB[]; -extern const u8 gUnknown_841E4E2[]; +extern const u8 gText_TeachWhichMoveToMon[]; +extern const u8 gText_MonLearnedMove[]; +extern const u8 gText_MonIsTryingToLearnMove[]; +extern const u8 gText_StopLearningMove[]; +extern const u8 gText_1_2_and_Poof[]; +extern const u8 gText_MonForgotOldMoveAndMonLearnedNewMove[]; +extern const u8 WhichMoveShouldBeForgotten[]; +extern const u8 gText_TeachMoveQues[]; +extern const u8 gText_GiveUpTryingToTeachNewMove[]; #endif //GUARD_STRINGS_H diff --git a/src/learn_move.c b/src/learn_move.c index 5b56c30b3..48ada8dd9 100644 --- a/src/learn_move.c +++ b/src/learn_move.c @@ -23,6 +23,14 @@ #include "constants/songs.h" #include "constants/moves.h" +struct MoveTutorMoveInfoHeaders +{ + const u8 *text; + u8 left; + u8 right; + u8 index; // unused +}; + struct LearnMoveGfxResources { u8 state; @@ -54,26 +62,26 @@ struct LearnMoveGfxResources static EWRAM_DATA struct LearnMoveGfxResources * sMoveRelearner = NULL; -static void sub_80E4660(u8 taskId); -static void CB2_SelectMonToRelearnMove(void); +static void Task_InitMoveRelearnerMenu(u8 taskId); +static void CB2_MoveRelearner_Init(void); static void CB2_MoveRelearner(void); static void MoveRelearnerStateMachine(void); static void DrawTextBorderOnWindows6and7(void); static void PrintTeachWhichMoveToStrVar1(bool8 onInit); static void InitMoveRelearnerStateVariables(void); -static void sub_80E4FAC(struct Sprite * sprite); -static void sub_80E5004(void); -static void sub_80E50CC(void); -static void sub_80E5204(void); -static void sub_80E5300(void); +static void SpriteCB_ListMenuScrollIndicators(struct Sprite * sprite); +static void SpawnListMenuScrollIndicatorSprites(void); +static void MoveRelearnerInitListMenuBuffersEtc(void); +static void MoveRelearnerMenuHandleInput(void); +static void MoveLearnerInitListMenu(void); static void LoadMoveInfoUI(void); static void PrintMoveInfoHandleCancel_CopyToVram(void); static void MoveRelearnerMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); static s8 YesNoMenuProcessInput(void); static void PrintTextOnWindow(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed, s32 colorIdx); -static const u16 gUnknown_83FF7D8[] = INCBIN_U16("graphics/learn_move/interface_sprites.gbapal"); -static const u16 gUnknown_83FF7F8[] = INCBIN_U16("graphics/learn_move/interface_sprites.4bpp"); +static const u16 sLearnMoveInterfaceSpritesPalette[] = INCBIN_U16("graphics/learn_move/interface_sprites.gbapal"); +static const u16 sLearnMoveInterfaceSpritesTiles[] = INCBIN_U16("graphics/learn_move/interface_sprites.4bpp"); static const u8 gMoveTutorMenuWindowFrameDimensions[][4] = { @@ -82,28 +90,20 @@ static const u8 gMoveTutorMenuWindowFrameDimensions[][4] = { 2, 14, 27, 19} }; -static const u8 gUnknown_83FF984[] = _("たたかうわざ"); -static const u8 gUnknown_83FF98B[] = _("タイプ/"); -static const u8 gUnknown_83FF990[] = _("PP/"); -static const u8 gUnknown_83FF994[] = _("いりょく/"); -static const u8 gUnknown_83FF99A[] = _("めいちゅう/"); - -struct MoveTutorMoveInfoHeaders -{ - const u8 *text; - u8 left; - u8 right; - u8 index; // unused -}; +static const u8 sJPText_TatakauWaza[] = _("たたかうわざ"); +static const u8 sJPText_Taipu[] = _("タイプ/"); +static const u8 sJPText_PP[] = _("PP/"); +static const u8 sJPText_Iryoku[] = _("いりょく/"); +static const u8 sJPText_Meichuu[] = _("めいちゅう/"); static const struct MoveTutorMoveInfoHeaders gMoveTutorMoveInfoHeaders[][5] = { { - {gUnknown_83FF984, 7, 1, 0}, - {gUnknown_83FF98B, 1, 4, 1}, - {gUnknown_83FF994, 11, 4, 2}, - {gUnknown_83FF990, 2, 6, 3}, - {gUnknown_83FF99A, 10, 6, 4}, + {sJPText_TatakauWaza, 7, 1, 0}, + {sJPText_Taipu, 1, 4, 1}, + {sJPText_Iryoku, 11, 4, 2}, + {sJPText_PP, 2, 6, 3}, + {sJPText_Meichuu, 10, 6, 4}, }, { {NULL, 0, 0, 0}, @@ -114,39 +114,39 @@ static const struct MoveTutorMoveInfoHeaders gMoveTutorMoveInfoHeaders[][5] = }, }; -static const struct SpriteSheet gUnknown_83FF9F4 = { - gUnknown_83FF7F8, 0x180, 5525 +static const struct SpriteSheet sSpriteSheet_ListMenuScrollIndicators = { + sLearnMoveInterfaceSpritesTiles, 0x180, 5525 }; -static const struct SpritePalette gUnknown_83FF9FC = { - gUnknown_83FF7D8, 5526 +static const struct SpritePalette sSpritePalette_ListMenuScrollIndicators = { + sLearnMoveInterfaceSpritesPalette, 5526 }; -static const struct OamData gOamData_83FFA04 = { +static const struct OamData sOamdata_MoveRelearnerListMenuScrollIndicators = { .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8) }; -static const union AnimCmd gAnimCmd_83FFA0C[] = { +static const union AnimCmd sAnimCmd_ScrollIndicatorDown[] = { ANIMCMD_FRAME(4, 5), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_83FFA14[] = { +static const union AnimCmd sAnimCmd_ScrollIndicatorUp[] = { ANIMCMD_FRAME(6, 5), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_83FFA1C[] = { - gAnimCmd_83FFA0C, - gAnimCmd_83FFA14 +static const union AnimCmd *const sSpriteAnimTable_MoveRelearnerListMenuScrollIndicators[] = { + sAnimCmd_ScrollIndicatorDown, + sAnimCmd_ScrollIndicatorUp }; -static const struct SpriteTemplate gUnknown_83FFA24 = { - 5525, 5526, &gOamData_83FFA04, gSpriteAnimTable_83FFA1C, NULL, gDummySpriteAffineAnimTable, sub_80E4FAC +static const struct SpriteTemplate sSpriteTemplate_MoveRelearnerListMenuScrollIndicators = { + 5525, 5526, &sOamdata_MoveRelearnerListMenuScrollIndicators, sSpriteAnimTable_MoveRelearnerListMenuScrollIndicators, NULL, gDummySpriteAffineAnimTable, SpriteCB_ListMenuScrollIndicators }; -static const struct BgTemplate gUnknown_83FFA3C[2] = { +static const struct BgTemplate sBgTemplates[2] = { { .bg = 0, .charBaseIndex = 2, @@ -161,7 +161,7 @@ static const struct BgTemplate gUnknown_83FFA3C[2] = { } }; -static const struct WindowTemplate gUnknown_83FFA44[9] = { +static const struct WindowTemplate sWindowTemplates[9] = { { .bg = 0, .tilemapLeft = 0, @@ -246,7 +246,7 @@ static const struct WindowTemplate gUnknown_83FFA8C = { .baseBlock = 0x1d1 }; -static const struct ListMenuTemplate gUnknown_83FFA94 = { +static const struct ListMenuTemplate sMoveRelearnerListMenuTemplate = { .items = NULL, .moveCursorFunc = MoveRelearnerMenu_MoveCursorFunc, .itemPrintFunc = NULL, @@ -267,8 +267,7 @@ static const struct ListMenuTemplate gUnknown_83FFA94 = { .cursorKind = 0, }; - -static void sub_80E4620(void) +static void VBlankCB_MoveRelearner(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -278,30 +277,30 @@ static void sub_80E4620(void) void DisplayMoveTutorMenu(void) { ScriptContext2_Enable(); - CreateTask(sub_80E4660, 10); + CreateTask(Task_InitMoveRelearnerMenu, 10); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); } -static void sub_80E4660(u8 taskId) +static void Task_InitMoveRelearnerMenu(u8 taskId) { if (!gPaletteFade.active) { - SetMainCallback2(CB2_SelectMonToRelearnMove); + SetMainCallback2(CB2_MoveRelearner_Init); gFieldCallback = FieldCallback_ReturnToEventScript2; DestroyTask(taskId); } } -static void sub_80E469C(void) +static void MoveRelearnerLoadBgGfx(void) { int i; ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, gUnknown_83FFA3C, NELEMS(gUnknown_83FFA3C)); + InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); ResetTempTileDataBuffers(); - if (InitWindows(gUnknown_83FFA44)) + if (InitWindows(sWindowTemplates)) { DeactivateAllTextPrinters(); - for (i = 0; i < NELEMS(gUnknown_83FFA44); i++) + for (i = 0; i < NELEMS(sWindowTemplates); i++) { ClearWindowTilemap(i); FillWindowPixelBuffer(i, PIXEL_FILL(0)); @@ -322,7 +321,7 @@ static void sub_80E469C(void) } } -static void CB2_SelectMonToRelearnMove(void) +static void CB2_MoveRelearner_Init(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetSpriteData(); @@ -331,10 +330,10 @@ static void CB2_SelectMonToRelearnMove(void) sMoveRelearner = AllocZeroed(sizeof(struct LearnMoveGfxResources)); InitMoveRelearnerStateVariables(); sMoveRelearner->selectedPartyMember = gSpecialVar_0x8004; - sub_80E50CC(); - SetVBlankCallback(sub_80E4620); - sub_80E469C(); - sub_80E5004(); + MoveRelearnerInitListMenuBuffersEtc(); + SetVBlankCallback(VBlankCB_MoveRelearner); + MoveRelearnerLoadBgGfx(); + SpawnListMenuScrollIndicatorSprites(); RunTasks(); AnimateSprites(); BuildOamBuffer(); @@ -342,17 +341,17 @@ static void CB2_SelectMonToRelearnMove(void) SetMainCallback2(CB2_MoveRelearner); } -static void CB2_SelectMoveToOverwrite(void) +static void CB2_MoveRelearner_Resume(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); - sub_80E50CC(); + MoveRelearnerInitListMenuBuffersEtc(); sMoveRelearner->selectedMoveSlot = gSpecialVar_0x8005; - SetVBlankCallback(sub_80E4620); - sub_80E469C(); - sub_80E5004(); + SetVBlankCallback(VBlankCB_MoveRelearner); + MoveRelearnerLoadBgGfx(); + SpawnListMenuScrollIndicatorSprites(); FillPalette(RGB_BLACK, 0, 2); RunTasks(); @@ -378,7 +377,7 @@ static void CB2_MoveRelearner(void) UpdatePaletteFade(); } -static void sub_80E48C0(const u8 *str) +static void StringExpandPlaceholdersAndPrintTextOnWindow7Color2(const u8 *str) { StringExpandPlaceholders(gStringVar4, str); PrintTextOnWindow(7, gStringVar4, 0, 2, GetTextSpeedSetting(), 2); @@ -398,7 +397,7 @@ static void MoveRelearnerStateMachine(void) sMoveRelearner->state++; DrawTextBorderOnWindows6and7(); PrintTeachWhichMoveToStrVar1(FALSE); - sub_80E5300(); + MoveLearnerInitListMenu(); sMoveRelearner->scheduleMoveInfoUpdate = TRUE; break; case 1: @@ -414,7 +413,7 @@ static void MoveRelearnerStateMachine(void) sMoveRelearner->state++; break; case 4: - sub_80E5204(); + MoveRelearnerMenuHandleInput(); break; case 8: CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); @@ -426,7 +425,7 @@ static void MoveRelearnerStateMachine(void) case 0: if (GiveMoveToMon(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]) != 0xFFFF) { - sub_80E48C0(gUnknown_841E405); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonLearnedMove); gSpecialVar_0x8004 = TRUE; sMoveRelearner->state = 31; } @@ -459,7 +458,7 @@ static void MoveRelearnerStateMachine(void) } break; case 16: - sub_80E48C0(gUnknown_841E414); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonIsTryingToLearnMove); sMoveRelearner->state++; break; case 17: @@ -470,7 +469,7 @@ static void MoveRelearnerStateMachine(void) switch (YesNoMenuProcessInput()) { case 0: - sub_80E48C0(gUnknown_841E50C); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(WhichMoveShouldBeForgotten); sMoveRelearner->state = 19; break; case 1: @@ -480,7 +479,7 @@ static void MoveRelearnerStateMachine(void) } break; case 24: - sub_80E48C0(gUnknown_841E481); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_StopLearningMove); sMoveRelearner->state++; break; case 25: @@ -511,7 +510,7 @@ static void MoveRelearnerStateMachine(void) { ListMenuGetScrollAndRow(sMoveRelearner->listMenuTaskId, &sMoveRelearner->listMenuScrollPos, &sMoveRelearner->listMenuScrollRow); FreeAllWindowBuffers(); - ShowSelectMovePokemonSummaryScreen(gPlayerParty, sMoveRelearner->selectedPartyMember, gPlayerPartyCount - 1, CB2_SelectMoveToOverwrite, sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, sMoveRelearner->selectedPartyMember, gPlayerPartyCount - 1, CB2_MoveRelearner_Resume, sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]); sMoveRelearner->state = 28; } break; @@ -540,7 +539,7 @@ static void MoveRelearnerStateMachine(void) sMoveRelearner->state++; LoadMoveInfoUI(); DrawTextBorderOnWindows6and7(); - sub_80E5300(); + MoveLearnerInitListMenu(); PrintTeachWhichMoveToStrVar1(TRUE); PrintMoveInfoHandleCancel_CopyToVram(); break; @@ -558,14 +557,14 @@ static void MoveRelearnerStateMachine(void) RemoveMonPPBonus(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->selectedMoveSlot); SetMonMoveSlot(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex], sMoveRelearner->selectedMoveSlot); StringCopy(gStringVar2, gMoveNames[sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]]); - sub_80E48C0(gUnknown_841E493); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_1_2_and_Poof); sMoveRelearner->state = 30; gSpecialVar_0x8004 = TRUE; } } break; case 30: - sub_80E48C0(gUnknown_841E4C0); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonForgotOldMoveAndMonLearnedNewMove); sMoveRelearner->state = 31; PlayFanfare(MUS_FANFA1); break; @@ -598,7 +597,7 @@ static void PrintTeachWhichMoveToStrVar1(bool8 onInit) { if (!onInit) { - StringExpandPlaceholders(gStringVar4, gUnknown_841E3E3); + StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToMon); PrintTextOnWindow(7, gStringVar4, 0, 2, 0, 2); PutWindowTilemap(7); CopyWindowToVram(7, 3); @@ -622,7 +621,7 @@ static void InitMoveRelearnerStateVariables(void) sMoveRelearner->learnableMoves[i] = MOVE_NONE; } -static void sub_80E4FAC(struct Sprite * sprite) +static void SpriteCB_ListMenuScrollIndicators(struct Sprite * sprite) { s16 abcissa = (sprite->data[1] * 10) & 0xFF; switch (sprite->data[0]) @@ -639,25 +638,25 @@ static void sub_80E4FAC(struct Sprite * sprite) sprite->data[1]++; } -static void sub_80E5004(void) +static void SpawnListMenuScrollIndicatorSprites(void) { int i; - LoadSpriteSheet(&gUnknown_83FF9F4); - LoadSpritePalette(&gUnknown_83FF9FC); - sMoveRelearner->spriteIds[0] = CreateSprite(&gUnknown_83FFA24, 200, 4, 0); + LoadSpriteSheet(&sSpriteSheet_ListMenuScrollIndicators); + LoadSpritePalette(&sSpritePalette_ListMenuScrollIndicators); + sMoveRelearner->spriteIds[0] = CreateSprite(&sSpriteTemplate_MoveRelearnerListMenuScrollIndicators, 200, 4, 0); StartSpriteAnim(&gSprites[sMoveRelearner->spriteIds[0]], 1); gSprites[sMoveRelearner->spriteIds[0]].data[0] = 2; gSprites[sMoveRelearner->spriteIds[0]].data[2] = -1; // Bug: This should be using the second element of spriteIds. - sMoveRelearner->spriteIds[0] = CreateSprite(&gUnknown_83FFA24, 200, 108, 0); + sMoveRelearner->spriteIds[0] = CreateSprite(&sSpriteTemplate_MoveRelearnerListMenuScrollIndicators, 200, 108, 0); gSprites[sMoveRelearner->spriteIds[0]].data[0] = 2; gSprites[sMoveRelearner->spriteIds[0]].data[2] = 1; for (i = 0; i < 2; i++) gSprites[sMoveRelearner->spriteIds[i]].invisible = TRUE; } -static void sub_80E50CC(void) +static void MoveRelearnerInitListMenuBuffersEtc(void) { int i; s32 count; @@ -678,12 +677,12 @@ static void sub_80E50CC(void) } sMoveRelearner->listMenuItems[i].label = gFameCheckerText_Cancel; sMoveRelearner->listMenuItems[i].index = 0xFE; - gMultiuseListMenuTemplate = gUnknown_83FFA94; + gMultiuseListMenuTemplate = sMoveRelearnerListMenuTemplate; gMultiuseListMenuTemplate.items = sMoveRelearner->listMenuItems; gMultiuseListMenuTemplate.totalItems = count + 1; } -static void sub_80E5204(void) +static void MoveRelearnerMenuHandleInput(void) { ListMenu_ProcessInput(sMoveRelearner->listMenuTaskId); if (JOY_NEW(A_BUTTON)) @@ -693,11 +692,11 @@ static void sub_80E5204(void) { sMoveRelearner->state = 8; StringCopy(gStringVar2, sMoveRelearner->listMenuStrbufs[sMoveRelearner->selectedIndex]); - sub_80E48C0(gUnknown_841E3FB); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_TeachMoveQues); } else { - sub_80E48C0(gUnknown_841E4E2); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_GiveUpTryingToTeachNewMove); sMoveRelearner->state = 12; } } @@ -705,7 +704,7 @@ static void sub_80E5204(void) { PlaySE(SE_SELECT); sMoveRelearner->state = 12; - sub_80E48C0(gUnknown_841E4E2); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_GiveUpTryingToTeachNewMove); } if (sMoveRelearner->numLearnableMoves > 6) { @@ -718,7 +717,7 @@ static void sub_80E5204(void) } } -static void sub_80E5300(void) +static void MoveLearnerInitListMenu(void) { sMoveRelearner->listMenuTaskId = ListMenuInit(&gMultiuseListMenuTemplate, sMoveRelearner->listMenuScrollPos, sMoveRelearner->listMenuScrollRow); CopyWindowToVram(6, 1); From 451310c0c8a61b2f81b8573a44e959f95c223afb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 10 Nov 2019 20:15:41 -0500 Subject: [PATCH 08/33] Address review comments --- data/learn_move.s | 7 ------- data/strings.s | 2 +- include/strings.h | 2 +- src/learn_move.c | 6 +++--- 4 files changed, 5 insertions(+), 12 deletions(-) delete mode 100644 data/learn_move.s diff --git a/data/learn_move.s b/data/learn_move.s deleted file mode 100644 index 7b0827b6c..000000000 --- a/data/learn_move.s +++ /dev/null @@ -1,7 +0,0 @@ -#include "constants/region_map.h" -#include "constants/flags.h" -#include "constants/moves.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 diff --git a/data/strings.s b/data/strings.s index b6060f97b..101946475 100644 --- a/data/strings.s +++ b/data/strings.s @@ -4570,7 +4570,7 @@ gText_GiveUpTryingToTeachNewMove:: @ 841E4E2 .string "Give up trying to teach a new\n" .string "move to {STR_VAR_1}?$" -WhichMoveShouldBeForgotten:: @ 841E50C +gText_WhichMoveShouldBeForgotten:: @ 841E50C .string "Which move should be forgotten?\p" .string "$" diff --git a/include/strings.h b/include/strings.h index 14722f7d3..f39f4f553 100644 --- a/include/strings.h +++ b/include/strings.h @@ -731,7 +731,7 @@ extern const u8 gText_MonIsTryingToLearnMove[]; extern const u8 gText_StopLearningMove[]; extern const u8 gText_1_2_and_Poof[]; extern const u8 gText_MonForgotOldMoveAndMonLearnedNewMove[]; -extern const u8 WhichMoveShouldBeForgotten[]; +extern const u8 gText_WhichMoveShouldBeForgotten[]; extern const u8 gText_TeachMoveQues[]; extern const u8 gText_GiveUpTryingToTeachNewMove[]; diff --git a/src/learn_move.c b/src/learn_move.c index 48ada8dd9..e22922528 100644 --- a/src/learn_move.c +++ b/src/learn_move.c @@ -83,7 +83,7 @@ static void PrintTextOnWindow(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed, static const u16 sLearnMoveInterfaceSpritesPalette[] = INCBIN_U16("graphics/learn_move/interface_sprites.gbapal"); static const u16 sLearnMoveInterfaceSpritesTiles[] = INCBIN_U16("graphics/learn_move/interface_sprites.4bpp"); -static const u8 gMoveTutorMenuWindowFrameDimensions[][4] = +static const u8 sMoveTutorMenuWindowFrameDimensions[][4] = { { 0, 0, 19, 13}, {20, 0, 29, 13}, @@ -96,7 +96,7 @@ static const u8 sJPText_PP[] = _("PP/"); static const u8 sJPText_Iryoku[] = _("いりょく/"); static const u8 sJPText_Meichuu[] = _("めいちゅう/"); -static const struct MoveTutorMoveInfoHeaders gMoveTutorMoveInfoHeaders[][5] = +static const struct MoveTutorMoveInfoHeaders sMoveTutorMoveInfoHeaders[][5] = { { {sJPText_TatakauWaza, 7, 1, 0}, @@ -469,7 +469,7 @@ static void MoveRelearnerStateMachine(void) switch (YesNoMenuProcessInput()) { case 0: - StringExpandPlaceholdersAndPrintTextOnWindow7Color2(WhichMoveShouldBeForgotten); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_WhichMoveShouldBeForgotten); sMoveRelearner->state = 19; break; case 1: From ea779d8f359feb860a958e9d83c06a6c99cc90f1 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 11 Nov 2019 13:10:36 +0800 Subject: [PATCH 09/33] sub_8141198 --- src/slot_machine.c | 305 ++------------------------------------------- 1 file changed, 8 insertions(+), 297 deletions(-) diff --git a/src/slot_machine.c b/src/slot_machine.c index 3bfbbb08b..866da9eb1 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -2070,10 +2070,15 @@ static bool32 sub_8141180(u8 a0) return sub_814112C()->field_0000[a0].unk3; } -#ifdef NONMATCHING +static inline void LoadColor(u16 color, u16 *pal) +{ + *pal = color; + LoadPalette(pal, 0x00, 0x02); +} + static bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) { - u16 pal; + u16 pal[2]; u8 textColor[3]; u32 x; @@ -2109,8 +2114,7 @@ static bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) LoadPalette(gUnknown_8465930, 0x00, 0xA0); LoadPalette(gUnknown_84664BC, 0x50, 0x20); LoadPalette(gUnknown_84665C0, 0x70, 0x60); - pal = RGB(30, 30, 31); - LoadPalette(&pal, 0x00, 0x02); + LoadColor(RGB(30, 30, 31), pal); LoadUserWindowBorderGfx(0, 0x00A, 0xD0); sub_814FDA0(0, 0x001, 0xF0); @@ -2165,299 +2169,6 @@ static bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) } return TRUE; } -#else -NAKED -static bool8 sub_8141198(u8 * state, struct SlotMachineSetupTaskData * ptr) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r8\n" - "\tpush {r7}\n" - "\tsub sp, 0x14\n" - "\tadds r7, r0, 0\n" - "\tmov r8, r1\n" - "\tldrb r6, [r7]\n" - "\tcmp r6, 0x1\n" - "\tbeq _081411D0\n" - "\tcmp r6, 0x1\n" - "\tbgt _081411B4\n" - "\tcmp r6, 0\n" - "\tbeq _081411C2\n" - "\tb _08141450\n" - "_081411B4:\n" - "\tcmp r6, 0x2\n" - "\tbne _081411BA\n" - "\tb _081413E4\n" - "_081411BA:\n" - "\tcmp r6, 0x3\n" - "\tbne _081411C0\n" - "\tb _08141436\n" - "_081411C0:\n" - "\tb _08141450\n" - "_081411C2:\n" - "\tmovs r0, 0x1\n" - "\tnegs r0, r0\n" - "\tmovs r1, 0x10\n" - "\tmovs r2, 0\n" - "\tbl BlendPalettes\n" - "\tb _0814142E\n" - "_081411D0:\n" - "\tmovs r0, 0\n" - "\tbl SetVBlankCallback\n" - "\tbl ResetSpriteData\n" - "\tbl FreeAllSpritePalettes\n" - "\tmovs r1, 0xE0\n" - "\tlsls r1, 19\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 3\n" - "\tmovs r0, 0\n" - "\tmovs r3, 0x1\n" - "\tbl RequestDma3Fill\n" - "\tmovs r1, 0xC0\n" - "\tlsls r1, 19\n" - "\tmovs r0, 0\n" - "\tmovs r2, 0x20\n" - "\tmovs r3, 0x1\n" - "\tbl RequestDma3Fill\n" - "\tldr r1, _0814139C @ =0x0600c000\n" - "\tmovs r0, 0\n" - "\tmovs r2, 0x20\n" - "\tmovs r3, 0x1\n" - "\tbl RequestDma3Fill\n" - "\tmovs r0, 0\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tbl ResetBgPositions\n" - "\tmovs r0, 0\n" - "\tbl ResetBgsAndClearDma3BusyFlags\n" - "\tldr r1, _081413A0 @ =gUnknown_8466B10\n" - "\tmovs r0, 0\n" - "\tmovs r2, 0x4\n" - "\tbl InitBgsFromTemplates\n" - "\tldr r0, _081413A4 @ =gUnknown_8466B20\n" - "\tbl InitWindows\n" - "\tldr r1, _081413A8 @ =0x0000205c\n" - "\tadd r1, r8\n" - "\tmovs r0, 0x3\n" - "\tbl SetBgTilemapBuffer\n" - "\tmovs r4, 0x20\n" - "\tstr r4, [sp]\n" - "\tstr r4, [sp, 0x4]\n" - "\tmovs r0, 0x3\n" - "\tmovs r1, 0\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0\n" - "\tbl FillBgTilemapBufferRect_Palette0\n" - "\tmovs r0, 0x3\n" - "\tbl CopyBgTilemapBufferToVram\n" - "\tbl ResetTempTileDataBuffers\n" - "\tldr r1, _081413AC @ =gUnknown_84659D0\n" - "\tmovs r5, 0\n" - "\tstr r5, [sp]\n" - "\tmovs r0, 0x2\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0\n" - "\tbl DecompressAndCopyTileDataToVram\n" - "\tldr r1, _081413B0 @ =gUnknown_846653C\n" - "\tstr r5, [sp]\n" - "\tmovs r0, 0x2\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0xC0\n" - "\tbl DecompressAndCopyTileDataToVram\n" - "\tldr r1, _081413B4 @ =0x0000185c\n" - "\tadd r1, r8\n" - "\tmovs r0, 0x2\n" - "\tbl SetBgTilemapBuffer\n" - "\tldr r1, _081413B8 @ =gUnknown_84661D4\n" - "\tmovs r0, 0x2\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0\n" - "\tbl CopyToBgTilemapBuffer\n" - "\tmovs r0, 0x2\n" - "\tbl CopyBgTilemapBufferToVram\n" - "\tldr r0, _081413BC @ =gUnknown_8465930\n" - "\tmovs r1, 0\n" - "\tmovs r2, 0xA0\n" - "\tbl LoadPalette\n" - "\tldr r0, _081413C0 @ =gUnknown_84664BC\n" - "\tmovs r1, 0x50\n" - "\tmovs r2, 0x20\n" - "\tbl LoadPalette\n" - "\tldr r0, _081413C4 @ =gUnknown_84665C0\n" - "\tmovs r1, 0x70\n" - "\tmovs r2, 0x60\n" - "\tbl LoadPalette\n" - "\tldr r1, _081413C8 @ =0x00007fde\n" - "\tadd r0, sp, 0xC\n" - "\tstrh r1, [r0]\n" - "\tmovs r1, 0\n" - "\tmovs r2, 0x2\n" - "\tbl LoadPalette\n" - "\tmovs r0, 0\n" - "\tmovs r1, 0xA\n" - "\tmovs r2, 0xD0\n" - "\tbl LoadUserWindowBorderGfx\n" - "\tmovs r0, 0\n" - "\tmovs r1, 0x1\n" - "\tmovs r2, 0xF0\n" - "\tbl sub_814FDA0\n" - "\tldr r1, _081413CC @ =0x0000085c\n" - "\tadd r1, r8\n" - "\tmovs r0, 0\n" - "\tbl SetBgTilemapBuffer\n" - "\tstr r4, [sp]\n" - "\tmovs r0, 0x1E\n" - "\tstr r0, [sp, 0x4]\n" - "\tmovs r0, 0\n" - "\tmovs r1, 0\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x2\n" - "\tbl FillBgTilemapBufferRect_Palette0\n" - "\tldr r1, _081413D0 @ =gUnknown_8466620\n" - "\tstr r5, [sp]\n" - "\tmovs r0, 0x1\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0\n" - "\tbl DecompressAndCopyTileDataToVram\n" - "\tldr r1, _081413D4 @ =gUnknown_8466998\n" - "\tstr r6, [sp]\n" - "\tmovs r0, 0x1\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0\n" - "\tbl DecompressAndCopyTileDataToVram\n" - "\tmovs r0, 0x1\n" - "\tbl CopyBgTilemapBufferToVram\n" - "\tmovs r0, 0x2\n" - "\tbl stdpal_get\n" - "\tmovs r1, 0xE0\n" - "\tmovs r2, 0x20\n" - "\tbl LoadPalette\n" - "\tmovs r0, 0x1\n" - "\tmovs r1, 0xFF\n" - "\tbl FillWindowPixelBuffer\n" - "\tmovs r0, 0x1\n" - "\tbl PutWindowTilemap\n" - "\tldr r4, _081413D8 @ =gString_SlotMachineControls\n" - "\tmovs r0, 0\n" - "\tadds r1, r4, 0\n" - "\tmovs r2, 0\n" - "\tbl GetStringWidth\n" - "\tmovs r2, 0xEC\n" - "\tsubs r2, r0\n" - "\tadd r1, sp, 0x10\n" - "\tmovs r0, 0xF\n" - "\tstrb r0, [r1]\n" - "\tstrb r6, [r1, 0x1]\n" - "\tmovs r0, 0x2\n" - "\tstrb r0, [r1, 0x2]\n" - "\tlsls r2, 24\n" - "\tlsrs r2, 24\n" - "\tstr r1, [sp]\n" - "\tstr r5, [sp, 0x4]\n" - "\tstr r4, [sp, 0x8]\n" - "\tmovs r0, 0x1\n" - "\tmovs r1, 0\n" - "\tmovs r3, 0\n" - "\tbl AddTextPrinterParameterized3\n" - "\tmovs r0, 0\n" - "\tbl CopyBgTilemapBufferToVram\n" - "\tmovs r1, 0x83\n" - "\tlsls r1, 5\n" - "\tmovs r0, 0\n" - "\tbl SetGpuRegBits\n" - "\tmovs r0, 0x50\n" - "\tmovs r1, 0xF8\n" - "\tbl SetGpuReg\n" - "\tbl sub_8140C0C\n" - "\tbl sub_8140CA0\n" - "\tbl sub_8140E9C\n" - "\tbl sub_8140FC4\n" - "\tbl sub_8140F2C\n" - "\tmovs r0, 0x1\n" - "\tnegs r0, r0\n" - "\tmovs r1, 0x10\n" - "\tmovs r2, 0\n" - "\tbl BlendPalettes\n" - "\tldr r0, _081413DC @ =sub_8141118\n" - "\tbl SetVBlankCallback\n" - "\tldr r0, _081413E0 @ =sub_8140E40\n" - "\tbl SetHBlankCallback\n" - "\tb _0814142E\n" - "\t.align 2, 0\n" - "_0814139C: .4byte 0x0600c000\n" - "_081413A0: .4byte gUnknown_8466B10\n" - "_081413A4: .4byte gUnknown_8466B20\n" - "_081413A8: .4byte 0x0000205c\n" - "_081413AC: .4byte gUnknown_84659D0\n" - "_081413B0: .4byte gUnknown_846653C\n" - "_081413B4: .4byte 0x0000185c\n" - "_081413B8: .4byte gUnknown_84661D4\n" - "_081413BC: .4byte gUnknown_8465930\n" - "_081413C0: .4byte gUnknown_84664BC\n" - "_081413C4: .4byte gUnknown_84665C0\n" - "_081413C8: .4byte 0x00007fde\n" - "_081413CC: .4byte 0x0000085c\n" - "_081413D0: .4byte gUnknown_8466620\n" - "_081413D4: .4byte gUnknown_8466998\n" - "_081413D8: .4byte gString_SlotMachineControls\n" - "_081413DC: .4byte sub_8141118\n" - "_081413E0: .4byte sub_8140E40\n" - "_081413E4:\n" - "\tbl FreeTempTileDataBuffersIfPossible\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tcmp r5, 0\n" - "\tbne _08141450\n" - "\tmovs r0, 0\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x3\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x2\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x1\n" - "\tbl HideBg\n" - "\tbl sub_8141B34\n" - "\tmovs r4, 0x1\n" - "\tnegs r4, r4\n" - "\tadds r0, r4, 0\n" - "\tmovs r1, 0x10\n" - "\tmovs r2, 0\n" - "\tbl BlendPalettes\n" - "\tstr r5, [sp]\n" - "\tadds r0, r4, 0\n" - "\tadds r1, r4, 0\n" - "\tmovs r2, 0x10\n" - "\tmovs r3, 0\n" - "\tbl BeginNormalPaletteFade\n" - "\tmovs r0, 0x3\n" - "\tbl EnableInterrupts\n" - "_0814142E:\n" - "\tldrb r0, [r7]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r7]\n" - "\tb _08141450\n" - "_08141436:\n" - "\tbl UpdatePaletteFade\n" - "\tldr r0, _0814144C @ =gPaletteFade\n" - "\tldrb r1, [r0, 0x7]\n" - "\tmovs r0, 0x80\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbne _08141450\n" - "\tmovs r0, 0\n" - "\tb _08141452\n" - "\t.align 2, 0\n" - "_0814144C: .4byte gPaletteFade\n" - "_08141450:\n" - "\tmovs r0, 0x1\n" - "_08141452:\n" - "\tadd sp, 0x14\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1"); -} -#endif //NONMATCHING static bool8 sub_8141460(u8 * state, struct SlotMachineSetupTaskData * ptr) { From ccaa93430541f0ed0e0f99057a78fd7cf290f54c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 09:33:24 -0500 Subject: [PATCH 10/33] Decump SaveStatToString --- asm/save_menu_util.s | 149 ------------------------------------ baserom.ips | Bin 413412 -> 399180 bytes data/field_effect_helpers.s | 20 +++-- data/unknown_serial_data.s | 2 +- ld_script.txt | 2 +- src/save_menu_util.c | 57 ++++++++++++++ 6 files changed, 72 insertions(+), 158 deletions(-) delete mode 100644 asm/save_menu_util.s create mode 100644 src/save_menu_util.c diff --git a/asm/save_menu_util.s b/asm/save_menu_util.s deleted file mode 100644 index 8ebfc3731..000000000 --- a/asm/save_menu_util.s +++ /dev/null @@ -1,149 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start SaveStatToString -SaveStatToString: @ 80F7FCC - push {r4-r7,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r2, 24 - lsrs r2, 24 - adds r5, r1, 0 - movs r1, 0xFC - strb r1, [r5] - adds r5, 0x1 - movs r0, 0x1 - strb r0, [r5] - adds r5, 0x1 - strb r2, [r5] - adds r5, 0x1 - strb r1, [r5] - adds r5, 0x1 - movs r0, 0x3 - strb r0, [r5] - adds r5, 0x1 - adds r2, 0x1 - strb r2, [r5] - adds r5, 0x1 - cmp r3, 0x5 - bhi _080F80D8 - lsls r0, r3, 2 - ldr r1, _080F8008 @ =_080F800C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F8008: .4byte _080F800C - .align 2, 0 -_080F800C: - .4byte _080F8024 - .4byte _080F8034 - .4byte _080F805C - .4byte _080F8098 - .4byte _080F80A8 - .4byte _080F806C -_080F8024: - ldr r0, _080F8030 @ =gSaveBlock2Ptr - ldr r1, [r0] - adds r0, r5, 0 - bl StringCopy - b _080F80D8 - .align 2, 0 -_080F8030: .4byte gSaveBlock2Ptr -_080F8034: - bl IsNationalPokedexEnabled - cmp r0, 0 - beq _080F8044 - movs r0, 0x1 - bl GetNationalPokedexCount - b _080F804A -_080F8044: - movs r0, 0x1 - bl GetKantoPokedexCount -_080F804A: - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r5, 0 - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - b _080F80D8 -_080F805C: - ldr r4, _080F8068 @ =gSaveBlock2Ptr - ldr r0, [r4] - ldrh r1, [r0, 0xE] - adds r0, r5, 0 - movs r2, 0 - b _080F8076 - .align 2, 0 -_080F8068: .4byte gSaveBlock2Ptr -_080F806C: - ldr r4, _080F8094 @ =gSaveBlock2Ptr - ldr r0, [r4] - ldrh r1, [r0, 0xE] - adds r0, r5, 0 - movs r2, 0x1 -_080F8076: - movs r3, 0x3 - bl ConvertIntToDecimalStringN - adds r5, r0, 0 - movs r0, 0xF0 - strb r0, [r5] - adds r5, 0x1 - ldr r0, [r4] - ldrb r1, [r0, 0x10] - adds r0, r5, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - b _080F80D8 - .align 2, 0 -_080F8094: .4byte gSaveBlock2Ptr -_080F8098: - ldr r0, _080F80A4 @ =gMapHeader - ldrb r1, [r0, 0x14] - adds r0, r5, 0 - bl sub_80C4DF8 - b _080F80D8 - .align 2, 0 -_080F80A4: .4byte gMapHeader -_080F80A8: - movs r4, 0x82 - lsls r4, 4 - movs r6, 0 - adds r7, r5, 0x1 -_080F80B0: - lsls r0, r4, 16 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080F80C0 - adds r6, 0x1 -_080F80C0: - adds r4, 0x1 - ldr r0, _080F80E0 @ =0x00000827 - cmp r4, r0 - ble _080F80B0 - adds r0, r6, 0 - subs r0, 0x5F - strb r0, [r5] - adds r5, r7, 0 - movs r0, 0xA - strb r0, [r5] - movs r0, 0xFF - strb r0, [r5, 0x1] -_080F80D8: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F80E0: .4byte 0x00000827 - thumb_func_end SaveStatToString - - .align 2, 0 @ Don't pad with nop. diff --git a/baserom.ips b/baserom.ips index 4a40d3337e4029d3d7cc42a8f59b457d8c002953..d4a0a8bc04eebd418bd7c438fdbc5eb06378e4ca 100644 GIT binary patch delta 41 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 Le#BMeTi5>u5ciQ6 diff --git a/data/field_effect_helpers.s b/data/field_effect_helpers.s index 429df9f61..7ad7b168a 100644 --- a/data/field_effect_helpers.s +++ b/data/field_effect_helpers.s @@ -7,22 +7,28 @@ .align 2 gUnknown_83FECCC:: @ 83FECCC - .byte 0x0c, 0x00, 0x1c, 0x00, 0x2c, 0x00 + .2byte 0x0c, 0x1c, 0x2c gUnknown_83FECD2:: @ 83FECD2 - .incbin "baserom.gba", 0x3FECD2, 0x4 + .byte 0, 1, 2, 3 gUnknown_83FECD6:: @ 83FECD6 - .incbin "baserom.gba", 0x3FECD6, 0xA + .2byte 0x0004, 0x0004, 0x0004, 0x0010 + .align 2 gUnknown_83FECE0:: @ 83FECE0 - .incbin "baserom.gba", 0x3FECE0, 0x8 + .4byte sub_80DBB18 + .4byte sub_80DBB3C + .align 2 gUnknown_83FECE8:: @ 83FECE8 - .incbin "baserom.gba", 0x3FECE8, 0xC + .4byte sub_80DC318 + .4byte sub_80DC348 + .4byte sub_80DC3A8 gUnknown_83FECF4:: @ 83FECF4 - .incbin "baserom.gba", 0x3FECF4, 0x6 + .byte 0, 0, 1, 2, 3 + .align 1 gUnknown_83FECFA:: @ 83FECFA - .incbin "baserom.gba", 0x3FECFA, 0x6 + .2byte 0x0007, 0x000f diff --git a/data/unknown_serial_data.s b/data/unknown_serial_data.s index 57c979340..ec5818604 100644 --- a/data/unknown_serial_data.s +++ b/data/unknown_serial_data.s @@ -1,5 +1,5 @@ .section .rodata gUnknownSerialData_Start:: @ 86FC50C - .incbin "baserom.gba", 0x6FC50C, 0x3760 + .incbin "data/unknown_serial_data.bin" gUnknownSerialData_End:: diff --git a/ld_script.txt b/ld_script.txt index 03fab08a6..dddd60b81 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -222,7 +222,7 @@ SECTIONS { src/fldeff_teleport.o(.text); src/new_menu_helpers.o(.text); asm/box_party_pokemon_dropdown.o(.text); - asm/save_menu_util.o(.text); + src/save_menu_util.o(.text); src/map_preview_screen.o(.text); asm/link_rfu_2.o(.text); asm/link_rfu.o(.text); diff --git a/src/save_menu_util.c b/src/save_menu_util.c new file mode 100644 index 000000000..a4bae2409 --- /dev/null +++ b/src/save_menu_util.c @@ -0,0 +1,57 @@ +#include "global.h" +#include "string_util.h" +#include "text.h" +#include "event_data.h" +#include "pokedex.h" +#include "region_map.h" +#include "constants/flags.h" + +void SaveStatToString(u8 gameStatId, u8 *dest0, u8 color) +{ + int nBadges; + int flagId; + + u8 *dest = dest0; + *dest++ = EXT_CTRL_CODE_BEGIN; + *dest++ = EXT_CTRL_CODE_COLOR; + *dest++ = color; + *dest++ = EXT_CTRL_CODE_BEGIN; + *dest++ = EXT_CTRL_CODE_SHADOW; + *dest++ = color + 1; + switch (gameStatId) + { + case 0: + dest = StringCopy(dest, gSaveBlock2Ptr->playerName); + break; + case 1: + if (IsNationalPokedexEnabled()) + dest = ConvertIntToDecimalStringN(dest, GetNationalPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3); + else + dest = ConvertIntToDecimalStringN(dest, GetKantoPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3); + break; + case 2: + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); + *dest++ = CHAR_COLON; + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + break; + case 5: + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_RIGHT_ALIGN, 3); + *dest++ = CHAR_COLON; + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + break; + case 3: + sub_80C4DF8(dest, gMapHeader.regionMapSectionId); + break; + case 4: + for (flagId = FLAG_BADGE01_GET, nBadges = 0; flagId < FLAG_BADGE01_GET + 8; flagId++) + { + if (FlagGet(flagId)) + nBadges++; + } + *dest++ = nBadges + CHAR_0; + *dest++ = 10; // 'こ' + *dest++ = EOS; + break; + } +} + From 3b365f948215824edb7aa04f136af8f7e34b2381 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 10:14:07 -0500 Subject: [PATCH 11/33] Dism data/fldeff_cut.s --- data/field_map_obj.s | 8 +++++++- data/fldeff_cut.s | 30 +++++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/data/field_map_obj.s b/data/field_map_obj.s index 9c36b523e..21e2ef41e 100644 --- a/data/field_map_obj.s +++ b/data/field_map_obj.s @@ -531,7 +531,13 @@ gUnknown_8398008:: @ 8398008 gUnknown_8398028:: @ 8398028 .incbin "graphics/map_objects/12.gbapal" - .incbin "baserom.gba", 0x398048, 0x1340 + .incbin "baserom.gba", 0x398048, 0x600 + +gUnknown_8398648:: + .incbin "baserom.gba", 0x398648, 0x40 + +gUnknown_8398688:: + .incbin "baserom.gba", 0x398688, 0xD00 gUnknown_8399388:: @ 8399388 .incbin "baserom.gba", 0x399388, 0x908 diff --git a/data/fldeff_cut.s b/data/fldeff_cut.s index 5436b51e4..ca25b396a 100644 --- a/data/fldeff_cut.s +++ b/data/fldeff_cut.s @@ -7,10 +7,34 @@ .align 2 gUnknown_83D4100:: @ 83D4100 - .incbin "baserom.gba", 0x3D4100, 0x44 + .2byte 0x000d, 0x0001 + .2byte 0x000a, 0x0013 + .2byte 0x000b, 0x000e + .2byte 0x000c, 0x000f + .2byte 0x0352, 0x033e + .2byte 0x0300, 0x0310 + .2byte 0x0301, 0x0311 + .2byte 0x0302, 0x0312 + .2byte 0x0284, 0x0281 + .2byte 0xffff, 0xffff + + .align 2 +gOamData_83D4128:: + .4byte 0x00000000, 0x00001401 + +gAnimCmd_83D4130:: + obj_image_anim_frame 0, 30 + obj_image_anim_jump 0 + +gSpriteAnimTable_83D4138:: + .4byte gAnimCmd_83D4130 + +gUnknown_83D413C:: + obj_frame_tiles gUnknown_8398648, 0x20 gUnknown_83D4144:: - .incbin "baserom.gba", 0x3D4144, 0x8 + obj_pal gUnknown_8398688, 4096 gUnknown_83D414C:: @ 83D414C - .incbin "baserom.gba", 0x3D414C, 0x18 + spr_template 0xFFFF, 4096, gOamData_83D4128, gSpriteAnimTable_83D4138, gUnknown_83D413C, gDummySpriteAffineAnimTable, objc_8097BA8 + From b2c7c8350341dde3a5e654e8496915232f69797c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 10:22:47 -0500 Subject: [PATCH 12/33] Dump fldeff_cut sprite --- data/field_map_obj.s | 6 ++++-- graphics/map_objects/fldeff_cut.png | Bin 0 -> 173 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 graphics/map_objects/fldeff_cut.png diff --git a/data/field_map_obj.s b/data/field_map_obj.s index 21e2ef41e..e4fe9ceca 100644 --- a/data/field_map_obj.s +++ b/data/field_map_obj.s @@ -534,10 +534,12 @@ gUnknown_8398028:: @ 8398028 .incbin "baserom.gba", 0x398048, 0x600 gUnknown_8398648:: - .incbin "baserom.gba", 0x398648, 0x40 + .incbin "graphics/map_objects/fldeff_cut.4bpp" + .incbin "graphics/map_objects/fldeff_cut.4bpp" gUnknown_8398688:: - .incbin "baserom.gba", 0x398688, 0xD00 + .incbin "graphics/map_objects/fldeff_cut.gbapal" + .incbin "baserom.gba", 0x3986A8, 0xCE0 gUnknown_8399388:: @ 8399388 .incbin "baserom.gba", 0x399388, 0x908 diff --git a/graphics/map_objects/fldeff_cut.png b/graphics/map_objects/fldeff_cut.png new file mode 100644 index 0000000000000000000000000000000000000000..031d04b405b5b58972a8c2033cd7b5f51531c4a0 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^93afX3?$7I7w-U41_3@Hu0VRr|DdF^9Gb;ICSkyK z_0W5uD#nr^zhDN3XE)M-9Boe*#}JO0$q5XMX$mO@CI%)620>v)2?=3gY+aI)#s(Ua g(wYVan%ag83?_Qa{H<4N1wl4>y85}Sb4q9e07s4=QUCw| literal 0 HcmV?d00001 From 7c37478f07ae2b4387029f362426e7d36699bc3e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 10:23:48 -0500 Subject: [PATCH 13/33] Bump baserom.ips --- baserom.ips | Bin 399180 -> 398989 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/baserom.ips b/baserom.ips index d4a0a8bc04eebd418bd7c438fdbc5eb06378e4ca..07a82d3b0fe8499ad135c63d46e8c0b5d19a6f5b 100644 GIT binary patch delta 56 zcmX@JPNH|MM8g)wgbpS)hUG~ejBKoyZ7a$-CO7^SZ@<~cxcz1y)7SS*DGco<^~^xb LvfZSfRbmDJbhj0# delta 248 zcmeBOD{*F>M8g)wgbt?KjO9rkjBJx9{AF=AU@%}1W)@~vHd10XFfw8=P&Q^zGFE0% zFj8Uw0sQjcv~}2zPG>A*HfXQwW87ZX$Mp4mJp)4yF9Rb37lSYZHv=C74+B3#5VIXK z1G4}#BeNhg6SEL=3sWQ0e;@$az$gMD-k-<)afnNt?1QfLQ)iDDx%l5uH*8kH1OFlD5 From 012477cc5a5ed989e819642a79b3eb64002fb5ee Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 10:27:23 -0500 Subject: [PATCH 14/33] Split data_8468C98 --- data/berry_crush.s | 120 ++++++++++++++++++++++++ data/{data_8468C98.s => pokemon_jump.s} | 117 ----------------------- ld_script.txt | 3 +- 3 files changed, 122 insertions(+), 118 deletions(-) create mode 100644 data/berry_crush.s rename data/{data_8468C98.s => pokemon_jump.s} (62%) diff --git a/data/berry_crush.s b/data/berry_crush.s new file mode 100644 index 000000000..c17f2c8af --- /dev/null +++ b/data/berry_crush.s @@ -0,0 +1,120 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata +gUnknown_846E2E0:: @ 846E2E0 + .incbin "baserom.gba", 0x46E2E0, 0x8 + +gUnknown_846E2E8:: @ 846E2E8 + .incbin "baserom.gba", 0x46E2E8, 0x8 + +gUnknown_846E2F0:: @ 846E2F0 + .incbin "baserom.gba", 0x46E2F0, 0x24 + +gUnknown_846E314:: @ 846E314 + .incbin "baserom.gba", 0x46E314, 0x14 + +gUnknown_846E328:: @ 846E328 + .incbin "baserom.gba", 0x46E328, 0x24 + +gUnknown_846E34C:: @ 846E34C + .incbin "baserom.gba", 0x46E34C, 0x68 + +gUnknown_846E3B4:: @ 846E3B4 + .incbin "baserom.gba", 0x46E3B4, 0x10 + +gUnknown_846E3C4:: @ 846E3C4 + .incbin "baserom.gba", 0x46E3C4, 0x4 + +gUnknown_846E3C8:: @ 846E3C8 + .incbin "baserom.gba", 0x46E3C8, 0x4 + +gUnknown_846E3CC:: @ 846E3CC + .incbin "baserom.gba", 0x46E3CC, 0x4 + +gUnknown_846E3D0:: @ 846E3D0 + .incbin "baserom.gba", 0x46E3D0, 0xC + +gUnknown_846E3DC:: @ 846E3DC + .incbin "baserom.gba", 0x46E3DC, 0x3 + +gUnknown_846E3DF:: @ 846E3DF + .incbin "baserom.gba", 0x46E3DF, 0x3 + +gUnknown_846E3E2:: @ 846E3E2 + .incbin "baserom.gba", 0x46E3E2, 0x3 + +gUnknown_846E3E5:: @ 846E3E5 + .incbin "baserom.gba", 0x46E3E5, 0x6 + +gUnknown_846E3EB:: @ 846E3EB + .incbin "baserom.gba", 0x46E3EB, 0x5 + +gUnknown_846E3F0:: @ 846E3F0 + .incbin "baserom.gba", 0x46E3F0, 0x8 + +gUnknown_846E3F8:: @ 846E3F8 + .incbin "baserom.gba", 0x46E3F8, 0x50 + +gUnknown_846E448:: @ 846E448 + .incbin "baserom.gba", 0x46E448, 0x8 + +gUnknown_846E450:: @ 846E450 + .incbin "baserom.gba", 0x46E450, 0x940 + +gUnknown_846ED90:: @ 846ED90 + .incbin "baserom.gba", 0x46ED90, 0x130 + +gUnknown_846EEC0:: @ 846EEC0 + .incbin "baserom.gba", 0x46EEC0, 0x198 + +gUnknown_846F058:: @ 846F058 + .incbin "baserom.gba", 0x46F058, 0x228 + +gUnknown_846F280:: @ 846F280 + .incbin "baserom.gba", 0x46F280, 0x14 + +gUnknown_846F294:: @ 846F294 + .incbin "baserom.gba", 0x46F294, 0x3C + +gUnknown_846F2D0:: @ 846F2D0 + .incbin "baserom.gba", 0x46F2D0, 0x1 + +gUnknown_846F2D1:: @ 846F2D1 + .incbin "baserom.gba", 0x46F2D1, 0x5 + +gUnknown_846F2D6:: @ 846F2D6 + .incbin "baserom.gba", 0x46F2D6, 0x1 + +gUnknown_846F2D7:: @ 846F2D7 + .incbin "baserom.gba", 0x46F2D7, 0x15 + +gUnknown_846F2EC:: @ 846F2EC + .incbin "baserom.gba", 0x46F2EC, 0xC + +gUnknown_846F2F8:: @ 846F2F8 + .incbin "baserom.gba", 0x46F2F8, 0x28 + +gUnknown_846F320:: @ 846F320 + .incbin "baserom.gba", 0x46F320, 0xF0 + +gUnknown_846F410:: @ 846F410 + .incbin "baserom.gba", 0x46F410, 0x18 + +gUnknown_846F428:: @ 846F428 + .incbin "baserom.gba", 0x46F428, 0x18 + +gUnknown_846F440:: @ 846F440 + .incbin "baserom.gba", 0x46F440, 0x18 + +gUnknown_846F458:: @ 846F458 + .incbin "baserom.gba", 0x46F458, 0x18 + +gUnknown_846F470:: @ 846F470 + .incbin "baserom.gba", 0x46F470, 0x18 + +gUnknown_846F488:: @ 846F488 + .incbin "baserom.gba", 0x46F488, 0x30 + +gUnknown_846F4B8:: @ 846F4B8 + .incbin "baserom.gba", 0x46F4B8, 0x18 diff --git a/data/data_8468C98.s b/data/pokemon_jump.s similarity index 62% rename from data/data_8468C98.s rename to data/pokemon_jump.s index 7ce7c3a02..bddff8c3a 100644 --- a/data/data_8468C98.s +++ b/data/pokemon_jump.s @@ -179,120 +179,3 @@ gUnknown_846E2CC:: @ 846E2CC gUnknown_846E2D4:: @ 846E2D4 .incbin "baserom.gba", 0x46E2D4, 0xC - -gUnknown_846E2E0:: @ 846E2E0 - .incbin "baserom.gba", 0x46E2E0, 0x8 - -gUnknown_846E2E8:: @ 846E2E8 - .incbin "baserom.gba", 0x46E2E8, 0x8 - -gUnknown_846E2F0:: @ 846E2F0 - .incbin "baserom.gba", 0x46E2F0, 0x24 - -gUnknown_846E314:: @ 846E314 - .incbin "baserom.gba", 0x46E314, 0x14 - -gUnknown_846E328:: @ 846E328 - .incbin "baserom.gba", 0x46E328, 0x24 - -gUnknown_846E34C:: @ 846E34C - .incbin "baserom.gba", 0x46E34C, 0x68 - -gUnknown_846E3B4:: @ 846E3B4 - .incbin "baserom.gba", 0x46E3B4, 0x10 - -gUnknown_846E3C4:: @ 846E3C4 - .incbin "baserom.gba", 0x46E3C4, 0x4 - -gUnknown_846E3C8:: @ 846E3C8 - .incbin "baserom.gba", 0x46E3C8, 0x4 - -gUnknown_846E3CC:: @ 846E3CC - .incbin "baserom.gba", 0x46E3CC, 0x4 - -gUnknown_846E3D0:: @ 846E3D0 - .incbin "baserom.gba", 0x46E3D0, 0xC - -gUnknown_846E3DC:: @ 846E3DC - .incbin "baserom.gba", 0x46E3DC, 0x3 - -gUnknown_846E3DF:: @ 846E3DF - .incbin "baserom.gba", 0x46E3DF, 0x3 - -gUnknown_846E3E2:: @ 846E3E2 - .incbin "baserom.gba", 0x46E3E2, 0x3 - -gUnknown_846E3E5:: @ 846E3E5 - .incbin "baserom.gba", 0x46E3E5, 0x6 - -gUnknown_846E3EB:: @ 846E3EB - .incbin "baserom.gba", 0x46E3EB, 0x5 - -gUnknown_846E3F0:: @ 846E3F0 - .incbin "baserom.gba", 0x46E3F0, 0x8 - -gUnknown_846E3F8:: @ 846E3F8 - .incbin "baserom.gba", 0x46E3F8, 0x50 - -gUnknown_846E448:: @ 846E448 - .incbin "baserom.gba", 0x46E448, 0x8 - -gUnknown_846E450:: @ 846E450 - .incbin "baserom.gba", 0x46E450, 0x940 - -gUnknown_846ED90:: @ 846ED90 - .incbin "baserom.gba", 0x46ED90, 0x130 - -gUnknown_846EEC0:: @ 846EEC0 - .incbin "baserom.gba", 0x46EEC0, 0x198 - -gUnknown_846F058:: @ 846F058 - .incbin "baserom.gba", 0x46F058, 0x228 - -gUnknown_846F280:: @ 846F280 - .incbin "baserom.gba", 0x46F280, 0x14 - -gUnknown_846F294:: @ 846F294 - .incbin "baserom.gba", 0x46F294, 0x3C - -gUnknown_846F2D0:: @ 846F2D0 - .incbin "baserom.gba", 0x46F2D0, 0x1 - -gUnknown_846F2D1:: @ 846F2D1 - .incbin "baserom.gba", 0x46F2D1, 0x5 - -gUnknown_846F2D6:: @ 846F2D6 - .incbin "baserom.gba", 0x46F2D6, 0x1 - -gUnknown_846F2D7:: @ 846F2D7 - .incbin "baserom.gba", 0x46F2D7, 0x15 - -gUnknown_846F2EC:: @ 846F2EC - .incbin "baserom.gba", 0x46F2EC, 0xC - -gUnknown_846F2F8:: @ 846F2F8 - .incbin "baserom.gba", 0x46F2F8, 0x28 - -gUnknown_846F320:: @ 846F320 - .incbin "baserom.gba", 0x46F320, 0xF0 - -gUnknown_846F410:: @ 846F410 - .incbin "baserom.gba", 0x46F410, 0x18 - -gUnknown_846F428:: @ 846F428 - .incbin "baserom.gba", 0x46F428, 0x18 - -gUnknown_846F440:: @ 846F440 - .incbin "baserom.gba", 0x46F440, 0x18 - -gUnknown_846F458:: @ 846F458 - .incbin "baserom.gba", 0x46F458, 0x18 - -gUnknown_846F470:: @ 846F470 - .incbin "baserom.gba", 0x46F470, 0x18 - -gUnknown_846F488:: @ 846F488 - .incbin "baserom.gba", 0x46F488, 0x30 - -gUnknown_846F4B8:: @ 846F4B8 - .incbin "baserom.gba", 0x46F4B8, 0x18 diff --git a/ld_script.txt b/ld_script.txt index dddd60b81..c5d5dc431 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -541,7 +541,8 @@ SECTIONS { src/menews_jisan.o(.rodata.str1.4); . = ALIGN(4); src/seagallop.o(.rodata); - data/data_8468C98.o(.rodata); + data/pokemon_jump.o(.rodata); + data/berry_crush.o(.rodata); src/wireless_communication_status_screen.o(.rodata); src/braille_text.o(.rodata); src/text_window_graphics.o(.rodata); From e560b55325cb7329bde2c0f757d9698bf0b7a3af Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 11:09:24 -0500 Subject: [PATCH 15/33] Port mevent scripts to C --- data/data_8466FB8.s | 12 --- data/mevent/script_common.inc | 165 +++++++++++++++-------------- data/mevent/script_ish.inc | 118 +++++++++++---------- include/link_rfu.h | 3 + include/mevent_server.h | 32 ++++++ ld_script.txt | 2 +- src/mevent_client.c | 4 +- src/mevent_scripts.c | 192 ++++++++++++++++++++++++++++++++++ 8 files changed, 383 insertions(+), 145 deletions(-) delete mode 100644 data/data_8466FB8.s create mode 100644 src/mevent_scripts.c diff --git a/data/data_8466FB8.s b/data/data_8466FB8.s deleted file mode 100644 index 9436bc4fd..000000000 --- a/data/data_8466FB8.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gUnknown_84687A0:: - .string "You have collected all STAMPs!\n" - .string "Want to input a CARD as a prize?$" - - .include "data/mevent/script_ish.inc" - .include "data/mevent/script_common.inc" diff --git a/data/mevent/script_common.inc b/data/mevent/script_common.inc index f3ca09e3d..e84a79ad3 100644 --- a/data/mevent/script_common.inc +++ b/data/mevent/script_common.inc @@ -1,87 +1,98 @@ -gMEventSrvScript_UnableToSend:: - .4byte 0x12, 0x10, gMEventClientScript_UnableToRecv @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x0a, NULL @ RETURN (can't send) +const struct mevent_server_cmd gMEventSrvScript_UnableToSend[] = { + SRV_SEND(0x10, gMEventClientScript_UnableToRecv), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x0a) +}; - .4byte 0x12, 0x10, gMEventClientScript_CommError @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x0b, NULL @ RETURN (comm error) + SRV_SEND(0x10, gMEventClientScript_CommError), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x0b) +}; - .4byte 0x12, 0x10, gMEventClientScript_OtherTrainerCanceled @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x09, NULL @ RETURN (other trn canceled) + SRV_SEND(0x10, gMEventClientScript_OtherTrainerCanceled), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x09) +}; -gMEventSrvScript_OtherTrnHasNews:: - .4byte 0x12, 0x10, gMEventClientScript_AlreadyHadNews @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x07, NULL @ RETURN (other trn has news) +const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasNews[] = { + SRV_SEND(0x10, gMEventClientScript_AlreadyHadNews), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x07) +}; -gMEventSrvScript_SentNewsSuccess:: - .4byte 0x12, 0x28, gMEventClientScript_ReceiveNewsAndValidate @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x0e, 0x00, NULL @ SEND_NEWS - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x13, NULL @ RECV - .4byte 0x08, 0x00, NULL @ READWORD - .4byte 0x04, 0x01, gMEventSrvScript_OtherTrnHasNews @ BRANCH_EQ - .4byte 0x12, 0x10, gMEventClientScript_RecvNewsSuccess @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x03, NULL @ RETURN (news sent to) +const struct mevent_server_cmd gMEventSrvScript_SentNewsSuccess[] = { + SRV_SEND(0x28, gMEventClientScript_ReceiveNewsAndValidate), + SRV_WAITSND, + SRV_SEND_NEWS, + SRV_WAITSND, + SRV_RECV(0x13), + SRV_READWORD, + SRV_BRANCHIF(0x01, gMEventSrvScript_OtherTrnHasNews), + SRV_SEND(0x10, gMEventClientScript_RecvNewsSuccess), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x03) +}; -gMEventSrvScript_SendCardSuccess:: - .4byte 0x12, 0x30, gMEventClientScript_ReceiveCardAndReturnSuccess @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x0d, 0x00, NULL @ SEND_CARD - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x0f, 0x00, NULL @ BUFFER_SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x02, NULL @ RETURN (card sent to) +const struct mevent_server_cmd gMEventSrvScript_SendCardSuccess[] = { + SRV_SEND(0x30, gMEventClientScript_ReceiveCardAndReturnSuccess), + SRV_WAITSND, + SRV_SEND_CARD, + SRV_WAITSND, + SRV_BUFFER_SEND, + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x02) +}; -gMEventSrvScript_AskClientToOverwriteCard:: - .4byte 0x12, 0x28, gMEventClientScript_AskWouldLikeToTossCard @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x13, NULL @ RECV - .4byte 0x08, 0x00, NULL @ READWORD - .4byte 0x04, 0x00, gMEventSrvScript_SendCardSuccess @ BRANCH_EQ - .4byte 0x03, 0x00, gMEventSrvScript_OtherTrainerCanceled @ BRANCH +const struct mevent_server_cmd gMEventSrvScript_AskClientToOverwriteCard[] = { + SRV_SEND(0x28, gMEventClientScript_AskWouldLikeToTossCard), + SRV_WAITSND, + SRV_RECV(0x13), + SRV_READWORD, + SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), + SRV_BRANCH(gMEventSrvScript_OtherTrainerCanceled) +}; -gMEventSrvScript_OtherTrnHasCard:: - .4byte 0x12, 0x10, gMEventClientScript_AlreadyHadCard @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x05, NULL @ RETURN (other trn has card) +const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasCard[] = { + SRV_SEND(0x10, gMEventClientScript_AlreadyHadCard), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x05) +}; - .4byte 0x12, 0x10, gMEventClientScript_NothingSentOver @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x00, NULL @ RETURN (nothing sent over) + SRV_SEND(0x10, gMEventClientScript_NothingSentOver), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x00) +}; -gMEventSrvScript_SendNews:: @ 8468B6C - .4byte 0x1b, 0x00, NULL @ BUFFER_SAVED_NEWS - .4byte 0x12, 0x20, gMEventClientScript_Send1442CC @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x11, NULL @ RECV - .4byte 0x05, 0x00, NULL @ READ_1442CC - .4byte 0x06, 0x00, NULL @ VALID_1442CC - .4byte 0x04, 0x00, gMEventSrvScript_UnableToSend @ BRANCH_EQ - .4byte 0x03, 0x00, gMEventSrvScript_SentNewsSuccess @ BRANCH +const struct mevent_server_cmd gMEventSrvScript_SendNews[] = { + SRV_BUFFER_NEWS, + SRV_SEND(0x20, gMEventClientScript_Send1442CC), + SRV_WAITSND, + SRV_RECV(0x11), + SRV_READ_1442CC, + SRV_VALID_1442CC, + SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), + SRV_BRANCH(gMEventSrvScript_SentNewsSuccess) +}; -gMEventSrvScript_SendCard:: @ 8468BCC - .4byte 0x1a, 0x00, NULL @ BUFFER_SAVED_CARD - .4byte 0x1c, 0x00, NULL @ RAM_SCRIPT_IF_VALID - .4byte 0x12, 0x20, gMEventClientScript_Send1442CC @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x11, NULL @ RECV - .4byte 0x05, 0x00, NULL @ READ_1442CC - .4byte 0x06, 0x00, NULL @ VALID_1442CC - .4byte 0x04, 0x00, gMEventSrvScript_UnableToSend @ BRANCH_EQ - .4byte 0x07, 0x00, NULL @ CHECK_1442CC_14 - .4byte 0x04, 0x02, gMEventSrvScript_AskClientToOverwriteCard @ BRANCH_EQ - .4byte 0x04, 0x00, gMEventSrvScript_SendCardSuccess @ BRANCH_EQ - .4byte 0x03, 0x00, gMEventSrvScript_OtherTrnHasCard @ BRANCH +const struct mevent_server_cmd gMEventSrvScript_SendCard[] = { + SRV_BUFFER_CARD, + SRV_RAM_SCRIPT_IF_VALID, + SRV_SEND(0x20, gMEventClientScript_Send1442CC), + SRV_WAITSND, + SRV_RECV(0x11), + SRV_READ_1442CC, + SRV_VALID_1442CC, + SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), + SRV_CHECK_1442CC_14, + SRV_BRANCHIF(0x02, gMEventSrvScript_AskClientToOverwriteCard), + SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), + SRV_BRANCH(gMEventSrvScript_OtherTrnHasCard) +}; diff --git a/data/mevent/script_ish.inc b/data/mevent/script_ish.inc index ed6b639da..40f6a58cd 100644 --- a/data/mevent/script_ish.inc +++ b/data/mevent/script_ish.inc @@ -1,65 +1,77 @@ -gMEventClientScript_InotialListen:: @ 84687E0 - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER +const struct mevent_client_cmd gMEventClientScript_InitialListen[] = { // 84687E0 + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; -gMEventClientScript_Send1442CC:: - .4byte 0x08, 0x00 @ SEND HEADER MAYBE - .4byte 0x03, 0x00 @ WAIT SEND - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER +const struct mevent_client_cmd gMEventClientScript_Send1442CC[] = { + CLI_SNDHEAD, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; -gMEventClientScript_UnableToRecv:: @ can't accept card or news - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x0a @ RETURN 0x0a +const struct mevent_client_cmd gMEventClientScript_UnableToRecv[] = { // can't accept card or news + CLI_SENDALL, + CLI_RETURN(0x0a) +}; -gMEventClientScript_CommError:: @ comm error - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x0b @ RETURN 0x0b +const struct mevent_client_cmd gMEventClientScript_CommError[] = { // comm error + CLI_SENDALL, + CLI_RETURN(0x0b) +}; -gMEventClientScript_NothingSentOver:: @ nothing sent - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x00 @ RETURN 0x00 +const struct mevent_client_cmd gMEventClientScript_NothingSentOver[] = { // nothing sent + CLI_SENDALL, + CLI_RETURN(0x00) +}; -gMEventClientScript_ReceiveCardAndReturnSuccess:: @ card success - .4byte 0x02, 0x16 @ RECEIVE ID(0x16) - .4byte 0x0a, 0x00 @ RECEIVE_TO_SAVE_FILE - .4byte 0x02, 0x19 @ RECEIVE ID(0x19) - .4byte 0x11, 0x00 @ RECEIVE_TO_RAM_SCRIPT - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x02 @ RETURN 0x02 +const struct mevent_client_cmd gMEventClientScript_ReceiveCardAndReturnSuccess[] = { // card success + CLI_RECEIVE(0x16), + CLI_RECVSAV, + CLI_RECEIVE(0x19), + CLI_RECVRAM, + CLI_SENDALL, + CLI_RETURN(0x02) +}; -gMEventClientScript_ReceiveNewsAndValidate:: - .4byte 0x02, 0x17 @ RECEIVE ID(0x17) - .4byte 0x09, 0x00 @ VALIDATE NEWS - .4byte 0x03, 0x00 @ WAIT SEND - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER +const struct mevent_client_cmd gMEventClientScript_ReceiveNewsAndValidate[] = { + CLI_RECEIVE(0x17), + CLI_VLDNEWS, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; -gMEventClientScript_AlreadyHadNews:: @ already had news - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x07 @ RETURN 0x07 +const struct mevent_client_cmd gMEventClientScript_AlreadyHadNews[] = { // already had news + CLI_SENDALL, + CLI_RETURN(0x07) +}; -gMEventClientScript_RecvNewsSuccess:: @ news success - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x03 @ RETURN 0x03 +const struct mevent_client_cmd gMEventClientScript_RecvNewsSuccess[] = { // news success + CLI_SENDALL, + CLI_RETURN(0x03) +}; -gMEventClientScript_AskWouldLikeToTossCard:: - .4byte 0x0d, 0x00 @ REQUEST PARAMETER - .4byte 0x0e, 0x00 @ SEND PARAMETER - .4byte 0x03, 0x00 @ WAIT SEND - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER +const struct mevent_client_cmd gMEventClientScript_AskWouldLikeToTossCard[] = { + CLI_REQWORD, + CLI_SNDWORD, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; -gMEventClientScript_OtherTrainerCanceled:: @ comm canceled - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x09 @ RETURN 0x09 +const struct mevent_client_cmd gMEventClientScript_OtherTrainerCanceled[] = { // comm canceled + CLI_SENDALL, + CLI_RETURN(0x09) +}; -gMEventClientScript_AlreadyHadCard:: @ already had card - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x05 @ RETURN 0x05 +const struct mevent_client_cmd gMEventClientScript_AlreadyHadCard[] = { // already had card + CLI_SENDALL, + CLI_RETURN(0x05) +}; -gMEventClientScript_SuccessFromBuffer:: @ success from buffer - .4byte 0x02, 0x15 @ RECEIVE ID(0x15) - .4byte 0x0c, 0x00 @ READ PACKET AND COMPUTE SOMETHING - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x0d @ RETURN 0x0d +const struct mevent_client_cmd gMEventClientScript_SuccessFromBuffer[] = { // success from buffer + CLI_RECEIVE(0x15), + CLI_RECVBUF, + CLI_SENDALL, + CLI_RETURN(0x0d) diff --git a/include/link_rfu.h b/include/link_rfu.h index 6e6e5f7a3..671488be0 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -43,4 +43,7 @@ void sub_80FBB20(void); bool8 sub_80FA484(bool32 a0); void var_800D_set_xB(void); +#include "mevent_server.h" +extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; + #endif //GUARD_LINK_RFU_H diff --git a/include/mevent_server.h b/include/mevent_server.h index ddc00b978..b691e9e1f 100644 --- a/include/mevent_server.h +++ b/include/mevent_server.h @@ -37,6 +37,20 @@ struct mevent_client_cmd u32 parameter; }; +// Client commands +#define CLI_RETURN(x) {.instr = 1, .parameter = x} +#define CLI_RECEIVE(x) {.instr = 2, .parameter = x} +#define CLI_WAITSND {.instr = 3, .parameter = 0} +#define CLI_JUMPBUF {.instr = 4, .parameter = 0} +#define CLI_SNDHEAD {.instr = 8, .parameter = 0} +#define CLI_VLDNEWS {.instr = 9, .parameter = 0} +#define CLI_RECVSAV {.instr = 10, .parameter = 0} +#define CLI_RECVBUF {.instr = 12, .parameter = 0} +#define CLI_REQWORD {.instr = 13, .parameter = 0} +#define CLI_SNDWORD {.instr = 14, .parameter = 0} +#define CLI_RECVRAM {.instr = 17, .parameter = 0} +#define CLI_SENDALL {.instr = 20, .parameter = 0} + struct mevent_client { u32 unk_00; @@ -58,6 +72,24 @@ struct mevent_server_cmd void * parameter; }; +// Server commands +#define SRV_RETURN(x) {.instr = 0, .flag = x} +#define SRV_WAITSND {.instr = 1} +#define SRV_RECV(x) {.instr = 2, .flag = x} +#define SRV_BRANCH(y) {.instr = 3, .parameter = (void *)y} +#define SRV_BRANCHIF(x, y) {.instr = 4, .flag = x, .parameter = (void *)y} +#define SRV_READ_1442CC {.instr = 5} +#define SRV_VALID_1442CC {.instr = 6} +#define SRV_CHECK_1442CC_14 {.instr = 7} +#define SRV_READWORD {.instr = 8} +#define SRV_SEND_CARD {.instr = 13} +#define SRV_SEND_NEWS {.instr = 14} +#define SRV_BUFFER_SEND {.instr = 15} +#define SRV_SEND(x, y) {.instr = 18, .flag = x, .parameter = (void *)y} +#define SRV_BUFFER_CARD {.instr = 26} +#define SRV_BUFFER_NEWS {.instr = 27} +#define SRV_RAM_SCRIPT_IF_VALID {.instr = 28} + struct mevent_srv_common { u32 unk_00; diff --git a/ld_script.txt b/ld_script.txt index c5d5dc431..d40c88c0a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -536,7 +536,7 @@ SECTIONS { src/mevent_client.o(.rodata); src/mevent_server.o(.rodata); src/mevent_8145654.o(.rodata); - data/data_8466FB8.o(.rodata); + src/mevent_scripts.o(.rodata); src/menews_jisan.o(.rodata); src/menews_jisan.o(.rodata.str1.4); . = ALIGN(4); diff --git a/src/mevent_client.c b/src/mevent_client.c index c2a86afdd..4da0b4bc1 100644 --- a/src/mevent_client.c +++ b/src/mevent_client.c @@ -14,7 +14,7 @@ static void mevent_client_init(struct mevent_client *, u32, u32); static u32 mevent_client_exec(struct mevent_client *); static void mevent_client_free_resources(struct mevent_client *); -extern const struct mevent_client_cmd gMEventClientScript_InotialListen[]; +extern const struct mevent_client_cmd gMEventClientScript_InitialListen[]; void mevent_client_do_init(void) { @@ -89,7 +89,7 @@ static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 w static u32 client_mainseq_0(struct mevent_client * svr) { // init - memcpy(svr->cmdBuffer, gMEventClientScript_InotialListen, ME_SEND_BUF_SIZE); + memcpy(svr->cmdBuffer, gMEventClientScript_InitialListen, ME_SEND_BUF_SIZE); svr->cmdidx = 0; svr->mainseqno = 4; svr->flag = 0; diff --git a/src/mevent_scripts.c b/src/mevent_scripts.c new file mode 100644 index 000000000..04d44f603 --- /dev/null +++ b/src/mevent_scripts.c @@ -0,0 +1,192 @@ +#include "global.h" +#include "mevent_server.h" + +extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; + +// Unreferenced +const u8 gUnknown_84687A0[] = _("You have collected all STAMPs!\nWant to input a CARD as a prize?"); + +/* CLIENT SCRIPTS */ + +const struct mevent_client_cmd gMEventClientScript_InitialListen[] = { // 84687E0 + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_Send1442CC[] = { + CLI_SNDHEAD, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_UnableToRecv[] = { // can't accept card or news + CLI_SENDALL, + CLI_RETURN(0x0a) +}; + +const struct mevent_client_cmd gMEventClientScript_CommError[] = { // comm error + CLI_SENDALL, + CLI_RETURN(0x0b) +}; + +const struct mevent_client_cmd gMEventClientScript_NothingSentOver[] = { // nothing sent + CLI_SENDALL, + CLI_RETURN(0x00) +}; + +const struct mevent_client_cmd gMEventClientScript_ReceiveCardAndReturnSuccess[] = { // card success + CLI_RECEIVE(0x16), + CLI_RECVSAV, + CLI_RECEIVE(0x19), + CLI_RECVRAM, + CLI_SENDALL, + CLI_RETURN(0x02) +}; + +const struct mevent_client_cmd gMEventClientScript_ReceiveNewsAndValidate[] = { + CLI_RECEIVE(0x17), + CLI_VLDNEWS, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_AlreadyHadNews[] = { // already had news + CLI_SENDALL, + CLI_RETURN(0x07) +}; + +const struct mevent_client_cmd gMEventClientScript_RecvNewsSuccess[] = { // news success + CLI_SENDALL, + CLI_RETURN(0x03) +}; + +const struct mevent_client_cmd gMEventClientScript_AskWouldLikeToTossCard[] = { + CLI_REQWORD, + CLI_SNDWORD, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_OtherTrainerCanceled[] = { // comm canceled + CLI_SENDALL, + CLI_RETURN(0x09) +}; + +const struct mevent_client_cmd gMEventClientScript_AlreadyHadCard[] = { // already had card + CLI_SENDALL, + CLI_RETURN(0x05) +}; + +const struct mevent_client_cmd gMEventClientScript_SuccessFromBuffer[] = { // success from buffer + CLI_RECEIVE(0x15), + CLI_RECVBUF, + CLI_SENDALL, + CLI_RETURN(0x0d) +}; + +/* SERVER SCRIPTS */ + +const struct mevent_server_cmd gMEventSrvScript_UnableToSend[] = { + SRV_SEND(0x10, gMEventClientScript_UnableToRecv), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x0a) +}; + +const struct mevent_server_cmd gUnknown_8468950[] = { + SRV_SEND(0x10, gMEventClientScript_CommError), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x0b) +}; + +const struct mevent_server_cmd gUnknown_8468980[] = { + SRV_SEND(0x10, gMEventClientScript_OtherTrainerCanceled), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x09) +}; + +const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasNews[] = { + SRV_SEND(0x10, gMEventClientScript_AlreadyHadNews), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x07) +}; + +const struct mevent_server_cmd gMEventSrvScript_SentNewsSuccess[] = { + SRV_SEND(0x28, gMEventClientScript_ReceiveNewsAndValidate), + SRV_WAITSND, + SRV_SEND_NEWS, + SRV_WAITSND, + SRV_RECV(0x13), + SRV_READWORD, + SRV_BRANCHIF(0x01, gMEventSrvScript_OtherTrnHasNews), + SRV_SEND(0x10, gMEventClientScript_RecvNewsSuccess), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x03) +}; + +const struct mevent_server_cmd gMEventSrvScript_SendCardSuccess[] = { + SRV_SEND(0x30, gMEventClientScript_ReceiveCardAndReturnSuccess), + SRV_WAITSND, + SRV_SEND_CARD, + SRV_WAITSND, + SRV_BUFFER_SEND, + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x02) +}; + +const struct mevent_server_cmd gMEventSrvScript_AskClientToOverwriteCard[] = { + SRV_SEND(0x28, gMEventClientScript_AskWouldLikeToTossCard), + SRV_WAITSND, + SRV_RECV(0x13), + SRV_READWORD, + SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), + SRV_BRANCH(gMEventSrvScript_OtherTrainerCanceled) +}; + +const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasCard[] = { + SRV_SEND(0x10, gMEventClientScript_AlreadyHadCard), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x05) +}; + +const struct mevent_server_cmd gUnknown_8468B3C[] = { + SRV_SEND(0x10, gMEventClientScript_NothingSentOver), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x00) +}; + +const struct mevent_server_cmd gMEventSrvScript_SendNews[] = { + SRV_BUFFER_NEWS, + SRV_SEND(0x20, gMEventClientScript_Send1442CC), + SRV_WAITSND, + SRV_RECV(0x11), + SRV_READ_1442CC, + SRV_VALID_1442CC, + SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), + SRV_BRANCH(gMEventSrvScript_SentNewsSuccess) +}; + +const struct mevent_server_cmd gMEventSrvScript_SendCard[] = { + SRV_BUFFER_CARD, + SRV_RAM_SCRIPT_IF_VALID, + SRV_SEND(0x20, gMEventClientScript_Send1442CC), + SRV_WAITSND, + SRV_RECV(0x11), + SRV_READ_1442CC, + SRV_VALID_1442CC, + SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), + SRV_CHECK_1442CC_14, + SRV_BRANCHIF(0x02, gMEventSrvScript_AskClientToOverwriteCard), + SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), + SRV_BRANCH(gMEventSrvScript_OtherTrnHasCard) +}; From 2435995adfa7c8d65f0c0a943388d46dec88d7e0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 11:36:47 -0500 Subject: [PATCH 16/33] Delete files that are no longer needed --- data/mevent/script_common.inc | 98 ----------------------------------- data/mevent/script_ish.inc | 77 --------------------------- 2 files changed, 175 deletions(-) delete mode 100644 data/mevent/script_common.inc delete mode 100644 data/mevent/script_ish.inc diff --git a/data/mevent/script_common.inc b/data/mevent/script_common.inc deleted file mode 100644 index e84a79ad3..000000000 --- a/data/mevent/script_common.inc +++ /dev/null @@ -1,98 +0,0 @@ -const struct mevent_server_cmd gMEventSrvScript_UnableToSend[] = { - SRV_SEND(0x10, gMEventClientScript_UnableToRecv), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x0a) -}; - - SRV_SEND(0x10, gMEventClientScript_CommError), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x0b) -}; - - SRV_SEND(0x10, gMEventClientScript_OtherTrainerCanceled), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x09) -}; - -const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasNews[] = { - SRV_SEND(0x10, gMEventClientScript_AlreadyHadNews), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x07) -}; - -const struct mevent_server_cmd gMEventSrvScript_SentNewsSuccess[] = { - SRV_SEND(0x28, gMEventClientScript_ReceiveNewsAndValidate), - SRV_WAITSND, - SRV_SEND_NEWS, - SRV_WAITSND, - SRV_RECV(0x13), - SRV_READWORD, - SRV_BRANCHIF(0x01, gMEventSrvScript_OtherTrnHasNews), - SRV_SEND(0x10, gMEventClientScript_RecvNewsSuccess), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x03) -}; - -const struct mevent_server_cmd gMEventSrvScript_SendCardSuccess[] = { - SRV_SEND(0x30, gMEventClientScript_ReceiveCardAndReturnSuccess), - SRV_WAITSND, - SRV_SEND_CARD, - SRV_WAITSND, - SRV_BUFFER_SEND, - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x02) -}; - -const struct mevent_server_cmd gMEventSrvScript_AskClientToOverwriteCard[] = { - SRV_SEND(0x28, gMEventClientScript_AskWouldLikeToTossCard), - SRV_WAITSND, - SRV_RECV(0x13), - SRV_READWORD, - SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), - SRV_BRANCH(gMEventSrvScript_OtherTrainerCanceled) -}; - -const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasCard[] = { - SRV_SEND(0x10, gMEventClientScript_AlreadyHadCard), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x05) -}; - - SRV_SEND(0x10, gMEventClientScript_NothingSentOver), - SRV_WAITSND, - SRV_RECV(0x14), - SRV_RETURN(0x00) -}; - -const struct mevent_server_cmd gMEventSrvScript_SendNews[] = { - SRV_BUFFER_NEWS, - SRV_SEND(0x20, gMEventClientScript_Send1442CC), - SRV_WAITSND, - SRV_RECV(0x11), - SRV_READ_1442CC, - SRV_VALID_1442CC, - SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), - SRV_BRANCH(gMEventSrvScript_SentNewsSuccess) -}; - -const struct mevent_server_cmd gMEventSrvScript_SendCard[] = { - SRV_BUFFER_CARD, - SRV_RAM_SCRIPT_IF_VALID, - SRV_SEND(0x20, gMEventClientScript_Send1442CC), - SRV_WAITSND, - SRV_RECV(0x11), - SRV_READ_1442CC, - SRV_VALID_1442CC, - SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), - SRV_CHECK_1442CC_14, - SRV_BRANCHIF(0x02, gMEventSrvScript_AskClientToOverwriteCard), - SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), - SRV_BRANCH(gMEventSrvScript_OtherTrnHasCard) -}; diff --git a/data/mevent/script_ish.inc b/data/mevent/script_ish.inc deleted file mode 100644 index 40f6a58cd..000000000 --- a/data/mevent/script_ish.inc +++ /dev/null @@ -1,77 +0,0 @@ -const struct mevent_client_cmd gMEventClientScript_InitialListen[] = { // 84687E0 - CLI_RECEIVE(0x10), - CLI_JUMPBUF -}; - -const struct mevent_client_cmd gMEventClientScript_Send1442CC[] = { - CLI_SNDHEAD, - CLI_WAITSND, - CLI_RECEIVE(0x10), - CLI_JUMPBUF -}; - -const struct mevent_client_cmd gMEventClientScript_UnableToRecv[] = { // can't accept card or news - CLI_SENDALL, - CLI_RETURN(0x0a) -}; - -const struct mevent_client_cmd gMEventClientScript_CommError[] = { // comm error - CLI_SENDALL, - CLI_RETURN(0x0b) -}; - -const struct mevent_client_cmd gMEventClientScript_NothingSentOver[] = { // nothing sent - CLI_SENDALL, - CLI_RETURN(0x00) -}; - -const struct mevent_client_cmd gMEventClientScript_ReceiveCardAndReturnSuccess[] = { // card success - CLI_RECEIVE(0x16), - CLI_RECVSAV, - CLI_RECEIVE(0x19), - CLI_RECVRAM, - CLI_SENDALL, - CLI_RETURN(0x02) -}; - -const struct mevent_client_cmd gMEventClientScript_ReceiveNewsAndValidate[] = { - CLI_RECEIVE(0x17), - CLI_VLDNEWS, - CLI_WAITSND, - CLI_RECEIVE(0x10), - CLI_JUMPBUF -}; - -const struct mevent_client_cmd gMEventClientScript_AlreadyHadNews[] = { // already had news - CLI_SENDALL, - CLI_RETURN(0x07) -}; - -const struct mevent_client_cmd gMEventClientScript_RecvNewsSuccess[] = { // news success - CLI_SENDALL, - CLI_RETURN(0x03) -}; - -const struct mevent_client_cmd gMEventClientScript_AskWouldLikeToTossCard[] = { - CLI_REQWORD, - CLI_SNDWORD, - CLI_WAITSND, - CLI_RECEIVE(0x10), - CLI_JUMPBUF -}; - -const struct mevent_client_cmd gMEventClientScript_OtherTrainerCanceled[] = { // comm canceled - CLI_SENDALL, - CLI_RETURN(0x09) -}; - -const struct mevent_client_cmd gMEventClientScript_AlreadyHadCard[] = { // already had card - CLI_SENDALL, - CLI_RETURN(0x05) -}; - -const struct mevent_client_cmd gMEventClientScript_SuccessFromBuffer[] = { // success from buffer - CLI_RECEIVE(0x15), - CLI_RECVBUF, - CLI_SENDALL, - CLI_RETURN(0x0d) From 36c159f7fa166615c445e33cde8e4f756f116179 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 14:20:02 -0500 Subject: [PATCH 17/33] SAVE_STAT_ enums --- include/save_menu_util.h | 3 ++- src/save_menu_util.c | 13 +++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/include/save_menu_util.h b/include/save_menu_util.h index f2a18a777..7085520b4 100644 --- a/include/save_menu_util.h +++ b/include/save_menu_util.h @@ -7,7 +7,8 @@ enum SaveStat SAVE_STAT_POKEDEX, SAVE_STAT_TIME, SAVE_STAT_LOCATION, - SAVE_STAT_BADGES + SAVE_STAT_BADGES, + SAVE_STAT_TIME_HR_RT_ALIGN }; void SaveStatToString(u8 a0, u8 *a1, u8 a2); diff --git a/src/save_menu_util.c b/src/save_menu_util.c index a4bae2409..195b29b0c 100644 --- a/src/save_menu_util.c +++ b/src/save_menu_util.c @@ -4,6 +4,7 @@ #include "event_data.h" #include "pokedex.h" #include "region_map.h" +#include "save_menu_util.h" #include "constants/flags.h" void SaveStatToString(u8 gameStatId, u8 *dest0, u8 color) @@ -20,29 +21,29 @@ void SaveStatToString(u8 gameStatId, u8 *dest0, u8 color) *dest++ = color + 1; switch (gameStatId) { - case 0: + case SAVE_STAT_NAME: dest = StringCopy(dest, gSaveBlock2Ptr->playerName); break; - case 1: + case SAVE_STAT_POKEDEX: if (IsNationalPokedexEnabled()) dest = ConvertIntToDecimalStringN(dest, GetNationalPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3); else dest = ConvertIntToDecimalStringN(dest, GetKantoPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3); break; - case 2: + case SAVE_STAT_TIME: dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); *dest++ = CHAR_COLON; dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); break; - case 5: + case SAVE_STAT_TIME_HR_RT_ALIGN: dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_RIGHT_ALIGN, 3); *dest++ = CHAR_COLON; dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); break; - case 3: + case SAVE_STAT_LOCATION: sub_80C4DF8(dest, gMapHeader.regionMapSectionId); break; - case 4: + case SAVE_STAT_BADGES: for (flagId = FLAG_BADGE01_GET, nBadges = 0; flagId < FLAG_BADGE01_GET + 8; flagId++) { if (FlagGet(flagId)) From 678c024fabc1f26e6f2969c35aa20abeaee9a760 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 12 Nov 2019 04:43:57 +0800 Subject: [PATCH 18/33] sub_81406E8 --- src/slot_machine.c | 299 +-------------------------------------------- 1 file changed, 5 insertions(+), 294 deletions(-) diff --git a/src/slot_machine.c b/src/slot_machine.c index 866da9eb1..903f14d45 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -1343,13 +1343,13 @@ static bool32 sub_814054C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4) return FALSE; } -#ifdef NONMATCHING static bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) { u8 sp0[9]; s32 r3, r6; s32 i; + r6++; r6--; r6 = sSlotMachineState->field_20[sSlotMachineState->field_32[0]] + 1; r3 = sSlotMachineState->field_20[sSlotMachineState->field_32[1]] + 1; a1++; @@ -1364,15 +1364,12 @@ static bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) sp0[sSlotMachineState->field_32[0] * 3 + i] = gUnknown_8464926[sSlotMachineState->field_32[0]][r6]; sp0[sSlotMachineState->field_32[1] * 3 + i] = gUnknown_8464926[sSlotMachineState->field_32[1]][r3]; sp0[a0 * 3 + i] = gUnknown_8464926[a0][a1]; - r6++; - if (r6 >= 21) + if (++r6 >= 21) r6 = 0; - r3++; - if (r3 >= 21) + if (++r3 >= 21) r3 = 0; - a1++; - if (a1 >= 21) - a1++; + if (++a1 >= 21) + a1 = 0; } switch (a2) { @@ -1415,292 +1412,6 @@ static bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) } return FALSE; } -#else -NAKED -static bool32 sub_81406E8(s32 a0, s32 a1, s32 a2) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x10\n" - "\tadds r7, r0, 0\n" - "\tadds r5, r1, 0\n" - "\tmov r8, r2\n" - "\tldr r0, _081407C8 @ =sSlotMachineState\n" - "\tldr r2, [r0]\n" - "\tmovs r1, 0x32\n" - "\tldrsh r0, [r2, r1]\n" - "\tlsls r0, 1\n" - "\tadds r1, r2, 0\n" - "\tadds r1, 0x20\n" - "\tadds r0, r1, r0\n" - "\tmovs r3, 0\n" - "\tldrsh r0, [r0, r3]\n" - "\tadds r6, r0, 0x1\n" - "\tmovs r3, 0x34\n" - "\tldrsh r0, [r2, r3]\n" - "\tlsls r0, 1\n" - "\tadds r1, r0\n" - "\tmovs r3, 0\n" - "\tldrsh r0, [r1, r3]\n" - "\tadds r3, r0, 0x1\n" - "\tadds r5, 0x1\n" - "\tcmp r6, 0x14\n" - "\tble _08140726\n" - "\tmovs r6, 0\n" - "_08140726:\n" - "\tcmp r3, 0x14\n" - "\tble _0814072C\n" - "\tmovs r3, 0\n" - "_0814072C:\n" - "\tcmp r5, 0x14\n" - "\tble _08140732\n" - "\tmovs r5, 0\n" - "_08140732:\n" - "\tmovs r4, 0\n" - "\tlsls r1, r7, 1\n" - "\tlsls r0, r7, 2\n" - "\tmov r9, r2\n" - "\tldr r2, _081407CC @ =gUnknown_8464926\n" - "\tmov r10, r2\n" - "\tadds r1, r7\n" - "\tadd r1, sp\n" - "\tmov r12, r1\n" - "\tadds r0, r7\n" - "\tlsls r0, 2\n" - "\tadds r0, r7\n" - "\tstr r0, [sp, 0xC]\n" - "_0814074C:\n" - "\tmov r7, r9\n" - "\tmovs r0, 0x32\n" - "\tldrsh r1, [r7, r0]\n" - "\tlsls r0, r1, 1\n" - "\tadds r0, r1\n" - "\tadds r0, r4\n" - "\tmov r7, sp\n" - "\tadds r2, r7, r0\n" - "\tlsls r0, r1, 2\n" - "\tadds r0, r1\n" - "\tlsls r0, 2\n" - "\tadds r0, r1\n" - "\tadds r0, r6, r0\n" - "\tadd r0, r10\n" - "\tldrb r0, [r0]\n" - "\tstrb r0, [r2]\n" - "\tmov r0, r9\n" - "\tmovs r2, 0x34\n" - "\tldrsh r1, [r0, r2]\n" - "\tlsls r0, r1, 1\n" - "\tadds r0, r1\n" - "\tadds r0, r4\n" - "\tadds r2, r7, r0\n" - "\tlsls r0, r1, 2\n" - "\tadds r0, r1\n" - "\tlsls r0, 2\n" - "\tadds r0, r1\n" - "\tadds r0, r3, r0\n" - "\tadd r0, r10\n" - "\tldrb r0, [r0]\n" - "\tstrb r0, [r2]\n" - "\tldr r7, [sp, 0xC]\n" - "\tadds r0, r5, r7\n" - "\tadd r0, r10\n" - "\tldrb r0, [r0]\n" - "\tmov r1, r12\n" - "\tstrb r0, [r1]\n" - "\tadds r6, 0x1\n" - "\tcmp r6, 0x14\n" - "\tble _0814079E\n" - "\tmovs r6, 0\n" - "_0814079E:\n" - "\tadds r3, 0x1\n" - "\tcmp r3, 0x14\n" - "\tble _081407A6\n" - "\tmovs r3, 0\n" - "_081407A6:\n" - "\tadds r5, 0x1\n" - "\tcmp r5, 0x14\n" - "\tble _081407AE\n" - "\tmovs r5, 0\n" - "_081407AE:\n" - "\tmovs r2, 0x1\n" - "\tadd r12, r2\n" - "\tadds r4, 0x1\n" - "\tcmp r4, 0x2\n" - "\tble _0814074C\n" - "\tmov r3, r8\n" - "\tcmp r3, 0x1\n" - "\tbeq _08140828\n" - "\tcmp r3, 0x1\n" - "\tbgt _081407D0\n" - "\tcmp r3, 0\n" - "\tbeq _081407D8\n" - "\tb _081408A0\n" - "\t.align 2, 0\n" - "_081407C8: .4byte sSlotMachineState\n" - "_081407CC: .4byte gUnknown_8464926\n" - "_081407D0:\n" - "\tmov r6, r8\n" - "\tcmp r6, 0x2\n" - "\tbeq _08140870\n" - "\tb _081408A0\n" - "_081407D8:\n" - "\tmovs r4, 0\n" - "_081407DA:\n" - "\tmov r7, sp\n" - "\tadds r0, r7, r4\n" - "\tldrb r1, [r0]\n" - "\tmovs r0, 0x1\n" - "\tbl sub_81408F4\n" - "\tcmp r0, 0\n" - "\tbne _081408DC_return_false\n" - "\tadds r4, 0x1\n" - "\tcmp r4, 0x2\n" - "\tble _081407DA\n" - "\tmovs r4, 0\n" - "\tldr r2, _08140824 @ =gUnknown_84648AE\n" - "\tmovs r3, 0\n" - "\tadds r5, r2, 0x2\n" - "_081407F8:\n" - "\tldrb r0, [r2]\n" - "\tmov r6, sp\n" - "\tadds r1, r6, r0\n" - "\tldrb r0, [r2, 0x1]\n" - "\tadd r0, sp\n" - "\tldrb r1, [r1]\n" - "\tldrb r0, [r0]\n" - "\tcmp r1, r0\n" - "\tbne _08140816\n" - "\tadds r0, r3, r5\n" - "\tldrb r0, [r0]\n" - "\tadd r0, sp\n" - "\tldrb r0, [r0]\n" - "\tcmp r1, r0\n" - "\tbeq _081408DC_return_false\n" - "_08140816:\n" - "\tadds r2, 0x3\n" - "\tadds r3, 0x3\n" - "\tadds r4, 0x1\n" - "\tcmp r4, 0x4\n" - "\tble _081407F8\n" - "_08140820_return_true:\n" - "\tmovs r0, 0x1\n" - "\tb _081408DE\n" - "\t.align 2, 0\n" - "_08140824: .4byte gUnknown_84648AE\n" - "_08140828:\n" - "\tmovs r4, 0\n" - "\tldr r5, _0814086C @ =gUnknown_84648AE\n" - "_0814082C:\n" - "\tldrb r0, [r5]\n" - "\tmov r7, sp\n" - "\tadds r2, r7, r0\n" - "\tldrb r0, [r5, 0x1]\n" - "\tadds r1, r7, r0\n" - "\tldrb r0, [r2]\n" - "\tldrb r1, [r1]\n" - "\tcmp r0, r1\n" - "\tbne _0814084A\n" - "\tadds r1, r0, 0\n" - "\tmov r0, r8\n" - "\tbl sub_81408F4\n" - "\tcmp r0, 0\n" - "\tbne _081408DC_return_false\n" - "_0814084A:\n" - "\tadds r5, 0x3\n" - "\tadds r4, 0x1\n" - "\tcmp r4, 0x4\n" - "\tble _0814082C\n" - "\tmovs r4, 0\n" - "_08140854:\n" - "\tmov r1, sp\n" - "\tadds r0, r1, r4\n" - "\tldrb r1, [r0]\n" - "\tmov r0, r8\n" - "\tbl sub_81408F4\n" - "\tcmp r0, 0\n" - "\tbne _08140820_return_true\n" - "\tadds r4, 0x1\n" - "\tcmp r4, 0x2\n" - "\tble _08140854\n" - "\tb _081408DC_return_false\n" - "\t.align 2, 0\n" - "_0814086C: .4byte gUnknown_84648AE\n" - "_08140870:\n" - "\tmovs r4, 0\n" - "\tldr r5, _0814089C @ =gUnknown_84648AE\n" - "_08140874:\n" - "\tldrb r0, [r5]\n" - "\tmov r3, sp\n" - "\tadds r2, r3, r0\n" - "\tldrb r0, [r5, 0x1]\n" - "\tadds r1, r3, r0\n" - "\tldrb r0, [r2]\n" - "\tldrb r1, [r1]\n" - "\tcmp r0, r1\n" - "\tbne _08140892\n" - "\tadds r1, r0, 0\n" - "\tmov r0, r8\n" - "\tbl sub_81408F4\n" - "\tcmp r0, 0\n" - "\tbne _08140820_return_true\n" - "_08140892:\n" - "\tadds r5, 0x3\n" - "\tadds r4, 0x1\n" - "\tcmp r4, 0x4\n" - "\tble _08140874\n" - "\tb _081408DC_return_false\n" - "\t.align 2, 0\n" - "_0814089C: .4byte gUnknown_84648AE\n" - "_081408A0:\n" - "\tmovs r4, 0\n" - "\tldr r5, _081408F0 @ =gUnknown_84648AE\n" - "\tadds r7, r5, 0\n" - "\tmovs r6, 0\n" - "_081408A8:\n" - "\tldrb r0, [r5]\n" - "\tmov r1, sp\n" - "\tadds r2, r1, r0\n" - "\tadds r0, r7, 0x1\n" - "\tadds r0, r6, r0\n" - "\tldrb r0, [r0]\n" - "\tadd r0, sp\n" - "\tldrb r1, [r2]\n" - "\tldrb r0, [r0]\n" - "\tcmp r1, r0\n" - "\tbne _081408D2\n" - "\tldrb r0, [r5, 0x2]\n" - "\tadd r0, sp\n" - "\tldrb r0, [r0]\n" - "\tcmp r1, r0\n" - "\tbne _081408D2\n" - "\tmov r0, r8\n" - "\tbl sub_81408F4\n" - "\tcmp r0, 0\n" - "\tbne _08140820_return_true\n" - "_081408D2:\n" - "\tadds r5, 0x3\n" - "\tadds r6, 0x3\n" - "\tadds r4, 0x1\n" - "\tcmp r4, 0x4\n" - "\tble _081408A8\n" - "_081408DC_return_false:\n" - "\tmovs r0, 0\n" - "_081408DE:\n" - "\tadd sp, 0x10\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1\n" - "\t.align 2, 0\n" - "_081408F0: .4byte gUnknown_84648AE"); -} -#endif //NONMATCHING static bool32 sub_81408F4(s32 a0, s32 a1) { From 840a1f90cc61a602f602c4efae51c79680cb63f1 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 12 Nov 2019 05:26:34 +0800 Subject: [PATCH 19/33] sub_815DF54 --- src/trainer_tower.c | 149 ++------------------------------------------ 1 file changed, 5 insertions(+), 144 deletions(-) diff --git a/src/trainer_tower.c b/src/trainer_tower.c index a4b511725..19d44d7cc 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -725,14 +725,16 @@ static void TT_ConvertEasyChatMessageToString(u16 *ecWords, u8 *dest) } } -#ifdef NONMATCHING static void sub_815DF54(void) { u16 r4 = gSpecialVar_0x8006; u8 r1; u8 r5 = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].challengeType; - // HOW DO I MATCH THIS CONTROL FLOW?!?! - r1 = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r5 == 1 ? 0 : r4].facilityClass; + + if (r5 != 1) + r1 = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[r4].facilityClass; + else + r1 = sTrainerTowerState->unk_0004.floors[sTrainerTowerState->floorIdx].trainers[0].facilityClass; switch (gSpecialVar_0x8005) { case 2: @@ -752,147 +754,6 @@ static void sub_815DF54(void) break; } } -#else -NAKED -static void sub_815DF54(void) -{ - asm_unified("\tpush {r4,r5,lr}\n" - "\tldr r0, _0815DF90 @ =gSpecialVar_0x8006\n" - "\tldrh r4, [r0]\n" - "\tldr r2, _0815DF94 @ =sTrainerTowerState\n" - "\tldr r3, [r2]\n" - "\tldrb r1, [r3]\n" - "\tlsls r0, r1, 5\n" - "\tsubs r0, r1\n" - "\tlsls r1, r0, 5\n" - "\tadds r0, r3, r1\n" - "\tldrb r5, [r0, 0xE]\n" - "\tcmp r5, 0x1\n" - "\tbeq _0815DF7C\n" - "\tlsls r0, r4, 2\n" - "\tadds r0, r4\n" - "\tlsls r0, 3\n" - "\tadds r0, r4\n" - "\tlsls r0, 3\n" - "\tadds r0, r1\n" - "\tadds r0, r3, r0\n" - "_0815DF7C:\n" - "\tldrb r1, [r0, 0x1B]\n" - "\tldr r0, _0815DF98 @ =gSpecialVar_0x8005\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, 0x3\n" - "\tbeq _0815DFD4\n" - "\tcmp r0, 0x3\n" - "\tbgt _0815DF9C\n" - "\tcmp r0, 0x2\n" - "\tbeq _0815DFA6\n" - "\tb _0815E05C\n" - "\t.align 2, 0\n" - "_0815DF90: .4byte gSpecialVar_0x8006\n" - "_0815DF94: .4byte sTrainerTowerState\n" - "_0815DF98: .4byte gSpecialVar_0x8005\n" - "_0815DF9C:\n" - "\tcmp r0, 0x4\n" - "\tbeq _0815E000\n" - "\tcmp r0, 0x5\n" - "\tbeq _0815E038\n" - "\tb _0815E05C\n" - "_0815DFA6:\n" - "\tadds r0, r5, 0\n" - "\tbl TrainerTowerGetOpponentTextColor\n" - "\tldr r0, _0815DFD0 @ =sTrainerTowerState\n" - "\tldr r0, [r0]\n" - "\tldrb r2, [r0]\n" - "\tlsls r1, r2, 5\n" - "\tsubs r1, r2\n" - "\tlsls r1, 5\n" - "\tadds r1, 0xC\n" - "\tadds r0, r1\n" - "\tlsls r1, r4, 2\n" - "\tadds r1, r4\n" - "\tlsls r1, 3\n" - "\tadds r1, r4\n" - "\tlsls r1, 3\n" - "\tadds r1, 0x4\n" - "\tadds r0, r1\n" - "\tadds r0, 0xE\n" - "\tb _0815E026\n" - "\t.align 2, 0\n" - "_0815DFD0: .4byte sTrainerTowerState\n" - "_0815DFD4:\n" - "\tadds r0, r5, 0\n" - "\tbl TrainerTowerGetOpponentTextColor\n" - "\tldr r0, _0815DFFC @ =sTrainerTowerState\n" - "\tldr r0, [r0]\n" - "\tldrb r2, [r0]\n" - "\tlsls r1, r2, 5\n" - "\tsubs r1, r2\n" - "\tlsls r1, 5\n" - "\tadds r1, 0xC\n" - "\tadds r0, r1\n" - "\tlsls r1, r4, 2\n" - "\tadds r1, r4\n" - "\tlsls r1, 3\n" - "\tadds r1, r4\n" - "\tlsls r1, 3\n" - "\tadds r1, 0x4\n" - "\tadds r0, r1\n" - "\tadds r0, 0x1A\n" - "\tb _0815E026\n" - "\t.align 2, 0\n" - "_0815DFFC: .4byte sTrainerTowerState\n" - "_0815E000:\n" - "\tadds r0, r5, 0\n" - "\tbl TrainerTowerGetOpponentTextColor\n" - "\tldr r0, _0815E030 @ =sTrainerTowerState\n" - "\tldr r0, [r0]\n" - "\tldrb r2, [r0]\n" - "\tlsls r1, r2, 5\n" - "\tsubs r1, r2\n" - "\tlsls r1, 5\n" - "\tadds r1, 0xC\n" - "\tadds r0, r1\n" - "\tlsls r1, r4, 2\n" - "\tadds r1, r4\n" - "\tlsls r1, 3\n" - "\tadds r1, r4\n" - "\tlsls r1, 3\n" - "\tadds r1, 0x4\n" - "\tadds r0, r1\n" - "\tadds r0, 0x26\n" - "_0815E026:\n" - "\tldr r1, _0815E034 @ =gStringVar4\n" - "\tbl TT_ConvertEasyChatMessageToString\n" - "\tb _0815E05C\n" - "\t.align 2, 0\n" - "_0815E030: .4byte sTrainerTowerState\n" - "_0815E034: .4byte gStringVar4\n" - "_0815E038:\n" - "\tldr r0, [r2]\n" - "\tldrb r2, [r0]\n" - "\tlsls r1, r2, 5\n" - "\tsubs r1, r2\n" - "\tlsls r1, 5\n" - "\tadds r1, 0xC\n" - "\tadds r0, r1\n" - "\tlsls r1, r4, 2\n" - "\tadds r1, r4\n" - "\tlsls r1, 3\n" - "\tadds r1, r4\n" - "\tlsls r1, 3\n" - "\tadds r1, 0x4\n" - "\tadds r0, r1\n" - "\tadds r0, 0x32\n" - "\tldr r1, _0815E064 @ =gStringVar4\n" - "\tbl TT_ConvertEasyChatMessageToString\n" - "_0815E05C:\n" - "\tpop {r4,r5}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0815E064: .4byte gStringVar4"); -} -#endif // NONMATCHING static void TrainerTowerGetOpponentTextColor(u8 battleType, u8 facilityClass) { From f316b22f96753c8580d86a8b7957ec69d7bd0c3c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 17:08:21 -0500 Subject: [PATCH 20/33] Move gText_Decimal to strings.h; dump box_party_pokemon_dropdown rodata --- baserom.ips | Bin 398989 -> 398952 bytes data/box_party_pokemon_dropdown.s | 10 +++++++++- include/strings.h | 3 +++ src/pokemon_size_record.c | 17 ++++++++--------- 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/baserom.ips b/baserom.ips index 07a82d3b0fe8499ad135c63d46e8c0b5d19a6f5b..d11c55170c4c0cbbd57e9d3d0edc9cc0ae303268 100644 GIT binary patch delta 29 jcmeBOEAe8DL_-T>3)2?n^#AQW|Cxc9WqZ$mRz`6E%g7Be delta 67 zcmaE{MxuAEL_-T>3)2?n^#7`kU$!tPFfalk6O?3PU}|7!V1V;j7+BiV|1$$I%l7pD Htc>CSQU(wT diff --git a/data/box_party_pokemon_dropdown.s b/data/box_party_pokemon_dropdown.s index 929aa6ab5..275b53db2 100644 --- a/data/box_party_pokemon_dropdown.s +++ b/data/box_party_pokemon_dropdown.s @@ -7,4 +7,12 @@ .align 2 gUnknown_841F4B4:: @ 841F4B4 - .incbin "baserom.gba", 0x41f4b4, 0x20 + .2byte 0x0100, 0x0100 + .2byte 0x0200, 0x0100 + .2byte 0x0100, 0x0200 + .2byte 0x0200, 0x0200 + + .2byte 0x0080, 0x0080 + .2byte 0x0100, 0x0100 + .2byte 0x0200, 0x0200 + .2byte 0x0400, 0x0400 diff --git a/include/strings.h b/include/strings.h index f39f4f553..983caf509 100644 --- a/include/strings.h +++ b/include/strings.h @@ -735,4 +735,7 @@ extern const u8 gText_WhichMoveShouldBeForgotten[]; extern const u8 gText_TeachMoveQues[]; extern const u8 gText_GiveUpTryingToTeachNewMove[]; +// pokemon_size_record +extern const u8 gText_DecimalPoint[]; + #endif //GUARD_STRINGS_H diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c index 06e23618d..6eff367c5 100644 --- a/src/pokemon_size_record.c +++ b/src/pokemon_size_record.c @@ -6,6 +6,7 @@ #include "pokemon_size_record.h" #include "string_util.h" #include "text.h" +#include "strings.h" #include "constants/species.h" #define DEFAULT_MAX_SIZE 0 // was 0x8100 in Ruby/Sapphire, 0x8000 in Emerald @@ -28,13 +29,13 @@ static const struct UnknownStruct sBigMonSizeTable[] = { 800, 100, 7710 }, { 900, 150, 17710 }, { 1000, 150, 32710 }, - { 1100, 100, -17826 }, - { 1200, 50, -7826 }, - { 1300, 20, -2826 }, - { 1400, 5, -826 }, - { 1500, 2, -326 }, - { 1600, 1, -126 }, - { 1700, 1, -26 }, + { 1100, 100, 47710 }, + { 1200, 50, 57710 }, + { 1300, 20, 62710 }, + { 1400, 5, 64710 }, + { 1500, 2, 65210 }, + { 1600, 1, 65410 }, + { 1700, 1, 65510 }, }; static const u8 sGiftRibbonsMonDataIds[] = @@ -44,8 +45,6 @@ static const u8 sGiftRibbonsMonDataIds[] = MON_DATA_GIFT_RIBBON_7 }; -extern const u8 gText_DecimalPoint[]; - #define CM_PER_INCH 2.54 static u32 GetMonSizeHash(struct Pokemon * pkmn) From 734cbfdb202f366ed39b5304e030478aaa3ea090 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 11 Nov 2019 21:46:57 -0500 Subject: [PATCH 21/33] Decomp map_name_popup --- asm/item_menu.s | 2 +- asm/map_name_popup.s | 490 -------------------------------------- asm/overworld.s | 10 +- baserom.ips | Bin 398952 -> 398518 bytes data/item_use.s | 15 -- data/map_name_popup.s | 10 - include/global.fieldmap.h | 2 +- include/map_name_popup.h | 2 +- include/strings.h | 3 + include/text_window.h | 1 + ld_script.txt | 6 +- src/item_use.c | 63 ++++- src/map_name_popup.c | 216 +++++++++++++++++ src/quest_log.c | 2 +- 14 files changed, 294 insertions(+), 528 deletions(-) delete mode 100644 asm/map_name_popup.s delete mode 100644 data/item_use.s delete mode 100644 data/map_name_popup.s create mode 100644 src/map_name_popup.c diff --git a/asm/item_menu.s b/asm/item_menu.s index a143d2776..a8487864a 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -5826,7 +5826,7 @@ UseRegisteredKeyItemOnField: @ 810AD10 movs r0, 0 b _0810ADA0 _0810AD1E: - bl sub_80982EC + bl DismissMapNamePopup movs r0, 0 movs r1, 0 movs r2, 0 diff --git a/asm/map_name_popup.s b/asm/map_name_popup.s deleted file mode 100644 index ba64bdbe8..000000000 --- a/asm/map_name_popup.s +++ /dev/null @@ -1,490 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8098110 -sub_8098110: @ 8098110 - push {r4-r6,lr} - adds r6, r0, 0 - movs r0, 0x80 - lsls r0, 7 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080981A2 - ldr r0, _08098178 @ =gUnknown_203ADFA - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _080981A2 - ldr r5, _0809817C @ =sub_80981AC - adds r0, r5, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xFF - bne _08098188 - adds r0, r5, 0 - movs r1, 0x5A - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - ldr r1, _08098180 @ =0xffffef7f - movs r0, 0 - movs r2, 0 - bl ChangeBgY - ldr r1, _08098184 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0x8] - strh r1, [r0, 0xC] - strh r6, [r0, 0x18] - b _080981A2 - .align 2, 0 -_08098178: .4byte gUnknown_203ADFA -_0809817C: .4byte sub_80981AC -_08098180: .4byte 0xffffef7f -_08098184: .4byte gTasks -_08098188: - ldr r0, _080981A8 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0x4 - beq _0809819E - movs r0, 0x4 - strh r0, [r1, 0x8] -_0809819E: - movs r0, 0x1 - strh r0, [r1, 0xE] -_080981A2: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080981A8: .4byte gTasks - thumb_func_end sub_8098110 - - thumb_func_start sub_80981AC -sub_80981AC: @ 80981AC - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080981D0 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x8 - bls _080981C6 - b _080982DE -_080981C6: - lsls r0, 2 - ldr r1, _080981D4 @ =_080981D8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080981D0: .4byte gTasks -_080981D4: .4byte _080981D8 - .align 2, 0 -_080981D8: - .4byte _080981FC - .4byte _0809820E - .4byte _08098218 - .4byte _08098234 - .4byte _0809824C - .4byte _080982DE - .4byte _0809827E - .4byte _080982A6 - .4byte _080982D6 -_080981FC: - movs r1, 0x18 - ldrsh r0, [r4, r1] - bl sub_8098340 - strh r0, [r4, 0x10] - movs r0, 0x1 - strh r0, [r4, 0x12] - strh r0, [r4, 0x8] - b _080982DE -_0809820E: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _080982DE -_08098218: - ldrh r0, [r4, 0xC] - subs r0, 0x2 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x18 - negs r1, r1 - cmp r0, r1 - bgt _080982DE - movs r0, 0x3 - strh r0, [r4, 0x8] - movs r0, 0 - strh r0, [r4, 0xA] - b _080982DE -_08098234: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x78 - ble _080982DE - movs r0, 0 - strh r0, [r4, 0xA] - movs r0, 0x4 - strh r0, [r4, 0x8] - b _080982DE -_0809824C: - ldrh r0, [r4, 0xC] - adds r0, 0x2 - strh r0, [r4, 0xC] - lsls r0, 16 - cmp r0, 0 - blt _080982DE - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08098278 - ldrh r0, [r4, 0x10] - bl sub_8098400 - ldrb r0, [r4, 0x10] - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - strh r0, [r4, 0xE] - b _080982DE -_08098278: - movs r0, 0x6 - strh r0, [r4, 0x8] - b _080982E6 -_0809827E: - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080982A0 - movs r1, 0x14 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080982A0 - ldrb r0, [r4, 0x10] - bl rbox_fill_rectangle - ldrb r0, [r4, 0x10] - movs r1, 0x1 - bl CopyWindowToVram - movs r0, 0x1 - strh r0, [r4, 0x14] -_080982A0: - movs r0, 0x7 - strh r0, [r4, 0x8] - b _080982E6 -_080982A6: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080982E6 - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080982C6 - ldrb r0, [r4, 0x10] - bl RemoveWindow - strh r5, [r4, 0x12] - movs r0, 0x1 - strh r0, [r4, 0x16] -_080982C6: - movs r0, 0x8 - strh r0, [r4, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - b _080982E6 -_080982D6: - adds r0, r2, 0 - bl DestroyTask - b _080982E6 -_080982DE: - ldrh r1, [r4, 0xC] - movs r0, 0x12 - bl SetGpuReg -_080982E6: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80981AC - - thumb_func_start sub_80982EC -sub_80982EC: @ 80982EC - push {lr} - ldr r0, _08098318 @ =sub_80981AC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xFF - beq _08098312 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _0809831C @ =gTasks+0x8 - adds r1, r0, r1 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0x5 - bgt _08098312 - movs r0, 0x6 - strh r0, [r1] -_08098312: - pop {r0} - bx r0 - .align 2, 0 -_08098318: .4byte sub_80981AC -_0809831C: .4byte gTasks+0x8 - thumb_func_end sub_80982EC - - thumb_func_start sub_8098320 -sub_8098320: @ 8098320 - push {lr} - ldr r0, _0809833C @ =sub_80981AC - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xFF - eors r0, r1 - negs r1, r0 - orrs r1, r0 - lsrs r1, 31 - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_0809833C: .4byte sub_80981AC - thumb_func_end sub_8098320 - - thumb_func_start sub_8098340 -sub_8098340: @ 8098340 - push {r4-r6,lr} - sub sp, 0x8 - adds r4, r0, 0 - ldr r0, _08098378 @ =gUnknown_83D4164 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp] - str r1, [sp, 0x4] - movs r6, 0x1D - ldr r0, _0809837C @ =gMapHeader - ldrb r0, [r0, 0x1A] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - beq _08098396 - cmp r0, 0x7F - beq _08098384 - ldr r2, [sp] - lsrs r1, r2, 24 - adds r1, 0x5 - lsls r1, 24 - ldr r0, _08098380 @ =0x00ffffff - ands r0, r2 - orrs r0, r1 - str r0, [sp] - movs r6, 0x27 - b _08098396 - .align 2, 0 -_08098378: .4byte gUnknown_83D4164 -_0809837C: .4byte gMapHeader -_08098380: .4byte 0x00ffffff -_08098384: - ldr r2, [sp] - lsrs r1, r2, 24 - adds r1, 0x8 - lsls r1, 24 - ldr r0, _080983B4 @ =0x00ffffff - ands r0, r2 - orrs r0, r1 - str r0, [sp] - movs r6, 0x2D -_08098396: - mov r0, sp - bl AddWindow - lsls r0, 16 - lsrs r5, r0, 16 - cmp r4, 0 - beq _080983B8 - movs r0, 0x3 - bl stdpal_get - movs r1, 0xD0 - movs r2, 0x20 - bl LoadPalette - b _080983C6 - .align 2, 0 -_080983B4: .4byte 0x00ffffff -_080983B8: - movs r0, 0x3 - bl stdpal_get - ldr r1, _080983FC @ =gPlttBufferUnfaded + 0x1A0 - movs r2, 0x10 - bl CpuSet -_080983C6: - lsls r4, r5, 24 - lsrs r4, 24 - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_814FF6C - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0xD - bl DrawTextBorderOuter - adds r0, r4, 0 - bl PutWindowTilemap - adds r0, r5, 0 - bl sub_8098400 - adds r0, r4, 0 - movs r1, 0x3 - bl CopyWindowToVram - adds r0, r5, 0 - add sp, 0x8 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080983FC: .4byte gPlttBufferUnfaded + 0x1A0 - thumb_func_end sub_8098340 - - thumb_func_start sub_8098400 -sub_8098400: @ 8098400 - push {r4-r6,lr} - sub sp, 0x28 - lsls r0, 16 - lsrs r6, r0, 16 - movs r5, 0x70 - ldr r4, _08098478 @ =gMapHeader - ldrb r1, [r4, 0x14] - add r0, sp, 0xC - movs r2, 0 - bl GetMapName - adds r2, r0, 0 - movs r0, 0x1A - ldrsb r0, [r4, r0] - cmp r0, 0 - beq _08098434 - adds r1, r0, 0 - adds r0, r2, 0 - bl sub_809847C - movs r0, 0x1A - ldrsb r0, [r4, r0] - movs r5, 0xB0 - cmp r0, 0x7F - beq _08098434 - movs r5, 0x98 -_08098434: - movs r2, 0x1 - negs r2, r2 - movs r0, 0x2 - add r1, sp, 0xC - bl GetStringWidth - adds r4, r0, 0 - subs r4, r5, r4 - lsrs r4, 1 - lsls r5, r6, 24 - lsrs r5, 24 - adds r0, r5, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x2 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r5, 0 - movs r1, 0x2 - add r2, sp, 0xC - adds r3, r4, 0 - bl AddTextPrinterParameterized - add sp, 0x28 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08098478: .4byte gMapHeader - thumb_func_end sub_8098400 - - thumb_func_start sub_809847C -sub_809847C: @ 809847C - push {lr} - adds r2, r0, 0 - lsls r1, 24 - lsrs r3, r1, 24 - asrs r1, 24 - cmp r1, 0 - beq _080984D2 - movs r0, 0 - strb r0, [r2] - adds r2, 0x1 - cmp r1, 0x7F - bne _080984A4 - ldr r1, _080984A0 @ =gUnknown_841D18D - adds r0, r2, 0 - bl StringCopy - b _080984D2 - .align 2, 0 -_080984A0: .4byte gUnknown_841D18D -_080984A4: - cmp r1, 0 - bge _080984B4 - movs r0, 0xBC - strb r0, [r2] - adds r2, 0x1 - negs r0, r1 - lsls r0, 24 - lsrs r3, r0, 24 -_080984B4: - lsls r1, r3, 24 - asrs r1, 24 - adds r0, r2, 0 - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - adds r2, r0, 0 - adds r1, r2, 0 - movs r0, 0xC0 - strb r0, [r2] - adds r2, 0x1 - movs r0, 0xFF - strb r0, [r1, 0x1] - adds r0, r2, 0 -_080984D2: - pop {r1} - bx r1 - thumb_func_end sub_809847C - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/overworld.s b/asm/overworld.s index 9b9fe037f..28bcd8ecb 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -1747,7 +1747,7 @@ _080558D4: cmp r0, r1 beq _08055914 movs r0, 0x1 - bl sub_8098110 + bl CreateMapNamePopupIfNotAlreadyRunning _08055914: add sp, 0x4 pop {r4,r5} @@ -3282,7 +3282,7 @@ sub_805644C: @ 805644C bl sub_81127F8 _0805649E: bl ScriptContext2_Enable - bl sub_80982EC + bl DismissMapNamePopup b _080564BA .align 2, 0 _080564A8: .4byte gUnknown_3005E88 @@ -3323,7 +3323,7 @@ sub_80564C8: @ 80564C8 cmp r0, 0x1 bne _0805650C bl ScriptContext2_Enable - bl sub_80982EC + bl DismissMapNamePopup b _08056522 .align 2, 0 _08056508: .4byte gUnknown_3005E90 @@ -3824,7 +3824,7 @@ sub_8056918: @ 8056918 cmp r0, 0x4 bne _0805692C movs r0, 0 - bl sub_8098110 + bl CreateMapNamePopupIfNotAlreadyRunning _0805692C: bl sub_807DF7C pop {r0} @@ -4223,7 +4223,7 @@ _08056CA8: cmp r0, 0x4 bne _08056CCA movs r0, 0 - bl sub_8098110 + bl CreateMapNamePopupIfNotAlreadyRunning b _08056CCA .align 2, 0 _08056CBC: .4byte gMapHeader diff --git a/baserom.ips b/baserom.ips index d11c55170c4c0cbbd57e9d3d0edc9cc0ae303268..c7c4f9714efde94fbf9491844cff3f48712c5072 100644 GIT binary patch delta 35 pcmaE{Mq=AaiG~)&7N#xCg>~EO>X?oA+e7=AftY1`Xg{lPI{*Z?4PyWR delta 248 zcmdnCQsTuLiG~)&7N#xCg>}5PjwuWr42-gTOuUQ?+Y9TMjrhgYw=gbXfB{A(C`)*9 z<6kij2MEt$I^#kS^BlnZ>FXacu`@X^O@DZvQJl#^aXRBOCRr{62B<1VkhmC|12f3P>H4=BC6s{- m5C#GPh`|sJn3QLDz|2tdf4U>kruId>%s|YteNiu~NIL+tyDwh= diff --git a/data/item_use.s b/data/item_use.s deleted file mode 100644 index aa78ac919..000000000 --- a/data/item_use.s +++ /dev/null @@ -1,15 +0,0 @@ -#include "constants/maps.h" -#include "constants/species.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - - .incbin "baserom.gba", 0x3E27B4, 0x1A0 - -gUnknown_83E2954:: @ 83E2954 - .4byte sub_8124C8C - .4byte CB2_ReturnToField - .4byte NULL - .4byte NULL diff --git a/data/map_name_popup.s b/data/map_name_popup.s deleted file mode 100644 index 6509df895..000000000 --- a/data/map_name_popup.s +++ /dev/null @@ -1,10 +0,0 @@ -#include "constants/maps.h" -#include "constants/species.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnknown_83D4164:: @ 83D4164 - .incbin "baserom.gba", 0x3D4164, 0x8 diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index c0f25fa93..70e806266 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -163,7 +163,7 @@ struct MapHeader /* 0x17 */ u8 mapType; /* 0x18 */ u8 filler_18; /* 0x19 */ u8 escapeRope; - /* 0x1A */ u8 flags; + /* 0x1A */ s8 flags; /* 0x1B */ u8 battleType; }; diff --git a/include/map_name_popup.h b/include/map_name_popup.h index cf9b005d9..6f4a6528c 100644 --- a/include/map_name_popup.h +++ b/include/map_name_popup.h @@ -9,6 +9,6 @@ // Exported ROM declarations void HideMapNamePopUpWindow(void); -void sub_8098110(u8); +void CreateMapNamePopupIfNotAlreadyRunning(u8); #endif //GUARD_MAP_NAME_POPUP_H diff --git a/include/strings.h b/include/strings.h index 983caf509..6ad76e2fa 100644 --- a/include/strings.h +++ b/include/strings.h @@ -738,4 +738,7 @@ extern const u8 gText_GiveUpTryingToTeachNewMove[]; // pokemon_size_record extern const u8 gText_DecimalPoint[]; +// map_name_popup +extern const u8 gUnknown_841D18D[]; + #endif //GUARD_STRINGS_H diff --git a/include/text_window.h b/include/text_window.h index c1463a9c7..8e8466145 100644 --- a/include/text_window.h +++ b/include/text_window.h @@ -29,5 +29,6 @@ void DrawTextBorderOuter(u8 windowId, u16 tileStart, u8 palette); void TextWindow_LoadTilesStdFrame1(u8 windowId, u16 destOffset); void sub_814FE6C(u8 windowId, u16 destOffset, u8 palIdx); void sub_814FEEC(u8 windowId, u16 destOffset, u8 palIdx); +void sub_814FF6C(u8 windowId, u16 destOffset); #endif // GUARD_TEXT_WINDOW_H diff --git a/ld_script.txt b/ld_script.txt index d40c88c0a..856155aa8 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -136,7 +136,7 @@ SECTIONS { asm/script_movement.o(.text); asm/fldeff_cut.o(.text); src/mail_data.o(.text); - asm/map_name_popup.o(.text); + src/map_name_popup.o(.text); src/item_menu_icons.o(.text); src/battle_anim_mon_movement.o(.text); src/item.o(.text); @@ -438,7 +438,7 @@ SECTIONS { data/pokemon_storage_system.o(.rodata); src/pokemon_icon.o(.rodata); data/fldeff_cut.o(.rodata); - data/map_name_popup.o(.rodata); + src/map_name_popup.o(.rodata); src/item_menu_icons.o(.rodata); src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); @@ -447,7 +447,7 @@ SECTIONS { src/script_menu.o(.rodata); data/naming_screen.o(.rodata); src/pokemon_size_record.o(.rodata); - data/item_use.o(.rodata); + src/item_use.o(.rodata); data/battle_anim_effects_misc.o(.rodata); src/flying.o(.rodata); src/psychic.o(.rodata); diff --git a/src/item_use.c b/src/item_use.c index 873ce4ab4..db0475370 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -76,7 +76,68 @@ void sub_80A1D68(u8 taskId); void Task_BattleUse_StatBooster_DelayAndPrint(u8 taskId); void Task_BattleUse_StatBooster_WaitButton_ReturnToBattle(u8 taskId); -extern void (*const gUnknown_83E2954[])(void); +// No clue what this is +static const u8 sUnref_83E27B4[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x1f, 0x00, 0xe0, 0x03, 0x00, 0x7c, + 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +void (*const gUnknown_83E2954[])(void) = { + sub_8124C8C, + CB2_ReturnToField, + NULL, + NULL +}; void sub_80A0FBC(u8 taskId) { diff --git a/src/map_name_popup.c b/src/map_name_popup.c new file mode 100644 index 000000000..361c3a931 --- /dev/null +++ b/src/map_name_popup.c @@ -0,0 +1,216 @@ +#include "global.h" +#include "bg.h" +#include "gpu_regs.h" +#include "window.h" +#include "palette.h" +#include "task.h" +#include "event_data.h" +#include "text_window.h" +#include "quest_log.h" +#include "region_map.h" +#include "text.h" +#include "strings.h" +#include "string_util.h" +#include "constants/flags.h" + +static void Task_MapNamePopup(u8 taskId); +static u16 MapNamePopupCreateWindow(int a0); +static void MapNamePopupPrintMapNameOnWindow(u16 a0); +static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 flags); + +void CreateMapNamePopupIfNotAlreadyRunning(int a0) +{ + u8 taskId; + if (FlagGet(FLAG_SPECIAL_FLAG_0x4000) != TRUE && !(gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3)) + { + taskId = FindTaskIdByFunc(Task_MapNamePopup); + if (taskId == 0xFF) + { + taskId = CreateTask(Task_MapNamePopup, 90); + ChangeBgX(0, 0x00000000, 0); + ChangeBgY(0, 0xFFFFEF7F, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[8] = a0; + } + else + { + if (gTasks[taskId].data[0] != 4) + gTasks[taskId].data[0] = 4; + gTasks[taskId].data[3] = 1; + } + } +} + +static void Task_MapNamePopup(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + task->data[4] = MapNamePopupCreateWindow(task->data[8]); + task->data[5] = 1; + task->data[0] = 1; + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + break; + // fallthrough + case 2: + task->data[2] -= 2; + if (task->data[2] <= -24) + { + task->data[0] = 3; + task->data[1] = 0; + } + break; + case 3: + task->data[1]++; + if (task->data[1] > 120) + { + task->data[1] = 0; + task->data[0] = 4; + } + break; + case 4: + task->data[2] += 2; + if (task->data[2] >= 0) + { + if (task->data[3]) + { + MapNamePopupPrintMapNameOnWindow(task->data[4]); + CopyWindowToVram(task->data[4], 2); + task->data[0] = 1; + task->data[3] = 0; + } + else + { + task->data[0] = 6; + return; + } + } + case 5: + break; + case 6: + if (task->data[5] && !task->data[6]) + { + rbox_fill_rectangle(task->data[4]); + CopyWindowToVram(task->data[4], 1); + task->data[6] = 1; + } + task->data[0] = 7; + return; + case 7: + if (!IsDma3ManagerBusyWithBgCopy()) + { + if (task->data[5]) + { + RemoveWindow(task->data[4]); + task->data[5] = 0; + task->data[7] = 1; + } + task->data[0] = 8; + ChangeBgY(0, 0x00000000, 0); + } + return; + case 8: + DestroyTask(taskId); + return; + } + SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]); +} + +void DismissMapNamePopup(void) +{ + u8 taskId; + s16 *data; + taskId = FindTaskIdByFunc(Task_MapNamePopup); + if (taskId != 0xFF) + { + data = gTasks[taskId].data; + if (data[0] < 6) + data[0] = 6; + } +} + +bool32 IsMapNamePopupTaskActive(void) +{ + return FindTaskIdByFunc(Task_MapNamePopup) != 0xFF ? TRUE : FALSE; +} + +static u16 MapNamePopupCreateWindow(int a0) +{ + struct WindowTemplate windowTemplate = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 29, + .width = 14, + .height = 2, + .paletteNum = 0xD, + .baseBlock = 0x001 + }; + u16 windowId; + u16 r6 = 0x01D; + if (gMapHeader.flags) + { + if (gMapHeader.flags != 0x7F) + { + windowTemplate.width += 5; + r6 = 0x027; + } + else + { + windowTemplate.width += 8; + r6 = 0x02D; + } + } + windowId = AddWindow(&windowTemplate); + if (a0) + { + LoadPalette(stdpal_get(3), 0xd0, 0x20); + } + else + { + CpuCopy16(stdpal_get(3), &gPlttBufferUnfaded[0xd0], 0x20); + } + sub_814FF6C(windowId, r6); + DrawTextBorderOuter(windowId, r6, 0xD); + PutWindowTilemap(windowId); + MapNamePopupPrintMapNameOnWindow(windowId); + CopyWindowToVram(windowId, 3); + return windowId; +} + +static void MapNamePopupPrintMapNameOnWindow(u16 windowId) +{ + u8 mapName[25]; + u32 maxWidth = 112; + u32 xpos; + u8 *ptr = GetMapName(mapName, gMapHeader.regionMapSectionId, 0); + if (gMapHeader.flags) + { + ptr = MapNamePopupAppendFloorNum(ptr, gMapHeader.flags); + maxWidth = gMapHeader.flags != 0x7F ? 152 : 176; + } + xpos = (maxWidth - GetStringWidth(2, mapName, -1)) / 2; + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + AddTextPrinterParameterized(windowId, 2, mapName, xpos, 2, 0xFF, NULL); +} + +static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 flags) +{ + if (flags == 0) + return dest; + *dest++ = CHAR_SPACE; + if (flags == 0x7F) + return StringCopy(dest, gUnknown_841D18D); + if (flags < 0) + { + *dest++ = CHAR_B; + flags *= -1; + } + dest = ConvertIntToDecimalStringN(dest, flags, STR_CONV_MODE_LEFT_ALIGN, 2); + *dest++ = CHAR_F; + *dest = EOS; + return dest; +} diff --git a/src/quest_log.c b/src/quest_log.c index 64d3df076..2675d3a4f 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -1425,7 +1425,7 @@ static void sub_81120AC(u8 taskId) break; default: if (gUnknown_203AE94.unk_0_6 == 1) - sub_8098110(1); + CreateMapNamePopupIfNotAlreadyRunning(1); CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400); Free(gUnknown_203AE90); gUnknown_203AE94 = (struct UnkStruct_203AE94){}; From 3cbc3121304a0dfb34566a16b828dda96c474700 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 12 Nov 2019 11:21:49 -0500 Subject: [PATCH 22/33] Dump field_door data; start field_door decomp --- asm/field_door.s | 183 -------- baserom.ips | Bin 398518 -> 363962 bytes data/field_door.s | 539 +++++++++++++++++++++++- data/metatile_behavior.s | 6 - graphics/door_anims/frame_8353088_1.png | Bin 0 -> 139 bytes graphics/door_anims/frame_8353088_2.png | Bin 0 -> 124 bytes graphics/door_anims/frame_8353088_3.png | Bin 0 -> 102 bytes graphics/door_anims/frame_8353228_1.png | Bin 0 -> 105 bytes graphics/door_anims/frame_8353228_2.png | Bin 0 -> 116 bytes graphics/door_anims/frame_8353228_3.png | Bin 0 -> 103 bytes graphics/door_anims/frame_83533C8_1.png | Bin 0 -> 121 bytes graphics/door_anims/frame_83533C8_2.png | Bin 0 -> 128 bytes graphics/door_anims/frame_83533C8_3.png | Bin 0 -> 103 bytes graphics/door_anims/frame_8353568_1.png | Bin 0 -> 147 bytes graphics/door_anims/frame_8353568_2.png | Bin 0 -> 130 bytes graphics/door_anims/frame_8353568_3.png | Bin 0 -> 102 bytes graphics/door_anims/frame_8353708_1.png | Bin 0 -> 144 bytes graphics/door_anims/frame_8353708_2.png | Bin 0 -> 127 bytes graphics/door_anims/frame_8353708_3.png | Bin 0 -> 102 bytes graphics/door_anims/frame_83538A8_1.png | Bin 0 -> 131 bytes graphics/door_anims/frame_83538A8_2.png | Bin 0 -> 123 bytes graphics/door_anims/frame_83538A8_3.png | Bin 0 -> 108 bytes graphics/door_anims/frame_8353A48_1.png | Bin 0 -> 146 bytes graphics/door_anims/frame_8353A48_2.png | Bin 0 -> 130 bytes graphics/door_anims/frame_8353A48_3.png | Bin 0 -> 102 bytes graphics/door_anims/frame_8353BE8_1.png | Bin 0 -> 140 bytes graphics/door_anims/frame_8353BE8_2.png | Bin 0 -> 124 bytes graphics/door_anims/frame_8353BE8_3.png | Bin 0 -> 103 bytes graphics/door_anims/frame_8353D88_1.png | Bin 0 -> 125 bytes graphics/door_anims/frame_8353D88_2.png | Bin 0 -> 130 bytes graphics/door_anims/frame_8353D88_3.png | Bin 0 -> 95 bytes graphics/door_anims/frame_8353F28_1.png | Bin 0 -> 145 bytes graphics/door_anims/frame_8353F28_2.png | Bin 0 -> 133 bytes graphics/door_anims/frame_8353F28_3.png | Bin 0 -> 103 bytes graphics/door_anims/frame_83540C8_1.png | Bin 0 -> 141 bytes graphics/door_anims/frame_83540C8_2.png | Bin 0 -> 125 bytes graphics/door_anims/frame_83540C8_3.png | Bin 0 -> 103 bytes graphics/door_anims/frame_8354268_1.png | Bin 0 -> 138 bytes graphics/door_anims/frame_8354268_2.png | Bin 0 -> 130 bytes graphics/door_anims/frame_8354268_3.png | Bin 0 -> 103 bytes graphics/door_anims/frame_8354408_1.png | Bin 0 -> 146 bytes graphics/door_anims/frame_8354408_2.png | Bin 0 -> 138 bytes graphics/door_anims/frame_8354408_3.png | Bin 0 -> 119 bytes graphics/door_anims/frame_83545A8_1.png | Bin 0 -> 122 bytes graphics/door_anims/frame_83545A8_2.png | Bin 0 -> 129 bytes graphics/door_anims/frame_83545A8_3.png | Bin 0 -> 105 bytes graphics/door_anims/frame_8354748_1.png | Bin 0 -> 151 bytes graphics/door_anims/frame_8354748_2.png | Bin 0 -> 129 bytes graphics/door_anims/frame_8354748_3.png | Bin 0 -> 103 bytes graphics/door_anims/frame_83548E8_1.png | Bin 0 -> 150 bytes graphics/door_anims/frame_83548E8_2.png | Bin 0 -> 131 bytes graphics/door_anims/frame_83548E8_3.png | Bin 0 -> 90 bytes graphics/door_anims/frame_8354A88_1.png | Bin 0 -> 140 bytes graphics/door_anims/frame_8354A88_2.png | Bin 0 -> 127 bytes graphics/door_anims/frame_8354A88_3.png | Bin 0 -> 98 bytes graphics/door_anims/frame_8354C28_1.png | Bin 0 -> 130 bytes graphics/door_anims/frame_8354C28_2.png | Bin 0 -> 127 bytes graphics/door_anims/frame_8354C28_3.png | Bin 0 -> 104 bytes graphics/door_anims/frame_8354F48_1.png | Bin 0 -> 139 bytes graphics/door_anims/frame_8354F48_2.png | Bin 0 -> 141 bytes graphics/door_anims/frame_8354F48_3.png | Bin 0 -> 130 bytes graphics/door_anims/frame_8355268_1.png | Bin 0 -> 137 bytes graphics/door_anims/frame_8355268_2.png | Bin 0 -> 137 bytes graphics/door_anims/frame_8355268_3.png | Bin 0 -> 115 bytes graphics/door_anims/frame_8355588_1.png | Bin 0 -> 177 bytes graphics/door_anims/frame_8355588_2.png | Bin 0 -> 160 bytes graphics/door_anims/frame_8355588_3.png | Bin 0 -> 123 bytes graphics/door_anims/frame_8359588_1.png | Bin 0 -> 79 bytes graphics/door_anims/frame_8359588_2.png | Bin 0 -> 79 bytes graphics/door_anims/frame_8359788_1.png | Bin 0 -> 101 bytes graphics/door_anims/frame_8359788_2.png | Bin 0 -> 100 bytes graphics/door_anims/frame_8359788_3.png | Bin 0 -> 88 bytes graphics/door_anims/frame_8359788_4.png | Bin 0 -> 80 bytes graphics/door_anims/frame_8359988_1.png | Bin 0 -> 104 bytes graphics/door_anims/frame_8359988_2.png | Bin 0 -> 112 bytes graphics/door_anims/frame_8359988_3.png | Bin 0 -> 102 bytes graphics/door_anims/frame_8359988_4.png | Bin 0 -> 90 bytes graphics/door_anims/frame_8359B88_1.png | Bin 0 -> 105 bytes graphics/door_anims/frame_8359B88_2.png | Bin 0 -> 109 bytes graphics/door_anims/frame_8359B88_3.png | Bin 0 -> 109 bytes graphics/door_anims/frame_8359B88_4.png | Bin 0 -> 89 bytes graphics/door_anims/frame_8359CA8_1.png | Bin 0 -> 139 bytes graphics/door_anims/frame_8359CA8_2.png | Bin 0 -> 139 bytes graphics/door_anims/frame_8359CA8_3.png | Bin 0 -> 117 bytes graphics/door_anims/frame_8359FC8_1.png | Bin 0 -> 132 bytes graphics/door_anims/frame_8359FC8_2.png | Bin 0 -> 125 bytes graphics/door_anims/frame_8359FC8_3.png | Bin 0 -> 103 bytes graphics/door_anims/frame_835A168_1.png | Bin 0 -> 121 bytes graphics/door_anims/frame_835A168_2.png | Bin 0 -> 127 bytes graphics/door_anims/frame_835A168_3.png | Bin 0 -> 104 bytes graphics/door_anims/frame_835A308_1.png | Bin 0 -> 128 bytes graphics/door_anims/frame_835A308_2.png | Bin 0 -> 130 bytes graphics/door_anims/frame_835A308_3.png | Bin 0 -> 104 bytes graphics/door_anims/frame_835A4A8_1.png | Bin 0 -> 132 bytes graphics/door_anims/frame_835A4A8_2.png | Bin 0 -> 125 bytes graphics/door_anims/frame_835A4A8_3.png | Bin 0 -> 103 bytes graphics/door_anims/frame_835A648_1.png | Bin 0 -> 144 bytes graphics/door_anims/frame_835A648_2.png | Bin 0 -> 130 bytes graphics/door_anims/frame_835A648_3.png | Bin 0 -> 103 bytes graphics/door_anims/frame_835A7E8_1.png | Bin 0 -> 140 bytes graphics/door_anims/frame_835A7E8_2.png | Bin 0 -> 138 bytes graphics/door_anims/frame_835A7E8_3.png | Bin 0 -> 107 bytes graphics/door_anims/frame_835A988_1.png | Bin 0 -> 132 bytes graphics/door_anims/frame_835A988_2.png | Bin 0 -> 125 bytes graphics/door_anims/frame_835A988_3.png | Bin 0 -> 103 bytes graphics/door_anims/frame_835AB28_1.png | Bin 0 -> 223 bytes graphics/door_anims/frame_835AB28_2.png | Bin 0 -> 212 bytes graphics/door_anims/frame_835AB28_3.png | Bin 0 -> 192 bytes graphics/door_anims/frame_835AE48_1.png | Bin 0 -> 141 bytes graphics/door_anims/frame_835AE48_2.png | Bin 0 -> 141 bytes graphics/door_anims/frame_835AE48_3.png | Bin 0 -> 119 bytes graphics/door_anims/frame_835B168_1.png | Bin 0 -> 137 bytes graphics/door_anims/frame_835B168_2.png | Bin 0 -> 137 bytes graphics/door_anims/frame_835B168_3.png | Bin 0 -> 115 bytes include/field_camera.h | 1 + include/metatile_behavior.h | 1 - ld_script.txt | 3 +- src/field_door.c | 102 +++++ src/metatile_behavior.c | 37 +- 119 files changed, 675 insertions(+), 197 deletions(-) delete mode 100644 data/metatile_behavior.s create mode 100644 graphics/door_anims/frame_8353088_1.png create mode 100644 graphics/door_anims/frame_8353088_2.png create mode 100644 graphics/door_anims/frame_8353088_3.png create mode 100644 graphics/door_anims/frame_8353228_1.png create mode 100644 graphics/door_anims/frame_8353228_2.png create mode 100644 graphics/door_anims/frame_8353228_3.png create mode 100644 graphics/door_anims/frame_83533C8_1.png create mode 100644 graphics/door_anims/frame_83533C8_2.png create mode 100644 graphics/door_anims/frame_83533C8_3.png create mode 100644 graphics/door_anims/frame_8353568_1.png create mode 100644 graphics/door_anims/frame_8353568_2.png create mode 100644 graphics/door_anims/frame_8353568_3.png create mode 100644 graphics/door_anims/frame_8353708_1.png create mode 100644 graphics/door_anims/frame_8353708_2.png create mode 100644 graphics/door_anims/frame_8353708_3.png create mode 100644 graphics/door_anims/frame_83538A8_1.png create mode 100644 graphics/door_anims/frame_83538A8_2.png create mode 100644 graphics/door_anims/frame_83538A8_3.png create mode 100644 graphics/door_anims/frame_8353A48_1.png create mode 100644 graphics/door_anims/frame_8353A48_2.png create mode 100644 graphics/door_anims/frame_8353A48_3.png create mode 100644 graphics/door_anims/frame_8353BE8_1.png create mode 100644 graphics/door_anims/frame_8353BE8_2.png create mode 100644 graphics/door_anims/frame_8353BE8_3.png create mode 100644 graphics/door_anims/frame_8353D88_1.png create mode 100644 graphics/door_anims/frame_8353D88_2.png create mode 100644 graphics/door_anims/frame_8353D88_3.png create mode 100644 graphics/door_anims/frame_8353F28_1.png create mode 100644 graphics/door_anims/frame_8353F28_2.png create mode 100644 graphics/door_anims/frame_8353F28_3.png create mode 100644 graphics/door_anims/frame_83540C8_1.png create mode 100644 graphics/door_anims/frame_83540C8_2.png create mode 100644 graphics/door_anims/frame_83540C8_3.png create mode 100644 graphics/door_anims/frame_8354268_1.png create mode 100644 graphics/door_anims/frame_8354268_2.png create mode 100644 graphics/door_anims/frame_8354268_3.png create mode 100644 graphics/door_anims/frame_8354408_1.png create mode 100644 graphics/door_anims/frame_8354408_2.png create mode 100644 graphics/door_anims/frame_8354408_3.png create mode 100644 graphics/door_anims/frame_83545A8_1.png create mode 100644 graphics/door_anims/frame_83545A8_2.png create mode 100644 graphics/door_anims/frame_83545A8_3.png create mode 100644 graphics/door_anims/frame_8354748_1.png create mode 100644 graphics/door_anims/frame_8354748_2.png create mode 100644 graphics/door_anims/frame_8354748_3.png create mode 100644 graphics/door_anims/frame_83548E8_1.png create mode 100644 graphics/door_anims/frame_83548E8_2.png create mode 100644 graphics/door_anims/frame_83548E8_3.png create mode 100644 graphics/door_anims/frame_8354A88_1.png create mode 100644 graphics/door_anims/frame_8354A88_2.png create mode 100644 graphics/door_anims/frame_8354A88_3.png create mode 100644 graphics/door_anims/frame_8354C28_1.png create mode 100644 graphics/door_anims/frame_8354C28_2.png create mode 100644 graphics/door_anims/frame_8354C28_3.png create mode 100644 graphics/door_anims/frame_8354F48_1.png create mode 100644 graphics/door_anims/frame_8354F48_2.png create mode 100644 graphics/door_anims/frame_8354F48_3.png create mode 100644 graphics/door_anims/frame_8355268_1.png create mode 100644 graphics/door_anims/frame_8355268_2.png create mode 100644 graphics/door_anims/frame_8355268_3.png create mode 100644 graphics/door_anims/frame_8355588_1.png create mode 100644 graphics/door_anims/frame_8355588_2.png create mode 100644 graphics/door_anims/frame_8355588_3.png create mode 100644 graphics/door_anims/frame_8359588_1.png create mode 100644 graphics/door_anims/frame_8359588_2.png create mode 100644 graphics/door_anims/frame_8359788_1.png create mode 100644 graphics/door_anims/frame_8359788_2.png create mode 100644 graphics/door_anims/frame_8359788_3.png create mode 100644 graphics/door_anims/frame_8359788_4.png create mode 100644 graphics/door_anims/frame_8359988_1.png create mode 100644 graphics/door_anims/frame_8359988_2.png create mode 100644 graphics/door_anims/frame_8359988_3.png create mode 100644 graphics/door_anims/frame_8359988_4.png create mode 100644 graphics/door_anims/frame_8359B88_1.png create mode 100644 graphics/door_anims/frame_8359B88_2.png create mode 100644 graphics/door_anims/frame_8359B88_3.png create mode 100644 graphics/door_anims/frame_8359B88_4.png create mode 100644 graphics/door_anims/frame_8359CA8_1.png create mode 100644 graphics/door_anims/frame_8359CA8_2.png create mode 100644 graphics/door_anims/frame_8359CA8_3.png create mode 100644 graphics/door_anims/frame_8359FC8_1.png create mode 100644 graphics/door_anims/frame_8359FC8_2.png create mode 100644 graphics/door_anims/frame_8359FC8_3.png create mode 100644 graphics/door_anims/frame_835A168_1.png create mode 100644 graphics/door_anims/frame_835A168_2.png create mode 100644 graphics/door_anims/frame_835A168_3.png create mode 100644 graphics/door_anims/frame_835A308_1.png create mode 100644 graphics/door_anims/frame_835A308_2.png create mode 100644 graphics/door_anims/frame_835A308_3.png create mode 100644 graphics/door_anims/frame_835A4A8_1.png create mode 100644 graphics/door_anims/frame_835A4A8_2.png create mode 100644 graphics/door_anims/frame_835A4A8_3.png create mode 100644 graphics/door_anims/frame_835A648_1.png create mode 100644 graphics/door_anims/frame_835A648_2.png create mode 100644 graphics/door_anims/frame_835A648_3.png create mode 100644 graphics/door_anims/frame_835A7E8_1.png create mode 100644 graphics/door_anims/frame_835A7E8_2.png create mode 100644 graphics/door_anims/frame_835A7E8_3.png create mode 100644 graphics/door_anims/frame_835A988_1.png create mode 100644 graphics/door_anims/frame_835A988_2.png create mode 100644 graphics/door_anims/frame_835A988_3.png create mode 100644 graphics/door_anims/frame_835AB28_1.png create mode 100644 graphics/door_anims/frame_835AB28_2.png create mode 100644 graphics/door_anims/frame_835AB28_3.png create mode 100644 graphics/door_anims/frame_835AE48_1.png create mode 100644 graphics/door_anims/frame_835AE48_2.png create mode 100644 graphics/door_anims/frame_835AE48_3.png create mode 100644 graphics/door_anims/frame_835B168_1.png create mode 100644 graphics/door_anims/frame_835B168_2.png create mode 100644 graphics/door_anims/frame_835B168_3.png create mode 100644 src/field_door.c diff --git a/asm/field_door.s b/asm/field_door.s index bcb8a6082..b4541ffaf 100644 --- a/asm/field_door.s +++ b/asm/field_door.s @@ -5,189 +5,6 @@ .text - thumb_func_start sub_805AF14 -sub_805AF14: @ 805AF14 - push {r4-r7,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - adds r7, r3, 0 - ldrh r1, [r5, 0x2] - ldr r0, _0805AF34 @ =0x0000ffff - cmp r1, r0 - bne _0805AF38 - adds r0, r4, 0 - adds r1, r6, 0 - adds r2, r7, 0 - bl sub_805AF54 - b _0805AF4E - .align 2, 0 -_0805AF34: .4byte 0x0000ffff -_0805AF38: - ldrh r1, [r5, 0x2] - ldr r0, [r4, 0x4] - adds r0, r1 - bl sub_805AF80 - ldr r3, [r4, 0x8] - adds r0, r4, 0 - adds r1, r6, 0 - adds r2, r7, 0 - bl sub_805AF94 -_0805AF4E: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_805AF14 - - thumb_func_start sub_805AF54 -sub_805AF54: @ 805AF54 - push {r4,r5,lr} - adds r5, r1, 0 - adds r4, r2, 0 - ldrb r0, [r0, 0x3] - cmp r0, 0 - bne _0805AF6A - adds r0, r5, 0 - adds r1, r4, 0 - bl CurrentMapDrawMetatileAt - b _0805AF7A -_0805AF6A: - adds r0, r5, 0 - adds r1, r4, 0 - bl CurrentMapDrawMetatileAt - subs r1, r4, 0x1 - adds r0, r5, 0 - bl CurrentMapDrawMetatileAt -_0805AF7A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_805AF54 - - thumb_func_start sub_805AF80 -sub_805AF80: @ 805AF80 - push {lr} - ldr r1, _0805AF90 @ =0x06007f00 - movs r2, 0x40 - bl CpuFastSet - pop {r0} - bx r0 - .align 2, 0 -_0805AF90: .4byte 0x06007f00 - thumb_func_end sub_805AF80 - - thumb_func_start sub_805AF94 -sub_805AF94: @ 805AF94 - push {r4-r6,lr} - sub sp, 0x10 - adds r5, r1, 0 - adds r6, r2, 0 - adds r4, r3, 0 - ldrb r0, [r0, 0x3] - cmp r0, 0 - bne _0805AFB2 - movs r1, 0xFE - lsls r1, 2 - mov r0, sp - adds r2, r4, 0 - bl sub_805AFE8 - b _0805AFD4 -_0805AFB2: - movs r1, 0xFE - lsls r1, 2 - mov r0, sp - adds r2, r4, 0 - bl sub_805AFE8 - subs r1, r6, 0x1 - adds r0, r5, 0 - mov r2, sp - bl sub_805A91C - movs r1, 0xFF - lsls r1, 2 - adds r2, r4, 0x4 - mov r0, sp - bl sub_805AFE8 -_0805AFD4: - adds r0, r5, 0 - adds r1, r6, 0 - mov r2, sp - bl sub_805A91C - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_805AF94 - - thumb_func_start sub_805AFE8 -sub_805AFE8: @ 805AFE8 - push {r4-r6,lr} - adds r6, r0, 0 - lsls r1, 16 - lsrs r5, r1, 16 - movs r4, 0 - adds r1, r6, 0 -_0805AFF4: - ldrb r0, [r2] - lsls r0, 28 - lsrs r3, r0, 16 - adds r2, 0x1 - adds r0, r5, r4 - orrs r3, r0 - strh r3, [r1] - adds r1, 0x2 - adds r4, 0x1 - cmp r4, 0x3 - ble _0805AFF4 - cmp r4, 0x7 - bgt _0805B022 - lsls r0, r4, 1 - adds r1, r0, r6 -_0805B012: - ldrb r0, [r2] - lsls r3, r0, 12 - adds r2, 0x1 - strh r3, [r1] - adds r1, 0x2 - adds r4, 0x1 - cmp r4, 0x7 - ble _0805B012 -_0805B022: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_805AFE8 - - thumb_func_start sub_805B028 -sub_805B028: @ 805B028 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r2, r4, 2 - adds r2, r4 - lsls r2, 3 - ldr r0, _0805B05C @ =gTasks+0x8 - adds r2, r0 - ldrh r1, [r2] - lsls r1, 16 - ldrh r0, [r2, 0x2] - orrs r1, r0 - ldrh r0, [r2, 0x4] - lsls r0, 16 - ldrh r3, [r2, 0x6] - orrs r0, r3 - bl sub_805B060 - cmp r0, 0 - bne _0805B056 - adds r0, r4, 0 - bl DestroyTask -_0805B056: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805B05C: .4byte gTasks+0x8 - thumb_func_end sub_805B028 - thumb_func_start sub_805B060 sub_805B060: @ 805B060 push {r4-r6,lr} diff --git a/baserom.ips b/baserom.ips index c7c4f9714efde94fbf9491844cff3f48712c5072..7c99bf40b99f70e9ff8d76162b54a0b95c0aa7f0 100644 GIT binary patch delta 36 ncmdnCQexL^u?;1ES+=Jzv9y=8Faj|X5HkZY%l48MR;LL7AlnYL delta 16506 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 literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353088_2.png b/graphics/door_anims/frame_8353088_2.png new file mode 100644 index 0000000000000000000000000000000000000000..981aaa7fd02e69cab353519f1709f5ad286795dd GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx&YmugAsjPfPaPCIpuoWzxXV0* zA*wM?d7Eg-g9(2wON&(|T|4{qP~8Qu+S}s0j5L4Rd|-O(&=|RZ_1Hn32Swg{vq?p*JAyp{j_K?Zob`njxgN@xNAACMl2 literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353228_1.png b/graphics/door_anims/frame_8353228_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2f7b80495da6a698be70d75ff225d776265e4b8c GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx2A(dCAsjQ4Uo{JdUx0Vhd{=8 My85}Sb4q9e0QSuzS^xk5 literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353228_3.png b/graphics/door_anims/frame_8353228_3.png new file mode 100644 index 0000000000000000000000000000000000000000..97a87ea4c5c841a7150a5fd2448f1493c44a0509 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExdY&$hAsjQ4Uo{xW8XqqL+Xirx^mvv4FO#py$B`g2{ literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_83533C8_3.png b/graphics/door_anims/frame_83533C8_3.png new file mode 100644 index 0000000000000000000000000000000000000000..97a87ea4c5c841a7150a5fd2448f1493c44a0509 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExdY&$hAsjQ4UoelF{r5}E*v%r;j5 literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353568_2.png b/graphics/door_anims/frame_8353568_2.png new file mode 100644 index 0000000000000000000000000000000000000000..93b6e18f597bb00343c9491a25c5ef3aae06180e GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExo}Mm_AsjP9Pi+)DpuofIu-@V1 zj*`Nc=L{GxirwUq&Uv@!mA{a!*h|-!4*wEXvj5c<|9xgXi-5!hmRZe=XIN$>TBI>~ cRd4JPi0Dyr4Vss0b{S;2r>mdKI;Vst0GbObq5uE@ literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353568_3.png b/graphics/door_anims/frame_8353568_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a4edcdc0b6d6a793a211d56c8cae165fe6a151b4 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExx}GkMAsjQ4Uo{vq?p*JAyp{j_K?Zob`njxgN@xNAACMl2 literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353708_1.png b/graphics/door_anims/frame_8353708_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e56c2f31e20468c1e18b8d1321b64ba892a9e785 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx;hrvzAsjP(PjBQspuppDG5hic zS>+UQby40)3r{f2Q{7zAHpkF)UDdB?ikGU^_CM-hJdg9skp_PCb=!C5Php)mA;Tdu rz<@O`k;`ZCqtiV~%UVSQEn45!PL6T*6k301KFBIhS3j3^P6PzU ZH!|A&cgZ*u&u0WO+0)g}Wt~$(69D6JDUARC literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353708_3.png b/graphics/door_anims/frame_8353708_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a4edcdc0b6d6a793a211d56c8cae165fe6a151b4 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExx}GkMAsjQ4Uo{vq?p*JAyp{j_K?Zob`njxgN@xNAACMl2 literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_83538A8_1.png b/graphics/door_anims/frame_83538A8_1.png new file mode 100644 index 0000000000000000000000000000000000000000..117acac1d289e88c641382bf065cdcef8d4784a8 GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExUY;(FAsjPf&ukPtpuofIz(2j| z*efGp=gTBqo9pp=VE7pO!sv4b6Mw<&;$S~k1nhL literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_83538A8_2.png b/graphics/door_anims/frame_83538A8_2.png new file mode 100644 index 0000000000000000000000000000000000000000..58aa0d45696af276ce79a386e2f88ac30a0021bc GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExPM$7~AsjQ4E7)1&WM%7ken|Q& zU6ABhDIL)E-j?I>$-BGt5AfXIUH-mN!hvytz=Vg~Nq0UcGjQM8`}+6;?&LeIOboIw VV|b@{wYY;!^>p=fS?83{1OWW+Cu#ry literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_83538A8_3.png b/graphics/door_anims/frame_83538A8_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f2c98f55c09aa33990ad89e24ceebaeaed6040 GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx#-1*YAsjQ4E7%$9cvOsIVqy;T zsF%OL$7)=&kY@tJjECH*4Xh44@fyrZ3@JYjNt7>SUmdKI;Vst E06%mbZvX%Q literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353A48_1.png b/graphics/door_anims/frame_8353A48_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea623f10099656274489d8c401411888f261cce GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExk)AG&AsjPJPj3`#FyLrSEK};W z^=0#T$nZ`m*U<6|$C*a~P95uiy?fpewR7rUu^AfneFv^F^FMoL5x;EDgpNlojBY-{ tP19t;w?2```lKH^IdO&efo5Na>vok>9TFFv`SBNInWw9t%Q~loCIA@IHUaDr6PHxbKWg_bzf1g>;A|P>rWmYre8J1az7HLdg c)f>A6BGk&=)eOVdae@r@boFyt=akR{09Yd^)c^nh literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353A48_3.png b/graphics/door_anims/frame_8353A48_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a4edcdc0b6d6a793a211d56c8cae165fe6a151b4 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExx}GkMAsjQ4Uo{vq?p*JAyp{j_K?Zob`njxgN@xNAACMl2 literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353BE8_1.png b/graphics/door_anims/frame_8353BE8_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3b8a603969e1590a35797ea6dd4102f8e2c7797b GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx!JaOTAsjPp&m81EV8Frb@b9MZ zE=I{l!%tZ%{S4YEE2d4lvVO9zLIT(8r&9v-Hr&kH!LV`GwY#e$KhHlmHN)Q5RwiJo n3wMo#V53X-lwh&^IZ4kMXKe8?uw8g!A;=m}S3j3^P6 Vu-}>nsXPymv7WAeF6*2UngEbTC_exI literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353BE8_3.png b/graphics/door_anims/frame_8353BE8_3.png new file mode 100644 index 0000000000000000000000000000000000000000..de5e8c3561e6e722df755585f67d26398253bc35 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExdY&$hAsjQ4BUl+@cz#IoI54CY zyuY_s`bfkE>A44c&oP`{V6fw&q=2MCvbhKY1ADTkq3`u_UXTf%u6{1-oD!M<GS}19&t;ucLK6UFTqY#| literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353D88_2.png b/graphics/door_anims/frame_8353D88_2.png new file mode 100644 index 0000000000000000000000000000000000000000..405f027b09f0cf80d8cff97a53f9c30828ba7cad GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExo}Mm_AsjQ44Ys{uXgYa}r=TrU zrNhv421D|*Gcz6B?wsz6Tpf0{noEe$=z!AP)eDpq*aD8+5IVvTeUUY>q~XfCS1%GG cSXm3$7z|ULxM%0Dn*lQ1)78&qol`;+0E+l3J^%m! literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353D88_3.png b/graphics/door_anims/frame_8353D88_3.png new file mode 100644 index 0000000000000000000000000000000000000000..052c556069fa55aa4d0ff7ea565206380edcb427 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExYMw5RAsjQ4UoQn rD;JA|l~wpcNOq4hG2?UongR__TcQ{9!YM)hK= sX`%D=!w)Yw%=YGZqGoke@p|oZW|nD|7gpx+hk)$zboFyt=akR{01HtuBme*a literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8353F28_2.png b/graphics/door_anims/frame_8353F28_2.png new file mode 100644 index 0000000000000000000000000000000000000000..2337f80df9ed786f115490c999b1b3630972d306 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExKAtX)AsjPf&u$bvpuofIu%4mE zr#bqPfIowj^5mmsK3pMxJzG~~vPh)7*lDq2I`j9>%9a(e@rOA$+_)A%qDmnw-|=8DYF;a@&~;BFuMW9} o`u7}g>gP~#TcQzJv(V)!>({Hko)Ndb>p}K-y85}Sb4q9e0J%#r%K!iX literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_83540C8_2.png b/graphics/door_anims/frame_83540C8_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b23db61c5cf58878a1696bc493d1204baa4588f0 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExE}kxqAsjPfPZ4Pa zWfq%lW8Uk7O?)CJ*WcT4LU?nYp7^)suvfSDU6|^5@_D0p20PaoCS3!*G{))Ck5rz- X38sf6eQ>>e17xnJtDnm{r-UW|`$j6u literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_83540C8_3.png b/graphics/door_anims/frame_83540C8_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8870077b3ac4821263613ca366b039466e418d3b GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExdY&$hAsjQ4XK*rVOMWm8V`QAM zvFiJ~y9&qF+HUV%*TboFyt=akR{06SbB AZvX%Q literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8354268_1.png b/graphics/door_anims/frame_8354268_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5a09abac07ef0c2552a4e30b14107eeb4be85a1f GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExfu1goAsjP9PaPC(P~c&{pcna? zMYgdgp^z!1<=mlwZA|RNzw|k0b{cF6bgFdjm(N+)w>l@mU*q$c1MR}+kK`tJmYA!o ks@Aw*dsU;`Lpi>Zk+;V&(B|U$T_8(5UHx3vIVCg!0ItL>ZvX%Q literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8354268_2.png b/graphics/door_anims/frame_8354268_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e46d8b0afe4a42832fd389ce2073bc2430587ef1 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExo}Mm_AsjPfPafnwpuppNQ76*S z^C-szPN^9TdpNQMCs+o|pZ7=g_dfMmIV}aw{HK06T2F3Tv0=JHQ~-mnkVoIH3w#Ni cy5pJhm?U4iAE}Vtz7k}(r>mdKI;Vst04T00rvLx| literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8354268_3.png b/graphics/door_anims/frame_8354268_3.png new file mode 100644 index 0000000000000000000000000000000000000000..97a87ea4c5c841a7150a5fd2448f1493c44a0509 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExdY&$hAsjQ4Uo`3U l%x8pi7uGL08T?GO=dRHT&+CDkYTQ7Uc)I$ztaD0e0suKuFUCkh!R66A+mr(;u_d7qu2cBKCO&n@m)`Wzopr0J8umrT_o{ literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_83545A8_1.png b/graphics/door_anims/frame_83545A8_1.png new file mode 100644 index 0000000000000000000000000000000000000000..46de34aafb9fe1c8da4e8e47e478f32212e3a192 GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExj-D=#AsjQ4GlDL?c)=jVGovRh zxx0@~!BJ$fsmY?n%pMJ{R*6cR9h4mI?BqJ~;>C*@Te&<8O4czoi}I{qz;KR%VMCNf Th?1^_2FOrPS3j3^P64^Kskk z>hAvh%t^6?V{1asuIM=zs?l?eW5JnK*ElAe&{@F|z^1~K-e9sm>gvUV43C%(agTe~DWM4fU(+bb literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_83545A8_3.png b/graphics/door_anims/frame_83545A8_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f2de21913f27ebbfd9b20229f9bc2b94ca421f32 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx2A(dCAsjQ4UoHJo6OT)lwd90LPqq3=A8i&Gzf%< zsn*27pRoDV$Ej*>I$zVw0u8{tyPL|K{k52`njxgN@xNAyU{sj literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8354748_2.png b/graphics/door_anims/frame_8354748_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f6b3644b847ae8e0b38b58a89201cb7312c6c4f5 GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx9-c0aAsjPvPjBR9P~>sGIK?F8 zUC5c@1{|zYmkv bPL_b$@0-Hbmlv*G0W#au)z4*}Q$iB}PSq** literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8354748_3.png b/graphics/door_anims/frame_8354748_3.png new file mode 100644 index 0000000000000000000000000000000000000000..eec2567a1125ac48f15b5bf7ecbee3caa554bb15 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExdY&$hAsjQ4E7%!pcz#IoI54Dr zxVN`j{76NC_}qit=NL{eFsQgFDIlrvSWkq3VG(=mPv&E*IzT3Py85}Sb4q9e01M9@ Ae*gdg literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_83548E8_1.png b/graphics/door_anims/frame_83548E8_1.png new file mode 100644 index 0000000000000000000000000000000000000000..22566a901439ed2f54fbde8e02ab2005a477586e GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExv7RoDAsjPv&mQD$P~c&`u>U`s z>A~F+5)O;18&;MZma#<}%zLx2vi*N_h`dWz|Br)vy54jvNd_Icx=~YS@sC65tP3uz xC~yc1DLONAi=AX!+037{7ZsJx>?$ap{g`o)N>Wrw@xelng`Tc{F6*2UngCa_I9&h$ literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_83548E8_2.png b/graphics/door_anims/frame_83548E8_2.png new file mode 100644 index 0000000000000000000000000000000000000000..35f772671450d91818bbef76c6f3fec0fb5275dc GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExUY;(FAsjQ4E4F@<6}S_1yy0ZU zUhyM4_VPbUb~gqmfoJ$aGIvKbLh*2~7Y*vMnh9 literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_83548E8_3.png b/graphics/door_anims/frame_83548E8_3.png new file mode 100644 index 0000000000000000000000000000000000000000..226fe6bb044f6298cfeca8e75b8cf7bb1ed172c0 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExik>cxAsjQ4E7)0iM2saI8u&Xu mKG5U1AsjQ4Uore1 uj)^hlm`(|s3)@UX?zxOp9h25Lr86)XJ@l(k6+RjT((LK#=d#Wzp$Pyg!WicO literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8354C28_1.png b/graphics/door_anims/frame_8354C28_1.png new file mode 100644 index 0000000000000000000000000000000000000000..cd6285a64389e94d3d66892c1b2a4b8375ea6e5e GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wDNj!q#}J9B$rbFZJVzLIBqeJk z?BHhQ*%+=UaIiu9-HR7{zkhRcXBTs;tbDt7`}NbOUmiU0tY=^O`#1*4_xJYht^O`| eVP(Pl0}>2tyk?r*;QVzGWVolRpUXO@geCyezc4lc literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8354C28_2.png b/graphics/door_anims/frame_8354C28_2.png new file mode 100644 index 0000000000000000000000000000000000000000..11a1c36e00d3e0981fbc498a720523b93fb4a83e GIT binary patch literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wDK}3S#}J9B$rbFZJVzLIBqeJk z?BHhQ*%+=UaIiu9T?O}|cclr5Q=BE9Zb{g)xB9!B(PHL9FC3EgFdN=0HE75X;C?78 Z!OS4Vw^2q+baDj9WKUN=mvv4FO#t_?B%A;M literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8354C28_3.png b/graphics/door_anims/frame_8354C28_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c0d626d068c3648bca97daf5ccd472fb5489052a GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wDSb~D#}J9B$rbFZJVzLIBqeJk z?BHhQ*%+=UaIisJPU2Yfio*guyI=HdmjIGH3?hyPuAW?T8)O!Pr>mdKI;Vst0Lb{fxIrQvyDB#!l%5$jV(>q-s74c&`xKnMKjTF2Z cdUgjeFm(Uj_@wx9fF;OqPgg&ebxsLQ02IR}&;S4c literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8355268_1.png b/graphics/door_anims/frame_8355268_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d752d94ef640b08e3b60e8b8e49b81693ada6f71 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wsQ^zG#}J9B$rjA4Ji8Y%$Sd=5 zNt{~9aIj%@qjbeLJ{Bd3_X`>t8ymmhyUoqR!_l^2!JEC?#aUTj9(33=_x;`7><+K) l?%rPh{vNZ{8$FQ&k_@&Bd;UB#OPmCtAL@4OI^K}L;Uv)%l49fSecCy7&)(|qauW_RBr@dI kvnTCozL0P&R-?g~L8ohr&$QKNO+j{ey85}Sb4q9e0EvMrq5uE@ literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8355268_3.png b/graphics/door_anims/frame_8355268_3.png new file mode 100644 index 0000000000000000000000000000000000000000..19a595cd0d340cab81c835fb4ceeb93265785579 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wDJxGG#}J9B$rjA4Ji8Y%$Sd=5 zNt{~9aIj%@qjbeLJ{Bd3_X`^IdeQ@yD@kOQA7nUKF|GUDj%x8|^|AhiGh literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8355588_1.png b/graphics/door_anims/frame_8355588_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b8ee1eb421ab9c2ea5cb2afd95bc1502e77801d3 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wsR~aQ#}J9By=ONHHXHD?CiXU% zcerMm&ok5Bz*O$Dpv~@NY)0`l9*&ocysY(K=jz=4;#9)UylaNWqHiDfsrM;gJ)`+_ z)5DVv@jn@_FfeaEX_(qIxA5hOkN*o7=x|Az$l;iz1_MJN W-}&kLs-l`frh2;ixvX#Xb6Mw<&;$UoLme6b literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359788_3.png b/graphics/door_anims/frame_8359788_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f103be5a1386113ba2200facc1fa4ce28d6a97c2 GIT binary patch literal 88 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c0wfp&-k$XWQu3ZIjv*W~lPlO+dGg;k9kgX( k)?-x?nJV&Cfk!llhaovhk8xH^Zw5$mdKI;Vst0O0ErSpWb4 literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359788_4.png b/graphics/door_anims/frame_8359788_4.png new file mode 100644 index 0000000000000000000000000000000000000000..36f6cf135efeeb0618ffa5b361593f8a42f3c85d GIT binary patch literal 80 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c0wfp&-k$XWQsSO2jv*W~lPlO+dGg;k9kgX( c)^lZHX3+U+HQDxeqCH5dr>mdKI;Vst09pPK@&Et; literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359988_1.png b/graphics/door_anims/frame_8359988_1.png new file mode 100644 index 0000000000000000000000000000000000000000..75a43b9fbc9c0c0e7dadb34307b0c39547861206 GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c0wfp&-k$XWQu>}Qjv*W~lPgXvU}52^;o+B@ zvNk-|E%m@s5eW&2hMw&P$4;{cth~-I!ph1j`hy{km;dL@OVbm-vG`-7phe_CI*Fs2(=ioG$=8=SSH2!xcAT*kWrql KelF{r5}E+{R3zpA literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359988_3.png b/graphics/door_anims/frame_8359988_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d7abc49baaace058a2b29dc170f2422790c3d012 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c0wfp&-k$XWQo5cljv*W~lPlO+_@|0|m1y|# zx|UzDr+oLqp6&1D93{#{L=$;B9&Jxwpd`S?@Rv>Pk$}VrVUPiyu6{1-oD!M<)PEc* literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359988_4.png b/graphics/door_anims/frame_8359988_4.png new file mode 100644 index 0000000000000000000000000000000000000000..1af99db238499b12ffbba4799f0be74abf82ac91 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c0wfp&-k$XWQi`4~jv*W~lPlO+c~10fFMoe; nFMHY?%VM@OJDSfioK!Gmkltp|Vo{V?1=8f{>gTe~DWM4fpd}cm literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359B88_1.png b/graphics/door_anims/frame_8359B88_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a5208db18dec0cea5330f67af2b3e36ab139c709 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c0wfp&-k$XWQU;zbjv*W~lPmr@aB_(JkchJn zNJvOvFuHe8f?sk$5Wl1dD=X_n$@dEy9=?q=*ul=Q>AYm^+joIwATvB&{an^LB{Ts5 D>|h-y literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359B88_2.png b/graphics/door_anims/frame_8359B88_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e3ecef0fe4fc9cb4f5dd6b3f82d27de7a2ff5614 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c0wfp&-k$XWQYM}*jv*W~O^bP0 Hl+XkKtk)m@ literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359B88_3.png b/graphics/door_anims/frame_8359B88_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d4be7a81fb7d3359e985f49a8f7d5d57f97bca4e GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c0wfp&-k$XWQYM}*jv*W~lPkWzJ2$i3tE-Af z;n>V}g=4pk)6dOmHaus;V)U*-;(0=kaTQO3gTe~ HDWM4fPTwKH literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359B88_4.png b/graphics/door_anims/frame_8359B88_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4ba80f9981c898e52abb42b85afcb34ed957cb2b GIT binary patch literal 89 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c0wfp&-k$XWQVO0fjv*W~lPkWzJ142I<9I{D m9^2+~JDSfmoM4blU%b`^-NROwhpUXO@geCyQxfw

literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359CA8_2.png b/graphics/door_anims/frame_8359CA8_2.png new file mode 100644 index 0000000000000000000000000000000000000000..800bb92c455f53af0817feaee1c1eec7a787cd76 GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wsUS}m#}J9B$v1dec~&oAkUuQJ zC7`4iaDc)5Igg0JoW0DA9LKCR5)vx77rir7kZ2NUQxKIrf9cYv0LlFK_x7@<7&u5c m+`iu^@m|4XMyWX010III_8WMNXB6v$Z1HsUb6Mw<&;$T!K`7Dy literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359CA8_3.png b/graphics/door_anims/frame_8359CA8_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e2f16ef25236bebf94276de57fa952bd7881117e GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wDH~50#}J9B$v1dec~&oAkUuQJ zC7`4iaDc)5Igg0JoW0DA9LKCR7H~g~l#);|y!5V#vFW3Z_}s$pdQ!{`!kdq)w`FF4 PjAQV0^>bP0l+XkK`LrI% literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359FC8_1.png b/graphics/door_anims/frame_8359FC8_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9428b111a72f7c1d3acd4d19289f2a249dd79119 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx-kvUwAsjP9&u-*pP~>4g@W#Gt zf4_i#Z%|6>{in&ytn2*zRHO|yUE=)^8QIany*|I@9^aoit1cD0E|4sG_{RQ( z=n{WH8^?2B&oVnYdfZt*FDKKOL66fo`hxtga>x6-rm)H!X_{1Hro{Mci=f`mGcggo X)f-~=-$-CM1~S*v)z4*}Q$iB}eH$pV literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_8359FC8_3.png b/graphics/door_anims/frame_8359FC8_3.png new file mode 100644 index 0000000000000000000000000000000000000000..467c04f7f7be4732e988ce2538163346fc563b07 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExdY&$hAsjQ4BUl-COMEacV`iMO z@%fpV#tO$?8NcYUeZjMVhbx)iidl&{Wlkd#Lq|dEyx0G`%0VW0y85}Sb4q9e02cop A@c;k- literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A168_1.png b/graphics/door_anims/frame_835A168_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f23474512d40b8c8e1d1ae68b2d913712920a167 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx4xTQKAsjQ4GlDL?c)=jVQz3Eo zn3$}rLz9Wy`I*A9a~+x%et*~77wN!s4v*}6e z?&~`@^Q>6Hu{EI?J?BDS^h74Oo#zx-{G7%4J@0}utL{m2uz7r56)G#sqhKenCLw~A YmBH<`^AaIj`)H8Kp00i_>zopr0Qt3(~#o@Q}I&p#iY*Cik$JYD@<);T3K0RTGo B9Wwv` literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A308_1.png b/graphics/door_anims/frame_835A308_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c11c06156efbcc2a519d33772a18368d9077bf26 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx?w&4=AsjQ4GcLVgXj0>CQ&Uyo z_DD!Hk&Z4YVc=XOv38-LtgHjmnHMaEQ86}FX^fl`Jf3S!;J9!sa&-fX^K&hOh=Uur axES_bHrsP&+xb->qdi^yT-G@yGywqbKqc@1 literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A308_2.png b/graphics/door_anims/frame_835A308_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3d825f587d522452249e57e921aa9a653b4d1ff8 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExo}Mm_AsjQ4GcLVgXj0>4v*}6e z?&~`@^Q>6Hu{EI?J?BC-daiLSIJ4>+2g~B4%o>|l0STrg23Ln!;cH*LNMQKbn812i bOM`*o`YDGUMFuI#Aj3Uf{an^LB{Ts5sn06j literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A308_3.png b/graphics/door_anims/frame_835A308_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e87798cd2de056662d621ee3cdd308fa54fc181b GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx`kpS1AsjQ4Uot3(~#o@Q}I&p#iY*Cik$JYD@<);T3K0RTGo B9Wwv` literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A4A8_1.png b/graphics/door_anims/frame_835A4A8_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9428b111a72f7c1d3acd4d19289f2a249dd79119 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx-kvUwAsjP9&u-*pP~>4g@W#Gt zf4_i#Z%|6>{in&ytn2*zRHO|yUE=)^8QIany*|I@9^aoit1cD0E|4sG_{RQ( z=n{WH8^?2B&oVnYdfZt*FDKKOL66fo`hxtga>x6-rm)H!X_{1Hro{Mci=f`mGcggo X)f-~=-$-CM1~S*v)z4*}Q$iB}eH$pV literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A4A8_3.png b/graphics/door_anims/frame_835A4A8_3.png new file mode 100644 index 0000000000000000000000000000000000000000..467c04f7f7be4732e988ce2538163346fc563b07 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExdY&$hAsjQ4BUl-COMEacV`iMO z@%fpV#tO$?8NcYUeZjMVhbx)iidl&{Wlkd#Lq|dEyx0G`%0VW0y85}Sb4q9e02cop A@c;k- literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A648_1.png b/graphics/door_anims/frame_835A648_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7cac61ead5b42f8893b9a96652175a902330c7af GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx;hrvzAsjPJ&ukPupuoWr5O#t0 zNY|z3lcrw^IU+bi)!Fqz%-8#}{7i09flTiXwVD^bmbPV`cd7hy-=D?vJb%b=dpn4) rN^Vk>^K*V+WNfi)=afAWftx1t-#u!<-l%!zHOMMYS3j3^P6i literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A648_2.png b/graphics/door_anims/frame_835A648_2.png new file mode 100644 index 0000000000000000000000000000000000000000..618b958b96bbda6d81f8ab74fdf6a59df9affd97 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExo}Mm_AsjPfPj2KrV8G!L7}n7H zSZmA54eAQ!Zff0}Zqq)kUT$rb&b~QtLFb=?o&P)(#rLj{5#dfgY_HJ}_Thko536}s cdRog>?zU$RE*H3#9|ali>FVdQ&MBb@0ExaUg8%>k literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A648_3.png b/graphics/door_anims/frame_835A648_3.png new file mode 100644 index 0000000000000000000000000000000000000000..28942389b3fa3c0ec08dbed2f586ab7c92d51a1f GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExdY&$hAsjQ4UoS^|rUMXi#>teAD056x&j*KmSCa`gfRhJ~#@aqdpKNgxwEUHx3vIVCg!043!e AQ2+n{ literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A7E8_1.png b/graphics/door_anims/frame_835A7E8_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2b51bba5fc5f502c0c7445e043ad68d4ad8d356d GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx!JaOTAsjQ4BZ{A0SrzKgl=${; z^y)B1&Nf%CCBsu%QJO?T)CT^;t;l37LK h+8oB_V4m~^3=D2JePe%q`(6gJ#?#f$Wt~$(695RQE!hA7 literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A7E8_2.png b/graphics/door_anims/frame_835A7E8_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b29303c1bc69e35996b90665dab1b245f88935ce GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExfu1goAsjPf&m81EV8Frb@GQ~f z*rSQ;jhwSM1%wTJ6}v>X*3C`1xj;{}bVE)AQ*yH)n<-oFndb>d`Hl5vRPE!s(cWsc kWzDl@Irol+V|~tZ_Be}$)!voRxCpYu)78&qol`;+0Bn6M@Bjb+ literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A7E8_3.png b/graphics/door_anims/frame_835A7E8_3.png new file mode 100644 index 0000000000000000000000000000000000000000..55e1b2db9aee2f9e0cb27207836736ea98f2c667 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExMxHK?AsjQ4BUo8^en_q^e}8W; z_mLaL&(6#YKGAbE{eoom1<3?Skz;Zi$!8@s9`lGWFckfdT^-S)GYe#jr>mdKI;Vst E02g^7qyPW_ literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A988_1.png b/graphics/door_anims/frame_835A988_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9428b111a72f7c1d3acd4d19289f2a249dd79119 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fEx-kvUwAsjP9&u-*pP~>4g@W#Gt zf4_i#Z%|6>{in&ytn2*zRHO|yUE=)^8QIany*|I@9^aoit1cD0E|4sG_{RQ( z=n{WH8^?2B&oVnYdfZt*FDKKOL66fo`hxtga>x6-rm)H!X_{1Hro{Mci=f`mGcggo X)f-~=-$-CM1~S*v)z4*}Q$iB}eH$pV literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835A988_3.png b/graphics/door_anims/frame_835A988_3.png new file mode 100644 index 0000000000000000000000000000000000000000..467c04f7f7be4732e988ce2538163346fc563b07 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx+BpCi@`0fExdY&$hAsjQ4BUl-COMEacV`iMO z@%fpV#tO$?8NcYUeZjMVhbx)iidl&{Wlkd#Lq|dEyx0G`%0VW0y85}Sb4q9e02cop A@c;k- literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835AB28_1.png b/graphics/door_anims/frame_835AB28_1.png new file mode 100644 index 0000000000000000000000000000000000000000..73f90730c1aceb7b61958ff5625cb59300ee2c1a GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wsb!unjv*3LL(kZ99dZz8d$=-) z?Q%rdGo5Q?+om<%N#Qsc#1W_PX5N8Vet{3lxmW>1!k{?9s8L3`*Z`I79`AOy%1WNo8M#DAbaJ=#+QqqYb`2p z+2C;c%}3u!Yj^)VRc*ko-Cc7eb@u{MR<{T`YyhiGO(vO5T#ijnCr6yfM zKK#D7qSCT?B}27CHGCZyuP_u=v+2pQFVGY`xR7B%_9?SF9UKB|JFiCFyEyfe;7yjg zBgr%UKm2iy+IjwPjLqkV(lbBs-^qE$u2XeF;I7$5-Mi%*Yoqouh%&62WIiXj1ms*# LS3j3^P6gTe~DWM4f0r*U< literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835AE48_1.png b/graphics/door_anims/frame_835AE48_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9956306e907ce3f6ea0c1198f0f792092e6d7d GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wsSr;W#}J9B$rjA4Ji8Y%$S-E* zl1Ou6Jj~PKpzg$b=fLK21%ZPV?5sRIJbS+1i%UpwFkoR#eZP0FhK2_}+oZQO@9)_% o1iinvcW?D~xeJNq3mMKaFl_qMzcufe*fo$np00i_>zopr0M`;MkN^Mx literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835AE48_2.png b/graphics/door_anims/frame_835AE48_2.png new file mode 100644 index 0000000000000000000000000000000000000000..62b93f79e2adb3355070f96333fe74b3bfc6021d GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wsSr;W#}J9B$rjA4Ji8Y%$S-E* zl1Ou6Jj~PKpzg$b=fLK21%ZPV?5sRI`Hoj?*;t$f4hbw#dK?)QC8zcH?cLqq8+h0_ om@|G`3p|!>VcY!9iE$1i!@{TASzAK`EkO2oy85}Sb4q9e06tqM(f|Me literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835AE48_3.png b/graphics/door_anims/frame_835AE48_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a980732357d7674dd66648d4a9c38461d90d091c GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wDLYRW#}J9B$rjA4Ji8Y%$S-E* zl1Ou6Jj~PKpzg$b=fLK21%ZPV?5rh;Hr~w4DsH!84IB*SJzZq{?w)Hh1H%rla|$y5 Rq|!kqdb;|#taD0e0ssmjA65VW literal 0 HcmV?d00001 diff --git a/graphics/door_anims/frame_835B168_1.png b/graphics/door_anims/frame_835B168_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7c75282d6cf5473a15c3de8d2b7b0a10cb80fdb8 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<50wfrI3wa3wsQ^zG#}J9B$r|lUY(8z=A_;WI%R{H`a(%<#r{-*N-xVsDUX Mp00i_>zopr0Nl_YMF0Q* literal 0 HcmV?d00001 diff --git a/include/field_camera.h b/include/field_camera.h index d2165780a..2ba583a52 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -30,5 +30,6 @@ void sub_805A658(s16 *x, s16 *y); void SetCameraPanningCallback(void (*cb)(void)); void SetCameraPanning(s16 x, s16 y); void InstallCameraPanAheadCallback(void); +void sub_805A91C(int x, int y, const u16 *data); #endif //GUARD_FIELD_CAMERA_H diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index df03001bf..d567ab77c 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -151,6 +151,5 @@ bool8 MetatileBehavior_IsImpressiveMachine(u8 metatileBehavior); bool8 MetatileBehavior_IsVideoGame(u8 metatileBehavior); bool8 MetatileBehavior_IsBurglary(u8 metatileBehavior); bool8 MetatileBehavior_IsMBA3(u8 metatileBehavior); -extern u8 gUnknown_8353068[]; #endif // GUARD_METATILE_BEHAVIOR diff --git a/ld_script.txt b/ld_script.txt index 856155aa8..fe60a90e3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -93,6 +93,7 @@ SECTIONS { src/fieldmap.o(.text); src/metatile_behavior.o(.text); asm/field_camera.o(.text); + src/field_door.o(.text); asm/field_door.o(.text); asm/field_player_avatar.o(.text); asm/field_map_obj.o(.text); @@ -408,7 +409,7 @@ SECTIONS { data/maps.o(.rodata); src/fieldmap.o(.rodata); src/metatile_behavior.o(.rodata); - data/metatile_behavior.o(.rodata); + src/field_door.o(.rodata); data/field_door.o(.rodata); data/field_player_avatar.o(.rodata); data/field_map_obj.o(.rodata); diff --git a/src/field_door.c b/src/field_door.c new file mode 100644 index 000000000..116cdddee --- /dev/null +++ b/src/field_door.c @@ -0,0 +1,102 @@ +#include "global.h" +#include "field_camera.h" +#include "task.h" + +struct DoorAnimFrame +{ + u8 unk_0; + u16 unk_2; +}; + +struct DoorGraphics +{ + u16 unk_0; + u8 unk_2; + u8 unk_3; + const u8 * unk_4; + const u8 * unk_8; +}; + +void sub_805AF54(const struct DoorGraphics * a0, int a1, int a2); +void sub_805AF80(const u8 *a0); +void sub_805AF94(const struct DoorGraphics * a0, int a1, int a2, const u8 *a3); +void sub_805AFE8(u16 *a0, u16 a1, const u8 *a2); +bool32 sub_805B060(const struct DoorGraphics * gfx, const struct DoorAnimFrame * frames, u16 *data); + +extern const struct DoorAnimFrame gUnknown_835B488[]; +extern const struct DoorAnimFrame gUnknown_835B49C[]; +extern const struct DoorAnimFrame gUnknown_835B4B0[]; +extern const struct DoorAnimFrame gUnknown_835B4C4[]; +extern const struct DoorGraphics gUnknown_835B5D8[]; + +void sub_805AF14(const struct DoorGraphics * a0, const struct DoorAnimFrame * a1, int a2, int a3) +{ + if (a1->unk_2 == 0xFFFF) + { + sub_805AF54(a0, a2, a3); + } + else + { + sub_805AF80(&a0->unk_4[a1->unk_2]); + sub_805AF94(a0, a2, a3, a0->unk_8); + } +} + +void sub_805AF54(const struct DoorGraphics * a0, int a1, int a2) +{ + if (a0->unk_3 == 0) + { + CurrentMapDrawMetatileAt(a1, a2); + } + else + { + CurrentMapDrawMetatileAt(a1, a2); + CurrentMapDrawMetatileAt(a1, a2 - 1); + } +} + +void sub_805AF80(const u8 *a0) +{ + CpuFastCopy(a0, (void *)(BG_VRAM + 0x7F00), 0x100); +} + +void sub_805AF94(const struct DoorGraphics * a0, int a1, int a2, const u8 *a3) +{ + u16 sp00[8]; + if (a0->unk_3 == 0) + { + sub_805AFE8(sp00, 0x3F8, a3); + } + else + { + sub_805AFE8(sp00, 0x3F8, a3); + sub_805A91C(a1, a2 - 1, sp00); + sub_805AFE8(sp00, 0x3FC, a3 + 4); + } + sub_805A91C(a1, a2, sp00); +} + +void sub_805AFE8(u16 *a0, u16 a1, const u8 *a2) +{ + int i; + u16 tile; + for (i = 0; i < 4; i++) + { + tile = *(a2++) << 12; + a0[i] = tile | (a1 + i); + } + for (; i < 8; i++) + { + tile = *(a2++) << 12; + a0[i] = tile; + } +} + +void sub_805B028(u8 taskId) +{ + u16 *data = (void *)gTasks[taskId].data; + const struct DoorAnimFrame * frames = (const void *)((data[0] << 16) | data[1]); + const struct DoorGraphics * gfx = (const void *)((data[2] << 16) | data[3]); + if (!sub_805B060(gfx, frames, data)) + DestroyTask(taskId); +} diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index bca99d38f..8e07c1c97 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -16,6 +16,41 @@ static const bool8 sTileSurfable[METATILE_COUNT] = { [MB_SOUTHWARD_CURRENT] = TRUE }; +static const u8 sTileBitAttributes[] = { + 0x00, + 0x01, + 0x02, + 0x04, + 0x08, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00 +}; + bool8 MetatileBehavior_UnusedReturnTrue(u8 metatileBehavior) { return TRUE; @@ -736,7 +771,7 @@ bool8 MetatileBehavior_UnusedReturnFalse_13(u8 metatileBehavior) { return FALSE; bool8 sub_805A2BC(u8 arg1, u8 arg2) { - if(gUnknown_8353068[arg1] & arg2) + if(sTileBitAttributes[arg1] & arg2) return TRUE; else return FALSE; From 4c61bead05968e0404ea074bed4da5edb2645b90 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 12 Nov 2019 13:53:47 -0500 Subject: [PATCH 23/33] Document field_door code --- asm/field_camera.s | 6 +- asm/field_door.s | 484 ----------------------------------------- data/field_door.s | 10 +- include/field_camera.h | 2 +- include/field_door.h | 10 +- ld_script.txt | 1 - src/field_door.c | 225 +++++++++++++++---- 7 files changed, 198 insertions(+), 540 deletions(-) delete mode 100644 asm/field_door.s diff --git a/asm/field_camera.s b/asm/field_camera.s index f6cbbd0ef..0016e6381 100644 --- a/asm/field_camera.s +++ b/asm/field_camera.s @@ -490,8 +490,8 @@ _0805A914: .4byte gUnknown_3000E90 _0805A918: .4byte gMapHeader thumb_func_end CurrentMapDrawMetatileAt - thumb_func_start sub_805A91C -sub_805A91C: @ 805A91C + thumb_func_start DrawDoorMetatileAt +DrawDoorMetatileAt: @ 805A91C push {r4,r5,lr} adds r3, r0, 0 adds r4, r1, 0 @@ -513,7 +513,7 @@ _0805A93E: bx r0 .align 2, 0 _0805A944: .4byte gUnknown_3000E90 - thumb_func_end sub_805A91C + thumb_func_end DrawDoorMetatileAt thumb_func_start sub_805A948 sub_805A948: @ 805A948 diff --git a/asm/field_door.s b/asm/field_door.s deleted file mode 100644 index b4541ffaf..000000000 --- a/asm/field_door.s +++ /dev/null @@ -1,484 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_805B060 -sub_805B060: @ 805B060 - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - adds r4, r2, 0 - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0805B086 - movs r2, 0x8 - ldrsh r1, [r4, r2] - lsls r1, 2 - adds r1, r5, r1 - movs r0, 0xC - ldrsh r2, [r4, r0] - movs r0, 0xE - ldrsh r3, [r4, r0] - adds r0, r6, 0 - bl sub_805AF14 -_0805B086: - movs r2, 0xA - ldrsh r1, [r4, r2] - movs r2, 0x8 - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r5 - ldrb r0, [r0] - cmp r1, r0 - bne _0805B0B4 - movs r0, 0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0 - bne _0805B0BA - movs r0, 0 - b _0805B0BC -_0805B0B4: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] -_0805B0BA: - movs r0, 0x1 -_0805B0BC: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_805B060 - - thumb_func_start door_find -door_find: @ 805B0C4 - push {lr} - adds r2, r0, 0 - lsls r1, 16 - lsrs r1, 16 - b _0805B0DA -_0805B0CE: - ldrh r0, [r2] - cmp r0, r1 - bne _0805B0D8 - adds r0, r2, 0 - b _0805B0E2 -_0805B0D8: - adds r2, 0xC -_0805B0DA: - ldr r0, [r2, 0x4] - cmp r0, 0 - bne _0805B0CE - movs r0, 0 -_0805B0E2: - pop {r1} - bx r1 - thumb_func_end door_find - - thumb_func_start task_overworld_door_add_if_inactive -task_overworld_door_add_if_inactive: @ 805B0E8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r5, r1, 0 - adds r7, r2, 0 - mov r8, r3 - ldr r4, _0805B134 @ =sub_805B028 - adds r0, r4, 0 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0805B13C - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r2, _0805B138 @ =gTasks+0x8 - adds r1, r2 - strh r7, [r1, 0xC] - mov r2, r8 - strh r2, [r1, 0xE] - strh r5, [r1, 0x2] - lsrs r2, r5, 16 - strh r2, [r1] - strh r6, [r1, 0x6] - lsrs r2, r6, 16 - strh r2, [r1, 0x4] - lsls r0, 24 - asrs r0, 24 - b _0805B140 - .align 2, 0 -_0805B134: .4byte sub_805B028 -_0805B138: .4byte gTasks+0x8 -_0805B13C: - movs r0, 0x1 - negs r0, r0 -_0805B140: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end task_overworld_door_add_if_inactive - - thumb_func_start DrawClosedDoor -DrawClosedDoor: @ 805B14C - push {lr} - bl sub_805AF54 - pop {r0} - bx r0 - thumb_func_end DrawClosedDoor - - thumb_func_start sub_805B158 -sub_805B158: @ 805B158 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridGetMetatileIdAt - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl door_find - adds r4, r0, 0 - cmp r0, 0 - beq _0805B196 - ldrb r0, [r0, 0x3] - ldr r1, _0805B19C @ =gUnknown_835B49C - cmp r0, 0 - bne _0805B184 - ldr r1, _0805B1A0 @ =gUnknown_835B488 -_0805B184: - adds r0, r1, 0 - bl sub_805B1A4 - adds r1, r0, 0 - adds r0, r4, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl sub_805AF14 -_0805B196: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0805B19C: .4byte gUnknown_835B49C -_0805B1A0: .4byte gUnknown_835B488 - thumb_func_end sub_805B158 - - thumb_func_start sub_805B1A4 -sub_805B1A4: @ 805B1A4 - push {lr} - adds r1, r0, 0 - b _0805B1AC -_0805B1AA: - adds r1, 0x4 -_0805B1AC: - ldrb r0, [r1] - cmp r0, 0 - bne _0805B1AA - subs r0, r1, 0x4 - pop {r1} - bx r1 - thumb_func_end sub_805B1A4 - - thumb_func_start sub_805B1B8 -sub_805B1B8: @ 805B1B8 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridGetMetatileIdAt - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl door_find - adds r2, r0, 0 - adds r4, r2, 0 - cmp r2, 0 - bne _0805B1E2 - movs r0, 0x1 - negs r0, r0 - b _0805B204 -_0805B1E2: - ldrb r0, [r2, 0x3] - cmp r0, 0 - beq _0805B1F4 - ldr r1, _0805B1F0 @ =gUnknown_835B49C - adds r0, r2, 0 - b _0805B1F8 - .align 2, 0 -_0805B1F0: .4byte gUnknown_835B49C -_0805B1F4: - ldr r1, _0805B20C @ =gUnknown_835B488 - adds r0, r4, 0 -_0805B1F8: - adds r2, r5, 0 - adds r3, r6, 0 - bl task_overworld_door_add_if_inactive - lsls r0, 24 - asrs r0, 24 -_0805B204: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0805B20C: .4byte gUnknown_835B488 - thumb_func_end sub_805B1B8 - - thumb_func_start sub_805B210 -sub_805B210: @ 805B210 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - adds r0, r5, 0 - adds r1, r6, 0 - bl MapGridGetMetatileIdAt - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl door_find - adds r2, r0, 0 - adds r4, r2, 0 - cmp r2, 0 - bne _0805B23A - movs r0, 0x1 - negs r0, r0 - b _0805B25C -_0805B23A: - ldrb r0, [r2, 0x3] - cmp r0, 0 - beq _0805B24C - ldr r1, _0805B248 @ =gUnknown_835B4C4 - adds r0, r2, 0 - b _0805B250 - .align 2, 0 -_0805B248: .4byte gUnknown_835B4C4 -_0805B24C: - ldr r1, _0805B264 @ =gUnknown_835B4B0 - adds r0, r4, 0 -_0805B250: - adds r2, r5, 0 - adds r3, r6, 0 - bl task_overworld_door_add_if_inactive - lsls r0, 24 - asrs r0, 24 -_0805B25C: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0805B264: .4byte gUnknown_835B4B0 - thumb_func_end sub_805B210 - - thumb_func_start FieldSetDoorOpened -FieldSetDoorOpened: @ 805B268 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r0, r4, 16 - asrs r0, 16 - lsls r1, r5, 16 - asrs r1, 16 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsWarpDoor_2 - lsls r0, 24 - cmp r0, 0 - beq _0805B292 - ldr r0, _0805B298 @ =gUnknown_835B5D8 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_805B158 -_0805B292: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805B298: .4byte gUnknown_835B5D8 - thumb_func_end FieldSetDoorOpened - - thumb_func_start FieldSetDoorClosed -FieldSetDoorClosed: @ 805B29C - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r0, r4, 16 - asrs r0, 16 - lsls r1, r5, 16 - asrs r1, 16 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsWarpDoor_2 - lsls r0, 24 - cmp r0, 0 - beq _0805B2C6 - ldr r0, _0805B2CC @ =gUnknown_835B5D8 - adds r1, r4, 0 - adds r2, r5, 0 - bl DrawClosedDoor -_0805B2C6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805B2CC: .4byte gUnknown_835B5D8 - thumb_func_end FieldSetDoorClosed - - thumb_func_start FieldAnimateDoorClose -FieldAnimateDoorClose: @ 805B2D0 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r0, r4, 16 - asrs r0, 16 - lsls r1, r5, 16 - asrs r1, 16 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsWarpDoor_2 - lsls r0, 24 - cmp r0, 0 - beq _0805B304 - ldr r0, _0805B300 @ =gUnknown_835B5D8 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_805B210 - lsls r0, 24 - asrs r0, 24 - b _0805B308 - .align 2, 0 -_0805B300: .4byte gUnknown_835B5D8 -_0805B304: - movs r0, 0x1 - negs r0, r0 -_0805B308: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end FieldAnimateDoorClose - - thumb_func_start FieldAnimateDoorOpen -FieldAnimateDoorOpen: @ 805B310 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r0, r4, 16 - asrs r0, 16 - lsls r1, r5, 16 - asrs r1, 16 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsWarpDoor_2 - lsls r0, 24 - cmp r0, 0 - beq _0805B344 - ldr r0, _0805B340 @ =gUnknown_835B5D8 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_805B1B8 - lsls r0, 24 - asrs r0, 24 - b _0805B348 - .align 2, 0 -_0805B340: .4byte gUnknown_835B5D8 -_0805B344: - movs r0, 0x1 - negs r0, r0 -_0805B348: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end FieldAnimateDoorOpen - - thumb_func_start FieldIsDoorAnimationRunning -FieldIsDoorAnimationRunning: @ 805B350 - push {lr} - ldr r0, _0805B360 @ =sub_805B028 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_0805B360: .4byte sub_805B028 - thumb_func_end FieldIsDoorAnimationRunning - - thumb_func_start GetDoorSoundEffect -GetDoorSoundEffect: @ 805B364 - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - ldr r0, _0805B37C @ =gUnknown_835B5D8 - adds r1, r3, 0 - bl sub_805B388 - lsls r0, 24 - cmp r0, 0 - beq _0805B380 - movs r0, 0x12 - b _0805B382 - .align 2, 0 -_0805B37C: .4byte gUnknown_835B5D8 -_0805B380: - movs r0, 0xF1 -_0805B382: - pop {r1} - bx r1 - thumb_func_end GetDoorSoundEffect - - thumb_func_start sub_805B388 -sub_805B388: @ 805B388 - push {r4,lr} - adds r4, r0, 0 - adds r0, r1, 0 - adds r1, r2, 0 - bl MapGridGetMetatileIdAt - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl door_find - cmp r0, 0 - beq _0805B3AC - ldrb r0, [r0, 0x2] - lsls r0, 24 - asrs r0, 24 - b _0805B3B0 -_0805B3AC: - movs r0, 0x1 - negs r0, r0 -_0805B3B0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_805B388 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/field_door.s b/data/field_door.s index be76e845d..c26398742 100644 --- a/data/field_door.s +++ b/data/field_door.s @@ -247,7 +247,7 @@ gUnknown_835B168:: @ 835B168 .space 32 .align 2 -gUnknown_835B488:: @ 835B488 +sDoorAnimFrames_OpenSmall:: @ 835B488 .byte 0x04 .align 1 .2byte 0xffff @@ -264,7 +264,7 @@ gUnknown_835B488:: @ 835B488 .align 1 .2byte 0x0000 -gUnknown_835B49C:: @ 835B49C +sDoorAnimFrames_OpenLarge:: @ 835B49C .byte 0x04 .align 1 .2byte 0xffff @@ -281,7 +281,7 @@ gUnknown_835B49C:: @ 835B49C .align 1 .2byte 0x0000 -gUnknown_835B4B0:: @ 835B4B0 +sDoorAnimFrames_CloseSmall:: @ 835B4B0 .byte 0x04 .align 1 .2byte 0x0100 @@ -298,7 +298,7 @@ gUnknown_835B4B0:: @ 835B4B0 .align 1 .2byte 0x0000 -gUnknown_835B4C4:: @ 835B4C4 +sDoorAnimFrames_CloseLarge:: @ 835B4C4 .byte 0x04 .align 1 .2byte 0x0200 @@ -411,7 +411,7 @@ gUnknown_835B5C8:: @ 835B5C8 gUnknown_835B5D0:: @ 835B5D0 .byte 0xb, 0xb, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2 -gUnknown_835B5D8:: @ 835B5D8 +sDoorGraphics:: @ 835B5D8 .2byte 0x003d .byte 0x00, 0x00 .4byte gUnknown_8353088 diff --git a/include/field_camera.h b/include/field_camera.h index 2ba583a52..fb9861014 100644 --- a/include/field_camera.h +++ b/include/field_camera.h @@ -30,6 +30,6 @@ void sub_805A658(s16 *x, s16 *y); void SetCameraPanningCallback(void (*cb)(void)); void SetCameraPanning(s16 x, s16 y); void InstallCameraPanAheadCallback(void); -void sub_805A91C(int x, int y, const u16 *data); +void DrawDoorMetatileAt(int x, int y, const u16 *data); #endif //GUARD_FIELD_CAMERA_H diff --git a/include/field_door.h b/include/field_door.h index 0059cbe1a..777afffce 100644 --- a/include/field_door.h +++ b/include/field_door.h @@ -3,11 +3,11 @@ #include "global.h" -void FieldSetDoorOpened(u32, u32); -void FieldSetDoorClosed(u32, u32); -s8 FieldAnimateDoorClose(u32, u32); -s8 FieldAnimateDoorOpen(u32, u32); +void FieldSetDoorOpened(int x, int y); +void FieldSetDoorClosed(int x, int y); +s8 FieldAnimateDoorClose(int x, int y); +s8 FieldAnimateDoorOpen(int x, int y); bool8 FieldIsDoorAnimationRunning(void); -u32 GetDoorSoundEffect(u32 x, u32 y); +u16 GetDoorSoundEffect(int x, int y); #endif diff --git a/ld_script.txt b/ld_script.txt index fe60a90e3..9066a11de 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -94,7 +94,6 @@ SECTIONS { src/metatile_behavior.o(.text); asm/field_camera.o(.text); src/field_door.o(.text); - asm/field_door.o(.text); asm/field_player_avatar.o(.text); asm/field_map_obj.o(.text); asm/field_ground_effect.o(.text); diff --git a/src/field_door.c b/src/field_door.c index 116cdddee..a0b470c58 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -1,82 +1,87 @@ #include "global.h" #include "field_camera.h" #include "task.h" +#include "fieldmap.h" +#include "metatile_behavior.h" +#include "constants/songs.h" struct DoorAnimFrame { - u8 unk_0; - u16 unk_2; + u8 duration; + u16 tile; }; struct DoorGraphics { - u16 unk_0; - u8 unk_2; - u8 unk_3; - const u8 * unk_4; - const u8 * unk_8; + u16 metatileId; + s8 sliding; + u8 size; + const u8 * tiles; + const u8 * palettes; }; -void sub_805AF54(const struct DoorGraphics * a0, int a1, int a2); -void sub_805AF80(const u8 *a0); -void sub_805AF94(const struct DoorGraphics * a0, int a1, int a2, const u8 *a3); -void sub_805AFE8(u16 *a0, u16 a1, const u8 *a2); -bool32 sub_805B060(const struct DoorGraphics * gfx, const struct DoorAnimFrame * frames, u16 *data); +static void DrawDoorDefaultImage(const struct DoorGraphics * gfx, int x, int y); +static void LoadDoorFrameTiles(const u8 *a0); +static void SetDoorFramePalettes(const struct DoorGraphics * gfx, int x, int y, const u8 *a3); +static void BufferDoorFrameTilesWithPalettes(u16 *a0, u16 a1, const u8 *a2); +static bool32 PlayDoorAnimationFrame(const struct DoorGraphics * gfx, const struct DoorAnimFrame * frames, s16 *data); +static const struct DoorAnimFrame * SeekToEndOfDoorAnim(const struct DoorAnimFrame * frames); +static s8 GetDoorOpenType(const struct DoorGraphics * gfx, int x, int y); -extern const struct DoorAnimFrame gUnknown_835B488[]; -extern const struct DoorAnimFrame gUnknown_835B49C[]; -extern const struct DoorAnimFrame gUnknown_835B4B0[]; -extern const struct DoorAnimFrame gUnknown_835B4C4[]; -extern const struct DoorGraphics gUnknown_835B5D8[]; +extern const struct DoorAnimFrame sDoorAnimFrames_OpenSmall[]; +extern const struct DoorAnimFrame sDoorAnimFrames_OpenLarge[]; +extern const struct DoorAnimFrame sDoorAnimFrames_CloseSmall[]; +extern const struct DoorAnimFrame sDoorAnimFrames_CloseLarge[]; +extern const struct DoorGraphics sDoorGraphics[]; -void sub_805AF14(const struct DoorGraphics * a0, const struct DoorAnimFrame * a1, int a2, int a3) +static void UpdateDrawDoorFrame(const struct DoorGraphics * gfx, const struct DoorAnimFrame * frames, int x, int y) { - if (a1->unk_2 == 0xFFFF) + if (frames->tile == 0xFFFF) { - sub_805AF54(a0, a2, a3); + DrawDoorDefaultImage(gfx, x, y); } else { - sub_805AF80(&a0->unk_4[a1->unk_2]); - sub_805AF94(a0, a2, a3, a0->unk_8); + LoadDoorFrameTiles(&gfx->tiles[frames->tile]); + SetDoorFramePalettes(gfx, x, y, gfx->palettes); } } -void sub_805AF54(const struct DoorGraphics * a0, int a1, int a2) +static void DrawDoorDefaultImage(const struct DoorGraphics * gfx, int x, int y) { - if (a0->unk_3 == 0) + if (gfx->size == 0) { - CurrentMapDrawMetatileAt(a1, a2); + CurrentMapDrawMetatileAt(x, y); } else { - CurrentMapDrawMetatileAt(a1, a2); - CurrentMapDrawMetatileAt(a1, a2 - 1); + CurrentMapDrawMetatileAt(x, y); + CurrentMapDrawMetatileAt(x, y - 1); } } -void sub_805AF80(const u8 *a0) +static void LoadDoorFrameTiles(const u8 *a0) { CpuFastCopy(a0, (void *)(BG_VRAM + 0x7F00), 0x100); } -void sub_805AF94(const struct DoorGraphics * a0, int a1, int a2, const u8 *a3) +static void SetDoorFramePalettes(const struct DoorGraphics * gfx, int x, int y, const u8 *a3) { u16 sp00[8]; - if (a0->unk_3 == 0) + if (gfx->size == 0) { - sub_805AFE8(sp00, 0x3F8, a3); + BufferDoorFrameTilesWithPalettes(sp00, 0x3F8, a3); } else { - sub_805AFE8(sp00, 0x3F8, a3); - sub_805A91C(a1, a2 - 1, sp00); - sub_805AFE8(sp00, 0x3FC, a3 + 4); + BufferDoorFrameTilesWithPalettes(sp00, 0x3F8, a3); + DrawDoorMetatileAt(x, y - 1, sp00); + BufferDoorFrameTilesWithPalettes(sp00, 0x3FC, a3 + 4); } - sub_805A91C(a1, a2, sp00); + DrawDoorMetatileAt(x, y, sp00); } -void sub_805AFE8(u16 *a0, u16 a1, const u8 *a2) +static void BufferDoorFrameTilesWithPalettes(u16 *a0, u16 a1, const u8 *a2) { int i; u16 tile; @@ -92,11 +97,149 @@ void sub_805AFE8(u16 *a0, u16 a1, const u8 *a2) } } -void sub_805B028(u8 taskId) +static void Task_AnimateDoor(u8 taskId) { - u16 *data = (void *)gTasks[taskId].data; - const struct DoorAnimFrame * frames = (const void *)((data[0] << 16) | data[1]); - const struct DoorGraphics * gfx = (const void *)((data[2] << 16) | data[3]); - if (!sub_805B060(gfx, frames, data)) + s16 *data = (void *)gTasks[taskId].data; + const struct DoorAnimFrame * frames = (const void *)(((u16)data[0] << 16) | (u16)data[1]); + const struct DoorGraphics * gfx = (const void *)(((u16)data[2] << 16) | (u16)data[3]); + if (!PlayDoorAnimationFrame(gfx, frames, data)) DestroyTask(taskId); } + +static bool32 PlayDoorAnimationFrame(const struct DoorGraphics * gfx, const struct DoorAnimFrame * frames, s16 *data) +{ + if (data[5] == 0) + { + UpdateDrawDoorFrame(gfx, &frames[data[4]], data[6], data[7]); + } + if (data[5] == frames[data[4]].duration) + { + data[5] = 0; + data[4]++; + if (frames[data[4]].duration == 0) + return FALSE; + } + else + { + data[5]++; + } + return TRUE; +} + +static const struct DoorGraphics * door_find(const struct DoorGraphics * gfx, u16 id) +{ + while (gfx->tiles != NULL) + { + if (gfx->metatileId == id) + return gfx; + gfx++; + } + return NULL; +} + +static s8 task_overworld_door_add_if_inactive(const struct DoorGraphics * gfx, const struct DoorAnimFrame * frames, int a2, int a3) +{ + u8 taskId; + s16 *data; + if (FuncIsActiveTask(Task_AnimateDoor) == TRUE) + return -1; + taskId = CreateTask(Task_AnimateDoor, 80); + data = gTasks[taskId].data; + data[6] = a2; + data[7] = a3; + data[1] = (uintptr_t)frames; + data[0] = (uintptr_t)frames >> 16; + data[3] = (uintptr_t)gfx; + data[2] = (uintptr_t)gfx >> 16; + return taskId; +} + +static void DrawClosedDoor(const struct DoorGraphics * gfx, int a1, int a2) +{ + DrawDoorDefaultImage(gfx, a1, a2); +} + +static void DrawOpenedDoor(const struct DoorGraphics * gfx, int x, int y) +{ + gfx = door_find(gfx, MapGridGetMetatileIdAt(x, y)); + if (gfx != NULL) + { + UpdateDrawDoorFrame(gfx, SeekToEndOfDoorAnim(gfx->size == 0 ? sDoorAnimFrames_OpenSmall : sDoorAnimFrames_OpenLarge), x, y); + } +} + +static const struct DoorAnimFrame * SeekToEndOfDoorAnim(const struct DoorAnimFrame * frames) +{ + while (frames->duration != 0) + frames++; + return frames - 1; +} + +static s8 AnimateDoorOpenInternal(const struct DoorGraphics * gfx, int x, int y) +{ + gfx = door_find(gfx, MapGridGetMetatileIdAt(x, y)); + if (gfx == NULL) + return -1; + else if (gfx->size == 0) + return task_overworld_door_add_if_inactive(gfx, sDoorAnimFrames_OpenSmall, x, y); + else + return task_overworld_door_add_if_inactive(gfx, sDoorAnimFrames_OpenLarge, x, y); +} + +static s8 AnimateDoorCloseInternal(const struct DoorGraphics * gfx, int x, int y) +{ + gfx = door_find(gfx, MapGridGetMetatileIdAt(x, y)); + if (gfx == NULL) + return -1; + else if (gfx->size == 0) + return task_overworld_door_add_if_inactive(gfx, sDoorAnimFrames_CloseSmall, x, y); + else + return task_overworld_door_add_if_inactive(gfx, sDoorAnimFrames_CloseLarge, x, y); +} + +void FieldSetDoorOpened(int x, int y) +{ + if (MetatileBehavior_IsWarpDoor_2(MapGridGetMetatileBehaviorAt((s16)x, (s16)y))) + DrawOpenedDoor(sDoorGraphics, x, y); +} + +void FieldSetDoorClosed(int x, int y) +{ + if (MetatileBehavior_IsWarpDoor_2(MapGridGetMetatileBehaviorAt((s16)x, (s16)y))) + DrawClosedDoor(sDoorGraphics, x, y); +} + +s8 FieldAnimateDoorClose(int x, int y) +{ + if (!MetatileBehavior_IsWarpDoor_2(MapGridGetMetatileBehaviorAt((s16)x, (s16)y))) + return -1; + return AnimateDoorCloseInternal(sDoorGraphics, x, y); +} + +s8 FieldAnimateDoorOpen(int x, int y) +{ + if (!MetatileBehavior_IsWarpDoor_2(MapGridGetMetatileBehaviorAt((s16)x, (s16)y))) + return -1; + return AnimateDoorOpenInternal(sDoorGraphics, x, y); +} + +bool8 FieldIsDoorAnimationRunning(void) +{ + return FuncIsActiveTask(Task_AnimateDoor); +} + +u16 GetDoorSoundEffect(x, y) +{ + if (!GetDoorOpenType(sDoorGraphics, x, y)) + return MUS_W_DOOR; + else + return SE_JIDO_DOA; +} + +static s8 GetDoorOpenType(const struct DoorGraphics * gfx, int x, int y) +{ + gfx = door_find(gfx, MapGridGetMetatileIdAt(x, y)); + if (gfx == NULL) + return -1; + return gfx->sliding; +} From e2005e194dee022b422e07c0f8efeeea490e55e0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 12 Nov 2019 14:34:14 -0500 Subject: [PATCH 24/33] Port field_door data to C --- data/field_door.s | 546 ---------------------------------------------- ld_script.txt | 1 - src/field_door.c | 302 ++++++++++++++++++++++++- 3 files changed, 297 insertions(+), 552 deletions(-) delete mode 100644 data/field_door.s diff --git a/data/field_door.s b/data/field_door.s deleted file mode 100644 index c26398742..000000000 --- a/data/field_door.s +++ /dev/null @@ -1,546 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2, 0 - -gUnknown_8353088:: @ 8353088 - .incbin "graphics/door_anims/frame_8353088_1.4bpp" - .incbin "graphics/door_anims/frame_8353088_2.4bpp" - .incbin "graphics/door_anims/frame_8353088_3.4bpp" - .space 32 - -gUnknown_8353228:: @ 8353228 - .incbin "graphics/door_anims/frame_8353228_1.4bpp" - .incbin "graphics/door_anims/frame_8353228_2.4bpp" - .incbin "graphics/door_anims/frame_8353228_3.4bpp" - .space 32 - -gUnknown_83533C8:: @ 83533C8 - .incbin "graphics/door_anims/frame_83533C8_1.4bpp" - .incbin "graphics/door_anims/frame_83533C8_2.4bpp" - .incbin "graphics/door_anims/frame_83533C8_3.4bpp" - .space 32 - -gUnknown_8353568:: @ 8353568 - .incbin "graphics/door_anims/frame_8353568_1.4bpp" - .incbin "graphics/door_anims/frame_8353568_2.4bpp" - .incbin "graphics/door_anims/frame_8353568_3.4bpp" - .space 32 - -gUnknown_8353708:: @ 8353708 - .incbin "graphics/door_anims/frame_8353708_1.4bpp" - .incbin "graphics/door_anims/frame_8353708_2.4bpp" - .incbin "graphics/door_anims/frame_8353708_3.4bpp" - .space 32 - -gUnknown_83538A8:: @ 83538A8 - .incbin "graphics/door_anims/frame_83538A8_1.4bpp" - .incbin "graphics/door_anims/frame_83538A8_2.4bpp" - .incbin "graphics/door_anims/frame_83538A8_3.4bpp" - .space 32 - -gUnknown_8353A48:: @ 8353A48 - .incbin "graphics/door_anims/frame_8353A48_1.4bpp" - .incbin "graphics/door_anims/frame_8353A48_2.4bpp" - .incbin "graphics/door_anims/frame_8353A48_3.4bpp" - .space 32 - -gUnknown_8353BE8:: @ 8353BE8 - .incbin "graphics/door_anims/frame_8353BE8_1.4bpp" - .incbin "graphics/door_anims/frame_8353BE8_2.4bpp" - .incbin "graphics/door_anims/frame_8353BE8_3.4bpp" - .space 32 - -gUnknown_8353D88:: @ 8353D88 - .incbin "graphics/door_anims/frame_8353D88_1.4bpp" - .incbin "graphics/door_anims/frame_8353D88_2.4bpp" - .incbin "graphics/door_anims/frame_8353D88_3.4bpp" - .space 32 - -gUnknown_8353F28:: @ 8353F28 - .incbin "graphics/door_anims/frame_8353F28_1.4bpp" - .incbin "graphics/door_anims/frame_8353F28_2.4bpp" - .incbin "graphics/door_anims/frame_8353F28_3.4bpp" - .space 32 - -gUnknown_83540C8:: @ 83540C8 - .incbin "graphics/door_anims/frame_83540C8_1.4bpp" - .incbin "graphics/door_anims/frame_83540C8_2.4bpp" - .incbin "graphics/door_anims/frame_83540C8_3.4bpp" - .space 32 - -gUnknown_8354268:: @ 8354268 - .incbin "graphics/door_anims/frame_8354268_1.4bpp" - .incbin "graphics/door_anims/frame_8354268_2.4bpp" - .incbin "graphics/door_anims/frame_8354268_3.4bpp" - .space 32 - -gUnknown_8354408:: @ 8354408 - .incbin "graphics/door_anims/frame_8354408_1.4bpp" - .incbin "graphics/door_anims/frame_8354408_2.4bpp" - .incbin "graphics/door_anims/frame_8354408_3.4bpp" - .space 32 - -gUnknown_83545A8:: @ 83545A8 - .incbin "graphics/door_anims/frame_83545A8_1.4bpp" - .incbin "graphics/door_anims/frame_83545A8_2.4bpp" - .incbin "graphics/door_anims/frame_83545A8_3.4bpp" - .space 32 - -gUnknown_8354748:: @ 8354748 - .incbin "graphics/door_anims/frame_8354748_1.4bpp" - .incbin "graphics/door_anims/frame_8354748_2.4bpp" - .incbin "graphics/door_anims/frame_8354748_3.4bpp" - .space 32 - -gUnknown_83548E8:: @ 83548E8 - .incbin "graphics/door_anims/frame_83548E8_1.4bpp" - .incbin "graphics/door_anims/frame_83548E8_2.4bpp" - .incbin "graphics/door_anims/frame_83548E8_3.4bpp" - .space 32 - -gUnknown_8354A88:: @ 8354A88 - .incbin "graphics/door_anims/frame_8354A88_1.4bpp" - .incbin "graphics/door_anims/frame_8354A88_2.4bpp" - .incbin "graphics/door_anims/frame_8354A88_3.4bpp" - .space 32 - -gUnknown_8354C28:: @ 8354C28 - .incbin "graphics/door_anims/frame_8354C28_1.4bpp" - .incbin "graphics/door_anims/frame_8354C28_2.4bpp" - .incbin "graphics/door_anims/frame_8354C28_3.4bpp" - .space 32 - -gUnknown_8354F48:: @ 8354F48 - .incbin "graphics/door_anims/frame_8354F48_1.4bpp" - .incbin "graphics/door_anims/frame_8354F48_2.4bpp" - .incbin "graphics/door_anims/frame_8354F48_3.4bpp" - .space 32 - -gUnknown_8355268:: @ 8355268 - .incbin "graphics/door_anims/frame_8355268_1.4bpp" - .incbin "graphics/door_anims/frame_8355268_2.4bpp" - .incbin "graphics/door_anims/frame_8355268_3.4bpp" - .space 32 - -gUnknown_8355588:: @ 8355588 - .incbin "graphics/door_anims/frame_8355588_1.4bpp" - .incbin "graphics/door_anims/frame_8355588_2.4bpp" - .incbin "graphics/door_anims/frame_8355588_3.4bpp" - .space 32 - -gUnknown_83558A8:: - .space 0x320 - .space 0x320 - .space 0x320 - .space 0x320 - .space 0x320 - .space 0x320 - .space 0x320 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .space 0x1A0 - .incbin "graphics/door_anims/frame_8359588_1.4bpp" - .incbin "graphics/door_anims/frame_8359588_2.4bpp" - .space 0x100 - .incbin "graphics/door_anims/frame_8359788_1.4bpp" - .incbin "graphics/door_anims/frame_8359788_2.4bpp" - .incbin "graphics/door_anims/frame_8359788_3.4bpp" - .incbin "graphics/door_anims/frame_8359788_4.4bpp" - .space 0x100 - .incbin "graphics/door_anims/frame_8359988_1.4bpp" - .incbin "graphics/door_anims/frame_8359988_2.4bpp" - .incbin "graphics/door_anims/frame_8359988_3.4bpp" - .incbin "graphics/door_anims/frame_8359988_4.4bpp" - .space 0x100 - .incbin "graphics/door_anims/frame_8359B88_1.4bpp" - .incbin "graphics/door_anims/frame_8359B88_2.4bpp" - .incbin "graphics/door_anims/frame_8359B88_3.4bpp" - .incbin "graphics/door_anims/frame_8359B88_4.4bpp" - .space 0x20 - -gUnknown_8359CA8:: @ 8359CA8 - .incbin "graphics/door_anims/frame_8359CA8_1.4bpp" - .incbin "graphics/door_anims/frame_8359CA8_2.4bpp" - .incbin "graphics/door_anims/frame_8359CA8_3.4bpp" - .space 32 - -gUnknown_8359FC8:: @ 8359FC8 - .incbin "graphics/door_anims/frame_8359FC8_1.4bpp" - .incbin "graphics/door_anims/frame_8359FC8_2.4bpp" - .incbin "graphics/door_anims/frame_8359FC8_3.4bpp" - .space 32 - -gUnknown_835A168:: @ 835A168 - .incbin "graphics/door_anims/frame_835A168_1.4bpp" - .incbin "graphics/door_anims/frame_835A168_2.4bpp" - .incbin "graphics/door_anims/frame_835A168_3.4bpp" - .space 32 - -gUnknown_835A308:: @ 835A308 - .incbin "graphics/door_anims/frame_835A308_1.4bpp" - .incbin "graphics/door_anims/frame_835A308_2.4bpp" - .incbin "graphics/door_anims/frame_835A308_3.4bpp" - .space 32 - -gUnknown_835A4A8:: @ 835A4A8 - .incbin "graphics/door_anims/frame_835A4A8_1.4bpp" - .incbin "graphics/door_anims/frame_835A4A8_2.4bpp" - .incbin "graphics/door_anims/frame_835A4A8_3.4bpp" - .space 32 - -gUnknown_835A648:: @ 835A648 - .incbin "graphics/door_anims/frame_835A648_1.4bpp" - .incbin "graphics/door_anims/frame_835A648_2.4bpp" - .incbin "graphics/door_anims/frame_835A648_3.4bpp" - .space 32 - -gUnknown_835A7E8:: @ 835A7E8 - .incbin "graphics/door_anims/frame_835A7E8_1.4bpp" - .incbin "graphics/door_anims/frame_835A7E8_2.4bpp" - .incbin "graphics/door_anims/frame_835A7E8_3.4bpp" - .space 32 - -gUnknown_835A988:: @ 835A988 - .incbin "graphics/door_anims/frame_835A988_1.4bpp" - .incbin "graphics/door_anims/frame_835A988_2.4bpp" - .incbin "graphics/door_anims/frame_835A988_3.4bpp" - .space 32 - -gUnknown_835AB28:: @ 835AB28 - .incbin "graphics/door_anims/frame_835AB28_1.4bpp" - .incbin "graphics/door_anims/frame_835AB28_2.4bpp" - .incbin "graphics/door_anims/frame_835AB28_3.4bpp" - .space 32 - -gUnknown_835AE48:: @ 835AE48 - .incbin "graphics/door_anims/frame_835AE48_1.4bpp" - .incbin "graphics/door_anims/frame_835AE48_2.4bpp" - .incbin "graphics/door_anims/frame_835AE48_3.4bpp" - .space 32 - -gUnknown_835B168:: @ 835B168 - .incbin "graphics/door_anims/frame_835B168_1.4bpp" - .incbin "graphics/door_anims/frame_835B168_2.4bpp" - .incbin "graphics/door_anims/frame_835B168_3.4bpp" - .space 32 - - .align 2 -sDoorAnimFrames_OpenSmall:: @ 835B488 - .byte 0x04 - .align 1 - .2byte 0xffff - .byte 0x04 - .align 1 - .2byte 0x0000 - .byte 0x04 - .align 1 - .2byte 0x0080 - .byte 0x04 - .align 1 - .2byte 0x0100 - .byte 0x00 - .align 1 - .2byte 0x0000 - -sDoorAnimFrames_OpenLarge:: @ 835B49C - .byte 0x04 - .align 1 - .2byte 0xffff - .byte 0x04 - .align 1 - .2byte 0x0000 - .byte 0x04 - .align 1 - .2byte 0x0100 - .byte 0x04 - .align 1 - .2byte 0x0200 - .byte 0x00 - .align 1 - .2byte 0x0000 - -sDoorAnimFrames_CloseSmall:: @ 835B4B0 - .byte 0x04 - .align 1 - .2byte 0x0100 - .byte 0x04 - .align 1 - .2byte 0x0080 - .byte 0x04 - .align 1 - .2byte 0x0000 - .byte 0x04 - .align 1 - .2byte 0xffff - .byte 0x00 - .align 1 - .2byte 0x0000 - -sDoorAnimFrames_CloseLarge:: @ 835B4C4 - .byte 0x04 - .align 1 - .2byte 0x0200 - .byte 0x04 - .align 1 - .2byte 0x0100 - .byte 0x04 - .align 1 - .2byte 0x0000 - .byte 0x04 - .align 1 - .2byte 0xffff - .byte 0x00 - .align 1 - .2byte 0x0000 - -gUnknown_835B4D8:: @ 835B4D8 - .byte 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2 - -gUnknown_835B4E0:: @ 835B4E0 - .byte 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3 - -gUnknown_835B4E8:: @ 835B4E8 - .byte 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3 - -gUnknown_835B4F0:: @ 835B4F0 - .byte 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 - -gUnknown_835B4F8:: @ 835B4F8 - .byte 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa - -gUnknown_835B500:: @ 835B500 - .byte 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 - -gUnknown_835B508:: @ 835B508 - .byte 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 - -gUnknown_835B510:: @ 835B510 - .byte 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 - -gUnknown_835B518:: @ 835B518 - .byte 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3 - -gUnknown_835B520:: @ 835B520 - .byte 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc - -gUnknown_835B528:: @ 835B528 - .byte 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9 - -gUnknown_835B530:: @ 835B530 - .byte 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9 - -gUnknown_835B538:: @ 835B538 - .byte 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9 - -gUnknown_835B540:: @ 835B540 - .byte 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3 - -gUnknown_835B548:: @ 835B548 - .byte 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 - -gUnknown_835B550:: @ 835B550 - .byte 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9 - -gUnknown_835B558:: @ 835B558 - .byte 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3 - -gUnknown_835B560:: @ 835B560 - .byte 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 - -gUnknown_835B568:: @ 835B568 - .byte 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 - -gUnknown_835B570:: @ 835B570 - .byte 0xc, 0xc, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2 - -gUnknown_835B578:: @ 835B578 - .byte 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7 - -gUnknown_835B580:: @ 835B580 - .byte 0x8, 0x8, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2 - -gUnknown_835B588:: @ 835B588 - .byte 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5 - -gUnknown_835B590:: @ 835B590 - .byte 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3 - -gUnknown_835B598:: @ 835B598 - .byte 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3 - -gUnknown_835B5A0:: @ 835B5A0 - .byte 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5 - -gUnknown_835B5A8:: @ 835B5A8 - .byte 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3 - -gUnknown_835B5B0:: @ 835B5B0 - .byte 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa - -gUnknown_835B5B8:: @ 835B5B8 - .byte 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5 - -gUnknown_835B5C0:: @ 835B5C0 - .byte 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8 - -gUnknown_835B5C8:: @ 835B5C8 - .byte 0x8, 0x8, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2 - -gUnknown_835B5D0:: @ 835B5D0 - .byte 0xb, 0xb, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2 - -sDoorGraphics:: @ 835B5D8 - .2byte 0x003d - .byte 0x00, 0x00 - .4byte gUnknown_8353088 - .4byte gUnknown_835B4D8 - .2byte 0x0062 - .byte 0x01, 0x00 - .4byte gUnknown_8353228 - .4byte gUnknown_835B4E0 - .2byte 0x015b - .byte 0x01, 0x00 - .4byte gUnknown_83533C8 - .4byte gUnknown_835B4E8 - .2byte 0x02a3 - .byte 0x00, 0x00 - .4byte gUnknown_8353568 - .4byte gUnknown_835B4F0 - .2byte 0x02ac - .byte 0x00, 0x00 - .4byte gUnknown_8353708 - .4byte gUnknown_835B4F8 - .2byte 0x0299 - .byte 0x00, 0x00 - .4byte gUnknown_83538A8 - .4byte gUnknown_835B500 - .2byte 0x02ce - .byte 0x00, 0x00 - .4byte gUnknown_8353A48 - .4byte gUnknown_835B508 - .2byte 0x0284 - .byte 0x00, 0x00 - .4byte gUnknown_8353BE8 - .4byte gUnknown_835B510 - .2byte 0x02bc - .byte 0x01, 0x00 - .4byte gUnknown_8353D88 - .4byte gUnknown_835B518 - .2byte 0x0298 - .byte 0x00, 0x00 - .4byte gUnknown_8353F28 - .4byte gUnknown_835B520 - .2byte 0x02a2 - .byte 0x00, 0x00 - .4byte gUnknown_83540C8 - .4byte gUnknown_835B528 - .2byte 0x029e - .byte 0x00, 0x00 - .4byte gUnknown_8354268 - .4byte gUnknown_835B530 - .2byte 0x02e1 - .byte 0x00, 0x00 - .4byte gUnknown_8354408 - .4byte gUnknown_835B538 - .2byte 0x0294 - .byte 0x01, 0x00 - .4byte gUnknown_83545A8 - .4byte gUnknown_835B540 - .2byte 0x02bf - .byte 0x00, 0x00 - .4byte gUnknown_8354748 - .4byte gUnknown_835B548 - .2byte 0x02d2 - .byte 0x01, 0x00 - .4byte gUnknown_83548E8 - .4byte gUnknown_835B550 - .2byte 0x02ad - .byte 0x00, 0x00 - .4byte gUnknown_8354A88 - .4byte gUnknown_835B558 - .2byte 0x0297 - .byte 0x00, 0x00 - .4byte gUnknown_8359FC8 - .4byte gUnknown_835B588 - .2byte 0x029b - .byte 0x01, 0x00 - .4byte gUnknown_835A168 - .4byte gUnknown_835B590 - .2byte 0x02eb - .byte 0x00, 0x00 - .4byte gUnknown_835A308 - .4byte gUnknown_835B598 - .2byte 0x029a - .byte 0x00, 0x00 - .4byte gUnknown_835A4A8 - .4byte gUnknown_835B5A0 - .2byte 0x02b9 - .byte 0x00, 0x00 - .4byte gUnknown_835A648 - .4byte gUnknown_835B5A8 - .2byte 0x02af - .byte 0x00, 0x00 - .4byte gUnknown_835A7E8 - .4byte gUnknown_835B5B0 - .2byte 0x030c - .byte 0x00, 0x00 - .4byte gUnknown_835A988 - .4byte gUnknown_835B5B8 - .2byte 0x028d - .byte 0x01, 0x01 - .4byte gUnknown_8354C28 - .4byte gUnknown_835B560 - .2byte 0x02de - .byte 0x01, 0x01 - .4byte gUnknown_8354F48 - .4byte gUnknown_835B568 - .2byte 0x02ab - .byte 0x01, 0x01 - .4byte gUnknown_8355268 - .4byte gUnknown_835B570 - .2byte 0x0281 - .byte 0x00, 0x01 - .4byte gUnknown_8355588 - .4byte gUnknown_835B578 - .2byte 0x02e2 - .byte 0x01, 0x01 - .4byte gUnknown_8359CA8 - .4byte gUnknown_835B580 - .2byte 0x0296 - .byte 0x01, 0x01 - .4byte gUnknown_835AB28 - .4byte gUnknown_835B5C0 - .2byte 0x02c3 - .byte 0x01, 0x01 - .4byte gUnknown_835AE48 - .4byte gUnknown_835B5C8 - .2byte 0x0356 - .byte 0x01, 0x01 - .4byte gUnknown_835B168 - .4byte gUnknown_835B5D0 - .2byte 0x0000 - .byte 0x00, 0x00 - .4byte 0x00000000 - .4byte 0x00000000 diff --git a/ld_script.txt b/ld_script.txt index 9066a11de..d84a70c7a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -409,7 +409,6 @@ SECTIONS { src/fieldmap.o(.rodata); src/metatile_behavior.o(.rodata); src/field_door.o(.rodata); - data/field_door.o(.rodata); data/field_player_avatar.o(.rodata); data/field_map_obj.o(.rodata); data/field_ground_effect.o(.rodata); diff --git a/src/field_door.c b/src/field_door.c index a0b470c58..a06781834 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -28,11 +28,303 @@ static bool32 PlayDoorAnimationFrame(const struct DoorGraphics * gfx, const stru static const struct DoorAnimFrame * SeekToEndOfDoorAnim(const struct DoorAnimFrame * frames); static s8 GetDoorOpenType(const struct DoorGraphics * gfx, int x, int y); -extern const struct DoorAnimFrame sDoorAnimFrames_OpenSmall[]; -extern const struct DoorAnimFrame sDoorAnimFrames_OpenLarge[]; -extern const struct DoorAnimFrame sDoorAnimFrames_CloseSmall[]; -extern const struct DoorAnimFrame sDoorAnimFrames_CloseLarge[]; -extern const struct DoorGraphics sDoorGraphics[]; +const u8 gUnknown_8353088[] = INCBIN_U8("graphics/door_anims/frame_8353088_1.4bpp", "graphics/door_anims/frame_8353088_2.4bpp", "graphics/door_anims/frame_8353088_3.4bpp"); +const u8 gUnknown_8353208[32] = {}; +const u8 gUnknown_8353228[] = INCBIN_U8("graphics/door_anims/frame_8353228_1.4bpp", "graphics/door_anims/frame_8353228_2.4bpp", "graphics/door_anims/frame_8353228_3.4bpp"); +const u8 gUnknown_83533A8[32] = {}; +const u8 gUnknown_83533C8[] = INCBIN_U8("graphics/door_anims/frame_83533C8_1.4bpp", "graphics/door_anims/frame_83533C8_2.4bpp", "graphics/door_anims/frame_83533C8_3.4bpp"); +const u8 gUnknown_8353548[32] = {}; +const u8 gUnknown_8353568[] = INCBIN_U8("graphics/door_anims/frame_8353568_1.4bpp", "graphics/door_anims/frame_8353568_2.4bpp", "graphics/door_anims/frame_8353568_3.4bpp"); +const u8 gUnknown_83536E8[32] = {}; +const u8 gUnknown_8353708[] = INCBIN_U8("graphics/door_anims/frame_8353708_1.4bpp", "graphics/door_anims/frame_8353708_2.4bpp", "graphics/door_anims/frame_8353708_3.4bpp"); +const u8 gUnknown_8353888[32] = {}; +const u8 gUnknown_83538A8[] = INCBIN_U8("graphics/door_anims/frame_83538A8_1.4bpp", "graphics/door_anims/frame_83538A8_2.4bpp", "graphics/door_anims/frame_83538A8_3.4bpp"); +const u8 gUnknown_8353A28[32] = {}; +const u8 gUnknown_8353A48[] = INCBIN_U8("graphics/door_anims/frame_8353A48_1.4bpp", "graphics/door_anims/frame_8353A48_2.4bpp", "graphics/door_anims/frame_8353A48_3.4bpp"); +const u8 gUnknown_8353BC8[32] = {}; +const u8 gUnknown_8353BE8[] = INCBIN_U8("graphics/door_anims/frame_8353BE8_1.4bpp", "graphics/door_anims/frame_8353BE8_2.4bpp", "graphics/door_anims/frame_8353BE8_3.4bpp"); +const u8 gUnknown_8353D68[32] = {}; +const u8 gUnknown_8353D88[] = INCBIN_U8("graphics/door_anims/frame_8353D88_1.4bpp", "graphics/door_anims/frame_8353D88_2.4bpp", "graphics/door_anims/frame_8353D88_3.4bpp"); +const u8 gUnknown_8353F08[32] = {}; +const u8 gUnknown_8353F28[] = INCBIN_U8("graphics/door_anims/frame_8353F28_1.4bpp", "graphics/door_anims/frame_8353F28_2.4bpp", "graphics/door_anims/frame_8353F28_3.4bpp"); +const u8 gUnknown_83540A8[32] = {}; +const u8 gUnknown_83540C8[] = INCBIN_U8("graphics/door_anims/frame_83540C8_1.4bpp", "graphics/door_anims/frame_83540C8_2.4bpp", "graphics/door_anims/frame_83540C8_3.4bpp"); +const u8 gUnknown_8354248[32] = {}; +const u8 gUnknown_8354268[] = INCBIN_U8("graphics/door_anims/frame_8354268_1.4bpp", "graphics/door_anims/frame_8354268_2.4bpp", "graphics/door_anims/frame_8354268_3.4bpp"); +const u8 gUnknown_83543E8[32] = {}; +const u8 gUnknown_8354408[] = INCBIN_U8("graphics/door_anims/frame_8354408_1.4bpp", "graphics/door_anims/frame_8354408_2.4bpp", "graphics/door_anims/frame_8354408_3.4bpp"); +const u8 gUnknown_8354588[32] = {}; +const u8 gUnknown_83545A8[] = INCBIN_U8("graphics/door_anims/frame_83545A8_1.4bpp", "graphics/door_anims/frame_83545A8_2.4bpp", "graphics/door_anims/frame_83545A8_3.4bpp"); +const u8 gUnknown_8354728[32] = {}; +const u8 gUnknown_8354748[] = INCBIN_U8("graphics/door_anims/frame_8354748_1.4bpp", "graphics/door_anims/frame_8354748_2.4bpp", "graphics/door_anims/frame_8354748_3.4bpp"); +const u8 gUnknown_83548C8[32] = {}; +const u8 gUnknown_83548E8[] = INCBIN_U8("graphics/door_anims/frame_83548E8_1.4bpp", "graphics/door_anims/frame_83548E8_2.4bpp", "graphics/door_anims/frame_83548E8_3.4bpp"); +const u8 gUnknown_8354A68[32] = {}; +const u8 gUnknown_8354A88[] = INCBIN_U8("graphics/door_anims/frame_8354A88_1.4bpp", "graphics/door_anims/frame_8354A88_2.4bpp", "graphics/door_anims/frame_8354A88_3.4bpp"); +const u8 gUnknown_8354C08[32] = {}; +const u8 gUnknown_8354C28[] = INCBIN_U8("graphics/door_anims/frame_8354C28_1.4bpp", "graphics/door_anims/frame_8354C28_2.4bpp", "graphics/door_anims/frame_8354C28_3.4bpp"); +const u8 gUnknown_8354F28[32] = {}; +const u8 gUnknown_8354F48[] = INCBIN_U8("graphics/door_anims/frame_8354F48_1.4bpp", "graphics/door_anims/frame_8354F48_2.4bpp", "graphics/door_anims/frame_8354F48_3.4bpp"); +const u8 gUnknown_8355248[32] = {}; +const u8 gUnknown_8355268[] = INCBIN_U8("graphics/door_anims/frame_8355268_1.4bpp", "graphics/door_anims/frame_8355268_2.4bpp", "graphics/door_anims/frame_8355268_3.4bpp"); +const u8 gUnknown_8355568[32] = {}; +const u8 gUnknown_8355588[] = INCBIN_U8("graphics/door_anims/frame_8355588_1.4bpp", "graphics/door_anims/frame_8355588_2.4bpp", "graphics/door_anims/frame_8355588_3.4bpp"); +const u8 gUnknown_8355888[32] = {}; +const u8 gUnknown_83558A8[256] = {}; +const u8 gUnknown_83559A8[256] = {}; +const u8 gUnknown_8355AA8[256] = {}; +const u8 gUnknown_8355BA8[32] = {}; +const u8 gUnknown_8355BC8[256] = {}; +const u8 gUnknown_8355CC8[256] = {}; +const u8 gUnknown_8355DC8[256] = {}; +const u8 gUnknown_8355EC8[32] = {}; +const u8 gUnknown_8355EE8[256] = {}; +const u8 gUnknown_8355FE8[256] = {}; +const u8 gUnknown_83560E8[256] = {}; +const u8 gUnknown_83561E8[32] = {}; +const u8 gUnknown_8356208[256] = {}; +const u8 gUnknown_8356308[256] = {}; +const u8 gUnknown_8356408[256] = {}; +const u8 gUnknown_8356508[32] = {}; +const u8 gUnknown_8356528[256] = {}; +const u8 gUnknown_8356628[256] = {}; +const u8 gUnknown_8356728[256] = {}; +const u8 gUnknown_8356828[32] = {}; +const u8 gUnknown_8356848[256] = {}; +const u8 gUnknown_8356948[256] = {}; +const u8 gUnknown_8356A48[256] = {}; +const u8 gUnknown_8356B48[32] = {}; +const u8 gUnknown_8356B68[256] = {}; +const u8 gUnknown_8356C68[256] = {}; +const u8 gUnknown_8356D68[256] = {}; +const u8 gUnknown_8356E68[32] = {}; +const u8 gUnknown_8356E88[128] = {}; +const u8 gUnknown_8356F08[128] = {}; +const u8 gUnknown_8356F88[128] = {}; +const u8 gUnknown_8357008[32] = {}; +const u8 gUnknown_8357028[128] = {}; +const u8 gUnknown_83570A8[128] = {}; +const u8 gUnknown_8357128[128] = {}; +const u8 gUnknown_83571A8[32] = {}; +const u8 gUnknown_83571C8[128] = {}; +const u8 gUnknown_8357248[128] = {}; +const u8 gUnknown_83572C8[128] = {}; +const u8 gUnknown_8357348[32] = {}; +const u8 gUnknown_8357368[128] = {}; +const u8 gUnknown_83573E8[128] = {}; +const u8 gUnknown_8357468[128] = {}; +const u8 gUnknown_83574E8[32] = {}; +const u8 gUnknown_8357508[128] = {}; +const u8 gUnknown_8357588[128] = {}; +const u8 gUnknown_8357608[128] = {}; +const u8 gUnknown_8357688[32] = {}; +const u8 gUnknown_83576A8[128] = {}; +const u8 gUnknown_8357728[128] = {}; +const u8 gUnknown_83577A8[128] = {}; +const u8 gUnknown_8357828[32] = {}; +const u8 gUnknown_8357848[128] = {}; +const u8 gUnknown_83578C8[128] = {}; +const u8 gUnknown_8357948[128] = {}; +const u8 gUnknown_83579C8[32] = {}; +const u8 gUnknown_83579E8[128] = {}; +const u8 gUnknown_8357A68[128] = {}; +const u8 gUnknown_8357AE8[128] = {}; +const u8 gUnknown_8357B68[32] = {}; +const u8 gUnknown_8357B88[128] = {}; +const u8 gUnknown_8357C08[128] = {}; +const u8 gUnknown_8357C88[128] = {}; +const u8 gUnknown_8357D08[32] = {}; +const u8 gUnknown_8357D28[128] = {}; +const u8 gUnknown_8357DA8[128] = {}; +const u8 gUnknown_8357E28[128] = {}; +const u8 gUnknown_8357EA8[32] = {}; +const u8 gUnknown_8357EC8[128] = {}; +const u8 gUnknown_8357F48[128] = {}; +const u8 gUnknown_8357FC8[128] = {}; +const u8 gUnknown_8358048[32] = {}; +const u8 gUnknown_8358068[128] = {}; +const u8 gUnknown_83580E8[128] = {}; +const u8 gUnknown_8358168[128] = {}; +const u8 gUnknown_83581E8[32] = {}; +const u8 gUnknown_8358208[128] = {}; +const u8 gUnknown_8358288[128] = {}; +const u8 gUnknown_8358308[128] = {}; +const u8 gUnknown_8358388[32] = {}; +const u8 gUnknown_83583A8[128] = {}; +const u8 gUnknown_8358428[128] = {}; +const u8 gUnknown_83584A8[128] = {}; +const u8 gUnknown_8358528[32] = {}; +const u8 gUnknown_8358548[128] = {}; +const u8 gUnknown_83585C8[128] = {}; +const u8 gUnknown_8358648[128] = {}; +const u8 gUnknown_83586C8[32] = {}; +const u8 gUnknown_83586E8[128] = {}; +const u8 gUnknown_8358768[128] = {}; +const u8 gUnknown_83587E8[128] = {}; +const u8 gUnknown_8358868[32] = {}; +const u8 gUnknown_8358888[128] = {}; +const u8 gUnknown_8358908[128] = {}; +const u8 gUnknown_8358988[128] = {}; +const u8 gUnknown_8358A08[32] = {}; +const u8 gUnknown_8358A28[128] = {}; +const u8 gUnknown_8358AA8[128] = {}; +const u8 gUnknown_8358B28[128] = {}; +const u8 gUnknown_8358BA8[32] = {}; +const u8 gUnknown_8358BC8[128] = {}; +const u8 gUnknown_8358C48[128] = {}; +const u8 gUnknown_8358CC8[128] = {}; +const u8 gUnknown_8358D48[32] = {}; +const u8 gUnknown_8358D68[128] = {}; +const u8 gUnknown_8358DE8[128] = {}; +const u8 gUnknown_8358E68[128] = {}; +const u8 gUnknown_8358EE8[32] = {}; +const u8 gUnknown_8358F08[128] = {}; +const u8 gUnknown_8358F88[128] = {}; +const u8 gUnknown_8359008[128] = {}; +const u8 gUnknown_8359088[32] = {}; +const u8 gUnknown_83590A8[128] = {}; +const u8 gUnknown_8359128[128] = {}; +const u8 gUnknown_83591A8[128] = {}; +const u8 gUnknown_8359228[32] = {}; +const u8 gUnknown_8359248[128] = {}; +const u8 gUnknown_83592C8[128] = {}; +const u8 gUnknown_8359348[128] = {}; +const u8 gUnknown_83593C8[32] = {}; +const u8 gUnknown_83593E8[128] = {}; +const u8 gUnknown_8359468[128] = {}; +const u8 gUnknown_83594E8[128] = {}; +const u8 gUnknown_8359568[32] = {}; +const u8 gUnknown_8359588[] = INCBIN_U8("graphics/door_anims/frame_8359588_1.4bpp", "graphics/door_anims/frame_8359588_2.4bpp"); +const u8 gUnknown_8359688[256] = {}; +const u8 gUnknown_8359788[] = INCBIN_U8("graphics/door_anims/frame_8359788_1.4bpp", "graphics/door_anims/frame_8359788_2.4bpp", "graphics/door_anims/frame_8359788_3.4bpp", "graphics/door_anims/frame_8359788_4.4bpp"); +const u8 gUnknown_8359888[256] = {}; +const u8 gUnknown_8359988[] = INCBIN_U8("graphics/door_anims/frame_8359988_1.4bpp", "graphics/door_anims/frame_8359988_2.4bpp", "graphics/door_anims/frame_8359988_3.4bpp", "graphics/door_anims/frame_8359988_4.4bpp"); +const u8 gUnknown_8359A88[256] = {}; +const u8 gUnknown_8359B88[] = INCBIN_U8("graphics/door_anims/frame_8359B88_1.4bpp", "graphics/door_anims/frame_8359B88_2.4bpp", "graphics/door_anims/frame_8359B88_3.4bpp", "graphics/door_anims/frame_8359B88_4.4bpp"); +const u8 gUnknown_8359C88[32] = {}; +const u8 gUnknown_8359CA8[] = INCBIN_U8("graphics/door_anims/frame_8359CA8_1.4bpp", "graphics/door_anims/frame_8359CA8_2.4bpp", "graphics/door_anims/frame_8359CA8_3.4bpp"); +const u8 gUnknown_8359FA8[32] = {}; +const u8 gUnknown_8359FC8[] = INCBIN_U8("graphics/door_anims/frame_8359FC8_1.4bpp", "graphics/door_anims/frame_8359FC8_2.4bpp", "graphics/door_anims/frame_8359FC8_3.4bpp"); +const u8 gUnknown_835A148[32] = {}; +const u8 gUnknown_835A168[] = INCBIN_U8("graphics/door_anims/frame_835A168_1.4bpp", "graphics/door_anims/frame_835A168_2.4bpp", "graphics/door_anims/frame_835A168_3.4bpp"); +const u8 gUnknown_835A2E8[32] = {}; +const u8 gUnknown_835A308[] = INCBIN_U8("graphics/door_anims/frame_835A308_1.4bpp", "graphics/door_anims/frame_835A308_2.4bpp", "graphics/door_anims/frame_835A308_3.4bpp"); +const u8 gUnknown_835A488[32] = {}; +const u8 gUnknown_835A4A8[] = INCBIN_U8("graphics/door_anims/frame_835A4A8_1.4bpp", "graphics/door_anims/frame_835A4A8_2.4bpp", "graphics/door_anims/frame_835A4A8_3.4bpp"); +const u8 gUnknown_835A628[32] = {}; +const u8 gUnknown_835A648[] = INCBIN_U8("graphics/door_anims/frame_835A648_1.4bpp", "graphics/door_anims/frame_835A648_2.4bpp", "graphics/door_anims/frame_835A648_3.4bpp"); +const u8 gUnknown_835A7C8[32] = {}; +const u8 gUnknown_835A7E8[] = INCBIN_U8("graphics/door_anims/frame_835A7E8_1.4bpp", "graphics/door_anims/frame_835A7E8_2.4bpp", "graphics/door_anims/frame_835A7E8_3.4bpp"); +const u8 gUnknown_835A968[32] = {}; +const u8 gUnknown_835A988[] = INCBIN_U8("graphics/door_anims/frame_835A988_1.4bpp", "graphics/door_anims/frame_835A988_2.4bpp", "graphics/door_anims/frame_835A988_3.4bpp"); +const u8 gUnknown_835AB08[32] = {}; +const u8 gUnknown_835AB28[] = INCBIN_U8("graphics/door_anims/frame_835AB28_1.4bpp", "graphics/door_anims/frame_835AB28_2.4bpp", "graphics/door_anims/frame_835AB28_3.4bpp"); +const u8 gUnknown_835AE28[32] = {}; +const u8 gUnknown_835AE48[] = INCBIN_U8("graphics/door_anims/frame_835AE48_1.4bpp", "graphics/door_anims/frame_835AE48_2.4bpp", "graphics/door_anims/frame_835AE48_3.4bpp"); +const u8 gUnknown_835B148[32] = {}; +const u8 gUnknown_835B168[] = INCBIN_U8("graphics/door_anims/frame_835B168_1.4bpp", "graphics/door_anims/frame_835B168_2.4bpp", "graphics/door_anims/frame_835B168_3.4bpp"); +const u8 gUnknown_835B468[32] = {}; + +const struct DoorAnimFrame sDoorAnimFrames_OpenSmall[] = { + {4, 0xFFFF}, + {4, 0x0000}, + {4, 0x0080}, + {4, 0x0100}, + {} +}; + +const struct DoorAnimFrame sDoorAnimFrames_OpenLarge[] = { + {4, 0xFFFF}, + {4, 0x0000}, + {4, 0x0100}, + {4, 0x0200}, + {} +}; + +const struct DoorAnimFrame sDoorAnimFrames_CloseSmall[] = { + {4, 0x0100}, + {4, 0x0080}, + {4, 0x0000}, + {4, 0xFFFF}, + {} +}; + +const struct DoorAnimFrame sDoorAnimFrames_CloseLarge[] = { + {4, 0x0200}, + {4, 0x0100}, + {4, 0x0000}, + {4, 0xFFFF}, + {} +}; + +const u8 gUnknown_835B4D8[] = {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; +const u8 gUnknown_835B4E0[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +const u8 gUnknown_835B4E8[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +const u8 gUnknown_835B4F0[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +const u8 gUnknown_835B4F8[] = {0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa}; +const u8 gUnknown_835B500[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +const u8 gUnknown_835B508[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +const u8 gUnknown_835B510[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +const u8 gUnknown_835B518[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +const u8 gUnknown_835B520[] = {0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc}; +const u8 gUnknown_835B528[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; +const u8 gUnknown_835B530[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; +const u8 gUnknown_835B538[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; +const u8 gUnknown_835B540[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +const u8 gUnknown_835B548[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +const u8 gUnknown_835B550[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; +const u8 gUnknown_835B558[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +const u8 gUnknown_835B560[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +const u8 gUnknown_835B568[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +const u8 gUnknown_835B570[] = {0xc, 0xc, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; +const u8 gUnknown_835B578[] = {0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7}; +const u8 gUnknown_835B580[] = {0x8, 0x8, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; +const u8 gUnknown_835B588[] = {0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5}; +const u8 gUnknown_835B590[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +const u8 gUnknown_835B598[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +const u8 gUnknown_835B5A0[] = {0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5}; +const u8 gUnknown_835B5A8[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +const u8 gUnknown_835B5B0[] = {0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa}; +const u8 gUnknown_835B5B8[] = {0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5}; +const u8 gUnknown_835B5C0[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +const u8 gUnknown_835B5C8[] = {0x8, 0x8, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; +const u8 gUnknown_835B5D0[] = {0xb, 0xb, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; + +const struct DoorGraphics sDoorGraphics[] = { + {0x03d, 0, 0, gUnknown_8353088, gUnknown_835B4D8}, + {0x062, 1, 0, gUnknown_8353228, gUnknown_835B4E0}, + {0x15b, 1, 0, gUnknown_83533C8, gUnknown_835B4E8}, + {0x2a3, 0, 0, gUnknown_8353568, gUnknown_835B4F0}, + {0x2ac, 0, 0, gUnknown_8353708, gUnknown_835B4F8}, + {0x299, 0, 0, gUnknown_83538A8, gUnknown_835B500}, + {0x2ce, 0, 0, gUnknown_8353A48, gUnknown_835B508}, + {0x284, 0, 0, gUnknown_8353BE8, gUnknown_835B510}, + {0x2bc, 1, 0, gUnknown_8353D88, gUnknown_835B518}, + {0x298, 0, 0, gUnknown_8353F28, gUnknown_835B520}, + {0x2a2, 0, 0, gUnknown_83540C8, gUnknown_835B528}, + {0x29e, 0, 0, gUnknown_8354268, gUnknown_835B530}, + {0x2e1, 0, 0, gUnknown_8354408, gUnknown_835B538}, + {0x294, 1, 0, gUnknown_83545A8, gUnknown_835B540}, + {0x2bf, 0, 0, gUnknown_8354748, gUnknown_835B548}, + {0x2d2, 1, 0, gUnknown_83548E8, gUnknown_835B550}, + {0x2ad, 0, 0, gUnknown_8354A88, gUnknown_835B558}, + {0x297, 0, 0, gUnknown_8359FC8, gUnknown_835B588}, + {0x29b, 1, 0, gUnknown_835A168, gUnknown_835B590}, + {0x2eb, 0, 0, gUnknown_835A308, gUnknown_835B598}, + {0x29a, 0, 0, gUnknown_835A4A8, gUnknown_835B5A0}, + {0x2b9, 0, 0, gUnknown_835A648, gUnknown_835B5A8}, + {0x2af, 0, 0, gUnknown_835A7E8, gUnknown_835B5B0}, + {0x30c, 0, 0, gUnknown_835A988, gUnknown_835B5B8}, + {0x28d, 1, 1, gUnknown_8354C28, gUnknown_835B560}, + {0x2de, 1, 1, gUnknown_8354F48, gUnknown_835B568}, + {0x2ab, 1, 1, gUnknown_8355268, gUnknown_835B570}, + {0x281, 0, 1, gUnknown_8355588, gUnknown_835B578}, + {0x2e2, 1, 1, gUnknown_8359CA8, gUnknown_835B580}, + {0x296, 1, 1, gUnknown_835AB28, gUnknown_835B5C0}, + {0x2c3, 1, 1, gUnknown_835AE48, gUnknown_835B5C8}, + {0x356, 1, 1, gUnknown_835B168, gUnknown_835B5D0}, + {} +}; static void UpdateDrawDoorFrame(const struct DoorGraphics * gfx, const struct DoorAnimFrame * frames, int x, int y) { From 9c27830791ba648ce0c470eac53a100e508247b9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 12 Nov 2019 14:36:06 -0500 Subject: [PATCH 25/33] static rodata --- src/field_door.c | 466 +++++++++++++++++++++++------------------------ 1 file changed, 233 insertions(+), 233 deletions(-) diff --git a/src/field_door.c b/src/field_door.c index a06781834..cbf7a79ea 100644 --- a/src/field_door.c +++ b/src/field_door.c @@ -28,204 +28,204 @@ static bool32 PlayDoorAnimationFrame(const struct DoorGraphics * gfx, const stru static const struct DoorAnimFrame * SeekToEndOfDoorAnim(const struct DoorAnimFrame * frames); static s8 GetDoorOpenType(const struct DoorGraphics * gfx, int x, int y); -const u8 gUnknown_8353088[] = INCBIN_U8("graphics/door_anims/frame_8353088_1.4bpp", "graphics/door_anims/frame_8353088_2.4bpp", "graphics/door_anims/frame_8353088_3.4bpp"); -const u8 gUnknown_8353208[32] = {}; -const u8 gUnknown_8353228[] = INCBIN_U8("graphics/door_anims/frame_8353228_1.4bpp", "graphics/door_anims/frame_8353228_2.4bpp", "graphics/door_anims/frame_8353228_3.4bpp"); -const u8 gUnknown_83533A8[32] = {}; -const u8 gUnknown_83533C8[] = INCBIN_U8("graphics/door_anims/frame_83533C8_1.4bpp", "graphics/door_anims/frame_83533C8_2.4bpp", "graphics/door_anims/frame_83533C8_3.4bpp"); -const u8 gUnknown_8353548[32] = {}; -const u8 gUnknown_8353568[] = INCBIN_U8("graphics/door_anims/frame_8353568_1.4bpp", "graphics/door_anims/frame_8353568_2.4bpp", "graphics/door_anims/frame_8353568_3.4bpp"); -const u8 gUnknown_83536E8[32] = {}; -const u8 gUnknown_8353708[] = INCBIN_U8("graphics/door_anims/frame_8353708_1.4bpp", "graphics/door_anims/frame_8353708_2.4bpp", "graphics/door_anims/frame_8353708_3.4bpp"); -const u8 gUnknown_8353888[32] = {}; -const u8 gUnknown_83538A8[] = INCBIN_U8("graphics/door_anims/frame_83538A8_1.4bpp", "graphics/door_anims/frame_83538A8_2.4bpp", "graphics/door_anims/frame_83538A8_3.4bpp"); -const u8 gUnknown_8353A28[32] = {}; -const u8 gUnknown_8353A48[] = INCBIN_U8("graphics/door_anims/frame_8353A48_1.4bpp", "graphics/door_anims/frame_8353A48_2.4bpp", "graphics/door_anims/frame_8353A48_3.4bpp"); -const u8 gUnknown_8353BC8[32] = {}; -const u8 gUnknown_8353BE8[] = INCBIN_U8("graphics/door_anims/frame_8353BE8_1.4bpp", "graphics/door_anims/frame_8353BE8_2.4bpp", "graphics/door_anims/frame_8353BE8_3.4bpp"); -const u8 gUnknown_8353D68[32] = {}; -const u8 gUnknown_8353D88[] = INCBIN_U8("graphics/door_anims/frame_8353D88_1.4bpp", "graphics/door_anims/frame_8353D88_2.4bpp", "graphics/door_anims/frame_8353D88_3.4bpp"); -const u8 gUnknown_8353F08[32] = {}; -const u8 gUnknown_8353F28[] = INCBIN_U8("graphics/door_anims/frame_8353F28_1.4bpp", "graphics/door_anims/frame_8353F28_2.4bpp", "graphics/door_anims/frame_8353F28_3.4bpp"); -const u8 gUnknown_83540A8[32] = {}; -const u8 gUnknown_83540C8[] = INCBIN_U8("graphics/door_anims/frame_83540C8_1.4bpp", "graphics/door_anims/frame_83540C8_2.4bpp", "graphics/door_anims/frame_83540C8_3.4bpp"); -const u8 gUnknown_8354248[32] = {}; -const u8 gUnknown_8354268[] = INCBIN_U8("graphics/door_anims/frame_8354268_1.4bpp", "graphics/door_anims/frame_8354268_2.4bpp", "graphics/door_anims/frame_8354268_3.4bpp"); -const u8 gUnknown_83543E8[32] = {}; -const u8 gUnknown_8354408[] = INCBIN_U8("graphics/door_anims/frame_8354408_1.4bpp", "graphics/door_anims/frame_8354408_2.4bpp", "graphics/door_anims/frame_8354408_3.4bpp"); -const u8 gUnknown_8354588[32] = {}; -const u8 gUnknown_83545A8[] = INCBIN_U8("graphics/door_anims/frame_83545A8_1.4bpp", "graphics/door_anims/frame_83545A8_2.4bpp", "graphics/door_anims/frame_83545A8_3.4bpp"); -const u8 gUnknown_8354728[32] = {}; -const u8 gUnknown_8354748[] = INCBIN_U8("graphics/door_anims/frame_8354748_1.4bpp", "graphics/door_anims/frame_8354748_2.4bpp", "graphics/door_anims/frame_8354748_3.4bpp"); -const u8 gUnknown_83548C8[32] = {}; -const u8 gUnknown_83548E8[] = INCBIN_U8("graphics/door_anims/frame_83548E8_1.4bpp", "graphics/door_anims/frame_83548E8_2.4bpp", "graphics/door_anims/frame_83548E8_3.4bpp"); -const u8 gUnknown_8354A68[32] = {}; -const u8 gUnknown_8354A88[] = INCBIN_U8("graphics/door_anims/frame_8354A88_1.4bpp", "graphics/door_anims/frame_8354A88_2.4bpp", "graphics/door_anims/frame_8354A88_3.4bpp"); -const u8 gUnknown_8354C08[32] = {}; -const u8 gUnknown_8354C28[] = INCBIN_U8("graphics/door_anims/frame_8354C28_1.4bpp", "graphics/door_anims/frame_8354C28_2.4bpp", "graphics/door_anims/frame_8354C28_3.4bpp"); -const u8 gUnknown_8354F28[32] = {}; -const u8 gUnknown_8354F48[] = INCBIN_U8("graphics/door_anims/frame_8354F48_1.4bpp", "graphics/door_anims/frame_8354F48_2.4bpp", "graphics/door_anims/frame_8354F48_3.4bpp"); -const u8 gUnknown_8355248[32] = {}; -const u8 gUnknown_8355268[] = INCBIN_U8("graphics/door_anims/frame_8355268_1.4bpp", "graphics/door_anims/frame_8355268_2.4bpp", "graphics/door_anims/frame_8355268_3.4bpp"); -const u8 gUnknown_8355568[32] = {}; -const u8 gUnknown_8355588[] = INCBIN_U8("graphics/door_anims/frame_8355588_1.4bpp", "graphics/door_anims/frame_8355588_2.4bpp", "graphics/door_anims/frame_8355588_3.4bpp"); -const u8 gUnknown_8355888[32] = {}; -const u8 gUnknown_83558A8[256] = {}; -const u8 gUnknown_83559A8[256] = {}; -const u8 gUnknown_8355AA8[256] = {}; -const u8 gUnknown_8355BA8[32] = {}; -const u8 gUnknown_8355BC8[256] = {}; -const u8 gUnknown_8355CC8[256] = {}; -const u8 gUnknown_8355DC8[256] = {}; -const u8 gUnknown_8355EC8[32] = {}; -const u8 gUnknown_8355EE8[256] = {}; -const u8 gUnknown_8355FE8[256] = {}; -const u8 gUnknown_83560E8[256] = {}; -const u8 gUnknown_83561E8[32] = {}; -const u8 gUnknown_8356208[256] = {}; -const u8 gUnknown_8356308[256] = {}; -const u8 gUnknown_8356408[256] = {}; -const u8 gUnknown_8356508[32] = {}; -const u8 gUnknown_8356528[256] = {}; -const u8 gUnknown_8356628[256] = {}; -const u8 gUnknown_8356728[256] = {}; -const u8 gUnknown_8356828[32] = {}; -const u8 gUnknown_8356848[256] = {}; -const u8 gUnknown_8356948[256] = {}; -const u8 gUnknown_8356A48[256] = {}; -const u8 gUnknown_8356B48[32] = {}; -const u8 gUnknown_8356B68[256] = {}; -const u8 gUnknown_8356C68[256] = {}; -const u8 gUnknown_8356D68[256] = {}; -const u8 gUnknown_8356E68[32] = {}; -const u8 gUnknown_8356E88[128] = {}; -const u8 gUnknown_8356F08[128] = {}; -const u8 gUnknown_8356F88[128] = {}; -const u8 gUnknown_8357008[32] = {}; -const u8 gUnknown_8357028[128] = {}; -const u8 gUnknown_83570A8[128] = {}; -const u8 gUnknown_8357128[128] = {}; -const u8 gUnknown_83571A8[32] = {}; -const u8 gUnknown_83571C8[128] = {}; -const u8 gUnknown_8357248[128] = {}; -const u8 gUnknown_83572C8[128] = {}; -const u8 gUnknown_8357348[32] = {}; -const u8 gUnknown_8357368[128] = {}; -const u8 gUnknown_83573E8[128] = {}; -const u8 gUnknown_8357468[128] = {}; -const u8 gUnknown_83574E8[32] = {}; -const u8 gUnknown_8357508[128] = {}; -const u8 gUnknown_8357588[128] = {}; -const u8 gUnknown_8357608[128] = {}; -const u8 gUnknown_8357688[32] = {}; -const u8 gUnknown_83576A8[128] = {}; -const u8 gUnknown_8357728[128] = {}; -const u8 gUnknown_83577A8[128] = {}; -const u8 gUnknown_8357828[32] = {}; -const u8 gUnknown_8357848[128] = {}; -const u8 gUnknown_83578C8[128] = {}; -const u8 gUnknown_8357948[128] = {}; -const u8 gUnknown_83579C8[32] = {}; -const u8 gUnknown_83579E8[128] = {}; -const u8 gUnknown_8357A68[128] = {}; -const u8 gUnknown_8357AE8[128] = {}; -const u8 gUnknown_8357B68[32] = {}; -const u8 gUnknown_8357B88[128] = {}; -const u8 gUnknown_8357C08[128] = {}; -const u8 gUnknown_8357C88[128] = {}; -const u8 gUnknown_8357D08[32] = {}; -const u8 gUnknown_8357D28[128] = {}; -const u8 gUnknown_8357DA8[128] = {}; -const u8 gUnknown_8357E28[128] = {}; -const u8 gUnknown_8357EA8[32] = {}; -const u8 gUnknown_8357EC8[128] = {}; -const u8 gUnknown_8357F48[128] = {}; -const u8 gUnknown_8357FC8[128] = {}; -const u8 gUnknown_8358048[32] = {}; -const u8 gUnknown_8358068[128] = {}; -const u8 gUnknown_83580E8[128] = {}; -const u8 gUnknown_8358168[128] = {}; -const u8 gUnknown_83581E8[32] = {}; -const u8 gUnknown_8358208[128] = {}; -const u8 gUnknown_8358288[128] = {}; -const u8 gUnknown_8358308[128] = {}; -const u8 gUnknown_8358388[32] = {}; -const u8 gUnknown_83583A8[128] = {}; -const u8 gUnknown_8358428[128] = {}; -const u8 gUnknown_83584A8[128] = {}; -const u8 gUnknown_8358528[32] = {}; -const u8 gUnknown_8358548[128] = {}; -const u8 gUnknown_83585C8[128] = {}; -const u8 gUnknown_8358648[128] = {}; -const u8 gUnknown_83586C8[32] = {}; -const u8 gUnknown_83586E8[128] = {}; -const u8 gUnknown_8358768[128] = {}; -const u8 gUnknown_83587E8[128] = {}; -const u8 gUnknown_8358868[32] = {}; -const u8 gUnknown_8358888[128] = {}; -const u8 gUnknown_8358908[128] = {}; -const u8 gUnknown_8358988[128] = {}; -const u8 gUnknown_8358A08[32] = {}; -const u8 gUnknown_8358A28[128] = {}; -const u8 gUnknown_8358AA8[128] = {}; -const u8 gUnknown_8358B28[128] = {}; -const u8 gUnknown_8358BA8[32] = {}; -const u8 gUnknown_8358BC8[128] = {}; -const u8 gUnknown_8358C48[128] = {}; -const u8 gUnknown_8358CC8[128] = {}; -const u8 gUnknown_8358D48[32] = {}; -const u8 gUnknown_8358D68[128] = {}; -const u8 gUnknown_8358DE8[128] = {}; -const u8 gUnknown_8358E68[128] = {}; -const u8 gUnknown_8358EE8[32] = {}; -const u8 gUnknown_8358F08[128] = {}; -const u8 gUnknown_8358F88[128] = {}; -const u8 gUnknown_8359008[128] = {}; -const u8 gUnknown_8359088[32] = {}; -const u8 gUnknown_83590A8[128] = {}; -const u8 gUnknown_8359128[128] = {}; -const u8 gUnknown_83591A8[128] = {}; -const u8 gUnknown_8359228[32] = {}; -const u8 gUnknown_8359248[128] = {}; -const u8 gUnknown_83592C8[128] = {}; -const u8 gUnknown_8359348[128] = {}; -const u8 gUnknown_83593C8[32] = {}; -const u8 gUnknown_83593E8[128] = {}; -const u8 gUnknown_8359468[128] = {}; -const u8 gUnknown_83594E8[128] = {}; -const u8 gUnknown_8359568[32] = {}; -const u8 gUnknown_8359588[] = INCBIN_U8("graphics/door_anims/frame_8359588_1.4bpp", "graphics/door_anims/frame_8359588_2.4bpp"); -const u8 gUnknown_8359688[256] = {}; -const u8 gUnknown_8359788[] = INCBIN_U8("graphics/door_anims/frame_8359788_1.4bpp", "graphics/door_anims/frame_8359788_2.4bpp", "graphics/door_anims/frame_8359788_3.4bpp", "graphics/door_anims/frame_8359788_4.4bpp"); -const u8 gUnknown_8359888[256] = {}; -const u8 gUnknown_8359988[] = INCBIN_U8("graphics/door_anims/frame_8359988_1.4bpp", "graphics/door_anims/frame_8359988_2.4bpp", "graphics/door_anims/frame_8359988_3.4bpp", "graphics/door_anims/frame_8359988_4.4bpp"); -const u8 gUnknown_8359A88[256] = {}; -const u8 gUnknown_8359B88[] = INCBIN_U8("graphics/door_anims/frame_8359B88_1.4bpp", "graphics/door_anims/frame_8359B88_2.4bpp", "graphics/door_anims/frame_8359B88_3.4bpp", "graphics/door_anims/frame_8359B88_4.4bpp"); -const u8 gUnknown_8359C88[32] = {}; -const u8 gUnknown_8359CA8[] = INCBIN_U8("graphics/door_anims/frame_8359CA8_1.4bpp", "graphics/door_anims/frame_8359CA8_2.4bpp", "graphics/door_anims/frame_8359CA8_3.4bpp"); -const u8 gUnknown_8359FA8[32] = {}; -const u8 gUnknown_8359FC8[] = INCBIN_U8("graphics/door_anims/frame_8359FC8_1.4bpp", "graphics/door_anims/frame_8359FC8_2.4bpp", "graphics/door_anims/frame_8359FC8_3.4bpp"); -const u8 gUnknown_835A148[32] = {}; -const u8 gUnknown_835A168[] = INCBIN_U8("graphics/door_anims/frame_835A168_1.4bpp", "graphics/door_anims/frame_835A168_2.4bpp", "graphics/door_anims/frame_835A168_3.4bpp"); -const u8 gUnknown_835A2E8[32] = {}; -const u8 gUnknown_835A308[] = INCBIN_U8("graphics/door_anims/frame_835A308_1.4bpp", "graphics/door_anims/frame_835A308_2.4bpp", "graphics/door_anims/frame_835A308_3.4bpp"); -const u8 gUnknown_835A488[32] = {}; -const u8 gUnknown_835A4A8[] = INCBIN_U8("graphics/door_anims/frame_835A4A8_1.4bpp", "graphics/door_anims/frame_835A4A8_2.4bpp", "graphics/door_anims/frame_835A4A8_3.4bpp"); -const u8 gUnknown_835A628[32] = {}; -const u8 gUnknown_835A648[] = INCBIN_U8("graphics/door_anims/frame_835A648_1.4bpp", "graphics/door_anims/frame_835A648_2.4bpp", "graphics/door_anims/frame_835A648_3.4bpp"); -const u8 gUnknown_835A7C8[32] = {}; -const u8 gUnknown_835A7E8[] = INCBIN_U8("graphics/door_anims/frame_835A7E8_1.4bpp", "graphics/door_anims/frame_835A7E8_2.4bpp", "graphics/door_anims/frame_835A7E8_3.4bpp"); -const u8 gUnknown_835A968[32] = {}; -const u8 gUnknown_835A988[] = INCBIN_U8("graphics/door_anims/frame_835A988_1.4bpp", "graphics/door_anims/frame_835A988_2.4bpp", "graphics/door_anims/frame_835A988_3.4bpp"); -const u8 gUnknown_835AB08[32] = {}; -const u8 gUnknown_835AB28[] = INCBIN_U8("graphics/door_anims/frame_835AB28_1.4bpp", "graphics/door_anims/frame_835AB28_2.4bpp", "graphics/door_anims/frame_835AB28_3.4bpp"); -const u8 gUnknown_835AE28[32] = {}; -const u8 gUnknown_835AE48[] = INCBIN_U8("graphics/door_anims/frame_835AE48_1.4bpp", "graphics/door_anims/frame_835AE48_2.4bpp", "graphics/door_anims/frame_835AE48_3.4bpp"); -const u8 gUnknown_835B148[32] = {}; -const u8 gUnknown_835B168[] = INCBIN_U8("graphics/door_anims/frame_835B168_1.4bpp", "graphics/door_anims/frame_835B168_2.4bpp", "graphics/door_anims/frame_835B168_3.4bpp"); -const u8 gUnknown_835B468[32] = {}; +static const u8 gUnknown_8353088[] = INCBIN_U8("graphics/door_anims/frame_8353088_1.4bpp", "graphics/door_anims/frame_8353088_2.4bpp", "graphics/door_anims/frame_8353088_3.4bpp"); +static const u8 gUnknown_8353208[32] = {}; +static const u8 gUnknown_8353228[] = INCBIN_U8("graphics/door_anims/frame_8353228_1.4bpp", "graphics/door_anims/frame_8353228_2.4bpp", "graphics/door_anims/frame_8353228_3.4bpp"); +static const u8 gUnknown_83533A8[32] = {}; +static const u8 gUnknown_83533C8[] = INCBIN_U8("graphics/door_anims/frame_83533C8_1.4bpp", "graphics/door_anims/frame_83533C8_2.4bpp", "graphics/door_anims/frame_83533C8_3.4bpp"); +static const u8 gUnknown_8353548[32] = {}; +static const u8 gUnknown_8353568[] = INCBIN_U8("graphics/door_anims/frame_8353568_1.4bpp", "graphics/door_anims/frame_8353568_2.4bpp", "graphics/door_anims/frame_8353568_3.4bpp"); +static const u8 gUnknown_83536E8[32] = {}; +static const u8 gUnknown_8353708[] = INCBIN_U8("graphics/door_anims/frame_8353708_1.4bpp", "graphics/door_anims/frame_8353708_2.4bpp", "graphics/door_anims/frame_8353708_3.4bpp"); +static const u8 gUnknown_8353888[32] = {}; +static const u8 gUnknown_83538A8[] = INCBIN_U8("graphics/door_anims/frame_83538A8_1.4bpp", "graphics/door_anims/frame_83538A8_2.4bpp", "graphics/door_anims/frame_83538A8_3.4bpp"); +static const u8 gUnknown_8353A28[32] = {}; +static const u8 gUnknown_8353A48[] = INCBIN_U8("graphics/door_anims/frame_8353A48_1.4bpp", "graphics/door_anims/frame_8353A48_2.4bpp", "graphics/door_anims/frame_8353A48_3.4bpp"); +static const u8 gUnknown_8353BC8[32] = {}; +static const u8 gUnknown_8353BE8[] = INCBIN_U8("graphics/door_anims/frame_8353BE8_1.4bpp", "graphics/door_anims/frame_8353BE8_2.4bpp", "graphics/door_anims/frame_8353BE8_3.4bpp"); +static const u8 gUnknown_8353D68[32] = {}; +static const u8 gUnknown_8353D88[] = INCBIN_U8("graphics/door_anims/frame_8353D88_1.4bpp", "graphics/door_anims/frame_8353D88_2.4bpp", "graphics/door_anims/frame_8353D88_3.4bpp"); +static const u8 gUnknown_8353F08[32] = {}; +static const u8 gUnknown_8353F28[] = INCBIN_U8("graphics/door_anims/frame_8353F28_1.4bpp", "graphics/door_anims/frame_8353F28_2.4bpp", "graphics/door_anims/frame_8353F28_3.4bpp"); +static const u8 gUnknown_83540A8[32] = {}; +static const u8 gUnknown_83540C8[] = INCBIN_U8("graphics/door_anims/frame_83540C8_1.4bpp", "graphics/door_anims/frame_83540C8_2.4bpp", "graphics/door_anims/frame_83540C8_3.4bpp"); +static const u8 gUnknown_8354248[32] = {}; +static const u8 gUnknown_8354268[] = INCBIN_U8("graphics/door_anims/frame_8354268_1.4bpp", "graphics/door_anims/frame_8354268_2.4bpp", "graphics/door_anims/frame_8354268_3.4bpp"); +static const u8 gUnknown_83543E8[32] = {}; +static const u8 gUnknown_8354408[] = INCBIN_U8("graphics/door_anims/frame_8354408_1.4bpp", "graphics/door_anims/frame_8354408_2.4bpp", "graphics/door_anims/frame_8354408_3.4bpp"); +static const u8 gUnknown_8354588[32] = {}; +static const u8 gUnknown_83545A8[] = INCBIN_U8("graphics/door_anims/frame_83545A8_1.4bpp", "graphics/door_anims/frame_83545A8_2.4bpp", "graphics/door_anims/frame_83545A8_3.4bpp"); +static const u8 gUnknown_8354728[32] = {}; +static const u8 gUnknown_8354748[] = INCBIN_U8("graphics/door_anims/frame_8354748_1.4bpp", "graphics/door_anims/frame_8354748_2.4bpp", "graphics/door_anims/frame_8354748_3.4bpp"); +static const u8 gUnknown_83548C8[32] = {}; +static const u8 gUnknown_83548E8[] = INCBIN_U8("graphics/door_anims/frame_83548E8_1.4bpp", "graphics/door_anims/frame_83548E8_2.4bpp", "graphics/door_anims/frame_83548E8_3.4bpp"); +static const u8 gUnknown_8354A68[32] = {}; +static const u8 gUnknown_8354A88[] = INCBIN_U8("graphics/door_anims/frame_8354A88_1.4bpp", "graphics/door_anims/frame_8354A88_2.4bpp", "graphics/door_anims/frame_8354A88_3.4bpp"); +static const u8 gUnknown_8354C08[32] = {}; +static const u8 gUnknown_8354C28[] = INCBIN_U8("graphics/door_anims/frame_8354C28_1.4bpp", "graphics/door_anims/frame_8354C28_2.4bpp", "graphics/door_anims/frame_8354C28_3.4bpp"); +static const u8 gUnknown_8354F28[32] = {}; +static const u8 gUnknown_8354F48[] = INCBIN_U8("graphics/door_anims/frame_8354F48_1.4bpp", "graphics/door_anims/frame_8354F48_2.4bpp", "graphics/door_anims/frame_8354F48_3.4bpp"); +static const u8 gUnknown_8355248[32] = {}; +static const u8 gUnknown_8355268[] = INCBIN_U8("graphics/door_anims/frame_8355268_1.4bpp", "graphics/door_anims/frame_8355268_2.4bpp", "graphics/door_anims/frame_8355268_3.4bpp"); +static const u8 gUnknown_8355568[32] = {}; +static const u8 gUnknown_8355588[] = INCBIN_U8("graphics/door_anims/frame_8355588_1.4bpp", "graphics/door_anims/frame_8355588_2.4bpp", "graphics/door_anims/frame_8355588_3.4bpp"); +static const u8 gUnknown_8355888[32] = {}; +static const u8 gUnknown_83558A8[256] = {}; +static const u8 gUnknown_83559A8[256] = {}; +static const u8 gUnknown_8355AA8[256] = {}; +static const u8 gUnknown_8355BA8[32] = {}; +static const u8 gUnknown_8355BC8[256] = {}; +static const u8 gUnknown_8355CC8[256] = {}; +static const u8 gUnknown_8355DC8[256] = {}; +static const u8 gUnknown_8355EC8[32] = {}; +static const u8 gUnknown_8355EE8[256] = {}; +static const u8 gUnknown_8355FE8[256] = {}; +static const u8 gUnknown_83560E8[256] = {}; +static const u8 gUnknown_83561E8[32] = {}; +static const u8 gUnknown_8356208[256] = {}; +static const u8 gUnknown_8356308[256] = {}; +static const u8 gUnknown_8356408[256] = {}; +static const u8 gUnknown_8356508[32] = {}; +static const u8 gUnknown_8356528[256] = {}; +static const u8 gUnknown_8356628[256] = {}; +static const u8 gUnknown_8356728[256] = {}; +static const u8 gUnknown_8356828[32] = {}; +static const u8 gUnknown_8356848[256] = {}; +static const u8 gUnknown_8356948[256] = {}; +static const u8 gUnknown_8356A48[256] = {}; +static const u8 gUnknown_8356B48[32] = {}; +static const u8 gUnknown_8356B68[256] = {}; +static const u8 gUnknown_8356C68[256] = {}; +static const u8 gUnknown_8356D68[256] = {}; +static const u8 gUnknown_8356E68[32] = {}; +static const u8 gUnknown_8356E88[128] = {}; +static const u8 gUnknown_8356F08[128] = {}; +static const u8 gUnknown_8356F88[128] = {}; +static const u8 gUnknown_8357008[32] = {}; +static const u8 gUnknown_8357028[128] = {}; +static const u8 gUnknown_83570A8[128] = {}; +static const u8 gUnknown_8357128[128] = {}; +static const u8 gUnknown_83571A8[32] = {}; +static const u8 gUnknown_83571C8[128] = {}; +static const u8 gUnknown_8357248[128] = {}; +static const u8 gUnknown_83572C8[128] = {}; +static const u8 gUnknown_8357348[32] = {}; +static const u8 gUnknown_8357368[128] = {}; +static const u8 gUnknown_83573E8[128] = {}; +static const u8 gUnknown_8357468[128] = {}; +static const u8 gUnknown_83574E8[32] = {}; +static const u8 gUnknown_8357508[128] = {}; +static const u8 gUnknown_8357588[128] = {}; +static const u8 gUnknown_8357608[128] = {}; +static const u8 gUnknown_8357688[32] = {}; +static const u8 gUnknown_83576A8[128] = {}; +static const u8 gUnknown_8357728[128] = {}; +static const u8 gUnknown_83577A8[128] = {}; +static const u8 gUnknown_8357828[32] = {}; +static const u8 gUnknown_8357848[128] = {}; +static const u8 gUnknown_83578C8[128] = {}; +static const u8 gUnknown_8357948[128] = {}; +static const u8 gUnknown_83579C8[32] = {}; +static const u8 gUnknown_83579E8[128] = {}; +static const u8 gUnknown_8357A68[128] = {}; +static const u8 gUnknown_8357AE8[128] = {}; +static const u8 gUnknown_8357B68[32] = {}; +static const u8 gUnknown_8357B88[128] = {}; +static const u8 gUnknown_8357C08[128] = {}; +static const u8 gUnknown_8357C88[128] = {}; +static const u8 gUnknown_8357D08[32] = {}; +static const u8 gUnknown_8357D28[128] = {}; +static const u8 gUnknown_8357DA8[128] = {}; +static const u8 gUnknown_8357E28[128] = {}; +static const u8 gUnknown_8357EA8[32] = {}; +static const u8 gUnknown_8357EC8[128] = {}; +static const u8 gUnknown_8357F48[128] = {}; +static const u8 gUnknown_8357FC8[128] = {}; +static const u8 gUnknown_8358048[32] = {}; +static const u8 gUnknown_8358068[128] = {}; +static const u8 gUnknown_83580E8[128] = {}; +static const u8 gUnknown_8358168[128] = {}; +static const u8 gUnknown_83581E8[32] = {}; +static const u8 gUnknown_8358208[128] = {}; +static const u8 gUnknown_8358288[128] = {}; +static const u8 gUnknown_8358308[128] = {}; +static const u8 gUnknown_8358388[32] = {}; +static const u8 gUnknown_83583A8[128] = {}; +static const u8 gUnknown_8358428[128] = {}; +static const u8 gUnknown_83584A8[128] = {}; +static const u8 gUnknown_8358528[32] = {}; +static const u8 gUnknown_8358548[128] = {}; +static const u8 gUnknown_83585C8[128] = {}; +static const u8 gUnknown_8358648[128] = {}; +static const u8 gUnknown_83586C8[32] = {}; +static const u8 gUnknown_83586E8[128] = {}; +static const u8 gUnknown_8358768[128] = {}; +static const u8 gUnknown_83587E8[128] = {}; +static const u8 gUnknown_8358868[32] = {}; +static const u8 gUnknown_8358888[128] = {}; +static const u8 gUnknown_8358908[128] = {}; +static const u8 gUnknown_8358988[128] = {}; +static const u8 gUnknown_8358A08[32] = {}; +static const u8 gUnknown_8358A28[128] = {}; +static const u8 gUnknown_8358AA8[128] = {}; +static const u8 gUnknown_8358B28[128] = {}; +static const u8 gUnknown_8358BA8[32] = {}; +static const u8 gUnknown_8358BC8[128] = {}; +static const u8 gUnknown_8358C48[128] = {}; +static const u8 gUnknown_8358CC8[128] = {}; +static const u8 gUnknown_8358D48[32] = {}; +static const u8 gUnknown_8358D68[128] = {}; +static const u8 gUnknown_8358DE8[128] = {}; +static const u8 gUnknown_8358E68[128] = {}; +static const u8 gUnknown_8358EE8[32] = {}; +static const u8 gUnknown_8358F08[128] = {}; +static const u8 gUnknown_8358F88[128] = {}; +static const u8 gUnknown_8359008[128] = {}; +static const u8 gUnknown_8359088[32] = {}; +static const u8 gUnknown_83590A8[128] = {}; +static const u8 gUnknown_8359128[128] = {}; +static const u8 gUnknown_83591A8[128] = {}; +static const u8 gUnknown_8359228[32] = {}; +static const u8 gUnknown_8359248[128] = {}; +static const u8 gUnknown_83592C8[128] = {}; +static const u8 gUnknown_8359348[128] = {}; +static const u8 gUnknown_83593C8[32] = {}; +static const u8 gUnknown_83593E8[128] = {}; +static const u8 gUnknown_8359468[128] = {}; +static const u8 gUnknown_83594E8[128] = {}; +static const u8 gUnknown_8359568[32] = {}; +static const u8 gUnknown_8359588[] = INCBIN_U8("graphics/door_anims/frame_8359588_1.4bpp", "graphics/door_anims/frame_8359588_2.4bpp"); +static const u8 gUnknown_8359688[256] = {}; +static const u8 gUnknown_8359788[] = INCBIN_U8("graphics/door_anims/frame_8359788_1.4bpp", "graphics/door_anims/frame_8359788_2.4bpp", "graphics/door_anims/frame_8359788_3.4bpp", "graphics/door_anims/frame_8359788_4.4bpp"); +static const u8 gUnknown_8359888[256] = {}; +static const u8 gUnknown_8359988[] = INCBIN_U8("graphics/door_anims/frame_8359988_1.4bpp", "graphics/door_anims/frame_8359988_2.4bpp", "graphics/door_anims/frame_8359988_3.4bpp", "graphics/door_anims/frame_8359988_4.4bpp"); +static const u8 gUnknown_8359A88[256] = {}; +static const u8 gUnknown_8359B88[] = INCBIN_U8("graphics/door_anims/frame_8359B88_1.4bpp", "graphics/door_anims/frame_8359B88_2.4bpp", "graphics/door_anims/frame_8359B88_3.4bpp", "graphics/door_anims/frame_8359B88_4.4bpp"); +static const u8 gUnknown_8359C88[32] = {}; +static const u8 gUnknown_8359CA8[] = INCBIN_U8("graphics/door_anims/frame_8359CA8_1.4bpp", "graphics/door_anims/frame_8359CA8_2.4bpp", "graphics/door_anims/frame_8359CA8_3.4bpp"); +static const u8 gUnknown_8359FA8[32] = {}; +static const u8 gUnknown_8359FC8[] = INCBIN_U8("graphics/door_anims/frame_8359FC8_1.4bpp", "graphics/door_anims/frame_8359FC8_2.4bpp", "graphics/door_anims/frame_8359FC8_3.4bpp"); +static const u8 gUnknown_835A148[32] = {}; +static const u8 gUnknown_835A168[] = INCBIN_U8("graphics/door_anims/frame_835A168_1.4bpp", "graphics/door_anims/frame_835A168_2.4bpp", "graphics/door_anims/frame_835A168_3.4bpp"); +static const u8 gUnknown_835A2E8[32] = {}; +static const u8 gUnknown_835A308[] = INCBIN_U8("graphics/door_anims/frame_835A308_1.4bpp", "graphics/door_anims/frame_835A308_2.4bpp", "graphics/door_anims/frame_835A308_3.4bpp"); +static const u8 gUnknown_835A488[32] = {}; +static const u8 gUnknown_835A4A8[] = INCBIN_U8("graphics/door_anims/frame_835A4A8_1.4bpp", "graphics/door_anims/frame_835A4A8_2.4bpp", "graphics/door_anims/frame_835A4A8_3.4bpp"); +static const u8 gUnknown_835A628[32] = {}; +static const u8 gUnknown_835A648[] = INCBIN_U8("graphics/door_anims/frame_835A648_1.4bpp", "graphics/door_anims/frame_835A648_2.4bpp", "graphics/door_anims/frame_835A648_3.4bpp"); +static const u8 gUnknown_835A7C8[32] = {}; +static const u8 gUnknown_835A7E8[] = INCBIN_U8("graphics/door_anims/frame_835A7E8_1.4bpp", "graphics/door_anims/frame_835A7E8_2.4bpp", "graphics/door_anims/frame_835A7E8_3.4bpp"); +static const u8 gUnknown_835A968[32] = {}; +static const u8 gUnknown_835A988[] = INCBIN_U8("graphics/door_anims/frame_835A988_1.4bpp", "graphics/door_anims/frame_835A988_2.4bpp", "graphics/door_anims/frame_835A988_3.4bpp"); +static const u8 gUnknown_835AB08[32] = {}; +static const u8 gUnknown_835AB28[] = INCBIN_U8("graphics/door_anims/frame_835AB28_1.4bpp", "graphics/door_anims/frame_835AB28_2.4bpp", "graphics/door_anims/frame_835AB28_3.4bpp"); +static const u8 gUnknown_835AE28[32] = {}; +static const u8 gUnknown_835AE48[] = INCBIN_U8("graphics/door_anims/frame_835AE48_1.4bpp", "graphics/door_anims/frame_835AE48_2.4bpp", "graphics/door_anims/frame_835AE48_3.4bpp"); +static const u8 gUnknown_835B148[32] = {}; +static const u8 gUnknown_835B168[] = INCBIN_U8("graphics/door_anims/frame_835B168_1.4bpp", "graphics/door_anims/frame_835B168_2.4bpp", "graphics/door_anims/frame_835B168_3.4bpp"); +static const u8 gUnknown_835B468[32] = {}; -const struct DoorAnimFrame sDoorAnimFrames_OpenSmall[] = { +static const struct DoorAnimFrame sDoorAnimFrames_OpenSmall[] = { {4, 0xFFFF}, {4, 0x0000}, {4, 0x0080}, @@ -233,7 +233,7 @@ const struct DoorAnimFrame sDoorAnimFrames_OpenSmall[] = { {} }; -const struct DoorAnimFrame sDoorAnimFrames_OpenLarge[] = { +static const struct DoorAnimFrame sDoorAnimFrames_OpenLarge[] = { {4, 0xFFFF}, {4, 0x0000}, {4, 0x0100}, @@ -241,7 +241,7 @@ const struct DoorAnimFrame sDoorAnimFrames_OpenLarge[] = { {} }; -const struct DoorAnimFrame sDoorAnimFrames_CloseSmall[] = { +static const struct DoorAnimFrame sDoorAnimFrames_CloseSmall[] = { {4, 0x0100}, {4, 0x0080}, {4, 0x0000}, @@ -249,7 +249,7 @@ const struct DoorAnimFrame sDoorAnimFrames_CloseSmall[] = { {} }; -const struct DoorAnimFrame sDoorAnimFrames_CloseLarge[] = { +static const struct DoorAnimFrame sDoorAnimFrames_CloseLarge[] = { {4, 0x0200}, {4, 0x0100}, {4, 0x0000}, @@ -257,40 +257,40 @@ const struct DoorAnimFrame sDoorAnimFrames_CloseLarge[] = { {} }; -const u8 gUnknown_835B4D8[] = {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; -const u8 gUnknown_835B4E0[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; -const u8 gUnknown_835B4E8[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; -const u8 gUnknown_835B4F0[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; -const u8 gUnknown_835B4F8[] = {0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa}; -const u8 gUnknown_835B500[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; -const u8 gUnknown_835B508[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; -const u8 gUnknown_835B510[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; -const u8 gUnknown_835B518[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; -const u8 gUnknown_835B520[] = {0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc}; -const u8 gUnknown_835B528[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; -const u8 gUnknown_835B530[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; -const u8 gUnknown_835B538[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; -const u8 gUnknown_835B540[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; -const u8 gUnknown_835B548[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; -const u8 gUnknown_835B550[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; -const u8 gUnknown_835B558[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; -const u8 gUnknown_835B560[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; -const u8 gUnknown_835B568[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; -const u8 gUnknown_835B570[] = {0xc, 0xc, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; -const u8 gUnknown_835B578[] = {0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7}; -const u8 gUnknown_835B580[] = {0x8, 0x8, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; -const u8 gUnknown_835B588[] = {0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5}; -const u8 gUnknown_835B590[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; -const u8 gUnknown_835B598[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; -const u8 gUnknown_835B5A0[] = {0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5}; -const u8 gUnknown_835B5A8[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; -const u8 gUnknown_835B5B0[] = {0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa}; -const u8 gUnknown_835B5B8[] = {0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5}; -const u8 gUnknown_835B5C0[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; -const u8 gUnknown_835B5C8[] = {0x8, 0x8, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; -const u8 gUnknown_835B5D0[] = {0xb, 0xb, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; +static const u8 gUnknown_835B4D8[] = {0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; +static const u8 gUnknown_835B4E0[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +static const u8 gUnknown_835B4E8[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +static const u8 gUnknown_835B4F0[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +static const u8 gUnknown_835B4F8[] = {0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa}; +static const u8 gUnknown_835B500[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +static const u8 gUnknown_835B508[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +static const u8 gUnknown_835B510[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +static const u8 gUnknown_835B518[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +static const u8 gUnknown_835B520[] = {0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc}; +static const u8 gUnknown_835B528[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; +static const u8 gUnknown_835B530[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; +static const u8 gUnknown_835B538[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; +static const u8 gUnknown_835B540[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +static const u8 gUnknown_835B548[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +static const u8 gUnknown_835B550[] = {0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9, 0x9}; +static const u8 gUnknown_835B558[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +static const u8 gUnknown_835B560[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +static const u8 gUnknown_835B568[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +static const u8 gUnknown_835B570[] = {0xc, 0xc, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; +static const u8 gUnknown_835B578[] = {0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7}; +static const u8 gUnknown_835B580[] = {0x8, 0x8, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; +static const u8 gUnknown_835B588[] = {0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5}; +static const u8 gUnknown_835B590[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +static const u8 gUnknown_835B598[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +static const u8 gUnknown_835B5A0[] = {0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5}; +static const u8 gUnknown_835B5A8[] = {0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}; +static const u8 gUnknown_835B5B0[] = {0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa}; +static const u8 gUnknown_835B5B8[] = {0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5}; +static const u8 gUnknown_835B5C0[] = {0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}; +static const u8 gUnknown_835B5C8[] = {0x8, 0x8, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; +static const u8 gUnknown_835B5D0[] = {0xb, 0xb, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2}; -const struct DoorGraphics sDoorGraphics[] = { +static const struct DoorGraphics sDoorGraphics[] = { {0x03d, 0, 0, gUnknown_8353088, gUnknown_835B4D8}, {0x062, 1, 0, gUnknown_8353228, gUnknown_835B4E0}, {0x15b, 1, 0, gUnknown_83533C8, gUnknown_835B4E8}, From 5cc2701e4721bd885da7d9f01943d396775e51d9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 12 Nov 2019 15:20:54 -0500 Subject: [PATCH 26/33] Knock out a few more incbins --- baserom.ips | Bin 363962 -> 363841 bytes data/clear_save_data_screen.s | 20 +++++++++++++++++--- data/evolution_graphics.s | 3 +++ data/field_tasks.s | 19 +++++++++++++++++-- data/save_failed_screen.s | 2 +- graphics/interface/save_failed_screen.pal | 19 +++++++++++++++++++ 6 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 graphics/interface/save_failed_screen.pal diff --git a/baserom.ips b/baserom.ips index 7c99bf40b99f70e9ff8d76162b54a0b95c0aa7f0..9bea735dd29aca129d8b538b5333e7e31d372451 100644 GIT binary patch delta 39 ucmdlrTkPO0v4$;-`it8$7Bgz`!O%I9y delta 152 zcmX>&OKjI{v4$;-`isp37)(N6vT=mI24WBm#1Ek~i0$}>je~=ki Date: Tue, 12 Nov 2019 15:24:36 -0500 Subject: [PATCH 27/33] Resolve comments on map_name_popup --- include/map_name_popup.h | 2 +- src/map_name_popup.c | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/map_name_popup.h b/include/map_name_popup.h index 6f4a6528c..6fb2f798b 100644 --- a/include/map_name_popup.h +++ b/include/map_name_popup.h @@ -9,6 +9,6 @@ // Exported ROM declarations void HideMapNamePopUpWindow(void); -void CreateMapNamePopupIfNotAlreadyRunning(u8); +void CreateMapNamePopupIfNotAlreadyRunning(bool32 palIntoFadedBuffer); #endif //GUARD_MAP_NAME_POPUP_H diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 361c3a931..fe15cc129 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -14,11 +14,11 @@ #include "constants/flags.h" static void Task_MapNamePopup(u8 taskId); -static u16 MapNamePopupCreateWindow(int a0); -static void MapNamePopupPrintMapNameOnWindow(u16 a0); +static u16 MapNamePopupCreateWindow(bool32 palIntoFadedBuffer); +static void MapNamePopupPrintMapNameOnWindow(u16 windowId); static u8 *MapNamePopupAppendFloorNum(u8 *dest, s8 flags); -void CreateMapNamePopupIfNotAlreadyRunning(int a0) +void CreateMapNamePopupIfNotAlreadyRunning(bool32 palIntoFadedBuffer) { u8 taskId; if (FlagGet(FLAG_SPECIAL_FLAG_0x4000) != TRUE && !(gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3)) @@ -31,7 +31,7 @@ void CreateMapNamePopupIfNotAlreadyRunning(int a0) ChangeBgY(0, 0xFFFFEF7F, 0); gTasks[taskId].data[0] = 0; gTasks[taskId].data[2] = 0; - gTasks[taskId].data[8] = a0; + gTasks[taskId].data[8] = palIntoFadedBuffer; } else { @@ -138,7 +138,7 @@ bool32 IsMapNamePopupTaskActive(void) return FindTaskIdByFunc(Task_MapNamePopup) != 0xFF ? TRUE : FALSE; } -static u16 MapNamePopupCreateWindow(int a0) +static u16 MapNamePopupCreateWindow(bool32 palintoFadedBuffer) { struct WindowTemplate windowTemplate = { .bg = 0, @@ -151,7 +151,7 @@ static u16 MapNamePopupCreateWindow(int a0) }; u16 windowId; u16 r6 = 0x01D; - if (gMapHeader.flags) + if (gMapHeader.flags != 0) { if (gMapHeader.flags != 0x7F) { @@ -165,7 +165,7 @@ static u16 MapNamePopupCreateWindow(int a0) } } windowId = AddWindow(&windowTemplate); - if (a0) + if (palintoFadedBuffer) { LoadPalette(stdpal_get(3), 0xd0, 0x20); } @@ -187,7 +187,7 @@ static void MapNamePopupPrintMapNameOnWindow(u16 windowId) u32 maxWidth = 112; u32 xpos; u8 *ptr = GetMapName(mapName, gMapHeader.regionMapSectionId, 0); - if (gMapHeader.flags) + if (gMapHeader.flags != 0) { ptr = MapNamePopupAppendFloorNum(ptr, gMapHeader.flags); maxWidth = gMapHeader.flags != 0x7F ? 152 : 176; From f04e6737b2073446efa285cfa74a80ee23649afd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 12 Nov 2019 15:30:48 -0500 Subject: [PATCH 28/33] remove declaration of nonexistent map_name_popup routine --- include/map_name_popup.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/include/map_name_popup.h b/include/map_name_popup.h index 6fb2f798b..c8ce02c30 100644 --- a/include/map_name_popup.h +++ b/include/map_name_popup.h @@ -3,12 +3,6 @@ #include "global.h" -// Exported type declarations - -// Exported RAM declarations - -// Exported ROM declarations -void HideMapNamePopUpWindow(void); void CreateMapNamePopupIfNotAlreadyRunning(bool32 palIntoFadedBuffer); #endif //GUARD_MAP_NAME_POPUP_H From 8541a6c717f9b6ed908cf16c0a11c09e5bbc9331 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 13 Nov 2019 09:56:20 -0500 Subject: [PATCH 29/33] Dump battle_anim_status_effects rodata --- baserom.ips | Bin 363841 -> 363408 bytes data/battle_anim_status_effects.s | 104 ++++++++++++++++++++++++++++-- 2 files changed, 100 insertions(+), 4 deletions(-) diff --git a/baserom.ips b/baserom.ips index 9bea735dd29aca129d8b538b5333e7e31d372451..fc3961129ff5ac82c42d91c4ddfb76a8e1e0be75 100644 GIT binary patch delta 29 icmX>&OKie)v4$;-n}4*Y{9*)RCLm_sp7M+3?j!)&Mh?sX delta 445 zcmbO*UF_g2v4$;-n}5`Qe!#effq|KU1&BF-m_77_AvVH1bltRdJn}pO{~11f;A!|^z}sT*fv?TLfTM#2XpRd|kCeKUI>Tuz4rEX8 kmN9V5P@kcG;-ny|gl{u@`^F!PK+FWh%-c8qV7WgD0GvRGVE_OC diff --git a/data/battle_anim_status_effects.s b/data/battle_anim_status_effects.s index 738553830..6e8952131 100644 --- a/data/battle_anim_status_effects.s +++ b/data/battle_anim_status_effects.s @@ -1,14 +1,110 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" .section .rodata .align 2 gUnknown_83BF3E0:: @ 83BF3DC - .incbin "baserom.gba", 0x3BF3E0, 0x174 + obj_image_anim_frame 0, 3 + obj_image_anim_frame 4, 3 + obj_image_anim_frame 8, 3 + obj_image_anim_frame 12, 3 + obj_image_anim_jump 0 + +gSpriteAnimTable_83BF3F4:: @ 83BF3F4 + .4byte gUnknown_83BF3E0 + +gSpriteTemplate_83BF3F8:: @ 83BF3F8 + spr_template 10004, 10004, gOamData_83AC9D0, gSpriteAnimTable_83BF3F4, NULL, gDummySpriteAffineAnimTable, sub_8076F58 + +gSpriteTemplate_83BF410:: @ 83BF410 + spr_template 10004, 10004, gOamData_83AC9D0, gSpriteAnimTable_83BF3F4, NULL, gDummySpriteAffineAnimTable, sub_8076ED8 + +gUnknown_83BF428:: @ 83BF428 + obj_image_anim_frame 0x0000, 3 + obj_image_anim_jump 0x0000 + +gSpriteAnimTable_83BF430:: @ 83BF430 + .4byte gUnknown_83BF428 + +gSpriteTemplate_83BF434:: @ 83BF434 + spr_template 10283, 10283, gOamData_83AC9D8, gSpriteAnimTable_83BF430, NULL, gDummySpriteAffineAnimTable, sub_807729C + +gSpriteTemplate_83BF44C:: @ 83BF44C + spr_template 10283, 10283, gOamData_83AC9D8, gSpriteAnimTable_83BF430, NULL, gDummySpriteAffineAnimTable, sub_8077350 + +gUnknown_83BF464:: @ 83BF464 + obj_image_anim_frame 0x0000, 3 + obj_image_anim_frame 0x0010, 3 + obj_image_anim_frame 0x0020, 3 + obj_image_anim_frame 0x0030, 3 + obj_image_anim_frame 0x0040, 3 + obj_image_anim_end + +gSpriteAnimTable_83BF47C:: @ 83BF47C + .4byte gUnknown_83BF464 + +gSpriteTemplate_83BF480:: @ 83BF480 + spr_template 10071, 10071, gOamData_83AC9D8, gSpriteAnimTable_83BF47C, NULL, gDummySpriteAffineAnimTable, sub_8076FD0 + +gSpriteTemplate_83BF498:: @ 83BF498 + spr_template 10051, 10051, gOamData_83AC9D8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_8076F58 + +gUnknown_83BF4B0:: @ 83BF4B0 + obj_image_anim_frame 0x0000, 5 + obj_image_anim_jump 0x0000 + +gUnknown_83BF4B8:: @ 83BF4B8 + obj_image_anim_frame 0x0000, 5 + obj_image_anim_jump 0x0000 + +gUnknown_83BF4C0:: @ 83BF4C0 + obj_image_anim_frame 0x0000, 5 + obj_image_anim_jump 0x0000 + +gSpriteAniimTable_83BF4C8:: @ 83BF4C8 + .4byte gUnknown_83BF4B0 + .4byte gUnknown_83BF4B8 + .4byte gUnknown_83BF4C0 + +gSpriteTemplate_83BF4D4:: @ 83BF4D4 + spr_template 10135, 10135, gOamData_83AC9D8, gSpriteAniimTable_83BF4C8, NULL, gDummySpriteAffineAnimTable, sub_8076F58 + +gUnknown_83BF4EC:: @ 83BF4EC + obj_image_anim_frame 0x0000, 15 + obj_image_anim_jump 0x0000 + +gSpriteAnimTable_83BF4F4:: @ 83BF4F4 + .4byte gUnknown_83BF4EC + +gUnknown_83BF4F8:: @ 83BF4F8 + obj_rot_scal_anim_frame 0x0060, 0x0060, 0x00, 0 + obj_rot_scal_anim_frame 0x0002, 0x0002, 0x00, 1 + obj_rot_scal_anim_jump 0x0001 + +gSpriteAffineAnimTable_83BF510:: @ 83BF510 + .4byte gUnknown_83BF4F8 + +gSpriteTemplate_83BF514:: @ 83BF514 + spr_template 10004, 10004, gOamData_83ACA90, gSpriteAnimTable_83BF4F4, NULL, gSpriteAffineAnimTable_83BF510, sub_8076ED8 + +gUnknown_83BF52C:: @ 83BF52C + .string "TASK OVER\n" + .string "タスクがオーバーしました$" + + .align 2 +gSubsprites_83BF544:: @ 83BF544 + subsprite 240, 240, 2, 0x00, 64x64 + subsprite 240, 48, 2, 0x40, 64x32 + subsprite 48, 240, 2, 0x60, 32x64 + subsprite 48, 48, 2, 0x80, 32x32 gUnknown_83BF554:: @ 83BF554 - .incbin "baserom.gba", 0x3BF554, 0x8 + .byte 4 + .align 2 + .4byte gSubsprites_83BF544 gUnknown_83BF55C:: @ 83BF55C - .incbin "baserom.gba", 0x3BF55C, 0x18 + spr_template 10010, 10010, gOamData_83ACB00, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy gUnknown_83BF574:: @ 83BF574 - .incbin "baserom.gba", 0x3BF574, 0x18 + spr_template 10136, 10136, gOamData_83AC9C8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_807834C From cf1b984576e62f1f84e71b9442e1271abcba4a00 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 13 Nov 2019 13:34:37 -0500 Subject: [PATCH 30/33] Dump battle anim scripts --- asm/battle_anim.s | 8 +- asm/battle_anim_status_effects.s | 4 +- asm/macros/battle_anim_script.inc | 285 + data/battle_anim_effects_3.s | 131 +- data/battle_anim_effects_misc.s | 628 +- data/battle_anim_scripts.s | 11101 +++++++++++++++++++++++++++- data/battle_anim_special.s | 8 +- 7 files changed, 12108 insertions(+), 57 deletions(-) create mode 100644 asm/macros/battle_anim_script.inc diff --git a/asm/battle_anim.s b/asm/battle_anim.s index d9471c9dd..42d099c4c 100644 --- a/asm/battle_anim.s +++ b/asm/battle_anim.s @@ -118,7 +118,7 @@ DoMoveAnim: @ 807259C ldr r0, _080725CC @ =gBattlerTarget ldrb r0, [r0] strb r0, [r2] - ldr r0, _080725D0 @ =gUnknown_81C68F4 + ldr r0, _080725D0 @ =gBattleAnims_Moves movs r2, 0x1 bl LaunchBattleAnimation pop {r0} @@ -128,7 +128,7 @@ _080725C0: .4byte gBattleAnimAttacker _080725C4: .4byte gBattlerAttacker _080725C8: .4byte gBattleAnimTarget _080725CC: .4byte gBattlerTarget -_080725D0: .4byte gUnknown_81C68F4 +_080725D0: .4byte gBattleAnims_Moves thumb_func_end DoMoveAnim thumb_func_start LaunchBattleAnimation @@ -247,7 +247,7 @@ _080726A6: cmp r0, 0 beq _08072706 movs r4, 0 - ldr r2, _080726E8 @ =gUnknown_81C68EC + ldr r2, _080726E8 @ =gMovesWithQuietBGM b _080726EE .align 2, 0 _080726C0: .4byte gUnknown_2037F18 @@ -260,7 +260,7 @@ _080726D8: .4byte RunAnimScriptCommand _080726DC: .4byte gBattleAnimArgs _080726E0: .4byte 0x0000ffff _080726E4: .4byte gUnknown_2037EEE -_080726E8: .4byte gUnknown_81C68EC +_080726E8: .4byte gMovesWithQuietBGM _080726EC: adds r4, 0x1 _080726EE: diff --git a/asm/battle_anim_status_effects.s b/asm/battle_anim_status_effects.s index c70d88cef..c8b1ddbf5 100644 --- a/asm/battle_anim_status_effects.s +++ b/asm/battle_anim_status_effects.s @@ -905,7 +905,7 @@ LaunchStatusAnimation: @ 807886C strb r4, [r0] ldr r0, _080788AC @ =gBattleAnimTarget strb r4, [r0] - ldr r0, _080788B0 @ =gUnknown_81C6E84 + ldr r0, _080788B0 @ =gBattleAnims_StatusConditions movs r2, 0 bl LaunchBattleAnimation ldr r0, _080788B4 @ =task0A_80788BC @@ -925,7 +925,7 @@ LaunchStatusAnimation: @ 807886C .align 2, 0 _080788A8: .4byte gBattleAnimAttacker _080788AC: .4byte gBattleAnimTarget -_080788B0: .4byte gUnknown_81C6E84 +_080788B0: .4byte gBattleAnims_StatusConditions _080788B4: .4byte task0A_80788BC _080788B8: .4byte gTasks thumb_func_end LaunchStatusAnimation diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc new file mode 100644 index 000000000..5426cdfba --- /dev/null +++ b/asm/macros/battle_anim_script.inc @@ -0,0 +1,285 @@ +@ commands + + .macro loadspritegfx tag:req + .byte 0x0 + .2byte \tag + .endm + + .macro unloadspritegfx tag:req + .byte 0x1 + .2byte \tag + .endm + +.macro createsprite template:req, anim_battler:req, subpriority_offset:req, argv:vararg + .byte 0x02 + .4byte \template + .if \anim_battler == ANIM_TARGET + .byte 0x80 | (\subpriority_offset & 0x7F) + .else + .byte (\subpriority_offset & 0x7F) + .endif + .byte (.Lsprite_\@_2 - .Lsprite_\@_1) / 2 +.Lsprite_\@_1: + .2byte \argv +.Lsprite_\@_2: + .endm + + .macro createvisualtask addr:req, priority:req, argv:vararg + .byte 0x03 + .4byte \addr + .byte \priority + .byte (.Lcreatetask_\@_2 - .Lcreatetask_\@_1) / 2 +.Lcreatetask_\@_1: + .2byte \argv +.Lcreatetask_\@_2: + .endm + + .macro delay param0:req + .byte 0x4 + .byte \param0 + .endm + + .macro waitforvisualfinish + .byte 0x5 + .endm + + .macro hang1 + .byte 0x6 + .endm + + .macro hang2 + .byte 0x7 + .endm + + .macro end + .byte 0x8 + .endm + + .macro playse se:req + .byte 0x9 + .2byte \se + .endm + + .macro monbg battler:req + .byte 0xa + .byte \battler + .endm + + .macro clearmonbg battler:req + .byte 0xb + .byte \battler + .endm + + .macro setalpha eva:req, evb:req + .byte 0x0C + .2byte ((\evb) << 8) | (\eva) + .endm + + .macro blendoff + .byte 0xd + .endm + + .macro call param0:req + .byte 0xe + .4byte \param0 + .endm + + .macro return + .byte 0xf + .endm + + .macro setarg param0:req, param1:req + .byte 0x10 + .byte \param0 + .2byte \param1 + .endm + + .macro choosetwoturnanim param0:req, param1:req + .byte 0x11 + .4byte \param0 + .4byte \param1 + .endm + + .macro jumpifmoveturn param0:req, ptr:req + .byte 0x12 + .byte \param0 + .4byte \ptr + .endm + + .macro goto ptr:req + .byte 0x13 + .4byte \ptr + .endm + + .macro fadetobg bg:req + .byte 0x14 + .byte \bg + .endm + + .macro restorebg + .byte 0x15 + .endm + + .macro waitbgfadeout + .byte 0x16 + .endm + + .macro waitbgfadein + .byte 0x17 + .endm + + .macro changebg bg:req + .byte 0x18 + .byte \bg + .endm + + .macro playsewithpan se:req, pan:req + .byte 0x19 + .2byte \se + .byte \pan + .endm + + .macro setpan pan:req + .byte 0x1a + .byte \pan + .endm + + .macro panse_1B se:req, param1:req, param2:req, param3:req, param4:req + .byte 0x1b + .2byte \se + .byte \param1 + .byte \param2 + .byte \param3 + .byte \param4 + .endm + + .macro loopsewithpan se:req, pan:req, wait:req, times:req + .byte 0x1c + .2byte \se + .byte \pan + .byte \wait + .byte \times + .endm + + .macro waitplaysewithpan se:req, pan:req, wait:req + .byte 0x1d + .2byte \se + .byte \pan + .byte \wait + .endm + + .macro setbldcnt param0:req + .byte 0x1e + .2byte \param0 + .endm + + .macro createsoundtask addr:req, argv:vararg + .byte 0x1F + .4byte \addr + .byte (.Lcreatetask_1F_\@_2 - .Lcreatetask_1F_\@_1) / 2 +.Lcreatetask_1F_\@_1: + .2byte \argv +.Lcreatetask_1F_\@_2: + .endm + + .macro waitsound + .byte 0x20 + .endm + + .macro jumpargeq param0:req, param1:req, ptr:req + .byte 0x21 + .byte \param0 + .2byte \param1 + .4byte \ptr + .endm + + .macro monbg_22 battler:req + .byte 0x22 + .byte \battler + .endm + + .macro clearmonbg_23 battler:req + .byte 0x23 + .byte \battler + .endm + + .macro jumpifcontest ptr:req + .byte 0x24 + .4byte \ptr + .endm + + .macro fadetobgfromset param0:req, param1:req, param2:req + .byte 0x25 + .byte \param0 + .byte \param1 + .byte \param2 + .endm + + .macro panse_26 se:req, param1:req, param2:req, param3:req, param4:req + .byte 0x26 + .2byte \se + .byte \param1 + .byte \param2 + .byte \param3 + .byte \param4 + .endm + + .macro panse_27 se:req, param1:req, param2:req, param3:req, param4:req + .byte 0x27 + .2byte \se + .byte \param1 + .byte \param2 + .byte \param3 + .byte \param4 + .endm + + .macro monbgprio_28 battler:req + .byte 0x28 + .byte \battler + .endm + + .macro monbgprio_29 + .byte 0x29 + .endm + + .macro monbgprio_2A battler:req + .byte 0x2a + .byte \battler + .endm + + .macro invisible battler:req + .byte 0x2b + .byte \battler + .endm + + .macro visible battler:req + .byte 0x2c + .byte \battler + .endm + + .macro doublebattle_2D battler:req + .byte 0x2d + .byte \battler + .endm + + .macro doublebattle_2E battler:req + .byte 0x2e + .byte \battler + .endm + + .macro stopsound + .byte 0x2f + .endm + +@ useful macros + .macro jumpreteq value:req, ptr:req + jumpargeq ARG_RET_ID, \value, \ptr + .endm + + .macro jumprettrue ptr:req + jumpreteq TRUE, \ptr + .endm + + .macro jumpretfalse ptr:req + jumpreteq FALSE, \ptr + .endm diff --git a/data/battle_anim_effects_3.s b/data/battle_anim_effects_3.s index 58fb29794..ebd42dfb5 100644 --- a/data/battle_anim_effects_3.s +++ b/data/battle_anim_effects_3.s @@ -7,13 +7,67 @@ .align 2 gUnknown_83FEDE4:: @ 83FEDE4 - .incbin "baserom.gba", 0x3FEDE4, 0x29C + .incbin "baserom.gba", 0x3FEDE4, 0x1C + +gUnknown_83FEE00:: + .incbin "baserom.gba", 0x3FEE00, 0x18 + +gUnknown_83FEE18:: + .incbin "baserom.gba", 0x3FEE18, 0x18 + +gUnknown_83FEE30:: + .incbin "baserom.gba", 0x3FEE30, 0x2C + +gUnknown_83FEE5C:: + .incbin "baserom.gba", 0x3FEE5C, 0x18 + +gUnknown_83FEE74:: + .incbin "baserom.gba", 0x3FEE74, 0x18 + +gUnknown_83FEE8C:: + .incbin "baserom.gba", 0x3FEE8C, 0x58 + +gUnknown_83FEEE4:: + .incbin "baserom.gba", 0x3FEEE4, 0x18 + +gUnknown_83FEEFC:: + .incbin "baserom.gba", 0x3FEEFC, 0x34 + +gUnknown_83FEF30:: + .incbin "baserom.gba", 0x3FEF30, 0x40 + +gUnknown_83FEF70:: + .incbin "baserom.gba", 0x3FEF70, 0x4C + +gUnknown_83FEFBC:: + .incbin "baserom.gba", 0x3FEFBC, 0x50 + +gUnknown_83FF00C:: + .incbin "baserom.gba", 0x3FF00C, 0x18 + +gUnknown_83FF024:: + .incbin "baserom.gba", 0x3FF024, 0x18 + +gUnknown_83FF03C:: + .incbin "baserom.gba", 0x3FF03C, 0x2C + +gUnknown_83FF068:: + .incbin "baserom.gba", 0x3FF068, 0x18 gUnknown_83FF080:: @ 83FF080 - .incbin "baserom.gba", 0x3FF080, 0xB0 + .incbin "baserom.gba", 0x3FF080, 0x58 + +gUnknown_83FF0D8:: + .incbin "baserom.gba", 0x3FF0D8, 0x40 + +gUnknown_83FF118:: + .incbin "baserom.gba", 0x3FF118, 0x18 gUnknown_83FF130:: @ 83FF130 - .incbin "baserom.gba", 0x3FF130, 0x38 + .incbin "baserom.gba", 0x3FF130, 0x20 + +gUnknown_83FF150:: + .incbin "baserom.gba", 0x3FF150, 0x18 gUnknown_83FF168:: @ 83FF168 .incbin "baserom.gba", 0x3FF168, 0x18 @@ -25,7 +79,10 @@ gUnknown_83FF198:: @ 83FF198 .incbin "baserom.gba", 0x3FF198, 0x28 gUnknown_83FF1C0:: @ 83FF1C0 - .incbin "baserom.gba", 0x3FF1C0, 0x50 + .incbin "baserom.gba", 0x3FF1C0, 0x38 + +gUnknown_83FF1F8:: + .incbin "baserom.gba", 0x3FF1F8, 0x18 gUnknown_83FF210:: @ 83FF210 .incbin "baserom.gba", 0x3FF210, 0x30 @@ -43,10 +100,34 @@ gUnknown_83FF288:: @ 83FF288 .incbin "baserom.gba", 0x3FF288, 0x8 gUnknown_83FF290:: @ 83FF290 - .incbin "baserom.gba", 0x3FF290, 0x140 + .incbin "baserom.gba", 0x3FF290, 0x20 + +gUnknown_83FF2B0:: + .incbin "baserom.gba", 0x3FF2B0, 0x74 + +gUnknown_83FF324:: + .incbin "baserom.gba", 0x3FF324, 0x4C + +gUnknown_83FF370:: + .incbin "baserom.gba", 0x3FF370, 0x18 + +gUnknown_83FF388:: + .incbin "baserom.gba", 0x3FF388, 0x18 + +gUnknown_83FF3A0:: + .incbin "baserom.gba", 0x3FF3A0, 0x18 + +gUnknown_83FF3B8:: + .incbin "baserom.gba", 0x3FF3B8, 0x18 gUnknown_83FF3D0:: @ 83FF3D0 - .incbin "baserom.gba", 0x3FF3D0, 0x15C + .incbin "baserom.gba", 0x3FF3D0, 0x9C + +gUnknown_83FF46C:: + .incbin "baserom.gba", 0x3FF46C, 0xA8 + +gUnknown_83FF514:: + .incbin "baserom.gba", 0x3FF514, 0x18 gUnknown_83FF52C:: @ 83FF52C .incbin "baserom.gba", 0x3FF52C, 0x20 @@ -55,16 +136,46 @@ gUnknown_83FF54C:: @ 83FF54C .incbin "baserom.gba", 0x3FF54C, 0x18 gUnknown_83FF564:: @ 83FF564 - .incbin "baserom.gba", 0x3FF564, 0x68 + .incbin "baserom.gba", 0x3FF564, 0x50 + +gUnknown_83FF5B4:: + .incbin "baserom.gba", 0x3FF5B4, 0x18 gUnknown_83FF5CC:: @ 83FF5CC - .incbin "baserom.gba", 0x3FF5CC, 0x60 + .incbin "baserom.gba", 0x3FF5CC, 0x18 + +gUnknown_83FF5E4:: + .incbin "baserom.gba", 0x3FF5E4, 0x48 gUnknown_83FF62C:: @ 83FF62C - .incbin "baserom.gba", 0x3FF62C, 0x30 + .incbin "baserom.gba", 0x3FF62C, 0x18 + +gUnknown_83FF644:: + .incbin "baserom.gba", 0x3FF644, 0x18 gUnknown_83FF65C:: @ 83FF65C - .incbin "baserom.gba", 0x3FF65C, 0x14C + .incbin "baserom.gba", 0x3FF65C, 0x18 + +gUnknown_83FF674:: + .incbin "baserom.gba", 0x3FF674, 0x18 + +gUnknown_83FF68C:: + .incbin "baserom.gba", 0x3FF68C, 0x18 + +gUnknown_83FF6A4:: + .incbin "baserom.gba", 0x3FF6A4, 0x18 + +gUnknown_83FF6BC:: + .incbin "baserom.gba", 0x3FF6BC, 0x30 + +gUnknown_83FF6EC:: + .incbin "baserom.gba", 0x3FF6EC, 0x78 + +gUnknown_83FF764:: + .incbin "baserom.gba", 0x3FF764, 0x2C + +gUnknown_83FF790:: + .incbin "baserom.gba", 0x3FF790, 0x18 gUnknown_83FF7A8:: @ 83FF7A8 .incbin "baserom.gba", 0x3FF7A8, 0x30 diff --git a/data/battle_anim_effects_misc.s b/data/battle_anim_effects_misc.s index 6eed66f09..1a1e53826 100644 --- a/data/battle_anim_effects_misc.s +++ b/data/battle_anim_effects_misc.s @@ -7,7 +7,16 @@ .align 2 gUnknown_83E2964:: @ 83E2964 - .incbin "baserom.gba", 0x3E2964, 0x74 + .incbin "baserom.gba", 0x3E2964, 0x2C + +gUnknown_83E2990:: + .incbin "baserom.gba", 0x3E2990, 0x18 + +gUnknown_83E29A8:: + .incbin "baserom.gba", 0x3E29A8, 0x18 + +gUnknown_83E29C0:: + .incbin "baserom.gba", 0x3E29C0, 0x18 gAnimCmd_83E29D8:: obj_image_anim_frame 0, 1 @@ -76,46 +85,295 @@ gUnknown_83E2A70:: gUnknown_83E2A88:: @ 83E2A88 spr_template 10147, 10147, gOamData_83AC9C8, gSpriteAnimTable_83E2A3C, NULL, gDummySpriteAffineAnimTable, sub_80A2430 - .incbin "baserom.gba", 0x3E2AA0, 0x4D8 + .incbin "baserom.gba", 0x3E2AA0, 0x1C + +gUnknown_83E2ABC:: + .incbin "baserom.gba", 0x3E2ABC, 0x2C + +gUnknown_83E2AE8:: + .incbin "baserom.gba", 0x3E2AE8, 0x18 + +gUnknown_83E2B00:: + .incbin "baserom.gba", 0x3E2B00, 0x34 + +gUnknown_83E2B34:: + .incbin "baserom.gba", 0x3E2B34, 0x30 + +gUnknown_83E2B64:: + .incbin "baserom.gba", 0x3E2B64, 0x30 + +gUnknown_83E2B94:: + .incbin "baserom.gba", 0x3E2B94, 0x18 + +gUnknown_83E2BAC:: + .incbin "baserom.gba", 0x3E2BAC, 0x5C + +gUnknown_83E2C08:: + .incbin "baserom.gba", 0x3E2C08, 0x18 + +gUnknown_83E2C20:: + .incbin "baserom.gba", 0x3E2C20, 0x30 + +gUnknown_83E2C50:: + .incbin "baserom.gba", 0x3E2C50, 0x2C + +gUnknown_83E2C7C:: + .incbin "baserom.gba", 0x3E2C7C, 0x90 + +gUnknown_83E2D0C:: + .incbin "baserom.gba", 0x3E2D0C, 0x48 + +gUnknown_83E2D54:: + .incbin "baserom.gba", 0x3E2D54, 0x70 + +gUnknown_83E2DC4:: + .incbin "baserom.gba", 0x3E2DC4, 0x18 + +gUnknown_83E2DDC:: + .incbin "baserom.gba", 0x3E2DDC, 0x28 + +gUnknown_83E2E04:: + .incbin "baserom.gba", 0x3E2E04, 0x84 + +gUnknown_83E2E88:: + .incbin "baserom.gba", 0x3E2E88, 0x18 + +gUnknown_83E2EA0:: + .incbin "baserom.gba", 0x3E2EA0, 0x30 + +gUnknown_83E2ED0:: + .incbin "baserom.gba", 0x3E2ED0, 0x18 + +gUnknown_83E2EE8:: + .incbin "baserom.gba", 0x3E2EE8, 0x78 + +gUnknown_83E2F60:: + .incbin "baserom.gba", 0x3E2F60, 0x18 gUnknown_83E2F78:: @ 83E2F78 .incbin "baserom.gba", 0x3E2F78, 0x78 gUnknown_83E2FF0:: @ 83E2FF0 - .incbin "baserom.gba", 0x3E2FF0, 0x100 + .incbin "baserom.gba", 0x3E2FF0, 0x34 + +gUnknown_83E3024:: + .incbin "baserom.gba", 0x3E3024, 0x18 + +gUnknown_83E303C:: + .incbin "baserom.gba", 0x3E303C, 0x6C + +gUnknown_83E30A8:: + .incbin "baserom.gba", 0x3E30A8, 0x18 + +gUnknown_83E30C0:: + .incbin "baserom.gba", 0x3E30C0, 0x18 + +gUnknown_83E30D8:: + .incbin "baserom.gba", 0x3E30D8, 0x18 gUnknown_83E30F0:: @ 83E30F0 - .incbin "baserom.gba", 0x3E30F0, 0x458 + .incbin "baserom.gba", 0x3E30F0, 0x10 + +gUnknown_83E3100:: + .incbin "baserom.gba", 0x3E3100, 0x48 + +gUnknown_83E3148:: + .incbin "baserom.gba", 0x3E3148, 0x18 + +gUnknown_83E3160:: + .incbin "baserom.gba", 0x3E3160, 0x134 + +gUnknown_83E3294:: + .incbin "baserom.gba", 0x3E3294, 0x18 + +gUnknown_83E32AC:: + .incbin "baserom.gba", 0x3E32AC, 0xA8 + +gUnknown_83E3354:: + .incbin "baserom.gba", 0x3E3354, 0x60 + +gUnknown_83E33B4:: + .incbin "baserom.gba", 0x3E33B4, 0x40 + +gUnknown_83E33F4:: + .incbin "baserom.gba", 0x3E33F4, 0x18 + +gUnknown_83E340C:: + .incbin "baserom.gba", 0x3E340C, 0xF4 + +gUnknown_83E3500:: + .incbin "baserom.gba", 0x3E3500, 0x18 + +gUnknown_83E3518:: + .incbin "baserom.gba", 0x3E3518, 0x18 + +gUnknown_83E3530:: + .incbin "baserom.gba", 0x3E3530, 0x18 gUnknown_83E3548:: @ 83E3548 - .incbin "baserom.gba", 0x3E3548, 0x1EC + .incbin "baserom.gba", 0x3E3548, 0x8 + +gUnknown_83E3550:: + .incbin "baserom.gba", 0x3E3550, 0x54 + +gUnknown_83E35A4:: + .incbin "baserom.gba", 0x3E35A4, 0x18 + +gUnknown_83E35BC:: + .incbin "baserom.gba", 0x3E35BC, 0x18 + +gUnknown_83E35D4:: + .incbin "baserom.gba", 0x3E35D4, 0x30 + +gUnknown_83E3604:: + .incbin "baserom.gba", 0x3E3604, 0x58 + +gUnknown_83E365C:: + .incbin "baserom.gba", 0x3E365C, 0x18 + +gUnknown_83E3674:: + .incbin "baserom.gba", 0x3E3674, 0x34 + +gUnknown_83E36A8:: + .incbin "baserom.gba", 0x3E36A8, 0x44 + +gUnknown_83E36EC:: + .incbin "baserom.gba", 0x3E36EC, 0x30 + +gUnknown_83E371C:: + .incbin "baserom.gba", 0x3E371C, 0x18 gUnknown_83E3734:: @ 83E3734 .incbin "baserom.gba", 0x3E3734, 0x30 gUnknown_83E3764:: @ 83E3764 - .incbin "baserom.gba", 0x3E3764, 0x134 + .incbin "baserom.gba", 0x3E3764, 0x40 + +gUnknown_83E37A4:: + .incbin "baserom.gba", 0x3E37A4, 0x18 + +gUnknown_83E37BC:: + .incbin "baserom.gba", 0x3E37BC, 0x30 + +gUnknown_83E37EC:: + .incbin "baserom.gba", 0x3E37EC, 0x94 + +gUnknown_83E3880:: + .incbin "baserom.gba", 0x3E3880, 0x18 gUnknown_83E3898:: @ 83E3898 - .incbin "baserom.gba", 0x3E3898, 0xF4 + .incbin "baserom.gba", 0x3E3898, 0x30 + +gUnknown_83E38C8:: + .incbin "baserom.gba", 0x3E38C8, 0x18 + +gUnknown_83E38E0:: + .incbin "baserom.gba", 0x3E38E0, 0x34 + +gUnknown_83E3914:: + .incbin "baserom.gba", 0x3E3914, 0x78 gUnknown_83E398C:: @ 83E398C - .incbin "baserom.gba", 0x3E398C, 0x29C + .incbin "baserom.gba", 0x3E398C, 0xA8 + +gUnknown_83E3A34:: + .incbin "baserom.gba", 0x3E3A34, 0x18 + +gUnknown_83E3A4C:: + .incbin "baserom.gba", 0x3E3A4C, 0x78 + +gUnknown_83E3AC4:: + .incbin "baserom.gba", 0x3E3AC4, 0xF8 + +gUnknown_83E3BBC:: + .incbin "baserom.gba", 0x3E3BBC, 0x3C + +gUnknown_83E3BF8:: + .incbin "baserom.gba", 0x3E3BF8, 0x18 + +gUnknown_83E3C10:: + .incbin "baserom.gba", 0x3E3C10, 0x18 gUnknown_83E3C28:: @ 83E3C28 - .incbin "baserom.gba", 0x3E3C28, 0xF0 + .incbin "baserom.gba", 0x3E3C28, 0x78 + +gUnknown_83E3CA0:: + .incbin "baserom.gba", 0x3E3CA0, 0x18 + +gUnknown_83E3CB8:: + .incbin "baserom.gba", 0x3E3CB8, 0x18 + +gUnknown_83E3CD0:: + .incbin "baserom.gba", 0x3E3CD0, 0x18 + +gUnknown_83E3CE8:: + .incbin "baserom.gba", 0x3E3CE8, 0x18 + +gUnknown_83E3D00:: + .incbin "baserom.gba", 0x3E3D00, 0x18 gUnknown_83E3D18:: @ 83E3D18 - .incbin "baserom.gba", 0x3E3D18, 0x148 + .incbin "baserom.gba", 0x3E3D18, 0x38 + +gUnknown_83E3D50:: + .incbin "baserom.gba", 0x3E3D50, 0x18 + +gUnknown_83E3D68:: + .incbin "baserom.gba", 0x3E3D68, 0x2C + +gUnknown_83E3D94:: + .incbin "baserom.gba", 0x3E3D94, 0x34 + +gUnknown_83E3DC8:: + .incbin "baserom.gba", 0x3E3DC8, 0x40 + +gUnknown_83E3E08:: + .incbin "baserom.gba", 0x3E3E08, 0x40 + +gUnknown_83E3E48:: + .incbin "baserom.gba", 0x3E3E48, 0x18 gUnknown_83E3E60:: @ 83E3E60 .incbin "baserom.gba", 0x3E3E60, 0x20 gUnknown_83E3E80:: @ 83E3E80 - .incbin "baserom.gba", 0x3E3E80, 0x9C + .incbin "baserom.gba", 0x3E3E80, 0x50 + +gUnknown_83E3ED0:: + .incbin "baserom.gba", 0x3E3ED0, 0x34 + +gUnknown_83E3F04:: + .incbin "baserom.gba", 0x3E3F04, 0x18 gUnknown_83E3F1C:: @ 83E3F1C - .incbin "baserom.gba", 0x3E3F1C, 0x20C + .incbin "baserom.gba", 0x3E3F1C, 0x30 + +gUnknown_83E3F4C:: + .incbin "baserom.gba", 0x3E3F4C, 0x18 + +gUnknown_83E3F64:: + .incbin "baserom.gba", 0x3E3F64, 0x30 + +gUnknown_83E3F94:: + .incbin "baserom.gba", 0x3E3F94, 0x94 + +gUnknown_83E4028:: + .incbin "baserom.gba", 0x3E4028, 0x6C + +gUnknown_83E4094:: + .incbin "baserom.gba", 0x3E4094, 0x34 + +gUnknown_83E40C8:: + .incbin "baserom.gba", 0x3E40C8, 0x18 + +gUnknown_83E40E0:: + .incbin "baserom.gba", 0x3E40E0, 0x18 + +gUnknown_83E40F8:: + .incbin "baserom.gba", 0x3E40F8, 0x18 + +gUnknown_83E4110:: + .incbin "baserom.gba", 0x3E4110, 0x18 gUnknown_83E4128:: @ 83E4128 .incbin "baserom.gba", 0x3E4128, 0x2C @@ -124,31 +382,176 @@ gUnknown_83E4154:: @ 83E4154 .incbin "baserom.gba", 0x3E4154, 0x18 gUnknown_83E416C:: @ 83E416C - .incbin "baserom.gba", 0x3E416C, 0x5C + .incbin "baserom.gba", 0x3E416C, 0x44 + +gUnknown_83E41B0:: + .incbin "baserom.gba", 0x3E41B0, 0x18 gUnknown_83E41C8:: @ 83E41C8 - .incbin "baserom.gba", 0x3E41C8, 0x38 + .incbin "baserom.gba", 0x3E41C8, 0x8 + +gUnknown_83E41D0:: + .incbin "baserom.gba", 0x3E41D0, 0x18 + +gUnknown_83E41E8:: + .incbin "baserom.gba", 0x3E41E8, 0x18 gUnknown_83E4200:: @ 83E4200 - .incbin "baserom.gba", 0x3E4200, 0x210 + .incbin "baserom.gba", 0x3E4200, 0x18 + +gUnknown_83E4218:: + .incbin "baserom.gba", 0x3E4218, 0x18 + +gUnknown_83E4230:: + .incbin "baserom.gba", 0x3E4230, 0x18 + +gUnknown_83E4248:: + .incbin "baserom.gba", 0x3E4248, 0x34 + +gUnknown_83E427C:: + .incbin "baserom.gba", 0x3E427C, 0x18 + +gUnknown_83E4294:: + .incbin "baserom.gba", 0x3E4294, 0x34 + +gUnknown_83E42C8:: + .incbin "baserom.gba", 0x3E42C8, 0x34 + +gUnknown_83E42FC:: + .incbin "baserom.gba", 0x3E42FC, 0x24 + +gUnknown_83E4320:: + .incbin "baserom.gba", 0x3E4320, 0x18 + +gUnknown_83E4338:: + .incbin "baserom.gba", 0x3E4338, 0x30 + +gUnknown_83E4368:: + .incbin "baserom.gba", 0x3E4368, 0x48 + +gUnknown_83E43B0:: + .incbin "baserom.gba", 0x3E43B0, 0x48 + +gUnknown_83E43F8:: + .incbin "baserom.gba", 0x3E43F8, 0x18 gUnknown_83E4410:: @ 83E4410 - .incbin "baserom.gba", 0x3E4410, 0x1488 + .incbin "baserom.gba", 0x3E4410, 0x20 + +gUnknown_83E4430:: + .incbin "baserom.gba", 0x3E4430, 0x54 + +gUnknown_83E4484:: + .incbin "baserom.gba", 0x3E4484, 0x18 + +gUnknown_83E449C:: + .incbin "baserom.gba", 0x3E449C, 0x40 + +gUnknown_83E44DC:: + .incbin "baserom.gba", 0x3E44DC, 0x13BC gUnknown_83E5898:: @ 83E5898 - .incbin "baserom.gba", 0x3E5898, 0xC0 + .incbin "baserom.gba", 0x3E5898, 0x48 + +gUnknown_83E58E0:: + .incbin "baserom.gba", 0x3E58E0, 0x4C + +gUnknown_83E592C:: + .incbin "baserom.gba", 0x3E592C, 0x2C gUnknown_83E5958:: @ 83E5958 - .incbin "baserom.gba", 0x3E5958, 0x188 + .incbin "baserom.gba", 0x3E5958, 0x4 + +gUnknown_83E595C:: + .incbin "baserom.gba", 0x3E595C, 0x18 + +gUnknown_83E5974:: + .incbin "baserom.gba", 0x3E5974, 0x18 + +gUnknown_83E598C:: + .incbin "baserom.gba", 0x3E598C, 0x18 + +gUnknown_83E59A4:: + .incbin "baserom.gba", 0x3E59A4, 0x2C + +gUnknown_83E59D0:: + .incbin "baserom.gba", 0x3E59D0, 0x18 + +gUnknown_83E59E8:: + .incbin "baserom.gba", 0x3E59E8, 0x50 + +gUnknown_83E5A38:: + .incbin "baserom.gba", 0x3E5A38, 0x18 + +gUnknown_83E5A50:: + .incbin "baserom.gba", 0x3E5A50, 0x30 + +gUnknown_83E5A80:: + .incbin "baserom.gba", 0x3E5A80, 0x18 + +gUnknown_83E5A98:: + .incbin "baserom.gba", 0x3E5A98, 0x18 + +gUnknown_83E5AB0:: + .incbin "baserom.gba", 0x3E5AB0, 0x18 + +gUnknown_83E5AC8:: + .incbin "baserom.gba", 0x3E5AC8, 0x18 gUnknown_83E5AE0:: @ 83E5AE0 - .incbin "baserom.gba", 0x3E5AE0, 0xA8 + .incbin "baserom.gba", 0x3E5AE0, 0x90 + +gUnknown_83E5B70:: + .incbin "baserom.gba", 0x3E5B70, 0x18 gUnknown_83E5B88:: @ 83E5B88 - .incbin "baserom.gba", 0x3E5B88, 0x1C0 + .incbin "baserom.gba", 0x3E5B88, 0x18 +gUnknown_83E5BA0:: + .incbin "baserom.gba", 0x3E5BA0, 0x40 + +gUnknown_83E5BE0:: + .incbin "baserom.gba", 0x3E5BE0, 0x18 + +gUnknown_83E5BF8:: + .incbin "baserom.gba", 0x3E5BF8, 0x78 + +gUnknown_83E5C70:: + .incbin "baserom.gba", 0x3E5C70, 0x18 + +gUnknown_83E5C88:: + .incbin "baserom.gba", 0x3E5C88, 0x18 + +gUnknown_83E5CA0:: + .incbin "baserom.gba", 0x3E5CA0, 0x78 + +gUnknown_83E5D18:: + .incbin "baserom.gba", 0x3E5D18, 0x30 + +@ ================ gUnknown_83E5D48:: @ 83E5D48 - .incbin "baserom.gba", 0x3E5D48, 0xE4 + .incbin "baserom.gba", 0x3E5D48, 0x4 + +gUnknown_83E5D4C:: + .incbin "baserom.gba", 0x3E5D4C, 0x18 + +gUnknown_83E5D64:: + .incbin "baserom.gba", 0x3E5D64, 0x18 + +gUnknown_83E5D7C:: + .incbin "baserom.gba", 0x3E5D7C, 0x18 + +gUnknown_83E5D94:: + .incbin "baserom.gba", 0x3E5D94, 0x50 + +gUnknown_83E5DE4:: + .incbin "baserom.gba", 0x3E5DE4, 0x18 + +gUnknown_83E5DFC:: + .incbin "baserom.gba", 0x3E5DFC, 0x18 + +gUnknown_83E5E14:: + .incbin "baserom.gba", 0x3E5E14, 0x18 gUnknown_83E5E2C:: @ 83E5E2C .incbin "baserom.gba", 0x3E5E2C, 0x18 @@ -157,7 +560,16 @@ gUnknown_83E5E44:: @ 83E5E44 .incbin "baserom.gba", 0x3E5E44, 0x2 gUnknown_83E5E46:: @ 83E5E46 - .incbin "baserom.gba", 0x3E5E46, 0xB6 + .incbin "baserom.gba", 0x3E5E46, 0x1A + +gUnknown_83E5E60:: + .incbin "baserom.gba", 0x3E5E60, 0x54 + +gUnknown_83E5EB4:: + .incbin "baserom.gba", 0x3E5EB4, 0x30 + +gUnknown_83E5EE4:: + .incbin "baserom.gba", 0x3E5EE4, 0x18 gUnknown_83E5EFC:: @ 83E5EFC .incbin "baserom.gba", 0x3E5EFC, 0x10 @@ -166,7 +578,25 @@ gUnknown_83E5F0C:: @ 83E5F0C .incbin "baserom.gba", 0x3E5F0C, 0x2C gUnknown_83E5F38:: @ 83E5F38 - .incbin "baserom.gba", 0x3E5F38, 0x168 + .incbin "baserom.gba", 0x3E5F38, 0x8C + +gUnknown_83E5FC4:: + .incbin "baserom.gba", 0x3E5FC4, 0x18 + +gUnknown_83E5FDC:: + .incbin "baserom.gba", 0x3E5FDC, 0x2C + +gUnknown_83E6008:: + .incbin "baserom.gba", 0x3E6008, 0x50 + +gUnknown_83E6058:: + .incbin "baserom.gba", 0x3E6058, 0x18 + +gUnknown_83E6070:: + .incbin "baserom.gba", 0x3E6070, 0x18 + +gUnknown_83E6088:: + .incbin "baserom.gba", 0x3E6088, 0x18 gUnknown_83E60A0:: @ 83E60A0 .incbin "baserom.gba", 0x3E60A0, 0x18 @@ -178,25 +608,163 @@ gUnknown_83E60D0:: @ 83E60D0 .incbin "baserom.gba", 0x3E60D0, 0x50 gUnknown_83E6120:: @ 83E6120 - .incbin "baserom.gba", 0x3E6120, 0x158 + .incbin "baserom.gba", 0x3E6120, 0xB4 + +gUnknown_83E61D4:: + .incbin "baserom.gba", 0x3E61D4, 0x30 + +gUnknown_83E6204:: + .incbin "baserom.gba", 0x3E6204, 0x18 + +gUnknown_83E621C:: + .incbin "baserom.gba", 0x3E621C, 0x5C gUnknown_83E6278:: @ 83E6278 - .incbin "baserom.gba", 0x3E6278, 0x30 + .incbin "baserom.gba", 0x3E6278, 0x18 + +gUnknown_83E6290:: + .incbin "baserom.gba", 0x3E6290, 0x18 gUnknown_83E62A8:: @ 83E62A8 - .incbin "baserom.gba", 0x3E62A8, 0x138 + .incbin "baserom.gba", 0x3E62A8, 0xA0 + +gUnknown_83E6348:: + .incbin "baserom.gba", 0x3E6348, 0x18 + +gUnknown_83E6360:: + .incbin "baserom.gba", 0x3E6360, 0x2C + +gUnknown_83E638C:: + .incbin "baserom.gba", 0x3E638C, 0x18 + +gUnknown_83E63A4:: + .incbin "baserom.gba", 0x3E63A4, 0x3C gUnknown_83E63E0:: @ 83E63E0 - .incbin "baserom.gba", 0x3E63E0, 0xF4 + .incbin "baserom.gba", 0x3E63E0, 0x18 + +gUnknown_83E63F8:: + .incbin "baserom.gba", 0x3E63F8, 0x18 + +gUnknown_83E6410:: + .incbin "baserom.gba", 0x3E6410, 0x18 + +gUnknown_83E6428:: + .incbin "baserom.gba", 0x3E6428, 0x18 + +gUnknown_83E6440:: + .incbin "baserom.gba", 0x3E6440, 0x3C + +gUnknown_83E647C:: + .incbin "baserom.gba", 0x3E647C, 0x28 + +gUnknown_83E64A4:: + .incbin "baserom.gba", 0x3E64A4, 0x18 + +gUnknown_83E64BC:: + .incbin "baserom.gba", 0x3E64BC, 0x18 gUnknown_83E64D4:: @ 83E64D4 - .incbin "baserom.gba", 0x3E64D4, 0x2C + .incbin "baserom.gba", 0x3E64D4, 0x14 + +gUnknown_83E64E8:: + .incbin "baserom.gba", 0x3E64E8, 0x18 gUnknown_83E6500:: @ 83E6500 - .incbin "baserom.gba", 0x3E6500, 0x2C + .incbin "baserom.gba", 0x3E6500, 0x14 + +gUnknown_83E6514:: + .incbin "baserom.gba", 0x3E6514, 0x18 gUnknown_83E652C:: @ 83E652C .incbin "baserom.gba", 0x3E652C, 0x78 gUnknown_83E65A4:: @ 83E65A4 - .incbin "baserom.gba", 0x3E65A4, 0x544 + .incbin "baserom.gba", 0x3E65A4, 0x18 + +gUnknown_83E65BC:: + .incbin "baserom.gba", 0x3E65BC, 0xA0 + +gUnknown_83E665C:: + .incbin "baserom.gba", 0x3E665C, 0x18 + +gUnknown_83E6674:: + .incbin "baserom.gba", 0x3E6674, 0x6C + +gUnknown_83E66E0:: + .incbin "baserom.gba", 0x3E66E0, 0x18 + +gUnknown_83E66F8:: + .incbin "baserom.gba", 0x3E66F8, 0x18 + +gUnknown_83E6710:: + .incbin "baserom.gba", 0x3E6710, 0x18 + +gUnknown_83E6728:: + .incbin "baserom.gba", 0x3E6728, 0x18 + +gUnknown_83E6740:: + .incbin "baserom.gba", 0x3E6740, 0x18 + +gUnknown_83E6758:: + .incbin "baserom.gba", 0x3E6758, 0x34 + +gUnknown_83E678C:: + .incbin "baserom.gba", 0x3E678C, 0x34 + +gUnknown_83E67C0:: + .incbin "baserom.gba", 0x3E67C0, 0x18 + +gUnknown_83E67D8:: + .incbin "baserom.gba", 0x3E67D8, 0x18 + +gUnknown_83E67F0:: + .incbin "baserom.gba", 0x3E67F0, 0x18 + +gUnknown_83E6808:: + .incbin "baserom.gba", 0x3E6808, 0x18 + +gUnknown_83E6820:: + .incbin "baserom.gba", 0x3E6820, 0x44 + +gUnknown_83E6864:: + .incbin "baserom.gba", 0x3E6864, 0x18 + +gUnknown_83E687C:: + .incbin "baserom.gba", 0x3E687C, 0x18 + +gUnknown_83E6894:: + .incbin "baserom.gba", 0x3E6894, 0x18 + +gUnknown_83E68AC:: + .incbin "baserom.gba", 0x3E68AC, 0x54 + +gUnknown_83E6900:: + .incbin "baserom.gba", 0x3E6900, 0x48 + +gUnknown_83E6948:: + .incbin "baserom.gba", 0x3E6948, 0x34 + +gUnknown_83E697C:: + .incbin "baserom.gba", 0x3E697C, 0x30 + +gUnknown_83E69AC:: + .incbin "baserom.gba", 0x3E69AC, 0x74 + +gUnknown_83E6A20:: + .incbin "baserom.gba", 0x3E6A20, 0x18 + +gUnknown_83E6A38:: + .incbin "baserom.gba", 0x3E6A38, 0x18 + +gUnknown_83E6A50:: + .incbin "baserom.gba", 0x3E6A50, 0x34 + +gUnknown_83E6A84:: + .incbin "baserom.gba", 0x3E6A84, 0x34 + +gUnknown_83E6AB8:: + .incbin "baserom.gba", 0x3E6AB8, 0x18 + +gUnknown_83E6AD0:: + .incbin "baserom.gba", 0x3E6AD0, 0x18 diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 4b45f3669..8f5348fd2 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -1,17 +1,11098 @@ +#include "constants/battle.h" +#include "constants/battle_anim.h" +#include "constants/songs.h" +#include "constants/moves.h" + .include "asm/macros.inc" + .include "asm/macros/battle_anim_script.inc" + .section script_data, "aw", %progbits + .align 2 +gMovesWithQuietBGM:: @ 81C68EC + .2byte MOVE_SING + .2byte MOVE_PERISH_SONG + .2byte MOVE_GRASS_WHISTLE + .2byte 0xFFFF -gUnknown_81C68EC:: @ 81C68EC - .incbin "baserom.gba", 0x1C68EC, 0x8 +gBattleAnims_Moves:: + .4byte Move_NONE + .4byte Move_NONE + .4byte Move_KARATE_CHOP + .4byte Move_DOUBLE_SLAP + .4byte Move_COMET_PUNCH + .4byte Move_MEGA_PUNCH + .4byte Move_PAY_DAY + .4byte Move_FIRE_PUNCH + .4byte Move_ICE_PUNCH + .4byte Move_THUNDER_PUNCH + .4byte Move_SCRATCH + .4byte Move_VICE_GRIP + .4byte Move_GUILLOTINE + .4byte Move_RAZOR_WIND + .4byte Move_SWORDS_DANCE + .4byte Move_CUT + .4byte Move_GUST + .4byte Move_WING_ATTACK + .4byte Move_WHIRLWIND + .4byte Move_FLY + .4byte Move_BIND + .4byte Move_SLAM + .4byte Move_VINE_WHIP + .4byte Move_STOMP + .4byte Move_DOUBLE_KICK + .4byte Move_MEGA_KICK + .4byte Move_JUMP_KICK + .4byte Move_ROLLING_KICK + .4byte Move_SAND_ATTACK + .4byte Move_HEADBUTT + .4byte Move_HORN_ATTACK + .4byte Move_FURY_ATTACK + .4byte Move_HORN_DRILL + .4byte Move_TACKLE + .4byte Move_BODY_SLAM + .4byte Move_WRAP + .4byte Move_TAKE_DOWN + .4byte Move_THRASH + .4byte Move_DOUBLE_EDGE + .4byte Move_TAIL_WHIP + .4byte Move_POISON_STING + .4byte Move_TWINEEDLE + .4byte Move_PIN_MISSILE + .4byte Move_LEER + .4byte Move_BITE + .4byte Move_GROWL + .4byte Move_ROAR + .4byte Move_SING + .4byte Move_SUPERSONIC + .4byte Move_SONIC_BOOM + .4byte Move_DISABLE + .4byte Move_ACID + .4byte Move_EMBER + .4byte Move_FLAMETHROWER + .4byte Move_MIST + .4byte Move_WATER_GUN + .4byte Move_HYDRO_PUMP + .4byte Move_SURF + .4byte Move_ICE_BEAM + .4byte Move_BLIZZARD + .4byte Move_PSYBEAM + .4byte Move_BUBBLE_BEAM + .4byte Move_AURORA_BEAM + .4byte Move_HYPER_BEAM + .4byte Move_PECK + .4byte Move_DRILL_PECK + .4byte Move_SUBMISSION + .4byte Move_LOW_KICK + .4byte Move_COUNTER + .4byte Move_SEISMIC_TOSS + .4byte Move_STRENGTH + .4byte Move_ABSORB + .4byte Move_MEGA_DRAIN + .4byte Move_LEECH_SEED + .4byte Move_GROWTH + .4byte Move_RAZOR_LEAF + .4byte Move_SOLAR_BEAM + .4byte Move_POISON_POWDER + .4byte Move_STUN_SPORE + .4byte Move_SLEEP_POWDER + .4byte Move_PETAL_DANCE + .4byte Move_STRING_SHOT + .4byte Move_DRAGON_RAGE + .4byte Move_FIRE_SPIN + .4byte Move_THUNDER_SHOCK + .4byte Move_THUNDERBOLT + .4byte Move_THUNDER_WAVE + .4byte Move_THUNDER + .4byte Move_ROCK_THROW + .4byte Move_EARTHQUAKE + .4byte Move_FISSURE + .4byte Move_DIG + .4byte Move_TOXIC + .4byte Move_CONFUSION + .4byte Move_PSYCHIC + .4byte Move_HYPNOSIS + .4byte Move_MEDITATE + .4byte Move_AGILITY + .4byte Move_QUICK_ATTACK + .4byte Move_RAGE + .4byte Move_TELEPORT + .4byte Move_NIGHT_SHADE + .4byte Move_MIMIC + .4byte Move_SCREECH + .4byte Move_DOUBLE_TEAM + .4byte Move_RECOVER + .4byte Move_HARDEN + .4byte Move_MINIMIZE + .4byte Move_SMOKESCREEN + .4byte Move_CONFUSE_RAY + .4byte Move_WITHDRAW + .4byte Move_DEFENSE_CURL + .4byte Move_BARRIER + .4byte Move_LIGHT_SCREEN + .4byte Move_HAZE + .4byte Move_REFLECT + .4byte Move_FOCUS_ENERGY + .4byte Move_BIDE + .4byte Move_METRONOME + .4byte Move_NONE + .4byte Move_SELF_DESTRUCT + .4byte Move_EGG_BOMB + .4byte Move_LICK + .4byte Move_SMOG + .4byte Move_SLUDGE + .4byte Move_BONE_CLUB + .4byte Move_FIRE_BLAST + .4byte Move_WATERFALL + .4byte Move_CLAMP + .4byte Move_SWIFT + .4byte Move_SKULL_BASH + .4byte Move_SPIKE_CANNON + .4byte Move_CONSTRICT + .4byte Move_AMNESIA + .4byte Move_KINESIS + .4byte Move_SOFT_BOILED + .4byte Move_HI_JUMP_KICK + .4byte Move_GLARE + .4byte Move_DREAM_EATER + .4byte Move_POISON_GAS + .4byte Move_BARRAGE + .4byte Move_LEECH_LIFE + .4byte Move_LOVELY_KISS + .4byte Move_SKY_ATTACK + .4byte Move_TRANSFORM + .4byte Move_BUBBLE + .4byte Move_DIZZY_PUNCH + .4byte Move_SPORE + .4byte Move_FLASH + .4byte Move_PSYWAVE + .4byte Move_SPLASH + .4byte Move_ACID_ARMOR + .4byte Move_CRABHAMMER + .4byte Move_EXPLOSION + .4byte Move_FURY_SWIPES + .4byte Move_BONEMERANG + .4byte Move_REST + .4byte Move_ROCK_SLIDE + .4byte Move_HYPER_FANG + .4byte Move_SHARPEN + .4byte Move_CONVERSION + .4byte Move_TRI_ATTACK + .4byte Move_SUPER_FANG + .4byte Move_SLASH + .4byte Move_SUBSTITUTE + .4byte Move_STRUGGLE + .4byte Move_SKETCH + .4byte Move_TRIPLE_KICK + .4byte Move_THIEF + .4byte Move_SPIDER_WEB + .4byte Move_MIND_READER + .4byte Move_NIGHTMARE + .4byte Move_FLAME_WHEEL + .4byte Move_SNORE + .4byte Move_CURSE + .4byte Move_FLAIL + .4byte Move_CONVERSION_2 + .4byte Move_AEROBLAST + .4byte Move_COTTON_SPORE + .4byte Move_REVERSAL + .4byte Move_SPITE + .4byte Move_POWDER_SNOW + .4byte Move_PROTECT + .4byte Move_MACH_PUNCH + .4byte Move_SCARY_FACE + .4byte Move_FAINT_ATTACK + .4byte Move_SWEET_KISS + .4byte Move_BELLY_DRUM + .4byte Move_SLUDGE_BOMB + .4byte Move_MUD_SLAP + .4byte Move_OCTAZOOKA + .4byte Move_SPIKES + .4byte Move_ZAP_CANNON + .4byte Move_FORESIGHT + .4byte Move_DESTINY_BOND + .4byte Move_PERISH_SONG + .4byte Move_ICY_WIND + .4byte Move_DETECT + .4byte Move_BONE_RUSH + .4byte Move_LOCK_ON + .4byte Move_OUTRAGE + .4byte Move_SANDSTORM + .4byte Move_GIGA_DRAIN + .4byte Move_ENDURE + .4byte Move_CHARM + .4byte Move_ROLLOUT + .4byte Move_FALSE_SWIPE + .4byte Move_SWAGGER + .4byte Move_MILK_DRINK + .4byte Move_SPARK + .4byte Move_FURY_CUTTER + .4byte Move_STEEL_WING + .4byte Move_MEAN_LOOK + .4byte Move_ATTRACT + .4byte Move_SLEEP_TALK + .4byte Move_HEAL_BELL + .4byte Move_RETURN + .4byte Move_PRESENT + .4byte Move_FRUSTRATION + .4byte Move_SAFEGUARD + .4byte Move_PAIN_SPLIT + .4byte Move_SACRED_FIRE + .4byte Move_MAGNITUDE + .4byte Move_DYNAMIC_PUNCH + .4byte Move_MEGAHORN + .4byte Move_DRAGON_BREATH + .4byte Move_BATON_PASS + .4byte Move_ENCORE + .4byte Move_PURSUIT + .4byte Move_RAPID_SPIN + .4byte Move_SWEET_SCENT + .4byte Move_IRON_TAIL + .4byte Move_METAL_CLAW + .4byte Move_VITAL_THROW + .4byte Move_MORNING_SUN + .4byte Move_SYNTHESIS + .4byte Move_MOONLIGHT + .4byte Move_HIDDEN_POWER + .4byte Move_CROSS_CHOP + .4byte Move_TWISTER + .4byte Move_RAIN_DANCE + .4byte Move_SUNNY_DAY + .4byte Move_CRUNCH + .4byte Move_MIRROR_COAT + .4byte Move_PSYCH_UP + .4byte Move_EXTREME_SPEED + .4byte Move_ANCIENT_POWER + .4byte Move_SHADOW_BALL + .4byte Move_FUTURE_SIGHT + .4byte Move_ROCK_SMASH + .4byte Move_WHIRLPOOL + .4byte Move_BEAT_UP + .4byte Move_FAKE_OUT + .4byte Move_UPROAR + .4byte Move_STOCKPILE + .4byte Move_SPIT_UP + .4byte Move_SWALLOW + .4byte Move_HEAT_WAVE + .4byte Move_HAIL + .4byte Move_TORMENT + .4byte Move_FLATTER + .4byte Move_WILL_O_WISP + .4byte Move_MEMENTO + .4byte Move_FACADE + .4byte Move_FOCUS_PUNCH + .4byte Move_SMELLING_SALT + .4byte Move_FOLLOW_ME + .4byte Move_ANCIENT_POWER + .4byte Move_CHARGE + .4byte Move_TAUNT + .4byte Move_HELPING_HAND + .4byte Move_TRICK + .4byte Move_ROLE_PLAY + .4byte Move_WISH + .4byte Move_ASSIST + .4byte Move_INGRAIN + .4byte Move_SUPERPOWER + .4byte Move_MAGIC_COAT + .4byte Move_RECYCLE + .4byte Move_REVENGE + .4byte Move_BRICK_BREAK + .4byte Move_YAWN + .4byte Move_KNOCK_OFF + .4byte Move_ENDEAVOR + .4byte Move_ERUPTION + .4byte Move_SKILL_SWAP + .4byte Move_IMPRISON + .4byte Move_REFRESH + .4byte Move_GRUDGE + .4byte Move_SNATCH + .4byte Move_SECRET_POWER + .4byte Move_DIVE + .4byte Move_ARM_THRUST + .4byte Move_CAMOUFLAGE + .4byte Move_TAIL_GLOW + .4byte Move_LUSTER_PURGE + .4byte Move_MIST_BALL + .4byte Move_FEATHER_DANCE + .4byte Move_TEETER_DANCE + .4byte Move_BLAZE_KICK + .4byte Move_MUD_SPORT + .4byte Move_ICE_BALL + .4byte Move_NEEDLE_ARM + .4byte Move_SLACK_OFF + .4byte Move_HYPER_VOICE + .4byte Move_POISON_FANG + .4byte Move_CRUSH_CLAW + .4byte Move_BLAST_BURN + .4byte Move_HYDRO_CANNON + .4byte Move_METEOR_MASH + .4byte Move_ASTONISH + .4byte Move_WEATHER_BALL + .4byte Move_AROMATHERAPY + .4byte Move_FAKE_TEARS + .4byte Move_AIR_CUTTER + .4byte Move_OVERHEAT + .4byte Move_ODOR_SLEUTH + .4byte Move_ROCK_TOMB + .4byte Move_SILVER_WIND + .4byte Move_METAL_SOUND + .4byte Move_GRASS_WHISTLE + .4byte Move_TICKLE + .4byte Move_COSMIC_POWER + .4byte Move_WATER_SPOUT + .4byte Move_SIGNAL_BEAM + .4byte Move_SHADOW_PUNCH + .4byte Move_EXTRASENSORY + .4byte Move_SKY_UPPERCUT + .4byte Move_SAND_TOMB + .4byte Move_SHEER_COLD + .4byte Move_MUDDY_WATER + .4byte Move_BULLET_SEED + .4byte Move_AERIAL_ACE + .4byte Move_ICICLE_SPEAR + .4byte Move_IRON_DEFENSE + .4byte Move_BLOCK + .4byte Move_HOWL + .4byte Move_DRAGON_CLAW + .4byte Move_FRENZY_PLANT + .4byte Move_BULK_UP + .4byte Move_BOUNCE + .4byte Move_MUD_SHOT + .4byte Move_POISON_TAIL + .4byte Move_COVET + .4byte Move_VOLT_TACKLE + .4byte Move_MAGICAL_LEAF + .4byte Move_WATER_SPORT + .4byte Move_CALM_MIND + .4byte Move_LEAF_BLADE + .4byte Move_DRAGON_DANCE + .4byte Move_ROCK_BLAST + .4byte Move_SHOCK_WAVE + .4byte Move_WATER_PULSE + .4byte Move_DOOM_DESIRE + .4byte Move_PSYCHO_BOOST + .4byte Move_COUNT -gUnknown_81C68F4:: @ 81C68F4 - .incbin "baserom.gba", 0x1C68F4, 0x590 +gBattleAnims_StatusConditions:: + .4byte Status_Poison + .4byte Status_Confusion + .4byte Status_Burn + .4byte Status_Infatuation + .4byte Status_Sleep + .4byte Status_Paralysis + .4byte Status_Freeze + .4byte Status_Curse + .4byte Status_Nightmare -gUnknown_81C6E84:: @ 81C6E84 - .incbin "baserom.gba", 0x1C6E84, 0x24 +gBattleAnims_General:: + .4byte General_CastformChange + .4byte General_StatsChange + .4byte General_SubstituteFade + .4byte General_SubstituteAppear + .4byte General_PokeblockThrow + .4byte General_ItemKnockoff + .4byte General_TurnTrap + .4byte General_ItemEffect + .4byte General_SmokeballEscape + .4byte General_HangedOn + .4byte General_Rain + .4byte General_Sun + .4byte General_Sandstorm + .4byte General_Hail + .4byte General_LeechSeedDrain + .4byte General_MonHit + .4byte General_ItemSteal + .4byte General_SnatchMove + .4byte General_FutureSightHit + .4byte General_DoomDesireHit + .4byte General_FocusPunchSetUp + .4byte General_IngrainHeal + .4byte General_WishHeal + .4byte gUnknown_81D628A + .4byte gUnknown_81D6301 + .4byte gUnknown_81D637B + .4byte gUnknown_81D6394 + .4byte gUnknown_81D63DC -gBattleAnims_General:: @ 81C6EA8 - .incbin "baserom.gba", 0x1C6EA8, 0x70 +gBattleAnims_Special:: + .4byte Special_LevelUp + .4byte Special_SwitchOutPlayerMon + .4byte Special_SwitchOutOpponentMon + .4byte Special_BallThrow + .4byte Special_SafariBallThrow + .4byte Special_SubstituteToMon + .4byte Special_MonToSubstitute -gBattleAnims_Special:: @ 81C6F18 - .incbin "baserom.gba", 0x1C6F18, 0xF690 +Move_NONE:: @ 81C6F34 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W003, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_DOUBLE_SLAP:: @ 81C6F65 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + choosetwoturnanim gUnknown_81C6F90, gUnknown_81C6FA4 + +gUnknown_81C6F76:: @ 81C6F76 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + playsewithpan SE_W003, 63 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +gUnknown_81C6F90:: @ 81C6F90 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, 1, 2 + goto gUnknown_81C6F76 + +gUnknown_81C6FA4:: @ 81C6FA4 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, 1, 2 + goto gUnknown_81C6F76 + +Move_POISON_POWDER:: @ 81C6FB8 + loadspritegfx 10065 + loadspritegfx 10150 + loopsewithpan SE_W077, 63, 10, 6 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, 10, -22, 117, 80, -5, 1 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, -25, -22, 117, 112, 5, 3 + delay 15 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, -5, -22, 117, 80, -5, 1 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, 5, -22, 117, 96, 5, 1 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, 0, -22, 117, 69, -5, 1 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 + delay 30 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, 15, -22, 117, 80, -5, 1 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, -10, -22, 117, 96, 7, 2 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, -5, -22, 117, 90, -8, 0 + delay 20 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, -10, -22, 117, 80, -5, 1 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, 0, -22, 117, 89, 5, 2 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, 20, -22, 117, 112, -8, 2 + createsprite gUnknown_83E29C0, ANIM_TARGET, 2, 5, -22, 117, 80, 5, 1 + waitforvisualfinish + end + +Move_STUN_SPORE:: @ 81C70E9 + loadspritegfx 10068 + loopsewithpan SE_W077, 63, 10, 6 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, 10, -22, 117, 80, -5, 1 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, -25, -22, 117, 112, 5, 3 + delay 15 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, -5, -22, 117, 80, -5, 1 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, 5, -22, 117, 96, 5, 1 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, 0, -22, 117, 69, -5, 1 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 + delay 30 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, 15, -22, 117, 80, -5, 1 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, -10, -22, 117, 96, 7, 2 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, -5, -22, 117, 90, -8, 0 + delay 20 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, -10, -22, 117, 80, -5, 1 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, 0, -22, 117, 89, 5, 2 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, 20, -22, 117, 112, -8, 2 + createsprite gUnknown_83E29A8, ANIM_TARGET, 2, 5, -22, 117, 80, 5, 1 + waitforvisualfinish + end + +Move_SLEEP_POWDER:: @ 81C7217 + loadspritegfx 10067 + loopsewithpan SE_W077, 63, 10, 6 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, 10, -22, 117, 80, -5, 1 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, -25, -22, 117, 112, 5, 3 + delay 15 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, -5, -22, 117, 80, -5, 1 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, 5, -22, 117, 96, 5, 1 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, 0, -22, 117, 69, -5, 1 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 + delay 30 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, -15, -22, 117, 112, 5, 2 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, 15, -22, 117, 80, -5, 1 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, -10, -22, 117, 96, 7, 2 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, -5, -22, 117, 90, -8, 0 + delay 20 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, -10, -22, 117, 80, -5, 1 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, 0, -22, 117, 89, 5, 2 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, 20, -22, 117, 112, -8, 2 + createsprite gUnknown_83E2990, ANIM_TARGET, 2, 5, -22, 117, 80, 5, 1 + waitforvisualfinish + end + +Move_SWIFT:: @ 81C7345 + loadspritegfx 10174 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W129, 192 + createsprite gUnknown_83E2C7C, ANIM_TARGET, 3, 20, -10, 20, 0, 22, 20, 1 + delay 5 + playsewithpan SE_W129, 192 + createsprite gUnknown_83E2C7C, ANIM_TARGET, 3, 20, -10, 20, 5, 22, -18, 1 + delay 5 + playsewithpan SE_W129, 192 + createsprite gUnknown_83E2C7C, ANIM_TARGET, 3, 20, -10, 20, -10, 22, 15, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 18, 1 + createvisualtask AnimTask_ShakeMon2, 2, 3, 2, 0, 18, 1 + delay 5 + playsewithpan SE_W129, 192 + createsprite gUnknown_83E2C7C, ANIM_TARGET, 3, 20, -10, 20, 0, 22, -20, 1 + delay 5 + playsewithpan SE_W129, 192 + createsprite gUnknown_83E2C7C, ANIM_TARGET, 3, 20, -10, 20, 0, 22, 12, 1 + delay 5 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_STRENGTH:: @ 81C73FE + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W036, 192 + createvisualtask AnimTask_ShakeAndSinkMon, 5, 0, 2, 0, 96, 30 + waitforvisualfinish + delay 10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 4 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 1, 18, 6, 2, 4 + delay 4 + playsewithpan SE_W025B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 16, 12, 1, 1 + delay 4 + playsewithpan SE_W025B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, -12, 1, 1 + delay 4 + playsewithpan SE_W025B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 3, 4, 1, 1 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 8, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_TACKLE:: @ 81C7492 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + playsewithpan SE_W004, 63 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_BODY_SLAM:: @ 81C74D0 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W036, 192 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, 0 + waitforvisualfinish + delay 11 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 26, 0, 0, 5 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, 1, 0 + loopsewithpan SE_W025B, 63, 10, 2 + delay 1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -28, 0, 0, 3 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 4, 0, 12, 1 + waitforvisualfinish + delay 10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6 + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_SUPERSONIC:: @ 81C755D + loadspritegfx 10163 + monbg 2 + monbgprio_2A 0 + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon2, 2, 0, 2, 0, 8, 1 + call gUnknown_81C759B + call gUnknown_81C759B + call gUnknown_81C759B + call gUnknown_81C759B + call gUnknown_81C759B + call gUnknown_81C759B + waitforvisualfinish + clearmonbg 2 + blendoff + end + +gUnknown_81C759B:: @ 81C759B + playsewithpan SE_W048, 192 + createsprite gUnknown_83E3CA0, ANIM_TARGET, 2, 16, 0, 0, 0, 30, 0 + delay 2 + return + +Move_SCREECH:: @ 81C75B5 + loadspritegfx 10164 + createvisualtask AnimTask_ShakeMon2, 2, 0, 3, 0, 2, 1 + call gUnknown_81C75E8 + call gUnknown_81C75E8 + delay 16 + createvisualtask AnimTask_SwayMon, 5, 0, 6, 2048, 2, 1 + waitforvisualfinish + end + +gUnknown_81C75E8:: @ 81C75E8 + playsewithpan SE_W103, 192 + createsprite gUnknown_83E3CB8, ANIM_TARGET, 2, 16, 0, 0, 0, 30, 0 + delay 2 + return + +Move_FLAME_WHEEL:: @ 81C7602 + loadspritegfx 10029 + monbg 3 + monbgprio_2A 1 + createsprite gUnknown_83E5DFC, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_W172, 192 + delay 2 + createsprite gUnknown_83E5DFC, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_W172, 192 + delay 2 + createsprite gUnknown_83E5DFC, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_W172, 192 + delay 2 + createsprite gUnknown_83E5DFC, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_W172, 192 + delay 2 + createsprite gUnknown_83E5DFC, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_W172, 192 + delay 2 + createsprite gUnknown_83E5DFC, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_W172, 192 + delay 2 + createsprite gUnknown_83E5DFC, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_W172, 192 + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, 0, 0, 6 + delay 4 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 8, 1 + createvisualtask AnimTask_BlendMonInAndOut, 3, 1, 31, 12, 1, 1 + playsewithpan SE_W172B, 63 + call gUnknown_81D0950 + delay 7 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 9 + waitforvisualfinish + clearmonbg 3 + end + createsprite gUnknown_83E5DFC, ANIM_ATTACKER, 3, 0, 0, 50 + delay 4 + return + +Move_PIN_MISSILE:: @ 81C76FC + loadspritegfx 10161 + loadspritegfx 10135 + monbg 1 + monbgprio_28 1 + setalpha 12, 8 + playsewithpan SE_W026, 192 + createsprite gPinMissileSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, -8, -8, 20, -32 + delay 15 + createsprite gPinMissileSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, 8, 8, 20, -40 + delay 4 + playsewithpan SE_W030, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -8, -8, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 2, 1 + delay 9 + createsprite gPinMissileSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, 0, 0, 20, -32 + delay 4 + playsewithpan SE_W030, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 8, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 2, 1 + delay 14 + playsewithpan SE_W030, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 2, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_ICICLE_SPEAR:: @ 81C77C1 + loadspritegfx 10262 + loadspritegfx 10135 + monbg 1 + monbgprio_28 1 + setalpha 12, 8 + playsewithpan SE_W196, 192 + createsprite gIcicleSpearSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, -8, -8, 20, -32 + delay 15 + createsprite gIcicleSpearSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, 8, 8, 20, -40 + delay 4 + playsewithpan SE_W030, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -8, -8, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 2, 1 + delay 9 + createsprite gIcicleSpearSpriteTemplate, ANIM_ATTACKER, 2, 20, -8, 0, 0, 20, -32 + delay 4 + playsewithpan SE_W030, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 8, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 2, 1 + delay 14 + playsewithpan SE_W030, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 2, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_TAKE_DOWN:: @ 81C7886 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W036, 192 + createvisualtask AnimTask_WindUpLunge, 5, 0, -24, 8, 23, 10, 40, 10 + delay 35 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 0, 10, 0, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, -10, 0, 1, 0 + playsewithpan SE_W025B, 63 + delay 1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -16, 0, 0, 4 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 4, 0, 12, 1 + waitforvisualfinish + delay 2 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_DOUBLE_EDGE:: @ 81C791A + loadspritegfx 10135 + playsewithpan SE_W129, 192 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 4, 2, 32767, 10, 0, 0 + waitforvisualfinish + delay 10 + playsewithpan SE_W207, 192 + waitplaysewithpan SE_W207, 192, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 18, 6, 2, 4 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 16, 16, 32767 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 3 + waitforvisualfinish + playsewithpan SE_W025B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, 1, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 + waitforvisualfinish + createvisualtask sub_8099980, 2, 8, -256, 0, 0 + createvisualtask sub_8099980, 2, 8, -256, 1, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, 0, 4, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 4, 0, 12, 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, 32767 + waitforvisualfinish + createvisualtask sub_8099980, 2, 8, -256, 0, 1 + createvisualtask sub_8099980, 2, 8, -256, 1, 1 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + end + +Move_POISON_STING:: @ 81C7A2D + loadspritegfx 10161 + loadspritegfx 10135 + loadspritegfx 10150 + monbg 1 + monbgprio_28 1 + setalpha 12, 8 + playsewithpan SE_W013B, 192 + createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 20, 0, -8, 0, 20 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 5, 1 + playsewithpan SE_W030, 63 + waitforvisualfinish + call gUnknown_81D575B + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_TWINEEDLE:: @ 81C7A82 + loadspritegfx 10161 + loadspritegfx 10135 + monbg 1 + monbgprio_28 1 + setalpha 12, 8 + loopsewithpan SE_W013B, 192, 6, 2 + createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 10, -4, 0, -4, 20 + createsprite gLinearStingerSpriteTemplate, ANIM_TARGET, 2, 20, 12, 10, 12, 20 + delay 20 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 5, 1 + createsprite gUnknown_83E7C20, ANIM_ATTACKER, 3, 0, -4, 1, 3 + loopsewithpan SE_W030, 63, 5, 2 + delay 1 + createsprite gUnknown_83E7C20, ANIM_ATTACKER, 3, 10, 12, 1, 3 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_FIRE_BLAST:: @ 81C7AF5 + loadspritegfx 10029 + createsoundtask sub_80DCE10, 137, 138 + call gUnknown_81C7B89 + call gUnknown_81C7B89 + call gUnknown_81C7B89 + delay 24 + createvisualtask sub_80BA7F8, 10, 1, 3, 0, 8, 0 + waitforvisualfinish + delay 19 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 20, 1 + call gUnknown_81C7BCD + delay 3 + call gUnknown_81C7BCD + delay 3 + call gUnknown_81C7BCD + delay 3 + call gUnknown_81C7BCD + delay 3 + call gUnknown_81C7BCD + delay 3 + call gUnknown_81C7BCD + delay 3 + call gUnknown_81C7BCD + delay 3 + call gUnknown_81C7BCD + delay 3 + call gUnknown_81C7BCD + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 1, 2, 8, 0, 0 + waitforvisualfinish + end + +gUnknown_81C7B89:: @ 81C7B89 + createsprite gUnknown_83E5D94, ANIM_TARGET, 2, 0, 0, 0 + createsprite gUnknown_83E5D94, ANIM_TARGET, 2, 0, 0, 51 + createsprite gUnknown_83E5D94, ANIM_TARGET, 2, 0, 0, 102 + createsprite gUnknown_83E5D94, ANIM_TARGET, 2, 0, 0, 153 + createsprite gUnknown_83E5D94, ANIM_TARGET, 2, 0, 0, 204 + delay 5 + return + +gUnknown_81C7BCD:: @ 81C7BCD + createsprite gUnknown_83E5DE4, ANIM_TARGET, 2, 0, 0, 10, 0, -2 + createsprite gUnknown_83E5DE4, ANIM_TARGET, 2, 0, 0, 13, -2, 0 + createsprite gUnknown_83E5DE4, ANIM_TARGET, 2, 0, 0, 13, 2, 0 + createsprite gUnknown_83E5DE4, ANIM_TARGET, 2, 0, 0, 15, -2, 2 + createsprite gUnknown_83E5DE4, ANIM_TARGET, 2, 0, 0, 15, 2, 2 + return + +Move_LEECH_SEED:: @ 81C7C23 + loadspritegfx 10006 + playsewithpan SE_W077, 192 + createsprite gUnknown_83E2B34, ANIM_TARGET, 2, 15, 0, 0, 24, 35, -32 + delay 8 + playsewithpan SE_W077, 192 + createsprite gUnknown_83E2B34, ANIM_TARGET, 2, 15, 0, -16, 24, 35, -40 + delay 8 + playsewithpan SE_W077, 192 + createsprite gUnknown_83E2B34, ANIM_TARGET, 2, 15, 0, 16, 24, 35, -37 + delay 12 + loopsewithpan SE_W039, 63, 10, 8 + waitforvisualfinish + end + +Move_EMBER:: @ 81C7C79 + loadspritegfx 10029 + loopsewithpan SE_W052, 192, 5, 2 + createsprite gUnknown_83E5D4C, ANIM_TARGET, 2, 20, 0, -16, 24, 20, 1 + delay 4 + createsprite gUnknown_83E5D4C, ANIM_TARGET, 2, 20, 0, 0, 24, 20, 1 + delay 4 + createsprite gUnknown_83E5D4C, ANIM_TARGET, 2, 20, 0, 16, 24, 20, 1 + delay 16 + playsewithpan SE_W172, 63 + call gUnknown_81C7CD5 + call gUnknown_81C7CD5 + call gUnknown_81C7CD5 + end + +gUnknown_81C7CD5:: @ 81C7CD5 + createsprite gUnknown_83E5D64, ANIM_TARGET, 2, -24, 24, 24, 24, 20, 1, 1 + delay 4 + return + +Move_MEGA_PUNCH:: @ 81C7CED + loadspritegfx 10135 + loadspritegfx 10143 + monbg 1 + delay 2 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 16, 0 + setalpha 12, 8 + playsewithpan SE_W025, 63 + createsprite gUnknown_83E67C0, ANIM_ATTACKER, 3, 0, 0, 0, 50 + createvisualtask sub_80BA7F8, 10, 4, 2, 0, 7, 32767 + delay 50 + call gUnknown_81C7D89 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 22, 1 + createvisualtask sub_80BA7F8, 10, 4, 2, 0, 0, 32767 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 0, 8, 0, 0 + playsewithpan SE_W233B, 63 + waitforvisualfinish + clearmonbg 1 + blendoff + delay 2 + restorebg + waitbgfadein + end + +gUnknown_81C7D89:: @ 81C7D89 + delay 2 + createvisualtask AnimTask_IsContest, 2, + jumpargeq 7, 1, gUnknown_81C7DC0 + createvisualtask sub_80DEAB4, 2, + jumpargeq 7, 0, gUnknown_81C7DB2 + jumpargeq 7, 1, gUnknown_81C7DB9 + +gUnknown_81C7DB1:: @ 81C7DB1 + return + +gUnknown_81C7DB2:: @ 81C7DB2 + changebg 4 + goto gUnknown_81C7DB1 + +gUnknown_81C7DB9:: @ 81C7DB9 + changebg 5 + goto gUnknown_81C7DB1 + +gUnknown_81C7DC0:: @ 81C7DC0 + changebg 6 + goto gUnknown_81C7DB1 + +Move_MEGA_KICK:: @ 81C7DC7 + loadspritegfx 10135 + loadspritegfx 10143 + monbg 1 + delay 2 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 16, 0 + setalpha 12, 8 + playsewithpan SE_W025, 63 + createsprite gUnknown_83E67C0, ANIM_ATTACKER, 3, 0, 0, 1, 50 + createvisualtask sub_80BA7F8, 10, 4, 2, 0, 7, 32767 + delay 50 + playsewithpan SE_W025B, 63 + call gUnknown_81C7D89 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 22, 1 + createvisualtask sub_80BA7F8, 10, 4, 2, 0, 0, 32767 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 0, 8, 0, 0 + waitforvisualfinish + clearmonbg 1 + blendoff + delay 2 + restorebg + waitbgfadein + end + +Move_COMET_PUNCH:: @ 81C7E63 + loadspritegfx 10135 + loadspritegfx 10143 + monbg 1 + setalpha 12, 8 + choosetwoturnanim gUnknown_81C7E91, gUnknown_81C7EB6 + +gUnknown_81C7E77:: @ 81C7E77 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + playsewithpan SE_W004, 63 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +gUnknown_81C7E91:: @ 81C7E91 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, -8, 1, 2 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, -8, 0, 8, 1, 0 + goto gUnknown_81C7E77 + +gUnknown_81C7EB6:: @ 81C7EB6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, -8, 1, 2 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0 + goto gUnknown_81C7E77 + +Move_SONIC_BOOM:: @ 81C7EDB + loadspritegfx 10003 + loadspritegfx 10135 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + call gUnknown_81C7F12 + call gUnknown_81C7F12 + call gUnknown_81C7F12 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 10, 1 + call gUnknown_81C7F2A + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81C7F12:: @ 81C7F12 + playsewithpan SE_W013B, 192 + createsprite gUnknown_83E3C10, ANIM_TARGET, 2, 16, 0, 0, 0, 15 + delay 4 + return + +gUnknown_81C7F2A:: @ 81C7F2A + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 2 + delay 4 + return + +Move_THUNDER_SHOCK:: @ 81C7F3C + loadspritegfx 10001 + loadspritegfx 10011 + createvisualtask sub_80BA7F8, 10, 1, 0, 0, 6, 0 + waitforvisualfinish + delay 10 + createvisualtask sub_80AE220, 5, 0, -44, 0 + playsewithpan SE_W085, 63 + delay 9 + createvisualtask sub_80BA7F8, 10, 4, 0, 0, 13, 0 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 4, 0, 13, 0, 0 + waitforvisualfinish + delay 20 + call gUnknown_81D58D4 + waitforvisualfinish + delay 20 + createvisualtask sub_80BA7F8, 10, 1, 0, 6, 0, 0 + waitforvisualfinish + end + +Move_THUNDERBOLT:: @ 81C7FAA + loadspritegfx 10001 + loadspritegfx 10282 + loadspritegfx 10011 + createvisualtask sub_80BA7F8, 10, 1, 0, 0, 6, 0 + waitforvisualfinish + delay 10 + createvisualtask sub_80AE220, 5, 24, -52, 0 + playsewithpan SE_W085, 63 + delay 7 + createvisualtask sub_80AE220, 5, -24, -52, 0 + playsewithpan SE_W085, 63 + delay 7 + createvisualtask sub_80AE220, 5, 0, -60, 1 + playsewithpan SE_W085, 63 + delay 9 + createvisualtask sub_80BA7F8, 10, 4, 0, 0, 13, 0 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 4, 0, 13, 0, 0 + waitforvisualfinish + delay 20 + createsprite gUnknown_83E6058, ANIM_TARGET, 3, 44, 0, 0, 3 + createsprite gUnknown_83E6070, ANIM_TARGET, 4, 0, 0, 32, 44, 0, 40, 0, -32765 + createsprite gUnknown_83E6070, ANIM_TARGET, 4, 0, 0, 32, 44, 64, 40, 1, -32765 + createsprite gUnknown_83E6070, ANIM_TARGET, 4, 0, 0, 32, 44, 128, 40, 0, -32765 + createsprite gUnknown_83E6070, ANIM_TARGET, 4, 0, 0, 32, 44, 192, 40, 2, -32765 + createsprite gUnknown_83E6070, ANIM_TARGET, 4, 0, 0, 16, 44, 32, 40, 0, -32765 + createsprite gUnknown_83E6070, ANIM_TARGET, 4, 0, 0, 16, 44, 96, 40, 1, -32765 + createsprite gUnknown_83E6070, ANIM_TARGET, 4, 0, 0, 16, 44, 160, 40, 0, -32765 + createsprite gUnknown_83E6070, ANIM_TARGET, 4, 0, 0, 16, 44, 224, 40, 2, -32765 + playsewithpan SE_W063, 63 + delay 0 + createvisualtask sub_80BA7F8, 10, 1, 0, 2, 2, 0 + delay 6 + createvisualtask sub_80BA7F8, 10, 1, 0, 6, 6, 0 + delay 6 + createvisualtask sub_80BA7F8, 10, 1, 0, 2, 2, 0 + delay 6 + createvisualtask sub_80BA7F8, 10, 1, 0, 6, 6, 0 + waitforvisualfinish + delay 20 + waitplaysewithpan SE_W085B, 63, 19 + call gUnknown_81D58D4 + waitforvisualfinish + delay 20 + createvisualtask sub_80BA7F8, 10, 1, 0, 6, 0, 0 + waitforvisualfinish + end + +Move_THUNDER_WAVE:: @ 81C8160 + loadspritegfx 10001 + loadspritegfx 10011 + loadspritegfx 10173 + createvisualtask sub_80BA7F8, 10, 1, 0, 0, 6, 0 + waitforvisualfinish + delay 10 + createvisualtask sub_80AE220, 5, 0, -48, 0 + playsewithpan SE_W086, 63 + delay 20 + loopsewithpan SE_W085B, 63, 10, 4 + createsprite gUnknown_83E60B8, ANIM_TARGET, 2, -16, -16 + delay 4 + createsprite gUnknown_83E60B8, ANIM_TARGET, 2, -16, 0 + delay 4 + createsprite gUnknown_83E60B8, ANIM_TARGET, 2, -16, 16 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 1, 0, 6, 0, 0 + waitforvisualfinish + end + +Move_BEAT_UP:: @ 81C81CF + loadspritegfx 10135 + loadspritegfx 10143 + monbg 1 + setalpha 12, 8 + choosetwoturnanim gUnknown_81C81E8, gUnknown_81C8259 + +gUnknown_81C81E3:: @ 81C81E3 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +gUnknown_81C81E8:: @ 81C81E8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -20, -20, 1, 2 + createsprite gUnknown_83E6710, ANIM_TARGET, 3, -20, -12, 8, 1, 0 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + playsewithpan SE_W233B, 63 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 8, 0, 1, 2 + createsprite gUnknown_83E6710, ANIM_TARGET, 3, 8, 8, 8, 1, 0 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + playsewithpan SE_W233B, 63 + goto gUnknown_81C81E3 + +gUnknown_81C8259:: @ 81C8259 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 12, -20, 1, 2 + createsprite gUnknown_83E6710, ANIM_TARGET, 3, 12, -12, 8, 1, 0 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + playsewithpan SE_W233B, 63 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -12, 0, 1, 2 + createsprite gUnknown_83E6710, ANIM_TARGET, 3, -12, 8, 8, 1, 0 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + playsewithpan SE_W233B, 63 + goto gUnknown_81C81E3 + +Move_STOMP:: @ 81C82CA + loadspritegfx 10143 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W104, 63 + createsprite gUnknown_83E67D8, ANIM_ATTACKER, 3, 0, -32, 15 + delay 19 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, -8, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 4, 9, 1 + playsewithpan SE_W025B, 63 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_TAIL_WHIP:: @ 81C8311 + loopsewithpan SE_W039, 192, 24, 3 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 12, 4, 2, 3 + waitforvisualfinish + end + +Move_CUT:: @ 81C832A + loadspritegfx 10138 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W015, 63 + createsprite gUnknown_83E3294, ANIM_ATTACKER, 2, 40, -32, 0 + delay 5 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 10, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + waitforvisualfinish + end + +Move_HIDDEN_POWER:: @ 81C835C + loadspritegfx 10217 + playsewithpan SE_W036, 192 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, 0, 0 + waitforvisualfinish + delay 30 + createvisualtask AnimTask_BlendMonInAndOut, 5, 0, 20479, 12, 5, 1 + delay 4 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, 0, 0 + playsewithpan SE_W179, 192 + createsprite gUnknown_83E427C, ANIM_ATTACKER, 2, 26, 0 + createsprite gUnknown_83E427C, ANIM_ATTACKER, 2, 26, 42 + createsprite gUnknown_83E427C, ANIM_ATTACKER, 2, 26, 84 + createsprite gUnknown_83E427C, ANIM_ATTACKER, 2, 26, 126 + createsprite gUnknown_83E427C, ANIM_ATTACKER, 2, 26, 168 + createsprite gUnknown_83E427C, ANIM_ATTACKER, 2, 26, 210 + delay 52 + setarg 7, 65535 + playsewithpan SE_W115, 192 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, 0, 0 + createsprite gUnknown_83E4294, ANIM_TARGET, 2, 0 + createsprite gUnknown_83E4294, ANIM_TARGET, 2, 32 + createsprite gUnknown_83E4294, ANIM_TARGET, 2, 64 + createsprite gUnknown_83E4294, ANIM_TARGET, 2, 96 + createsprite gUnknown_83E4294, ANIM_TARGET, 2, 128 + createsprite gUnknown_83E4294, ANIM_TARGET, 2, 160 + createsprite gUnknown_83E4294, ANIM_TARGET, 2, 192 + createsprite gUnknown_83E4294, ANIM_TARGET, 2, 224 + end + +Move_REVERSAL:: @ 81C8445 + loadspritegfx 10236 + loadspritegfx 10143 + loadspritegfx 10135 + playsewithpan SE_W197, 192 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 3, 32767, 8, 0, 0 + waitforvisualfinish + delay 30 + createvisualtask sub_80B9BDC, 2, 31, 3, 2, 0, 10, 32767 + delay 10 + playsewithpan SE_W179, 192 + createsprite gUnknown_83FF3B8, ANIM_ATTACKER, 2, 26, 0 + createsprite gUnknown_83FF3B8, ANIM_ATTACKER, 2, 26, 42 + createsprite gUnknown_83FF3B8, ANIM_ATTACKER, 2, 26, 84 + createsprite gUnknown_83FF3B8, ANIM_ATTACKER, 2, 26, 126 + createsprite gUnknown_83FF3B8, ANIM_ATTACKER, 2, 26, 168 + createsprite gUnknown_83FF3B8, ANIM_ATTACKER, 2, 26, 210 + waitforvisualfinish + delay 20 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 + delay 8 + playsewithpan SE_W233B, 63 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 32767, 8, 0, 0 + createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 10, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + createvisualtask sub_8099BD4, 5, 0, 1, 8, 1, 0 + end + +Move_PURSUIT:: @ 81C8520 + loadspritegfx 10135 + monbg 1 + fadetobg 1 + waitbgfadein + delay 0 + setalpha 12, 8 + choosetwoturnanim gUnknown_81C853F, gUnknown_81C8568 + +gUnknown_81C8536:: @ 81C8536 + waitforvisualfinish + clearmonbg 1 + blendoff + delay 0 + restorebg + waitbgfadein + end + +gUnknown_81C853F:: @ 81C853F + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2 + createvisualtask sub_8099BD4, 5, 0, 1, 6, 1, 0 + goto gUnknown_81C8536 + +gUnknown_81C8568:: @ 81C8568 + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + createvisualtask sub_8099BD4, 5, 0, 1, 6, 1, 0 + goto gUnknown_81C8536 + +Move_SPIKE_CANNON:: @ 81C8591 + loadspritegfx 10161 + loadspritegfx 10135 + monbg 1 + monbgprio_28 1 + setalpha 12, 8 + createvisualtask AnimTask_WindUpLunge, 5, 0, -4, 0, 4, 6, 8, 4 + waitforvisualfinish + loopsewithpan SE_W013B, 192, 5, 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + createsprite gLinearStingerSpriteTemplate, ANIM_ATTACKER, 2, 10, -8, -8, -8, 20 + createsprite gLinearStingerSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 0, 0, 20 + createsprite gLinearStingerSpriteTemplate, ANIM_ATTACKER, 2, 26, 8, 8, 8, 20 + waitforvisualfinish + createsprite gUnknown_83E7C20, ANIM_ATTACKER, 3, -8, -8, 1, 2 + createsprite gUnknown_83E7C20, ANIM_ATTACKER, 3, 0, 0, 1, 2 + createsprite gUnknown_83E7C20, ANIM_ATTACKER, 3, 8, 8, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 7, 1 + loopsewithpan SE_W030, 63, 5, 3 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_SWORDS_DANCE:: @ 81C8644 + loadspritegfx 10005 + monbg 0 + setalpha 12, 8 + playsewithpan SE_W014, 192 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 16, 6, 1, 4 + createsprite gUnknown_83E3BF8, ANIM_ATTACKER, 2, 0, 0 + delay 22 + createvisualtask sub_80B9F6C, 2, 10005, 2, 2, 32754, 16, 0, 0 + waitforvisualfinish + clearmonbg 0 + blendoff + delay 1 + end + +Move_PSYCH_UP:: @ 81C868A + loadspritegfx 10196 + monbg 2 + createvisualtask sub_80B9CE4, 2, 1, 2, 6, 1, 11, 0 + setalpha 12, 8 + loopsewithpan SE_W060B, 192, 5, 10 + createsprite gUnknown_83E6DF8, ANIM_ATTACKER, 2, 0, 0, 0, 0 + createvisualtask AnimTask_SwayMon, 5, 0, 5, 2560, 8, 0 + delay 127 + delay 4 + playsewithpan SE_W060, 192 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 10, 0, 1 + createvisualtask sub_80BA7F8, 9, 2, 2, 10, 0, 1023 + delay 30 + clearmonbg 2 + blendoff + waitforvisualfinish + end + +Move_DIZZY_PUNCH:: @ 81C86FC + loadspritegfx 10073 + loadspritegfx 10143 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + call gUnknown_81C8817 + createsprite gUnknown_83E6710, ANIM_TARGET, 5, 16, 8, 20, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 16, 0, 1, 1 + playsewithpan SE_W004, 63 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, 16, 8, 160, -32 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, 16, 8, -256, -40 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, 16, 8, 128, -16 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, 16, 8, 416, -38 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, 16, 8, -128, -22 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, 16, 8, -384, -31 + delay 10 + call gUnknown_81C8817 + createsprite gUnknown_83E6710, ANIM_TARGET, 5, -16, -8, 20, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -16, -16, 1, 1 + playsewithpan SE_W233B, 63 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, -16, -8, 160, -32 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, -16, -8, -256, -40 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, -16, -8, 128, -16 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, -16, -8, 416, -38 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, -16, -8, -128, -22 + createsprite gUnknown_83E67F0, ANIM_TARGET, 3, -16, -8, -384, -31 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +gUnknown_81C8817:: @ 81C8817 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 + delay 6 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 7, 1 + return + +Move_FIRE_SPIN:: @ 81C8836 + loadspritegfx 10029 + playsewithpan SE_W221B, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 2, 47, 1 + call gUnknown_81C885F + call gUnknown_81C885F + call gUnknown_81C885F + waitforvisualfinish + end + +gUnknown_81C885F:: @ 81C885F + createsprite gUnknown_83E7438, ANIM_TARGET, 2, 0, 28, 528, 30, 13, 50, 1 + delay 2 + createsprite gUnknown_83E7438, ANIM_TARGET, 2, 0, 32, 480, 20, 16, -46, 1 + delay 2 + createsprite gUnknown_83E7438, ANIM_TARGET, 2, 0, 33, 576, 20, 8, 42, 1 + delay 2 + createsprite gUnknown_83E7438, ANIM_TARGET, 2, 0, 31, 400, 25, 11, -42, 1 + delay 2 + createsprite gUnknown_83E7438, ANIM_TARGET, 2, 0, 28, 512, 25, 16, 46, 1 + delay 2 + createsprite gUnknown_83E7438, ANIM_TARGET, 2, 0, 33, 464, 30, 15, -50, 1 + delay 2 + return + +Move_FURY_CUTTER:: @ 81C88EA + loadspritegfx 10138 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W013, 63 + createvisualtask sub_80AAB7C, 2, + jumpargeq 7, 0, gUnknown_81C8947 + goto gUnknown_81C8959 + +gUnknown_81C890A:: @ 81C890A + createvisualtask update_fury_cutter_counter_copy, 2, + jumpargeq 7, 1, gUnknown_81C892E + jumpargeq 7, 2, gUnknown_81C896B + jumpargeq 7, 3, gUnknown_81C8985 + goto gUnknown_81C899F + +gUnknown_81C892E:: @ 81C892E + delay 5 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 10, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + waitforvisualfinish + end + +gUnknown_81C8947:: @ 81C8947 + createsprite gUnknown_83E3294, ANIM_ATTACKER, 2, 40, -32, 0 + goto gUnknown_81C890A + +gUnknown_81C8959:: @ 81C8959 + createsprite gUnknown_83E3294, ANIM_ATTACKER, 2, 40, -32, 1 + goto gUnknown_81C890A + +gUnknown_81C896B:: @ 81C896B + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 10505, 4, 0, 0 + goto gUnknown_81C892E + +gUnknown_81C8985:: @ 81C8985 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 3, 10505, 4, 0, 0 + goto gUnknown_81C892E + +gUnknown_81C899F:: @ 81C899F + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 3, 10505, 4, 0, 0 + goto gUnknown_81C892E + +Move_SELF_DESTRUCT:: @ 81C89B9 + loadspritegfx 10198 + createvisualtask sub_80BA7F8, 10, 2, 1, 0, 9, 31 + createvisualtask AnimTask_ShakeMon2, 5, 4, 6, 0, 38, 1 + createvisualtask AnimTask_ShakeMon2, 5, 5, 6, 0, 38, 1 + createvisualtask AnimTask_ShakeMon2, 5, 6, 6, 0, 38, 1 + createvisualtask AnimTask_ShakeMon2, 5, 7, 6, 0, 38, 1 + createvisualtask AnimTask_ShakeMon2, 5, 8, 6, 0, 38, 1 + call gUnknown_81C8A3F + call gUnknown_81C8A3F + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 2, 1, 9, 0, 31 + end + +gUnknown_81C8A3F:: @ 81C8A3F + playsewithpan SE_W120, 192 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 0, 0, 0, 1 + delay 6 + playsewithpan SE_W120, 192 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 24, -24, 0, 1 + delay 6 + playsewithpan SE_W120, 192 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, -16, 16, 0, 1 + delay 6 + playsewithpan SE_W120, 192 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, -24, -12, 0, 1 + delay 6 + playsewithpan SE_W120, 192 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 16, 16, 0, 1 + delay 6 + return + +Move_SLAM:: @ 81C8AA9 + loadspritegfx 10056 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W004, 192 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 3, 0, 4 + delay 1 + createsprite gUnknown_83E3148, ANIM_ATTACKER, 2, 0, 0 + delay 3 + playsewithpan SE_W025B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -12, 10, 0, 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 0, 3, 6, 1 + waitforvisualfinish + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_VINE_WHIP:: @ 81C8B31 + loadspritegfx 10287 + playsewithpan SE_W026, 192 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 + delay 6 + playsewithpan SE_W010, 63 + createsprite gUnknown_83E3160, ANIM_TARGET, 2, 0, 0 + delay 6 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 6, 1 + end + +Move_DRILL_PECK:: @ 81C8B68 + loadspritegfx 10135 + loadspritegfx 10162 + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 0 + playsewithpan SE_W029, 192 + waitforvisualfinish + delay 2 + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 1 + delay 2 + loopsewithpan SE_W030, 63, 4, 8 + createvisualtask sub_80B2868, 5, + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 18, 1 + waitforvisualfinish + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 2 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6 + waitforvisualfinish + end + +Move_WATERFALL:: @ 81C8BC1 + loadspritegfx 10148 + loadspritegfx 10155 + loadspritegfx 10141 + monbg 3 + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 23, 1 + delay 5 + playsewithpan SE_W152, 192 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 10, 10, 25, 0 + delay 4 + playsewithpan SE_W152, 192 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -15, 0, 25, 0 + delay 4 + playsewithpan SE_W152, 192 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 20, 10, 25, 0 + delay 4 + playsewithpan SE_W152, 192 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 0, -10, 25, 0 + delay 4 + playsewithpan SE_W152, 192 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -10, 15, 25, 0 + delay 4 + playsewithpan SE_W152, 192 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 25, 20, 25, 0 + delay 4 + playsewithpan SE_W152, 192 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -20, 20, 25, 0 + delay 4 + playsewithpan SE_W152, 192 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 12, 0, 25, 0 + waitforvisualfinish + delay 10 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 5 + delay 6 + call gUnknown_81C8CA2 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81C8CA2:: @ 81C8CA2 + playsewithpan SE_W127, 63 + createvisualtask AnimTask_ShakeMon2, 5, 1, 4, 0, 17, 1 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 20, 1, 1 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 20 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 20 + delay 2 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 15, 1, 1 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 15 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 15 + delay 2 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 10, 1, 1 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 10 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 10 + delay 2 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 5, 1, 1 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 5 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 5 + delay 2 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 0, 1, 1 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 0 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 0 + delay 2 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -5, 1, 1 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -5 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -5 + delay 2 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -10, 1, 1 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -10 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -10 + delay 2 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -15, 1, 1 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -15 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -15 + delay 2 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -20, 1, 1 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -20 + createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -20 + return + +Move_EXPLOSION:: @ 81C8E15 + loadspritegfx 10198 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 8, 9, 8474, 8, 0, 8 + createvisualtask AnimTask_ShakeMon2, 5, 4, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, 5, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, 6, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, 7, 8, 0, 40, 1 + createvisualtask AnimTask_ShakeMon2, 5, 8, 8, 0, 40, 1 + call gUnknown_81C8EB2 + call gUnknown_81C8EB2 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 1, 1, 16, 16, 32767 + delay 50 + createvisualtask sub_80BA7F8, 10, 1, 3, 16, 0, 32767 + end + +gUnknown_81C8EB2:: @ 81C8EB2 + playsewithpan SE_W153, 192 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 0, 0, 0, 1 + delay 6 + playsewithpan SE_W153, 192 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 24, -24, 0, 1 + delay 6 + playsewithpan SE_W153, 192 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, -16, 16, 0, 1 + delay 6 + playsewithpan SE_W153, 192 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, -24, -12, 0, 1 + delay 6 + playsewithpan SE_W153, 192 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 16, 16, 0, 1 + delay 6 + return + +Move_DEFENSE_CURL:: @ 81C8F1C + loadspritegfx 10234 + loopsewithpan SE_W161, 192, 18, 3 + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 0, 0 + createvisualtask sub_80DF524, 5, + waitforvisualfinish + createsprite gUnknown_83FF118, ANIM_ATTACKER, 2, 0, 6, 0, 1 + waitforvisualfinish + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 0, 1 + waitforvisualfinish + end + +Move_PROTECT:: @ 81C8F55 + loadspritegfx 10280 + monbg 2 + monbgprio_28 0 + waitplaysewithpan SE_W115, 192, 16 + createsprite gUnknown_83E3354, ANIM_ATTACKER, 2, 24, 0, 90 + waitforvisualfinish + clearmonbg 2 + end + +Move_DETECT:: @ 81C8F72 + loadspritegfx 10071 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 9, 0 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 2, 1, 0, 9, 32767 + delay 18 + playsewithpan SE_W197, 192 + createsprite gSpriteTemplate_83BF480, ANIM_ATTACKER, 13, 20, -20 + waitforvisualfinish + delay 10 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 9, 0, 0 + createvisualtask sub_80BA7F8, 10, 2, 2, 9, 0, 32767 + waitforvisualfinish + end + +Move_FRUSTRATION:: @ 81C8FD0 + loadspritegfx 10135 + loadspritegfx 10087 + monbg 3 + setalpha 12, 8 + createvisualtask AnimTask_GetFrustrationPowerLevel, 1, + jumpargeq 7, 0, gUnknown_81C9004 + jumpargeq 7, 1, gUnknown_81C910A + jumpargeq 7, 2, gUnknown_81C91D7 + goto gUnknown_81C9253 + +gUnknown_81C8FFF:: @ 81C8FFF + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81C9004:: @ 81C9004 + playsewithpan SE_W082, 192 + createvisualtask AnimTask_ShakeMon2, 5, 0, 1, 0, 15, 1 + createvisualtask sub_80BA7F8, 10, 2, 3, 0, 9, 31 + waitforvisualfinish + delay 20 + playsewithpan SE_W207B, 192 + createsprite gUnknown_83E3F04, ANIM_ATTACKER, 2, 0, 20, -28 + waitforvisualfinish + playsewithpan SE_W207B, 192 + createsprite gUnknown_83E3F04, ANIM_ATTACKER, 2, 0, 20, -28 + waitforvisualfinish + delay 10 + createvisualtask AnimTask_SwayMon, 5, 0, 16, 6144, 8, 0 + delay 5 + createvisualtask AnimTask_ShakeMon2, 5, 1, 4, 0, 30, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0 + playsewithpan SE_W004, 63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, 1, 0 + playsewithpan SE_W004, 63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, 1, 0 + playsewithpan SE_W004, 63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, 1, 0 + playsewithpan SE_W004, 63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, 1, 0 + playsewithpan SE_W004, 63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, 1, 0 + playsewithpan SE_W004, 63 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 2, 3, 9, 0, 31 + goto gUnknown_81C8FFF + +gUnknown_81C910A:: @ 81C910A + playsewithpan SE_W082, 192 + createvisualtask AnimTask_ShakeMon2, 5, 0, 1, 0, 15, 1 + createvisualtask sub_80BA7F8, 10, 2, 3, 0, 9, 31 + waitforvisualfinish + delay 20 + playsewithpan SE_W207B, 192 + createsprite gUnknown_83E3F04, ANIM_ATTACKER, 2, 0, 20, -28 + waitforvisualfinish + delay 5 + createvisualtask sub_80E0488, 5, + delay 7 + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 8, 1, 1 + createvisualtask AnimTask_ShakeMon2, 5, 1, 4, 0, 6, 1 + delay 14 + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 12, -6, 1, 1 + createvisualtask AnimTask_ShakeMon2, 5, 1, 4, 0, 6, 1 + delay 14 + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -12, -6, 1, 1 + createvisualtask AnimTask_ShakeMon2, 5, 1, 4, 0, 6, 1 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 2, 3, 9, 0, 31 + goto gUnknown_81C8FFF + +gUnknown_81C91D7:: @ 81C91D7 + playsewithpan SE_W207B, 192 + createsprite gUnknown_83E3F04, ANIM_ATTACKER, 2, 0, 20, -28 + waitforvisualfinish + delay 5 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 + delay 6 + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 4, 1, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 6, 1 + waitforvisualfinish + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 + delay 6 + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -4, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 6, 1 + goto gUnknown_81C8FFF + +gUnknown_81C9253:: @ 81C9253 + createsprite gUnknown_83FF2B0, ANIM_ATTACKER, 2, 20, -28 + waitforvisualfinish + delay 10 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 10, 2 + delay 12 + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 1, 0, 6, 1 + goto gUnknown_81C8FFF + +Move_SAFEGUARD:: @ 81C9297 + loadspritegfx 10244 + monbg 2 + setalpha 8, 8 + playsewithpan SE_W208, 192 + createsprite gUnknown_83E44DC, ANIM_ATTACKER, 2, + delay 4 + createsprite gUnknown_83E44DC, ANIM_ATTACKER, 2, + delay 4 + createsprite gUnknown_83E44DC, ANIM_ATTACKER, 2, + waitforvisualfinish + playsewithpan SE_REAPOKE, 192 + createvisualtask sub_80B9BDC, 2, 10, 0, 2, 0, 10, 32767 + waitforvisualfinish + clearmonbg 2 + blendoff + end + +Move_PAIN_SPLIT:: @ 81C92D9 + loadspritegfx 10239 + createsprite gUnknown_83FF370, ANIM_ATTACKER, 2, -8, -42, 0 + createsprite gUnknown_83FF370, ANIM_TARGET, 2, -8, -42, 1 + delay 10 + playsewithpan SE_W207B, 0 + createvisualtask sub_80E0B00, 2, 0, 0 + createvisualtask sub_80E0B00, 2, 1, 0 + waitforvisualfinish + createsprite gUnknown_83FF370, ANIM_ATTACKER, 2, -24, -42, 0 + createsprite gUnknown_83FF370, ANIM_TARGET, 2, -24, -42, 1 + delay 10 + playsewithpan SE_W207B, 0 + createvisualtask sub_80E0B00, 2, 0, 1 + createvisualtask sub_80E0B00, 2, 1, 1 + waitforvisualfinish + createsprite gUnknown_83FF370, ANIM_ATTACKER, 2, 8, -42, 0 + createsprite gUnknown_83FF370, ANIM_TARGET, 2, 8, -42, 1 + delay 10 + playsewithpan SE_W207B, 0 + createvisualtask sub_80E0B00, 2, 0, 2 + createvisualtask sub_80E0B00, 2, 1, 2 + end + +Move_VICE_GRIP:: @ 81C9381 + loadspritegfx 10138 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W011, 63 + createsprite gUnknown_83E3E08, ANIM_ATTACKER, 2, 0 + createsprite gUnknown_83E3E08, ANIM_ATTACKER, 2, 1 + delay 9 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon2, 5, 1, 2, 0, 5, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_GUILLOTINE:: @ 81C93C9 + loadspritegfx 10138 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + fadetobgfromset 12, 13, 14 + waitbgfadein + playsewithpan SE_W011, 63 + createsprite gUnknown_83E3E48, ANIM_ATTACKER, 2, 0 + createsprite gUnknown_83E3E48, ANIM_ATTACKER, 2, 1 + createvisualtask sub_80BA7F8, 10, 4, 2, 0, 16, 0 + delay 9 + createvisualtask AnimTask_ShakeMon2, 5, 1, 2, 0, 23, 1 + delay 46 + createvisualtask AnimTask_ShakeMon2, 5, 1, 4, 0, 8, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 0, 8, 0, 0 + playsewithpan SE_W013, 63 + waitforvisualfinish + clearmonbg 3 + blendoff + restorebg + waitbgfadein + end + +Move_PAY_DAY:: @ 81C9455 + loadspritegfx 10100 + loadspritegfx 10135 + monbg 1 + monbgprio_28 1 + setalpha 12, 8 + playsewithpan SE_W013B, 192 + createsprite gUnknown_83E3D50, ANIM_ATTACKER, 2, 20, 0, 0, 0, 1152 + waitforvisualfinish + playsewithpan SE_W006, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, 1, 2 + createsprite gUnknown_83E3D68, ANIM_ATTACKER, 2, + createvisualtask AnimTask_ShakeMon2, 2, 1, 1, 0, 6, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_OUTRAGE:: @ 81C94A8 + loadspritegfx 10029 + loopsewithpan SE_W082, 192, 8, 3 + createvisualtask sub_80B9BDC, 2, 7, 2, 5, 3, 8, 430 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 12, 6, 5, 4 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, 1280, 0, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, -1280, 0, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, 0, 1280, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, 0, -1280, 3 + delay 0 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 40, 1 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, 1280, 768, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, -1280, 768, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, 1280, -768, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, -1280, -768, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, 1280, 0, 3 + call gUnknown_81C95AF + call gUnknown_81C95AF + waitforvisualfinish + end + +gUnknown_81C95AF:: @ 81C95AF + delay 3 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, -1280, 0, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, 0, 1280, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, 0, -1280, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, 1280, 768, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, -1280, 768, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, 1280, -768, 3 + delay 0 + createsprite gUnknown_83E772C, ANIM_TARGET, 2, 0, 0, 30, -1280, -768, 3 + return + +Move_SPARK:: @ 81C9643 + loadspritegfx 10135 + loadspritegfx 10011 + delay 0 + createvisualtask sub_80B9BDC, 2, 3, -31, 1, 5, 5, 23551 + playsewithpan SE_W085B, 192 + createsprite gUnknown_83E5FC4, ANIM_ATTACKER, 0, 32, 24, 190, 12, 0, 1, 0 + delay 0 + createsprite gUnknown_83E5FC4, ANIM_ATTACKER, 0, 80, 24, 22, 12, 0, 1, 0 + createsprite gUnknown_83E5FC4, ANIM_ATTACKER, 0, 156, 24, 121, 13, 0, 1, 1 + delay 0 + createvisualtask sub_80B9BDC, 2, 3, -31, 1, 0, 0, 23551 + delay 10 + createvisualtask sub_80B9BDC, 2, 3, -31, 1, 5, 5, 23551 + playsewithpan SE_W085B, 192 + createsprite gUnknown_83E5FC4, ANIM_ATTACKER, 0, 100, 24, 60, 10, 0, 1, 0 + createsprite gUnknown_83E5FC4, ANIM_ATTACKER, 0, 170, 24, 42, 11, 0, 1, 1 + delay 0 + createsprite gUnknown_83E5FC4, ANIM_ATTACKER, 0, 238, 24, 165, 10, 0, 1, 1 + delay 0 + createvisualtask sub_80B9BDC, 2, 3, -31, 1, 0, 0, 23551 + delay 20 + createvisualtask sub_80B9BDC, 2, 3, -31, 1, 7, 7, 23551 + playsewithpan SE_W085B, 192 + createsprite gUnknown_83E6070, ANIM_ATTACKER, 4, 0, 0, 32, 12, 0, 20, 0, 0 + createsprite gUnknown_83E6070, ANIM_ATTACKER, 4, 0, 0, 32, 12, 64, 20, 1, 0 + createsprite gUnknown_83E6070, ANIM_ATTACKER, 4, 0, 0, 32, 12, 128, 20, 0, 0 + createsprite gUnknown_83E6070, ANIM_ATTACKER, 4, 0, 0, 32, 12, 192, 20, 2, 0 + createsprite gUnknown_83E6070, ANIM_ATTACKER, 4, 0, 0, 16, 12, 32, 20, 0, 0 + createsprite gUnknown_83E6070, ANIM_ATTACKER, 4, 0, 0, 16, 12, 96, 20, 1, 0 + createsprite gUnknown_83E6070, ANIM_ATTACKER, 4, 0, 0, 16, 12, 160, 20, 0, 0 + createsprite gUnknown_83E6070, ANIM_ATTACKER, 4, 0, 0, 16, 12, 224, 20, 2, 0 + delay 4 + waitforvisualfinish + createvisualtask sub_80B9BDC, 2, 3, -31, 1, 0, 0, 23551 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 + delay 4 + playsewithpan SE_W063, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + waitforvisualfinish + createvisualtask sub_80B9BDC, 2, 4, -31, 2, 0, 6, 23551 + call gUnknown_81D58D4 + waitforvisualfinish + end + +Move_ATTRACT:: @ 81C985A + loadspritegfx 10216 + loopsewithpan SE_W204, 192, 12, 3 + createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, 0 + delay 15 + createsprite gUnknown_83E4218, ANIM_TARGET, 3, 20, -8 + waitforvisualfinish + playsewithpan SE_W213, 63 + createsprite gUnknown_83E4230, ANIM_TARGET, 3, 160, -32 + createsprite gUnknown_83E4230, ANIM_TARGET, 3, -256, -40 + createsprite gUnknown_83E4230, ANIM_TARGET, 3, 128, -16 + createsprite gUnknown_83E4230, ANIM_TARGET, 3, 416, -38 + createsprite gUnknown_83E4230, ANIM_TARGET, 3, -128, -22 + createsprite gUnknown_83E4230, ANIM_TARGET, 3, -384, -31 + waitforvisualfinish + waitplaysewithpan SE_W213B, 0, 15 + createvisualtask sub_80A9CE8, 5, + createsprite gUnknown_83E4248, ANIM_ATTACKER, 40, 16, 256, 0 + createsprite gUnknown_83E4248, ANIM_ATTACKER, 40, 224, 240, 15 + createsprite gUnknown_83E4248, ANIM_ATTACKER, 40, 126, 272, 30 + createsprite gUnknown_83E4248, ANIM_ATTACKER, 40, 80, 224, 45 + createsprite gUnknown_83E4248, ANIM_ATTACKER, 40, 170, 272, 60 + createsprite gUnknown_83E4248, ANIM_ATTACKER, 40, 40, 256, 75 + createsprite gUnknown_83E4248, ANIM_ATTACKER, 40, 112, 256, 90 + createsprite gUnknown_83E4248, ANIM_ATTACKER, 40, 200, 272, 90 + delay 75 + createvisualtask sub_80B9BDC, 2, 4, 4, 4, 0, 10, 28479 + end + +Move_GROWTH:: @ 81C9953 + call gUnknown_81C9960 + waitforvisualfinish + call gUnknown_81C9960 + waitforvisualfinish + end + +gUnknown_81C9960:: @ 81C9960 + createvisualtask sub_80B9BDC, 2, 2, 0, 2, 0, 8, 32767 + playsewithpan SE_W036, 192 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, 0, 0 + return + +Move_WHIRLWIND:: @ 81C9989 + loadspritegfx 10162 + createsprite gUnknown_83E6C84, ANIM_ATTACKER, 2, 0, -8, 1, 60, 0 + createsprite gUnknown_83E6C84, ANIM_ATTACKER, 2, 0, 0, 1, 60, 1 + createsprite gUnknown_83E6C84, ANIM_ATTACKER, 2, 0, 8, 1, 60, 2 + createsprite gUnknown_83E6C84, ANIM_ATTACKER, 2, 0, 16, 1, 60, 3 + createsprite gUnknown_83E6C84, ANIM_ATTACKER, 2, 0, 24, 1, 60, 4 + createsprite gUnknown_83E6C84, ANIM_ATTACKER, 2, 0, 32, 1, 60, 0 + delay 5 + loopsewithpan SE_W104, 63, 10, 4 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 15, 1 + delay 29 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 1, 12, 6, 1, 5 + delay 7 + playsewithpan SE_W081, 63 + createvisualtask sub_80995FC, 5, 1, 8 + waitforvisualfinish + end + +Move_CONFUSE_RAY:: @ 81C9A31 + loadspritegfx 10013 + monbg 3 + fadetobg 2 + waitbgfadein + createvisualtask sub_80DD444, 2, -64, 63, 2, 0 + createvisualtask sub_80B9E58, 2, 10013, 0, 6, 0, 14, 351 + createsprite gUnknown_83E75C4, ANIM_TARGET, 2, 28, 0, 288 + waitforvisualfinish + setalpha 8, 8 + playsewithpan SE_W081B, 63 + createsprite gUnknown_83E75DC, ANIM_TARGET, 2, 0, -16 + waitforvisualfinish + delay 0 + blendoff + clearmonbg 3 + restorebg + waitbgfadein + end + +Move_LOCK_ON:: @ 81C9A84 + loadspritegfx 10014 + createsprite gUnknown_83E3518, ANIM_ATTACKER, 40, + createsprite gUnknown_83E3530, ANIM_ATTACKER, 40, 1 + createsprite gUnknown_83E3530, ANIM_ATTACKER, 40, 2 + createsprite gUnknown_83E3530, ANIM_ATTACKER, 40, 3 + createsprite gUnknown_83E3530, ANIM_ATTACKER, 40, 4 + delay 120 + setarg 7, 65535 + waitforvisualfinish + end + +Move_MEAN_LOOK:: @ 81C9ABA + loadspritegfx 10187 + monbg 3 + playsewithpan SE_W060, 192 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 16, 0 + loopsewithpan SE_W109, 63, 15, 4 + waitplaysewithpan SE_W043, 63, 85 + createsprite gUnknown_83FEEE4, ANIM_ATTACKER, 2, + delay 120 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, 0 + delay 30 + clearmonbg 3 + waitforvisualfinish + end + +Move_ROCK_THROW:: @ 81C9AFF + loadspritegfx 10058 + createsprite gUnknown_83E7B88, ANIM_TARGET, 2, 6, 1, 15, 1 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, 0, 1, 0, 0 + playsewithpan SE_W088, 63 + delay 6 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, 19, 1, 10, 0 + playsewithpan SE_W088, 63 + delay 6 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, -23, 2, -10, 0 + playsewithpan SE_W088, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 5, 20, 1 + delay 6 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, -15, 1, -10, 0 + playsewithpan SE_W088, 63 + delay 6 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, 23, 2, 10, 0 + playsewithpan SE_W088, 63 + waitforvisualfinish + end + +Move_ROCK_SLIDE:: @ 81C9B8B + loadspritegfx 10058 + monbg 3 + createsprite gUnknown_83E7B88, ANIM_ATTACKER, 2, 7, 1, 11, 1 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, -5, 1, -5, 1 + playsewithpan SE_W088, 63 + delay 2 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, 5, 0, 6, 1 + playsewithpan SE_W088, 63 + delay 2 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, 19, 1, 10, 1 + playsewithpan SE_W088, 63 + delay 2 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, -23, 2, -10, 1 + playsewithpan SE_W088, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 5, 50, 1 + createvisualtask AnimTask_ShakeMon, 2, 3, 0, 5, 50, 1 + delay 2 + call gUnknown_81C9C23 + call gUnknown_81C9C23 + waitforvisualfinish + clearmonbg 3 + end + +gUnknown_81C9C23:: @ 81C9C23 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, -20, 0, -10, 1 + playsewithpan SE_W088, 63 + delay 2 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, 28, 1, 10, 1 + playsewithpan SE_W088, 63 + delay 2 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, -10, 1, -5, 1 + playsewithpan SE_W088, 63 + delay 2 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, 10, 0, 6, 1 + playsewithpan SE_W088, 63 + delay 2 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, 24, 1, 10, 1 + playsewithpan SE_W088, 63 + delay 2 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, -32, 2, -10, 1 + playsewithpan SE_W088, 63 + delay 2 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, -20, 0, -10, 1 + playsewithpan SE_W088, 63 + delay 2 + createsprite gUnknown_83E73B4, ANIM_TARGET, 2, 30, 2, 10, 1 + playsewithpan SE_W088, 63 + delay 2 + return + +Move_THIEF:: @ 81C9CCC + loadspritegfx 10135 + monbg 1 + delay 1 + fadetobg 1 + waitbgfadein + setalpha 12, 8 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 + delay 6 + playsewithpan SE_W233, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 1, 0, 8, 1 + waitforvisualfinish + delay 20 + clearmonbg 1 + blendoff + restorebg + waitbgfadein + end + +Move_BUBBLE_BEAM:: @ 81C9D13 + loadspritegfx 10146 + loadspritegfx 10155 + monbg 1 + monbgprio_28 1 + setalpha 12, 8 + delay 1 + call gUnknown_81C9D4D + createvisualtask AnimTask_SwayMon, 5, 0, 3, 3072, 8, 1 + call gUnknown_81C9D4D + call gUnknown_81C9D4D + waitforvisualfinish + call gUnknown_81D57CC + waitforvisualfinish + clearmonbg 1 + blendoff + end + +gUnknown_81C9D4D:: @ 81C9D4D + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 35, 70, 0, 256, 50 + playsewithpan SE_W145, 192 + delay 3 + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 20, 40, -10, 256, 50 + playsewithpan SE_W145, 192 + delay 3 + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 10, -60, 0, 256, 50 + playsewithpan SE_W145, 192 + delay 3 + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 15, -15, 10, 256, 50 + playsewithpan SE_W145, 192 + delay 3 + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 30, 10, -10, 256, 50 + playsewithpan SE_W145, 192 + delay 3 + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 25, -30, 10, 256, 50 + playsewithpan SE_W145, 192 + delay 3 + return + +Move_ICY_WIND:: @ 81C9DF0 + loadspritegfx 10141 + loadspritegfx 10142 + monbg 3 + createvisualtask sub_80BA7F8, 10, 11, 4, 0, 4, 0 + fadetobg 15 + waitbgfadeout + playsewithpan SE_W196, 0 + waitbgfadein + waitforvisualfinish + panse_1B SE_W016, 192, 63, 2, 0 + call gUnknown_81C9E48 + delay 5 + call gUnknown_81C9E48 + playsewithpan SE_W016B, 63 + delay 55 + call gUnknown_81D55E2 + waitforvisualfinish + clearmonbg 3 + restorebg + waitbgfadeout + createvisualtask sub_80BA7F8, 10, 11, 4, 4, 0, 0 + waitbgfadein + end + +gUnknown_81C9E48:: @ 81C9E48 + createsprite gUnknown_83E6410, ANIM_TARGET, 40, 0, 0, 0, 0, 72, 1 + delay 5 + createsprite gUnknown_83E6410, ANIM_TARGET, 40, 0, 10, 0, 10, 72, 1 + delay 5 + createsprite gUnknown_83E6410, ANIM_TARGET, 40, 0, -10, 0, -10, 72, 1 + delay 5 + createsprite gUnknown_83E6410, ANIM_TARGET, 40, 0, 15, 0, 15, 72, 1 + delay 5 + createsprite gUnknown_83E6410, ANIM_TARGET, 40, 0, -5, 0, -5, 72, 1 + return + +Move_SMOKESCREEN:: @ 81C9EB0 + loadspritegfx 10016 + loadspritegfx 10017 + playsewithpan SE_W104, 192 + createsprite gUnknown_83FEE30, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25 + waitforvisualfinish + createvisualtask sub_80DE34C, 2, + delay 2 + playsewithpan SE_W028, 63 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, -12, 104, 0, 75 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, -12, 72, 1, 75 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, -6, 56, 1, 75 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, -6, 88, 0, 75 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, 0, 56, 0, 75 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, 0, 88, 1, 75 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, 6, 72, 0, 75 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, 6, 104, 1, 75 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, 12, 72, 0, 75 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, 12, 56, 1, 75 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, 18, 80, 0, 75 + createsprite gUnknown_83FEE18, ANIM_TARGET, 4, 0, 18, 72, 1, 75 + waitforvisualfinish + end + +Move_CONVERSION:: @ 81C9FA9 + loadspritegfx 10018 + monbg 2 + monbgprio_28 0 + setalpha 16, 0 + delay 0 + playsewithpan SE_W129, 192 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, -24, -24 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, -8, -24 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, 8, -24 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, 24, -24 + delay 3 + playsewithpan SE_W129, 192 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, -24, -8 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, -8, -8 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, 8, -8 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, 24, -8 + delay 3 + playsewithpan SE_W129, 192 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, -24, 8 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, -8, 8 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, 8, 8 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, 24, 8 + delay 3 + playsewithpan SE_W129, 192 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, -24, 24 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, -8, 24 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, 8, 24 + delay 3 + createsprite gUnknown_83E36EC, ANIM_ATTACKER, 2, 24, 24 + delay 20 + playsewithpan SE_W112, 192 + createvisualtask sub_80B9F6C, 2, 10018, 1, 1, 14335, 12, 0, 0 + delay 6 + createvisualtask sub_80A5CD4, 5, + waitforvisualfinish + delay 1 + clearmonbg 2 + blendoff + end + +Move_CONVERSION_2:: @ 81CA0BE + loadspritegfx 10018 + monbg 3 + monbgprio_2A 1 + setalpha 0, 16 + delay 0 + playsewithpan SE_W112, 63 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, -24, -24, 60 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, -8, -24, 65 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, 8, -24, 70 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, 24, -24, 75 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, -24, -8, 80 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, -8, -8, 85 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, 8, -8, 90 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, 24, -8, 95 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, -24, 8, 100 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, -8, 8, 105 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, 8, 8, 110 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, 24, 8, 115 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, -24, 24, 120 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, -8, 24, 125 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, 8, 24, 130 + createsprite gUnknown_83E371C, ANIM_ATTACKER, 2, 24, 24, 135 + createvisualtask sub_80A5DE0, 5, + delay 60 + playsewithpan SE_W129, 63 + delay 10 + playsewithpan SE_W129, 63 + delay 10 + playsewithpan SE_W129, 63 + delay 10 + playsewithpan SE_W129, 63 + delay 10 + playsewithpan SE_W129, 63 + delay 10 + playsewithpan SE_W129, 63 + delay 10 + playsewithpan SE_W129, 63 + delay 10 + playsewithpan SE_W129, 63 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_ROLLING_KICK:: @ 81CA1DA + loadspritegfx 10143 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 18, 6, 1, 4 + playsewithpan SE_W104, 192 + delay 6 + playsewithpan SE_W104, 192 + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + createsprite gUnknown_83E6758, ANIM_ATTACKER, 2, -24, 0, 48, 10, 160, 0 + delay 5 + playsewithpan SE_W233B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 6, 1 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 8 + clearmonbg 1 + blendoff + end + +Move_HEADBUTT:: @ 81CA25D + loadspritegfx 10135 + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 0 + playsewithpan SE_W029, 192 + waitforvisualfinish + delay 2 + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 1 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, 0, 2, 0, 4, 1 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 6, 1 + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 2 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 0, 0, 1, 1 + playsewithpan SE_W233B, 63 + waitforvisualfinish + end + +Move_HORN_ATTACK:: @ 81CA2BA + loadspritegfx 10135 + loadspritegfx 10020 + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 0 + playsewithpan SE_W029, 192 + waitforvisualfinish + delay 2 + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 1 + createsprite gUnknown_83E37BC, ANIM_TARGET, 4, 0, 0, 10 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, 0, 2, 0, 4, 1 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 6, 1 + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 2 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 0, 0, 1, 1 + playsewithpan SE_W030, 63 + waitforvisualfinish + end + +Move_FURY_ATTACK:: @ 81CA327 + loadspritegfx 10135 + loadspritegfx 10020 + createvisualtask sub_8099980, 2, 4, 256, 0, 2 + choosetwoturnanim gUnknown_81CA358, gUnknown_81CA37E + +gUnknown_81CA345:: @ 81CA345 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 6, 1 + waitforvisualfinish + end + +gUnknown_81CA358:: @ 81CA358 + createsprite gUnknown_83E37BC, ANIM_TARGET, 4, 8, 8, 10 + waitforvisualfinish + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 0, 0, 1, 1 + playsewithpan SE_W030, 63 + goto gUnknown_81CA345 + +gUnknown_81CA37E:: @ 81CA37E + createsprite gUnknown_83E37BC, ANIM_TARGET, 4, -8, -8, 10 + waitforvisualfinish + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 0, 0, 1, 1 + playsewithpan SE_W030, 63 + goto gUnknown_81CA345 + +Move_HORN_DRILL:: @ 81CA3A4 + loadspritegfx 10135 + loadspritegfx 10020 + jumpifcontest gUnknown_81CA50A + fadetobg 7 + waitbgfadeout + createvisualtask sub_80BB82C, 5, -2304, 768, 1, -1 + +gUnknown_81CA3C1:: @ 81CA3C1 + waitbgfadein + setalpha 12, 8 + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 0 + playsewithpan SE_W029, 192 + waitforvisualfinish + delay 2 + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 1 + createsprite gUnknown_83E37BC, ANIM_TARGET, 4, 0, 0, 12 + waitforvisualfinish + playse SE_BAN + createvisualtask AnimTask_ShakeMonInPlace, 2, 0, 2, 0, 40, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 10, 0, 40, 1 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 0, 0, 1, 3 + playsewithpan SE_W030, 63 + delay 4 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 0, 2, 1, 3 + playsewithpan SE_W030, 63 + delay 4 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, -4, 3, 1, 3 + playsewithpan SE_W030, 63 + delay 4 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, -8, -5, 1, 3 + playsewithpan SE_W030, 63 + delay 4 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 4, -12, 1, 3 + playsewithpan SE_W030, 63 + delay 4 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 16, 0, 1, 3 + playsewithpan SE_W030, 63 + delay 4 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 5, 18, 1, 3 + playsewithpan SE_W030, 63 + delay 4 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, -17, 12, 1, 2 + playsewithpan SE_W030, 63 + delay 4 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, -21, -15, 1, 2 + playsewithpan SE_W030, 63 + delay 4 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 8, -27, 1, 2 + playsewithpan SE_W030, 63 + delay 4 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 32, 0, 1, 2 + playsewithpan SE_W030, 63 + delay 4 + createsprite gUnknown_83E3550, ANIM_ATTACKER, 2, 2 + waitforvisualfinish + restorebg + waitbgfadeout + setarg 7, 65535 + waitbgfadein + end + +gUnknown_81CA50A:: @ 81CA50A + fadetobg 8 + waitbgfadeout + createvisualtask sub_80BB82C, 5, 2304, 768, 0, -1 + goto gUnknown_81CA3C1 + +Move_THRASH:: @ 81CA521 + loadspritegfx 10135 + loadspritegfx 10143 + createvisualtask sub_80A8638, 2, + createvisualtask sub_80A86A4, 2, + createsprite gUnknown_83E6728, ANIM_TARGET, 3, 1, 10, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 4, 0, 7, 1 + playsewithpan SE_W004, 63 + delay 28 + createsprite gUnknown_83E6728, ANIM_TARGET, 3, 1, 10, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 4, 0, 7, 1 + playsewithpan SE_W233B, 63 + delay 28 + createsprite gUnknown_83E6728, ANIM_TARGET, 3, 1, 10, 3 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 8, 0, 16, 1 + playsewithpan SE_W025B, 63 + end + +Move_SING:: @ 81CA5A0 + loadspritegfx 10072 + monbg 3 + createvisualtask sub_80A65E8, 2, + waitforvisualfinish + panse_1B SE_W047, 192, 63, 2, 0 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 7, 0, 12 + delay 5 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 6, 1, 12 + delay 5 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 1, 2, 12 + delay 5 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 2, 3, 12 + delay 5 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 3, 0, 12 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 2, 1, 12 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 5, 2, 12 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 6, 3, 12 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 2, 0, 12 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 2, 1, 12 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 1, 2, 12 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 5, 3, 12 + delay 4 + waitforvisualfinish + clearmonbg 3 + createvisualtask sub_80A66A0, 2, + waitforvisualfinish + end + +Move_LOW_KICK:: @ 81CA674 + loadspritegfx 10143 + loadspritegfx 10135 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + createsprite gUnknown_83E6758, ANIM_TARGET, 2, -24, 28, 40, 8, 160, 0 + delay 4 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 8, 1, 2 + createvisualtask sub_8099980, 2, 6, 384, 1, 2 + playsewithpan SE_W233B, 63 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 + end + +Move_EARTHQUAKE:: @ 81CA6D1 + createvisualtask sub_80B94B4, 5, 5, 10, 50 + createvisualtask sub_80B94B4, 5, 4, 10, 50 + playsewithpan SE_W089, 0 + delay 10 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 0, 14, 32767, 14 + delay 16 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 0, 14, 32767, 14 + end + +Move_FISSURE:: @ 81CA71E + loadspritegfx 10074 + createvisualtask sub_80B94B4, 3, 5, 10, 50 + createvisualtask sub_80B94B4, 3, 1, 10, 50 + playsewithpan SE_W089, 63 + delay 8 + call gUnknown_81CA79F + delay 15 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 0, 14, 32767, 14 + delay 15 + call gUnknown_81CA7F0 + delay 15 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 0, 14, 32767, 14 + delay 15 + call gUnknown_81CA79F + delay 50 + fadetobg 21 + waitbgfadeout + createvisualtask sub_80B9800, 5, 1, 5, -1 + waitbgfadein + delay 40 + restorebg + waitbgfadeout + setarg 7, 65535 + waitbgfadein + end + +gUnknown_81CA79F:: @ 81CA79F + createsprite gUnknown_83E7AAC, ANIM_TARGET, 2, 1, 0, 12, -48, -16, 24 + createsprite gUnknown_83E7AAC, ANIM_TARGET, 2, 1, 0, 16, -16, -10, 24 + createsprite gUnknown_83E7AAC, ANIM_TARGET, 2, 1, 1, 14, -52, -18, 24 + createsprite gUnknown_83E7AAC, ANIM_TARGET, 2, 1, 1, 12, -32, -16, 24 + playsewithpan SE_W091, 63 + return + +gUnknown_81CA7F0:: @ 81CA7F0 + createsprite gUnknown_83E7AAC, ANIM_TARGET, 2, 1, 0, 12, -24, -16, 24 + createsprite gUnknown_83E7AAC, ANIM_TARGET, 2, 1, 0, 16, -38, -10, 24 + createsprite gUnknown_83E7AAC, ANIM_TARGET, 2, 1, 1, 14, -20, -18, 24 + createsprite gUnknown_83E7AAC, ANIM_TARGET, 2, 1, 1, 12, -36, -16, 24 + playsewithpan SE_W091, 63 + return + +Move_DIG:: @ 81CA841 + choosetwoturnanim gUnknown_81CA84B, gUnknown_81CA8A6 + +gUnknown_81CA84A:: @ 81CA84A + end + +gUnknown_81CA84B:: @ 81CA84B + loadspritegfx 10074 + loadspritegfx 10281 + createsprite gUnknown_83E7AC4, ANIM_ATTACKER, 1, 0, 0, 180 + createsprite gUnknown_83E7AC4, ANIM_ATTACKER, 1, 0, 1, 180 + monbg_22 0 + delay 1 + createvisualtask sub_80B8E94, 2, 0 + delay 6 + call gUnknown_81CA90A + call gUnknown_81CA90A + call gUnknown_81CA90A + call gUnknown_81CA90A + call gUnknown_81CA90A + waitforvisualfinish + clearmonbg_23 0 + delay 1 + createvisualtask sub_80B8E94, 2, 1 + goto gUnknown_81CA84A + +gUnknown_81CA8A6:: @ 81CA8A6 + loadspritegfx 10135 + loadspritegfx 10281 + createvisualtask sub_80B90EC, 2, 0 + waitforvisualfinish + monbg 0 + createsprite gUnknown_83E7AC4, ANIM_ATTACKER, 1, 0, 0, 48 + createsprite gUnknown_83E7AC4, ANIM_ATTACKER, 1, 0, 1, 48 + delay 1 + createvisualtask sub_80B90EC, 2, 1 + delay 16 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 6, 1 + playsewithpan SE_W025B, 192 + clearmonbg 0 + goto gUnknown_81CA84A + +gUnknown_81CA90A:: @ 81CA90A + createsprite gUnknown_83E7AAC, ANIM_ATTACKER, 2, 0, 0, 12, 4, -16, 18 + createsprite gUnknown_83E7AAC, ANIM_ATTACKER, 2, 0, 0, 16, 4, -10, 18 + createsprite gUnknown_83E7AAC, ANIM_ATTACKER, 2, 0, 1, 14, 4, -18, 18 + createsprite gUnknown_83E7AAC, ANIM_ATTACKER, 2, 0, 1, 12, 4, -16, 18 + playsewithpan SE_W091, 192 + delay 32 + return + +Move_MEDITATE:: @ 81CA95D + call gUnknown_81D59BB + createvisualtask sub_80B3418, 2, + playsewithpan SE_W029, 192 + delay 16 + playsewithpan SE_W036, 192 + waitforvisualfinish + call gUnknown_81D59C7 + end + +Move_AGILITY:: @ 81CA97A + monbg 2 + setalpha 12, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 24, 6, 4, 4 + createvisualtask sub_80BAB98, 2, 0, 4, 7, 10 + playsewithpan SE_W104, 192 + delay 12 + playsewithpan SE_W104, 192 + delay 12 + playsewithpan SE_W104, 192 + delay 12 + playsewithpan SE_W104, 192 + delay 12 + playsewithpan SE_W104, 192 + delay 12 + waitforvisualfinish + clearmonbg 2 + blendoff + delay 1 + end + +Move_QUICK_ATTACK:: @ 81CA9C4 + loadspritegfx 10135 + monbg 2 + setalpha 12, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 24, 6, 1, 5 + createvisualtask sub_80BAB98, 2, 0, 4, 7, 3 + playsewithpan SE_W026, 192 + delay 4 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 6, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, 1, 1 + playsewithpan SE_W233B, 63 + waitforvisualfinish + clearmonbg 2 + blendoff + waitforvisualfinish + end + +Move_RAGE:: @ 81CAA1C + loadspritegfx 10135 + loadspritegfx 10087 + monbg 1 + setalpha 12, 8 + createvisualtask AnimTask_BlendMonInAndOut, 3, 0, 31, 10, 0, 2 + createsprite gUnknown_83E3F04, ANIM_ATTACKER, 2, 0, -20, -28 + playsewithpan SE_W207B, 192 + delay 20 + createsprite gUnknown_83E3F04, ANIM_ATTACKER, 2, 0, 20, -28 + playsewithpan SE_W207B, 192 + waitforvisualfinish + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 + delay 4 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask sub_8099BD4, 2, 1, 1, 10, 1, 0 + playsewithpan SE_W233B, 63 + waitforvisualfinish + clearmonbg 1 + end + +Move_TELEPORT:: @ 81CAA92 + call gUnknown_81D59BB + createvisualtask sub_80B3480, 2, + playsewithpan SE_W100, 192 + delay 15 + call gUnknown_81D59C7 + waitforvisualfinish + end + +Move_DOUBLE_TEAM:: @ 81CAAAB + monbg 2 + setalpha 12, 8 + createvisualtask sub_80A63B4, 2, + playsewithpan SE_W104, 192 + delay 32 + playsewithpan SE_W104, 192 + delay 24 + playsewithpan SE_W104, 192 + delay 16 + playsewithpan SE_W104, 192 + delay 8 + playsewithpan SE_W104, 192 + delay 8 + playsewithpan SE_W104, 192 + delay 8 + playsewithpan SE_W104, 192 + delay 8 + playsewithpan SE_W104, 192 + delay 8 + playsewithpan SE_W104, 192 + waitforvisualfinish + clearmonbg 2 + blendoff + delay 1 + end + +Move_MINIMIZE:: @ 81CAAF2 + setalpha 10, 8 + createvisualtask sub_80A8074, 2, + loopsewithpan SE_W107, 192, 34, 3 + waitforvisualfinish + blendoff + end + +Move_METRONOME:: @ 81CAB05 + loadspritegfx 10064 + loadspritegfx 10209 + createsprite gUnknown_83E398C, ANIM_ATTACKER, 11, 0, 100 + playsewithpan SE_W118, 192 + delay 6 + createsprite gUnknown_83E3A34, ANIM_ATTACKER, 12, 0 + delay 24 + loopsewithpan SE_W039, 192, 22, 3 + waitforvisualfinish + end + +Move_SKULL_BASH:: @ 81CAB2F + choosetwoturnanim gUnknown_81CAB39, gUnknown_81CAB86 + +gUnknown_81CAB38:: @ 81CAB38 + end + +gUnknown_81CAB39:: @ 81CAB39 + call gUnknown_81CAB49 + call gUnknown_81CAB49 + waitforvisualfinish + goto gUnknown_81CAB38 + +gUnknown_81CAB49:: @ 81CAB49 + createsprite gUnknown_83D4EB4, ANIM_ATTACKER, 2, 0, -24, 0, 0, 10, 0 + playsewithpan SE_W036, 192 + waitforvisualfinish + createvisualtask sub_8099980, 2, 16, 96, 0, 2 + waitforvisualfinish + createsprite gUnknown_83D4EB4, ANIM_ATTACKER, 2, 0, 24, 0, 0, 10, 1 + waitforvisualfinish + return + +gUnknown_81CAB86:: @ 81CAB86 + loadspritegfx 10135 + createvisualtask sub_80A5694, 2, 0 + playsewithpan SE_W036, 192 + waitforvisualfinish + playse SE_BAN + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 0, 14, 32767, 14 + createvisualtask AnimTask_ShakeMonInPlace, 2, 0, 2, 0, 40, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 10, 0, 40, 1 + createsprite gUnknown_83E7C98, ANIM_TARGET, 4, 0, 0, 1, 0 + loopsewithpan SE_W025B, 63, 8, 3 + waitforvisualfinish + createvisualtask sub_80A5694, 2, 1 + goto gUnknown_81CAB38 + +Move_AMNESIA:: @ 81CABF5 + loadspritegfx 10093 + call gUnknown_81D59BB + delay 8 + createsprite gUnknown_83E6FF4, ANIM_ATTACKER, 20, + playsewithpan SE_W118, 192 + delay 54 + loopsewithpan SE_W118, 192, 16, 3 + waitforvisualfinish + call gUnknown_81D59C7 + end + +Move_KINESIS:: @ 81CAC19 + loadspritegfx 10075 + loadspritegfx 10097 + playsewithpan SE_W060, 192 + call gUnknown_81D59BB + createsprite gUnknown_83E6F8C, ANIM_ATTACKER, 20, + createsprite gUnknown_83E3BBC, ANIM_ATTACKER, 19, 32, -8, 0 + createsprite gUnknown_83E3BBC, ANIM_ATTACKER, 19, 32, 16, 1 + loopsewithpan SE_W109, 192, 21, 2 + delay 60 + playsewithpan SE_W146, 192 + delay 30 + loopsewithpan SE_W146, 192, 20, 2 + delay 70 + playsewithpan SE_W207B, 192 + waitforvisualfinish + call gUnknown_81D59C7 + end + +Move_GLARE:: @ 81CAC6A + loadspritegfx 10248 + loadspritegfx 10218 + createvisualtask sub_80E21CC, 5, 0 + playsewithpan SE_W060B, 192 + waitforvisualfinish + createvisualtask sub_80BA7F8, 5, 1, 0, 0, 16, 0 + waitforvisualfinish + createsprite gUnknown_83E42FC, ANIM_ATTACKER, 0, -16, -8 + createsprite gUnknown_83E42FC, ANIM_ATTACKER, 0, 16, -8 + createvisualtask sub_80A9F10, 5, + playsewithpan SE_W043, 192 + delay 2 + createvisualtask sub_80ADAD8, 3, 20, 1, 0 + waitforvisualfinish + createvisualtask sub_80BA7F8, 5, 1, 0, 16, 0, 0 + end + +Move_BARRAGE:: @ 81CACD3 + loadspritegfx 10254 + createvisualtask sub_80E2518, 3, + playsewithpan SE_W207, 192 + delay 24 + createsprite gUnknown_83E7B88, ANIM_ATTACKER, 2, 8, 1, 40, 1 + createvisualtask AnimTask_ShakeMon, 3, 1, 0, 4, 20, 1 + createvisualtask AnimTask_ShakeMon, 3, 3, 0, 4, 20, 1 + loopsewithpan SE_W070, 63, 8, 2 + end + +Move_SKY_ATTACK:: @ 81CAD1B + choosetwoturnanim gUnknown_81CAD25, gUnknown_81CAE2E + +gUnknown_81CAD24:: @ 81CAD24 + end + +gUnknown_81CAD25:: @ 81CAD25 + monbg 3 + setalpha 12, 11 + createvisualtask AnimTask_GetTargetIsAttackerPartner, 5, 7 + jumpargeq 7, 0, gUnknown_81CAD40 + goto gUnknown_81CADB7 + +gUnknown_81CAD40:: @ 81CAD40 + createvisualtask sub_80BA7F8, 10, 27, 1, 0, 12, 0 + waitforvisualfinish + delay 12 + createvisualtask sub_80BA7F8, 10, 2, 1, 8, 0, 0 + createvisualtask sub_80B94B4, 5, 0, 2, 16 + loopsewithpan SE_W287, 192, 4, 8 + createvisualtask sub_80BA7F8, 10, 2, 1, 0, 15, 32767 + delay 20 + createvisualtask sub_80BA7F8, 10, 2, 1, 15, 0, 32767 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 25, 1, 8, 0, 0 + waitforvisualfinish + clearmonbg 3 + blendoff + goto gUnknown_81CAD24 + +gUnknown_81CADB7:: @ 81CADB7 + createvisualtask sub_80BA83C, 10, 1, 1, 0, 12, 0 + waitforvisualfinish + delay 12 + createvisualtask sub_80BA7F8, 10, 2, 1, 8, 0, 0 + createvisualtask sub_80B94B4, 5, 0, 2, 16 + playsewithpan SE_W287, 192 + delay 8 + createvisualtask sub_80BA7F8, 10, 2, 1, 0, 15, 32767 + delay 20 + createvisualtask sub_80BA7F8, 10, 2, 1, 15, 0, 32767 + waitforvisualfinish + createvisualtask sub_80BA83C, 10, 4, 1, 8, 0, 0 + waitforvisualfinish + clearmonbg 3 + blendoff + goto gUnknown_81CAD24 + +gUnknown_81CAE2E:: @ 81CAE2E + loadspritegfx 10135 + loadspritegfx 10284 + call gUnknown_81D59CF + monbg 0 + createvisualtask sub_80BA7F8, 10, 2, 0, 0, 16, 32767 + delay 4 + createvisualtask sub_80B78E0, 5, 0 + waitforvisualfinish + createvisualtask sub_80DD410, 5, 231, -64 + createsprite gUnknown_83E6DB4, ANIM_TARGET, 2, + delay 14 + createvisualtask AnimTask_ShakeMon2, 2, 1, 10, 0, 18, 1 + createvisualtask sub_80DD3DC, 5, 134, 63 + delay 20 + createvisualtask sub_80B79DC, 5, 1 + delay 2 + createvisualtask sub_80BA7F8, 10, 2, 0, 15, 0, 32767 + waitforvisualfinish + clearmonbg 0 + call gUnknown_81D59FF + goto gUnknown_81CAD24 + +Move_FLASH:: @ 81CAEB3 + playsewithpan SE_W043, 192 + createvisualtask sub_80BB660, 2, + waitforvisualfinish + end + +Move_SPLASH:: @ 81CAEC0 + createvisualtask sub_80A8338, 2, 0, 3 + delay 8 + loopsewithpan SE_W039, 192, 38, 3 + waitforvisualfinish + end + +Move_ACID_ARMOR:: @ 81CAED5 + monbg 0 + setalpha 15, 0 + createvisualtask sub_80E12F8, 2, 0 + playsewithpan SE_W151, 192 + waitforvisualfinish + blendoff + clearmonbg 0 + delay 1 + end + +Move_SHARPEN:: @ 81CAEEE + loadspritegfx 10185 + createsprite gUnknown_83E365C, ANIM_ATTACKER, 2, + waitforvisualfinish + end + +Move_SUPER_FANG:: @ 81CAEFA + loadspritegfx 10192 + createvisualtask AnimTask_ShakeMonInPlace, 2, 0, 1, 0, 20, 1 + playsewithpan SE_W082, 192 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, 0, 3, 0, 48, 1 + createvisualtask AnimTask_BlendMonInAndOut, 2, 0, 1247, 12, 4, 1 + waitforvisualfinish + delay 20 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 + delay 4 + createsprite gUnknown_83E37EC, ANIM_TARGET, 2, + playsewithpan SE_W044, 63 + delay 8 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 2143, 14, 32767, 14 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 7, 12, 1 + waitforvisualfinish + blendoff + end + +Move_SLASH:: @ 81CAF7B + loadspritegfx 10183 + createsprite gUnknown_83E35A4, ANIM_TARGET, 2, 1, -8, 0 + playsewithpan SE_W013, 63 + delay 4 + createsprite gUnknown_83E35A4, ANIM_TARGET, 2, 1, 8, 0 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 18, 1 + playsewithpan SE_W013, 63 + waitforvisualfinish + end + +Move_STRUGGLE:: @ 81CAFB5 + loadspritegfx 10135 + loadspritegfx 10215 + monbg 1 + setalpha 12, 8 + createvisualtask AnimTask_ShakeMonInPlace, 2, 0, 3, 0, 12, 4 + createsprite gUnknown_83E43F8, ANIM_ATTACKER, 2, 0, 0, 2 + createsprite gUnknown_83E43F8, ANIM_ATTACKER, 2, 0, 1, 2 + loopsewithpan SE_W029, 192, 12, 4 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 3, 0, 6, 1 + playsewithpan SE_W025B, 63 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_SKETCH:: @ 81CB01B + loadspritegfx 10002 + monbg 1 + createvisualtask sub_80A8874, 2, + createsprite gUnknown_83E3F4C, ANIM_TARGET, 2, + waitforvisualfinish + clearmonbg 1 + createvisualtask sub_80A8338, 2, 0, 2 + loopsewithpan SE_W039, 192, 38, 2 + end + +Move_NIGHTMARE:: @ 81CB043 + fadetobg 2 + waitbgfadein + jumpifcontest gUnknown_81CB06F + monbg 3 + createvisualtask sub_80B58AC, 2, + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 40, 1 + playsewithpan SE_W171, 63 + waitforvisualfinish + clearmonbg 3 + restorebg + waitbgfadein + end + +gUnknown_81CB06F:: @ 81CB06F + createvisualtask AnimTask_BlendMonInAndOut, 2, 0, 32767, 10, 2, 1 + createvisualtask AnimTask_ShakeMon, 2, 0, 3, 0, 32, 1 + playsewithpan SE_W171, 63 + waitforvisualfinish + restorebg + waitbgfadein + end + +Move_FLAIL:: @ 81CB099 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + createvisualtask sub_80E0850, 2, 0 + loopsewithpan SE_W029, 192, 8, 2 + waitforvisualfinish + createsprite gUnknown_83E7C50, ANIM_TARGET, 3, 1, 3 + createvisualtask sub_8099BD4, 2, 0, 1, 30, 1, 0 + playsewithpan SE_W025B, 63 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_SPITE:: @ 81CB0D6 + fadetobg 2 + playsewithpan SE_W060, 192 + waitbgfadein + monbg 3 + createvisualtask sub_80B9BDC, 2, 2, 2, 6, 0, 8, 32767 + createvisualtask sub_80B5AAC, 2, + loopsewithpan SE_W060, 63, 20, 3 + waitforvisualfinish + restorebg + waitbgfadein + clearmonbg 1 + end + +Move_MACH_PUNCH:: @ 81CB105 + loadspritegfx 10135 + loadspritegfx 10143 + monbg 2 + createvisualtask AnimTask_GetAttackerSide, 2, + jumpargeq 7, 1, gUnknown_81CB186 + fadetobg 9 + +gUnknown_81CB11E:: @ 81CB11E + waitbgfadeout + createvisualtask sub_80BB82C, 5, -2304, 0, 1, -1 + waitbgfadein + delay 0 + setalpha 9, 8 + createvisualtask sub_8077030, 2, 28968, 10 + playsewithpan SE_W026, 192 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0 + playsewithpan SE_W004, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + waitforvisualfinish + clearmonbg 2 + blendoff + restorebg + waitbgfadeout + setarg 7, 65535 + waitbgfadein + end + +gUnknown_81CB186:: @ 81CB186 + fadetobg 10 + goto gUnknown_81CB11E + +Move_FORESIGHT:: @ 81CB18D + loadspritegfx 10258 + monbg 3 + monbgprio_28 1 + setalpha 16, 0 + createsprite gUnknown_83FF6A4, ANIM_TARGET, 2, 1 + delay 17 + loopsewithpan SE_W166, 63, 16, 4 + delay 48 + delay 24 + playsewithpan SE_W166, 63 + delay 10 + createvisualtask AnimTask_BlendMonInAndOut, 5, 1, 32767, 12, 2, 1 + playsewithpan SE_W197, 63 + waitforvisualfinish + blendoff + clearmonbg 3 + end + +Move_DESTINY_BOND:: @ 81CB1CC + loadspritegfx 10188 + fadetobg 2 + playsewithpan SE_W060, 192 + waitbgfadein + createvisualtask sub_80B6020, 5, 0, 48 + playsewithpan SE_W109, 192 + delay 48 + createvisualtask AnimTask_ShakeMonInPlace, 2, 0, 2, 0, 24, 1 + createvisualtask sub_80BA83C, 2, 6, 1, 0, 12, 30653 + delay 24 + createvisualtask sub_80BA83C, 2, 6, 1, 12, 0, 30653 + playsewithpan SE_W171, 63 + waitforvisualfinish + restorebg + waitbgfadein + blendoff + clearmonbg 5 + end + +Move_ENDURE:: @ 81CB227 + loadspritegfx 10184 + playsewithpan SE_W082, 192 + call gUnknown_81CB267 + delay 8 + createvisualtask sub_80B9BDC, 2, 2, 2, 2, 0, 11, 31 + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1 + call gUnknown_81CB267 + delay 8 + call gUnknown_81CB267 + waitforvisualfinish + end + +gUnknown_81CB267:: @ 81CB267 + createsprite gUnknown_83E3604, ANIM_ATTACKER, 2, 0, -24, 26, 2 + delay 4 + createsprite gUnknown_83E3604, ANIM_ATTACKER, 2, 0, 14, 28, 1 + delay 4 + createsprite gUnknown_83E3604, ANIM_ATTACKER, 2, 0, -5, 10, 2 + delay 4 + createsprite gUnknown_83E3604, ANIM_ATTACKER, 2, 0, 28, 26, 3 + delay 4 + createsprite gUnknown_83E3604, ANIM_ATTACKER, 2, 0, -12, 0, 1 + return + +Move_CHARM:: @ 81CB2BB + loadspritegfx 10210 + createvisualtask sub_80E0558, 5, 0, 2, 0 + createsprite gUnknown_83E41E8, ANIM_ATTACKER, 3, 0, 20 + playsewithpan SE_W204, 192 + delay 15 + createsprite gUnknown_83E41E8, ANIM_ATTACKER, 3, -20, 20 + playsewithpan SE_W204, 192 + delay 15 + createsprite gUnknown_83E41E8, ANIM_ATTACKER, 3, 20, 20 + playsewithpan SE_W204, 192 + waitforvisualfinish + end + +Move_ROLLOUT:: @ 81CB2FE + loadspritegfx 10135 + loadspritegfx 10074 + loadspritegfx 10058 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + createvisualtask sub_80B4BD0, 2, + waitforvisualfinish + createvisualtask sub_8099BD4, 2, 0, 1, 30, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 1, 2 + playsewithpan SE_W025B, 63 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_FALSE_SWIPE:: @ 81CB33F + loadspritegfx 10286 + loadspritegfx 10135 + createsprite gUnknown_83E35BC, ANIM_TARGET, 2, + playsewithpan SE_W233, 63 + delay 16 + createsprite gUnknown_83E35D4, ANIM_TARGET, 2, 0 + playsewithpan SE_W104, 63 + delay 2 + createsprite gUnknown_83E35D4, ANIM_TARGET, 2, 16 + delay 2 + createsprite gUnknown_83E35D4, ANIM_TARGET, 2, 32 + playsewithpan SE_W104, 63 + delay 2 + createsprite gUnknown_83E35D4, ANIM_TARGET, 2, 48 + delay 2 + createsprite gUnknown_83E35D4, ANIM_TARGET, 2, 64 + playsewithpan SE_W104, 63 + delay 2 + createsprite gUnknown_83E35D4, ANIM_TARGET, 2, 80 + delay 2 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 6, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, 1, 3 + playsewithpan SE_W004, 63 + end + +Move_SWAGGER:: @ 81CB3C6 + loadspritegfx 10086 + loadspritegfx 10087 + createvisualtask sub_80A84B4, 2, + playsewithpan SE_W207, 192 + waitforvisualfinish + createsprite gUnknown_83E3ED0, ANIM_ATTACKER, 2, + loopsewithpan SE_W207, 192, 4, 2 + waitforvisualfinish + delay 24 + createsprite gUnknown_83E3F04, ANIM_TARGET, 2, 1, -20, -28 + playsewithpan SE_W207B, 63 + delay 12 + createsprite gUnknown_83E3F04, ANIM_TARGET, 2, 1, 20, -28 + playsewithpan SE_W207B, 63 + waitforvisualfinish + end + +Move_MILK_DRINK:: @ 81CB40E + loadspritegfx 10099 + loadspritegfx 10203 + loadspritegfx 10031 + monbg 1 + createsprite gUnknown_83E33B4, ANIM_ATTACKER, 2, + delay 40 + playsewithpan SE_W152, 192 + delay 12 + playsewithpan SE_W152, 192 + delay 20 + playsewithpan SE_W152, 192 + waitforvisualfinish + createsprite gUnknown_83E4094, ANIM_ATTACKER, 3, 0, 0, 1, 0 + playsewithpan SE_W208, 192 + waitforvisualfinish + clearmonbg 1 + call gUnknown_81D5712 + waitforvisualfinish + end + +Move_MAGNITUDE:: @ 81CB450 + createvisualtask AnimTask_IsPowerOver99, 2, + waitforvisualfinish + jumpargeq 15, 0, gUnknown_81CB469 + jumpargeq 15, 1, gUnknown_81CB48E + +gUnknown_81CB468:: @ 81CB468 + end + +gUnknown_81CB469:: @ 81CB469 + createvisualtask sub_80B94B4, 5, 5, 0, 50 + createvisualtask sub_80B94B4, 5, 4, 0, 50 + loopsewithpan SE_W070, 63, 8, 10 + goto gUnknown_81CB468 + +gUnknown_81CB48E:: @ 81CB48E + createvisualtask sub_80B94B4, 5, 5, 0, 50 + createvisualtask sub_80B94B4, 5, 4, 0, 50 + loopsewithpan SE_W070, 63, 8, 10 + delay 10 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 0, 14, 32767, 14 + delay 16 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 0, 14, 32767, 14 + goto gUnknown_81CB468 + +Move_RAPID_SPIN:: @ 81CB4E1 + loadspritegfx 10135 + loadspritegfx 10229 + monbg 0 + createsprite gUnknown_83FF068, ANIM_ATTACKER, 2, 0, 0, 32, -32, 40, -2 + createvisualtask sub_80DEF9C, 2, 0, 2, 0 + loopsewithpan SE_W013B, 192, 8, 4 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 2 + createvisualtask sub_8099BD4, 2, 0, 1, 10, 1, 0 + playsewithpan SE_W003, 63 + waitforvisualfinish + delay 8 + createvisualtask sub_80DEF9C, 2, 0, 2, 1 + loopsewithpan SE_W013B, 192, 8, 4 + waitforvisualfinish + clearmonbg 0 + end + +Move_MOONLIGHT:: @ 81CB54E + loadspritegfx 10194 + loadspritegfx 10195 + loadspritegfx 10031 + setalpha 0, 16 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 16, 0 + waitforvisualfinish + createsprite gUnknown_83E3734, ANIM_ATTACKER, 2, 120, 56 + createvisualtask sub_8076048, 3, 0, 16, 16, 0, 1 + playsewithpan SE_W236, 0 + delay 30 + createsprite gUnknown_83E3764, ANIM_ATTACKER, 40, -12, 0 + delay 30 + createsprite gUnknown_83E3764, ANIM_ATTACKER, 40, -24, 0 + delay 30 + createsprite gUnknown_83E3764, ANIM_ATTACKER, 40, 21, 0 + delay 30 + createsprite gUnknown_83E3764, ANIM_ATTACKER, 40, 0, 0 + delay 30 + createsprite gUnknown_83E3764, ANIM_ATTACKER, 40, 10, 0 + delay 20 + createvisualtask sub_80A5FC0, 2, + waitforvisualfinish + call gUnknown_81D56C9 + waitforvisualfinish + end + +Move_EXTREME_SPEED:: @ 81CB5DE + loadspritegfx 10207 + loadspritegfx 10135 + createvisualtask AnimTask_GetAttackerSide, 2, + jumpargeq 7, 1, gUnknown_81CB695 + fadetobg 9 + +gUnknown_81CB5F5:: @ 81CB5F5 + waitbgfadeout + createvisualtask sub_80BB82C, 5, -2304, 0, 1, -1 + waitbgfadein + createvisualtask sub_80A917C, 2, + loopsewithpan SE_W013B, 192, 8, 3 + waitforvisualfinish + delay 1 + createvisualtask sub_80BC12C, 2, + monbg 1 + setalpha 12, 8 + delay 18 + createvisualtask sub_80A9210, 2, + delay 2 + playsewithpan SE_W004, 63 + createsprite gUnknown_83E7C68, ANIM_TARGET, 2, 1, 0, -12, 3 + delay 10 + playsewithpan SE_W004, 63 + createsprite gUnknown_83E7C68, ANIM_TARGET, 2, 1, 0, 12, 3 + delay 10 + playsewithpan SE_W233B, 63 + createsprite gUnknown_83E7C68, ANIM_TARGET, 2, 1, 0, 0, 3 + waitforvisualfinish + createvisualtask sub_80A94AC, 2, + delay 10 + createvisualtask sub_80A939C, 2, + loopsewithpan SE_W104, 192, 8, 4 + waitforvisualfinish + restorebg + waitbgfadeout + setarg 7, 65535 + waitbgfadein + clearmonbg 1 + blendoff + delay 1 + setarg 7, 4096 + delay 1 + end + +gUnknown_81CB695:: @ 81CB695 + fadetobg 10 + goto gUnknown_81CB5F5 + +Move_UPROAR:: @ 81CB69C + loadspritegfx 10225 + loadspritegfx 10203 + monbg 3 + createvisualtask sub_80AA7C8, 2, 0 + createsprite gUnknown_83E4110, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + playsewithpan SE_W253, 192 + createsprite gUnknown_83E4430, ANIM_ATTACKER, 2, 0, 29, -12, 0 + createsprite gUnknown_83E4430, ANIM_ATTACKER, 2, 0, -12, -29, 1 + delay 16 + createvisualtask sub_80AA7C8, 2, 0 + createsprite gUnknown_83E4110, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + playsewithpan SE_W253, 192 + createsprite gUnknown_83E4430, ANIM_ATTACKER, 2, 0, 12, -29, 1 + createsprite gUnknown_83E4430, ANIM_ATTACKER, 2, 0, -29, -12, 0 + delay 16 + createvisualtask sub_80AA7C8, 2, 0 + createsprite gUnknown_83E4110, ANIM_ATTACKER, 3, 0, 0, 0, 0, 31, 8 + playsewithpan SE_W253, 192 + createsprite gUnknown_83E4430, ANIM_ATTACKER, 2, 0, 24, -24, 1 + createsprite gUnknown_83E4430, ANIM_ATTACKER, 2, 0, -24, -24, 0 + waitforvisualfinish + clearmonbg 3 + end + +Move_HEAT_WAVE:: @ 81CB766 + loadspritegfx 10261 + createvisualtask AnimTask_BlendParticle, 5, 10261, 0, 6, 6, 31 + createvisualtask AnimTask_LoadSandstormBackground, 5, 1 + createvisualtask sub_80ADAA4, 6, 6, 31 + panse_1B SE_W257, 192, 63, 2, 0 + delay 4 + createvisualtask sub_80AD800, 5, + delay 12 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 10, 2304, 96, 1 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 90, 2048, 96, 1 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 50, 2560, 96, 1 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 20, 2304, 96, 1 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 70, 1984, 96, 1 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 0, 2816, 96, 1 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 60, 2560, 96, 1 + end + +Move_HAIL:: @ 81CB816 + loadspritegfx 10263 + loadspritegfx 10141 + createvisualtask sub_80BA7F8, 10, 1, 3, 0, 6, 0 + waitforvisualfinish + createvisualtask sub_80B038C, 5, + loopsewithpan SE_W258, 0, 8, 10 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 1, 3, 6, 0, 0 + end + +Move_TORMENT:: @ 81CB84E + loadspritegfx 10087 + loadspritegfx 10209 + createvisualtask sub_80DF1DC, 2, + waitforvisualfinish + createvisualtask AnimTask_BlendMonInAndOut, 2, 1, 31, 10, 1, 1 + createsprite gUnknown_83E3F04, ANIM_TARGET, 2, 1, -20, -28 + playsewithpan SE_W207B, 63 + delay 20 + createsprite gUnknown_83E3F04, ANIM_TARGET, 2, 1, 20, -28 + playsewithpan SE_W207B, 63 + end + +Move_MEMENTO:: @ 81CB892 + setalpha 0, 16 + delay 1 + createvisualtask sub_80B85B8, 2, + delay 1 + createvisualtask sub_80B7DA4, 5, + playsewithpan SE_W060, 192 + delay 48 + playsewithpan SE_W060B, 192 + waitforvisualfinish + createvisualtask sub_80B8664, 2, + delay 12 + setalpha 0, 16 + delay 1 + monbg_22 1 + createvisualtask sub_80B8070, 5, + playsewithpan SE_W060, 63 + waitforvisualfinish + clearmonbg_23 1 + delay 1 + blendoff + delay 1 + end + +Move_FACADE:: @ 81CB8D6 + loadspritegfx 10243 + createvisualtask sub_80E1D5C, 2, 0, 3 + createvisualtask sub_80E1FC4, 2, 0, 72 + loopsewithpan SE_W207, 192, 24, 3 + end + +Move_SMELLING_SALT:: @ 81CB8F6 + loadspritegfx 10247 + loadspritegfx 10255 + createsprite gUnknown_83FF644, ANIM_TARGET, 2, 1, 0, 2 + createsprite gUnknown_83FF644, ANIM_TARGET, 2, 1, 1, 2 + delay 32 + createvisualtask sub_80E28DC, 3, 1, 2 + loopsewithpan SE_W003, 63, 12, 2 + waitforvisualfinish + delay 4 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 6, 2 + createsprite gUnknown_83FF674, ANIM_TARGET, 2, 1, 8, 3 + loopsewithpan SE_W207B, 63, 16, 3 + end + +Move_FOLLOW_ME:: @ 81CB951 + loadspritegfx 10064 + createsprite gUnknown_83E3A4C, ANIM_ATTACKER, 2, 0 + playsewithpan SE_W039, 192 + delay 18 + playsewithpan SE_W213, 192 + delay 71 + loopsewithpan SE_W039, 192, 22, 3 + end + +Move_CHARGE:: @ 81CB970 + loadspritegfx 10211 + loadspritegfx 10212 + loadspritegfx 10213 + monbg 0 + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, 0 + waitforvisualfinish + createvisualtask sub_80AE540, 2, 0, 60, 2, 12 + playsewithpan SE_W268, 192 + delay 30 + playsewithpan SE_W268, 192 + delay 30 + playsewithpan SE_W268, 192 + createsprite gUnknown_83E61D4, ANIM_ATTACKER, 2, 0 + delay 25 + playsewithpan SE_W268, 192 + delay 20 + playsewithpan SE_W268, 192 + delay 15 + playsewithpan SE_W268, 192 + delay 10 + delay 6 + loopsewithpan SE_W268, 192, 6, 5 + waitforvisualfinish + createsprite gUnknown_83E6204, ANIM_ATTACKER, 2, 0, 16, 16 + delay 2 + createsprite gUnknown_83E6204, ANIM_ATTACKER, 2, 0, -16, -16 + playsewithpan SE_W085B, 192 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 4, 0, 0 + clearmonbg 0 + blendoff + end + +Move_TAUNT:: @ 81CBA0B + loadspritegfx 10214 + loadspritegfx 10209 + loadspritegfx 10087 + createsprite gUnknown_83E398C, ANIM_ATTACKER, 11, 0, 45 + playsewithpan SE_W118, 192 + delay 6 + createsprite gUnknown_83E3AC4, ANIM_ATTACKER, 12, 0 + delay 4 + loopsewithpan SE_W039, 192, 16, 2 + waitforvisualfinish + delay 8 + createsprite gUnknown_83E3F04, ANIM_TARGET, 2, 1, -20, -28 + playsewithpan SE_W207B, 63 + waitforvisualfinish + delay 12 + createsprite gUnknown_83E3F04, ANIM_TARGET, 2, 1, 20, -28 + playsewithpan SE_W207B, 63 + end + +Move_HELPING_HAND:: @ 81CBA5F + loadspritegfx 10247 + createvisualtask sub_80E2CE4, 5, + createsprite gUnknown_83FF68C, ANIM_ATTACKER, 40, 0 + createsprite gUnknown_83FF68C, ANIM_ATTACKER, 40, 1 + delay 19 + playsewithpan SE_W227, 0 + createvisualtask AnimTask_ShakeMon2, 2, 2, 2, 0, 5, 1 + delay 14 + playsewithpan SE_W227, 0 + createvisualtask AnimTask_ShakeMon2, 2, 2, 2, 0, 5, 1 + delay 20 + playsewithpan SE_W227, 0 + createvisualtask AnimTask_ShakeMon2, 2, 2, 3, 0, 10, 1 + createvisualtask AnimTask_BlendMonInAndOut, 2, 2, 1023, 12, 1, 1 + end + +Move_ASSIST:: @ 81CBAD2 + loadspritegfx 10252 + createsprite gUnknown_83FF5E4, ANIM_ATTACKER, 50, 112, -16, 140, 128, 36 + delay 2 + createsprite gUnknown_83FF5E4, ANIM_ATTACKER, 50, 208, 128, -16, 48, 36 + playsewithpan SE_W010, 0 + delay 2 + createsprite gUnknown_83FF5E4, ANIM_ATTACKER, 50, -16, 112, 256, -16, 36 + playsewithpan SE_W010, 0 + delay 2 + createsprite gUnknown_83FF5E4, ANIM_ATTACKER, 50, 108, 128, 84, -16, 36 + playsewithpan SE_W010, 0 + delay 2 + createsprite gUnknown_83FF5E4, ANIM_ATTACKER, 50, -16, 56, 256, 56, 36 + playsewithpan SE_W010, 0 + end + +Move_SUPERPOWER:: @ 81CBB43 + loadspritegfx 10212 + loadspritegfx 10256 + loadspritegfx 10257 + monbg 2 + monbgprio_28 0 + setalpha 12, 8 + createsprite gUnknown_83E6864, ANIM_TARGET, 2, 0 + playsewithpan SE_W025, 192 + delay 20 + createsprite gUnknown_83E7B88, ANIM_ATTACKER, 2, 4, 1, 180, 1 + createvisualtask sub_80DD410, 5, 227, 0 + delay 40 + createsprite gUnknown_83E687C, ANIM_ATTACKER, 41, 200, 96, 1, 120 + delay 8 + createsprite gUnknown_83E687C, ANIM_ATTACKER, 41, 20, 248, 4, 112 + delay 8 + createsprite gUnknown_83E687C, ANIM_ATTACKER, 41, 130, 160, 2, 104 + delay 8 + createsprite gUnknown_83E687C, ANIM_ATTACKER, 41, 160, 192, 0, 96 + delay 8 + createsprite gUnknown_83E687C, ANIM_ATTACKER, 41, 60, 288, 3, 88 + delay 74 + createsprite gUnknown_83E6894, ANIM_TARGET, 3, 0 + playsewithpan SE_W207, 192 + delay 16 + createvisualtask AnimTask_ShakeMon2, 2, 1, 8, 0, 16, 1 + playsewithpan SE_W025B, 63 + waitforvisualfinish + clearmonbg 2 + blendoff + delay 1 + end + +Move_RECYCLE:: @ 81CBBFE + loadspritegfx 10278 + monbg 0 + setalpha 0, 16 + delay 1 + createsprite gUnknown_83FF790, ANIM_ATTACKER, 2, + loopsewithpan SE_W036, 192, 24, 3 + waitforvisualfinish + createvisualtask AnimTask_BlendMonInAndOut, 5, 0, 32767, 12, 2, 1 + playsewithpan SE_W036, 192 + waitforvisualfinish + blendoff + clearmonbg 0 + delay 1 + end + +Move_BRICK_BREAK:: @ 81CBC32 + loadspritegfx 10167 + loadspritegfx 10135 + loadspritegfx 10143 + loadspritegfx 10208 + choosetwoturnanim gUnknown_81CBC47, gUnknown_81CBD16 + +gUnknown_81CBC47:: @ 81CBC47 + monbg 1 + setalpha 12, 8 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 8 + delay 4 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -18, -18, 1, 1 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, -18, -18, 10, 1, 0 + playsewithpan SE_W233, 63 + delay 20 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 8 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, 18, 1, 1 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 18, 18, 10, 1, 0 + playsewithpan SE_W233, 63 + delay 20 + createvisualtask AnimTask_WindUpLunge, 2, 0, -24, 0, 24, 10, 24, 3 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 6, 0 + delay 37 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 0, 0, 10, 1, 0 + playsewithpan SE_W233B, 63 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 6, 0, 0 + waitforvisualfinish + clearmonbg 1 + end + +gUnknown_81CBD16:: @ 81CBD16 + monbg 1 + setalpha 12, 8 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 8 + delay 4 + createsprite gUnknown_83E6808, ANIM_ATTACKER, 3, 1, 0, 0, 90, 10 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -18, -18, 1, 1 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, -18, -18, 10, 1, 0 + playsewithpan SE_W233, 63 + delay 20 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 8 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, 18, 1, 1 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 18, 18, 10, 1, 0 + playsewithpan SE_W233, 63 + delay 20 + createvisualtask AnimTask_WindUpLunge, 2, 0, -24, 0, 24, 10, 24, 3 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 6, 0 + delay 37 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 0, 0, 10, 1, 0 + playsewithpan SE_W233B, 63 + waitforvisualfinish + createsprite gUnknown_83E6820, ANIM_ATTACKER, 2, 1, 0, -8, -12 + createsprite gUnknown_83E6820, ANIM_ATTACKER, 2, 1, 1, 8, -12 + createsprite gUnknown_83E6820, ANIM_ATTACKER, 2, 1, 2, -8, 12 + createsprite gUnknown_83E6820, ANIM_ATTACKER, 2, 1, 3, 8, 12 + playsewithpan SE_W280, 63 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 6, 0, 0 + waitforvisualfinish + clearmonbg 1 + end + +Move_YAWN:: @ 81CBE37 + loadspritegfx 10242 + createvisualtask sub_80E1704, 2, 0 + playsewithpan SE_W281, 192 + waitforvisualfinish + createsprite gUnknown_83FF46C, ANIM_TARGET, 5, 2 + playsewithpan SE_W255, 192 + delay 4 + createsprite gUnknown_83FF46C, ANIM_TARGET, 5, 1 + delay 4 + createsprite gUnknown_83FF46C, ANIM_TARGET, 5, 0 + waitforvisualfinish + createvisualtask sub_80E1704, 2, 1 + playsewithpan SE_W281, 63 + end + +Move_ENDEAVOR:: @ 81CBE7A + loadspritegfx 10243 + loadspritegfx 10135 + createvisualtask sub_80E1D5C, 2, 0, 2 + loopsewithpan SE_W039, 192, 24, 2 + createvisualtask AnimTask_BlendMonInAndOut, 5, 0, 703, 12, 1, 2 + delay 6 + createvisualtask sub_8099BD4, 5, 0, 1, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 12, -12, 1, 2 + playsewithpan SE_W003, 63 + delay 24 + createvisualtask sub_8099BD4, 5, 0, 1, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -12, 12, 1, 2 + playsewithpan SE_W004, 63 + end + +Move_ERUPTION:: @ 81CBEEF + loadspritegfx 10201 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 2, 0, 4, 31 + waitforvisualfinish + createvisualtask sub_80ACEA4, 2, + waitplaysewithpan SE_W153, 192, 60 + waitforvisualfinish + createvisualtask sub_80ACEA4, 2, + waitplaysewithpan SE_W153, 192, 60 + waitforvisualfinish + delay 30 + createsprite gUnknown_83E5E60, ANIM_ATTACKER, 40, 200, -32, 0, 100, 0 + createsprite gUnknown_83E5E60, ANIM_ATTACKER, 40, 30, -32, 16, 90, 1 + createsprite gUnknown_83E5E60, ANIM_ATTACKER, 40, 150, -32, 32, 60, 2 + createsprite gUnknown_83E5E60, ANIM_ATTACKER, 40, 90, -32, 48, 80, 3 + createsprite gUnknown_83E5E60, ANIM_ATTACKER, 40, 110, -32, 64, 50, 0 + createsprite gUnknown_83E5E60, ANIM_ATTACKER, 40, 60, -32, 80, 70, 1 + delay 22 + createvisualtask sub_80B94B4, 5, 5, 8, 60 + createvisualtask sub_80B94B4, 5, 4, 8, 60 + loopsewithpan SE_W088, 63, 16, 12 + delay 80 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, 31, 4, 4, 0, 31 + end + +Move_SKILL_SWAP:: @ 81CBFBC + loadspritegfx 10251 + call gUnknown_81D59BB + createvisualtask sub_80B3834, 3, 1 + createvisualtask AnimTask_BlendMonInAndOut, 5, 1, 32767, 12, 3, 1 + loopsewithpan SE_W179, 192, 24, 3 + delay 16 + createvisualtask sub_80B3834, 3, 0 + createvisualtask AnimTask_BlendMonInAndOut, 5, 0, 32767, 12, 3, 1 + waitforvisualfinish + call gUnknown_81D59C7 + end + +Move_IMPRISON:: @ 81CC007 + loadspritegfx 10249 + loadspritegfx 10250 + call gUnknown_81D59BB + monbg 3 + createvisualtask sub_80B3584, 5, + delay 8 + loopsewithpan SE_W030, 192, 8, 5 + waitforvisualfinish + delay 4 + createsprite gUnknown_83E705C, ANIM_ATTACKER, 5, 0, 40 + createvisualtask sub_80B94B4, 5, 4, 1, 10 + playsewithpan SE_W063, 192 + clearmonbg 3 + call gUnknown_81D59C7 + end + +Move_GRUDGE:: @ 81CC04A + loadspritegfx 10253 + monbg 0 + monbgprio_29 + fadetobg 2 + playsewithpan SE_W060, 192 + waitbgfadein + createvisualtask sub_80B68C8, 3, + loopsewithpan SE_W052, 192, 16, 4 + delay 10 + delay 80 + playsewithpan SE_W171, 63 + waitforvisualfinish + restorebg + waitbgfadein + clearmonbg 0 + end + +Move_CAMOUFLAGE:: @ 81CC072 + monbg 2 + monbgprio_28 0 + setalpha 16, 0 + createvisualtask AnimTask_SetCamouflageBlend, 5, 2, 3, 0, 14 + delay 16 + createvisualtask sub_80B78E0, 2, 4 + playsewithpan SE_W185, 192 + waitforvisualfinish + delay 8 + createvisualtask AnimTask_SetCamouflageBlend, 5, 2, 0, 0, 0 + waitforvisualfinish + createvisualtask sub_80B79DC, 2, 1 + waitforvisualfinish + blendoff + clearmonbg 2 + end + +Move_TAIL_GLOW:: @ 81CC0B8 + loadspritegfx 10212 + monbg 0 + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, 0 + waitforvisualfinish + createsprite gUnknown_83E7378, ANIM_ATTACKER, 66, 0 + delay 18 + loopsewithpan SE_W234, 192, 16, 6 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 4, 0, 0 + clearmonbg 0 + blendoff + delay 1 + end + +Move_LUSTER_PURGE:: @ 81CC0FB + loadspritegfx 10267 + loadspritegfx 10135 + fadetobg 3 + waitbgfadeout + createvisualtask sub_80DE7B4, 5, + waitbgfadein + monbg 0 + setalpha 12, 8 + playsewithpan SE_W076, 192 + createsprite gUnknown_83E7148, ANIM_ATTACKER, 41, 0, 0, 0, 0 + delay 20 + createvisualtask sub_80BA83C, 5, 5, 2, 0, 16, -1 + createvisualtask AnimTask_BlendParticle, 5, 10267, 2, 0, 16, -1 + waitforvisualfinish + createvisualtask AnimTask_BlendParticle, 5, 10135, 0, 12, 12, 23552 + waitforvisualfinish + createsprite gUnknown_83E7C50, ANIM_TARGET, 3, 1, 2 + createvisualtask sub_80DD3DC, 5, 208, 63 + delay 3 + createsprite gUnknown_83E7C50, ANIM_TARGET, 3, 1, 2 + createvisualtask sub_80DD3DC, 5, 208, 63 + delay 3 + createsprite gUnknown_83E7C50, ANIM_TARGET, 3, 1, 2 + createvisualtask sub_80DD3DC, 5, 208, 63 + delay 3 + createsprite gUnknown_83E7C50, ANIM_TARGET, 3, 1, 2 + createvisualtask sub_80DD3DC, 5, 208, 63 + delay 3 + createsprite gUnknown_83E7C50, ANIM_TARGET, 3, 1, 2 + createvisualtask sub_80DD3DC, 5, 208, 63 + delay 3 + createsprite gUnknown_83E7C50, ANIM_TARGET, 3, 1, 2 + createvisualtask sub_80DD3DC, 5, 208, 63 + waitforvisualfinish + createvisualtask sub_80BA83C, 5, 5, 2, 16, 0, -1 + createvisualtask sub_80B94B4, 5, 1, 5, 14 + waitforvisualfinish + clearmonbg 0 + blendoff + call gUnknown_81D59C7 + end + +Move_MIST_BALL:: @ 81CC212 + loadspritegfx 10155 + loadspritegfx 10270 + delay 0 + playsewithpan SE_W081, 192 + createsprite gUnknown_83E64E8, ANIM_TARGET, 0, 0, 0, 0, 0, 30, 0 + waitforvisualfinish + playsewithpan SE_W028, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 10, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 1, 1, 32279, 16, 32767, 16 + delay 0 + playsewithpan SE_W114, 0 + createvisualtask sub_80AFD80, 5, + createvisualtask sub_80BA7F8, 10, 4, 3, 0, 16, 32767 + delay 8 + createvisualtask AnimTask_ShakeMon, 2, 1, 4, 0, 70, 0 + delay 70 + createvisualtask sub_80BA7F8, 10, 4, 2, 16, 0, 32767 + end + +Move_FEATHER_DANCE:: @ 81CC2A1 + loadspritegfx 10270 + monbg 3 + monbgprio_29 + playsewithpan SE_W080, 63 + delay 0 + createsprite gUnknown_83E6C00, ANIM_TARGET, 0, 0, -16, 64, 2, 104, 11304, 32, 1 + delay 6 + createsprite gUnknown_83E6C00, ANIM_TARGET, 0, 0, -16, 32, 2, 104, 11304, 32, 1 + createsprite gUnknown_83E6C00, ANIM_TARGET, 0, 0, -16, 0, 2, 104, 11304, 32, 1 + delay 6 + createsprite gUnknown_83E6C00, ANIM_TARGET, 0, 0, -16, 224, 2, 104, 11304, 32, 1 + createsprite gUnknown_83E6C00, ANIM_TARGET, 0, 0, -16, 128, 2, 104, 11304, 32, 1 + delay 6 + createsprite gUnknown_83E6C00, ANIM_TARGET, 0, 0, -16, 192, 2, 104, 11304, 32, 1 + createsprite gUnknown_83E6C00, ANIM_TARGET, 0, 0, -16, 160, 2, 104, 11304, 32, 1 + delay 6 + createsprite gUnknown_83E6C00, ANIM_TARGET, 0, 0, -16, 96, 2, 104, 11304, 32, 1 + waitforvisualfinish + clearmonbg 3 + end + +Move_TEETER_DANCE:: @ 81CC371 + loadspritegfx 10072 + loadspritegfx 10073 + createvisualtask sub_80E4160, 5, + createsprite gUnknown_83E38C8, ANIM_ATTACKER, 2, 0, 16, -2 + playsewithpan SE_W298, 192 + delay 24 + createsprite gUnknown_83E38C8, ANIM_ATTACKER, 2, 0, 0, -2 + playsewithpan SE_W298, 192 + delay 24 + createsprite gUnknown_83E38C8, ANIM_ATTACKER, 2, 0, -16, -2 + playsewithpan SE_W298, 192 + delay 24 + createsprite gUnknown_83E38C8, ANIM_ATTACKER, 2, 1, -8, -2 + playsewithpan SE_W298, 192 + delay 24 + createsprite gUnknown_83E38C8, ANIM_ATTACKER, 2, 2, 8, -2 + playsewithpan SE_W298, 192 + end + +Move_MUD_SPORT:: @ 81CC3DC + loadspritegfx 10074 + createvisualtask sub_80A8338, 2, 0, 6 + delay 24 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 0, -4, -16 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 0, 4, -12 + playsewithpan SE_W091, 192 + delay 32 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 0, -3, -12 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 0, 5, -14 + playsewithpan SE_W091, 192 + delay 32 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 0, -5, -18 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 0, 3, -14 + playsewithpan SE_W091, 192 + delay 16 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 1, 220, 60 + waitplaysewithpan SE_W145B, 0, 15 + delay 2 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 1, 60, 100 + waitplaysewithpan SE_W145B, 0, 25 + delay 2 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 1, 140, 55 + waitplaysewithpan SE_W145B, 0, 14 + delay 2 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 1, 180, 50 + waitplaysewithpan SE_W145B, 0, 10 + delay 2 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 1, 20, 90 + waitplaysewithpan SE_W145B, 0, 22 + delay 2 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 1, 90, 90 + waitplaysewithpan SE_W145B, 0, 22 + delay 2 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 1, 160, 60 + waitplaysewithpan SE_W145B, 0, 15 + delay 2 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 1, 30, 90 + waitplaysewithpan SE_W145B, 0, 22 + delay 2 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 1, 120, 60 + waitplaysewithpan SE_W145B, 0, 15 + delay 2 + createsprite gUnknown_83E7A94, ANIM_TARGET, 2, 1, 200, 40 + waitplaysewithpan SE_W145B, 0, 10 + end + +Move_NEEDLE_ARM:: @ 81CC513 + loadspritegfx 10266 + loadspritegfx 10135 + loadspritegfx 10143 + loopsewithpan SE_W030, 63, 2, 16 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, 0, -32, 16 + delay 2 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, 22, -22, 16 + delay 2 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, 30, 0, 16 + delay 2 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, 20, 20, 16 + delay 2 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, 0, 28, 16 + delay 2 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, -19, 19, 16 + delay 2 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, -27, 0, 16 + delay 2 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, -18, -18, 16 + delay 2 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, 0, -25, 16 + delay 2 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, 17, -17, 16 + delay 2 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, 23, 0, 16 + delay 2 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 0, 16, 16, 16 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 18, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0 + playsewithpan SE_W233B, 63 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, 0, -24, 10 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, 17, -17, 10 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, 24, 0, 10 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, 17, 17, 10 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, 0, 24, 10 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, -17, 17, 10 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, -24, 0, 10 + createsprite gUnknown_83E3100, ANIM_TARGET, 2, 1, 1, -17, -17, 10 + end + +Move_SLACK_OFF:: @ 81CC6C3 + loadspritegfx 10031 + createvisualtask sub_80E4540, 2, 0 + playsewithpan SE_W281, 192 + waitforvisualfinish + call gUnknown_81D56C9 + waitforvisualfinish + end + +Move_CRUSH_CLAW:: @ 81CC6DB + loadspritegfx 10167 + loadspritegfx 10039 + loadspritegfx 10208 + monbg 1 + setalpha 12, 8 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 + delay 4 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 18, 1 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, -10, -10, 0 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, -10, 10, 0 + playsewithpan SE_W013, 63 + delay 12 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, 10, -10, 1 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, 10, 10, 1 + playsewithpan SE_W013, 63 + waitforvisualfinish + waitforvisualfinish + blendoff + clearmonbg 1 + end + +Move_AROMATHERAPY:: @ 81CC74B + playsewithpan SE_W080, 0 + loadspritegfx 10159 + loadspritegfx 10203 + loadspritegfx 10049 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 0, 0, 7, 13293 + delay 1 + monbg 0 + delay 1 + createsprite gUnknown_83E3024, ANIM_ATTACKER, 0, 24, 16, 0, 2, 2, 0, 0 + createsprite gUnknown_83E3024, ANIM_ATTACKER, 66, 64, 24, 0, 3, 1, 1, 0 + createsprite gUnknown_83E303C, ANIM_ATTACKER, 0, 16, 24, 0, 2, 1, 0, 0 + delay 20 + createsprite gUnknown_83E3024, ANIM_ATTACKER, 66, 48, 12, 0, 4, 3, 1, 0 + createsprite gUnknown_83E3024, ANIM_ATTACKER, 0, 100, 16, 0, 3, 2, 0, 0 + createsprite gUnknown_83E3024, ANIM_ATTACKER, 0, 74, 24, 180, 3, 2, 0, 0 + delay 10 + createsprite gUnknown_83E3024, ANIM_ATTACKER, 66, 80, 30, 0, 4, 1, 1, 0 + createsprite gUnknown_83E3024, ANIM_ATTACKER, 0, 128, 12, 0, 3, 3, 0, 0 + createsprite gUnknown_83E303C, ANIM_ATTACKER, 0, 90, 16, 0, 2, 1, 0, 0 + waitforvisualfinish + clearmonbg 0 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 0, 7, 0, 13293 + delay 1 + playsewithpan SE_W287, 192 + createvisualtask sub_80E2084, 2, 1 + waitforvisualfinish + playsewithpan SE_W234, 192 + createsprite gUnknown_83E340C, ANIM_ATTACKER, 16, -15, 0, 0, 0, 32, 60, 1 + delay 8 + createsprite gUnknown_83E340C, ANIM_ATTACKER, 16, 12, -5, 0, 0, 32, 60, 1 + waitforvisualfinish + playsewithpan SE_REAPOKE, 192 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 43, 3, 10, 0, 13293 + createsprite gUnknown_83E40E0, ANIM_ATTACKER, 16, 0, 0, 0, 1 + waitforvisualfinish + end + +Move_FAKE_TEARS:: @ 81CC8AD + loadspritegfx 10155 + loadspritegfx 10209 + loadspritegfx 10072 + createvisualtask AnimTask_BlendParticle, 5, 10155, 0, 4, 4, 32108 + waitforvisualfinish + createvisualtask sub_80E0558, 5, 0, 2, 1 + loopsewithpan SE_W039, 192, 12, 4 + delay 8 + createsprite gUnknown_83E7998, ANIM_ATTACKER, 2, 0, 0 + createsprite gUnknown_83E7998, ANIM_ATTACKER, 2, 0, 1 + delay 8 + createsprite gUnknown_83E7998, ANIM_ATTACKER, 2, 0, 2 + createsprite gUnknown_83E7998, ANIM_ATTACKER, 2, 0, 3 + delay 8 + createsprite gUnknown_83E7998, ANIM_ATTACKER, 2, 0, 0 + createsprite gUnknown_83E7998, ANIM_ATTACKER, 2, 0, 1 + delay 8 + createsprite gUnknown_83E7998, ANIM_ATTACKER, 2, 0, 2 + createsprite gUnknown_83E7998, ANIM_ATTACKER, 2, 0, 3 + waitforvisualfinish + end + +Move_AIR_CUTTER:: @ 81CC93D + loadspritegfx 10003 + loadspritegfx 10138 + loadspritegfx 10135 + delay 0 + monbg 3 + setalpha 12, 8 + delay 0 + createvisualtask sub_80A76F0, 2, 32, -24, 1536, 2, 128 + waitforvisualfinish + playsewithpan SE_W015, 63 + createsprite gUnknown_83E32AC, ANIM_ATTACKER, 2, 40, -32, 0, 2 + delay 5 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 8, 1 + createvisualtask AnimTask_ShakeMon2, 2, 3, 2, 0, 8, 1 + waitforvisualfinish + blendoff + clearmonbg 3 + delay 0 + end + +Move_ODOR_SLEUTH:: @ 81CC99F + monbg 1 + createvisualtask sub_80E3664, 5, + delay 24 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 4 + playsewithpan SE_W207, 192 + delay 6 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 3, 4 + playsewithpan SE_W207, 192 + waitforvisualfinish + clearmonbg 1 + delay 1 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, -1, 16, -1, 0 + playsewithpan SE_W043, 192 + end + +Move_GRASS_WHISTLE:: @ 81CC9E9 + loadspritegfx 10072 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, 13298 + waitforvisualfinish + createvisualtask sub_80A65E8, 2, + waitforvisualfinish + panse_1B SE_W320, 192, 63, 2, 0 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 7, 1, 0 + delay 5 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 6, 1, 0 + delay 5 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 1, 1, 0 + delay 5 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 2, 1, 0 + delay 5 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 3, 1, 0 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 2, 1, 0 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 5, 1, 0 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 6, 1, 0 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 2, 1, 0 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 2, 1, 0 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 1, 1, 0 + delay 4 + createsprite gUnknown_83E3880, ANIM_TARGET, 2, 5, 1, 0 + delay 4 + waitforvisualfinish + createvisualtask sub_80A66A0, 2, + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 4, 0, 13298 + waitforvisualfinish + end + +Move_TICKLE:: @ 81CCADC + loadspritegfx 10218 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 0, 16, 0 + waitforvisualfinish + createsprite gUnknown_83E42FC, ANIM_ATTACKER, 0, -16, -8 + createsprite gUnknown_83E42FC, ANIM_ATTACKER, 0, 16, -8 + playsewithpan SE_W197, 192 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 16, 0, 0 + waitforvisualfinish + delay 20 + createvisualtask AnimTask_SwayMon, 3, 0, 6, 1280, 3, 0 + delay 12 + createvisualtask sub_80E0558, 3, 1, 6, 2 + loopsewithpan SE_W039, 63, 8, 8 + waitforvisualfinish + end + +Move_WATER_SPOUT:: @ 81CCB48 + loadspritegfx 10268 + loadspritegfx 10148 + monbg 3 + setalpha 12, 8 + createvisualtask sub_80ABB28, 5, + playsewithpan SE_W029, 192 + delay 44 + playsewithpan SE_W291, 192 + waitforvisualfinish + delay 16 + createvisualtask sub_80AC00C, 5, + playsewithpan SE_W057, 63 + clearmonbg 3 + blendoff + end + +Move_SHADOW_PUNCH:: @ 81CCB76 + loadspritegfx 10135 + loadspritegfx 10143 + fadetobg 2 + waitbgfadein + monbg 2 + setalpha 9, 8 + createvisualtask sub_8077030, 2, 0, 13 + playsewithpan SE_W026, 192 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0 + playsewithpan SE_W004, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + waitforvisualfinish + clearmonbg 2 + blendoff + restorebg + waitbgfadein + end + +Move_EXTRASENSORY:: @ 81CCBD1 + call gUnknown_81D59BB + monbg 3 + setalpha 12, 8 + createvisualtask AnimTask_BlendMonInAndOut, 5, 0, 891, 12, 1, 1 + createvisualtask sub_80B3A58, 5, 0 + playsewithpan SE_W020, 63 + waitforvisualfinish + createvisualtask AnimTask_BlendMonInAndOut, 5, 0, 891, 12, 1, 1 + createvisualtask sub_80B3A58, 5, 1 + playsewithpan SE_W020, 63 + waitforvisualfinish + createvisualtask sub_80B3C78, 5, 0 + createvisualtask sub_80B3A58, 5, 2 + playsewithpan SE_W043, 192 + waitforvisualfinish + blendoff + clearmonbg 3 + call gUnknown_81D59C7 + end + +Move_AERIAL_ACE:: @ 81CCC39 + loadspritegfx 10138 + monbg 1 + setalpha 12, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 24, 6, 1, 5 + createvisualtask sub_80BAB98, 2, 0, 4, 7, 3 + createsprite gUnknown_83E3294, ANIM_ATTACKER, 2, 40, -32, 0 + playsewithpan SE_W013B, 192 + delay 5 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 10, 1 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 0, 10, 0, 0 + playsewithpan SE_W013, 63 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_IRON_DEFENSE:: @ 81CCCA3 + loopsewithpan SE_REAPOKE, 192, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 8, 2, -1, 14, -1, 0 + waitforvisualfinish + end + +Move_BLOCK:: @ 81CCCCD + loadspritegfx 10250 + createsprite gUnknown_83FF6EC, ANIM_TARGET, 66, + playsewithpan SE_W207, 63 + end + +Move_HOWL:: @ 81CCCDC + loadspritegfx 10053 + createvisualtask sub_80E1704, 2, 0 + delay 12 + call gUnknown_81CDB06 + createvisualtask sub_80DD06C, 2, 0, 3 + waitforvisualfinish + delay 30 + end + +Move_BULK_UP:: @ 81CCCFE + loadspritegfx 10086 + createvisualtask sub_80A84B4, 2, + playsewithpan SE_W207, 192 + waitforvisualfinish + createsprite gUnknown_83E3ED0, ANIM_ATTACKER, 2, + loopsewithpan SE_W207, 192, 4, 2 + waitforvisualfinish + end + +Move_COVET:: @ 81CCD1C + loadspritegfx 10210 + loadspritegfx 10224 + createvisualtask sub_80E0558, 5, 0, 2, 0 + createsprite gUnknown_83E41E8, ANIM_ATTACKER, 3, 0, 20 + playsewithpan SE_W204, 192 + delay 15 + createsprite gUnknown_83E41E8, ANIM_ATTACKER, 3, -20, 20 + playsewithpan SE_W204, 192 + delay 15 + createsprite gUnknown_83E41E8, ANIM_ATTACKER, 3, 20, 20 + playsewithpan SE_W204, 192 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 8, 1 + loopsewithpan SE_W146, 63, 4, 3 + end + +Move_VOLT_TACKLE:: @ 81CCD79 + loadspritegfx 10001 + loadspritegfx 10212 + loadspritegfx 10213 + monbg 0 + setalpha 12, 8 + createvisualtask sub_80BA7F8, 10, 1, 0, 0, 8, 0 + waitforvisualfinish + createsprite gUnknown_83E621C, ANIM_ATTACKER, 1, + playsewithpan SE_W268, 192 + waitforvisualfinish + clearmonbg 0 + blendoff + delay 8 + createvisualtask sub_80AEA10, 5, 0 + playsewithpan SE_W085, 192 + waitforvisualfinish + createvisualtask sub_80AEA10, 5, 1 + playsewithpan SE_W085, 63 + waitforvisualfinish + createvisualtask sub_80AEA10, 5, 2 + playsewithpan SE_W085, 192 + waitforvisualfinish + createvisualtask sub_80AEA10, 5, 3 + playsewithpan SE_W085, 63 + waitforvisualfinish + createvisualtask sub_80AEA10, 5, 4 + playsewithpan SE_W085, 192 + delay 8 + createvisualtask AnimTask_ShakeMon2, 2, 1, 10, 0, 18, 1 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E6204, ANIM_ATTACKER, 2, 1, 16, 16 + delay 2 + createsprite gUnknown_83E6204, ANIM_ATTACKER, 2, 1, -16, -16 + delay 8 + createvisualtask sub_80AE8A0, 5, + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, 0, 3, 0, 9, 1 + playsewithpan SE_W085B, 192 + createsprite gUnknown_83E6204, ANIM_ATTACKER, 2, 0, 16, 16 + delay 2 + createsprite gUnknown_83E6204, ANIM_ATTACKER, 2, 0, -16, -16 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 1, 0, 8, 0, 0 + waitforvisualfinish + end + +Move_WATER_SPORT:: @ 81CCE71 + loadspritegfx 10268 + createvisualtask sub_80AC328, 5, + delay 8 + playsewithpan SE_W057, 192 + delay 44 + playsewithpan SE_W057, 192 + delay 44 + playsewithpan SE_W057, 192 + delay 44 + panse_1B SE_W057, 192, 63, 2, 0 + end + +Move_CALM_MIND:: @ 81CCE97 + loadspritegfx 10203 + monbg 2 + createvisualtask sub_80BA83C, 5, 0, 0, 0, 16, 0 + waitforvisualfinish + createvisualtask sub_80BB9B0, 5, 1 + waitforvisualfinish + createsprite gUnknown_83E40C8, ANIM_ATTACKER, 40, 0, 0, 0, 0 + playsewithpan SE_W048, 192 + delay 14 + createsprite gUnknown_83E40C8, ANIM_ATTACKER, 40, 0, 0, 0, 0 + playsewithpan SE_W048, 192 + delay 14 + createsprite gUnknown_83E40C8, ANIM_ATTACKER, 40, 0, 0, 0, 0 + playsewithpan SE_W048, 192 + waitforvisualfinish + createvisualtask sub_80BB9B0, 5, 0 + visible 0 + waitforvisualfinish + createvisualtask sub_80BA83C, 5, 0, 0, 16, 0, 0 + waitforvisualfinish + clearmonbg 2 + end + +Move_LEAF_BLADE:: @ 81CCF17 + loadspritegfx 10063 + loadspritegfx 10285 + createvisualtask sub_80A39C0, 5, + delay 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 8, 1 + playsewithpan SE_W015, 63 + delay 50 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 8, 1 + playsewithpan SE_W015, 63 + delay 50 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 8, 1 + playsewithpan SE_W015, 63 + waitforvisualfinish + monbg 1 + setalpha 12, 8 + delay 12 + createvisualtask AnimTask_ShakeMon2, 2, 1, 8, 0, 18, 1 + createsprite gUnknown_83E7C80, ANIM_TARGET, 2, 0, 0, 1, 36 + playsewithpan SE_W043, 63 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_DRAGON_DANCE:: @ 81CCF9A + loadspritegfx 10249 + monbg 0 + monbgprio_28 0 + delay 1 + createvisualtask sub_80B75E0, 5, + playsewithpan SE_W100, 192 + delay 8 + createvisualtask sub_8076288, 5, 10249, 19456, 14, 0, 3 + createsprite gUnknown_83E7848, ANIM_ATTACKER, 2, 0 + createsprite gUnknown_83E7848, ANIM_ATTACKER, 2, 43 + createsprite gUnknown_83E7848, ANIM_ATTACKER, 2, 85 + createsprite gUnknown_83E7848, ANIM_ATTACKER, 2, 128 + createsprite gUnknown_83E7848, ANIM_ATTACKER, 2, 170 + createsprite gUnknown_83E7848, ANIM_ATTACKER, 2, 213 + delay 30 + playsewithpan SE_W100, 192 + delay 30 + playsewithpan SE_W100, 192 + waitforvisualfinish + clearmonbg 0 + delay 1 + end + +Move_SHOCK_WAVE:: @ 81CD009 + loadspritegfx 10211 + loadspritegfx 10212 + loadspritegfx 10001 + loadspritegfx 10037 + monbg 0 + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 4, 0 + waitforvisualfinish + createvisualtask sub_80AE540, 2, 0, 20, 0, 2 + playsewithpan SE_W268, 192 + delay 12 + createsprite gUnknown_83E6290, ANIM_ATTACKER, 2, + delay 30 + createvisualtask sub_80AECE0, 5, + delay 12 + waitforvisualfinish + createvisualtask sub_80AEFA0, 5, + playsewithpan SE_W161B, 63 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 6, 18, 1 + createvisualtask sub_80BA7F8, 5, 1, 3, 16, 0, 32767 + createvisualtask sub_80BA7F8, 5, 4, 0, 16, 16, 0 + delay 4 + createvisualtask sub_80BA7F8, 5, 4, 0, 0, 0, 0 + waitforvisualfinish + clearmonbg 0 + blendoff + end + +Move_HARDEN:: @ 81CD0AB + loopsewithpan SE_W231, 192, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + waitforvisualfinish + end + +Move_BELLY_DRUM:: @ 81CD0C0 + loadspritegfx 10072 + loadspritegfx 10193 + createvisualtask sub_80A65E8, 2, + waitforvisualfinish + call gUnknown_81CD18D + createsprite gUnknown_83E3914, ANIM_ATTACKER, 2, 0, 0, 0, 0 + playsewithpan SE_W187, 192 + delay 15 + call gUnknown_81CD172 + createsprite gUnknown_83E3914, ANIM_ATTACKER, 2, 1, 1, 1, 0 + playsewithpan SE_W187, 192 + delay 15 + call gUnknown_81CD18D + createsprite gUnknown_83E3914, ANIM_ATTACKER, 2, 0, 3, 3, 128 + playsewithpan SE_W187, 192 + delay 7 + call gUnknown_81CD172 + createsprite gUnknown_83E3914, ANIM_ATTACKER, 2, 1, 2, 0, 128 + playsewithpan SE_W187, 192 + delay 7 + call gUnknown_81CD18D + createsprite gUnknown_83E3914, ANIM_ATTACKER, 2, 0, 1, 1, 0 + playsewithpan SE_W187, 192 + delay 7 + call gUnknown_81CD172 + createsprite gUnknown_83E3914, ANIM_ATTACKER, 2, 1, 0, 3, 0 + playsewithpan SE_W187, 192 + waitforvisualfinish + createvisualtask sub_80A66A0, 2, + waitforvisualfinish + end + +gUnknown_81CD172:: @ 81CD172 + createsprite gUnknown_83E38E0, ANIM_ATTACKER, 3, 0 + createvisualtask AnimTask_ShakeMon, 2, 0, 0, 8, 2, 1 + return + +gUnknown_81CD18D:: @ 81CD18D + createsprite gUnknown_83E38E0, ANIM_ATTACKER, 3, 1 + createvisualtask AnimTask_ShakeMon, 2, 0, 0, 8, 2, 1 + return + +Move_MIND_READER:: @ 81CD1A8 + loadspritegfx 10189 + loadspritegfx 10190 + loadspritegfx 10191 + monbg 4 + playsewithpan SE_W109, 63 + createsprite gUnknown_83FEE5C, ANIM_ATTACKER, 5, 0, 0, 1, 0 + createsprite gUnknown_83FEE74, ANIM_ATTACKER, 5, + delay 40 + playsewithpan SE_W043, 63 + createvisualtask sub_80B9BDC, 2, 1, 1, 2, 0, 10, 0 + call gUnknown_81CD1EF + waitforvisualfinish + clearmonbg 4 + end + +gUnknown_81CD1EF:: @ 81CD1EF + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, 70, 0, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, 40, 40, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, 10, -60, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, -50, -40, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, -40, 40, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, 50, -50, 6 + delay 2 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, 50, -30, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, 60, 10, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, 0, 60, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, 0, -40, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, -60, 20, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, -60, -30, 6 + delay 2 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, -50, 50, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, -60, 20, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, -40, -40, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, 20, -60, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, 50, -50, 6 + createsprite gUnknown_83FEE8C, ANIM_ATTACKER, 4, 35, 40, 6 + delay 2 + return + +Move_ICE_PUNCH:: @ 81CD2E0 + monbg 3 + setalpha 12, 8 + loadspritegfx 10141 + loadspritegfx 10135 + loadspritegfx 10143 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, 0 + createvisualtask sub_80BA7F8, 10, 4, 2, 0, 9, 32588 + delay 20 + playsewithpan SE_W081, 63 + createsprite gUnknown_83E6360, ANIM_ATTACKER, 2, 0 + createsprite gUnknown_83E6360, ANIM_ATTACKER, 2, 64 + createsprite gUnknown_83E6360, ANIM_ATTACKER, 2, 128 + createsprite gUnknown_83E6360, ANIM_ATTACKER, 2, 192 + delay 5 + createsprite gUnknown_83E6348, ANIM_ATTACKER, 2, 32 + createsprite gUnknown_83E6348, ANIM_ATTACKER, 2, 96 + createsprite gUnknown_83E6348, ANIM_ATTACKER, 2, 160 + createsprite gUnknown_83E6348, ANIM_ATTACKER, 2, 224 + delay 17 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 4, 0, -10, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, 1, 1 + playsewithpan SE_W004, 63 + delay 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 5, 3, 1 + waitforvisualfinish + delay 15 + call gUnknown_81D540A + delay 5 + createvisualtask sub_80BA7F8, 10, 4, 2, 9, 0, 32588 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7, 0, 0 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_REST:: @ 81CD3CB + playsewithpan SE_W173, 192 + loadspritegfx 10228 + createsprite gUnknown_83E3500, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 + delay 20 + createsprite gUnknown_83E3500, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 + delay 20 + createsprite gUnknown_83E3500, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 + waitforvisualfinish + end + +Move_CONFUSION:: @ 81CD40B + monbg 3 + call gUnknown_81D59BB + setalpha 8, 8 + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 10, 1 + createvisualtask sub_80B9BDC, 2, 2, 0, 2, 0, 8, 32767 + waitforvisualfinish + playsewithpan SE_W048, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 15, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, 1, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + delay 1 + call gUnknown_81D59C7 + end + +Move_PSYCHIC:: @ 81CD46C + monbg 3 + call gUnknown_81D59BB + setalpha 8, 8 + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 10, 1 + createvisualtask sub_80B9BDC, 2, 2, 0, 2, 0, 8, 767 + waitforvisualfinish + loopsewithpan SE_W048, 63, 10, 3 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 15, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -6, -6, 15, 1, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + delay 1 + call gUnknown_81D59C7 + end + +Move_FUTURE_SIGHT:: @ 81CD4CF + goto gUnknown_81CD4DD + +gUnknown_81CD4D4:: @ 81CD4D4 + waitforvisualfinish + delay 1 + call gUnknown_81D59C7 + end + +gUnknown_81CD4DD:: @ 81CD4DD + monbg 2 + playsewithpan SE_W060, 192 + call gUnknown_81D59BB + setalpha 8, 8 + playsewithpan SE_W048, 192 + createvisualtask sub_80B9BDC, 2, 2, 0, 2, 0, 8, 32767 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, 0, 1 + waitforvisualfinish + clearmonbg 2 + blendoff + goto gUnknown_81CD4D4 + monbg 3 + playsewithpan SE_W060, 192 + call gUnknown_81D59BB + setalpha 8, 8 + playsewithpan SE_W048, 63 + waitplaysewithpan SE_W048, 63, 8 + createvisualtask AnimTask_ShakeMon, 2, 1, 4, 0, 15, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 15, 1, 1 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, 1, 4, 0, 24, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + goto gUnknown_81CD4D4 + +Move_THUNDER:: @ 81CD570 + loadspritegfx 10037 + fadetobg 11 + waitbgfadeout + createvisualtask sub_80BB82C, 5, -256, 0, 1, -1 + waitbgfadein + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, 0 + delay 16 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + playsewithpan SE_W086, 63 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 16, -36 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 16, -20 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 16, 12 + delay 20 + createsprite gUnknown_83E5F38, ANIM_TARGET, 6, -16, -32 + playsewithpan SE_W086, 63 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 6, -16, -16 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 6, -16, 16 + playsewithpan SE_W086, 63 + delay 5 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 24, -32 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 24, -16 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 24, 16 + delay 30 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 5 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 0, -32 + playsewithpan SE_W161B, 63 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 0, -16 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 0, 16 + delay 10 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 1 + createvisualtask sub_80ADAD8, 2, 30, 3, 1, 0 + delay 2 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_TARGET, 2, 1, 2, 16, 0, 0 + waitforvisualfinish + restorebg + waitbgfadeout + setarg 7, 65535 + waitbgfadein + end + +Move_THUNDER_PUNCH:: @ 81CD6CA + loadspritegfx 10135 + loadspritegfx 10143 + loadspritegfx 10037 + monbg 1 + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, 0 + waitforvisualfinish + playsewithpan SE_W004, 63 + createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + delay 1 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 0, -48 + delay 1 + createsprite gUnknown_83E5F38, ANIM_ATTACKER, 2, 0, -16 + delay 1 + createsprite gUnknown_83E5F38, ANIM_ATTACKER, 2, 0, 16 + delay 1 + playsewithpan SE_W161B, 63 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 15, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, 0 + delay 20 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_SACRED_FIRE:: @ 81CD793 + loadspritegfx 10033 + loadspritegfx 10035 + loopsewithpan SE_W221, 192, 7, 5 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, -32, 0, 50, 5, -2, 0 + delay 1 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 66, -20, -10, 50, 5, -1, -1 + delay 1 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 66, 0, -16, 50, 5, 0, -1 + delay 1 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 66, 20, -10, 50, 5, 1, -1 + delay 1 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, 32, 0, 50, 5, 2, 0 + delay 1 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, 20, 10, 50, 5, 1, 1 + delay 1 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 1 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, 0, 16, 50, 5, 0, 1 + delay 1 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, -20, 10, 50, 5, -1, 1 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 1 + waitforvisualfinish + playsewithpan SE_W221B, 63 + createsprite gUnknown_83E5C70, ANIM_TARGET, 2, -16, 0, 70, 16, 0, 1 + delay 10 + playsewithpan SE_W221B, 63 + createsprite gUnknown_83E5C70, ANIM_TARGET, 2, 0, 0, 70, 16, 0, 1 + delay 10 + playsewithpan SE_W221B, 63 + createsprite gUnknown_83E5C70, ANIM_TARGET, 2, 16, 0, 80, 16, 0, 1 + delay 1 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 1 + waitforvisualfinish + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 1 + playsewithpan SE_W172B, 63 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, -1, 0 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, 0, 1 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, -1, -1 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, 2, 1 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, 1, -1 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, -1, 1 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, 1, -2 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, 3, 1 + waitforvisualfinish + end + +Move_SCRATCH:: @ 81CD97A + loadspritegfx 10137 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W010, 63 + createsprite gUnknown_83FEE00, ANIM_ATTACKER, 2, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + waitforvisualfinish + end + +Move_DRAGON_BREATH:: @ 81CD9AC + loadspritegfx 10029 + monbg 3 + monbgprio_28 1 + loopsewithpan SE_W172, 192, 7, 7 + createsprite gUnknown_83E77A4, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + delay 2 + createsprite gUnknown_83E77A4, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + delay 2 + createvisualtask sub_80BA7F8, 10, 4, 1, 0, 9, 31 + createsprite gUnknown_83E77A4, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + delay 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 21, 1 + createsprite gUnknown_83E77A4, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + delay 2 + createsprite gUnknown_83E77A4, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + delay 2 + createsprite gUnknown_83E77A4, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + delay 2 + createsprite gUnknown_83E77A4, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + delay 2 + createsprite gUnknown_83E77A4, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + delay 2 + createsprite gUnknown_83E77A4, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + delay 2 + createsprite gUnknown_83E77A4, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + delay 2 + createsprite gUnknown_83E77A4, ANIM_TARGET, 2, 0, 0, 0, 0, 20 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 4, 1, 9, 0, 31 + waitforvisualfinish + clearmonbg 3 + end + +Move_ROAR:: @ 81CDAC0 + loadspritegfx 10053 + monbg 0 + monbgprio_28 0 + setalpha 8, 8 + createvisualtask sub_80DD148, 2, 0, 2 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 10, 0, 1 + call gUnknown_81CDB06 + delay 20 + createvisualtask sub_80995FC, 5, 1, 2 + waitforvisualfinish + clearmonbg 0 + blendoff + waitforvisualfinish + createvisualtask sub_80DD2F4, 5, + waitforvisualfinish + end + +gUnknown_81CDB06:: @ 81CDB06 + createsprite gUnknown_83FF5B4, ANIM_ATTACKER, 2, 24, -8, 0 + createsprite gUnknown_83FF5B4, ANIM_ATTACKER, 2, 24, 0, 2 + createsprite gUnknown_83FF5B4, ANIM_ATTACKER, 2, 24, 8, 1 + delay 15 + createsprite gUnknown_83FF5B4, ANIM_ATTACKER, 2, 24, -8, 0 + createsprite gUnknown_83FF5B4, ANIM_ATTACKER, 2, 24, 0, 2 + createsprite gUnknown_83FF5B4, ANIM_ATTACKER, 2, 24, 8, 1 + return + +Move_GROWL:: @ 81CDB57 + loadspritegfx 10053 + createvisualtask sub_80DD148, 2, 0, 255 + call gUnknown_81CDB06 + delay 10 + createvisualtask AnimTask_ShakeMon2, 2, 1, 1, 0, 9, 1 + createvisualtask AnimTask_ShakeMon2, 2, 3, 1, 0, 9, 1 + waitforvisualfinish + createvisualtask sub_80DD2F4, 5, + waitforvisualfinish + end + +Move_SNORE:: @ 81CDB98 + loadspritegfx 10197 + monbg 2 + setalpha 8, 8 + call gUnknown_81CDBB1 + delay 30 + call gUnknown_81CDBB1 + waitforvisualfinish + clearmonbg 2 + blendoff + end + +gUnknown_81CDBB1:: @ 81CDBB1 + playsewithpan SE_W173, 192 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 7, 0, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 7, 1 + createsprite gUnknown_83E7B88, ANIM_ATTACKER, 2, 6, 1, 14, 0, 0 + createsprite gUnknown_83E3F64, ANIM_ATTACKER, 2, 0, 0, -42, -38, 24, 0, 0 + createsprite gUnknown_83E3F64, ANIM_ATTACKER, 2, 0, 0, 0, -42, 24, 0, 0 + createsprite gUnknown_83E3F64, ANIM_ATTACKER, 2, 0, 0, 42, -38, 24, 0, 0 + return + +Move_LIGHT_SCREEN:: @ 81CDC28 + loadspritegfx 10070 + loadspritegfx 10166 + setalpha 0, 16 + waitplaysewithpan SE_W115, 192, 15 + createsprite gUnknown_83E6E10, ANIM_ATTACKER, 1, 40, 0, 10166 + delay 10 + call gUnknown_81CDC4F + waitforvisualfinish + delay 1 + blendoff + end + +gUnknown_81CDC4F:: @ 81CDC4F + createsprite gUnknown_83E6ED4, ANIM_ATTACKER, 2, 23, 0, 0, 1 + delay 6 + createsprite gUnknown_83E6ED4, ANIM_ATTACKER, 2, 31, -8, 0, 1 + delay 5 + createsprite gUnknown_83E6ED4, ANIM_ATTACKER, 2, 30, 20, 0, 1 + delay 7 + createsprite gUnknown_83E6ED4, ANIM_ATTACKER, 2, 10, -15, 0, 1 + delay 6 + createsprite gUnknown_83E6ED4, ANIM_ATTACKER, 2, 20, 10, 0, 1 + delay 6 + createsprite gUnknown_83E6ED4, ANIM_ATTACKER, 2, 10, 18, 0, 1 + return + +Move_MIRROR_COAT:: @ 81CDCB4 + loadspritegfx 10070 + loadspritegfx 10168 + setalpha 0, 16 + createsprite gUnknown_83E6E40, ANIM_ATTACKER, 1, 40, 0, 10168 + delay 10 + playsewithpan SE_W115, 192 + call gUnknown_81CDC4F + waitforvisualfinish + delay 1 + blendoff + end + +Move_REFLECT:: @ 81CDCDA + loadspritegfx 10071 + loadspritegfx 10167 + setalpha 0, 16 + waitplaysewithpan SE_W115, 192, 15 + createsprite gUnknown_83E6E28, ANIM_ATTACKER, 1, 40, 0, 10167 + delay 20 + createsprite gUnknown_83E6EA4, ANIM_ATTACKER, 2, 30, 0, 0, 1 + delay 7 + createsprite gUnknown_83E6EA4, ANIM_ATTACKER, 2, 19, -12, 0, 1 + delay 7 + createsprite gUnknown_83E6EA4, ANIM_ATTACKER, 2, 10, 20, 0, 1 + waitforvisualfinish + delay 1 + blendoff + end + +Move_BARRIER:: @ 81CDD2D + loadspritegfx 10169 + setalpha 0, 16 + waitplaysewithpan SE_W112, 192, 15 + createsprite gUnknown_83E6E58, ANIM_ATTACKER, 3, 40, 0, 10169 + waitforvisualfinish + delay 1 + blendoff + end + +Move_BUBBLE:: @ 81CDD4A + loadspritegfx 10146 + loadspritegfx 10155 + monbg 1 + setalpha 12, 8 + delay 1 + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 15, -15, 10, 128, 100 + playsewithpan SE_W145, 192 + waitplaysewithpan SE_W145B, 63, 100 + delay 6 + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 35, 37, 40, 128, 100 + playsewithpan SE_W145, 192 + waitplaysewithpan SE_W145B, 63, 100 + delay 6 + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 10, -37, 30, 128, 100 + playsewithpan SE_W145, 192 + waitplaysewithpan SE_W145B, 63, 100 + delay 6 + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 30, 10, 15, 128, 100 + playsewithpan SE_W145, 192 + waitplaysewithpan SE_W145B, 63, 100 + delay 6 + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 20, 33, 20, 128, 100 + playsewithpan SE_W145, 192 + waitplaysewithpan SE_W145B, 63, 100 + delay 6 + createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 25, -30, 10, 128, 100 + playsewithpan SE_W145, 192 + waitplaysewithpan SE_W145B, 63, 100 + waitforvisualfinish + call gUnknown_81D583D + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_SMOG:: @ 81CDE20 + loadspritegfx 10172 + monbg 3 + monbgprio_29 + setalpha 12, 8 + loopsewithpan SE_W054, 63, 17, 10 + call gUnknown_81CDE85 + call gUnknown_81CDE85 + call gUnknown_81CDE85 + call gUnknown_81CDE85 + call gUnknown_81CDE85 + call gUnknown_81CDE85 + call gUnknown_81CDE85 + delay 120 + loopsewithpan SE_W092, 63, 18, 2 + createvisualtask sub_80B9BDC, 2, 4, 2, 2, 0, 12, 26650 + delay 10 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 15, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81CDE85:: @ 81CDE85 + createsprite gUnknown_83E64BC, ANIM_ATTACKER, 2, 0, -24, 48, 240, 1, 0 + delay 7 + return + +Move_FAINT_ATTACK:: @ 81CDE9B + loadspritegfx 10135 + monbg 0 + fadetobg 1 + waitbgfadein + delay 0 + playsewithpan SE_W185, 192 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 18, 6, 1, 3 + createvisualtask sub_80B78E0, 2, 1 + waitforvisualfinish + clearmonbg 0 + invisible 0 + delay 1 + createvisualtask sub_80BC12C, 2, + monbg 1 + setalpha 12, 8 + delay 1 + playsewithpan SE_W233B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 9, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + delay 1 + setarg 7, 4096 + delay 32 + createvisualtask sub_80B7A80, 2, + monbg 0 + createvisualtask sub_80B79DC, 2, 1 + waitforvisualfinish + clearmonbg 0 + delay 1 + restorebg + waitbgfadein + end + +Move_SAND_ATTACK:: @ 81CDF22 + loadspritegfx 10074 + monbg 2 + monbgprio_28 0 + setalpha 12, 8 + playsewithpan SE_W028, 192 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -10, 0, 0, 3 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 2 + call gUnknown_81CDF72 + call gUnknown_81CDF72 + call gUnknown_81CDF72 + call gUnknown_81CDF72 + call gUnknown_81CDF72 + call gUnknown_81CDF72 + waitforvisualfinish + clearmonbg 2 + blendoff + end + +gUnknown_81CDF72:: @ 81CDF72 + createsprite gUnknown_83E7A58, ANIM_TARGET, 2, 15, 15, 20, 0, 0 + createsprite gUnknown_83E7A58, ANIM_TARGET, 2, 15, 15, 20, 10, 10 + createsprite gUnknown_83E7A58, ANIM_TARGET, 2, 15, 15, 20, -10, -10 + createsprite gUnknown_83E7A58, ANIM_TARGET, 2, 15, 15, 20, 20, 5 + createsprite gUnknown_83E7A58, ANIM_TARGET, 2, 15, 15, 20, -20, -5 + delay 2 + return + +Move_MUD_SLAP:: @ 81CDFCA + loadspritegfx 10074 + playsewithpan SE_W028, 192 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -10, 0, 0, 3 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 2 + call gUnknown_81CE010 + call gUnknown_81CE010 + call gUnknown_81CE010 + call gUnknown_81CE010 + call gUnknown_81CE010 + call gUnknown_81CE010 + waitforvisualfinish + end + +gUnknown_81CE010:: @ 81CE010 + createsprite gUnknown_83E7A7C, ANIM_TARGET, 2, 15, 15, 20, 0, 0 + createsprite gUnknown_83E7A7C, ANIM_TARGET, 2, 15, 15, 20, 10, 5 + createsprite gUnknown_83E7A7C, ANIM_TARGET, 2, 15, 15, 20, -10, -5 + createsprite gUnknown_83E7A7C, ANIM_TARGET, 2, 15, 15, 20, 20, 10 + createsprite gUnknown_83E7A7C, ANIM_TARGET, 2, 15, 15, 20, -20, -10 + delay 2 + return + +Move_DRAGON_RAGE:: @ 81CE068 + loadspritegfx 10029 + loadspritegfx 10035 + playsewithpan SE_W082, 192 + createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 40, 1 + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_TARGET, 2, 0, 15, 0, 0, 4 + waitforvisualfinish + createsprite gUnknown_83E7830, ANIM_TARGET, 2, 30, 15, 0, 10, 10 + waitforvisualfinish + loopsewithpan SE_W172B, 63, 11, 3 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 3, 25, 1 + createsprite gUnknown_83E77D8, ANIM_TARGET, 66, 1, 5, 0 + delay 1 + createsprite gUnknown_83E77D8, ANIM_TARGET, 66, 1, -10, -15 + delay 1 + createsprite gUnknown_83E77D8, ANIM_TARGET, 2, 1, 0, 25 + delay 1 + createsprite gUnknown_83E77D8, ANIM_TARGET, 66, 1, 15, 5 + delay 1 + createsprite gUnknown_83E77D8, ANIM_TARGET, 66, 1, -25, 0 + delay 1 + createsprite gUnknown_83E77D8, ANIM_TARGET, 2, 1, 30, 30 + delay 1 + createsprite gUnknown_83E77D8, ANIM_TARGET, 2, 1, -27, 25 + delay 1 + createsprite gUnknown_83E77D8, ANIM_TARGET, 66, 1, 0, 8 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_TARGET, 66, 0, 0, 4 + waitforvisualfinish + end + +Move_RAIN_DANCE:: @ 81CE145 + loadspritegfx 10115 + playsewithpan SE_W240, 192 + createvisualtask sub_80BA7F8, 10, 1921, 2, 0, 4, 0 + waitforvisualfinish + createvisualtask sub_80AABC0, 2, 0, 3, 120 + createvisualtask sub_80AABC0, 2, 0, 3, 120 + delay 120 + delay 30 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 1921, 2, 4, 0, 0 + waitforvisualfinish + end + +Move_BITE:: @ 81CE190 + loadspritegfx 10139 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W044, 63 + createsprite gUnknown_83E7930, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10 + createsprite gUnknown_83E7930, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10 + delay 10 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 4, 7, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + delay 1 + end + +Move_CRUNCH:: @ 81CE1EE + loadspritegfx 10139 + loadspritegfx 10135 + monbg 1 + fadetobg 1 + waitbgfadein + setalpha 12, 8 + playsewithpan SE_W044, 63 + createsprite gUnknown_83E7930, ANIM_ATTACKER, 2, -32, -32, 1, 819, 819, 10 + createsprite gUnknown_83E7930, ANIM_ATTACKER, 2, 32, 32, 5, -819, -819, 10 + delay 10 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -8, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 7, 5, 2 + waitforvisualfinish + playsewithpan SE_W044, 63 + createsprite gUnknown_83E7930, ANIM_ATTACKER, 2, 32, -32, 7, -819, 819, 10 + createsprite gUnknown_83E7930, ANIM_ATTACKER, 2, -32, 32, 3, 819, -819, 10 + delay 10 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 8, 4, 2 + waitforvisualfinish + clearmonbg 1 + blendoff + delay 1 + restorebg + waitbgfadein + end + +Move_CLAMP:: @ 81CE29E + loadspritegfx 10145 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W011, 63 + createsprite gUnknown_83E7948, ANIM_ATTACKER, 2, -32, 0, 2, 819, 0, 10 + createsprite gUnknown_83E7948, ANIM_ATTACKER, 2, 32, 0, 6, -819, 0, 10 + delay 10 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 3, 0, 5, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + waitforvisualfinish + end + +Move_ICE_BEAM:: @ 81CE2FB + monbg 1 + monbgprio_28 1 + setalpha 12, 8 + loadspritegfx 10141 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, 0 + waitforvisualfinish + createsoundtask mas_80DCF38, 176, -64, 63, 4, 4, 0, 10 + createsprite gUnknown_83E63A4, ANIM_ATTACKER, 2, 20, 12, 0, 12, 20 + createsprite gUnknown_83E63A4, ANIM_ATTACKER, 2, 20, -12, 0, -12, 20 + delay 1 + call gUnknown_81CE3FC + call gUnknown_81CE3FC + call gUnknown_81CE3FC + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, -31, 0, 7, 32384 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 25, 1 + call gUnknown_81CE3FC + call gUnknown_81CE3FC + call gUnknown_81CE3FC + call gUnknown_81CE3FC + call gUnknown_81CE3FC + call gUnknown_81CE3FC + call gUnknown_81CE3FC + call gUnknown_81CE3FC + createsprite gUnknown_83E638C, ANIM_ATTACKER, 2, 20, 0, 0, 0, 11 + delay 1 + createsprite gUnknown_83E638C, ANIM_ATTACKER, 2, 20, 0, 0, 0, 11 + waitforvisualfinish + delay 20 + call gUnknown_81D540A + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, 5, 7, 0, 32384 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7, 0, 0 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +gUnknown_81CE3FC:: @ 81CE3FC + createsprite gUnknown_83E63A4, ANIM_ATTACKER, 2, 20, 12, 0, 12, 20 + createsprite gUnknown_83E63A4, ANIM_ATTACKER, 2, 20, -12, 0, -12, 20 + createsprite gUnknown_83E638C, ANIM_ATTACKER, 2, 20, 0, 0, 0, 11 + delay 1 + return + +Move_WITHDRAW:: @ 81CE432 + playsewithpan SE_W029, 192 + createvisualtask sub_80A70A0, 5, + waitforvisualfinish + end + +Move_AURORA_BEAM:: @ 81CE43F + loadspritegfx 10140 + fadetobg 20 + waitbgfadein + playsewithpan SE_W062, 192 + setarg 7, 0 + createvisualtask sub_80AAF60, 10, 130 + call gUnknown_81CE4C6 + createvisualtask AnimTask_ShakeMon2, 5, 1, 1, 0, 17, 1 + call gUnknown_81CE4C6 + call gUnknown_81CE4C6 + call gUnknown_81CE4C6 + setarg 7, 65535 + createsoundtask mas_80DCF38, 176, -64, 63, 3, 6, 0, 10 + createvisualtask AnimTask_ShakeMon2, 5, 1, 2, 0, 40, 1 + call gUnknown_81CE4C6 + call gUnknown_81CE4C6 + call gUnknown_81CE4C6 + call gUnknown_81CE4C6 + call gUnknown_81CE4C6 + call gUnknown_81CE4C6 + waitforvisualfinish + restorebg + waitbgfadein + end + +gUnknown_81CE4C6:: @ 81CE4C6 + createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17 + delay 1 + createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17 + delay 1 + createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17 + delay 1 + createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17 + delay 1 + return + +Move_SOLAR_BEAM:: @ 81CE513 + loadspritegfx 10147 + choosetwoturnanim gUnknown_81CE521, gUnknown_81CE61E + +gUnknown_81CE51F:: @ 81CE51F + waitforvisualfinish + end + +gUnknown_81CE521:: @ 81CE521 + monbg 2 + setalpha 12, 8 + createvisualtask sub_80B9BDC, 2, 2, 1, 4, 0, 11, 12287 + playsewithpan SE_W025, 192 + call gUnknown_81CE54B + waitforvisualfinish + clearmonbg 2 + blendoff + goto gUnknown_81CE51F + +gUnknown_81CE54B:: @ 81CE54B + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 40, 40, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, -40, -40, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 0, 40, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 0, -40, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 40, -20, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 40, 20, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, -40, -20, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, -40, 20, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, -20, 30, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 20, -30, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, -20, -30, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 20, 30, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, -40, 0, 16 + delay 2 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 40, 0, 16 + delay 2 + return + +gUnknown_81CE61E:: @ 81CE61E + call gUnknown_81D5A07 + panse_1B SE_W076, 192, 63, 2, 0 + createvisualtask sub_80A2500, 5, + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 0 + delay 4 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 1 + delay 4 + createvisualtask sub_80BA7F8, 10, 4, 1, 0, 10, 1017 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 2 + delay 4 + createvisualtask AnimTask_ShakeMon2, 5, 1, 2, 0, 65, 1 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 3 + delay 4 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 4 + delay 4 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 5 + delay 4 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 6 + delay 4 + call gUnknown_81CE6F0 + call gUnknown_81CE6F0 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 4, 1, 10, 0, 1017 + call gUnknown_81D5A41 + goto gUnknown_81CE51F + +gUnknown_81CE6F0:: @ 81CE6F0 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 0 + delay 4 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 1 + delay 4 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 2 + delay 4 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 3 + delay 4 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 4 + delay 4 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 5 + delay 4 + createsprite gUnknown_83E2A70, ANIM_TARGET, 3, 15, 0, 20, 6 + delay 4 + return + +Move_BLIZZARD:: @ 81CE768 + loadspritegfx 10141 + monbg 3 + createvisualtask AnimTask_GetAttackerSide, 2, + jumpargeq 7, 1, gUnknown_81CE8ED + fadetobg 9 + +gUnknown_81CE77E:: @ 81CE77E + waitbgfadeout + createvisualtask sub_80BB82C, 5, -2304, 0, 1, -1 + waitbgfadein + waitforvisualfinish + panse_1B SE_W059, 192, 63, 2, 0 + call gUnknown_81CE7B8 + call gUnknown_81CE7B8 + playsewithpan SE_W059B, 63 + waitforvisualfinish + call gUnknown_81D548E + waitforvisualfinish + clearmonbg 3 + delay 20 + restorebg + waitbgfadeout + setarg 7, 65535 + waitbgfadein + end + +gUnknown_81CE7B8:: @ 81CE7B8 + createsprite gUnknown_83E6410, ANIM_ATTACKER, 40, 0, -10, 0, -10, 72, 1 + createsprite gUnknown_83E6428, ANIM_ATTACKER, 40, 0, 0, 0, 0, 80, 0, 0, 1 + delay 3 + createsprite gUnknown_83E6410, ANIM_ATTACKER, 40, 0, -15, 0, -15, 72, 1 + createsprite gUnknown_83E6428, ANIM_ATTACKER, 40, 0, -10, 0, -10, 80, 0, 0, 1 + delay 3 + createsprite gUnknown_83E6410, ANIM_ATTACKER, 40, 0, -5, 0, -5, 72, 1 + createsprite gUnknown_83E6428, ANIM_ATTACKER, 40, 0, 10, 0, 10, 80, 0, 0, 1 + delay 3 + createsprite gUnknown_83E6410, ANIM_ATTACKER, 40, 0, -10, 0, -10, 72, 1 + createsprite gUnknown_83E6428, ANIM_ATTACKER, 40, 0, -20, 0, -20, 80, 0, 0, 1 + delay 3 + createsprite gUnknown_83E6410, ANIM_ATTACKER, 40, 0, -20, 0, -20, 72, 1 + createsprite gUnknown_83E6428, ANIM_ATTACKER, 40, 0, 15, 0, 15, 80, 0, 0, 1 + delay 3 + createsprite gUnknown_83E6410, ANIM_ATTACKER, 40, 0, -15, 0, -15, 72, 1 + createsprite gUnknown_83E6428, ANIM_ATTACKER, 40, 0, -20, 0, -20, 80, 0, 0, 1 + delay 3 + createsprite gUnknown_83E6410, ANIM_ATTACKER, 40, 0, -25, 0, -25, 72, 1 + createsprite gUnknown_83E6428, ANIM_ATTACKER, 40, 0, 20, 0, 20, 80, 0, 0, 1 + delay 3 + return + +gUnknown_81CE8ED:: @ 81CE8ED + fadetobg 10 + goto gUnknown_81CE77E + +Move_POWDER_SNOW:: @ 81CE8F4 + loadspritegfx 10141 + monbg 3 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 1, 0, 3, 0 + waitforvisualfinish + panse_1B SE_W016, 192, 63, 2, 0 + call gUnknown_81CE93E + call gUnknown_81CE93E + playsewithpan SE_W016B, 63 + waitforvisualfinish + waitsound + call gUnknown_81D548E + waitforvisualfinish + clearmonbg 3 + delay 20 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 1, 3, 0, 0 + end + +gUnknown_81CE93E:: @ 81CE93E + createsprite gUnknown_83E6440, ANIM_ATTACKER, 40, 0, 0, 0, 0, 56, 4, 4, 1 + delay 3 + createsprite gUnknown_83E6440, ANIM_ATTACKER, 40, 0, -10, 0, -10, 56, 4, 4, 1 + delay 3 + createsprite gUnknown_83E6440, ANIM_ATTACKER, 40, 0, 10, 0, 10, 56, -4, 3, 1 + delay 3 + createsprite gUnknown_83E6440, ANIM_ATTACKER, 40, 0, -20, 0, -20, 56, -4, 5, 1 + delay 3 + createsprite gUnknown_83E6440, ANIM_ATTACKER, 40, 0, 15, 0, 15, 56, 4, 4, 1 + delay 3 + createsprite gUnknown_83E6440, ANIM_ATTACKER, 40, 0, -20, 0, -20, 56, 4, 4, 1 + delay 3 + createsprite gUnknown_83E6440, ANIM_ATTACKER, 40, 0, 20, 0, 20, 56, 4, 4, 1 + delay 3 + return + +Move_HYDRO_PUMP:: @ 81CE9EE + loadspritegfx 10149 + loadspritegfx 10148 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 40, 1 + delay 6 + panse_1B SE_W056, 192, 63, 2, 0 + createvisualtask sub_80AB100, 5, 100 + call gUnknown_81CEA8D + call gUnknown_81CEA8D + call gUnknown_81CEA8D + createvisualtask AnimTask_ShakeMon, 5, 1, 3, 0, 37, 1 + call gUnknown_81CEACE + call gUnknown_81CEA8D + call gUnknown_81CEA8D + call gUnknown_81CEACE + call gUnknown_81CEA8D + call gUnknown_81CEA8D + call gUnknown_81CEACE + call gUnknown_81CEA8D + call gUnknown_81CEA8D + call gUnknown_81CEACE + call gUnknown_81CEA8D + call gUnknown_81CEA8D + call gUnknown_81CEACE + delay 1 + delay 1 + call gUnknown_81CEACE + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81CEA8D:: @ 81CEA8D + createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, 16 + createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, -16 + delay 1 + createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, 16 + createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, -16 + delay 1 + return + +gUnknown_81CEACE:: @ 81CEACE + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, 15, 1, 1 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, -15, 1, 1 + return + +Move_SIGNAL_BEAM:: @ 81CEAED + loadspritegfx 10264 + loadspritegfx 10265 + loadspritegfx 10073 + createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 25, 1 + delay 6 + panse_1B SE_W062, 192, 63, 1, 0 + createvisualtask sub_80AB100, 5, 100 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + createvisualtask AnimTask_ShakeMon, 5, 1, 3, 0, 25, 1 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 4, 8, 5, 31, 8, 961, 8 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + call gUnknown_81CEBB4 + waitforvisualfinish + end + +gUnknown_81CEBB4:: @ 81CEBB4 + createsprite gUnknown_83E598C, ANIM_TARGET, 3, 10, 10, 0, 16 + createsprite gUnknown_83E59A4, ANIM_TARGET, 3, 10, 10, 0, -16 + delay 1 + return + +Move_ABSORB:: @ 81CEBD5 + loadspritegfx 10147 + loadspritegfx 10031 + loadspritegfx 10135 + monbg 3 + monbgprio_2A 1 + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 4, 13293 + waitforvisualfinish + playsewithpan SE_W071, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + delay 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 5, 5, 1 + waitforvisualfinish + delay 3 + call gUnknown_81CEC44 + waitforvisualfinish + delay 15 + call gUnknown_81D56C9 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 4, 0, 13293 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81CEC44:: @ 81CEC44 + playsewithpan SE_W152, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + delay 4 + playsewithpan SE_W152, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + delay 4 + playsewithpan SE_W152, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -5, 15, 16, 33 + delay 4 + playsewithpan SE_W152, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, -15, -16, 36 + delay 4 + playsewithpan SE_W152, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + delay 4 + playsewithpan SE_W152, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + delay 4 + playsewithpan SE_W152, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -10, 20, 20, 39 + delay 4 + playsewithpan SE_W152, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 5, -18, -20, 35 + delay 4 + return + +Move_MEGA_DRAIN:: @ 81CECED + loadspritegfx 10147 + loadspritegfx 10031 + loadspritegfx 10135 + monbg 3 + monbgprio_2A 1 + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 8, 13293 + waitforvisualfinish + playsewithpan SE_W071, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + delay 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 5, 5, 1 + waitforvisualfinish + delay 3 + call gUnknown_81CED5C + waitforvisualfinish + delay 15 + call gUnknown_81D56C9 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 8, 0, 13293 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81CED5C:: @ 81CED5C + playsewithpan SE_W145C, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 5, -18, -20, 35 + delay 4 + playsewithpan SE_W145C, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -10, 20, 20, 39 + delay 4 + playsewithpan SE_W145C, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -5, 15, 16, 33 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + delay 4 + playsewithpan SE_W145C, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, -15, -16, 36 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + delay 4 + playsewithpan SE_W145C, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, -15, -16, 36 + delay 4 + playsewithpan SE_W145C, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -5, 15, 16, 33 + delay 4 + playsewithpan SE_W145C, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -10, 20, 20, 39 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + delay 4 + playsewithpan SE_W145C, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 5, -18, -20, 35 + delay 4 + return + +Move_GIGA_DRAIN:: @ 81CEE7D + loadspritegfx 10147 + loadspritegfx 10031 + loadspritegfx 10135 + monbg 3 + monbgprio_2A 1 + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 12, 13293 + waitforvisualfinish + playsewithpan SE_W071, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0 + delay 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 5, 5, 1 + waitforvisualfinish + delay 3 + call gUnknown_81CEEEC + waitforvisualfinish + delay 15 + call gUnknown_81D56C9 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 12, 0, 13293 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81CEEEC:: @ 81CEEEC + playsewithpan SE_W202, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 5, -18, -40, 35 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -10, 20, 20, 39 + delay 4 + playsewithpan SE_W202, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 28, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -10, 20, 40, 39 + delay 4 + playsewithpan SE_W202, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -5, 15, 16, 33 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -32, 26 + delay 4 + playsewithpan SE_W202, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, -15, -16, 36 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + delay 4 + playsewithpan SE_W202, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -5, 15, 16, 33 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, -15, -16, 36 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + delay 4 + playsewithpan SE_W202, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -5, 15, 16, 33 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -40, 26 + delay 4 + playsewithpan SE_W202, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -5, 15, 36, 33 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -10, 20, 20, 39 + delay 4 + playsewithpan SE_W202, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 5, -18, -20, 35 + delay 4 + return + +Move_LEECH_LIFE:: @ 81CF085 + loadspritegfx 10161 + loadspritegfx 10147 + delay 1 + loadspritegfx 10031 + loadspritegfx 10135 + monbg 3 + monbgprio_2A 1 + setalpha 12, 8 + delay 1 + createsprite gUnknown_83E7278, ANIM_ATTACKER, 2, -20, 15, 12 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + playsewithpan SE_W071, 63 + delay 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 5, 5, 1 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 7, 0 + waitforvisualfinish + call gUnknown_81CEC44 + waitforvisualfinish + delay 15 + call gUnknown_81D56C9 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 7, 0, 0 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_SYNTHESIS:: @ 81CF107 + loadspritegfx 10031 + loadspritegfx 10049 + createvisualtask sub_80B9BDC, 2, 2, 2, 2, 0, 16, 19451 + playsewithpan SE_W025, 192 + call gUnknown_81D569E + waitforvisualfinish + call gUnknown_81D56C9 + waitforvisualfinish + end + +Move_TOXIC:: @ 81CF131 + loadspritegfx 10151 + loadspritegfx 10150 + call gUnknown_81CF14B + call gUnknown_81CF14B + waitforvisualfinish + delay 15 + call gUnknown_81D575B + waitforvisualfinish + end + +gUnknown_81CF14B:: @ 81CF14B + createsprite gUnknown_83E69AC, ANIM_TARGET, 2, -24, 16, 1, 1 + playsewithpan SE_W092, 63 + delay 15 + createsprite gUnknown_83E69AC, ANIM_TARGET, 2, 8, 16, 1, 1 + playsewithpan SE_W092, 63 + delay 15 + createsprite gUnknown_83E69AC, ANIM_TARGET, 2, -8, 16, 1, 1 + playsewithpan SE_W092, 63 + delay 15 + createsprite gUnknown_83E69AC, ANIM_TARGET, 2, 24, 16, 1, 1 + playsewithpan SE_W092, 63 + delay 15 + return + +Move_SLUDGE:: @ 81CF1A0 + loadspritegfx 10150 + playsewithpan SE_W145C, 192 + createsprite gUnknown_83E6A20, ANIM_TARGET, 2, 20, 0, 40, 0 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 5, 1, 3, 0, 5, 1 + createvisualtask sub_80B9BDC, 2, 4, 1, 2, 0, 12, 31774 + call gUnknown_81D575B + waitforvisualfinish + end + +Move_SLUDGE_BOMB:: @ 81CF1E2 + loadspritegfx 10150 + call gUnknown_81CF2F2 + call gUnknown_81CF2F2 + call gUnknown_81CF2F2 + call gUnknown_81CF2F2 + call gUnknown_81CF2F2 + call gUnknown_81CF2F2 + call gUnknown_81CF2F2 + call gUnknown_81CF2F2 + call gUnknown_81CF2F2 + call gUnknown_81CF2F2 + createvisualtask AnimTask_ShakeMon2, 5, 1, 3, 0, 15, 1 + createvisualtask sub_80B9BDC, 2, 4, 1, 2, 0, 12, 31774 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, 42, 27, 20 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, -27, 44, 20 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, 39, -28, 20 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, -42, -42, 20 + playsewithpan SE_W091, 63 + delay 5 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, 0, 40, 20 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, -8, -44, 20 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, -46, -28, 20 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, 46, 9, 20 + playsewithpan SE_W091, 63 + delay 5 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, 42, 0, 20 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, -43, -12, 20 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, 16, -46, 20 + createsprite gUnknown_83E6A50, ANIM_TARGET, 2, -16, 44, 20 + playsewithpan SE_W091, 63 + delay 0 + waitsound + waitforvisualfinish + call gUnknown_81D575B + waitforvisualfinish + end + +gUnknown_81CF2F2:: @ 81CF2F2 + playsewithpan SE_W145C, 192 + createsprite gUnknown_83E6A20, ANIM_TARGET, 2, 20, 0, 40, 0 + delay 3 + return + +Move_ACID:: @ 81CF308 + loadspritegfx 10150 + monbg 3 + createsprite gUnknown_83E6A38, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0 + playsewithpan SE_W145C, 192 + delay 5 + createsprite gUnknown_83E6A38, ANIM_TARGET, 2, 20, 0, 40, 1, 24, 0 + playsewithpan SE_W145C, 192 + delay 5 + createsprite gUnknown_83E6A38, ANIM_TARGET, 2, 20, 0, 40, 1, -24, 0 + playsewithpan SE_W145C, 192 + delay 15 + createvisualtask AnimTask_ShakeMon2, 5, 1, 2, 0, 10, 1 + createvisualtask AnimTask_ShakeMon2, 5, 3, 2, 0, 10, 1 + createvisualtask sub_80B9BDC, 2, 20, 2, 2, 0, 12, 31774 + createsprite gUnknown_83E6A84, ANIM_TARGET, 2, 0, -22, 0, 15, 55 + playsewithpan SE_W145, 63 + delay 10 + createsprite gUnknown_83E6A84, ANIM_TARGET, 2, -26, -24, 0, 15, 55 + playsewithpan SE_W145, 63 + delay 10 + createsprite gUnknown_83E6A84, ANIM_TARGET, 2, 15, -27, 0, 15, 50 + playsewithpan SE_W145, 63 + delay 10 + createsprite gUnknown_83E6A84, ANIM_TARGET, 2, -15, -17, 0, 10, 45 + playsewithpan SE_W145, 63 + delay 10 + createsprite gUnknown_83E6A84, ANIM_TARGET, 2, 27, -22, 0, 15, 50 + playsewithpan SE_W145, 63 + waitforvisualfinish + clearmonbg 3 + end + +Move_BONEMERANG:: @ 81CF402 + loadspritegfx 10000 + loadspritegfx 10135 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + playsewithpan SE_W155, 192 + createsprite gUnknown_83E7A28, ANIM_ATTACKER, 2, + delay 20 + playsewithpan SE_W030, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 5, 1, 5, 0, 5, 1 + delay 17 + playsewithpan SE_W233, 192 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, -4 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_BONE_CLUB:: @ 81CF456 + loadspritegfx 10000 + loadspritegfx 10135 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + playsewithpan SE_W155, 63 + createsprite gUnknown_83E7A40, ANIM_ATTACKER, 2, -42, -25, 0, 0, 15 + delay 12 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 5, 5, 1 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 7, 5, 1, 0, 10, 0, 0 + playsewithpan SE_W233B, 63 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_BONE_RUSH:: @ 81CF4B8 + loadspritegfx 10000 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W155, 63 + createsprite gUnknown_83E7A40, ANIM_ATTACKER, 2, -42, -25, 0, 0, 15 + delay 12 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 3, 5, 1 + playsewithpan SE_W030, 63 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_SPIKES:: @ 81CF503 + loadspritegfx 10152 + monbg 3 + playsewithpan SE_W026, 192 + waitplaysewithpan SE_W030, 63, 28 + createsprite gUnknown_83FEEFC, ANIM_TARGET, 2, 20, 0, 0, 24, 30 + delay 10 + playsewithpan SE_W026, 192 + waitplaysewithpan SE_W030, 63, 28 + createsprite gUnknown_83FEEFC, ANIM_TARGET, 2, 20, 0, -24, 24, 30 + delay 10 + waitplaysewithpan SE_W030, 63, 28 + createsprite gUnknown_83FEEFC, ANIM_TARGET, 2, 20, 0, 24, 24, 30 + waitforvisualfinish + clearmonbg 3 + end + +Move_MEGAHORN:: @ 81CF55A + loadspritegfx 10153 + loadspritegfx 10135 + monbg 3 + playsewithpan SE_W082, 192 + jumpifcontest gUnknown_81CF631 + fadetobg 7 + waitbgfadeout + createvisualtask sub_80BB82C, 5, -2304, 768, 1, -1 + +gUnknown_81CF57D:: @ 81CF57D + waitbgfadein + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon, 5, 0, 2, 0, 15, 1 + waitforvisualfinish + delay 10 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, 0, 0, 6 + delay 3 + createsprite gUnknown_83E7224, ANIM_ATTACKER, 3, -42, 25, 0, 0, 6 + delay 4 + playsewithpan SE_W011, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -16, 4, 1, 4 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, -4, 1, 12, 1 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 7, 5, 1, 32767, 10, 0, 0 + delay 10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 11 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + waitforvisualfinish + clearmonbg 3 + blendoff + restorebg + waitbgfadeout + setarg 7, 65535 + waitbgfadein + end + +gUnknown_81CF631:: @ 81CF631 + fadetobg 8 + waitbgfadeout + createvisualtask sub_80BB82C, 5, 2304, 768, 0, -1 + goto gUnknown_81CF57D + +Move_GUST:: @ 81CF648 + loadspritegfx 10009 + loadspritegfx 10135 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + playsewithpan SE_W016, 63 + createsprite gUnknown_83E6AE8, ANIM_ATTACKER, 2, 0, -16 + createvisualtask sub_80B194C, 5, 1, 70 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 5, 1, 1, 0, 7, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + playsewithpan SE_W016B, 63 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_WING_ATTACK:: @ 81CF699 + loadspritegfx 10009 + loadspritegfx 10135 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + loopsewithpan SE_W017, 192, 20, 2 + createvisualtask AnimTask_TranslateMonElliptical, 2, 0, 12, 4, 1, 4 + createvisualtask sub_80B194C, 5, 1, 70 + createsprite gUnknown_83E6B1C, ANIM_ATTACKER, 2, -25, 0, 0, 0, 20 + createsprite gUnknown_83E6B1C, ANIM_ATTACKER, 2, 25, 0, 0, 0, 20 + delay 24 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, 0, 0, 9 + delay 17 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 16, 0, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 1, 1 + loopsewithpan SE_W003, 63, 5, 2 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 11 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_PECK:: @ 81CF736 + loadspritegfx 10135 + playsewithpan SE_W030, 63 + createvisualtask sub_8099A78, 2, 3, -768, 1, 2 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, -12, 0, 1, 3 + waitforvisualfinish + end + +Move_AEROBLAST:: @ 81CF75D + loadspritegfx 10154 + loadspritegfx 10135 + monbg 3 + call gUnknown_81D59CF + monbgprio_28 1 + setalpha 12, 8 + call gUnknown_81CF7B9 + createvisualtask AnimTask_ShakeMon, 5, 1, 5, 0, 50, 1 + call gUnknown_81CF7B9 + call gUnknown_81CF7B9 + call gUnknown_81CF7B9 + call gUnknown_81CF7B9 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0 + playsewithpan SE_W013, 63 + waitforvisualfinish + clearmonbg 3 + blendoff + delay 0 + call gUnknown_81D59FF + end + +gUnknown_81CF7B9:: @ 81CF7B9 + playsewithpan SE_W026, 192 + createsprite gUnknown_83E6B4C, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 0, 0 + createsprite gUnknown_83E6B4C, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 0, 0 + delay 3 + playsewithpan SE_W026, 192 + createsprite gUnknown_83E6B4C, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 1, 0 + createsprite gUnknown_83E6B4C, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 1, 0 + delay 3 + playsewithpan SE_W026, 192 + createsprite gUnknown_83E6B4C, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 2, 0 + createsprite gUnknown_83E6B4C, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 2, 0 + delay 3 + playsewithpan SE_W026, 192 + createsprite gUnknown_83E6B4C, ANIM_ATTACKER, 2, 14, -12, 0, -12, 15, 3, 0 + createsprite gUnknown_83E6B4C, ANIM_ATTACKER, 2, 26, 8, 12, 8, 15, 3, 0 + delay 3 + return + +Move_WATER_GUN:: @ 81CF87A + loadspritegfx 10155 + loadspritegfx 10148 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + createsprite gUnknown_83E5A80, ANIM_ATTACKER, 2, 20, 0, 0, 0, 40, -25 + playsewithpan SE_W145, 192 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 5, 1, 1, 0, 8, 1 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, 0, 1, 2 + createsprite gUnknown_83E5A98, ANIM_ATTACKER, 2, 0, -15, 0, 15, 55 + playsewithpan SE_W152, 63 + delay 10 + createsprite gUnknown_83E5A98, ANIM_ATTACKER, 2, 15, -20, 0, 15, 50 + playsewithpan SE_W152, 63 + delay 10 + createsprite gUnknown_83E5A98, ANIM_ATTACKER, 2, -15, -10, 0, 10, 45 + playsewithpan SE_W152, 63 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_CRABHAMMER:: @ 81CF907 + loadspritegfx 10141 + loadspritegfx 10148 + monbg 3 + setalpha 12, 8 + createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, 0, 1, 0 + playsewithpan SE_W233B, 63 + delay 1 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 32429, 10, 0, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -24, 0, 0, 4 + waitforvisualfinish + delay 8 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 4 + waitforvisualfinish + loopsewithpan SE_W152, 63, 20, 3 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 4, 8, 1 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 10, 10, 20, 1 + delay 4 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 20, -20, 20, 1 + delay 4 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -15, 15, 20, 1 + delay 4 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 0, 0, 20, 1 + delay 4 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -10, -20, 20, 1 + delay 4 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 16, -8, 20, 1 + delay 4 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 5, 8, 20, 1 + delay 4 + createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -16, 0, 20, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_SURF:: @ 81CFA01 + createvisualtask sub_80AB38C, 2, 0 + delay 24 + panse_1B SE_W057, 192, 63, 2, 0 + waitforvisualfinish + end + +Move_FLAMETHROWER:: @ 81CFA15 + loadspritegfx 10029 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 46, 1 + delay 6 + createvisualtask sub_80AB100, 5, 100 + panse_1B SE_W053, 192, 63, 2, 0 + call gUnknown_81CFA8F + call gUnknown_81CFA8F + call gUnknown_81CFA8F + createvisualtask AnimTask_ShakeMon, 5, 1, 3, 0, 43, 1 + call gUnknown_81CFA8F + call gUnknown_81CFA8F + call gUnknown_81CFA8F + call gUnknown_81CFA8F + call gUnknown_81CFA8F + call gUnknown_81CFA8F + call gUnknown_81CFA8F + call gUnknown_81CFA8F + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81CFA8F:: @ 81CFA8F + createsprite gUnknown_83E59D0, ANIM_ATTACKER, 3, 10, 10, 0, 16 + delay 2 + createsprite gUnknown_83E59D0, ANIM_ATTACKER, 3, 10, 10, 0, 16 + delay 2 + return + +Move_SANDSTORM:: @ 81CFAB2 + loadspritegfx 10261 + playsewithpan SE_W201, 0 + createvisualtask AnimTask_LoadSandstormBackground, 5, 0 + delay 16 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 10, 2304, 96, 0 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 90, 2048, 96, 0 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 50, 2560, 96, 0 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 20, 2304, 96, 0 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 70, 1984, 96, 0 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 0, 2816, 96, 0 + delay 10 + createsprite gUnknown_83E7450, ANIM_ATTACKER, 40, 60, 2560, 96, 0 + end + +Move_WHIRLPOOL:: @ 81CFB3A + loadspritegfx 10149 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + delay 0 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, 23968 + playsewithpan SE_W250, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 2, 50, 1 + call gUnknown_81CFB92 + call gUnknown_81CFB92 + call gUnknown_81CFB92 + delay 12 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, 23968 + waitforvisualfinish + clearmonbg 3 + end + +gUnknown_81CFB92:: @ 81CFB92 + createsprite gUnknown_83E7420, ANIM_TARGET, 2, 0, 28, 384, 50, 8, 50, 1 + delay 2 + createsprite gUnknown_83E7420, ANIM_TARGET, 2, 0, 32, 240, 40, 11, -46, 1 + delay 2 + createsprite gUnknown_83E7420, ANIM_TARGET, 2, 0, 33, 416, 40, 4, 42, 1 + delay 2 + createsprite gUnknown_83E7420, ANIM_TARGET, 2, 0, 31, 288, 45, 6, -42, 1 + delay 2 + createsprite gUnknown_83E7420, ANIM_TARGET, 2, 0, 28, 448, 45, 11, 46, 1 + delay 2 + createsprite gUnknown_83E7420, ANIM_TARGET, 2, 0, 33, 464, 50, 10, -50, 1 + delay 2 + return + +Move_FLY:: @ 81CFC1D + loadspritegfx 10156 + loadspritegfx 10135 + choosetwoturnanim gUnknown_81CFC2E, gUnknown_81CFC46 + +gUnknown_81CFC2C:: @ 81CFC2C + waitforvisualfinish + end + +gUnknown_81CFC2E:: @ 81CFC2E + playsewithpan SE_W019, 192 + createsprite gUnknown_83E6BB8, ANIM_ATTACKER, 2, 0, 0, 13, 336 + goto gUnknown_81CFC2C + +gUnknown_81CFC46:: @ 81CFC46 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W104, 192 + createsprite gUnknown_83E6BD0, ANIM_ATTACKER, 2, 20 + delay 20 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + playsewithpan SE_W013, 63 + waitforvisualfinish + clearmonbg 3 + blendoff + goto gUnknown_81CFC2C + +Move_BOUNCE:: @ 81CFC87 + loadspritegfx 10156 + loadspritegfx 10135 + choosetwoturnanim gUnknown_81CFC97, gUnknown_81CFCAB + +gUnknown_81CFC96:: @ 81CFC96 + end + +gUnknown_81CFC97:: @ 81CFC97 + playsewithpan SE_W100, 192 + createsprite gUnknown_83E6CD0, ANIM_ATTACKER, 2, 0, 0 + goto gUnknown_81CFC96 + +gUnknown_81CFCAB:: @ 81CFCAB + monbg 3 + setalpha 12, 8 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E6CFC, ANIM_TARGET, 3, + delay 7 + playsewithpan SE_W025B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 5, 11, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + goto gUnknown_81CFC96 + +Move_KARATE_CHOP:: @ 81CFCEA + loadspritegfx 10143 + loadspritegfx 10135 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + playsewithpan SE_W104, 63 + createsprite gUnknown_83E66E0, ANIM_ATTACKER, 2, -16, 0, 0, 0, 10, 1, 3, 0 + waitforvisualfinish + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 4, 0, 6, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_CROSS_CHOP:: @ 81CFD3C + loadspritegfx 10143 + loadspritegfx 10285 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W025, 63 + createsprite gUnknown_83E6740, ANIM_ATTACKER, 2, 0, 0, 0 + createsprite gUnknown_83E6740, ANIM_ATTACKER, 2, 0, 0, 1 + delay 40 + playsewithpan SE_W013, 63 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 32767, 10, 0, 10 + createsprite gUnknown_83E7C80, ANIM_ATTACKER, 3, 0, 0, 1, 20 + createvisualtask AnimTask_ShakeMon, 5, 1, 7, 0, 9, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_JUMP_KICK:: @ 81CFDA5 + loadspritegfx 10143 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 + delay 3 + createsprite gUnknown_83E66F8, ANIM_ATTACKER, 2, -16, 8, 0, 0, 10, 1, 1, 1 + playsewithpan SE_W026, 63 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 5, 1, 5, 0, 7, 1 + playsewithpan SE_W004, 63 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_HI_JUMP_KICK:: @ 81CFE02 + loadspritegfx 10143 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -24, 0, 0, 8 + waitforvisualfinish + delay 10 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 3 + delay 2 + createsprite gUnknown_83E66F8, ANIM_ATTACKER, 2, -16, 8, 0, 0, 10, 1, 1, 1 + playsewithpan SE_W026, 63 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 1 + playsewithpan SE_W233B, 63 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -28, 0, 0, 3 + delay 3 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 3, 0, 11, 1 + waitforvisualfinish + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_DOUBLE_KICK:: @ 81CFE98 + loadspritegfx 10143 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + createsprite gUnknown_83E6728, ANIM_ATTACKER, 3, 1, 20, 1 + createvisualtask AnimTask_ShakeMon, 5, 1, 4, 0, 6, 1 + playsewithpan SE_W233B, 63 + waitforvisualfinish + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_TRIPLE_KICK:: @ 81CFECB + loadspritegfx 10143 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W233B, 63 + jumpifmoveturn 0, gUnknown_81CFEF0 + jumpifmoveturn 1, gUnknown_81CFF26 + goto gUnknown_81CFF5C + +gUnknown_81CFEEB:: @ 81CFEEB + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81CFEF0:: @ 81CFEF0 + createsprite gUnknown_83E6710, ANIM_TARGET, 4, -16, -8, 20, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -16, -16, 1, 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 4, 0, 6, 1 + goto gUnknown_81CFEEB + +gUnknown_81CFF26:: @ 81CFF26 + createsprite gUnknown_83E6710, ANIM_TARGET, 4, 8, 8, 20, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 4, 0, 6, 1 + goto gUnknown_81CFEEB + +gUnknown_81CFF5C:: @ 81CFF5C + createsprite gUnknown_83E6710, ANIM_TARGET, 4, 0, 0, 20, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, -8, 1, 1 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + goto gUnknown_81CFEEB + +Move_DYNAMIC_PUNCH:: @ 81CFF92 + loadspritegfx 10143 + loadspritegfx 10135 + loadspritegfx 10198 + loadspritegfx 10007 + delay 1 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W233B, 63 + createsprite gUnknown_83E6710, ANIM_TARGET, 3, 0, 0, 20, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon, 5, 1, 5, 0, 7, 1 + delay 1 + waitsound + playsewithpan SE_W120, 63 + createvisualtask AnimTask_ShakeMon2, 5, 1, 5, 0, 28, 1 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 0, 0, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 24, -24, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, -16, 16, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, -24, -12, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 16, 16, 1, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_COUNTER:: @ 81D005A + loadspritegfx 10135 + loadspritegfx 10143 + monbg 3 + setalpha 12, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 18, 6, 1, 4 + playsewithpan SE_W233, 192 + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 4 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -15, 18, 1, 0 + playsewithpan SE_W233B, 63 + delay 1 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 25, 1 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, -15, 18, 8, 1, 0 + delay 3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, -4, 1, 0 + playsewithpan SE_W233B, 63 + delay 1 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, 0, -4, 8, 1, 0 + delay 3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 15, 9, 1, 0 + playsewithpan SE_W233B, 63 + delay 1 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 3, 15, 9, 8, 1, 0 + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_VITAL_THROW:: @ 81D0129 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W233, 192 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 12, 4, 1, 2 + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + playsewithpan SE_W233B, 63 + delay 1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -24, 0, 0, 4 + waitforvisualfinish + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 + delay 11 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 10 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_ROCK_SMASH:: @ 81D01A4 + loadspritegfx 10058 + loadspritegfx 10135 + loadspritegfx 10143 + monbg 3 + setalpha 12, 8 + delay 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + createsprite gUnknown_83E6710, ANIM_ATTACKER, 2, 0, 0, 8, 1, 0 + playsewithpan SE_W233B, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 5, 1 + waitforvisualfinish + playsewithpan SE_W088, 63 + createsprite gUnknown_83E73CC, ANIM_ATTACKER, 2, 0, 0, 20, 24, 14, 2 + createsprite gUnknown_83E73CC, ANIM_ATTACKER, 2, 5, 0, -20, 24, 14, 1 + createsprite gUnknown_83E73CC, ANIM_ATTACKER, 2, 0, 5, 20, -24, 14, 2 + createsprite gUnknown_83E73CC, ANIM_ATTACKER, 2, -5, 0, -20, -24, 14, 2 + createsprite gUnknown_83E73CC, ANIM_ATTACKER, 2, 0, -5, 30, 18, 8, 2 + createsprite gUnknown_83E73CC, ANIM_ATTACKER, 2, 0, 0, 30, -18, 8, 2 + createsprite gUnknown_83E73CC, ANIM_ATTACKER, 2, 0, 0, -30, 18, 8, 2 + createsprite gUnknown_83E73CC, ANIM_ATTACKER, 2, 0, 0, -30, -18, 8, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 7, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_SUBMISSION:: @ 81D029C + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W104, 192 + waitplaysewithpan SE_W004, 63, 10 + waitplaysewithpan SE_W104, 192, 20 + waitplaysewithpan SE_W004, 63, 30 + waitplaysewithpan SE_W104, 192, 40 + waitplaysewithpan SE_W004, 63, 50 + waitplaysewithpan SE_W104, 192, 60 + waitplaysewithpan SE_W004, 63, 70 + waitplaysewithpan SE_W104, 192, 80 + waitplaysewithpan SE_W004, 63, 90 + createvisualtask AnimTask_TranslateMonElliptical, 2, 0, -18, 6, 6, 4 + createvisualtask AnimTask_TranslateMonElliptical, 2, 1, 18, 6, 6, 4 + call gUnknown_81D030B + call gUnknown_81D030B + call gUnknown_81D030B + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81D030B:: @ 81D030B + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -12, 1, 1 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -12, 8, 1, 1 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 12, 0, 1, 1 + delay 8 + return + +Move_SUNNY_DAY:: @ 81D033F + loadspritegfx 10157 + monbg 2 + setalpha 13, 3 + createvisualtask sub_80BA7F8, 10, 1921, 1, 0, 6, 32767 + waitforvisualfinish + panse_26 SE_W080, 192, 63, 1, 0 + call gUnknown_81D038B + call gUnknown_81D038B + call gUnknown_81D038B + call gUnknown_81D038B + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 1921, 1, 6, 0, 32767 + waitforvisualfinish + clearmonbg 2 + blendoff + end + +gUnknown_81D038B:: @ 81D038B + createsprite gUnknown_83E5D18, ANIM_ATTACKER, 40, + delay 6 + return + +Move_COTTON_SPORE:: @ 81D0395 + loadspritegfx 10158 + monbg 3 + monbgprio_28 1 + loopsewithpan SE_W077, 63, 18, 10 + call gUnknown_81D03B5 + call gUnknown_81D03B5 + call gUnknown_81D03B5 + waitforvisualfinish + clearmonbg 3 + end + +gUnknown_81D03B5:: @ 81D03B5 + createsprite gUnknown_83E2B64, ANIM_ATTACKER, 2, 0, -20, 85, 80, 0 + delay 12 + createsprite gUnknown_83E2B64, ANIM_ATTACKER, 2, 0, -10, 170, 80, 0 + delay 12 + createsprite gUnknown_83E2B64, ANIM_ATTACKER, 2, 0, -15, 0, 80, 0 + delay 12 + return + +Move_SPORE:: @ 81D03EF + loadspritegfx 10158 + monbg 3 + setalpha 12, 8 + createvisualtask sub_80A28C4, 2, + loopsewithpan SE_W077, 63, 16, 11 + call gUnknown_81D041A + call gUnknown_81D041A + call gUnknown_81D041A + waitforvisualfinish + delay 1 + clearmonbg 3 + blendoff + end + +gUnknown_81D041A:: @ 81D041A + createsprite gUnknown_83E2B64, ANIM_TARGET, 2, 0, -20, 85, 80, 1 + delay 12 + createsprite gUnknown_83E2B64, ANIM_TARGET, 2, 0, -10, 170, 80, 1 + delay 12 + createsprite gUnknown_83E2B64, ANIM_TARGET, 2, 0, -15, 0, 80, 1 + delay 12 + return + +Move_PETAL_DANCE:: @ 81D0454 + loadspritegfx 10159 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W080, 192 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 12, 6, 6, 3 + createsprite gUnknown_83E2B94, ANIM_ATTACKER, 2, 0, -24, 8, 140 + createsprite gUnknown_83E2BAC, ANIM_ATTACKER, 2, 16, -24, 8, 100 + createsprite gUnknown_83E2BAC, ANIM_ATTACKER, 2, -16, -24, 8, 100 + delay 15 + createsprite gUnknown_83E2B94, ANIM_ATTACKER, 2, 0, -24, 8, 140 + createsprite gUnknown_83E2BAC, ANIM_ATTACKER, 2, 32, -24, 8, 100 + createsprite gUnknown_83E2BAC, ANIM_ATTACKER, 2, -32, -24, 8, 100 + delay 15 + createsprite gUnknown_83E2B94, ANIM_ATTACKER, 2, 0, -24, 8, 140 + createsprite gUnknown_83E2BAC, ANIM_ATTACKER, 2, 24, -24, 8, 100 + createsprite gUnknown_83E2BAC, ANIM_ATTACKER, 2, -24, -24, 8, 100 + delay 30 + createsprite gUnknown_83E2BAC, ANIM_ATTACKER, 2, 16, -24, 0, 100 + createsprite gUnknown_83E2BAC, ANIM_ATTACKER, 2, -16, -24, 0, 100 + delay 30 + createsprite gUnknown_83E2BAC, ANIM_ATTACKER, 2, 20, -16, 14, 80 + createsprite gUnknown_83E2BAC, ANIM_ATTACKER, 2, -20, -14, 16, 80 + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, 0, 0, 5 + delay 3 + playsewithpan SE_W025B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon, 2, 1, 6, 0, 8, 1 + waitforvisualfinish + delay 8 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_RAZOR_LEAF:: @ 81D058C + loadspritegfx 10063 + loadspritegfx 10160 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + delay 1 + loopsewithpan SE_W077, 192, 10, 5 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -3, -2, 10 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -1, -1, 15 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -4, -4, 7 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, 3, -3, 11 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -1, -6, 8 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, 2, -1, 12 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -3, -4, 13 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, 4, -5, 7 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, 2, -6, 11 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -3, -5, 8 + delay 60 + playsewithpan SE_W013B, 192 + createsprite gUnknown_83E2C50, ANIM_TARGET, 3, 20, -10, 20, 0, 22, 20, 1 + createsprite gUnknown_83E2C50, ANIM_TARGET, 3, 20, -10, 20, 0, 22, -20, 1 + delay 20 + playsewithpan SE_W013, 63 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 8, 1 + createvisualtask AnimTask_ShakeMon2, 2, 3, 2, 0, 8, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_ANCIENT_POWER:: @ 81D0693 + loadspritegfx 10058 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + createsprite gUnknown_83E7B88, ANIM_ATTACKER, 2, 4, 1, 10, 1 + createsprite gUnknown_83E74C0, ANIM_ATTACKER, 2, 20, 32, -48, 50, 2 + createsprite gUnknown_83E74C0, ANIM_ATTACKER, 2, 0, 32, -38, 25, 5 + createsprite gUnknown_83E74C0, ANIM_ATTACKER, 2, 32, 32, -28, 40, 3 + createsprite gUnknown_83E74C0, ANIM_ATTACKER, 2, -20, 32, -48, 50, 2 + createsprite gUnknown_83E74C0, ANIM_ATTACKER, 2, 20, 32, -28, 60, 1 + createsprite gUnknown_83E74C0, ANIM_ATTACKER, 2, 0, 32, -28, 30, 4 + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 30, 1 + playsewithpan SE_W082, 192 + delay 10 + createsprite gUnknown_83E74C0, ANIM_ATTACKER, 2, 15, 32, -48, 25, 5 + createsprite gUnknown_83E74C0, ANIM_ATTACKER, 2, -10, 32, -42, 30, 4 + delay 10 + createsprite gUnknown_83E74C0, ANIM_ATTACKER, 2, 0, 32, -42, 25, 5 + createsprite gUnknown_83E74C0, ANIM_ATTACKER, 2, -25, 32, -48, 30, 4 + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 16, 0, 0, 4 + delay 3 + playsewithpan SE_W120, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 6, 1 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_OCTAZOOKA:: @ 81D07BB + loadspritegfx 10030 + loadspritegfx 10017 + playsewithpan SE_W025B, 192 + createsprite gUnknown_83E3674, ANIM_TARGET, 2, 20, 0, 0, 0, 20, 0 + waitforvisualfinish + playsewithpan SE_W120, 63 + createsprite gUnknown_83E36A8, ANIM_TARGET, 2, 8, 8, 1, 0 + delay 2 + createsprite gUnknown_83E36A8, ANIM_TARGET, 2, -8, -8, 1, 0 + delay 2 + createsprite gUnknown_83E36A8, ANIM_TARGET, 2, 8, -8, 1, 0 + delay 2 + createsprite gUnknown_83E36A8, ANIM_TARGET, 2, -8, 8, 1, 0 + waitforvisualfinish + end + +Move_MIST:: @ 81D0821 + loadspritegfx 10144 + monbg 2 + setalpha 12, 8 + loopsewithpan SE_W054, 192, 20, 15 + call gUnknown_81D086C + call gUnknown_81D086C + call gUnknown_81D086C + call gUnknown_81D086C + call gUnknown_81D086C + call gUnknown_81D086C + call gUnknown_81D086C + delay 32 + createvisualtask sub_80B9BDC, 2, 10, 8, 2, 0, 14, 32767 + waitforvisualfinish + clearmonbg 2 + blendoff + end + +gUnknown_81D086C:: @ 81D086C + createsprite gUnknown_83E64A4, ANIM_ATTACKER, 2, 0, -24, 48, 240, 0, 1 + delay 7 + return + +Move_HAZE:: @ 81D0882 + waitforvisualfinish + playsewithpan SE_W114, 0 + createvisualtask sub_80AFAE4, 5, + delay 30 + createvisualtask sub_80BA7F8, 10, 1920, 2, 0, 16, 0 + delay 90 + createvisualtask sub_80BA7F8, 10, 1920, 1, 16, 0, 0 + end + +Move_FIRE_PUNCH:: @ 81D08B5 + loadspritegfx 10143 + loadspritegfx 10029 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + createvisualtask sub_80BA7F8, 10, 4, 2, 0, 9, 31 + createsprite gUnknown_83E5BE0, ANIM_TARGET, 1, 0 + createsprite gUnknown_83E5BE0, ANIM_TARGET, 1, 64 + createsprite gUnknown_83E5BE0, ANIM_TARGET, 1, 128 + createsprite gUnknown_83E5BE0, ANIM_TARGET, 1, 196 + playsewithpan SE_W172, 63 + waitforvisualfinish + createsprite gUnknown_83E6710, ANIM_TARGET, 3, 0, 0, 8, 1, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 1 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 15, 1 + call gUnknown_81D0950 + delay 4 + playsewithpan SE_W007, 63 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 4, 0, 9, 0, 31 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81D0950:: @ 81D0950 + createsprite gUnknown_83E5BF8, ANIM_TARGET, 1, 0, 10, 192, 176, 40 + createsprite gUnknown_83E5BF8, ANIM_TARGET, 1, 0, 10, -192, 240, 40 + createsprite gUnknown_83E5BF8, ANIM_TARGET, 1, 0, 10, 192, -160, 40 + createsprite gUnknown_83E5BF8, ANIM_TARGET, 1, 0, 10, -192, -112, 40 + createsprite gUnknown_83E5BF8, ANIM_TARGET, 1, 0, 10, 160, 48, 40 + createsprite gUnknown_83E5BF8, ANIM_TARGET, 1, 0, 10, -224, -32, 40 + createsprite gUnknown_83E5BF8, ANIM_TARGET, 1, 0, 10, 112, -128, 40 + return + +Move_LEER:: @ 81D09C8 + loadspritegfx 10027 + monbg 0 + monbgprio_28 0 + setalpha 8, 8 + playsewithpan SE_W043, 192 + createsprite gUnknown_83FEF30, ANIM_ATTACKER, 2, 24, -12 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 10, 0, 1 + waitforvisualfinish + delay 10 + createvisualtask AnimTask_ShakeMon2, 2, 1, 1, 0, 9, 1 + createvisualtask AnimTask_ShakeMon2, 2, 3, 1, 0, 9, 1 + waitforvisualfinish + clearmonbg 0 + blendoff + delay 1 + waitforvisualfinish + end + +Move_DREAM_EATER:: @ 81D0A1F + loadspritegfx 10147 + loadspritegfx 10031 + monbg 3 + monbgprio_2A 1 + playsewithpan SE_W060, 192 + call gUnknown_81D59BB + setalpha 8, 8 + playsewithpan SE_W107, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 5, 0, 15, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -6, -6, 15, 1, 1 + waitforvisualfinish + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 2, 25, 1 + call gUnknown_81D0A89 + waitforvisualfinish + delay 15 + call gUnknown_81D56C9 + waitforvisualfinish + clearmonbg 3 + blendoff + delay 1 + call gUnknown_81D59C7 + end + +gUnknown_81D0A89:: @ 81D0A89 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 5, -18, -40, 35 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -10, 20, 20, 39 + delay 4 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 28, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -10, 20, 40, 39 + delay 4 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -5, 15, 16, 33 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -32, 26 + delay 4 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, -15, -16, 36 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + delay 4 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -5, 15, 16, 33 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, -15, -16, 36 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + delay 4 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -5, 15, 16, 33 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -40, 26 + delay 4 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -5, 15, 36, 33 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 10, -5, -8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, -10, 20, 20, 39 + delay 4 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 0, 5, 8, 26 + createsprite gUnknown_83E2AE8, ANIM_ATTACKER, 3, 5, -18, -20, 35 + delay 4 + return + +Move_POISON_GAS:: @ 81D0C22 + loadspritegfx 10172 + loadspritegfx 10150 + delay 0 + monbg 3 + monbgprio_29 + setalpha 12, 8 + delay 0 + playsewithpan SE_W054, 192 + createsprite gUnknown_83E6514, ANIM_TARGET, 0, 64, 0, 0, -32, -6, 4192, 1072, 0 + delay 4 + playsewithpan SE_W054, 192 + createsprite gUnknown_83E6514, ANIM_TARGET, 0, 64, 0, 0, -32, -6, 4192, 1072, 0 + delay 4 + playsewithpan SE_W054, 192 + createsprite gUnknown_83E6514, ANIM_TARGET, 0, 64, 0, 0, -32, -6, 4192, 1072, 0 + delay 4 + playsewithpan SE_W054, 192 + createsprite gUnknown_83E6514, ANIM_TARGET, 0, 64, 0, 0, -32, -6, 4192, 1072, 0 + delay 4 + playsewithpan SE_W054, 192 + createsprite gUnknown_83E6514, ANIM_TARGET, 0, 64, 0, 0, -32, -6, 4192, 1072, 0 + delay 4 + playsewithpan SE_W054, 192 + createsprite gUnknown_83E6514, ANIM_TARGET, 0, 64, 0, 0, -32, -6, 4192, 1072, 0 + delay 40 + loopsewithpan SE_W054, 63, 28, 6 + createvisualtask sub_80B9BDC, 2, 4, 6, 2, 0, 12, 26650 + waitforvisualfinish + blendoff + clearmonbg 3 + delay 0 + end + +Move_BIND:: @ 81D0D00 + createvisualtask AnimTask_SwayMon, 5, 0, 6, 3328, 4, 0 + goto gUnknown_81D0D16 + +gUnknown_81D0D16:: @ 81D0D16 + playsewithpan SE_W020, 63 + call gUnknown_81D0D26 + call gUnknown_81D0D26 + waitforvisualfinish + end + +gUnknown_81D0D26:: @ 81D0D26 + createvisualtask AnimTask_ScaleMonAndRestore, 5, 10, -5, 5, 1, 0 + delay 16 + return + +Move_WRAP:: @ 81D0D3A + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, 0, 6, 4, 2, 4 + goto gUnknown_81D0D16 + +Move_PSYBEAM:: @ 81D0D50 + loadspritegfx 10163 + playsewithpan SE_W060, 192 + call gUnknown_81D59BB + createsoundtask mas_80DCF38, 193, -64, 63, 3, 4, 0, 15 + call gUnknown_81D0DD4 + call gUnknown_81D0DD4 + createvisualtask AnimTask_SwayMon, 5, 0, 6, 2048, 4, 1 + createvisualtask sub_80B9BDC, 2, 4, 2, 2, 0, 12, 32351 + call gUnknown_81D0DD4 + call gUnknown_81D0DD4 + call gUnknown_81D0DD4 + call gUnknown_81D0DD4 + call gUnknown_81D0DD4 + call gUnknown_81D0DD4 + call gUnknown_81D0DD4 + call gUnknown_81D0DD4 + call gUnknown_81D0DD4 + waitforvisualfinish + delay 1 + call gUnknown_81D59C7 + end + +gUnknown_81D0DD4:: @ 81D0DD4 + createsprite gUnknown_83E6EEC, ANIM_TARGET, 2, 16, 0, 0, 0, 13, 0 + delay 4 + return + +Move_HYPNOSIS:: @ 81D0DEA + loadspritegfx 10163 + call gUnknown_81D59BB + call gUnknown_81D0E1D + call gUnknown_81D0E1D + call gUnknown_81D0E1D + createvisualtask sub_80B9BDC, 2, 4, 2, 2, 0, 12, 32351 + waitforvisualfinish + delay 1 + call gUnknown_81D59C7 + end + +gUnknown_81D0E1D:: @ 81D0E1D + playsewithpan SE_W048, 192 + createsprite gUnknown_83E6EEC, ANIM_TARGET, 2, 0, 8, 0, 8, 27, 0 + createsprite gUnknown_83E6EEC, ANIM_TARGET, 2, 16, -8, 0, -8, 27, 0 + delay 6 + return + +Move_PSYWAVE:: @ 81D0E4A + loadspritegfx 10165 + playsewithpan SE_W060, 192 + call gUnknown_81D59BB + createvisualtask sub_80AB100, 5, 100 + createsoundtask mas_80DCF38, 196, -64, 63, 2, 9, 0, 10 + call gUnknown_81D0EAD + call gUnknown_81D0EAD + createvisualtask sub_80B9BDC, 2, 4, 1, 4, 0, 12, 32351 + call gUnknown_81D0EAD + call gUnknown_81D0EAD + call gUnknown_81D0EAD + call gUnknown_81D0EAD + waitforvisualfinish + delay 1 + call gUnknown_81D59C7 + end + +gUnknown_81D0EAD:: @ 81D0EAD + createsprite gUnknown_83E59E8, ANIM_TARGET, 3, 10, 10, 0, 16 + delay 4 + createsprite gUnknown_83E59E8, ANIM_TARGET, 3, 10, 10, 0, 16 + delay 4 + return + +Move_ZAP_CANNON:: @ 81D0ED0 + loadspritegfx 10171 + loadspritegfx 10011 + playsewithpan SE_W086, 192 + createsprite gUnknown_83E5FDC, ANIM_TARGET, 3, 10, 0, 0, 0, 30, 0 + createsprite gUnknown_83E6008, ANIM_TARGET, 4, 10, 0, 16, 30, 0, 40, 0 + createsprite gUnknown_83E6008, ANIM_TARGET, 4, 10, 0, 16, 30, 64, 40, 1 + createsprite gUnknown_83E6008, ANIM_TARGET, 4, 10, 0, 16, 30, 128, 40, 0 + createsprite gUnknown_83E6008, ANIM_TARGET, 4, 10, 0, 16, 30, 192, 40, 2 + createsprite gUnknown_83E6008, ANIM_TARGET, 4, 10, 0, 8, 30, 32, 40, 0 + createsprite gUnknown_83E6008, ANIM_TARGET, 4, 10, 0, 8, 30, 96, 40, 1 + createsprite gUnknown_83E6008, ANIM_TARGET, 4, 10, 0, 8, 30, 160, 40, 0 + createsprite gUnknown_83E6008, ANIM_TARGET, 4, 10, 0, 8, 30, 224, 40, 2 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 5, 1 + delay 15 + waitplaysewithpan SE_W085B, 63, 19 + call gUnknown_81D58D4 + waitforvisualfinish + end + +Move_STEEL_WING:: @ 81D0FB5 + loadspritegfx 10009 + loadspritegfx 10135 + loopsewithpan SE_W231, 192, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + waitforvisualfinish + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + loopsewithpan SE_W017, 192, 20, 2 + createvisualtask AnimTask_TranslateMonElliptical, 2, 0, 12, 4, 1, 4 + createvisualtask sub_80B194C, 5, 1, 70 + createsprite gUnknown_83E6B1C, ANIM_ATTACKER, 2, -25, 0, 0, 0, 20 + createsprite gUnknown_83E6B1C, ANIM_ATTACKER, 2, 25, 0, 0, 0, 20 + delay 24 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, 0, 0, 9 + delay 17 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 16, 0, 1, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 1, 1 + playsewithpan SE_W013, 63 + waitforvisualfinish + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 11 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_IRON_TAIL:: @ 81D1064 + loadspritegfx 10135 + loopsewithpan SE_W231, 192, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 1, 0, 0 + waitforvisualfinish + monbg 1 + setalpha 12, 8 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + playsewithpan SE_W233B, 63 + waitforvisualfinish + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 0, 1 + clearmonbg 1 + blendoff + waitforvisualfinish + end + +Move_POISON_TAIL:: @ 81D10C2 + loadspritegfx 10135 + loadspritegfx 10150 + loopsewithpan SE_W231, 192, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 1, 1, 23768 + waitforvisualfinish + monbg 1 + setalpha 12, 8 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 4 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + playsewithpan SE_W233B, 63 + waitforvisualfinish + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 0, 1 + clearmonbg 1 + blendoff + call gUnknown_81D575B + waitforvisualfinish + end + +Move_METAL_CLAW:: @ 81D1128 + loadspritegfx 10039 + loopsewithpan SE_W231, 192, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, 0 + waitforvisualfinish + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 + delay 2 + playsewithpan SE_W013, 63 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, -10, -10, 0 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, -10, 10, 0 + createsprite gUnknown_83E7B88, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1 + delay 8 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 + delay 2 + playsewithpan SE_W013, 63 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, 10, -10, 1 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, 10, 10, 1 + createsprite gUnknown_83E7B88, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1 + waitforvisualfinish + end + +Move_NIGHT_SHADE:: @ 81D11BB + monbg 0 + monbgprio_28 0 + playsewithpan SE_W060, 192 + fadetobg 2 + waitbgfadein + delay 10 + playsewithpan SE_W043, 192 + createvisualtask sub_80B54E8, 5, 85 + delay 70 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 12, 1 + createvisualtask sub_80B9BDC, 2, 4, 0, 2, 0, 13, 0 + waitforvisualfinish + clearmonbg 0 + delay 1 + restorebg + waitbgfadein + end + +Move_EGG_BOMB:: @ 81D1203 + loadspritegfx 10198 + loadspritegfx 10175 + playsewithpan SE_W039, 192 + createsprite gUnknown_83E3D00, ANIM_TARGET, 2, 10, 0, 0, 0, 25, -32 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 16, 1 + createsprite gUnknown_83E3F94, ANIM_TARGET, 4, 6, 5, 1, 0 + playsewithpan SE_W120, 63 + delay 3 + createsprite gUnknown_83E3F94, ANIM_TARGET, 4, -16, -15, 1, 0 + playsewithpan SE_W120, 63 + delay 3 + createsprite gUnknown_83E3F94, ANIM_TARGET, 4, 16, -5, 1, 0 + playsewithpan SE_W120, 63 + delay 3 + createsprite gUnknown_83E3F94, ANIM_TARGET, 4, -12, 18, 1, 0 + playsewithpan SE_W120, 63 + delay 3 + createsprite gUnknown_83E3F94, ANIM_TARGET, 4, 0, 5, 1, 0 + playsewithpan SE_W120, 63 + delay 3 + waitforvisualfinish + end + +Move_SHADOW_BALL:: @ 81D129D + loadspritegfx 10176 + fadetobg 2 + waitbgfadein + delay 15 + createsoundtask mas_80DCF38, 161, -64, 63, 5, 5, 0, 5 + createsprite gShadowBallSpriteTemplate, ANIM_TARGET, 2, 16, 16, 8 + waitforvisualfinish + playsewithpan SE_W028, 63 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 8, 1 + waitforvisualfinish + restorebg + waitbgfadein + end + +Move_LICK:: @ 81D12E0 + loadspritegfx 10177 + delay 15 + playsewithpan SE_W122, 63 + createsprite gUnknown_83E763C, ANIM_TARGET, 2, 0, 0 + createvisualtask AnimTask_ShakeMon2, 2, 1, 1, 0, 16, 1 + waitforvisualfinish + end + +Move_FOCUS_ENERGY:: @ 81D1307 + loadspritegfx 10184 + playsewithpan SE_W082, 192 + call gUnknown_81CB267 + delay 8 + createvisualtask sub_80B9BDC, 2, 2, 2, 2, 0, 11, 32767 + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1 + call gUnknown_81CB267 + delay 8 + call gUnknown_81CB267 + waitforvisualfinish + end + +Move_BIDE:: @ 81D1347 + choosetwoturnanim gUnknown_81D1351, gUnknown_81D137D + end + +gUnknown_81D1351:: @ 81D1351 + loopsewithpan SE_W036, 192, 9, 2 + createvisualtask sub_80B9BDC, 2, 2, 2, 2, 0, 11, 31 + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1 + waitforvisualfinish + end + +gUnknown_81D137D:: @ 81D137D + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + loopsewithpan SE_W036, 192, 9, 2 + createvisualtask sub_80BA7F8, 10, 2, 2, 0, 11, 31 + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1 + waitforvisualfinish + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 24, 0, 0, 4 + waitforvisualfinish + createvisualtask AnimTask_ShakeMonInPlace, 2, 0, 2, 0, 12, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 16, 1 + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 18, -8, 1, 1 + delay 5 + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, -18, 8, 1, 1 + delay 5 + playsewithpan SE_W004, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, -8, -5, 1, 1 + waitforvisualfinish + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 7 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 2, 2, 11, 0, 31 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_STRING_SHOT:: @ 81D1446 + loadspritegfx 10179 + loadspritegfx 10180 + monbg 3 + delay 0 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 0, 9, 0 + waitforvisualfinish + loopsewithpan SE_W081, 192, 9, 6 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + call gUnknown_81D1504 + waitforvisualfinish + playsewithpan SE_W081B, 63 + createsprite gUnknown_83E72A8, ANIM_TARGET, 2, 0, 10 + delay 4 + createsprite gUnknown_83E72A8, ANIM_TARGET, 2, 0, -2 + delay 4 + createsprite gUnknown_83E72A8, ANIM_TARGET, 2, 0, 22 + waitforvisualfinish + clearmonbg 3 + delay 1 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, 0 + end + +gUnknown_81D1504:: @ 81D1504 + createsprite gWebThreadSpriteTemplate, ANIM_TARGET, 2, 20, 0, 512, 20, 1 + delay 1 + return + +Move_SPIDER_WEB:: @ 81D1518 + loadspritegfx 10181 + loadspritegfx 10180 + monbg 3 + delay 0 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 0, 9, 0 + waitforvisualfinish + monbgprio_28 1 + loopsewithpan SE_W081, 192, 9, 6 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + call gUnknown_81D15A5 + waitforvisualfinish + playsewithpan SE_W081B, 63 + createsprite gSpiderWebSpriteTemplate, ANIM_ATTACKER, 2, + waitforvisualfinish + clearmonbg 3 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, 0 + end + +gUnknown_81D15A5:: @ 81D15A5 + createsprite gWebThreadSpriteTemplate, ANIM_TARGET, 2, 20, 0, 512, 20, 0 + delay 1 + return + +Move_RAZOR_WIND:: @ 81D15B9 + choosetwoturnanim gUnknown_81D15C4, gUnknown_81D1614 + +gUnknown_81D15C2:: @ 81D15C2 + waitforvisualfinish + end + +gUnknown_81D15C4:: @ 81D15C4 + loadspritegfx 10009 + playsewithpan SE_W016, 192 + createsprite gUnknown_83E3DC8, ANIM_ATTACKER, 2, 32, 0, 16, 16, 0, 7, 40 + createsprite gUnknown_83E3DC8, ANIM_ATTACKER, 2, 32, 0, 16, 16, 85, 7, 40 + createsprite gUnknown_83E3DC8, ANIM_ATTACKER, 2, 32, 0, 16, 16, 170, 7, 40 + waitforvisualfinish + playsewithpan SE_W016B, 192 + goto gUnknown_81D15C2 + +gUnknown_81D1614:: @ 81D1614 + loadspritegfx 10154 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W013B, 192 + createsprite gUnknown_83E6B4C, ANIM_ATTACKER, 2, 14, 8, 0, 0, 22, 2, 1 + delay 2 + playsewithpan SE_W013B, 192 + createsprite gUnknown_83E6B4C, ANIM_ATTACKER, 2, 14, -8, 16, 14, 22, 1, 1 + delay 2 + playsewithpan SE_W013B, 192 + createsprite gUnknown_83E6B4C, ANIM_ATTACKER, 2, 14, 12, -16, -14, 22, 0, 1 + delay 17 + playsewithpan SE_W013, 63 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 10, 1 + createvisualtask AnimTask_ShakeMon2, 2, 3, 2, 0, 10, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + goto gUnknown_81D15C2 + +Move_DISABLE:: @ 81D169F + loadspritegfx 10071 + monbg 1 + monbgprio_28 1 + setalpha 8, 8 + playsewithpan SE_W197, 192 + createsprite gSpriteTemplate_83BF480, ANIM_ATTACKER, 13, 24, -16 + waitforvisualfinish + createvisualtask sub_80A7FB0, 5, + loopsewithpan SE_W020, 63, 15, 4 + waitforvisualfinish + delay 1 + clearmonbg 1 + blendoff + end + +Move_RECOVER:: @ 81D16CD + loadspritegfx 10147 + loadspritegfx 10031 + monbg 2 + setalpha 12, 8 + loopsewithpan SE_W025, 192, 13, 3 + createvisualtask sub_80B9BDC, 2, 2, 0, 6, 0, 11, 12287 + call gUnknown_81D170D + call gUnknown_81D170D + call gUnknown_81D170D + waitforvisualfinish + clearmonbg 2 + blendoff + delay 1 + call gUnknown_81D56C9 + waitforvisualfinish + end + +gUnknown_81D170D:: @ 81D170D + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 40, -10, 13 + delay 3 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, -35, -10, 13 + delay 3 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 15, -40, 13 + delay 3 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, -10, -32, 13 + delay 3 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 25, -20, 13 + delay 3 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, -40, -20, 13 + delay 3 + createsprite gUnknown_83E2A58, ANIM_ATTACKER, 2, 5, -40, 13 + delay 3 + return + +Move_MIMIC:: @ 81D1777 + loadspritegfx 10147 + monbg_22 3 + setalpha 11, 5 + panse_1B SE_W107, 63, 192, 253, 0 + createvisualtask sub_80A2F0C, 5, 128, 24 + delay 15 + createsprite gUnknown_83E2D54, ANIM_TARGET, 2, -12, 24 + delay 10 + setarg 7, 65535 + waitforvisualfinish + playsewithpan SE_W036, 192 + createvisualtask sub_80B9BDC, 2, 2, 0, 2, 0, 11, 32767 + waitforvisualfinish + clearmonbg_23 3 + blendoff + end + +Move_CONSTRICT:: @ 81D17C1 + loadspritegfx 10186 + loopsewithpan SE_W010, 63, 6, 4 + createsprite gUnknown_83E2D0C, ANIM_TARGET, 4, 0, 16, 0, 2 + delay 7 + createsprite gUnknown_83E2D0C, ANIM_TARGET, 3, 0, 0, 0, 2 + createsprite gUnknown_83E2D0C, ANIM_TARGET, 2, 0, 8, 1, 2 + delay 7 + createsprite gUnknown_83E2D0C, ANIM_TARGET, 3, 0, -8, 1, 2 + delay 8 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 6, 1 + delay 20 + playsewithpan SE_W020, 63 + setarg 7, 65535 + waitforvisualfinish + end + +Move_CURSE:: @ 81D1829 + choosetwoturnanim gUnknown_81D1832, gUnknown_81D18AF + +gUnknown_81D1832:: @ 81D1832 + loadspritegfx 10199 + loadspritegfx 10200 + monbg 2 + createvisualtask sub_80B63B4, 5, + waitforvisualfinish + delay 20 + createsprite gUnknown_83E7680, ANIM_ATTACKER, 2, + delay 60 + call gUnknown_81D1899 + delay 41 + call gUnknown_81D1899 + delay 41 + call gUnknown_81D1899 + waitforvisualfinish + clearmonbg 2 + delay 1 + monbg 3 + playsewithpan SE_W171, 63 + createsprite gUnknown_83E7698, ANIM_TARGET, 2, + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 14, 1 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 16, 0, 0 + waitforvisualfinish + clearmonbg 3 + end + +gUnknown_81D1899:: @ 81D1899 + createvisualtask AnimTask_ShakeMon2, 2, 0, 4, 0, 10, 0 + playsewithpan SE_W020, 192 + return + +gUnknown_81D18AF:: @ 81D18AF + createvisualtask AnimTask_SwayMon, 5, 0, 10, 1536, 3, 0 + waitforvisualfinish + delay 10 + call gUnknown_81D18CA + waitforvisualfinish + end + +gUnknown_81D18CA:: @ 81D18CA + playsewithpan SE_W082, 192 + createvisualtask sub_80BACEC, 5, + createvisualtask sub_80B9BDC, 5, 2, 4, 2, 0, 10, 31 + return + +Move_SOFT_BOILED:: @ 81D18E9 + loadspritegfx 10202 + loadspritegfx 10203 + loadspritegfx 10031 + monbg 2 + playsewithpan SE_W039, 192 + createvisualtask AnimTask_ShakeMon, 2, 0, 0, 2, 6, 1 + createsprite gUnknown_83E4028, ANIM_ATTACKER, 4, 0, 16, 0 + createsprite gUnknown_83E4028, ANIM_ATTACKER, 4, 0, 16, 1 + delay 120 + delay 7 + playsewithpan SE_W030, 192 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 10, 0, 31500 + createsprite gUnknown_83E4094, ANIM_ATTACKER, 3, 31, 16, 0, 1 + delay 8 + createsprite gUnknown_83E4094, ANIM_ATTACKER, 3, 31, 16, 0, 1 + delay 60 + setarg 7, 65535 + waitforvisualfinish + clearmonbg 2 + call gUnknown_81D5712 + end + +Move_HEAL_BELL:: @ 81D196B + loadspritegfx 10205 + loadspritegfx 10206 + loadspritegfx 10203 + createvisualtask sub_80BA7F8, 10, 10, 0, 0, 10, 32767 + waitforvisualfinish + createvisualtask sub_80A96B4, 5, + createsprite gUnknown_83E41B0, ANIM_ATTACKER, 2, 0, -24, 0, 1 + delay 12 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, 48, -18, 35, 0, 0 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, -48, 20, 30, 1, 1 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, -38, -29, 30, 2, 2 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, 36, 18, 30, 3, 3 + call gUnknown_81D1B2F + delay 33 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, 19, 26, 35, 4, 4 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, -34, -12, 30, 5, 5 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, 41, -20, 34, 6, 2 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, -15, 26, 32, 7, 0 + call gUnknown_81D1B2F + delay 33 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, -48, 18, 31, 0, 2 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, 48, -20, 30, 2, 5 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, 38, 29, 33, 4, 3 + createsprite gUnknown_83E41D0, ANIM_ATTACKER, 40, 0, -24, -36, -18, 30, 6, 1 + call gUnknown_81D1B2F + waitforvisualfinish + createvisualtask sub_80A9760, 5, + waitforvisualfinish + unloadspritegfx 10205 + unloadspritegfx 10206 + unloadspritegfx 10203 + loadspritegfx 10049 + playsewithpan SE_W234, 192 + createsprite gUnknown_83E340C, ANIM_ATTACKER, 16, -15, 0, 0, 0, 32, 60, 1 + delay 8 + createsprite gUnknown_83E340C, ANIM_ATTACKER, 16, 12, -5, 0, 0, 32, 60, 1 + waitforvisualfinish + unloadspritegfx 10049 + loadspritegfx 10203 + playsewithpan SE_REAPOKE, 192 + createvisualtask sub_80BA83C, 10, 4, 3, 10, 0, 31500 + createvisualtask sub_80BA7F8, 10, 10, 3, 10, 0, 32767 + createsprite gUnknown_83E40E0, ANIM_ATTACKER, 16, 0, 0, 0, 1 + end + +gUnknown_81D1B2F:: @ 81D1B2F + createvisualtask sub_80BA83C, 10, 4, 3, 8, 0, 31500 + createvisualtask sub_80BA7F8, 10, 10, 3, 2, 10, 32767 + createsprite gUnknown_83E4094, ANIM_ATTACKER, 40, 0, -24, 0, 1 + playsewithpan SE_W215, 192 + return + +Move_FAKE_OUT:: @ 81D1B65 + playsewithpan SE_W260, 0 + createvisualtask sub_80A98B0, 5, + waitforvisualfinish + playsewithpan SE_W166, 63 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 5, 1 + createvisualtask sub_80A9A20, 3, + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 16, 0, 32767 + end + +Move_SCARY_FACE:: @ 81D1BA0 + loadspritegfx 10218 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 27, 3, 0, 16, 0 + playsewithpan SE_W060, 192 + waitforvisualfinish + delay 10 + playsewithpan SE_W043, 192 + createvisualtask sub_80A9F10, 5, + delay 13 + createsprite gUnknown_83E42FC, ANIM_ATTACKER, 0, -16, -8 + createsprite gUnknown_83E42FC, ANIM_ATTACKER, 0, 16, -8 + waitforvisualfinish + createvisualtask sub_80ADAD8, 3, 20, 1, 0 + playsewithpan SE_W081B, 63 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 27, 3, 16, 0, 0 + waitforvisualfinish + end + +Move_SWEET_KISS:: @ 81D1C03 + loadspritegfx 10216 + loadspritegfx 10220 + createsprite gUnknown_83E4320, ANIM_TARGET, 2, 16, -48 + playsewithpan SE_W215, 63 + delay 23 + playsewithpan SE_W215, 63 + delay 23 + playsewithpan SE_W215, 63 + waitforvisualfinish + createsprite gUnknown_83E4230, ANIM_TARGET, 3, 160, -30 + playsewithpan SE_W213, 63 + createsprite gUnknown_83E4230, ANIM_TARGET, 3, -256, -42 + createsprite gUnknown_83E4230, ANIM_TARGET, 3, 128, -14 + createsprite gUnknown_83E4230, ANIM_TARGET, 3, 416, -38 + createsprite gUnknown_83E4230, ANIM_TARGET, 3, -128, -22 + createsprite gUnknown_83E4230, ANIM_TARGET, 3, -384, -31 + end + +Move_LOVELY_KISS:: @ 81D1C6C + loadspritegfx 10219 + loadspritegfx 10221 + createsprite gUnknown_83E4368, ANIM_TARGET, 2, 0, -24 + playsewithpan SE_W060B, 63 + waitforvisualfinish + playsewithpan SE_W213, 63 + createsprite gUnknown_83E4338, ANIM_TARGET, 3, -256, -42 + createsprite gUnknown_83E4338, ANIM_TARGET, 3, 128, -14 + createsprite gUnknown_83E4338, ANIM_TARGET, 3, 416, -38 + createsprite gUnknown_83E4338, ANIM_TARGET, 3, -128, -22 + end + +Move_FURY_SWIPES:: @ 81D1CB3 + loadspritegfx 10222 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 5, 5 + delay 4 + playsewithpan SE_W010, 63 + createsprite gUnknown_83E43B0, ANIM_TARGET, 2, 16, 0, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 5, 1 + delay 10 + createsprite gHorizontalLungeSpriteTemplate, ANIM_TARGET, 2, 5, 5 + delay 4 + playsewithpan SE_W010, 63 + createsprite gUnknown_83E43B0, ANIM_TARGET, 2, -16, 0, 0 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 7, 1 + end + +Move_INGRAIN:: @ 81D1D17 + loadspritegfx 10223 + loadspritegfx 10147 + createsprite gUnknown_83E2DC4, ANIM_ATTACKER, 2, 16, 26, -1, 2, 150 + playsewithpan SE_W010, 192 + delay 10 + createsprite gUnknown_83E2DC4, ANIM_ATTACKER, 2, -32, 20, 1, 1, 140 + playsewithpan SE_W010, 192 + delay 10 + createsprite gUnknown_83E2DC4, ANIM_ATTACKER, 2, 32, 22, 1, 0, 130 + playsewithpan SE_W010, 192 + delay 10 + createsprite gUnknown_83E2DC4, ANIM_ATTACKER, 2, -16, 25, -1, 3, 120 + playsewithpan SE_W010, 192 + delay 40 + createsprite gUnknown_83E2E04, ANIM_ATTACKER, 3, 32, 26, -1, 3, 30 + delay 5 + playsewithpan SE_W145C, 192 + delay 5 + createsprite gUnknown_83E2E04, ANIM_ATTACKER, 3, -48, 20, 1, 2, 30 + playsewithpan SE_W145C, 192 + delay 5 + playsewithpan SE_W145C, 192 + delay 5 + createsprite gUnknown_83E2E04, ANIM_ATTACKER, 3, 48, 26, -2, 3, 18 + playsewithpan SE_W145C, 192 + delay 10 + waitforvisualfinish + end + +Move_PRESENT:: @ 81D1DC8 + loadspritegfx 10224 + createvisualtask sub_80DEAF0, 2, + createsprite gUnknown_83E2E88, ANIM_TARGET, 2, 0, -5, 10, 2, -1 + playsewithpan SE_W039, 192 + delay 14 + playsewithpan SE_W145B, 192 + delay 14 + playsewithpan SE_W145B, 0 + delay 20 + playsewithpan SE_W145B, 63 + waitforvisualfinish + jumpargeq 7, 0, gUnknown_81D1E0B + jumpargeq 7, 1, gUnknown_81D1E76 + end + +gUnknown_81D1E0B:: @ 81D1E0B + loadspritegfx 10198 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_TARGET, 3, 0, 0, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_TARGET, 3, 24, -24, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_TARGET, 3, -16, 16, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_TARGET, 3, -24, -12, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_TARGET, 3, 16, 16, 1, 1 + end + +gUnknown_81D1E76:: @ 81D1E76 + loadspritegfx 10195 + loadspritegfx 10031 + playsewithpan SE_W234, 63 + createsprite gUnknown_83E2ED0, ANIM_TARGET, 4, -16, 32, -3, 1 + delay 3 + createsprite gUnknown_83E2ED0, ANIM_TARGET, 4, 16, 32, -3, -1 + delay 3 + createsprite gUnknown_83E2ED0, ANIM_TARGET, 4, 32, 32, -3, 1 + delay 3 + createsprite gUnknown_83E2ED0, ANIM_TARGET, 4, -32, 32, -3, 1 + delay 3 + createsprite gUnknown_83E2ED0, ANIM_TARGET, 4, 0, 32, -3, 1 + delay 3 + createsprite gUnknown_83E2ED0, ANIM_TARGET, 4, -8, 32, -3, 1 + delay 3 + createsprite gUnknown_83E2ED0, ANIM_TARGET, 4, -8, 32, -3, 1 + delay 3 + createsprite gUnknown_83E2ED0, ANIM_TARGET, 4, 24, 32, -3, 1 + delay 3 + createsprite gUnknown_83E2ED0, ANIM_TARGET, 4, -24, 32, -3, 1 + waitforvisualfinish + waitsound + call gUnknown_81D5712 + end + +Move_BATON_PASS:: @ 81D1F1F + loadspritegfx 10226 + playsewithpan SE_W226, 192 + createvisualtask sub_80B9BDC, 2, 31, 1, 2, 0, 11, 31455 + createsprite gUnknown_83FF150, ANIM_ATTACKER, 2, + end + +Move_PERISH_SONG:: @ 81D1F41 + loadspritegfx 10206 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 0, 0, 0 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 1, 1, 16 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 2, 1, 32 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 3, 2, 48 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 4, 2, 64 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 5, 0, 80 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 6, 0, 96 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 7, 1, 112 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 8, 2, 128 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 9, 0, 144 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 10, 2, 160 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 11, 0, 176 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 12, 1, 192 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 13, 3, 208 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 14, 3, 224 + createsprite gUnknown_83E4484, ANIM_ATTACKER, 4, 15, 0, 240 + createsprite gUnknown_83E449C, ANIM_ATTACKER, 4, 15, 0, 0 + delay 20 + panse_1B SE_W195, 192, 63, 2, 0 + delay 80 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 16, 0 + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 4, 0 + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 5, 0 + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 6, 0 + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 7, 0 + delay 100 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 16, 0, 0 + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 4, 1 + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 5, 1 + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 6, 1 + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 7, 1 + waitforvisualfinish + end + +Move_SLEEP_TALK:: @ 81D20AA + loadspritegfx 10228 + createvisualtask AnimTask_SwayMon, 5, 0, 4, 4096, 2, 0 + delay 20 + createsprite gUnknown_83FEF70, ANIM_TARGET, 2, 0, 20, 5, -1 + playsewithpan SE_W173, 192 + delay 6 + createsprite gUnknown_83FEF70, ANIM_TARGET, 2, 0, 20, 5, -1 + delay 6 + createsprite gUnknown_83FEF70, ANIM_TARGET, 2, 0, 20, 5, -1 + delay 20 + createsprite gUnknown_83FEF70, ANIM_TARGET, 2, 0, 20, 5, -5 + playsewithpan SE_W173, 192 + delay 6 + createsprite gUnknown_83FEF70, ANIM_TARGET, 2, 0, 20, 5, -5 + delay 6 + createsprite gUnknown_83FEF70, ANIM_TARGET, 2, 0, 20, 5, -5 + delay 20 + createsprite gUnknown_83FEF70, ANIM_TARGET, 2, 0, 20, 5, -3 + playsewithpan SE_W173, 192 + delay 6 + createsprite gUnknown_83FEF70, ANIM_TARGET, 2, 0, 20, 5, -3 + delay 6 + createsprite gUnknown_83FEF70, ANIM_TARGET, 2, 0, 20, 5, -3 + waitforvisualfinish + end + +Move_HYPER_FANG:: @ 81D2165 + loadspritegfx 10192 + playsewithpan SE_W044, 63 + delay 1 + delay 2 + createvisualtask AnimTask_IsContest, 2, + jumpargeq 7, 1, gUnknown_81D21C5 + createvisualtask sub_80DEAB4, 2, + jumpargeq 7, 0, gUnknown_81D21B7 + goto gUnknown_81D21BE + +gUnknown_81D2193:: @ 81D2193 + waitbgfadeout + createsprite gUnknown_83FEFBC, ANIM_TARGET, 2, + waitbgfadein + createvisualtask AnimTask_ShakeMon, 3, 1, 0, 10, 10, 1 + playsewithpan SE_W043, 63 + delay 20 + restorebg + waitbgfadein + waitforvisualfinish + end + +gUnknown_81D21B7:: @ 81D21B7 + fadetobg 4 + goto gUnknown_81D2193 + +gUnknown_81D21BE:: @ 81D21BE + fadetobg 5 + goto gUnknown_81D2193 + +gUnknown_81D21C5:: @ 81D21C5 + fadetobg 6 + goto gUnknown_81D2193 + +Move_TRI_ATTACK:: @ 81D21CC + loadspritegfx 10230 + createsprite gUnknown_83FF0D8, ANIM_TARGET, 2, 16, 0 + playsewithpan SE_W161, 192 + delay 20 + playsewithpan SE_W161, 192 + delay 20 + createsoundtask mas_80DCF38, 213, -64, 63, 5, 6, 0, 7 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 16, 0 + delay 16 + loadspritegfx 10033 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, -1, 0 + playsewithpan SE_W172B, 63 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, 0, 1 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, -1, -1 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, 2, 1 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, 1, -1 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, -1, 1 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, 1, -2 + delay 1 + createsprite gUnknown_83E5C88, ANIM_TARGET, 2, 0, 0, 30, 30, 3, 1 + delay 2 + createvisualtask sub_80ADAD8, 2, 20, 3, 1, 1 + waitforvisualfinish + loadspritegfx 10037 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + playsewithpan SE_W161B, 63 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 0, -48 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 0, -16 + delay 1 + createsprite gUnknown_83E5F38, ANIM_TARGET, 2, 0, 16 + delay 20 + createvisualtask sub_80ADAD8, 2, 20, 3, 1, 0 + delay 2 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + waitforvisualfinish + loadspritegfx 10141 + call gUnknown_81D540A + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 16, 0, 0 + waitforvisualfinish + end + +Move_WILL_O_WISP:: @ 81D2340 + loadspritegfx 10232 + loadspritegfx 10231 + monbg 3 + monbgprio_2A 1 + playsewithpan SE_W052, 192 + waitplaysewithpan SE_W052, 192, 10 + createvisualtask sub_80DD444, 2, -64, -64, 1, 0 + createsprite gUnknown_83E5EB4, ANIM_ATTACKER, 2, 0, 0, 0 + delay 3 + createsprite gUnknown_83E5EB4, ANIM_ATTACKER, 3, 0, 0, 1 + delay 3 + createsprite gUnknown_83E5EB4, ANIM_ATTACKER, 4, 0, 0, 2 + delay 3 + createsprite gUnknown_83E5EB4, ANIM_ATTACKER, 4, 0, 0, 3 + delay 40 + createvisualtask sub_80DD444, 2, -64, 63, 2, 0 + waitforvisualfinish + monbgprio_29 + playsewithpan SE_W172B, 63 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 13, 1 + createsprite gUnknown_83E5EE4, ANIM_ATTACKER, 2, 0 + createsprite gUnknown_83E5EE4, ANIM_ATTACKER, 2, 42 + createsprite gUnknown_83E5EE4, ANIM_ATTACKER, 2, 84 + createsprite gUnknown_83E5EE4, ANIM_ATTACKER, 2, 126 + createsprite gUnknown_83E5EE4, ANIM_ATTACKER, 2, 168 + createsprite gUnknown_83E5EE4, ANIM_ATTACKER, 2, 210 + waitforvisualfinish + clearmonbg 3 + end + +Move_ENCORE:: @ 81D23FE + loadspritegfx 10227 + loadspritegfx 10247 + createvisualtask sub_80DEDD8, 2, + createvisualtask sub_80BAB38, 2, 248, 3, 0, 10, 0 + waitforvisualfinish + createsprite gUnknown_83FF00C, ANIM_TARGET, 2, 0, -8 + createsprite gUnknown_83FF024, ANIM_ATTACKER, 2, -2, 0, 0, 0, 9 + createsprite gUnknown_83FF024, ANIM_ATTACKER, 2, 2, 0, 1, 0, 9 + createsprite gUnknown_83FF03C, ANIM_ATTACKER, 3, -2, 0, 0, 0, 9 + createsprite gUnknown_83FF03C, ANIM_ATTACKER, 3, 2, 0, 1, 0, 9 + delay 16 + createvisualtask sub_80DD410, 5, 216, 63 + createvisualtask AnimTask_SwayMon, 5, 1, 8, 1536, 5, 1 + waitforvisualfinish + createvisualtask sub_80BAB38, 2, 248, 3, 10, 0, 1 + waitforvisualfinish + createvisualtask sub_80DEE78, 2, + end + +Move_TRICK:: @ 81D24A5 + loadspritegfx 10224 + loadspritegfx 10207 + createsprite gUnknown_83E2F60, ANIM_ATTACKER, 2, -40, 80 + createsprite gUnknown_83E2F60, ANIM_ATTACKER, 2, -40, 208 + delay 16 + playsewithpan SE_W166, 0 + createvisualtask sub_80A9A20, 3, + createvisualtask sub_80A9AB0, 3, + delay 30 + playsewithpan SE_W104, 0 + delay 24 + playsewithpan SE_W104, 0 + delay 16 + playsewithpan SE_W104, 0 + delay 16 + playsewithpan SE_W104, 0 + delay 16 + playsewithpan SE_W104, 0 + delay 16 + playsewithpan SE_W104, 0 + delay 16 + playsewithpan SE_W213, 0 + createvisualtask AnimTask_ShakeMon, 3, 0, 5, 0, 7, 2 + createvisualtask AnimTask_ShakeMon, 3, 1, 5, 0, 7, 2 + waitforvisualfinish + end + +Move_WISH:: @ 81D2523 + loadspritegfx 10233 + loadspritegfx 10049 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 10, 0 + waitforvisualfinish + panse_27 SE_W115, 63, 192, 253, 0 + createsprite gUnknown_83FF168, ANIM_ATTACKER, 40, + waitforvisualfinish + delay 60 + loopsewithpan SE_W215, 192, 16, 3 + call gUnknown_81D569E + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 10, 0, 0 + waitforvisualfinish + end + +Move_STOCKPILE:: @ 81D256B + loadspritegfx 10235 + playsewithpan SE_W025, 192 + createvisualtask sub_80B9BDC, 2, 2, 8, 1, 0, 12, 32767 + createvisualtask sub_80DF848, 5, + call gUnknown_81D25A9 + call gUnknown_81D25A9 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 12, 0, 32767 + end + +gUnknown_81D25A9:: @ 81D25A9 + createsprite gUnknown_83E2ABC, ANIM_ATTACKER, 2, 55, 55, 13 + delay 1 + createsprite gUnknown_83E2ABC, ANIM_ATTACKER, 2, -55, -55, 13 + delay 1 + createsprite gUnknown_83E2ABC, ANIM_ATTACKER, 2, 0, 55, 13 + delay 1 + createsprite gUnknown_83E2ABC, ANIM_ATTACKER, 2, 0, -55, 13 + delay 1 + createsprite gUnknown_83E2ABC, ANIM_ATTACKER, 2, 55, -34, 13 + delay 1 + createsprite gUnknown_83E2ABC, ANIM_ATTACKER, 2, 55, 34, 13 + delay 1 + createsprite gUnknown_83E2ABC, ANIM_ATTACKER, 2, -55, -34, 13 + delay 1 + createsprite gUnknown_83E2ABC, ANIM_ATTACKER, 2, -55, 34, 13 + delay 1 + return + +Move_SPIT_UP:: @ 81D2622 + loadspritegfx 10237 + loadspritegfx 10135 + playsewithpan SE_W036, 192 + createvisualtask sub_80DF8A0, 5, + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 8, 2 + delay 45 + playsewithpan SE_W255, 192 + delay 3 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 0, 12 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 32, 12 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 64, 12 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 96, 12 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 128, 12 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 160, 12 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 192, 12 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 224, 12 + delay 5 + jumpifmoveturn 2, gUnknown_81D26EF + jumpifmoveturn 3, gUnknown_81D2718 + +gUnknown_81D26B2:: @ 81D26B2 + delay 5 + createvisualtask sub_8099BD4, 2, 0, 1, 8, 1, 0 + playsewithpan SE_W003, 63 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, -12, 10, 1, 1 + delay 5 + playsewithpan SE_W003, 63 + createsprite gUnknown_83E7C98, ANIM_TARGET, 3, 12, -10, 1, 1 + waitforvisualfinish + end + +gUnknown_81D26EF:: @ 81D26EF + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 16 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 80 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 144 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 208 + goto gUnknown_81D26B2 + +gUnknown_81D2718:: @ 81D2718 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 16 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 48 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 80 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 112 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 144 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 176 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 208 + createsprite gUnknown_83E42C8, ANIM_ATTACKER, 2, 240 + goto gUnknown_81D26B2 + +Move_SWALLOW:: @ 81D2765 + loadspritegfx 10236 + loadspritegfx 10031 + playsewithpan SE_W036, 192 + createvisualtask sub_80DF964, 5, + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 8, 2 + delay 38 + playsewithpan SE_W255, 192 + createvisualtask AnimTask_ShakeMon2, 2, 0, 2, 0, 12, 1 + call gUnknown_81D27B6 + jumpifmoveturn 2, gUnknown_81D27F8 + jumpifmoveturn 3, gUnknown_81D2802 + +gUnknown_81D27AF:: @ 81D27AF + waitforvisualfinish + call gUnknown_81D56C9 + end + +gUnknown_81D27B6:: @ 81D27B6 + createsprite gUnknown_83FF1F8, ANIM_ATTACKER, 2, 0, -8 + delay 1 + createsprite gUnknown_83FF1F8, ANIM_ATTACKER, 2, -24, -8 + delay 1 + createsprite gUnknown_83FF1F8, ANIM_ATTACKER, 2, 16, -8 + delay 1 + createsprite gUnknown_83FF1F8, ANIM_ATTACKER, 2, -16, -8 + delay 1 + createsprite gUnknown_83FF1F8, ANIM_ATTACKER, 2, 24, -8 + delay 1 + return + +gUnknown_81D27F8:: @ 81D27F8 + call gUnknown_81D27B6 + goto gUnknown_81D27AF + +gUnknown_81D2802:: @ 81D2802 + call gUnknown_81D27B6 + call gUnknown_81D27B6 + goto gUnknown_81D27AF + +Move_TRANSFORM:: @ 81D2811 + monbg 0 + playsewithpan SE_W100, 192 + waitplaysewithpan SE_W107, 192, 48 + createvisualtask sub_80DF9BC, 2, 0 + waitforvisualfinish + clearmonbg 0 + end + +Move_MORNING_SUN:: @ 81D2829 + loadspritegfx 10241 + loadspritegfx 10031 + createvisualtask sub_80DFC50, 5, + delay 8 + createvisualtask sub_80BA7F8, 10, 1921, 8, 0, 12, 32767 + delay 14 + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + call gUnknown_81D28AF + createvisualtask sub_80BA7F8, 10, 1921, 3, 12, 0, 32767 + waitforvisualfinish + waitsound + call gUnknown_81D56C9 + end + +gUnknown_81D28AF:: @ 81D28AF + createsprite gUnknown_83FF26C, ANIM_ATTACKER, 2, 30, 640 + delay 5 + return + +Move_SWEET_SCENT:: @ 81D28BD + loadspritegfx 10238 + playsewithpan SE_W230, 192 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 100, 0, 100 + delay 25 + setpan 0 + call gUnknown_81D2901 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 55, 0 + setpan 63 + createvisualtask sub_80B9BDC, 2, 20, 1, 5, 5, 13, 22207 + call gUnknown_81D2901 + waitforvisualfinish + end + +gUnknown_81D2901:: @ 81D2901 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 70, 1, 64 + delay 2 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 60, 0, 64 + delay 5 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 80, 1, 64 + delay 2 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 58, 0, 120 + delay 2 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 100, 0, 120 + delay 2 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 90, 0, 64 + delay 2 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 48, 0, 64 + delay 2 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 95, 1, 80 + delay 2 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 100, 0, 120 + delay 2 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 75, 1, 64 + delay 2 + createsprite gUnknown_83FF324, ANIM_ATTACKER, 2, 85, 0, 120 + delay 2 + return + +Move_HYPER_BEAM:: @ 81D29A7 + loadspritegfx 10147 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 0, 16, 0 + waitforvisualfinish + delay 10 + playsewithpan SE_W063, 192 + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 4, 1 + waitforvisualfinish + delay 30 + createsoundtask mas_80DCF38, 240, -64, 63, 1, 15, 0, 5 + createvisualtask AnimTask_ShakeMon, 2, 0, 0, 4, 50, 1 + createvisualtask sub_80B9F6C, 2, 10147, 1, 12, 31, 16, 0, 0 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 50, 1 + createvisualtask sub_80BA7F8, 10, 4, 2, 0, 11, 26425 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + call gUnknown_81D2AD8 + createvisualtask sub_80BA7F8, 10, 4, 2, 11, 0, 26425 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 4, 16, 0, 0 + end + +gUnknown_81D2AD8:: @ 81D2AD8 + createsprite gUnknown_83E2B00, ANIM_TARGET, 2, + createsprite gUnknown_83E2B00, ANIM_TARGET, 2, + delay 1 + return + +Move_FLATTER:: @ 81D2AE9 + loadspritegfx 10227 + loadspritegfx 10240 + createvisualtask sub_80DD410, 5, 216, 63 + createvisualtask sub_80DEDD8, 2, + createvisualtask sub_80BAB38, 2, 248, 3, 0, 10, 0 + waitforvisualfinish + createsprite gUnknown_83FF3A0, ANIM_TARGET, 2, 0, -8, 80 + delay 0 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 5, 2, 1 + delay 10 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 5, 2, 1 + delay 0 + createvisualtask sub_80DD3DC, 5, 222, -64 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + call gUnknown_81D2BD2 + delay 5 + createvisualtask sub_80DD3DC, 5, 222, 63 + waitforvisualfinish + createvisualtask sub_80BAB38, 2, 248, 3, 10, 0, 1 + waitforvisualfinish + createvisualtask sub_80DEE78, 2, + end + +gUnknown_81D2BD2:: @ 81D2BD2 + createsprite gUnknown_83FF388, ANIM_ATTACKER, 40, 0 + createsprite gUnknown_83FF388, ANIM_ATTACKER, 40, 1 + return + +Move_ROLE_PLAY:: @ 81D2BE5 + monbg 2 + createvisualtask sub_80BA7F8, 10, 4, 2, 0, 16, 32767 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 0, 10, 0 + waitforvisualfinish + playsewithpan SE_W161, 192 + waitplaysewithpan SE_W197, 192, 30 + createvisualtask sub_80E0FB8, 2, + waitforvisualfinish + clearmonbg 2 + createvisualtask sub_80BA7F8, 10, 4, 2, 16, 0, 32767 + delay 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 2, 10, 0, 0 + end + +Move_REFRESH:: @ 81D2C42 + loadspritegfx 10203 + loadspritegfx 10049 + playsewithpan SE_W287, 192 + createvisualtask sub_80E2084, 2, 0 + waitforvisualfinish + playsewithpan SE_W234, 192 + call gUnknown_81D569E + waitforvisualfinish + playsewithpan SE_REAPOKE, 192 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 10, 0, 31500 + createsprite gUnknown_83E4094, ANIM_ATTACKER, 3, 0, 0, 0, 0 + end + +Move_BLAZE_KICK:: @ 81D2C85 + loadspritegfx 10135 + loadspritegfx 10143 + loadspritegfx 10029 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W172, 63 + createsprite gUnknown_83E678C, ANIM_TARGET, 3, 0, 0, 1, 30 + createvisualtask sub_80BA7F8, 10, 4, 2, 0, 7, 32767 + delay 30 + playsewithpan SE_W007, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 14, 1 + createvisualtask sub_80BA7F8, 10, 4, 2, 0, 0, 32767 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 0, 8, 0, 0 + call gUnknown_81D0950 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_HYPER_VOICE:: @ 81D2D0D + loadspritegfx 10203 + call gUnknown_81D2D1F + waitforvisualfinish + delay 8 + call gUnknown_81D2D1F + waitforvisualfinish + end + +gUnknown_81D2D1F:: @ 81D2D1F + createvisualtask sub_80DD334, 5, + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 8, 0, 1023 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 5, 0, 0 + createsprite gUnknown_83E40F8, ANIM_ATTACKER, 0, 45, 0, 0, 0, 0, 0, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 1, 0, 6, 1 + createvisualtask AnimTask_ShakeMon2, 2, 3, 1, 0, 6, 1 + createvisualtask sub_80BA47C, 2, 1, 0, 6, 1 + createvisualtask sub_80DD2F4, 5, + return + +Move_SAND_TOMB:: @ 81D2D96 + loadspritegfx 10074 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, 563 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 2, 43, 1 + playsewithpan SE_W328, 63 + call gUnknown_81D2DE3 + call gUnknown_81D2DE3 + call gUnknown_81D2DE3 + delay 22 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, 563 + waitforvisualfinish + end + +gUnknown_81D2DE3:: @ 81D2DE3 + createsprite gUnknown_83E73E4, ANIM_TARGET, 2, 0, 32, 528, 30, 10, 50, 1 + delay 2 + createsprite gUnknown_83E73E4, ANIM_TARGET, 2, 0, 36, 480, 20, 13, -46, 1 + delay 2 + createsprite gUnknown_83E73E4, ANIM_TARGET, 2, 0, 37, 576, 20, 5, 42, 1 + delay 2 + createsprite gUnknown_83E73E4, ANIM_TARGET, 2, 0, 35, 400, 25, 8, -42, 1 + delay 2 + createsprite gUnknown_83E73E4, ANIM_TARGET, 2, 0, 32, 512, 25, 13, 46, 1 + delay 2 + createsprite gUnknown_83E73E4, ANIM_TARGET, 2, 0, 37, 464, 30, 12, -50, 1 + delay 2 + return + +Move_SHEER_COLD:: @ 81D2E6E + fadetobg 15 + waitbgfadeout + playsewithpan SE_W196, 0 + waitbgfadein + loadspritegfx 10010 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + createvisualtask sub_80783FC, 2, + waitplaysewithpan SE_W258, 63, 17 + waitforvisualfinish + clearmonbg 3 + blendoff + restorebg + waitbgfadein + end + +Move_ARM_THRUST:: @ 81D2E93 + loadspritegfx 10143 + loadspritegfx 10135 + monbgprio_28 1 + setalpha 12, 8 + createvisualtask sub_8099980, 5, 8, 5, 0, 0 + delay 6 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 3 + delay 4 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E68AC, ANIM_TARGET, 2, 10, -8, 14, 3 + waitforvisualfinish + createvisualtask sub_8099980, 5, 8, 5, 0, 1 + playsewithpan SE_W003, 63 + choosetwoturnanim gUnknown_81D2F00, gUnknown_81D2F14 + +gUnknown_81D2EEC:: @ 81D2EEC + createvisualtask AnimTask_ShakeMon, 5, 1, 4, 0, 6, 1 + waitforvisualfinish + blendoff + end + +gUnknown_81D2F00:: @ 81D2F00 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 8, 0, 1, 2 + goto gUnknown_81D2EEC + +gUnknown_81D2F14:: @ 81D2F14 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 0, 1, 2 + goto gUnknown_81D2EEC + +Move_MUDDY_WATER:: @ 81D2F28 + panse_1B SE_W250, 192, 63, 2, 0 + createvisualtask sub_80AB38C, 2, 1 + waitforvisualfinish + end + +Move_BULLET_SEED:: @ 81D2F3A + loadspritegfx 10006 + createsprite gUnknown_83E3D94, ANIM_TARGET, 2, 20, 0 + delay 5 + createsprite gUnknown_83E3D94, ANIM_TARGET, 2, 20, 0 + delay 5 + createsprite gUnknown_83E3D94, ANIM_TARGET, 2, 20, 0 + delay 5 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 30, 1 + createsprite gUnknown_83E3D94, ANIM_TARGET, 2, 20, 0 + delay 5 + createsprite gUnknown_83E3D94, ANIM_TARGET, 2, 20, 0 + delay 5 + createsprite gUnknown_83E3D94, ANIM_TARGET, 2, 20, 0 + delay 5 + createsprite gUnknown_83E3D94, ANIM_TARGET, 2, 20, 0 + delay 5 + createsprite gUnknown_83E3D94, ANIM_TARGET, 2, 20, 0 + delay 5 + createsprite gUnknown_83E3D94, ANIM_TARGET, 2, 20, 0 + delay 5 + createsprite gUnknown_83E3D94, ANIM_TARGET, 2, 20, 0 + waitforvisualfinish + end + +Move_DRAGON_CLAW:: @ 81D2FD0 + loadspritegfx 10029 + loadspritegfx 10039 + playsewithpan SE_W221B, 192 + createvisualtask sub_80BA7F8, 10, 2, 4, 0, 8, 639 + createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 15, 1 + call gUnknown_81D31AD + call gUnknown_81D31AD + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 28, 528, 30, 13, 50, 0 + delay 2 + createvisualtask sub_80DD3DC, 5, 129, 63 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, -10, -10, 0 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, -10, 10, 0 + createsprite gUnknown_83E7B88, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 32, 480, 20, 16, -46, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 33, 576, 20, 8, 42, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 31, 400, 25, 11, -42, 0 + delay 2 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 28, 512, 25, 16, 46, 0 + delay 2 + createvisualtask sub_80DD3DC, 5, 129, 63 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, 10, -10, 1 + createsprite gUnknown_83E79E8, ANIM_TARGET, 2, 10, 10, 1 + createsprite gUnknown_83E7B88, ANIM_ATTACKER, 2, -4, 1, 10, 3, 1 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 33, 464, 30, 15, -50, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 28, 528, 30, 13, 50, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 32, 480, 20, 16, -46, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 33, 576, 20, 8, 42, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 31, 400, 25, 11, -42, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 28, 512, 25, 16, 46, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 33, 464, 30, 15, -50, 0 + createvisualtask sub_80BA7F8, 10, 2, 4, 8, 0, 639 + waitforvisualfinish + end + +gUnknown_81D31AD:: @ 81D31AD + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 28, 528, 30, 13, 50, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 32, 480, 20, 16, -46, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 33, 576, 20, 8, 42, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 31, 400, 25, 11, -42, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 28, 512, 25, 16, 46, 0 + delay 2 + createsprite gUnknown_83E7438, ANIM_ATTACKER, 2, 0, 33, 464, 30, 15, -50, 0 + delay 2 + return + end + +Move_MUD_SHOT:: @ 81D3239 + loadspritegfx 10259 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 46, 1 + delay 6 + createvisualtask sub_80AB100, 5, 100 + panse_1B SE_W250, 192, 63, 1, 0 + call gUnknown_81D32B3 + call gUnknown_81D32B3 + call gUnknown_81D32B3 + createvisualtask AnimTask_ShakeMon, 5, 1, 3, 0, 43, 1 + call gUnknown_81D32B3 + call gUnknown_81D32B3 + call gUnknown_81D32B3 + call gUnknown_81D32B3 + call gUnknown_81D32B3 + call gUnknown_81D32B3 + call gUnknown_81D32B3 + call gUnknown_81D32B3 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81D32B3:: @ 81D32B3 + createsprite gUnknown_83E5974, ANIM_ATTACKER, 3, 10, 10, 0, 16 + delay 2 + createsprite gUnknown_83E5974, ANIM_ATTACKER, 3, 10, 10, 0, 16 + delay 2 + return + +Move_METEOR_MASH:: @ 81D32D6 + loadspritegfx 10233 + loadspritegfx 10135 + loadspritegfx 10143 + panse_1B SE_W112, 192, 63, 3, 0 + fadetobg 16 + waitbgfadein + waitforvisualfinish + createsprite gUnknown_83FF6BC, ANIM_TARGET, 3, -48, -64, 72, 32, 30 + delay 10 + createsprite gUnknown_83FF6BC, ANIM_TARGET, 3, -112, -64, 8, 32, 30 + delay 40 + createsprite gUnknown_83E678C, ANIM_TARGET, 3, 0, 0, 0, 30 + createsprite gUnknown_83FF6BC, ANIM_TARGET, 3, -80, -64, 40, 32, 30 + delay 20 + playsewithpan SE_W233B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 5, 0, 20, 1 + waitforvisualfinish + delay 10 + restorebg + waitbgfadein + waitforvisualfinish + end + +Move_REVENGE:: @ 81D335D + loadspritegfx 10245 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W036, 192 + createsprite gUnknown_83E6900, ANIM_ATTACKER, 2, 10, -10 + waitforvisualfinish + createvisualtask sub_80B9BDC, 2, 2, 0, 4, 2, 8, 31 + waitforvisualfinish + unloadspritegfx 10245 + loadspritegfx 10246 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 4 + delay 4 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E6948, ANIM_TARGET, 2, 10, -10 + waitforvisualfinish + unloadspritegfx 10246 + loadspritegfx 10135 + createvisualtask AnimTask_ShakeMon2, 2, 1, 3, 0, 10, 1 + createsprite gUnknown_83E7CB0, ANIM_TARGET, 3, -10, -8, 1, 1, 8 + playsewithpan SE_W233B, 63 + delay 8 + createsprite gUnknown_83E7CB0, ANIM_TARGET, 3, 10, 8, 1, 1, 8 + playsewithpan SE_W025B, 63 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_POISON_FANG:: @ 81D33F4 + loadspritegfx 10192 + loadspritegfx 10150 + playsewithpan SE_W044, 63 + createsprite gUnknown_83FEFBC, ANIM_TARGET, 2, + delay 10 + createvisualtask AnimTask_ShakeMon, 3, 1, 3, 0, 10, 1 + waitforvisualfinish + createvisualtask sub_80B9BDC, 2, 4, 0, 4, 0, 12, 26650 + call gUnknown_81D575B + waitforvisualfinish + end + +Move_SUBSTITUTE:: @ 81D3433 + playsewithpan SE_W213, 192 + createvisualtask sub_80E3294, 2, + end + +Move_FRENZY_PLANT:: @ 81D343F + loadspritegfx 10223 + loadspritegfx 10135 + monbg 1 + monbgprio_28 1 + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 2, 0, 5, 0 + waitforvisualfinish + createsprite gUnknown_83E2DDC, ANIM_ATTACKER, 2, 10, 8, 2, 0, 0, 100 + playsewithpan SE_W010, 192 + delay 5 + createsprite gUnknown_83E2DDC, ANIM_ATTACKER, 2, 20, -8, -2, 0, 1, 95 + playsewithpan SE_W010, 213 + delay 5 + createsprite gUnknown_83E2DDC, ANIM_ATTACKER, 2, 30, 8, -4, 0, 0, 90 + playsewithpan SE_W010, 234 + delay 5 + createsprite gUnknown_83E2DDC, ANIM_ATTACKER, 2, 40, -8, 4, 0, 1, 85 + playsewithpan SE_W010, 0 + delay 5 + createsprite gUnknown_83E2DDC, ANIM_ATTACKER, 2, 50, 8, 0, 0, 0, 85 + playsewithpan SE_W010, 21 + delay 5 + createsprite gUnknown_83E2DDC, ANIM_ATTACKER, 2, 60, -8, -2, 0, 1, 85 + playsewithpan SE_W010, 42 + delay 5 + createsprite gUnknown_83E2DDC, ANIM_ATTACKER, 2, 75, 8, 0, 0, 0, 85 + playsewithpan SE_W010, 63 + delay 5 + createsprite gUnknown_83E2DDC, ANIM_ATTACKER, 2, 85, 16, 6, 0, 3, 80 + playsewithpan SE_W010, 63 + delay 5 + createsprite gUnknown_83E2DDC, ANIM_ATTACKER, 2, 85, -16, -6, 0, 2, 75 + playsewithpan SE_W010, 63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -10, 1, 3 + playsewithpan SE_W003, 63 + createvisualtask AnimTask_ShakeMon, 3, 1, 8, 0, 20, 1 + delay 3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 8, 1, 3 + playsewithpan SE_W003, 63 + delay 3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, -3, 1, 2 + playsewithpan SE_W003, 63 + delay 3 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -3, 1, 1, 2 + playsewithpan SE_W003, 63 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, 1, 1, 1 + playsewithpan SE_W003, 63 + delay 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 10, 1, 1 + playsewithpan SE_W003, 63 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 2, 5, 0, 0 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +Move_METAL_SOUND:: @ 81D35E3 + loadspritegfx 10260 + monbg 3 + monbgprio_2A 1 + createvisualtask AnimTask_ShakeMon2, 2, 0, 2, 0, 8, 1 + call gUnknown_81D3616 + call gUnknown_81D3616 + call gUnknown_81D3616 + call gUnknown_81D3616 + waitforvisualfinish + clearmonbg 3 + delay 0 + waitforvisualfinish + end + +gUnknown_81D3616:: @ 81D3616 + panse_1B SE_W103, 192, 63, 2, 0 + createsprite gUnknown_83E3CD0, ANIM_TARGET, 2, 16, 0, 0, 0, 30, 0 + delay 2 + return + +Move_FOCUS_PUNCH:: @ 81D3633 + goto gUnknown_81D363A + +gUnknown_81D3638:: @ 81D3638 + waitforvisualfinish + end + +gUnknown_81D363A:: @ 81D363A + loadspritegfx 10135 + loadspritegfx 10143 + delay 1 + createvisualtask AnimTask_IsContest, 2, + jumpargeq 7, 1, gUnknown_81D36F3 + createvisualtask sub_80DEAB4, 2, + jumpargeq 7, 0, gUnknown_81D36E5 + jumpargeq 7, 1, gUnknown_81D36EC + +gUnknown_81D3668:: @ 81D3668 + waitbgfadein + monbg 3 + setalpha 12, 8 + playsewithpan SE_W207, 63 + createsprite gUnknown_83E697C, ANIM_TARGET, 2, + delay 10 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, 1, 0 + createvisualtask AnimTask_ShakeMon, 5, 1, 8, 0, 24, 1 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 2, 1, 0 + playsewithpan SE_W233B, 63 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, -6, 1, 0 + playsewithpan SE_W233B, 63 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 8, 1, 0 + playsewithpan SE_W025B, 63 + waitforvisualfinish + restorebg + waitbgfadein + clearmonbg 3 + blendoff + goto gUnknown_81D3638 + +gUnknown_81D36E5:: @ 81D36E5 + fadetobg 4 + goto gUnknown_81D3668 + +gUnknown_81D36EC:: @ 81D36EC + fadetobg 5 + goto gUnknown_81D3668 + +gUnknown_81D36F3:: @ 81D36F3 + fadetobg 6 + goto gUnknown_81D3668 + +Move_RETURN:: @ 81D36FA + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + createvisualtask sub_80E38D8, 2, + delay 2 + jumpargeq 7, 0, gUnknown_81D3730 + jumpargeq 7, 1, gUnknown_81D3782 + jumpargeq 7, 2, gUnknown_81D37E2 + jumpargeq 7, 3, gUnknown_81D38FD + +gUnknown_81D372B:: @ 81D372B + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81D3730:: @ 81D3730 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 16, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + waitforvisualfinish + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 16, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, 1, 2 + createvisualtask sub_80DD3DC, 5, 132, 63 + goto gUnknown_81D372B + +gUnknown_81D3782:: @ 81D3782 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + waitforvisualfinish + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + waitforvisualfinish + delay 11 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 5, 4 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 2 + createvisualtask sub_80DD3DC, 5, 134, 63 + goto gUnknown_81D372B + +gUnknown_81D37E2:: @ 81D37E2 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + waitforvisualfinish + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + waitforvisualfinish + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + waitforvisualfinish + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 6, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, 1, 2 + createvisualtask sub_80DD3DC, 5, 116, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 1, 2 + createvisualtask sub_80DD3DC, 5, 116, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 3, -5, 1, 2 + createvisualtask sub_80DD3DC, 5, 116, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -5, 3, 1, 2 + createvisualtask sub_80DD3DC, 5, 116, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + goto gUnknown_81D372B + +gUnknown_81D38FD:: @ 81D38FD + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 6, 0 + waitforvisualfinish + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 16, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 3, -5, 1, 2 + createvisualtask sub_80DD3DC, 5, 116, 63 + waitforvisualfinish + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 12, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, 1, 2 + createvisualtask sub_80DD3DC, 5, 116, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + waitforvisualfinish + delay 4 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, 1, 2 + createvisualtask sub_80DD3DC, 5, 116, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + waitforvisualfinish + delay 2 + createvisualtask sub_80BAB98, 2, 0, 4, 5, 1 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 0 + createvisualtask sub_80DD410, 5, 160, -64 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, 1, 2 + createvisualtask sub_80DD3DC, 5, 116, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + createvisualtask sub_80BAB98, 2, 0, 4, 5, 1 + waitforvisualfinish + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 4, 2, 0 + createvisualtask sub_80DD410, 5, 160, -64 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, 1, 2 + createvisualtask sub_80DD3DC, 5, 116, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + createvisualtask sub_80BAB98, 2, 0, 4, 5, 1 + waitforvisualfinish + call gUnknown_81D3B35 + call gUnknown_81D3B35 + call gUnknown_81D3B35 + call gUnknown_81D3B35 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -10, -8, 1, 0 + createvisualtask sub_80DD3DC, 5, 134, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 8, 0, 24, 1 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 1, 0 + createvisualtask sub_80DD3DC, 5, 134, 63 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 3, -5, 1, 0 + createvisualtask sub_80DD3DC, 5, 134, 63 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, -5, 3, 1, 0 + createvisualtask sub_80DD3DC, 5, 134, 63 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6, 0, 0 + goto gUnknown_81D372B + +gUnknown_81D3B35:: @ 81D3B35 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 4, 3, 0 + createvisualtask sub_80DD410, 5, 160, -64 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask sub_80DD3DC, 5, 116, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + createvisualtask sub_80BAB98, 2, 0, 4, 5, 1 + waitforvisualfinish + return + +Move_COSMIC_POWER:: @ 81D3B89 + loadspritegfx 10049 + createvisualtask sub_80DD410, 5, 236, 0 + playsewithpan SE_W322, 0 + createvisualtask sub_80BB7DC, 2, 0, 0, 15, 0 + waitforvisualfinish + fadetobg 16 + waitbgfadeout + createvisualtask sub_80BB82C, 2, 0, 128, 0, -1 + waitbgfadein + delay 70 + createvisualtask sub_80DD3DC, 5, 221, -64 + createsprite gUnknown_83E33F4, ANIM_ATTACKER, 2, -15, 0, 0, 0, 32, 60 + delay 8 + createsprite gUnknown_83E33F4, ANIM_ATTACKER, 2, 12, -5, 0, 0, 32, 60 + delay 40 + createvisualtask sub_80BB7DC, 2, 0, 15, 0, 0 + waitforvisualfinish + restorebg + waitbgfadeout + setarg 7, 65535 + waitbgfadein + waitforvisualfinish + end + +Move_BLAST_BURN:: @ 81D3C0E + loadspritegfx 10035 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W221, 192 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, -32, 0, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, -20, -10, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 66, 0, -16, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 66, 20, -10, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 66, 32, 0, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 66, 20, 10, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, 0, 16, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, -20, 10, 24, 0, 0, 0 + delay 25 + playsewithpan SE_W172B, 192 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, -64, 0, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 6, -40, -20, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 70, 0, -32, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 70, 40, -20, 24, 0, 0, 0 + createvisualtask AnimTask_ShakeMon, 5, 1, 6, 0, 8, 1 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 66, 64, 0, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 66, 40, 20, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, 0, 32, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, -40, 20, 24, 0, 0, 0 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 25 + playsewithpan SE_W172B, 192 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, -96, 0, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 6, -60, -30, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 70, 0, -48, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 70, 60, -30, 24, 0, 0, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -4, 3, 1, 0 + createvisualtask AnimTask_ShakeMon, 5, 1, 12, 0, 20, 1 + createvisualtask sub_80BA47C, 2, 2, 0, 10, 1 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 66, 96, 0, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 66, 60, 30, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, 0, 48, 24, 0, 0, 0 + createsprite gUnknown_83E5CA0, ANIM_ATTACKER, 2, -60, 30, 24, 0, 0, 0 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_ROCK_TOMB:: @ 81D3E50 + loadspritegfx 10250 + loadspritegfx 10058 + createvisualtask sub_80BA47C, 2, 2, 0, 10, 1 + waitforvisualfinish + createsprite gUnknown_83E7508, ANIM_TARGET, 2, 20, 12, 64, 114, 0 + delay 8 + createvisualtask sub_80BA47C, 2, 0, 2, 3, 1 + playsewithpan SE_W070, 63 + delay 8 + createsprite gUnknown_83E7508, ANIM_TARGET, 2, -20, 12, 64, 98, 0 + delay 8 + createvisualtask sub_80BA47C, 2, 0, 2, 3, 1 + playsewithpan SE_W070, 63 + delay 8 + createsprite gUnknown_83E7508, ANIM_TARGET, 66, 3, 6, 64, 82, 0 + delay 8 + createvisualtask sub_80BA47C, 2, 0, 2, 3, 1 + playsewithpan SE_W070, 63 + delay 8 + createsprite gUnknown_83E7508, ANIM_TARGET, 2, -3, 13, 64, 66, 0 + delay 8 + createvisualtask sub_80BA47C, 2, 0, 2, 3, 1 + playsewithpan SE_W070, 63 + delay 24 + playsewithpan SE_W063, 63 + createsprite gUnknown_83E705C, ANIM_TARGET, 5, 1, 50 + createvisualtask AnimTask_ShakeMon, 5, 1, 3, 0, 20, 1 + createvisualtask sub_80BA47C, 2, 2, 0, 10, 1 + waitforvisualfinish + end + +Move_SILVER_WIND:: @ 81D3F37 + loadspritegfx 10271 + panse_1B SE_W016, 192, 63, 2, 0 + playsewithpan SE_W234, 0 + delay 0 + monbg 3 + monbgprio_29 + delay 0 + createvisualtask sub_80BA83C, 10, 1, 0, 0, 4, 0 + createvisualtask AnimTask_GetTargetSide, 2, + jumpargeq 7, 1, gUnknown_81D4138 + fadetobg 22 + waitbgfadeout + createvisualtask sub_80BB82C, 5, 1536, 0, 0, -1 + +gUnknown_81D3F7E:: @ 81D3F7E + delay 0 + createvisualtask sub_80BA7F8, 10, 1, 0, 4, 4, 0 + waitbgfadein + createsprite gUnknown_83E30A8, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1 + createsprite gUnknown_83E30A8, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1 + createsprite gUnknown_83E30A8, ANIM_ATTACKER, 120, -24, 18, 90, 5, 1, 2, 1 + createsprite gUnknown_83E30A8, ANIM_ATTACKER, 120, -40, 14, 128, 4, 1, 2, 1 + delay 0 + createsprite gUnknown_83E30C0, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1 + createsprite gUnknown_83E30C0, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1 + createsprite gUnknown_83E30C0, ANIM_ATTACKER, 120, -24, 18, 90, 5, 1, 2, 1 + createsprite gUnknown_83E30C0, ANIM_ATTACKER, 120, -40, 14, 128, 4, 1, 2, 1 + delay 0 + createsprite gUnknown_83E30D8, ANIM_TARGET, 66, -32, 16, 0, 6, 2, 3, 1 + createsprite gUnknown_83E30D8, ANIM_TARGET, 66, -8, 18, 64, 3, 2, 2, 1 + createsprite gUnknown_83E30D8, ANIM_ATTACKER, 120, -24, 18, 90, 5, 1, 2, 1 + createsprite gUnknown_83E30D8, ANIM_ATTACKER, 120, -40, 14, 128, 4, 1, 2, 1 + delay 6 + createsprite gUnknown_83E30A8, ANIM_TARGET, 66, -4, 16, 0, 6, 1, 2, 1 + createsprite gUnknown_83E30A8, ANIM_TARGET, 66, -16, 12, 192, 5, 2, 3, 1 + delay 0 + createsprite gUnknown_83E30C0, ANIM_TARGET, 66, -4, 16, 0, 6, 1, 2, 1 + createsprite gUnknown_83E30C0, ANIM_TARGET, 66, -16, 12, 192, 5, 2, 3, 1 + delay 0 + createsprite gUnknown_83E30D8, ANIM_TARGET, 66, -4, 16, 0, 6, 1, 2, 1 + createsprite gUnknown_83E30D8, ANIM_TARGET, 66, -16, 12, 192, 5, 2, 3, 1 + waitforvisualfinish + playsewithpan SE_W016B, 63 + clearmonbg 3 + delay 0 + restorebg + waitbgfadeout + createvisualtask sub_80BA83C, 10, 1, 0, 4, 0, 0 + setarg 7, 65535 + waitbgfadein + end + +gUnknown_81D4138:: @ 81D4138 + fadetobg 23 + waitbgfadeout + createvisualtask sub_80BB82C, 5, -1536, 0, 0, -1 + goto gUnknown_81D3F7E + +Move_SNATCH:: @ 81D414F + playsewithpan SE_W036, 192 + createvisualtask AnimTask_WindUpLunge, 5, 0, -12, 4, 10, 10, 12, 6 + end + +Move_DIVE:: @ 81D4169 + loadspritegfx 10272 + loadspritegfx 10273 + choosetwoturnanim gUnknown_81D4178, gUnknown_81D41CD + +gUnknown_81D4178:: @ 81D4178 + loadspritegfx 10156 + playsewithpan SE_W029, 192 + createsprite gUnknown_83E6D40, ANIM_ATTACKER, 2, 0, 0, 13, 336 + waitforvisualfinish + playsewithpan SE_W291, 192 + createsprite gUnknown_83E6D7C, ANIM_ATTACKER, 3, 0 + call gUnknown_81D41B6 + call gUnknown_81D41B6 + call gUnknown_81D41B6 + call gUnknown_81D41B6 + call gUnknown_81D41B6 + end + +gUnknown_81D41B6:: @ 81D41B6 + createsprite gUnknown_83E6D94, ANIM_ATTACKER, 5, 0, 0 + createsprite gUnknown_83E6D94, ANIM_ATTACKER, 5, 1, 0 + return + +gUnknown_81D41CD:: @ 81D41CD + loadspritegfx 10148 + loadspritegfx 10155 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W153, 63 + createsprite gUnknown_83E6D7C, ANIM_TARGET, 3, 1 + call gUnknown_81D420C + call gUnknown_81D420C + call gUnknown_81D420C + call gUnknown_81D420C + call gUnknown_81D420C + delay 12 + call gUnknown_81C8CA2 + waitforvisualfinish + visible 0 + clearmonbg 3 + blendoff + end + +gUnknown_81D420C:: @ 81D420C + createsprite gUnknown_83E6D94, ANIM_TARGET, 5, 0, 1 + createsprite gUnknown_83E6D94, ANIM_TARGET, 5, 1, 1 + return + +Move_ROCK_BLAST:: @ 81D4223 + loadspritegfx 10058 + loadspritegfx 10135 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 + delay 3 + playsewithpan SE_W207, 192 + createsprite gUnknown_83E7548, ANIM_TARGET, 2, 16, 0, 0, 0, 25, 257 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 1 + playsewithpan SE_W088, 63 + createsprite gUnknown_83E73CC, ANIM_TARGET, 2, 0, 0, 20, 24, 14, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 5, 1 + createsprite gUnknown_83E73CC, ANIM_TARGET, 2, 5, 0, -20, 24, 14, 1 + createsprite gUnknown_83E73CC, ANIM_TARGET, 2, 0, 5, 20, -24, 14, 2 + createsprite gUnknown_83E73CC, ANIM_TARGET, 2, -5, 0, -20, -24, 14, 2 + waitforvisualfinish + end + +Move_OVERHEAT:: @ 81D42C0 + loadspritegfx 10029 + loadspritegfx 10135 + monbg 3 + setalpha 12, 18 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 5, 28 + waitforvisualfinish + createvisualtask sub_80BBE10, 5, + waitforvisualfinish + createvisualtask sub_80BBE6C, 5, 0, 1 + delay 1 + createvisualtask sub_80BBFA4, 5, 0 + delay 1 + playsewithpan SE_W082, 192 + createvisualtask sub_80BBE6C, 5, 1, 0 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 1, 0, 13, 28 + createvisualtask AnimTask_ShakeMon, 5, 0, 2, 0, 15, 1 + waitforvisualfinish + playsewithpan SE_W172B, 192 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 0, 30, 25, -20 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 32, 30, 25, -20 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 64, 30, 25, -20 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 96, 30, 25, -20 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 128, 30, 25, -20 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 66, 1, 160, 30, 25, -20 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 66, 1, 192, 30, 25, -20 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 66, 1, 224, 30, 25, -20 + delay 5 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 0, 30, 25, 0 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 32, 30, 25, 0 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 64, 30, 25, 0 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 96, 30, 25, 0 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 128, 30, 25, 0 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 66, 1, 160, 30, 25, 0 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 66, 1, 192, 30, 25, 0 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 66, 1, 224, 30, 25, 0 + delay 5 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 0, 30, 25, 10 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 32, 30, 25, 10 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 64, 30, 25, 10 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 96, 30, 25, 10 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 2, 1, 128, 30, 25, 10 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 66, 1, 160, 30, 25, 10 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 66, 1, 192, 30, 25, 10 + createsprite gUnknown_83E7860, ANIM_ATTACKER, 66, 1, 224, 30, 25, 10 + delay 5 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -5, 3, 1, 0 + playsewithpan SE_W007, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 10, 0, 25, 1 + delay 6 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, -5, 1, 0 + playsewithpan SE_W007, 63 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, 10, 1, 0 + playsewithpan SE_W007, 63 + delay 8 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 0 + playsewithpan SE_W007, 63 + createvisualtask sub_80BBFA4, 5, 1 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, -1, 0, 13, 19026 + createvisualtask AnimTask_ShakeMon, 5, 0, 3, 0, 15, 1 + waitforvisualfinish + createvisualtask sub_80BBF08, 5, 0, 1 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 5, 0, 28 + waitforvisualfinish + clearmonbg 3 + blendoff + waitforvisualfinish + delay 15 + createvisualtask sub_80BBF08, 5, 1, 0 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 0, 13, 0, 19026 + waitforvisualfinish + createvisualtask sub_80BBE3C, 5, + waitforvisualfinish + end + +Move_HYDRO_CANNON:: @ 81D45B2 + loadspritegfx 10149 + loadspritegfx 10148 + monbg 3 + setalpha 12, 8 + playsewithpan SE_W057, 192 + createsprite gUnknown_83E5A38, ANIM_TARGET, 2, + delay 10 + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + delay 30 + panse_1B SE_W056, 192, 63, 2, 0 + call gUnknown_81D467C + createvisualtask AnimTask_ShakeMon, 5, 1, 10, 0, 40, 1 + createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + call gUnknown_81D467C + createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + call gUnknown_81D467C + createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + call gUnknown_81D467C + createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + call gUnknown_81D467C + createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + call gUnknown_81D467C + createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + waitforvisualfinish + createvisualtask sub_80BA0E8, 2, 257, 257, 257 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +gUnknown_81D467C:: @ 81D467C + createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 + delay 1 + createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 + delay 1 + createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 + delay 1 + createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 + delay 1 + createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 + return + +Move_ASTONISH:: @ 81D46E4 + loadspritegfx 10273 + playsewithpan SE_W227, 192 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 + delay 25 + createsprite gUnknown_83E6D94, ANIM_TARGET, 5, 0, 1 + playsewithpan SE_W166, 63 + createsprite gUnknown_83E6D94, ANIM_TARGET, 5, 1, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 5, 1 + createvisualtask sub_80A9A20, 3, + waitforvisualfinish + end + +Move_SEISMIC_TOSS:: @ 81D472C + loadspritegfx 10135 + loadspritegfx 10058 + setarg 7, 0 + monbg 3 + setalpha 12, 8 + waitforvisualfinish + createvisualtask AnimTask_GetSeismicTossDamageLevel, 3, + delay 1 + fadetobg 17 + waitbgfadeout + createvisualtask sub_80B5188, 3, + playsewithpan SE_W327, 0 + waitbgfadein + waitforvisualfinish + createvisualtask sub_80B51EC, 3, + jumpargeq 7, 0, gUnknown_81D477F + jumpargeq 7, 1, gUnknown_81D4790 + jumpargeq 7, 2, gUnknown_81D47A8 + +gUnknown_81D4774:: @ 81D4774 + restorebg + waitbgfadeout + setarg 7, 4095 + waitbgfadein + clearmonbg 3 + blendoff + end + +gUnknown_81D477F:: @ 81D477F + call gUnknown_81D47C7 + delay 16 + call gUnknown_81D4828 + goto gUnknown_81D4774 + +gUnknown_81D4790:: @ 81D4790 + call gUnknown_81D47C7 + delay 14 + call gUnknown_81D4828 + delay 14 + call gUnknown_81D47C7 + goto gUnknown_81D4774 + +gUnknown_81D47A8:: @ 81D47A8 + call gUnknown_81D4828 + delay 10 + call gUnknown_81D47C7 + delay 10 + call gUnknown_81D4828 + delay 10 + call gUnknown_81D47C7 + goto gUnknown_81D4774 + +gUnknown_81D47C7:: @ 81D47C7 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -10, -8, 1, 1 + playsewithpan SE_W070, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 5, 1 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, -12, 27, 2, 3 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, 8, 28, 3, 4 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, -4, 30, 2, 3 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, 12, 25, 4, 4 + return + +gUnknown_81D4828:: @ 81D4828 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 10, -8, 1, 1 + playsewithpan SE_W088, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 5, 1 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, -12, 32, 3, 4 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, 8, 31, 2, 2 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, -4, 28, 2, 3 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, 12, 30, 4, 3 + return + +Move_MAGIC_COAT:: @ 81D4889 + loadspritegfx 10170 + setalpha 0, 16 + waitplaysewithpan SE_W112, 192, 15 + createsprite gUnknown_83E6E70, ANIM_ATTACKER, 3, 40, 0, 10170 + waitforvisualfinish + delay 1 + blendoff + end + +Move_WATER_PULSE:: @ 81D48A6 + loadspritegfx 10155 + loadspritegfx 10288 + monbg 1 + monbgprio_28 1 + playsewithpan SE_W145C, 192 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 7, 29472 + delay 10 + createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 100, 100, 8, 1, 20, 40, 0 + createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 20, 100, 16, 2, 10, 35, 1 + createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 200, 80, 8, 1, 40, 20, 0 + createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 80, 60, 10, 3, 20, 50, 0 + createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 140, 100, 16, 1, 20, 30, 1 + playsewithpan SE_W145C, 63 + waitforvisualfinish + playsewithpan SE_W202, 192 + createsprite gUnknown_83E3CE8, ANIM_TARGET, 2, 0, 0, 40, 15 + delay 5 + playsewithpan SE_W202, 192 + createsprite gUnknown_83E3CE8, ANIM_TARGET, 2, 0, 0, 40, 15 + delay 5 + playsewithpan SE_W202, 192 + createsprite gUnknown_83E3CE8, ANIM_TARGET, 2, 0, 0, 40, 15 + delay 13 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 8, 18, 1 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 7, 0, 29472 + waitforvisualfinish + clearmonbg 3 + end + +Move_PSYCHO_BOOST:: @ 81D499B + loadspritegfx 10212 + monbg 2 + fadetobg 3 + waitbgfadeout + createvisualtask sub_80DE7B4, 5, + waitbgfadein + delay 6 + createvisualtask sub_80B9BDC, 2, 1, 2, 8, 0, 10, 0 + delay 0 + monbgprio_28 0 + setalpha 8, 8 + delay 10 + createvisualtask AnimTask_ShakeMon, 2, 0, 3, 0, 240, 0 + loopsewithpan SE_W060B, 192, 14, 10 + createsprite gUnknown_83E71D0, ANIM_ATTACKER, 2, + delay 110 + loopsewithpan SE_W060B, 192, 7, 10 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, 1, -8, 1, 24, 1 + playsewithpan SE_W043, 63 + waitforvisualfinish + clearmonbg 2 + blendoff + call gUnknown_81D59C7 + end + +Move_KNOCK_OFF:: @ 81D4A0F + loadspritegfx 10277 + loadspritegfx 10135 + createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 + delay 4 + playsewithpan SE_W233, 63 + createsprite gUnknown_83FF764, ANIM_TARGET, 2, -16, -16 + delay 8 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 5, 1, 32767, 10, 0, 0 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 2 + playsewithpan SE_W004, 63 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -12, 10, 0, 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 0, 3, 6, 1 + delay 5 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6 + delay 10 + waitforvisualfinish + end + +Move_DOOM_DESIRE:: @ 81D4A9F + createvisualtask sub_80B8B38, 2, + delay 1 + monbg 2 + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 1, 0 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 4, 0 + waitforvisualfinish + setalpha 8, 8 + playsewithpan SE_W060, 192 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -4, -4, 15, 0, 1 + waitforvisualfinish + delay 20 + createvisualtask AnimTask_SetGreyscaleOrOriginalPal, 5, 1, 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 4, 0, 0 + waitforvisualfinish + clearmonbg 2 + blendoff + end + loadspritegfx 10198 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 16, 32767 + waitforvisualfinish + delay 10 + createvisualtask sub_80E017C, 5, + delay 5 + playsewithpan SE_W109, 192 + delay 10 + playsewithpan SE_W109, 0 + delay 10 + playsewithpan SE_W109, 63 + delay 23 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 10, 0, 20, 1 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 0, 0, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 24, -24, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, -16, 16, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, -24, -12, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 16, 16, 1, 1 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 16, 0, 32767 + waitforvisualfinish + end + +Move_SKY_UPPERCUT:: @ 81D4BC1 + loadspritegfx 10135 + monbg 3 + monbgprio_28 1 + fadetobg 17 + waitbgfadeout + playsewithpan SE_W327, 192 + createvisualtask sub_80B1530, 5, 55 + waitbgfadein + setalpha 12, 8 + delay 38 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 28, 0, 0, 5 + delay 4 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 6, 1 + playsewithpan SE_W233B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -28, 28, 1, 1 + delay 1 + playsewithpan SE_W233B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -15, 8, 1, 1 + playsewithpan SE_W233B, 63 + delay 1 + playsewithpan SE_W233B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -5, -12, 1, 1 + delay 1 + playsewithpan SE_W233B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, -32, 1, 1 + delay 1 + playsewithpan SE_W233B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 5, -52, 1, 1 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -26, 16, 1, 4 + delay 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 0, 3, 6, 1 + delay 30 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 6 + delay 4 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 6 + clearmonbg 3 + blendoff + restorebg + waitbgfadeout + setarg 7, 65535 + waitbgfadein + end + +Move_SECRET_POWER:: @ 81D4CBA + createvisualtask AnimTask_GetBattleTerrain, 5, + jumpargeq 0, 0, Move_NEEDLE_ARM + jumpargeq 0, 1, Move_MAGICAL_LEAF + jumpargeq 0, 2, Move_MUD_SHOT + jumpargeq 0, 3, Move_WATERFALL + jumpargeq 0, 4, Move_SURF + jumpargeq 0, 5, Move_BUBBLE_BEAM + jumpargeq 0, 6, Move_ROCK_THROW + jumpargeq 0, 7, Move_BITE + jumpargeq 0, 8, Move_STRENGTH + goto Move_SLAM + +Move_TWISTER:: @ 81D4D0E + loadspritegfx 10063 + loadspritegfx 10135 + loadspritegfx 10058 + monbg 3 + monbgprio_28 1 + playsewithpan SE_W239, 63 + createsprite gUnknown_83E2C20, ANIM_TARGET, 2, 120, 70, 5, 70, 30 + delay 1 + createsprite gUnknown_83E2C20, ANIM_TARGET, 2, 115, 55, 6, 60, 25 + delay 1 + createsprite gUnknown_83E2C20, ANIM_TARGET, 2, 115, 60, 7, 60, 30 + createsprite gUnknown_83E2C20, ANIM_TARGET, 2, 115, 55, 10, 60, 30 + delay 3 + createsprite gUnknown_83E7578, ANIM_TARGET, 2, 100, 50, 4, 50, 26 + delay 1 + createsprite gUnknown_83E2C20, ANIM_TARGET, 2, 105, 25, 8, 60, 20 + delay 1 + createsprite gUnknown_83E2C20, ANIM_TARGET, 2, 115, 40, 10, 48, 30 + delay 3 + createsprite gUnknown_83E7578, ANIM_TARGET, 2, 120, 30, 6, 45, 25 + createsprite gUnknown_83E2C20, ANIM_TARGET, 2, 115, 35, 10, 60, 30 + delay 3 + createsprite gUnknown_83E7578, ANIM_TARGET, 2, 105, 20, 8, 40, 0 + delay 3 + createsprite gUnknown_83E2C20, ANIM_TARGET, 2, 20, 255, 15, 32, 0 + createsprite gUnknown_83E2C20, ANIM_TARGET, 2, 110, 10, 8, 32, 20 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, -32, -16, 1, 3 + playsewithpan SE_W004, 63 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 3, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, 3, 3, 0, 12, 1 + delay 4 + createsprite gUnknown_83E7C50, ANIM_TARGET, 3, 1, 3 + playsewithpan SE_W004, 63 + delay 4 + createsprite gUnknown_83E7C50, ANIM_TARGET, 3, 1, 3 + playsewithpan SE_W004, 63 + delay 4 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 20, 1, 3 + playsewithpan SE_W004, 63 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_MAGICAL_LEAF:: @ 81D4E6D + loadspritegfx 10063 + loadspritegfx 10160 + loadspritegfx 10135 + monbg 3 + setalpha 12, 8 + delay 1 + loopsewithpan SE_W077, 192, 10, 5 + createvisualtask sub_80A41C4, 5, + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -3, -2, 10 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -1, -1, 15 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -4, -4, 7 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, 3, -3, 11 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -1, -6, 8 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, 2, -1, 12 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -3, -4, 13 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, 4, -5, 7 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, 2, -6, 11 + delay 2 + createsprite gUnknown_83E2C08, ANIM_ATTACKER, 2, -3, -5, 8 + delay 60 + playsewithpan SE_W013B, 192 + createsprite gUnknown_83E2C50, ANIM_TARGET, 3, 20, -10, 20, 0, 32, 20, 0 + createsprite gUnknown_83E2C50, ANIM_TARGET, 3, 20, -10, 20, 0, 32, -20, 0 + delay 30 + playsewithpan SE_W013, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, -4, 1, 2 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 10, 4, 1, 2 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 8, 1 + delay 20 + setarg 7, 65535 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +Move_ICE_BALL:: @ 81D4F8E + loadspritegfx 10043 + loadspritegfx 10141 + createvisualtask sub_80B0870, 5, 0 + jumpargeq 0, 4, gUnknown_81D5005 + +gUnknown_81D4FA5:: @ 81D4FA5 + playsewithpan SE_W196, 192 + createsprite gUnknown_83E665C, ANIM_TARGET, 2, 15, 0, -12, -16, 30, -40 + delay 28 + playsewithpan SE_W280, 63 + createvisualtask sub_80B0870, 5, 0 + jumpargeq 0, 0, gUnknown_81D5016 + jumpargeq 0, 1, gUnknown_81D5045 + jumpargeq 0, 2, gUnknown_81D507E + jumpargeq 0, 3, gUnknown_81D50C1 + jumpargeq 0, 4, gUnknown_81D5109 + +gUnknown_81D4FF3:: @ 81D4FF3 + createvisualtask sub_80B0870, 5, 0 + jumpargeq 0, 4, gUnknown_81D500C + +gUnknown_81D5004:: @ 81D5004 + end + +gUnknown_81D5005:: @ 81D5005 + fadetobg 15 + goto gUnknown_81D4FA5 + +gUnknown_81D500C:: @ 81D500C + waitbgfadein + delay 45 + restorebg + waitbgfadein + goto gUnknown_81D5004 + +gUnknown_81D5016:: @ 81D5016 + createvisualtask sub_8099BD4, 2, 0, 1, 8, 1, 0 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + goto gUnknown_81D4FF3 + +gUnknown_81D5045:: @ 81D5045 + createvisualtask sub_8099BD4, 2, 0, 1, 10, 1, 0 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + goto gUnknown_81D4FF3 + +gUnknown_81D507E:: @ 81D507E + createvisualtask sub_8099BD4, 2, 0, 1, 14, 1, 0 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + goto gUnknown_81D4FF3 + +gUnknown_81D50C1:: @ 81D50C1 + createvisualtask sub_8099BD4, 2, 0, 1, 18, 1, 0 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + goto gUnknown_81D4FF3 + +gUnknown_81D5109:: @ 81D5109 + createvisualtask sub_8099BD4, 2, 0, 1, 30, 1, 0 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + call gUnknown_81D5151 + goto gUnknown_81D4FF3 + +gUnknown_81D5151:: @ 81D5151 + createsprite gUnknown_83E6674, ANIM_TARGET, 4, -12, -16 + return + +Move_WEATHER_BALL:: @ 81D515D + loadspritegfx 10283 + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, 0 + delay 8 + playsewithpan SE_W207, 192 + createsprite gSpriteTemplate_83BF434, ANIM_ATTACKER, 2, + waitforvisualfinish + delay 15 + playsewithpan SE_W197, 0 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 5, 1, 32767, 10, 0, 0 + waitforvisualfinish + createvisualtask sub_80E44EC, 2, + delay 1 + jumpargeq 7, 0, gUnknown_81D51C8 + jumpargeq 7, 1, gUnknown_81D5205 + jumpargeq 7, 2, gUnknown_81D5269 + jumpargeq 7, 3, gUnknown_81D52CD + jumpargeq 7, 4, gUnknown_81D536D + +gUnknown_81D51C8:: @ 81D51C8 + loadspritegfx 10135 + createsprite gSpriteTemplate_83BF44C, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0 + waitforvisualfinish + playsewithpan SE_W025B, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 8, 1 + waitforvisualfinish + end + +gUnknown_81D5205:: @ 81D5205 + loadspritegfx 10029 + createsprite gUnknown_83E5E14, ANIM_TARGET, 2, -30, -100, 25, 1, 40, 10 + playsewithpan SE_W172, 63 + delay 10 + createsprite gUnknown_83E5E14, ANIM_TARGET, 2, -30, -100, 25, 1, -40, 20 + playsewithpan SE_W172, 63 + delay 10 + createsprite gUnknown_83E5E14, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0 + playsewithpan SE_W172, 63 + waitforvisualfinish + playsewithpan SE_W172B, 63 + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 8, 1 + waitforvisualfinish + end + +gUnknown_81D5269:: @ 81D5269 + loadspritegfx 10155 + createsprite gUnknown_83E5BA0, ANIM_TARGET, 2, -30, -100, 25, 1, 50, 10 + playsewithpan SE_W152, 63 + delay 8 + createsprite gUnknown_83E5BA0, ANIM_TARGET, 2, -30, -100, 25, 1, -20, 20 + playsewithpan SE_W152, 63 + delay 13 + createsprite gUnknown_83E5BA0, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0 + playsewithpan SE_W152, 63 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 8, 1 + playsewithpan SE_W202, 63 + waitforvisualfinish + end + +gUnknown_81D52CD:: @ 81D52CD + loadspritegfx 10058 + createsprite gUnknown_83E7590, ANIM_TARGET, 2, -30, -100, 25, 1, 30, 0 + playsewithpan SE_W088, 63 + delay 5 + createsprite gUnknown_83E7590, ANIM_TARGET, 2, -30, -100, 25, 1, -40, 20 + playsewithpan SE_W088, 63 + delay 14 + createsprite gUnknown_83E7590, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0 + playsewithpan SE_W088, 63 + waitforvisualfinish + playsewithpan SE_W070, 63 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, -12, 27, 2, 3 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, 8, 28, 3, 4 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, -4, 30, 2, 3 + createsprite gUnknown_83E7560, ANIM_TARGET, 2, 12, 25, 4, 4 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 8, 1 + waitforvisualfinish + end + +gUnknown_81D536D:: @ 81D536D + loadspritegfx 10263 + loadspritegfx 10141 + createsprite gUnknown_83E65BC, ANIM_TARGET, 2, -30, -100, 25, 25, -40, 20 + playsewithpan SE_W258, 63 + delay 10 + createsprite gUnknown_83E65BC, ANIM_TARGET, 2, -30, -100, 25, 25, 40, 0 + playsewithpan SE_W258, 63 + delay 10 + createsprite gUnknown_83E65BC, ANIM_TARGET, 2, -30, -100, 25, 25, 0, 0 + playsewithpan SE_W258, 63 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 8, 1 + playsewithpan SE_W196, 63 + call gUnknown_81D540A + waitforvisualfinish + end + +Move_COUNT:: @ 81D53D9 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W003, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +gUnknown_81D540A:: @ 81D540A + createsprite gUnknown_83E63E0, ANIM_TARGET, 2, -10, -10, 0 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63F8, ANIM_TARGET, 2, 10, 20, 0 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63E0, ANIM_TARGET, 2, -5, 10, 0 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63F8, ANIM_TARGET, 2, 17, -12, 0 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63F8, ANIM_TARGET, 2, -15, 15, 0 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63F8, ANIM_TARGET, 2, 0, 0, 0 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63E0, ANIM_TARGET, 2, 20, 2, 0 + playsewithpan SE_W196, 63 + return + +gUnknown_81D548E:: @ 81D548E + createsprite gUnknown_83E63E0, ANIM_TARGET, 2, -10, -10, 1 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63F8, ANIM_TARGET, 2, 10, 20, 1 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63E0, ANIM_TARGET, 2, -29, 0, 1 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63F8, ANIM_TARGET, 2, 29, -20, 1 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63E0, ANIM_TARGET, 2, -5, 10, 1 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63F8, ANIM_TARGET, 2, 17, -12, 1 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63E0, ANIM_TARGET, 2, -20, 0, 1 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63F8, ANIM_TARGET, 2, -15, 15, 1 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63F8, ANIM_TARGET, 2, 26, -5, 1 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63F8, ANIM_TARGET, 2, 0, 0, 1 + playsewithpan SE_W196, 63 + delay 4 + createsprite gUnknown_83E63E0, ANIM_TARGET, 2, 20, 2, 1 + playsewithpan SE_W196, 63 + return + loopsewithpan SE_W196, 63, 6, 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 0, 24, 0 + delay 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 8, 24, 0 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, -8, 24, 0 + delay 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 16, 24, 0 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, -16, 24, 0 + delay 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 24, 24, 0 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, -24, 24, 0 + delay 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 32, 24, 0 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, -32, 24, 0 + return + +gUnknown_81D55E2:: @ 81D55E2 + loopsewithpan SE_W196, 63, 6, 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 0, 24, 1 + delay 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 8, 24, 1 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, -8, 24, 1 + delay 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 16, 24, 1 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, -16, 24, 1 + delay 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 24, 24, 1 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, -24, 24, 1 + delay 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 32, 24, 1 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, -32, 24, 1 + delay 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 40, 24, 1 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, -40, 24, 1 + delay 4 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, 48, 24, 1 + createsprite gUnknown_83E647C, ANIM_TARGET, 2, -48, 24, 1 + return + +gUnknown_81D569E:: @ 81D569E + createsprite gUnknown_83E33F4, ANIM_ATTACKER, 2, -15, 0, 0, 0, 32, 60 + delay 8 + createsprite gUnknown_83E33F4, ANIM_ATTACKER, 2, 12, -5, 0, 0, 32, 60 + delay 8 + return + +gUnknown_81D56C9:: @ 81D56C9 + playsewithpan SE_W071B, 192 + createsprite gUnknown_83E37A4, ANIM_ATTACKER, 2, 0, -5, 0, 0 + delay 7 + createsprite gUnknown_83E37A4, ANIM_ATTACKER, 2, -15, 10, 0, 0 + delay 7 + createsprite gUnknown_83E37A4, ANIM_ATTACKER, 2, -15, -15, 0, 0 + delay 7 + createsprite gUnknown_83E37A4, ANIM_ATTACKER, 2, 10, -5, 0, 0 + delay 7 + return + +gUnknown_81D5712:: @ 81D5712 + playsewithpan SE_W071B, 63 + createsprite gUnknown_83E37A4, ANIM_TARGET, 2, 0, -5, 1, 0 + delay 7 + createsprite gUnknown_83E37A4, ANIM_TARGET, 2, -15, 10, 1, 0 + delay 7 + createsprite gUnknown_83E37A4, ANIM_TARGET, 2, -15, -15, 1, 0 + delay 7 + createsprite gUnknown_83E37A4, ANIM_TARGET, 2, 10, -5, 1, 0 + delay 7 + return + +gUnknown_81D575B:: @ 81D575B + createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 10, 10, 0 + playsewithpan SE_W092, 63 + delay 6 + createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 20, -20, 0 + playsewithpan SE_W092, 63 + delay 6 + createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, -20, 15, 0 + playsewithpan SE_W092, 63 + delay 6 + createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 0, 0, 0 + playsewithpan SE_W092, 63 + delay 6 + createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, -20, -20, 0 + playsewithpan SE_W092, 63 + delay 6 + createsprite gUnknown_83E6AB8, ANIM_TARGET, 2, 16, -8, 0 + playsewithpan SE_W092, 63 + return + +gUnknown_81D57CC:: @ 81D57CC + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 10, 10, 0 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 20, -20, 0 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, 15, 0 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 0, 0, 0 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, -20, 0 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 16, -8, 0 + playsewithpan SE_W145C, 63 + return + +gUnknown_81D583D:: @ 81D583D + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 10, 10, 1 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -28, -10, 1 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 20, -20, 1 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, 15, 1 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 0, 0, 1 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 27, 8, 1 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, -20, -20, 1 + playsewithpan SE_W145C, 63 + delay 6 + createsprite gUnknown_83E6AD0, ANIM_ATTACKER, 2, 16, -8, 1 + playsewithpan SE_W145C, 63 + return + +gUnknown_81D58D4:: @ 81D58D4 + playsewithpan SE_W085B, 63 + createsprite gUnknown_83E6088, ANIM_TARGET, 2, 5, 0, 5, 0 + delay 2 + createsprite gUnknown_83E6088, ANIM_TARGET, 2, -5, 10, 5, 1 + delay 2 + createsprite gUnknown_83E6088, ANIM_TARGET, 2, 15, 20, 5, 2 + delay 2 + createsprite gUnknown_83E6088, ANIM_TARGET, 2, -15, -10, 5, 0 + delay 2 + createsprite gUnknown_83E6088, ANIM_TARGET, 2, 25, 0, 5, 1 + delay 2 + createsprite gUnknown_83E6088, ANIM_TARGET, 2, -8, 8, 5, 2 + delay 2 + createsprite gUnknown_83E6088, ANIM_TARGET, 2, 2, -8, 5, 0 + delay 2 + createsprite gUnknown_83E6088, ANIM_TARGET, 2, -20, 15, 5, 1 + return + +gUnknown_81D595F:: @ 81D595F + loopsewithpan SE_W146, 63, 13, 6 + createsprite gConfusionDuckSpriteTemplate, ANIM_TARGET, 2, 0, -15, 0, 3, 90 + createsprite gConfusionDuckSpriteTemplate, ANIM_TARGET, 2, 0, -15, 51, 3, 90 + createsprite gConfusionDuckSpriteTemplate, ANIM_TARGET, 2, 0, -15, 102, 3, 90 + createsprite gConfusionDuckSpriteTemplate, ANIM_TARGET, 2, 0, -15, 153, 3, 90 + createsprite gConfusionDuckSpriteTemplate, ANIM_TARGET, 2, 0, -15, 204, 3, 90 + return + +gUnknown_81D59BB:: @ 81D59BB + fadetobg 3 + waitbgfadeout + createvisualtask sub_80DE6F0, 5, + waitbgfadein + return + +gUnknown_81D59C7:: @ 81D59C7 + restorebg + waitbgfadeout + setarg 7, 65535 + waitbgfadein + return + +gUnknown_81D59CF:: @ 81D59CF + jumpifcontest gUnknown_81D59E8 + fadetobg 18 + waitbgfadeout + createvisualtask sub_80BB82C, 5, -2304, 768, 1, -1 + +gUnknown_81D59E6:: @ 81D59E6 + waitbgfadein + return + +gUnknown_81D59E8:: @ 81D59E8 + fadetobg 19 + waitbgfadeout + createvisualtask sub_80BB82C, 5, 2304, 768, 0, -1 + goto gUnknown_81D59E6 + +gUnknown_81D59FF:: @ 81D59FF + restorebg + waitbgfadeout + setarg 7, 65535 + waitbgfadein + return + +gUnknown_81D5A07:: @ 81D5A07 + createvisualtask AnimTask_IsContest, 2, + jumpargeq 7, 1, gUnknown_81D5A2C + createvisualtask sub_80DEAB4, 2, + jumpargeq 7, 0, gUnknown_81D5A3A + goto gUnknown_81D5A33 + +gUnknown_81D5A2A:: @ 81D5A2A + waitbgfadein + return + +gUnknown_81D5A2C:: @ 81D5A2C + fadetobg 26 + goto gUnknown_81D5A2A + +gUnknown_81D5A33:: @ 81D5A33 + fadetobg 25 + goto gUnknown_81D5A2A + +gUnknown_81D5A3A:: @ 81D5A3A + fadetobg 24 + goto gUnknown_81D5A2A + +gUnknown_81D5A41:: @ 81D5A41 + restorebg + waitbgfadein + return + +Status_Poison:: @ 81D5A44 + loopsewithpan SE_W092, 63, 13, 6 + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 18, 2 + createvisualtask sub_80B9BDC, 2, 2, 2, 2, 0, 12, 31774 + end + +Status_Confusion:: @ 81D5A6F + loadspritegfx 10073 + call gUnknown_81D595F + end + +Status_Burn:: @ 81D5A78 + loadspritegfx 10029 + playsewithpan SE_W172, 63 + call gUnknown_81D5A90 + call gUnknown_81D5A90 + call gUnknown_81D5A90 + waitforvisualfinish + end + +gUnknown_81D5A90:: @ 81D5A90 + createsprite gUnknown_83E5D7C, ANIM_TARGET, 2, -24, 24, 24, 24, 20, 1, 1 + delay 4 + return + +Status_Infatuation:: @ 81D5AA8 + loadspritegfx 10210 + playsewithpan SE_W204, 192 + createsprite gUnknown_83E41E8, ANIM_ATTACKER, 3, 0, 20 + delay 15 + playsewithpan SE_W204, 192 + createsprite gUnknown_83E41E8, ANIM_ATTACKER, 3, -20, 20 + delay 15 + playsewithpan SE_W204, 192 + createsprite gUnknown_83E41E8, ANIM_ATTACKER, 3, 20, 20 + end + +Status_Sleep:: @ 81D5ADD + loadspritegfx 10228 + playsewithpan SE_W173, 192 + createsprite gUnknown_83E3500, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 + delay 30 + createsprite gUnknown_83E3500, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 + end + +Status_Paralysis:: @ 81D5B09 + loadspritegfx 10011 + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 10, 1 + call gUnknown_81D58D4 + end + +Status_Freeze:: @ 81D5B23 + playsewithpan SE_W196, 0 + loadspritegfx 10010 + monbg 3 + monbgprio_28 1 + waitplaysewithpan SE_W258, 63, 17 + createvisualtask sub_80783FC, 2, + waitforvisualfinish + clearmonbg 3 + end + +Status_Curse:: @ 81D5B3E + loadspritegfx 10200 + monbg 3 + playsewithpan SE_W171, 63 + createsprite gUnknown_83E7698, ANIM_TARGET, 2, + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 14, 1 + waitforvisualfinish + clearmonbg 3 + end + +Status_Nightmare:: @ 81D5B63 + loadspritegfx 10221 + monbg 3 + playsewithpan SE_W171, 63 + createsprite gUnknown_83E76B0, ANIM_TARGET, 2, + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 14, 1 + waitforvisualfinish + clearmonbg 3 + end + +General_CastformChange:: @ 81D5B88 + createvisualtask c3_80DFBE4, 2, + jumpargeq 7, 1, gUnknown_81D5BB4 + goto gUnknown_81D5B9C + +gUnknown_81D5B9C:: @ 81D5B9C + monbg 0 + playsewithpan SE_W100, 192 + waitplaysewithpan SE_W107, 192, 48 + createvisualtask sub_80DF9BC, 2, 1 + waitforvisualfinish + clearmonbg 0 + end + +gUnknown_81D5BB4:: @ 81D5BB4 + createvisualtask sub_80DFC24, 2, 1 + end + +General_StatsChange:: @ 81D5BBE + createvisualtask sub_8078694, 5, + waitforvisualfinish + end + +General_SubstituteFade:: @ 81D5BC7 + monbg 0 + createvisualtask sub_80F15C8, 5, + createvisualtask sub_80BA7F8, 10, 2, 0, 0, 16, 32767 + waitforvisualfinish + delay 1 + clearmonbg 0 + delay 2 + blendoff + createvisualtask sub_80BA7F8, 10, 2, 0, 0, 0, 32767 + createvisualtask sub_80F1420, 2, 1 + end + +General_SubstituteAppear:: @ 81D5C04 + createvisualtask sub_80E3294, 2, + end + +General_PokeblockThrow:: @ 81D5C0C + createvisualtask sub_80F1C8C, 2, 0 + createvisualtask sub_80F1AE0, 2, + delay 0 + waitplaysewithpan SE_W026, 192, 22 + createsprite gUnknown_840C1EC, ANIM_TARGET, 3, -18, 12, 0, 32 + delay 50 + loopsewithpan SE_W039, 63, 19, 2 + createvisualtask AnimTask_SwayMon, 5, 1, 8, 1536, 2, 1 + waitforvisualfinish + createvisualtask sub_80F1B14, 2, + end + +General_ItemKnockoff:: @ 81D5C54 + loadspritegfx 10224 + createsprite gUnknown_83E2EA0, ANIM_TARGET, 2, + end + +General_TurnTrap:: @ 81D5C5F + createvisualtask sub_80F1D14, 5, + jumpargeq 0, 1, gUnknown_81D5CD3 + jumpargeq 0, 2, gUnknown_81D5CF8 + jumpargeq 0, 3, gUnknown_81D5D4C + jumpargeq 0, 4, gUnknown_81D5DA9 + goto gUnknown_81D5C8B + +gUnknown_81D5C8B:: @ 81D5C8B + loadspritegfx 10186 + loopsewithpan SE_W010, 63, 6, 2 + createsprite gUnknown_83E2D0C, ANIM_TARGET, 4, 0, 16, 0, 1 + delay 7 + createsprite gUnknown_83E2D0C, ANIM_TARGET, 2, 0, 8, 1, 1 + delay 3 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 8, 1 + delay 20 + setarg 7, 65535 + playsewithpan SE_W020, 63 + waitforvisualfinish + end + +gUnknown_81D5CD3:: @ 81D5CD3 + loadspritegfx 10029 + playsewithpan SE_W221B, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 2, 30, 1 + call gUnknown_81C885F + call gUnknown_81C885F + waitforvisualfinish + stopsound + end + +gUnknown_81D5CF8:: @ 81D5CF8 + loadspritegfx 10149 + monbg 3 + monbgprio_28 1 + setalpha 12, 8 + delay 0 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, 23968 + playsewithpan SE_W250, 63 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 2, 30, 1 + call gUnknown_81CFB92 + call gUnknown_81CFB92 + delay 12 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, 23968 + waitforvisualfinish + stopsound + clearmonbg 3 + end + +gUnknown_81D5D4C:: @ 81D5D4C + loadspritegfx 10145 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W011, 63 + createsprite gUnknown_83E7948, ANIM_ATTACKER, 2, -32, 0, 2, 819, 0, 10 + createsprite gUnknown_83E7948, ANIM_ATTACKER, 2, 32, 0, 6, -819, 0, 10 + delay 10 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 5, 1, 3, 0, 5, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + waitforvisualfinish + end + +gUnknown_81D5DA9:: @ 81D5DA9 + loadspritegfx 10074 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 7, 563 + createvisualtask AnimTask_ShakeMon, 5, 1, 0, 2, 30, 1 + playsewithpan SE_W328, 63 + call gUnknown_81D2DE3 + call gUnknown_81D2DE3 + delay 22 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 7, 0, 563 + waitforvisualfinish + stopsound + end + +General_ItemEffect:: @ 81D5DF2 + loadspritegfx 10203 + loadspritegfx 10049 + delay 0 + playsewithpan SE_W036, 192 + createvisualtask sub_8099A78, 2, 16, 128, 0, 2 + waitforvisualfinish + playsewithpan SE_W036, 192 + createvisualtask sub_8099A78, 2, 16, 128, 0, 2 + waitforvisualfinish + playsewithpan SE_W036, 192 + createvisualtask sub_8099A78, 2, 16, 128, 0, 2 + waitforvisualfinish + playsewithpan SE_W234, 192 + call gUnknown_81D569E + waitforvisualfinish + playsewithpan SE_REAPOKE, 192 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 2, 3, 7, 0, 26609 + createsprite gUnknown_83E4094, ANIM_ATTACKER, 3, 0, 0, 0, 0 + waitforvisualfinish + end + +General_SmokeballEscape:: @ 81D5E66 + loadspritegfx 10242 + monbg 0 + setalpha 12, 4 + delay 0 + playsewithpan SE_BOWA2, 63 + createsprite gUnknown_83FF514, ANIM_TARGET, 0, 0, 32, 28, 30 + delay 4 + playsewithpan SE_BOWA2, 63 + createsprite gUnknown_83FF514, ANIM_ATTACKER, 127, 2, 12, 20, 30 + delay 12 + playsewithpan SE_BOWA2, 63 + createsprite gUnknown_83FF514, ANIM_ATTACKER, 126, 2, -28, 4, 30 + delay 12 + playsewithpan SE_BOWA2, 63 + createsprite gUnknown_83FF514, ANIM_ATTACKER, 124, 2, 14, -20, 30 + delay 4 + playsewithpan SE_BOWA2, 63 + createvisualtask sub_80B78E0, 2, 2 + createsprite gUnknown_83FF514, ANIM_ATTACKER, 123, 3, 4, 4, 30 + delay 14 + playsewithpan SE_BOWA2, 63 + createsprite gUnknown_83FF514, ANIM_ATTACKER, 122, 3, -14, 18, 46 + delay 0 + createsprite gUnknown_83FF514, ANIM_ATTACKER, 121, 3, 14, -14, 46 + delay 0 + createsprite gUnknown_83FF514, ANIM_ATTACKER, 120, 3, -12, -10, 46 + delay 0 + createsprite gUnknown_83FF514, ANIM_ATTACKER, 119, 3, 14, 14, 46 + delay 0 + createsprite gUnknown_83FF514, ANIM_ATTACKER, 118, 3, 0, 0, 46 + waitforvisualfinish + clearmonbg 0 + invisible 0 + delay 0 + blendoff + end + +General_HangedOn:: @ 81D5F42 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 2, 7, 0, 9, 31 + playsewithpan SE_W082, 192 + createvisualtask sub_80E1C48, 5, 30, 128, 0, 1, 2, 0, 1 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 2, 4, 9, 0, 31 + waitforvisualfinish + delay 6 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 0, 0, 0, 15 + end + +General_Rain:: @ 81D5F8F + loadspritegfx 10115 + playsewithpan SE_W240, 192 + createvisualtask sub_80BA7F8, 10, 1921, 2, 0, 4, 0 + waitforvisualfinish + createvisualtask sub_80AABC0, 2, 0, 3, 60 + createvisualtask sub_80AABC0, 2, 0, 3, 60 + delay 50 + waitforvisualfinish + createvisualtask sub_80BA7F8, 10, 1921, 2, 4, 0, 0 + waitforvisualfinish + end + +General_Sun:: @ 81D5FD8 + goto Move_SUNNY_DAY + +General_Sandstorm:: @ 81D5FDD + goto Move_SANDSTORM + +General_Hail:: @ 81D5FE2 + goto Move_HAIL + +General_LeechSeedDrain:: @ 81D5FE7 + createvisualtask sub_80F1D7C, 5, + delay 0 + goto Move_ABSORB + +General_MonHit:: @ 81D5FF5 + loadspritegfx 10135 + monbg 1 + setalpha 12, 8 + playsewithpan SE_W003, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 2 + createvisualtask AnimTask_ShakeMon, 2, 1, 3, 0, 6, 1 + waitforvisualfinish + clearmonbg 1 + blendoff + end + +General_ItemSteal:: @ 81D6026 + loadspritegfx 10224 + createvisualtask sub_80BC0FC, 2, + createvisualtask sub_80F1700, 2, + delay 1 + createsprite gUnknown_83E2EE8, ANIM_ATTACKER, 2, 0, -5, 10, 2, -1 + end + +General_SnatchMove:: @ 81D604B + loadspritegfx 10224 + createvisualtask sub_80BC060, 2, + call gUnknown_81D6476 + delay 1 + createvisualtask AnimTask_SwayMon, 2, 0, 5, 5120, 4, 1 + waitforvisualfinish + createvisualtask AnimTask_IsTargetSameSide, 2, + jumpargeq 7, 0, gUnknown_81D6089 + goto gUnknown_81D6099 + +gUnknown_81D6082:: @ 81D6082 + waitforvisualfinish + call gUnknown_81D6496 + end + +gUnknown_81D6089:: @ 81D6089 + playsewithpan SE_W104, 192 + createvisualtask sub_80E392C, 2, + goto gUnknown_81D6082 + +gUnknown_81D6099:: @ 81D6099 + playsewithpan SE_W104, 192 + createvisualtask sub_80E3FC0, 2, + goto gUnknown_81D6082 + +General_FutureSightHit:: @ 81D60A9 + createvisualtask sub_80BC0DC, 2, + monbg 3 + playsewithpan SE_W060, 192 + call gUnknown_81D59BB + setalpha 8, 8 + playsewithpan SE_W048, 63 + waitplaysewithpan SE_W048, 63, 8 + createvisualtask AnimTask_ShakeMon, 2, 1, 4, 0, 15, 1 + createvisualtask AnimTask_ScaleMonAndRestore, 5, -5, -5, 15, 1, 1 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, 1, 4, 0, 24, 1 + waitforvisualfinish + clearmonbg 3 + blendoff + waitforvisualfinish + delay 1 + call gUnknown_81D59C7 + end + +General_DoomDesireHit:: @ 81D6108 + createvisualtask sub_80BC0DC, 2, + loadspritegfx 10198 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 16, 32767 + waitforvisualfinish + delay 10 + createvisualtask sub_80E017C, 5, + delay 9 + playsewithpan SE_W109, 192 + delay 9 + playsewithpan SE_W109, 0 + delay 9 + playsewithpan SE_W109, 63 + delay 25 + createvisualtask AnimTask_ShakeMonInPlace, 2, 1, 10, 0, 20, 1 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 0, 0, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 24, -24, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, -16, 16, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, -24, -12, 1, 1 + delay 6 + playsewithpan SE_W120, 63 + createsprite gUnknown_83E3F94, ANIM_ATTACKER, 3, 16, 16, 1, 1 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 16, 0, 32767 + waitforvisualfinish + end + +General_FocusPunchSetUp:: @ 81D61CD + loadspritegfx 10184 + playsewithpan SE_W082, 192 + call gUnknown_81CB267 + delay 8 + createvisualtask sub_80B9BDC, 2, 2, 2, 2, 0, 11, 31 + createvisualtask AnimTask_ShakeMon2, 2, 0, 1, 0, 32, 1 + call gUnknown_81CB267 + delay 8 + call gUnknown_81CB267 + waitforvisualfinish + end + +General_IngrainHeal:: @ 81D620D + loadspritegfx 10147 + loadspritegfx 10031 + monbg 3 + setalpha 12, 8 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 0, 4, 13293 + waitforvisualfinish + delay 3 + call gUnknown_81CEC44 + waitforvisualfinish + delay 15 + call gUnknown_81D56C9 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 1, 4, 0, 13293 + waitforvisualfinish + clearmonbg 3 + blendoff + end + +General_WishHeal:: @ 81D6250 + loadspritegfx 10031 + loadspritegfx 10049 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 0, 10, 0 + waitforvisualfinish + playsewithpan SE_W025, 192 + call gUnknown_81D569E + waitforvisualfinish + call gUnknown_81D56C9 + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 10, 0, 0 + end + +gUnknown_81D628A:: @ 81D628A + createvisualtask sub_80F1C8C, 2, 1 + waitforvisualfinish + loadspritegfx 10273 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 0, 10, 26336 + createvisualtask AnimTask_ShakeMon2, 2, 1, 2, 0, 10, 1 + delay 20 + createsprite gUnknown_83E6D94, ANIM_TARGET, 5, 0, 1 + playsewithpan SE_W166, 63 + createsprite gUnknown_83E6D94, ANIM_TARGET, 5, 1, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 5, 1 + createvisualtask sub_80A9A20, 3, + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, 2, 10, 0, 26336 + waitforvisualfinish + end + +gUnknown_81D6301:: @ 81D6301 + createvisualtask sub_80F1C8C, 2, 1 + waitforvisualfinish + fadetobg 2 + waitbgfadeout + monbg_22 0 + createvisualtask sub_80B6BBC, 2, + waitbgfadein + loopsewithpan SE_W060, 63, 20, 3 + waitforvisualfinish + clearmonbg_23 0 + delay 1 + loadspritegfx 10273 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, -1, 0, 6, 27349 + createsprite gUnknown_83E6D94, ANIM_TARGET, 5, 0, 1 + createsprite gUnknown_83E6D94, ANIM_TARGET, 5, 1, 1 + createvisualtask AnimTask_ShakeMon2, 2, 1, 4, 0, 5, 1 + createvisualtask sub_80A9A20, 3, + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 4, -1, 6, 0, 27349 + waitforvisualfinish + restorebg + waitbgfadein + end + +gUnknown_81D637B:: @ 81D637B + monbg 0 + playsewithpan SE_W100, 192 + waitplaysewithpan SE_W107, 192, 48 + createvisualtask sub_80DF9BC, 2, 255 + waitsound + waitforvisualfinish + clearmonbg 0 + end + +gUnknown_81D6394:: @ 81D6394 + createvisualtask sub_80F1C8C, 2, 0 + waitforvisualfinish + loadspritegfx 10058 + loadspritegfx 10135 + delay 0 + waitplaysewithpan SE_W026, 192, 22 + createsprite gUnknown_840C210, ANIM_TARGET, 3, -17, 14, 8, 0 + delay 50 + monbg 3 + setalpha 12, 8 + delay 0 + playsewithpan SE_W003, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -4, -20, 1, 2 + waitforvisualfinish + clearmonbg 3 + blendoff + waitforvisualfinish + end + +gUnknown_81D63DC:: @ 81D63DC + createvisualtask sub_80F1CE4, 2, + waitforvisualfinish + jumpargeq 7, 0, gUnknown_81D63FD + jumpargeq 7, 1, gUnknown_81D6425 + jumpargeq 7, 2, gUnknown_81D644E + end + +gUnknown_81D63FD:: @ 81D63FD + playsewithpan SE_W036, 63 + createvisualtask sub_8099A78, 2, 16, 96, 0, 2 + waitforvisualfinish + playsewithpan SE_W036, 63 + createvisualtask sub_8099A78, 2, 16, -96, 0, 2 + end + +gUnknown_81D6425:: @ 81D6425 + loadspritegfx 10087 + createsprite gUnknown_83E3F04, ANIM_TARGET, 2, 1, 20, -20 + playsewithpan SE_W207B, 63 + waitforvisualfinish + delay 12 + createsprite gUnknown_83E3F04, ANIM_TARGET, 2, 1, -20, -20 + playsewithpan SE_W207B, 63 + end + +gUnknown_81D644E:: @ 81D644E + playsewithpan SE_W036, 63 + createvisualtask sub_8099A78, 2, 8, 136, 0, 2 + waitforvisualfinish + playsewithpan SE_W036, 63 + createvisualtask sub_8099A78, 2, 8, 136, 0, 2 + end + +gUnknown_81D6476:: @ 81D6476 + createvisualtask sub_80F16CC, 2, + jumpargeq 7, 1, gUnknown_81D6487 + +gUnknown_81D6485:: @ 81D6485 + waitforvisualfinish + return + +gUnknown_81D6487:: @ 81D6487 + createvisualtask sub_80F1420, 2, 1 + waitforvisualfinish + goto gUnknown_81D6485 + +gUnknown_81D6496:: @ 81D6496 + createvisualtask sub_80F16CC, 2, + jumpargeq 7, 1, gUnknown_81D64A7 + +gUnknown_81D64A5:: @ 81D64A5 + waitforvisualfinish + return + +gUnknown_81D64A7:: @ 81D64A7 + createvisualtask sub_80F1420, 2, 0 + waitforvisualfinish + goto gUnknown_81D64A5 + +Special_LevelUp:: @ 81D64B6 + playsewithpan SE_EXPMAX, 0 + createvisualtask sub_80EF0B4, 2, + delay 0 + createvisualtask sub_80EF1A0, 5, 0, 0 + waitforvisualfinish + createvisualtask sub_80EF180, 2, + end + +Special_SwitchOutPlayerMon:: @ 81D64D7 + createvisualtask sub_80EF344, 2, + delay 10 + createvisualtask sub_80EF298, 2, + end + +Special_SwitchOutOpponentMon:: @ 81D64E8 + createvisualtask sub_80EF344, 2, + delay 10 + createvisualtask sub_80EF298, 2, + end + +Special_BallThrow:: @ 81D64F9 + createvisualtask sub_80EF490, 2, + delay 0 + playsewithpan SE_NAGERU, 0 + createvisualtask sub_80EF5AC, 2, + createvisualtask sub_80EF4E0, 2, + jumpargeq 7, 65535, gUnknown_81D652D + jumpargeq 7, 65534, gUnknown_81D6555 + +gUnknown_81D6524:: @ 81D6524 + waitforvisualfinish + createvisualtask sub_80EF4B8, 2, + end + +gUnknown_81D652D:: @ 81D652D + loadspritegfx 10135 + delay 25 + monbg 3 + setalpha 12, 8 + delay 0 + playsewithpan SE_W003, 63 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -4, -20, 1, 2 + waitforvisualfinish + clearmonbg 3 + blendoff + goto gUnknown_81D6524 + +gUnknown_81D6555:: @ 81D6555 + delay 16 + createvisualtask AnimTask_WindUpLunge, 2, 1, 48, 6, 16, 48, -48, 16 + playsewithpan SE_W036, 63 + waitplaysewithpan SE_W036, 63, 48 + waitforvisualfinish + goto gUnknown_81D6524 + +Special_SafariBallThrow:: @ 81D657B + createvisualtask sub_80EF490, 2, + delay 0 + createvisualtask sub_80EF6D4, 2, + waitforvisualfinish + createvisualtask sub_80EF4B8, 2, + end + +Special_SubstituteToMon:: @ 81D6594 + createvisualtask sub_80F1420, 2, 1 + end + +Special_MonToSubstitute:: @ 81D659E + createvisualtask sub_80F1420, 2, 0 + end diff --git a/data/battle_anim_special.s b/data/battle_anim_special.s index 5efd1a31e..8a58d11a2 100644 --- a/data/battle_anim_special.s +++ b/data/battle_anim_special.s @@ -28,4 +28,10 @@ gUnknown_840C104:: @ 840C104 .incbin "baserom.gba", 0x40C104, 0xC0 gUnknown_840C1C4:: @ 840C1C4 - .incbin "baserom.gba", 0x40C1C4, 0x64 + .incbin "baserom.gba", 0x40C1C4, 0x28 + +gUnknown_840C1EC:: + .incbin "baserom.gba", 0x40C1EC, 0x24 + +gUnknown_840C210:: + .incbin "baserom.gba", 0x40C210, 0x18 \ No newline at end of file From ac8d134d1623333f8122dda4521feb57cdeb96e4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 13 Nov 2019 13:34:51 -0500 Subject: [PATCH 31/33] Bump baserom.ips --- baserom.ips | Bin 363408 -> 298703 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/baserom.ips b/baserom.ips index fc3961129ff5ac82c42d91c4ddfb76a8e1e0be75..242ae7399a4aafe566c48c3183a223e2d08c5890 100644 GIT binary patch delta 33 mcmbO*UF`f^A=UuL5ND6(V}II@{b2-RCLm_se(Vp+sXhP-jS(yW delta 65242 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 Date: Wed, 13 Nov 2019 16:13:35 -0500 Subject: [PATCH 32/33] Dump some of battle_anim_effects_misc --- baserom.ips | Bin 298703 -> 298582 bytes data/battle_anim_effects_misc.s | 24 ++++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/baserom.ips b/baserom.ips index 242ae7399a4aafe566c48c3183a223e2d08c5890..1150e077929390e7ee96577ecc161cdda0d92cde 100644 GIT binary patch delta 27 hcmX>orptN|;y}nHd;Z8JK{W1&G;zm;;EpfS3n}`GEM}e+GsO zO*@WY^3KsEyq{E<=Sc&Wt25uzS~RXk8V5UaSI)&d6)2gY_L4kjRG-p<6q H64C|$Smhr* diff --git a/data/battle_anim_effects_misc.s b/data/battle_anim_effects_misc.s index 1a1e53826..69424e5c6 100644 --- a/data/battle_anim_effects_misc.s +++ b/data/battle_anim_effects_misc.s @@ -7,16 +7,30 @@ .align 2 gUnknown_83E2964:: @ 83E2964 - .incbin "baserom.gba", 0x3E2964, 0x2C + .byte 0x02, 0x04, 0x01, 0x03 + +gUnknown_83E2968:: + obj_image_anim_frame 0x0000, 5 + obj_image_anim_frame 0x0002, 5 + obj_image_anim_frame 0x0004, 5 + obj_image_anim_frame 0x0006, 5 + obj_image_anim_frame 0x0008, 5 + obj_image_anim_frame 0x000a, 5 + obj_image_anim_frame 0x000c, 5 + obj_image_anim_frame 0x000e, 5 + obj_image_anim_jump 0x0000 + +gUnknown_83E298C:: + .4byte gUnknown_83E2968 gUnknown_83E2990:: - .incbin "baserom.gba", 0x3E2990, 0x18 + spr_template 10067, 10067, gOamData_83ACA08, gUnknown_83E298C, NULL, gDummySpriteAffineAnimTable, sub_80A22E8 gUnknown_83E29A8:: - .incbin "baserom.gba", 0x3E29A8, 0x18 + spr_template 10068, 10068, gOamData_83ACA08, gUnknown_83E298C, NULL, gDummySpriteAffineAnimTable, sub_80A22E8 gUnknown_83E29C0:: - .incbin "baserom.gba", 0x3E29C0, 0x18 + spr_template 10065, 10065, gOamData_83ACA08, gUnknown_83E298C, NULL, gDummySpriteAffineAnimTable, sub_80A22E8 gAnimCmd_83E29D8:: obj_image_anim_frame 0, 1 @@ -85,6 +99,7 @@ gUnknown_83E2A70:: gUnknown_83E2A88:: @ 83E2A88 spr_template 10147, 10147, gOamData_83AC9C8, gSpriteAnimTable_83E2A3C, NULL, gDummySpriteAffineAnimTable, sub_80A2430 +gSpriteTemplate_83E2AA0:: .incbin "baserom.gba", 0x3E2AA0, 0x1C gUnknown_83E2ABC:: @@ -768,3 +783,4 @@ gUnknown_83E6AB8:: gUnknown_83E6AD0:: .incbin "baserom.gba", 0x3E6AD0, 0x18 + From 01bf2fe2096ea02c8c8e42ac0aec0d8304532e24 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 13 Nov 2019 20:12:06 -0500 Subject: [PATCH 33/33] Newline at end of data/battle_anim_special.s --- data/battle_anim_special.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/battle_anim_special.s b/data/battle_anim_special.s index 8a58d11a2..341f6b4df 100644 --- a/data/battle_anim_special.s +++ b/data/battle_anim_special.s @@ -34,4 +34,4 @@ gUnknown_840C1EC:: .incbin "baserom.gba", 0x40C1EC, 0x24 gUnknown_840C210:: - .incbin "baserom.gba", 0x40C210, 0x18 \ No newline at end of file + .incbin "baserom.gba", 0x40C210, 0x18