From cb078ec3a2ac7f8292c3b9c80b492ee54aa0a9a3 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 30 Sep 2019 05:46:00 +0800 Subject: [PATCH 01/25] battle_anim_sound_tasks --- asm/battle_anim.s | 28 +- asm/battle_anim_effects_1.s | 10 +- asm/battle_anim_effects_2.s | 6 +- asm/battle_anim_effects_3.s | 18 +- asm/battle_anim_mons.s | 4 +- asm/battle_anim_sound_tasks.s | 927 ---------------------------------- asm/electric.s | 4 +- asm/psychic.s | 2 +- asm/rock.s | 4 +- include/battle_anim.h | 3 + ld_script.txt | 2 +- src/battle_anim_sound_tasks.c | 313 ++++++++++++ sym_ewram.txt | 2 +- 13 files changed, 356 insertions(+), 967 deletions(-) delete mode 100644 asm/battle_anim_sound_tasks.s create mode 100644 src/battle_anim_sound_tasks.c diff --git a/asm/battle_anim.s b/asm/battle_anim.s index 9d16e91e1..2edd4df5f 100644 --- a/asm/battle_anim.s +++ b/asm/battle_anim.s @@ -152,7 +152,7 @@ LaunchBattleAnimation: @ 80725D4 movs r4, 0 ldr r6, _08072618 @ =gBattlerPartyIndexes movs r7, 0x64 - ldr r5, _0807261C @ =gUnknown_2037F1C + ldr r5, _0807261C @ =gAnimBattlerSpecies _08072600: lsls r0, r4, 24 lsrs r0, 24 @@ -166,7 +166,7 @@ _08072600: b _0807262A .align 2, 0 _08072618: .4byte gBattlerPartyIndexes -_0807261C: .4byte gUnknown_2037F1C +_0807261C: .4byte gAnimBattlerSpecies _08072620: .4byte gEnemyParty _08072624: ldrh r0, [r6] @@ -2767,8 +2767,8 @@ ScriptCmd_changebg: @ 8073A24 _08073A40: .4byte gUnknown_2037ED4 thumb_func_end ScriptCmd_changebg - thumb_func_start sub_8073A44 -sub_8073A44: @ 8073A44 + thumb_func_start BattleAnimAdjustPanning +BattleAnimAdjustPanning: @ 8073A44 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 @@ -2867,7 +2867,7 @@ _08073AFC: pop {r4} pop {r1} bx r1 - thumb_func_end sub_8073A44 + thumb_func_end BattleAnimAdjustPanning thumb_func_start sub_8073B08 sub_8073B08: @ 8073B08 @@ -2916,8 +2916,8 @@ _08073B56: bx r1 thumb_func_end sub_8073B08 - thumb_func_start sub_8073B60 -sub_8073B60: @ 8073B60 + thumb_func_start KeepPanInRange +KeepPanInRange: @ 8073B60 push {lr} lsls r0, 16 lsrs r1, r0, 16 @@ -2939,7 +2939,7 @@ _08073B7A: bx r1 .align 2, 0 _08073B84: .4byte 0x0000ffc0 - thumb_func_end sub_8073B60 + thumb_func_end KeepPanInRange thumb_func_start CalculatePanIncrement CalculatePanIncrement: @ 8073B88 @@ -2994,7 +2994,7 @@ ScriptCmd_playsewithpan: @ 8073BC8 orrs r4, r0 movs r0, 0x2 ldrsb r0, [r1, r0] - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -3019,7 +3019,7 @@ ScriptCmd_setpan: @ 8073C00 str r0, [r4] movs r0, 0x1 ldrsb r0, [r1, r0] - bl sub_8073A44 + bl BattleAnimAdjustPanning lsls r0, 24 asrs r0, 24 bl SE12PanpotControl @@ -3058,14 +3058,14 @@ ScriptCmd_panse_1B: @ 8073C2C ldrb r7, [r1, 0x5] movs r0, 0x2 ldrsb r0, [r1, r0] - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r5, r0, 0 lsls r5, 24 lsrs r5, 24 lsls r4, 24 asrs r4, 24 adds r0, r4, 0 - bl sub_8073A44 + bl BattleAnimAdjustPanning mov r8, r0 lsls r5, 24 asrs r5, 24 @@ -3387,7 +3387,7 @@ ScriptCmd_loopsewithpan: @ 8073ED0 mov r9, r2 movs r0, 0x2 ldrsb r0, [r1, r0] - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -3498,7 +3498,7 @@ ScriptCmd_waitplaysewithpan: @ 8073FB4 mov r8, r0 movs r0, 0x2 ldrsb r0, [r1, r0] - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 diff --git a/asm/battle_anim_effects_1.s b/asm/battle_anim_effects_1.s index 2d436f3ef..b09edc9ae 100644 --- a/asm/battle_anim_effects_1.s +++ b/asm/battle_anim_effects_1.s @@ -2672,7 +2672,7 @@ _080A3756: cmp r0, 0 bne _080A378A movs r0, 0x3F - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -2690,7 +2690,7 @@ _080A378A: str r0, [r4, 0x1C] movs r0, 0x40 negs r0, r0 - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -5915,7 +5915,7 @@ _080A5004: adds r0, r1 strh r0, [r5, 0x38] movs r0, 0x3F - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -6126,7 +6126,7 @@ _080A51A4: movs r2, 0x4 bl LoadPalette movs r0, 0x3F - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -7436,7 +7436,7 @@ sub_80A5B7C: @ 80A5B7C strh r5, [r4, 0x34] strh r5, [r4, 0x36] subs r0, 0x42 - bl sub_8073A44 + bl BattleAnimAdjustPanning lsls r0, 24 asrs r0, 24 strh r0, [r4, 0x38] diff --git a/asm/battle_anim_effects_2.s b/asm/battle_anim_effects_2.s index 722ff51ba..2fac4c956 100644 --- a/asm/battle_anim_effects_2.s +++ b/asm/battle_anim_effects_2.s @@ -1118,7 +1118,7 @@ _080A7690: strh r0, [r4, 0xA] movs r0, 0x3F negs r0, r0 - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -1789,7 +1789,7 @@ sub_80A7C1C: @ 80A7C1C push {r4,lr} adds r4, r0, 0 movs r0, 0x3F - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -3626,7 +3626,7 @@ sub_80A8A1C: @ 80A8A1C adds r0, 0x2 strh r0, [r4, 0x38] movs r0, 0x3F - bl sub_8073A44 + bl BattleAnimAdjustPanning lsls r0, 24 asrs r0, 24 strh r0, [r4, 0x3A] diff --git a/asm/battle_anim_effects_3.s b/asm/battle_anim_effects_3.s index d1356c619..192e2b15f 100644 --- a/asm/battle_anim_effects_3.s +++ b/asm/battle_anim_effects_3.s @@ -1414,7 +1414,7 @@ sub_80DED48: @ 80DED48 bne _080DEDA6 movs r0, 0x40 negs r0, r0 - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -2109,7 +2109,7 @@ _080DF2A8: lsrs r4, r0, 24 movs r0, 0x40 negs r0, r0 - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -3603,7 +3603,7 @@ _080DFE66: strh r0, [r1, 0x8] movs r0, 0x40 negs r0, r0 - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -10554,7 +10554,7 @@ _080E3412: bne _080E34C6 movs r0, 0x40 negs r0, r0 - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -10627,7 +10627,7 @@ _080E34A4: bne _080E34C6 movs r0, 0x40 negs r0, r0 - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -10724,7 +10724,7 @@ _080E3564: cmp r0, 0 blt _080E365E movs r0, 0x3F - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -10753,7 +10753,7 @@ _080E3588: cmp r1, 0x7F ble _080E365E movs r0, 0x3F - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -10797,7 +10797,7 @@ _080E35F8: cmp r0, 0x8 ble _080E365E movs r0, 0x3F - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 @@ -11883,7 +11883,7 @@ _080E3E96: cmp r1, r0 bne _080E3F28 movs r0, 0x3F - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 diff --git a/asm/battle_anim_mons.s b/asm/battle_anim_mons.s index ddb5d6977..81716bdc8 100644 --- a/asm/battle_anim_mons.s +++ b/asm/battle_anim_mons.s @@ -512,14 +512,14 @@ sub_8074844: @ 8074844 ldrh r0, [r1, 0x2] cmp r0, 0 bne _0807487C - ldr r1, _08074878 @ =gUnknown_2037F1C + ldr r1, _08074878 @ =gAnimBattlerSpecies lsls r0, r2, 1 adds r0, r1 ldrh r1, [r0] b _0807487E .align 2, 0 _08074874: .4byte gBattleSpritesDataPtr -_08074878: .4byte gUnknown_2037F1C +_08074878: .4byte gAnimBattlerSpecies _0807487C: ldrh r1, [r1, 0x2] _0807487E: diff --git a/asm/battle_anim_sound_tasks.s b/asm/battle_anim_sound_tasks.s deleted file mode 100644 index dc5517ca0..000000000 --- a/asm/battle_anim_sound_tasks.s +++ /dev/null @@ -1,927 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80DCE10 -sub_80DCE10: @ 80DCE10 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080DCE6C @ =gTasks - lsls r6, r0, 2 - adds r6, r0 - lsls r6, 3 - adds r6, r1 - ldr r1, _080DCE70 @ =gBattleAnimArgs - ldrh r0, [r1] - strh r0, [r6, 0x8] - ldrh r0, [r1, 0x2] - strh r0, [r6, 0xA] - movs r0, 0x40 - negs r0, r0 - bl sub_8073A44 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x3F - bl sub_8073A44 - adds r5, r0, 0 - lsls r4, 24 - asrs r4, 24 - lsls r5, 24 - asrs r5, 24 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x2 - bl CalculatePanIncrement - strh r4, [r6, 0xC] - strh r5, [r6, 0xE] - lsls r0, 24 - asrs r0, 24 - strh r0, [r6, 0x10] - movs r0, 0xA - strh r0, [r6, 0x1C] - ldr r0, _080DCE74 @ =sub_80DCE78 - str r0, [r6] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080DCE6C: .4byte gTasks -_080DCE70: .4byte gBattleAnimArgs -_080DCE74: .4byte sub_80DCE78 - thumb_func_end sub_80DCE10 - - thumb_func_start sub_80DCE78 -sub_80DCE78: @ 80DCE78 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080DCEA8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - ldrh r5, [r4, 0xC] - ldrb r6, [r4, 0x10] - ldrh r0, [r4, 0x1E] - adds r0, 0x1 - movs r1, 0 - strh r0, [r4, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6F - bne _080DCEB0 - movs r0, 0x5 - strh r0, [r4, 0x1C] - strh r1, [r4, 0x1E] - ldr r0, _080DCEAC @ =sub_80DCEE4 - str r0, [r4] - b _080DCEDE - .align 2, 0 -_080DCEA8: .4byte gTasks -_080DCEAC: .4byte sub_80DCEE4 -_080DCEB0: - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - strh r0, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xB - bne _080DCECA - strh r1, [r4, 0x1C] - ldrh r0, [r4, 0x8] - lsls r1, r5, 24 - asrs r1, 24 - bl PlaySE12WithPanning -_080DCECA: - lsls r1, r6, 24 - asrs r1, 24 - lsls r0, r5, 16 - asrs r0, 16 - adds r0, r1 - lsls r0, 16 - asrs r0, 16 - bl sub_8073B60 - strh r0, [r4, 0xC] -_080DCEDE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80DCE78 - - thumb_func_start sub_80DCEE4 -sub_80DCEE4: @ 80DCEE4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080DCF34 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - strh r0, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - bne _080DCF2C - movs r0, 0 - strh r0, [r4, 0x1C] - movs r0, 0x3F - bl sub_8073A44 - adds r1, r0, 0 - ldrh r0, [r4, 0xA] - lsls r1, 24 - asrs r1, 24 - bl PlaySE12WithPanning - ldrh r0, [r4, 0x1E] - adds r0, 0x1 - strh r0, [r4, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - bne _080DCF2C - adds r0, r5, 0 - bl DestroyAnimSoundTask -_080DCF2C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DCF34: .4byte gTasks - thumb_func_end sub_80DCEE4 - - thumb_func_start mas_80DCF38 -mas_80DCF38: @ 80DCF38 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r8, r0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _080DCFDC @ =gBattleAnimArgs - ldrh r1, [r0] - str r1, [sp] - ldrb r5, [r0, 0x4] - ldrb r6, [r0, 0x6] - ldrb r3, [r0, 0x8] - mov r10, r3 - ldrb r7, [r0, 0xA] - ldrb r1, [r0, 0xC] - mov r9, r1 - ldrb r0, [r0, 0x2] - lsls r0, 24 - asrs r0, 24 - bl sub_8073A44 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - asrs r5, 24 - adds r0, r5, 0 - bl sub_8073A44 - adds r5, r0, 0 - lsls r4, 24 - asrs r4, 24 - lsls r5, 24 - asrs r5, 24 - lsls r6, 24 - asrs r6, 24 - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl CalculatePanIncrement - ldr r2, _080DCFE0 @ =gTasks - mov r3, r8 - lsls r1, r3, 2 - add r1, r8 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - mov r6, sp - ldrh r6, [r6] - strh r6, [r1, 0x8] - strh r4, [r1, 0xA] - strh r5, [r1, 0xC] - lsls r0, 24 - asrs r0, 24 - strh r0, [r1, 0xE] - mov r0, r10 - strh r0, [r1, 0x10] - strh r7, [r1, 0x12] - mov r3, r9 - strh r3, [r1, 0x14] - strh r2, [r1, 0x1C] - strh r4, [r1, 0x1E] - strh r3, [r1, 0x20] - ldr r2, _080DCFE4 @ =sub_80DCFE8 - str r2, [r1] - mov r0, r8 - bl _call_via_r2 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080DCFDC: .4byte gBattleAnimArgs -_080DCFE0: .4byte gTasks -_080DCFE4: .4byte sub_80DCFE8 - thumb_func_end mas_80DCF38 - - thumb_func_start sub_80DCFE8 -sub_80DCFE8: @ 80DCFE8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080DD02C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r0, [r4, 0x20] - adds r1, r0, 0x1 - strh r1, [r4, 0x20] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x14 - ldrsh r1, [r4, r2] - cmp r0, r1 - bne _080DD030 - movs r0, 0 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x8] - movs r1, 0x1E - ldrsb r1, [r4, r1] - bl PlaySE12WithPanning - ldrh r0, [r4, 0x10] - subs r0, 0x1 - strh r0, [r4, 0x10] - lsls r0, 16 - cmp r0, 0 - bne _080DD030 - adds r0, r5, 0 - bl DestroyAnimSoundTask - b _080DD062 - .align 2, 0 -_080DD02C: .4byte gTasks -_080DD030: - ldr r1, _080DD068 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r0, [r4, 0x1C] - adds r1, r0, 0x1 - strh r1, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x12 - ldrsh r1, [r4, r2] - cmp r0, r1 - bne _080DD062 - movs r0, 0 - strh r0, [r4, 0x1C] - ldrh r0, [r4, 0xE] - ldrh r1, [r4, 0x1E] - adds r0, r1 - strh r0, [r4, 0x1E] - movs r2, 0x1E - ldrsh r0, [r4, r2] - bl sub_8073B60 - strh r0, [r4, 0x1E] -_080DD062: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DD068: .4byte gTasks - thumb_func_end sub_80DCFE8 - - thumb_func_start sub_80DD06C -sub_80DD06C: @ 80DD06C - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0x40 - negs r0, r0 - bl sub_8073A44 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _080DD090 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080DD098 - ldr r0, _080DD094 @ =gBattleAnimAttacker - ldrb r4, [r0] - b _080DD0BE - .align 2, 0 -_080DD090: .4byte gBattleAnimArgs -_080DD094: .4byte gBattleAnimAttacker -_080DD098: - cmp r0, 0x1 - bne _080DD0A8 - ldr r0, _080DD0A4 @ =gBattleAnimTarget - ldrb r4, [r0] - b _080DD0BE - .align 2, 0 -_080DD0A4: .4byte gBattleAnimTarget -_080DD0A8: - cmp r0, 0x2 - bne _080DD0B4 - ldr r0, _080DD0B0 @ =gBattleAnimAttacker - b _080DD0B6 - .align 2, 0 -_080DD0B0: .4byte gBattleAnimAttacker -_080DD0B4: - ldr r0, _080DD0E0 @ =gBattleAnimTarget -_080DD0B6: - ldrb r1, [r0] - movs r0, 0x2 - adds r4, r0, 0 - eors r4, r1 -_080DD0BE: - ldr r0, _080DD0E4 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0x1 - beq _080DD0CC - cmp r0, 0x3 - bne _080DD0E8 -_080DD0CC: - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - bne _080DD0E8 - adds r0, r5, 0 - bl DestroyAnimVisualTask - b _080DD13A - .align 2, 0 -_080DD0E0: .4byte gBattleAnimTarget -_080DD0E4: .4byte gBattleAnimArgs -_080DD0E8: - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080DD10C - ldr r1, _080DD104 @ =gBattlerPartyIndexes - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080DD108 @ =gEnemyParty - b _080DD11A - .align 2, 0 -_080DD104: .4byte gBattlerPartyIndexes -_080DD108: .4byte gEnemyParty -_080DD10C: - ldr r1, _080DD140 @ =gBattlerPartyIndexes - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080DD144 @ =gPlayerParty -_080DD11A: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - beq _080DD134 - lsls r1, r6, 24 - asrs r1, 24 - movs r2, 0x3 - bl PlayCry3 -_080DD134: - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080DD13A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080DD140: .4byte gBattlerPartyIndexes -_080DD144: .4byte gPlayerParty - thumb_func_end sub_80DD06C - - thumb_func_start sub_80DD148 -sub_80DD148: @ 80DD148 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r0, 0x40 - negs r0, r0 - bl sub_8073A44 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080DD16C @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080DD174 - ldr r0, _080DD170 @ =gBattleAnimAttacker - ldrb r4, [r0] - b _080DD19A - .align 2, 0 -_080DD16C: .4byte gBattleAnimArgs -_080DD170: .4byte gBattleAnimAttacker -_080DD174: - cmp r0, 0x1 - bne _080DD184 - ldr r0, _080DD180 @ =gBattleAnimTarget - ldrb r4, [r0] - b _080DD19A - .align 2, 0 -_080DD180: .4byte gBattleAnimTarget -_080DD184: - cmp r0, 0x2 - bne _080DD190 - ldr r0, _080DD18C @ =gBattleAnimAttacker - b _080DD192 - .align 2, 0 -_080DD18C: .4byte gBattleAnimAttacker -_080DD190: - ldr r0, _080DD1BC @ =gBattleAnimTarget -_080DD192: - ldrb r1, [r0] - movs r0, 0x2 - adds r4, r0, 0 - eors r4, r1 -_080DD19A: - ldr r0, _080DD1C0 @ =gBattleAnimArgs - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0x1 - beq _080DD1A8 - cmp r0, 0x3 - bne _080DD1C4 -_080DD1A8: - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - bne _080DD1C4 - adds r0, r6, 0 - bl DestroyAnimVisualTask - b _080DD26A - .align 2, 0 -_080DD1BC: .4byte gBattleAnimTarget -_080DD1C0: .4byte gBattleAnimArgs -_080DD1C4: - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080DD1E8 - ldr r1, _080DD1E0 @ =gBattlerPartyIndexes - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080DD1E4 @ =gEnemyParty - b _080DD1F6 - .align 2, 0 -_080DD1E0: .4byte gBattlerPartyIndexes -_080DD1E4: .4byte gEnemyParty -_080DD1E8: - ldr r1, _080DD234 @ =gBattlerPartyIndexes - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080DD238 @ =gPlayerParty -_080DD1F6: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r3, r0, 16 - ldr r1, _080DD23C @ =gTasks - lsls r2, r6, 2 - adds r0, r2, r6 - lsls r0, 3 - adds r0, r1 - ldr r4, _080DD240 @ =gBattleAnimArgs - ldrh r1, [r4, 0x2] - strh r1, [r0, 0x8] - strh r3, [r0, 0xA] - lsls r1, r5, 24 - asrs r1, 24 - strh r1, [r0, 0xC] - adds r5, r2, 0 - cmp r3, 0 - beq _080DD264 - movs r2, 0x2 - ldrsh r0, [r4, r2] - cmp r0, 0xFF - bne _080DD244 - adds r0, r3, 0 - movs r2, 0x9 - bl PlayCry3 - b _080DD24C - .align 2, 0 -_080DD234: .4byte gBattlerPartyIndexes -_080DD238: .4byte gPlayerParty -_080DD23C: .4byte gTasks -_080DD240: .4byte gBattleAnimArgs -_080DD244: - adds r0, r3, 0 - movs r2, 0x7 - bl PlayCry3 -_080DD24C: - ldr r0, _080DD25C @ =gTasks - adds r1, r5, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _080DD260 @ =sub_80DD270 - str r0, [r1] - b _080DD26A - .align 2, 0 -_080DD25C: .4byte gTasks -_080DD260: .4byte sub_80DD270 -_080DD264: - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080DD26A: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80DD148 - - thumb_func_start sub_80DD270 -sub_80DD270: @ 80DD270 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r4, r0, 24 - mov r9, r4 - ldr r1, _080DD2A0 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r1 - ldrh r6, [r1, 0xA] - mov r8, r6 - ldrb r5, [r1, 0xC] - adds r7, r5, 0 - ldrh r2, [r1, 0x1A] - movs r3, 0x1A - ldrsh r0, [r1, r3] - cmp r0, 0x1 - bgt _080DD2A4 - adds r0, r2, 0x1 - strh r0, [r1, 0x1A] - b _080DD2E6 - .align 2, 0 -_080DD2A0: .4byte gTasks -_080DD2A4: - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0xFF - bne _080DD2CA - bl IsCryPlaying - lsls r0, 24 - cmp r0, 0 - bne _080DD2E6 - lsls r1, r5, 24 - asrs r1, 24 - adds r0, r6, 0 - movs r2, 0xA - bl PlayCry3 - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _080DD2E6 -_080DD2CA: - bl IsCryPlaying - lsls r0, 24 - cmp r0, 0 - bne _080DD2E6 - lsls r1, r7, 24 - asrs r1, 24 - mov r0, r8 - movs r2, 0x8 - bl PlayCry3 - mov r0, r9 - bl DestroyAnimVisualTask -_080DD2E6: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80DD270 - - thumb_func_start sub_80DD2F4 -sub_80DD2F4: @ 80DD2F4 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - ldr r1, _080DD318 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0x1A] - movs r3, 0x1A - ldrsh r0, [r1, r3] - cmp r0, 0x1 - bgt _080DD31C - adds r0, r2, 0x1 - strh r0, [r1, 0x1A] - b _080DD32C - .align 2, 0 -_080DD318: .4byte gTasks -_080DD31C: - bl IsCryPlaying - lsls r0, 24 - cmp r0, 0 - bne _080DD32C - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080DD32C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80DD2F4 - - thumb_func_start sub_80DD334 -sub_80DD334: @ 80DD334 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0x40 - negs r0, r0 - bl sub_8073A44 - ldr r2, _080DD374 @ =gUnknown_2037F1C - ldr r1, _080DD378 @ =gBattleAnimAttacker - ldrb r1, [r1] - lsls r1, 1 - adds r1, r2 - ldrh r3, [r1] - ldr r2, _080DD37C @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r4, r1, r2 - strh r3, [r4, 0xA] - lsls r0, 24 - asrs r1, r0, 24 - strh r1, [r4, 0xC] - cmp r3, 0 - beq _080DD384 - adds r0, r3, 0 - movs r2, 0x4 - bl PlayCry3 - ldr r0, _080DD380 @ =sub_80DD390 - str r0, [r4] - b _080DD38A - .align 2, 0 -_080DD374: .4byte gUnknown_2037F1C -_080DD378: .4byte gBattleAnimAttacker -_080DD37C: .4byte gTasks -_080DD380: .4byte sub_80DD390 -_080DD384: - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080DD38A: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80DD334 - - thumb_func_start sub_80DD390 -sub_80DD390: @ 80DD390 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - ldr r1, _080DD3B4 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r1, [r4, 0x1A] - movs r2, 0x1A - ldrsh r0, [r4, r2] - cmp r0, 0x1 - bgt _080DD3B8 - adds r0, r1, 0x1 - strh r0, [r4, 0x1A] - b _080DD3D4 - .align 2, 0 -_080DD3B4: .4byte gTasks -_080DD3B8: - bl IsCryPlaying - lsls r0, 24 - cmp r0, 0 - bne _080DD3D4 - ldrh r0, [r4, 0xA] - movs r1, 0xC - ldrsb r1, [r4, r1] - movs r2, 0x6 - bl PlayCry3 - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080DD3D4: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80DD390 - - thumb_func_start sub_80DD3DC -sub_80DD3DC: @ 80DD3DC - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080DD40C @ =gBattleAnimArgs - ldrh r5, [r0] - ldrb r0, [r0, 0x2] - lsls r0, 24 - asrs r0, 24 - bl sub_8073A44 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - adds r0, r5, 0 - bl PlaySE1WithPanning - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DD40C: .4byte gBattleAnimArgs - thumb_func_end sub_80DD3DC - - thumb_func_start sub_80DD410 -sub_80DD410: @ 80DD410 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080DD440 @ =gBattleAnimArgs - ldrh r5, [r0] - ldrb r0, [r0, 0x2] - lsls r0, 24 - asrs r0, 24 - bl sub_8073A44 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - adds r0, r5, 0 - bl PlaySE2WithPanning - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DD440: .4byte gBattleAnimArgs - thumb_func_end sub_80DD410 - - thumb_func_start sub_80DD444 -sub_80DD444: @ 80DD444 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - mov r8, r0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _080DD4C8 @ =gBattleAnimArgs - ldrb r5, [r0, 0x2] - ldrb r6, [r0, 0x4] - ldrh r1, [r0, 0x6] - mov r9, r1 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - bl sub_8073A44 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - asrs r5, 24 - adds r0, r5, 0 - bl sub_8073A44 - adds r5, r0, 0 - lsls r4, 24 - asrs r4, 24 - lsls r5, 24 - asrs r5, 24 - lsls r6, 24 - asrs r6, 24 - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl CalculatePanIncrement - ldr r2, _080DD4CC @ =gTasks - mov r3, r8 - lsls r1, r3, 2 - add r1, r8 - lsls r1, 3 - adds r1, r2 - movs r2, 0 - strh r4, [r1, 0xA] - strh r5, [r1, 0xC] - lsls r0, 24 - asrs r0, 24 - strh r0, [r1, 0xE] - mov r0, r9 - strh r0, [r1, 0x12] - strh r2, [r1, 0x1C] - strh r4, [r1, 0x1E] - ldr r2, _080DD4D0 @ =sub_80DD4D4 - str r2, [r1] - mov r0, r8 - bl _call_via_r2 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080DD4C8: .4byte gBattleAnimArgs -_080DD4CC: .4byte gTasks -_080DD4D0: .4byte sub_80DD4D4 - thumb_func_end sub_80DD444 - - thumb_func_start sub_80DD4D4 -sub_80DD4D4: @ 80DD4D4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - ldr r1, _080DD52C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r2, [r4, 0xE] - ldrh r0, [r4, 0x1C] - adds r1, r0, 0x1 - strh r1, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x12 - ldrsh r1, [r4, r3] - cmp r0, r1 - bne _080DD50E - movs r0, 0 - strh r0, [r4, 0x1C] - ldrh r1, [r4, 0x1E] - adds r0, r2, r1 - strh r0, [r4, 0x1E] - movs r2, 0x1E - ldrsh r0, [r4, r2] - bl sub_8073B60 - strh r0, [r4, 0x1E] -_080DD50E: - ldr r1, _080DD530 @ =gUnknown_2037F24 - ldrh r0, [r4, 0x1E] - strb r0, [r1] - movs r3, 0x1E - ldrsh r1, [r4, r3] - movs r2, 0xC - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _080DD526 - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080DD526: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080DD52C: .4byte gTasks -_080DD530: .4byte gUnknown_2037F24 - thumb_func_end sub_80DD4D4 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/electric.s b/asm/electric.s index d020459d5..44e85bb50 100644 --- a/asm/electric.s +++ b/asm/electric.s @@ -2279,12 +2279,12 @@ _080AED20: movs r0, 0xC strh r0, [r5, 0x1E] subs r0, 0x4C - bl sub_8073A44 + bl BattleAnimAdjustPanning lsls r0, 24 asrs r0, 24 strh r0, [r5, 0x20] movs r0, 0x3F - bl sub_8073A44 + bl BattleAnimAdjustPanning lsls r0, 24 asrs r0, 24 strh r0, [r5, 0x22] diff --git a/asm/psychic.s b/asm/psychic.s index cff45fc8c..32c5bed30 100644 --- a/asm/psychic.s +++ b/asm/psychic.s @@ -2099,7 +2099,7 @@ _080B3EFC: beq _080B3FA4 movs r0, 0x40 negs r0, r0 - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r1, r0, 0 lsls r1, 24 asrs r1, 24 diff --git a/asm/rock.s b/asm/rock.s index c0da2bcfa..a40f4935d 100644 --- a/asm/rock.s +++ b/asm/rock.s @@ -806,13 +806,13 @@ _080B4C7A: strh r4, [r6, 0x16] movs r0, 0x40 negs r0, r0 - bl sub_8073A44 + bl BattleAnimAdjustPanning adds r4, r0, 0 lsls r4, 24 asrs r4, 8 lsrs r4, 16 movs r0, 0x3F - bl sub_8073A44 + bl BattleAnimAdjustPanning lsls r0, 24 strh r4, [r6, 0x22] asrs r0, 24 diff --git a/include/battle_anim.h b/include/battle_anim.h index 3536e89f4..e1cdc1c13 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -65,6 +65,8 @@ extern u8 gUnknown_02038440; extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT]; extern u16 gAnimMovePower; extern s32 gAnimMoveDmg; +extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT]; +extern u8 gUnknown_2037F24; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); @@ -80,6 +82,7 @@ s8 BattleAnimAdjustPanning2(s8 pan); s16 sub_80A52EC(s16 a); s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan); bool8 IsBattlerSpriteVisible(u8 battlerId); +s16 KeepPanInRange(s16 a, s32 oldPan); // battle_anim_80FE840.s void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value); diff --git a/ld_script.txt b/ld_script.txt index fbf00f9c1..a09d3f607 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -200,7 +200,7 @@ SECTIONS { src/save.o(.text); src/mystery_event_script.o(.text); asm/field_effect_helpers.o(.text); - asm/battle_anim_sound_tasks.o(.text); + src/battle_anim_sound_tasks.o(.text); src/battle_controller_safari.o(.text); src/fldeff_sweetscent.o(.text); asm/battle_anim_effects_3.o(.text); diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c new file mode 100644 index 000000000..e67c91bfa --- /dev/null +++ b/src/battle_anim_sound_tasks.c @@ -0,0 +1,313 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "sound.h" +#include "task.h" +#include "constants/battle_anim.h" +#include "constants/species.h" + +static void sub_80DCE78(u8 taskId); +static void sub_80DCEE4(u8 taskId); +static void sub_80DCFE8(u8 taskId); +static void sub_80DD270(u8 taskId); +static void sub_80DD390(u8 taskId); +static void sub_80DD4D4(u8 taskId); + +void sub_80DCE10(u8 taskId) +{ + s8 pan1, pan2, panIncrement; + + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + pan1 = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER); + pan2 = BattleAnimAdjustPanning(SOUND_PAN_TARGET); + panIncrement = CalculatePanIncrement(pan1, pan2, 2); + gTasks[taskId].data[2] = pan1; + gTasks[taskId].data[3] = pan2; + gTasks[taskId].data[4] = panIncrement; + gTasks[taskId].data[10] = 10; + gTasks[taskId].func = sub_80DCE78; +} + +static void sub_80DCE78(u8 taskId) +{ + s16 pan = gTasks[taskId].data[2]; + s8 panIncrement = gTasks[taskId].data[4]; + + if (++gTasks[taskId].data[11] == 111) + { + gTasks[taskId].data[10] = 5; + gTasks[taskId].data[11] = 0; + gTasks[taskId].func = sub_80DCEE4; + } + else + { + if (++gTasks[taskId].data[10] == 11) + { + gTasks[taskId].data[10] = 0; + PlaySE12WithPanning(gTasks[taskId].data[0], pan); + } + pan += panIncrement; + gTasks[taskId].data[2] = KeepPanInRange(pan, panIncrement); + } +} + +static void sub_80DCEE4(u8 taskId) +{ + if (++gTasks[taskId].data[10] == 6) + { + s8 pan; + + gTasks[taskId].data[10] = 0; + pan = BattleAnimAdjustPanning(SOUND_PAN_TARGET); + PlaySE12WithPanning(gTasks[taskId].data[1], pan); + if (++gTasks[taskId].data[11] == 2) + DestroyAnimSoundTask(taskId); + } +} + +void mas_80DCF38(u8 taskId) +{ + u16 songId = gBattleAnimArgs[0]; + s8 targetPan = gBattleAnimArgs[2]; + s8 panIncrement = gBattleAnimArgs[3]; + u8 r10 = gBattleAnimArgs[4]; + u8 r7 = gBattleAnimArgs[5]; + u8 r9 = gBattleAnimArgs[6]; + s8 sourcePan = BattleAnimAdjustPanning(gBattleAnimArgs[1]); + + targetPan = BattleAnimAdjustPanning(targetPan); + panIncrement = CalculatePanIncrement(sourcePan, targetPan, panIncrement); + gTasks[taskId].data[0] = songId; + gTasks[taskId].data[1] = sourcePan; + gTasks[taskId].data[2] = targetPan; + gTasks[taskId].data[3] = panIncrement; + gTasks[taskId].data[4] = r10; + gTasks[taskId].data[5] = r7; + gTasks[taskId].data[6] = r9; + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11] = sourcePan; + gTasks[taskId].data[12] = r9; + gTasks[taskId].func = sub_80DCFE8; + sub_80DCFE8(taskId); +} + +static void sub_80DCFE8(u8 taskId) +{ + if (gTasks[taskId].data[12]++ == gTasks[taskId].data[6]) + { + gTasks[taskId].data[12] = 0; + PlaySE12WithPanning(gTasks[taskId].data[0], gTasks[taskId].data[11]); + if (--gTasks[taskId].data[4] == 0) + { + DestroyAnimSoundTask(taskId); + return; + } + } + if (gTasks[taskId].data[10]++ == gTasks[taskId].data[5]) + { + u16 dPan, oldPan; + + gTasks[taskId].data[10] = 0; + dPan = gTasks[taskId].data[3]; + oldPan = gTasks[taskId].data[11] ; + gTasks[taskId].data[11] = dPan + oldPan; + gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan); + } +} + +void sub_80DD06C(u8 taskId) +{ + u16 species = SPECIES_NONE; + u8 battlerId; + s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER); + + // Get wanted battler. + if (gBattleAnimArgs[0] == ANIM_ATTACKER) + battlerId = gBattleAnimAttacker; + else if (gBattleAnimArgs[0] == ANIM_TARGET) + battlerId = gBattleAnimTarget; + else if (gBattleAnimArgs[0] == ANIM_ATK_PARTNER) + battlerId = BATTLE_PARTNER(gBattleAnimAttacker); + else + battlerId = BATTLE_PARTNER(gBattleAnimTarget); + // Check if battler is visible. + if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) + && !IsBattlerSpriteVisible(battlerId)) + { + DestroyAnimVisualTask(taskId); + return; + } + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + else + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + if (species != SPECIES_NONE) + PlayCry3(species, pan, 3); + DestroyAnimVisualTask(taskId); +} + +void sub_80DD148(u8 taskId) +{ + u16 species = SPECIES_NONE; + u8 battlerId; + s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER); + + // Get wanted battler. + if (gBattleAnimArgs[0] == ANIM_ATTACKER) + battlerId = gBattleAnimAttacker; + else if (gBattleAnimArgs[0] == ANIM_TARGET) + battlerId = gBattleAnimTarget; + else if (gBattleAnimArgs[0] == ANIM_ATK_PARTNER) + battlerId = BATTLE_PARTNER(gBattleAnimAttacker); + else + battlerId = BATTLE_PARTNER(gBattleAnimTarget); + // Check if battler is visible. + if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) + && !IsBattlerSpriteVisible(battlerId)) + { + DestroyAnimVisualTask(taskId); + return; + } + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + else + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + gTasks[taskId].data[0] = gBattleAnimArgs[1]; + gTasks[taskId].data[1] = species; + gTasks[taskId].data[2] = pan; + if (species != SPECIES_NONE) + { + if (gBattleAnimArgs[1] == TASK_NONE) + PlayCry3(species, pan, 9); + else + PlayCry3(species, pan, 7); + gTasks[taskId].func = sub_80DD270; + } + else + { + DestroyAnimVisualTask(taskId); + } +} + +static void sub_80DD270(u8 taskId) +{ + u16 species = gTasks[taskId].data[1]; + s8 pan = gTasks[taskId].data[2]; + + if (gTasks[taskId].data[9] < 2) + { + ++gTasks[taskId].data[9]; + } + else if (gTasks[taskId].data[0] == TASK_NONE) + { + if (!IsCryPlaying()) + { + PlayCry3(species, pan, 10); + DestroyAnimVisualTask(taskId); + } + } + else if (!IsCryPlaying()) + { + PlayCry3(species, pan, 8); + DestroyAnimVisualTask(taskId); + } +} + +void sub_80DD2F4(u8 taskId) +{ + if (gTasks[taskId].data[9] < 2) + ++gTasks[taskId].data[9]; + else if (!IsCryPlaying()) + DestroyAnimVisualTask(taskId); +} + +void sub_80DD334(u8 taskId) +{ + u16 species; + s8 pan; + + pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER); + species = gAnimBattlerSpecies[gBattleAnimAttacker]; + gTasks[taskId].data[1] = species; + gTasks[taskId].data[2] = pan; + if (species != SPECIES_NONE) + { + PlayCry3(species, pan, 4); + gTasks[taskId].func = sub_80DD390; + } + else + { + DestroyAnimVisualTask(taskId); + } +} + +static void sub_80DD390(u8 taskId) +{ + + if (gTasks[taskId].data[9] < 2) + { + ++gTasks[taskId].data[9]; + } + else if (!IsCryPlaying()) + { + u16 species = gTasks[taskId].data[1]; + s8 pan = gTasks[taskId].data[2]; + + PlayCry3(species, pan, 6); + DestroyAnimVisualTask(taskId); + } +} + +void sub_80DD3DC(u8 taskId) +{ + u16 songId = gBattleAnimArgs[0]; + s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]); + + PlaySE1WithPanning(songId, pan); + DestroyAnimVisualTask(taskId); +} + +void sub_80DD410(u8 taskId) +{ + u16 songId = gBattleAnimArgs[0]; + s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]); + + PlaySE2WithPanning(songId, pan); + DestroyAnimVisualTask(taskId); +} + +void sub_80DD444(u8 taskId) +{ + s8 targetPan = gBattleAnimArgs[1]; + s8 panIncrement = gBattleAnimArgs[2]; + u16 r9 = gBattleAnimArgs[3]; + s8 sourcePan = BattleAnimAdjustPanning(gBattleAnimArgs[0]); + + targetPan = BattleAnimAdjustPanning(targetPan); + panIncrement = CalculatePanIncrement(sourcePan, targetPan, panIncrement); + gTasks[taskId].data[1] = sourcePan; + gTasks[taskId].data[2] = targetPan; + gTasks[taskId].data[3] = panIncrement; + gTasks[taskId].data[5] = r9; + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11] = sourcePan; + gTasks[taskId].func = sub_80DD4D4; + sub_80DD4D4(taskId); +} + +static void sub_80DD4D4(u8 taskId) +{ + u16 oldPan, panIncrement = gTasks[taskId].data[3]; + + if (gTasks[taskId].data[10]++ == gTasks[taskId].data[5]) + { + gTasks[taskId].data[10] = 0; + oldPan = gTasks[taskId].data[11]; + gTasks[taskId].data[11] = panIncrement + oldPan; + gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan); + } + gUnknown_2037F24 = gTasks[taskId].data[11]; + if (gTasks[taskId].data[11] == gTasks[taskId].data[2]) + DestroyAnimVisualTask(taskId); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index f821f7170..b405f8362 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -669,7 +669,7 @@ gBattleAnimAttacker: @ 2037F1A gBattleAnimTarget: @ 2037F1B .space 0x1 -gUnknown_2037F1C: @ 2037F1C +gAnimBattlerSpecies: @ 2037F1C .space 0x8 gUnknown_2037F24: @ 2037F24 From aa89a0482dd8734410f89e77a5d694ae474b7ec7 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 2 Oct 2019 04:08:59 +0800 Subject: [PATCH 02/25] battle_anim_utility_funcs; split battle_intro.s --- asm/battle_2.s | 24 +- asm/battle_anim.s | 56 +- asm/battle_anim_effects_1.s | 16 +- asm/battle_anim_effects_2.s | 60 +- asm/battle_anim_effects_3.s | 98 +- asm/battle_anim_mons.s | 26 +- asm/battle_anim_special.s | 18 +- asm/battle_anim_utility_funcs.s | 5133 ------------------------------- asm/battle_intro.s | 1869 +++++++++++ asm/dark.s | 66 +- asm/electric.s | 8 +- asm/fire.s | 6 +- asm/flying.s | 22 +- asm/ghost.s | 56 +- asm/ground.s | 10 +- asm/ice.s | 6 +- asm/normal.s | 18 +- asm/psychic.s | 8 +- asm/rock.s | 4 +- asm/water.s | 10 +- data/data_835B488.s | 10 +- data/graphics.s | 22 +- include/battle.h | 2 +- include/battle_anim.h | 33 +- include/gba/defines.h | 2 - include/gba/io_reg.h | 35 + include/graphics.h | 15 + ld_script.txt | 5 +- src/battle_anim_mon_movement.c | 26 +- src/battle_anim_utility_funcs.c | 946 ++++++ sym_ewram.txt | 9 +- 31 files changed, 3178 insertions(+), 5441 deletions(-) delete mode 100644 asm/battle_anim_utility_funcs.s create mode 100644 asm/battle_intro.s create mode 100644 src/battle_anim_utility_funcs.c diff --git a/asm/battle_2.s b/asm/battle_2.s index 90c429e19..4648c7e33 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -99,10 +99,10 @@ sub_800FE24: @ 800FE24 movs r0, 0x4A movs r1, 0 bl SetGpuReg - ldr r1, _0800FF30 @ =gUnknown_2022984 + ldr r1, _0800FF30 @ =gBattle_WIN0H movs r0, 0xF0 strh r0, [r1] - ldr r0, _0800FF34 @ =gUnknown_2022986 + ldr r0, _0800FF34 @ =gBattle_WIN0V strh r4, [r0] bl ScanlineEffect_Clear ldr r0, _0800FF38 @ =gScanlineEffectRegBuffers @@ -184,8 +184,8 @@ _0800FEA6: .align 2, 0 _0800FF28: .4byte 0x05006000 _0800FF2C: .4byte 0x00005051 -_0800FF30: .4byte gUnknown_2022984 -_0800FF34: .4byte gUnknown_2022986 +_0800FF30: .4byte gBattle_WIN0H +_0800FF34: .4byte gBattle_WIN0V _0800FF38: .4byte gScanlineEffectRegBuffers _0800FF3C: .4byte gUnknown_824EFE4 _0800FF40: .4byte 0x0000ff10 @@ -3157,11 +3157,11 @@ VBlankCB_Battle: @ 80116F4 ldrh r1, [r0] movs r0, 0x1E bl SetGpuReg - ldr r0, _080117A8 @ =gUnknown_2022984 + ldr r0, _080117A8 @ =gBattle_WIN0H ldrh r1, [r0] movs r0, 0x40 bl SetGpuReg - ldr r0, _080117AC @ =gUnknown_2022986 + ldr r0, _080117AC @ =gBattle_WIN0V ldrh r1, [r0] movs r0, 0x44 bl SetGpuReg @@ -3188,8 +3188,8 @@ _08011798: .4byte gBattle_BG2_X _0801179C: .4byte gBattle_BG2_Y _080117A0: .4byte gBattle_BG3_X _080117A4: .4byte gBattle_BG3_Y -_080117A8: .4byte gUnknown_2022984 -_080117AC: .4byte gUnknown_2022986 +_080117A8: .4byte gBattle_WIN0H +_080117AC: .4byte gBattle_WIN0V _080117B0: .4byte gUnknown_2022988 _080117B4: .4byte gUnknown_202298A thumb_func_end VBlankCB_Battle @@ -3543,10 +3543,10 @@ sub_8011A1C: @ 8011A1C movs r0, 0x4A movs r1, 0 bl SetGpuReg - ldr r1, _08011B48 @ =gUnknown_2022984 + ldr r1, _08011B48 @ =gBattle_WIN0H movs r0, 0xF0 strh r0, [r1] - ldr r0, _08011B4C @ =gUnknown_2022986 + ldr r0, _08011B4C @ =gBattle_WIN0V strh r4, [r0] bl ScanlineEffect_Clear ldr r0, _08011B50 @ =gScanlineEffectRegBuffers @@ -3643,8 +3643,8 @@ _08011A9C: .align 2, 0 _08011B40: .4byte 0x05006000 _08011B44: .4byte 0x00005051 -_08011B48: .4byte gUnknown_2022984 -_08011B4C: .4byte gUnknown_2022986 +_08011B48: .4byte gBattle_WIN0H +_08011B4C: .4byte gBattle_WIN0V _08011B50: .4byte gScanlineEffectRegBuffers _08011B54: .4byte 0x0000ff10 _08011B58: .4byte gBattle_BG0_X diff --git a/asm/battle_anim.s b/asm/battle_anim.s index 2edd4df5f..b6f26338a 100644 --- a/asm/battle_anim.s +++ b/asm/battle_anim.s @@ -16,7 +16,7 @@ ClearBattleAnimationVars: @ 80724C0 strb r1, [r0] ldr r0, _08072558 @ =gAnimScriptActive strb r1, [r0] - ldr r0, _0807255C @ =gUnknown_2037EE2 + ldr r0, _0807255C @ =gAnimVisualTaskCount strb r1, [r0] ldr r0, _08072560 @ =gUnknown_2037EE3 strb r1, [r0] @@ -86,7 +86,7 @@ _08072520: .align 2, 0 _08072554: .4byte gUnknown_2037EE0 _08072558: .4byte gAnimScriptActive -_0807255C: .4byte gUnknown_2037EE2 +_0807255C: .4byte gAnimVisualTaskCount _08072560: .4byte gUnknown_2037EE3 _08072564: .4byte gAnimDisableStructPtr _08072568: .4byte gAnimMoveDmg @@ -276,10 +276,10 @@ _080726EE: movs r2, 0x80 bl m4aMPlayVolumeControl _08072706: - ldr r0, _08072730 @ =gUnknown_2022984 + ldr r0, _08072730 @ =gBattle_WIN0H movs r1, 0 strh r1, [r0] - ldr r0, _08072734 @ =gUnknown_2022986 + ldr r0, _08072734 @ =gBattle_WIN0V strh r1, [r0] ldr r0, _08072738 @ =gUnknown_2022988 strh r1, [r0] @@ -296,8 +296,8 @@ _08072706: .align 2, 0 _08072728: .4byte 0x0000ffff _0807272C: .4byte gMPlayInfo_BGM -_08072730: .4byte gUnknown_2022984 -_08072734: .4byte gUnknown_2022986 +_08072730: .4byte gBattle_WIN0H +_08072734: .4byte gBattle_WIN0V _08072738: .4byte gUnknown_2022988 _0807273C: .4byte gUnknown_202298A thumb_func_end LaunchBattleAnimation @@ -309,7 +309,7 @@ DestroyAnimSprite: @ 8072740 bl FreeSpriteOamMatrix adds r0, r4, 0 bl DestroySprite - ldr r1, _0807275C @ =gUnknown_2037EE2 + ldr r1, _0807275C @ =gAnimVisualTaskCount ldrb r0, [r1] subs r0, 0x1 strb r0, [r1] @@ -317,7 +317,7 @@ DestroyAnimSprite: @ 8072740 pop {r0} bx r0 .align 2, 0 -_0807275C: .4byte gUnknown_2037EE2 +_0807275C: .4byte gAnimVisualTaskCount thumb_func_end DestroyAnimSprite thumb_func_start DestroyAnimVisualTask @@ -326,14 +326,14 @@ DestroyAnimVisualTask: @ 8072760 lsls r0, 24 lsrs r0, 24 bl DestroyTask - ldr r1, _08072778 @ =gUnknown_2037EE2 + ldr r1, _08072778 @ =gAnimVisualTaskCount ldrb r0, [r1] subs r0, 0x1 strb r0, [r1] pop {r0} bx r0 .align 2, 0 -_08072778: .4byte gUnknown_2037EE2 +_08072778: .4byte gAnimVisualTaskCount thumb_func_end DestroyAnimVisualTask thumb_func_start DestroyAnimSoundTask @@ -666,7 +666,7 @@ _080729CC: adds r0, r7, 0 adds r1, r4, 0 bl CreateSpriteAndAnimate - ldr r1, _08072A0C @ =gUnknown_2037EE2 + ldr r1, _08072A0C @ =gAnimVisualTaskCount ldrb r0, [r1] adds r0, 0x1 strb r0, [r1] @@ -676,7 +676,7 @@ _080729CC: .align 2, 0 _08072A04: .4byte gBattleAnimAttacker _08072A08: .4byte gBattleAnimTarget -_08072A0C: .4byte gUnknown_2037EE2 +_08072A0C: .4byte gAnimVisualTaskCount thumb_func_end ScriptCmd_createsprite thumb_func_start ScriptCmd_createvisualtask @@ -729,7 +729,7 @@ _08072A60: lsls r0, 24 lsrs r0, 24 bl _call_via_r6 - ldr r1, _08072A88 @ =gUnknown_2037EE2 + ldr r1, _08072A88 @ =gAnimVisualTaskCount ldrb r0, [r1] adds r0, 0x1 strb r0, [r1] @@ -739,7 +739,7 @@ _08072A60: .align 2, 0 _08072A80: .4byte gUnknown_2037ED4 _08072A84: .4byte gBattleAnimArgs -_08072A88: .4byte gUnknown_2037EE2 +_08072A88: .4byte gAnimVisualTaskCount thumb_func_end ScriptCmd_createvisualtask thumb_func_start ScriptCmd_delay @@ -778,7 +778,7 @@ _08072AC8: .4byte WaitAnimFrameCount thumb_func_start sub_8072ACC sub_8072ACC: @ 8072ACC push {lr} - ldr r0, _08072AE4 @ =gUnknown_2037EE2 + ldr r0, _08072AE4 @ =gAnimVisualTaskCount ldrb r2, [r0] cmp r2, 0 bne _08072AF0 @@ -790,7 +790,7 @@ sub_8072ACC: @ 8072ACC strb r2, [r0] b _08072AF6 .align 2, 0 -_08072AE4: .4byte gUnknown_2037EE2 +_08072AE4: .4byte gAnimVisualTaskCount _08072AE8: .4byte gUnknown_2037ED4 _08072AEC: .4byte gUnknown_2037EE0 _08072AF0: @@ -821,7 +821,7 @@ sub_8072B08: @ 8072B08 push {r7} movs r0, 0 mov r8, r0 - ldr r0, _08072B38 @ =gUnknown_2037EE2 + ldr r0, _08072B38 @ =gAnimVisualTaskCount ldrb r0, [r0] cmp r0, 0 bne _08072B30 @@ -842,7 +842,7 @@ _08072B30: strh r0, [r1] b _08072B62 .align 2, 0 -_08072B38: .4byte gUnknown_2037EE2 +_08072B38: .4byte gAnimVisualTaskCount _08072B3C: .4byte gUnknown_2037EE3 _08072B40: .4byte gUnknown_2037F14 _08072B44: .4byte gUnknown_2037F12 @@ -2869,8 +2869,8 @@ _08073AFC: bx r1 thumb_func_end BattleAnimAdjustPanning - thumb_func_start sub_8073B08 -sub_8073B08: @ 8073B08 + thumb_func_start BattleAnimAdjustPanning2 +BattleAnimAdjustPanning2: @ 8073B08 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 @@ -2914,7 +2914,7 @@ _08073B56: pop {r4} pop {r1} bx r1 - thumb_func_end sub_8073B08 + thumb_func_end BattleAnimAdjustPanning2 thumb_func_start KeepPanInRange KeepPanInRange: @ 8073B60 @@ -3301,14 +3301,14 @@ ScriptCmd_panse_27: @ 8073E10 ldrb r7, [r1, 0x5] movs r0, 0x2 ldrsb r0, [r1, r0] - bl sub_8073B08 + bl BattleAnimAdjustPanning2 adds r6, r0, 0 lsls r6, 24 lsrs r6, 24 lsls r4, 24 asrs r4, 24 adds r0, r4, 0 - bl sub_8073B08 + bl BattleAnimAdjustPanning2 adds r5, r0, 0 lsls r5, 24 lsrs r5, 24 @@ -3317,7 +3317,7 @@ ScriptCmd_panse_27: @ 8073E10 asrs r1, 24 mov r8, r1 mov r0, r8 - bl sub_8073B08 + bl BattleAnimAdjustPanning2 adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -3873,7 +3873,7 @@ ScriptCmd_invisible: @ 80742A4 ldr r4, _080742D8 @ =gUnknown_2037ED4 ldr r0, [r4] ldrb r0, [r0, 0x1] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r2, r0, 24 cmp r2, 0xFF @@ -3906,7 +3906,7 @@ ScriptCmd_visible: @ 80742E0 ldr r4, _08074318 @ =gUnknown_2037ED4 ldr r0, [r4] ldrb r0, [r0, 0x1] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r2, r0, 24 cmp r2, 0xFF @@ -3976,7 +3976,7 @@ _08074370: lsrs r4, r0, 24 movs r0, 0x1 _0807437C: - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r2, r0, 24 cmp r2, 0xFF @@ -4058,7 +4058,7 @@ _08074418: lsrs r4, r0, 24 movs r0, 0x1 _08074424: - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r2, r0, 24 cmp r2, 0xFF diff --git a/asm/battle_anim_effects_1.s b/asm/battle_anim_effects_1.s index b09edc9ae..19f2c4480 100644 --- a/asm/battle_anim_effects_1.s +++ b/asm/battle_anim_effects_1.s @@ -1505,7 +1505,7 @@ sub_80A2E64: @ 80A2E64 ands r0, r1 strb r0, [r2] movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId movs r0, 0x80 lsls r0, 1 strh r0, [r4, 0x2E] @@ -1526,7 +1526,7 @@ sub_80A2EA0: @ 80A2EA0 push {r4,lr} adds r4, r0, 0 movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId movs r1, 0x32 ldrsh r0, [r4, r1] cmp r0, 0 @@ -1587,7 +1587,7 @@ sub_80A2F0C: @ 80A2F0C lsls r0, 24 lsrs r4, r0, 24 movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r2, r0, 24 ldr r1, _080A2F38 @ =gSprites @@ -1641,7 +1641,7 @@ sub_80A2F74: @ 80A2F74 lsls r4, 24 lsrs r4, 24 movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 adds r6, r0, 0 @@ -1725,7 +1725,7 @@ sub_80A3004: @ 80A3004 cmp r5, 0 bne _080A3074 movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -3924,7 +3924,7 @@ _080A4100: adds r0, r7 strh r0, [r4, 0x22] movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId _080A411A: adds r0, r6, 0 bl sub_8076884 @@ -8506,7 +8506,7 @@ sub_80A63B4: @ 80A63B4 ldr r1, _080A6444 @ =gTasks adds r6, r0, r1 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r6, 0x8] @@ -8598,7 +8598,7 @@ _080A6488: cmp r5, 0x1 bhi _080A649A movs r0, 0 - bl duplicate_obj_of_side_rel2move_in_transparent_mode + bl CloneBattlerSpriteWithBlend lsls r0, 16 asrs r0, 16 cmp r0, 0 diff --git a/asm/battle_anim_effects_2.s b/asm/battle_anim_effects_2.s index 2fac4c956..34989dc0d 100644 --- a/asm/battle_anim_effects_2.s +++ b/asm/battle_anim_effects_2.s @@ -2252,7 +2252,7 @@ sub_80A7FB0: @ 80A7FB0 lsls r5, 24 lsrs r5, 24 movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -2312,7 +2312,7 @@ sub_80A8014: @ 80A8014 cmp r1, r0 bne _080A8064 movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -2350,7 +2350,7 @@ sub_80A8074: @ 80A8074 ldr r0, _080A80C0 @ =gTasks adds r4, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 movs r5, 0 @@ -2550,7 +2550,7 @@ sub_80A8200: @ 80A8200 lsrs r1, 24 mov r9, r1 movs r0, 0 - bl duplicate_obj_of_side_rel2move_in_transparent_mode + bl CloneBattlerSpriteWithBlend lsls r0, 16 lsrs r0, 16 mov r8, r0 @@ -2720,7 +2720,7 @@ _080A835C: .4byte gTasks _080A8360: .4byte gBattleAnimArgs _080A8364: ldrb r0, [r5] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -2902,7 +2902,7 @@ sub_80A84B4: @ 80A84B4 ldr r0, _080A84E4 @ =gTasks adds r4, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -3090,7 +3090,7 @@ sub_80A8638: @ 80A8638 ldr r0, _080A866C @ =gTasks adds r4, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -3146,7 +3146,7 @@ sub_80A86A4: @ 80A86A4 ldr r0, _080A8718 @ =gTasks adds r4, r1, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 movs r2, 0 @@ -4565,7 +4565,7 @@ sub_80A917C: @ 80A917C ldr r0, _080A91AC @ =gTasks adds r4, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -4668,7 +4668,7 @@ _080A9250: _080A9256: strh r0, [r4, 0x24] movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -4861,7 +4861,7 @@ sub_80A939C: @ 80A939C movs r0, 0x2 strh r0, [r4, 0x24] movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -5517,9 +5517,9 @@ sub_80A98B0: @ 80A98B0 movs r6, 0x98 _080A98C4: movs r5, 0 - ldr r1, _080A9918 @ =gUnknown_2022984 + ldr r1, _080A9918 @ =gBattle_WIN0H strh r6, [r1] - ldr r4, _080A991C @ =gUnknown_2022986 + ldr r4, _080A991C @ =gBattle_WIN0V movs r0, 0xA0 strh r0, [r4] ldrh r1, [r1] @@ -5553,8 +5553,8 @@ _080A98C4: pop {r0} bx r0 .align 2, 0 -_080A9918: .4byte gUnknown_2022984 -_080A991C: .4byte gUnknown_2022986 +_080A9918: .4byte gBattle_WIN0H +_080A991C: .4byte gBattle_WIN0V _080A9920: .4byte 0x00003f1f _080A9924: .4byte 0x00003f3f _080A9928: .4byte gTasks @@ -5583,7 +5583,7 @@ sub_80A9930: @ 80A9930 lsls r0, r2, 16 cmp r1, r0 blt _080A9970 - ldr r0, _080A9968 @ =gUnknown_2022984 + ldr r0, _080A9968 @ =gBattle_WIN0H movs r1, 0 strh r1, [r0] ldr r0, _080A996C @ =sub_80A9984 @@ -5591,10 +5591,10 @@ sub_80A9930: @ 80A9930 b _080A9978 .align 2, 0 _080A9964: .4byte gTasks -_080A9968: .4byte gUnknown_2022984 +_080A9968: .4byte gBattle_WIN0H _080A996C: .4byte sub_80A9984 _080A9970: - ldr r1, _080A9980 @ =gUnknown_2022984 + ldr r1, _080A9980 @ =gBattle_WIN0H lsls r0, r4, 8 orrs r2, r0 strh r2, [r1] @@ -5603,7 +5603,7 @@ _080A9978: pop {r0} bx r0 .align 2, 0 -_080A9980: .4byte gUnknown_2022984 +_080A9980: .4byte gBattle_WIN0H thumb_func_end sub_80A9930 thumb_func_start sub_80A9984 @@ -5649,9 +5649,9 @@ _080A99D4: .4byte 0x00007fff _080A99D8: cmp r0, 0x4 ble _080A9A0C - ldr r0, _080A9A14 @ =gUnknown_2022984 + ldr r0, _080A9A14 @ =gBattle_WIN0H strh r4, [r0] - ldr r0, _080A9A18 @ =gUnknown_2022986 + ldr r0, _080A9A18 @ =gBattle_WIN0V strh r4, [r0] ldr r4, _080A9A1C @ =0x00003f3f movs r0, 0x48 @@ -5674,8 +5674,8 @@ _080A9A0C: pop {r0} bx r0 .align 2, 0 -_080A9A14: .4byte gUnknown_2022984 -_080A9A18: .4byte gUnknown_2022986 +_080A9A14: .4byte gBattle_WIN0H +_080A9A18: .4byte gBattle_WIN0V _080A9A1C: .4byte 0x00003f3f thumb_func_end sub_80A9984 @@ -5686,7 +5686,7 @@ sub_80A9A20: @ 80A9A20 lsrs r0, 24 adds r6, r0, 0 movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r4, r0, 24 ldr r1, _080A9A70 @ =gTasks @@ -5702,7 +5702,7 @@ sub_80A9A20: @ 80A9A20 cmp r0, 0x1 bne _080A9A7C movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -5755,7 +5755,7 @@ sub_80A9AB0: @ 80A9AB0 lsrs r0, 24 adds r6, r0, 0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r4, r0, 24 ldr r1, _080A9B00 @ =gTasks @@ -5771,7 +5771,7 @@ sub_80A9AB0: @ 80A9AB0 cmp r0, 0x1 bne _080A9B0C movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -6088,7 +6088,7 @@ _080A9D2A: ldr r1, _080A9DB0 @ =gFile_graphics_battle_anims_backgrounds_attract_sheet mov r2, sp ldrh r2, [r2, 0xA] - bl sub_80753B4 + bl AnimLoadCompressedBgGfx ldr r0, _080A9DB4 @ =gFile_graphics_battle_anims_backgrounds_attract_palette mov r1, sp ldrb r1, [r1, 0x8] @@ -6376,7 +6376,7 @@ _080A9FC6: ldr r1, _080AA014 @ =gFile_graphics_battle_anims_backgrounds_scary_face_sheet mov r2, sp ldrh r2, [r2, 0xA] - bl sub_80753B4 + bl AnimLoadCompressedBgGfx ldr r0, _080AA018 @ =gFile_graphics_battle_anims_backgrounds_scary_face_palette mov r1, sp ldrb r1, [r1, 0x8] @@ -7428,7 +7428,7 @@ sub_80AA7C8: @ 80AA7C8 lsrs r5, 24 ldr r0, _080AA7FC @ =gBattleAnimArgs ldrb r0, [r0] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 diff --git a/asm/battle_anim_effects_3.s b/asm/battle_anim_effects_3.s index 192e2b15f..17a770d64 100644 --- a/asm/battle_anim_effects_3.s +++ b/asm/battle_anim_effects_3.s @@ -572,7 +572,7 @@ sub_80DE6F0: @ 80DE6F0 adds r1, r2 ldr r0, _080DE710 @ =sub_80DE718 str r0, [r1] - ldr r1, _080DE714 @ =gUnknown_2037EE2 + ldr r1, _080DE714 @ =gAnimVisualTaskCount ldrb r0, [r1] subs r0, 0x1 strb r0, [r1] @@ -580,7 +580,7 @@ sub_80DE6F0: @ 80DE6F0 .align 2, 0 _080DE70C: .4byte gTasks _080DE710: .4byte sub_80DE718 -_080DE714: .4byte gUnknown_2037EE2 +_080DE714: .4byte gAnimVisualTaskCount thumb_func_end sub_80DE6F0 thumb_func_start sub_80DE718 @@ -674,7 +674,7 @@ sub_80DE7B4: @ 80DE7B4 adds r1, r2 ldr r0, _080DE7D4 @ =sub_80DE7DC str r0, [r1] - ldr r1, _080DE7D8 @ =gUnknown_2037EE2 + ldr r1, _080DE7D8 @ =gAnimVisualTaskCount ldrb r0, [r1] subs r0, 0x1 strb r0, [r1] @@ -682,7 +682,7 @@ sub_80DE7B4: @ 80DE7B4 .align 2, 0 _080DE7D0: .4byte gTasks _080DE7D4: .4byte sub_80DE7DC -_080DE7D8: .4byte gUnknown_2037EE2 +_080DE7D8: .4byte gAnimVisualTaskCount thumb_func_end sub_80DE7B4 thumb_func_start sub_80DE7DC @@ -1127,10 +1127,10 @@ sub_80DEB20: @ 80DEB20 lsls r1, 8 movs r0, 0 bl SetGpuRegBits - ldr r0, _080DEB80 @ =gUnknown_2022984 + ldr r0, _080DEB80 @ =gBattle_WIN0H movs r1, 0 strh r1, [r0] - ldr r4, _080DEB84 @ =gUnknown_2022986 + ldr r4, _080DEB84 @ =gBattle_WIN0V strh r1, [r4] movs r0, 0x40 movs r1, 0 @@ -1161,8 +1161,8 @@ sub_80DEB20: @ 80DEB20 bx r0 .align 2, 0 _080DEB7C: .4byte 0x00001f3f -_080DEB80: .4byte gUnknown_2022984 -_080DEB84: .4byte gUnknown_2022986 +_080DEB80: .4byte gBattle_WIN0H +_080DEB84: .4byte gBattle_WIN0V _080DEB88: .4byte sub_80DEB8C thumb_func_end sub_80DEB20 @@ -1488,11 +1488,11 @@ sub_80DEDD8: @ 80DEDD8 ldr r1, _080DEE20 @ =gUnknown_202298A movs r0, 0xA0 strh r0, [r1] - ldr r0, _080DEE24 @ =gUnknown_2022984 + ldr r0, _080DEE24 @ =gBattle_WIN0H ldrh r1, [r0] movs r0, 0x42 bl SetGpuReg - ldr r0, _080DEE28 @ =gUnknown_2022986 + ldr r0, _080DEE28 @ =gBattle_WIN0V ldrh r1, [r0] movs r0, 0x46 bl SetGpuReg @@ -1502,8 +1502,8 @@ _080DEE14: .4byte 0x00001f3f _080DEE18: .4byte gUnknown_2022988 _080DEE1C: .4byte 0x000098f0 _080DEE20: .4byte gUnknown_202298A -_080DEE24: .4byte gUnknown_2022984 -_080DEE28: .4byte gUnknown_2022986 +_080DEE24: .4byte gBattle_WIN0H +_080DEE28: .4byte gBattle_WIN0V _080DEE2C: ldr r1, _080DEE68 @ =0x00001f3f movs r0, 0x48 @@ -2021,7 +2021,7 @@ sub_80DF1DC: @ 80DF1DC strh r0, [r4, 0x12] strh r5, [r4, 0x14] movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -2437,7 +2437,7 @@ sub_80DF524: @ 80DF524 _080DF544: .4byte gTasks _080DF548: movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -2469,7 +2469,7 @@ sub_80DF580: @ 80DF580 push {r4-r6,lr} adds r5, r0, 0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r6, r0, 24 movs r1, 0x2E @@ -2857,7 +2857,7 @@ sub_80DF848: @ 80DF848 cmp r0, 0 bne _080DF888 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -2901,7 +2901,7 @@ sub_80DF8A0: @ 80DF8A0 cmp r0, 0 bne _080DF8E0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -3002,7 +3002,7 @@ sub_80DF964: @ 80DF964 cmp r0, 0 bne _080DF9A4 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -3417,7 +3417,7 @@ _080DFCCE: ldr r1, _080DFD20 @ =gFile_graphics_battle_anims_masks_morning_sun_sheet mov r2, sp ldrh r2, [r2, 0xA] - bl sub_80753B4 + bl AnimLoadCompressedBgGfx ldr r0, _080DFD24 @ =gFile_graphics_battle_anims_masks_morning_sun_palette mov r1, sp ldrb r1, [r1, 0x8] @@ -4059,7 +4059,7 @@ _080E01FC: ldr r1, _080E0254 @ =gFile_graphics_battle_anims_masks_morning_sun_sheet mov r2, sp ldrh r2, [r2, 0xA] - bl sub_80753B4 + bl AnimLoadCompressedBgGfx ldr r0, _080E0258 @ =gFile_graphics_battle_anims_masks_morning_sun_palette mov r1, sp ldrb r1, [r1, 0x8] @@ -4371,7 +4371,7 @@ sub_80E0488: @ 80E0488 cmp r0, 0 bne _080E04C8 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -4523,7 +4523,7 @@ _080E059C: subs r0, 0x1 strh r0, [r4, 0x14] ldrb r0, [r5] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -4874,7 +4874,7 @@ sub_80E0850: @ 80E0850 strh r0, [r4, 0x24] ldr r0, _080E089C @ =gBattleAnimArgs ldrb r0, [r0] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -5237,7 +5237,7 @@ _080E0B3E: strh r0, [r2, 0x1E] mov r1, r8 ldrb r0, [r1] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r5, r0, 24 ldr r1, _080E0B7C @ =gTasks @@ -5535,10 +5535,10 @@ sub_80E0D74: @ 80E0D74 lsls r1, 8 movs r0, 0 bl SetGpuRegBits - ldr r0, _080E0DDC @ =gUnknown_2022984 + ldr r0, _080E0DDC @ =gBattle_WIN0H movs r1, 0 strh r1, [r0] - ldr r4, _080E0DE0 @ =gUnknown_2022986 + ldr r4, _080E0DE0 @ =gBattle_WIN0V strh r1, [r4] movs r0, 0x40 movs r1, 0 @@ -5572,8 +5572,8 @@ sub_80E0D74: @ 80E0D74 bx r0 .align 2, 0 _080E0DD8: .4byte 0x00001f3f -_080E0DDC: .4byte gUnknown_2022984 -_080E0DE0: .4byte gUnknown_2022986 +_080E0DDC: .4byte gBattle_WIN0H +_080E0DE0: .4byte gBattle_WIN0V _080E0DE4: .4byte gBattleAnimArgs _080E0DE8: .4byte sub_80E0DEC thumb_func_end sub_80E0D74 @@ -5825,7 +5825,7 @@ sub_80E0FB8: @ 80E0FB8 lsrs r0, 24 str r0, [sp, 0x18] movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId ldr r0, _080E1040 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -6276,7 +6276,7 @@ _080E136C: strh r0, [r4, 0x24] ldr r0, _080E13A8 @ =gBattleAnimArgs ldrb r0, [r0] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -6743,7 +6743,7 @@ sub_80E1704: @ 80E1704 strh r0, [r4, 0x8] ldr r0, _080E1740 @ =gBattleAnimArgs ldrb r0, [r0] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -7218,7 +7218,7 @@ _080E1AAA: bgt _080E1ACA adds r0, r5, 0 bl DestroyTask - ldr r1, _080E1AD4 @ =gUnknown_2037EE2 + ldr r1, _080E1AD4 @ =gAnimVisualTaskCount ldrb r0, [r1] subs r0, 0x1 strb r0, [r1] @@ -7229,7 +7229,7 @@ _080E1ACA: pop {r0} bx r0 .align 2, 0 -_080E1AD4: .4byte gUnknown_2037EE2 +_080E1AD4: .4byte gAnimVisualTaskCount thumb_func_end sub_80E1990 thumb_func_start sub_80E1AD8 @@ -7619,7 +7619,7 @@ _080E1DA2: strh r0, [r5, 0x14] ldr r0, _080E1DF4 @ =gBattleAnimArgs ldrb r0, [r0] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -7892,7 +7892,7 @@ sub_80E1FC4: @ 80E1FC4 ldrh r0, [r1, 0x2] strh r0, [r4, 0xA] ldrb r0, [r1] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 ldr r2, _080E2014 @ =gSprites @@ -9091,7 +9091,7 @@ _080E28F8: ldrh r0, [r2, 0x2] strh r0, [r4, 0x8] ldrb r0, [r2] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -9613,7 +9613,7 @@ sub_80E2CE4: @ 80E2CE4 ldr r0, _080E2D34 @ =gTasks adds r6, r1, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r6, 0x26] @@ -10360,7 +10360,7 @@ sub_80E3294: @ 80E3294 lsls r0, 24 lsrs r6, r0, 24 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r5, r0, 24 adds r2, r5, 0 @@ -10471,7 +10471,7 @@ sub_80E3374: @ 80E3374 lsls r0, 24 lsrs r6, r0, 24 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r3, r0, 24 ldr r1, _080E33A0 @ =gTasks @@ -10856,7 +10856,7 @@ sub_80E3664: @ 80E3664 lsls r0, 24 lsrs r7, r0, 24 movs r0, 0x1 - bl duplicate_obj_of_side_rel2move_in_transparent_mode + bl CloneBattlerSpriteWithBlend lsls r0, 16 lsrs r1, r0, 16 str r1, [sp] @@ -10864,7 +10864,7 @@ sub_80E3664: @ 80E3664 cmp r6, 0 blt _080E36A6 movs r0, 0x1 - bl duplicate_obj_of_side_rel2move_in_transparent_mode + bl CloneBattlerSpriteWithBlend lsls r0, 16 lsrs r1, r0, 16 mov r9, r1 @@ -11251,7 +11251,7 @@ _080E3964: .4byte _080E3D90 _080E3978: movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r7, r0, 24 ldr r1, _080E39C4 @ =gTasks @@ -11392,7 +11392,7 @@ _080E3AA0: ldrh r5, [r1, 0x2] _080E3AA2: movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId ldr r2, _080E3AC8 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -11460,7 +11460,7 @@ _080E3B30: ldrh r5, [r1, 0x2] _080E3B32: movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId ldr r2, _080E3BD0 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -11682,7 +11682,7 @@ _080E3D04: .4byte 0x0000ffff _080E3D08: .4byte gTasks _080E3D0C: movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r7, r0, 24 ldr r1, _080E3D58 @ =gTasks @@ -11746,7 +11746,7 @@ _080E3D82: _080E3D8C: .4byte gTasks _080E3D90: movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r7, r0, 24 ldr r1, _080E3E04 @ =gTasks @@ -11917,7 +11917,7 @@ _080E3E96: cmp r0, 0x1 bne _080E3FB8 movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId ldr r2, _080E3F24 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -12235,7 +12235,7 @@ sub_80E4160: @ 80E4160 ldr r0, _080E41C8 @ =gTasks adds r4, r1, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 movs r5, 0 @@ -12757,7 +12757,7 @@ sub_80E4540: @ 80E4540 strh r0, [r4, 0x8] ldr r0, _080E457C @ =gBattleAnimArgs ldrb r0, [r0] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 diff --git a/asm/battle_anim_mons.s b/asm/battle_anim_mons.s index 81716bdc8..7703f69f5 100644 --- a/asm/battle_anim_mons.s +++ b/asm/battle_anim_mons.s @@ -703,8 +703,8 @@ _080749CC: bx r1 thumb_func_end sub_807492C - thumb_func_start GetAnimBankSpriteId -GetAnimBankSpriteId: @ 80749D4 + thumb_func_start GetAnimBattlerSpriteId +GetAnimBattlerSpriteId: @ 80749D4 push {r4,r5,lr} lsls r0, 24 lsrs r0, 24 @@ -779,7 +779,7 @@ _08074A5E: bx r1 .align 2, 0 _08074A64: .4byte gBattlerSpriteIds - thumb_func_end GetAnimBankSpriteId + thumb_func_end GetAnimBattlerSpriteId thumb_func_start StoreSpriteCallbackInData6 StoreSpriteCallbackInData6: @ 8074A68 @@ -2091,8 +2091,8 @@ sub_8075358: @ 8075358 _080753B0: .4byte 0x05000800 thumb_func_end sub_8075358 - thumb_func_start sub_80753B4 -sub_80753B4: @ 80753B4 + thumb_func_start AnimLoadCompressedBgGfx +AnimLoadCompressedBgGfx: @ 80753B4 push {r4-r6,lr} mov r6, r8 push {r6} @@ -2129,7 +2129,7 @@ sub_80753B4: @ 80753B4 .align 2, 0 _080753FC: .4byte gUnknown_2022BB8 _08075400: .4byte 0x05000800 - thumb_func_end sub_80753B4 + thumb_func_end AnimLoadCompressedBgGfx thumb_func_start sub_8075404 sub_8075404: @ 8075404 @@ -3717,12 +3717,12 @@ _08075FB4: .4byte StartAnimLinearTranslation _08075FB8: .4byte DestroyAnimSprite thumb_func_end sub_8075F0C - thumb_func_start duplicate_obj_of_side_rel2move_in_transparent_mode -duplicate_obj_of_side_rel2move_in_transparent_mode: @ 8075FBC + thumb_func_start CloneBattlerSpriteWithBlend +CloneBattlerSpriteWithBlend: @ 8075FBC push {r4-r6,lr} lsls r0, 24 lsrs r0, 24 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r1, r0, 24 cmp r1, 0xFF @@ -3778,7 +3778,7 @@ _0807602A: pop {r4-r6} pop {r1} bx r1 - thumb_func_end duplicate_obj_of_side_rel2move_in_transparent_mode + thumb_func_end CloneBattlerSpriteWithBlend thumb_func_start obj_delete_but_dont_free_vram obj_delete_but_dont_free_vram: @ 8076030 @@ -3954,7 +3954,7 @@ sub_807616C: @ 807616C lsrs r4, r0, 24 ldr r0, _0807618C @ =gBattleAnimArgs ldrb r0, [r0] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r3, r0, 24 cmp r3, 0xFF @@ -5894,7 +5894,7 @@ sub_8077030: @ 8077030 ldr r0, _080770C4 @ =gTasks adds r5, r1, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 movs r6, 0 @@ -6107,7 +6107,7 @@ sub_80771E4: @ 80771E4 lsrs r1, 24 mov r8, r1 movs r0, 0 - bl duplicate_obj_of_side_rel2move_in_transparent_mode + bl CloneBattlerSpriteWithBlend lsls r0, 16 lsrs r7, r0, 16 asrs r0, 16 diff --git a/asm/battle_anim_special.s b/asm/battle_anim_special.s index c95a1099e..209d11ed3 100644 --- a/asm/battle_anim_special.s +++ b/asm/battle_anim_special.s @@ -18,10 +18,10 @@ sub_80EEC0C: @ 80EEC0C str r0, [sp, 0x10] ldr r0, _080EEDB4 @ =gBattleAnimAttacker ldrb r4, [r0] - ldr r0, _080EEDB8 @ =gUnknown_2022984 + ldr r0, _080EEDB8 @ =gBattle_WIN0H movs r1, 0 strh r1, [r0] - ldr r0, _080EEDBC @ =gUnknown_2022986 + ldr r0, _080EEDBC @ =gBattle_WIN0V strh r1, [r0] ldr r1, _080EEDC0 @ =0x00003f3f movs r0, 0x48 @@ -161,7 +161,7 @@ sub_80EEC0C: @ 80EEC0C ldr r1, _080EEDDC @ =gFile_graphics_battle_anims_masks_unknown_D2EC24_sheet mov r2, sp ldrh r2, [r2, 0xA] - bl sub_80753B4 + bl AnimLoadCompressedBgGfx ldr r0, _080EEDE0 @ =gFile_graphics_battle_anims_masks_cure_bubbles_palette mov r1, sp ldrb r1, [r1, 0x8] @@ -204,8 +204,8 @@ sub_80EEC0C: @ 80EEC0C bx r0 .align 2, 0 _080EEDB4: .4byte gBattleAnimAttacker -_080EEDB8: .4byte gUnknown_2022984 -_080EEDBC: .4byte gUnknown_2022986 +_080EEDB8: .4byte gBattle_WIN0H +_080EEDBC: .4byte gBattle_WIN0V _080EEDC0: .4byte 0x00003f3f _080EEDC4: .4byte 0x00003f3d _080EEDC8: .4byte 0x00003f42 @@ -336,9 +336,9 @@ _080EEE9C: bne _080EEFA8 movs r0, 0 bl sub_8073128 - ldr r0, _080EEFB4 @ =gUnknown_2022984 + ldr r0, _080EEFB4 @ =gBattle_WIN0H strh r4, [r0] - ldr r0, _080EEFB8 @ =gUnknown_2022986 + ldr r0, _080EEFB8 @ =gBattle_WIN0V strh r4, [r0] ldr r4, _080EEFBC @ =0x00003f3f movs r0, 0x48 @@ -439,8 +439,8 @@ _080EEFA8: pop {r0} bx r0 .align 2, 0 -_080EEFB4: .4byte gUnknown_2022984 -_080EEFB8: .4byte gUnknown_2022986 +_080EEFB4: .4byte gBattle_WIN0H +_080EEFB8: .4byte gBattle_WIN0V _080EEFBC: .4byte 0x00003f3f _080EEFC0: .4byte gSprites _080EEFC4: .4byte gHealthboxSpriteIds diff --git a/asm/battle_anim_utility_funcs.s b/asm/battle_anim_utility_funcs.s deleted file mode 100644 index f447bdf45..000000000 --- a/asm/battle_anim_utility_funcs.s +++ /dev/null @@ -1,5133 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80BA7F8 -sub_80BA7F8: @ 80BA7F8 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r4, _080BA838 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r4, r1] - bl sub_80B9A14 - adds r6, r0, 0 - ldrh r3, [r4] - lsls r3, 16 - asrs r0, r3, 23 - movs r4, 0x1 - ands r0, r4 - asrs r1, r3, 24 - ands r1, r4 - asrs r2, r3, 25 - ands r2, r4 - asrs r3, 26 - ands r3, r4 - bl sub_8075CB8 - orrs r6, r0 - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_80BAA4C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BA838: .4byte gBattleAnimArgs - thumb_func_end sub_80BA7F8 - - thumb_func_start sub_80BA83C -sub_80BA83C: @ 80BA83C - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r7, r0, 24 - mov r1, sp - movs r0, 0xFF - strb r0, [r1, 0x1] - movs r0, 0x1 - bl sub_80B9A14 - adds r5, r0, 0 - ldr r0, _080BA868 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0x7 - bhi _080BA8E6 - lsls r0, 2 - ldr r1, _080BA86C @ =_080BA870 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BA868: .4byte gBattleAnimArgs -_080BA86C: .4byte _080BA870 - .align 2, 0 -_080BA870: - .4byte _080BA892 - .4byte _080BA89E - .4byte _080BA890 - .4byte _080BA89C - .4byte _080BA8AC - .4byte _080BA8C4 - .4byte _080BA8CC - .4byte _080BA8D8 -_080BA890: - movs r5, 0 -_080BA892: - mov r0, sp - ldr r1, _080BA898 @ =gBattleAnimAttacker - b _080BA8A2 - .align 2, 0 -_080BA898: .4byte gBattleAnimAttacker -_080BA89C: - movs r5, 0 -_080BA89E: - mov r0, sp - ldr r1, _080BA8A8 @ =gBattleAnimTarget -_080BA8A2: - ldrb r1, [r1] - strb r1, [r0] - b _080BA8E6 - .align 2, 0 -_080BA8A8: .4byte gBattleAnimTarget -_080BA8AC: - mov r1, sp - ldr r0, _080BA8BC @ =gBattleAnimAttacker - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _080BA8C0 @ =gBattleAnimTarget - ldrb r0, [r0] - strb r0, [r1, 0x1] - b _080BA8E6 - .align 2, 0 -_080BA8BC: .4byte gBattleAnimAttacker -_080BA8C0: .4byte gBattleAnimTarget -_080BA8C4: - mov r1, sp - movs r0, 0xFF - strb r0, [r1] - b _080BA8E6 -_080BA8CC: - movs r5, 0 - mov r2, sp - ldr r0, _080BA8D4 @ =gBattleAnimAttacker - b _080BA8DE - .align 2, 0 -_080BA8D4: .4byte gBattleAnimAttacker -_080BA8D8: - movs r5, 0 - mov r2, sp - ldr r0, _080BA930 @ =gBattleAnimTarget -_080BA8DE: - ldrb r0, [r0] - movs r1, 0x2 - eors r0, r1 - strb r0, [r2] -_080BA8E6: - movs r4, 0 - mov r6, sp -_080BA8EA: - ldrb r0, [r6] - cmp r4, r0 - beq _080BA914 - ldrb r0, [r6, 0x1] - cmp r4, r0 - beq _080BA914 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080BA914 - adds r0, r4, 0 - bl sub_8075D80 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x80 - lsls r1, 9 - lsls r1, r0 - orrs r5, r1 -_080BA914: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _080BA8EA - adds r0, r7, 0 - adds r1, r5, 0 - bl sub_80BAA4C - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BA930: .4byte gBattleAnimTarget - thumb_func_end sub_80BA83C - - thumb_func_start sub_80BA934 -sub_80BA934: @ 80BA934 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080BA958 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - bl sub_80B9A14 - adds r2, r0, 0 - ldr r0, _080BA95C @ =gBattleTerrain - ldrb r0, [r0] - cmp r0, 0x9 - bhi _080BAA0A - lsls r0, 2 - ldr r1, _080BA960 @ =_080BA964 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BA958: .4byte gBattleAnimArgs -_080BA95C: .4byte gBattleTerrain -_080BA960: .4byte _080BA964 - .align 2, 0 -_080BA964: - .4byte _080BA98C - .4byte _080BA99C - .4byte _080BA9A8 - .4byte _080BA9B8 - .4byte _080BA9C4 - .4byte _080BA9D4 - .4byte _080BA9E4 - .4byte _080BA9F4 - .4byte _080BAA04 - .4byte _080BAA04 -_080BA98C: - ldr r1, _080BA994 @ =gBattleAnimArgs - ldr r0, _080BA998 @ =0x00000b0c - b _080BAA08 - .align 2, 0 -_080BA994: .4byte gBattleAnimArgs -_080BA998: .4byte 0x00000b0c -_080BA99C: - ldr r1, _080BA9A4 @ =gBattleAnimArgs - movs r0, 0x9E - lsls r0, 4 - b _080BAA08 - .align 2, 0 -_080BA9A4: .4byte gBattleAnimArgs -_080BA9A8: - ldr r1, _080BA9B0 @ =gBattleAnimArgs - ldr r0, _080BA9B4 @ =0x00002f1e - b _080BAA08 - .align 2, 0 -_080BA9B0: .4byte gBattleAnimArgs -_080BA9B4: .4byte 0x00002f1e -_080BA9B8: - ldr r1, _080BA9C0 @ =gBattleAnimArgs - movs r0, 0x90 - lsls r0, 7 - b _080BAA08 - .align 2, 0 -_080BA9C0: .4byte gBattleAnimArgs -_080BA9C4: - ldr r1, _080BA9CC @ =gBattleAnimArgs - ldr r0, _080BA9D0 @ =0x00007ecb - b _080BAA08 - .align 2, 0 -_080BA9CC: .4byte gBattleAnimArgs -_080BA9D0: .4byte 0x00007ecb -_080BA9D4: - ldr r1, _080BA9DC @ =gBattleAnimArgs - ldr r0, _080BA9E0 @ =0x00007ecb - b _080BAA08 - .align 2, 0 -_080BA9DC: .4byte gBattleAnimArgs -_080BA9E0: .4byte 0x00007ecb -_080BA9E4: - ldr r1, _080BA9EC @ =gBattleAnimArgs - ldr r0, _080BA9F0 @ =0x00002a16 - b _080BAA08 - .align 2, 0 -_080BA9EC: .4byte gBattleAnimArgs -_080BA9F0: .4byte 0x00002a16 -_080BA9F4: - ldr r1, _080BA9FC @ =gBattleAnimArgs - ldr r0, _080BAA00 @ =0x00000d2e - b _080BAA08 - .align 2, 0 -_080BA9FC: .4byte gBattleAnimArgs -_080BAA00: .4byte 0x00000d2e -_080BAA04: - ldr r1, _080BAA18 @ =gBattleAnimArgs - ldr r0, _080BAA1C @ =0x00007fff -_080BAA08: - strh r0, [r1, 0x8] -_080BAA0A: - adds r0, r4, 0 - adds r1, r2, 0 - bl sub_80BAA4C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BAA18: .4byte gBattleAnimArgs -_080BAA1C: .4byte 0x00007fff - thumb_func_end sub_80BA934 - - thumb_func_start sub_80BAA20 -sub_80BAA20: @ 80BAA20 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080BAA48 @ =gBattleAnimArgs - ldrh r0, [r0] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x10 - movs r1, 0x1 - lsls r1, r0 - adds r0, r4, 0 - bl sub_80BAA4C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BAA48: .4byte gBattleAnimArgs - thumb_func_end sub_80BAA20 - - thumb_func_start sub_80BAA4C -sub_80BAA4C: @ 80BAA4C - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r3, _080BAA84 @ =gTasks - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 3 - adds r2, r3 - strh r1, [r2, 0x8] - lsrs r1, 16 - strh r1, [r2, 0xA] - ldr r3, _080BAA88 @ =gBattleAnimArgs - ldrh r1, [r3, 0x2] - strh r1, [r2, 0xC] - ldrh r1, [r3, 0x4] - strh r1, [r2, 0xE] - ldrh r1, [r3, 0x6] - strh r1, [r2, 0x10] - ldrh r1, [r3, 0x8] - strh r1, [r2, 0x12] - ldrh r1, [r3, 0x4] - strh r1, [r2, 0x1C] - ldr r1, _080BAA8C @ =sub_80BAA90 - str r1, [r2] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_080BAA84: .4byte gTasks -_080BAA88: .4byte gBattleAnimArgs -_080BAA8C: .4byte sub_80BAA90 - thumb_func_end sub_80BAA4C - - thumb_func_start sub_80BAA90 -sub_80BAA90: @ 80BAA90 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r7, r0, 24 - movs r6, 0 - ldr r2, _080BAB10 @ =gTasks - lsls r5, r7, 2 - adds r0, r5, r7 - lsls r0, 3 - adds r3, r0, r2 - ldrh r0, [r3, 0x1A] - mov r8, r0 - movs r4, 0x1A - ldrsh r1, [r3, r4] - movs r4, 0xC - ldrsh r0, [r3, r4] - mov r9, r2 - cmp r1, r0 - bne _080BAB26 - strh r6, [r3, 0x1A] - movs r0, 0x8 - ldrsh r4, [r3, r0] - movs r1, 0xA - ldrsh r0, [r3, r1] - lsls r0, 16 - orrs r4, r0 - mov r8, r5 - cmp r4, 0 - beq _080BAAF2 - adds r5, r3, 0 -_080BAAD0: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _080BAAE4 - ldrb r2, [r5, 0x1C] - ldrh r3, [r5, 0x12] - adds r0, r6, 0 - movs r1, 0x10 - bl BlendPalette -_080BAAE4: - adds r0, r6, 0 - adds r0, 0x10 - lsls r0, 16 - lsrs r6, r0, 16 - lsrs r4, 1 - cmp r4, 0 - bne _080BAAD0 -_080BAAF2: - mov r4, r8 - adds r0, r4, r7 - lsls r0, 3 - mov r1, r9 - adds r2, r0, r1 - ldrh r0, [r2, 0x1C] - movs r4, 0x1C - ldrsh r3, [r2, r4] - movs r4, 0x10 - ldrsh r1, [r2, r4] - cmp r3, r1 - bge _080BAB14 - adds r0, 0x1 - strh r0, [r2, 0x1C] - b _080BAB2C - .align 2, 0 -_080BAB10: .4byte gTasks -_080BAB14: - cmp r3, r1 - ble _080BAB1E - subs r0, 0x1 - strh r0, [r2, 0x1C] - b _080BAB2C -_080BAB1E: - adds r0, r7, 0 - bl DestroyAnimVisualTask - b _080BAB2C -_080BAB26: - mov r0, r8 - adds r0, 0x1 - strh r0, [r3, 0x1A] -_080BAB2C: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80BAA90 - - thumb_func_start sub_80BAB38 -sub_80BAB38: @ 80BAB38 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r4, _080BAB6C @ =gBattleAnimArgs - ldrb r0, [r4] - ldrb r1, [r4, 0x2] - ldrb r2, [r4, 0x4] - ldrb r3, [r4, 0x6] - ldrb r4, [r4, 0x8] - str r4, [sp] - bl BeginHardwarePaletteFade - ldr r1, _080BAB70 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080BAB74 @ =sub_80BAB78 - str r1, [r0] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BAB6C: .4byte gBattleAnimArgs -_080BAB70: .4byte gTasks -_080BAB74: .4byte sub_80BAB78 - thumb_func_end sub_80BAB38 - - thumb_func_start sub_80BAB78 -sub_80BAB78: @ 80BAB78 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080BAB94 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080BAB90 - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080BAB90: - pop {r0} - bx r0 - .align 2, 0 -_080BAB94: .4byte gPaletteFade - thumb_func_end sub_80BAB78 - - thumb_func_start sub_80BAB98 -sub_80BAB98: @ 80BAB98 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080BABC4 @ =gTasks - adds r1, r0 - ldr r2, _080BABC8 @ =gBattleAnimArgs - ldrh r0, [r2] - movs r3, 0 - strh r0, [r1, 0x8] - strh r3, [r1, 0xA] - ldrh r0, [r2, 0x2] - strh r0, [r1, 0xC] - ldrh r0, [r2, 0x4] - strh r0, [r1, 0xE] - ldrh r0, [r2, 0x6] - strh r0, [r1, 0x10] - strh r3, [r1, 0x12] - ldr r0, _080BABCC @ =sub_80BABD0 - str r0, [r1] - bx lr - .align 2, 0 -_080BABC4: .4byte gTasks -_080BABC8: .4byte gBattleAnimArgs -_080BABCC: .4byte sub_80BABD0 - thumb_func_end sub_80BAB98 - - thumb_func_start sub_80BABD0 -sub_80BABD0: @ 80BABD0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r2, r5, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080BABFC @ =gTasks - adds r4, r0, r1 - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080BAC94 - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080BAC00 - subs r0, r1, 0x1 - strh r0, [r4, 0xA] - b _080BACA2 - .align 2, 0 -_080BABFC: .4byte gTasks -_080BAC00: - ldrb r0, [r4, 0x8] - bl duplicate_obj_of_side_rel2move_in_transparent_mode - strh r0, [r4, 0x14] - lsls r0, 16 - cmp r0, 0 - blt _080BAC7E - ldr r6, _080BAC8C @ =gSprites - movs r1, 0x14 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r3, r1, r6 - movs r2, 0x8 - ldrsh r0, [r4, r2] - movs r2, 0x2 - cmp r0, 0 - beq _080BAC28 - movs r2, 0x1 -_080BAC28: - lsls r2, 2 - ldrb r1, [r3, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r3, 0x5] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrh r1, [r4, 0xE] - strh r1, [r0, 0x2E] - movs r2, 0x14 - ldrsh r1, [r4, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r5, [r0, 0x30] - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - movs r1, 0x5 - strh r1, [r0, 0x32] - movs r2, 0x14 - ldrsh r1, [r4, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r6, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _080BAC90 @ =sub_80BACA8 - str r1, [r0] - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] -_080BAC7E: - ldrh r0, [r4, 0x10] - subs r0, 0x1 - strh r0, [r4, 0x10] - ldrh r0, [r4, 0xC] - strh r0, [r4, 0xA] - b _080BACA2 - .align 2, 0 -_080BAC8C: .4byte gSprites -_080BAC90: .4byte sub_80BACA8 -_080BAC94: - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080BACA2 - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080BACA2: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80BABD0 - - thumb_func_start sub_80BACA8 -sub_80BACA8: @ 80BACA8 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080BACBC - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] - b _080BACE0 -_080BACBC: - ldr r3, _080BACE8 @ =gTasks - movs r0, 0x32 - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x30 - ldrsh r2, [r4, r0] - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r3, 0x8 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - adds r0, r4, 0 - bl obj_delete_but_dont_free_vram -_080BACE0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BACE8: .4byte gTasks - thumb_func_end sub_80BACA8 - - thumb_func_start sub_80BACEC -sub_80BACEC: @ 80BACEC - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - movs r7, 0 - ldr r0, _080BAE20 @ =gUnknown_2022984 - strh r7, [r0] - ldr r0, _080BAE24 @ =gUnknown_2022986 - strh r7, [r0] - ldr r1, _080BAE28 @ =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - ldr r1, _080BAE2C @ =0x00003f3d - movs r0, 0x4A - bl SetGpuReg - movs r1, 0x80 - lsls r1, 8 - movs r0, 0 - bl SetGpuRegBits - ldr r1, _080BAE30 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - ldr r1, _080BAE34 @ =0x00000c08 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0xA - bl GetGpuReg - add r4, sp, 0x10 - strh r0, [r4] - ldrb r1, [r4] - movs r0, 0x4 - negs r0, r0 - mov r8, r0 - ands r0, r1 - strb r0, [r4] - mov r2, sp - adds r2, 0x11 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2] - ldrh r1, [r4] - movs r0, 0xA - bl SetGpuReg - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080BAD7A - ldrb r1, [r4] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r4] - ldrh r1, [r4] - movs r0, 0xA - bl SetGpuReg -_080BAD7A: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080BADFE - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080BADFE - ldr r5, _080BAE38 @ =gBattleAnimAttacker - ldrb r0, [r5] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _080BADAA - ldrb r0, [r5] - bl GetBattlerPosition - lsls r0, 24 - cmp r0, 0 - bne _080BADFE -_080BADAA: - ldrb r0, [r5] - movs r6, 0x2 - eors r0, r6 - bl IsBattlerSpriteVisible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080BADFE - ldr r3, _080BAE3C @ =gSprites - ldr r1, _080BAE40 @ =gBattlerSpriteIds - ldrb r0, [r5] - eors r0, r6 - adds r0, r1 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - ldrb r3, [r2, 0x5] - lsls r1, r3, 28 - lsrs r1, 30 - subs r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - ldrb r1, [r4] - mov r0, r8 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4] - ldrh r1, [r4] - movs r0, 0xA - bl SetGpuReg - movs r7, 0x1 -_080BADFE: - ldr r4, _080BAE38 @ =gBattleAnimAttacker - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080BAE4C - ldr r1, _080BAE44 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080BAE48 @ =gEnemyParty - b _080BAE5C - .align 2, 0 -_080BAE20: .4byte gUnknown_2022984 -_080BAE24: .4byte gUnknown_2022986 -_080BAE28: .4byte 0x00003f3f -_080BAE2C: .4byte 0x00003f3d -_080BAE30: .4byte 0x00003f42 -_080BAE34: .4byte 0x00000c08 -_080BAE38: .4byte gBattleAnimAttacker -_080BAE3C: .4byte gSprites -_080BAE40: .4byte gBattlerSpriteIds -_080BAE44: .4byte gBattlerPartyIndexes -_080BAE48: .4byte gEnemyParty -_080BAE4C: - ldr r1, _080BAF0C @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080BAF10 @ =gPlayerParty -_080BAE5C: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0 - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - ldr r0, _080BAF14 @ =gBattleAnimAttacker - ldrb r0, [r0] - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_8076E34 - lsls r0, 24 - lsrs r4, r0, 24 - mov r0, sp - bl sub_80752A0 - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080BAF18 @ =gFile_graphics_battle_anims_masks_curse_tilemap - bl sub_807543C - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080BAEAC - mov r0, sp - ldrb r0, [r0, 0x8] - ldr r1, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_80730C0 -_080BAEAC: - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080BAF1C @ =gFile_graphics_battle_anims_masks_curse_sheet - mov r2, sp - ldrh r2, [r2, 0xA] - bl sub_80753B4 - ldr r0, _080BAF20 @ =gUnknown_83E7CC8 - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - adds r1, 0x1 - movs r2, 0x2 - bl LoadPalette - ldr r2, _080BAF24 @ =gBattle_BG1_X - ldr r0, _080BAF28 @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x20] - negs r0, r0 - adds r0, 0x20 - strh r0, [r2] - ldr r2, _080BAF2C @ =gBattle_BG1_Y - ldrh r0, [r1, 0x22] - negs r0, r0 - adds r0, 0x20 - strh r0, [r2] - ldr r1, _080BAF30 @ =gTasks - mov r2, r9 - lsls r0, r2, 2 - add r0, r9 - lsls r0, 3 - adds r0, r1 - strh r4, [r0, 0x8] - strh r7, [r0, 0x14] - ldr r1, _080BAF34 @ =sub_80BAF38 - str r1, [r0] - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BAF0C: .4byte gBattlerPartyIndexes -_080BAF10: .4byte gPlayerParty -_080BAF14: .4byte gBattleAnimAttacker -_080BAF18: .4byte gFile_graphics_battle_anims_masks_curse_tilemap -_080BAF1C: .4byte gFile_graphics_battle_anims_masks_curse_sheet -_080BAF20: .4byte gUnknown_83E7CC8 -_080BAF24: .4byte gBattle_BG1_X -_080BAF28: .4byte gSprites -_080BAF2C: .4byte gBattle_BG1_Y -_080BAF30: .4byte gTasks -_080BAF34: .4byte sub_80BAF38 - thumb_func_end sub_80BACEC - - thumb_func_start sub_80BAF38 -sub_80BAF38: @ 80BAF38 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - ldr r1, _080BB068 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r5, r0, r1 - ldrh r0, [r5, 0x1C] - adds r0, 0x4 - movs r1, 0 - mov r8, r1 - strh r0, [r5, 0x1C] - ldr r7, _080BB06C @ =gBattle_BG1_Y - ldrh r2, [r7] - subs r1, r2, 0x4 - strh r1, [r7] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x40 - bne _080BB05A - mov r0, r8 - strh r0, [r5, 0x1C] - adds r0, r2, 0 - adds r0, 0x3C - strh r0, [r7] - ldrh r0, [r5, 0x1E] - adds r0, 0x1 - strh r0, [r5, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080BB05A - movs r0, 0 - bl sub_8073128 - ldr r0, _080BB070 @ =gUnknown_2022984 - mov r1, r8 - strh r1, [r0] - ldr r0, _080BB074 @ =gUnknown_2022986 - strh r1, [r0] - ldr r4, _080BB078 @ =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080BAFCA - movs r0, 0xA - bl GetGpuReg - add r1, sp, 0x10 - strh r0, [r1] - ldrb r2, [r1] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldrh r1, [r1] - movs r0, 0xA - bl SetGpuReg -_080BAFCA: - movs r0, 0 - bl GetGpuReg - adds r1, r0, 0 - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - eors r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl GetAnimBankSpriteId - ldr r4, _080BB07C @ =gSprites - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite - mov r0, sp - bl sub_80752A0 - mov r0, sp - ldrb r0, [r0, 0x9] - bl sub_8075358 - movs r1, 0x14 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _080BB050 - ldr r2, _080BB080 @ =gBattlerSpriteIds - ldr r0, _080BB084 @ =gBattleAnimAttacker - ldrb r1, [r0] - movs r0, 0x2 - eors r0, r1 - adds r0, r2 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r4 - ldrb r3, [r2, 0x5] - lsls r1, r3, 28 - lsrs r1, 30 - adds r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] -_080BB050: - mov r2, r8 - strh r2, [r7] - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080BB05A: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BB068: .4byte gTasks -_080BB06C: .4byte gBattle_BG1_Y -_080BB070: .4byte gUnknown_2022984 -_080BB074: .4byte gUnknown_2022986 -_080BB078: .4byte 0x00003f3f -_080BB07C: .4byte gSprites -_080BB080: .4byte gBattlerSpriteIds -_080BB084: .4byte gBattleAnimAttacker - thumb_func_end sub_80BAF38 - - thumb_func_start sub_80BB088 -sub_80BB088: @ 80BB088 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _080BB0C8 @ =gUnknown_20399B4 - movs r0, 0x18 - bl AllocZeroed - str r0, [r4] - movs r2, 0 - ldr r3, _080BB0CC @ =gBattleAnimArgs -_080BB09C: - ldr r1, [r4] - lsls r0, r2, 1 - adds r1, 0x4 - adds r1, r0 - adds r0, r3 - ldrh r0, [r0] - strh r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x7 - bls _080BB09C - ldr r0, _080BB0D0 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080BB0D4 @ =sub_80BB0D8 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BB0C8: .4byte gUnknown_20399B4 -_080BB0CC: .4byte gBattleAnimArgs -_080BB0D0: .4byte gTasks -_080BB0D4: .4byte sub_80BB0D8 - thumb_func_end sub_80BB088 - - thumb_func_start sub_80BB0D8 -sub_80BB0D8: @ 80BB0D8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _080BB0F0 @ =gUnknown_20399B4 - ldr r1, [r0] - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080BB0F8 - ldr r0, _080BB0F4 @ =gBattleAnimAttacker - b _080BB0FA - .align 2, 0 -_080BB0F0: .4byte gUnknown_20399B4 -_080BB0F4: .4byte gBattleAnimAttacker -_080BB0F8: - ldr r0, _080BB230 @ =gBattleAnimTarget -_080BB0FA: - ldrb r0, [r0] - strb r0, [r1] - ldr r4, _080BB234 @ =gUnknown_20399B4 - ldr r2, [r4] - ldrb r0, [r2] - movs r1, 0x2 - eors r0, r1 - strb r0, [r2, 0x1] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080BB12A - ldr r1, [r4] - movs r2, 0xA - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080BB130 - ldrb r0, [r1, 0x1] - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - bne _080BB130 -_080BB12A: - ldr r1, [r4] - movs r0, 0 - strh r0, [r1, 0xA] -_080BB130: - ldr r0, _080BB238 @ =gUnknown_2022984 - movs r1, 0 - strh r1, [r0] - ldr r0, _080BB23C @ =gUnknown_2022986 - strh r1, [r0] - ldr r1, _080BB240 @ =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - ldr r1, _080BB244 @ =0x00003f3d - movs r0, 0x4A - bl SetGpuReg - movs r1, 0x80 - lsls r1, 8 - movs r0, 0 - bl SetGpuRegBits - ldr r1, _080BB248 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0 - bl SetAnimBgAttribute - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl SetAnimBgAttribute - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080BB18E - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0x1 - bl SetAnimBgAttribute -_080BB18E: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080BB20A - ldr r4, _080BB234 @ =gUnknown_20399B4 - ldr r1, [r4] - movs r2, 0xA - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080BB20A - ldrb r0, [r1] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _080BB1C0 - ldr r0, [r4] - ldrb r0, [r0] - bl GetBattlerPosition - lsls r0, 24 - cmp r0, 0 - bne _080BB20A -_080BB1C0: - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl IsBattlerSpriteVisible - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bne _080BB20A - ldr r3, _080BB24C @ =gSprites - ldr r1, _080BB250 @ =gBattlerSpriteIds - ldr r0, [r4] - ldrb r0, [r0, 0x1] - adds r0, r1 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - ldrb r3, [r2, 0x5] - lsls r1, r3, 28 - lsrs r1, 30 - subs r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - ldr r0, [r4] - strb r5, [r0, 0x2] -_080BB20A: - ldr r4, _080BB234 @ =gUnknown_20399B4 - ldr r0, [r4] - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080BB25C - ldr r1, _080BB254 @ =gBattlerPartyIndexes - ldr r0, [r4] - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080BB258 @ =gEnemyParty - b _080BB26E - .align 2, 0 -_080BB230: .4byte gBattleAnimTarget -_080BB234: .4byte gUnknown_20399B4 -_080BB238: .4byte gUnknown_2022984 -_080BB23C: .4byte gUnknown_2022986 -_080BB240: .4byte 0x00003f3f -_080BB244: .4byte 0x00003f3d -_080BB248: .4byte 0x00003f42 -_080BB24C: .4byte gSprites -_080BB250: .4byte gBattlerSpriteIds -_080BB254: .4byte gBattlerPartyIndexes -_080BB258: .4byte gEnemyParty -_080BB25C: - ldr r1, _080BB290 @ =gBattlerPartyIndexes - ldr r0, [r4] - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080BB294 @ =gPlayerParty -_080BB26E: - adds r0, r1 - movs r1, 0xB - bl GetMonData - ldr r1, [r4] - strh r0, [r1, 0x14] - ldr r0, _080BB298 @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _080BB29C @ =sub_80BB2A0 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BB290: .4byte gBattlerPartyIndexes -_080BB294: .4byte gPlayerParty -_080BB298: .4byte gTasks -_080BB29C: .4byte sub_80BB2A0 - thumb_func_end sub_80BB0D8 - - thumb_func_start sub_80BB2A0 -sub_80BB2A0: @ 80BB2A0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0 - mov r8, r0 - ldr r6, _080BB300 @ =gBattlerSpriteIds - ldr r4, _080BB304 @ =gUnknown_20399B4 - ldr r2, [r4] - ldrb r0, [r2] - adds r1, r0, r6 - ldrb r1, [r1] - ldrh r2, [r2, 0x14] - bl sub_8076E34 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r2, [r4] - movs r1, 0xA - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _080BB2E2 - ldrb r0, [r2, 0x1] - adds r1, r0, r6 - ldrb r1, [r1] - ldrh r2, [r2, 0x14] - bl sub_8076E34 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 -_080BB2E2: - mov r0, sp - bl sub_80752A0 - ldr r0, [r4] - movs r4, 0x4 - ldrsh r0, [r0, r4] - cmp r0, 0 - bne _080BB30C - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080BB308 @ =gFile_graphics_battle_anims_masks_stat_tilemap_1_tilemap - bl sub_807543C - b _080BB316 - .align 2, 0 -_080BB300: .4byte gBattlerSpriteIds -_080BB304: .4byte gUnknown_20399B4 -_080BB308: .4byte gFile_graphics_battle_anims_masks_stat_tilemap_1_tilemap -_080BB30C: - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080BB354 @ =gFile_graphics_battle_anims_masks_stat_tilemap_2_tilemap - bl sub_807543C -_080BB316: - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080BB32E - mov r0, sp - ldrb r0, [r0, 0x8] - ldr r1, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_80730C0 -_080BB32E: - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080BB358 @ =gFile_graphics_battle_anims_masks_stat_sheet - mov r2, sp - ldrh r2, [r2, 0xA] - bl sub_80753B4 - ldr r0, _080BB35C @ =gUnknown_20399B4 - ldr r0, [r0] - movs r1, 0x6 - ldrsh r0, [r0, r1] - cmp r0, 0x6 - bhi _080BB3C4 - lsls r0, 2 - ldr r1, _080BB360 @ =_080BB364 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BB354: .4byte gFile_graphics_battle_anims_masks_stat_tilemap_2_tilemap -_080BB358: .4byte gFile_graphics_battle_anims_masks_stat_sheet -_080BB35C: .4byte gUnknown_20399B4 -_080BB360: .4byte _080BB364 - .align 2, 0 -_080BB364: - .4byte _080BB380 - .4byte _080BB388 - .4byte _080BB390 - .4byte _080BB398 - .4byte _080BB3A0 - .4byte _080BB3A8 - .4byte _080BB3B0 -_080BB380: - ldr r0, _080BB384 @ =gFile_graphics_battle_anims_masks_stat2_palette - b _080BB3B2 - .align 2, 0 -_080BB384: .4byte gFile_graphics_battle_anims_masks_stat2_palette -_080BB388: - ldr r0, _080BB38C @ =gFile_graphics_battle_anims_masks_stat1_palette - b _080BB3B2 - .align 2, 0 -_080BB38C: .4byte gFile_graphics_battle_anims_masks_stat1_palette -_080BB390: - ldr r0, _080BB394 @ =gFile_graphics_battle_anims_masks_stat3_palette - b _080BB3B2 - .align 2, 0 -_080BB394: .4byte gFile_graphics_battle_anims_masks_stat3_palette -_080BB398: - ldr r0, _080BB39C @ =gFile_graphics_battle_anims_masks_stat4_palette - b _080BB3B2 - .align 2, 0 -_080BB39C: .4byte gFile_graphics_battle_anims_masks_stat4_palette -_080BB3A0: - ldr r0, _080BB3A4 @ =gFile_graphics_battle_anims_masks_stat6_palette - b _080BB3B2 - .align 2, 0 -_080BB3A4: .4byte gFile_graphics_battle_anims_masks_stat6_palette -_080BB3A8: - ldr r0, _080BB3AC @ =gFile_graphics_battle_anims_masks_stat7_palette - b _080BB3B2 - .align 2, 0 -_080BB3AC: .4byte gFile_graphics_battle_anims_masks_stat7_palette -_080BB3B0: - ldr r0, _080BB3C0 @ =gFile_graphics_battle_anims_masks_stat8_palette -_080BB3B2: - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadCompressedPalette - b _080BB3D2 - .align 2, 0 -_080BB3C0: .4byte gFile_graphics_battle_anims_masks_stat8_palette -_080BB3C4: - ldr r0, _080BB3FC @ =gFile_graphics_battle_anims_masks_stat5_palette - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadCompressedPalette -_080BB3D2: - ldr r3, _080BB400 @ =gBattle_BG1_X - movs r2, 0 - strh r2, [r3] - ldr r0, _080BB404 @ =gBattle_BG1_Y - strh r2, [r0] - ldr r1, _080BB408 @ =gUnknown_20399B4 - ldr r0, [r1] - movs r4, 0x4 - ldrsh r0, [r0, r4] - adds r4, r1, 0 - cmp r0, 0x1 - bne _080BB414 - movs r0, 0x40 - strh r0, [r3] - ldr r2, _080BB40C @ =gTasks - lsls r3, r5, 2 - adds r0, r3, r5 - lsls r0, 3 - adds r0, r2 - ldr r1, _080BB410 @ =0x0000fffd - b _080BB420 - .align 2, 0 -_080BB3FC: .4byte gFile_graphics_battle_anims_masks_stat5_palette -_080BB400: .4byte gBattle_BG1_X -_080BB404: .4byte gBattle_BG1_Y -_080BB408: .4byte gUnknown_20399B4 -_080BB40C: .4byte gTasks -_080BB410: .4byte 0x0000fffd -_080BB414: - ldr r2, _080BB43C @ =gTasks - lsls r3, r5, 2 - adds r0, r3, r5 - lsls r0, 3 - adds r0, r2 - movs r1, 0x3 -_080BB420: - strh r1, [r0, 0xA] - ldr r0, [r4] - movs r1, 0xC - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080BB440 - adds r0, r3, r5 - lsls r0, 3 - adds r0, r2 - movs r1, 0xA - strh r1, [r0, 0x10] - movs r1, 0x14 - b _080BB44C - .align 2, 0 -_080BB43C: .4byte gTasks -_080BB440: - adds r0, r3, r5 - lsls r0, 3 - adds r0, r2 - movs r1, 0xD - strh r1, [r0, 0x10] - movs r1, 0x1E -_080BB44C: - strh r1, [r0, 0x12] - adds r1, r3, r5 - lsls r1, 3 - adds r1, r2 - strh r7, [r1, 0x8] - ldr r3, [r4] - ldrh r0, [r3, 0xA] - strh r0, [r1, 0xC] - mov r4, r8 - strh r4, [r1, 0xE] - ldrb r0, [r3, 0x2] - strh r0, [r1, 0x14] - ldr r2, _080BB490 @ =gBattlerSpriteIds - ldrb r0, [r3, 0x1] - adds r0, r2 - ldrb r0, [r0] - strh r0, [r1, 0x16] - ldr r0, _080BB494 @ =sub_80BB4B8 - str r0, [r1] - movs r1, 0x4 - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _080BB498 - movs r0, 0x40 - negs r0, r0 - bl sub_8073B08 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0xE8 - bl PlaySE12WithPanning - b _080BB4AC - .align 2, 0 -_080BB490: .4byte gBattlerSpriteIds -_080BB494: .4byte sub_80BB4B8 -_080BB498: - movs r0, 0x40 - negs r0, r0 - bl sub_8073B08 - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0xEE - bl PlaySE12WithPanning -_080BB4AC: - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80BB2A0 - - thumb_func_start sub_80BB4B8 -sub_80BB4B8: @ 80BB4B8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r2, _080BB4E4 @ =gBattle_BG1_Y - ldr r1, _080BB4E8 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r5, r0, r1 - ldrh r0, [r5, 0xA] - ldrh r1, [r2] - adds r0, r1 - strh r0, [r2] - movs r0, 0x26 - ldrsh r2, [r5, r0] - cmp r2, 0x1 - beq _080BB52E - cmp r2, 0x1 - bgt _080BB4EC - cmp r2, 0 - beq _080BB4F6 - b _080BB644 - .align 2, 0 -_080BB4E4: .4byte gBattle_BG1_Y -_080BB4E8: .4byte gTasks -_080BB4EC: - cmp r2, 0x2 - beq _080BB544 - cmp r2, 0x3 - beq _080BB582 - b _080BB644 -_080BB4F6: - ldrh r0, [r5, 0x1E] - adds r1, r0, 0x1 - strh r1, [r5, 0x1E] - lsls r0, 16 - cmp r0, 0 - bgt _080BB504 - b _080BB644 -_080BB504: - strh r2, [r5, 0x1E] - ldrh r1, [r5, 0x20] - adds r1, 0x1 - strh r1, [r5, 0x20] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r2, 0x20 - ldrsh r1, [r5, r2] - movs r2, 0x10 - ldrsh r0, [r5, r2] - cmp r1, r0 - beq _080BB52C - b _080BB644 -_080BB52C: - b _080BB57A -_080BB52E: - ldrh r0, [r5, 0x1C] - adds r0, 0x1 - strh r0, [r5, 0x1C] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x12 - ldrsh r1, [r5, r2] - cmp r0, r1 - beq _080BB542 - b _080BB644 -_080BB542: - b _080BB57A -_080BB544: - ldrh r0, [r5, 0x1E] - adds r1, r0, 0x1 - strh r1, [r5, 0x1E] - lsls r0, 16 - cmp r0, 0 - ble _080BB644 - movs r0, 0 - strh r0, [r5, 0x1E] - ldrh r1, [r5, 0x20] - subs r1, 0x1 - strh r1, [r5, 0x20] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0x20 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080BB644 - movs r0, 0 - bl sub_8073128 -_080BB57A: - ldrh r0, [r5, 0x26] - adds r0, 0x1 - strh r0, [r5, 0x26] - b _080BB644 -_080BB582: - ldr r0, _080BB64C @ =gUnknown_2022984 - movs r1, 0 - strh r1, [r0] - ldr r0, _080BB650 @ =gUnknown_2022986 - strh r1, [r0] - ldr r4, _080BB654 @ =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080BB5B2 - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - bl SetAnimBgAttribute -_080BB5B2: - movs r0, 0 - bl GetGpuReg - adds r1, r0, 0 - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - eors r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _080BB658 @ =gSprites - adds r0, r4 - bl DestroySprite - movs r1, 0xC - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080BB606 - movs r2, 0xE - ldrsh r1, [r5, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite -_080BB606: - movs r1, 0x14 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _080BB632 - movs r2, 0x16 - ldrsh r0, [r5, r2] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r4 - ldrb r3, [r2, 0x5] - lsls r1, r3, 28 - lsrs r1, 30 - adds r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] -_080BB632: - ldr r4, _080BB65C @ =gUnknown_20399B4 - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080BB644: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BB64C: .4byte gUnknown_2022984 -_080BB650: .4byte gUnknown_2022986 -_080BB654: .4byte 0x00003f3f -_080BB658: .4byte gSprites -_080BB65C: .4byte gUnknown_20399B4 - thumb_func_end sub_80BB4B8 - - thumb_func_start sub_80BB660 -sub_80BB660: @ 80BB660 - push {r4-r6,lr} - sub sp, 0xC - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0x1 - movs r3, 0x1 - bl sub_8075CB8 - adds r6, r0, 0 - movs r1, 0 - bl sub_80BB790 - ldr r0, _080BB6C0 @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - lsrs r0, r6, 16 - movs r5, 0 - strh r0, [r4, 0x24] - str r5, [sp] - str r5, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_8075BE8 - adds r6, r0, 0 - ldr r1, _080BB6C4 @ =0x0000ffff - ands r6, r1 - adds r0, r6, 0 - bl sub_80BB790 - strh r6, [r4, 0x26] - strh r5, [r4, 0x8] - strh r5, [r4, 0xA] - ldr r0, _080BB6C8 @ =sub_80BB6CC - str r0, [r4] - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BB6C0: .4byte gTasks -_080BB6C4: .4byte 0x0000ffff -_080BB6C8: .4byte sub_80BB6CC - thumb_func_end sub_80BB660 - - thumb_func_start sub_80BB6CC -sub_80BB6CC: @ 80BB6CC - push {r4-r6,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080BB6F0 @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r1, [r4, r0] - cmp r1, 0x1 - beq _080BB710 - cmp r1, 0x1 - bgt _080BB6F4 - cmp r1, 0 - beq _080BB6FA - b _080BB78A - .align 2, 0 -_080BB6F0: .4byte gTasks -_080BB6F4: - cmp r1, 0x2 - beq _080BB784 - b _080BB78A -_080BB6FA: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - ble _080BB78A - strh r1, [r4, 0xA] - movs r0, 0x10 - strh r0, [r4, 0xC] - b _080BB778 -_080BB710: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080BB78A - movs r0, 0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - subs r0, 0x1 - strh r0, [r4, 0xC] - movs r5, 0 - movs r6, 0x1 -_080BB72C: - movs r1, 0x26 - ldrsh r0, [r4, r1] - asrs r0, r5 - ands r0, r6 - cmp r0, 0 - beq _080BB746 - lsls r0, r5, 20 - lsrs r0, 16 - ldrb r2, [r4, 0xC] - movs r1, 0x10 - ldr r3, _080BB780 @ =0x0000ffff - bl BlendPalette -_080BB746: - movs r1, 0x24 - ldrsh r0, [r4, r1] - asrs r0, r5 - ands r0, r6 - cmp r0, 0 - beq _080BB766 - lsls r0, r5, 20 - movs r1, 0x80 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - ldrb r2, [r4, 0xC] - movs r1, 0x10 - movs r3, 0 - bl BlendPalette -_080BB766: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0xF - bls _080BB72C - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080BB78A -_080BB778: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080BB78A - .align 2, 0 -_080BB780: .4byte 0x0000ffff -_080BB784: - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080BB78A: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80BB6CC - - thumb_func_start sub_80BB790 -sub_80BB790: @ 80BB790 - push {r4-r6,lr} - adds r3, r0, 0 - lsls r1, 16 - lsrs r6, r1, 16 - movs r2, 0 -_080BB79A: - movs r0, 0x1 - ands r0, r3 - lsrs r4, r3, 1 - adds r5, r2, 0x1 - cmp r0, 0 - beq _080BB7C6 - lsls r0, r2, 20 - lsrs r2, r0, 16 - adds r0, r2, 0 - adds r0, 0x10 - cmp r2, r0 - bge _080BB7C6 - ldr r1, _080BB7D8 @ =gPlttBufferFaded - adds r3, r0, 0 -_080BB7B6: - lsls r0, r2, 1 - adds r0, r1 - strh r6, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, r3 - blt _080BB7B6 -_080BB7C6: - adds r3, r4, 0 - lsls r0, r5, 16 - lsrs r2, r0, 16 - cmp r2, 0x1F - bls _080BB79A - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BB7D8: .4byte gPlttBufferFaded - thumb_func_end sub_80BB790 - - thumb_func_start sub_80BB7DC -sub_80BB7DC: @ 80BB7DC - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r4, 0 - movs r2, 0 - ldr r0, _080BB824 @ =gBattleAnimAttacker - ldrb r3, [r0] - movs r5, 0x1 -_080BB7EC: - cmp r3, r2 - beq _080BB7FA - adds r1, r2, 0 - adds r1, 0x10 - adds r0, r5, 0 - lsls r0, r1 - orrs r4, r0 -_080BB7FA: - adds r2, 0x1 - cmp r2, 0x3 - bls _080BB7EC - movs r2, 0x5 - ldr r0, _080BB828 @ =gBattleAnimArgs - adds r1, r0, 0 - adds r1, 0x8 -_080BB808: - ldrh r0, [r1] - strh r0, [r1, 0x2] - subs r1, 0x2 - subs r2, 0x1 - cmp r2, 0 - bne _080BB808 - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_80BAA4C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BB824: .4byte gBattleAnimAttacker -_080BB828: .4byte gBattleAnimArgs - thumb_func_end sub_80BB7DC - - thumb_func_start sub_80BB82C -sub_80BB82C: @ 80BB82C - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r0, 0 - bl sub_8075458 - ldr r0, _080BB894 @ =sub_80BB8A4 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _080BB898 @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080BB868 - ldr r0, _080BB89C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080BB868 - ldrh r0, [r4] - negs r0, r0 - strh r0, [r4] - ldrh r0, [r4, 0x2] - negs r0, r0 - strh r0, [r4, 0x2] -_080BB868: - ldr r0, _080BB8A0 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r2, _080BB898 @ =gBattleAnimArgs - ldrh r0, [r2] - strh r0, [r1, 0xA] - ldrh r0, [r2, 0x2] - strh r0, [r1, 0xC] - ldrh r0, [r2, 0x6] - strh r0, [r1, 0xE] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - adds r0, r6, 0 - bl DestroyAnimVisualTask - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BB894: .4byte sub_80BB8A4 -_080BB898: .4byte gBattleAnimArgs -_080BB89C: .4byte gBattleAnimAttacker -_080BB8A0: .4byte gTasks - thumb_func_end sub_80BB82C - - thumb_func_start sub_80BB8A4 -sub_80BB8A4: @ 80BB8A4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080BB910 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldrh r3, [r1, 0xA] - ldrh r0, [r1, 0x1C] - adds r3, r0 - movs r4, 0 - mov r12, r4 - strh r3, [r1, 0x1C] - ldrh r2, [r1, 0xC] - ldrh r7, [r1, 0x1E] - adds r2, r7 - strh r2, [r1, 0x1E] - ldr r6, _080BB914 @ =gBattle_BG3_X - lsls r0, r3, 16 - asrs r0, 24 - ldrh r4, [r6] - adds r0, r4 - strh r0, [r6] - ldr r4, _080BB918 @ =gBattle_BG3_Y - lsls r0, r2, 16 - asrs r0, 24 - ldrh r7, [r4] - adds r0, r7 - strh r0, [r4] - movs r0, 0xFF - ands r3, r0 - strh r3, [r1, 0x1C] - ands r2, r0 - strh r2, [r1, 0x1E] - ldr r0, _080BB91C @ =gBattleAnimArgs - movs r3, 0xE - ldrsh r2, [r0, r3] - movs r7, 0xE - ldrsh r0, [r1, r7] - cmp r2, r0 - bne _080BB90A - mov r0, r12 - strh r0, [r6] - strh r0, [r4] - movs r0, 0x1 - bl sub_8075458 - adds r0, r5, 0 - bl DestroyTask -_080BB90A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BB910: .4byte gTasks -_080BB914: .4byte gBattle_BG3_X -_080BB918: .4byte gBattle_BG3_Y -_080BB91C: .4byte gBattleAnimArgs - thumb_func_end sub_80BB8A4 - - thumb_func_start sub_80BB920 -sub_80BB920: @ 80BB920 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080BB944 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - ldr r1, _080BB948 @ =gBattleAnimArgs - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0xE] - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BB944: .4byte gBattleAnimAttacker -_080BB948: .4byte gBattleAnimArgs - thumb_func_end sub_80BB920 - - thumb_func_start sub_80BB94C -sub_80BB94C: @ 80BB94C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080BB970 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - ldr r1, _080BB974 @ =gBattleAnimArgs - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0xE] - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BB970: .4byte gBattleAnimTarget -_080BB974: .4byte gBattleAnimArgs - thumb_func_end sub_80BB94C - - thumb_func_start sub_80BB978 -sub_80BB978: @ 80BB978 - push {r4,r5,lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r5, _080BB9A4 @ =gBattleAnimArgs - movs r4, 0 - ldr r0, _080BB9A8 @ =gBattleAnimAttacker - ldrb r2, [r0] - movs r0, 0x2 - ldr r1, _080BB9AC @ =gBattleAnimTarget - eors r0, r2 - ldrb r1, [r1] - cmp r0, r1 - bne _080BB994 - movs r4, 0x1 -_080BB994: - strh r4, [r5, 0xE] - adds r0, r3, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BB9A4: .4byte gBattleAnimArgs -_080BB9A8: .4byte gBattleAnimAttacker -_080BB9AC: .4byte gBattleAnimTarget - thumb_func_end sub_80BB978 - - thumb_func_start sub_80BB9B0 -sub_80BB9B0: @ 80BB9B0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r6, _080BBA10 @ =gSprites -_080BB9BA: - ldr r0, _080BBA14 @ =gBattleAnimAttacker - ldrb r0, [r0] - cmp r4, r0 - beq _080BB9F8 - lsls r0, r4, 24 - lsrs r0, 24 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080BB9F8 - ldr r0, _080BBA18 @ =gBattlerSpriteIds - adds r0, r4, r0 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r6 - ldr r1, _080BBA1C @ =gBattleAnimArgs - adds r2, 0x3E - movs r0, 0x1 - ldrb r3, [r1] - ands r3, r0 - lsls r3, 2 - ldrb r0, [r2] - movs r7, 0x5 - negs r7, r7 - adds r1, r7, 0 - ands r0, r1 - orrs r0, r3 - strb r0, [r2] -_080BB9F8: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _080BB9BA - adds r0, r5, 0 - bl DestroyAnimVisualTask - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BBA10: .4byte gSprites -_080BBA14: .4byte gBattleAnimAttacker -_080BBA18: .4byte gBattlerSpriteIds -_080BBA1C: .4byte gBattleAnimArgs - thumb_func_end sub_80BB9B0 - - thumb_func_start sub_80BBA20 -sub_80BBA20: @ 80BBA20 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - ldr r1, [sp, 0x44] - ldr r4, [sp, 0x48] - ldr r5, [sp, 0x4C] - ldr r6, [sp, 0x50] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r2, 16 - lsrs r2, 16 - str r2, [sp, 0x14] - lsls r3, 24 - lsrs r7, r3, 24 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r4, 24 - lsrs r4, 24 - str r4, [sp, 0x18] - lsls r5, 24 - lsrs r5, 24 - str r5, [sp, 0x1C] - lsls r6, 24 - lsrs r6, 24 - mov r10, r6 - movs r0, 0 - str r0, [sp, 0x20] - movs r0, 0x2 - adds r6, r7, 0 - eors r6, r0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080BBA82 - mov r1, r8 - cmp r1, 0 - beq _080BBA86 - adds r0, r6, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - bne _080BBA86 -_080BBA82: - movs r2, 0 - mov r8, r2 -_080BBA86: - ldr r0, _080BBB20 @ =gUnknown_2022984 - movs r1, 0 - strh r1, [r0] - ldr r0, _080BBB24 @ =gUnknown_2022986 - strh r1, [r0] - ldr r1, _080BBB28 @ =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - ldr r1, _080BBB2C @ =0x00003f3d - movs r0, 0x4A - bl SetGpuReg - movs r1, 0x80 - lsls r1, 8 - movs r0, 0 - bl SetGpuRegBits - ldr r1, _080BBB30 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0xA - bl GetGpuReg - add r4, sp, 0x10 - strh r0, [r4] - ldrb r1, [r4] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r4] - mov r2, sp - adds r2, 0x11 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2] - ldrb r0, [r2] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r2] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080BBAFC - ldrb r0, [r4] - movs r1, 0xD - negs r1, r1 - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r4] -_080BBAFC: - ldrh r1, [r4] - movs r0, 0xA - bl SetGpuReg - adds r0, r7, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080BBB3C - ldr r1, _080BBB34 @ =gBattlerPartyIndexes - lsls r0, r7, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080BBB38 @ =gEnemyParty - b _080BBB4A - .align 2, 0 -_080BBB20: .4byte gUnknown_2022984 -_080BBB24: .4byte gUnknown_2022986 -_080BBB28: .4byte 0x00003f3f -_080BBB2C: .4byte 0x00003f3d -_080BBB30: .4byte 0x00003f42 -_080BBB34: .4byte gBattlerPartyIndexes -_080BBB38: .4byte gEnemyParty -_080BBB3C: - ldr r1, _080BBC10 @ =gBattlerPartyIndexes - lsls r0, r7, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080BBC14 @ =gPlayerParty -_080BBB4A: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - ldr r5, _080BBC18 @ =gBattlerSpriteIds - adds r0, r7, r5 - ldrb r1, [r0] - adds r0, r7, 0 - adds r2, r4, 0 - bl sub_8076E34 - lsls r0, 24 - lsrs r7, r0, 24 - mov r0, r8 - cmp r0, 0 - beq _080BBB80 - adds r0, r6, r5 - ldrb r1, [r0] - adds r0, r6, 0 - adds r2, r4, 0 - bl sub_8076E34 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x20] -_080BBB80: - mov r0, sp - bl sub_80752A0 - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, [sp, 0x58] - bl sub_807543C - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080BBBA8 - mov r0, sp - ldrb r0, [r0, 0x8] - ldr r1, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_80730C0 -_080BBBA8: - mov r0, sp - ldrb r0, [r0, 0x9] - mov r1, sp - ldrh r2, [r1, 0xA] - ldr r1, [sp, 0x54] - bl sub_80753B4 - mov r0, sp - ldrb r1, [r0, 0x8] - lsls r1, 4 - ldr r0, [sp, 0x5C] - movs r2, 0x20 - bl LoadCompressedPalette - ldr r0, _080BBC1C @ =gBattle_BG1_X - movs r1, 0 - strh r1, [r0] - ldr r0, _080BBC20 @ =gBattle_BG1_Y - strh r1, [r0] - ldr r1, _080BBC24 @ =gTasks - mov r2, r9 - lsls r0, r2, 2 - add r0, r9 - lsls r0, 3 - adds r0, r1 - mov r1, sp - ldrh r1, [r1, 0x14] - strh r1, [r0, 0xA] - mov r2, sp - ldrh r2, [r2, 0x18] - strh r2, [r0, 0x10] - mov r1, r10 - strh r1, [r0, 0x12] - mov r2, sp - ldrh r2, [r2, 0x1C] - strh r2, [r0, 0x14] - strh r7, [r0, 0x8] - mov r1, r8 - strh r1, [r0, 0xC] - mov r2, sp - ldrh r2, [r2, 0x20] - strh r2, [r0, 0xE] - ldr r1, _080BBC28 @ =sub_80BBC2C - str r1, [r0] - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BBC10: .4byte gBattlerPartyIndexes -_080BBC14: .4byte gPlayerParty -_080BBC18: .4byte gBattlerSpriteIds -_080BBC1C: .4byte gBattle_BG1_X -_080BBC20: .4byte gBattle_BG1_Y -_080BBC24: .4byte gTasks -_080BBC28: .4byte sub_80BBC2C - thumb_func_end sub_80BBA20 - - thumb_func_start sub_80BBC2C -sub_80BBC2C: @ 80BBC2C - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _080BBC68 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r3, r0, r1 - movs r0, 0xA - ldrsh r2, [r3, r0] - adds r5, r1, 0 - cmp r2, 0 - bge _080BBC4A - negs r2, r2 -_080BBC4A: - ldrh r0, [r3, 0x22] - adds r4, r0, r2 - strh r4, [r3, 0x22] - movs r1, 0xA - ldrsh r0, [r3, r1] - cmp r0, 0 - bge _080BBC70 - ldr r2, _080BBC6C @ =gBattle_BG1_Y - lsls r1, r4, 16 - asrs r1, 24 - ldrh r0, [r2] - subs r0, r1 - strh r0, [r2] - b _080BBC7C - .align 2, 0 -_080BBC68: .4byte gTasks -_080BBC6C: .4byte gBattle_BG1_Y -_080BBC70: - ldr r1, _080BBCA0 @ =gBattle_BG1_Y - lsls r0, r4, 16 - asrs r0, 24 - ldrh r2, [r1] - adds r0, r2 - strh r0, [r1] -_080BBC7C: - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r5, r0, r5 - ldrh r1, [r5, 0x22] - movs r0, 0xFF - ands r0, r1 - movs r2, 0 - strh r0, [r5, 0x22] - movs r3, 0x26 - ldrsh r0, [r5, r3] - cmp r0, 0x1 - beq _080BBCE6 - cmp r0, 0x1 - bgt _080BBCA4 - cmp r0, 0 - beq _080BBCAA - b _080BBDD8 - .align 2, 0 -_080BBCA0: .4byte gBattle_BG1_Y -_080BBCA4: - cmp r0, 0x2 - beq _080BBD00 - b _080BBDD8 -_080BBCAA: - ldrh r0, [r5, 0x1E] - adds r1, r0, 0x1 - strh r1, [r5, 0x1E] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x14 - ldrsh r1, [r5, r3] - cmp r0, r1 - bge _080BBCBE - b _080BBDD8 -_080BBCBE: - strh r2, [r5, 0x1E] - ldrh r1, [r5, 0x20] - adds r1, 0x1 - strh r1, [r5, 0x20] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x20 - ldrsh r1, [r5, r0] - movs r2, 0x10 - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _080BBDD8 - b _080BBCF8 -_080BBCE6: - ldrh r0, [r5, 0x1C] - adds r0, 0x1 - strh r0, [r5, 0x1C] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x12 - ldrsh r1, [r5, r3] - cmp r0, r1 - bne _080BBDD8 -_080BBCF8: - ldrh r0, [r5, 0x26] - adds r0, 0x1 - strh r0, [r5, 0x26] - b _080BBDD8 -_080BBD00: - ldrh r0, [r5, 0x1E] - adds r1, r0, 0x1 - strh r1, [r5, 0x1E] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x14 - ldrsh r1, [r5, r3] - cmp r0, r1 - blt _080BBDD8 - strh r2, [r5, 0x1E] - ldrh r1, [r5, 0x20] - subs r1, 0x1 - strh r1, [r5, 0x20] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x20 - ldrsh r4, [r5, r0] - cmp r4, 0 - bne _080BBDD8 - movs r0, 0 - bl sub_8073128 - ldr r0, _080BBDE0 @ =gUnknown_2022984 - strh r4, [r0] - ldr r0, _080BBDE4 @ =gUnknown_2022986 - strh r4, [r0] - ldr r4, _080BBDE8 @ =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080BBD7E - movs r0, 0xA - bl GetGpuReg - mov r1, sp - strh r0, [r1] - mov r2, sp - ldrb r1, [r2] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - strb r0, [r2] - mov r0, sp - ldrh r1, [r0] - movs r0, 0xA - bl SetGpuReg -_080BBD7E: - movs r0, 0 - bl GetGpuReg - adds r1, r0, 0 - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - eors r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r3, 0x8 - ldrsh r1, [r5, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _080BBDEC @ =gSprites - adds r0, r4 - bl DestroySprite - movs r1, 0xC - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080BBDD2 - movs r2, 0xE - ldrsh r1, [r5, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - bl DestroySprite -_080BBDD2: - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080BBDD8: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BBDE0: .4byte gUnknown_2022984 -_080BBDE4: .4byte gUnknown_2022986 -_080BBDE8: .4byte 0x00003f3f -_080BBDEC: .4byte gSprites - thumb_func_end sub_80BBC2C - - thumb_func_start sub_80BBDF0 -sub_80BBDF0: @ 80BBDF0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080BBE08 @ =gBattleAnimArgs - ldr r1, _080BBE0C @ =gBattleTerrain - ldrb r1, [r1] - strh r1, [r2] - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .align 2, 0 -_080BBE08: .4byte gBattleAnimArgs -_080BBE0C: .4byte gBattleTerrain - thumb_func_end sub_80BBDF0 - - thumb_func_start sub_80BBE10 -sub_80BBE10: @ 80BBE10 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x80 - lsls r0, 6 - bl AllocZeroed - ldr r1, _080BBE38 @ =gMonSpritesGfxPtr - ldr r1, [r1] - movs r2, 0xBE - lsls r2, 1 - adds r1, r2 - str r0, [r1] - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BBE38: .4byte gMonSpritesGfxPtr - thumb_func_end sub_80BBE10 - - thumb_func_start sub_80BBE3C -sub_80BBE3C: @ 80BBE3C - push {r4-r6,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r6, _080BBE68 @ =gMonSpritesGfxPtr - ldr r0, [r6] - movs r5, 0xBE - lsls r5, 1 - adds r0, r5 - ldr r0, [r0] - bl Free - ldr r0, [r6] - adds r0, r5 - movs r1, 0 - str r1, [r0] - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BBE68: .4byte gMonSpritesGfxPtr - thumb_func_end sub_80BBE3C - - thumb_func_start sub_80BBE6C -sub_80BBE6C: @ 80BBE6C - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r0, _080BBEAC @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080BBEB0 - str r4, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_8075BE8 - adds r1, r0, 0 - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080BBEC8 - movs r2, 0x1 -_080BBE9E: - lsrs r1, 1 - adds r4, 0x1 - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _080BBE9E - b _080BBEC8 - .align 2, 0 -_080BBEAC: .4byte gBattleAnimArgs -_080BBEB0: - cmp r0, 0x1 - bne _080BBEBC - ldr r0, _080BBEB8 @ =gBattleAnimAttacker - b _080BBEC2 - .align 2, 0 -_080BBEB8: .4byte gBattleAnimAttacker -_080BBEBC: - cmp r0, 0x2 - bne _080BBEC8 - ldr r0, _080BBEF8 @ =gBattleAnimTarget -_080BBEC2: - ldrb r0, [r0] - adds r4, r0, 0 - adds r4, 0x10 -_080BBEC8: - ldr r0, _080BBEFC @ =gMonSpritesGfxPtr - ldr r1, [r0] - ldr r0, _080BBF00 @ =gBattleAnimArgs - movs r2, 0x2 - ldrsh r0, [r0, r2] - movs r2, 0xBE - lsls r2, 1 - adds r1, r2 - ldr r1, [r1] - lsls r0, 5 - adds r0, r1 - lsls r1, r4, 5 - ldr r2, _080BBF04 @ =gPlttBufferUnfaded - adds r1, r2 - movs r2, 0x20 - bl memcpy - adds r0, r5, 0 - bl DestroyAnimVisualTask - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BBEF8: .4byte gBattleAnimTarget -_080BBEFC: .4byte gMonSpritesGfxPtr -_080BBF00: .4byte gBattleAnimArgs -_080BBF04: .4byte gPlttBufferUnfaded - thumb_func_end sub_80BBE6C - - thumb_func_start sub_80BBF08 -sub_80BBF08: @ 80BBF08 - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r0, _080BBF48 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080BBF4C - str r4, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_8075BE8 - adds r1, r0, 0 - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080BBF64 - movs r2, 0x1 -_080BBF3A: - lsrs r1, 1 - adds r4, 0x1 - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _080BBF3A - b _080BBF64 - .align 2, 0 -_080BBF48: .4byte gBattleAnimArgs -_080BBF4C: - cmp r0, 0x1 - bne _080BBF58 - ldr r0, _080BBF54 @ =gBattleAnimAttacker - b _080BBF5E - .align 2, 0 -_080BBF54: .4byte gBattleAnimAttacker -_080BBF58: - cmp r0, 0x2 - bne _080BBF64 - ldr r0, _080BBF94 @ =gBattleAnimTarget -_080BBF5E: - ldrb r0, [r0] - adds r4, r0, 0 - adds r4, 0x10 -_080BBF64: - lsls r0, r4, 5 - ldr r1, _080BBF98 @ =gPlttBufferUnfaded - adds r0, r1 - ldr r1, _080BBF9C @ =gMonSpritesGfxPtr - ldr r2, [r1] - ldr r1, _080BBFA0 @ =gBattleAnimArgs - movs r3, 0x2 - ldrsh r1, [r1, r3] - movs r3, 0xBE - lsls r3, 1 - adds r2, r3 - ldr r2, [r2] - lsls r1, 5 - adds r1, r2 - movs r2, 0x20 - bl memcpy - adds r0, r5, 0 - bl DestroyAnimVisualTask - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BBF94: .4byte gBattleAnimTarget -_080BBF98: .4byte gPlttBufferUnfaded -_080BBF9C: .4byte gMonSpritesGfxPtr -_080BBFA0: .4byte gBattleAnimArgs - thumb_func_end sub_80BBF08 - - thumb_func_start sub_80BBFA4 -sub_80BBFA4: @ 80BBFA4 - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r0, _080BBFE4 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080BBFE8 - str r4, [sp] - str r4, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_8075BE8 - adds r1, r0, 0 - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080BC000 - movs r2, 0x1 -_080BBFD6: - lsrs r1, 1 - adds r4, 0x1 - adds r0, r1, 0 - ands r0, r2 - cmp r0, 0 - beq _080BBFD6 - b _080BC000 - .align 2, 0 -_080BBFE4: .4byte gBattleAnimArgs -_080BBFE8: - cmp r0, 0x1 - bne _080BBFF4 - ldr r0, _080BBFF0 @ =gBattleAnimAttacker - b _080BBFFA - .align 2, 0 -_080BBFF0: .4byte gBattleAnimAttacker -_080BBFF4: - cmp r0, 0x2 - bne _080BC000 - ldr r0, _080BC020 @ =gBattleAnimTarget -_080BBFFA: - ldrb r0, [r0] - adds r4, r0, 0 - adds r4, 0x10 -_080BC000: - lsls r1, r4, 5 - ldr r0, _080BC024 @ =gPlttBufferUnfaded - adds r0, r1, r0 - ldr r2, _080BC028 @ =gPlttBufferFaded - adds r1, r2 - movs r2, 0x20 - bl memcpy - adds r0, r5, 0 - bl DestroyAnimVisualTask - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BC020: .4byte gBattleAnimTarget -_080BC024: .4byte gPlttBufferUnfaded -_080BC028: .4byte gPlttBufferFaded - thumb_func_end sub_80BBFA4 - - thumb_func_start sub_80BC02C -sub_80BC02C: @ 80BC02C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsContest - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _080BC04C - ldr r1, _080BC048 @ =gBattleAnimArgs - movs r0, 0x1 - strh r0, [r1, 0xE] - b _080BC050 - .align 2, 0 -_080BC048: .4byte gBattleAnimArgs -_080BC04C: - ldr r0, _080BC05C @ =gBattleAnimArgs - strh r1, [r0, 0xE] -_080BC050: - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BC05C: .4byte gBattleAnimArgs - thumb_func_end sub_80BC02C - - thumb_func_start sub_80BC060 -sub_80BC060: @ 80BC060 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080BC080 @ =gBattleAnimAttacker - ldr r1, _080BC084 @ =gBattlerTarget - ldrb r1, [r1] - strb r1, [r2] - ldr r2, _080BC088 @ =gBattleAnimTarget - ldr r1, _080BC08C @ =gEffectBattler - ldrb r1, [r1] - strb r1, [r2] - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .align 2, 0 -_080BC080: .4byte gBattleAnimAttacker -_080BC084: .4byte gBattlerTarget -_080BC088: .4byte gBattleAnimTarget -_080BC08C: .4byte gEffectBattler - thumb_func_end sub_80BC060 - - thumb_func_start sub_80BC090 -sub_80BC090: @ 80BC090 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080BC0B8 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - adds r4, r0, 0 - ldr r0, _080BC0BC @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _080BC0C4 - ldr r1, _080BC0C0 @ =gBattleAnimArgs - movs r0, 0x1 - b _080BC0C8 - .align 2, 0 -_080BC0B8: .4byte gBattleAnimAttacker -_080BC0BC: .4byte gBattleAnimTarget -_080BC0C0: .4byte gBattleAnimArgs -_080BC0C4: - ldr r1, _080BC0D8 @ =gBattleAnimArgs - movs r0, 0 -_080BC0C8: - strh r0, [r1, 0xE] - adds r0, r5, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BC0D8: .4byte gBattleAnimArgs - thumb_func_end sub_80BC090 - - thumb_func_start sub_80BC0DC -sub_80BC0DC: @ 80BC0DC - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080BC0F4 @ =gBattleAnimTarget - ldr r1, _080BC0F8 @ =gBattlerTarget - ldrb r1, [r1] - strb r1, [r2] - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .align 2, 0 -_080BC0F4: .4byte gBattleAnimTarget -_080BC0F8: .4byte gBattlerTarget - thumb_func_end sub_80BC0DC - - thumb_func_start sub_80BC0FC -sub_80BC0FC: @ 80BC0FC - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080BC11C @ =gBattleAnimAttacker - ldr r1, _080BC120 @ =gBattlerAttacker - ldrb r1, [r1] - strb r1, [r2] - ldr r2, _080BC124 @ =gBattleAnimTarget - ldr r1, _080BC128 @ =gEffectBattler - ldrb r1, [r1] - strb r1, [r2] - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .align 2, 0 -_080BC11C: .4byte gBattleAnimAttacker -_080BC120: .4byte gBattlerAttacker -_080BC124: .4byte gBattleAnimTarget -_080BC128: .4byte gEffectBattler - thumb_func_end sub_80BC0FC - - thumb_func_start sub_80BC12C -sub_80BC12C: @ 80BC12C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080BC144 - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _080BC180 -_080BC144: - ldr r0, _080BC188 @ =gTasks - lsls r3, r4, 2 - adds r3, r4 - lsls r3, 3 - adds r3, r0 - ldr r0, _080BC18C @ =gBattleSpritesDataPtr - ldr r4, [r0] - ldr r2, _080BC190 @ =gBattleAnimAttacker - ldrb r0, [r2] - ldr r1, [r4] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - lsls r0, 31 - lsrs r0, 31 - strh r0, [r3, 0x8] - ldrb r1, [r2] - ldr r0, [r4] - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1] - movs r2, 0x1 - orrs r0, r2 - strb r0, [r1] - ldr r0, _080BC194 @ =sub_80BC19C - str r0, [r3] - ldr r1, _080BC198 @ =gUnknown_2037EE2 - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] -_080BC180: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BC188: .4byte gTasks -_080BC18C: .4byte gBattleSpritesDataPtr -_080BC190: .4byte gBattleAnimAttacker -_080BC194: .4byte sub_80BC19C -_080BC198: .4byte gUnknown_2037EE2 - thumb_func_end sub_80BC12C - - thumb_func_start sub_80BC19C -sub_80BC19C: @ 80BC19C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080BC1E8 @ =gBattleAnimArgs - movs r2, 0xE - ldrsh r1, [r0, r2] - movs r0, 0x80 - lsls r0, 5 - cmp r1, r0 - bne _080BC1E0 - ldr r0, _080BC1EC @ =gBattleSpritesDataPtr - ldr r1, [r0] - ldr r0, _080BC1F0 @ =gBattleAnimAttacker - ldrb r3, [r0] - ldr r0, [r1] - lsls r3, 2 - adds r3, r0 - ldr r1, _080BC1F4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0, 0x8] - movs r1, 0x1 - ands r1, r0 - ldrb r2, [r3] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - adds r0, r4, 0 - bl DestroyTask -_080BC1E0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BC1E8: .4byte gBattleAnimArgs -_080BC1EC: .4byte gBattleSpritesDataPtr -_080BC1F0: .4byte gBattleAnimAttacker -_080BC1F4: .4byte gTasks - thumb_func_end sub_80BC19C - - thumb_func_start SetAnimBgAttribute -SetAnimBgAttribute: @ 80BC1F8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r2, 24 - lsrs r4, r2, 24 - cmp r6, 0x3 - bls _080BC20C - b _080BC2FE -_080BC20C: - ldr r0, _080BC228 @ =gUnknown_83E7CCA - adds r0, r6, r0 - ldrb r0, [r0] - bl GetGpuReg - ldr r1, _080BC22C @ =gUnknown_20399B8 - strh r0, [r1] - cmp r5, 0x6 - bhi _080BC2F0 - lsls r0, r5, 2 - ldr r1, _080BC230 @ =_080BC234 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BC228: .4byte gUnknown_83E7CCA -_080BC22C: .4byte gUnknown_20399B8 -_080BC230: .4byte _080BC234 - .align 2, 0 -_080BC234: - .4byte _080BC250 - .4byte _080BC264 - .4byte _080BC27C - .4byte _080BC294 - .4byte _080BC2AC - .4byte _080BC2C8 - .4byte _080BC2DC -_080BC250: - ldr r2, _080BC260 @ =gUnknown_20399B8 - lsls r3, r4, 6 - ldrb r1, [r2, 0x1] - movs r0, 0x3F - ands r0, r1 - orrs r0, r3 - strb r0, [r2, 0x1] - b _080BC2F0 - .align 2, 0 -_080BC260: .4byte gUnknown_20399B8 -_080BC264: - ldr r3, _080BC278 @ =gUnknown_20399B8 - movs r0, 0x1 - adds r1, r4, 0 - ands r1, r0 - lsls r1, 5 - ldrb r2, [r3, 0x1] - movs r0, 0x21 - negs r0, r0 - b _080BC2EA - .align 2, 0 -_080BC278: .4byte gUnknown_20399B8 -_080BC27C: - ldr r3, _080BC290 @ =gUnknown_20399B8 - movs r0, 0x1 - adds r1, r4, 0 - ands r1, r0 - lsls r1, 6 - ldrb r2, [r3] - movs r0, 0x41 - negs r0, r0 - b _080BC2BA - .align 2, 0 -_080BC290: .4byte gUnknown_20399B8 -_080BC294: - ldr r3, _080BC2A8 @ =gUnknown_20399B8 - movs r0, 0x3 - adds r1, r4, 0 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r3] - movs r0, 0xD - negs r0, r0 - b _080BC2BA - .align 2, 0 -_080BC2A8: .4byte gUnknown_20399B8 -_080BC2AC: - ldr r3, _080BC2C4 @ =gUnknown_20399B8 - movs r0, 0x3 - adds r1, r4, 0 - ands r1, r0 - ldrb r2, [r3] - movs r0, 0x4 - negs r0, r0 -_080BC2BA: - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _080BC2F0 - .align 2, 0 -_080BC2C4: .4byte gUnknown_20399B8 -_080BC2C8: - ldr r2, _080BC2D8 @ =gUnknown_20399B8 - lsls r3, r4, 7 - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - orrs r0, r3 - strb r0, [r2] - b _080BC2F0 - .align 2, 0 -_080BC2D8: .4byte gUnknown_20399B8 -_080BC2DC: - ldr r3, _080BC304 @ =gUnknown_20399B8 - movs r0, 0x1F - adds r1, r4, 0 - ands r1, r0 - ldrb r2, [r3, 0x1] - movs r0, 0x20 - negs r0, r0 -_080BC2EA: - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x1] -_080BC2F0: - ldr r0, _080BC308 @ =gUnknown_83E7CCA - adds r0, r6, r0 - ldrb r0, [r0] - ldr r1, _080BC304 @ =gUnknown_20399B8 - ldrh r1, [r1] - bl SetGpuReg -_080BC2FE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BC304: .4byte gUnknown_20399B8 -_080BC308: .4byte gUnknown_83E7CCA - thumb_func_end SetAnimBgAttribute - - thumb_func_start sub_80BC30C -sub_80BC30C: @ 80BC30C - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - cmp r2, 0x3 - bhi _080BC394 - ldr r0, _080BC338 @ =gUnknown_83E7CCE - adds r0, r2, r0 - ldrb r0, [r0] - bl GetGpuReg - mov r1, sp - strh r0, [r1] - cmp r4, 0x6 - bhi _080BC394 - lsls r0, r4, 2 - ldr r1, _080BC33C @ =_080BC340 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BC338: .4byte gUnknown_83E7CCE -_080BC33C: .4byte _080BC340 - .align 2, 0 -_080BC340: - .4byte _080BC35C - .4byte _080BC364 - .4byte _080BC36C - .4byte _080BC374 - .4byte _080BC37C - .4byte _080BC384 - .4byte _080BC38C -_080BC35C: - ldr r0, [sp] - lsls r0, 16 - lsrs r0, 30 - b _080BC396 -_080BC364: - ldr r0, [sp] - lsls r0, 18 - lsrs r0, 31 - b _080BC396 -_080BC36C: - ldr r0, [sp] - lsls r0, 25 - lsrs r0, 31 - b _080BC396 -_080BC374: - ldr r0, [sp] - lsls r0, 28 - lsrs r0, 30 - b _080BC396 -_080BC37C: - ldr r0, [sp] - lsls r0, 30 - lsrs r0, 30 - b _080BC396 -_080BC384: - ldr r0, [sp] - lsls r0, 24 - lsrs r0, 31 - b _080BC396 -_080BC38C: - ldr r0, [sp] - lsls r0, 19 - lsrs r0, 27 - b _080BC396 -_080BC394: - movs r0, 0 -_080BC396: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80BC30C - - thumb_func_start HandleIntroSlide -HandleIntroSlide: @ 80BC3A0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080BC3B8 @ =gBattleTypeFlags - ldr r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080BC3C0 - ldr r0, _080BC3BC @ =sub_80BCC4C - b _080BC3E8 - .align 2, 0 -_080BC3B8: .4byte gBattleTypeFlags -_080BC3BC: .4byte sub_80BCC4C -_080BC3C0: - movs r0, 0x80 - lsls r0, 5 - ands r1, r0 - cmp r1, 0 - beq _080BC3E0 - ldr r0, _080BC3D8 @ =gGameVersion - ldrb r0, [r0] - cmp r0, 0x2 - beq _080BC3E0 - movs r4, 0x3 - ldr r0, _080BC3DC @ =task00_battle_intro_80BC6C8 - b _080BC3E8 - .align 2, 0 -_080BC3D8: .4byte gGameVersion -_080BC3DC: .4byte task00_battle_intro_80BC6C8 -_080BC3E0: - ldr r1, _080BC414 @ =gUnknown_83E7CD4 - lsls r0, r4, 2 - adds r0, r1 - ldr r0, [r0] -_080BC3E8: - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080BC418 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x8] - strh r4, [r1, 0xA] - strh r0, [r1, 0xC] - strh r0, [r1, 0xE] - strh r0, [r1, 0x10] - strh r0, [r1, 0x12] - strh r0, [r1, 0x14] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BC414: .4byte gUnknown_83E7CD4 -_080BC418: .4byte gTasks - thumb_func_end HandleIntroSlide - - thumb_func_start sub_80BC41C -sub_80BC41C: @ 80BC41C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _080BC468 @ =gBattle_BG1_X - movs r1, 0 - strh r1, [r0] - ldr r0, _080BC46C @ =gBattle_BG1_Y - strh r1, [r0] - ldr r0, _080BC470 @ =gBattle_BG2_X - strh r1, [r0] - ldr r0, _080BC474 @ =gBattle_BG2_Y - strh r1, [r0] - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - ldr r4, _080BC478 @ =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BC468: .4byte gBattle_BG1_X -_080BC46C: .4byte gBattle_BG1_Y -_080BC470: .4byte gBattle_BG2_X -_080BC474: .4byte gBattle_BG2_Y -_080BC478: .4byte 0x00003f3f - thumb_func_end sub_80BC41C - - thumb_func_start task_battle_intro_80BC47C -task_battle_intro_80BC47C: @ 80BC47C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080BC4B4 @ =gBattle_BG1_X - ldrh r0, [r1] - adds r0, 0x6 - strh r0, [r1] - ldr r1, _080BC4B8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - mov r8, r1 - cmp r0, 0x4 - bls _080BC4A8 - b _080BC6BA -_080BC4A8: - lsls r0, 2 - ldr r1, _080BC4BC @ =_080BC4C0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BC4B4: .4byte gBattle_BG1_X -_080BC4B8: .4byte gTasks -_080BC4BC: .4byte _080BC4C0 - .align 2, 0 -_080BC4C0: - .4byte _080BC4D4 - .4byte _080BC504 - .4byte _080BC52C - .4byte _080BC574 - .4byte _080BC6B4 -_080BC4D4: - ldr r0, _080BC4EC @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080BC4F0 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - add r0, r8 - movs r1, 0x10 - b _080BC4FA - .align 2, 0 -_080BC4EC: .4byte gBattleTypeFlags -_080BC4F0: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - add r0, r8 - movs r1, 0x1 -_080BC4FA: - strh r1, [r0, 0xC] - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - b _080BC6BA -_080BC504: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - mov r3, r8 - adds r1, r0, r3 - ldrh r0, [r1, 0xC] - subs r0, 0x1 - strh r0, [r1, 0xC] - lsls r0, 16 - cmp r0, 0 - beq _080BC51C - b _080BC6BA -_080BC51C: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - b _080BC6BA -_080BC52C: - ldr r1, _080BC568 @ =gUnknown_2022986 - ldrh r0, [r1] - subs r0, 0xFF - strh r0, [r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - movs r1, 0xC0 - lsls r1, 6 - cmp r0, r1 - beq _080BC544 - b _080BC6BA -_080BC544: - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - add r1, r8 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0xF0 - strh r0, [r1, 0xC] - movs r0, 0x20 - strh r0, [r1, 0xE] - ldr r2, _080BC56C @ =gIntroSlideFlags - ldrh r1, [r2] - ldr r0, _080BC570 @ =0x0000fffe - ands r0, r1 - strh r0, [r2] - b _080BC6BA - .align 2, 0 -_080BC568: .4byte gUnknown_2022986 -_080BC56C: .4byte gIntroSlideFlags -_080BC570: .4byte 0x0000fffe -_080BC574: - lsls r0, r4, 2 - adds r1, r0, r4 - lsls r1, 3 - mov r5, r8 - adds r2, r1, r5 - ldrh r3, [r2, 0xE] - movs r5, 0xE - ldrsh r1, [r2, r5] - mov r12, r0 - cmp r1, 0 - beq _080BC590 - subs r0, r3, 0x1 - strh r0, [r2, 0xE] - b _080BC5BE -_080BC590: - movs r1, 0xA - ldrsh r0, [r2, r1] - cmp r0, 0x1 - bne _080BC5B0 - ldr r2, _080BC5A8 @ =gBattle_BG1_Y - ldrh r1, [r2] - ldr r0, _080BC5AC @ =0x0000ffb0 - cmp r1, r0 - beq _080BC5BE - subs r0, r1, 0x2 - b _080BC5BC - .align 2, 0 -_080BC5A8: .4byte gBattle_BG1_Y -_080BC5AC: .4byte 0x0000ffb0 -_080BC5B0: - ldr r2, _080BC690 @ =gBattle_BG1_Y - ldrh r1, [r2] - ldr r0, _080BC694 @ =0x0000ffc8 - cmp r1, r0 - beq _080BC5BE - subs r0, r1, 0x1 -_080BC5BC: - strh r0, [r2] -_080BC5BE: - ldr r2, _080BC698 @ =gUnknown_2022986 - ldrh r1, [r2] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _080BC5D2 - ldr r3, _080BC69C @ =0xfffffc04 - adds r0, r1, r3 - strh r0, [r2] -_080BC5D2: - mov r5, r12 - adds r0, r5, r4 - lsls r0, 3 - mov r2, r8 - adds r1, r0, r2 - ldrh r2, [r1, 0xC] - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080BC5EA - subs r0, r2, 0x2 - strh r0, [r1, 0xC] -_080BC5EA: - movs r3, 0 - ldr r5, _080BC6A0 @ =gScanlineEffect - mov r9, r5 - ldr r7, _080BC6A4 @ =gScanlineEffectRegBuffers - mov r6, r9 - adds r5, r1, 0 -_080BC5F6: - lsls r2, r3, 1 - ldrb r1, [r6, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r7 - ldrh r0, [r5, 0xC] - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x4F - ble _080BC5F6 - cmp r3, 0x9F - bgt _080BC63A - ldr r7, _080BC6A4 @ =gScanlineEffectRegBuffers - ldr r6, _080BC6A0 @ =gScanlineEffect - ldr r1, _080BC6A8 @ =gTasks - mov r2, r12 - adds r0, r2, r4 - lsls r0, 3 - adds r5, r0, r1 -_080BC620: - lsls r2, r3, 1 - ldrb r1, [r6, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r7 - ldrh r0, [r5, 0xC] - negs r0, r0 - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x9F - ble _080BC620 -_080BC63A: - mov r3, r12 - adds r0, r3, r4 - lsls r0, 3 - mov r5, r8 - adds r1, r0, r5 - movs r0, 0xC - ldrsh r2, [r1, r0] - cmp r2, 0 - bne _080BC6BA - movs r0, 0x3 - mov r3, r9 - strb r0, [r3, 0x15] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - str r2, [sp] - ldr r1, _080BC6AC @ =0x0600e000 - ldr r2, _080BC6B0 @ =0x05000200 - mov r0, sp - bl CpuSet - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r1, 0x9C - lsls r1, 8 - movs r0, 0xA - bl SetGpuReg - movs r1, 0xBC - lsls r1, 7 - movs r0, 0xC - bl SetGpuReg - b _080BC6BA - .align 2, 0 -_080BC690: .4byte gBattle_BG1_Y -_080BC694: .4byte 0x0000ffc8 -_080BC698: .4byte gUnknown_2022986 -_080BC69C: .4byte 0xfffffc04 -_080BC6A0: .4byte gScanlineEffect -_080BC6A4: .4byte gScanlineEffectRegBuffers -_080BC6A8: .4byte gTasks -_080BC6AC: .4byte 0x0600e000 -_080BC6B0: .4byte 0x05000200 -_080BC6B4: - adds r0, r4, 0 - bl sub_80BC41C -_080BC6BA: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end task_battle_intro_80BC47C - - thumb_func_start task00_battle_intro_80BC6C8 -task00_battle_intro_80BC6C8: @ 80BC6C8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080BC6F4 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r2, 0xA - ldrsh r0, [r0, r2] - adds r2, r1, 0 - cmp r0, 0x3 - beq _080BC708 - cmp r0, 0x3 - bgt _080BC6F8 - cmp r0, 0x2 - beq _080BC6FC - b _080BC710 - .align 2, 0 -_080BC6F4: .4byte gTasks -_080BC6F8: - cmp r0, 0x4 - bne _080BC710 -_080BC6FC: - ldr r1, _080BC704 @ =gBattle_BG1_X - ldrh r0, [r1] - adds r0, 0x8 - b _080BC70E - .align 2, 0 -_080BC704: .4byte gBattle_BG1_X -_080BC708: - ldr r1, _080BC74C @ =gBattle_BG1_X - ldrh r0, [r1] - adds r0, 0x6 -_080BC70E: - strh r0, [r1] -_080BC710: - lsls r0, r5, 2 - adds r1, r0, r5 - lsls r1, 3 - adds r4, r1, r2 - movs r3, 0xA - ldrsh r1, [r4, r3] - adds r6, r0, 0 - cmp r1, 0x4 - bne _080BC774 - ldr r7, _080BC750 @ =gBattle_BG1_Y - ldrh r0, [r4, 0x14] - bl Cos2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _080BC736 - ldr r1, _080BC754 @ =0x000001ff - adds r0, r1 -_080BC736: - asrs r0, 9 - subs r0, 0x8 - strh r0, [r7] - ldrh r1, [r4, 0x14] - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0xB3 - bgt _080BC758 - adds r0, r1, 0x4 - b _080BC75A - .align 2, 0 -_080BC74C: .4byte gBattle_BG1_X -_080BC750: .4byte gBattle_BG1_Y -_080BC754: .4byte 0x000001ff -_080BC758: - adds r0, r1, 0x6 -_080BC75A: - strh r0, [r4, 0x14] - ldr r2, _080BC790 @ =gTasks - adds r0, r6, r5 - lsls r0, 3 - adds r3, r0, r2 - movs r0, 0x14 - ldrsh r1, [r3, r0] - movs r0, 0xB4 - lsls r0, 1 - cmp r1, r0 - bne _080BC774 - movs r0, 0 - strh r0, [r3, 0x14] -_080BC774: - adds r0, r6, r5 - lsls r0, 3 - adds r0, r2 - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, 0x4 - bls _080BC784 - b _080BC9AA -_080BC784: - lsls r0, 2 - ldr r1, _080BC794 @ =_080BC798 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BC790: .4byte gTasks -_080BC794: .4byte _080BC798 - .align 2, 0 -_080BC798: - .4byte _080BC7AC - .4byte _080BC7DC - .4byte _080BC808 - .4byte _080BC858 - .4byte _080BC9A4 -_080BC7AC: - ldr r1, _080BC7C8 @ =gTasks - adds r0, r6, r5 - lsls r0, 3 - adds r2, r0, r1 - movs r3, 0x10 - strh r3, [r2, 0x10] - ldr r0, _080BC7CC @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080BC7D0 - strh r3, [r2, 0xC] - b _080BC7D4 - .align 2, 0 -_080BC7C8: .4byte gTasks -_080BC7CC: .4byte gBattleTypeFlags -_080BC7D0: - movs r0, 0x1 - strh r0, [r2, 0xC] -_080BC7D4: - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - b _080BC9AA -_080BC7DC: - ldr r0, _080BC804 @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0xC] - subs r0, 0x1 - strh r0, [r1, 0xC] - lsls r0, 16 - cmp r0, 0 - beq _080BC7F2 - b _080BC9AA -_080BC7F2: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - b _080BC9AA - .align 2, 0 -_080BC804: .4byte gTasks -_080BC808: - ldr r1, _080BC848 @ =gUnknown_2022986 - ldrh r0, [r1] - subs r0, 0xFF - strh r0, [r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - movs r1, 0xC0 - lsls r1, 6 - cmp r0, r1 - beq _080BC820 - b _080BC9AA -_080BC820: - ldr r0, _080BC84C @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0xF0 - strh r0, [r1, 0xC] - movs r0, 0x20 - strh r0, [r1, 0xE] - movs r0, 0x1 - strh r0, [r1, 0x12] - ldr r2, _080BC850 @ =gIntroSlideFlags - ldrh r1, [r2] - ldr r0, _080BC854 @ =0x0000fffe - ands r0, r1 - strh r0, [r2] - b _080BC9AA - .align 2, 0 -_080BC848: .4byte gUnknown_2022986 -_080BC84C: .4byte gTasks -_080BC850: .4byte gIntroSlideFlags -_080BC854: .4byte 0x0000fffe -_080BC858: - ldr r0, _080BC890 @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - ldrh r2, [r1, 0xE] - movs r3, 0xE - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080BC898 - subs r0, r2, 0x1 - strh r0, [r1, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _080BC8B8 - ldr r1, _080BC894 @ =0x00001842 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0xF - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - b _080BC8B8 - .align 2, 0 -_080BC890: .4byte gTasks -_080BC894: .4byte 0x00001842 -_080BC898: - ldrh r2, [r1, 0x10] - movs r0, 0x1F - ands r0, r2 - cmp r0, 0 - beq _080BC8B8 - ldrh r0, [r1, 0x12] - subs r0, 0x1 - strh r0, [r1, 0x12] - lsls r0, 16 - cmp r0, 0 - bne _080BC8B8 - adds r0, r2, 0 - adds r0, 0xFF - strh r0, [r1, 0x10] - movs r0, 0x4 - strh r0, [r1, 0x12] -_080BC8B8: - ldr r2, _080BC988 @ =gUnknown_2022986 - ldrh r1, [r2] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _080BC8CC - ldr r3, _080BC98C @ =0xfffffc04 - adds r0, r1, r3 - strh r0, [r2] -_080BC8CC: - ldr r0, _080BC990 @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - ldrh r2, [r1, 0xC] - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080BC8E2 - subs r0, r2, 0x2 - strh r0, [r1, 0xC] -_080BC8E2: - movs r3, 0 - ldr r0, _080BC994 @ =gScanlineEffect - mov r8, r0 - ldr r2, _080BC998 @ =gScanlineEffectRegBuffers - mov r12, r2 - mov r7, r8 - adds r4, r1, 0 -_080BC8F0: - lsls r2, r3, 1 - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - add r2, r12 - ldrh r0, [r4, 0xC] - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x4F - ble _080BC8F0 - cmp r3, 0x9F - bgt _080BC934 - ldr r0, _080BC998 @ =gScanlineEffectRegBuffers - mov r12, r0 - ldr r7, _080BC994 @ =gScanlineEffect - ldr r1, _080BC990 @ =gTasks - adds r0, r6, r5 - lsls r0, 3 - adds r4, r0, r1 -_080BC91A: - lsls r2, r3, 1 - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - add r2, r12 - ldrh r0, [r4, 0xC] - negs r0, r0 - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x9F - ble _080BC91A -_080BC934: - ldr r1, _080BC990 @ =gTasks - adds r0, r6, r5 - lsls r0, 3 - adds r1, r0, r1 - movs r3, 0xC - ldrsh r2, [r1, r3] - cmp r2, 0 - bne _080BC9AA - movs r0, 0x3 - mov r3, r8 - strb r0, [r3, 0x15] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - str r2, [sp] - ldr r1, _080BC99C @ =0x0600e000 - ldr r2, _080BC9A0 @ =0x05000200 - mov r0, sp - bl CpuSet - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r1, 0x9C - lsls r1, 8 - movs r0, 0xA - bl SetGpuReg - movs r1, 0xBC - lsls r1, 7 - movs r0, 0xC - bl SetGpuReg - b _080BC9AA - .align 2, 0 -_080BC988: .4byte gUnknown_2022986 -_080BC98C: .4byte 0xfffffc04 -_080BC990: .4byte gTasks -_080BC994: .4byte gScanlineEffect -_080BC998: .4byte gScanlineEffectRegBuffers -_080BC99C: .4byte 0x0600e000 -_080BC9A0: .4byte 0x05000200 -_080BC9A4: - adds r0, r5, 0 - bl sub_80BC41C -_080BC9AA: - ldr r0, _080BC9D0 @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0x4 - beq _080BC9C2 - ldrh r1, [r1, 0x10] - movs r0, 0x52 - bl SetGpuReg -_080BC9C2: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BC9D0: .4byte gTasks - thumb_func_end task00_battle_intro_80BC6C8 - - thumb_func_start task_battle_intro_anim -task_battle_intro_anim: @ 80BC9D4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080BCA08 @ =gBattle_BG1_X - ldrh r0, [r1] - adds r0, 0x8 - strh r0, [r1] - ldr r1, _080BCA0C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - adds r4, r1, 0 - cmp r0, 0x4 - bls _080BC9FE - b _080BCC22 -_080BC9FE: - lsls r0, 2 - ldr r1, _080BCA10 @ =_080BCA14 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BCA08: .4byte gBattle_BG1_X -_080BCA0C: .4byte gTasks -_080BCA10: .4byte _080BCA14 - .align 2, 0 -_080BCA14: - .4byte _080BCA28 - .4byte _080BCA7C - .4byte _080BCAA8 - .4byte _080BCAF8 - .4byte _080BCC1C -_080BCA28: - ldr r1, _080BCA60 @ =0x00001842 - movs r0, 0x50 - bl SetGpuReg - ldr r4, _080BCA64 @ =0x00000808 - movs r0, 0x52 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - ldr r1, _080BCA68 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r2, r0, r1 - strh r4, [r2, 0x10] - ldr r0, _080BCA6C @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080BCA70 - movs r0, 0x10 - b _080BCA72 - .align 2, 0 -_080BCA60: .4byte 0x00001842 -_080BCA64: .4byte 0x00000808 -_080BCA68: .4byte gTasks -_080BCA6C: .4byte gBattleTypeFlags -_080BCA70: - movs r0, 0x1 -_080BCA72: - strh r0, [r2, 0xC] - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - b _080BCC22 -_080BCA7C: - ldr r0, _080BCAA4 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0xC] - subs r0, 0x1 - strh r0, [r1, 0xC] - lsls r0, 16 - cmp r0, 0 - beq _080BCA94 - b _080BCC22 -_080BCA94: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - b _080BCC22 - .align 2, 0 -_080BCAA4: .4byte gTasks -_080BCAA8: - ldr r1, _080BCAE8 @ =gUnknown_2022986 - ldrh r0, [r1] - subs r0, 0xFF - strh r0, [r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - movs r1, 0xC0 - lsls r1, 6 - cmp r0, r1 - beq _080BCAC0 - b _080BCC22 -_080BCAC0: - ldr r0, _080BCAEC @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0xF0 - strh r0, [r1, 0xC] - movs r0, 0x20 - strh r0, [r1, 0xE] - movs r0, 0x1 - strh r0, [r1, 0x12] - ldr r2, _080BCAF0 @ =gIntroSlideFlags - ldrh r1, [r2] - ldr r0, _080BCAF4 @ =0x0000fffe - ands r0, r1 - strh r0, [r2] - b _080BCC22 - .align 2, 0 -_080BCAE8: .4byte gUnknown_2022986 -_080BCAEC: .4byte gTasks -_080BCAF0: .4byte gIntroSlideFlags -_080BCAF4: .4byte 0x0000fffe -_080BCAF8: - lsls r0, r5, 2 - adds r1, r0, r5 - lsls r1, 3 - adds r2, r1, r4 - ldrh r3, [r2, 0xE] - movs r6, 0xE - ldrsh r1, [r2, r6] - mov r12, r0 - cmp r1, 0 - beq _080BCB12 - subs r0, r3, 0x1 - strh r0, [r2, 0xE] - b _080BCB32 -_080BCB12: - ldrh r1, [r2, 0x10] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - beq _080BCB32 - ldrh r0, [r2, 0x12] - subs r0, 0x1 - strh r0, [r2, 0x12] - lsls r0, 16 - cmp r0, 0 - bne _080BCB32 - adds r0, r1, 0 - adds r0, 0xFF - strh r0, [r2, 0x10] - movs r0, 0x6 - strh r0, [r2, 0x12] -_080BCB32: - ldr r2, _080BCC00 @ =gUnknown_2022986 - ldrh r1, [r2] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _080BCB46 - ldr r3, _080BCC04 @ =0xfffffc04 - adds r0, r1, r3 - strh r0, [r2] -_080BCB46: - mov r6, r12 - adds r0, r6, r5 - lsls r0, 3 - adds r1, r0, r4 - ldrh r2, [r1, 0xC] - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080BCB5C - subs r0, r2, 0x2 - strh r0, [r1, 0xC] -_080BCB5C: - movs r3, 0 - ldr r6, _080BCC08 @ =gScanlineEffect - mov r8, r6 - ldr r7, _080BCC0C @ =gScanlineEffectRegBuffers - adds r4, r1, 0 -_080BCB66: - lsls r2, r3, 1 - ldrb r1, [r6, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r7 - ldrh r0, [r4, 0xC] - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x4F - ble _080BCB66 - cmp r3, 0x9F - bgt _080BCBAA - ldr r7, _080BCC0C @ =gScanlineEffectRegBuffers - ldr r6, _080BCC08 @ =gScanlineEffect - ldr r1, _080BCC10 @ =gTasks - mov r2, r12 - adds r0, r2, r5 - lsls r0, 3 - adds r4, r0, r1 -_080BCB90: - lsls r2, r3, 1 - ldrb r1, [r6, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r7 - ldrh r0, [r4, 0xC] - negs r0, r0 - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x9F - ble _080BCB90 -_080BCBAA: - ldr r1, _080BCC10 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r1, r0, r1 - movs r3, 0xC - ldrsh r2, [r1, r3] - cmp r2, 0 - bne _080BCC22 - movs r0, 0x3 - mov r6, r8 - strb r0, [r6, 0x15] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - str r2, [sp] - ldr r1, _080BCC14 @ =0x0600e000 - ldr r2, _080BCC18 @ =0x05000200 - mov r0, sp - bl CpuSet - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r1, 0x9C - lsls r1, 8 - movs r0, 0xA - bl SetGpuReg - movs r1, 0xBC - lsls r1, 7 - movs r0, 0xC - bl SetGpuReg - b _080BCC22 - .align 2, 0 -_080BCC00: .4byte gUnknown_2022986 -_080BCC04: .4byte 0xfffffc04 -_080BCC08: .4byte gScanlineEffect -_080BCC0C: .4byte gScanlineEffectRegBuffers -_080BCC10: .4byte gTasks -_080BCC14: .4byte 0x0600e000 -_080BCC18: .4byte 0x05000200 -_080BCC1C: - adds r0, r5, 0 - bl sub_80BC41C -_080BCC22: - ldr r0, _080BCC48 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0x4 - beq _080BCC3C - ldrh r1, [r1, 0x10] - movs r0, 0x52 - bl SetGpuReg -_080BCC3C: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BCC48: .4byte gTasks - thumb_func_end task_battle_intro_anim - - thumb_func_start sub_80BCC4C -sub_80BCC4C: @ 80BCC4C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _080BCC98 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r7, r0, r1 - movs r1, 0x8 - ldrsh r0, [r7, r1] - cmp r0, 0x1 - ble _080BCCC2 - movs r2, 0x10 - ldrsh r0, [r7, r2] - cmp r0, 0 - bne _080BCCC2 - ldr r2, _080BCC9C @ =gBattle_BG1_X - ldrh r1, [r2] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0 - bne _080BCC8A - cmp r1, 0x4F - bhi _080BCCA4 -_080BCC8A: - adds r0, r1, 0x3 - strh r0, [r2] - ldr r1, _080BCCA0 @ =gBattle_BG2_X - ldrh r0, [r1] - subs r0, 0x3 - strh r0, [r1] - b _080BCCC2 - .align 2, 0 -_080BCC98: .4byte gTasks -_080BCC9C: .4byte gBattle_BG1_X -_080BCCA0: .4byte gBattle_BG2_X -_080BCCA4: - str r5, [sp] - ldr r1, _080BCCE4 @ =0x0600e000 - ldr r4, _080BCCE8 @ =0x05000200 - mov r0, sp - adds r2, r4, 0 - bl CpuSet - str r5, [sp, 0x4] - add r0, sp, 0x4 - ldr r1, _080BCCEC @ =0x0600f000 - adds r2, r4, 0 - bl CpuSet - movs r0, 0x1 - strh r0, [r7, 0x10] -_080BCCC2: - ldr r0, _080BCCF0 @ =gTasks - lsls r2, r6, 2 - adds r1, r2, r6 - lsls r1, 3 - adds r1, r0 - movs r3, 0x8 - ldrsh r1, [r1, r3] - mov r9, r0 - adds r5, r2, 0 - cmp r1, 0x4 - bls _080BCCDA - b _080BCEE6 -_080BCCDA: - lsls r0, r1, 2 - ldr r1, _080BCCF4 @ =_080BCCF8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BCCE4: .4byte 0x0600e000 -_080BCCE8: .4byte 0x05000200 -_080BCCEC: .4byte 0x0600f000 -_080BCCF0: .4byte gTasks -_080BCCF4: .4byte _080BCCF8 - .align 2, 0 -_080BCCF8: - .4byte _080BCD0C - .4byte _080BCD1E - .4byte _080BCDC4 - .4byte _080BCE08 - .4byte _080BCEE0 -_080BCD0C: - adds r0, r5, r6 - lsls r0, 3 - add r0, r9 - movs r1, 0x20 - strh r1, [r0, 0xC] - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - b _080BCEE6 -_080BCD1E: - adds r0, r5, r6 - lsls r0, 3 - mov r2, r9 - adds r1, r0, r2 - ldrh r0, [r1, 0xC] - subs r0, 0x1 - strh r0, [r1, 0xC] - lsls r0, 16 - cmp r0, 0 - beq _080BCD34 - b _080BCEE6 -_080BCD34: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - ldr r4, _080BCDB4 @ =gSprites - ldr r5, _080BCDB8 @ =gBattleStruct - ldr r0, [r5] - adds r0, 0x7D - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r3, [r1, 0x1] - movs r2, 0xD - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - movs r3, 0x8 - mov r9, r3 - mov r3, r9 - orrs r0, r3 - strb r0, [r1, 0x1] - ldr r3, [r5] - adds r0, r3, 0 - adds r0, 0x7D - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - movs r1, 0x1C - adds r1, r4 - mov r8, r1 - add r0, r8 - ldr r6, _080BCDBC @ =sub_801182C - str r6, [r0] - adds r3, 0x7E - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0, 0x1] - ands r2, r1 - mov r3, r9 - orrs r2, r3 - strb r2, [r0, 0x1] - ldr r0, [r5] - adds r0, 0x7E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - str r6, [r0] - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - ldr r1, _080BCDC0 @ =0x00003f06 - movs r0, 0x4A - bl SetGpuReg - b _080BCEE6 - .align 2, 0 -_080BCDB4: .4byte gSprites -_080BCDB8: .4byte gBattleStruct -_080BCDBC: .4byte sub_801182C -_080BCDC0: .4byte 0x00003f06 -_080BCDC4: - ldr r1, _080BCDFC @ =gUnknown_2022986 - ldrh r0, [r1] - subs r0, 0xFF - strh r0, [r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - movs r1, 0xC0 - lsls r1, 6 - cmp r0, r1 - beq _080BCDDC - b _080BCEE6 -_080BCDDC: - adds r1, r5, r6 - lsls r1, 3 - add r1, r9 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0xF0 - strh r0, [r1, 0xC] - movs r0, 0x20 - strh r0, [r1, 0xE] - ldr r2, _080BCE00 @ =gIntroSlideFlags - ldrh r1, [r2] - ldr r0, _080BCE04 @ =0x0000fffe - ands r0, r1 - strh r0, [r2] - b _080BCEE6 - .align 2, 0 -_080BCDFC: .4byte gUnknown_2022986 -_080BCE00: .4byte gIntroSlideFlags -_080BCE04: .4byte 0x0000fffe -_080BCE08: - ldr r2, _080BCECC @ =gUnknown_2022986 - ldrh r1, [r2] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _080BCE1C - ldr r3, _080BCED0 @ =0xfffffc04 - adds r0, r1, r3 - strh r0, [r2] -_080BCE1C: - adds r0, r5, r6 - lsls r0, 3 - mov r2, r9 - adds r1, r0, r2 - ldrh r2, [r1, 0xC] - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080BCE32 - subs r0, r2, 0x2 - strh r0, [r1, 0xC] -_080BCE32: - movs r3, 0 - ldr r0, _080BCED4 @ =gScanlineEffect - mov r12, r0 - ldr r2, _080BCED8 @ =gScanlineEffectRegBuffers - mov r8, r2 - mov r7, r12 - adds r4, r1, 0 -_080BCE40: - lsls r2, r3, 1 - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - add r2, r8 - ldrh r0, [r4, 0xC] - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x4F - ble _080BCE40 - cmp r3, 0x9F - bgt _080BCE84 - ldr r0, _080BCED8 @ =gScanlineEffectRegBuffers - mov r8, r0 - ldr r7, _080BCED4 @ =gScanlineEffect - ldr r1, _080BCEDC @ =gTasks - adds r0, r5, r6 - lsls r0, 3 - adds r4, r0, r1 -_080BCE6A: - lsls r2, r3, 1 - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - add r2, r8 - ldrh r0, [r4, 0xC] - negs r0, r0 - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x9F - ble _080BCE6A -_080BCE84: - adds r0, r5, r6 - lsls r0, 3 - mov r2, r9 - adds r1, r0, r2 - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _080BCEE6 - movs r0, 0x3 - mov r2, r12 - strb r0, [r2, 0x15] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r1, 0x9C - lsls r1, 8 - movs r0, 0xA - bl SetGpuReg - movs r1, 0xBC - lsls r1, 7 - movs r0, 0xC - bl SetGpuReg - b _080BCEE6 - .align 2, 0 -_080BCECC: .4byte gUnknown_2022986 -_080BCED0: .4byte 0xfffffc04 -_080BCED4: .4byte gScanlineEffect -_080BCED8: .4byte gScanlineEffectRegBuffers -_080BCEDC: .4byte gTasks -_080BCEE0: - adds r0, r6, 0 - bl sub_80BC41C -_080BCEE6: - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80BCC4C - - thumb_func_start sub_80BCEF4 -sub_80BCEF4: @ 80BCEF4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - str r0, [sp] - adds r6, r2, 0 - adds r4, r3, 0 - ldr r0, [sp, 0x24] - ldr r7, [sp, 0x28] - ldr r2, [sp, 0x2C] - mov r9, r2 - ldr r5, [sp, 0x30] - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r6, 24 - lsrs r6, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r4, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080BCFC4 @ =gMonSpritesGfxPtr - ldr r2, [r1] - lsls r4, 2 - adds r2, 0x4 - adds r2, r4 - ldr r1, _080BCFC8 @ =gBattleMonForms - adds r0, r1 - ldrb r1, [r0] - lsls r1, 11 - ldr r0, [r2] - adds r0, r1 - movs r2, 0x80 - lsls r2, 3 - adds r1, r7, 0 - bl CpuSet - ldr r1, [sp] - lsls r0, r1, 24 - lsrs r0, 24 - movs r2, 0x80 - lsls r2, 5 - adds r1, r7, 0 - adds r3, r5, 0 - bl LoadBgTiles - adds r0, r6, 0 - adds r0, 0x8 - cmp r6, r0 - bge _080BCFA0 - mov r12, r0 - mov r2, r8 - lsls r7, r2, 1 -_080BCF72: - mov r1, r8 - adds r2, r1, 0 - adds r2, 0x8 - adds r4, r6, 0x1 - cmp r1, r2 - bge _080BCF9A - mov r0, r10 - lsls r3, r0, 12 - lsls r0, r6, 6 - add r0, r9 - adds r6, r7, r0 - subs r1, r2, r1 -_080BCF8A: - adds r0, r5, 0 - orrs r0, r3 - strh r0, [r6] - adds r5, 0x1 - adds r6, 0x2 - subs r1, 0x1 - cmp r1, 0 - bne _080BCF8A -_080BCF9A: - adds r6, r4, 0 - cmp r6, r12 - blt _080BCF72 -_080BCFA0: - ldr r1, [sp] - lsls r0, r1, 24 - lsrs r0, 24 - movs r2, 0x80 - lsls r2, 4 - mov r1, r9 - movs r3, 0 - bl LoadBgTilemap - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BCFC4: .4byte gMonSpritesGfxPtr -_080BCFC8: .4byte gBattleMonForms - thumb_func_end sub_80BCEF4 - - thumb_func_start sub_80BCFCC -sub_80BCFCC: @ 80BCFCC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r4, [sp, 0x24] - ldr r5, [sp, 0x28] - mov r8, r5 - ldr r5, [sp, 0x2C] - ldr r6, [sp, 0x30] - mov r9, r6 - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - lsls r1, 24 - lsls r2, 24 - lsls r3, 24 - lsls r4, 24 - lsrs r4, 24 - mov r10, r4 - mov r7, r8 - lsls r7, 16 - lsrs r6, r7, 16 - lsls r5, 24 - lsrs r5, 24 - mov r0, r9 - lsls r0, 24 - mov r9, r0 - ldr r4, _080BD090 @ =0x040000d4 - ldr r0, _080BD094 @ =gMonSpritesGfxPtr - ldr r0, [r0] - lsrs r2, 22 - adds r0, 0x4 - adds r0, r2 - lsrs r3, 13 - ldr r0, [r0] - adds r0, r3 - str r0, [r4] - movs r0, 0xC0 - lsls r0, 19 - adds r6, r0 - str r6, [r4, 0x4] - ldr r0, _080BD098 @ =0x80000400 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - adds r2, r7, 0 - lsrs r2, 21 - mov r6, r9 - lsrs r6, 15 - subs r4, r2, r6 - lsrs r0, r1, 24 - adds r1, r0, 0 - adds r1, 0x8 - cmp r0, r1 - bge _080BD080 - mov r9, r1 - mov r7, r12 - lsls r7, 1 - mov r8, r7 - lsls r5, 11 - str r5, [sp] -_080BD048: - mov r2, r12 - adds r3, r2, 0 - adds r3, 0x8 - adds r5, r0, 0x1 - cmp r2, r3 - bge _080BD07A - mov r1, r10 - lsls r6, r1, 12 - lsls r0, 6 - movs r7, 0xC0 - lsls r7, 19 - adds r0, r7 - ldr r1, [sp] - adds r0, r1, r0 - mov r7, r8 - adds r1, r7, r0 - subs r2, r3, r2 -_080BD06A: - adds r0, r4, 0 - orrs r0, r6 - strh r0, [r1] - adds r4, 0x1 - adds r1, 0x2 - subs r2, 0x1 - cmp r2, 0 - bne _080BD06A -_080BD07A: - adds r0, r5, 0 - cmp r0, r9 - blt _080BD048 -_080BD080: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BD090: .4byte 0x040000d4 -_080BD094: .4byte gMonSpritesGfxPtr -_080BD098: .4byte 0x80000400 - thumb_func_end sub_80BCFCC - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/battle_intro.s b/asm/battle_intro.s new file mode 100644 index 000000000..cb3c56e10 --- /dev/null +++ b/asm/battle_intro.s @@ -0,0 +1,1869 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start SetAnimBgAttribute +SetAnimBgAttribute: @ 80BC1F8 + push {r4-r6,lr} + lsls r0, 24 + lsrs r6, r0, 24 + lsls r1, 24 + lsrs r5, r1, 24 + lsls r2, 24 + lsrs r4, r2, 24 + cmp r6, 0x3 + bls _080BC20C + b _080BC2FE +_080BC20C: + ldr r0, _080BC228 @ =gUnknown_83E7CCA + adds r0, r6, r0 + ldrb r0, [r0] + bl GetGpuReg + ldr r1, _080BC22C @ =gUnknown_20399B8 + strh r0, [r1] + cmp r5, 0x6 + bhi _080BC2F0 + lsls r0, r5, 2 + ldr r1, _080BC230 @ =_080BC234 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080BC228: .4byte gUnknown_83E7CCA +_080BC22C: .4byte gUnknown_20399B8 +_080BC230: .4byte _080BC234 + .align 2, 0 +_080BC234: + .4byte _080BC250 + .4byte _080BC264 + .4byte _080BC27C + .4byte _080BC294 + .4byte _080BC2AC + .4byte _080BC2C8 + .4byte _080BC2DC +_080BC250: + ldr r2, _080BC260 @ =gUnknown_20399B8 + lsls r3, r4, 6 + ldrb r1, [r2, 0x1] + movs r0, 0x3F + ands r0, r1 + orrs r0, r3 + strb r0, [r2, 0x1] + b _080BC2F0 + .align 2, 0 +_080BC260: .4byte gUnknown_20399B8 +_080BC264: + ldr r3, _080BC278 @ =gUnknown_20399B8 + movs r0, 0x1 + adds r1, r4, 0 + ands r1, r0 + lsls r1, 5 + ldrb r2, [r3, 0x1] + movs r0, 0x21 + negs r0, r0 + b _080BC2EA + .align 2, 0 +_080BC278: .4byte gUnknown_20399B8 +_080BC27C: + ldr r3, _080BC290 @ =gUnknown_20399B8 + movs r0, 0x1 + adds r1, r4, 0 + ands r1, r0 + lsls r1, 6 + ldrb r2, [r3] + movs r0, 0x41 + negs r0, r0 + b _080BC2BA + .align 2, 0 +_080BC290: .4byte gUnknown_20399B8 +_080BC294: + ldr r3, _080BC2A8 @ =gUnknown_20399B8 + movs r0, 0x3 + adds r1, r4, 0 + ands r1, r0 + lsls r1, 2 + ldrb r2, [r3] + movs r0, 0xD + negs r0, r0 + b _080BC2BA + .align 2, 0 +_080BC2A8: .4byte gUnknown_20399B8 +_080BC2AC: + ldr r3, _080BC2C4 @ =gUnknown_20399B8 + movs r0, 0x3 + adds r1, r4, 0 + ands r1, r0 + ldrb r2, [r3] + movs r0, 0x4 + negs r0, r0 +_080BC2BA: + ands r0, r2 + orrs r0, r1 + strb r0, [r3] + b _080BC2F0 + .align 2, 0 +_080BC2C4: .4byte gUnknown_20399B8 +_080BC2C8: + ldr r2, _080BC2D8 @ =gUnknown_20399B8 + lsls r3, r4, 7 + ldrb r1, [r2] + movs r0, 0x7F + ands r0, r1 + orrs r0, r3 + strb r0, [r2] + b _080BC2F0 + .align 2, 0 +_080BC2D8: .4byte gUnknown_20399B8 +_080BC2DC: + ldr r3, _080BC304 @ =gUnknown_20399B8 + movs r0, 0x1F + adds r1, r4, 0 + ands r1, r0 + ldrb r2, [r3, 0x1] + movs r0, 0x20 + negs r0, r0 +_080BC2EA: + ands r0, r2 + orrs r0, r1 + strb r0, [r3, 0x1] +_080BC2F0: + ldr r0, _080BC308 @ =gUnknown_83E7CCA + adds r0, r6, r0 + ldrb r0, [r0] + ldr r1, _080BC304 @ =gUnknown_20399B8 + ldrh r1, [r1] + bl SetGpuReg +_080BC2FE: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080BC304: .4byte gUnknown_20399B8 +_080BC308: .4byte gUnknown_83E7CCA + thumb_func_end SetAnimBgAttribute + + thumb_func_start sub_80BC30C +sub_80BC30C: @ 80BC30C + push {r4,lr} + sub sp, 0x4 + lsls r0, 24 + lsrs r2, r0, 24 + lsls r1, 24 + lsrs r4, r1, 24 + cmp r2, 0x3 + bhi _080BC394 + ldr r0, _080BC338 @ =gUnknown_83E7CCE + adds r0, r2, r0 + ldrb r0, [r0] + bl GetGpuReg + mov r1, sp + strh r0, [r1] + cmp r4, 0x6 + bhi _080BC394 + lsls r0, r4, 2 + ldr r1, _080BC33C @ =_080BC340 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080BC338: .4byte gUnknown_83E7CCE +_080BC33C: .4byte _080BC340 + .align 2, 0 +_080BC340: + .4byte _080BC35C + .4byte _080BC364 + .4byte _080BC36C + .4byte _080BC374 + .4byte _080BC37C + .4byte _080BC384 + .4byte _080BC38C +_080BC35C: + ldr r0, [sp] + lsls r0, 16 + lsrs r0, 30 + b _080BC396 +_080BC364: + ldr r0, [sp] + lsls r0, 18 + lsrs r0, 31 + b _080BC396 +_080BC36C: + ldr r0, [sp] + lsls r0, 25 + lsrs r0, 31 + b _080BC396 +_080BC374: + ldr r0, [sp] + lsls r0, 28 + lsrs r0, 30 + b _080BC396 +_080BC37C: + ldr r0, [sp] + lsls r0, 30 + lsrs r0, 30 + b _080BC396 +_080BC384: + ldr r0, [sp] + lsls r0, 24 + lsrs r0, 31 + b _080BC396 +_080BC38C: + ldr r0, [sp] + lsls r0, 19 + lsrs r0, 27 + b _080BC396 +_080BC394: + movs r0, 0 +_080BC396: + add sp, 0x4 + pop {r4} + pop {r1} + bx r1 + thumb_func_end sub_80BC30C + + thumb_func_start HandleIntroSlide +HandleIntroSlide: @ 80BC3A0 + push {r4,lr} + lsls r0, 24 + lsrs r4, r0, 24 + ldr r0, _080BC3B8 @ =gBattleTypeFlags + ldr r1, [r0] + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + beq _080BC3C0 + ldr r0, _080BC3BC @ =sub_80BCC4C + b _080BC3E8 + .align 2, 0 +_080BC3B8: .4byte gBattleTypeFlags +_080BC3BC: .4byte sub_80BCC4C +_080BC3C0: + movs r0, 0x80 + lsls r0, 5 + ands r1, r0 + cmp r1, 0 + beq _080BC3E0 + ldr r0, _080BC3D8 @ =gGameVersion + ldrb r0, [r0] + cmp r0, 0x2 + beq _080BC3E0 + movs r4, 0x3 + ldr r0, _080BC3DC @ =task00_battle_intro_80BC6C8 + b _080BC3E8 + .align 2, 0 +_080BC3D8: .4byte gGameVersion +_080BC3DC: .4byte task00_battle_intro_80BC6C8 +_080BC3E0: + ldr r1, _080BC414 @ =gUnknown_83E7CD4 + lsls r0, r4, 2 + adds r0, r1 + ldr r0, [r0] +_080BC3E8: + movs r1, 0 + bl CreateTask + lsls r0, 24 + lsrs r2, r0, 24 + ldr r0, _080BC418 @ =gTasks + lsls r1, r2, 2 + adds r1, r2 + lsls r1, 3 + adds r1, r0 + movs r0, 0 + strh r0, [r1, 0x8] + strh r4, [r1, 0xA] + strh r0, [r1, 0xC] + strh r0, [r1, 0xE] + strh r0, [r1, 0x10] + strh r0, [r1, 0x12] + strh r0, [r1, 0x14] + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080BC414: .4byte gUnknown_83E7CD4 +_080BC418: .4byte gTasks + thumb_func_end HandleIntroSlide + + thumb_func_start sub_80BC41C +sub_80BC41C: @ 80BC41C + push {r4,lr} + lsls r0, 24 + lsrs r0, 24 + bl DestroyTask + ldr r0, _080BC468 @ =gBattle_BG1_X + movs r1, 0 + strh r1, [r0] + ldr r0, _080BC46C @ =gBattle_BG1_Y + strh r1, [r0] + ldr r0, _080BC470 @ =gBattle_BG2_X + strh r1, [r0] + ldr r0, _080BC474 @ =gBattle_BG2_Y + strh r1, [r0] + movs r0, 0x50 + movs r1, 0 + bl SetGpuReg + movs r0, 0x52 + movs r1, 0 + bl SetGpuReg + movs r0, 0x54 + movs r1, 0 + bl SetGpuReg + ldr r4, _080BC478 @ =0x00003f3f + movs r0, 0x48 + adds r1, r4, 0 + bl SetGpuReg + movs r0, 0x4A + adds r1, r4, 0 + bl SetGpuReg + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080BC468: .4byte gBattle_BG1_X +_080BC46C: .4byte gBattle_BG1_Y +_080BC470: .4byte gBattle_BG2_X +_080BC474: .4byte gBattle_BG2_Y +_080BC478: .4byte 0x00003f3f + thumb_func_end sub_80BC41C + + thumb_func_start task_battle_intro_80BC47C +task_battle_intro_80BC47C: @ 80BC47C + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + sub sp, 0x4 + lsls r0, 24 + lsrs r4, r0, 24 + ldr r1, _080BC4B4 @ =gBattle_BG1_X + ldrh r0, [r1] + adds r0, 0x6 + strh r0, [r1] + ldr r1, _080BC4B8 @ =gTasks + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + adds r0, r1 + movs r2, 0x8 + ldrsh r0, [r0, r2] + mov r8, r1 + cmp r0, 0x4 + bls _080BC4A8 + b _080BC6BA +_080BC4A8: + lsls r0, 2 + ldr r1, _080BC4BC @ =_080BC4C0 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080BC4B4: .4byte gBattle_BG1_X +_080BC4B8: .4byte gTasks +_080BC4BC: .4byte _080BC4C0 + .align 2, 0 +_080BC4C0: + .4byte _080BC4D4 + .4byte _080BC504 + .4byte _080BC52C + .4byte _080BC574 + .4byte _080BC6B4 +_080BC4D4: + ldr r0, _080BC4EC @ =gBattleTypeFlags + ldr r0, [r0] + movs r1, 0x2 + ands r0, r1 + cmp r0, 0 + beq _080BC4F0 + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + add r0, r8 + movs r1, 0x10 + b _080BC4FA + .align 2, 0 +_080BC4EC: .4byte gBattleTypeFlags +_080BC4F0: + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + add r0, r8 + movs r1, 0x1 +_080BC4FA: + strh r1, [r0, 0xC] + ldrh r1, [r0, 0x8] + adds r1, 0x1 + strh r1, [r0, 0x8] + b _080BC6BA +_080BC504: + lsls r0, r4, 2 + adds r0, r4 + lsls r0, 3 + mov r3, r8 + adds r1, r0, r3 + ldrh r0, [r1, 0xC] + subs r0, 0x1 + strh r0, [r1, 0xC] + lsls r0, 16 + cmp r0, 0 + beq _080BC51C + b _080BC6BA +_080BC51C: + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + movs r0, 0x48 + movs r1, 0x3F + bl SetGpuReg + b _080BC6BA +_080BC52C: + ldr r1, _080BC568 @ =gBattle_WIN0V + ldrh r0, [r1] + subs r0, 0xFF + strh r0, [r1] + movs r1, 0xFF + lsls r1, 8 + ands r0, r1 + movs r1, 0xC0 + lsls r1, 6 + cmp r0, r1 + beq _080BC544 + b _080BC6BA +_080BC544: + lsls r1, r4, 2 + adds r1, r4 + lsls r1, 3 + add r1, r8 + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + movs r0, 0xF0 + strh r0, [r1, 0xC] + movs r0, 0x20 + strh r0, [r1, 0xE] + ldr r2, _080BC56C @ =gIntroSlideFlags + ldrh r1, [r2] + ldr r0, _080BC570 @ =0x0000fffe + ands r0, r1 + strh r0, [r2] + b _080BC6BA + .align 2, 0 +_080BC568: .4byte gBattle_WIN0V +_080BC56C: .4byte gIntroSlideFlags +_080BC570: .4byte 0x0000fffe +_080BC574: + lsls r0, r4, 2 + adds r1, r0, r4 + lsls r1, 3 + mov r5, r8 + adds r2, r1, r5 + ldrh r3, [r2, 0xE] + movs r5, 0xE + ldrsh r1, [r2, r5] + mov r12, r0 + cmp r1, 0 + beq _080BC590 + subs r0, r3, 0x1 + strh r0, [r2, 0xE] + b _080BC5BE +_080BC590: + movs r1, 0xA + ldrsh r0, [r2, r1] + cmp r0, 0x1 + bne _080BC5B0 + ldr r2, _080BC5A8 @ =gBattle_BG1_Y + ldrh r1, [r2] + ldr r0, _080BC5AC @ =0x0000ffb0 + cmp r1, r0 + beq _080BC5BE + subs r0, r1, 0x2 + b _080BC5BC + .align 2, 0 +_080BC5A8: .4byte gBattle_BG1_Y +_080BC5AC: .4byte 0x0000ffb0 +_080BC5B0: + ldr r2, _080BC690 @ =gBattle_BG1_Y + ldrh r1, [r2] + ldr r0, _080BC694 @ =0x0000ffc8 + cmp r1, r0 + beq _080BC5BE + subs r0, r1, 0x1 +_080BC5BC: + strh r0, [r2] +_080BC5BE: + ldr r2, _080BC698 @ =gBattle_WIN0V + ldrh r1, [r2] + movs r0, 0xFF + lsls r0, 8 + ands r0, r1 + cmp r0, 0 + beq _080BC5D2 + ldr r3, _080BC69C @ =0xfffffc04 + adds r0, r1, r3 + strh r0, [r2] +_080BC5D2: + mov r5, r12 + adds r0, r5, r4 + lsls r0, 3 + mov r2, r8 + adds r1, r0, r2 + ldrh r2, [r1, 0xC] + movs r3, 0xC + ldrsh r0, [r1, r3] + cmp r0, 0 + beq _080BC5EA + subs r0, r2, 0x2 + strh r0, [r1, 0xC] +_080BC5EA: + movs r3, 0 + ldr r5, _080BC6A0 @ =gScanlineEffect + mov r9, r5 + ldr r7, _080BC6A4 @ =gScanlineEffectRegBuffers + mov r6, r9 + adds r5, r1, 0 +_080BC5F6: + lsls r2, r3, 1 + ldrb r1, [r6, 0x14] + lsls r0, r1, 4 + subs r0, r1 + lsls r0, 7 + adds r2, r0 + adds r2, r7 + ldrh r0, [r5, 0xC] + strh r0, [r2] + adds r3, 0x1 + cmp r3, 0x4F + ble _080BC5F6 + cmp r3, 0x9F + bgt _080BC63A + ldr r7, _080BC6A4 @ =gScanlineEffectRegBuffers + ldr r6, _080BC6A0 @ =gScanlineEffect + ldr r1, _080BC6A8 @ =gTasks + mov r2, r12 + adds r0, r2, r4 + lsls r0, 3 + adds r5, r0, r1 +_080BC620: + lsls r2, r3, 1 + ldrb r1, [r6, 0x14] + lsls r0, r1, 4 + subs r0, r1 + lsls r0, 7 + adds r2, r0 + adds r2, r7 + ldrh r0, [r5, 0xC] + negs r0, r0 + strh r0, [r2] + adds r3, 0x1 + cmp r3, 0x9F + ble _080BC620 +_080BC63A: + mov r3, r12 + adds r0, r3, r4 + lsls r0, 3 + mov r5, r8 + adds r1, r0, r5 + movs r0, 0xC + ldrsh r2, [r1, r0] + cmp r2, 0 + bne _080BC6BA + movs r0, 0x3 + mov r3, r9 + strb r0, [r3, 0x15] + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + str r2, [sp] + ldr r1, _080BC6AC @ =0x0600e000 + ldr r2, _080BC6B0 @ =0x05000200 + mov r0, sp + bl CpuSet + movs r0, 0x1 + movs r1, 0x1 + movs r2, 0 + bl SetBgAttribute + movs r0, 0x2 + movs r1, 0x1 + movs r2, 0 + bl SetBgAttribute + movs r1, 0x9C + lsls r1, 8 + movs r0, 0xA + bl SetGpuReg + movs r1, 0xBC + lsls r1, 7 + movs r0, 0xC + bl SetGpuReg + b _080BC6BA + .align 2, 0 +_080BC690: .4byte gBattle_BG1_Y +_080BC694: .4byte 0x0000ffc8 +_080BC698: .4byte gBattle_WIN0V +_080BC69C: .4byte 0xfffffc04 +_080BC6A0: .4byte gScanlineEffect +_080BC6A4: .4byte gScanlineEffectRegBuffers +_080BC6A8: .4byte gTasks +_080BC6AC: .4byte 0x0600e000 +_080BC6B0: .4byte 0x05000200 +_080BC6B4: + adds r0, r4, 0 + bl sub_80BC41C +_080BC6BA: + add sp, 0x4 + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end task_battle_intro_80BC47C + + thumb_func_start task00_battle_intro_80BC6C8 +task00_battle_intro_80BC6C8: @ 80BC6C8 + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x4 + lsls r0, 24 + lsrs r5, r0, 24 + ldr r1, _080BC6F4 @ =gTasks + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + adds r0, r1 + movs r2, 0xA + ldrsh r0, [r0, r2] + adds r2, r1, 0 + cmp r0, 0x3 + beq _080BC708 + cmp r0, 0x3 + bgt _080BC6F8 + cmp r0, 0x2 + beq _080BC6FC + b _080BC710 + .align 2, 0 +_080BC6F4: .4byte gTasks +_080BC6F8: + cmp r0, 0x4 + bne _080BC710 +_080BC6FC: + ldr r1, _080BC704 @ =gBattle_BG1_X + ldrh r0, [r1] + adds r0, 0x8 + b _080BC70E + .align 2, 0 +_080BC704: .4byte gBattle_BG1_X +_080BC708: + ldr r1, _080BC74C @ =gBattle_BG1_X + ldrh r0, [r1] + adds r0, 0x6 +_080BC70E: + strh r0, [r1] +_080BC710: + lsls r0, r5, 2 + adds r1, r0, r5 + lsls r1, 3 + adds r4, r1, r2 + movs r3, 0xA + ldrsh r1, [r4, r3] + adds r6, r0, 0 + cmp r1, 0x4 + bne _080BC774 + ldr r7, _080BC750 @ =gBattle_BG1_Y + ldrh r0, [r4, 0x14] + bl Cos2 + lsls r0, 16 + asrs r0, 16 + cmp r0, 0 + bge _080BC736 + ldr r1, _080BC754 @ =0x000001ff + adds r0, r1 +_080BC736: + asrs r0, 9 + subs r0, 0x8 + strh r0, [r7] + ldrh r1, [r4, 0x14] + movs r2, 0x14 + ldrsh r0, [r4, r2] + cmp r0, 0xB3 + bgt _080BC758 + adds r0, r1, 0x4 + b _080BC75A + .align 2, 0 +_080BC74C: .4byte gBattle_BG1_X +_080BC750: .4byte gBattle_BG1_Y +_080BC754: .4byte 0x000001ff +_080BC758: + adds r0, r1, 0x6 +_080BC75A: + strh r0, [r4, 0x14] + ldr r2, _080BC790 @ =gTasks + adds r0, r6, r5 + lsls r0, 3 + adds r3, r0, r2 + movs r0, 0x14 + ldrsh r1, [r3, r0] + movs r0, 0xB4 + lsls r0, 1 + cmp r1, r0 + bne _080BC774 + movs r0, 0 + strh r0, [r3, 0x14] +_080BC774: + adds r0, r6, r5 + lsls r0, 3 + adds r0, r2 + movs r1, 0x8 + ldrsh r0, [r0, r1] + cmp r0, 0x4 + bls _080BC784 + b _080BC9AA +_080BC784: + lsls r0, 2 + ldr r1, _080BC794 @ =_080BC798 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080BC790: .4byte gTasks +_080BC794: .4byte _080BC798 + .align 2, 0 +_080BC798: + .4byte _080BC7AC + .4byte _080BC7DC + .4byte _080BC808 + .4byte _080BC858 + .4byte _080BC9A4 +_080BC7AC: + ldr r1, _080BC7C8 @ =gTasks + adds r0, r6, r5 + lsls r0, 3 + adds r2, r0, r1 + movs r3, 0x10 + strh r3, [r2, 0x10] + ldr r0, _080BC7CC @ =gBattleTypeFlags + ldr r0, [r0] + movs r1, 0x2 + ands r0, r1 + cmp r0, 0 + beq _080BC7D0 + strh r3, [r2, 0xC] + b _080BC7D4 + .align 2, 0 +_080BC7C8: .4byte gTasks +_080BC7CC: .4byte gBattleTypeFlags +_080BC7D0: + movs r0, 0x1 + strh r0, [r2, 0xC] +_080BC7D4: + ldrh r0, [r2, 0x8] + adds r0, 0x1 + strh r0, [r2, 0x8] + b _080BC9AA +_080BC7DC: + ldr r0, _080BC804 @ =gTasks + adds r1, r6, r5 + lsls r1, 3 + adds r1, r0 + ldrh r0, [r1, 0xC] + subs r0, 0x1 + strh r0, [r1, 0xC] + lsls r0, 16 + cmp r0, 0 + beq _080BC7F2 + b _080BC9AA +_080BC7F2: + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + movs r0, 0x48 + movs r1, 0x3F + bl SetGpuReg + b _080BC9AA + .align 2, 0 +_080BC804: .4byte gTasks +_080BC808: + ldr r1, _080BC848 @ =gBattle_WIN0V + ldrh r0, [r1] + subs r0, 0xFF + strh r0, [r1] + movs r1, 0xFF + lsls r1, 8 + ands r0, r1 + movs r1, 0xC0 + lsls r1, 6 + cmp r0, r1 + beq _080BC820 + b _080BC9AA +_080BC820: + ldr r0, _080BC84C @ =gTasks + adds r1, r6, r5 + lsls r1, 3 + adds r1, r0 + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + movs r0, 0xF0 + strh r0, [r1, 0xC] + movs r0, 0x20 + strh r0, [r1, 0xE] + movs r0, 0x1 + strh r0, [r1, 0x12] + ldr r2, _080BC850 @ =gIntroSlideFlags + ldrh r1, [r2] + ldr r0, _080BC854 @ =0x0000fffe + ands r0, r1 + strh r0, [r2] + b _080BC9AA + .align 2, 0 +_080BC848: .4byte gBattle_WIN0V +_080BC84C: .4byte gTasks +_080BC850: .4byte gIntroSlideFlags +_080BC854: .4byte 0x0000fffe +_080BC858: + ldr r0, _080BC890 @ =gTasks + adds r1, r6, r5 + lsls r1, 3 + adds r1, r0 + ldrh r2, [r1, 0xE] + movs r3, 0xE + ldrsh r0, [r1, r3] + cmp r0, 0 + beq _080BC898 + subs r0, r2, 0x1 + strh r0, [r1, 0xE] + lsls r0, 16 + cmp r0, 0 + bne _080BC8B8 + ldr r1, _080BC894 @ =0x00001842 + movs r0, 0x50 + bl SetGpuReg + movs r0, 0x52 + movs r1, 0xF + bl SetGpuReg + movs r0, 0x54 + movs r1, 0 + bl SetGpuReg + b _080BC8B8 + .align 2, 0 +_080BC890: .4byte gTasks +_080BC894: .4byte 0x00001842 +_080BC898: + ldrh r2, [r1, 0x10] + movs r0, 0x1F + ands r0, r2 + cmp r0, 0 + beq _080BC8B8 + ldrh r0, [r1, 0x12] + subs r0, 0x1 + strh r0, [r1, 0x12] + lsls r0, 16 + cmp r0, 0 + bne _080BC8B8 + adds r0, r2, 0 + adds r0, 0xFF + strh r0, [r1, 0x10] + movs r0, 0x4 + strh r0, [r1, 0x12] +_080BC8B8: + ldr r2, _080BC988 @ =gBattle_WIN0V + ldrh r1, [r2] + movs r0, 0xFF + lsls r0, 8 + ands r0, r1 + cmp r0, 0 + beq _080BC8CC + ldr r3, _080BC98C @ =0xfffffc04 + adds r0, r1, r3 + strh r0, [r2] +_080BC8CC: + ldr r0, _080BC990 @ =gTasks + adds r1, r6, r5 + lsls r1, 3 + adds r1, r0 + ldrh r2, [r1, 0xC] + movs r3, 0xC + ldrsh r0, [r1, r3] + cmp r0, 0 + beq _080BC8E2 + subs r0, r2, 0x2 + strh r0, [r1, 0xC] +_080BC8E2: + movs r3, 0 + ldr r0, _080BC994 @ =gScanlineEffect + mov r8, r0 + ldr r2, _080BC998 @ =gScanlineEffectRegBuffers + mov r12, r2 + mov r7, r8 + adds r4, r1, 0 +_080BC8F0: + lsls r2, r3, 1 + ldrb r1, [r7, 0x14] + lsls r0, r1, 4 + subs r0, r1 + lsls r0, 7 + adds r2, r0 + add r2, r12 + ldrh r0, [r4, 0xC] + strh r0, [r2] + adds r3, 0x1 + cmp r3, 0x4F + ble _080BC8F0 + cmp r3, 0x9F + bgt _080BC934 + ldr r0, _080BC998 @ =gScanlineEffectRegBuffers + mov r12, r0 + ldr r7, _080BC994 @ =gScanlineEffect + ldr r1, _080BC990 @ =gTasks + adds r0, r6, r5 + lsls r0, 3 + adds r4, r0, r1 +_080BC91A: + lsls r2, r3, 1 + ldrb r1, [r7, 0x14] + lsls r0, r1, 4 + subs r0, r1 + lsls r0, 7 + adds r2, r0 + add r2, r12 + ldrh r0, [r4, 0xC] + negs r0, r0 + strh r0, [r2] + adds r3, 0x1 + cmp r3, 0x9F + ble _080BC91A +_080BC934: + ldr r1, _080BC990 @ =gTasks + adds r0, r6, r5 + lsls r0, 3 + adds r1, r0, r1 + movs r3, 0xC + ldrsh r2, [r1, r3] + cmp r2, 0 + bne _080BC9AA + movs r0, 0x3 + mov r3, r8 + strb r0, [r3, 0x15] + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + str r2, [sp] + ldr r1, _080BC99C @ =0x0600e000 + ldr r2, _080BC9A0 @ =0x05000200 + mov r0, sp + bl CpuSet + movs r0, 0x1 + movs r1, 0x1 + movs r2, 0 + bl SetBgAttribute + movs r0, 0x2 + movs r1, 0x1 + movs r2, 0 + bl SetBgAttribute + movs r1, 0x9C + lsls r1, 8 + movs r0, 0xA + bl SetGpuReg + movs r1, 0xBC + lsls r1, 7 + movs r0, 0xC + bl SetGpuReg + b _080BC9AA + .align 2, 0 +_080BC988: .4byte gBattle_WIN0V +_080BC98C: .4byte 0xfffffc04 +_080BC990: .4byte gTasks +_080BC994: .4byte gScanlineEffect +_080BC998: .4byte gScanlineEffectRegBuffers +_080BC99C: .4byte 0x0600e000 +_080BC9A0: .4byte 0x05000200 +_080BC9A4: + adds r0, r5, 0 + bl sub_80BC41C +_080BC9AA: + ldr r0, _080BC9D0 @ =gTasks + adds r1, r6, r5 + lsls r1, 3 + adds r1, r0 + movs r2, 0x8 + ldrsh r0, [r1, r2] + cmp r0, 0x4 + beq _080BC9C2 + ldrh r1, [r1, 0x10] + movs r0, 0x52 + bl SetGpuReg +_080BC9C2: + add sp, 0x4 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080BC9D0: .4byte gTasks + thumb_func_end task00_battle_intro_80BC6C8 + + thumb_func_start task_battle_intro_anim +task_battle_intro_anim: @ 80BC9D4 + push {r4-r7,lr} + mov r7, r8 + push {r7} + sub sp, 0x4 + lsls r0, 24 + lsrs r5, r0, 24 + ldr r1, _080BCA08 @ =gBattle_BG1_X + ldrh r0, [r1] + adds r0, 0x8 + strh r0, [r1] + ldr r1, _080BCA0C @ =gTasks + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + adds r0, r1 + movs r2, 0x8 + ldrsh r0, [r0, r2] + adds r4, r1, 0 + cmp r0, 0x4 + bls _080BC9FE + b _080BCC22 +_080BC9FE: + lsls r0, 2 + ldr r1, _080BCA10 @ =_080BCA14 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080BCA08: .4byte gBattle_BG1_X +_080BCA0C: .4byte gTasks +_080BCA10: .4byte _080BCA14 + .align 2, 0 +_080BCA14: + .4byte _080BCA28 + .4byte _080BCA7C + .4byte _080BCAA8 + .4byte _080BCAF8 + .4byte _080BCC1C +_080BCA28: + ldr r1, _080BCA60 @ =0x00001842 + movs r0, 0x50 + bl SetGpuReg + ldr r4, _080BCA64 @ =0x00000808 + movs r0, 0x52 + adds r1, r4, 0 + bl SetGpuReg + movs r0, 0x54 + movs r1, 0 + bl SetGpuReg + ldr r1, _080BCA68 @ =gTasks + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + adds r2, r0, r1 + strh r4, [r2, 0x10] + ldr r0, _080BCA6C @ =gBattleTypeFlags + ldr r0, [r0] + movs r1, 0x2 + ands r0, r1 + cmp r0, 0 + beq _080BCA70 + movs r0, 0x10 + b _080BCA72 + .align 2, 0 +_080BCA60: .4byte 0x00001842 +_080BCA64: .4byte 0x00000808 +_080BCA68: .4byte gTasks +_080BCA6C: .4byte gBattleTypeFlags +_080BCA70: + movs r0, 0x1 +_080BCA72: + strh r0, [r2, 0xC] + ldrh r0, [r2, 0x8] + adds r0, 0x1 + strh r0, [r2, 0x8] + b _080BCC22 +_080BCA7C: + ldr r0, _080BCAA4 @ =gTasks + lsls r1, r5, 2 + adds r1, r5 + lsls r1, 3 + adds r1, r0 + ldrh r0, [r1, 0xC] + subs r0, 0x1 + strh r0, [r1, 0xC] + lsls r0, 16 + cmp r0, 0 + beq _080BCA94 + b _080BCC22 +_080BCA94: + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + movs r0, 0x48 + movs r1, 0x3F + bl SetGpuReg + b _080BCC22 + .align 2, 0 +_080BCAA4: .4byte gTasks +_080BCAA8: + ldr r1, _080BCAE8 @ =gBattle_WIN0V + ldrh r0, [r1] + subs r0, 0xFF + strh r0, [r1] + movs r1, 0xFF + lsls r1, 8 + ands r0, r1 + movs r1, 0xC0 + lsls r1, 6 + cmp r0, r1 + beq _080BCAC0 + b _080BCC22 +_080BCAC0: + ldr r0, _080BCAEC @ =gTasks + lsls r1, r5, 2 + adds r1, r5 + lsls r1, 3 + adds r1, r0 + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + movs r0, 0xF0 + strh r0, [r1, 0xC] + movs r0, 0x20 + strh r0, [r1, 0xE] + movs r0, 0x1 + strh r0, [r1, 0x12] + ldr r2, _080BCAF0 @ =gIntroSlideFlags + ldrh r1, [r2] + ldr r0, _080BCAF4 @ =0x0000fffe + ands r0, r1 + strh r0, [r2] + b _080BCC22 + .align 2, 0 +_080BCAE8: .4byte gBattle_WIN0V +_080BCAEC: .4byte gTasks +_080BCAF0: .4byte gIntroSlideFlags +_080BCAF4: .4byte 0x0000fffe +_080BCAF8: + lsls r0, r5, 2 + adds r1, r0, r5 + lsls r1, 3 + adds r2, r1, r4 + ldrh r3, [r2, 0xE] + movs r6, 0xE + ldrsh r1, [r2, r6] + mov r12, r0 + cmp r1, 0 + beq _080BCB12 + subs r0, r3, 0x1 + strh r0, [r2, 0xE] + b _080BCB32 +_080BCB12: + ldrh r1, [r2, 0x10] + movs r0, 0xF + ands r0, r1 + cmp r0, 0 + beq _080BCB32 + ldrh r0, [r2, 0x12] + subs r0, 0x1 + strh r0, [r2, 0x12] + lsls r0, 16 + cmp r0, 0 + bne _080BCB32 + adds r0, r1, 0 + adds r0, 0xFF + strh r0, [r2, 0x10] + movs r0, 0x6 + strh r0, [r2, 0x12] +_080BCB32: + ldr r2, _080BCC00 @ =gBattle_WIN0V + ldrh r1, [r2] + movs r0, 0xFF + lsls r0, 8 + ands r0, r1 + cmp r0, 0 + beq _080BCB46 + ldr r3, _080BCC04 @ =0xfffffc04 + adds r0, r1, r3 + strh r0, [r2] +_080BCB46: + mov r6, r12 + adds r0, r6, r5 + lsls r0, 3 + adds r1, r0, r4 + ldrh r2, [r1, 0xC] + movs r3, 0xC + ldrsh r0, [r1, r3] + cmp r0, 0 + beq _080BCB5C + subs r0, r2, 0x2 + strh r0, [r1, 0xC] +_080BCB5C: + movs r3, 0 + ldr r6, _080BCC08 @ =gScanlineEffect + mov r8, r6 + ldr r7, _080BCC0C @ =gScanlineEffectRegBuffers + adds r4, r1, 0 +_080BCB66: + lsls r2, r3, 1 + ldrb r1, [r6, 0x14] + lsls r0, r1, 4 + subs r0, r1 + lsls r0, 7 + adds r2, r0 + adds r2, r7 + ldrh r0, [r4, 0xC] + strh r0, [r2] + adds r3, 0x1 + cmp r3, 0x4F + ble _080BCB66 + cmp r3, 0x9F + bgt _080BCBAA + ldr r7, _080BCC0C @ =gScanlineEffectRegBuffers + ldr r6, _080BCC08 @ =gScanlineEffect + ldr r1, _080BCC10 @ =gTasks + mov r2, r12 + adds r0, r2, r5 + lsls r0, 3 + adds r4, r0, r1 +_080BCB90: + lsls r2, r3, 1 + ldrb r1, [r6, 0x14] + lsls r0, r1, 4 + subs r0, r1 + lsls r0, 7 + adds r2, r0 + adds r2, r7 + ldrh r0, [r4, 0xC] + negs r0, r0 + strh r0, [r2] + adds r3, 0x1 + cmp r3, 0x9F + ble _080BCB90 +_080BCBAA: + ldr r1, _080BCC10 @ =gTasks + lsls r0, r5, 2 + adds r0, r5 + lsls r0, 3 + adds r1, r0, r1 + movs r3, 0xC + ldrsh r2, [r1, r3] + cmp r2, 0 + bne _080BCC22 + movs r0, 0x3 + mov r6, r8 + strb r0, [r6, 0x15] + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + str r2, [sp] + ldr r1, _080BCC14 @ =0x0600e000 + ldr r2, _080BCC18 @ =0x05000200 + mov r0, sp + bl CpuSet + movs r0, 0x1 + movs r1, 0x1 + movs r2, 0 + bl SetBgAttribute + movs r0, 0x2 + movs r1, 0x1 + movs r2, 0 + bl SetBgAttribute + movs r1, 0x9C + lsls r1, 8 + movs r0, 0xA + bl SetGpuReg + movs r1, 0xBC + lsls r1, 7 + movs r0, 0xC + bl SetGpuReg + b _080BCC22 + .align 2, 0 +_080BCC00: .4byte gBattle_WIN0V +_080BCC04: .4byte 0xfffffc04 +_080BCC08: .4byte gScanlineEffect +_080BCC0C: .4byte gScanlineEffectRegBuffers +_080BCC10: .4byte gTasks +_080BCC14: .4byte 0x0600e000 +_080BCC18: .4byte 0x05000200 +_080BCC1C: + adds r0, r5, 0 + bl sub_80BC41C +_080BCC22: + ldr r0, _080BCC48 @ =gTasks + lsls r1, r5, 2 + adds r1, r5 + lsls r1, 3 + adds r1, r0 + movs r2, 0x8 + ldrsh r0, [r1, r2] + cmp r0, 0x4 + beq _080BCC3C + ldrh r1, [r1, 0x10] + movs r0, 0x52 + bl SetGpuReg +_080BCC3C: + add sp, 0x4 + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080BCC48: .4byte gTasks + thumb_func_end task_battle_intro_anim + + thumb_func_start sub_80BCC4C +sub_80BCC4C: @ 80BCC4C + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + sub sp, 0x8 + lsls r0, 24 + lsrs r6, r0, 24 + ldr r1, _080BCC98 @ =gTasks + lsls r0, r6, 2 + adds r0, r6 + lsls r0, 3 + adds r7, r0, r1 + movs r1, 0x8 + ldrsh r0, [r7, r1] + cmp r0, 0x1 + ble _080BCCC2 + movs r2, 0x10 + ldrsh r0, [r7, r2] + cmp r0, 0 + bne _080BCCC2 + ldr r2, _080BCC9C @ =gBattle_BG1_X + ldrh r1, [r2] + movs r0, 0x80 + lsls r0, 8 + ands r0, r1 + lsls r0, 16 + lsrs r5, r0, 16 + cmp r5, 0 + bne _080BCC8A + cmp r1, 0x4F + bhi _080BCCA4 +_080BCC8A: + adds r0, r1, 0x3 + strh r0, [r2] + ldr r1, _080BCCA0 @ =gBattle_BG2_X + ldrh r0, [r1] + subs r0, 0x3 + strh r0, [r1] + b _080BCCC2 + .align 2, 0 +_080BCC98: .4byte gTasks +_080BCC9C: .4byte gBattle_BG1_X +_080BCCA0: .4byte gBattle_BG2_X +_080BCCA4: + str r5, [sp] + ldr r1, _080BCCE4 @ =0x0600e000 + ldr r4, _080BCCE8 @ =0x05000200 + mov r0, sp + adds r2, r4, 0 + bl CpuSet + str r5, [sp, 0x4] + add r0, sp, 0x4 + ldr r1, _080BCCEC @ =0x0600f000 + adds r2, r4, 0 + bl CpuSet + movs r0, 0x1 + strh r0, [r7, 0x10] +_080BCCC2: + ldr r0, _080BCCF0 @ =gTasks + lsls r2, r6, 2 + adds r1, r2, r6 + lsls r1, 3 + adds r1, r0 + movs r3, 0x8 + ldrsh r1, [r1, r3] + mov r9, r0 + adds r5, r2, 0 + cmp r1, 0x4 + bls _080BCCDA + b _080BCEE6 +_080BCCDA: + lsls r0, r1, 2 + ldr r1, _080BCCF4 @ =_080BCCF8 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_080BCCE4: .4byte 0x0600e000 +_080BCCE8: .4byte 0x05000200 +_080BCCEC: .4byte 0x0600f000 +_080BCCF0: .4byte gTasks +_080BCCF4: .4byte _080BCCF8 + .align 2, 0 +_080BCCF8: + .4byte _080BCD0C + .4byte _080BCD1E + .4byte _080BCDC4 + .4byte _080BCE08 + .4byte _080BCEE0 +_080BCD0C: + adds r0, r5, r6 + lsls r0, 3 + add r0, r9 + movs r1, 0x20 + strh r1, [r0, 0xC] + ldrh r1, [r0, 0x8] + adds r1, 0x1 + strh r1, [r0, 0x8] + b _080BCEE6 +_080BCD1E: + adds r0, r5, r6 + lsls r0, 3 + mov r2, r9 + adds r1, r0, r2 + ldrh r0, [r1, 0xC] + subs r0, 0x1 + strh r0, [r1, 0xC] + lsls r0, 16 + cmp r0, 0 + beq _080BCD34 + b _080BCEE6 +_080BCD34: + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + ldr r4, _080BCDB4 @ =gSprites + ldr r5, _080BCDB8 @ =gBattleStruct + ldr r0, [r5] + adds r0, 0x7D + ldrb r0, [r0] + lsls r1, r0, 4 + adds r1, r0 + lsls r1, 2 + adds r1, r4 + ldrb r3, [r1, 0x1] + movs r2, 0xD + negs r2, r2 + adds r0, r2, 0 + ands r0, r3 + movs r3, 0x8 + mov r9, r3 + mov r3, r9 + orrs r0, r3 + strb r0, [r1, 0x1] + ldr r3, [r5] + adds r0, r3, 0 + adds r0, 0x7D + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + movs r1, 0x1C + adds r1, r4 + mov r8, r1 + add r0, r8 + ldr r6, _080BCDBC @ =sub_801182C + str r6, [r0] + adds r3, 0x7E + ldrb r1, [r3] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + adds r0, r4 + ldrb r1, [r0, 0x1] + ands r2, r1 + mov r3, r9 + orrs r2, r3 + strb r2, [r0, 0x1] + ldr r0, [r5] + adds r0, 0x7E + ldrb r1, [r0] + lsls r0, r1, 4 + adds r0, r1 + lsls r0, 2 + add r0, r8 + str r6, [r0] + movs r0, 0x48 + movs r1, 0x3F + bl SetGpuReg + ldr r1, _080BCDC0 @ =0x00003f06 + movs r0, 0x4A + bl SetGpuReg + b _080BCEE6 + .align 2, 0 +_080BCDB4: .4byte gSprites +_080BCDB8: .4byte gBattleStruct +_080BCDBC: .4byte sub_801182C +_080BCDC0: .4byte 0x00003f06 +_080BCDC4: + ldr r1, _080BCDFC @ =gBattle_WIN0V + ldrh r0, [r1] + subs r0, 0xFF + strh r0, [r1] + movs r1, 0xFF + lsls r1, 8 + ands r0, r1 + movs r1, 0xC0 + lsls r1, 6 + cmp r0, r1 + beq _080BCDDC + b _080BCEE6 +_080BCDDC: + adds r1, r5, r6 + lsls r1, 3 + add r1, r9 + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + movs r0, 0xF0 + strh r0, [r1, 0xC] + movs r0, 0x20 + strh r0, [r1, 0xE] + ldr r2, _080BCE00 @ =gIntroSlideFlags + ldrh r1, [r2] + ldr r0, _080BCE04 @ =0x0000fffe + ands r0, r1 + strh r0, [r2] + b _080BCEE6 + .align 2, 0 +_080BCDFC: .4byte gBattle_WIN0V +_080BCE00: .4byte gIntroSlideFlags +_080BCE04: .4byte 0x0000fffe +_080BCE08: + ldr r2, _080BCECC @ =gBattle_WIN0V + ldrh r1, [r2] + movs r0, 0xFF + lsls r0, 8 + ands r0, r1 + cmp r0, 0 + beq _080BCE1C + ldr r3, _080BCED0 @ =0xfffffc04 + adds r0, r1, r3 + strh r0, [r2] +_080BCE1C: + adds r0, r5, r6 + lsls r0, 3 + mov r2, r9 + adds r1, r0, r2 + ldrh r2, [r1, 0xC] + movs r3, 0xC + ldrsh r0, [r1, r3] + cmp r0, 0 + beq _080BCE32 + subs r0, r2, 0x2 + strh r0, [r1, 0xC] +_080BCE32: + movs r3, 0 + ldr r0, _080BCED4 @ =gScanlineEffect + mov r12, r0 + ldr r2, _080BCED8 @ =gScanlineEffectRegBuffers + mov r8, r2 + mov r7, r12 + adds r4, r1, 0 +_080BCE40: + lsls r2, r3, 1 + ldrb r1, [r7, 0x14] + lsls r0, r1, 4 + subs r0, r1 + lsls r0, 7 + adds r2, r0 + add r2, r8 + ldrh r0, [r4, 0xC] + strh r0, [r2] + adds r3, 0x1 + cmp r3, 0x4F + ble _080BCE40 + cmp r3, 0x9F + bgt _080BCE84 + ldr r0, _080BCED8 @ =gScanlineEffectRegBuffers + mov r8, r0 + ldr r7, _080BCED4 @ =gScanlineEffect + ldr r1, _080BCEDC @ =gTasks + adds r0, r5, r6 + lsls r0, 3 + adds r4, r0, r1 +_080BCE6A: + lsls r2, r3, 1 + ldrb r1, [r7, 0x14] + lsls r0, r1, 4 + subs r0, r1 + lsls r0, 7 + adds r2, r0 + add r2, r8 + ldrh r0, [r4, 0xC] + negs r0, r0 + strh r0, [r2] + adds r3, 0x1 + cmp r3, 0x9F + ble _080BCE6A +_080BCE84: + adds r0, r5, r6 + lsls r0, 3 + mov r2, r9 + adds r1, r0, r2 + movs r3, 0xC + ldrsh r0, [r1, r3] + cmp r0, 0 + bne _080BCEE6 + movs r0, 0x3 + mov r2, r12 + strb r0, [r2, 0x15] + ldrh r0, [r1, 0x8] + adds r0, 0x1 + strh r0, [r1, 0x8] + movs r0, 0x1 + movs r1, 0x1 + movs r2, 0 + bl SetBgAttribute + movs r0, 0x2 + movs r1, 0x1 + movs r2, 0 + bl SetBgAttribute + movs r1, 0x9C + lsls r1, 8 + movs r0, 0xA + bl SetGpuReg + movs r1, 0xBC + lsls r1, 7 + movs r0, 0xC + bl SetGpuReg + b _080BCEE6 + .align 2, 0 +_080BCECC: .4byte gBattle_WIN0V +_080BCED0: .4byte 0xfffffc04 +_080BCED4: .4byte gScanlineEffect +_080BCED8: .4byte gScanlineEffectRegBuffers +_080BCEDC: .4byte gTasks +_080BCEE0: + adds r0, r6, 0 + bl sub_80BC41C +_080BCEE6: + add sp, 0x8 + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r0} + bx r0 + thumb_func_end sub_80BCC4C + + thumb_func_start sub_80BCEF4 +sub_80BCEF4: @ 80BCEF4 + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x4 + str r0, [sp] + adds r6, r2, 0 + adds r4, r3, 0 + ldr r0, [sp, 0x24] + ldr r7, [sp, 0x28] + ldr r2, [sp, 0x2C] + mov r9, r2 + ldr r5, [sp, 0x30] + lsls r1, 24 + lsrs r1, 24 + mov r8, r1 + lsls r6, 24 + lsrs r6, 24 + lsls r4, 24 + lsrs r4, 24 + lsls r0, 24 + lsrs r0, 24 + mov r10, r0 + lsls r5, 16 + lsrs r5, 16 + adds r0, r4, 0 + bl GetBattlerAtPosition + lsls r0, 24 + lsrs r0, 24 + ldr r1, _080BCFC4 @ =gMonSpritesGfxPtr + ldr r2, [r1] + lsls r4, 2 + adds r2, 0x4 + adds r2, r4 + ldr r1, _080BCFC8 @ =gBattleMonForms + adds r0, r1 + ldrb r1, [r0] + lsls r1, 11 + ldr r0, [r2] + adds r0, r1 + movs r2, 0x80 + lsls r2, 3 + adds r1, r7, 0 + bl CpuSet + ldr r1, [sp] + lsls r0, r1, 24 + lsrs r0, 24 + movs r2, 0x80 + lsls r2, 5 + adds r1, r7, 0 + adds r3, r5, 0 + bl LoadBgTiles + adds r0, r6, 0 + adds r0, 0x8 + cmp r6, r0 + bge _080BCFA0 + mov r12, r0 + mov r2, r8 + lsls r7, r2, 1 +_080BCF72: + mov r1, r8 + adds r2, r1, 0 + adds r2, 0x8 + adds r4, r6, 0x1 + cmp r1, r2 + bge _080BCF9A + mov r0, r10 + lsls r3, r0, 12 + lsls r0, r6, 6 + add r0, r9 + adds r6, r7, r0 + subs r1, r2, r1 +_080BCF8A: + adds r0, r5, 0 + orrs r0, r3 + strh r0, [r6] + adds r5, 0x1 + adds r6, 0x2 + subs r1, 0x1 + cmp r1, 0 + bne _080BCF8A +_080BCF9A: + adds r6, r4, 0 + cmp r6, r12 + blt _080BCF72 +_080BCFA0: + ldr r1, [sp] + lsls r0, r1, 24 + lsrs r0, 24 + movs r2, 0x80 + lsls r2, 4 + mov r1, r9 + movs r3, 0 + bl LoadBgTilemap + add sp, 0x4 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080BCFC4: .4byte gMonSpritesGfxPtr +_080BCFC8: .4byte gBattleMonForms + thumb_func_end sub_80BCEF4 + + thumb_func_start sub_80BCFCC +sub_80BCFCC: @ 80BCFCC + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x4 + ldr r4, [sp, 0x24] + ldr r5, [sp, 0x28] + mov r8, r5 + ldr r5, [sp, 0x2C] + ldr r6, [sp, 0x30] + mov r9, r6 + lsls r0, 24 + lsrs r0, 24 + mov r12, r0 + lsls r1, 24 + lsls r2, 24 + lsls r3, 24 + lsls r4, 24 + lsrs r4, 24 + mov r10, r4 + mov r7, r8 + lsls r7, 16 + lsrs r6, r7, 16 + lsls r5, 24 + lsrs r5, 24 + mov r0, r9 + lsls r0, 24 + mov r9, r0 + ldr r4, _080BD090 @ =0x040000d4 + ldr r0, _080BD094 @ =gMonSpritesGfxPtr + ldr r0, [r0] + lsrs r2, 22 + adds r0, 0x4 + adds r0, r2 + lsrs r3, 13 + ldr r0, [r0] + adds r0, r3 + str r0, [r4] + movs r0, 0xC0 + lsls r0, 19 + adds r6, r0 + str r6, [r4, 0x4] + ldr r0, _080BD098 @ =0x80000400 + str r0, [r4, 0x8] + ldr r0, [r4, 0x8] + adds r2, r7, 0 + lsrs r2, 21 + mov r6, r9 + lsrs r6, 15 + subs r4, r2, r6 + lsrs r0, r1, 24 + adds r1, r0, 0 + adds r1, 0x8 + cmp r0, r1 + bge _080BD080 + mov r9, r1 + mov r7, r12 + lsls r7, 1 + mov r8, r7 + lsls r5, 11 + str r5, [sp] +_080BD048: + mov r2, r12 + adds r3, r2, 0 + adds r3, 0x8 + adds r5, r0, 0x1 + cmp r2, r3 + bge _080BD07A + mov r1, r10 + lsls r6, r1, 12 + lsls r0, 6 + movs r7, 0xC0 + lsls r7, 19 + adds r0, r7 + ldr r1, [sp] + adds r0, r1, r0 + mov r7, r8 + adds r1, r7, r0 + subs r2, r3, r2 +_080BD06A: + adds r0, r4, 0 + orrs r0, r6 + strh r0, [r1] + adds r4, 0x1 + adds r1, 0x2 + subs r2, 0x1 + cmp r2, 0 + bne _080BD06A +_080BD07A: + adds r0, r5, 0 + cmp r0, r9 + blt _080BD048 +_080BD080: + add sp, 0x4 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080BD090: .4byte 0x040000d4 +_080BD094: .4byte gMonSpritesGfxPtr +_080BD098: .4byte 0x80000400 + thumb_func_end sub_80BCFCC + + .align 2, 0 @ Don't pad with nop. diff --git a/asm/dark.s b/asm/dark.s index cbc4060c3..626ddc2be 100644 --- a/asm/dark.s +++ b/asm/dark.s @@ -788,13 +788,13 @@ _080B7ED4: ldr r1, _080B7F48 @ =0x00003f3f movs r0, 0x48 bl SetGpuReg - ldr r2, _080B7F4C @ =gUnknown_2022984 + ldr r2, _080B7F4C @ =gBattle_WIN0H ldrh r0, [r5, 0x24] lsls r0, 8 ldrh r1, [r5, 0x26] orrs r0, r1 strh r0, [r2] - ldr r1, _080B7F50 @ =gUnknown_2022986 + ldr r1, _080B7F50 @ =gBattle_WIN0V movs r0, 0xA0 strh r0, [r1] ldr r0, _080B7F54 @ =sub_80B7F58 @@ -811,8 +811,8 @@ _080B7F3C: .4byte gBattle_BG1_X _080B7F40: .4byte 0xa2600001 _080B7F44: .4byte gScanlineEffectRegBuffers _080B7F48: .4byte 0x00003f3f -_080B7F4C: .4byte gUnknown_2022984 -_080B7F50: .4byte gUnknown_2022986 +_080B7F4C: .4byte gBattle_WIN0H +_080B7F50: .4byte gBattle_WIN0V _080B7F54: .4byte sub_80B7F58 thumb_func_end sub_80B7DA4 @@ -929,7 +929,7 @@ _080B8014: blt _080B8036 strh r2, [r4, 0x24] _080B8036: - ldr r3, _080B804C @ =gUnknown_2022984 + ldr r3, _080B804C @ =gBattle_WIN0H ldrh r2, [r4, 0x24] lsls r0, r2, 8 ldrh r1, [r4, 0x26] @@ -941,7 +941,7 @@ _080B8036: bne _080B806A b _080B8056 .align 2, 0 -_080B804C: .4byte gUnknown_2022984 +_080B804C: .4byte gBattle_WIN0H _080B8050: ldr r1, _080B8060 @ =gScanlineEffect movs r0, 0x3 @@ -1000,10 +1000,10 @@ _080B80B4: lsrs r0, 24 cmp r0, 0x1 bne _080B80F0 - ldr r0, _080B80E4 @ =gUnknown_2022984 + ldr r0, _080B80E4 @ =gBattle_WIN0H movs r1, 0 strh r1, [r0] - ldr r0, _080B80E8 @ =gUnknown_2022986 + ldr r0, _080B80E8 @ =gBattle_WIN0V strh r1, [r0] ldr r4, _080B80EC @ =0x00003f3f movs r0, 0x48 @@ -1016,8 +1016,8 @@ _080B80B4: bl DestroyAnimVisualTask b _080B829E .align 2, 0 -_080B80E4: .4byte gUnknown_2022984 -_080B80E8: .4byte gUnknown_2022986 +_080B80E4: .4byte gBattle_WIN0H +_080B80E8: .4byte gBattle_WIN0V _080B80EC: .4byte 0x00003f3f _080B80F0: ldr r0, _080B8110 @ =gBattleAnimTarget @@ -1208,13 +1208,13 @@ _080B8270: ldr r1, _080B82AC @ =0x00003f3f movs r0, 0x48 bl SetGpuReg - ldr r2, _080B82B0 @ =gUnknown_2022984 + ldr r2, _080B82B0 @ =gBattle_WIN0H ldrh r0, [r5, 0x24] lsls r0, 8 ldrh r1, [r5, 0x26] orrs r0, r1 strh r0, [r2] - ldr r1, _080B82B4 @ =gUnknown_2022986 + ldr r1, _080B82B4 @ =gBattle_WIN0V movs r0, 0xA0 strh r0, [r1] movs r0, 0 @@ -1234,8 +1234,8 @@ _080B829E: .align 2, 0 _080B82A8: .4byte 0x00003f3b _080B82AC: .4byte 0x00003f3f -_080B82B0: .4byte gUnknown_2022984 -_080B82B4: .4byte gUnknown_2022986 +_080B82B0: .4byte gBattle_WIN0H +_080B82B4: .4byte gBattle_WIN0V _080B82B8: .4byte 0x0000080c _080B82BC: .4byte sub_80B82C0 thumb_func_end sub_80B8070 @@ -1314,7 +1314,7 @@ _080B8348: movs r0, 0x1 strh r0, [r4, 0xA] _080B834C: - ldr r2, _080B8390 @ =gUnknown_2022984 + ldr r2, _080B8390 @ =gBattle_WIN0H ldrh r0, [r4, 0x24] lsls r0, 8 ldrh r1, [r4, 0x26] @@ -1348,7 +1348,7 @@ _080B836E: strh r0, [r4, 0xA] b _080B83FC .align 2, 0 -_080B8390: .4byte gUnknown_2022984 +_080B8390: .4byte gBattle_WIN0H _080B8394: ldrh r0, [r4, 0xA] adds r0, 0x1 @@ -1412,10 +1412,10 @@ _080B83FC: .align 2, 0 _080B8404: .4byte gScanlineEffect _080B8408: - ldr r0, _080B8430 @ =gUnknown_2022984 + ldr r0, _080B8430 @ =gBattle_WIN0H movs r1, 0 strh r1, [r0] - ldr r0, _080B8434 @ =gUnknown_2022986 + ldr r0, _080B8434 @ =gBattle_WIN0V strh r1, [r0] ldr r4, _080B8438 @ =0x00003f3f movs r0, 0x48 @@ -1431,8 +1431,8 @@ _080B842A: pop {r0} bx r0 .align 2, 0 -_080B8430: .4byte gUnknown_2022984 -_080B8434: .4byte gUnknown_2022986 +_080B8430: .4byte gBattle_WIN0H +_080B8434: .4byte gBattle_WIN0V _080B8438: .4byte 0x00003f3f thumb_func_end sub_80B82C0 @@ -1615,7 +1615,7 @@ sub_80B856C: @ 80B856C _080B8582: lsls r0, r4, 24 lsrs r0, 24 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 cmp r0, 0xFF @@ -1799,9 +1799,9 @@ sub_80B86EC: @ 80B86EC lsls r0, 24 lsrs r7, r0, 24 movs r6, 0 - ldr r0, _080B87EC @ =gUnknown_2022984 + ldr r0, _080B87EC @ =gBattle_WIN0H strh r6, [r0] - ldr r0, _080B87F0 @ =gUnknown_2022986 + ldr r0, _080B87F0 @ =gBattle_WIN0V strh r6, [r0] ldr r1, _080B87F4 @ =0x00003f3f movs r0, 0x48 @@ -1909,8 +1909,8 @@ _080B87CA: ldr r1, _080B8814 @ =gEnemyParty b _080B8828 .align 2, 0 -_080B87EC: .4byte gUnknown_2022984 -_080B87F0: .4byte gUnknown_2022986 +_080B87EC: .4byte gBattle_WIN0H +_080B87F0: .4byte gBattle_WIN0V _080B87F4: .4byte 0x00003f3f _080B87F8: .4byte 0x00003f3d _080B87FC: .4byte 0x00003f42 @@ -1936,7 +1936,7 @@ _080B8828: lsls r0, 16 lsrs r5, r0, 16 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -1958,7 +1958,7 @@ _080B8828: ldr r1, _080B88C8 @ =gFile_graphics_battle_anims_masks_metal_shine_sheet mov r2, sp ldrh r2, [r2, 0xA] - bl sub_80753B4 + bl AnimLoadCompressedBgGfx ldr r0, _080B88CC @ =gFile_graphics_battle_anims_masks_metal_shine_palette mov r1, sp ldrb r1, [r1, 0x8] @@ -2075,7 +2075,7 @@ _080B894E: cmp r0, 0x2 bne _080B89FC movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 ldr r5, _080B89F0 @ =gSprites @@ -2144,9 +2144,9 @@ _080B89F8: .4byte gBattleAnimAttacker _080B89FC: cmp r0, 0x3 bne _080B8A5E - ldr r0, _080B8A68 @ =gUnknown_2022984 + ldr r0, _080B8A68 @ =gBattle_WIN0H strh r5, [r0] - ldr r0, _080B8A6C @ =gUnknown_2022986 + ldr r0, _080B8A6C @ =gBattle_WIN0V strh r5, [r0] ldr r4, _080B8A70 @ =0x00003f3f movs r0, 0x48 @@ -2189,8 +2189,8 @@ _080B8A5E: pop {r0} bx r0 .align 2, 0 -_080B8A68: .4byte gUnknown_2022984 -_080B8A6C: .4byte gUnknown_2022986 +_080B8A68: .4byte gBattle_WIN0H +_080B8A6C: .4byte gBattle_WIN0V _080B8A70: .4byte 0x00003f3f thumb_func_end sub_80B8920 @@ -2226,7 +2226,7 @@ _080B8A9C: .4byte _080B8AD4 _080B8ABC: ldrb r0, [r2] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r2, r0, 24 b _080B8ADA diff --git a/asm/electric.s b/asm/electric.s index 44e85bb50..7d39b287b 100644 --- a/asm/electric.s +++ b/asm/electric.s @@ -1142,7 +1142,7 @@ sub_80AE470: @ 80AE470 ands r0, r5 orrs r0, r1 strh r0, [r6, 0x4] - ldr r1, _080AE4EC @ =gUnknown_2037EE2 + ldr r1, _080AE4EC @ =gAnimVisualTaskCount ldrb r0, [r1] adds r0, 0x1 strb r0, [r1] @@ -1160,7 +1160,7 @@ _080AE4DC: .4byte gUnknown_83E60B8 _080AE4E0: .4byte gSprites _080AE4E4: .4byte 0x000003ff _080AE4E8: .4byte 0xfffffc00 -_080AE4EC: .4byte gUnknown_2037EE2 +_080AE4EC: .4byte gAnimVisualTaskCount _080AE4F0: .4byte sub_80AE4F4 thumb_func_end sub_80AE470 @@ -1559,7 +1559,7 @@ sub_80AE7DC: @ 80AE7DC lsrs r0, 24 strh r0, [r5, 0x22] movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0x3A] @@ -1672,7 +1672,7 @@ _080AE8D2: b _080AEA04 _080AE8D4: movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 movs r6, 0 diff --git a/asm/fire.s b/asm/fire.s index d838039ac..47f4208b1 100644 --- a/asm/fire.s +++ b/asm/fire.s @@ -753,7 +753,7 @@ sub_80ACEA4: @ 80ACEA4 ldr r0, _080ACF04 @ =gTasks adds r4, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 movs r5, 0 @@ -2005,12 +2005,12 @@ _080AD826: adds r0, 0x1 strh r0, [r4, 0x22] movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x24] movs r0, 0x3 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] diff --git a/asm/flying.s b/asm/flying.s index a776b54cb..bef6163ad 100644 --- a/asm/flying.s +++ b/asm/flying.s @@ -408,7 +408,7 @@ sub_80B1BB0: @ 80B1BB0 ldr r0, _080B1BF0 @ =sub_80B1BF8 str r0, [r4, 0x1C] movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId ldr r2, _080B1BF4 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -571,7 +571,7 @@ _080B1CE8: ble _080B1D30 _080B1D0A: movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId ldr r2, _080B1D38 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -624,7 +624,7 @@ sub_80B1D3C: @ 80B1D3C _080B1D6E: adds r0, r4, 0 bl DestroySprite - ldr r1, _080B1D84 @ =gUnknown_2037EE2 + ldr r1, _080B1D84 @ =gAnimVisualTaskCount ldrb r0, [r1] subs r0, 0x1 strb r0, [r1] @@ -633,7 +633,7 @@ _080B1D7C: pop {r0} bx r0 .align 2, 0 -_080B1D84: .4byte gUnknown_2037EE2 +_080B1D84: .4byte gAnimVisualTaskCount thumb_func_end sub_80B1D3C thumb_func_start sub_80B1D88 @@ -2101,7 +2101,7 @@ sub_80B2868: @ 80B2868 ands r0, r1 cmp r0, 0 bne _080B28E2 - ldr r1, _080B2904 @ =gUnknown_2037EE2 + ldr r1, _080B2904 @ =gAnimVisualTaskCount ldrb r0, [r1] adds r0, 0x1 strb r0, [r1] @@ -2159,7 +2159,7 @@ _080B28F6: bx r0 .align 2, 0 _080B2900: .4byte gTasks -_080B2904: .4byte gUnknown_2037EE2 +_080B2904: .4byte gAnimVisualTaskCount _080B2908: .4byte gBattleAnimArgs _080B290C: .4byte gUnknown_83E7C98 _080B2910: .4byte gBattleAnimTarget @@ -2181,7 +2181,7 @@ _080B2926: movs r1, 0x1 bl sub_8075160 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId ldr r2, _080B2954 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -2273,7 +2273,7 @@ _080B29C0: cmp r0, r1 bge _080B29FE movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId ldr r2, _080B2A04 @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -2311,7 +2311,7 @@ sub_80B2A08: @ 80B2A08 ldr r0, _080B2A48 @ =sub_80B2A50 str r0, [r4, 0x1C] movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId ldr r2, _080B2A4C @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -2900,7 +2900,7 @@ sub_80B2E64: @ 80B2E64 cmp r0, 0 bne _080B2E9C movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 ldr r2, _080B2E98 @ =gSprites @@ -2918,7 +2918,7 @@ _080B2E94: .4byte gBattleAnimArgs _080B2E98: .4byte gSprites _080B2E9C: movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 ldr r2, _080B2EC8 @ =gSprites diff --git a/asm/ghost.s b/asm/ghost.s index 194f728fe..9d5d843ca 100644 --- a/asm/ghost.s +++ b/asm/ghost.s @@ -352,7 +352,7 @@ sub_80B54E8: @ 80B54E8 movs r0, 0x52 bl SetGpuReg movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 @@ -470,7 +470,7 @@ sub_80B55C8: @ 80B55C8 _080B55EC: .4byte gTasks _080B55F0: movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r1, r0, 24 ldrh r0, [r4, 0x8] @@ -841,7 +841,7 @@ sub_80B58AC: @ 80B58AC ldr r1, _080B58D8 @ =gTasks adds r5, r0, r1 movs r0, 0x1 - bl duplicate_obj_of_side_rel2move_in_transparent_mode + bl CloneBattlerSpriteWithBlend movs r6, 0 movs r1, 0 strh r0, [r5, 0x8] @@ -1159,7 +1159,7 @@ _080B5B2C: cmp r0, 0xF beq _080B5B5A movs r0, 0x1 - bl duplicate_obj_of_side_rel2move_in_transparent_mode + bl CloneBattlerSpriteWithBlend strh r0, [r5, 0x8] lsls r0, 16 cmp r0, 0 @@ -1238,7 +1238,7 @@ _080B5B68: movs r0, 0x10 strh r0, [r5, 0xE] movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0x22] @@ -1516,7 +1516,7 @@ _080B5E0A: movs r0, 0x3 strb r0, [r1, 0x15] movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x24] @@ -2230,10 +2230,10 @@ sub_80B63B4: @ 80B63B4 push {r4-r7,lr} lsls r0, 24 lsrs r7, r0, 24 - ldr r0, _080B6400 @ =gUnknown_2022984 + ldr r0, _080B6400 @ =gBattle_WIN0H movs r1, 0 strh r1, [r0] - ldr r0, _080B6404 @ =gUnknown_2022986 + ldr r0, _080B6404 @ =gBattle_WIN0V strh r1, [r0] ldr r1, _080B6408 @ =0x00003f3f movs r0, 0x48 @@ -2261,21 +2261,21 @@ _080B63FC: movs r6, 0x28 b _080B6416 .align 2, 0 -_080B6400: .4byte gUnknown_2022984 -_080B6404: .4byte gUnknown_2022986 +_080B6400: .4byte gBattle_WIN0H +_080B6404: .4byte gBattle_WIN0V _080B6408: .4byte 0x00003f3f _080B640C: .4byte 0x00003f1f _080B6410: .4byte gBattleAnimAttacker _080B6414: movs r6, 0xC8 _080B6416: - ldr r1, _080B6454 @ =gUnknown_2022984 + ldr r1, _080B6454 @ =gBattle_WIN0H lsls r3, r6, 16 asrs r2, r3, 16 lsls r0, r2, 8 orrs r0, r2 strh r0, [r1] - ldr r1, _080B6458 @ =gUnknown_2022986 + ldr r1, _080B6458 @ =gBattle_WIN0V movs r5, 0x28 ldr r0, _080B645C @ =0x00002828 strh r0, [r1] @@ -2300,8 +2300,8 @@ _080B6416: pop {r0} bx r0 .align 2, 0 -_080B6454: .4byte gUnknown_2022984 -_080B6458: .4byte gUnknown_2022986 +_080B6454: .4byte gBattle_WIN0H +_080B6458: .4byte gBattle_WIN0V _080B645C: .4byte 0x00002828 _080B6460: .4byte gTasks _080B6464: .4byte sub_80B6468 @@ -2457,12 +2457,12 @@ _080B6594: ldr r0, _080B65E4 @ =sub_80B65F0 str r0, [r4] _080B65C2: - ldr r1, _080B65E8 @ =gUnknown_2022984 + ldr r1, _080B65E8 @ =gBattle_WIN0H mov r2, r9 lsls r0, r2, 8 orrs r7, r0 strh r7, [r1] - ldr r1, _080B65EC @ =gUnknown_2022986 + ldr r1, _080B65EC @ =gBattle_WIN0V lsls r0, r6, 8 orrs r5, r0 strh r5, [r1] @@ -2476,8 +2476,8 @@ _080B65C2: bx r0 .align 2, 0 _080B65E4: .4byte sub_80B65F0 -_080B65E8: .4byte gUnknown_2022984 -_080B65EC: .4byte gUnknown_2022986 +_080B65E8: .4byte gBattle_WIN0H +_080B65EC: .4byte gBattle_WIN0V thumb_func_end sub_80B6468 thumb_func_start sub_80B65F0 @@ -2493,9 +2493,9 @@ sub_80B65F0: @ 80B65F0 lsrs r1, r0, 24 cmp r1, 0 bne _080B6636 - ldr r0, _080B6640 @ =gUnknown_2022984 + ldr r0, _080B6640 @ =gBattle_WIN0H strh r1, [r0] - ldr r0, _080B6644 @ =gUnknown_2022986 + ldr r0, _080B6644 @ =gBattle_WIN0V strh r1, [r0] ldr r4, _080B6648 @ =0x00003f3f movs r0, 0x48 @@ -2518,8 +2518,8 @@ _080B6636: bx r0 .align 2, 0 _080B663C: .4byte gPaletteFade -_080B6640: .4byte gUnknown_2022984 -_080B6644: .4byte gUnknown_2022986 +_080B6640: .4byte gBattle_WIN0H +_080B6644: .4byte gBattle_WIN0V _080B6648: .4byte 0x00003f3f thumb_func_end sub_80B65F0 @@ -2711,10 +2711,10 @@ sub_80B67A0: @ 80B67A0 movs r0, 0x52 movs r1, 0 bl SetGpuReg - ldr r0, _080B67CC @ =gUnknown_2022984 + ldr r0, _080B67CC @ =gBattle_WIN0H movs r1, 0 strh r1, [r0] - ldr r0, _080B67D0 @ =gUnknown_2022986 + ldr r0, _080B67D0 @ =gBattle_WIN0V strh r1, [r0] adds r0, r4, 0 bl DestroyAnimSprite @@ -2722,8 +2722,8 @@ sub_80B67A0: @ 80B67A0 pop {r0} bx r0 .align 2, 0 -_080B67CC: .4byte gUnknown_2022984 -_080B67D0: .4byte gUnknown_2022986 +_080B67CC: .4byte gBattle_WIN0H +_080B67D0: .4byte gBattle_WIN0V thumb_func_end sub_80B67A0 thumb_func_start sub_80B67D4 @@ -3315,7 +3315,7 @@ _080B6C44: movs r0, 0x10 strh r0, [r6, 0xE] movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r6, 0x10] @@ -3437,7 +3437,7 @@ _080B6D28: ldr r1, _080B6D84 @ =gFile_graphics_battle_anims_backgrounds_scary_face_sheet add r2, sp, 0xC ldrh r2, [r2, 0xA] - bl sub_80753B4 + bl AnimLoadCompressedBgGfx ldr r0, _080B6D88 @ =gFile_graphics_battle_anims_backgrounds_scary_face_palette add r1, sp, 0xC ldrb r1, [r1, 0x8] diff --git a/asm/ground.s b/asm/ground.s index 3df01daf8..585fb139a 100644 --- a/asm/ground.s +++ b/asm/ground.s @@ -473,7 +473,7 @@ _080B8F00: .4byte _080B9064 _080B8F14: movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x1C] @@ -668,7 +668,7 @@ sub_80B908C: @ 80B908C lsls r0, 24 lsrs r5, r0, 24 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 ldr r2, _080B90CC @ =gSprites @@ -766,7 +766,7 @@ sub_80B912C: @ 80B912C _080B914C: .4byte gTasks _080B9150: movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x1C] @@ -846,7 +846,7 @@ _080B91DC: .4byte _080B92AC _080B91F0: movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x1C] @@ -1286,7 +1286,7 @@ _080B9548: _080B9554: .4byte gBattlerSpriteIds _080B9558: ldrb r0, [r6] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x1A] diff --git a/asm/ice.s b/asm/ice.s index ab26d23e5..7b51b69c0 100644 --- a/asm/ice.s +++ b/asm/ice.s @@ -2015,7 +2015,7 @@ _080B0008: cmp r0, 0 bne _080B0064 movs r0, 0x1 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId ldr r2, _080B00CC @ =gSprites lsls r0, 24 lsrs r0, 24 @@ -2420,7 +2420,7 @@ _080B0344: _080B0372: adds r0, r4, 0 bl DestroySprite - ldr r1, _080B0388 @ =gUnknown_2037EE2 + ldr r1, _080B0388 @ =gAnimVisualTaskCount ldrb r0, [r1] subs r0, 0x1 strb r0, [r1] @@ -2429,7 +2429,7 @@ _080B0380: pop {r0} bx r0 .align 2, 0 -_080B0388: .4byte gUnknown_2037EE2 +_080B0388: .4byte gAnimVisualTaskCount thumb_func_end sub_80B0148 thumb_func_start sub_80B038C diff --git a/asm/normal.s b/asm/normal.s index 75c4dcf6e..1ddf400ba 100644 --- a/asm/normal.s +++ b/asm/normal.s @@ -121,7 +121,7 @@ sub_80B99D4: @ 80B99D4 ldr r4, _080B9A0C @ =gBattleAnimArgs movs r1, 0 ldrsh r0, [r4, r1] - bl sub_80B9A14 + bl UnpackSelectedBattleAnimPalettes movs r1, 0x2 ldrsb r1, [r4, r1] ldrb r2, [r4, 0x4] @@ -146,8 +146,8 @@ _080B9A0C: .4byte gBattleAnimArgs _080B9A10: .4byte sub_80B9A5C thumb_func_end sub_80B99D4 - thumb_func_start sub_80B9A14 -sub_80B9A14: @ 80B9A14 + thumb_func_start UnpackSelectedBattleAnimPalettes +UnpackSelectedBattleAnimPalettes: @ 80B9A14 push {r4-r6,lr} mov r6, r8 push {r6} @@ -183,7 +183,7 @@ sub_80B9A14: @ 80B9A14 pop {r4-r6} pop {r1} bx r1 - thumb_func_end sub_80B9A14 + thumb_func_end UnpackSelectedBattleAnimPalettes thumb_func_start sub_80B9A5C sub_80B9A5C: @ 80B9A5C @@ -226,7 +226,7 @@ sub_80B9A7C: @ 80B9A7C strh r0, [r5, 0x3C] movs r1, 0x3C ldrsh r0, [r5, r1] - bl sub_80B9A14 + bl UnpackSelectedBattleAnimPalettes ldrb r1, [r4, 0x8] ldrh r2, [r4, 0x6] bl BlendPalettes @@ -278,7 +278,7 @@ _080B9B04: .4byte sub_80B9B5C _080B9B08: movs r2, 0x3C ldrsh r0, [r4, r2] - bl sub_80B9A14 + bl UnpackSelectedBattleAnimPalettes adds r3, r0, 0 ldrh r1, [r4, 0x30] movs r0, 0x80 @@ -331,7 +331,7 @@ sub_80B9B5C: @ 80B9B5C bne _080B9B82 movs r1, 0x3C ldrsh r0, [r4, r1] - bl sub_80B9A14 + bl UnpackSelectedBattleAnimPalettes movs r1, 0 movs r2, 0 bl BlendPalettes @@ -444,7 +444,7 @@ sub_80B9C2C: @ 80B9C2C adds r4, r1 movs r1, 0x8 ldrsh r0, [r4, r1] - bl sub_80B9A14 + bl UnpackSelectedBattleAnimPalettes movs r1, 0xA ldrsb r1, [r4, r1] ldrh r2, [r4, 0x12] @@ -1827,7 +1827,7 @@ sub_80BA6C8: @ 80BA6C8 adds r4, r0, 0 ldr r5, _080BA728 @ =gBattleAnimArgs ldrb r0, [r5] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x2E] diff --git a/asm/psychic.s b/asm/psychic.s index 32c5bed30..d2d82826d 100644 --- a/asm/psychic.s +++ b/asm/psychic.s @@ -696,7 +696,7 @@ sub_80B3418: @ 80B3418 ldr r0, _080B3448 @ =gTasks adds r4, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 @@ -750,7 +750,7 @@ sub_80B3480: @ 80B3480 ldr r0, _080B34CC @ =gTasks adds r4, r1, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 movs r1, 0 @@ -1804,7 +1804,7 @@ _080B3CAC: .4byte gTasks _080B3CB0: ldr r1, _080B3CD4 @ =gBattleAnimArgs ldrb r0, [r1] - bl duplicate_obj_of_side_rel2move_in_transparent_mode + bl CloneBattlerSpriteWithBlend lsls r0, 16 lsrs r1, r0, 16 mov r9, r1 @@ -1871,7 +1871,7 @@ _080B3CD8: bl CalcCenterToCornerVec ldr r1, _080B3D70 @ =gBattleAnimArgs ldrb r0, [r1] - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r7, 0x22] diff --git a/asm/rock.s b/asm/rock.s index a40f4935d..74712e5e5 100644 --- a/asm/rock.s +++ b/asm/rock.s @@ -292,7 +292,7 @@ _080B4854: ldr r1, _080B48F4 @ =gFile_graphics_battle_anims_backgrounds_sandstorm_brew_sheet mov r2, sp ldrh r2, [r2, 0xA] - bl sub_80753B4 + bl AnimLoadCompressedBgGfx ldr r0, _080B48F8 @ =gFile_graphics_battle_anims_sprites_261_palette mov r1, sp ldrb r1, [r1, 0x8] @@ -825,7 +825,7 @@ _080B4C7A: strh r0, [r6, 0x24] strh r5, [r6, 0xA] movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r6, 0x26] diff --git a/asm/water.s b/asm/water.s index d40e8f594..5c9096023 100644 --- a/asm/water.s +++ b/asm/water.s @@ -1084,7 +1084,7 @@ _080AB42E: ldr r1, _080AB45C @ =gFile_graphics_battle_anims_backgrounds_water_sheet mov r2, sp ldrh r2, [r2, 0xA] - bl sub_80753B4 + bl AnimLoadCompressedBgGfx ldr r0, _080AB460 @ =gBattleAnimArgs movs r1, 0 ldrsh r0, [r0, r1] @@ -1991,7 +1991,7 @@ sub_80ABB28: @ 80ABB28 ldr r0, _080ABB78 @ =gTasks adds r4, r0 movs r0, 0 - bl GetAnimBankSpriteId + bl GetAnimBattlerSpriteId lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x26] @@ -2727,7 +2727,7 @@ _080AC0AE: ldr r1, [r0] adds r0, r2, 0 bl _call_via_r1 - ldr r1, _080AC144 @ =gUnknown_2037EE2 + ldr r1, _080AC144 @ =gAnimVisualTaskCount ldrb r0, [r1] adds r0, 0x1 strb r0, [r1] @@ -2748,7 +2748,7 @@ _080AC0F8: ldr r1, [r0] adds r0, r2, 0 bl _call_via_r1 - ldr r1, _080AC144 @ =gUnknown_2037EE2 + ldr r1, _080AC144 @ =gAnimVisualTaskCount ldrb r0, [r1] adds r0, 0x1 strb r0, [r1] @@ -2769,7 +2769,7 @@ _080AC128: .align 2, 0 _080AC13C: .4byte gBattleAnimArgs _080AC140: .4byte sub_80B94B4 -_080AC144: .4byte gUnknown_2037EE2 +_080AC144: .4byte gAnimVisualTaskCount _080AC148: movs r2, 0x1A ldrsh r0, [r4, r2] diff --git a/data/data_835B488.s b/data/data_835B488.s index 742224d2b..470eee3c1 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -941,14 +941,8 @@ gUnknown_83E7C38:: @ 83E7C38 gUnknown_83E7C98:: @ 83E7C98 .incbin "baserom.gba", 0x3E7C98, 0x30 -gUnknown_83E7CC8:: @ 83E7CC8 - .incbin "baserom.gba", 0x3E7CC8, 0x2 - -gUnknown_83E7CCA:: @ 83E7CCA - .incbin "baserom.gba", 0x3E7CCA, 0x4 - -gUnknown_83E7CCE:: @ 83E7CCE - .incbin "baserom.gba", 0x3E7CCE, 0x6 + .section .rodata.83E7CD4 + .balign 4 gUnknown_83E7CD4:: @ 83E7CD4 .incbin "baserom.gba", 0x3E7CD4, 0x28 diff --git a/data/graphics.s b/data/graphics.s index 9c5d1c3f9..d0bae69c0 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -2412,47 +2412,47 @@ gFile_graphics_battle_anims_sprites_243_palette:: @ 8D2D8CC .incbin "graphics/battle_anims/sprites/243.gbapal.lz" .align 2 -gFile_graphics_battle_anims_masks_stat_sheet:: @ 8D2D8F4 +gBattleStatMask_Gfx:: @ 8D2D8F4 .incbin "graphics/battle_anims/masks/stat.4bpp.lz" .align 2 -gFile_graphics_battle_anims_masks_stat_tilemap_1_tilemap:: @ 8D2DB04 +gBattleStatMask1_Tilemap:: @ 8D2DB04 .incbin "graphics/battle_anims/masks/stat_tilemap_1.bin.lz" .align 2 -gFile_graphics_battle_anims_masks_stat_tilemap_2_tilemap:: @ 8D2DC20 +gBattleStatMask2_Tilemap:: @ 8D2DC20 .incbin "graphics/battle_anims/masks/stat_tilemap_2.bin.lz" .align 2 -gFile_graphics_battle_anims_masks_stat1_palette:: @ 8D2DD3C +gBattleStatMask1_Pal:: @ 8D2DD3C .incbin "graphics/battle_anims/masks/stat1.gbapal.lz" .align 2 -gFile_graphics_battle_anims_masks_stat2_palette:: @ 8D2DD5C +gBattleStatMask2_Pal:: @ 8D2DD5C .incbin "graphics/battle_anims/masks/stat2.gbapal.lz" .align 2 -gFile_graphics_battle_anims_masks_stat3_palette:: @ 8D2DD7C +gBattleStatMask3_Pal:: @ 8D2DD7C .incbin "graphics/battle_anims/masks/stat3.gbapal.lz" .align 2 -gFile_graphics_battle_anims_masks_stat4_palette:: @ 8D2DD9C +gBattleStatMask4_Pal:: @ 8D2DD9C .incbin "graphics/battle_anims/masks/stat4.gbapal.lz" .align 2 -gFile_graphics_battle_anims_masks_stat5_palette:: @ 8D2DDBC +gBattleStatMask5_Pal:: @ 8D2DDBC .incbin "graphics/battle_anims/masks/stat5.gbapal.lz" .align 2 -gFile_graphics_battle_anims_masks_stat6_palette:: @ 8D2DDDC +gBattleStatMask6_Pal:: @ 8D2DDDC .incbin "graphics/battle_anims/masks/stat6.gbapal.lz" .align 2 -gFile_graphics_battle_anims_masks_stat7_palette:: @ 8D2DDFC +gBattleStatMask7_Pal:: @ 8D2DDFC .incbin "graphics/battle_anims/masks/stat7.gbapal.lz" .align 2 -gFile_graphics_battle_anims_masks_stat8_palette:: @ 8D2DE1C +gBattleStatMask8_Pal:: @ 8D2DE1C .incbin "graphics/battle_anims/masks/stat8.gbapal.lz" .align 2 diff --git a/include/battle.h b/include/battle.h index 1f7fc5bf6..64283de20 100644 --- a/include/battle.h +++ b/include/battle.h @@ -836,7 +836,7 @@ struct MonSpritesGfx u8 field_F4[0x80]; u8 *barFontGfx; void *field_178; - void *field_17C; + u16 *field_17C; }; extern u16 gBattle_BG0_X; diff --git a/include/battle_anim.h b/include/battle_anim.h index e1cdc1c13..d04464f36 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -7,14 +7,6 @@ #define BATTLE_BANKS_COUNT 4 #endif // BATTLE_BANKS_COUNT -enum -{ - ANIM_BANK_ATTACKER, - ANIM_BANK_TARGET, - ANIM_BANK_ATK_PARTNER, - ANIM_BANK_DEF_PARTNER, -}; - enum { BG_ANIM_SCREEN_SIZE, @@ -83,6 +75,7 @@ s16 sub_80A52EC(s16 a); s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan); bool8 IsBattlerSpriteVisible(u8 battlerId); s16 KeepPanInRange(s16 a, s32 oldPan); +void sub_80730C0(u16, const u16 *, u16 *, u8); // battle_anim_80FE840.s void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value); @@ -126,7 +119,7 @@ u8 GetBattlerSpriteCoord(u8 bank, u8 attributeId); bool8 IsBankSpritePresent(u8 bank); void sub_80A6C68(u8 arg0); -u8 GetAnimBankSpriteId(u8 wantedBank); +u8 GetAnimBattlerSpriteId(u8 wantedBank); bool8 IsDoubleBattle(void); u8 sub_80A6D94(void); u8 sub_80A8364(u8); @@ -139,7 +132,7 @@ u8 GetGhostSpriteDefault_Y(u8 battlerId); void sub_8072E48(u8 battlerId, u8); void sub_8073128(u8); -// battle_anim_80A9C70.s +// battle_anim_status_effects.s #define STAT_ANIM_PLUS1 15 #define STAT_ANIM_PLUS2 39 #define STAT_ANIM_MINUS1 22 @@ -150,7 +143,7 @@ void sub_8073128(u8); #define STAT_ANIM_MULTIPLE_MINUS2 58 void LaunchStatusAnimation(u8 bank, u8 statusAnimId); -// battle_anim_8170478.s +// battle_anim_special.s u8 ItemIdToBallId(u16 itemId); u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId); u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 bank, u32 arg2, u8 ballId); @@ -169,6 +162,17 @@ u8 GetBattlerSpriteSubpriority(u8 battlerId); void StartAnimLinearTranslation(struct Sprite *sprite); void sub_80755B8(struct Sprite *sprite); u8 sub_80768B0(u8 battlerId); +u32 sub_8075CB8(u8 a1, u8 a2, u8 a3, u8 a4); +u8 sub_8075D80(u8 battlerId); +s16 CloneBattlerSpriteWithBlend(u8 animBattler); +void obj_delete_but_dont_free_vram(struct Sprite *sprite); +void sub_807543C(u8 bgId, const u32 *); +void AnimLoadCompressedBgGfx(u32, const u32 *, u32); +void sub_80752A0(struct BattleAnimBgData *); +u8 sub_8076E34(s32, u8, s32); +void sub_8075358(u8 bgId); +u32 sub_8075BE8(u8, u8, u8, u8, u8, u8, u8); +void sub_8075458(bool8); // battle_anim_mon_movement.c void AnimTask_ShakeMon(u8 taskId); @@ -185,4 +189,11 @@ void sub_8099980(u8 taskId); void sub_8099A78(u8 taskId); void sub_8099BD4(u8 taskId); +// normal.s +u32 UnpackSelectedBattleAnimPalettes(s16 selector); + +// battle_anim_utility_funcs.c +void sub_80BB088(u8 taskId); +void sub_80BBA20(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *gfx, const u32 *tilemap, const u32 *palette); + #endif // GUARD_BATTLE_ANIM_H diff --git a/include/gba/defines.h b/include/gba/defines.h index c0eec12b1..65561f10a 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -77,8 +77,6 @@ #define RGB_BLACK RGB(0, 0, 0) #define RGB_WHITE RGB(31, 31, 31) -#define WIN_RANGE(a, b) (((a) << 8) | (b)) - #define NAKED __attribute__((naked)) #define UNUSED __attribute__((unused)) diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 6dbe5e8ed..2eefb2482 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -538,6 +538,40 @@ #define BGCNT_AFF512x512 0x8000 #define BGCNT_AFF1024x1024 0xC000 +// WININ/OUT +#define WININ_WIN0_BG0 (1 << 0) +#define WININ_WIN0_BG1 (1 << 1) +#define WININ_WIN0_BG2 (1 << 2) +#define WININ_WIN0_BG3 (1 << 3) +#define WININ_WIN0_BG_ALL (WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3) +#define WININ_WIN0_OBJ (1 << 4) +#define WININ_WIN0_CLR (1 << 5) +#define WININ_WIN1_BG0 (1 << 8) +#define WININ_WIN1_BG1 (1 << 9) +#define WININ_WIN1_BG2 (1 << 10) +#define WININ_WIN1_BG3 (1 << 11) +#define WININ_WIN1_BG_ALL (WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3) +#define WININ_WIN1_OBJ (1 << 12) +#define WININ_WIN1_CLR (1 << 13) + +#define WINOUT_WIN01_BG0 (1 << 0) +#define WINOUT_WIN01_BG1 (1 << 1) +#define WINOUT_WIN01_BG2 (1 << 2) +#define WINOUT_WIN01_BG3 (1 << 3) +#define WINOUT_WIN01_BG_ALL (WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3) +#define WINOUT_WIN01_OBJ (1 << 4) +#define WINOUT_WIN01_CLR (1 << 5) +#define WINOUT_WINOBJ_BG0 (1 << 8) +#define WINOUT_WINOBJ_BG1 (1 << 9) +#define WINOUT_WINOBJ_BG2 (1 << 10) +#define WINOUT_WINOBJ_BG3 (1 << 11) +#define WINOUT_WINOBJ_BG_ALL (WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3) +#define WINOUT_WINOBJ_OBJ (1 << 12) +#define WINOUT_WINOBJ_CLR (1 << 13) + +#define WIN_RANGE(a, b) (((a) << 8) | (b)) +#define WIN_RANGE2(a, b) ((b) | ((a) << 8)) + // BLDCNT // Bits 0-5 select layers for the 1st target #define BLDCNT_TGT1_BG0 (1 << 0) @@ -558,6 +592,7 @@ #define BLDCNT_TGT2_BG3 (1 << 11) #define BLDCNT_TGT2_OBJ (1 << 12) #define BLDCNT_TGT2_BD (1 << 13) +#define BLDCNT_TGT2_ALL (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD) // BLDALPHA #define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1)) diff --git a/include/graphics.h b/include/graphics.h index 5e133ee01..1113eedd0 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -961,6 +961,21 @@ extern const u8 gFile_graphics_items_icon_palettes_sapphire_palette[]; extern const u8 gFile_graphics_items_icons_return_to_field_arrow_sheet[]; extern const u8 gFile_graphics_items_icon_palettes_return_to_field_arrow_palette[]; +// battle_anim_utility_funcs +extern const u32 gFile_graphics_battle_anims_masks_curse_sheet[]; +extern const u32 gFile_graphics_battle_anims_masks_curse_tilemap[]; +extern const u32 gBattleStatMask_Gfx[]; +extern const u32 gBattleStatMask1_Pal[]; +extern const u32 gBattleStatMask2_Pal[]; +extern const u32 gBattleStatMask3_Pal[]; +extern const u32 gBattleStatMask4_Pal[]; +extern const u32 gBattleStatMask5_Pal[]; +extern const u32 gBattleStatMask6_Pal[]; +extern const u32 gBattleStatMask7_Pal[]; +extern const u32 gBattleStatMask8_Pal[]; +extern const u32 gBattleStatMask1_Tilemap[]; +extern const u32 gBattleStatMask2_Tilemap[]; + // title_screen extern const u16 gGraphics_TitleScreen_PokemonFireRedLogoPals[]; extern const u8 gGraphics_TitleScreen_PokemonFireRedLogoTiles[]; diff --git a/ld_script.txt b/ld_script.txt index a09d3f607..0820eeba0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -170,7 +170,8 @@ SECTIONS { asm/dark.o(.text); asm/ground.o(.text); asm/normal.o(.text); - asm/battle_anim_utility_funcs.o(.text); + src/battle_anim_utility_funcs.o(.text); + asm/battle_intro.o(.text); asm/bike.o(.text); asm/easy_chat.o(.text); asm/mon_markings.o(.text); @@ -420,6 +421,8 @@ SECTIONS { src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); data/data_835B488.o(.rodata.83DF09C); + src/battle_anim_utility_funcs.o(.rodata); + data/data_835B488.o(.rodata.83E7CD4); src/heal_location.o(.rodata); data/data_835B488.o(.rodata.83EEC98); src/battle_ai_script_commands.o(.rodata); diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index 88fbce6da..e642f0dbd 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -92,7 +92,7 @@ const struct SpriteTemplate gUnknown_83D4EB4 = // arg 4: frame delay void AnimTask_ShakeMon(u8 taskId) { - u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); if (spriteId == 0xFF) DestroyAnimVisualTask(taskId); @@ -150,7 +150,7 @@ void AnimTask_ShakeMon2(u8 taskId) if (gBattleAnimArgs[0] < MAX_BATTLERS_COUNT) { - spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); if (spriteId == 0xFF) abort = TRUE; } @@ -228,7 +228,7 @@ static void AnimTask_ShakeMon2Step(u8 taskId) // arg 4: delay void AnimTask_ShakeMonInPlace(u8 taskId) { - u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); if (spriteId == 0xFF) DestroyAnimVisualTask(taskId); @@ -290,7 +290,7 @@ static void AnimTask_ShakeMonInPlaceStep(u8 taskId) // arg 4: duration void AnimTask_ShakeAndSinkMon(u8 taskId) { - u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); gSprites[spriteId].pos2.x = gBattleAnimArgs[1]; gTasks[taskId].data[0] = spriteId; @@ -331,7 +331,7 @@ void AnimTask_TranslateMonElliptical(u8 taskId) { u8 wavePeriod = 1; u8 i; - u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); if (gBattleAnimArgs[4] > 5) gBattleAnimArgs[4] = 5; for (i = 0; i < gBattleAnimArgs[4]; i++) @@ -414,7 +414,7 @@ static void DoVerticalDip(struct Sprite * sprite) { u8 spriteId; sprite->invisible = TRUE; - spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]); + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); sprite->data[0] = gBattleAnimArgs[0]; sprite->data[1] = 0; sprite->data[2] = gBattleAnimArgs[1]; @@ -581,7 +581,7 @@ void AnimTask_WindUpLunge(u8 taskId) gBattleAnimArgs[1] = -gBattleAnimArgs[1]; gBattleAnimArgs[5] = -gBattleAnimArgs[5]; } - gTasks[taskId].data[0] = GetAnimBankSpriteId(gBattleAnimArgs[0]); + gTasks[taskId].data[0] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); gTasks[taskId].data[1] = gBattleAnimArgs[1] * 256 / gBattleAnimArgs[3]; gTasks[taskId].data[2] = gBattleAnimArgs[2]; gTasks[taskId].data[3] = gBattleAnimArgs[3]; @@ -627,7 +627,7 @@ void sub_80995FC(u8 taskId) { case 0: case 1: - spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); break; case 2: if (!IsBattlerSpriteVisible(gBattleAnimAttacker ^ BIT_FLANK)) @@ -678,7 +678,7 @@ void AnimTask_SwayMon(u8 taskId) u8 spriteId; if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - spriteId = GetAnimBankSpriteId(gBattleAnimArgs[4]); + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[4]); gTasks[taskId].data[0] = gBattleAnimArgs[0]; gTasks[taskId].data[1] = gBattleAnimArgs[1]; gTasks[taskId].data[2] = gBattleAnimArgs[2]; @@ -735,7 +735,7 @@ static void AnimTask_SwayMonStep(u8 taskId) // arg 4: sprite object mode void AnimTask_ScaleMonAndRestore(u8 taskId) { - u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[3]); + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[3]); PrepareBattlerSpriteForRotScale(spriteId, gBattleAnimArgs[4]); gTasks[taskId].data[0] = gBattleAnimArgs[0]; gTasks[taskId].data[1] = gBattleAnimArgs[1]; @@ -773,7 +773,7 @@ static void AnimTask_ScaleMonAndRestoreStep(u8 taskId) void sub_8099980(u8 taskId) { - u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]); + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); PrepareBattlerSpriteForRotScale(spriteId, 0); gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = gBattleAnimArgs[0]; @@ -806,7 +806,7 @@ void sub_8099980(u8 taskId) void sub_8099A78(u8 taskId) { - u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]); + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); PrepareBattlerSpriteForRotScale(spriteId, 0); gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = gBattleAnimArgs[0]; @@ -888,7 +888,7 @@ void sub_8099BD4(u8 taskId) gTasks[taskId].data[12] = 0; gTasks[taskId].data[10] = gBattleAnimArgs[3]; gTasks[taskId].data[11] = gBattleAnimArgs[4]; - gTasks[taskId].data[7] = GetAnimBankSpriteId(1); + gTasks[taskId].data[7] = GetAnimBattlerSpriteId(1); gTasks[taskId].data[8] = gSprites[gTasks[taskId].data[7]].pos2.x; gTasks[taskId].data[9] = gSprites[gTasks[taskId].data[7]].pos2.y; gTasks[taskId].data[0] = 0; diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c new file mode 100644 index 000000000..795458ab9 --- /dev/null +++ b/src/battle_anim_utility_funcs.c @@ -0,0 +1,946 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "malloc.h" +#include "palette.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "util.h" +#include "constants/songs.h" + +struct AnimStatsChangeData +{ + u8 battler1; + u8 battler2; + u8 higherPriority; + s16 data[8]; + u16 species; +}; + +static void StartBlendAnimSpriteColor(u8 taskId, u32 selectedPalettes); +static void AnimTask_BlendSpriteColor_Step2(u8 taskId); +static void sub_80BAB78(u8 taskId); +static void sub_80BABD0(u8 taskId); +static void sub_80BACA8(struct Sprite *sprite); +static void sub_80BAF38(u8 taskId); +static void sub_80BB0D8(u8 taskId); +static void sub_80BB2A0(u8 taskId); +static void sub_80BB4B8(u8 taskId); +static void sub_80BB6CC(u8 taskId); +static void sub_80BB790(u32 selectedPalettes, u16 color); +static void sub_80BB8A4(u8 taskId); +static void sub_80BBC2C(u8 taskId); +static void sub_80BC19C(u8 taskId); + +static EWRAM_DATA struct AnimStatsChangeData *sAnimStatsChangeData = NULL; + +static const u16 gUnknown_83E7CC8[] = { RGB(31, 31, 31) }; +const u8 gUnknown_83E7CCA[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT }; +const u8 gUnknown_83E7CCE[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT }; + +void sub_80BA7F8(u8 taskId) +{ + u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]); + + selectedPalettes |= sub_8075CB8((gBattleAnimArgs[0] >> 7) & 1, + (gBattleAnimArgs[0] >> 8) & 1, + (gBattleAnimArgs[0] >> 9) & 1, + (gBattleAnimArgs[0] >> 10) & 1); + StartBlendAnimSpriteColor(taskId, selectedPalettes); +} + +void sub_80BA83C(u8 taskId) +{ + u8 battler; + u32 selectedPalettes; + u8 animBattlers[2]; + + animBattlers[1] = 0xFF; + selectedPalettes = UnpackSelectedBattleAnimPalettes(1); + switch (gBattleAnimArgs[0]) + { + case 2: + selectedPalettes = 0; + // fall through + case 0: + animBattlers[0] = gBattleAnimAttacker; + break; + case 3: + selectedPalettes = 0; + // fall through + case 1: + animBattlers[0] = gBattleAnimTarget; + break; + case 4: + animBattlers[0] = gBattleAnimAttacker; + animBattlers[1] = gBattleAnimTarget; + break; + case 5: + animBattlers[0] = 0xFF; + break; + case 6: + selectedPalettes = 0; + animBattlers[0] = BATTLE_PARTNER(gBattleAnimAttacker); + break; + case 7: + selectedPalettes = 0; + animBattlers[0] = BATTLE_PARTNER(gBattleAnimTarget); + break; + } + for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler) + { + if (battler != animBattlers[0] + && battler != animBattlers[1] + && IsBattlerSpriteVisible(battler)) + selectedPalettes |= 0x10000 << sub_8075D80(battler); + } + StartBlendAnimSpriteColor(taskId, selectedPalettes); +} + +void AnimTask_SetCamouflageBlend(u8 taskId) +{ + u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]); + + switch (gBattleTerrain) + { + case BATTLE_TERRAIN_GRASS: + gBattleAnimArgs[4] = RGB(12, 24, 2); + break; + case BATTLE_TERRAIN_LONG_GRASS: + gBattleAnimArgs[4] = RGB(0, 15, 2); + break; + case BATTLE_TERRAIN_SAND: + gBattleAnimArgs[4] = RGB(30, 24, 11); + break; + case BATTLE_TERRAIN_UNDERWATER: + gBattleAnimArgs[4] = RGB(0, 0, 18); + break; + case BATTLE_TERRAIN_WATER: + gBattleAnimArgs[4] = RGB(11, 22, 31); + break; + case BATTLE_TERRAIN_POND: + gBattleAnimArgs[4] = RGB(11, 22, 31); + break; + case BATTLE_TERRAIN_MOUNTAIN: + gBattleAnimArgs[4] = RGB(22, 16, 10); + break; + case BATTLE_TERRAIN_CAVE: + gBattleAnimArgs[4] = RGB(14, 9, 3); + break; + case BATTLE_TERRAIN_BUILDING: + gBattleAnimArgs[4] = RGB(31, 31, 31); + break; + case BATTLE_TERRAIN_PLAIN: + gBattleAnimArgs[4] = RGB(31, 31, 31); + break; + } + StartBlendAnimSpriteColor(taskId, selectedPalettes); +} + +void AnimTask_BlendParticle(u8 taskId) +{ + u8 paletteIndex = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); + u32 selectedPalettes = 1 << (paletteIndex + 16); + + StartBlendAnimSpriteColor(taskId, selectedPalettes); +} + +void StartBlendAnimSpriteColor(u8 taskId, u32 selectedPalettes) +{ + gTasks[taskId].data[0] = selectedPalettes; + gTasks[taskId].data[1] = selectedPalettes >> 16; + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + gTasks[taskId].data[4] = gBattleAnimArgs[3]; + gTasks[taskId].data[5] = gBattleAnimArgs[4]; + gTasks[taskId].data[10] = gBattleAnimArgs[2]; + gTasks[taskId].func = AnimTask_BlendSpriteColor_Step2; + gTasks[taskId].func(taskId); +} + +static void AnimTask_BlendSpriteColor_Step2(u8 taskId) +{ + u32 selectedPalettes; + u16 singlePaletteMask = 0; + + if (gTasks[taskId].data[9] == gTasks[taskId].data[2]) + { + gTasks[taskId].data[9] = 0; + selectedPalettes = gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 16); + while (selectedPalettes) + { + if (selectedPalettes & 1) + BlendPalette(singlePaletteMask, 16, gTasks[taskId].data[10], gTasks[taskId].data[5]); + singlePaletteMask += 0x10; + selectedPalettes >>= 1; + } + if (gTasks[taskId].data[10] < gTasks[taskId].data[4]) + ++gTasks[taskId].data[10]; + else if (gTasks[taskId].data[10] > gTasks[taskId].data[4]) + --gTasks[taskId].data[10]; + else + DestroyAnimVisualTask(taskId); + } + else + { + ++gTasks[taskId].data[9]; + } +} + +void sub_80BAB38(u8 taskId) +{ + BeginHardwarePaletteFade(gBattleAnimArgs[0], + gBattleAnimArgs[1], + gBattleAnimArgs[2], + gBattleAnimArgs[3], + gBattleAnimArgs[4]); + gTasks[taskId].func = sub_80BAB78; +} + +static void sub_80BAB78(u8 taskId) +{ + if (!gPaletteFade.active) + DestroyAnimVisualTask(taskId); +} + +void sub_80BAB98(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[0] = gBattleAnimArgs[0]; + task->data[1] = 0; + task->data[2] = gBattleAnimArgs[1]; + task->data[3] = gBattleAnimArgs[2]; + task->data[4] = gBattleAnimArgs[3]; + task->data[5] = 0; + task->func = sub_80BABD0; +} +static void sub_80BABD0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (task->data[4]) + { + if (task->data[1]) + { + --task->data[1]; + } + else + { + task->data[6] = CloneBattlerSpriteWithBlend(task->data[0]); + if (task->data[6] >= 0) + { + gSprites[task->data[6]].oam.priority = task->data[0] ? 1 : 2; + gSprites[task->data[6]].data[0] = task->data[3]; + gSprites[task->data[6]].data[1] = taskId; + gSprites[task->data[6]].data[2] = 5; + gSprites[task->data[6]].callback = sub_80BACA8; + ++task->data[5]; + } + --task->data[4]; + task->data[1] = task->data[2]; + } + } + else if (task->data[5] == 0) + { + DestroyAnimVisualTask(taskId); + } +} + +static void sub_80BACA8(struct Sprite *sprite) +{ + if (sprite->data[0]) + { + --sprite->data[0]; + } + else + { + --gTasks[sprite->data[1]].data[sprite->data[2]]; + obj_delete_but_dont_free_vram(sprite); + } +} + +void sub_80BACEC(u8 taskId) +{ + u16 species; + s32 newSpriteId; + u16 var0; + u16 bg1Cnt; + u8 spriteId; + struct BattleAnimBgData animBgData; + + var0 = 0; + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 12)); + bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT); + ((struct BgCnt *)&bg1Cnt)->priority = 0; + ((struct BgCnt *)&bg1Cnt)->screenSize = 0; + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + if (!IsContest()) + { + ((struct BgCnt *)&bg1Cnt)->charBaseBlock = 1; + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + } + if (IsDoubleBattle() && !IsContest()) + { + if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_RIGHT + || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT) + { + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)) == TRUE) + { + gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority -= 1; + ((struct BgCnt *)&bg1Cnt)->priority = 1; + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + var0 = 1; + } + } + } + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + else + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + spriteId = GetAnimBattlerSpriteId(0); + newSpriteId = sub_8076E34(gBattleAnimAttacker, spriteId, species); + sub_80752A0(&animBgData); + sub_807543C(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_tilemap); + if (IsContest()) + sub_80730C0(animBgData.paletteId, animBgData.bgTilemap, 0, 0); + AnimLoadCompressedBgGfx(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_sheet, animBgData.tilesOffset); + LoadPalette(gUnknown_83E7CC8, animBgData.paletteId * 16 + 1, 2); + gBattle_BG1_X = -gSprites[spriteId].pos1.x + 32; + gBattle_BG1_Y = -gSprites[spriteId].pos1.y + 32; + gTasks[taskId].data[0] = newSpriteId; + gTasks[taskId].data[6] = var0; + gTasks[taskId].func = sub_80BAF38; +} + +static void sub_80BAF38(u8 taskId) +{ + struct BattleAnimBgData animBgData; + struct Sprite *sprite; + u16 bg1Cnt; + + gTasks[taskId].data[10] += 4; + gBattle_BG1_Y -= 4; + if (gTasks[taskId].data[10] == 64) + { + gTasks[taskId].data[10] = 0; + gBattle_BG1_Y += 64; + if (++gTasks[taskId].data[11] == 4) + { + sub_8073128(0); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + if (!IsContest()) + { + bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT); + ((struct BgCnt *)&bg1Cnt)->charBaseBlock = 0; + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + } + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + sprite = &gSprites[GetAnimBattlerSpriteId(0)]; // unused + sprite = &gSprites[gTasks[taskId].data[0]]; + DestroySprite(sprite); + sub_80752A0(&animBgData); + sub_8075358(animBgData.bgId); + if (gTasks[taskId].data[6] == 1) + ++gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority; + gBattle_BG1_Y = 0; + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_80BB088(u8 taskId) +{ + u8 i; + + sAnimStatsChangeData = AllocZeroed(sizeof(struct AnimStatsChangeData)); + for (i = 0; i < 8; ++i) + sAnimStatsChangeData->data[i] = gBattleAnimArgs[i]; + gTasks[taskId].func = sub_80BB0D8; +} + +static void sub_80BB0D8(u8 taskId) +{ + if (sAnimStatsChangeData->data[2] == 0) + sAnimStatsChangeData->battler1 = gBattleAnimAttacker; + else + sAnimStatsChangeData->battler1 = gBattleAnimTarget; + sAnimStatsChangeData->battler2 = BATTLE_PARTNER(sAnimStatsChangeData->battler1); + if (IsContest() || (sAnimStatsChangeData->data[3] && !IsBattlerSpriteVisible(sAnimStatsChangeData->battler2))) + sAnimStatsChangeData->data[3] = 0; + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 0); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + if (IsDoubleBattle() && sAnimStatsChangeData->data[3] == 0) + { + if (GetBattlerPosition(sAnimStatsChangeData->battler1) == B_POSITION_OPPONENT_RIGHT + || GetBattlerPosition(sAnimStatsChangeData->battler1) == B_POSITION_PLAYER_LEFT) + { + if (IsBattlerSpriteVisible(sAnimStatsChangeData->battler2) == TRUE) + { + gSprites[gBattlerSpriteIds[sAnimStatsChangeData->battler2]].oam.priority -= 1; + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + sAnimStatsChangeData->higherPriority = 1; + } + } + } + if (GetBattlerSide(sAnimStatsChangeData->battler1) != B_SIDE_PLAYER) + sAnimStatsChangeData->species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[sAnimStatsChangeData->battler1]], MON_DATA_SPECIES); + else + sAnimStatsChangeData->species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[sAnimStatsChangeData->battler1]], MON_DATA_SPECIES); + gTasks[taskId].func = sub_80BB2A0; +} + +static void sub_80BB2A0(u8 taskId) +{ + struct BattleAnimBgData animBgData; + u8 spriteId, newSpriteId = 0; + u8 battlerSpriteId; + + battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler1]; + spriteId = sub_8076E34(sAnimStatsChangeData->battler1, battlerSpriteId, sAnimStatsChangeData->species); + if (sAnimStatsChangeData->data[3]) + { + battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler2]; + newSpriteId = sub_8076E34(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species); + } + sub_80752A0(&animBgData); + if (sAnimStatsChangeData->data[0] == 0) + sub_807543C(animBgData.bgId, gBattleStatMask1_Tilemap); + else + sub_807543C(animBgData.bgId, gBattleStatMask2_Tilemap); + if (IsContest()) + sub_80730C0(animBgData.paletteId, animBgData.bgTilemap, 0, 0); + AnimLoadCompressedBgGfx(animBgData.bgId, gBattleStatMask_Gfx, animBgData.tilesOffset); + switch (sAnimStatsChangeData->data[1]) + { + case 0: + LoadCompressedPalette(gBattleStatMask2_Pal, animBgData.paletteId * 16, 32); + break; + case 1: + LoadCompressedPalette(gBattleStatMask1_Pal, animBgData.paletteId * 16, 32); + break; + case 2: + LoadCompressedPalette(gBattleStatMask3_Pal, animBgData.paletteId * 16, 32); + break; + case 3: + LoadCompressedPalette(gBattleStatMask4_Pal, animBgData.paletteId * 16, 32); + break; + case 4: + LoadCompressedPalette(gBattleStatMask6_Pal, animBgData.paletteId * 16, 32); + break; + case 5: + LoadCompressedPalette(gBattleStatMask7_Pal, animBgData.paletteId * 16, 32); + break; + case 6: + LoadCompressedPalette(gBattleStatMask8_Pal, animBgData.paletteId * 16, 32); + break; + default: + LoadCompressedPalette(gBattleStatMask5_Pal, animBgData.paletteId * 16, 32); + break; + } + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + if (sAnimStatsChangeData->data[0] == 1) + { + gBattle_BG1_X = 64; + gTasks[taskId].data[1] = -3; + } + else + { + gTasks[taskId].data[1] = 3; + } + + if (sAnimStatsChangeData->data[4] == 0) + { + gTasks[taskId].data[4] = 10; + gTasks[taskId].data[5] = 20; + } + else + { + gTasks[taskId].data[4] = 13; + gTasks[taskId].data[5] = 30; + } + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[2] = sAnimStatsChangeData->data[3]; + gTasks[taskId].data[3] = newSpriteId; + gTasks[taskId].data[6] = sAnimStatsChangeData->higherPriority; + gTasks[taskId].data[7] = gBattlerSpriteIds[sAnimStatsChangeData->battler2]; + gTasks[taskId].func = sub_80BB4B8; + if (sAnimStatsChangeData->data[0] == 0) + PlaySE12WithPanning(SE_W255, BattleAnimAdjustPanning2(PAN_SIDE_PLAYER)); + else + PlaySE12WithPanning(SE_W327, BattleAnimAdjustPanning2(PAN_SIDE_PLAYER)); +} + +static void sub_80BB4B8(u8 taskId) +{ + gBattle_BG1_Y += gTasks[taskId].data[1]; + switch (gTasks[taskId].data[15]) + { + case 0: + if (gTasks[taskId].data[11]++ > 0) + { + gTasks[taskId].data[11] = 0; + ++gTasks[taskId].data[12]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); + if (gTasks[taskId].data[12] == gTasks[taskId].data[4]) + ++gTasks[taskId].data[15]; + } + break; + case 1: + if (++gTasks[taskId].data[10] == gTasks[taskId].data[5]) + ++gTasks[taskId].data[15]; + break; + case 2: + if (gTasks[taskId].data[11]++ > 0) + { + gTasks[taskId].data[11] = 0; + --gTasks[taskId].data[12]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); + if (gTasks[taskId].data[12] == 0) + { + sub_8073128(0); + ++gTasks[taskId].data[15]; + } + } + break; + case 3: + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroySprite(&gSprites[gTasks[taskId].data[0]]); + if (gTasks[taskId].data[2]) + DestroySprite(&gSprites[gTasks[taskId].data[3]]); + if (gTasks[taskId].data[6] == 1) + ++gSprites[gTasks[taskId].data[7]].oam.priority; + Free(sAnimStatsChangeData); + sAnimStatsChangeData = NULL; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80BB660(u8 taskId) +{ + u32 selectedPalettes = sub_8075CB8(1, 1, 1, 1); + + sub_80BB790(selectedPalettes, 0); + gTasks[taskId].data[14] = selectedPalettes >> 16; + selectedPalettes = sub_8075BE8(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; + sub_80BB790(selectedPalettes, 0xFFFF); + gTasks[taskId].data[15] = selectedPalettes; + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].func = sub_80BB6CC; +} + +static void sub_80BB6CC(u8 taskId) +{ + u16 i; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 6) + { + task->data[1] = 0; + task->data[2] = 16; + ++task->data[0]; + } + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + --task->data[2]; + for (i = 0; i < 16; ++i) + { + if ((task->data[15] >> i) & 1) + { + u16 paletteOffset = i * 16; + BlendPalette(paletteOffset, 16, task->data[2], 0xFFFF); + } + + if ((task->data[14] >> i) & 1) + { + u16 paletteOffset = i * 16 + 0x100; + BlendPalette(paletteOffset, 16, task->data[2], 0); + } + } + + if (task->data[2] == 0) + ++task->data[0]; + } + break; + case 2: + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80BB790(u32 selectedPalettes, u16 color) +{ + u16 i, curOffset, paletteOffset; + + for (i = 0; i < 32; selectedPalettes >>= 1, ++i) + if (selectedPalettes & 1) + for (curOffset = i * 16, paletteOffset = curOffset; curOffset < paletteOffset + 16; ++curOffset) + gPlttBufferFaded[curOffset] = color; +} + +void sub_80BB7DC(u8 taskId) +{ + s32 j; + u32 battler, selectedPalettes = 0; + + for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler) + if (gBattleAnimAttacker != battler) + selectedPalettes |= 1 << (battler + 16); + for (j = 5; j != 0; --j) + gBattleAnimArgs[j] = gBattleAnimArgs[j - 1]; + StartBlendAnimSpriteColor(taskId, selectedPalettes); +} + +void sub_80BB82C(u8 taskId) +{ + u8 newTaskId; + + sub_8075458(0); + newTaskId = CreateTask(sub_80BB8A4, 5); + if (gBattleAnimArgs[2] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + } + gTasks[newTaskId].data[1] = gBattleAnimArgs[0]; + gTasks[newTaskId].data[2] = gBattleAnimArgs[1]; + gTasks[newTaskId].data[3] = gBattleAnimArgs[3]; + ++gTasks[newTaskId].data[0]; + DestroyAnimVisualTask(taskId); +} + +static void sub_80BB8A4(u8 taskId) +{ + gTasks[taskId].data[10] += gTasks[taskId].data[1]; + gTasks[taskId].data[11] += gTasks[taskId].data[2]; + gBattle_BG3_X += gTasks[taskId].data[10] >> 8; + gBattle_BG3_Y += gTasks[taskId].data[11] >> 8; + gTasks[taskId].data[10] &= 0xFF; + gTasks[taskId].data[11] &= 0xFF; + if (gBattleAnimArgs[7] == gTasks[taskId].data[3]) + { + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + sub_8075458(1); + DestroyTask(taskId); + } +} + +void AnimTask_GetAttackerSide(u8 taskId) +{ + gBattleAnimArgs[7] = GetBattlerSide(gBattleAnimAttacker); + DestroyAnimVisualTask(taskId); +} + +void AnimTask_GetTargetSide(u8 taskId) +{ + gBattleAnimArgs[7] = GetBattlerSide(gBattleAnimTarget); + DestroyAnimVisualTask(taskId); +} + +void AnimTask_GetTargetIsAttackerPartner(u8 taskId) +{ + gBattleAnimArgs[7] = BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget; + DestroyAnimVisualTask(taskId); +} + +void sub_80BB9B0(u8 taskId) +{ + u16 battler; + + for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler) + if (battler != gBattleAnimAttacker && IsBattlerSpriteVisible(battler)) + gSprites[gBattlerSpriteIds[battler]].invisible = gBattleAnimArgs[0]; + DestroyAnimVisualTask(taskId); +} + +void sub_80BBA20(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *gfx, const u32 *tilemap, const u32 *palette) +{ + u16 species; + u8 spriteId, newSpriteId = 0; + u16 bg1Cnt; + struct BattleAnimBgData animBgData; + u8 battler2 = BATTLE_PARTNER(battler1); + + if (IsContest() || (arg4 && !IsBattlerSpriteVisible(battler2))) + arg4 = 0; + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT); + ((vBgCnt *)&bg1Cnt)->priority = 0; + ((vBgCnt *)&bg1Cnt)->screenSize = 0; + ((vBgCnt *)&bg1Cnt)->areaOverflowMode = 1; + if (!IsContest()) + ((vBgCnt *)&bg1Cnt)->charBaseBlock = 1; + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + if (GetBattlerSide(battler1) != B_SIDE_PLAYER) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES); + else + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES); + spriteId = sub_8076E34(battler1, gBattlerSpriteIds[battler1], species); + if (arg4) + newSpriteId = sub_8076E34(battler2, gBattlerSpriteIds[battler2], species); + sub_80752A0(&animBgData); + sub_807543C(animBgData.bgId, tilemap); + if (IsContest()) + sub_80730C0(animBgData.paletteId, animBgData.bgTilemap, 0, 0); + AnimLoadCompressedBgGfx(animBgData.bgId, gfx, animBgData.tilesOffset); + LoadCompressedPalette(palette, animBgData.paletteId * 16, 32); + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gTasks[taskId].data[1] = arg2; + gTasks[taskId].data[4] = arg5; + gTasks[taskId].data[5] = arg7; + gTasks[taskId].data[6] = arg6; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[2] = arg4; + gTasks[taskId].data[3] = newSpriteId; + gTasks[taskId].func = sub_80BBC2C; +} + +static void sub_80BBC2C(u8 taskId) +{ + gTasks[taskId].data[13] += gTasks[taskId].data[1] < 0 ? -gTasks[taskId].data[1] : gTasks[taskId].data[1]; + if (gTasks[taskId].data[1] < 0) + gBattle_BG1_Y -= gTasks[taskId].data[13] >> 8; + else + gBattle_BG1_Y += gTasks[taskId].data[13] >> 8; + gTasks[taskId].data[13] &= 0xFF; + switch (gTasks[taskId].data[15]) + { + case 0: + if (gTasks[taskId].data[11]++ >= gTasks[taskId].data[6]) + { + gTasks[taskId].data[11] = 0; + ++gTasks[taskId].data[12]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); + if (gTasks[taskId].data[12] == gTasks[taskId].data[4]) + ++gTasks[taskId].data[15]; + } + break; + case 1: + if (++gTasks[taskId].data[10] == gTasks[taskId].data[5]) + ++gTasks[taskId].data[15]; + break; + case 2: + if (gTasks[taskId].data[11]++ >= gTasks[taskId].data[6]) + { + gTasks[taskId].data[11] = 0; + --gTasks[taskId].data[12]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); + if (gTasks[taskId].data[12] == 0) + { + sub_8073128(0); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR + | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR + | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + if (!IsContest()) + { + u16 bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT); + ((vBgCnt *)&bg1Cnt)->charBaseBlock = 0; + SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt); + } + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroySprite(&gSprites[gTasks[taskId].data[0]]); + if (gTasks[taskId].data[2]) + DestroySprite(&gSprites[gTasks[taskId].data[3]]); + DestroyAnimVisualTask(taskId); + } + } + break; + } +} + +void AnimTask_GetBattleTerrain(u8 taskId) +{ + gBattleAnimArgs[0] = gBattleTerrain; + DestroyAnimVisualTask(taskId); +} + +void sub_80BBE10(u8 taskId) +{ + gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); + DestroyAnimVisualTask(taskId); +} + +void sub_80BBE3C(u8 taskId) +{ + FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C); + DestroyAnimVisualTask(taskId); +} + +void sub_80BBE6C(u8 taskId) +{ + u32 selectedPalettes; + s32 paletteIndex = 0; + + if (gBattleAnimArgs[0] == 0) + for (selectedPalettes = sub_8075BE8(1, 0, 0, 0, 0, 0, 0); + (selectedPalettes & 1) == 0; + ++paletteIndex) + selectedPalettes >>= 1; + else if (gBattleAnimArgs[0] == 1) + paletteIndex = gBattleAnimAttacker + 16; + else if (gBattleAnimArgs[0] == 2) + paletteIndex = gBattleAnimTarget + 16; + memcpy(&gMonSpritesGfxPtr->field_17C[gBattleAnimArgs[1] * 16], &gPlttBufferUnfaded[paletteIndex * 16], 32); + DestroyAnimVisualTask(taskId); +} + +void sub_80BBF08(u8 taskId) +{ + u32 selectedPalettes; + s32 paletteIndex = 0; + + if (gBattleAnimArgs[0] == 0) + for (selectedPalettes = sub_8075BE8(1, 0, 0, 0, 0, 0, 0); + (selectedPalettes & 1) == 0; + ++paletteIndex) + selectedPalettes >>= 1; + else if (gBattleAnimArgs[0] == 1) + paletteIndex = gBattleAnimAttacker + 16; + else if (gBattleAnimArgs[0] == 2) + paletteIndex = gBattleAnimTarget + 16; + memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gMonSpritesGfxPtr->field_17C[gBattleAnimArgs[1] * 16], 32); + DestroyAnimVisualTask(taskId); +} + +void sub_80BBFA4(u8 taskId) +{ + u32 selectedPalettes; + s32 paletteIndex = 0; + + if (gBattleAnimArgs[0] == 0) + for (selectedPalettes = sub_8075BE8(1, 0, 0, 0, 0, 0, 0); + (selectedPalettes & 1) == 0; + ++paletteIndex) + selectedPalettes >>= 1; + else if (gBattleAnimArgs[0] == 1) + paletteIndex = gBattleAnimAttacker + 16; + else if (gBattleAnimArgs[0] == 2) + paletteIndex = gBattleAnimTarget + 16; + memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gPlttBufferFaded[paletteIndex * 16], 32); + DestroyAnimVisualTask(taskId); +} + +void AnimTask_IsContest(u8 taskId) +{ + if (IsContest()) + gBattleAnimArgs[7] = 1; + else + gBattleAnimArgs[7] = 0; + DestroyAnimVisualTask(taskId); +} + +void sub_80BC060(u8 taskId) +{ + gBattleAnimAttacker = gBattlerTarget; + gBattleAnimTarget = gEffectBattler; + DestroyAnimVisualTask(taskId); +} + +void AnimTask_IsTargetSameSide(u8 taskId) +{ + if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + gBattleAnimArgs[7] = 1; + else + gBattleAnimArgs[7] = 0; + DestroyAnimVisualTask(taskId); +} + +void sub_80BC0DC(u8 taskId) +{ + gBattleAnimTarget = gBattlerTarget; + DestroyAnimVisualTask(taskId); +} + +void sub_80BC0FC(u8 taskId) +{ + gBattleAnimAttacker = gBattlerAttacker; + gBattleAnimTarget = gEffectBattler; + DestroyAnimVisualTask(taskId); +} + +void sub_80BC12C(u8 taskId) +{ + if (IsContest()) + { + DestroyAnimVisualTask(taskId); + } + else + { + gTasks[taskId].data[0] = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible; + gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible = 1; + gTasks[taskId].func = sub_80BC19C; + --gAnimVisualTaskCount; + } +} + +static void sub_80BC19C(u8 taskId) +{ + if (gBattleAnimArgs[7] == 0x1000) + { + gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible = (u8)gTasks[taskId].data[0] & 1; + DestroyTask(taskId); + } +} diff --git a/sym_ewram.txt b/sym_ewram.txt index b405f8362..7e779312b 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -44,10 +44,10 @@ gBattle_BG3_X: @ 2022980 gBattle_BG3_Y: @ 2022982 .space 0x2 -gUnknown_2022984: @ 2022984 +gBattle_WIN0H: @ 2022984 .space 0x2 -gUnknown_2022986: @ 2022986 +gBattle_WIN0V: @ 2022986 .space 0x2 gUnknown_2022988: @ 2022988 @@ -621,7 +621,7 @@ gUnknown_2037EE0: @ 2037EE0 gAnimScriptActive: @ 2037EE1 .space 0x1 -gUnknown_2037EE2: @ 2037EE2 +gAnimVisualTaskCount: @ 2037EE2 .space 0x1 gUnknown_2037EE3: @ 2037EE3 @@ -884,8 +884,7 @@ gUnknown_203999C: @ 203999C gUnknown_20399A4: @ 20399A4 .space 0x10 -gUnknown_20399B4: @ 20399B4 - .space 0x4 + .include "src/battle_anim_utility_funcs.o" gUnknown_20399B8: @ 20399B8 .space 0x4 From eef286808aad14f206d8899e8fe19295fa8e7a9f Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 4 Oct 2019 00:14:23 +0800 Subject: [PATCH 03/25] battle_intro --- asm/battle_anim_mons.s | 2 +- asm/battle_intro.s | 1869 ---------------------------------------- data/data_835B488.s | 6 +- include/battle_anim.h | 35 +- include/battle_main.h | 2 +- ld_script.txt | 5 +- src/battle_intro.c | 495 +++++++++++ sym_ewram.txt | 5 +- 8 files changed, 517 insertions(+), 1902 deletions(-) delete mode 100644 asm/battle_intro.s create mode 100644 src/battle_intro.c diff --git a/asm/battle_anim_mons.s b/asm/battle_anim_mons.s index 7703f69f5..0af94400b 100644 --- a/asm/battle_anim_mons.s +++ b/asm/battle_anim_mons.s @@ -4921,7 +4921,7 @@ _0807689E: movs r0, 0x1 _080768A0: movs r1, 0x4 - bl sub_80BC30C + bl GetAnimBgAttribute lsls r0, 24 lsrs r0, 24 pop {r1} diff --git a/asm/battle_intro.s b/asm/battle_intro.s deleted file mode 100644 index cb3c56e10..000000000 --- a/asm/battle_intro.s +++ /dev/null @@ -1,1869 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start SetAnimBgAttribute -SetAnimBgAttribute: @ 80BC1F8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r2, 24 - lsrs r4, r2, 24 - cmp r6, 0x3 - bls _080BC20C - b _080BC2FE -_080BC20C: - ldr r0, _080BC228 @ =gUnknown_83E7CCA - adds r0, r6, r0 - ldrb r0, [r0] - bl GetGpuReg - ldr r1, _080BC22C @ =gUnknown_20399B8 - strh r0, [r1] - cmp r5, 0x6 - bhi _080BC2F0 - lsls r0, r5, 2 - ldr r1, _080BC230 @ =_080BC234 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BC228: .4byte gUnknown_83E7CCA -_080BC22C: .4byte gUnknown_20399B8 -_080BC230: .4byte _080BC234 - .align 2, 0 -_080BC234: - .4byte _080BC250 - .4byte _080BC264 - .4byte _080BC27C - .4byte _080BC294 - .4byte _080BC2AC - .4byte _080BC2C8 - .4byte _080BC2DC -_080BC250: - ldr r2, _080BC260 @ =gUnknown_20399B8 - lsls r3, r4, 6 - ldrb r1, [r2, 0x1] - movs r0, 0x3F - ands r0, r1 - orrs r0, r3 - strb r0, [r2, 0x1] - b _080BC2F0 - .align 2, 0 -_080BC260: .4byte gUnknown_20399B8 -_080BC264: - ldr r3, _080BC278 @ =gUnknown_20399B8 - movs r0, 0x1 - adds r1, r4, 0 - ands r1, r0 - lsls r1, 5 - ldrb r2, [r3, 0x1] - movs r0, 0x21 - negs r0, r0 - b _080BC2EA - .align 2, 0 -_080BC278: .4byte gUnknown_20399B8 -_080BC27C: - ldr r3, _080BC290 @ =gUnknown_20399B8 - movs r0, 0x1 - adds r1, r4, 0 - ands r1, r0 - lsls r1, 6 - ldrb r2, [r3] - movs r0, 0x41 - negs r0, r0 - b _080BC2BA - .align 2, 0 -_080BC290: .4byte gUnknown_20399B8 -_080BC294: - ldr r3, _080BC2A8 @ =gUnknown_20399B8 - movs r0, 0x3 - adds r1, r4, 0 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r3] - movs r0, 0xD - negs r0, r0 - b _080BC2BA - .align 2, 0 -_080BC2A8: .4byte gUnknown_20399B8 -_080BC2AC: - ldr r3, _080BC2C4 @ =gUnknown_20399B8 - movs r0, 0x3 - adds r1, r4, 0 - ands r1, r0 - ldrb r2, [r3] - movs r0, 0x4 - negs r0, r0 -_080BC2BA: - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _080BC2F0 - .align 2, 0 -_080BC2C4: .4byte gUnknown_20399B8 -_080BC2C8: - ldr r2, _080BC2D8 @ =gUnknown_20399B8 - lsls r3, r4, 7 - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - orrs r0, r3 - strb r0, [r2] - b _080BC2F0 - .align 2, 0 -_080BC2D8: .4byte gUnknown_20399B8 -_080BC2DC: - ldr r3, _080BC304 @ =gUnknown_20399B8 - movs r0, 0x1F - adds r1, r4, 0 - ands r1, r0 - ldrb r2, [r3, 0x1] - movs r0, 0x20 - negs r0, r0 -_080BC2EA: - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x1] -_080BC2F0: - ldr r0, _080BC308 @ =gUnknown_83E7CCA - adds r0, r6, r0 - ldrb r0, [r0] - ldr r1, _080BC304 @ =gUnknown_20399B8 - ldrh r1, [r1] - bl SetGpuReg -_080BC2FE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080BC304: .4byte gUnknown_20399B8 -_080BC308: .4byte gUnknown_83E7CCA - thumb_func_end SetAnimBgAttribute - - thumb_func_start sub_80BC30C -sub_80BC30C: @ 80BC30C - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - cmp r2, 0x3 - bhi _080BC394 - ldr r0, _080BC338 @ =gUnknown_83E7CCE - adds r0, r2, r0 - ldrb r0, [r0] - bl GetGpuReg - mov r1, sp - strh r0, [r1] - cmp r4, 0x6 - bhi _080BC394 - lsls r0, r4, 2 - ldr r1, _080BC33C @ =_080BC340 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BC338: .4byte gUnknown_83E7CCE -_080BC33C: .4byte _080BC340 - .align 2, 0 -_080BC340: - .4byte _080BC35C - .4byte _080BC364 - .4byte _080BC36C - .4byte _080BC374 - .4byte _080BC37C - .4byte _080BC384 - .4byte _080BC38C -_080BC35C: - ldr r0, [sp] - lsls r0, 16 - lsrs r0, 30 - b _080BC396 -_080BC364: - ldr r0, [sp] - lsls r0, 18 - lsrs r0, 31 - b _080BC396 -_080BC36C: - ldr r0, [sp] - lsls r0, 25 - lsrs r0, 31 - b _080BC396 -_080BC374: - ldr r0, [sp] - lsls r0, 28 - lsrs r0, 30 - b _080BC396 -_080BC37C: - ldr r0, [sp] - lsls r0, 30 - lsrs r0, 30 - b _080BC396 -_080BC384: - ldr r0, [sp] - lsls r0, 24 - lsrs r0, 31 - b _080BC396 -_080BC38C: - ldr r0, [sp] - lsls r0, 19 - lsrs r0, 27 - b _080BC396 -_080BC394: - movs r0, 0 -_080BC396: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80BC30C - - thumb_func_start HandleIntroSlide -HandleIntroSlide: @ 80BC3A0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080BC3B8 @ =gBattleTypeFlags - ldr r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080BC3C0 - ldr r0, _080BC3BC @ =sub_80BCC4C - b _080BC3E8 - .align 2, 0 -_080BC3B8: .4byte gBattleTypeFlags -_080BC3BC: .4byte sub_80BCC4C -_080BC3C0: - movs r0, 0x80 - lsls r0, 5 - ands r1, r0 - cmp r1, 0 - beq _080BC3E0 - ldr r0, _080BC3D8 @ =gGameVersion - ldrb r0, [r0] - cmp r0, 0x2 - beq _080BC3E0 - movs r4, 0x3 - ldr r0, _080BC3DC @ =task00_battle_intro_80BC6C8 - b _080BC3E8 - .align 2, 0 -_080BC3D8: .4byte gGameVersion -_080BC3DC: .4byte task00_battle_intro_80BC6C8 -_080BC3E0: - ldr r1, _080BC414 @ =gUnknown_83E7CD4 - lsls r0, r4, 2 - adds r0, r1 - ldr r0, [r0] -_080BC3E8: - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080BC418 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - movs r0, 0 - strh r0, [r1, 0x8] - strh r4, [r1, 0xA] - strh r0, [r1, 0xC] - strh r0, [r1, 0xE] - strh r0, [r1, 0x10] - strh r0, [r1, 0x12] - strh r0, [r1, 0x14] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BC414: .4byte gUnknown_83E7CD4 -_080BC418: .4byte gTasks - thumb_func_end HandleIntroSlide - - thumb_func_start sub_80BC41C -sub_80BC41C: @ 80BC41C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - ldr r0, _080BC468 @ =gBattle_BG1_X - movs r1, 0 - strh r1, [r0] - ldr r0, _080BC46C @ =gBattle_BG1_Y - strh r1, [r0] - ldr r0, _080BC470 @ =gBattle_BG2_X - strh r1, [r0] - ldr r0, _080BC474 @ =gBattle_BG2_Y - strh r1, [r0] - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - ldr r4, _080BC478 @ =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BC468: .4byte gBattle_BG1_X -_080BC46C: .4byte gBattle_BG1_Y -_080BC470: .4byte gBattle_BG2_X -_080BC474: .4byte gBattle_BG2_Y -_080BC478: .4byte 0x00003f3f - thumb_func_end sub_80BC41C - - thumb_func_start task_battle_intro_80BC47C -task_battle_intro_80BC47C: @ 80BC47C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080BC4B4 @ =gBattle_BG1_X - ldrh r0, [r1] - adds r0, 0x6 - strh r0, [r1] - ldr r1, _080BC4B8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - mov r8, r1 - cmp r0, 0x4 - bls _080BC4A8 - b _080BC6BA -_080BC4A8: - lsls r0, 2 - ldr r1, _080BC4BC @ =_080BC4C0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BC4B4: .4byte gBattle_BG1_X -_080BC4B8: .4byte gTasks -_080BC4BC: .4byte _080BC4C0 - .align 2, 0 -_080BC4C0: - .4byte _080BC4D4 - .4byte _080BC504 - .4byte _080BC52C - .4byte _080BC574 - .4byte _080BC6B4 -_080BC4D4: - ldr r0, _080BC4EC @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080BC4F0 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - add r0, r8 - movs r1, 0x10 - b _080BC4FA - .align 2, 0 -_080BC4EC: .4byte gBattleTypeFlags -_080BC4F0: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - add r0, r8 - movs r1, 0x1 -_080BC4FA: - strh r1, [r0, 0xC] - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - b _080BC6BA -_080BC504: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - mov r3, r8 - adds r1, r0, r3 - ldrh r0, [r1, 0xC] - subs r0, 0x1 - strh r0, [r1, 0xC] - lsls r0, 16 - cmp r0, 0 - beq _080BC51C - b _080BC6BA -_080BC51C: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - b _080BC6BA -_080BC52C: - ldr r1, _080BC568 @ =gBattle_WIN0V - ldrh r0, [r1] - subs r0, 0xFF - strh r0, [r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - movs r1, 0xC0 - lsls r1, 6 - cmp r0, r1 - beq _080BC544 - b _080BC6BA -_080BC544: - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - add r1, r8 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0xF0 - strh r0, [r1, 0xC] - movs r0, 0x20 - strh r0, [r1, 0xE] - ldr r2, _080BC56C @ =gIntroSlideFlags - ldrh r1, [r2] - ldr r0, _080BC570 @ =0x0000fffe - ands r0, r1 - strh r0, [r2] - b _080BC6BA - .align 2, 0 -_080BC568: .4byte gBattle_WIN0V -_080BC56C: .4byte gIntroSlideFlags -_080BC570: .4byte 0x0000fffe -_080BC574: - lsls r0, r4, 2 - adds r1, r0, r4 - lsls r1, 3 - mov r5, r8 - adds r2, r1, r5 - ldrh r3, [r2, 0xE] - movs r5, 0xE - ldrsh r1, [r2, r5] - mov r12, r0 - cmp r1, 0 - beq _080BC590 - subs r0, r3, 0x1 - strh r0, [r2, 0xE] - b _080BC5BE -_080BC590: - movs r1, 0xA - ldrsh r0, [r2, r1] - cmp r0, 0x1 - bne _080BC5B0 - ldr r2, _080BC5A8 @ =gBattle_BG1_Y - ldrh r1, [r2] - ldr r0, _080BC5AC @ =0x0000ffb0 - cmp r1, r0 - beq _080BC5BE - subs r0, r1, 0x2 - b _080BC5BC - .align 2, 0 -_080BC5A8: .4byte gBattle_BG1_Y -_080BC5AC: .4byte 0x0000ffb0 -_080BC5B0: - ldr r2, _080BC690 @ =gBattle_BG1_Y - ldrh r1, [r2] - ldr r0, _080BC694 @ =0x0000ffc8 - cmp r1, r0 - beq _080BC5BE - subs r0, r1, 0x1 -_080BC5BC: - strh r0, [r2] -_080BC5BE: - ldr r2, _080BC698 @ =gBattle_WIN0V - ldrh r1, [r2] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _080BC5D2 - ldr r3, _080BC69C @ =0xfffffc04 - adds r0, r1, r3 - strh r0, [r2] -_080BC5D2: - mov r5, r12 - adds r0, r5, r4 - lsls r0, 3 - mov r2, r8 - adds r1, r0, r2 - ldrh r2, [r1, 0xC] - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080BC5EA - subs r0, r2, 0x2 - strh r0, [r1, 0xC] -_080BC5EA: - movs r3, 0 - ldr r5, _080BC6A0 @ =gScanlineEffect - mov r9, r5 - ldr r7, _080BC6A4 @ =gScanlineEffectRegBuffers - mov r6, r9 - adds r5, r1, 0 -_080BC5F6: - lsls r2, r3, 1 - ldrb r1, [r6, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r7 - ldrh r0, [r5, 0xC] - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x4F - ble _080BC5F6 - cmp r3, 0x9F - bgt _080BC63A - ldr r7, _080BC6A4 @ =gScanlineEffectRegBuffers - ldr r6, _080BC6A0 @ =gScanlineEffect - ldr r1, _080BC6A8 @ =gTasks - mov r2, r12 - adds r0, r2, r4 - lsls r0, 3 - adds r5, r0, r1 -_080BC620: - lsls r2, r3, 1 - ldrb r1, [r6, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r7 - ldrh r0, [r5, 0xC] - negs r0, r0 - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x9F - ble _080BC620 -_080BC63A: - mov r3, r12 - adds r0, r3, r4 - lsls r0, 3 - mov r5, r8 - adds r1, r0, r5 - movs r0, 0xC - ldrsh r2, [r1, r0] - cmp r2, 0 - bne _080BC6BA - movs r0, 0x3 - mov r3, r9 - strb r0, [r3, 0x15] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - str r2, [sp] - ldr r1, _080BC6AC @ =0x0600e000 - ldr r2, _080BC6B0 @ =0x05000200 - mov r0, sp - bl CpuSet - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r1, 0x9C - lsls r1, 8 - movs r0, 0xA - bl SetGpuReg - movs r1, 0xBC - lsls r1, 7 - movs r0, 0xC - bl SetGpuReg - b _080BC6BA - .align 2, 0 -_080BC690: .4byte gBattle_BG1_Y -_080BC694: .4byte 0x0000ffc8 -_080BC698: .4byte gBattle_WIN0V -_080BC69C: .4byte 0xfffffc04 -_080BC6A0: .4byte gScanlineEffect -_080BC6A4: .4byte gScanlineEffectRegBuffers -_080BC6A8: .4byte gTasks -_080BC6AC: .4byte 0x0600e000 -_080BC6B0: .4byte 0x05000200 -_080BC6B4: - adds r0, r4, 0 - bl sub_80BC41C -_080BC6BA: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end task_battle_intro_80BC47C - - thumb_func_start task00_battle_intro_80BC6C8 -task00_battle_intro_80BC6C8: @ 80BC6C8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080BC6F4 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r2, 0xA - ldrsh r0, [r0, r2] - adds r2, r1, 0 - cmp r0, 0x3 - beq _080BC708 - cmp r0, 0x3 - bgt _080BC6F8 - cmp r0, 0x2 - beq _080BC6FC - b _080BC710 - .align 2, 0 -_080BC6F4: .4byte gTasks -_080BC6F8: - cmp r0, 0x4 - bne _080BC710 -_080BC6FC: - ldr r1, _080BC704 @ =gBattle_BG1_X - ldrh r0, [r1] - adds r0, 0x8 - b _080BC70E - .align 2, 0 -_080BC704: .4byte gBattle_BG1_X -_080BC708: - ldr r1, _080BC74C @ =gBattle_BG1_X - ldrh r0, [r1] - adds r0, 0x6 -_080BC70E: - strh r0, [r1] -_080BC710: - lsls r0, r5, 2 - adds r1, r0, r5 - lsls r1, 3 - adds r4, r1, r2 - movs r3, 0xA - ldrsh r1, [r4, r3] - adds r6, r0, 0 - cmp r1, 0x4 - bne _080BC774 - ldr r7, _080BC750 @ =gBattle_BG1_Y - ldrh r0, [r4, 0x14] - bl Cos2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _080BC736 - ldr r1, _080BC754 @ =0x000001ff - adds r0, r1 -_080BC736: - asrs r0, 9 - subs r0, 0x8 - strh r0, [r7] - ldrh r1, [r4, 0x14] - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0xB3 - bgt _080BC758 - adds r0, r1, 0x4 - b _080BC75A - .align 2, 0 -_080BC74C: .4byte gBattle_BG1_X -_080BC750: .4byte gBattle_BG1_Y -_080BC754: .4byte 0x000001ff -_080BC758: - adds r0, r1, 0x6 -_080BC75A: - strh r0, [r4, 0x14] - ldr r2, _080BC790 @ =gTasks - adds r0, r6, r5 - lsls r0, 3 - adds r3, r0, r2 - movs r0, 0x14 - ldrsh r1, [r3, r0] - movs r0, 0xB4 - lsls r0, 1 - cmp r1, r0 - bne _080BC774 - movs r0, 0 - strh r0, [r3, 0x14] -_080BC774: - adds r0, r6, r5 - lsls r0, 3 - adds r0, r2 - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, 0x4 - bls _080BC784 - b _080BC9AA -_080BC784: - lsls r0, 2 - ldr r1, _080BC794 @ =_080BC798 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BC790: .4byte gTasks -_080BC794: .4byte _080BC798 - .align 2, 0 -_080BC798: - .4byte _080BC7AC - .4byte _080BC7DC - .4byte _080BC808 - .4byte _080BC858 - .4byte _080BC9A4 -_080BC7AC: - ldr r1, _080BC7C8 @ =gTasks - adds r0, r6, r5 - lsls r0, 3 - adds r2, r0, r1 - movs r3, 0x10 - strh r3, [r2, 0x10] - ldr r0, _080BC7CC @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080BC7D0 - strh r3, [r2, 0xC] - b _080BC7D4 - .align 2, 0 -_080BC7C8: .4byte gTasks -_080BC7CC: .4byte gBattleTypeFlags -_080BC7D0: - movs r0, 0x1 - strh r0, [r2, 0xC] -_080BC7D4: - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - b _080BC9AA -_080BC7DC: - ldr r0, _080BC804 @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0xC] - subs r0, 0x1 - strh r0, [r1, 0xC] - lsls r0, 16 - cmp r0, 0 - beq _080BC7F2 - b _080BC9AA -_080BC7F2: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - b _080BC9AA - .align 2, 0 -_080BC804: .4byte gTasks -_080BC808: - ldr r1, _080BC848 @ =gBattle_WIN0V - ldrh r0, [r1] - subs r0, 0xFF - strh r0, [r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - movs r1, 0xC0 - lsls r1, 6 - cmp r0, r1 - beq _080BC820 - b _080BC9AA -_080BC820: - ldr r0, _080BC84C @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0xF0 - strh r0, [r1, 0xC] - movs r0, 0x20 - strh r0, [r1, 0xE] - movs r0, 0x1 - strh r0, [r1, 0x12] - ldr r2, _080BC850 @ =gIntroSlideFlags - ldrh r1, [r2] - ldr r0, _080BC854 @ =0x0000fffe - ands r0, r1 - strh r0, [r2] - b _080BC9AA - .align 2, 0 -_080BC848: .4byte gBattle_WIN0V -_080BC84C: .4byte gTasks -_080BC850: .4byte gIntroSlideFlags -_080BC854: .4byte 0x0000fffe -_080BC858: - ldr r0, _080BC890 @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - ldrh r2, [r1, 0xE] - movs r3, 0xE - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080BC898 - subs r0, r2, 0x1 - strh r0, [r1, 0xE] - lsls r0, 16 - cmp r0, 0 - bne _080BC8B8 - ldr r1, _080BC894 @ =0x00001842 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0xF - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - b _080BC8B8 - .align 2, 0 -_080BC890: .4byte gTasks -_080BC894: .4byte 0x00001842 -_080BC898: - ldrh r2, [r1, 0x10] - movs r0, 0x1F - ands r0, r2 - cmp r0, 0 - beq _080BC8B8 - ldrh r0, [r1, 0x12] - subs r0, 0x1 - strh r0, [r1, 0x12] - lsls r0, 16 - cmp r0, 0 - bne _080BC8B8 - adds r0, r2, 0 - adds r0, 0xFF - strh r0, [r1, 0x10] - movs r0, 0x4 - strh r0, [r1, 0x12] -_080BC8B8: - ldr r2, _080BC988 @ =gBattle_WIN0V - ldrh r1, [r2] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _080BC8CC - ldr r3, _080BC98C @ =0xfffffc04 - adds r0, r1, r3 - strh r0, [r2] -_080BC8CC: - ldr r0, _080BC990 @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - ldrh r2, [r1, 0xC] - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080BC8E2 - subs r0, r2, 0x2 - strh r0, [r1, 0xC] -_080BC8E2: - movs r3, 0 - ldr r0, _080BC994 @ =gScanlineEffect - mov r8, r0 - ldr r2, _080BC998 @ =gScanlineEffectRegBuffers - mov r12, r2 - mov r7, r8 - adds r4, r1, 0 -_080BC8F0: - lsls r2, r3, 1 - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - add r2, r12 - ldrh r0, [r4, 0xC] - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x4F - ble _080BC8F0 - cmp r3, 0x9F - bgt _080BC934 - ldr r0, _080BC998 @ =gScanlineEffectRegBuffers - mov r12, r0 - ldr r7, _080BC994 @ =gScanlineEffect - ldr r1, _080BC990 @ =gTasks - adds r0, r6, r5 - lsls r0, 3 - adds r4, r0, r1 -_080BC91A: - lsls r2, r3, 1 - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - add r2, r12 - ldrh r0, [r4, 0xC] - negs r0, r0 - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x9F - ble _080BC91A -_080BC934: - ldr r1, _080BC990 @ =gTasks - adds r0, r6, r5 - lsls r0, 3 - adds r1, r0, r1 - movs r3, 0xC - ldrsh r2, [r1, r3] - cmp r2, 0 - bne _080BC9AA - movs r0, 0x3 - mov r3, r8 - strb r0, [r3, 0x15] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - str r2, [sp] - ldr r1, _080BC99C @ =0x0600e000 - ldr r2, _080BC9A0 @ =0x05000200 - mov r0, sp - bl CpuSet - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r1, 0x9C - lsls r1, 8 - movs r0, 0xA - bl SetGpuReg - movs r1, 0xBC - lsls r1, 7 - movs r0, 0xC - bl SetGpuReg - b _080BC9AA - .align 2, 0 -_080BC988: .4byte gBattle_WIN0V -_080BC98C: .4byte 0xfffffc04 -_080BC990: .4byte gTasks -_080BC994: .4byte gScanlineEffect -_080BC998: .4byte gScanlineEffectRegBuffers -_080BC99C: .4byte 0x0600e000 -_080BC9A0: .4byte 0x05000200 -_080BC9A4: - adds r0, r5, 0 - bl sub_80BC41C -_080BC9AA: - ldr r0, _080BC9D0 @ =gTasks - adds r1, r6, r5 - lsls r1, 3 - adds r1, r0 - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0x4 - beq _080BC9C2 - ldrh r1, [r1, 0x10] - movs r0, 0x52 - bl SetGpuReg -_080BC9C2: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BC9D0: .4byte gTasks - thumb_func_end task00_battle_intro_80BC6C8 - - thumb_func_start task_battle_intro_anim -task_battle_intro_anim: @ 80BC9D4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080BCA08 @ =gBattle_BG1_X - ldrh r0, [r1] - adds r0, 0x8 - strh r0, [r1] - ldr r1, _080BCA0C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - adds r4, r1, 0 - cmp r0, 0x4 - bls _080BC9FE - b _080BCC22 -_080BC9FE: - lsls r0, 2 - ldr r1, _080BCA10 @ =_080BCA14 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BCA08: .4byte gBattle_BG1_X -_080BCA0C: .4byte gTasks -_080BCA10: .4byte _080BCA14 - .align 2, 0 -_080BCA14: - .4byte _080BCA28 - .4byte _080BCA7C - .4byte _080BCAA8 - .4byte _080BCAF8 - .4byte _080BCC1C -_080BCA28: - ldr r1, _080BCA60 @ =0x00001842 - movs r0, 0x50 - bl SetGpuReg - ldr r4, _080BCA64 @ =0x00000808 - movs r0, 0x52 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - ldr r1, _080BCA68 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r2, r0, r1 - strh r4, [r2, 0x10] - ldr r0, _080BCA6C @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080BCA70 - movs r0, 0x10 - b _080BCA72 - .align 2, 0 -_080BCA60: .4byte 0x00001842 -_080BCA64: .4byte 0x00000808 -_080BCA68: .4byte gTasks -_080BCA6C: .4byte gBattleTypeFlags -_080BCA70: - movs r0, 0x1 -_080BCA72: - strh r0, [r2, 0xC] - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - b _080BCC22 -_080BCA7C: - ldr r0, _080BCAA4 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0xC] - subs r0, 0x1 - strh r0, [r1, 0xC] - lsls r0, 16 - cmp r0, 0 - beq _080BCA94 - b _080BCC22 -_080BCA94: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - b _080BCC22 - .align 2, 0 -_080BCAA4: .4byte gTasks -_080BCAA8: - ldr r1, _080BCAE8 @ =gBattle_WIN0V - ldrh r0, [r1] - subs r0, 0xFF - strh r0, [r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - movs r1, 0xC0 - lsls r1, 6 - cmp r0, r1 - beq _080BCAC0 - b _080BCC22 -_080BCAC0: - ldr r0, _080BCAEC @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0xF0 - strh r0, [r1, 0xC] - movs r0, 0x20 - strh r0, [r1, 0xE] - movs r0, 0x1 - strh r0, [r1, 0x12] - ldr r2, _080BCAF0 @ =gIntroSlideFlags - ldrh r1, [r2] - ldr r0, _080BCAF4 @ =0x0000fffe - ands r0, r1 - strh r0, [r2] - b _080BCC22 - .align 2, 0 -_080BCAE8: .4byte gBattle_WIN0V -_080BCAEC: .4byte gTasks -_080BCAF0: .4byte gIntroSlideFlags -_080BCAF4: .4byte 0x0000fffe -_080BCAF8: - lsls r0, r5, 2 - adds r1, r0, r5 - lsls r1, 3 - adds r2, r1, r4 - ldrh r3, [r2, 0xE] - movs r6, 0xE - ldrsh r1, [r2, r6] - mov r12, r0 - cmp r1, 0 - beq _080BCB12 - subs r0, r3, 0x1 - strh r0, [r2, 0xE] - b _080BCB32 -_080BCB12: - ldrh r1, [r2, 0x10] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - beq _080BCB32 - ldrh r0, [r2, 0x12] - subs r0, 0x1 - strh r0, [r2, 0x12] - lsls r0, 16 - cmp r0, 0 - bne _080BCB32 - adds r0, r1, 0 - adds r0, 0xFF - strh r0, [r2, 0x10] - movs r0, 0x6 - strh r0, [r2, 0x12] -_080BCB32: - ldr r2, _080BCC00 @ =gBattle_WIN0V - ldrh r1, [r2] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _080BCB46 - ldr r3, _080BCC04 @ =0xfffffc04 - adds r0, r1, r3 - strh r0, [r2] -_080BCB46: - mov r6, r12 - adds r0, r6, r5 - lsls r0, 3 - adds r1, r0, r4 - ldrh r2, [r1, 0xC] - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080BCB5C - subs r0, r2, 0x2 - strh r0, [r1, 0xC] -_080BCB5C: - movs r3, 0 - ldr r6, _080BCC08 @ =gScanlineEffect - mov r8, r6 - ldr r7, _080BCC0C @ =gScanlineEffectRegBuffers - adds r4, r1, 0 -_080BCB66: - lsls r2, r3, 1 - ldrb r1, [r6, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r7 - ldrh r0, [r4, 0xC] - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x4F - ble _080BCB66 - cmp r3, 0x9F - bgt _080BCBAA - ldr r7, _080BCC0C @ =gScanlineEffectRegBuffers - ldr r6, _080BCC08 @ =gScanlineEffect - ldr r1, _080BCC10 @ =gTasks - mov r2, r12 - adds r0, r2, r5 - lsls r0, 3 - adds r4, r0, r1 -_080BCB90: - lsls r2, r3, 1 - ldrb r1, [r6, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r7 - ldrh r0, [r4, 0xC] - negs r0, r0 - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x9F - ble _080BCB90 -_080BCBAA: - ldr r1, _080BCC10 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r1, r0, r1 - movs r3, 0xC - ldrsh r2, [r1, r3] - cmp r2, 0 - bne _080BCC22 - movs r0, 0x3 - mov r6, r8 - strb r0, [r6, 0x15] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - str r2, [sp] - ldr r1, _080BCC14 @ =0x0600e000 - ldr r2, _080BCC18 @ =0x05000200 - mov r0, sp - bl CpuSet - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r1, 0x9C - lsls r1, 8 - movs r0, 0xA - bl SetGpuReg - movs r1, 0xBC - lsls r1, 7 - movs r0, 0xC - bl SetGpuReg - b _080BCC22 - .align 2, 0 -_080BCC00: .4byte gBattle_WIN0V -_080BCC04: .4byte 0xfffffc04 -_080BCC08: .4byte gScanlineEffect -_080BCC0C: .4byte gScanlineEffectRegBuffers -_080BCC10: .4byte gTasks -_080BCC14: .4byte 0x0600e000 -_080BCC18: .4byte 0x05000200 -_080BCC1C: - adds r0, r5, 0 - bl sub_80BC41C -_080BCC22: - ldr r0, _080BCC48 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0x4 - beq _080BCC3C - ldrh r1, [r1, 0x10] - movs r0, 0x52 - bl SetGpuReg -_080BCC3C: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BCC48: .4byte gTasks - thumb_func_end task_battle_intro_anim - - thumb_func_start sub_80BCC4C -sub_80BCC4C: @ 80BCC4C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _080BCC98 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r7, r0, r1 - movs r1, 0x8 - ldrsh r0, [r7, r1] - cmp r0, 0x1 - ble _080BCCC2 - movs r2, 0x10 - ldrsh r0, [r7, r2] - cmp r0, 0 - bne _080BCCC2 - ldr r2, _080BCC9C @ =gBattle_BG1_X - ldrh r1, [r2] - movs r0, 0x80 - lsls r0, 8 - ands r0, r1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0 - bne _080BCC8A - cmp r1, 0x4F - bhi _080BCCA4 -_080BCC8A: - adds r0, r1, 0x3 - strh r0, [r2] - ldr r1, _080BCCA0 @ =gBattle_BG2_X - ldrh r0, [r1] - subs r0, 0x3 - strh r0, [r1] - b _080BCCC2 - .align 2, 0 -_080BCC98: .4byte gTasks -_080BCC9C: .4byte gBattle_BG1_X -_080BCCA0: .4byte gBattle_BG2_X -_080BCCA4: - str r5, [sp] - ldr r1, _080BCCE4 @ =0x0600e000 - ldr r4, _080BCCE8 @ =0x05000200 - mov r0, sp - adds r2, r4, 0 - bl CpuSet - str r5, [sp, 0x4] - add r0, sp, 0x4 - ldr r1, _080BCCEC @ =0x0600f000 - adds r2, r4, 0 - bl CpuSet - movs r0, 0x1 - strh r0, [r7, 0x10] -_080BCCC2: - ldr r0, _080BCCF0 @ =gTasks - lsls r2, r6, 2 - adds r1, r2, r6 - lsls r1, 3 - adds r1, r0 - movs r3, 0x8 - ldrsh r1, [r1, r3] - mov r9, r0 - adds r5, r2, 0 - cmp r1, 0x4 - bls _080BCCDA - b _080BCEE6 -_080BCCDA: - lsls r0, r1, 2 - ldr r1, _080BCCF4 @ =_080BCCF8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080BCCE4: .4byte 0x0600e000 -_080BCCE8: .4byte 0x05000200 -_080BCCEC: .4byte 0x0600f000 -_080BCCF0: .4byte gTasks -_080BCCF4: .4byte _080BCCF8 - .align 2, 0 -_080BCCF8: - .4byte _080BCD0C - .4byte _080BCD1E - .4byte _080BCDC4 - .4byte _080BCE08 - .4byte _080BCEE0 -_080BCD0C: - adds r0, r5, r6 - lsls r0, 3 - add r0, r9 - movs r1, 0x20 - strh r1, [r0, 0xC] - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - b _080BCEE6 -_080BCD1E: - adds r0, r5, r6 - lsls r0, 3 - mov r2, r9 - adds r1, r0, r2 - ldrh r0, [r1, 0xC] - subs r0, 0x1 - strh r0, [r1, 0xC] - lsls r0, 16 - cmp r0, 0 - beq _080BCD34 - b _080BCEE6 -_080BCD34: - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - ldr r4, _080BCDB4 @ =gSprites - ldr r5, _080BCDB8 @ =gBattleStruct - ldr r0, [r5] - adds r0, 0x7D - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r3, [r1, 0x1] - movs r2, 0xD - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - movs r3, 0x8 - mov r9, r3 - mov r3, r9 - orrs r0, r3 - strb r0, [r1, 0x1] - ldr r3, [r5] - adds r0, r3, 0 - adds r0, 0x7D - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - movs r1, 0x1C - adds r1, r4 - mov r8, r1 - add r0, r8 - ldr r6, _080BCDBC @ =sub_801182C - str r6, [r0] - adds r3, 0x7E - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0, 0x1] - ands r2, r1 - mov r3, r9 - orrs r2, r3 - strb r2, [r0, 0x1] - ldr r0, [r5] - adds r0, 0x7E - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - str r6, [r0] - movs r0, 0x48 - movs r1, 0x3F - bl SetGpuReg - ldr r1, _080BCDC0 @ =0x00003f06 - movs r0, 0x4A - bl SetGpuReg - b _080BCEE6 - .align 2, 0 -_080BCDB4: .4byte gSprites -_080BCDB8: .4byte gBattleStruct -_080BCDBC: .4byte sub_801182C -_080BCDC0: .4byte 0x00003f06 -_080BCDC4: - ldr r1, _080BCDFC @ =gBattle_WIN0V - ldrh r0, [r1] - subs r0, 0xFF - strh r0, [r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - movs r1, 0xC0 - lsls r1, 6 - cmp r0, r1 - beq _080BCDDC - b _080BCEE6 -_080BCDDC: - adds r1, r5, r6 - lsls r1, 3 - add r1, r9 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0xF0 - strh r0, [r1, 0xC] - movs r0, 0x20 - strh r0, [r1, 0xE] - ldr r2, _080BCE00 @ =gIntroSlideFlags - ldrh r1, [r2] - ldr r0, _080BCE04 @ =0x0000fffe - ands r0, r1 - strh r0, [r2] - b _080BCEE6 - .align 2, 0 -_080BCDFC: .4byte gBattle_WIN0V -_080BCE00: .4byte gIntroSlideFlags -_080BCE04: .4byte 0x0000fffe -_080BCE08: - ldr r2, _080BCECC @ =gBattle_WIN0V - ldrh r1, [r2] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - cmp r0, 0 - beq _080BCE1C - ldr r3, _080BCED0 @ =0xfffffc04 - adds r0, r1, r3 - strh r0, [r2] -_080BCE1C: - adds r0, r5, r6 - lsls r0, 3 - mov r2, r9 - adds r1, r0, r2 - ldrh r2, [r1, 0xC] - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080BCE32 - subs r0, r2, 0x2 - strh r0, [r1, 0xC] -_080BCE32: - movs r3, 0 - ldr r0, _080BCED4 @ =gScanlineEffect - mov r12, r0 - ldr r2, _080BCED8 @ =gScanlineEffectRegBuffers - mov r8, r2 - mov r7, r12 - adds r4, r1, 0 -_080BCE40: - lsls r2, r3, 1 - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - add r2, r8 - ldrh r0, [r4, 0xC] - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x4F - ble _080BCE40 - cmp r3, 0x9F - bgt _080BCE84 - ldr r0, _080BCED8 @ =gScanlineEffectRegBuffers - mov r8, r0 - ldr r7, _080BCED4 @ =gScanlineEffect - ldr r1, _080BCEDC @ =gTasks - adds r0, r5, r6 - lsls r0, 3 - adds r4, r0, r1 -_080BCE6A: - lsls r2, r3, 1 - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - add r2, r8 - ldrh r0, [r4, 0xC] - negs r0, r0 - strh r0, [r2] - adds r3, 0x1 - cmp r3, 0x9F - ble _080BCE6A -_080BCE84: - adds r0, r5, r6 - lsls r0, 3 - mov r2, r9 - adds r1, r0, r2 - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0 - bne _080BCEE6 - movs r0, 0x3 - mov r2, r12 - strb r0, [r2, 0x15] - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r0, 0x2 - movs r1, 0x1 - movs r2, 0 - bl SetBgAttribute - movs r1, 0x9C - lsls r1, 8 - movs r0, 0xA - bl SetGpuReg - movs r1, 0xBC - lsls r1, 7 - movs r0, 0xC - bl SetGpuReg - b _080BCEE6 - .align 2, 0 -_080BCECC: .4byte gBattle_WIN0V -_080BCED0: .4byte 0xfffffc04 -_080BCED4: .4byte gScanlineEffect -_080BCED8: .4byte gScanlineEffectRegBuffers -_080BCEDC: .4byte gTasks -_080BCEE0: - adds r0, r6, 0 - bl sub_80BC41C -_080BCEE6: - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80BCC4C - - thumb_func_start sub_80BCEF4 -sub_80BCEF4: @ 80BCEF4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - str r0, [sp] - adds r6, r2, 0 - adds r4, r3, 0 - ldr r0, [sp, 0x24] - ldr r7, [sp, 0x28] - ldr r2, [sp, 0x2C] - mov r9, r2 - ldr r5, [sp, 0x30] - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r6, 24 - lsrs r6, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - lsls r5, 16 - lsrs r5, 16 - adds r0, r4, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080BCFC4 @ =gMonSpritesGfxPtr - ldr r2, [r1] - lsls r4, 2 - adds r2, 0x4 - adds r2, r4 - ldr r1, _080BCFC8 @ =gBattleMonForms - adds r0, r1 - ldrb r1, [r0] - lsls r1, 11 - ldr r0, [r2] - adds r0, r1 - movs r2, 0x80 - lsls r2, 3 - adds r1, r7, 0 - bl CpuSet - ldr r1, [sp] - lsls r0, r1, 24 - lsrs r0, 24 - movs r2, 0x80 - lsls r2, 5 - adds r1, r7, 0 - adds r3, r5, 0 - bl LoadBgTiles - adds r0, r6, 0 - adds r0, 0x8 - cmp r6, r0 - bge _080BCFA0 - mov r12, r0 - mov r2, r8 - lsls r7, r2, 1 -_080BCF72: - mov r1, r8 - adds r2, r1, 0 - adds r2, 0x8 - adds r4, r6, 0x1 - cmp r1, r2 - bge _080BCF9A - mov r0, r10 - lsls r3, r0, 12 - lsls r0, r6, 6 - add r0, r9 - adds r6, r7, r0 - subs r1, r2, r1 -_080BCF8A: - adds r0, r5, 0 - orrs r0, r3 - strh r0, [r6] - adds r5, 0x1 - adds r6, 0x2 - subs r1, 0x1 - cmp r1, 0 - bne _080BCF8A -_080BCF9A: - adds r6, r4, 0 - cmp r6, r12 - blt _080BCF72 -_080BCFA0: - ldr r1, [sp] - lsls r0, r1, 24 - lsrs r0, 24 - movs r2, 0x80 - lsls r2, 4 - mov r1, r9 - movs r3, 0 - bl LoadBgTilemap - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BCFC4: .4byte gMonSpritesGfxPtr -_080BCFC8: .4byte gBattleMonForms - thumb_func_end sub_80BCEF4 - - thumb_func_start sub_80BCFCC -sub_80BCFCC: @ 80BCFCC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r4, [sp, 0x24] - ldr r5, [sp, 0x28] - mov r8, r5 - ldr r5, [sp, 0x2C] - ldr r6, [sp, 0x30] - mov r9, r6 - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - lsls r1, 24 - lsls r2, 24 - lsls r3, 24 - lsls r4, 24 - lsrs r4, 24 - mov r10, r4 - mov r7, r8 - lsls r7, 16 - lsrs r6, r7, 16 - lsls r5, 24 - lsrs r5, 24 - mov r0, r9 - lsls r0, 24 - mov r9, r0 - ldr r4, _080BD090 @ =0x040000d4 - ldr r0, _080BD094 @ =gMonSpritesGfxPtr - ldr r0, [r0] - lsrs r2, 22 - adds r0, 0x4 - adds r0, r2 - lsrs r3, 13 - ldr r0, [r0] - adds r0, r3 - str r0, [r4] - movs r0, 0xC0 - lsls r0, 19 - adds r6, r0 - str r6, [r4, 0x4] - ldr r0, _080BD098 @ =0x80000400 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - adds r2, r7, 0 - lsrs r2, 21 - mov r6, r9 - lsrs r6, 15 - subs r4, r2, r6 - lsrs r0, r1, 24 - adds r1, r0, 0 - adds r1, 0x8 - cmp r0, r1 - bge _080BD080 - mov r9, r1 - mov r7, r12 - lsls r7, 1 - mov r8, r7 - lsls r5, 11 - str r5, [sp] -_080BD048: - mov r2, r12 - adds r3, r2, 0 - adds r3, 0x8 - adds r5, r0, 0x1 - cmp r2, r3 - bge _080BD07A - mov r1, r10 - lsls r6, r1, 12 - lsls r0, 6 - movs r7, 0xC0 - lsls r7, 19 - adds r0, r7 - ldr r1, [sp] - adds r0, r1, r0 - mov r7, r8 - adds r1, r7, r0 - subs r2, r3, r2 -_080BD06A: - adds r0, r4, 0 - orrs r0, r6 - strh r0, [r1] - adds r4, 0x1 - adds r1, 0x2 - subs r2, 0x1 - cmp r2, 0 - bne _080BD06A -_080BD07A: - adds r0, r5, 0 - cmp r0, r9 - blt _080BD048 -_080BD080: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BD090: .4byte 0x040000d4 -_080BD094: .4byte gMonSpritesGfxPtr -_080BD098: .4byte 0x80000400 - thumb_func_end sub_80BCFCC - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_835B488.s b/data/data_835B488.s index 470eee3c1..7bb53324e 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -941,11 +941,7 @@ gUnknown_83E7C38:: @ 83E7C38 gUnknown_83E7C98:: @ 83E7C98 .incbin "baserom.gba", 0x3E7C98, 0x30 - .section .rodata.83E7CD4 - .balign 4 - -gUnknown_83E7CD4:: @ 83E7CD4 - .incbin "baserom.gba", 0x3E7CD4, 0x28 + .section .rodata.83E7CFC gUnknown_83E7CFC:: @ 83E7CFC .incbin "baserom.gba", 0x3E7CFC, 0x14 diff --git a/include/battle_anim.h b/include/battle_anim.h index d04464f36..2c09037dc 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -77,22 +77,14 @@ bool8 IsBattlerSpriteVisible(u8 battlerId); s16 KeepPanInRange(s16 a, s32 oldPan); void sub_80730C0(u16, const u16 *, u16 *, u8); -// battle_anim_80FE840.s +// battle_intro.c void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value); -void sub_8118FBC(u8 arg0, u8 arg1, u8 arg2, u8 bankIdentity, u8 arg4, void *arg5, u16 *arg6, u16 arg7); -void HandleIntroSlide(u8 terrainId); +s32 GetAnimBgAttribute(u8 bgId, u8 attributeId); +void HandleIntroSlide(u8 terrain); +void sub_80BC41C(u8 taskId); +void sub_80BCEF4(s32 bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 tilesOffset); -// battle_anim_80A5C6C.s -void sub_80A6EEC(struct Sprite *sprite); -void sub_80A68D4(struct Sprite *sprite); -void sub_80A6F3C(struct Sprite *sprite); -void sub_80A8278(void); -void sub_80A6B30(struct BattleAnimBgData *); -void sub_80A6B90(struct BattleAnimBgData *, u32 arg1); -u8 sub_80A82E4(u8 bank); -bool8 AnimateBallThrow(struct Sprite *sprite); - -// battle_anim_special +// battle_anim_special.s void sub_80F1720(u8 battler, struct Pokemon *mon); enum @@ -115,19 +107,19 @@ enum BATTLER_COORD_ATTR_RAW_BOTTOM, }; -u8 GetBattlerSpriteCoord(u8 bank, u8 attributeId); +u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId); -bool8 IsBankSpritePresent(u8 bank); +bool8 IsBankSpritePresent(u8 battlerId); void sub_80A6C68(u8 arg0); u8 GetAnimBattlerSpriteId(u8 wantedBank); bool8 IsDoubleBattle(void); u8 sub_80A6D94(void); u8 sub_80A8364(u8); -void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*)); +void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite *)); void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite); -u8 GetBattlerSpriteDefault_Y(u8 bank); -u8 sub_80A82E4(u8 bank); -u8 GetSubstituteSpriteDefault_Y(u8 bank); +u8 GetBattlerSpriteDefault_Y(u8 battlerId); +u8 sub_80A82E4(u8 battlerId); +u8 GetSubstituteSpriteDefault_Y(u8 battlerId); u8 GetGhostSpriteDefault_Y(u8 battlerId); void sub_8072E48(u8 battlerId, u8); void sub_8073128(u8); @@ -146,7 +138,7 @@ void LaunchStatusAnimation(u8 bank, u8 statusAnimId); // battle_anim_special.s u8 ItemIdToBallId(u16 itemId); u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId); -u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 bank, u32 arg2, u8 ballId); +u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId); // battle_anim_mons.s void TranslateMonSpriteLinear(struct Sprite * sprite); @@ -173,6 +165,7 @@ u8 sub_8076E34(s32, u8, s32); void sub_8075358(u8 bgId); u32 sub_8075BE8(u8, u8, u8, u8, u8, u8, u8); void sub_8075458(bool8); +bool8 AnimateBallThrow(struct Sprite *sprite); // battle_anim_mon_movement.c void AnimTask_ShakeMon(u8 taskId); diff --git a/include/battle_main.h b/include/battle_main.h index 27aae9970..cd602cd28 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -49,7 +49,7 @@ void CB2_QuitRecordedBattle(void); void sub_8038528(struct Sprite* sprite); void sub_8038A04(void); // unused void VBlankCB_Battle(void); -void sub_8038B74(struct Sprite *sprite); +void sub_801182C(struct Sprite *sprite); void sub_8011A1C(void); u32 sub_80391E0(u8 arrayId, u8 caseId); u32 sub_80397C4(u32 setId, u32 tableId); diff --git a/ld_script.txt b/ld_script.txt index 0820eeba0..7c5625ab0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -171,7 +171,7 @@ SECTIONS { asm/ground.o(.text); asm/normal.o(.text); src/battle_anim_utility_funcs.o(.text); - asm/battle_intro.o(.text); + src/battle_intro.o(.text); asm/bike.o(.text); asm/easy_chat.o(.text); asm/mon_markings.o(.text); @@ -422,7 +422,8 @@ SECTIONS { src/item.o(.rodata); data/data_835B488.o(.rodata.83DF09C); src/battle_anim_utility_funcs.o(.rodata); - data/data_835B488.o(.rodata.83E7CD4); + src/battle_intro.o(.rodata); + data/data_835B488.o(.rodata.83E7CFC); src/heal_location.o(.rodata); data/data_835B488.o(.rodata.83EEC98); src/battle_ai_script_commands.o(.rodata); diff --git a/src/battle_intro.c b/src/battle_intro.c new file mode 100644 index 000000000..93141f2ca --- /dev/null +++ b/src/battle_intro.c @@ -0,0 +1,495 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_setup.h" +#include "bg.h" +#include "gpu_regs.h" +#include "main.h" +#include "scanline_effect.h" +#include "task.h" +#include "trig.h" +#include "constants/trainers.h" + +static EWRAM_DATA u16 sBgCnt = 0; + +extern const u8 gUnknown_83E7CCA[]; +extern const u8 gUnknown_83E7CCE[]; + +static void BattleIntroSlide1(u8 taskId); +static void BattleIntroSlide2(u8 taskId); +static void BattleIntroSlide3(u8 taskId); +static void BattleIntroSlideLink(u8 taskId); + +static const TaskFunc sBattleIntroSlideFuncs[] = +{ + BattleIntroSlide1, // BATTLE_TERRAIN_GRASS + BattleIntroSlide1, // BATTLE_TERRAIN_LONG_GRASS + BattleIntroSlide2, // BATTLE_TERRAIN_SAND + BattleIntroSlide2, // BATTLE_TERRAIN_UNDERWATER + BattleIntroSlide2, // BATTLE_TERRAIN_WATER + BattleIntroSlide1, // BATTLE_TERRAIN_POND + BattleIntroSlide1, // BATTLE_TERRAIN_MOUNTAIN + BattleIntroSlide1, // BATTLE_TERRAIN_CAVE + BattleIntroSlide3, // BATTLE_TERRAIN_BUILDING + BattleIntroSlide3, // BATTLE_TERRAIN_PLAIN +}; + +void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value) +{ + if (bgId < 4) + { + sBgCnt = GetGpuReg(gUnknown_83E7CCA[bgId]); + switch (attributeId) + { + case BG_ANIM_SCREEN_SIZE: + ((struct BgCnt *)&sBgCnt)->screenSize = value; + break; + case BG_ANIM_AREA_OVERFLOW_MODE: + ((struct BgCnt *)&sBgCnt)->areaOverflowMode = value; + break; + case BG_ANIM_MOSAIC: + ((struct BgCnt *)&sBgCnt)->mosaic = value; + break; + case BG_ANIM_CHAR_BASE_BLOCK: + ((struct BgCnt *)&sBgCnt)->charBaseBlock = value; + break; + case BG_ANIM_PRIORITY: + ((struct BgCnt *)&sBgCnt)->priority = value; + break; + case BG_ANIM_PALETTES_MODE: + ((struct BgCnt *)&sBgCnt)->palettes = value; + break; + case BG_ANIM_SCREEN_BASE_BLOCK: + ((struct BgCnt *)&sBgCnt)->screenBaseBlock = value; + break; + } + SetGpuReg(gUnknown_83E7CCA[bgId], sBgCnt); + } +} + +s32 GetAnimBgAttribute(u8 bgId, u8 attributeId) +{ + u16 bgCnt; + + if (bgId < 4) + { + bgCnt = GetGpuReg(gUnknown_83E7CCE[bgId]); + switch (attributeId) + { + case BG_ANIM_SCREEN_SIZE: + return ((struct BgCnt *)&bgCnt)->screenSize; + case BG_ANIM_AREA_OVERFLOW_MODE: + return ((struct BgCnt *)&bgCnt)->areaOverflowMode; + case BG_ANIM_MOSAIC: + return ((struct BgCnt *)&bgCnt)->mosaic; + case BG_ANIM_CHAR_BASE_BLOCK: + return ((struct BgCnt *)&bgCnt)->charBaseBlock; + case BG_ANIM_PRIORITY: + return ((struct BgCnt *)&bgCnt)->priority; + case BG_ANIM_PALETTES_MODE: + return ((struct BgCnt *)&bgCnt)->palettes; + case BG_ANIM_SCREEN_BASE_BLOCK: + return ((struct BgCnt *)&bgCnt)->screenBaseBlock; + } + } + return 0; +} + +void HandleIntroSlide(u8 terrain) +{ + u8 taskId; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + taskId = CreateTask(BattleIntroSlideLink, 0); + } + else if ((gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) && gGameVersion != VERSION_RUBY) + { + terrain = BATTLE_TERRAIN_UNDERWATER; + taskId = CreateTask(BattleIntroSlide2, 0); + } + else + { + taskId = CreateTask(sBattleIntroSlideFuncs[terrain], 0); + } + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = terrain; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; +} + +void sub_80BC41C(u8 taskId) +{ + DestroyTask(taskId); + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); +} + +static void BattleIntroSlide1(u8 taskId) +{ + s32 i; + + gBattle_BG1_X += 6; + switch (gTasks[taskId].data[0]) + { + case 0: + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gTasks[taskId].data[2] = 16; + ++gTasks[taskId].data[0]; + } + else + { + gTasks[taskId].data[2] = 1; + ++gTasks[taskId].data[0]; + } + break; + case 1: + if (--gTasks[taskId].data[2] == 0) + { + ++gTasks[taskId].data[0]; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); + } + break; + case 2: + gBattle_WIN0V -= 0xFF; + if ((gBattle_WIN0V & 0xFF00) == 0x3000) + { + ++gTasks[taskId].data[0]; + gTasks[taskId].data[2] = 240; + gTasks[taskId].data[3] = 32; + gIntroSlideFlags &= ~1; + } + break; + case 3: + if (gTasks[taskId].data[3]) + { + --gTasks[taskId].data[3]; + } + else + { + if (gTasks[taskId].data[1] == 1) + { + if (gBattle_BG1_Y != 0xFFB0) + gBattle_BG1_Y -= 2; + } + else if (gBattle_BG1_Y != 0xFFC8) + { + gBattle_BG1_Y -= 1; + } + } + if (gBattle_WIN0V & 0xFF00) + gBattle_WIN0V -= 0x3FC; + if (gTasks[taskId].data[2]) + gTasks[taskId].data[2] -= 2; + // Scanline settings have already been set in CB2_InitBattleInternal + for (i = 0; i < 80; ++i) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; + while (i < 160) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i++] = -gTasks[taskId].data[2]; + if (!gTasks[taskId].data[2]) + { + gScanlineEffect.state = 3; + ++gTasks[taskId].data[0]; + CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE); + SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); + SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0); + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256); + } + break; + case 4: + sub_80BC41C(taskId); + break; + } +} + +static void BattleIntroSlide2(u8 taskId) +{ + s32 i; + + switch (gTasks[taskId].data[1]) + { + case 2: + case 4: + gBattle_BG1_X += 8; + break; + case 3: + gBattle_BG1_X += 6; + break; + } + if (gTasks[taskId].data[1] == 4) + { + gBattle_BG1_Y = Cos2(gTasks[taskId].data[6]) / 512 - 8; + if (gTasks[taskId].data[6] < 180) + gTasks[taskId].data[6] += 4; + else + gTasks[taskId].data[6] += 6; + if (gTasks[taskId].data[6] == 360) + gTasks[taskId].data[6] = 0; + } + switch (gTasks[taskId].data[0]) + { + case 0: + gTasks[taskId].data[4] = 16; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gTasks[taskId].data[2] = 16; + ++gTasks[taskId].data[0]; + } + else + { + gTasks[taskId].data[2] = 1; + ++gTasks[taskId].data[0]; + } + break; + case 1: + if (--gTasks[taskId].data[2] == 0) + { + ++gTasks[taskId].data[0]; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); + } + break; + case 2: + gBattle_WIN0V -= 0xFF; + if ((gBattle_WIN0V & 0xFF00) == 0x3000) + { + ++gTasks[taskId].data[0]; + gTasks[taskId].data[2] = 240; + gTasks[taskId].data[3] = 32; + gTasks[taskId].data[5] = 1; + gIntroSlideFlags &= ~1; + } + break; + case 3: + if (gTasks[taskId].data[3]) + { + if (--gTasks[taskId].data[3] == 0) + { + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(15, 0)); + SetGpuReg(REG_OFFSET_BLDY, 0); + } + } + else if ((gTasks[taskId].data[4] & 0x1F) && --gTasks[taskId].data[5] == 0) + { + gTasks[taskId].data[4] += 0xFF; + gTasks[taskId].data[5] = 4; + } + if (gBattle_WIN0V & 0xFF00) + gBattle_WIN0V -= 0x3FC; + + if (gTasks[taskId].data[2]) + gTasks[taskId].data[2] -= 2; + // Scanline settings have already been set in CB2_InitBattleInternal() + for (i = 0; i < 80; ++i) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; + while (i < 160) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i++] = -gTasks[taskId].data[2]; + if (!gTasks[taskId].data[2]) + { + gScanlineEffect.state = 3; + ++gTasks[taskId].data[0]; + CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE); + SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); + SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0); + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256); + } + break; + case 4: + sub_80BC41C(taskId); + break; + } + if (gTasks[taskId].data[0] != 4) + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[4], 0)); +} + +static void BattleIntroSlide3(u8 taskId) +{ + s32 i; + + gBattle_BG1_X += 8; + switch (gTasks[taskId].data[0]) + { + case 0: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8)); + SetGpuReg(REG_OFFSET_BLDY, 0); + gTasks[taskId].data[4] = BLDALPHA_BLEND(8, 8); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gTasks[taskId].data[2] = 16; + ++gTasks[taskId].data[0]; + } + else + { + gTasks[taskId].data[2] = 1; + ++gTasks[taskId].data[0]; + } + break; + case 1: + if (--gTasks[taskId].data[2] == 0) + { + ++gTasks[taskId].data[0]; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); + } + break; + case 2: + gBattle_WIN0V -= 0xFF; + if ((gBattle_WIN0V & 0xFF00) == 0x3000) + { + ++gTasks[taskId].data[0]; + gTasks[taskId].data[2] = 240; + gTasks[taskId].data[3] = 32; + gTasks[taskId].data[5] = 1; + gIntroSlideFlags &= ~1; + } + break; + case 3: + if (gTasks[taskId].data[3]) + { + --gTasks[taskId].data[3]; + } + else if ((gTasks[taskId].data[4] & 0xF) && --gTasks[taskId].data[5] == 0) + { + gTasks[taskId].data[4] += 0xFF; + gTasks[taskId].data[5] = 6; + } + if (gBattle_WIN0V & 0xFF00) + gBattle_WIN0V -= 0x3FC; + if (gTasks[taskId].data[2]) + gTasks[taskId].data[2] -= 2; + // Scanline settings have already been set in CB2_InitBattleInternal() + for (i = 0; i < 80; ++i) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; + while (i < 160) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i++] = -gTasks[taskId].data[2]; + if (!gTasks[taskId].data[2]) + { + gScanlineEffect.state = 3; + ++gTasks[taskId].data[0]; + CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE); + SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); + SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0); + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256); + } + break; + case 4: + sub_80BC41C(taskId); + break; + } + if (gTasks[taskId].data[0] != 4) + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[4], 0)); +} + +static void BattleIntroSlideLink(u8 taskId) +{ + s32 i; + + if (gTasks[taskId].data[0] > 1 && !gTasks[taskId].data[4]) + { + u16 var0 = gBattle_BG1_X & 0x8000; + + if (var0 || gBattle_BG1_X < 80) + { + gBattle_BG1_X += 3; + gBattle_BG2_X -= 3; + } + else + { + CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE); + CpuFill32(0, (void *)BG_SCREEN_ADDR(30), BG_SCREEN_SIZE); + gTasks[taskId].data[4] = 1; + } + } + switch (gTasks[taskId].data[0]) + { + case 0: + gTasks[taskId].data[2] = 32; + ++gTasks[taskId].data[0]; + break; + case 1: + if (--gTasks[taskId].data[2] == 0) + { + ++gTasks[taskId].data[0]; + gSprites[gBattleStruct->linkBattleVsSpriteId_V].oam.objMode = ST_OAM_OBJ_WINDOW; + gSprites[gBattleStruct->linkBattleVsSpriteId_V].callback = sub_801182C; + gSprites[gBattleStruct->linkBattleVsSpriteId_S].oam.objMode = ST_OAM_OBJ_WINDOW; + gSprites[gBattleStruct->linkBattleVsSpriteId_S].callback = sub_801182C; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2); + } + break; + case 2: + gBattle_WIN0V -= 0xFF; + if ((gBattle_WIN0V & 0xFF00) == 0x3000) + { + ++gTasks[taskId].data[0]; + gTasks[taskId].data[2] = 240; + gTasks[taskId].data[3] = 32; + gIntroSlideFlags &= ~1; + } + break; + case 3: + if (gBattle_WIN0V & 0xFF00) + gBattle_WIN0V -= 0x3FC; + if (gTasks[taskId].data[2]) + gTasks[taskId].data[2] -= 2; + // Scanline settings have already been set in CB2_InitBattleInternal() + for (i = 0; i < 80; ++i) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; + while (i < 160) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i++] = -gTasks[taskId].data[2]; + if (!gTasks[taskId].data[2]) + { + gScanlineEffect.state = 3; + ++gTasks[taskId].data[0]; + SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0); + SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0); + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256); + } + break; + case 4: + sub_80BC41C(taskId); + break; + } +} + +void sub_80BCEF4(s32 bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 tilesOffset) +{ + s32 i, j; + u8 battler = GetBattlerAtPosition(battlerPosition); + s32 offset = tilesOffset; + + CpuCopy16(gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], arg5, BG_SCREEN_SIZE); + LoadBgTiles(bgId, arg5, 0x1000, tilesOffset); + for (i = arg2; i < arg2 + 8; ++i) + for (j = arg1; j < arg1 + 8; ++j) + arg6[i * 32 + j] = offset++ | (arg4 << 12); + LoadBgTilemap(bgId, arg6, BG_SCREEN_SIZE, 0); +} + +// not used +static void sub_80BCFCC(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7) +{ + s32 i, j, offset; + + DmaCopy16(3, gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * arg3, (void *)BG_SCREEN_ADDR(0) + arg5, BG_SCREEN_SIZE); + offset = (arg5 >> 5) - (arg7 << 9); + for (i = arg1; i < arg1 + 8; ++i) + for (j = arg0; j < arg0 + 8; ++j) + *((u16 *)(BG_VRAM) + (i * 32) + (j + (arg6 << 10))) = offset++ | (arg4 << 12); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 7e779312b..c503ab553 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -885,10 +885,9 @@ gUnknown_20399A4: @ 20399A4 .space 0x10 .include "src/battle_anim_utility_funcs.o" + .include "src/battle_intro.o" -gUnknown_20399B8: @ 20399B8 - .space 0x4 - + .align 2 gUnknown_20399BC: @ 20399BC .space 0x4 From e9cdb63903143b98cb443007755222bdfbc2efec Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sat, 5 Oct 2019 03:06:45 +0800 Subject: [PATCH 04/25] battle_anim_mons --- asm/battle_2.s | 16 +- asm/battle_anim.s | 8 +- asm/battle_anim_effects_1.s | 290 +- asm/battle_anim_effects_2.s | 166 +- asm/battle_anim_effects_3.s | 182 +- asm/battle_anim_mons.s | 6343 ------------------------------- asm/battle_anim_special.s | 26 +- asm/bug.s | 42 +- asm/dark.s | 52 +- asm/dragon.s | 32 +- asm/electric.s | 48 +- asm/fighting.s | 72 +- asm/fire.s | 46 +- asm/flying.s | 54 +- asm/ghost.s | 46 +- asm/ground.s | 42 +- asm/ice.s | 96 +- asm/normal.s | 56 +- asm/poison.s | 22 +- asm/pokeball.s | 16 +- asm/pokemon_jump_2.s | 4 +- asm/pokemon_summary_screen.s | 2 +- asm/psychic.s | 76 +- asm/rock.s | 36 +- asm/trade.s | 16 +- asm/water.s | 54 +- data/battle_anim.s | 18 - data/data.s | 4 +- include/battle.h | 3 - include/battle_anim.h | 128 +- include/battle_main.h | 2 +- include/data.h | 2 + include/global.h | 24 + include/overworld.h | 5 - include/pokemon_icon.h | 1 + include/rom6.h | 17 - include/sprite.h | 1 + ld_script.txt | 3 +- src/battle_anim_mon_movement.c | 2 +- src/battle_anim_mons.c | 2253 +++++++++++ src/battle_anim_utility_funcs.c | 8 +- src/battle_controller_player.c | 2 +- src/daycare.c | 4 +- sym_ewram.txt | 5 +- 44 files changed, 3147 insertions(+), 7178 deletions(-) delete mode 100644 asm/battle_anim_mons.s delete mode 100644 include/rom6.h create mode 100644 src/battle_anim_mons.c diff --git a/asm/battle_2.s b/asm/battle_2.s index 4648c7e33..775cb1033 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -4145,16 +4145,16 @@ _08011F3C: lsls r0, 16 lsrs r0, 16 _08011F46: - ldr r1, _08011F4C @ =gUnknown_82349CC + ldr r1, _08011F4C @ =gMonFrontPicCoords lsls r0, 2 b _08011F88 .align 2, 0 -_08011F4C: .4byte gUnknown_82349CC +_08011F4C: .4byte gMonFrontPicCoords _08011F50: ldr r0, _08011F68 @ =0x00000181 cmp r4, r0 bne _08011F74 - ldr r0, _08011F6C @ =gUnknown_83AE03C + ldr r0, _08011F6C @ =gCastformFrontSpriteCoords ldr r1, _08011F70 @ =gBattleMonForms adds r1, r6, r1 ldrb r1, [r1] @@ -4164,19 +4164,19 @@ _08011F50: b _08011F8C .align 2, 0 _08011F68: .4byte 0x00000181 -_08011F6C: .4byte gUnknown_83AE03C +_08011F6C: .4byte gCastformFrontSpriteCoords _08011F70: .4byte gBattleMonForms _08011F74: movs r0, 0xCE lsls r0, 1 cmp r4, r0 bls _08011F84 - ldr r0, _08011F80 @ =gUnknown_82349CC + ldr r0, _08011F80 @ =gMonFrontPicCoords b _08011F8A .align 2, 0 -_08011F80: .4byte gUnknown_82349CC +_08011F80: .4byte gMonFrontPicCoords _08011F84: - ldr r1, _08011FAC @ =gUnknown_82349CC + ldr r1, _08011FAC @ =gMonFrontPicCoords lsls r0, r4, 2 _08011F88: adds r0, r1 @@ -4199,7 +4199,7 @@ _08011F8C: pop {r0} bx r0 .align 2, 0 -_08011FAC: .4byte gUnknown_82349CC +_08011FAC: .4byte gMonFrontPicCoords _08011FB0: .4byte sub_8011FB4 thumb_func_end SpriteCB_FaintOpponentMon diff --git a/asm/battle_anim.s b/asm/battle_anim.s index b6f26338a..2adbf9487 100644 --- a/asm/battle_anim.s +++ b/asm/battle_anim.s @@ -3960,7 +3960,7 @@ sub_8074320: @ 8074320 cmp r7, 0 bne _08074370 ldrb r0, [r6] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r4, r0, 24 movs r0, 0 @@ -3971,7 +3971,7 @@ _08074368: .4byte gBattleAnimAttacker _0807436C: .4byte gBattleAnimTarget _08074370: ldrb r0, [r5] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r4, r0, 24 movs r0, 0x1 @@ -4042,7 +4042,7 @@ sub_80743C8: @ 80743C8 cmp r7, 0 bne _08074418 ldrb r0, [r6] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r4, r0, 24 movs r0, 0 @@ -4053,7 +4053,7 @@ _08074410: .4byte gBattleAnimAttacker _08074414: .4byte gBattleAnimTarget _08074418: ldrb r0, [r5] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r4, r0, 24 movs r0, 0x1 diff --git a/asm/battle_anim_effects_1.s b/asm/battle_anim_effects_1.s index 19f2c4480..b71600380 100644 --- a/asm/battle_anim_effects_1.s +++ b/asm/battle_anim_effects_1.s @@ -96,7 +96,7 @@ sub_80A2388: @ 80A2388 push {r4,r5,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080A23C8 @ =gBattleAnimArgs ldrh r0, [r0, 0x4] strh r0, [r4, 0x2E] @@ -115,7 +115,7 @@ sub_80A2388: @ 80A2388 strh r0, [r4, 0x36] ldr r0, _080A23D0 @ =StartAnimLinearTranslation str r0, [r4, 0x1C] - ldr r1, _080A23D4 @ =move_anim_8074EE0 + ldr r1, _080A23D4 @ =DestroySpriteAndMatrix adds r0, r4, 0 bl StoreSpriteCallbackInData6 pop {r4,r5} @@ -125,7 +125,7 @@ sub_80A2388: @ 80A2388 _080A23C8: .4byte gBattleAnimArgs _080A23CC: .4byte gBattleAnimAttacker _080A23D0: .4byte StartAnimLinearTranslation -_080A23D4: .4byte move_anim_8074EE0 +_080A23D4: .4byte DestroySpriteAndMatrix thumb_func_end sub_80A2388 thumb_func_start sub_80A23D8 @@ -133,7 +133,7 @@ sub_80A23D8: @ 80A23D8 push {r4,r5,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r5, _080A2420 @ =gBattleAnimArgs ldrb r1, [r5, 0x6] adds r0, r4, 0 @@ -173,7 +173,7 @@ sub_80A2430: @ 80A2430 push {r4-r6,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r6, _080A2480 @ =gBattleAnimArgs ldrh r0, [r6, 0x4] strh r0, [r4, 0x2E] @@ -195,7 +195,7 @@ sub_80A2430: @ 80A2430 lsrs r0, 24 strh r0, [r4, 0x36] adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldrh r0, [r6, 0x6] strh r0, [r4, 0x38] ldr r1, _080A2488 @ =sub_80A248C @@ -215,7 +215,7 @@ _080A2488: .4byte sub_80A248C sub_80A248C: @ 80A248C push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080A24A2 @@ -338,7 +338,7 @@ sub_80A2580: @ 80A2580 push {r4-r6,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r6, _080A25C4 @ =gBattleAnimArgs ldrh r0, [r6, 0x6] strh r0, [r4, 0x2E] @@ -358,7 +358,7 @@ sub_80A2580: @ 80A2580 ldrh r0, [r6, 0x4] strh r0, [r4, 0x38] adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080A25CC @ =sub_80A25D0 str r0, [r4, 0x1C] pop {r4-r6} @@ -374,7 +374,7 @@ _080A25CC: .4byte sub_80A25D0 sub_80A25D0: @ 80A25D0 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080A25E4 @@ -451,7 +451,7 @@ _080A263C: lsrs r0, 24 strh r0, [r5, 0x36] adds r0, r5, 0 - bl sub_8075804 + bl InitAnimFastLinearTranslationWithSpeed bl Random movs r1, 0xFF ands r1, r0 @@ -476,7 +476,7 @@ _080A26A0: .4byte sub_80A26A4 sub_80A26A4: @ 80A26A4 push {r4,lr} adds r4, r0, 0 - bl sub_807578C + bl AnimFastTranslateLinear lsls r0, 24 cmp r0, 0 beq _080A26BA @@ -520,7 +520,7 @@ sub_80A26F0: @ 80A26F0 push {r4-r6,lr} adds r6, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080A2750 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -555,7 +555,7 @@ _080A2710: ldrh r0, [r4, 0xA] strh r0, [r6, 0x38] adds r0, r6, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080A275C @ =sub_80A2760 str r0, [r6, 0x1C] pop {r4-r6} @@ -572,7 +572,7 @@ _080A275C: .4byte sub_80A2760 sub_80A2760: @ 80A2760 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080A278A @@ -584,7 +584,7 @@ sub_80A2760: @ 80A2760 strb r0, [r2] movs r0, 0xA strh r0, [r4, 0x2E] - ldr r0, _080A2790 @ =sub_8074C44 + ldr r0, _080A2790 @ =WaitAnimForDuration str r0, [r4, 0x1C] ldr r1, _080A2794 @ =sub_80A2798 adds r0, r4, 0 @@ -594,7 +594,7 @@ _080A278A: pop {r0} bx r0 .align 2, 0 -_080A2790: .4byte sub_8074C44 +_080A2790: .4byte WaitAnimForDuration _080A2794: .4byte sub_80A2798 thumb_func_end sub_80A2760 @@ -614,7 +614,7 @@ sub_80A2798: @ 80A2798 bl StartSpriteAnim movs r0, 0x3C strh r0, [r4, 0x2E] - ldr r0, _080A27C8 @ =sub_8074C44 + ldr r0, _080A27C8 @ =WaitAnimForDuration str r0, [r4, 0x1C] ldr r1, _080A27CC @ =DestroyAnimSprite adds r0, r4, 0 @@ -623,7 +623,7 @@ sub_80A2798: @ 80A2798 pop {r0} bx r0 .align 2, 0 -_080A27C8: .4byte sub_8074C44 +_080A27C8: .4byte WaitAnimForDuration _080A27CC: .4byte DestroyAnimSprite thumb_func_end sub_80A2798 @@ -632,7 +632,7 @@ sub_80A27D0: @ 80A27D0 push {r4,r5,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r5, _080A2814 @ =gBattleAnimArgs ldrb r1, [r5, 0x8] adds r0, r4, 0 @@ -694,7 +694,7 @@ sub_80A281C: @ 80A281C bhi _080A2870 ldr r0, _080A286C @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -709,7 +709,7 @@ _080A286C: .4byte gBattleAnimTarget _080A2870: ldr r0, _080A28C0 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority adds r0, 0x1 lsls r0, 24 lsrs r2, r0, 24 @@ -771,7 +771,7 @@ _080A28DE: _080A28E6: ldr r0, _080A2904 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -802,7 +802,7 @@ sub_80A2920: @ 80A2920 push {r4,r5,lr} adds r4, r0, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r5, _080A2968 @ =gBattleAnimArgs ldrh r0, [r5, 0x6] strh r0, [r4, 0x2E] @@ -821,7 +821,7 @@ sub_80A2920: @ 80A2920 adds r0, r5 strh r0, [r4, 0x36] adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation movs r0, 0x40 strh r0, [r4, 0x38] ldr r1, _080A2970 @ =sub_80A2974 @@ -841,7 +841,7 @@ _080A2970: .4byte sub_80A2974 sub_80A2974: @ 80A2974 push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 bne _080A29E0 @@ -904,7 +904,7 @@ sub_80A29EC: @ 80A29EC push {r4,r5,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r5, _080A2A34 @ =gBattleAnimArgs ldrh r0, [r5, 0x6] strh r0, [r4, 0x2E] @@ -923,7 +923,7 @@ sub_80A29EC: @ 80A29EC adds r0, r5 strh r0, [r4, 0x36] adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation movs r0, 0x40 strh r0, [r4, 0x38] ldr r1, _080A2A3C @ =sub_80A2A40 @@ -943,7 +943,7 @@ _080A2A3C: .4byte sub_80A2A40 sub_80A2A40: @ 80A2A40 push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 bne _080A2A98 @@ -1132,7 +1132,7 @@ sub_80A2B9C: @ 80A2B9C push {r4-r6,lr} adds r5, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080A2BF0 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -1180,7 +1180,7 @@ _080A2BFC: adds r3, r5, 0 adds r3, 0x36 movs r1, 0x1 - bl sub_8076D9C + bl SetAverageBattlerPositions ldrh r0, [r6, 0x4] ldrh r1, [r5, 0x32] adds r0, r1 @@ -1194,7 +1194,7 @@ _080A2C1C: ldrh r0, [r0, 0xA] strh r0, [r5, 0x38] adds r0, r5, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080A2C50 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -1235,7 +1235,7 @@ sub_80A2C68: @ 80A2C68 movs r0, 0x1 strh r0, [r6, 0x2E] adds r0, r6, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc ldrh r0, [r6, 0x3C] strh r5, [r6, 0x2E] lsls r4, 16 @@ -1336,7 +1336,7 @@ sub_80A2D10: @ 80A2D10 adds r3, r4, 0 adds r3, 0x22 movs r1, 0x1 - bl sub_8076D9C + bl SetAverageBattlerPositions _080A2D3C: ldrh r0, [r4, 0x22] adds r0, 0x20 @@ -1419,7 +1419,7 @@ _080A2DAC: bgt _080A2DEC ldr r0, _080A2DE8 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r0, 24 subs r0, 0x1 @@ -1429,7 +1429,7 @@ _080A2DE8: .4byte gBattleAnimTarget _080A2DEC: ldr r0, _080A2E24 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r0, 24 adds r0, 0x1 @@ -1464,7 +1464,7 @@ sub_80A2E28: @ 80A2E28 push {r4,r5,lr} adds r5, r0, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget adds r2, r5, 0 adds r2, 0x2C ldrb r0, [r2] @@ -1682,7 +1682,7 @@ _080A2FBE: movs r3, 0 bl SetSpriteRotScale adds r0, r6, 0 - bl sub_8076440 + bl SetBattlerSpriteYOffsetFromYScale ldrh r0, [r4, 0xA] subs r0, 0x1 strh r0, [r4, 0xA] @@ -1866,7 +1866,7 @@ _080A3104: lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0x36] - ldr r0, _080A3160 @ =sub_8075764 + ldr r0, _080A3160 @ =InitAndRunAnimFastLinearTranslation str r0, [r5, 0x1C] ldr r1, _080A3164 @ =DestroyAnimSprite adds r0, r5, 0 @@ -1877,7 +1877,7 @@ _080A3156: bx r0 .align 2, 0 _080A315C: .4byte gBattleAnimAttacker -_080A3160: .4byte sub_8075764 +_080A3160: .4byte InitAndRunAnimFastLinearTranslation _080A3164: .4byte DestroyAnimSprite thumb_func_end sub_80A3098 @@ -2370,7 +2370,7 @@ sub_80A3518: @ 80A3518 push {r4-r6,lr} adds r5, r0, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r4, _080A3560 @ =gBattleAnimTarget ldrb r0, [r4] movs r1, 0 @@ -2546,7 +2546,7 @@ sub_80A3670: @ 80A3670 bne _080A368A adds r0, r4, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r0, _080A36B0 @ =gBattleAnimArgs ldrh r0, [r0, 0x4] strh r0, [r4, 0x30] @@ -2579,7 +2579,7 @@ sub_80A36B4: @ 80A36B4 push {r4-r6,lr} adds r5, r0, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r4, _080A36FC @ =gBattleAnimAttacker ldrb r0, [r4] movs r1, 0 @@ -3014,11 +3014,11 @@ sub_80A39C0: @ 80A39C0 strh r0, [r5, 0x16] ldrb r0, [r4] movs r1, 0x1 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr strh r0, [r5, 0x1C] ldrb r0, [r4] movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr strh r0, [r5, 0x1E] ldrb r0, [r4] bl GetBattlerSide @@ -3139,7 +3139,7 @@ _080A3A60: adds r0, r1 lsls r0, 2 adds r0, r4 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080A3B24 @ =sub_80A3B28 str r0, [r5] pop {r4-r6} @@ -3207,7 +3207,7 @@ _080A3B80: adds r1, r2, 0 bl sub_80A3F24 adds r0, r4, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 bne _080A3B96 @@ -3236,7 +3236,7 @@ _080A3BB4: adds r1, r2, 0 bl sub_80A3F24 adds r0, r4, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 bne _080A3BCA @@ -3265,7 +3265,7 @@ _080A3BE6: adds r1, r2, 0 bl sub_80A3F24 adds r0, r4, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 bne _080A3BFC @@ -3309,7 +3309,7 @@ _080A3C04: adds r0, r4, 0 bl StartSpriteAnim adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldrh r0, [r6, 0x8] adds r0, 0x1 b _080A3EFA @@ -3318,7 +3318,7 @@ _080A3C54: adds r1, r2, 0 bl sub_80A3F24 adds r0, r4, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 bne _080A3C6A @@ -3381,7 +3381,7 @@ _080A3C72: adds r0, r4, 0 bl StartSpriteAnim adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldrh r0, [r6, 0x8] adds r0, 0x1 b _080A3EFA @@ -3440,7 +3440,7 @@ _080A3CE8: adds r0, r4, 0 bl StartSpriteAnim adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldrh r0, [r6, 0x8] adds r0, 0x1 b _080A3EFA @@ -3449,7 +3449,7 @@ _080A3D62: adds r1, r2, 0 bl sub_80A3F24 adds r0, r4, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 bne _080A3D78 @@ -3494,7 +3494,7 @@ _080A3D80: adds r0, r4, 0 bl StartSpriteAnim adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldrh r0, [r6, 0x8] adds r0, 0x1 b _080A3EFA @@ -3551,7 +3551,7 @@ _080A3DD2: adds r0, r4, 0 bl StartSpriteAnim adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldrh r0, [r6, 0x8] adds r0, 0x1 b _080A3EFA @@ -3560,7 +3560,7 @@ _080A3E48: adds r1, r2, 0 bl sub_80A3F24 adds r0, r4, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080A3EFC @@ -3603,7 +3603,7 @@ _080A3E64: adds r0, r4, 0 bl StartSpriteAnim adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldrh r0, [r6, 0x8] adds r0, 0x1 b _080A3EFA @@ -3612,7 +3612,7 @@ _080A3EB6: adds r1, r2, 0 bl sub_80A3F24 adds r0, r4, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080A3EFC @@ -3902,7 +3902,7 @@ _080A40D4: _080A40E4: strh r0, [r4, 0x22] adds r0, r6, 0 - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -3927,7 +3927,7 @@ _080A4100: bl GetAnimBattlerSpriteId _080A411A: adds r0, r6, 0 - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r0, 24 adds r0, 0x1 @@ -4008,7 +4008,7 @@ _080A41A4: bgt _080A41BC _080A41B6: adds r0, r4, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080A41BC: pop {r4,r5} pop {r0} @@ -4221,7 +4221,7 @@ _080A4318: subs r1, r5 lsls r1, 16 asrs r1, 16 - bl sub_8075B30 + bl ArcTan2Neg lsls r0, 16 lsrs r4, r0, 16 bl IsContest @@ -4239,7 +4239,7 @@ _080A437A: adds r0, r6, 0 movs r1, 0 adds r2, r3, 0 - bl sub_8075A1C + bl TrySetSpriteRotScale ldr r0, _080A439C @ =sub_80A43A0 str r0, [r6, 0x1C] _080A438E: @@ -4280,7 +4280,7 @@ sub_80A43A0: @ 80A43A0 b _080A43D6 _080A43D0: adds r0, r2, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080A43D6: pop {r4} pop {r0} @@ -4335,7 +4335,7 @@ _080A442C: ldrh r1, [r4, 0x22] adds r0, r1 strh r0, [r4, 0x22] - ldr r0, _080A4448 @ =sub_8074F6C + ldr r0, _080A4448 @ =RunStoredCallbackWhenAnimEnds str r0, [r4, 0x1C] ldr r1, _080A444C @ =DestroyAnimSprite adds r0, r4, 0 @@ -4345,7 +4345,7 @@ _080A442C: bx r0 .align 2, 0 _080A4444: .4byte gBattleAnimArgs -_080A4448: .4byte sub_8074F6C +_080A4448: .4byte RunStoredCallbackWhenAnimEnds _080A444C: .4byte DestroyAnimSprite thumb_func_end sub_80A43F8 @@ -4369,7 +4369,7 @@ _080A446A: movs r0, 0 ldrsh r1, [r4, r0] adds r0, r5, 0 - bl sub_8074FF8 + bl SetAnimSpriteInitialXOffset ldrh r0, [r4, 0x2] ldrh r1, [r5, 0x22] adds r0, r1 @@ -4407,18 +4407,18 @@ sub_80A4494: @ 80A4494 ldrb r1, [r1, 0xC] adds r0, r4, 0 bl StartSpriteAffineAnim - ldr r1, _080A44D8 @ =move_anim_8074EE0 + ldr r1, _080A44D8 @ =DestroySpriteAndMatrix adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A44DC @ =sub_8074E70 + ldr r0, _080A44DC @ =TranslateSpriteLinearAndFlicker str r0, [r4, 0x1C] pop {r4} pop {r0} bx r0 .align 2, 0 _080A44D4: .4byte gBattleAnimArgs -_080A44D8: .4byte move_anim_8074EE0 -_080A44DC: .4byte sub_8074E70 +_080A44D8: .4byte DestroySpriteAndMatrix +_080A44DC: .4byte TranslateSpriteLinearAndFlicker thumb_func_end sub_80A4494 thumb_func_start sub_80A44E0 @@ -4717,7 +4717,7 @@ _080A46F2: bl StoreSpriteCallbackInData6 movs r0, 0x3 strh r0, [r4, 0x2E] - ldr r0, _080A4734 @ =sub_8074C44 + ldr r0, _080A4734 @ =WaitAnimForDuration str r0, [r4, 0x1C] _080A4728: pop {r4} @@ -4725,7 +4725,7 @@ _080A4728: bx r0 .align 2, 0 _080A4730: .4byte DestroyAnimSprite -_080A4734: .4byte sub_8074C44 +_080A4734: .4byte WaitAnimForDuration thumb_func_end sub_80A46CC thumb_func_start sub_80A4738 @@ -4971,7 +4971,7 @@ _080A4906: ldr r6, _080A4968 @ =gBattleAnimAttacker ldrb r0, [r6] movs r1, 0 - bl sub_8074844 + bl GetBattlerSpriteCoord2 lsls r0, 24 ldr r4, _080A4964 @ =gBattleAnimArgs lsrs r0, 24 @@ -4980,7 +4980,7 @@ _080A4906: strh r0, [r5, 0x20] ldrb r0, [r6] movs r1, 0x1 - bl sub_8074844 + bl GetBattlerSpriteCoord2 lsls r0, 24 lsrs r0, 24 ldrh r4, [r4, 0x2] @@ -4997,7 +4997,7 @@ _080A4906: beq _080A496C _080A4944: ldrb r0, [r6] - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r0, 24 adds r0, 0x1 @@ -5016,7 +5016,7 @@ _080A4964: .4byte gBattleAnimArgs _080A4968: .4byte gBattleAnimAttacker _080A496C: ldrb r0, [r6] - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -5185,14 +5185,14 @@ _080A4A80: movs r1, 0x4 orrs r0, r1 strb r0, [r2] - ldr r0, _080A4AC8 @ =sub_8074F88 + ldr r0, _080A4AC8 @ =DestroyAnimSpriteAndDisableBlend str r0, [r4, 0x1C] _080A4AC2: pop {r4-r6} pop {r0} bx r0 .align 2, 0 -_080A4AC8: .4byte sub_8074F88 +_080A4AC8: .4byte DestroyAnimSpriteAndDisableBlend thumb_func_end sub_80A49D4 thumb_func_start sub_80A4ACC @@ -5503,12 +5503,12 @@ sub_80A4D0C: @ 80A4D0C cmp r0, 0 bne _080A4D20 adds r0, r4, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords _080A4D20: movs r0, 0 ldrsh r1, [r5, r0] adds r0, r4, 0 - bl sub_8074FF8 + bl SetAnimSpriteInitialXOffset ldrh r0, [r5, 0x2] ldrh r1, [r4, 0x22] adds r0, r1 @@ -5522,7 +5522,7 @@ _080A4D20: ldr r1, _080A4D54 @ =DestroyAnimSprite adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A4D58 @ =sub_8074D00 + ldr r0, _080A4D58 @ =TranslateSpriteLinearFixedPoint str r0, [r4, 0x1C] pop {r4,r5} pop {r0} @@ -5530,7 +5530,7 @@ _080A4D20: .align 2, 0 _080A4D50: .4byte gBattleAnimArgs _080A4D54: .4byte DestroyAnimSprite -_080A4D58: .4byte sub_8074D00 +_080A4D58: .4byte TranslateSpriteLinearFixedPoint thumb_func_end sub_80A4D0C thumb_func_start sub_80A4D5C @@ -5569,11 +5569,11 @@ _080A4D7A: adds r3, r5, 0 adds r3, 0x22 adds r0, r6, 0 - bl sub_8076D9C + bl SetAverageBattlerPositions movs r2, 0 ldrsh r1, [r4, r2] adds r0, r5, 0 - bl sub_8074FF8 + bl SetAnimSpriteInitialXOffset ldrh r0, [r4, 0x2] ldrh r1, [r5, 0x22] adds r0, r1 @@ -5619,7 +5619,7 @@ _080A4DFA: movs r2, 0 ldrsh r1, [r0, r2] adds r0, r5, 0 - bl sub_8074FF8 + bl SetAnimSpriteInitialXOffset _080A4E14: ldr r1, _080A4E34 @ =gBattleAnimArgs ldrh r0, [r1, 0xA] @@ -5631,7 +5631,7 @@ _080A4E14: ldr r1, _080A4E38 @ =DestroyAnimSprite adds r0, r5, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A4E3C @ =sub_8074D00 + ldr r0, _080A4E3C @ =TranslateSpriteLinearFixedPoint str r0, [r5, 0x1C] pop {r4-r6} pop {r0} @@ -5639,14 +5639,14 @@ _080A4E14: .align 2, 0 _080A4E34: .4byte gBattleAnimArgs _080A4E38: .4byte DestroyAnimSprite -_080A4E3C: .4byte sub_8074D00 +_080A4E3C: .4byte TranslateSpriteLinearFixedPoint thumb_func_end sub_80A4D5C thumb_func_start sub_80A4E40 sub_80A4E40: @ 80A4E40 push {r4,lr} adds r4, r0, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldr r0, _080A4E6C @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -5738,7 +5738,7 @@ _080A4EEC: sub_80A4EF4: @ 80A4EF4 push {r4,lr} adds r4, r0, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldr r0, _080A4F24 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -5819,7 +5819,7 @@ sub_80A4F60: @ 80A4F60 cmp r0, 0x3C ble _080A4FA4 adds r0, r4, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080A4FA4: pop {r4} pop {r0} @@ -5837,14 +5837,14 @@ sub_80A4FAC: @ 80A4FAC strh r1, [r0, 0x22] movs r1, 0x14 strh r1, [r0, 0x2E] - ldr r1, _080A4FCC @ =sub_8074C44 + ldr r1, _080A4FCC @ =WaitAnimForDuration str r1, [r0, 0x1C] ldr r1, _080A4FD0 @ =sub_80A4FD4 bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 -_080A4FCC: .4byte sub_8074C44 +_080A4FCC: .4byte WaitAnimForDuration _080A4FD0: .4byte sub_80A4FD4 thumb_func_end sub_80A4FAC @@ -5863,14 +5863,14 @@ sub_80A4FD4: @ 80A4FD4 b _080A506A _080A4FEA: strh r1, [r5, 0x2E] - ldr r0, _080A4FFC @ =sub_8074C44 + ldr r0, _080A4FFC @ =WaitAnimForDuration str r0, [r5, 0x1C] ldr r1, _080A5000 @ =sub_80A4FD4 adds r0, r5, 0 bl StoreSpriteCallbackInData6 b _080A506A .align 2, 0 -_080A4FFC: .4byte sub_8074C44 +_080A4FFC: .4byte WaitAnimForDuration _080A5000: .4byte sub_80A4FD4 _080A5004: ldrh r3, [r5, 0x24] @@ -5946,14 +5946,14 @@ sub_80A5084: @ 80A5084 bne _080A50AC movs r0, 0xA strh r0, [r2, 0x2E] - ldr r0, _080A50A4 @ =sub_8074C44 + ldr r0, _080A50A4 @ =WaitAnimForDuration str r0, [r2, 0x1C] ldr r1, _080A50A8 @ =sub_80A50B8 adds r0, r2, 0 bl StoreSpriteCallbackInData6 b _080A50B0 .align 2, 0 -_080A50A4: .4byte sub_8074C44 +_080A50A4: .4byte WaitAnimForDuration _080A50A8: .4byte sub_80A50B8 _080A50AC: ldr r0, _080A50B4 @ =sub_80A4FD4 @@ -5976,14 +5976,14 @@ sub_80A50B8: @ 80A50B8 strh r0, [r5, 0x2E] strh r1, [r5, 0x30] strh r1, [r5, 0x32] - ldr r0, _080A50D8 @ =sub_8074C44 + ldr r0, _080A50D8 @ =WaitAnimForDuration str r0, [r5, 0x1C] ldr r1, _080A50DC @ =sub_80A5174 adds r0, r5, 0 bl StoreSpriteCallbackInData6 b _080A5160 .align 2, 0 -_080A50D8: .4byte sub_8074C44 +_080A50D8: .4byte WaitAnimForDuration _080A50DC: .4byte sub_80A5174 _080A50E0: ldrh r0, [r5, 0x6] @@ -6447,7 +6447,7 @@ _080A5424: ldrh r0, [r5, 0x34] lsls r0, 24 lsrs r0, 24 - bl sub_80759DC + bl SetBattlerSpriteYOffsetFromRotation ldrh r0, [r5, 0x2E] adds r0, 0x1 strh r0, [r5, 0x2E] @@ -6589,7 +6589,7 @@ _080A5538: ldrh r0, [r5, 0x34] lsls r0, 24 lsrs r0, 24 - bl sub_80759DC + bl SetBattlerSpriteYOffsetFromRotation ldrh r0, [r5, 0x2E] adds r0, 0x1 strh r0, [r5, 0x2E] @@ -6694,7 +6694,7 @@ _080A55FA: ldrh r0, [r4, 0x32] lsls r0, 24 lsrs r0, 24 - bl sub_80759DC + bl SetBattlerSpriteYOffsetFromRotation ldrh r0, [r4, 0x30] adds r0, 0x1 strh r0, [r4, 0x30] @@ -6732,7 +6732,7 @@ _080A564C: ldrh r0, [r4, 0x32] lsls r0, 24 lsrs r0, 24 - bl sub_80759DC + bl SetBattlerSpriteYOffsetFromRotation ldrh r0, [r4, 0x30] adds r0, 0x1 strh r0, [r4, 0x30] @@ -6906,7 +6906,7 @@ _080A579E: adds r1, r2, 0 bl SetSpriteRotScale ldrb r0, [r4, 0x8] - bl sub_80759DC + bl SetBattlerSpriteYOffsetFromRotation b _080A58D4 _080A57C4: movs r0, 0x8 @@ -7097,7 +7097,7 @@ sub_80A58EC: @ 80A58EC adds r1, r2, 0 bl SetSpriteRotScale ldrb r0, [r4, 0x8] - bl sub_80759DC + bl SetBattlerSpriteYOffsetFromRotation ldrh r0, [r4, 0xE] subs r0, 0x1 strh r0, [r4, 0xE] @@ -7154,7 +7154,7 @@ _080A595E: ldr r1, _080A59A0 @ =sub_80A5A8C adds r0, r5, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A59A4 @ =sub_8074F6C + ldr r0, _080A59A4 @ =RunStoredCallbackWhenAnimEnds str r0, [r5, 0x1C] pop {r4-r6} pop {r0} @@ -7162,7 +7162,7 @@ _080A595E: .align 2, 0 _080A599C: .4byte gBattleAnimTarget _080A59A0: .4byte sub_80A5A8C -_080A59A4: .4byte sub_8074F6C +_080A59A4: .4byte RunStoredCallbackWhenAnimEnds thumb_func_end sub_80A5940 thumb_func_start sub_80A59A8 @@ -7187,7 +7187,7 @@ sub_80A59A8: @ 80A59A8 ldr r1, _080A59E8 @ =sub_80A5A44 adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A59EC @ =sub_8074F6C + ldr r0, _080A59EC @ =RunStoredCallbackWhenAnimEnds str r0, [r4, 0x1C] pop {r4,r5} pop {r0} @@ -7196,7 +7196,7 @@ sub_80A59A8: @ 80A59A8 _080A59E0: .4byte gBattleAnimTarget _080A59E4: .4byte 0x0000ffd0 _080A59E8: .4byte sub_80A5A44 -_080A59EC: .4byte sub_8074F6C +_080A59EC: .4byte RunStoredCallbackWhenAnimEnds thumb_func_end sub_80A59A8 thumb_func_start sub_80A59F0 @@ -7259,7 +7259,7 @@ sub_80A5A44: @ 80A5A44 ldr r1, _080A5A74 @ =sub_80A5A7C adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A5A78 @ =sub_8074CD0 + ldr r0, _080A5A78 @ =TranslateSpriteLinear str r0, [r4, 0x1C] _080A5A6E: pop {r4} @@ -7267,7 +7267,7 @@ _080A5A6E: bx r0 .align 2, 0 _080A5A74: .4byte sub_80A5A7C -_080A5A78: .4byte sub_8074CD0 +_080A5A78: .4byte TranslateSpriteLinear thumb_func_end sub_80A5A44 thumb_func_start sub_80A5A7C @@ -7656,7 +7656,7 @@ sub_80A5D4C: @ 80A5D4C push {r4,lr} adds r4, r0, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget adds r2, r4, 0 adds r2, 0x2C ldrb r0, [r2] @@ -8042,7 +8042,7 @@ sub_80A5FC0: @ 80A5FC0 adds r5, 0x1E adds r1, r5, 0 mov r2, r8 - bl sub_80765C0 + bl StorePointerInVars ldr r0, _080A6098 @ =0x000027d2 bl IndexOfSpritePaletteTag lsls r0, 24 @@ -8273,7 +8273,7 @@ _080A61EC: ldrsh r0, [r4, r1] movs r2, 0x26 ldrsh r1, [r4, r2] - bl sub_80765C8 + bl LoadPointerFromVars ldr r1, _080A621C @ =0x00007fbb str r1, [sp] movs r1, 0 @@ -8608,7 +8608,7 @@ _080A649A: str r0, [r6] ldr r0, _080A64C4 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -8652,7 +8652,7 @@ sub_80A64E0: @ 80A64E0 bne _080A6532 ldr r0, _080A6518 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -8764,14 +8764,14 @@ sub_80A65CC: @ 80A65CC adds r4, r0, 0 ldr r1, _080A65E0 @ =DestroyAnimSprite bl StoreSpriteCallbackInData6 - ldr r0, _080A65E4 @ =sub_8074F6C + ldr r0, _080A65E4 @ =RunStoredCallbackWhenAnimEnds str r0, [r4, 0x1C] pop {r4} pop {r0} bx r0 .align 2, 0 _080A65E0: .4byte DestroyAnimSprite -_080A65E4: .4byte sub_8074F6C +_080A65E4: .4byte RunStoredCallbackWhenAnimEnds thumb_func_end sub_80A65CC thumb_func_start sub_80A65E8 @@ -8903,7 +8903,7 @@ sub_80A66D4: @ 80A66D4 push {r4-r6,lr} sub sp, 0x4 adds r5, r0, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldr r4, _080A672C @ =gBattleAnimArgs ldrb r1, [r4] adds r0, r5, 0 @@ -9091,7 +9091,7 @@ _080A6800: ble _080A6856 _080A684E: adds r0, r4, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix b _080A68A6 _080A6856: movs r0, 0x34 @@ -9267,7 +9267,7 @@ _080A699E: cmp r0, 0x30 bne _080A69B2 adds r0, r4, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080A69B2: pop {r4} pop {r0} @@ -9314,7 +9314,7 @@ _080A69DE: strh r0, [r5, 0x22] movs r0, 0x8 strh r0, [r5, 0x2E] - ldr r0, _080A6A20 @ =sub_8074C44 + ldr r0, _080A6A20 @ =WaitAnimForDuration str r0, [r5, 0x1C] ldr r1, _080A6A24 @ =DestroyAnimSprite adds r0, r5, 0 @@ -9325,7 +9325,7 @@ _080A69DE: .align 2, 0 _080A6A18: .4byte 0x0000fff0 _080A6A1C: .4byte gBattleAnimAttacker -_080A6A20: .4byte sub_8074C44 +_080A6A20: .4byte WaitAnimForDuration _080A6A24: .4byte DestroyAnimSprite thumb_func_end sub_80A69B8 @@ -9333,7 +9333,7 @@ _080A6A24: .4byte DestroyAnimSprite sub_80A6A28: @ 80A6A28 push {r4,r5,lr} adds r4, r0, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldrh r0, [r4, 0x22] adds r0, 0x8 strh r0, [r4, 0x22] @@ -9381,7 +9381,7 @@ _080A6A74: subs r0, 0x28 strh r0, [r4, 0x36] adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldrh r0, [r5, 0x6] strh r0, [r4, 0x38] ldr r0, _080A6AAC @ =sub_80A6AB0 @@ -9400,7 +9400,7 @@ _080A6AAC: .4byte sub_80A6AB0 sub_80A6AB0: @ 80A6AB0 push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 bne _080A6B00 @@ -9458,13 +9458,13 @@ sub_80A6B0C: @ 80A6B0C bne _080A6B2C adds r0, r5, 0 movs r1, 0x5 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 b _080A6B36 _080A6B2C: adds r0, r5, 0 movs r1, 0x4 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x8 _080A6B36: strh r0, [r6, 0x20] @@ -9474,7 +9474,7 @@ _080A6B36: adds r4, r0, 0 adds r0, r5, 0 movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r4, 24 lsrs r4, 24 lsls r0, 16 @@ -9529,7 +9529,7 @@ _080A6B82: ldr r1, _080A6BC8 @ =sub_80A6BD0 adds r0, r5, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A6BCC @ =sub_8074F6C + ldr r0, _080A6BCC @ =RunStoredCallbackWhenAnimEnds str r0, [r5, 0x1C] pop {r4,r5} pop {r0} @@ -9538,7 +9538,7 @@ _080A6B82: _080A6BC0: .4byte gBattleAnimTarget _080A6BC4: .4byte gBattleAnimArgs _080A6BC8: .4byte sub_80A6BD0 -_080A6BCC: .4byte sub_8074F6C +_080A6BCC: .4byte RunStoredCallbackWhenAnimEnds thumb_func_end sub_80A6B64 thumb_func_start sub_80A6BD0 @@ -9559,7 +9559,7 @@ sub_80A6BD0: @ 80A6BD0 lsrs r1, 24 adds r0, r4, 0 bl StartSpriteAnim - ldr r0, _080A6C04 @ =sub_8074F6C + ldr r0, _080A6C04 @ =RunStoredCallbackWhenAnimEnds str r0, [r4, 0x1C] _080A6BF8: pop {r4} @@ -9567,7 +9567,7 @@ _080A6BF8: bx r0 .align 2, 0 _080A6C00: .4byte DestroyAnimSprite -_080A6C04: .4byte sub_8074F6C +_080A6C04: .4byte RunStoredCallbackWhenAnimEnds thumb_func_end sub_80A6BD0 thumb_func_start sub_80A6C08 @@ -9595,7 +9595,7 @@ _080A6C26: ldr r1, _080A6C48 @ =sub_80A6C50 adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A6C4C @ =sub_8074F50 + ldr r0, _080A6C4C @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r4, 0x1C] pop {r4} pop {r0} @@ -9603,7 +9603,7 @@ _080A6C26: .align 2, 0 _080A6C44: .4byte gBattleAnimTarget _080A6C48: .4byte sub_80A6C50 -_080A6C4C: .4byte sub_8074F50 +_080A6C4C: .4byte RunStoredCallbackWhenAffineAnimEnds thumb_func_end sub_80A6C08 thumb_func_start sub_80A6C50 @@ -9620,18 +9620,18 @@ sub_80A6C50: @ 80A6C50 adds r0, r4, 0 movs r1, 0x1 bl StartSpriteAffineAnim - ldr r1, _080A6C7C @ =move_anim_8074EE0 + ldr r1, _080A6C7C @ =DestroySpriteAndMatrix adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A6C80 @ =sub_8074F50 + ldr r0, _080A6C80 @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r4, 0x1C] _080A6C76: pop {r4} pop {r0} bx r0 .align 2, 0 -_080A6C7C: .4byte move_anim_8074EE0 -_080A6C80: .4byte sub_8074F50 +_080A6C7C: .4byte DestroySpriteAndMatrix +_080A6C80: .4byte RunStoredCallbackWhenAffineAnimEnds thumb_func_end sub_80A6C50 thumb_func_start sub_80A6C84 @@ -9661,7 +9661,7 @@ _080A6CA2: strh r0, [r4, 0x20] adds r0, r5, 0 movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr strh r0, [r4, 0x22] lsls r0, 16 asrs r0, 16 @@ -9684,7 +9684,7 @@ _080A6CCA: ldr r1, _080A6CF8 @ =sub_80A6D00 adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A6CFC @ =sub_8074F50 + ldr r0, _080A6CFC @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r4, 0x1C] pop {r4-r6} pop {r0} @@ -9692,7 +9692,7 @@ _080A6CCA: .align 2, 0 _080A6CF4: .4byte gBattleAnimTarget _080A6CF8: .4byte sub_80A6D00 -_080A6CFC: .4byte sub_8074F50 +_080A6CFC: .4byte RunStoredCallbackWhenAffineAnimEnds thumb_func_end sub_80A6C84 thumb_func_start sub_80A6D00 @@ -9850,7 +9850,7 @@ sub_80A6DF0: @ 80A6DF0 ldr r1, _080A6E24 @ =sub_80A6E2C adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A6E28 @ =sub_8074F6C + ldr r0, _080A6E28 @ =RunStoredCallbackWhenAnimEnds str r0, [r4, 0x1C] _080A6E1E: pop {r4} @@ -9858,7 +9858,7 @@ _080A6E1E: bx r0 .align 2, 0 _080A6E24: .4byte sub_80A6E2C -_080A6E28: .4byte sub_8074F6C +_080A6E28: .4byte RunStoredCallbackWhenAnimEnds thumb_func_end sub_80A6DF0 thumb_func_start sub_80A6E2C diff --git a/asm/battle_anim_effects_2.s b/asm/battle_anim_effects_2.s index 34989dc0d..67ac6a13e 100644 --- a/asm/battle_anim_effects_2.s +++ b/asm/battle_anim_effects_2.s @@ -9,12 +9,12 @@ sub_80A6E48: @ 80A6E48 push {r4,r5,lr} adds r4, r0, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldr r5, _080A6E8C @ =gBattleAnimArgs movs r0, 0 ldrsh r1, [r5, r0] adds r0, r4, 0 - bl sub_8074FF8 + bl SetAnimSpriteInitialXOffset ldrh r0, [r5, 0x2] ldrh r1, [r4, 0x22] adds r0, r1 @@ -27,10 +27,10 @@ sub_80A6E48: @ 80A6E48 strh r0, [r4, 0x34] ldrh r0, [r5, 0x6] strh r0, [r4, 0x36] - ldr r1, _080A6E90 @ =move_anim_8074EE0 + ldr r1, _080A6E90 @ =DestroySpriteAndMatrix adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r1, _080A6E94 @ =sub_8074BE4 + ldr r1, _080A6E94 @ =TranslateSpriteInEllipseOverDuration str r1, [r4, 0x1C] adds r0, r4, 0 bl _call_via_r1 @@ -39,8 +39,8 @@ sub_80A6E48: @ 80A6E48 bx r0 .align 2, 0 _080A6E8C: .4byte gBattleAnimArgs -_080A6E90: .4byte move_anim_8074EE0 -_080A6E94: .4byte sub_8074BE4 +_080A6E90: .4byte DestroySpriteAndMatrix +_080A6E94: .4byte TranslateSpriteInEllipseOverDuration thumb_func_end sub_80A6E48 thumb_func_start sub_80A6E98 @@ -166,7 +166,7 @@ sub_80A6F3C: @ 80A6F3C adds r0, r3 strh r2, [r0, 0x24] adds r0, r4, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080A6F7A: ldrh r0, [r4, 0x2E] subs r0, 0x1 @@ -254,7 +254,7 @@ sub_80A7020: @ 80A7020 push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r1, _080A704C @ =gBattleAnimArgs ldrh r0, [r1, 0x4] strh r0, [r4, 0x2E] @@ -262,7 +262,7 @@ sub_80A7020: @ 80A7020 strh r0, [r4, 0x30] ldrh r0, [r1, 0x8] strh r0, [r4, 0x38] - ldr r0, _080A7050 @ =sub_8074C44 + ldr r0, _080A7050 @ =WaitAnimForDuration str r0, [r4, 0x1C] ldr r1, _080A7054 @ =sub_80A7058 adds r0, r4, 0 @@ -272,7 +272,7 @@ sub_80A7020: @ 80A7020 bx r0 .align 2, 0 _080A704C: .4byte gBattleAnimArgs -_080A7050: .4byte sub_8074C44 +_080A7050: .4byte WaitAnimForDuration _080A7054: .4byte sub_80A7058 thumb_func_end sub_80A7020 @@ -438,7 +438,7 @@ _080A7176: _080A718A: strh r1, [r0, 0x26] adds r0, r4, 0 - bl sub_80759DC + bl SetBattlerSpriteYOffsetFromRotation ldr r0, _080A71C8 @ =gTasks adds r1, r6, r5 lsls r1, 3 @@ -479,7 +479,7 @@ _080A71D0: sub_80A71D8: @ 80A71D8 push {r4,r5,lr} adds r4, r0, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldr r0, _080A71FC @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -544,7 +544,7 @@ _080A724C: orrs r0, r1 strb r0, [r2] _080A7260: - ldr r0, _080A7274 @ =sub_8074F6C + ldr r0, _080A7274 @ =RunStoredCallbackWhenAnimEnds str r0, [r4, 0x1C] ldr r1, _080A7278 @ =DestroyAnimSprite adds r0, r4, 0 @@ -553,7 +553,7 @@ _080A7260: pop {r0} bx r0 .align 2, 0 -_080A7274: .4byte sub_8074F6C +_080A7274: .4byte RunStoredCallbackWhenAnimEnds _080A7278: .4byte DestroyAnimSprite thumb_func_end sub_80A71D8 @@ -562,8 +562,8 @@ sub_80A727C: @ 80A727C push {r4,lr} adds r4, r0, 0 movs r1, 0 - bl sub_8075160 - ldr r0, _080A7298 @ =sub_8074F50 + bl InitSpritePosToAnimAttacker + ldr r0, _080A7298 @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r4, 0x1C] ldr r1, _080A729C @ =sub_80A72A0 adds r0, r4, 0 @@ -572,7 +572,7 @@ sub_80A727C: @ 80A727C pop {r0} bx r0 .align 2, 0 -_080A7298: .4byte sub_8074F50 +_080A7298: .4byte RunStoredCallbackWhenAffineAnimEnds _080A729C: .4byte sub_80A72A0 thumb_func_end sub_80A727C @@ -635,7 +635,7 @@ _080A72EC: _080A730E: adds r0, r5, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r4, _080A73BC @ =gBattleAnimTarget ldrb r0, [r4] movs r1, 0x2 @@ -671,7 +671,7 @@ _080A730E: subs r1, r2 lsls r1, 16 asrs r1, 16 - bl sub_8075B30 + bl ArcTan2Neg lsls r0, 16 movs r1, 0xF0 lsls r1, 24 @@ -692,7 +692,7 @@ _080A7380: adds r0, r5, 0 movs r1, 0 adds r2, r3, 0 - bl sub_8075A1C + bl TrySetSpriteRotScale ldrh r0, [r6, 0x8] strh r0, [r5, 0x2E] mov r0, r8 @@ -1276,7 +1276,7 @@ _080A77B6: movs r1, 0 mov r2, sp mov r3, r10 - bl sub_8076D9C + bl SetAverageBattlerPositions b _080A7842 .align 2, 0 _080A7810: .4byte gBattleAnimAttacker @@ -1506,7 +1506,7 @@ sub_80A79E8: @ 80A79E8 push {r4,lr} adds r4, r0, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080A7A10 @ =gUnknown_83E3D18 ldrh r0, [r0, 0x2] bl IndexOfSpritePaletteTag @@ -1592,7 +1592,7 @@ sub_80A7A88: @ 80A7A88 sub sp, 0x4 adds r5, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r4, _080A7B28 @ =gBattleAnimTarget ldrb r0, [r4] movs r1, 0x2 @@ -1636,7 +1636,7 @@ _080A7ACC: subs r1, r2 lsls r1, 16 asrs r1, 16 - bl sub_8075B30 + bl ArcTan2Neg lsls r0, 16 movs r1, 0xC0 lsls r1, 24 @@ -1648,7 +1648,7 @@ _080A7ACC: adds r0, r5, 0 movs r1, 0 adds r2, r3, 0 - bl sub_8075A1C + bl TrySetSpriteRotScale ldrh r0, [r4, 0x8] strh r0, [r5, 0x2E] strh r6, [r5, 0x32] @@ -1748,7 +1748,7 @@ sub_80A7BC4: @ 80A7BC4 push {r4,r5,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker movs r0, 0x14 strh r0, [r4, 0x2E] ldr r5, _080A7C10 @ =gBattleAnimTarget @@ -1907,7 +1907,7 @@ sub_80A7D04: @ 80A7D04 push {r4,lr} adds r4, r0, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080A7D54 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -1929,7 +1929,7 @@ _080A7D22: strh r0, [r4, 0x34] ldrh r0, [r1, 0x6] strh r0, [r4, 0x36] - ldr r0, _080A7D5C @ =sub_8074A80 + ldr r0, _080A7D5C @ =TranslateSpriteInCircleOverDuration str r0, [r4, 0x1C] ldr r1, _080A7D60 @ =DestroyAnimSprite adds r0, r4, 0 @@ -1943,7 +1943,7 @@ _080A7D22: .align 2, 0 _080A7D54: .4byte gBattleAnimAttacker _080A7D58: .4byte gBattleAnimArgs -_080A7D5C: .4byte sub_8074A80 +_080A7D5C: .4byte TranslateSpriteInCircleOverDuration _080A7D60: .4byte DestroyAnimSprite thumb_func_end sub_80A7D04 @@ -2094,7 +2094,7 @@ _080A7E48: adds r0, r6 strh r0, [r5, 0x36] adds r0, r5, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldrh r0, [r7] strh r0, [r5, 0x38] ldrh r0, [r5, 0x2E] @@ -2119,7 +2119,7 @@ _080A7EB8: .4byte sub_80A7EBC sub_80A7EBC: @ 80A7EBC push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080A7F20 @@ -2233,7 +2233,7 @@ _080A7F90: .4byte sub_80A7F94 sub_80A7F94: @ 80A7F94 push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080A7FA8 @@ -2273,7 +2273,7 @@ sub_80A7FB0: @ 80A7FB0 lsrs r0, 4 adds r0, 0x10 movs r1, 0 - bl sub_8075B48 + bl SetGreyscaleOrOriginalPalette ldr r1, _080A800C @ =gTasks lsls r0, r5, 2 adds r0, r5 @@ -2327,7 +2327,7 @@ sub_80A8014: @ 80A8014 lsrs r0, 4 adds r0, 0x10 movs r1, 0x1 - bl sub_8075B48 + bl SetGreyscaleOrOriginalPalette adds r0, r5, 0 bl DestroyAnimVisualTask _080A8064: @@ -2441,7 +2441,7 @@ _080A8128: movs r3, 0 bl SetSpriteRotScale ldrb r0, [r4, 0x8] - bl sub_8076440 + bl SetBattlerSpriteYOffsetFromYScale movs r2, 0xC ldrsh r0, [r4, r2] cmp r0, 0x20 @@ -2473,7 +2473,7 @@ _080A816E: movs r3, 0 bl SetSpriteRotScale ldrb r0, [r4, 0x8] - bl sub_8076440 + bl SetBattlerSpriteYOffsetFromYScale movs r0, 0x2 strh r0, [r4, 0xA] b _080A81F6 @@ -2504,7 +2504,7 @@ _080A81A4: movs r3, 0 bl SetSpriteRotScale ldrb r0, [r4, 0x8] - bl sub_8076440 + bl SetBattlerSpriteYOffsetFromYScale movs r2, 0xC ldrsh r0, [r4, r2] cmp r0, 0x20 @@ -2733,7 +2733,7 @@ _080A8364: strh r2, [r4, 0x10] ldr r2, _080A8390 @ =gUnknown_83E3E60 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r0, _080A8394 @ =sub_80A8398 str r0, [r4] _080A838A: @@ -2774,7 +2774,7 @@ _080A83C0: b _080A84A8 _080A83CA: adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData ldrh r2, [r4, 0x10] adds r2, 0x3 strh r2, [r4, 0x10] @@ -2801,7 +2801,7 @@ _080A83CA: _080A83FC: .4byte gSprites _080A8400: adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData ldr r2, _080A8430 @ =gSprites movs r0, 0x8 ldrsh r1, [r4, r0] @@ -2853,7 +2853,7 @@ _080A845C: b _080A84A8 _080A8464: adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 lsrs r5, r0, 24 cmp r5, 0 @@ -2881,7 +2881,7 @@ _080A849C: ldrb r1, [r4, 0x8] ldr r2, _080A84B0 @ =gUnknown_83E3E60 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData strh r5, [r4, 0xA] _080A84A8: pop {r4-r6} @@ -2908,7 +2908,7 @@ sub_80A84B4: @ 80A84B4 lsrs r1, 24 ldr r2, _080A84E8 @ =gUnknown_83E3E80 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r0, _080A84EC @ =sub_80A84F0 str r0, [r4] pop {r4} @@ -2930,7 +2930,7 @@ sub_80A84F0: @ 80A84F0 lsls r0, 3 ldr r1, _080A8518 @ =gTasks adds r0, r1 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 cmp r0, 0 bne _080A8510 @@ -2998,7 +2998,7 @@ _080A856A: ldr r1, _080A85A4 @ =DestroyAnimSprite adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A85A8 @ =sub_8074D00 + ldr r0, _080A85A8 @ =TranslateSpriteLinearFixedPoint str r0, [r4, 0x1C] pop {r4,r5} pop {r0} @@ -3007,7 +3007,7 @@ _080A856A: _080A859C: .4byte 0x0000ffc0 _080A85A0: .4byte gBattleAnimAttacker _080A85A4: .4byte DestroyAnimSprite -_080A85A8: .4byte sub_8074D00 +_080A85A8: .4byte TranslateSpriteLinearFixedPoint thumb_func_end sub_80A851C thumb_func_start sub_80A85AC @@ -3064,10 +3064,10 @@ _080A85E4: movs r0, 0x8 strh r0, [r6, 0x22] _080A8616: - ldr r1, _080A8630 @ =move_anim_8074EE0 + ldr r1, _080A8630 @ =DestroySpriteAndMatrix adds r0, r6, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080A8634 @ =sub_8074F50 + ldr r0, _080A8634 @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r6, 0x1C] pop {r4-r6} pop {r0} @@ -3075,8 +3075,8 @@ _080A8616: .align 2, 0 _080A8628: .4byte gBattleAnimTarget _080A862C: .4byte gBattleAnimArgs -_080A8630: .4byte move_anim_8074EE0 -_080A8634: .4byte sub_8074F50 +_080A8630: .4byte DestroySpriteAndMatrix +_080A8634: .4byte RunStoredCallbackWhenAffineAnimEnds thumb_func_end sub_80A85AC thumb_func_start sub_80A8638 @@ -3099,7 +3099,7 @@ sub_80A8638: @ 80A8638 strh r0, [r4, 0xA] ldr r2, _080A8670 @ =gUnknown_83E3F1C adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r0, _080A8674 @ =sub_80A8678 str r0, [r4] pop {r4} @@ -3121,7 +3121,7 @@ sub_80A8678: @ 80A8678 lsls r0, 3 ldr r1, _080A86A0 @ =gTasks adds r0, r1 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 cmp r0, 0 bne _080A8698 @@ -3389,7 +3389,7 @@ sub_80A8874: @ 80A8874 adds r5, r1, r0 ldr r4, _080A88C8 @ =gBattleAnimTarget ldrb r0, [r4] - bl sub_807492C + bl GetBattlerYCoordWithElevation lsls r0, 24 lsrs r0, 24 adds r0, 0x20 @@ -3402,10 +3402,10 @@ sub_80A8874: @ 80A8874 strh r1, [r5, 0x10] strh r1, [r5, 0x12] ldrb r0, [r4] - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr strh r0, [r5, 0x26] ldrb r0, [r4] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -3609,7 +3609,7 @@ sub_80A8A1C: @ 80A8A1C movs r5, 0 strh r0, [r4, 0x20] ldrb r0, [r6] - bl sub_807492C + bl GetBattlerYCoordWithElevation lsls r0, 24 lsrs r0, 24 adds r0, 0x10 @@ -3622,7 +3622,7 @@ sub_80A8A1C: @ 80A8A1C strh r5, [r4, 0x36] ldrb r0, [r6] movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x2 strh r0, [r4, 0x38] movs r0, 0x3F @@ -3864,7 +3864,7 @@ _080A8BF2: adds r1, r4, 0 mov r2, sp adds r3, r7, 0 - bl sub_8076D9C + bl SetAverageBattlerPositions cmp r4, 0 bne _080A8C30 adds r0, r5, 0 @@ -3919,7 +3919,7 @@ _080A8C80: .4byte sub_8075D9C sub_80A8C84: @ 80A8C84 push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080A8C9E @@ -4128,7 +4128,7 @@ _080A8DFA: mov r2, sp mov r3, sp adds r3, 0x2 - bl sub_8076D9C + bl SetAverageBattlerPositions b _080A8E6C .align 2, 0 _080A8E40: .4byte gSprites @@ -4192,7 +4192,7 @@ _080A8E9E: ldrh r0, [r2] strh r0, [r5, 0x2E] adds r0, r5, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldr r1, _080A8EE4 @ =sub_80A8C84 str r1, [r5, 0x1C] adds r0, r5, 0 @@ -4252,7 +4252,7 @@ sub_80A8F38: @ 80A8F38 push {r4,lr} adds r4, r0, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080A8F6C @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -4572,7 +4572,7 @@ sub_80A917C: @ 80A917C strh r1, [r4, 0x8] ldr r2, _080A91B0 @ =gUnknown_83E4128 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r0, _080A91B4 @ =sub_80A91B8 str r0, [r4] pop {r4} @@ -4595,7 +4595,7 @@ sub_80A91B8: @ 80A91B8 ldr r1, _080A9208 @ =gTasks adds r4, r0, r1 adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 lsrs r3, r0, 24 cmp r3, 0 @@ -5411,7 +5411,7 @@ sub_80A97E8: @ 80A97E8 push {r4-r6,lr} adds r5, r0, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r6, _080A9850 @ =gBattleAnimAttacker ldrb r0, [r6] bl GetBattlerSide @@ -5474,7 +5474,7 @@ sub_80A9860: @ 80A9860 bne _080A987A adds r0, r4, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker _080A987A: movs r1, 0x30 ldrsh r0, [r4, r1] @@ -5708,7 +5708,7 @@ sub_80A9A20: @ 80A9A20 lsrs r1, 24 ldr r2, _080A9A74 @ =gUnknown_83E4200 adds r0, r5, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r1, _080A9A78 @ =gSprites lsls r0, r4, 4 adds r0, r4 @@ -5731,7 +5731,7 @@ _080A9A7C: negs r0, r0 strh r0, [r4, 0x24] adds r0, r5, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 lsrs r0, 24 cmp r0, 0 @@ -5777,7 +5777,7 @@ sub_80A9AB0: @ 80A9AB0 lsrs r1, 24 ldr r2, _080A9B04 @ =gUnknown_83E4200 adds r0, r5, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r1, _080A9B08 @ =gSprites lsls r0, r4, 4 adds r0, r4 @@ -5800,7 +5800,7 @@ _080A9B0C: negs r0, r0 strh r0, [r4, 0x24] adds r0, r5, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 lsrs r0, 24 cmp r0, 0 @@ -5822,7 +5822,7 @@ sub_80A9B40: @ 80A9B40 push {r4,r5,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker movs r0, 0x5F strh r0, [r4, 0x2E] ldrh r0, [r4, 0x20] @@ -5843,7 +5843,7 @@ sub_80A9B40: @ 80A9B40 lsrs r0, 24 strh r0, [r4, 0x36] adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldr r0, _080A9B88 @ =sub_80A9B8C str r0, [r4, 0x1C] pop {r4,r5} @@ -5858,7 +5858,7 @@ _080A9B88: .4byte sub_80A9B8C sub_80A9B8C: @ 80A9B8C push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 bne _080A9BB6 @@ -5967,7 +5967,7 @@ sub_80A9C4C: @ 80A9C4C strh r1, [r0, 0x2E] ldrh r1, [r2, 0x2] strh r1, [r0, 0x30] - ldr r1, _080A9C74 @ =sub_8074C44 + ldr r1, _080A9C74 @ =WaitAnimForDuration str r1, [r0, 0x1C] ldr r1, _080A9C78 @ =sub_80A9C7C bl StoreSpriteCallbackInData6 @@ -5975,7 +5975,7 @@ sub_80A9C4C: @ 80A9C4C bx r0 .align 2, 0 _080A9C70: .4byte gBattleAnimArgs -_080A9C74: .4byte sub_8074C44 +_080A9C74: .4byte WaitAnimForDuration _080A9C78: .4byte sub_80A9C7C thumb_func_end sub_80A9C4C @@ -6082,7 +6082,7 @@ _080A9D2A: mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080A9DAC @ =gFile_graphics_battle_anims_backgrounds_attract_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080A9DB0 @ =gFile_graphics_battle_anims_backgrounds_attract_sheet @@ -6360,7 +6360,7 @@ _080A9F98: mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080A9FB8 @ =gFile_graphics_battle_anims_backgrounds_scary_face_player_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap b _080A9FC6 .align 2, 0 _080A9FB4: .4byte gBattleAnimTarget @@ -6369,7 +6369,7 @@ _080A9FBC: mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080AA010 @ =gFile_graphics_battle_anims_backgrounds_scary_face_opponent_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap _080A9FC6: mov r0, sp ldrb r0, [r0, 0x9] @@ -6907,7 +6907,7 @@ sub_80AA3F0: @ 80AA3F0 push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080AA404 @ =sub_80AA3D4 str r0, [r4, 0x1C] pop {r4} @@ -7439,7 +7439,7 @@ sub_80AA7C8: @ 80AA7C8 adds r4, r0 ldr r2, _080AA804 @ =gUnknown_83E4410 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r0, _080AA808 @ =sub_80AA80C str r0, [r4] pop {r4,r5} @@ -7462,7 +7462,7 @@ sub_80AA80C: @ 80AA80C lsls r0, 3 ldr r1, _080AA834 @ =gTasks adds r0, r1 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 cmp r0, 0 bne _080AA82C @@ -7640,7 +7640,7 @@ _080AA95A: lsrs r0, 4 adds r0, 0x10 movs r1, 0 - bl sub_8075B48 + bl SetGreyscaleOrOriginalPalette _080AA978: movs r0, 0x2E ldrsh r1, [r4, r0] @@ -7857,7 +7857,7 @@ sub_80AAAE4: @ 80AAAE4 adds r3, r5, 0 adds r3, 0x22 movs r1, 0 - bl sub_8076D9C + bl SetAverageBattlerPositions ldrh r0, [r5, 0x22] adds r0, 0x28 strh r0, [r5, 0x22] diff --git a/asm/battle_anim_effects_3.s b/asm/battle_anim_effects_3.s index 17a770d64..004ad8786 100644 --- a/asm/battle_anim_effects_3.s +++ b/asm/battle_anim_effects_3.s @@ -128,7 +128,7 @@ sub_80DE39C: @ 80DE39C adds r4, r0, 0 movs r0, 0x5A strh r0, [r4, 0x2E] - ldr r0, _080DE3D8 @ =sub_8074C44 + ldr r0, _080DE3D8 @ =WaitAnimForDuration str r0, [r4, 0x1C] movs r0, 0x7 strh r0, [r4, 0x30] @@ -152,7 +152,7 @@ sub_80DE39C: @ 80DE39C pop {r0} bx r0 .align 2, 0 -_080DE3D8: .4byte sub_8074C44 +_080DE3D8: .4byte WaitAnimForDuration _080DE3DC: .4byte sub_80DE3E0 thumb_func_end sub_80DE39C @@ -228,7 +228,7 @@ sub_80DE440: @ 80DE440 adds r6, r0, 0 adds r0, r5, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldrh r0, [r5, 0x20] subs r0, r7 lsls r0, 16 @@ -237,7 +237,7 @@ sub_80DE440: @ 80DE440 subs r1, r6 lsls r1, 16 asrs r1, 16 - bl sub_8075B30 + bl ArcTan2Neg lsls r0, 16 movs r1, 0xC0 lsls r1, 23 @@ -259,7 +259,7 @@ _080DE49E: adds r0, r5, 0 movs r1, 0 adds r2, r3, 0 - bl sub_8075A1C + bl TrySetSpriteRotScale ldr r0, _080DE4D0 @ =gBattleAnimArgs ldrh r0, [r0, 0x4] strh r0, [r5, 0x2E] @@ -799,7 +799,7 @@ sub_80DE8B0: @ 80DE8B0 sub sp, 0x4 adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080DE914 @ =gBattleAnimTarget ldrb r0, [r0] mov r5, sp @@ -807,7 +807,7 @@ sub_80DE8B0: @ 80DE8B0 movs r1, 0 mov r2, sp adds r3, r5, 0 - bl sub_8076D9C + bl SetAverageBattlerPositions ldr r0, _080DE918 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -834,7 +834,7 @@ _080DE8E4: ldr r0, _080DE920 @ =0x0000ffce strh r0, [r4, 0x38] adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080DE924 @ =sub_80DE928 str r0, [r4, 0x1C] add sp, 0x4 @@ -853,7 +853,7 @@ _080DE924: .4byte sub_80DE928 sub_80DE928: @ 80DE928 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080DE94A @@ -861,7 +861,7 @@ sub_80DE928: @ 80DE928 movs r0, 0x1E strh r0, [r4, 0x2E] strh r1, [r4, 0x30] - ldr r0, _080DE950 @ =sub_8074C44 + ldr r0, _080DE950 @ =WaitAnimForDuration str r0, [r4, 0x1C] ldr r1, _080DE954 @ =sub_80DE958 adds r0, r4, 0 @@ -871,7 +871,7 @@ _080DE94A: pop {r0} bx r0 .align 2, 0 -_080DE950: .4byte sub_8074C44 +_080DE950: .4byte WaitAnimForDuration _080DE954: .4byte sub_80DE958 thumb_func_end sub_80DE928 @@ -918,17 +918,17 @@ _080DE998: sub_80DE99C: @ 80DE99C push {r4,r5,lr} adds r4, r0, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldr r5, _080DE9CC @ =gBattleAnimArgs movs r0, 0 ldrsh r1, [r5, r0] adds r0, r4, 0 - bl sub_8074FF8 + bl SetAnimSpriteInitialXOffset ldrh r0, [r5, 0x2] ldrh r1, [r4, 0x22] adds r0, r1 strh r0, [r4, 0x22] - ldr r0, _080DE9D0 @ =sub_8074F6C + ldr r0, _080DE9D0 @ =RunStoredCallbackWhenAnimEnds str r0, [r4, 0x1C] ldr r1, _080DE9D4 @ =DestroyAnimSprite adds r0, r4, 0 @@ -938,7 +938,7 @@ sub_80DE99C: @ 80DE99C bx r0 .align 2, 0 _080DE9CC: .4byte gBattleAnimArgs -_080DE9D0: .4byte sub_8074F6C +_080DE9D0: .4byte RunStoredCallbackWhenAnimEnds _080DE9D4: .4byte DestroyAnimSprite thumb_func_end sub_80DE99C @@ -951,12 +951,12 @@ sub_80DE9D8: @ 80DE9D8 cmp r0, 0 bne _080DEA38 adds r0, r4, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldr r5, _080DEA14 @ =gBattleAnimArgs movs r2, 0 ldrsh r1, [r5, r2] adds r0, r4, 0 - bl sub_8074FF8 + bl SetAnimSpriteInitialXOffset bl IsContest lsls r0, 24 cmp r0, 0 @@ -1140,7 +1140,7 @@ sub_80DEB20: @ 80DEB20 bl SetGpuReg adds r0, r5, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldrb r1, [r5, 0x1] movs r0, 0xD negs r0, r0 @@ -1712,11 +1712,11 @@ _080DEFC8: ldr r4, _080DF010 @ =gBattleAnimTarget _080DEFCA: ldrb r0, [r4] - bl sub_807492C + bl GetBattlerYCoordWithElevation lsls r0, 24 lsrs r6, r0, 24 ldrb r0, [r4] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r7, r0, 24 adds r0, r6, 0 @@ -2155,7 +2155,7 @@ _080DF324: lsrs r1, 24 ldr r2, _080DF348 @ =gUnknown_83FF080 adds r0, r6, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldrh r0, [r6, 0xA] adds r0, 0x1 strh r0, [r6, 0xA] @@ -2168,7 +2168,7 @@ _080DF344: .4byte SpriteCallbackDummy _080DF348: .4byte gUnknown_83FF080 _080DF34C: adds r0, r6, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 lsrs r0, 24 cmp r0, 0 @@ -2329,7 +2329,7 @@ sub_80DF468: @ 80DF468 bne _080DF47C adds r0, r5, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker _080DF47C: ldrh r0, [r5, 0x2E] adds r0, 0x1 @@ -2443,7 +2443,7 @@ _080DF548: lsrs r1, 24 ldr r2, _080DF564 @ =gUnknown_83FF130 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldrh r0, [r4, 0x8] adds r0, 0x1 strh r0, [r4, 0x8] @@ -2452,7 +2452,7 @@ _080DF548: _080DF564: .4byte gUnknown_83FF130 _080DF568: adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 cmp r0, 0 bne _080DF57A @@ -2863,7 +2863,7 @@ sub_80DF848: @ 80DF848 lsrs r1, 24 ldr r2, _080DF884 @ =gUnknown_83FF198 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldrh r0, [r4, 0x8] adds r0, 0x1 strh r0, [r4, 0x8] @@ -2873,7 +2873,7 @@ _080DF880: .4byte gTasks _080DF884: .4byte gUnknown_83FF198 _080DF888: adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 cmp r0, 0 bne _080DF89A @@ -2907,7 +2907,7 @@ sub_80DF8A0: @ 80DF8A0 lsrs r1, 24 ldr r2, _080DF8DC @ =gUnknown_83FF1C0 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldrh r0, [r4, 0x8] adds r0, 0x1 strh r0, [r4, 0x8] @@ -2917,7 +2917,7 @@ _080DF8D8: .4byte gTasks _080DF8DC: .4byte gUnknown_83FF1C0 _080DF8E0: adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 cmp r0, 0 bne _080DF8F2 @@ -2943,7 +2943,7 @@ sub_80DF8F8: @ 80DF8F8 _080DF90A: adds r0, r4, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker movs r0, 0x90 lsls r0, 4 strh r0, [r4, 0x30] @@ -3008,7 +3008,7 @@ sub_80DF964: @ 80DF964 lsrs r1, 24 ldr r2, _080DF9A0 @ =gUnknown_83FF210 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldrh r0, [r4, 0x8] adds r0, 0x1 strh r0, [r4, 0x8] @@ -3018,7 +3018,7 @@ _080DF99C: .4byte gTasks _080DF9A0: .4byte gUnknown_83FF210 _080DF9A4: adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 cmp r0, 0 bne _080DF9B6 @@ -3069,7 +3069,7 @@ _080DFA00: bl SetGpuReg ldr r0, _080DFA24 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -3234,7 +3234,7 @@ _080DFB58: bl SetGpuReg ldr r0, _080DFB7C @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -3411,7 +3411,7 @@ _080DFCCE: mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080DFD1C @ =gFile_graphics_battle_anims_masks_morning_sun_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080DFD20 @ =gFile_graphics_battle_anims_masks_morning_sun_sheet @@ -4053,7 +4053,7 @@ _080E01FC: mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080E0250 @ =gFile_graphics_battle_anims_masks_morning_sun_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080E0254 @ =gFile_graphics_battle_anims_masks_morning_sun_sheet @@ -4377,7 +4377,7 @@ sub_80E0488: @ 80E0488 lsrs r1, 24 ldr r2, _080E04C4 @ =gUnknown_83FF290 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldrh r0, [r4, 0x8] adds r0, 0x1 strh r0, [r4, 0x8] @@ -4387,7 +4387,7 @@ _080E04C0: .4byte gTasks _080E04C4: .4byte gUnknown_83FF290 _080E04C8: adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 cmp r0, 0 bne _080E04DA @@ -4410,7 +4410,7 @@ sub_80E04E0: @ 80E04E0 bne _080E04FE adds r0, r4, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldrh r0, [r4, 0x2E] adds r0, 0x1 strh r0, [r4, 0x2E] @@ -4625,7 +4625,7 @@ _080E065C: ldrh r0, [r4, 0x26] lsls r0, 24 lsrs r0, 24 - bl sub_80759DC + bl SetBattlerSpriteYOffsetFromRotation ldrh r0, [r4, 0xA] adds r0, 0x1 strh r0, [r4, 0xA] @@ -4666,7 +4666,7 @@ _080E06B0: ldrh r0, [r4, 0x26] lsls r0, 24 lsrs r0, 24 - bl sub_80759DC + bl SetBattlerSpriteYOffsetFromRotation ldrh r1, [r4, 0xA] adds r1, 0x1 strh r1, [r4, 0xA] @@ -4710,7 +4710,7 @@ _080E0708: ldrh r0, [r4, 0x26] lsls r0, 24 lsrs r0, 24 - bl sub_80759DC + bl SetBattlerSpriteYOffsetFromRotation ldrh r0, [r4, 0xA] adds r0, 0x1 strh r0, [r4, 0xA] @@ -5044,7 +5044,7 @@ _080E09BA: ldrh r0, [r7, 0x26] lsls r0, 24 lsrs r0, 24 - bl sub_80759DC + bl SetBattlerSpriteYOffsetFromRotation ldr r2, _080E0A28 @ =gSprites movs r0, 0x26 ldrsh r1, [r7, r0] @@ -5276,7 +5276,7 @@ _080E0B88: movs r3, 0 bl SetSpriteRotScale adds r0, r5, 0 - bl sub_8076440 + bl SetBattlerSpriteYOffsetFromYScale lsls r2, r5, 4 b _080E0BE8 _080E0BA0: @@ -5295,7 +5295,7 @@ _080E0BB2: movs r1, 0xD0 bl SetSpriteRotScale adds r0, r5, 0 - bl sub_8076440 + bl SetBattlerSpriteYOffsetFromYScale bl IsContest lsls r0, 24 cmp r0, 0 @@ -5551,7 +5551,7 @@ sub_80E0D74: @ 80E0D74 strh r0, [r5, 0x2E] adds r0, r5, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldrb r1, [r5, 0x1] movs r0, 0xD negs r0, r0 @@ -5979,7 +5979,7 @@ _080E110E: _080E1112: ldr r0, _080E1200 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r7, r0, 24 ldr r5, _080E1200 @ =gBattleAnimAttacker @@ -6186,7 +6186,7 @@ sub_80E1274: @ 80E1274 str r4, [sp] adds r0, r6, 0 movs r1, 0x1 - bl sub_8075A1C + bl TrySetSpriteRotScale ldrh r0, [r5, 0x20] adds r0, 0x1 strh r0, [r5, 0x20] @@ -6197,8 +6197,8 @@ sub_80E1274: @ 80E1274 adds r0, r6, 0 bl sub_8075AD8 adds r0, r6, 0 - bl sub_8076B20 - ldr r0, _080E12F4 @ =sub_8074FA8 + bl DestroySpriteAndFreeResources_ + ldr r0, _080E12F4 @ =DestroyAnimVisualTaskAndDisableBlend str r0, [r5] _080E12E2: add sp, 0x4 @@ -6208,7 +6208,7 @@ _080E12E2: .align 2, 0 _080E12EC: .4byte gTasks _080E12F0: .4byte gSprites -_080E12F4: .4byte sub_8074FA8 +_080E12F4: .4byte DestroyAnimVisualTaskAndDisableBlend thumb_func_end sub_80E1274 thumb_func_start sub_80E12F8 @@ -6262,7 +6262,7 @@ _080E1326: strh r0, [r4, 0x18] _080E1358: adds r0, r5, 0 - bl sub_807492C + bl GetBattlerYCoordWithElevation lsls r0, 24 lsrs r0, 24 subs r0, 0x22 @@ -6281,7 +6281,7 @@ _080E136C: lsrs r0, 24 strh r0, [r4, 0x26] adds r0, r5, 0 - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -6389,7 +6389,7 @@ sub_80E1450: @ 80E1450 ldr r1, _080E1484 @ =gTasks adds r6, r0, r1 ldrb r0, [r6, 0x12] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -6750,7 +6750,7 @@ sub_80E1704: @ 80E1704 strh r1, [r4, 0x26] ldr r2, _080E1744 @ =gUnknown_83FF3D0 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r0, _080E1748 @ =sub_80E174C str r0, [r4] pop {r4} @@ -6826,7 +6826,7 @@ _080E17C0: adds r0, r4 lsls r0, 3 adds r0, r6 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 cmp r0, 0 bne _080E17D8 @@ -6920,7 +6920,7 @@ sub_80E186C: @ 80E186C adds r4, r0, 0 ldrh r6, [r4, 0x20] ldrh r5, [r4, 0x22] - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldr r0, _080E18B4 @ =gBattleAnimArgs ldrb r1, [r0] adds r0, r4, 0 @@ -7001,7 +7001,7 @@ sub_80E18BC: @ 80E18BC cmp r0, 0x3 ble _080E1922 adds r0, r5, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080E1922: pop {r4,r5} pop {r0} @@ -7626,7 +7626,7 @@ _080E1DA2: strh r1, [r5, 0x26] ldr r2, _080E1DF8 @ =gUnknown_83FF52C adds r0, r5, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r0, _080E1DFC @ =sub_80E1E00 str r0, [r5] pop {r4,r5} @@ -7679,7 +7679,7 @@ _080E1E3A: bl sub_80E1E98 _080E1E4A: adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 lsrs r1, r0, 24 cmp r1, 0 @@ -7701,7 +7701,7 @@ _080E1E6C: lsrs r1, 24 ldr r2, _080E1E80 @ =gUnknown_83FF52C adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData b _080E1E92 .align 2, 0 _080E1E80: .4byte gUnknown_83FF52C @@ -8168,7 +8168,7 @@ sub_80E21CC: @ 80E21CC adds r4, r0, 0 ldrb r0, [r5] movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r4, 24 lsrs r4, 24 lsls r0, 16 @@ -8190,7 +8190,7 @@ _080E2224: adds r4, r0, 0 ldrb r0, [r5] movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r4, 24 lsrs r4, 24 lsls r0, 16 @@ -8210,7 +8210,7 @@ _080E2248: adds r4, r0, 0 ldrb r0, [r5] movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r4, 24 lsrs r4, 24 lsls r0, 16 @@ -8565,7 +8565,7 @@ sub_80E24E0: @ 80E24E0 ldr r1, _080E2510 @ =DestroyAnimSprite adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080E2514 @ =sub_8075764 + ldr r0, _080E2514 @ =InitAndRunAnimFastLinearTranslation str r0, [r4, 0x1C] pop {r4} pop {r0} @@ -8573,7 +8573,7 @@ sub_80E24E0: @ 80E24E0 .align 2, 0 _080E250C: .4byte gBattleAnimArgs _080E2510: .4byte DestroyAnimSprite -_080E2514: .4byte sub_8075764 +_080E2514: .4byte InitAndRunAnimFastLinearTranslation thumb_func_end sub_80E24E0 thumb_func_start sub_80E2518 @@ -8622,7 +8622,7 @@ sub_80E2518: @ 80E2518 mov r1, r8 ldrb r0, [r1] movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r4, 24 lsrs r4, 24 lsls r0, 16 @@ -8694,7 +8694,7 @@ _080E258A: adds r0, r1 lsls r0, 2 adds r0, r4 - bl sub_8075068 + bl InitAnimArcTranslation mov r1, r10 ldrb r0, [r1] bl GetBattlerSide @@ -8778,7 +8778,7 @@ _080E269A: lsls r0, 2 ldr r1, _080E26CC @ =gSprites adds r0, r1 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc ldrh r0, [r4, 0xC] adds r0, 0x1 strh r0, [r4, 0xC] @@ -8797,7 +8797,7 @@ _080E26D0: lsls r0, 2 ldr r1, _080E26F0 @ =gSprites adds r0, r1 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080E276E @@ -8938,7 +8938,7 @@ _080E27C0: strb r0, [r4, 0x3] adds r0, r5, 0 movs r1, 0x4 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x8 b _080E280E .align 2, 0 @@ -8948,7 +8948,7 @@ _080E2800: .4byte 0xfffffc00 _080E2804: adds r0, r5, 0 movs r1, 0x5 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 _080E280E: strh r0, [r4, 0x20] @@ -9098,7 +9098,7 @@ _080E28F8: strh r1, [r4, 0x26] ldr r2, _080E292C @ =gUnknown_83FF65C adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r0, _080E2930 @ =sub_80E2934 str r0, [r4] _080E2920: @@ -9160,7 +9160,7 @@ _080E298C: strh r1, [r0, 0x24] _080E298E: adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 lsrs r5, r0, 24 cmp r5, 0 @@ -9188,7 +9188,7 @@ _080E298E: lsls r1, 24 lsrs r1, 24 ldr r2, _080E29E0 @ =gUnknown_83FF65C - bl sub_80762D0 + bl PrepareAffineAnimInTaskData strh r5, [r4, 0xA] strh r5, [r4, 0xC] b _080E29EA @@ -9231,7 +9231,7 @@ _080E2A0E: strh r0, [r5, 0x20] ldrb r0, [r4] movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr strh r0, [r5, 0x22] movs r1, 0x22 ldrsh r0, [r5, r1] @@ -9902,7 +9902,7 @@ sub_80E2F14: @ 80E2F14 bne _080E2F38 adds r0, r4, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080E2F34 @ =gBattleAnimAttacker b _080E2F3A .align 2, 0 @@ -9932,7 +9932,7 @@ _080E2F5E: ldrh r0, [r4, 0x3C] lsls r0, 24 lsrs r0, 24 - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r2, 0x3 ands r2, r0 lsls r2, 2 @@ -10010,7 +10010,7 @@ _080E2FFC: lsls r0, 24 lsrs r0, 24 movs r1, 0x5 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x4 lsls r0, 16 lsrs r5, r0, 16 @@ -10024,7 +10024,7 @@ _080E3018: lsls r0, 24 lsrs r0, 24 movs r1, 0x5 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x4 lsls r0, 16 lsrs r5, r0, 16 @@ -10032,7 +10032,7 @@ _080E3018: lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x4 b _080E3076 _080E303A: @@ -10040,7 +10040,7 @@ _080E303A: lsls r0, 24 lsrs r0, 24 movs r1, 0x4 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x4 lsls r0, 16 lsrs r5, r0, 16 @@ -10054,7 +10054,7 @@ _080E3056: lsls r0, 24 lsrs r0, 24 movs r1, 0x4 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x4 lsls r0, 16 lsrs r5, r0, 16 @@ -10063,7 +10063,7 @@ _080E3056: lsrs r0, 24 movs r1, 0x2 _080E3070: - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x4 _080E3076: lsls r0, 16 @@ -10107,11 +10107,11 @@ _080E30B2: strh r0, [r4, 0x34] strh r1, [r4, 0x36] adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation b _080E3188 _080E30C8: adds r0, r4, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080E3196 @@ -11699,7 +11699,7 @@ _080E3D0C: lsls r0, 2 ldr r5, _080E3D5C @ =gSprites adds r0, r5 - bl sub_8076B20 + bl DestroySpriteAndFreeResources_ ldr r0, _080E3D60 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -12532,7 +12532,7 @@ sub_80E43A4: @ 80E43A4 strh r0, [r5, 0x20] ldrb r0, [r4] movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr strh r0, [r5, 0x22] lsls r0, 16 asrs r0, 16 @@ -12688,7 +12688,7 @@ _080E44D6: b _080E44E4 _080E44DE: adds r0, r4, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080E44E4: pop {r4} pop {r0} @@ -12764,7 +12764,7 @@ sub_80E4540: @ 80E4540 strh r1, [r4, 0x26] ldr r2, _080E4580 @ =gUnknown_83FF7A8 adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r0, _080E4584 @ =sub_80E4588 str r0, [r4] pop {r4} @@ -12840,7 +12840,7 @@ _080E45FC: adds r0, r4 lsls r0, 3 adds r0, r6 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 cmp r0, 0 bne _080E4614 diff --git a/asm/battle_anim_mons.s b/asm/battle_anim_mons.s deleted file mode 100644 index 0af94400b..000000000 --- a/asm/battle_anim_mons.s +++ /dev/null @@ -1,6343 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start GetBattlerSpriteCoord -GetBattlerSpriteCoord: @ 8074480 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - cmp r4, 0x4 - bhi _08074500 - lsls r0, r4, 2 - ldr r1, _08074498 @ =_0807449C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08074498: .4byte _0807449C - .align 2, 0 -_0807449C: - .4byte _080744B0 - .4byte _080744D8 - .4byte _080744B0 - .4byte _08074500 - .4byte _08074500 -_080744B0: - ldr r4, _080744D0 @ =gUnknown_83AE01C - adds r0, r5, 0 - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 22 - ldr r1, _080744D4 @ =gBattleTypeFlags - ldr r1, [r1] - movs r2, 0x1 - ands r1, r2 - lsls r1, 4 - adds r0, r1 - adds r0, r4 - ldrb r0, [r0] - b _08074588 - .align 2, 0 -_080744D0: .4byte gUnknown_83AE01C -_080744D4: .4byte gBattleTypeFlags -_080744D8: - ldr r4, _080744F8 @ =gUnknown_83AE01C - adds r0, r5, 0 - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 22 - ldr r1, _080744FC @ =gBattleTypeFlags - ldr r1, [r1] - movs r2, 0x1 - ands r1, r2 - lsls r1, 4 - adds r0, r1 - adds r0, r4 - ldrb r0, [r0, 0x1] - b _08074588 - .align 2, 0 -_080744F8: .4byte gUnknown_83AE01C -_080744FC: .4byte gBattleTypeFlags -_08074500: - adds r0, r5, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08074538 - ldr r0, _0807452C @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r5, 2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _08074570 - ldr r1, _08074530 @ =gBattlerPartyIndexes - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08074534 @ =gEnemyParty - b _08074556 - .align 2, 0 -_0807452C: .4byte gBattleSpritesDataPtr -_08074530: .4byte gBattlerPartyIndexes -_08074534: .4byte gEnemyParty -_08074538: - ldr r0, _08074564 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r5, 2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _08074570 - ldr r1, _08074568 @ =gBattlerPartyIndexes - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0807456C @ =gPlayerParty -_08074556: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - b _08074572 - .align 2, 0 -_08074564: .4byte gBattleSpritesDataPtr -_08074568: .4byte gBattlerPartyIndexes -_0807456C: .4byte gPlayerParty -_08074570: - ldrh r1, [r1, 0x2] -_08074572: - cmp r4, 0x3 - bne _0807457C - adds r0, r5, 0 - movs r2, 0x1 - b _08074580 -_0807457C: - adds r0, r5, 0 - movs r2, 0 -_08074580: - bl sub_80747AC - lsls r0, 24 - lsrs r0, 24 -_08074588: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end GetBattlerSpriteCoord - - thumb_func_start sub_8074590 -sub_8074590: @ 8074590 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - lsls r1, 16 - lsrs r4, r1, 16 - adds r7, r4, 0 - adds r0, r5, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08074674 - cmp r4, 0xC9 - bne _08074638 - ldr r0, _080745D8 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0] - lsls r1, r5, 2 - adds r0, r1, r0 - ldrh r0, [r0, 0x2] - cmp r0, 0 - bne _080745E4 - ldr r1, _080745DC @ =gBattlerPartyIndexes - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080745E0 @ =gPlayerParty - adds r0, r1 - movs r1, 0 - bl GetMonData - adds r2, r0, 0 - b _080745EA - .align 2, 0 -_080745D8: .4byte gBattleSpritesDataPtr -_080745DC: .4byte gBattlerPartyIndexes -_080745E0: .4byte gPlayerParty -_080745E4: - ldr r0, _08074620 @ =gTransformedPersonalities - adds r0, r1, r0 - ldr r2, [r0] -_080745EA: - movs r0, 0xC0 - lsls r0, 18 - ands r0, r2 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r2 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r2 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r2 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _08074624 - adds r0, r7, 0 - b _0807462E - .align 2, 0 -_08074620: .4byte gTransformedPersonalities -_08074624: - movs r1, 0xCE - lsls r1, 1 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 -_0807462E: - ldr r1, _08074634 @ =gUnknown_8235E6C - lsls r0, 2 - b _0807473C - .align 2, 0 -_08074634: .4byte gUnknown_8235E6C -_08074638: - ldr r0, _0807464C @ =0x00000181 - cmp r4, r0 - bne _08074658 - ldr r0, _08074650 @ =gUnknown_83AE050 - ldr r1, _08074654 @ =gBattleMonForms - adds r1, r5, r1 - ldrb r1, [r1] - adds r1, r0 - ldrb r0, [r1] - b _08074740 - .align 2, 0 -_0807464C: .4byte 0x00000181 -_08074650: .4byte gUnknown_83AE050 -_08074654: .4byte gBattleMonForms -_08074658: - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - bls _08074668 - ldr r0, _08074664 @ =gUnknown_8235E6C - b _0807473E - .align 2, 0 -_08074664: .4byte gUnknown_8235E6C -_08074668: - ldr r1, _08074670 @ =gUnknown_8235E6C - lsls r0, r4, 2 - b _0807473C - .align 2, 0 -_08074670: .4byte gUnknown_8235E6C -_08074674: - cmp r4, 0xC9 - bne _08074704 - ldr r0, _080746A4 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0] - lsls r1, r5, 2 - adds r0, r1, r0 - ldrh r0, [r0, 0x2] - cmp r0, 0 - bne _080746B0 - ldr r1, _080746A8 @ =gBattlerPartyIndexes - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080746AC @ =gEnemyParty - adds r0, r1 - movs r1, 0 - bl GetMonData - adds r2, r0, 0 - b _080746B6 - .align 2, 0 -_080746A4: .4byte gBattleSpritesDataPtr -_080746A8: .4byte gBattlerPartyIndexes -_080746AC: .4byte gEnemyParty -_080746B0: - ldr r0, _080746EC @ =gTransformedPersonalities - adds r0, r1, r0 - ldr r2, [r0] -_080746B6: - movs r0, 0xC0 - lsls r0, 18 - ands r0, r2 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r2 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r2 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r2 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _080746F0 - adds r0, r7, 0 - b _080746FA - .align 2, 0 -_080746EC: .4byte gTransformedPersonalities -_080746F0: - movs r1, 0xCE - lsls r1, 1 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 -_080746FA: - ldr r1, _08074700 @ =gUnknown_82349CC - lsls r0, 2 - b _0807473C - .align 2, 0 -_08074700: .4byte gUnknown_82349CC -_08074704: - ldr r0, _0807471C @ =0x00000181 - cmp r4, r0 - bne _08074728 - ldr r0, _08074720 @ =gUnknown_83AE03C - ldr r1, _08074724 @ =gBattleMonForms - adds r1, r6, r1 - ldrb r1, [r1] - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - b _08074740 - .align 2, 0 -_0807471C: .4byte 0x00000181 -_08074720: .4byte gUnknown_83AE03C -_08074724: .4byte gBattleMonForms -_08074728: - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - bls _08074738 - ldr r0, _08074734 @ =gUnknown_82349CC - b _0807473E - .align 2, 0 -_08074734: .4byte gUnknown_82349CC -_08074738: - ldr r1, _08074748 @ =gUnknown_82349CC - lsls r0, r7, 2 -_0807473C: - adds r0, r1 -_0807473E: - ldrb r0, [r0, 0x1] -_08074740: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08074748: .4byte gUnknown_82349CC - thumb_func_end sub_8074590 - - thumb_func_start sub_807474C -sub_807474C: @ 807474C - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 16 - lsrs r4, r1, 16 - adds r7, r4, 0 - movs r5, 0 - adds r0, r6, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0807479E - ldr r0, _0807477C @ =0x00000181 - cmp r4, r0 - bne _08074788 - ldr r0, _08074780 @ =gUnknown_83AE04C - ldr r1, _08074784 @ =gBattleMonForms - adds r1, r6, r1 - ldrb r1, [r1] - adds r1, r0 - ldrb r5, [r1] - b _0807479E - .align 2, 0 -_0807477C: .4byte 0x00000181 -_08074780: .4byte gUnknown_83AE04C -_08074784: .4byte gBattleMonForms -_08074788: - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - bls _08074798 - ldr r0, _08074794 @ =gEnemyMonElevation - b _0807479C - .align 2, 0 -_08074794: .4byte gEnemyMonElevation -_08074798: - ldr r0, _080747A8 @ =gEnemyMonElevation - adds r0, r7, r0 -_0807479C: - ldrb r5, [r0] -_0807479E: - adds r0, r5, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080747A8: .4byte gEnemyMonElevation - thumb_func_end sub_807474C - - thumb_func_start sub_80747AC -sub_80747AC: @ 80747AC - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 16 - lsrs r4, r1, 16 - lsls r2, 24 - lsrs r7, r2, 24 - adds r0, r6, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080747D4 - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_8074590 - lsls r0, 24 - lsrs r5, r0, 24 - b _080747F2 -_080747D4: - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_8074590 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_807474C - lsls r0, 24 - lsrs r0, 24 - subs r0, r5, r0 - lsls r0, 16 - lsrs r5, r0, 16 -_080747F2: - adds r0, r6, 0 - bl GetBattlerPosition - ldr r3, _0807483C @ =gUnknown_83AE01C - lsls r0, 24 - lsrs r0, 22 - ldr r1, _08074840 @ =gBattleTypeFlags - ldr r1, [r1] - movs r2, 0x1 - ands r1, r2 - lsls r1, 4 - adds r0, r1 - adds r0, r3 - ldrb r0, [r0, 0x1] - adds r0, r5 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r7, 0 - beq _08074832 - adds r0, r6, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0807482C - adds r0, r4, 0 - adds r0, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 -_0807482C: - cmp r4, 0x68 - bls _08074832 - movs r4, 0x68 -_08074832: - adds r0, r4, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0807483C: .4byte gUnknown_83AE01C -_08074840: .4byte gBattleTypeFlags - thumb_func_end sub_80747AC - - thumb_func_start sub_8074844 -sub_8074844: @ 8074844 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - movs r0, 0xFD - lsls r0, 24 - adds r1, r0 - lsrs r1, 24 - cmp r1, 0x1 - bhi _08074896 - ldr r0, _08074874 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r2, 2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _0807487C - ldr r1, _08074878 @ =gAnimBattlerSpecies - lsls r0, r2, 1 - adds r0, r1 - ldrh r1, [r0] - b _0807487E - .align 2, 0 -_08074874: .4byte gBattleSpritesDataPtr -_08074878: .4byte gAnimBattlerSpecies -_0807487C: - ldrh r1, [r1, 0x2] -_0807487E: - cmp r3, 0x3 - bne _0807488C - adds r0, r2, 0 - movs r2, 0x1 - bl sub_80747AC - b _0807489E -_0807488C: - adds r0, r2, 0 - movs r2, 0 - bl sub_80747AC - b _0807489E -_08074896: - adds r0, r2, 0 - adds r1, r3, 0 - bl GetBattlerSpriteCoord -_0807489E: - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_8074844 - - thumb_func_start GetBattlerSpriteDefault_Y -GetBattlerSpriteDefault_Y: @ 80748A8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x4 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end GetBattlerSpriteDefault_Y - - thumb_func_start GetSubstituteSpriteDefault_Y -GetSubstituteSpriteDefault_Y: @ 80748BC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080748E0 - adds r0, r4, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 8 - movs r1, 0x80 - lsls r1, 13 - b _080748F0 -_080748E0: - adds r0, r4, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 8 - movs r1, 0x88 - lsls r1, 13 -_080748F0: - adds r0, r1 - lsrs r0, 16 - lsls r0, 24 - lsrs r0, 24 - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetSubstituteSpriteDefault_Y - - thumb_func_start GetGhostSpriteDefault_Y -GetGhostSpriteDefault_Y: @ 8074900 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0807491A - adds r0, r4, 0 - movs r1, 0x1 - b _0807491E -_0807491A: - adds r0, r4, 0 - movs r1, 0x4 -_0807491E: - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetGhostSpriteDefault_Y - - thumb_func_start sub_807492C -sub_807492C: @ 807492C - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r5, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08074978 - ldr r0, _0807496C @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r5, 2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _080749B0 - ldr r1, _08074970 @ =gBattlerPartyIndexes - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08074974 @ =gEnemyParty - b _08074996 - .align 2, 0 -_0807496C: .4byte gBattleSpritesDataPtr -_08074970: .4byte gBattlerPartyIndexes -_08074974: .4byte gEnemyParty -_08074978: - ldr r0, _080749A4 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r5, 2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _080749B0 - ldr r1, _080749A8 @ =gBattlerPartyIndexes - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080749AC @ =gPlayerParty -_08074996: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r4, r0, 16 - b _080749B2 - .align 2, 0 -_080749A4: .4byte gBattleSpritesDataPtr -_080749A8: .4byte gBattlerPartyIndexes -_080749AC: .4byte gPlayerParty -_080749B0: - ldrh r4, [r1, 0x2] -_080749B2: - adds r0, r5, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080749CC - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_807474C - subs r0, r6, r0 - lsls r0, 24 - lsrs r6, r0, 24 -_080749CC: - adds r0, r6, 0 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_807492C - - thumb_func_start GetAnimBattlerSpriteId -GetAnimBattlerSpriteId: @ 80749D4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - cmp r0, 0 - bne _080749FC - ldr r4, _080749F4 @ =gBattleAnimAttacker - ldrb r0, [r4] - bl IsBattlerSpritePresent - lsls r0, 24 - cmp r0, 0 - beq _08074A4A - ldr r1, _080749F8 @ =gBattlerSpriteIds - ldrb r0, [r4] - b _08074A5A - .align 2, 0 -_080749F4: .4byte gBattleAnimAttacker -_080749F8: .4byte gBattlerSpriteIds -_080749FC: - cmp r0, 0x1 - bne _08074A1C - ldr r4, _08074A14 @ =gBattleAnimTarget - ldrb r0, [r4] - bl IsBattlerSpritePresent - lsls r0, 24 - cmp r0, 0 - beq _08074A4A - ldr r1, _08074A18 @ =gBattlerSpriteIds - ldrb r0, [r4] - b _08074A5A - .align 2, 0 -_08074A14: .4byte gBattleAnimTarget -_08074A18: .4byte gBattlerSpriteIds -_08074A1C: - cmp r1, 0x2 - bne _08074A38 - ldr r5, _08074A34 @ =gBattleAnimAttacker - ldrb r0, [r5] - movs r4, 0x2 - eors r0, r4 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08074A4A - b _08074A54 - .align 2, 0 -_08074A34: .4byte gBattleAnimAttacker -_08074A38: - ldr r5, _08074A50 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r4, 0x2 - eors r0, r4 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - bne _08074A54 -_08074A4A: - movs r0, 0xFF - b _08074A5E - .align 2, 0 -_08074A50: .4byte gBattleAnimTarget -_08074A54: - ldr r1, _08074A64 @ =gBattlerSpriteIds - ldrb r0, [r5] - eors r0, r4 -_08074A5A: - adds r0, r1 - ldrb r0, [r0] -_08074A5E: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08074A64: .4byte gBattlerSpriteIds - thumb_func_end GetAnimBattlerSpriteId - - thumb_func_start StoreSpriteCallbackInData6 -StoreSpriteCallbackInData6: @ 8074A68 - strh r1, [r0, 0x3A] - lsrs r1, 16 - strh r1, [r0, 0x3C] - bx lr - thumb_func_end StoreSpriteCallbackInData6 - - thumb_func_start SetCallbackToStoredInData -SetCallbackToStoredInData: @ 8074A70 - ldrh r2, [r0, 0x3A] - movs r3, 0x3C - ldrsh r1, [r0, r3] - lsls r1, 16 - orrs r2, r1 - str r2, [r0, 0x1C] - bx lr - thumb_func_end SetCallbackToStoredInData - - thumb_func_start sub_8074A80 -sub_8074A80: @ 8074A80 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08074AD4 - movs r2, 0x2E - ldrsh r0, [r4, r2] - movs r2, 0x30 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r2, 0x30 - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x2E] - adds r1, r0, r2 - strh r1, [r4, 0x2E] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _08074AC0 - ldr r2, _08074ABC @ =0xffffff00 - b _08074AC8 - .align 2, 0 -_08074ABC: .4byte 0xffffff00 -_08074AC0: - cmp r0, 0 - bge _08074ACC - movs r2, 0x80 - lsls r2, 1 -_08074AC8: - adds r0, r1, r2 - strh r0, [r4, 0x2E] -_08074ACC: - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - b _08074ADA -_08074AD4: - adds r0, r4, 0 - bl SetCallbackToStoredInData -_08074ADA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8074A80 - - thumb_func_start sub_8074AE0 -sub_8074AE0: @ 8074AE0 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08074B50 - movs r2, 0x2E - ldrsh r0, [r4, r2] - ldrh r1, [r4, 0x38] - lsls r1, 16 - asrs r1, 24 - ldrh r2, [r4, 0x30] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - ldrh r1, [r4, 0x38] - lsls r1, 16 - asrs r1, 24 - ldrh r2, [r4, 0x30] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x2E] - adds r1, r0, r2 - strh r1, [r4, 0x2E] - ldrh r0, [r4, 0x36] - ldrh r2, [r4, 0x38] - adds r0, r2 - strh r0, [r4, 0x38] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _08074B3C - ldr r2, _08074B38 @ =0xffffff00 - b _08074B44 - .align 2, 0 -_08074B38: .4byte 0xffffff00 -_08074B3C: - cmp r0, 0 - bge _08074B48 - movs r2, 0x80 - lsls r2, 1 -_08074B44: - adds r0, r1, r2 - strh r0, [r4, 0x2E] -_08074B48: - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - b _08074B56 -_08074B50: - adds r0, r4, 0 - bl SetCallbackToStoredInData -_08074B56: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8074AE0 - - thumb_func_start sub_8074B5C -sub_8074B5C: @ 8074B5C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08074BD8 - movs r2, 0x2E - ldrsh r0, [r4, r2] - movs r2, 0x30 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x36 - ldrsh r0, [r4, r1] - movs r2, 0x30 - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x2E] - adds r1, r0, r2 - strh r1, [r4, 0x2E] - ldrh r0, [r4, 0x38] - ldrh r2, [r4, 0x36] - adds r0, r2 - strh r0, [r4, 0x36] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _08074BA4 - ldr r2, _08074BA0 @ =0xffffff00 - b _08074BAC - .align 2, 0 -_08074BA0: .4byte 0xffffff00 -_08074BA4: - cmp r0, 0 - bge _08074BB0 - movs r2, 0x80 - lsls r2, 1 -_08074BAC: - adds r0, r1, r2 - strh r0, [r4, 0x2E] -_08074BB0: - ldrh r1, [r4, 0x36] - movs r2, 0x36 - ldrsh r0, [r4, r2] - cmp r0, 0xFF - ble _08074BC4 - ldr r2, _08074BC0 @ =0xffffff00 - b _08074BCC - .align 2, 0 -_08074BC0: .4byte 0xffffff00 -_08074BC4: - cmp r0, 0 - bge _08074BD0 - movs r2, 0x80 - lsls r2, 1 -_08074BCC: - adds r0, r1, r2 - strh r0, [r4, 0x36] -_08074BD0: - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - b _08074BDE -_08074BD8: - adds r0, r4, 0 - bl SetCallbackToStoredInData -_08074BDE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8074B5C - - thumb_func_start sub_8074BE4 -sub_8074BE4: @ 8074BE4 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08074C38 - movs r2, 0x2E - ldrsh r0, [r4, r2] - movs r2, 0x30 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r2, 0x36 - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x2E] - adds r1, r0, r2 - strh r1, [r4, 0x2E] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _08074C24 - ldr r2, _08074C20 @ =0xffffff00 - b _08074C2C - .align 2, 0 -_08074C20: .4byte 0xffffff00 -_08074C24: - cmp r0, 0 - bge _08074C30 - movs r2, 0x80 - lsls r2, 1 -_08074C2C: - adds r0, r1, r2 - strh r0, [r4, 0x2E] -_08074C30: - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - b _08074C3E -_08074C38: - adds r0, r4, 0 - bl SetCallbackToStoredInData -_08074C3E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8074BE4 - - thumb_func_start sub_8074C44 -sub_8074C44: @ 8074C44 - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x2E] - movs r3, 0x2E - ldrsh r0, [r1, r3] - cmp r0, 0 - ble _08074C58 - subs r0, r2, 0x1 - strh r0, [r1, 0x2E] - b _08074C5E -_08074C58: - adds r0, r1, 0 - bl SetCallbackToStoredInData -_08074C5E: - pop {r0} - bx r0 - thumb_func_end sub_8074C44 - - thumb_func_start sub_8074C64 -sub_8074C64: @ 8074C64 - push {r4,lr} - adds r4, r0, 0 - bl sub_8074C80 - ldr r1, _08074C7C @ =sub_8074CD0 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08074C7C: .4byte sub_8074CD0 - thumb_func_end sub_8074C64 - - thumb_func_start sub_8074C80 -sub_8074C80: @ 8074C80 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x30 - ldrsh r1, [r4, r0] - movs r2, 0x32 - ldrsh r0, [r4, r2] - cmp r1, r0 - ble _08074C96 - ldrh r0, [r4, 0x2E] - negs r0, r0 - strh r0, [r4, 0x2E] -_08074C96: - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r2, 0x30 - ldrsh r1, [r4, r2] - subs r0, r1 - ldrh r5, [r4, 0x2E] - movs r2, 0x2E - ldrsh r1, [r4, r2] - bl __divsi3 - cmp r0, 0 - bge _08074CB0 - negs r0, r0 -_08074CB0: - strh r0, [r4, 0x2E] - movs r1, 0x36 - ldrsh r0, [r4, r1] - movs r2, 0x34 - ldrsh r1, [r4, r2] - subs r0, r1 - movs r2, 0x2E - ldrsh r1, [r4, r2] - bl __divsi3 - strh r0, [r4, 0x32] - strh r5, [r4, 0x30] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8074C80 - - thumb_func_start sub_8074CD0 -sub_8074CD0: @ 8074CD0 - push {lr} - adds r1, r0, 0 - ldrh r2, [r1, 0x2E] - movs r3, 0x2E - ldrsh r0, [r1, r3] - cmp r0, 0 - ble _08074CF4 - subs r0, r2, 0x1 - strh r0, [r1, 0x2E] - ldrh r0, [r1, 0x30] - ldrh r2, [r1, 0x24] - adds r0, r2 - strh r0, [r1, 0x24] - ldrh r0, [r1, 0x32] - ldrh r3, [r1, 0x26] - adds r0, r3 - strh r0, [r1, 0x26] - b _08074CFA -_08074CF4: - adds r0, r1, 0 - bl SetCallbackToStoredInData -_08074CFA: - pop {r0} - bx r0 - thumb_func_end sub_8074CD0 - - thumb_func_start sub_8074D00 -sub_8074D00: @ 8074D00 - push {lr} - adds r2, r0, 0 - ldrh r1, [r2, 0x2E] - movs r3, 0x2E - ldrsh r0, [r2, r3] - cmp r0, 0 - ble _08074D30 - subs r0, r1, 0x1 - strh r0, [r2, 0x2E] - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x34] - adds r0, r1 - strh r0, [r2, 0x34] - ldrh r1, [r2, 0x32] - ldrh r3, [r2, 0x36] - adds r1, r3 - strh r1, [r2, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r2, 0x24] - lsls r1, 16 - asrs r1, 24 - strh r1, [r2, 0x26] - b _08074D36 -_08074D30: - adds r0, r2, 0 - bl SetCallbackToStoredInData -_08074D36: - pop {r0} - bx r0 - thumb_func_end sub_8074D00 - - thumb_func_start sub_8074D3C -sub_8074D3C: @ 8074D3C - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _08074D6C - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x34] - adds r0, r1 - strh r0, [r4, 0x34] - ldrh r1, [r4, 0x32] - ldrh r2, [r4, 0x36] - adds r1, r2 - strh r1, [r4, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - lsls r1, 16 - asrs r1, 24 - strh r1, [r4, 0x26] - b _08074D72 -_08074D6C: - adds r0, r4, 0 - bl SetCallbackToStoredInData -_08074D72: - adds r0, r4, 0 - bl UpdateMonIconFrame - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8074D3C - - thumb_func_start sub_8074D80 -sub_8074D80: @ 8074D80 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x26] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x34] - ldr r5, _08074DBC @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - ldr r0, _08074DC0 @ =sub_8074C64 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08074DBC: .4byte gBattleAnimTarget -_08074DC0: .4byte sub_8074C64 - thumb_func_end sub_8074D80 - - thumb_func_start TranslateMonSpriteLinear -TranslateMonSpriteLinear: @ 8074DC4 - push {r4,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x2E] - movs r2, 0x2E - ldrsh r0, [r3, r2] - cmp r0, 0 - ble _08074E08 - subs r0, r1, 0x1 - strh r0, [r3, 0x2E] - ldr r2, _08074E04 @ =gSprites - movs r4, 0x34 - ldrsh r1, [r3, r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r3, 0x30] - ldrh r4, [r0, 0x24] - adds r1, r4 - strh r1, [r0, 0x24] - movs r0, 0x34 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r3, 0x32] - ldrh r2, [r0, 0x26] - adds r1, r2 - strh r1, [r0, 0x26] - b _08074E0E - .align 2, 0 -_08074E04: .4byte gSprites -_08074E08: - adds r0, r3, 0 - bl SetCallbackToStoredInData -_08074E0E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end TranslateMonSpriteLinear - - thumb_func_start TranslateMonSpriteLinearFixedPoint -TranslateMonSpriteLinearFixedPoint: @ 8074E14 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _08074E64 - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] - ldrh r1, [r4, 0x30] - ldrh r0, [r4, 0x34] - adds r1, r0 - strh r1, [r4, 0x34] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x36] - adds r0, r2 - strh r0, [r4, 0x36] - ldr r3, _08074E60 @ =gSprites - movs r0, 0x38 - ldrsh r2, [r4, r0] - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r3 - lsls r1, 16 - asrs r1, 24 - strh r1, [r0, 0x24] - movs r1, 0x38 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r1, 0x26] - b _08074E6A - .align 2, 0 -_08074E60: .4byte gSprites -_08074E64: - adds r0, r4, 0 - bl SetCallbackToStoredInData -_08074E6A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end TranslateMonSpriteLinearFixedPoint - - thumb_func_start sub_8074E70 -sub_8074E70: @ 8074E70 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _08074ED2 - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] - ldrh r1, [r4, 0x32] - lsls r0, r1, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x30] - adds r1, r0 - strh r1, [r4, 0x32] - ldrh r1, [r4, 0x36] - lsls r0, r1, 16 - asrs r0, 24 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x34] - adds r1, r0 - strh r1, [r4, 0x36] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl __modsi3 - cmp r0, 0 - bne _08074ED8 - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08074ED8 - adds r3, r4, 0 - adds r3, 0x3E - ldrb r2, [r3] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _08074ED8 -_08074ED2: - adds r0, r4, 0 - bl SetCallbackToStoredInData -_08074ED8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8074E70 - - thumb_func_start move_anim_8074EE0 -move_anim_8074EE0: @ 8074EE0 - push {r4,lr} - adds r4, r0, 0 - bl FreeSpriteOamMatrix - adds r0, r4, 0 - bl DestroyAnimSprite - pop {r4} - pop {r0} - bx r0 - thumb_func_end move_anim_8074EE0 - - thumb_func_start sub_8074EF4 -sub_8074EF4: @ 8074EF4 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x26] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x34] - ldr r5, _08074F30 @ =gBattleAnimAttacker - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - ldr r0, _08074F34 @ =sub_8074C64 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08074F30: .4byte gBattleAnimAttacker -_08074F34: .4byte sub_8074C64 - thumb_func_end sub_8074EF4 - - thumb_func_start sub_8074F38 -sub_8074F38: @ 8074F38 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x38] - bl ResetPaletteStructByUid - adds r0, r4, 0 - bl move_anim_8074EE0 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8074F38 - - thumb_func_start sub_8074F50 -sub_8074F50: @ 8074F50 - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08074F66 - adds r0, r2, 0 - bl SetCallbackToStoredInData -_08074F66: - pop {r0} - bx r0 - thumb_func_end sub_8074F50 - - thumb_func_start sub_8074F6C -sub_8074F6C: @ 8074F6C - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08074F82 - adds r0, r2, 0 - bl SetCallbackToStoredInData -_08074F82: - pop {r0} - bx r0 - thumb_func_end sub_8074F6C - - thumb_func_start sub_8074F88 -sub_8074F88: @ 8074F88 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r4, 0 - bl DestroyAnimSprite - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8074F88 - - thumb_func_start sub_8074FA8 -sub_8074FA8: @ 8074FA8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8074FA8 - - thumb_func_start sub_8074FCC -sub_8074FCC: @ 8074FCC - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _08074FF4 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08074FF4: .4byte gBattleAnimAttacker - thumb_func_end sub_8074FCC - - thumb_func_start sub_8074FF8 -sub_8074FF8: @ 8074FF8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - lsls r1, 16 - lsrs r5, r1, 16 - mov r8, r5 - ldr r7, _08075030 @ =gBattleAnimAttacker - ldrb r0, [r7] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _08075034 @ =gBattleAnimTarget - ldrb r0, [r0] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - bhi _08075044 - cmp r6, r0 - bcs _08075038 - lsls r0, r5, 16 - b _08075054 - .align 2, 0 -_08075030: .4byte gBattleAnimAttacker -_08075034: .4byte gBattleAnimTarget -_08075038: - ldrb r0, [r7] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08075050 -_08075044: - ldrh r1, [r4, 0x20] - lsls r0, r5, 16 - asrs r0, 16 - subs r1, r0 - strh r1, [r4, 0x20] - b _0807505C -_08075050: - mov r1, r8 - lsls r0, r1, 16 -_08075054: - asrs r0, 16 - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] -_0807505C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8074FF8 - - thumb_func_start sub_8075068 -sub_8075068: @ 8075068 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - movs r5, 0 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 - movs r0, 0x2E - ldrsh r1, [r4, r0] - movs r0, 0x80 - lsls r0, 8 - bl __divsi3 - strh r0, [r4, 0x3A] - strh r5, [r4, 0x3C] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8075068 - - thumb_func_start AnimateBallThrow -AnimateBallThrow: @ 8075094 - push {r4,lr} - adds r4, r0, 0 - bl sub_80755E0 - lsls r0, 24 - cmp r0, 0 - bne _080750C0 - ldrh r0, [r4, 0x3A] - ldrh r1, [r4, 0x3C] - adds r0, r1 - strh r0, [r4, 0x3C] - lsls r0, 16 - lsrs r0, 24 - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - movs r0, 0 - b _080750C2 -_080750C0: - movs r0, 0x1 -_080750C2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end AnimateBallThrow - - thumb_func_start sub_80750C8 -sub_80750C8: @ 80750C8 - push {r4,lr} - adds r4, r0, 0 - bl sub_80755E0 - lsls r0, 24 - cmp r0, 0 - bne _080750F4 - ldrh r0, [r4, 0x3A] - ldrh r1, [r4, 0x3C] - adds r0, r1 - strh r0, [r4, 0x3C] - lsls r0, 16 - lsrs r0, 24 - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - movs r0, 0 - b _080750F6 -_080750F4: - movs r0, 0x1 -_080750F6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80750C8 - - thumb_func_start SetSpritePrimaryCoordsFromSecondaryCoords -SetSpritePrimaryCoordsFromSecondaryCoords: @ 80750FC - ldrh r1, [r0, 0x24] - ldrh r2, [r0, 0x20] - adds r1, r2 - movs r2, 0 - strh r1, [r0, 0x20] - ldrh r1, [r0, 0x26] - ldrh r3, [r0, 0x22] - adds r1, r3 - strh r1, [r0, 0x22] - strh r2, [r0, 0x24] - strh r2, [r0, 0x26] - bx lr - thumb_func_end SetSpritePrimaryCoordsFromSecondaryCoords - - thumb_func_start sub_8075114 -sub_8075114: @ 8075114 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 24 - cmp r1, 0 - bne _0807513C - ldr r4, _08075158 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0 - bl sub_8074844 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl sub_8074844 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] -_0807513C: - ldr r4, _0807515C @ =gBattleAnimArgs - movs r0, 0 - ldrsh r1, [r4, r0] - adds r0, r5, 0 - bl sub_8074FF8 - ldrh r0, [r4, 0x2] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08075158: .4byte gBattleAnimTarget -_0807515C: .4byte gBattleAnimArgs - thumb_func_end sub_8075114 - - thumb_func_start sub_8075160 -sub_8075160: @ 8075160 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 24 - cmp r1, 0 - bne _08075184 - ldr r4, _08075180 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0 - bl sub_8074844 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - b _08075198 - .align 2, 0 -_08075180: .4byte gBattleAnimAttacker -_08075184: - ldr r4, _080751BC @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl sub_8074844 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 -_08075198: - bl sub_8074844 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r4, _080751C0 @ =gBattleAnimArgs - movs r0, 0 - ldrsh r1, [r4, r0] - adds r0, r5, 0 - bl sub_8074FF8 - ldrh r0, [r4, 0x2] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080751BC: .4byte gBattleAnimAttacker -_080751C0: .4byte gBattleAnimArgs - thumb_func_end sub_8075160 - - thumb_func_start GetBattlerSide -GetBattlerSide: @ 80751C4 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080751D4 @ =gBattlerPositions - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - bx lr - .align 2, 0 -_080751D4: .4byte gBattlerPositions - thumb_func_end GetBattlerSide - - thumb_func_start GetBattlerPosition -GetBattlerPosition: @ 80751D8 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080751E4 @ =gBattlerPositions - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_080751E4: .4byte gBattlerPositions - thumb_func_end GetBattlerPosition - - thumb_func_start GetBattlerAtPosition -GetBattlerAtPosition: @ 80751E8 - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - movs r1, 0 - ldr r0, _0807521C @ =gBattlersCount - ldrb r2, [r0] - cmp r1, r2 - bcs _08075212 - ldr r4, _08075220 @ =gBattlerPositions - ldrb r0, [r4] - cmp r0, r3 - beq _08075212 -_08075200: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r2 - bcs _08075212 - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, r3 - bne _08075200 -_08075212: - adds r0, r1, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0807521C: .4byte gBattlersCount -_08075220: .4byte gBattlerPositions - thumb_func_end GetBattlerAtPosition - - thumb_func_start IsBattlerSpritePresent -IsBattlerSpritePresent: @ 8075224 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - ldr r0, _08075254 @ =gBattlerPositions - adds r0, r4, r0 - ldrb r0, [r0] - cmp r0, 0xFF - beq _08075288 - adds r0, r4, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08075260 - ldr r1, _08075258 @ =gBattlerPartyIndexes - lsls r0, r4, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0807525C @ =gEnemyParty - b _0807526E - .align 2, 0 -_08075254: .4byte gBattlerPositions -_08075258: .4byte gBattlerPartyIndexes -_0807525C: .4byte gEnemyParty -_08075260: - ldr r1, _08075280 @ =gBattlerPartyIndexes - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08075284 @ =gPlayerParty -_0807526E: - adds r0, r1 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _08075288 - movs r0, 0x1 - b _0807528A - .align 2, 0 -_08075280: .4byte gBattlerPartyIndexes -_08075284: .4byte gPlayerParty -_08075288: - movs r0, 0 -_0807528A: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end IsBattlerSpritePresent - - thumb_func_start IsDoubleBattle -IsDoubleBattle: @ 8075290 - ldr r0, _0807529C @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x1 - ands r0, r1 - bx lr - .align 2, 0 -_0807529C: .4byte gBattleTypeFlags - thumb_func_end IsDoubleBattle - - thumb_func_start sub_80752A0 -sub_80752A0: @ 80752A0 - ldr r1, _080752C0 @ =gUnknown_2022BB8 - ldr r1, [r1] - str r1, [r0] - ldr r1, _080752C4 @ =gUnknown_2022BBC - ldr r1, [r1] - str r1, [r0, 0x4] - movs r2, 0 - movs r1, 0x8 - strb r1, [r0, 0x8] - movs r1, 0x1 - strb r1, [r0, 0x9] - movs r1, 0x80 - lsls r1, 2 - strh r1, [r0, 0xA] - strh r2, [r0, 0xC] - bx lr - .align 2, 0 -_080752C0: .4byte gUnknown_2022BB8 -_080752C4: .4byte gUnknown_2022BBC - thumb_func_end sub_80752A0 - - thumb_func_start sub_80752C8 -sub_80752C8: @ 80752C8 - push {lr} - adds r2, r0, 0 - cmp r1, 0x1 - bne _080752D6 - bl sub_80752A0 - b _080752F4 -_080752D6: - ldr r0, _080752F8 @ =gUnknown_2022BB8 - ldr r0, [r0] - str r0, [r2] - ldr r0, _080752FC @ =gUnknown_2022BBC - ldr r0, [r0] - str r0, [r2, 0x4] - movs r1, 0 - movs r0, 0x9 - strb r0, [r2, 0x8] - movs r0, 0x2 - strb r0, [r2, 0x9] - movs r0, 0xC0 - lsls r0, 2 - strh r0, [r2, 0xA] - strh r1, [r2, 0xC] -_080752F4: - pop {r0} - bx r0 - .align 2, 0 -_080752F8: .4byte gUnknown_2022BB8 -_080752FC: .4byte gUnknown_2022BBC - thumb_func_end sub_80752C8 - - thumb_func_start sub_8075300 -sub_8075300: @ 8075300 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08075334 @ =gUnknown_2022BB8 - ldr r0, [r0] - str r0, [r4] - ldr r0, _08075338 @ =gUnknown_2022BBC - ldr r0, [r0] - str r0, [r4, 0x4] - ldr r0, _0807533C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl sub_80768B0 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x1 - bne _08075340 - movs r0, 0 - movs r1, 0x8 - strb r1, [r4, 0x8] - strb r2, [r4, 0x9] - movs r1, 0x80 - lsls r1, 2 - strh r1, [r4, 0xA] - strh r0, [r4, 0xC] - b _08075352 - .align 2, 0 -_08075334: .4byte gUnknown_2022BB8 -_08075338: .4byte gUnknown_2022BBC -_0807533C: .4byte gBattleAnimAttacker -_08075340: - movs r1, 0 - movs r0, 0x9 - strb r0, [r4, 0x8] - movs r0, 0x2 - strb r0, [r4, 0x9] - movs r0, 0xC0 - lsls r0, 2 - strh r0, [r4, 0xA] - strh r1, [r4, 0xC] -_08075352: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8075300 - - thumb_func_start sub_8075358 -sub_8075358: @ 8075358 - push {r4,lr} - sub sp, 0x20 - adds r4, r0, 0 - add r0, sp, 0xC - adds r1, r4, 0 - bl sub_80752C8 - movs r0, 0 - str r0, [sp, 0x1C] - add r0, sp, 0x1C - ldr r1, [sp, 0xC] - ldr r2, _080753B0 @ =0x05000800 - bl CpuSet - lsls r4, 24 - lsrs r4, 24 - ldr r1, [sp, 0xC] - movs r2, 0x80 - lsls r2, 6 - add r0, sp, 0xC - ldrh r3, [r0, 0xA] - adds r0, r4, 0 - bl LoadBgTiles - movs r0, 0x20 - str r0, [sp] - movs r0, 0x40 - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - adds r0, r4, 0 - bl CopyBgTilemapBufferToVram - add sp, 0x20 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080753B0: .4byte 0x05000800 - thumb_func_end sub_8075358 - - thumb_func_start AnimLoadCompressedBgGfx -AnimLoadCompressedBgGfx: @ 80753B4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - adds r5, r0, 0 - mov r8, r1 - adds r6, r2, 0 - movs r0, 0 - str r0, [sp] - ldr r4, _080753FC @ =gUnknown_2022BB8 - ldr r1, [r4] - ldr r2, _08075400 @ =0x05000800 - mov r0, sp - bl CpuSet - ldr r1, [r4] - mov r0, r8 - bl LZDecompressWram - lsls r5, 24 - lsrs r5, 24 - ldr r1, [r4] - movs r2, 0x80 - lsls r2, 6 - lsls r6, 16 - lsrs r6, 16 - adds r0, r5, 0 - adds r3, r6, 0 - bl LoadBgTiles - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080753FC: .4byte gUnknown_2022BB8 -_08075400: .4byte 0x05000800 - thumb_func_end AnimLoadCompressedBgGfx - - thumb_func_start sub_8075404 -sub_8075404: @ 8075404 - push {r4,r5,lr} - sub sp, 0xC - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x20 - str r0, [sp] - movs r0, 0x40 - str r0, [sp, 0x4] - movs r0, 0x11 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8075404 - - thumb_func_start sub_807543C -sub_807543C: @ 807543C - push {r4,lr} - adds r4, r0, 0 - bl sub_8075404 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl CopyBgTilemapBufferToVram - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_807543C - - thumb_func_start sub_8075454 -sub_8075454: @ 8075454 - movs r0, 0x2 - bx lr - thumb_func_end sub_8075454 - - thumb_func_start sub_8075458 -sub_8075458: @ 8075458 - push {lr} - lsls r0, 24 - cmp r0, 0 - bne _08075476 - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl SetAnimBgAttribute - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0x1 - bl SetAnimBgAttribute - b _0807548A -_08075476: - movs r0, 0x3 - movs r1, 0 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0 - bl SetAnimBgAttribute -_0807548A: - pop {r0} - bx r0 - thumb_func_end sub_8075458 - - thumb_func_start sub_8075490 -sub_8075490: @ 8075490 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl InitSpriteDataForLinearTranslation - ldr r1, _080754B4 @ =sub_8074D3C - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080754B4: .4byte sub_8074D3C - thumb_func_end sub_8075490 - - thumb_func_start InitSpriteDataForLinearTranslation -InitSpriteDataForLinearTranslation: @ 80754B8 - push {r4-r6,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x32] - ldrh r1, [r5, 0x30] - subs r0, r1 - ldrh r4, [r5, 0x36] - ldrh r1, [r5, 0x34] - subs r4, r1 - lsls r4, 24 - lsrs r4, 16 - lsls r0, 24 - asrs r0, 16 - movs r2, 0x2E - ldrsh r1, [r5, r2] - bl __divsi3 - movs r6, 0 - strh r0, [r5, 0x30] - lsls r4, 16 - asrs r4, 16 - movs r0, 0x2E - ldrsh r1, [r5, r0] - adds r0, r4, 0 - bl __divsi3 - strh r0, [r5, 0x32] - strh r6, [r5, 0x36] - strh r6, [r5, 0x34] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end InitSpriteDataForLinearTranslation - - thumb_func_start obj_translate_based_on_private_1_2_3_4 -obj_translate_based_on_private_1_2_3_4: @ 80754F8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r7, r0, 0 - movs r0, 0x32 - ldrsh r1, [r7, r0] - movs r2, 0x30 - ldrsh r0, [r7, r2] - subs r1, r0 - movs r3, 0x36 - ldrsh r2, [r7, r3] - movs r3, 0x34 - ldrsh r0, [r7, r3] - subs r2, r0 - lsrs r0, r1, 31 - mov r8, r0 - lsrs r3, r2, 31 - mov r9, r3 - cmp r1, 0 - bge _08075524 - negs r1, r1 -_08075524: - lsls r0, r1, 24 - lsrs r6, r0, 16 - adds r0, r2, 0 - cmp r0, 0 - bge _08075530 - negs r0, r0 -_08075530: - lsls r0, 24 - lsrs r5, r0, 16 - movs r0, 0x2E - ldrsh r4, [r7, r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl __divsi3 - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r5, 0 - adds r1, r4, 0 - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - mov r2, r8 - cmp r2, 0 - beq _0807555C - movs r0, 0x1 - orrs r6, r0 - b _08075560 -_0807555C: - ldr r0, _0807556C @ =0x0000fffe - ands r6, r0 -_08075560: - mov r3, r9 - cmp r3, 0 - beq _08075570 - movs r0, 0x1 - orrs r5, r0 - b _08075574 - .align 2, 0 -_0807556C: .4byte 0x0000fffe -_08075570: - ldr r0, _0807558C @ =0x0000fffe - ands r5, r0 -_08075574: - movs r0, 0 - strh r6, [r7, 0x30] - strh r5, [r7, 0x32] - strh r0, [r7, 0x36] - strh r0, [r7, 0x34] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807558C: .4byte 0x0000fffe - thumb_func_end obj_translate_based_on_private_1_2_3_4 - - thumb_func_start StartAnimLinearTranslation -StartAnimLinearTranslation: @ 8075590 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 - ldr r1, _080755B4 @ =sub_807563C - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080755B4: .4byte sub_807563C - thumb_func_end StartAnimLinearTranslation - - thumb_func_start sub_80755B8 -sub_80755B8: @ 80755B8 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 - ldr r1, _080755DC @ =sub_8075658 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080755DC: .4byte sub_8075658 - thumb_func_end sub_80755B8 - - thumb_func_start sub_80755E0 -sub_80755E0: @ 80755E0 - push {r4-r6,lr} - adds r2, r0, 0 - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _080755F0 - movs r0, 0x1 - b _08075634 -_080755F0: - ldrh r1, [r2, 0x30] - ldrh r4, [r2, 0x32] - ldrh r6, [r2, 0x34] - ldrh r5, [r2, 0x36] - adds r0, r6, r1 - lsls r3, r0, 16 - lsrs r6, r3, 16 - adds r0, r5, r4 - lsls r0, 16 - lsrs r5, r0, 16 - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - beq _08075612 - lsrs r0, r3, 24 - negs r0, r0 - b _08075614 -_08075612: - lsrs r0, r3, 24 -_08075614: - strh r0, [r2, 0x24] - movs r0, 0x1 - ands r4, r0 - cmp r4, 0 - beq _08075624 - lsrs r0, r5, 8 - negs r0, r0 - b _08075626 -_08075624: - lsrs r0, r5, 8 -_08075626: - strh r0, [r2, 0x26] - strh r6, [r2, 0x34] - strh r5, [r2, 0x36] - ldrh r0, [r2, 0x2E] - subs r0, 0x1 - strh r0, [r2, 0x2E] - movs r0, 0 -_08075634: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80755E0 - - thumb_func_start sub_807563C -sub_807563C: @ 807563C - push {r4,lr} - adds r4, r0, 0 - bl sub_80755E0 - lsls r0, 24 - cmp r0, 0 - beq _08075650 - adds r0, r4, 0 - bl SetCallbackToStoredInData -_08075650: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_807563C - - thumb_func_start sub_8075658 -sub_8075658: @ 8075658 - push {r4,lr} - adds r4, r0, 0 - bl sub_801236C - adds r0, r4, 0 - bl sub_80755E0 - lsls r0, 24 - cmp r0, 0 - beq _08075672 - adds r0, r4, 0 - bl SetCallbackToStoredInData -_08075672: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8075658 - - thumb_func_start sub_8075678 -sub_8075678: @ 8075678 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x32 - ldrsh r1, [r4, r0] - movs r2, 0x30 - ldrsh r0, [r4, r2] - subs r0, r1, r0 - cmp r0, 0 - bge _0807568C - negs r0, r0 -_0807568C: - lsls r0, 8 - movs r2, 0x2E - ldrsh r1, [r4, r2] - bl __divsi3 - strh r0, [r4, 0x2E] - adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8075678 - - thumb_func_start sub_80756A4 -sub_80756A4: @ 80756A4 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl sub_8075678 - ldr r1, _080756C8 @ =sub_807563C - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080756C8: .4byte sub_807563C - thumb_func_end sub_80756A4 - - thumb_func_start sub_80756CC -sub_80756CC: @ 80756CC - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r7, r0, 0 - movs r0, 0x32 - ldrsh r1, [r7, r0] - movs r2, 0x30 - ldrsh r0, [r7, r2] - subs r1, r0 - movs r3, 0x36 - ldrsh r2, [r7, r3] - movs r3, 0x34 - ldrsh r0, [r7, r3] - subs r2, r0 - lsrs r0, r1, 31 - mov r8, r0 - lsrs r3, r2, 31 - mov r9, r3 - cmp r1, 0 - bge _080756F8 - negs r1, r1 -_080756F8: - lsls r0, r1, 20 - lsrs r6, r0, 16 - adds r0, r2, 0 - cmp r0, 0 - bge _08075704 - negs r0, r0 -_08075704: - lsls r0, 20 - lsrs r5, r0, 16 - movs r0, 0x2E - ldrsh r4, [r7, r0] - adds r0, r6, 0 - adds r1, r4, 0 - bl __divsi3 - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r5, 0 - adds r1, r4, 0 - bl __divsi3 - lsls r0, 16 - lsrs r5, r0, 16 - mov r2, r8 - cmp r2, 0 - beq _08075730 - movs r0, 0x1 - orrs r6, r0 - b _08075734 -_08075730: - ldr r0, _08075740 @ =0x0000fffe - ands r6, r0 -_08075734: - mov r3, r9 - cmp r3, 0 - beq _08075744 - movs r0, 0x1 - orrs r5, r0 - b _08075748 - .align 2, 0 -_08075740: .4byte 0x0000fffe -_08075744: - ldr r0, _08075760 @ =0x0000fffe - ands r5, r0 -_08075748: - movs r0, 0 - strh r6, [r7, 0x30] - strh r5, [r7, 0x32] - strh r0, [r7, 0x36] - strh r0, [r7, 0x34] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08075760: .4byte 0x0000fffe - thumb_func_end sub_80756CC - - thumb_func_start sub_8075764 -sub_8075764: @ 8075764 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl sub_80756CC - ldr r1, _08075788 @ =sub_80757E8 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08075788: .4byte sub_80757E8 - thumb_func_end sub_8075764 - - thumb_func_start sub_807578C -sub_807578C: @ 807578C - push {r4-r6,lr} - adds r2, r0, 0 - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _0807579C - movs r0, 0x1 - b _080757E0 -_0807579C: - ldrh r1, [r2, 0x30] - ldrh r4, [r2, 0x32] - ldrh r6, [r2, 0x34] - ldrh r5, [r2, 0x36] - adds r0, r6, r1 - lsls r3, r0, 16 - lsrs r6, r3, 16 - adds r0, r5, r4 - lsls r0, 16 - lsrs r5, r0, 16 - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - beq _080757BE - lsrs r0, r3, 20 - negs r0, r0 - b _080757C0 -_080757BE: - lsrs r0, r3, 20 -_080757C0: - strh r0, [r2, 0x24] - movs r0, 0x1 - ands r4, r0 - cmp r4, 0 - beq _080757D0 - lsrs r0, r5, 4 - negs r0, r0 - b _080757D2 -_080757D0: - lsrs r0, r5, 4 -_080757D2: - strh r0, [r2, 0x26] - strh r6, [r2, 0x34] - strh r5, [r2, 0x36] - ldrh r0, [r2, 0x2E] - subs r0, 0x1 - strh r0, [r2, 0x2E] - movs r0, 0 -_080757E0: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_807578C - - thumb_func_start sub_80757E8 -sub_80757E8: @ 80757E8 - push {r4,lr} - adds r4, r0, 0 - bl sub_807578C - lsls r0, 24 - cmp r0, 0 - beq _080757FC - adds r0, r4, 0 - bl SetCallbackToStoredInData -_080757FC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80757E8 - - thumb_func_start sub_8075804 -sub_8075804: @ 8075804 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x32 - ldrsh r1, [r4, r0] - movs r2, 0x30 - ldrsh r0, [r4, r2] - subs r0, r1, r0 - cmp r0, 0 - bge _08075818 - negs r0, r0 -_08075818: - lsls r0, 4 - movs r2, 0x2E - ldrsh r1, [r4, r2] - bl __divsi3 - strh r0, [r4, 0x2E] - adds r0, r4, 0 - bl sub_80756CC - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8075804 - - thumb_func_start sub_8075830 -sub_8075830: @ 8075830 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - adds r0, r4, 0 - bl sub_8075804 - ldr r1, _08075854 @ =sub_80757E8 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08075854: .4byte sub_80757E8 - thumb_func_end sub_8075830 - - thumb_func_start SetSpriteRotScale -SetSpriteRotScale: @ 8075858 - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - lsls r3, 16 - lsrs r3, 16 - ldr r5, _080758D0 @ =0xffff0000 - lsls r2, 16 - lsrs r1, 16 - orrs r1, r2 - str r1, [sp] - ldr r0, [sp, 0x4] - ands r0, r5 - orrs r0, r3 - str r0, [sp, 0x4] - bl sub_80758DC - lsls r0, 24 - cmp r0, 0 - beq _08075894 - mov r0, sp - ldrh r0, [r0] - negs r0, r0 - lsls r0, 16 - lsrs r0, 16 - ldr r1, [sp] - ands r1, r5 - orrs r1, r0 - str r1, [sp] -_08075894: - ldr r1, _080758D4 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrb r4, [r0, 0x3] - lsls r4, 26 - lsrs r4, 27 - add r5, sp, 0x8 - mov r0, sp - adds r1, r5, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ObjAffineSet - ldr r0, _080758D8 @ =gOamMatrices - lsls r4, 3 - adds r4, r0 - ldrh r0, [r5] - strh r0, [r4] - ldrh r0, [r5, 0x2] - strh r0, [r4, 0x2] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x4] - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x6] - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080758D0: .4byte 0xffff0000 -_080758D4: .4byte gSprites -_080758D8: .4byte gOamMatrices - thumb_func_end SetSpriteRotScale - - thumb_func_start sub_80758DC -sub_80758DC: @ 80758DC - movs r0, 0 - bx lr - thumb_func_end sub_80758DC - - thumb_func_start PrepareBattlerSpriteForRotScale -PrepareBattlerSpriteForRotScale: @ 80758E0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r2, _08075978 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r4, r1, r2 - ldrh r0, [r4, 0x2E] - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08075914 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] -_08075914: - movs r7, 0x3 - ands r5, r7 - lsls r2, r5, 2 - ldrb r1, [r4, 0x1] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, 0x1] - adds r2, r4, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4, 0x1] - lsls r0, 30 - cmp r0, 0 - bne _0807595C - ldr r0, _0807597C @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0, 0x4] - lsls r0, r6, 1 - adds r0, r6 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x6] - movs r0, 0x1F - ands r1, r0 - lsls r1, 1 - ldrb r2, [r4, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x3] -_0807595C: - ldrb r3, [r4, 0x1] - orrs r3, r7 - strb r3, [r4, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - adds r0, r4, 0 - bl CalcCenterToCornerVec - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08075978: .4byte gSprites -_0807597C: .4byte gBattleSpritesDataPtr - thumb_func_end PrepareBattlerSpriteForRotScale - - thumb_func_start ResetSpriteRotScale -ResetSpriteRotScale: @ 8075980 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r2, 0x80 - lsls r2, 1 - adds r0, r4, 0 - adds r1, r2, 0 - movs r3, 0 - bl SetSpriteRotScale - ldr r1, _080759D8 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrb r2, [r0, 0x1] - movs r1, 0x4 - negs r1, r1 - ands r1, r2 - movs r2, 0x1 - orrs r1, r2 - movs r2, 0xD - negs r2, r2 - ands r1, r2 - strb r1, [r0, 0x1] - adds r3, r0, 0 - adds r3, 0x2C - ldrb r2, [r3] - movs r1, 0x7F - ands r1, r2 - strb r1, [r3] - ldrb r3, [r0, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r0, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - bl CalcCenterToCornerVec - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080759D8: .4byte gSprites - thumb_func_end ResetSpriteRotScale - - thumb_func_start sub_80759DC -sub_80759DC: @ 80759DC - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08075A14 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r2, r1, r2 - ldrb r0, [r2, 0x3] - lsls r0, 26 - lsrs r0, 27 - ldr r1, _08075A18 @ =gOamMatrices - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x4] - movs r3, 0x4 - ldrsh r0, [r0, r3] - cmp r0, 0 - bge _08075A08 - negs r0, r0 - lsls r0, 16 - lsrs r1, r0, 16 -_08075A08: - lsls r0, r1, 16 - asrs r0, 19 - strh r0, [r2, 0x26] - pop {r0} - bx r0 - .align 2, 0 -_08075A14: .4byte gSprites -_08075A18: .4byte gOamMatrices - thumb_func_end sub_80759DC - - thumb_func_start sub_8075A1C -sub_8075A1C: @ 8075A1C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r4, r0, 0 - ldr r0, [sp, 0x28] - lsls r1, 24 - lsrs r6, r1, 24 - lsls r2, 16 - lsrs r5, r2, 16 - lsls r3, 16 - lsrs r7, r3, 16 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - ldrb r0, [r4, 0x1] - lsls r0, 30 - lsrs r0, 30 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08075AC2 - adds r0, r4, 0 - adds r0, 0x2C - ldrb r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0] - cmp r6, 0 - beq _08075A6A - ldrb r3, [r4, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - adds r0, r4, 0 - bl CalcCenterToCornerVec -_08075A6A: - ldr r6, _08075AD0 @ =0xffff0000 - lsls r0, r7, 16 - orrs r5, r0 - str r5, [sp] - ldr r0, [sp, 0x4] - ands r0, r6 - mov r1, r8 - orrs r0, r1 - str r0, [sp, 0x4] - bl sub_80758DC - lsls r0, 24 - cmp r0, 0 - beq _08075A98 - mov r0, sp - ldrh r0, [r0] - negs r0, r0 - lsls r0, 16 - lsrs r0, 16 - ldr r1, [sp] - ands r1, r6 - orrs r1, r0 - str r1, [sp] -_08075A98: - ldrb r4, [r4, 0x3] - lsls r4, 26 - lsrs r4, 27 - add r5, sp, 0x8 - mov r0, sp - adds r1, r5, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ObjAffineSet - ldr r0, _08075AD4 @ =gOamMatrices - lsls r4, 3 - adds r4, r0 - ldrh r0, [r5] - strh r0, [r4] - ldrh r0, [r5, 0x2] - strh r0, [r4, 0x2] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x4] - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x6] -_08075AC2: - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08075AD0: .4byte 0xffff0000 -_08075AD4: .4byte gOamMatrices - thumb_func_end sub_8075A1C - - thumb_func_start sub_8075AD8 -sub_8075AD8: @ 8075AD8 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r3, 0x80 - lsls r3, 1 - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r1, 0x1 - adds r2, r3, 0 - bl sub_8075A1C - adds r2, r4, 0 - adds r2, 0x2C - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] - ldrb r3, [r4, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - adds r0, r4, 0 - bl CalcCenterToCornerVec - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8075AD8 - - thumb_func_start ArcTan2_ -ArcTan2_: @ 8075B18 - push {lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - bl ArcTan2 - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end ArcTan2_ - - thumb_func_start sub_8075B30 -sub_8075B30: @ 8075B30 - push {lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - bl ArcTan2_ - lsls r0, 16 - negs r0, r0 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_8075B30 - - thumb_func_start sub_8075B48 -sub_8075B48: @ 8075B48 - push {r4-r7,lr} - lsls r1, 24 - lsls r0, 20 - lsrs r0, 16 - cmp r1, 0 - bne _08075BC4 - ldr r2, _08075BB8 @ =gPlttBufferUnfaded - ldr r1, _08075BBC @ =gPlttBufferFaded - lsls r0, 1 - adds r4, r0, r1 - adds r5, r0, r2 - movs r6, 0xF -_08075B60: - ldr r0, [r5] - lsls r2, r0, 27 - lsrs r2, 27 - lsls r1, r0, 22 - lsrs r1, 27 - adds r2, r1 - lsls r0, 17 - lsrs r0, 27 - adds r0, r2 - movs r1, 0x3 - bl __udivsi3 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1F - ands r0, r1 - ldrb r1, [r4] - movs r3, 0x20 - negs r3, r3 - adds r2, r3, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r4] - lsls r3, r0, 5 - ldrh r1, [r4] - ldr r7, _08075BC0 @ =0xfffffc1f - adds r2, r7, 0 - ands r1, r2 - orrs r1, r3 - strh r1, [r4] - lsls r0, 2 - ldrb r1, [r4, 0x1] - movs r3, 0x7D - negs r3, r3 - adds r2, r3, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x1] - adds r4, 0x2 - adds r5, 0x2 - subs r6, 0x1 - cmp r6, 0 - bge _08075B60 - b _08075BD4 - .align 2, 0 -_08075BB8: .4byte gPlttBufferUnfaded -_08075BBC: .4byte gPlttBufferFaded -_08075BC0: .4byte 0xfffffc1f -_08075BC4: - lsls r1, r0, 1 - ldr r0, _08075BDC @ =gPlttBufferUnfaded - adds r0, r1, r0 - ldr r2, _08075BE0 @ =gPlttBufferFaded - adds r1, r2 - ldr r2, _08075BE4 @ =0x04000008 - bl CpuSet -_08075BD4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08075BDC: .4byte gPlttBufferUnfaded -_08075BE0: .4byte gPlttBufferFaded -_08075BE4: .4byte 0x04000008 - thumb_func_end sub_8075B48 - - thumb_func_start sub_8075BE8 -sub_8075BE8: @ 8075BE8 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r4, [sp, 0x1C] - ldr r5, [sp, 0x20] - ldr r6, [sp, 0x24] - lsls r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r4, 24 - lsrs r7, r4, 24 - lsls r5, 24 - lsrs r5, 24 - mov r8, r5 - lsls r6, 24 - lsrs r6, 24 - mov r9, r6 - movs r4, 0 - cmp r0, 0 - beq _08075C1C - movs r4, 0xE -_08075C1C: - cmp r1, 0 - beq _08075C2E - ldr r0, _08075CB0 @ =gBattleAnimAttacker - ldrb r0, [r0] - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_08075C2E: - cmp r2, 0 - beq _08075C40 - ldr r0, _08075CB4 @ =gBattleAnimTarget - ldrb r0, [r0] - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_08075C40: - cmp r3, 0 - beq _08075C64 - ldr r6, _08075CB0 @ =gBattleAnimAttacker - ldrb r0, [r6] - movs r5, 0x2 - eors r0, r5 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08075C64 - ldrb r0, [r6] - eors r0, r5 - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_08075C64: - cmp r7, 0 - beq _08075C88 - ldr r6, _08075CB4 @ =gBattleAnimTarget - ldrb r0, [r6] - movs r5, 0x2 - eors r0, r5 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08075C88 - ldrb r0, [r6] - eors r0, r5 - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_08075C88: - mov r0, r8 - cmp r0, 0 - beq _08075C94 - movs r0, 0x80 - lsls r0, 1 - orrs r4, r0 -_08075C94: - mov r0, r9 - cmp r0, 0 - beq _08075CA0 - movs r0, 0x80 - lsls r0, 2 - orrs r4, r0 -_08075CA0: - adds r0, r4, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08075CB0: .4byte gBattleAnimAttacker -_08075CB4: .4byte gBattleAnimTarget - thumb_func_end sub_8075BE8 - - thumb_func_start sub_8075CB8 -sub_8075CB8: @ 8075CB8 - push {r4-r7,lr} - lsls r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r2, 24 - lsrs r6, r2, 24 - lsls r3, 24 - lsrs r7, r3, 24 - movs r4, 0 - cmp r0, 0 - beq _08075CF2 - movs r0, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08075CF2 - movs r0, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x10 - movs r4, 0x1 - lsls r4, r0 -_08075CF2: - cmp r5, 0 - beq _08075D1E - movs r0, 0x2 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08075D1E - movs r0, 0x2 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_08075D1E: - cmp r6, 0 - beq _08075D4A - movs r0, 0x1 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08075D4A - movs r0, 0x1 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_08075D4A: - cmp r7, 0 - beq _08075D76 - movs r0, 0x3 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08075D76 - movs r0, 0x3 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - adds r1, 0x10 - movs r0, 0x1 - lsls r0, r1 - orrs r4, r0 -_08075D76: - adds r0, r4, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8075CB8 - - thumb_func_start sub_8075D80 -sub_8075D80: @ 8075D80 - lsls r0, 24 - lsrs r0, 24 - bx lr - thumb_func_end sub_8075D80 - - thumb_func_start sub_8075D88 -sub_8075D88: @ 8075D88 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_8075D88 - - thumb_func_start sub_8075D9C -sub_8075D9C: @ 8075D9C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08075DDA - ldr r2, _08075DC8 @ =gBattleAnimArgs - movs r3, 0x6 - ldrsh r0, [r2, r3] - movs r1, 0 - cmp r0, 0 - bne _08075DB6 - movs r1, 0x1 -_08075DB6: - movs r3, 0x4 - ldrsh r0, [r2, r3] - cmp r0, 0 - bne _08075DCC - adds r0, r4, 0 - bl sub_8075160 - b _08075DD2 - .align 2, 0 -_08075DC8: .4byte gBattleAnimArgs -_08075DCC: - adds r0, r4, 0 - bl sub_8075114 -_08075DD2: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _08075DEE -_08075DDA: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x30 - ands r0, r1 - cmp r0, 0 - beq _08075DEE - adds r0, r4, 0 - bl move_anim_8074EE0 -_08075DEE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8075D9C - - thumb_func_start sub_8075DF4 -sub_8075DF4: @ 8075DF4 - push {r4-r7,lr} - adds r5, r0, 0 - ldr r6, _08075E6C @ =gBattleAnimArgs - movs r1, 0xA - ldrsh r0, [r6, r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - movs r1, 0 - cmp r0, 0 - bne _08075E0C - movs r1, 0x1 -_08075E0C: - ldrb r0, [r6, 0xA] - movs r7, 0x1 - cmp r0, 0 - bne _08075E16 - movs r7, 0x3 -_08075E16: - adds r0, r5, 0 - bl sub_8075160 - ldr r0, _08075E70 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08075E30 - ldrh r0, [r6, 0x4] - negs r0, r0 - strh r0, [r6, 0x4] -_08075E30: - ldrh r0, [r6, 0x8] - strh r0, [r5, 0x2E] - ldr r4, _08075E74 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r6, 0x4] - adds r0, r1 - strh r0, [r5, 0x32] - ldrb r0, [r4] - adds r1, r7, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r6, [r6, 0x6] - adds r0, r6 - strh r0, [r5, 0x36] - ldr r0, _08075E78 @ =StartAnimLinearTranslation - str r0, [r5, 0x1C] - ldr r1, _08075E7C @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08075E6C: .4byte gBattleAnimArgs -_08075E70: .4byte gBattleAnimAttacker -_08075E74: .4byte gBattleAnimTarget -_08075E78: .4byte StartAnimLinearTranslation -_08075E7C: .4byte DestroyAnimSprite - thumb_func_end sub_8075DF4 - - thumb_func_start sub_8075E80 -sub_8075E80: @ 8075E80 - push {r4-r6,lr} - adds r6, r0, 0 - movs r1, 0x1 - bl sub_8075160 - ldr r0, _08075EE0 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08075EA0 - ldr r1, _08075EE4 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_08075EA0: - ldr r4, _08075EE4 @ =gBattleAnimArgs - ldrh r0, [r4, 0x8] - strh r0, [r6, 0x2E] - ldr r5, _08075EE8 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x4] - adds r0, r1 - strh r0, [r6, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x6] - adds r0, r1 - strh r0, [r6, 0x36] - ldrh r0, [r4, 0xA] - strh r0, [r6, 0x38] - adds r0, r6, 0 - bl sub_8075068 - ldr r0, _08075EEC @ =sub_8075EF0 - str r0, [r6, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08075EE0: .4byte gBattleAnimAttacker -_08075EE4: .4byte gBattleAnimArgs -_08075EE8: .4byte gBattleAnimTarget -_08075EEC: .4byte sub_8075EF0 - thumb_func_end sub_8075E80 - - thumb_func_start sub_8075EF0 -sub_8075EF0: @ 8075EF0 - push {r4,lr} - adds r4, r0, 0 - bl AnimateBallThrow - lsls r0, 24 - cmp r0, 0 - beq _08075F04 - adds r0, r4, 0 - bl DestroyAnimSprite -_08075F04: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8075EF0 - - thumb_func_start sub_8075F0C -sub_8075F0C: @ 8075F0C - push {r4-r7,lr} - adds r5, r0, 0 - ldr r0, _08075F20 @ =gBattleAnimArgs - movs r2, 0xC - ldrsh r1, [r0, r2] - cmp r1, 0 - bne _08075F24 - movs r4, 0x1 - movs r7, 0x3 - b _08075F28 - .align 2, 0 -_08075F20: .4byte gBattleAnimArgs -_08075F24: - movs r4, 0 - movs r7, 0x1 -_08075F28: - movs r1, 0xA - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08075F40 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8075160 - ldr r0, _08075F3C @ =gBattleAnimAttacker - b _08075F4A - .align 2, 0 -_08075F3C: .4byte gBattleAnimAttacker -_08075F40: - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8075114 - ldr r0, _08075FA8 @ =gBattleAnimTarget -_08075F4A: - ldrb r6, [r0] - ldr r0, _08075FAC @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08075F62 - ldr r1, _08075FB0 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_08075F62: - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8075114 - ldr r4, _08075FB0 @ =gBattleAnimArgs - ldrh r0, [r4, 0x8] - strh r0, [r5, 0x2E] - adds r0, r6, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r2, [r4, 0x4] - adds r0, r2 - strh r0, [r5, 0x32] - adds r0, r6, 0 - adds r1, r7, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r4, [r4, 0x6] - adds r0, r4 - strh r0, [r5, 0x36] - ldr r0, _08075FB4 @ =StartAnimLinearTranslation - str r0, [r5, 0x1C] - ldr r1, _08075FB8 @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08075FA8: .4byte gBattleAnimTarget -_08075FAC: .4byte gBattleAnimAttacker -_08075FB0: .4byte gBattleAnimArgs -_08075FB4: .4byte StartAnimLinearTranslation -_08075FB8: .4byte DestroyAnimSprite - thumb_func_end sub_8075F0C - - thumb_func_start CloneBattlerSpriteWithBlend -CloneBattlerSpriteWithBlend: @ 8075FBC - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xFF - beq _08076026 - movs r6, 0 - ldr r2, _08076018 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r1, r0, 2 -_08075FD8: - lsls r0, r6, 4 - adds r0, r6 - lsls r0, 2 - adds r4, r0, r2 - adds r5, r4, 0 - adds r5, 0x3E - ldrb r0, [r5] - lsls r0, 31 - cmp r0, 0 - bne _0807601C - adds r0, r4, 0 - adds r1, r2 - movs r2, 0x44 - bl memcpy - ldrb r1, [r4, 0x1] - movs r2, 0xD - negs r2, r2 - adds r0, r2, 0 - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r4, 0x1] - ldrb r0, [r5] - adds r2, 0x8 - adds r1, r2, 0 - ands r0, r1 - strb r0, [r5] - lsls r0, r6, 16 - asrs r0, 16 - b _0807602A - .align 2, 0 -_08076018: .4byte gSprites -_0807601C: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x3F - bls _08075FD8 -_08076026: - movs r0, 0x1 - negs r0, r0 -_0807602A: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end CloneBattlerSpriteWithBlend - - thumb_func_start obj_delete_but_dont_free_vram -obj_delete_but_dont_free_vram: @ 8076030 - push {lr} - adds r3, r0, 0 - adds r3, 0x3F - ldrb r1, [r3] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r3] - bl DestroySprite - pop {r0} - bx r0 - thumb_func_end obj_delete_but_dont_free_vram - - thumb_func_start sub_8076048 -sub_8076048: @ 8076048 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r6, 0 - movs r3, 0 - ldr r2, _080760C0 @ =gBattleAnimArgs - movs r0, 0x4 - ldrsh r1, [r2, r0] - movs r4, 0 - ldrsh r0, [r2, r4] - cmp r1, r0 - ble _08076062 - movs r3, 0x1 -_08076062: - cmp r1, r0 - bge _08076068 - ldr r3, _080760C4 @ =0x0000ffff -_08076068: - movs r0, 0x6 - ldrsh r1, [r2, r0] - movs r4, 0x2 - ldrsh r0, [r2, r4] - cmp r1, r0 - ble _08076076 - movs r6, 0x1 -_08076076: - cmp r1, r0 - bge _0807607C - ldr r6, _080760C4 @ =0x0000ffff -_0807607C: - ldr r0, _080760C8 @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - movs r1, 0 - strh r1, [r4, 0x8] - ldrh r0, [r2, 0x8] - strh r0, [r4, 0xA] - strh r1, [r4, 0xC] - ldrh r0, [r2] - strh r0, [r4, 0xE] - ldrh r0, [r2, 0x2] - strh r0, [r4, 0x10] - strh r3, [r4, 0x12] - strh r6, [r4, 0x14] - ldrh r0, [r2, 0x4] - strh r0, [r4, 0x16] - ldrh r0, [r2, 0x6] - strh r0, [r4, 0x18] - ldrh r1, [r2, 0x2] - lsls r1, 8 - ldrh r0, [r2] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - ldr r0, _080760CC @ =sub_80760D0 - str r0, [r4] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080760C0: .4byte gBattleAnimArgs -_080760C4: .4byte 0x0000ffff -_080760C8: .4byte gTasks -_080760CC: .4byte sub_80760D0 - thumb_func_end sub_8076048 - - thumb_func_start sub_80760D0 -sub_80760D0: @ 80760D0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0807611C @ =gTasks - adds r4, r0, r1 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - lsls r0, 16 - asrs r0, 16 - movs r2, 0xA - ldrsh r1, [r4, r2] - cmp r0, r1 - ble _08076164 - movs r0, 0 - strh r0, [r4, 0x8] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08076120 - ldrh r2, [r4, 0xE] - movs r3, 0xE - ldrsh r1, [r4, r3] - movs r3, 0x16 - ldrsh r0, [r4, r3] - cmp r1, r0 - beq _08076134 - ldrh r0, [r4, 0x12] - adds r0, r2, r0 - strh r0, [r4, 0xE] - b _08076134 - .align 2, 0 -_0807611C: .4byte gTasks -_08076120: - ldrh r2, [r4, 0x10] - movs r0, 0x10 - ldrsh r1, [r4, r0] - movs r3, 0x18 - ldrsh r0, [r4, r3] - cmp r1, r0 - beq _08076134 - ldrh r0, [r4, 0x14] - adds r0, r2, r0 - strh r0, [r4, 0x10] -_08076134: - ldrh r1, [r4, 0x10] - lsls r1, 8 - ldrh r0, [r4, 0xE] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0xE - ldrsh r1, [r4, r0] - movs r2, 0x16 - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _08076164 - movs r3, 0x10 - ldrsh r1, [r4, r3] - movs r2, 0x18 - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _08076164 - adds r0, r5, 0 - bl DestroyAnimVisualTask -_08076164: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80760D0 - - thumb_func_start sub_807616C -sub_807616C: @ 807616C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0807618C @ =gBattleAnimArgs - ldrb r0, [r0] - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0xFF - bne _08076190 - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _080761B6 - .align 2, 0 -_0807618C: .4byte gBattleAnimArgs -_08076190: - ldr r1, _080761BC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r2, _080761C0 @ =gSprites - lsls r1, r3, 4 - adds r1, r3 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x5] - lsrs r1, 4 - lsls r1, 4 - ldr r3, _080761C4 @ =0x00000101 - adds r2, r3, 0 - adds r1, r2 - strh r1, [r0, 0x8] - bl sub_80761C8 -_080761B6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080761BC: .4byte gTasks -_080761C0: .4byte gSprites -_080761C4: .4byte 0x00000101 - thumb_func_end sub_807616C - - thumb_func_start sub_80761C8 -sub_80761C8: @ 80761C8 - ldr r3, _080761E8 @ =gBattleAnimArgs - ldrh r1, [r3, 0x2] - movs r2, 0 - strh r1, [r0, 0xA] - strh r2, [r0, 0xC] - ldrh r1, [r3, 0x4] - strh r1, [r0, 0xE] - strh r2, [r0, 0x10] - ldrh r1, [r3, 0x6] - strh r1, [r0, 0x12] - strh r2, [r0, 0x14] - ldrh r1, [r3, 0x8] - strh r1, [r0, 0x16] - ldr r1, _080761EC @ =sub_80761F0 - str r1, [r0] - bx lr - .align 2, 0 -_080761E8: .4byte gBattleAnimArgs -_080761EC: .4byte sub_80761F0 - thumb_func_end sub_80761C8 - - thumb_func_start sub_80761F0 -sub_80761F0: @ 80761F0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08076248 @ =gTasks - adds r4, r0, r1 - ldrh r0, [r4, 0x10] - adds r0, 0x1 - strh r0, [r4, 0x10] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x12 - ldrsh r1, [r4, r2] - cmp r0, r1 - blt _08076280 - movs r0, 0 - strh r0, [r4, 0x10] - movs r1, 0x14 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0807624C - ldrh r2, [r4, 0xC] - adds r2, 0x1 - strh r2, [r4, 0xC] - ldrh r0, [r4, 0x8] - lsls r2, 24 - lsrs r2, 24 - ldrh r3, [r4, 0xA] - movs r1, 0xF - bl BlendPalette - movs r2, 0xC - ldrsh r1, [r4, r2] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _08076280 - movs r0, 0x1 - strh r0, [r4, 0x14] - b _08076280 - .align 2, 0 -_08076248: .4byte gTasks -_0807624C: - ldrh r2, [r4, 0xC] - subs r2, 0x1 - strh r2, [r4, 0xC] - ldrh r0, [r4, 0x8] - lsls r2, 24 - lsrs r2, 24 - ldrh r3, [r4, 0xA] - movs r1, 0xF - bl BlendPalette - movs r0, 0xC - ldrsh r1, [r4, r0] - cmp r1, 0 - bne _08076280 - ldrh r0, [r4, 0x16] - subs r0, 0x1 - strh r0, [r4, 0x16] - lsls r0, 16 - cmp r0, 0 - beq _0807627A - strh r1, [r4, 0x10] - strh r1, [r4, 0x14] - b _08076280 -_0807627A: - adds r0, r5, 0 - bl DestroyAnimVisualTask -_08076280: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80761F0 - - thumb_func_start sub_8076288 -sub_8076288: @ 8076288 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080762A8 @ =gBattleAnimArgs - ldrh r0, [r0] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - bne _080762AC - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _080762C2 - .align 2, 0 -_080762A8: .4byte gBattleAnimArgs -_080762AC: - ldr r1, _080762C8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - lsls r1, r2, 4 - ldr r2, _080762CC @ =0x00000101 - adds r1, r2 - strh r1, [r0, 0x8] - bl sub_80761C8 -_080762C2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080762C8: .4byte gTasks -_080762CC: .4byte 0x00000101 - thumb_func_end sub_8076288 - - thumb_func_start sub_80762D0 -sub_80762D0: @ 80762D0 - push {r4,lr} - adds r3, r0, 0 - adds r4, r1, 0 - lsls r4, 24 - lsrs r4, 24 - movs r1, 0 - strh r1, [r3, 0x16] - strh r1, [r3, 0x18] - strh r1, [r3, 0x1A] - strh r4, [r3, 0x26] - movs r0, 0x80 - lsls r0, 1 - strh r0, [r3, 0x1C] - strh r0, [r3, 0x1E] - strh r1, [r3, 0x20] - adds r0, r3, 0 - adds r0, 0x22 - adds r3, 0x24 - adds r1, r3, 0 - bl sub_80765C0 - adds r0, r4, 0 - movs r1, 0 - bl PrepareBattlerSpriteForRotScale - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80762D0 - - thumb_func_start sub_8076308 -sub_8076308: @ 8076308 - push {r4-r6,lr} - adds r4, r0, 0 - ldr r5, _080763A8 @ =gUnknown_2037F28 - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x24 - ldrsh r1, [r4, r2] - bl sub_80765C8 - movs r3, 0x16 - ldrsh r1, [r4, r3] - lsls r1, 3 - adds r1, r0, r1 - str r1, [r5] - movs r6, 0 - ldrsh r2, [r1, r6] - ldr r0, _080763AC @ =0x00007ffe - cmp r2, r0 - beq _080763B0 - cmp r2, r0 - bgt _08076410 - subs r0, 0x1 - cmp r2, r0 - beq _080763B6 - ldrb r0, [r1, 0x5] - cmp r0, 0 - bne _08076356 - ldrh r0, [r1] - strh r0, [r4, 0x1C] - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x1E] - ldrb r0, [r1, 0x4] - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] - adds r0, r1, 0 - adds r0, 0x8 - str r0, [r5] -_08076356: - ldr r1, [r5] - ldrh r0, [r1] - ldrh r2, [r4, 0x1C] - adds r0, r2 - strh r0, [r4, 0x1C] - ldrh r0, [r1, 0x2] - ldrh r3, [r4, 0x1E] - adds r0, r3 - strh r0, [r4, 0x1E] - ldrh r0, [r4, 0x20] - ldrb r1, [r1, 0x4] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - movs r6, 0x1C - ldrsh r1, [r4, r6] - movs r3, 0x1E - ldrsh r2, [r4, r3] - ldrh r3, [r4, 0x20] - bl SetSpriteRotScale - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl sub_8076440 - ldrh r0, [r4, 0x18] - adds r0, 0x1 - strh r0, [r4, 0x18] - lsls r0, 16 - asrs r0, 16 - ldr r1, [r5] - ldrb r1, [r1, 0x5] - cmp r0, r1 - blt _08076436 - movs r0, 0 - strh r0, [r4, 0x18] - b _08076408 - .align 2, 0 -_080763A8: .4byte gUnknown_2037F28 -_080763AC: .4byte 0x00007ffe -_080763B0: - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x16] - b _08076436 -_080763B6: - ldrh r2, [r1, 0x2] - movs r6, 0x2 - ldrsh r0, [r1, r6] - cmp r0, 0 - beq _08076408 - ldrh r1, [r4, 0x1A] - movs r3, 0x1A - ldrsh r0, [r4, r3] - cmp r0, 0 - beq _080763D6 - subs r0, r1, 0x1 - strh r0, [r4, 0x1A] - lsls r0, 16 - cmp r0, 0 - bne _080763D8 - b _08076408 -_080763D6: - strh r2, [r4, 0x1A] -_080763D8: - movs r6, 0x16 - ldrsh r0, [r4, r6] - cmp r0, 0 - beq _08076436 - ldr r3, _08076400 @ =gUnknown_2037F28 - ldr r5, _08076404 @ =0x00007ffd -_080763E4: - ldrh r2, [r4, 0x16] - subs r1, r2, 0x1 - strh r1, [r4, 0x16] - ldr r0, [r3] - subs r0, 0x8 - str r0, [r3] - movs r6, 0 - ldrsh r0, [r0, r6] - cmp r0, r5 - beq _08076434 - lsls r0, r1, 16 - cmp r0, 0 - bne _080763E4 - b _08076436 - .align 2, 0 -_08076400: .4byte gUnknown_2037F28 -_08076404: .4byte 0x00007ffd -_08076408: - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] - b _08076436 -_08076410: - ldr r2, _08076430 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0 - strh r1, [r0, 0x26] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl ResetSpriteRotScale - movs r0, 0 - b _08076438 - .align 2, 0 -_08076430: .4byte gSprites -_08076434: - strh r2, [r4, 0x16] -_08076436: - movs r0, 0x1 -_08076438: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8076308 - - thumb_func_start sub_8076440 -sub_8076440: @ 8076440 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_80764EC - lsls r0, 16 - lsrs r0, 15 - movs r1, 0x40 - subs r5, r1, r0 - ldr r1, _0807648C @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r4, r0, r1 - ldrb r1, [r4, 0x3] - lsls r1, 26 - lsrs r1, 27 - lsls r0, r5, 8 - ldr r2, _08076490 @ =gOamMatrices - lsls r1, 3 - adds r1, r2 - movs r2, 0x6 - ldrsh r1, [r1, r2] - bl __divsi3 - cmp r0, 0x80 - ble _0807647C - movs r0, 0x80 -_0807647C: - subs r0, r5, r0 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - strh r0, [r4, 0x26] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0807648C: .4byte gSprites -_08076490: .4byte gOamMatrices - thumb_func_end sub_8076440 - - thumb_func_start sub_8076494 -sub_8076494: @ 8076494 - push {r4,r5,lr} - adds r4, r0, 0 - adds r0, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r0, 24 - lsrs r0, 24 - bl sub_80764EC - lsls r0, 16 - lsrs r0, 15 - movs r1, 0x40 - subs r5, r1, r0 - ldr r1, _080764E4 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r4, r0, r1 - ldrb r1, [r4, 0x3] - lsls r1, 26 - lsrs r1, 27 - lsls r0, r5, 8 - ldr r2, _080764E8 @ =gOamMatrices - lsls r1, 3 - adds r1, r2 - movs r2, 0x6 - ldrsh r1, [r1, r2] - bl __divsi3 - cmp r0, 0x80 - ble _080764D4 - movs r0, 0x80 -_080764D4: - subs r0, r5, r0 - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - strh r0, [r4, 0x26] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080764E4: .4byte gSprites -_080764E8: .4byte gOamMatrices - thumb_func_end sub_8076494 - - thumb_func_start sub_80764EC -sub_80764EC: @ 80764EC - push {r4-r6,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _08076548 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0, 0x2E] - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r1, _0807654C @ =gBattlerSpriteIds - ldr r6, _08076550 @ =gBattlerPartyIndexes -_08076508: - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, r2 - bne _080765AC - lsls r0, r4, 24 - lsrs r0, 24 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08076568 - ldr r0, _08076554 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r5, 2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _0807655C - lsls r0, r4, 1 - adds r0, r6 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08076558 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - b _0807655E - .align 2, 0 -_08076548: .4byte gSprites -_0807654C: .4byte gBattlerSpriteIds -_08076550: .4byte gBattlerPartyIndexes -_08076554: .4byte gBattleSpritesDataPtr -_08076558: .4byte gPlayerParty -_0807655C: - ldrh r1, [r1, 0x2] -_0807655E: - ldr r0, _08076564 @ =gUnknown_8235E6C - b _080765A0 - .align 2, 0 -_08076564: .4byte gUnknown_8235E6C -_08076568: - ldr r0, _08076594 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - lsls r0, r5, 2 - adds r1, r0, r1 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _0807659C - lsls r0, r4, 1 - adds r0, r6 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08076598 @ =gEnemyParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - b _0807659E - .align 2, 0 -_08076594: .4byte gBattleSpritesDataPtr -_08076598: .4byte gEnemyParty -_0807659C: - ldrh r1, [r1, 0x2] -_0807659E: - ldr r0, _080765A8 @ =gUnknown_82349CC -_080765A0: - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x1] - b _080765B8 - .align 2, 0 -_080765A8: .4byte gUnknown_82349CC -_080765AC: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _08076508 - movs r0, 0x40 -_080765B8: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80764EC - - thumb_func_start sub_80765C0 -sub_80765C0: @ 80765C0 - strh r2, [r0] - asrs r2, 16 - strh r2, [r1] - bx lr - thumb_func_end sub_80765C0 - - thumb_func_start sub_80765C8 -sub_80765C8: @ 80765C8 - lsls r0, 16 - lsrs r0, 16 - lsls r1, 16 - orrs r0, r1 - bx lr - thumb_func_end sub_80765C8 - - thumb_func_start sub_80765D4 -sub_80765D4: @ 80765D4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - adds r5, r3, 0 - ldr r0, [sp, 0x14] - ldr r4, [sp, 0x18] - ldr r6, [sp, 0x1C] - lsls r1, 24 - lsrs r1, 24 - lsls r2, 16 - lsrs r2, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r0, 16 - lsrs r0, 16 - lsls r4, 16 - lsrs r4, 16 - lsls r6, 16 - lsrs r6, 16 - mov r3, r8 - strh r6, [r3, 0x18] - strh r1, [r3, 0x26] - strh r2, [r3, 0x1A] - strh r5, [r3, 0x1C] - strh r0, [r3, 0x22] - strh r4, [r3, 0x24] - lsls r0, 16 - asrs r0, 16 - lsls r2, 16 - asrs r2, 16 - subs r0, r2 - adds r1, r6, 0 - bl __divsi3 - mov r1, r8 - strh r0, [r1, 0x1E] - lsls r4, 16 - asrs r4, 16 - lsls r5, 16 - asrs r5, 16 - subs r4, r5 - adds r0, r4, 0 - adds r1, r6, 0 - bl __divsi3 - mov r3, r8 - strh r0, [r3, 0x20] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80765D4 - - thumb_func_start sub_8076640 -sub_8076640: @ 8076640 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x18] - movs r2, 0x18 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _08076652 - movs r0, 0 - b _080766AE -_08076652: - subs r0, r1, 0x1 - strh r0, [r4, 0x18] - lsls r0, 16 - cmp r0, 0 - beq _0807666C - ldrh r0, [r4, 0x1E] - ldrh r3, [r4, 0x1A] - adds r0, r3 - strh r0, [r4, 0x1A] - ldrh r0, [r4, 0x20] - ldrh r1, [r4, 0x1C] - adds r0, r1 - b _08076672 -_0807666C: - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x1A] - ldrh r0, [r4, 0x24] -_08076672: - strh r0, [r4, 0x1C] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - movs r2, 0x1A - ldrsh r1, [r4, r2] - movs r3, 0x1C - ldrsh r2, [r4, r3] - movs r3, 0 - bl SetSpriteRotScale - movs r0, 0x18 - ldrsh r3, [r4, r0] - cmp r3, 0 - beq _0807669C - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl sub_8076440 - b _080766AC -_0807669C: - ldr r2, _080766B4 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r3, [r0, 0x26] -_080766AC: - ldrb r0, [r4, 0x18] -_080766AE: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080766B4: .4byte gSprites - thumb_func_end sub_8076640 - - thumb_func_start sub_80766B8 -sub_80766B8: @ 80766B8 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080766E4 @ =gAnimFriendship - ldrb r0, [r0] - movs r1, 0 - cmp r0, 0x1E - bls _080766D6 - movs r1, 0x1 - cmp r0, 0x64 - bls _080766D6 - movs r1, 0x3 - cmp r0, 0xC8 - bhi _080766D6 - movs r1, 0x2 -_080766D6: - ldr r0, _080766E8 @ =gBattleAnimArgs - strh r1, [r0, 0xE] - adds r0, r2, 0 - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .align 2, 0 -_080766E4: .4byte gAnimFriendship -_080766E8: .4byte gBattleAnimArgs - thumb_func_end sub_80766B8 - - thumb_func_start sub_80766EC -sub_80766EC: @ 80766EC - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r4, r0, 24 - adds r7, r4, 0 - ldr r6, _080767E0 @ =gBattleAnimTarget - ldrb r0, [r6] - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _0807672C - ldr r2, _080767E4 @ =gSprites - ldr r1, _080767E8 @ =gBattlerSpriteIds - ldrb r0, [r6] - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0x3 - adds r2, r4, 0 - ands r2, r0 - lsls r2, 2 - ldrb r3, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x5] -_0807672C: - ldr r0, _080767EC @ =gBattleAnimAttacker - mov r8, r0 - ldrb r0, [r0] - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08076764 - ldr r2, _080767E4 @ =gSprites - ldr r1, _080767E8 @ =gBattlerSpriteIds - mov r3, r8 - ldrb r0, [r3] - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0x3 - adds r2, r4, 0 - ands r2, r0 - lsls r2, 2 - ldrb r3, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x5] -_08076764: - ldrb r0, [r6] - movs r5, 0x2 - eors r0, r5 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _0807679C - ldr r2, _080767E4 @ =gSprites - ldr r1, _080767E8 @ =gBattlerSpriteIds - ldrb r0, [r6] - eors r0, r5 - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0x3 - adds r2, r4, 0 - ands r2, r0 - lsls r2, 2 - ldrb r3, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x5] -_0807679C: - mov r1, r8 - ldrb r0, [r1] - eors r0, r5 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080767D4 - ldr r2, _080767E4 @ =gSprites - ldr r1, _080767E8 @ =gBattlerSpriteIds - mov r3, r8 - ldrb r0, [r3] - eors r0, r5 - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0x3 - ands r7, r0 - lsls r3, r7, 2 - ldrb r2, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] -_080767D4: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080767E0: .4byte gBattleAnimTarget -_080767E4: .4byte gSprites -_080767E8: .4byte gBattlerSpriteIds -_080767EC: .4byte gBattleAnimAttacker - thumb_func_end sub_80766EC - - thumb_func_start sub_80767F0 -sub_80767F0: @ 80767F0 - push {r4-r6,lr} - movs r5, 0 - ldr r0, _08076850 @ =gBattlersCount - ldrb r0, [r0] - cmp r5, r0 - bge _0807684A - ldr r6, _08076854 @ =gSprites -_080767FE: - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _08076840 - adds r0, r4, 0 - bl GetBattlerSpriteSubpriority - ldr r3, _08076858 @ =gBattlerSpriteIds - adds r3, r5, r3 - ldrb r2, [r3] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r6 - adds r1, 0x43 - strb r0, [r1] - ldrb r1, [r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrb r2, [r0, 0x5] - movs r3, 0xD - negs r3, r3 - adds r1, r3, 0 - ands r2, r1 - movs r1, 0x8 - orrs r2, r1 - strb r2, [r0, 0x5] -_08076840: - adds r5, 0x1 - ldr r0, _08076850 @ =gBattlersCount - ldrb r0, [r0] - cmp r5, r0 - blt _080767FE -_0807684A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08076850: .4byte gBattlersCount -_08076854: .4byte gSprites -_08076858: .4byte gBattlerSpriteIds - thumb_func_end sub_80767F0 - - thumb_func_start GetBattlerSpriteSubpriority -GetBattlerSpriteSubpriority: @ 807685C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1E - cmp r0, 0 - beq _0807687E - movs r1, 0x14 - cmp r0, 0x2 - beq _0807687E - movs r1, 0x32 - cmp r0, 0x1 - bne _0807687E - movs r1, 0x28 -_0807687E: - adds r0, r1, 0 - pop {r1} - bx r1 - thumb_func_end GetBattlerSpriteSubpriority - - thumb_func_start sub_8076884 -sub_8076884: @ 8076884 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _0807689A - cmp r0, 0x3 - bne _0807689E -_0807689A: - movs r0, 0x2 - b _080768A0 -_0807689E: - movs r0, 0x1 -_080768A0: - movs r1, 0x4 - bl GetAnimBgAttribute - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_8076884 - - thumb_func_start sub_80768B0 -sub_80768B0: @ 80768B0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080768C6 - cmp r0, 0x3 - bne _080768CA -_080768C6: - movs r0, 0x2 - b _080768CC -_080768CA: - movs r0, 0x1 -_080768CC: - pop {r1} - bx r1 - thumb_func_end sub_80768B0 - - thumb_func_start sub_80768D0 -sub_80768D0: @ 80768D0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - ldr r4, [sp, 0x30] - ldr r5, [sp, 0x34] - ldr r6, [sp, 0x38] - mov r8, r6 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 16 - lsrs r3, 16 - mov r10, r3 - lsls r4, 16 - lsrs r4, 16 - str r4, [sp, 0x4] - lsls r5, 24 - lsrs r5, 24 - str r5, [sp, 0x8] - lsls r0, r7, 3 - ldr r1, _080769B0 @ =gUnknown_83AE084 - adds r0, r1 - bl LoadSpriteSheet - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0xC] - ldr r1, _080769B4 @ =gUnknown_83AE054 - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - ldrh r0, [r0, 0x2] - bl AllocSpritePalette - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _080769B8 @ =gMonSpritesGfxPtr - ldr r0, [r4] - cmp r0, 0 - beq _0807694E - movs r1, 0xBE - lsls r1, 1 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _0807694E - movs r0, 0x80 - lsls r0, 6 - bl AllocZeroed - ldr r1, [r4] - movs r2, 0xBE - lsls r2, 1 - adds r1, r2 - str r0, [r1] -_0807694E: - mov r3, r9 - cmp r3, 0 - bne _080769EC - adds r0, r6, 0 - ldr r1, [sp, 0x3C] - mov r2, r8 - bl GetMonSpritePalFromSpeciesAndPersonality - lsls r1, r5, 20 - movs r2, 0x80 - lsls r2, 17 - adds r1, r2 - lsrs r1, 16 - movs r2, 0x20 - bl LoadCompressedPalette - ldr r3, [sp, 0x44] - cmp r3, 0x1 - beq _0807699A - ldr r0, [sp, 0x40] - lsls r1, r0, 24 - lsrs r1, 24 - movs r0, 0x5 - bl sub_804455C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0807699A - ldr r0, _080769BC @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - ldr r2, [sp, 0x40] - lsls r0, r2, 2 - adds r0, r1 - ldrh r0, [r0, 0x2] - cmp r0, 0 - beq _080769C4 -_0807699A: - lsls r0, r6, 3 - ldr r1, _080769C0 @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _080769B8 @ =gMonSpritesGfxPtr - ldr r1, [r1] - movs r3, 0xBE - lsls r3, 1 - adds r1, r3 - ldr r1, [r1] - movs r2, 0x1 - b _08076A46 - .align 2, 0 -_080769B0: .4byte gUnknown_83AE084 -_080769B4: .4byte gUnknown_83AE054 -_080769B8: .4byte gMonSpritesGfxPtr -_080769BC: .4byte gBattleSpritesDataPtr -_080769C0: .4byte gMonFrontPicTable -_080769C4: - lsls r0, r6, 3 - ldr r1, _080769E4 @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _080769E8 @ =gMonSpritesGfxPtr - ldr r1, [r1] - movs r2, 0xBE - lsls r2, 1 - adds r1, r2 - ldr r1, [r1] - movs r2, 0x1 - str r2, [sp] - adds r2, r6, 0 - mov r3, r8 - bl LoadSpecialPokePic - b _08076A7C - .align 2, 0 -_080769E4: .4byte gMonFrontPicTable -_080769E8: .4byte gMonSpritesGfxPtr -_080769EC: - adds r0, r6, 0 - ldr r1, [sp, 0x3C] - mov r2, r8 - bl GetMonSpritePalFromSpeciesAndPersonality - lsls r1, r5, 20 - movs r3, 0x80 - lsls r3, 17 - adds r1, r3 - lsrs r1, 16 - movs r2, 0x20 - bl LoadCompressedPalette - ldr r0, [sp, 0x44] - cmp r0, 0x1 - beq _08076A32 - ldr r2, [sp, 0x40] - lsls r1, r2, 24 - lsrs r1, 24 - movs r0, 0x5 - bl sub_804455C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08076A32 - ldr r0, _08076A54 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r1, [r0] - ldr r3, [sp, 0x40] - lsls r0, r3, 2 - adds r0, r1 - ldrh r2, [r0, 0x2] - cmp r2, 0 - beq _08076A60 -_08076A32: - lsls r0, r6, 3 - ldr r1, _08076A58 @ =gMonBackPicTable - adds r0, r1 - ldr r1, _08076A5C @ =gMonSpritesGfxPtr - ldr r1, [r1] - movs r2, 0xBE - lsls r2, 1 - adds r1, r2 - ldr r1, [r1] - movs r2, 0 -_08076A46: - str r2, [sp] - adds r2, r6, 0 - mov r3, r8 - bl LoadSpecialPokePic_DontHandleDeoxys - b _08076A7C - .align 2, 0 -_08076A54: .4byte gBattleSpritesDataPtr -_08076A58: .4byte gMonBackPicTable -_08076A5C: .4byte gMonSpritesGfxPtr -_08076A60: - lsls r0, r6, 3 - ldr r1, _08076AC8 @ =gMonBackPicTable - adds r0, r1 - ldr r1, _08076ACC @ =gMonSpritesGfxPtr - ldr r1, [r1] - movs r3, 0xBE - lsls r3, 1 - adds r1, r3 - ldr r1, [r1] - str r2, [sp] - adds r2, r6, 0 - mov r3, r8 - bl LoadSpecialPokePic -_08076A7C: - ldr r5, _08076ACC @ =gMonSpritesGfxPtr - ldr r0, [r5] - movs r4, 0xBE - lsls r4, 1 - adds r0, r4 - ldr r0, [r0] - ldr r2, [sp, 0xC] - lsls r1, r2, 5 - ldr r3, _08076AD0 @ =0x06010000 - adds r1, r3 - movs r2, 0x80 - lsls r2, 4 - movs r3, 0x1 - bl RequestDma3Copy - ldr r0, [r5] - adds r0, r4 - ldr r0, [r0] - bl Free - ldr r0, [r5] - adds r0, r4 - movs r1, 0 - str r1, [r0] - mov r0, r9 - cmp r0, 0 - bne _08076ADC - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 3 - ldr r1, _08076AD4 @ =gUnknown_83AE054 - adds r0, r1 - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - ldr r3, _08076AD8 @ =gUnknown_82349CC - b _08076AEE - .align 2, 0 -_08076AC8: .4byte gMonBackPicTable -_08076ACC: .4byte gMonSpritesGfxPtr -_08076AD0: .4byte 0x06010000 -_08076AD4: .4byte gUnknown_83AE054 -_08076AD8: .4byte gUnknown_82349CC -_08076ADC: - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 3 - ldr r1, _08076B18 @ =gUnknown_83AE054 - adds r0, r1 - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - ldr r3, _08076B1C @ =gUnknown_8235E6C -_08076AEE: - lsls r2, r6, 2 - adds r2, r3 - ldrb r2, [r2, 0x1] - ldr r3, [sp, 0x4] - adds r2, r3 - lsls r2, 16 - asrs r2, 16 - ldr r3, [sp, 0x8] - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08076B18: .4byte gUnknown_83AE054 -_08076B1C: .4byte gUnknown_8235E6C - thumb_func_end sub_80768D0 - - thumb_func_start sub_8076B20 -sub_8076B20: @ 8076B20 - push {lr} - bl DestroySpriteAndFreeResources - pop {r0} - bx r0 - thumb_func_end sub_8076B20 - - thumb_func_start sub_8076B2C -sub_8076B2C: @ 8076B2C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08076C08 - ldr r0, _08076B88 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0] - mov r1, r8 - lsls r2, r1, 2 - adds r1, r2, r0 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _08076B94 - ldr r0, _08076B8C @ =gBattlerPartyIndexes - mov r1, r8 - lsls r4, r1, 1 - adds r4, r0 - ldrh r0, [r4] - movs r6, 0x64 - muls r0, r6 - ldr r5, _08076B90 @ =gPlayerParty - adds r0, r5 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r7, r0, 16 - ldrh r0, [r4] - muls r0, r6 - adds r0, r5 - movs r1, 0 - bl GetMonData - adds r2, r0, 0 - b _08076B9C - .align 2, 0 -_08076B88: .4byte gBattleSpritesDataPtr -_08076B8C: .4byte gBattlerPartyIndexes -_08076B90: .4byte gPlayerParty -_08076B94: - ldrh r7, [r1, 0x2] - ldr r0, _08076BD4 @ =gTransformedPersonalities - adds r0, r2, r0 - ldr r2, [r0] -_08076B9C: - cmp r7, 0xC9 - bne _08076BEC - movs r0, 0xC0 - lsls r0, 18 - ands r0, r2 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r2 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r2 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r2 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _08076BD8 - movs r0, 0xC9 - b _08076BE2 - .align 2, 0 -_08076BD4: .4byte gTransformedPersonalities -_08076BD8: - movs r1, 0xCE - lsls r1, 1 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 -_08076BE2: - lsls r1, r0, 2 - ldr r0, _08076BE8 @ =gUnknown_8235E6C - b _08076CDC - .align 2, 0 -_08076BE8: .4byte gUnknown_8235E6C -_08076BEC: - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - bls _08076BFC - ldr r4, _08076BF8 @ =gUnknown_8235E6C - b _08076CDE - .align 2, 0 -_08076BF8: .4byte gUnknown_8235E6C -_08076BFC: - lsls r1, r7, 2 - ldr r0, _08076C04 @ =gUnknown_8235E6C - b _08076CDC - .align 2, 0 -_08076C04: .4byte gUnknown_8235E6C -_08076C08: - ldr r0, _08076C48 @ =gBattleSpritesDataPtr - ldr r0, [r0] - ldr r0, [r0] - mov r1, r8 - lsls r2, r1, 2 - adds r1, r2, r0 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _08076C54 - ldr r0, _08076C4C @ =gBattlerPartyIndexes - mov r1, r8 - lsls r4, r1, 1 - adds r4, r0 - ldrh r0, [r4] - movs r6, 0x64 - muls r0, r6 - ldr r5, _08076C50 @ =gEnemyParty - adds r0, r5 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r7, r0, 16 - ldrh r0, [r4] - muls r0, r6 - adds r0, r5 - movs r1, 0 - bl GetMonData - adds r2, r0, 0 - b _08076C5C - .align 2, 0 -_08076C48: .4byte gBattleSpritesDataPtr -_08076C4C: .4byte gBattlerPartyIndexes -_08076C50: .4byte gEnemyParty -_08076C54: - ldrh r7, [r1, 0x2] - ldr r0, _08076C94 @ =gTransformedPersonalities - adds r0, r2, r0 - ldr r2, [r0] -_08076C5C: - cmp r7, 0xC9 - bne _08076CA6 - movs r0, 0xC0 - lsls r0, 18 - ands r0, r2 - lsrs r0, 18 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r2 - lsrs r1, 12 - orrs r0, r1 - movs r1, 0xC0 - lsls r1, 2 - ands r1, r2 - lsrs r1, 6 - orrs r0, r1 - movs r1, 0x3 - ands r1, r2 - orrs r0, r1 - movs r1, 0x1C - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _08076C98 - movs r0, 0xC9 - b _08076CA2 - .align 2, 0 -_08076C94: .4byte gTransformedPersonalities -_08076C98: - movs r1, 0xCE - lsls r1, 1 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 -_08076CA2: - lsls r1, r0, 2 - b _08076CDA -_08076CA6: - ldr r0, _08076CBC @ =0x00000181 - cmp r7, r0 - bne _08076CC8 - ldr r0, _08076CC0 @ =gBattleMonForms - add r0, r8 - ldrb r0, [r0] - lsls r0, 2 - ldr r1, _08076CC4 @ =gUnknown_83AE03C - adds r4, r0, r1 - b _08076CDE - .align 2, 0 -_08076CBC: .4byte 0x00000181 -_08076CC0: .4byte gBattleMonForms -_08076CC4: .4byte gUnknown_83AE03C -_08076CC8: - movs r0, 0xCE - lsls r0, 1 - cmp r7, r0 - bls _08076CD8 - ldr r4, _08076CD4 @ =gUnknown_82349CC - b _08076CDE - .align 2, 0 -_08076CD4: .4byte gUnknown_82349CC -_08076CD8: - lsls r1, r7, 2 -_08076CDA: - ldr r0, _08076CF0 @ =gUnknown_82349CC -_08076CDC: - adds r4, r1, r0 -_08076CDE: - mov r0, r9 - cmp r0, 0x6 - bhi _08076D8E - lsls r0, 2 - ldr r1, _08076CF4 @ =_08076CF8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08076CF0: .4byte gUnknown_82349CC -_08076CF4: .4byte _08076CF8 - .align 2, 0 -_08076CF8: - .4byte _08076D14 - .4byte _08076D1E - .4byte _08076D4A - .4byte _08076D62 - .4byte _08076D26 - .4byte _08076D38 - .4byte _08076D7A -_08076D14: - ldrb r1, [r4] - movs r0, 0xF - ands r0, r1 - lsls r0, 3 - b _08076D90 -_08076D1E: - ldrb r0, [r4] - lsrs r0, 4 - lsls r0, 3 - b _08076D90 -_08076D26: - mov r0, r8 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r4] - lsrs r1, 4 - b _08076D5C -_08076D38: - mov r0, r8 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r4] - lsrs r1, 4 - b _08076D74 -_08076D4A: - mov r0, r8 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrb r2, [r4] - movs r1, 0xF - ands r1, r2 -_08076D5C: - lsls r1, 2 - subs r0, r1 - b _08076D90 -_08076D62: - mov r0, r8 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrb r2, [r4] - movs r1, 0xF - ands r1, r2 -_08076D74: - lsls r1, 2 - adds r0, r1 - b _08076D90 -_08076D7A: - mov r0, r8 - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1F - ldrb r1, [r4, 0x1] - subs r0, r1 - b _08076D90 -_08076D8E: - movs r0, 0 -_08076D90: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8076B2C - - thumb_func_start sub_8076D9C -sub_8076D9C: @ 8076D9C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - mov r9, r2 - mov r10, r3 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - cmp r1, 0 - bne _08076DBA - movs r5, 0 - movs r6, 0x1 - b _08076DBE -_08076DBA: - movs r5, 0x2 - movs r6, 0x3 -_08076DBE: - adds r0, r4, 0 - adds r1, r5, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - adds r0, r4, 0 - adds r1, r6, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r7, r0, 24 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _08076E06 - movs r0, 0x2 - eors r4, r0 - adds r0, r4, 0 - adds r1, r5, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - adds r1, r6, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r3, r0, 24 - mov r0, r8 - lsls r1, r0, 16 - lsls r2, r7, 16 - b _08076E12 -_08076E06: - mov r0, r8 - lsls r1, r0, 16 - lsrs r5, r1, 16 - lsls r0, r7, 16 - lsrs r3, r0, 16 - adds r2, r0, 0 -_08076E12: - asrs r0, r1, 16 - adds r0, r5 - asrs r0, 1 - mov r1, r9 - strh r0, [r1] - asrs r0, r2, 16 - adds r0, r3 - asrs r0, 1 - mov r1, r10 - strh r0, [r1] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8076D9C - - thumb_func_start sub_8076E34 -sub_8076E34: @ 8076E34 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x4 - lsls r6, r1, 24 - lsrs r6, 24 - ldr r0, _08076ECC @ =SpriteCallbackDummy - mov r10, r0 - bl CreateInvisibleSpriteWithCallback - mov r8, r0 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _08076ED0 @ =gSprites - mov r9, r0 - mov r0, r8 - lsls r3, r0, 4 - add r3, r8 - lsls r3, 2 - mov r0, r9 - adds r5, r3, r0 - lsls r4, r6, 4 - adds r4, r6 - lsls r4, 2 - add r4, r9 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0x44 - str r3, [sp] - bl memcpy - adds r2, r5, 0 - adds r2, 0x3F - ldrb r0, [r2] - movs r1, 0x40 - orrs r0, r1 - strb r0, [r2] - ldrb r2, [r5, 0x5] - movs r1, 0xD - negs r1, r1 - adds r0, r1, 0 - ands r0, r2 - strb r0, [r5, 0x5] - ldrb r0, [r5, 0x1] - ands r1, r0 - movs r0, 0x8 - orrs r1, r0 - strb r1, [r5, 0x1] - ldrh r1, [r4, 0x4] - lsls r1, 22 - lsrs r1, 22 - ldrh r2, [r5, 0x4] - ldr r0, _08076ED4 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - movs r0, 0x1C - add r9, r0 - ldr r3, [sp] - add r3, r9 - mov r0, r10 - str r0, [r3] - mov r0, r8 - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08076ECC: .4byte SpriteCallbackDummy -_08076ED0: .4byte gSprites -_08076ED4: .4byte 0xfffffc00 - thumb_func_end sub_8076E34 - - thumb_func_start sub_8076ED8 -sub_8076ED8: @ 8076ED8 - push {r4,lr} - adds r4, r0, 0 - bl sub_8074FCC - ldr r0, _08076F10 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08076F18 - ldr r2, _08076F14 @ =gBattleAnimArgs - ldrh r0, [r4, 0x20] - ldrh r1, [r2] - subs r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r2, 0x6] - negs r0, r0 - strh r0, [r2, 0x6] - adds r3, r4, 0 - adds r3, 0x3F - ldrb r0, [r3] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r3] - adds r1, r2, 0 - b _08076F22 - .align 2, 0 -_08076F10: .4byte gBattleAnimAttacker -_08076F14: .4byte gBattleAnimArgs -_08076F18: - ldr r1, _08076F4C @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] -_08076F22: - ldrh r0, [r1, 0x2] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x34] - ldrh r0, [r1, 0xA] - strh r0, [r4, 0x38] - ldr r1, _08076F50 @ =move_anim_8074EE0 - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _08076F54 @ =sub_8074E70 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08076F4C: .4byte gBattleAnimArgs -_08076F50: .4byte move_anim_8074EE0 -_08076F54: .4byte sub_8074E70 - thumb_func_end sub_8076ED8 - - thumb_func_start sub_8076F58 -sub_8076F58: @ 8076F58 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08076F80 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08076F88 - ldr r2, _08076F84 @ =gBattleAnimArgs - ldrh r0, [r4, 0x20] - ldrh r1, [r2] - subs r0, r1 - strh r0, [r4, 0x20] - movs r1, 0x6 - ldrsh r0, [r2, r1] - negs r0, r0 - strh r0, [r2, 0x6] - adds r1, r2, 0 - b _08076F92 - .align 2, 0 -_08076F80: .4byte gBattleAnimAttacker -_08076F84: .4byte gBattleAnimArgs -_08076F88: - ldr r1, _08076FC4 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] -_08076F92: - ldrh r0, [r1, 0x2] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x34] - ldrh r0, [r1, 0xA] - strh r0, [r4, 0x38] - ldrb r1, [r1, 0xC] - adds r0, r4, 0 - bl StartSpriteAnim - ldr r1, _08076FC8 @ =move_anim_8074EE0 - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _08076FCC @ =sub_8074E70 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08076FC4: .4byte gBattleAnimArgs -_08076FC8: .4byte move_anim_8074EE0 -_08076FCC: .4byte sub_8074E70 - thumb_func_end sub_8076F58 - - thumb_func_start sub_8076FD0 -sub_8076FD0: @ 8076FD0 - push {r4,lr} - adds r4, r0, 0 - bl sub_8074FCC - ldr r0, _08076FF4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08076FFC - ldr r0, _08076FF8 @ =gBattleAnimArgs - ldrh r1, [r4, 0x20] - ldrh r2, [r0] - subs r1, r2 - strh r1, [r4, 0x20] - b _08077008 - .align 2, 0 -_08076FF4: .4byte gBattleAnimAttacker -_08076FF8: .4byte gBattleAnimArgs -_08076FFC: - ldr r1, _08077024 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - adds r0, r1, 0 -_08077008: - ldrh r0, [r0, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldr r0, _08077028 @ =sub_8074F6C - str r0, [r4, 0x1C] - ldr r1, _0807702C @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08077024: .4byte gBattleAnimArgs -_08077028: .4byte sub_8074F6C -_0807702C: .4byte DestroyAnimSprite - thumb_func_end sub_8076FD0 - - thumb_func_start sub_8077030 -sub_8077030: @ 8077030 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080770C4 @ =gTasks - adds r5, r1, r0 - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - movs r6, 0 - strh r0, [r5, 0x8] - ldr r7, _080770C8 @ =gBattleAnimAttacker - ldrb r0, [r7] - bl GetBattlerSide - lsls r0, 24 - movs r1, 0x8 - cmp r0, 0 - beq _08077064 - movs r0, 0x8 - negs r0, r0 - adds r1, r0, 0 -_08077064: - strh r1, [r5, 0xA] - strh r6, [r5, 0xC] - strh r6, [r5, 0xE] - ldr r4, _080770CC @ =gSprites - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r0, 0x24] - ldrh r2, [r5, 0x8] - subs r1, r2 - strh r1, [r0, 0x24] - ldr r0, _080770D0 @ =0x00002771 - bl AllocSpritePalette - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x10] - strh r6, [r5, 0x12] - movs r1, 0x10 - ldrsh r0, [r5, r1] - adds r0, 0x10 - lsls r0, 20 - lsrs r6, r0, 16 - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x5] - lsrs r0, 4 - adds r0, 0x10 - lsls r4, r0, 4 - ldrb r0, [r7] - bl GetBattlerSpriteSubpriority - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x14] - cmp r0, 0x14 - beq _080770C0 - cmp r0, 0x28 - bne _080770D4 -_080770C0: - movs r0, 0x2 - b _080770D6 - .align 2, 0 -_080770C4: .4byte gTasks -_080770C8: .4byte gBattleAnimAttacker -_080770CC: .4byte gSprites -_080770D0: .4byte 0x00002771 -_080770D4: - movs r0, 0x3 -_080770D6: - strh r0, [r5, 0x14] - lsls r0, r4, 1 - ldr r1, _08077104 @ =gPlttBufferUnfaded - adds r0, r1 - lsls r1, r6, 1 - ldr r2, _08077108 @ =gPlttBufferFaded - adds r1, r2 - ldr r2, _0807710C @ =0x04000008 - bl CpuSet - ldr r0, _08077110 @ =gBattleAnimArgs - ldrb r2, [r0, 0x2] - ldrh r3, [r0] - adds r0, r6, 0 - movs r1, 0x10 - bl BlendPalette - ldr r0, _08077114 @ =sub_8077118 - str r0, [r5] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08077104: .4byte gPlttBufferUnfaded -_08077108: .4byte gPlttBufferFaded -_0807710C: .4byte 0x04000008 -_08077110: .4byte gBattleAnimArgs -_08077114: .4byte sub_8077118 - thumb_func_end sub_8077030 - - thumb_func_start sub_8077118 -sub_8077118: @ 8077118 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0807713C @ =gTasks - adds r4, r0, r1 - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0807717C - cmp r0, 0x1 - bgt _08077140 - cmp r0, 0 - beq _08077146 - b _080771D8 - .align 2, 0 -_0807713C: .4byte gTasks -_08077140: - cmp r0, 0x2 - beq _080771C4 - b _080771D8 -_08077146: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80771E4 - ldr r2, _08077178 @ =gSprites - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r4, 0xA] - ldrh r2, [r0, 0x24] - adds r1, r2 - strh r1, [r0, 0x24] - ldrh r1, [r4, 0xE] - adds r0, r1, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - bne _080771D8 - strh r1, [r4, 0xE] - b _080771B6 - .align 2, 0 -_08077178: .4byte gSprites -_0807717C: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80771E4 - ldr r3, _080771C0 @ =gSprites - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x24] - ldrh r2, [r4, 0xA] - subs r1, r2 - strh r1, [r0, 0x24] - ldrh r0, [r4, 0xE] - subs r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0 - bne _080771D8 - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - strh r2, [r1, 0x24] -_080771B6: - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - b _080771D8 - .align 2, 0 -_080771C0: .4byte gSprites -_080771C4: - movs r2, 0x12 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080771D8 - ldr r0, _080771E0 @ =0x00002771 - bl FreeSpritePaletteByTag - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080771D8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080771E0: .4byte 0x00002771 - thumb_func_end sub_8077118 - - thumb_func_start sub_80771E4 -sub_80771E4: @ 80771E4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - movs r0, 0 - bl CloneBattlerSpriteWithBlend - lsls r0, 16 - lsrs r7, r0, 16 - asrs r0, 16 - cmp r0, 0 - blt _08077254 - ldr r5, _08077260 @ =gSprites - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r3, r4, r5 - movs r0, 0x3 - ldrb r1, [r6, 0x14] - ands r1, r0 - lsls r1, 2 - ldrb r2, [r3, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x5] - ldrb r1, [r6, 0x10] - lsls r1, 4 - movs r2, 0xF - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x5] - movs r0, 0x8 - strh r0, [r3, 0x2E] - mov r0, r8 - strh r0, [r3, 0x30] - strh r7, [r3, 0x32] - movs r0, 0x8 - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r0, [r0, 0x24] - strh r0, [r3, 0x24] - adds r5, 0x1C - adds r4, r5 - ldr r0, _08077264 @ =sub_8077268 - str r0, [r4] - ldrh r0, [r6, 0x12] - adds r0, 0x1 - strh r0, [r6, 0x12] -_08077254: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08077260: .4byte gSprites -_08077264: .4byte sub_8077268 - thumb_func_end sub_80771E4 - - thumb_func_start sub_8077268 -sub_8077268: @ 8077268 - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x2E] - subs r0, 0x1 - strh r0, [r3, 0x2E] - lsls r0, 16 - cmp r0, 0 - bne _08077292 - ldr r2, _08077298 @ =gTasks - movs r0, 0x30 - ldrsh r1, [r3, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0x12] - subs r1, 0x1 - strh r1, [r0, 0x12] - adds r0, r3, 0 - bl obj_delete_but_dont_free_vram -_08077292: - pop {r0} - bx r0 - .align 2, 0 -_08077298: .4byte gTasks - thumb_func_end sub_8077268 - - thumb_func_start sub_807729C -sub_807729C: @ 807729C - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080772D0 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080772D4 - movs r0, 0x5 - b _080772D6 - .align 2, 0 -_080772D0: .4byte gBattleAnimAttacker -_080772D4: - ldr r0, _080772E8 @ =0x0000fff6 -_080772D6: - strh r0, [r5, 0x2E] - ldr r0, _080772EC @ =0x0000ffd8 - strh r0, [r5, 0x30] - ldr r0, _080772F0 @ =sub_80772F4 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080772E8: .4byte 0x0000fff6 -_080772EC: .4byte 0x0000ffd8 -_080772F0: .4byte sub_80772F4 - thumb_func_end sub_807729C - - thumb_func_start sub_80772F4 -sub_80772F4: @ 80772F4 - push {r4,r5,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - ldrh r1, [r4, 0x32] - adds r0, r1 - strh r0, [r4, 0x32] - ldrh r5, [r4, 0x30] - ldrh r2, [r4, 0x34] - adds r0, r5, r2 - strh r0, [r4, 0x34] - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r1, 0xA - bl __divsi3 - strh r0, [r4, 0x24] - movs r2, 0x34 - ldrsh r0, [r4, r2] - movs r1, 0xA - bl __divsi3 - strh r0, [r4, 0x26] - lsls r0, r5, 16 - asrs r0, 16 - movs r1, 0x14 - negs r1, r1 - cmp r0, r1 - bge _08077330 - adds r0, r5, 0x1 - strh r0, [r4, 0x30] -_08077330: - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x26 - ldrsh r1, [r4, r2] - adds r0, r1 - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - bge _08077348 - adds r0, r4, 0 - bl DestroyAnimSprite -_08077348: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80772F4 - - thumb_func_start sub_8077350 -sub_8077350: @ 8077350 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _08077388 @ =gBattleAnimArgs - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r5, 0x8] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x32] - ldrh r0, [r5, 0xA] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x36] - ldr r0, _0807738C @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _08077390 - ldrh r0, [r5, 0x8] - adds r0, 0x1E - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0xA] - subs r0, 0x14 - b _0807739E - .align 2, 0 -_08077388: .4byte gBattleAnimArgs -_0807738C: .4byte gBattleAnimTarget -_08077390: - ldrh r0, [r5, 0x8] - subs r0, 0x1E - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0xA] - subs r0, 0x50 -_0807739E: - strh r0, [r4, 0x22] - ldr r0, _080773B4 @ =StartAnimLinearTranslation - str r0, [r4, 0x1C] - ldr r1, _080773B8 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080773B4: .4byte StartAnimLinearTranslation -_080773B8: .4byte DestroyAnimSprite - thumb_func_end sub_8077350 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/battle_anim_special.s b/asm/battle_anim_special.s index 209d11ed3..e49ba538c 100644 --- a/asm/battle_anim_special.s +++ b/asm/battle_anim_special.s @@ -155,7 +155,7 @@ sub_80EEC0C: @ 80EEC0C mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080EEDD8 @ =gFile_graphics_battle_anims_masks_unknown_D2EC24_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080EEDDC @ =gFile_graphics_battle_anims_masks_unknown_D2EC24_sheet @@ -855,7 +855,7 @@ _080EF2E6: movs r3, 0 bl SetSpriteRotScale adds r0, r5, 0 - bl sub_8076440 + bl SetBattlerSpriteYOffsetFromYScale movs r0, 0x1C ldrsh r1, [r4, r0] ldr r0, _080EF314 @ =0x000002cf @@ -1585,7 +1585,7 @@ sub_80EF8C0: @ 80EF8C0 ldr r0, _080EF8E8 @ =0x0000ffd8 strh r0, [r4, 0x38] adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080EF8EC @ =sub_80EF8F0 str r0, [r4, 0x1C] pop {r4} @@ -1601,7 +1601,7 @@ sub_80EF8F0: @ 80EF8F0 push {r4,r5,lr} sub sp, 0x4 adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080EF99E @@ -2804,7 +2804,7 @@ _080F01F2: ldrsb r0, [r1, r0] strh r0, [r5, 0x38] adds r0, r5, 0 - bl sub_8075068 + bl InitAnimArcTranslation add r4, r10 ldr r0, _080F0270 @ =sub_80F0278 str r0, [r4] @@ -2849,7 +2849,7 @@ sub_80F0278: @ 80F0278 orrs r0, r1 strb r0, [r3] adds r0, r4, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080F02A8 @@ -3204,9 +3204,9 @@ sub_80F052C: @ 80F052C movs r0, 0x20 strh r0, [r4, 0x38] adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation adds r0, r4, 0 - bl sub_80750C8 + bl TranslateAnimVerticalArc ldr r0, _080F0570 @ =sub_80F0574 str r0, [r4, 0x1C] pop {r4} @@ -3220,7 +3220,7 @@ _080F0570: .4byte sub_80F0574 sub_80F0574: @ 80F0574 push {r4,lr} adds r4, r0, 0 - bl sub_80750C8 + bl TranslateAnimVerticalArc lsls r0, 24 cmp r0, 0 bne _080F0590 @@ -5317,7 +5317,7 @@ _080F15F0: _080F15F6: ldr r0, _080F1610 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -5982,7 +5982,7 @@ sub_80F1B3C: @ 80F1B3C push {r4,r5,lr} adds r4, r0, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker movs r0, 0x1E strh r0, [r4, 0x2E] movs r0, 0x1 @@ -6011,7 +6011,7 @@ sub_80F1B3C: @ 80F1B3C ldr r0, _080F1BB4 @ =0x0000ffe0 strh r0, [r4, 0x38] adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r2, _080F1BB8 @ =gSprites ldr r1, _080F1BBC @ =gBattlerSpriteIds ldr r0, _080F1BC0 @ =gBattleAnimAttacker @@ -6074,7 +6074,7 @@ _080F1C00: .4byte sub_80F1C04 sub_80F1C04: @ 80F1C04 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080F1C26 diff --git a/asm/bug.s b/asm/bug.s index de99118a2..29f38d3a2 100644 --- a/asm/bug.s +++ b/asm/bug.s @@ -53,7 +53,7 @@ _080B4008: ldr r5, _080B406C @ =gBattleAnimTarget ldrb r0, [r5] movs r1, 0x2 - bl sub_8074844 + bl GetBattlerSpriteCoord2 lsls r0, 24 ldr r4, _080B4070 @ =gBattleAnimArgs lsrs r0, 24 @@ -62,7 +62,7 @@ _080B4008: strh r0, [r6, 0x20] ldrb r0, [r5] movs r1, 0x3 - bl sub_8074844 + bl GetBattlerSpriteCoord2 lsls r0, 24 lsrs r0, 24 ldrh r1, [r4, 0x2] @@ -137,7 +137,7 @@ _080B40BC: ldr r5, _080B4118 @ =gBattleAnimTarget ldrb r0, [r5] movs r1, 0x2 - bl sub_8074844 + bl GetBattlerSpriteCoord2 lsls r0, 24 ldr r4, _080B411C @ =gBattleAnimArgs lsrs r0, 24 @@ -146,7 +146,7 @@ _080B40BC: strh r0, [r6, 0x20] ldrb r0, [r5] movs r1, 0x3 - bl sub_8074844 + bl GetBattlerSpriteCoord2 lsls r0, 24 lsrs r0, 24 ldrh r1, [r4, 0x2] @@ -199,7 +199,7 @@ sub_80B4128: @ 80B4128 _080B4144: adds r0, r5, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r1, _080B4184 @ =gBattleAnimArgs ldrh r0, [r1, 0x4] strh r0, [r5, 0x2E] @@ -236,7 +236,7 @@ _080B418C: adds r3, r5, 0 adds r3, 0x36 movs r1, 0x1 - bl sub_8076D9C + bl SetAverageBattlerPositions _080B419E: adds r0, r5, 0 bl sub_8075678 @@ -258,7 +258,7 @@ _080B41BC: .4byte sub_80B41C0 sub_80B41C0: @ 80B41C0 push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080B41D6 @@ -296,7 +296,7 @@ sub_80B41F8: @ 80B41F8 adds r3, r4, 0 adds r3, 0x22 movs r1, 0 - bl sub_8076D9C + bl SetAverageBattlerPositions ldr r0, _080B422C @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -552,7 +552,7 @@ _080B43E4: _080B43F6: adds r0, r7, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r5, _080B4488 @ =gBattleAnimTarget ldrb r0, [r5] movs r1, 0x2 @@ -586,7 +586,7 @@ _080B43F6: subs r1, r2 lsls r1, 16 asrs r1, 16 - bl sub_8075B30 + bl ArcTan2Neg lsls r0, 16 movs r1, 0xC0 lsls r1, 24 @@ -598,7 +598,7 @@ _080B43F6: adds r0, r7, 0 movs r1, 0 adds r2, r3, 0 - bl sub_8075A1C + bl TrySetSpriteRotScale ldrh r0, [r6, 0x8] strh r0, [r7, 0x2E] strh r4, [r7, 0x32] @@ -625,7 +625,7 @@ sub_80B4494: @ 80B4494 push {r4-r6,lr} adds r6, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080B4500 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -660,7 +660,7 @@ _080B44B4: ldrh r0, [r4, 0xA] strh r0, [r6, 0x38] adds r0, r6, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080B450C @ =sub_80B4510 str r0, [r6, 0x1C] adds r2, r6, 0 @@ -694,7 +694,7 @@ sub_80B4510: @ 80B4510 ands r1, r0 strb r1, [r2] adds r0, r4, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080B453C @@ -729,7 +729,7 @@ _080B4552: lsls r0, 16 lsrs r6, r0, 16 adds r0, r4, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 bne _080B45CC @@ -749,7 +749,7 @@ _080B4552: subs r1, r2 lsls r1, 16 asrs r1, 16 - bl sub_8075B30 + bl ArcTan2Neg lsls r0, 16 movs r1, 0xC0 lsls r1, 24 @@ -761,7 +761,7 @@ _080B4552: adds r0, r4, 0 movs r1, 0 adds r2, r3, 0 - bl sub_8075A1C + bl TrySetSpriteRotScale add r2, sp, 0x4 mov r1, r8 movs r3, 0x7 @@ -812,18 +812,18 @@ _080B45F6: lsrs r0, 24 adds r0, 0x12 strh r0, [r5, 0x22] - ldr r1, _080B462C @ =move_anim_8074EE0 + ldr r1, _080B462C @ =DestroySpriteAndMatrix adds r0, r5, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080B4630 @ =sub_8074F50 + ldr r0, _080B4630 @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r5, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 _080B4628: .4byte gBattleAnimTarget -_080B462C: .4byte move_anim_8074EE0 -_080B4630: .4byte sub_8074F50 +_080B462C: .4byte DestroySpriteAndMatrix +_080B4630: .4byte RunStoredCallbackWhenAffineAnimEnds thumb_func_end sub_80B45D8 .align 2, 0 @ Don't pad with nop. diff --git a/asm/dark.s b/asm/dark.s index 626ddc2be..afadcebae 100644 --- a/asm/dark.s +++ b/asm/dark.s @@ -25,7 +25,7 @@ sub_80B78E0: @ 80B78E0 movs r0, 0x52 bl SetGpuReg adds r0, r4, 0 - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -223,7 +223,7 @@ sub_80B7A80: @ 80B7A80 bl SetGpuReg ldr r0, _080B7AAC @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -472,7 +472,7 @@ sub_80B7C50: @ 80B7C50 cmp r0, 0 bne _080B7C82 adds r0, r3, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080B7C82: pop {r0} bx r0 @@ -531,47 +531,47 @@ _080B7CE0: _080B7CEA: adds r0, r5, 0 movs r1, 0x5 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x8 strh r0, [r4, 0x20] adds r0, r5, 0 movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 strh r0, [r4, 0x22] b _080B7D58 _080B7D04: adds r0, r5, 0 movs r1, 0x5 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0xE strh r0, [r4, 0x20] adds r0, r5, 0 movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x10 strh r0, [r4, 0x22] b _080B7D58 _080B7D1E: adds r0, r5, 0 movs r1, 0x4 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 strh r0, [r4, 0x20] adds r0, r5, 0 movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 b _080B7D4C _080B7D36: adds r0, r5, 0 movs r1, 0x4 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0xE strh r0, [r4, 0x20] adds r0, r5, 0 movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x10 _080B7D4C: strh r0, [r4, 0x22] @@ -593,7 +593,7 @@ _080B7D58: ldr r0, _080B7D80 @ =0x0000fff4 strh r0, [r4, 0x38] adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080B7D84 @ =sub_80B7D88 str r0, [r4, 0x1C] pop {r4-r7} @@ -608,12 +608,12 @@ _080B7D84: .4byte sub_80B7D88 sub_80B7D88: @ 80B7D88 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080B7D9C adds r0, r4, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080B7D9C: pop {r4} pop {r0} @@ -642,7 +642,7 @@ sub_80B7DA4: @ 80B7DA4 strh r0, [r5, 0x16] ldrb r0, [r4] movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x7 strh r0, [r5, 0x14] ldrh r1, [r5, 0x16] @@ -678,7 +678,7 @@ _080B7E16: strh r0, [r5, 0x18] ldr r0, _080B7E64 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0xE] @@ -1022,7 +1022,7 @@ _080B80EC: .4byte 0x00003f3f _080B80F0: ldr r0, _080B8110 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0xE] @@ -1095,7 +1095,7 @@ _080B817C: strh r0, [r5, 0x16] ldrb r0, [r4] movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x7 strh r0, [r5, 0x14] ldrh r1, [r5, 0x16] @@ -1653,7 +1653,7 @@ sub_80B85B8: @ 80B85B8 mov r10, r0 ldr r6, _080B8658 @ =gBattleAnimAttacker ldrb r0, [r6] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 movs r1, 0x1 @@ -1731,7 +1731,7 @@ sub_80B8664: @ 80B8664 lsrs r6, r0, 24 ldr r4, _080B86AC @ =gBattleAnimAttacker ldrb r0, [r4] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 movs r1, 0x1 @@ -1778,7 +1778,7 @@ sub_80B86B0: @ 80B86B0 ldrb r1, [r1, 0x4] adds r0, r4, 0 bl StartSpriteAnim - ldr r0, _080B86E4 @ =sub_8074F6C + ldr r0, _080B86E4 @ =RunStoredCallbackWhenAnimEnds str r0, [r4, 0x1C] ldr r1, _080B86E8 @ =DestroyAnimSprite adds r0, r4, 0 @@ -1788,7 +1788,7 @@ sub_80B86B0: @ 80B86B0 bx r0 .align 2, 0 _080B86E0: .4byte gBattleAnimArgs -_080B86E4: .4byte sub_8074F6C +_080B86E4: .4byte RunStoredCallbackWhenAnimEnds _080B86E8: .4byte DestroyAnimSprite thumb_func_end sub_80B86B0 @@ -1952,7 +1952,7 @@ _080B8828: mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080B88C4 @ =gFile_graphics_battle_anims_masks_metal_shine_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080B88C8 @ =gFile_graphics_battle_anims_masks_metal_shine_sheet @@ -1991,7 +1991,7 @@ _080B8828: bne _080B88E0 adds r0, r1, 0 movs r1, 0 - bl sub_8075B48 + bl SetGreyscaleOrOriginalPalette b _080B88EC .align 2, 0 _080B88B8: .4byte gBattlerPartyIndexes @@ -2093,7 +2093,7 @@ _080B894E: bne _080B8990 adds r0, r1, 0 movs r1, 0x1 - bl sub_8075B48 + bl SetGreyscaleOrOriginalPalette _080B8990: movs r0, 0x8 ldrsh r1, [r4, r0] @@ -2279,7 +2279,7 @@ _080B8B06: adds r0, 0x10 ldr r1, _080B8B34 @ =gBattleAnimArgs ldrb r1, [r1, 0x2] - bl sub_8075B48 + bl SetGreyscaleOrOriginalPalette _080B8B22: adds r0, r5, 0 bl DestroyAnimVisualTask diff --git a/asm/dragon.s b/asm/dragon.s index bd01691f1..2e3684042 100644 --- a/asm/dragon.s +++ b/asm/dragon.s @@ -68,25 +68,25 @@ _080B72B6: movs r1, 0x4 orrs r0, r1 strb r0, [r2] - ldr r1, _080B72F0 @ =move_anim_8074EE0 + ldr r1, _080B72F0 @ =DestroySpriteAndMatrix adds r0, r5, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080B72F4 @ =sub_8074E70 + ldr r0, _080B72F4 @ =TranslateSpriteLinearAndFlicker str r0, [r5, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 _080B72EC: .4byte gBattleAnimArgs -_080B72F0: .4byte move_anim_8074EE0 -_080B72F4: .4byte sub_8074E70 +_080B72F0: .4byte DestroySpriteAndMatrix +_080B72F4: .4byte TranslateSpriteLinearAndFlicker thumb_func_end sub_80B725C thumb_func_start sub_80B72F8 sub_80B72F8: @ 80B72F8 push {r4,r5,lr} adds r5, r0, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldr r4, _080B7350 @ =gBattleAnimTarget ldrb r0, [r4] movs r1, 0x2 @@ -154,7 +154,7 @@ _080B7386: strh r0, [r5, 0x2E] ldr r0, _080B73A4 @ =StartAnimLinearTranslation str r0, [r5, 0x1C] - ldr r1, _080B73A8 @ =move_anim_8074EE0 + ldr r1, _080B73A8 @ =DestroySpriteAndMatrix adds r0, r5, 0 bl StoreSpriteCallbackInData6 pop {r4,r5} @@ -163,7 +163,7 @@ _080B7386: .align 2, 0 _080B73A0: .4byte gBattleAnimArgs _080B73A4: .4byte StartAnimLinearTranslation -_080B73A8: .4byte move_anim_8074EE0 +_080B73A8: .4byte DestroySpriteAndMatrix thumb_func_end sub_80B72F8 thumb_func_start sub_80B73AC @@ -199,14 +199,14 @@ _080B73CA: movs r0, 0x2 ldrsh r1, [r4, r0] adds r0, r5, 0 - bl sub_8074FF8 + bl SetAnimSpriteInitialXOffset ldrh r0, [r4, 0x4] ldrh r1, [r5, 0x22] adds r0, r1 strh r0, [r5, 0x22] - ldr r0, _080B7414 @ =sub_8074F6C + ldr r0, _080B7414 @ =RunStoredCallbackWhenAnimEnds str r0, [r5, 0x1C] - ldr r1, _080B7418 @ =move_anim_8074EE0 + ldr r1, _080B7418 @ =DestroySpriteAndMatrix adds r0, r5, 0 bl StoreSpriteCallbackInData6 pop {r4,r5} @@ -215,8 +215,8 @@ _080B73CA: .align 2, 0 _080B740C: .4byte gBattleAnimTarget _080B7410: .4byte gBattleAnimArgs -_080B7414: .4byte sub_8074F6C -_080B7418: .4byte move_anim_8074EE0 +_080B7414: .4byte RunStoredCallbackWhenAnimEnds +_080B7418: .4byte DestroySpriteAndMatrix thumb_func_end sub_80B73AC thumb_func_start sub_80B741C @@ -269,12 +269,12 @@ sub_80B7448: @ 80B7448 ldr r4, _080B74A4 @ =gBattlerAttacker ldrb r0, [r4] movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r7, r0, 16 lsrs r5, r7, 16 ldrb r0, [r4] movs r1, 0x1 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r1, r0, 16 lsrs r0, r1, 16 cmp r5, r0 @@ -460,7 +460,7 @@ sub_80B75E0: @ 80B75E0 adds r4, r1, r0 ldr r0, _080B7610 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -491,7 +491,7 @@ _080B7622: strb r5, [r0, 0x9] ldr r0, _080B76A4 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_807492C + bl GetBattlerYCoordWithElevation lsls r0, 24 lsrs r0, 24 adds r1, r0, 0 diff --git a/asm/electric.s b/asm/electric.s index 7d39b287b..fa92c096a 100644 --- a/asm/electric.s +++ b/asm/electric.s @@ -110,7 +110,7 @@ sub_80ADC9C: @ 80ADC9C cmp r0, 0 beq _080ADCB2 adds r0, r2, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080ADCB2: pop {r0} bx r0 @@ -173,18 +173,18 @@ _080ADD1C: strh r0, [r5, 0x32] ldrh r0, [r2, 0x8] strh r0, [r5, 0x34] - ldr r1, _080ADD44 @ =move_anim_8074EE0 + ldr r1, _080ADD44 @ =DestroySpriteAndMatrix adds r0, r5, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080ADD48 @ =sub_8074A80 + ldr r0, _080ADD48 @ =TranslateSpriteInCircleOverDuration str r0, [r5, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 _080ADD40: .4byte gBattleAnimArgs -_080ADD44: .4byte move_anim_8074EE0 -_080ADD48: .4byte sub_8074A80 +_080ADD44: .4byte DestroySpriteAndMatrix +_080ADD48: .4byte TranslateSpriteInCircleOverDuration thumb_func_end sub_80ADCB8 thumb_func_start sub_80ADD4C @@ -315,7 +315,7 @@ _080ADE02: cmp r0, 0 beq _080ADE66 adds r0, r4, 0 - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r0, 24 adds r0, 0x1 @@ -370,7 +370,7 @@ sub_80ADEB0: @ 80ADEB0 push {r4-r6,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r5, _080ADF24 @ =gBattleAnimArgs ldrh r0, [r5, 0x6] strh r0, [r4, 0x2E] @@ -392,7 +392,7 @@ sub_80ADEB0: @ 80ADEB0 lsrs r0, 24 strh r0, [r4, 0x36] adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldrh r0, [r5, 0x4] strh r0, [r4, 0x38] ldrh r0, [r5, 0xA] @@ -432,7 +432,7 @@ _080ADF34: .4byte sub_80ADF38 sub_80ADF38: @ 80ADF38 push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 bne _080ADFA2 @@ -743,7 +743,7 @@ sub_80AE1A0: @ 80AE1A0 push {r4,r5,lr} adds r4, r0, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldrh r2, [r4, 0x4] lsls r1, r2, 22 lsrs r1, 22 @@ -788,7 +788,7 @@ _080AE1FA: ldr r0, _080AE214 @ =gBattleAnimArgs ldrh r0, [r0, 0x4] strh r0, [r4, 0x2E] - ldr r0, _080AE218 @ =sub_8074C44 + ldr r0, _080AE218 @ =WaitAnimForDuration str r0, [r4, 0x1C] ldr r1, _080AE21C @ =DestroyAnimSprite adds r0, r4, 0 @@ -798,7 +798,7 @@ _080AE1FA: bx r0 .align 2, 0 _080AE214: .4byte gBattleAnimArgs -_080AE218: .4byte sub_8074C44 +_080AE218: .4byte WaitAnimForDuration _080AE21C: .4byte DestroyAnimSprite thumb_func_end sub_80AE1A0 @@ -1344,11 +1344,11 @@ sub_80AE5BC: @ 80AE5BC strh r0, [r4, 0x36] strh r6, [r4, 0x38] adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldr r1, _080AE6B4 @ =sub_80AE704 adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080AE6B8 @ =sub_8074F6C + ldr r0, _080AE6B8 @ =RunStoredCallbackWhenAnimEnds str r0, [r4, 0x1C] ldrh r0, [r5, 0x1A] adds r0, 0x1 @@ -1390,7 +1390,7 @@ _080AE6A8: .4byte gUnknown_83E6120 _080AE6AC: .4byte gSprites _080AE6B0: .4byte gUnknown_83E60D0 _080AE6B4: .4byte sub_80AE704 -_080AE6B8: .4byte sub_8074F6C +_080AE6B8: .4byte RunStoredCallbackWhenAnimEnds _080AE6BC: movs r1, 0x16 ldrsh r0, [r5, r1] @@ -1408,7 +1408,7 @@ _080AE6CA: sub_80AE6D0: @ 80AE6D0 push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080AE6F8 @@ -1476,18 +1476,18 @@ _080AE73A: lsls r0, 24 lsrs r0, 24 strh r0, [r5, 0x22] - ldr r1, _080AE76C @ =move_anim_8074EE0 + ldr r1, _080AE76C @ =DestroySpriteAndMatrix adds r0, r5, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080AE770 @ =sub_8074F50 + ldr r0, _080AE770 @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r5, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 _080AE768: .4byte gBattleAnimTarget -_080AE76C: .4byte move_anim_8074EE0 -_080AE770: .4byte sub_8074F50 +_080AE76C: .4byte DestroySpriteAndMatrix +_080AE770: .4byte RunStoredCallbackWhenAffineAnimEnds thumb_func_end sub_80AE71C thumb_func_start sub_80AE774 @@ -1527,7 +1527,7 @@ _080AE792: ldr r1, _080AE7D4 @ =DestroyAnimSprite adds r0, r5, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080AE7D8 @ =sub_8074F6C + ldr r0, _080AE7D8 @ =RunStoredCallbackWhenAnimEnds str r0, [r5, 0x1C] pop {r4,r5} pop {r0} @@ -1536,7 +1536,7 @@ _080AE792: _080AE7CC: .4byte gBattleAnimTarget _080AE7D0: .4byte gBattleAnimArgs _080AE7D4: .4byte DestroyAnimSprite -_080AE7D8: .4byte sub_8074F6C +_080AE7D8: .4byte RunStoredCallbackWhenAnimEnds thumb_func_end sub_80AE774 thumb_func_start sub_80AE7DC @@ -1632,7 +1632,7 @@ _080AE864: cmp r0, r1 bls _080AE894 adds r0, r4, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080AE894: pop {r4} pop {r0} @@ -2203,7 +2203,7 @@ _080AECC4: cmp r0, 0 beq _080AECD8 adds r0, r5, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080AECD8: pop {r4,r5} pop {r0} diff --git a/asm/fighting.s b/asm/fighting.s index 81785b16b..e9bf5ece8 100644 --- a/asm/fighting.s +++ b/asm/fighting.s @@ -13,14 +13,14 @@ unc_080B08A0: @ 80B08A0 movs r0, 0 ldrsh r1, [r5, r0] adds r0, r4, 0 - bl sub_8074FF8 + bl SetAnimSpriteInitialXOffset ldrh r0, [r5, 0x2] ldrh r1, [r4, 0x22] adds r0, r1 strh r0, [r4, 0x22] movs r0, 0xF strh r0, [r4, 0x2E] - ldr r0, _080B08D4 @ =sub_8074C44 + ldr r0, _080B08D4 @ =WaitAnimForDuration str r0, [r4, 0x1C] ldr r1, _080B08D8 @ =DestroyAnimSprite adds r0, r4, 0 @@ -30,7 +30,7 @@ unc_080B08A0: @ 80B08A0 bx r0 .align 2, 0 _080B08D0: .4byte gBattleAnimArgs -_080B08D4: .4byte sub_8074C44 +_080B08D4: .4byte WaitAnimForDuration _080B08D8: .4byte DestroyAnimSprite thumb_func_end unc_080B08A0 @@ -110,19 +110,19 @@ sub_80B0954: @ 80B0954 bne _080B0978 adds r0, r5, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker b _080B0980 .align 2, 0 _080B0974: .4byte gBattleAnimArgs _080B0978: adds r0, r5, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget _080B0980: ldr r0, _080B0998 @ =gBattleAnimArgs ldrh r0, [r0, 0x4] strh r0, [r5, 0x2E] - ldr r0, _080B099C @ =sub_8074C44 + ldr r0, _080B099C @ =WaitAnimForDuration str r0, [r5, 0x1C] ldr r1, _080B09A0 @ =DestroyAnimSprite adds r0, r5, 0 @@ -132,7 +132,7 @@ _080B0980: bx r0 .align 2, 0 _080B0998: .4byte gBattleAnimArgs -_080B099C: .4byte sub_8074C44 +_080B099C: .4byte WaitAnimForDuration _080B09A0: .4byte DestroyAnimSprite thumb_func_end sub_80B0954 @@ -188,7 +188,7 @@ _080B09E8: strh r0, [r5, 0x22] mov r0, r8 movs r1, 0x1 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 asrs r1, r0, 16 lsrs r0, 31 @@ -197,7 +197,7 @@ _080B09E8: lsrs r6, r1, 16 mov r0, r8 movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 asrs r0, 16 cmp r0, 0 @@ -371,7 +371,7 @@ sub_80B0B80: @ 80B0B80 push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget movs r0, 0x1E strh r0, [r4, 0x2E] ldr r0, _080B0BA0 @ =gBattleAnimArgs @@ -480,7 +480,7 @@ sub_80B0C28: @ 80B0C28 _080B0C54: adds r0, r6, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r0, _080B0CA4 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -505,7 +505,7 @@ _080B0C72: strh r0, [r6, 0x34] strh r0, [r6, 0x36] adds r0, r6, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldrh r0, [r4, 0xA] strh r0, [r6, 0x38] ldrh r0, [r4, 0x8] @@ -527,7 +527,7 @@ _080B0CB0: .4byte sub_80B0CB4 sub_80B0CB4: @ 80B0CB4 push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 bne _080B0CE0 @@ -559,14 +559,14 @@ sub_80B0CEC: @ 80B0CEC push {r4,r5,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r5, _080B0D18 @ =gBattleAnimArgs ldrb r1, [r5, 0x4] adds r0, r4, 0 bl StartSpriteAnim ldrh r0, [r5, 0x6] strh r0, [r4, 0x2E] - ldr r0, _080B0D1C @ =sub_8074C44 + ldr r0, _080B0D1C @ =WaitAnimForDuration str r0, [r4, 0x1C] ldr r1, _080B0D20 @ =sub_80B0D24 adds r0, r4, 0 @@ -576,7 +576,7 @@ sub_80B0CEC: @ 80B0CEC bx r0 .align 2, 0 _080B0D18: .4byte gBattleAnimArgs -_080B0D1C: .4byte sub_8074C44 +_080B0D1C: .4byte WaitAnimForDuration _080B0D20: .4byte sub_80B0D24 thumb_func_end sub_80B0CEC @@ -594,7 +594,7 @@ sub_80B0D24: @ 80B0D24 strb r0, [r2] movs r0, 0x14 strh r0, [r4, 0x2E] - ldr r0, _080B0D50 @ =sub_8074C44 + ldr r0, _080B0D50 @ =WaitAnimForDuration str r0, [r4, 0x1C] ldr r1, _080B0D54 @ =DestroyAnimSprite adds r0, r4, 0 @@ -603,7 +603,7 @@ sub_80B0D24: @ 80B0D24 pop {r0} bx r0 .align 2, 0 -_080B0D50: .4byte sub_8074C44 +_080B0D50: .4byte WaitAnimForDuration _080B0D54: .4byte DestroyAnimSprite thumb_func_end sub_80B0D24 @@ -612,7 +612,7 @@ sub_80B0D58: @ 80B0D58 push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r0, _080B0D74 @ =gBattleAnimArgs ldrh r0, [r0, 0x4] strh r0, [r4, 0x2E] @@ -674,14 +674,14 @@ sub_80B0DD4: @ 80B0DD4 push {lr} movs r1, 0xF strh r1, [r0, 0x2E] - ldr r1, _080B0DE8 @ =sub_8074C44 + ldr r1, _080B0DE8 @ =WaitAnimForDuration str r1, [r0, 0x1C] ldr r1, _080B0DEC @ =DestroyAnimSprite bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 -_080B0DE8: .4byte sub_8074C44 +_080B0DE8: .4byte WaitAnimForDuration _080B0DEC: .4byte DestroyAnimSprite thumb_func_end sub_80B0DD4 @@ -695,7 +695,7 @@ sub_80B0DF0: @ 80B0DF0 bne _080B0E1C adds r0, r4, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r1, _080B0E18 @ =gBattleAnimArgs ldrh r0, [r1, 0x4] strh r0, [r4, 0x30] @@ -1052,7 +1052,7 @@ sub_80B107C: @ 80B107C strh r0, [r5, 0x22] ldr r0, _080B10D0 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -1072,7 +1072,7 @@ _080B10D4: .4byte gBattleAnimTarget _080B10D8: ldr r0, _080B1110 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -1140,8 +1140,8 @@ sub_80B111C: @ 80B111C lsrs r0, 24 strh r0, [r4, 0x36] adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 - ldr r1, _080B1180 @ =move_anim_8074EE0 + bl InitAnimLinearTranslation + ldr r1, _080B1180 @ =DestroySpriteAndMatrix adds r0, r4, 0 bl StoreSpriteCallbackInData6 ldr r0, _080B1184 @ =sub_807563C @@ -1151,7 +1151,7 @@ _080B1178: pop {r0} bx r0 .align 2, 0 -_080B1180: .4byte move_anim_8074EE0 +_080B1180: .4byte DestroySpriteAndMatrix _080B1184: .4byte sub_807563C thumb_func_end sub_80B111C @@ -1171,7 +1171,7 @@ sub_80B1188: @ 80B1188 adds r1, r5, 0 adds r1, 0x38 lsls r2, 8 - bl sub_80765C0 + bl StorePointerInVars ldrh r0, [r4, 0x2] strh r0, [r5, 0x3A] ldrh r2, [r5, 0x4] @@ -1214,7 +1214,7 @@ sub_80B11E4: @ 80B11E4 ldrsh r0, [r7, r2] movs r2, 0x38 ldrsh r1, [r7, r2] - bl sub_80765C8 + bl LoadPointerFromVars adds r4, r0, 0 movs r1, 0x3A ldrsh r0, [r7, r1] @@ -1224,7 +1224,7 @@ sub_80B11E4: @ 80B11E4 adds r1, r7, 0 adds r1, 0x38 adds r2, r4, 0 - bl sub_80765C0 + bl StorePointerInVars asrs r4, 8 strh r4, [r7, 0x22] lsls r4, 16 @@ -1369,7 +1369,7 @@ _080B132C: ldr r0, _080B1368 @ =gBattleAnimTarget _080B1332: ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -1431,7 +1431,7 @@ _080B138C: lsrs r0, 24 strh r0, [r5, 0x36] adds r0, r5, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldr r1, _080B13CC @ =DestroyAnimSprite adds r0, r5, 0 bl StoreSpriteCallbackInData6 @@ -1546,14 +1546,14 @@ sub_80B1484: @ 80B1484 bne _080B14A0 adds r0, r4, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker b _080B14A8 .align 2, 0 _080B149C: .4byte gBattleAnimArgs _080B14A0: adds r0, r4, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget _080B14A8: bl IsContest lsls r0, 24 @@ -1574,7 +1574,7 @@ _080B14BC: movs r1, 0x1 bl StartSpriteAnim _080B14D2: - ldr r0, _080B14E8 @ =sub_8074F6C + ldr r0, _080B14E8 @ =RunStoredCallbackWhenAnimEnds str r0, [r4, 0x1C] ldr r1, _080B14EC @ =DestroyAnimSprite adds r0, r4, 0 @@ -1584,7 +1584,7 @@ _080B14D2: bx r0 .align 2, 0 _080B14E4: .4byte gBattleAnimAttacker -_080B14E8: .4byte sub_8074F6C +_080B14E8: .4byte RunStoredCallbackWhenAnimEnds _080B14EC: .4byte DestroyAnimSprite thumb_func_end sub_80B1484 diff --git a/asm/fire.s b/asm/fire.s index 47f4208b1..efdfc8315 100644 --- a/asm/fire.s +++ b/asm/fire.s @@ -24,7 +24,7 @@ sub_80AC90C: @ 80AC90C ldr r1, _080AC944 @ =DestroyAnimSprite adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r1, _080AC948 @ =sub_8074AE0 + ldr r1, _080AC948 @ =TranslateSpriteInGrowingCircleOverDuration str r1, [r4, 0x1C] adds r0, r4, 0 bl _call_via_r1 @@ -34,7 +34,7 @@ sub_80AC90C: @ 80AC90C .align 2, 0 _080AC940: .4byte gBattleAnimArgs _080AC944: .4byte DestroyAnimSprite -_080AC948: .4byte sub_8074AE0 +_080AC948: .4byte TranslateSpriteInGrowingCircleOverDuration thumb_func_end sub_80AC90C thumb_func_start sub_80AC94C @@ -45,7 +45,7 @@ sub_80AC94C: @ 80AC94C movs r0, 0 ldrsh r1, [r5, r0] adds r0, r4, 0 - bl sub_8074FF8 + bl SetAnimSpriteInitialXOffset ldrh r0, [r5, 0x2] ldrh r1, [r4, 0x22] adds r0, r1 @@ -56,7 +56,7 @@ sub_80AC94C: @ 80AC94C strh r0, [r4, 0x30] ldrh r0, [r5, 0x6] strh r0, [r4, 0x32] - ldr r0, _080AC988 @ =sub_8074D00 + ldr r0, _080AC988 @ =TranslateSpriteLinearFixedPoint str r0, [r4, 0x1C] ldr r1, _080AC98C @ =DestroyAnimSprite adds r0, r4, 0 @@ -66,7 +66,7 @@ sub_80AC94C: @ 80AC94C bx r0 .align 2, 0 _080AC984: .4byte gBattleAnimArgs -_080AC988: .4byte sub_8074D00 +_080AC988: .4byte TranslateSpriteLinearFixedPoint _080AC98C: .4byte DestroyAnimSprite thumb_func_end sub_80AC94C @@ -74,7 +74,7 @@ _080AC98C: .4byte DestroyAnimSprite sub_80AC990: @ 80AC990 push {r4,lr} adds r4, r0, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldr r0, _080AC9C4 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -212,7 +212,7 @@ _080ACA92: cmp r1, r0 bne _080ACAA4 adds r0, r2, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080ACAA4: pop {r0} bx r0 @@ -222,7 +222,7 @@ _080ACAA4: sub_80ACAA8: @ 80ACAA8 push {r4,lr} adds r4, r0, 0 - bl sub_8074FCC + bl SetSpriteCoordsToAnimAttackerCoords ldr r0, _080ACACC @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -348,7 +348,7 @@ _080ACB9C: b _080ACBAA _080ACBA4: adds r0, r4, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080ACBAA: pop {r4} pop {r0} @@ -449,7 +449,7 @@ sub_80ACC60: @ 80ACC60 push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080ACC80 @ =gBattleAnimArgs ldrh r0, [r0, 0x4] movs r1, 0 @@ -497,7 +497,7 @@ sub_80ACC88: @ 80ACC88 lsrs r0, 24 strh r0, [r5, 0x36] adds r0, r5, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldr r0, _080ACCDC @ =sub_80ACCE0 str r0, [r5, 0x1C] _080ACCD2: @@ -513,7 +513,7 @@ _080ACCDC: .4byte sub_80ACCE0 sub_80ACCE0: @ 80ACCE0 push {r4-r6,lr} adds r6, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080ACD28 @@ -634,7 +634,7 @@ sub_80ACDA8: @ 80ACDA8 ldr r1, _080ACDE0 @ =DestroyAnimSprite adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080ACDE4 @ =sub_8074CD0 + ldr r0, _080ACDE4 @ =TranslateSpriteLinear str r0, [r4, 0x1C] pop {r4} pop {r0} @@ -642,7 +642,7 @@ sub_80ACDA8: @ 80ACDA8 .align 2, 0 _080ACDDC: .4byte gBattleAnimArgs _080ACDE0: .4byte DestroyAnimSprite -_080ACDE4: .4byte sub_8074CD0 +_080ACDE4: .4byte TranslateSpriteLinear thumb_func_end sub_80ACDA8 thumb_func_start sub_80ACDE8 @@ -650,7 +650,7 @@ sub_80ACDE8: @ 80ACDE8 push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r1, _080ACE1C @ =gBattleAnimArgs ldrh r0, [r1, 0x4] strh r0, [r4, 0x30] @@ -662,7 +662,7 @@ sub_80ACDE8: @ 80ACDE8 movs r1, 0x4 orrs r0, r1 strb r0, [r2] - ldr r0, _080ACE20 @ =sub_8074C44 + ldr r0, _080ACE20 @ =WaitAnimForDuration str r0, [r4, 0x1C] ldr r1, _080ACE24 @ =sub_80ACE28 adds r0, r4, 0 @@ -672,7 +672,7 @@ sub_80ACDE8: @ 80ACDE8 bx r0 .align 2, 0 _080ACE1C: .4byte gBattleAnimArgs -_080ACE20: .4byte sub_8074C44 +_080ACE20: .4byte WaitAnimForDuration _080ACE24: .4byte sub_80ACE28 thumb_func_end sub_80ACDE8 @@ -923,7 +923,7 @@ _080AD00C: ldrh r0, [r4, 0x26] lsls r0, 24 lsrs r0, 24 - bl sub_8076440 + bl SetBattlerSpriteYOffsetFromYScale ldr r2, _080AD030 @ =gSprites movs r0, 0x26 ldrsh r1, [r4, r0] @@ -1635,7 +1635,7 @@ _080AD556: _080AD55C: adds r0, r5, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r4, _080AD584 @ =gBattleAnimArgs ldrb r1, [r4, 0x4] adds r0, r5, 0 @@ -1659,7 +1659,7 @@ _080AD58E: strh r0, [r5, 0x36] ldr r0, _080AD5B0 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -1787,7 +1787,7 @@ _080AD68C: .4byte sub_80AD690 sub_80AD690: @ 80AD690 push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 bne _080AD6E8 @@ -1889,7 +1889,7 @@ _080AD70C: bls _080AD780 ldr r0, _080AD77C @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -1906,7 +1906,7 @@ _080AD77C: .4byte gBattleAnimTarget _080AD780: ldr r0, _080AD7A4 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r0, 24 adds r0, 0x1 diff --git a/asm/flying.s b/asm/flying.s index bef6163ad..252a1a957 100644 --- a/asm/flying.s +++ b/asm/flying.s @@ -46,7 +46,7 @@ sub_80B18E4: @ 80B18E4 push {r4,lr} adds r4, r0, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldrh r0, [r4, 0x22] adds r0, 0x14 strh r0, [r4, 0x22] @@ -208,7 +208,7 @@ sub_80B1A1C: @ 80B1A1C push {r4-r6,lr} adds r6, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080B1A88 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -245,8 +245,8 @@ _080B1A3C: adds r0, r4 strh r0, [r6, 0x36] adds r0, r6, 0 - bl obj_translate_based_on_private_1_2_3_4 - ldr r0, _080B1A94 @ =sub_8074F50 + bl InitAnimLinearTranslation + ldr r0, _080B1A94 @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r6, 0x1C] ldr r1, _080B1A98 @ =sub_80B1A9C adds r0, r6, 0 @@ -258,7 +258,7 @@ _080B1A3C: _080B1A88: .4byte gBattleAnimAttacker _080B1A8C: .4byte gBattleAnimArgs _080B1A90: .4byte gBattleAnimTarget -_080B1A94: .4byte sub_8074F50 +_080B1A94: .4byte RunStoredCallbackWhenAffineAnimEnds _080B1A98: .4byte sub_80B1A9C thumb_func_end sub_80B1A1C @@ -266,7 +266,7 @@ _080B1A98: .4byte sub_80B1A9C sub_80B1A9C: @ 80B1A9C push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080B1AB0 @@ -365,7 +365,7 @@ _080B1B60: adds r3, r5, 0 adds r3, 0x36 movs r1, 0x1 - bl sub_8076D9C + bl SetAverageBattlerPositions _080B1B72: ldr r4, _080B1BA4 @ =gBattleAnimArgs ldrh r0, [r4, 0x4] @@ -399,7 +399,7 @@ sub_80B1BB0: @ 80B1BB0 push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r1, _080B1BEC @ =gBattleAnimArgs ldrh r0, [r1, 0x4] strh r0, [r4, 0x2E] @@ -517,7 +517,7 @@ _080B1C72: lsrs r0, 24 strh r0, [r5, 0x36] adds r0, r5, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldr r0, _080B1CBC @ =sub_80B1CC0 str r0, [r5, 0x1C] pop {r4,r5} @@ -537,7 +537,7 @@ sub_80B1CC0: @ 80B1CC0 movs r0, 0x1 strh r0, [r4, 0x2E] adds r0, r4, 0 - bl sub_80755E0 + bl AnimTranslateLinear ldrh r1, [r4, 0x34] lsrs r0, r1, 8 cmp r0, 0xC8 @@ -725,7 +725,7 @@ _080B1DC8: cmp r0, 0 bne _080B1E64 adds r0, r6, 0 - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r0, 24 adds r0, 0x1 @@ -744,7 +744,7 @@ _080B1E5C: .4byte gBattleAnimTarget _080B1E60: .4byte gBattleAnimArgs _080B1E64: adds r0, r6, 0 - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -790,7 +790,7 @@ _080B1E7C: b _080B1F16 _080B1EBE: adds r0, r6, 0 - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -1614,7 +1614,7 @@ sub_80B24C0: @ 80B24C0 adds r4, r0, 0 ldr r0, _080B2508 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -1637,7 +1637,7 @@ sub_80B24C0: @ 80B24C0 lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x22] - ldr r0, _080B2510 @ =sub_8075DF4 + ldr r0, _080B2510 @ =TranslateAnimSpriteToTargetMonLocation str r0, [r4, 0x1C] pop {r4,r5} pop {r0} @@ -1645,7 +1645,7 @@ sub_80B24C0: @ 80B24C0 .align 2, 0 _080B2508: .4byte gBattleAnimTarget _080B250C: .4byte gBattleAnimAttacker -_080B2510: .4byte sub_8075DF4 +_080B2510: .4byte TranslateAnimSpriteToTargetMonLocation thumb_func_end sub_80B24C0 thumb_func_start sub_80B2514 @@ -1700,7 +1700,7 @@ _080B256E: beq _080B25A4 ldr r0, _080B25A0 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r0, 24 adds r0, 0x1 @@ -1720,7 +1720,7 @@ _080B25A0: .4byte gBattleAnimTarget _080B25A4: ldr r0, _080B25C0 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -1974,14 +1974,14 @@ sub_80B2780: @ 80B2780 bne _080B279C adds r0, r5, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker b _080B27A4 .align 2, 0 _080B2798: .4byte gBattleAnimArgs _080B279C: adds r0, r5, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget _080B27A4: ldr r4, _080B280C @ =gBattleAnimArgs movs r2, 0x4 @@ -2179,7 +2179,7 @@ sub_80B2914: @ 80B2914 _080B2926: adds r0, r4, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker movs r0, 0 bl GetAnimBattlerSpriteId ldr r2, _080B2954 @ =gSprites @@ -2302,7 +2302,7 @@ sub_80B2A08: @ 80B2A08 push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r1, _080B2A44 @ =gBattleAnimArgs ldrh r0, [r1, 0x4] strh r0, [r4, 0x2E] @@ -2473,7 +2473,7 @@ _080B2B22: str r0, [sp] adds r0, r5, 0 movs r1, 0 - bl sub_8075A1C + bl TrySetSpriteRotScale ldrh r0, [r5, 0x2E] adds r0, 0x1 strh r0, [r5, 0x2E] @@ -2503,7 +2503,7 @@ _080B2B72: ldrsh r3, [r5, r0] str r1, [sp] adds r0, r5, 0 - bl sub_8075A1C + bl TrySetSpriteRotScale ldrb r1, [r5, 0x3] lsls r1, 26 lsrs r1, 27 @@ -2822,7 +2822,7 @@ sub_80B2D64: @ 80B2D64 asrs r5, 16 adds r0, r4, 0 adds r1, r5, 0 - bl sub_8075B30 + bl ArcTan2Neg lsls r0, 16 movs r1, 0xC0 lsls r1, 24 @@ -2834,7 +2834,7 @@ sub_80B2D64: @ 80B2D64 mov r0, r8 movs r1, 0x1 adds r2, r3, 0 - bl sub_8075A1C + bl TrySetSpriteRotScale ldr r0, _080B2E1C @ =sub_80B2E20 mov r2, r8 str r0, [r2, 0x1C] @@ -2883,7 +2883,7 @@ sub_80B2E20: @ 80B2E20 bge _080B2E60 _080B2E5A: adds r0, r2, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080B2E60: pop {r0} bx r0 diff --git a/asm/ghost.s b/asm/ghost.s index 9d5d843ca..0e8796310 100644 --- a/asm/ghost.s +++ b/asm/ghost.s @@ -10,7 +10,7 @@ sub_80B5268: @ 80B5268 push {r4,r5,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080B52C4 @ =gBattleAnimArgs ldrh r0, [r0, 0x4] strh r0, [r4, 0x2E] @@ -59,7 +59,7 @@ sub_80B52D0: @ 80B52D0 adds r4, r0, 0 bl sub_80B53C0 adds r0, r4, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080B52F0 @@ -119,7 +119,7 @@ sub_80B5344: @ 80B5344 movs r0, 0x1 strh r0, [r4, 0x2E] adds r0, r4, 0 - bl sub_80755E0 + bl AnimTranslateLinear movs r1, 0x38 ldrsh r0, [r4, r1] movs r1, 0xA @@ -163,11 +163,11 @@ _080B5396: movs r1, 0x4 orrs r0, r1 strb r0, [r2] - ldr r0, _080B53B0 @ =sub_8074F88 + ldr r0, _080B53B0 @ =DestroyAnimSpriteAndDisableBlend str r0, [r4, 0x1C] b _080B53BA .align 2, 0 -_080B53B0: .4byte sub_8074F88 +_080B53B0: .4byte DestroyAnimSpriteAndDisableBlend _080B53B4: adds r0, r4, 0 bl sub_80B53C0 @@ -262,7 +262,7 @@ sub_80B5450: @ 80B5450 push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r1, _080B546C @ =sub_80B5470 str r1, [r4, 0x1C] adds r0, r4, 0 @@ -719,7 +719,7 @@ _080B57DE: _080B57E8: .4byte gBattleAnimTarget _080B57EC: adds r0, r5, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080B57F2: pop {r4,r5} pop {r0} @@ -731,7 +731,7 @@ sub_80B57F8: @ 80B57F8 push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r0, _080B580C @ =sub_80B5810 str r0, [r4, 0x1C] pop {r4} @@ -956,7 +956,7 @@ _080B596E: lsls r0, 2 adds r4, 0x1C adds r0, r4 - ldr r1, _080B59CC @ =sub_8074D00 + ldr r1, _080B59CC @ =TranslateSpriteLinearFixedPoint str r1, [r0] ldr r0, _080B59D0 @ =sub_80B59D4 str r0, [r5] @@ -968,7 +968,7 @@ _080B59B8: _080B59C0: .4byte 0x0000ff90 _080B59C4: .4byte gSprites _080B59C8: .4byte SpriteCallbackDummy -_080B59CC: .4byte sub_8074D00 +_080B59CC: .4byte TranslateSpriteLinearFixedPoint _080B59D0: .4byte sub_80B59D4 thumb_func_end sub_80B58AC @@ -1120,7 +1120,7 @@ sub_80B5AD4: @ 80B5AD4 adds r5, r0, r1 ldr r0, _080B5B10 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r6, r0, 24 movs r1, 0x26 @@ -1492,7 +1492,7 @@ sub_80B5DCC: @ 80B5DCC adds r4, r0, r1 ldr r0, _080B5E00 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r6, r0, 24 movs r1, 0x26 @@ -1814,7 +1814,7 @@ sub_80B6020: @ 80B6020 str r0, [sp, 0x4] ldrb r0, [r4] movs r1, 0x3 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 lsrs r0, 16 str r0, [sp, 0x8] @@ -1866,7 +1866,7 @@ _080B6092: mov r10, r0 adds r0, r4, 0 movs r1, 0x3 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 lsrs r0, 16 mov r9, r0 @@ -2528,7 +2528,7 @@ sub_80B664C: @ 80B664C push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080B6678 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -2616,7 +2616,7 @@ _080B66BA: bne _080B671C movs r0, 0x1E strh r0, [r3, 0x2E] - ldr r0, _080B6714 @ =sub_8074C44 + ldr r0, _080B6714 @ =WaitAnimForDuration str r0, [r3, 0x1C] ldr r1, _080B6718 @ =sub_80B6728 adds r0, r3, 0 @@ -2625,7 +2625,7 @@ _080B66BA: .align 2, 0 _080B670C: .4byte 0x000003ff _080B6710: .4byte 0xfffffc00 -_080B6714: .4byte sub_8074C44 +_080B6714: .4byte WaitAnimForDuration _080B6718: .4byte sub_80B6728 _080B671C: movs r0, 0x28 @@ -2877,13 +2877,13 @@ sub_80B68C8: @ 80B68C8 lsrs r0, 24 strh r0, [r4, 0x1A] ldrb r0, [r5] - bl sub_807492C + bl GetBattlerYCoordWithElevation lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x1C] ldrb r0, [r5] movs r1, 0x1 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 asrs r1, r0, 16 lsrs r0, 31 @@ -2893,7 +2893,7 @@ sub_80B68C8: @ 80B68C8 strh r1, [r4, 0x1E] strh r6, [r4, 0x16] ldrb r0, [r5] - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x12] @@ -3272,7 +3272,7 @@ sub_80B6BE4: @ 80B6BE4 adds r6, r1, r0 ldr r0, _080B6C1C @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r4, r0, 24 movs r1, 0x26 @@ -4040,7 +4040,7 @@ _080B7218: ldrh r1, [r0, 0x22] subs r1, 0x8 strh r1, [r0, 0x22] - ldr r0, _080B7258 @ =move_anim_8074EE0 + ldr r0, _080B7258 @ =DestroySpriteAndMatrix str r0, [r5, 0x1C] _080B724C: pop {r4,r5} @@ -4048,7 +4048,7 @@ _080B724C: bx r0 .align 2, 0 _080B7254: .4byte gSprites -_080B7258: .4byte move_anim_8074EE0 +_080B7258: .4byte DestroySpriteAndMatrix thumb_func_end sub_80B71B0 .align 2, 0 @ Don't pad with nop. diff --git a/asm/ground.s b/asm/ground.s index 585fb139a..eb655ccc8 100644 --- a/asm/ground.s +++ b/asm/ground.s @@ -40,7 +40,7 @@ sub_80B8B6C: @ 80B8B6C ldr r0, _080B8BCC @ =0x0000ffd8 strh r0, [r4, 0x38] adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080B8BD0 @ =sub_80B8BD4 str r0, [r4, 0x1C] pop {r4,r5} @@ -57,7 +57,7 @@ _080B8BD0: .4byte sub_80B8BD4 sub_80B8BD4: @ 80B8BD4 push {r4,r5,lr} adds r5, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080B8C28 @@ -90,7 +90,7 @@ sub_80B8BD4: @ 80B8BD4 movs r0, 0x28 strh r0, [r5, 0x38] adds r0, r5, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080B8C34 @ =sub_80B8C38 str r0, [r5, 0x1C] _080B8C28: @@ -106,7 +106,7 @@ _080B8C34: .4byte sub_80B8C38 sub_80B8C38: @ 80B8C38 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080B8C4C @@ -123,7 +123,7 @@ sub_80B8C54: @ 80B8C54 push {r4-r6,lr} adds r6, r0, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r0, _080B8CB4 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -178,17 +178,17 @@ sub_80B8CC8: @ 80B8CC8 push {r7} adds r6, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r4, _080B8D48 @ =gBattleAnimTarget ldrb r0, [r4] movs r1, 0x2 - bl sub_8074844 + bl GetBattlerSpriteCoord2 lsls r0, 24 lsrs r0, 24 mov r8, r0 ldrb r0, [r4] movs r1, 0x3 - bl sub_8074844 + bl GetBattlerSpriteCoord2 lsls r0, 24 lsrs r7, r0, 24 bl Random @@ -224,7 +224,7 @@ _080B8D20: strh r0, [r6, 0x36] ldr r0, _080B8D50 @ =StartAnimLinearTranslation str r0, [r6, 0x1C] - ldr r1, _080B8D54 @ =move_anim_8074EE0 + ldr r1, _080B8D54 @ =DestroySpriteAndMatrix adds r0, r6, 0 bl StoreSpriteCallbackInData6 pop {r3} @@ -236,7 +236,7 @@ _080B8D20: _080B8D48: .4byte gBattleAnimTarget _080B8D4C: .4byte gBattleAnimArgs _080B8D50: .4byte StartAnimLinearTranslation -_080B8D54: .4byte move_anim_8074EE0 +_080B8D54: .4byte DestroySpriteAndMatrix thumb_func_end sub_80B8CC8 thumb_func_start sub_80B8D58 @@ -479,7 +479,7 @@ _080B8F14: strh r0, [r4, 0x1C] ldr r0, _080B8F3C @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x1E] @@ -504,7 +504,7 @@ _080B8F50: strh r0, [r4, 0x22] ldr r0, _080B8F94 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_807492C + bl GetBattlerYCoordWithElevation lsls r0, 24 lsrs r0, 24 adds r1, r0, 0 @@ -687,7 +687,7 @@ sub_80B908C: @ 80B908C strh r4, [r1, 0x26] ldr r0, _080B90D0 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -852,7 +852,7 @@ _080B91F0: strh r0, [r4, 0x1C] ldr r0, _080B9214 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x1E] @@ -870,7 +870,7 @@ _080B921E: strh r0, [r4, 0x20] ldr r0, _080B9240 @ =gBattleAnimAttacker ldrb r0, [r0] - bl sub_807492C + bl GetBattlerYCoordWithElevation lsls r0, 24 lsrs r0, 24 adds r1, r0, 0 @@ -1086,7 +1086,7 @@ _080B93B2: adds r0, r6 strh r0, [r5, 0x20] adds r0, r4, 0 - bl sub_807492C + bl GetBattlerYCoordWithElevation lsls r0, 24 lsrs r0, 24 adds r0, 0x1E @@ -1103,7 +1103,7 @@ _080B93B2: ldrh r0, [r7, 0x8] strh r0, [r5, 0x38] adds r0, r5, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080B93FC @ =sub_80B9400 str r0, [r5, 0x1C] pop {r4-r7} @@ -1118,7 +1118,7 @@ _080B93FC: .4byte sub_80B9400 sub_80B9400: @ 80B9400 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080B9414 @@ -1162,7 +1162,7 @@ _080B943A: adds r0, r1 strh r0, [r6, 0x20] adds r0, r5, 0 - bl sub_807492C + bl GetBattlerYCoordWithElevation lsls r0, 24 lsrs r0, 24 adds r0, 0x20 @@ -1186,7 +1186,7 @@ _080B943A: bl StoreSpriteCallbackInData6 ldrh r0, [r4, 0x4] strh r0, [r6, 0x2E] - ldr r0, _080B94B0 @ =sub_8074C44 + ldr r0, _080B94B0 @ =WaitAnimForDuration str r0, [r6, 0x1C] pop {r4-r6} pop {r0} @@ -1198,7 +1198,7 @@ _080B94A0: .4byte gBattleAnimArgs _080B94A4: .4byte 0x000003ff _080B94A8: .4byte 0xfffffc00 _080B94AC: .4byte DestroyAnimSprite -_080B94B0: .4byte sub_8074C44 +_080B94B0: .4byte WaitAnimForDuration thumb_func_end sub_80B941C thumb_func_start sub_80B94B4 diff --git a/asm/ice.s b/asm/ice.s index 7b51b69c0..a2c8d0472 100644 --- a/asm/ice.s +++ b/asm/ice.s @@ -365,7 +365,7 @@ sub_80AF2F0: @ 80AF2F0 ldr r1, _080AF328 @ =DestroyAnimSprite adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r1, _080AF32C @ =sub_8074AE0 + ldr r1, _080AF32C @ =TranslateSpriteInGrowingCircleOverDuration str r1, [r4, 0x1C] adds r0, r4, 0 bl _call_via_r1 @@ -375,7 +375,7 @@ sub_80AF2F0: @ 80AF2F0 .align 2, 0 _080AF324: .4byte gBattleAnimArgs _080AF328: .4byte DestroyAnimSprite -_080AF32C: .4byte sub_8074AE0 +_080AF32C: .4byte TranslateSpriteInGrowingCircleOverDuration thumb_func_end sub_80AF2F0 thumb_func_start sub_80AF330 @@ -383,7 +383,7 @@ sub_80AF330: @ 80AF330 push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080AF364 @ =gBattleAnimTarget ldrb r0, [r0] movs r1, 0x2 @@ -452,7 +452,7 @@ sub_80AF3B8: @ 80AF3B8 bne _080AF3D4 adds r0, r4, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget b _080AF40A .align 2, 0 _080AF3D0: .4byte gBattleAnimArgs @@ -464,7 +464,7 @@ _080AF3D4: adds r3, r4, 0 adds r3, 0x22 movs r1, 0x1 - bl sub_8076D9C + bl SetAverageBattlerPositions ldr r0, _080AF420 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -487,7 +487,7 @@ _080AF40A: ldr r1, _080AF424 @ =sub_80AF42C adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080AF428 @ =sub_8074F50 + ldr r0, _080AF428 @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r4, 0x1C] pop {r4,r5} pop {r0} @@ -496,7 +496,7 @@ _080AF40A: _080AF41C: .4byte gBattleAnimTarget _080AF420: .4byte gBattleAnimAttacker _080AF424: .4byte sub_80AF42C -_080AF428: .4byte sub_8074F50 +_080AF428: .4byte RunStoredCallbackWhenAffineAnimEnds thumb_func_end sub_80AF3B8 thumb_func_start sub_80AF42C @@ -526,7 +526,7 @@ sub_80AF42C: @ 80AF42C cmp r0, 0x14 bne _080AF462 adds r0, r3, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080AF462: pop {r0} bx r0 @@ -538,7 +538,7 @@ sub_80AF468: @ 80AF468 sub sp, 0x10 adds r5, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r6, _080AF4B0 @ =gBattleAnimArgs ldrh r0, [r6, 0x8] strh r0, [r5, 0x2E] @@ -577,7 +577,7 @@ _080AF4B8: adds r3, r5, 0 adds r3, 0x36 movs r1, 0x1 - bl sub_8076D9C + bl SetAverageBattlerPositions _080AF4CA: ldr r0, _080AF4E8 @ =gBattleAnimAttacker ldrb r0, [r0] @@ -616,7 +616,7 @@ _080AF504: cmp r4, 0 bge _080AF504 adds r0, r5, 0 - bl sub_8075804 + bl InitAnimFastLinearTranslationWithSpeed ldrh r0, [r5, 0x30] movs r1, 0x1 eors r0, r1 @@ -628,7 +628,7 @@ _080AF526: movs r0, 0x1 strh r0, [r5, 0x2E] adds r0, r5, 0 - bl sub_807578C + bl AnimFastTranslateLinear movs r0, 0x20 ldrsh r1, [r5, r0] movs r2, 0x24 @@ -814,7 +814,7 @@ sub_80AF690: @ 80AF690 movs r0, 0x1 strh r0, [r4, 0x2E] adds r0, r4, 0 - bl sub_807578C + bl AnimFastTranslateLinear movs r1, 0x20 ldrsh r0, [r4, r1] movs r2, 0x24 @@ -853,7 +853,7 @@ sub_80AF6D8: @ 80AF6D8 sub sp, 0x10 adds r5, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r1, _080AF71C @ =gBattleAnimArgs ldrh r0, [r1, 0x8] strh r0, [r5, 0x2E] @@ -890,7 +890,7 @@ _080AF724: adds r3, r5, 0 adds r3, 0x36 movs r1, 0x1 - bl sub_8076D9C + bl SetAverageBattlerPositions _080AF736: ldr r0, _080AF758 @ =gBattleAnimAttacker ldrb r0, [r0] @@ -921,7 +921,7 @@ _080AF76A: adds r0, r1 strh r0, [r5, 0x36] adds r0, r5, 0 - bl sub_8075804 + bl InitAnimFastLinearTranslationWithSpeed adds r7, r5, 0 adds r7, 0x2E adds r2, r7, 0 @@ -946,7 +946,7 @@ _080AF79E: movs r0, 0x1 strh r0, [r5, 0x2E] adds r0, r5, 0 - bl sub_807578C + bl AnimFastTranslateLinear movs r2, 0x20 ldrsh r1, [r5, r2] movs r2, 0x24 @@ -1011,7 +1011,7 @@ _080AF818: .4byte sub_80AF81C sub_80AF81C: @ 80AF81C push {r4,lr} adds r4, r0, 0 - bl sub_807578C + bl AnimFastTranslateLinear movs r1, 0x2E ldrsh r0, [r4, r1] cmp r0, 0 @@ -1082,7 +1082,7 @@ sub_80AF88C: @ 80AF88C bne _080AF8B0 adds r0, r4, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget b _080AF8E6 .align 2, 0 _080AF8AC: .4byte gBattleAnimArgs @@ -1094,7 +1094,7 @@ _080AF8B0: adds r3, r4, 0 adds r3, 0x22 movs r1, 0 - bl sub_8076D9C + bl SetAverageBattlerPositions ldr r0, _080AF8F4 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -1152,7 +1152,7 @@ sub_80AF914: @ 80AF914 bne _080AF938 adds r0, r5, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker b _080AF976 .align 2, 0 _080AF934: .4byte gBattleAnimArgs @@ -1164,7 +1164,7 @@ _080AF938: adds r3, r5, 0 adds r3, 0x22 movs r1, 0 - bl sub_8076D9C + bl SetAverageBattlerPositions ldrb r0, [r4] bl GetBattlerSide lsls r0, 24 @@ -1200,7 +1200,7 @@ _080AF984: bne _080AF996 adds r0, r5, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget b _080AF9D2 _080AF996: ldr r4, _080AF9BC @ =gBattleAnimTarget @@ -1210,7 +1210,7 @@ _080AF996: adds r3, r5, 0 adds r3, 0x22 movs r1, 0 - bl sub_8076D9C + bl SetAverageBattlerPositions ldrb r0, [r4] bl GetBattlerSide lsls r0, 24 @@ -1279,7 +1279,7 @@ _080AFA10: adds r0, r1 strh r0, [r5, 0x36] adds r0, r5, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation movs r0, 0x40 strh r0, [r5, 0x38] ldr r1, _080AFA48 @ =sub_80AFA4C @@ -1299,7 +1299,7 @@ _080AFA48: .4byte sub_80AFA4C sub_80AFA4C: @ 80AFA4C push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 bne _080AFAD6 @@ -1328,7 +1328,7 @@ sub_80AFA4C: @ 80AFA4C ldrh r0, [r4, 0x3C] lsls r0, 24 lsrs r0, 24 - bl sub_8076884 + bl GetBattlerSpriteBGPriority movs r1, 0x3 ands r1, r0 lsls r1, 2 @@ -1343,7 +1343,7 @@ _080AFAA8: ldrh r0, [r4, 0x3C] lsls r0, 24 lsrs r0, 24 - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r0, 24 adds r0, 0x1 @@ -1426,7 +1426,7 @@ _080AFB26: mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080AFBB0 @ =gFile_graphics_battle_anims_backgrounds_fog_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap ldr r0, _080AFBB4 @ =gUnknown_83C2CE0 mov r1, sp ldrb r1, [r1, 0x8] @@ -1673,14 +1673,14 @@ sub_80AFD4C: @ 80AFD4C lsls r0, 24 lsrs r0, 24 strh r0, [r4, 0x22] - ldr r0, _080AFD7C @ =sub_8075DF4 + ldr r0, _080AFD7C @ =TranslateAnimSpriteToTargetMonLocation str r0, [r4, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 _080AFD78: .4byte gBattleAnimAttacker -_080AFD7C: .4byte sub_8075DF4 +_080AFD7C: .4byte TranslateAnimSpriteToTargetMonLocation thumb_func_end sub_80AFD4C thumb_func_start sub_80AFD80 @@ -1737,7 +1737,7 @@ _080AFDC2: mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080AFE50 @ =gFile_graphics_battle_anims_backgrounds_fog_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap ldr r0, _080AFE54 @ =gUnknown_83C2CE0 mov r1, sp ldrb r1, [r1, 0x8] @@ -2105,7 +2105,7 @@ _080B00F8: adds r0, r6 strh r0, [r5, 0x36] ldrb r0, [r4] - bl sub_8076884 + bl GetBattlerSpriteBGPriority lsls r0, 24 lsrs r0, 16 ldrh r1, [r5, 0x3C] @@ -2123,7 +2123,7 @@ _080B00F8: strb r0, [r1] _080B012C: adds r0, r5, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldr r0, _080B0144 @ =sub_80B0148 str r0, [r5, 0x1C] pop {r3} @@ -2159,7 +2159,7 @@ _080B0168: b _080B0380 _080B016A: adds r0, r4, 0 - bl sub_80755E0 + bl AnimTranslateLinear ldr r1, _080B0194 @ =gSineTable movs r2, 0x38 ldrsh r0, [r4, r2] @@ -2251,13 +2251,13 @@ _080B0202: ands r0, r1 strh r0, [r4, 0x38] adds r0, r4, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation b _080B0380 .align 2, 0 _080B022C: .4byte gSineTable _080B0230: adds r0, r4, 0 - bl sub_80755E0 + bl AnimTranslateLinear ldr r1, _080B028C @ =gSineTable movs r2, 0x38 ldrsh r0, [r4, r2] @@ -2397,7 +2397,7 @@ _080B032A: _080B0340: .4byte 0x0000fff0 _080B0344: adds r0, r4, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080B0380 @@ -2610,7 +2610,7 @@ _080B04D0: .4byte gUnknown_83E652C _080B04D4: adds r0, r5, 0 movs r1, 0x1 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 asrs r0, 16 movs r1, 0x6 @@ -2622,7 +2622,7 @@ _080B04D4: lsrs r7, r1, 16 adds r0, r5, 0 movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 asrs r0, 16 movs r1, 0x6 @@ -2634,7 +2634,7 @@ _080B04D4: _080B050A: adds r0, r5, 0 movs r1, 0x1 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 asrs r0, 16 movs r1, 0x6 @@ -2646,7 +2646,7 @@ _080B050A: lsrs r7, r1, 16 adds r0, r5, 0 movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 asrs r0, 16 movs r1, 0x6 @@ -2904,7 +2904,7 @@ _080B071A: bl StartSpriteAffineAnim adds r0, r5, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r6, _080B0780 @ =gBattleAnimArgs ldrh r0, [r6, 0x8] strh r0, [r5, 0x2E] @@ -2938,7 +2938,7 @@ _080B0742: ldrh r0, [r6, 0xA] strh r0, [r5, 0x38] adds r0, r5, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080B078C @ =sub_80B0790 str r0, [r5, 0x1C] pop {r4-r6} @@ -2956,14 +2956,14 @@ _080B078C: .4byte sub_80B0790 sub_80B0790: @ 80B0790 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080B07B2 adds r0, r4, 0 movs r1, 0x1 bl StartSpriteAnim - ldr r0, _080B07B8 @ =sub_8074F6C + ldr r0, _080B07B8 @ =RunStoredCallbackWhenAnimEnds str r0, [r4, 0x1C] ldr r1, _080B07BC @ =DestroyAnimSprite adds r0, r4, 0 @@ -2973,7 +2973,7 @@ _080B07B2: pop {r0} bx r0 .align 2, 0 -_080B07B8: .4byte sub_8074F6C +_080B07B8: .4byte RunStoredCallbackWhenAnimEnds _080B07BC: .4byte DestroyAnimSprite thumb_func_end sub_80B0790 @@ -2994,7 +2994,7 @@ sub_80B07C0: @ 80B07C0 strh r0, [r4, 0x4] adds r0, r4, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget bl Random movs r5, 0xFF ands r5, r0 diff --git a/asm/normal.s b/asm/normal.s index 1ddf400ba..418c32e1d 100644 --- a/asm/normal.s +++ b/asm/normal.s @@ -369,10 +369,10 @@ sub_80B9B8C: @ 80B9B8C movs r0, 0x70 strh r0, [r4, 0x36] strh r2, [r4, 0x38] - ldr r1, _080B9BD4 @ =move_anim_8074EE0 + ldr r1, _080B9BD4 @ =DestroySpriteAndMatrix adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r1, _080B9BD8 @ =sub_8074AE0 + ldr r1, _080B9BD8 @ =TranslateSpriteInGrowingCircleOverDuration str r1, [r4, 0x1C] adds r0, r4, 0 bl _call_via_r1 @@ -381,8 +381,8 @@ sub_80B9B8C: @ 80B9B8C bx r0 .align 2, 0 _080B9BD0: .4byte gBattleAnimArgs -_080B9BD4: .4byte move_anim_8074EE0 -_080B9BD8: .4byte sub_8074AE0 +_080B9BD4: .4byte DestroySpriteAndMatrix +_080B9BD8: .4byte TranslateSpriteInGrowingCircleOverDuration thumb_func_end sub_80B9B8C thumb_func_start sub_80B9BDC @@ -1662,16 +1662,16 @@ sub_80BA560: @ 80BA560 bne _080BA584 adds r0, r5, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker b _080BA58C .align 2, 0 _080BA580: .4byte gBattleAnimArgs _080BA584: adds r0, r5, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget _080BA58C: - ldr r0, _080BA5A0 @ =sub_8074F50 + ldr r0, _080BA5A0 @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r5, 0x1C] ldr r1, _080BA5A4 @ =DestroyAnimSprite adds r0, r5, 0 @@ -1680,7 +1680,7 @@ _080BA58C: pop {r0} bx r0 .align 2, 0 -_080BA5A0: .4byte sub_8074F50 +_080BA5A0: .4byte RunStoredCallbackWhenAffineAnimEnds _080BA5A4: .4byte DestroyAnimSprite thumb_func_end sub_80BA560 @@ -1697,19 +1697,19 @@ sub_80BA5A8: @ 80BA5A8 bne _080BA5CC adds r0, r5, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker b _080BA5D4 .align 2, 0 _080BA5C8: .4byte gBattleAnimArgs _080BA5CC: adds r0, r5, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget _080BA5D4: ldr r0, _080BA5EC @ =gBattleAnimArgs ldrh r0, [r0, 0x8] strh r0, [r5, 0x2E] - ldr r0, _080BA5F0 @ =sub_8074F50 + ldr r0, _080BA5F0 @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r5, 0x1C] ldr r1, _080BA5F4 @ =sub_80B1D3C adds r0, r5, 0 @@ -1719,7 +1719,7 @@ _080BA5D4: bx r0 .align 2, 0 _080BA5EC: .4byte gBattleAnimArgs -_080BA5F0: .4byte sub_8074F50 +_080BA5F0: .4byte RunStoredCallbackWhenAffineAnimEnds _080BA5F4: .4byte sub_80B1D3C thumb_func_end sub_80BA5A8 @@ -1777,14 +1777,14 @@ _080BA64C: bne _080BA66C adds r0, r4, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker b _080BA674 .align 2, 0 _080BA668: .4byte gBattleAnimArgs _080BA66C: adds r0, r4, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget _080BA674: bl Random lsls r0, 16 @@ -1806,10 +1806,10 @@ _080BA674: ldrh r1, [r4, 0x26] adds r0, r1 strh r0, [r4, 0x26] - ldr r1, _080BA6C0 @ =move_anim_8074EE0 + ldr r1, _080BA6C0 @ =DestroySpriteAndMatrix adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080BA6C4 @ =sub_8074F50 + ldr r0, _080BA6C4 @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r4, 0x1C] pop {r4,r5} pop {r0} @@ -1817,8 +1817,8 @@ _080BA674: .align 2, 0 _080BA6B8: .4byte 0x0000ffe8 _080BA6BC: .4byte 0x0000fff4 -_080BA6C0: .4byte move_anim_8074EE0 -_080BA6C4: .4byte sub_8074F50 +_080BA6C0: .4byte DestroySpriteAndMatrix +_080BA6C4: .4byte RunStoredCallbackWhenAffineAnimEnds thumb_func_end sub_80BA630 thumb_func_start sub_80BA6C8 @@ -1859,10 +1859,10 @@ sub_80BA6C8: @ 80BA6C8 ldrb r1, [r5, 0x6] adds r0, r4, 0 bl StartSpriteAffineAnim - ldr r1, _080BA730 @ =move_anim_8074EE0 + ldr r1, _080BA730 @ =DestroySpriteAndMatrix adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080BA734 @ =sub_8074F50 + ldr r0, _080BA734 @ =RunStoredCallbackWhenAffineAnimEnds str r0, [r4, 0x1C] pop {r4,r5} pop {r0} @@ -1870,8 +1870,8 @@ sub_80BA6C8: @ 80BA6C8 .align 2, 0 _080BA728: .4byte gBattleAnimArgs _080BA72C: .4byte gSprites -_080BA730: .4byte move_anim_8074EE0 -_080BA734: .4byte sub_8074F50 +_080BA730: .4byte DestroySpriteAndMatrix +_080BA734: .4byte RunStoredCallbackWhenAffineAnimEnds thumb_func_end sub_80BA6C8 thumb_func_start sub_80BA738 @@ -1885,14 +1885,14 @@ sub_80BA738: @ 80BA738 bne _080BA754 adds r0, r4, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker b _080BA75C .align 2, 0 _080BA750: .4byte gBattleAnimArgs _080BA754: adds r0, r4, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget _080BA75C: ldr r0, _080BA774 @ =gBattleAnimArgs ldrh r0, [r0, 0x6] @@ -1900,7 +1900,7 @@ _080BA75C: ldr r1, _080BA778 @ =DestroyAnimSprite adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080BA77C @ =sub_8074C44 + ldr r0, _080BA77C @ =WaitAnimForDuration str r0, [r4, 0x1C] pop {r4} pop {r0} @@ -1908,7 +1908,7 @@ _080BA75C: .align 2, 0 _080BA774: .4byte gBattleAnimArgs _080BA778: .4byte DestroyAnimSprite -_080BA77C: .4byte sub_8074C44 +_080BA77C: .4byte WaitAnimForDuration thumb_func_end sub_80BA738 thumb_func_start sub_80BA780 @@ -1924,14 +1924,14 @@ sub_80BA780: @ 80BA780 bne _080BA7A4 adds r0, r5, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker b _080BA7AC .align 2, 0 _080BA7A0: .4byte gBattleAnimArgs _080BA7A4: adds r0, r5, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget _080BA7AC: ldr r0, _080BA7B8 @ =sub_80BA7BC str r0, [r5, 0x1C] diff --git a/asm/poison.s b/asm/poison.s index 770941be8..e80bd01af 100644 --- a/asm/poison.s +++ b/asm/poison.s @@ -20,7 +20,7 @@ sub_80B1620: @ 80B1620 _080B1636: adds r0, r5, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldrh r0, [r4, 0x4] strh r0, [r5, 0x2E] ldr r4, _080B1678 @ =gBattleAnimTarget @@ -39,7 +39,7 @@ _080B1636: ldr r0, _080B167C @ =0x0000ffe2 strh r0, [r5, 0x38] adds r0, r5, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080B1680 @ =sub_80B1684 str r0, [r5, 0x1C] pop {r4,r5} @@ -56,7 +56,7 @@ _080B1680: .4byte sub_80B1684 sub_80B1684: @ 80B1684 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080B1698 @@ -84,7 +84,7 @@ sub_80B16A0: @ 80B16A0 _080B16B8: adds r0, r4, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080B1718 @ =gBattleAnimTarget ldrb r0, [r0] mov r6, sp @@ -92,7 +92,7 @@ _080B16B8: movs r1, 0x1 mov r2, sp adds r3, r6, 0 - bl sub_8076D9C + bl SetAverageBattlerPositions ldr r0, _080B171C @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -117,7 +117,7 @@ _080B16E6: ldr r0, _080B1720 @ =0x0000ffe2 strh r0, [r4, 0x38] adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080B1724 @ =sub_80B1728 str r0, [r4, 0x1C] add sp, 0x4 @@ -136,7 +136,7 @@ _080B1724: .4byte sub_80B1728 sub_80B1728: @ 80B1728 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080B173C @@ -193,7 +193,7 @@ _080B1794: .4byte sub_80B1798 sub_80B1798: @ 80B1798 push {r4,lr} adds r4, r0, 0 - bl sub_8074D00 + bl TranslateSpriteLinearFixedPoint ldrh r0, [r4, 0x30] ldrh r1, [r4, 0x38] subs r0, r1 @@ -225,7 +225,7 @@ sub_80B17C4: @ 80B17C4 adds r3, r4, 0 adds r3, 0x22 movs r1, 0x1 - bl sub_8076D9C + bl SetAverageBattlerPositions ldr r0, _080B1828 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -280,7 +280,7 @@ sub_80B1838: @ 80B1838 bne _080B1854 adds r0, r4, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget b _080B188A .align 2, 0 _080B1850: .4byte gBattleAnimArgs @@ -292,7 +292,7 @@ _080B1854: adds r3, r4, 0 adds r3, 0x22 movs r1, 0x1 - bl sub_8076D9C + bl SetAverageBattlerPositions ldr r0, _080B1898 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide diff --git a/asm/pokeball.s b/asm/pokeball.s index 1d01b5c7e..fa1f4eee0 100644 --- a/asm/pokeball.s +++ b/asm/pokeball.s @@ -290,7 +290,7 @@ _0804AB6C: ldr r0, _0804ABC8 @ =0x0000ffd8 strh r0, [r4, 0x38] adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation mov r0, sp ldrh r0, [r0] strh r0, [r4, 0x6] @@ -328,7 +328,7 @@ SpriteCB_TestBallThrow: @ 804ABD4 push {r7} sub sp, 0x4 adds r7, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _0804AC74 @@ -1692,7 +1692,7 @@ SpriteCB_PlayerMonSendOut_1: @ 804B684 ldrh r0, [r4, 0x3A] strh r0, [r4, 0x6] adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _0804B6D0 @ =SpriteCB_PlayerMonSendOut_2 str r0, [r4, 0x1C] pop {r4} @@ -1754,7 +1754,7 @@ SpriteCB_PlayerMonSendOut_2: @ 804B6D4 _0804B736: ldrh r4, [r5, 0x2E] adds r0, r5, 0 - bl sub_80755E0 + bl AnimTranslateLinear movs r1, 0x3A ldrsh r0, [r5, r1] movs r1, 0x3 @@ -1825,7 +1825,7 @@ _0804B78E: b _0804B834 _0804B7C8: adds r0, r5, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _0804B834 @@ -2580,13 +2580,13 @@ _0804BD80: _0804BD84: .4byte SpriteCallbackDummy thumb_func_end sub_804BD6C - thumb_func_start DestroySpriteAndFreeResources_ -DestroySpriteAndFreeResources_: @ 804BD88 + thumb_func_start DestroySpriteAndFreeResources2 +DestroySpriteAndFreeResources2: @ 804BD88 push {lr} bl DestroySpriteAndFreeResources pop {r0} bx r0 - thumb_func_end DestroySpriteAndFreeResources_ + thumb_func_end DestroySpriteAndFreeResources2 thumb_func_start sub_804BD94 sub_804BD94: @ 804BD94 diff --git a/asm/pokemon_jump_2.s b/asm/pokemon_jump_2.s index 66bb3dc52..44598a330 100644 --- a/asm/pokemon_jump_2.s +++ b/asm/pokemon_jump_2.s @@ -6157,7 +6157,7 @@ sub_814A8B8: @ 814A8B8 movs r6, 0 cmp r6, r10 bge _0814A922 - ldr r0, _0814A938 @ =gUnknown_82349CC + ldr r0, _0814A938 @ =gMonFrontPicCoords mov r9, r0 ldr r1, _0814A93C @ =gUnknown_203F3D8 mov r8, r1 @@ -6200,7 +6200,7 @@ _0814A922: bx r0 .align 2, 0 _0814A934: .4byte gUnknown_846D9D4 -_0814A938: .4byte gUnknown_82349CC +_0814A938: .4byte gMonFrontPicCoords _0814A93C: .4byte gUnknown_203F3D8 thumb_func_end sub_814A8B8 diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 71e5cbfaf..f6f746313 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -10728,7 +10728,7 @@ sub_8139D90: @ 8139D90 lsls r0, 2 ldr r1, _08139DB8 @ =gSprites adds r0, r1 - bl DestroySpriteAndFreeResources_ + bl DestroySpriteAndFreeResources2 pop {r0} bx r0 .align 2, 0 diff --git a/asm/psychic.s b/asm/psychic.s index d2d82826d..2561a4805 100644 --- a/asm/psychic.s +++ b/asm/psychic.s @@ -42,7 +42,7 @@ _080B2EFE: lsrs r4, r0, 24 adds r7, r4, 0 adds r0, r4, 0 - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 movs r1, 0x1 @@ -354,7 +354,7 @@ sub_80B3168: @ 80B3168 lsls r0, 24 lsrs r0, 24 adds r4, r0, 0 - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 movs r1, 0x1 @@ -448,14 +448,14 @@ _080B3232: bne _080B324C adds r0, r4, 0 adds r1, r6, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker b _080B3254 .align 2, 0 _080B3248: .4byte gBattleAnimArgs _080B324C: adds r0, r4, 0 adds r1, r6, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget _080B3254: ldrh r0, [r4, 0x2E] adds r0, 0x1 @@ -470,7 +470,7 @@ _080B325C: cmp r0, 0 beq _080B3270 adds r0, r4, 0 - bl move_anim_8074EE0 + bl DestroySpriteAndMatrix _080B3270: pop {r4-r6} pop {r0} @@ -526,14 +526,14 @@ _080B32D6: ldr r1, _080B32EC @ =DestroyAnimSprite adds r0, r5, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080B32F0 @ =sub_8074F6C + ldr r0, _080B32F0 @ =RunStoredCallbackWhenAnimEnds str r0, [r5, 0x1C] pop {r4,r5} pop {r0} bx r0 .align 2, 0 _080B32EC: .4byte DestroyAnimSprite -_080B32F0: .4byte sub_8074F6C +_080B32F0: .4byte RunStoredCallbackWhenAnimEnds thumb_func_end sub_80B3278 thumb_func_start sub_80B32F4 @@ -543,7 +543,7 @@ sub_80B32F4: @ 80B32F4 ldr r6, _080B3378 @ =gBattleAnimAttacker ldrb r0, [r6] movs r1, 0x1 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 asrs r1, r0, 16 lsrs r0, 31 @@ -552,7 +552,7 @@ sub_80B32F4: @ 80B32F4 lsrs r4, r1, 16 ldrb r0, [r6] movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 asrs r1, r0, 16 lsrs r0, 31 @@ -595,7 +595,7 @@ _080B3366: ldr r1, _080B337C @ =sub_80B3384 adds r0, r5, 0 bl StoreSpriteCallbackInData6 - ldr r0, _080B3380 @ =sub_8074F6C + ldr r0, _080B3380 @ =RunStoredCallbackWhenAnimEnds str r0, [r5, 0x1C] pop {r4-r7} pop {r0} @@ -603,7 +603,7 @@ _080B3366: .align 2, 0 _080B3378: .4byte gBattleAnimAttacker _080B337C: .4byte sub_80B3384 -_080B3380: .4byte sub_8074F6C +_080B3380: .4byte RunStoredCallbackWhenAnimEnds thumb_func_end sub_80B32F4 thumb_func_start sub_80B3384 @@ -703,7 +703,7 @@ sub_80B3418: @ 80B3418 strh r1, [r4, 0x8] ldr r2, _080B344C @ =gUnknown_83E700C adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r0, _080B3450 @ =sub_80B3454 str r0, [r4] pop {r4} @@ -725,7 +725,7 @@ sub_80B3454: @ 80B3454 lsls r0, 3 ldr r1, _080B347C @ =gTasks adds r0, r1 - bl sub_8076308 + bl RunAffineAnimFromTaskData lsls r0, 24 cmp r0, 0 bne _080B3474 @@ -770,7 +770,7 @@ _080B34B4: ldrb r1, [r4, 0x8] ldr r2, _080B34D4 @ =gUnknown_83E702C adds r0, r4, 0 - bl sub_80762D0 + bl PrepareAffineAnimInTaskData ldr r0, _080B34D8 @ =sub_80B34DC str r0, [r4] pop {r4} @@ -804,7 +804,7 @@ sub_80B34DC: @ 80B34DC _080B34FC: .4byte gTasks _080B3500: adds r0, r4, 0 - bl sub_8076308 + bl RunAffineAnimFromTaskData ldrh r0, [r4, 0xC] adds r0, 0x1 strh r0, [r4, 0xC] @@ -900,7 +900,7 @@ sub_80B3584: @ 80B3584 strh r0, [r5, 0x24] ldrb r0, [r4] movs r1, 0x1 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 asrs r0, 16 movs r1, 0x3 @@ -909,7 +909,7 @@ sub_80B3584: @ 80B3584 lsrs r6, r0, 16 ldrb r0, [r4] movs r1, 0 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr lsls r0, 16 asrs r0, 16 movs r1, 0x3 @@ -1254,23 +1254,23 @@ sub_80B3834: @ 80B3834 ldr r4, _080B389C @ =gBattleAnimTarget ldrb r0, [r4] movs r1, 0x5 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x8 strh r0, [r5, 0x1E] ldrb r0, [r4] movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 strh r0, [r5, 0x20] ldr r4, _080B38A0 @ =gBattleAnimAttacker ldrb r0, [r4] movs r1, 0x5 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x8 strh r0, [r5, 0x22] ldrb r0, [r4] movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 b _080B3962 .align 2, 0 @@ -1285,18 +1285,18 @@ _080B38A4: ldr r4, _080B38D0 @ =gBattleAnimAttacker ldrb r0, [r4] movs r1, 0x4 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 strh r0, [r5, 0x1E] ldrb r0, [r4] movs r1, 0x3 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x8 strh r0, [r5, 0x20] ldr r4, _080B38D4 @ =gBattleAnimTarget ldrb r0, [r4] movs r1, 0x4 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 b _080B3956 .align 2, 0 @@ -1313,23 +1313,23 @@ _080B38D8: ldr r4, _080B3924 @ =gBattleAnimTarget ldrb r0, [r4] movs r1, 0x4 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 strh r0, [r5, 0x1E] ldrb r0, [r4] movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 strh r0, [r5, 0x20] ldr r4, _080B3928 @ =gBattleAnimAttacker ldrb r0, [r4] movs r1, 0x4 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 strh r0, [r5, 0x22] ldrb r0, [r4] movs r1, 0x2 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr adds r0, 0x8 b _080B3962 .align 2, 0 @@ -1343,24 +1343,24 @@ _080B392C: ldr r4, _080B3974 @ =gBattleAnimAttacker ldrb r0, [r4] movs r1, 0x5 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x8 strh r0, [r5, 0x1E] ldrb r0, [r4] movs r1, 0x3 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x8 strh r0, [r5, 0x20] ldr r4, _080B3978 @ =gBattleAnimTarget ldrb r0, [r4] movs r1, 0x5 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x8 _080B3956: strh r0, [r5, 0x22] ldrb r0, [r4] movs r1, 0x3 - bl sub_8076B2C + bl GetBattlerSpriteCoordAttr subs r0, 0x8 _080B3962: strh r0, [r5, 0x24] @@ -1430,7 +1430,7 @@ _080B39A4: ldrh r0, [r5, 0x1C] strh r0, [r4, 0x38] adds r0, r4, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldrb r0, [r5, 0xC] movs r1, 0x3 ands r1, r0 @@ -1471,7 +1471,7 @@ _080B3A2C: sub_80B3A34: @ 80B3A34 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080B3A52 @@ -1500,7 +1500,7 @@ sub_80B3A58: @ 80B3A58 adds r4, r1, r0 ldr r0, _080B3A94 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_807492C + bl GetBattlerYCoordWithElevation lsls r0, 24 lsrs r1, r0, 24 adds r0, r1, 0 @@ -1558,7 +1558,7 @@ _080B3ACA: _080B3AD6: ldr r0, _080B3AF0 @ =gBattleAnimTarget ldrb r0, [r0] - bl sub_80768B0 + bl GetBattlerSpriteBGPriorityRank lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -1954,7 +1954,7 @@ _080B3DAA: ldrh r1, [r4, 0x22] lsls r1, 24 lsrs r1, 24 - bl sub_8076494 + bl SetBattlerSpriteYOffsetFromOtherYScale movs r2, 0xA ldrsh r0, [r4, r2] cmp r0, 0x30 @@ -1993,7 +1993,7 @@ _080B3DFC: ldrh r1, [r4, 0x22] lsls r1, 24 lsrs r1, 24 - bl sub_8076494 + bl SetBattlerSpriteYOffsetFromOtherYScale movs r2, 0xA ldrsh r0, [r4, r2] cmp r0, 0 diff --git a/asm/rock.s b/asm/rock.s index 74712e5e5..7df02ecc3 100644 --- a/asm/rock.s +++ b/asm/rock.s @@ -21,7 +21,7 @@ sub_80B4634: @ 80B4634 adds r3, r5, 0 adds r3, 0x22 movs r1, 0 - bl sub_8076D9C + bl SetAverageBattlerPositions _080B4654: ldrh r0, [r6] ldrh r1, [r5, 0x20] @@ -49,7 +49,7 @@ _080B4654: ldr r1, _080B46AC @ =sub_80B46B4 adds r0, r5, 0 bl StoreSpriteCallbackInData6 - ldr r1, _080B46B0 @ =sub_8074BE4 + ldr r1, _080B46B0 @ =TranslateSpriteInEllipseOverDuration str r1, [r5, 0x1C] adds r0, r5, 0 bl _call_via_r1 @@ -61,7 +61,7 @@ _080B46A0: .4byte gBattleAnimArgs _080B46A4: .4byte gBattleAnimTarget _080B46A8: .4byte 0x0000ffba _080B46AC: .4byte sub_80B46B4 -_080B46B0: .4byte sub_8074BE4 +_080B46B0: .4byte TranslateSpriteInEllipseOverDuration thumb_func_end sub_80B4634 thumb_func_start sub_80B46B4 @@ -81,10 +81,10 @@ sub_80B46B4: @ 80B46B4 strh r0, [r4, 0x34] ldr r0, _080B46EC @ =0x0000ffe8 strh r0, [r4, 0x36] - ldr r1, _080B46F0 @ =move_anim_8074EE0 + ldr r1, _080B46F0 @ =DestroySpriteAndMatrix adds r0, r4, 0 bl StoreSpriteCallbackInData6 - ldr r1, _080B46F4 @ =sub_8074BE4 + ldr r1, _080B46F4 @ =TranslateSpriteInEllipseOverDuration str r1, [r4, 0x1C] adds r0, r4, 0 bl _call_via_r1 @@ -93,8 +93,8 @@ sub_80B46B4: @ 80B46B4 bx r0 .align 2, 0 _080B46EC: .4byte 0x0000ffe8 -_080B46F0: .4byte move_anim_8074EE0 -_080B46F4: .4byte sub_8074BE4 +_080B46F0: .4byte DestroySpriteAndMatrix +_080B46F4: .4byte TranslateSpriteInEllipseOverDuration thumb_func_end sub_80B46B4 thumb_func_start sub_80B46F8 @@ -146,9 +146,9 @@ _080B472E: bl InitSpriteDataForLinearTranslation strh r4, [r5, 0x34] strh r4, [r5, 0x36] - ldr r0, _080B4774 @ =sub_8074D00 + ldr r0, _080B4774 @ =TranslateSpriteLinearFixedPoint str r0, [r5, 0x1C] - ldr r1, _080B4778 @ =move_anim_8074EE0 + ldr r1, _080B4778 @ =DestroySpriteAndMatrix adds r0, r5, 0 bl StoreSpriteCallbackInData6 pop {r4,r5} @@ -156,8 +156,8 @@ _080B472E: bx r0 .align 2, 0 _080B4770: .4byte gBattleAnimArgs -_080B4774: .4byte sub_8074D00 -_080B4778: .4byte move_anim_8074EE0 +_080B4774: .4byte TranslateSpriteLinearFixedPoint +_080B4778: .4byte DestroySpriteAndMatrix thumb_func_end sub_80B46F8 thumb_func_start sub_80B477C @@ -171,14 +171,14 @@ sub_80B477C: @ 80B477C bne _080B4798 adds r0, r4, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker b _080B47A0 .align 2, 0 _080B4794: .4byte gBattleAnimArgs _080B4798: adds r0, r4, 0 movs r1, 0 - bl sub_8075114 + bl InitSpritePosToAnimTarget _080B47A0: ldr r1, _080B47BC @ =gBattleAnimArgs ldrh r0, [r1, 0x6] @@ -286,7 +286,7 @@ _080B4854: mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080B48F0 @ =gFile_graphics_battle_anims_backgrounds_sandstorm_brew_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080B48F4 @ =gFile_graphics_battle_anims_backgrounds_sandstorm_brew_sheet @@ -673,7 +673,7 @@ sub_80B4B8C: @ 80B4B8C bl StartSpriteAnim adds r0, r4, 0 movs r1, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldrh r0, [r5, 0x6] strh r0, [r4, 0x2E] ldrh r0, [r4, 0x20] @@ -1141,7 +1141,7 @@ _080B4ECC: ands r1, r3 orrs r1, r2 strh r1, [r0, 0x4] - bl sub_8075068 + bl InitAnimArcTranslation ldrh r0, [r4, 0x1E] adds r0, 0x1 strh r0, [r4, 0x1E] @@ -1165,7 +1165,7 @@ _080B4F74: .4byte 0xfffffc00 sub_80B4F78: @ 80B4F78 push {r4,lr} adds r4, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080B4FAA @@ -1316,7 +1316,7 @@ sub_80B5074: @ 80B5074 bl StartSpriteAffineAnim _080B5090: adds r0, r4, 0 - bl sub_8075DF4 + bl TranslateAnimSpriteToTargetMonLocation pop {r4} pop {r0} bx r0 diff --git a/asm/trade.s b/asm/trade.s index 0c1c168cc..71d39e0bb 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -9300,7 +9300,7 @@ _0805139C: adds r1, r0 lsls r1, 2 adds r1, r3 - ldr r2, _08051410 @ =gUnknown_82349CC + ldr r2, _08051410 @ =gMonFrontPicCoords adds r0, r4, 0 adds r0, 0xF0 ldrh r0, [r0] @@ -9324,7 +9324,7 @@ _0805139C: .align 2, 0 _08051408: .4byte gSprites _0805140C: .4byte 0x0000ff4c -_08051410: .4byte gUnknown_82349CC +_08051410: .4byte gMonFrontPicCoords _08051414: ldr r5, [r7] adds r6, r5, 0 @@ -10839,7 +10839,7 @@ _08052070: adds r1, r0 lsls r1, 2 adds r1, r4 - ldr r3, _08052120 @ =gUnknown_82349CC + ldr r3, _08052120 @ =gMonFrontPicCoords adds r2, 0xF2 ldrh r0, [r2] lsls r0, 2 @@ -10906,7 +10906,7 @@ _08052070: b _080522AC .align 2, 0 _0805211C: .4byte gSprites -_08052120: .4byte gUnknown_82349CC +_08052120: .4byte gMonFrontPicCoords _08052124: .4byte 0x000fffff _08052128: movs r1, 0xAA @@ -11476,7 +11476,7 @@ _0805278C: adds r1, r0 lsls r1, 2 adds r1, r3 - ldr r2, _08052800 @ =gUnknown_82349CC + ldr r2, _08052800 @ =gMonFrontPicCoords adds r0, r4, 0 adds r0, 0xF0 ldrh r0, [r0] @@ -11500,7 +11500,7 @@ _0805278C: .align 2, 0 _080527F8: .4byte gSprites _080527FC: .4byte 0x0000ff4c -_08052800: .4byte gUnknown_82349CC +_08052800: .4byte gMonFrontPicCoords _08052804: ldr r5, [r7] adds r6, r5, 0 @@ -13064,7 +13064,7 @@ _080534CC: adds r1, r0 lsls r1, 2 adds r1, r4 - ldr r3, _0805357C @ =gUnknown_82349CC + ldr r3, _0805357C @ =gMonFrontPicCoords adds r2, 0xF2 ldrh r0, [r2] lsls r0, 2 @@ -13131,7 +13131,7 @@ _080534CC: b _08053708 .align 2, 0 _08053578: .4byte gSprites -_0805357C: .4byte gUnknown_82349CC +_0805357C: .4byte gMonFrontPicCoords _08053580: .4byte 0x000fffff _08053584: movs r1, 0xAA diff --git a/asm/water.s b/asm/water.s index 5c9096023..a2918ec33 100644 --- a/asm/water.s +++ b/asm/water.s @@ -197,7 +197,7 @@ _080AAD10: lsrs r0, 24 strh r0, [r6, 0x36] adds r0, r6, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldr r0, _080AADAC @ =SpriteCallbackDummy bl CreateInvisibleSpriteWithCallback adds r4, r0, 0 @@ -273,7 +273,7 @@ sub_80AADB8: @ 80AADB8 movs r0, 0x1 strh r0, [r5, 0x2E] adds r0, r5, 0 - bl sub_80755E0 + bl AnimTranslateLinear mov r1, r8 lsrs r6, r1, 8 movs r0, 0x2E @@ -329,14 +329,14 @@ sub_80AAE40: @ 80AAE40 negs r1, r1 ands r1, r2 strb r1, [r3] - ldr r1, _080AAE60 @ =sub_8074F6C + ldr r1, _080AAE60 @ =RunStoredCallbackWhenAnimEnds str r1, [r0, 0x1C] ldr r1, _080AAE64 @ =sub_80AAE68 bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 -_080AAE60: .4byte sub_8074F6C +_080AAE60: .4byte RunStoredCallbackWhenAnimEnds _080AAE64: .4byte sub_80AAE68 thumb_func_end sub_80AAE40 @@ -345,15 +345,15 @@ sub_80AAE68: @ 80AAE68 push {lr} movs r1, 0xA strh r1, [r0, 0x2E] - ldr r1, _080AAE7C @ =sub_8074C44 + ldr r1, _080AAE7C @ =WaitAnimForDuration str r1, [r0, 0x1C] - ldr r1, _080AAE80 @ =move_anim_8074EE0 + ldr r1, _080AAE80 @ =DestroySpriteAndMatrix bl StoreSpriteCallbackInData6 pop {r0} bx r0 .align 2, 0 -_080AAE7C: .4byte sub_8074C44 -_080AAE80: .4byte move_anim_8074EE0 +_080AAE7C: .4byte WaitAnimForDuration +_080AAE80: .4byte DestroySpriteAndMatrix thumb_func_end sub_80AAE68 thumb_func_start sub_80AAE84 @@ -361,7 +361,7 @@ sub_80AAE84: @ 80AAE84 push {r4-r7,lr} adds r5, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080AAEAC @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -406,7 +406,7 @@ _080AAEBA: adds r0, r7 strh r0, [r5, 0x36] adds r0, r5, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation ldr r0, _080AAF18 @ =sub_80AAF1C str r0, [r5, 0x1C] adds r2, r5, 0 @@ -447,7 +447,7 @@ sub_80AAF1C: @ 80AAF1C strb r0, [r2] _080AAF3E: adds r0, r4, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080AAF50 @@ -569,7 +569,7 @@ sub_80AB024: @ 80AB024 push {r4,r5,lr} adds r5, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker movs r0, 0x1E strh r0, [r5, 0x2E] ldrh r0, [r5, 0x20] @@ -590,7 +590,7 @@ sub_80AB024: @ 80AB024 lsrs r0, 24 strh r0, [r5, 0x36] adds r0, r5, 0 - bl obj_translate_based_on_private_1_2_3_4 + bl InitAnimLinearTranslation movs r0, 0x2E ldrsh r1, [r5, r0] movs r0, 0xD2 @@ -634,7 +634,7 @@ _080AB0A8: .4byte sub_80AB0AC sub_80AB0AC: @ 80AB0AC push {r4,lr} adds r4, r0, 0 - bl sub_80755E0 + bl AnimTranslateLinear lsls r0, 24 cmp r0, 0 beq _080AB0C0 @@ -861,7 +861,7 @@ _080AB256: movs r7, 0x3 _080AB260: adds r0, r6, 0 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r0, _080AB2B8 @ =gBattleAnimAttacker ldrb r0, [r0] bl GetBattlerSide @@ -912,7 +912,7 @@ sub_80AB2CC: @ 80AB2CC push {r4,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget ldr r0, _080AB2FC @ =gBattleAnimArgs ldrh r1, [r0, 0x8] strh r1, [r4, 0x2E] @@ -948,14 +948,14 @@ sub_80AB308: @ 80AB308 beq _080AB324 adds r0, r4, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget b _080AB32C .align 2, 0 _080AB320: .4byte gBattleAnimArgs _080AB324: adds r0, r4, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker _080AB32C: ldr r0, _080AB33C @ =gBattleAnimArgs ldrh r0, [r0, 0x4] @@ -1054,7 +1054,7 @@ sub_80AB38C: @ 80AB38C mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080AB404 @ =gFile_graphics_unknown_unknown_E81D14_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap b _080AB42E .align 2, 0 _080AB3FC: .4byte 0x00003f42 @@ -1064,7 +1064,7 @@ _080AB408: mov r0, sp ldrb r0, [r0, 0x9] ldr r1, _080AB414 @ =gFile_graphics_unknown_unknown_E81FE4_tilemap - bl sub_807543C + bl AnimLoadCompressedBgTilemap b _080AB42E .align 2, 0 _080AB414: .4byte gFile_graphics_unknown_unknown_E81FE4_tilemap @@ -1904,7 +1904,7 @@ sub_80ABA78: @ 80ABA78 strh r0, [r4, 0x4] adds r0, r4, 0 movs r1, 0x1 - bl sub_8075114 + bl InitSpritePosToAnimTarget bl Random movs r5, 0xFF ands r5, r0 @@ -2138,7 +2138,7 @@ _080ABC66: ldrh r0, [r4, 0x26] lsls r0, 24 lsrs r0, 24 - bl sub_8076440 + bl SetBattlerSpriteYOffsetFromYScale ldr r2, _080ABC84 @ =gSprites movs r0, 0x26 ldrsh r1, [r4, r0] @@ -3287,7 +3287,7 @@ sub_80AC504: @ 80AC504 strh r1, [r0, 0x36] ldrh r1, [r6, 0x1A] strh r1, [r0, 0x38] - bl sub_8075068 + bl InitAnimArcTranslation adds r5, 0x1C adds r4, r5 ldr r0, _080AC56C @ =sub_80AC570 @@ -3309,7 +3309,7 @@ _080AC56C: .4byte sub_80AC570 sub_80AC570: @ 80AC570 push {r4-r6,lr} adds r6, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080AC5CA @@ -3344,7 +3344,7 @@ sub_80AC570: @ 80AC570 mvns r1, r1 strh r1, [r6, 0x38] adds r0, r6, 0 - bl sub_8075068 + bl InitAnimArcTranslation ldr r0, _080AC5D4 @ =sub_80AC5D8 str r0, [r6, 0x1C] _080AC5CA: @@ -3360,7 +3360,7 @@ _080AC5D4: .4byte sub_80AC5D8 sub_80AC5D8: @ 80AC5D8 push {r4-r6,lr} adds r5, r0, 0 - bl AnimateBallThrow + bl TranslateAnimHorizontalArc lsls r0, 24 cmp r0, 0 beq _080AC614 @@ -3498,7 +3498,7 @@ sub_80AC6D8: @ 80AC6D8 push {r4,r5,lr} adds r4, r0, 0 movs r1, 0x1 - bl sub_8075160 + bl InitSpritePosToAnimAttacker ldr r5, _080AC714 @ =gBattleAnimTarget ldrb r0, [r5] movs r1, 0x2 diff --git a/data/battle_anim.s b/data/battle_anim.s index 3fae69431..c166708a2 100644 --- a/data/battle_anim.s +++ b/data/battle_anim.s @@ -242,21 +242,3 @@ gUnknown_83ADE18:: @ 83ADE18 gUnknown_83ADF5C:: @ 83ADF5C .incbin "baserom.gba", 0x3ADF5C, 0xC0 - -gUnknown_83AE01C:: @ 83AE01C - .incbin "baserom.gba", 0x3AE01C, 0x20 - -gUnknown_83AE03C:: @ 83AE03C - .incbin "baserom.gba", 0x3AE03C, 0x10 - -gUnknown_83AE04C:: @ 83AE04C - .incbin "baserom.gba", 0x3AE04C, 0x4 - -gUnknown_83AE050:: @ 83AE050 - .incbin "baserom.gba", 0x3AE050, 0x4 - -gUnknown_83AE054:: @ 83AE054 - .incbin "baserom.gba", 0x3AE054, 0x30 - -gUnknown_83AE084:: @ 0x83AE084 - .incbin "baserom.gba", 0x3AE084, 0x10 diff --git a/data/data.s b/data/data.s index d0bd198e1..06b06f043 100644 --- a/data/data.s +++ b/data/data.s @@ -89,7 +89,7 @@ gUnknown_823499C:: @ 823499C gUnknown_82349BC:: @ 82349BC .incbin "baserom.gba", 0x2349BC, 0x10 -gUnknown_82349CC:: @ 82349CC +gMonFrontPicCoords:: @ 82349CC .incbin "baserom.gba", 0x2349CC, 0x6E0 gMonFrontPicTable:: @ 82350AC @@ -98,7 +98,7 @@ gMonFrontPicTable:: @ 82350AC gUnknown_8235194:: @ 8235194 .incbin "baserom.gba", 0x235194, 0xCD8 -gUnknown_8235E6C:: @ 8235E6C +gMonBackPicCoords:: @ 8235E6C .incbin "baserom.gba", 0x235E6C, 0x6E0 gMonBackPicTable:: @ 823654C diff --git a/include/battle.h b/include/battle.h index 64283de20..754e92997 100644 --- a/include/battle.h +++ b/include/battle.h @@ -820,9 +820,6 @@ extern struct BattleSpriteData *gBattleSpritesDataPtr; extern u8 *gLinkBattleSendBuffer; extern u8 *gLinkBattleRecvBuffer; -extern u8 *gUnknown_0202305C; -extern u8 *gUnknown_02023060; - // Move this somewhere else #include "sprite.h" diff --git a/include/battle_anim.h b/include/battle_anim.h index 2c09037dc..7738ece11 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -1,11 +1,9 @@ #ifndef GUARD_BATTLE_ANIM_H #define GUARD_BATTLE_ANIM_H -#include "global.h" - -#ifndef BATTLE_BANKS_COUNT -#define BATTLE_BANKS_COUNT 4 -#endif // BATTLE_BANKS_COUNT +#include "battle.h" +#include "constants/battle_anim.h" +#include "task.h" enum { @@ -52,7 +50,6 @@ extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT]; extern u8 gAnimMoveTurn; extern u8 gBattleAnimAttacker; extern u8 gBattleAnimTarget; -extern u16 gAnimSpeciesByBanks[BATTLE_BANKS_COUNT]; extern u8 gUnknown_02038440; extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT]; extern u16 gAnimMovePower; @@ -60,6 +57,8 @@ extern s32 gAnimMoveDmg; extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT]; extern u8 gUnknown_2037F24; +extern struct OamData gOamData_83ACA40; + void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMoveAnim); @@ -140,32 +139,109 @@ u8 ItemIdToBallId(u16 itemId); u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId); u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId); -// battle_anim_mons.s -void TranslateMonSpriteLinear(struct Sprite * sprite); -void TranslateMonSpriteLinearFixedPoint(struct Sprite * sprite); -void InitSpriteDataForLinearTranslation(struct Sprite * sprite); -void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 b); -void ResetSpriteRotScale(u8 spriteId); -void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation); -bool8 IsContest(void); -void sub_80759DC(u8 spriteId); +// battle_anim_mons.c +u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType); +u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType); +u8 GetBattlerSpriteDefault_Y(u8 battlerId); +u8 GetSubstituteSpriteDefault_Y(u8 battlerId); +u8 GetGhostSpriteDefault_Y(u8 battlerId); +u8 GetBattlerYCoordWithElevation(u8 battlerId); +u8 GetAnimBattlerSpriteId(u8 animBattler); +void StoreSpriteCallbackInData6(struct Sprite *sprite, SpriteCallback callback); +void TranslateSpriteInCircleOverDuration(struct Sprite *sprite); +void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite); +void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite); +void WaitAnimForDuration(struct Sprite *sprite); +void sub_8074C80(struct Sprite *sprite); +void TranslateSpriteLinear(struct Sprite *sprite); +void TranslateSpriteLinearFixedPoint(struct Sprite *sprite); +void TranslateMonSpriteLinear(struct Sprite *sprite); +void TranslateMonSpriteLinearFixedPoint(struct Sprite *sprite); +void TranslateSpriteLinearAndFlicker(struct Sprite *sprite); +void DestroySpriteAndMatrix(struct Sprite *sprite); +void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite); +void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite); +void DestroyAnimSpriteAndDisableBlend(struct Sprite *sprite); +void DestroyAnimVisualTaskAndDisableBlend(u8 taskId); +void SetSpriteCoordsToAnimAttackerCoords(struct Sprite *sprite); +void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 xOffset); +void InitAnimArcTranslation(struct Sprite *sprite); +bool8 TranslateAnimHorizontalArc(struct Sprite *sprite); +bool8 TranslateAnimVerticalArc(struct Sprite *sprite); +void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite); +void InitSpritePosToAnimTarget(struct Sprite *sprite, bool8 respectMonPicOffsets); +void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffsets); +u8 GetBattlerSide(u8 battlerId); +u8 GetBattlerPosition(u8 battlerId); +u8 GetBattlerAtPosition(u8 position); bool8 IsBattlerSpritePresent(u8 battlerId); -u8 GetBattlerSpriteSubpriority(u8 battlerId); +bool8 IsDoubleBattle(void); +void sub_80752A0(struct BattleAnimBgData *animBgData); +void sub_80752C8(struct BattleAnimBgData *animBgData, u32 arg1); +void sub_8075300(struct BattleAnimBgData *animBgData, u8 unused); +void sub_8075358(u32 bgId); +void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset); +void InitAnimBgTilemapBuffer(u32 bgId, const void *src); +void AnimLoadCompressedBgTilemap(u32 bgId, const u32 *src); +u8 sub_8075454(void); +void sub_8075458(bool8 arg0); +void sub_8075490(struct Sprite *sprite); +void InitSpriteDataForLinearTranslation(struct Sprite *sprite); +void InitAnimLinearTranslation(struct Sprite *sprite); void StartAnimLinearTranslation(struct Sprite *sprite); void sub_80755B8(struct Sprite *sprite); -u8 sub_80768B0(u8 battlerId); +bool8 AnimTranslateLinear(struct Sprite *sprite); +void sub_807563C(struct Sprite *sprite); +void sub_8075678(struct Sprite *sprite); +void sub_80756A4(struct Sprite *sprite); +void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite); +bool8 AnimFastTranslateLinear(struct Sprite *sprite); +void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite); +void sub_8075830(struct Sprite *sprite); +void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation); +void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode); +void ResetSpriteRotScale(u8 spriteId); +void SetBattlerSpriteYOffsetFromRotation(u8 spriteId); +void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 xScale, s16 yScale, u16 rotation); +void sub_8075AD8(struct Sprite *sprite); +u16 ArcTan2Neg(s16 a, s16 b); +void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor); +u32 sub_8075BE8(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7); u32 sub_8075CB8(u8 a1, u8 a2, u8 a3, u8 a4); -u8 sub_8075D80(u8 battlerId); +u8 sub_8075D80(u8 a1); +void sub_8075D9C(struct Sprite *sprite); +void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite); +void sub_8075E80(struct Sprite *sprite); +void sub_8075F0C(struct Sprite *sprite); s16 CloneBattlerSpriteWithBlend(u8 animBattler); void obj_delete_but_dont_free_vram(struct Sprite *sprite); -void sub_807543C(u8 bgId, const u32 *); -void AnimLoadCompressedBgGfx(u32, const u32 *, u32); -void sub_80752A0(struct BattleAnimBgData *); -u8 sub_8076E34(s32, u8, s32); -void sub_8075358(u8 bgId); -u32 sub_8075BE8(u8, u8, u8, u8, u8, u8, u8); -void sub_8075458(bool8); -bool8 AnimateBallThrow(struct Sprite *sprite); +void sub_8076048(u8 taskId); +void AnimTask_BlendMonInAndOut(u8 task); +void sub_8076288(u8 taskId); +void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds); +bool8 RunAffineAnimFromTaskData(struct Task *task); +void SetBattlerSpriteYOffsetFromYScale(u8 spriteId); +void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId); +void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr); +void *LoadPointerFromVars(s16 lo, s16 hi); +void sub_80765D4(struct Task *task, u8 spriteId, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7); +u8 sub_8076640(struct Task *task); +void AnimTask_GetFrustrationPowerLevel(u8 taskId); +void sub_80767F0(void); +u8 GetBattlerSpriteSubpriority(u8 battlerId); +u8 GetBattlerSpriteBGPriority(u8 battlerId); +u8 GetBattlerSpriteBGPriorityRank(u8 battlerId); +u8 sub_80768D0(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10); +void DestroySpriteAndFreeResources_(struct Sprite *sprite); +s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr); +void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x, s16 *y); +u8 sub_8076E34(s32 battlerId, u8 spriteId, s32 species); +void sub_8076ED8(struct Sprite *sprite); +void sub_8076F58(struct Sprite *sprite); +void sub_8076FD0(struct Sprite *sprite); +void sub_8077030(u8 taskId); +void sub_807729C(struct Sprite *sprite); +void sub_8077350(struct Sprite *sprite); // battle_anim_mon_movement.c void AnimTask_ShakeMon(u8 taskId); diff --git a/include/battle_main.h b/include/battle_main.h index cd602cd28..757ee3468 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -67,7 +67,7 @@ void EndBounceEffect(u8 bank, bool8 b); void sub_8039E44(struct Sprite *sprite); void sub_8039E60(struct Sprite *sprite); void sub_8039E84(struct Sprite *sprite); -void sub_8039E9C(struct Sprite *sprite); +void sub_801236C(struct Sprite *sprite); void BeginBattleIntro(void); void SwitchInClearSetData(void); void FaintClearSetData(void); diff --git a/include/data.h b/include/data.h index 6479237f2..d3bc77799 100644 --- a/include/data.h +++ b/include/data.h @@ -31,6 +31,8 @@ extern const struct CompressedSpritePalette gMonShinyPaletteTable[]; extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; +extern const struct MonCoords gMonFrontPicCoords[]; +extern const struct MonCoords gMonBackPicCoords[]; extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow; extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow; diff --git a/include/global.h b/include/global.h index 35f8de01b..5ddf9a0a8 100644 --- a/include/global.h +++ b/include/global.h @@ -76,6 +76,18 @@ extern u8 gStringVar2[]; extern u8 gStringVar3[]; extern u8 gStringVar4[]; +struct Coords8 +{ + s8 x; + s8 y; +}; + +struct UCoords8 +{ + u8 x; + u8 y; +}; + struct Coords16 { s16 x; @@ -88,6 +100,18 @@ struct UCoords16 u16 y; }; +struct Coords32 +{ + s32 x; + s32 y; +}; + +struct UCoords32 +{ + u32 x; + u32 y; +}; + struct Time { /*0x00*/ s16 days; diff --git a/include/overworld.h b/include/overworld.h index 77cacff94..0abbeee4b 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -18,11 +18,6 @@ struct LinkPlayerMapObject u8 mode; }; -struct UCoords32 -{ - u32 x, y; -}; - struct CreditsOverworldCmd { s16 unk_0; diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index cd8c798f9..60da74bcb 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -16,5 +16,6 @@ u16 sub_8096FD4(u16); u8 sub_8096ECC(u16, void (*)(struct Sprite *), s16, s16, u8, bool32); void sub_8097070(struct Sprite *); u16 GetUnownLetterByPersonality(u32 personality); +u8 UpdateMonIconFrame(struct Sprite *sprite); #endif // GUARD_POKEMON_ICON_H diff --git a/include/rom6.h b/include/rom6.h deleted file mode 100644 index 753c07305..000000000 --- a/include/rom6.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef GUARD_ROM6_H -#define GUARD_ROM6_H - -#include "global.h" - -void sub_81357FC(u8, void(void)); -u8 GetLeadMonIndex(void); -u8 GetSSTidalLocation(u8 *grp, u8 *num, s16 *x, s16 *y); -void sub_813BADC(bool8); -bool8 sub_813B9C0(void); -void UpdateMirageRnd(u16 days); -void UpdateBirchState(u16 days); -void UpdateFrontierManiac(u16 days); -void UpdateFrontierGambler(u16 days); -void SetShoalItemFlag(u16 days); - -#endif //GUARD_ROM6_H diff --git a/include/sprite.h b/include/sprite.h index 27e5dc852..04c992dae 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -251,6 +251,7 @@ extern s16 gSpriteCoordOffsetX; extern s16 gSpriteCoordOffsetY; extern const struct SpriteTemplate gDummySpriteTemplate; extern struct Sprite gSprites[]; +extern struct OamMatrix gOamMatrices[]; void ResetSpriteData(void); void AnimateSprites(void); diff --git a/ld_script.txt b/ld_script.txt index 7c5625ab0..6202e5ace 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -111,7 +111,7 @@ SECTIONS { src/palette.o(.text); src/sound.o(.text); asm/battle_anim.o(.text); - asm/battle_anim_mons.o(.text); + src/battle_anim_mons.o(.text); src/task.o(.text); src/reshow_battle_screen.o(.text); asm/battle_anim_status_effects.o(.text); @@ -412,6 +412,7 @@ SECTIONS { src/palette.o(.rodata); src/sound.o(.rodata); data/battle_anim.o(.rodata); + src/battle_anim_mons.o(.rodata); data/map_events.o(.rodata); data/battle_anim_status_effects.o(.rodata); src/title_screen.o(.rodata); diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index e642f0dbd..21d07246f 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -844,7 +844,7 @@ static void sub_8099B54(u8 taskId) gTasks[taskId].data[3] += gTasks[taskId].data[4]; SetSpriteRotScale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]); if (gTasks[taskId].data[7]) - sub_80759DC(gTasks[taskId].data[5]); + SetBattlerSpriteYOffsetFromRotation(gTasks[taskId].data[5]); if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2]) { switch (gTasks[taskId].data[6]) diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c new file mode 100644 index 000000000..ed9c9bc2b --- /dev/null +++ b/src/battle_anim_mons.c @@ -0,0 +1,2253 @@ +#include "global.h" +#include "battle_anim.h" +#include "bg.h" +#include "data.h" +#include "decompress.h" +#include "dma3.h" +#include "gpu_regs.h" +#include "malloc.h" +#include "palette.h" +#include "pokemon_icon.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "util.h" +#include "constants/battle_anim.h" +#include "constants/species.h" + +#define GET_UNOWN_LETTER(personality) (( \ + (((personality & 0x03000000) >> 24) << 6) \ + | (((personality & 0x00030000) >> 16) << 4) \ + | (((personality & 0x00000300) >> 8) << 2) \ + | (((personality & 0x00000003) >> 0) << 0) \ +) % 28) + +#define IS_DOUBLE_BATTLE() (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + +static u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3); +static void sub_8075658(struct Sprite *sprite); +static void sub_80757E8(struct Sprite *sprite); +static bool8 sub_80758DC(void); +static void sub_8075EF0(struct Sprite *sprite); +static void sub_80760D0(u8 taskId); +static void AnimTask_BlendMonInAndOutSetup(struct Task *task); +static void AnimTask_BlendMonInAndOutStep(u8 taskId); +static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId); +static void sub_8077118(u8 taskId); +static void sub_80771E4(struct Task *task, u8 taskId); +static void sub_8077268(struct Sprite *sprite); +static void sub_80772F4(struct Sprite *sprite); + +static EWRAM_DATA union AffineAnimCmd *sAnimTaskAffineAnim = NULL; +static EWRAM_DATA u32 gUnknown_2037F2C = 0; // not used + +static const struct UCoords8 sBattlerCoords[][4] = +{ + { + { 72, 80 }, + { 176, 40 }, + { 48, 40 }, + { 112, 80 }, + }, + { + { 32, 80 }, + { 200, 40 }, + { 90, 88 }, + { 152, 32 }, + }, +}; + +// One entry for each of the four Castform forms. +const struct MonCoords gCastformFrontSpriteCoords[] = +{ + { .size = 0x44, .y_offset = 17 }, // NORMAL + { .size = 0x66, .y_offset = 9 }, // SUN + { .size = 0x46, .y_offset = 9 }, // RAIN + { .size = 0x86, .y_offset = 8 }, // HAIL +}; + +static const u8 sCastformElevations[] = +{ + 13, // NORMAL + 14, // SUN + 13, // RAIN + 13, // HAIL +}; + +// Y position of the backsprite for each of the four Castform forms. +static const u8 sCastformBackSpriteYCoords[] = +{ + 0, // NORMAL + 0, // SUN + 0, // RAIN + 0, // HAIL +}; + +static const struct SpriteTemplate gUnknown_83AE054[] = +{ + { + .tileTag = 0xD755, + .paletteTag = 0xD755, + .oam = &gOamData_83ACA40, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 0xD756, + .paletteTag = 0xD756, + .oam = &gOamData_83ACA40, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + } +}; + +static const struct SpriteSheet gUnknown_83AE084[] = +{ + { gMiscBlank_Gfx, 0x800, 0xD755 }, + { gMiscBlank_Gfx, 0x800, 0xD756 }, +}; + +u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType) +{ + u8 retVal; + u16 species; + struct BattleSpriteInfo *spriteInfo; + + switch (coordType) + { + case BATTLER_COORD_X: + case BATTLER_COORD_X_2: + retVal = sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].x; + break; + case BATTLER_COORD_Y: + retVal = sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].y; + break; + case BATTLER_COORD_Y_PIC_OFFSET: + case BATTLER_COORD_Y_PIC_OFFSET_DEFAULT: + default: + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + } + else + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + } + if (coordType == BATTLER_COORD_Y_PIC_OFFSET) + retVal = GetBattlerSpriteFinal_Y(battlerId, species, TRUE); + else + retVal = GetBattlerSpriteFinal_Y(battlerId, species, FALSE); + break; + } + return retVal; +} + +static u8 GetBattlerYDelta(u8 battlerId, u16 species) +{ + u16 letter; + u32 personality; + struct BattleSpriteInfo *spriteInfo; + u8 ret; + u16 coordSpecies; + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + { + if (species == SPECIES_UNOWN) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); + else + personality = gTransformedPersonalities[battlerId]; + letter = GET_UNOWN_LETTER(personality); + if (!letter) + coordSpecies = species; + else + coordSpecies = letter + SPECIES_UNOWN_B - 1; + ret = gMonBackPicCoords[coordSpecies].y_offset; + } + else if (species == SPECIES_CASTFORM) + { + ret = sCastformBackSpriteYCoords[gBattleMonForms[battlerId]]; + } + else if (species > NUM_SPECIES) + { + ret = gMonBackPicCoords[0].y_offset; + } + else + { + ret = gMonBackPicCoords[species].y_offset; + } + } + else + { + if (species == SPECIES_UNOWN) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); + else + personality = gTransformedPersonalities[battlerId]; + letter = GET_UNOWN_LETTER(personality); + if (!letter) + coordSpecies = species; + else + coordSpecies = letter + SPECIES_UNOWN_B - 1; + ret = gMonFrontPicCoords[coordSpecies].y_offset; + } + else if (species == SPECIES_CASTFORM) + { + ret = gCastformFrontSpriteCoords[gBattleMonForms[battlerId]].y_offset; + } + else if (species > NUM_SPECIES) + { + ret = gMonFrontPicCoords[0].y_offset; + } + else + { + ret = gMonFrontPicCoords[species].y_offset; + } + } + return ret; +} + +static u8 GetBattlerElevation(u8 battlerId, u16 species) +{ + u8 ret = 0; + + if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) + { + if (species == SPECIES_CASTFORM) + ret = sCastformElevations[gBattleMonForms[battlerId]]; + else if (species > NUM_SPECIES) + ret = gEnemyMonElevation[0]; + else + ret = gEnemyMonElevation[species]; + } + return ret; +} + +static u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3) +{ + u16 offset; + u8 y; + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + { + offset = GetBattlerYDelta(battlerId, species); + } + else + { + offset = GetBattlerYDelta(battlerId, species); + offset -= GetBattlerElevation(battlerId, species); + } + y = offset + sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].y; + if (a3) + { + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + y += 8; + if (y > 104) + y = 104; + } + return y; +} + +u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType) +{ + u16 species; + struct BattleSpriteInfo *spriteInfo; + + if (coordType == BATTLER_COORD_Y_PIC_OFFSET || coordType == BATTLER_COORD_Y_PIC_OFFSET_DEFAULT) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = gAnimBattlerSpecies[battlerId]; + else + species = spriteInfo[battlerId].transformSpecies; + if (coordType == BATTLER_COORD_Y_PIC_OFFSET) + return GetBattlerSpriteFinal_Y(battlerId, species, TRUE); + else + return GetBattlerSpriteFinal_Y(battlerId, species, FALSE); + } + else + { + return GetBattlerSpriteCoord(battlerId, coordType); + } +} + +u8 GetBattlerSpriteDefault_Y(u8 battlerId) +{ + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET_DEFAULT); +} + +u8 GetSubstituteSpriteDefault_Y(u8 battlerId) +{ + u16 y; + + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 16; + else + y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 17; + return y; +} + +u8 GetGhostSpriteDefault_Y(u8 battlerId) +{ + if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT) + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET_DEFAULT); + else + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y); +} + +u8 GetBattlerYCoordWithElevation(u8 battlerId) +{ + u16 species; + u8 y; + struct BattleSpriteInfo *spriteInfo; + + y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y); + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + } + else + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + } + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + y -= GetBattlerElevation(battlerId, species); + return y; +} + +u8 GetAnimBattlerSpriteId(u8 animBattler) +{ + u8 *sprites; + + if (animBattler == ANIM_ATTACKER) + { + if (IsBattlerSpritePresent(gBattleAnimAttacker)) + { + sprites = gBattlerSpriteIds; + return sprites[gBattleAnimAttacker]; + } + else + { + return 0xFF; + } + } + else if (animBattler == ANIM_TARGET) + { + if (IsBattlerSpritePresent(gBattleAnimTarget)) + { + sprites = gBattlerSpriteIds; + return sprites[gBattleAnimTarget]; + } + else + { + return 0xFF; + } + } + else if (animBattler == ANIM_ATK_PARTNER) + { + if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + return 0xFF; + else + return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]; + } + else + { + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) + return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]; + else + return 0xFF; + } +} + +void StoreSpriteCallbackInData6(struct Sprite *sprite, SpriteCallback callback) +{ + sprite->data[6] = (u32)(callback) & 0xFFFF; + sprite->data[7] = (u32)(callback) >> 16; +} + +static void SetCallbackToStoredInData6(struct Sprite *sprite) +{ + u32 callback = (u16)sprite->data[6] | (sprite->data[7] << 16); + + sprite->callback = (SpriteCallback)callback; +} + +void TranslateSpriteInCircleOverDuration(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], sprite->data[1]); + sprite->data[0] += sprite->data[2]; + if (sprite->data[0] >= 0x100) + sprite->data[0] -= 0x100; + else if (sprite->data[0] < 0) + sprite->data[0] += 0x100; + --sprite->data[3]; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + sprite->pos2.x = Sin(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); + sprite->data[0] += sprite->data[2]; + sprite->data[5] += sprite->data[4]; + if (sprite->data[0] >= 0x100) + sprite->data[0] -= 0x100; + else if (sprite->data[0] < 0) + sprite->data[0] += 0x100; + --sprite->data[3]; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +// not used +static void sub_8074B5C(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[4], sprite->data[1]); + sprite->data[0] += sprite->data[2]; + sprite->data[4] += sprite->data[5]; + if (sprite->data[0] >= 0x100) + sprite->data[0] -= 0x100; + else if (sprite->data[0] < 0) + sprite->data[0] += 0x100; + if (sprite->data[4] >= 0x100) + sprite->data[4] -= 0x100; + else if (sprite->data[4] < 0) + sprite->data[4] += 0x100; + --sprite->data[3]; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], sprite->data[4]); + sprite->data[0] += sprite->data[2]; + if (sprite->data[0] >= 0x100) + sprite->data[0] -= 0x100; + else if (sprite->data[0] < 0) + sprite->data[0] += 0x100; + --sprite->data[3]; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +// Simply waits until the sprite's data[0] hits zero. +// This is used to let sprite anims or affine anims to run for a designated +// duration. +void WaitAnimForDuration(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + --sprite->data[0]; + else + SetCallbackToStoredInData6(sprite); +} + +static void sub_8074C64(struct Sprite *sprite) +{ + sub_8074C80(sprite); + sprite->callback = TranslateSpriteLinear; + sprite->callback(sprite); +} + +void sub_8074C80(struct Sprite *sprite) +{ + s16 old; + s32 xDiff; + + if (sprite->data[1] > sprite->data[2]) + sprite->data[0] = -sprite->data[0]; + xDiff = sprite->data[2] - sprite->data[1]; + old = sprite->data[0]; + sprite->data[0] = abs(xDiff / sprite->data[0]); + sprite->data[2] = (sprite->data[4] - sprite->data[3]) / sprite->data[0]; + sprite->data[1] = old; +} + +void TranslateSpriteLinear(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + --sprite->data[0]; + sprite->pos2.x += sprite->data[1]; + sprite->pos2.y += sprite->data[2]; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void TranslateSpriteLinearFixedPoint(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + --sprite->data[0]; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +static void TranslateSpriteLinearFixedPointIconFrame(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + --sprite->data[0]; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + } + else + { + SetCallbackToStoredInData6(sprite); + } + + UpdateMonIconFrame(sprite); +} + +// not used +static void sub_8074D80(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x + sprite->pos2.x; + sprite->data[3] = sprite->pos1.y + sprite->pos2.y; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = sub_8074C64; +} + +void TranslateMonSpriteLinear(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + --sprite->data[0]; + gSprites[sprite->data[3]].pos2.x += sprite->data[1]; + gSprites[sprite->data[3]].pos2.y += sprite->data[2]; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void TranslateMonSpriteLinearFixedPoint(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + --sprite->data[0]; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + gSprites[sprite->data[5]].pos2.x = sprite->data[3] >> 8; + gSprites[sprite->data[5]].pos2.y = sprite->data[4] >> 8; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void TranslateSpriteLinearAndFlicker(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + --sprite->data[0]; + sprite->pos2.x = sprite->data[2] >> 8; + sprite->data[2] += sprite->data[1]; + sprite->pos2.y = sprite->data[4] >> 8; + sprite->data[4] += sprite->data[3]; + if (sprite->data[0] % sprite->data[5] == 0) + { + if (sprite->data[5]) + sprite->invisible ^= 1; + } + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void DestroySpriteAndMatrix(struct Sprite *sprite) +{ + FreeSpriteOamMatrix(sprite); + DestroyAnimSprite(sprite); +} + +// not used +static void sub_8074EF4(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x + sprite->pos2.x; + sprite->data[3] = sprite->pos1.y + sprite->pos2.y; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = sub_8074C64; +} + +// not used +static void sub_8074F38(struct Sprite *sprite) +{ + ResetPaletteStructByUid(sprite->data[5]); + DestroySpriteAndMatrix(sprite); +} + +void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + SetCallbackToStoredInData6(sprite); +} + +void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite) +{ + if (sprite->animEnded) + SetCallbackToStoredInData6(sprite); +} + +void DestroyAnimSpriteAndDisableBlend(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimSprite(sprite); +} + +void DestroyAnimVisualTaskAndDisableBlend(u8 taskId) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimVisualTask(taskId); +} + +void SetSpriteCoordsToAnimAttackerCoords(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); +} + +// Sets the initial x offset of the anim sprite depending on the horizontal orientation +// of the two involved mons. +void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 xOffset) +{ + u16 attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + u16 targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + + if (attackerX > targetX) + { + sprite->pos1.x -= xOffset; + } + else if (attackerX < targetX) + { + sprite->pos1.x += xOffset; + } + else + { + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= xOffset; + else + sprite->pos1.x += xOffset; + } +} + +void InitAnimArcTranslation(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitAnimLinearTranslation(sprite); + sprite->data[6] = 0x8000 / sprite->data[0]; + sprite->data[7] = 0; +} + +bool8 TranslateAnimHorizontalArc(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + return TRUE; + sprite->data[7] += sprite->data[6]; + sprite->pos2.y += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]); + return FALSE; +} + +bool8 TranslateAnimVerticalArc(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + return TRUE; + sprite->data[7] += sprite->data[6]; + sprite->pos2.x += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]); + return FALSE; +} + +void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite) +{ + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; +} + +void InitSpritePosToAnimTarget(struct Sprite *sprite, bool8 respectMonPicOffsets) +{ + // Battle anim sprites are automatically created at the anim target's center, which + // is why there is no else clause for the "respectMonPicOffsets" check. + if (!respectMonPicOffsets) + { + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X); + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y); + } + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffsets) +{ + if (!respectMonPicOffsets) + { + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + } + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +u8 GetBattlerSide(u8 battlerId) +{ + return GET_BATTLER_SIDE2(battlerId); +} + +u8 GetBattlerPosition(u8 battlerId) +{ + return GET_BATTLER_POSITION(battlerId); +} + +u8 GetBattlerAtPosition(u8 position) +{ + u8 i; + + for (i = 0; i < gBattlersCount; ++i) + if (gBattlerPositions[i] == position) + break; + return i; +} + +bool8 IsBattlerSpritePresent(u8 battlerId) +{ + if (gBattlerPositions[battlerId] == 0xFF) + { + return FALSE; + } + else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0) + return TRUE; + } + else + { + if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0) + return TRUE; + } + return FALSE; +} + +bool8 IsDoubleBattle(void) +{ + return IS_DOUBLE_BATTLE(); +} + +void sub_80752A0(struct BattleAnimBgData *animBgData) +{ + animBgData->bgTiles = gUnknown_2022BB8; + animBgData->bgTilemap = (u16 *)gUnknown_2022BBC; + animBgData->paletteId = 8; + animBgData->bgId = 1; + animBgData->tilesOffset = 0x200; + animBgData->unused = 0; +} + +void sub_80752C8(struct BattleAnimBgData *animBgData, u32 arg1) +{ + if (arg1 == 1) + { + sub_80752A0(animBgData); + } + else + { + animBgData->bgTiles = gUnknown_2022BB8; + animBgData->bgTilemap = (u16 *)gUnknown_2022BBC; + animBgData->paletteId = 9; + animBgData->bgId = 2; + animBgData->tilesOffset = 0x300; + animBgData->unused = 0; + } +} + +void sub_8075300(struct BattleAnimBgData *animBgData, u8 unused) +{ + animBgData->bgTiles = gUnknown_2022BB8; + animBgData->bgTilemap = (u16 *)gUnknown_2022BBC; + if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) + { + animBgData->paletteId = 8; + animBgData->bgId = 1; + animBgData->tilesOffset = 0x200; + animBgData->unused = 0; + } + else + { + animBgData->paletteId = 9; + animBgData->bgId = 2; + animBgData->tilesOffset = 0x300; + animBgData->unused = 0; + } +} + +void sub_8075358(u32 bgId) +{ + struct BattleAnimBgData animBgData; + + sub_80752C8(&animBgData, bgId); + CpuFill32(0, animBgData.bgTiles, 0x2000); + LoadBgTiles(bgId, animBgData.bgTiles, 0x2000, animBgData.tilesOffset); + FillBgTilemapBufferRect(bgId, 0, 0, 0, 32, 64, 17); + CopyBgTilemapBufferToVram(bgId); +} + +void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset) +{ + CpuFill32(0, gUnknown_2022BB8, 0x2000); + LZDecompressWram(src, gUnknown_2022BB8); + LoadBgTiles(bgId, gUnknown_2022BB8, 0x2000, tilesOffset); +} + +void InitAnimBgTilemapBuffer(u32 bgId, const void *src) +{ + FillBgTilemapBufferRect(bgId, 0, 0, 0, 32, 64, 17); + CopyToBgTilemapBuffer(bgId, src, 0, 0); +} + +void AnimLoadCompressedBgTilemap(u32 bgId, const u32 *src) +{ + InitAnimBgTilemapBuffer(bgId, src); + CopyBgTilemapBufferToVram(bgId); +} + +u8 sub_8075454(void) +{ + return 2; +} + +void sub_8075458(bool8 arg0) +{ + if (!arg0) + { + SetAnimBgAttribute(3, BG_ANIM_SCREEN_SIZE, 0); + SetAnimBgAttribute(3, BG_ANIM_AREA_OVERFLOW_MODE, 1); + } + else + { + SetAnimBgAttribute(3, BG_ANIM_SCREEN_SIZE, 1); + SetAnimBgAttribute(3, BG_ANIM_AREA_OVERFLOW_MODE, 0); + } +} + +void sub_8075490(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitSpriteDataForLinearTranslation(sprite); + sprite->callback = TranslateSpriteLinearFixedPointIconFrame; + sprite->callback(sprite); +} + +void InitSpriteDataForLinearTranslation(struct Sprite *sprite) +{ + s16 x = (sprite->data[2] - sprite->data[1]) << 8; + s16 y = (sprite->data[4] - sprite->data[3]) << 8; + + sprite->data[1] = x / sprite->data[0]; + sprite->data[2] = y / sprite->data[0]; + sprite->data[4] = 0; + sprite->data[3] = 0; +} + +void InitAnimLinearTranslation(struct Sprite *sprite) +{ + s32 x = sprite->data[2] - sprite->data[1]; + s32 y = sprite->data[4] - sprite->data[3]; + bool8 movingLeft = x < 0; + bool8 movingUp = y < 0; + u16 xDelta = abs(x) << 8; + u16 yDelta = abs(y) << 8; + + xDelta = xDelta / sprite->data[0]; + yDelta = yDelta / sprite->data[0]; + + if (movingLeft) + xDelta |= 1; + else + xDelta &= ~1; + + if (movingUp) + yDelta |= 1; + else + yDelta &= ~1; + + sprite->data[1] = xDelta; + sprite->data[2] = yDelta; + sprite->data[4] = 0; + sprite->data[3] = 0; +} + +void StartAnimLinearTranslation(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitAnimLinearTranslation(sprite); + sprite->callback = sub_807563C; + sprite->callback(sprite); +} + +void sub_80755B8(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitAnimLinearTranslation(sprite); + sprite->callback = sub_8075658; + sprite->callback(sprite); +} + +bool8 AnimTranslateLinear(struct Sprite *sprite) +{ + u16 v1, v2, x, y; + + if (!sprite->data[0]) + return TRUE; + v1 = sprite->data[1]; + v2 = sprite->data[2]; + x = sprite->data[3]; + y = sprite->data[4]; + x += v1; + y += v2; + if (v1 & 1) + sprite->pos2.x = -(x >> 8); + else + sprite->pos2.x = x >> 8; + + if (v2 & 1) + sprite->pos2.y = -(y >> 8); + else + sprite->pos2.y = y >> 8; + sprite->data[3] = x; + sprite->data[4] = y; + --sprite->data[0]; + return FALSE; +} + +void sub_807563C(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + SetCallbackToStoredInData6(sprite); +} + +static void sub_8075658(struct Sprite *sprite) +{ + sub_801236C(sprite); + if (AnimTranslateLinear(sprite)) + SetCallbackToStoredInData6(sprite); +} + +void sub_8075678(struct Sprite *sprite) +{ + s32 v1 = abs(sprite->data[2] - sprite->data[1]) << 8; + + sprite->data[0] = v1 / sprite->data[0]; + InitAnimLinearTranslation(sprite); +} + +void sub_80756A4(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sub_8075678(sprite); + sprite->callback = sub_807563C; + sprite->callback(sprite); +} + +static void InitAnimFastLinearTranslation(struct Sprite *sprite) +{ + s32 xDiff = sprite->data[2] - sprite->data[1]; + s32 yDiff = sprite->data[4] - sprite->data[3]; + bool8 xSign = xDiff < 0; + bool8 ySign = yDiff < 0; + u16 x2 = abs(xDiff) << 4; + u16 y2 = abs(yDiff) << 4; + + x2 /= sprite->data[0]; + y2 /= sprite->data[0]; + if (xSign) + x2 |= 1; + else + x2 &= ~1; + if (ySign) + y2 |= 1; + else + y2 &= ~1; + sprite->data[1] = x2; + sprite->data[2] = y2; + sprite->data[4] = 0; + sprite->data[3] = 0; +} + +void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitAnimFastLinearTranslation(sprite); + sprite->callback = sub_80757E8; + sprite->callback(sprite); +} + +bool8 AnimFastTranslateLinear(struct Sprite *sprite) +{ + u16 v1, v2, x, y; + + if (!sprite->data[0]) + return TRUE; + v1 = sprite->data[1]; + v2 = sprite->data[2]; + x = sprite->data[3]; + y = sprite->data[4]; + x += v1; + y += v2; + if (v1 & 1) + sprite->pos2.x = -(x >> 4); + else + sprite->pos2.x = x >> 4; + if (v2 & 1) + sprite->pos2.y = -(y >> 4); + else + sprite->pos2.y = y >> 4; + sprite->data[3] = x; + sprite->data[4] = y; + --sprite->data[0]; + return FALSE; +} + +static void sub_80757E8(struct Sprite *sprite) +{ + if (AnimFastTranslateLinear(sprite)) + SetCallbackToStoredInData6(sprite); +} + +void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite) +{ + s32 xDiff = abs(sprite->data[2] - sprite->data[1]) << 4; + + sprite->data[0] = xDiff / sprite->data[0]; + InitAnimFastLinearTranslation(sprite); +} + +void sub_8075830(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitAnimFastLinearTranslationWithSpeed(sprite); + sprite->callback = sub_80757E8; + sprite->callback(sprite); +} + +void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation) +{ + s32 i; + struct ObjAffineSrcData src; + struct OamMatrix matrix; + + src.xScale = xScale; + src.yScale = yScale; + src.rotation = rotation; + if (sub_80758DC()) + src.xScale = -src.xScale; + i = gSprites[spriteId].oam.matrixNum; + ObjAffineSet(&src, &matrix, 1, 2); + gOamMatrices[i].a = matrix.a; + gOamMatrices[i].b = matrix.b; + gOamMatrices[i].c = matrix.c; + gOamMatrices[i].d = matrix.d; +} + +static bool8 sub_80758DC(void) +{ + return FALSE; +} + +void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode) +{ + u8 battlerId = gSprites[spriteId].data[0]; + + if (IsBattlerSpriteVisible(battlerId)) + gSprites[spriteId].invisible = FALSE; + gSprites[spriteId].oam.objMode = objMode; + gSprites[spriteId].affineAnimPaused = TRUE; + if (!gSprites[spriteId].oam.affineMode) + gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battlerId].matrixNum; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); +} + +void ResetSpriteRotScale(u8 spriteId) +{ + SetSpriteRotScale(spriteId, 0x100, 0x100, 0); + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.objMode = 0; + gSprites[spriteId].affineAnimPaused = FALSE; + CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); +} + +// Sets the sprite's y offset equal to the y displacement caused by the +// matrix's rotation. +void SetBattlerSpriteYOffsetFromRotation(u8 spriteId) +{ + u16 matrixNum = gSprites[spriteId].oam.matrixNum; + // The "c" component of the battler sprite matrix contains the sine of the rotation angle divided by some scale amount. + s16 c = gOamMatrices[matrixNum].c; + + if (c < 0) + c = -c; + gSprites[spriteId].pos2.y = c >> 3; +} + +void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 xScale, s16 yScale, u16 rotation) +{ + s32 i; + struct ObjAffineSrcData src; + struct OamMatrix matrix; + + if (sprite->oam.affineMode & 1) + { + sprite->affineAnimPaused = TRUE; + if (recalcCenterVector) + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); + src.xScale = xScale; + src.yScale = yScale; + src.rotation = rotation; + if (sub_80758DC()) + src.xScale = -src.xScale; + i = sprite->oam.matrixNum; + ObjAffineSet(&src, &matrix, 1, 2); + gOamMatrices[i].a = matrix.a; + gOamMatrices[i].b = matrix.b; + gOamMatrices[i].c = matrix.c; + gOamMatrices[i].d = matrix.d; + } +} + +void sub_8075AD8(struct Sprite *sprite) +{ + TrySetSpriteRotScale(sprite, TRUE, 0x100, 0x100, 0); + sprite->affineAnimPaused = FALSE; + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); +} + +static u16 ArcTan2_(s16 a, s16 b) +{ + return ArcTan2(a, b); +} + +u16 ArcTan2Neg(s16 a, s16 b) +{ + u16 var = ArcTan2_(a, b); + return -var; +} + +void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) +{ + s32 i; + struct PlttData *originalColor; + struct PlttData *destColor; + u16 average; + + paletteNum *= 16; + + if (!restoreOriginalColor) + { + for (i = 0; i < 16; ++i) + { + originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteNum + i]; + average = originalColor->r + originalColor->g + originalColor->b; + average /= 3; + destColor = (struct PlttData *)&gPlttBufferFaded[paletteNum + i]; + destColor->r = average; + destColor->g = average; + destColor->b = average; + } + } + else + { + CpuCopy32(&gPlttBufferUnfaded[paletteNum], &gPlttBufferFaded[paletteNum], 32); + } +} + +u32 sub_8075BE8(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7) +{ + u32 selectedPalettes = 0; + u32 shift; + + if (battleBackground) + { + selectedPalettes = 0xe; + } + if (attacker) + { + shift = gBattleAnimAttacker + 16; + selectedPalettes |= 1 << shift; + } + if (target) + { + shift = gBattleAnimTarget + 16; + selectedPalettes |= 1 << shift; + } + if (attackerPartner) + { + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + { + shift = BATTLE_PARTNER(gBattleAnimAttacker) + 16; + selectedPalettes |= 1 << shift; + } + } + if (targetPartner) + { + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) + { + shift = BATTLE_PARTNER(gBattleAnimTarget) + 16; + selectedPalettes |= 1 << shift; + } + } + if (a6) + { + selectedPalettes |= 0x100; + } + if (a7) + { + selectedPalettes |= 0x200; + } + return selectedPalettes; +} + +u32 sub_8075CB8(u8 a1, u8 a2, u8 a3, u8 a4) +{ + u32 var = 0; + u32 shift; + + if (a1) + { + if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) + { + var |= 1 << (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) + 16); + } + } + if (a2) + { + if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))) + { + shift = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT) + 16; + var |= 1 << shift; + } + } + if (a3) + { + if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))) + { + shift = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT) + 16; + var |= 1 << shift; + } + } + if (a4) + { + if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))) + { + shift = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT) + 16; + var |= 1 << shift; + } + } + return var; +} + +u8 sub_8075D80(u8 a1) +{ + return a1; +} + +// not used +static u8 GetBattlerAtPosition_(u8 position) +{ + return GetBattlerAtPosition(position); +} + +void sub_8075D9C(struct Sprite *sprite) +{ + bool8 var; + + if (!sprite->data[0]) + { + if (!gBattleAnimArgs[3]) + var = TRUE; + else + var = FALSE; + if (!gBattleAnimArgs[2]) + InitSpritePosToAnimAttacker(sprite, var); + else + InitSpritePosToAnimTarget(sprite, var); + ++sprite->data[0]; + + } + else if (sprite->animEnded || sprite->affineAnimEnded) + { + DestroySpriteAndMatrix(sprite); + } +} + +// Linearly translates a sprite to a target position on the +// other mon's sprite. +// arg 0: initial x offset +// arg 1: initial y offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: duration +// arg 5: lower 8 bits = location on attacking mon, upper 8 bits = location on target mon pick to target +void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) +{ + bool8 v1; + u8 coordType; + + if (!(gBattleAnimArgs[5] & 0xFF00)) + v1 = TRUE; + else + v1 = FALSE; + if (!(gBattleAnimArgs[5] & 0xFF)) + coordType = BATTLER_COORD_Y_PIC_OFFSET; + else + coordType = BATTLER_COORD_Y; + InitSpritePosToAnimAttacker(sprite, v1); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void sub_8075E80(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, 1); + if (GetBattlerSide(gBattleAnimAttacker)) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + InitAnimArcTranslation(sprite); + sprite->callback = sub_8075EF0; +} + +static void sub_8075EF0(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + DestroyAnimSprite(sprite); +} + +void sub_8075F0C(struct Sprite *sprite) +{ + bool8 r4; + u8 battlerId, coordType; + + if (!gBattleAnimArgs[6]) + { + r4 = TRUE; + coordType = BATTLER_COORD_Y_PIC_OFFSET; + } + else + { + r4 = FALSE; + coordType = BATTLER_COORD_Y; + } + if (!gBattleAnimArgs[5]) + { + InitSpritePosToAnimAttacker(sprite, r4); + battlerId = gBattleAnimAttacker; + } + else + { + InitSpritePosToAnimTarget(sprite, r4); + battlerId = gBattleAnimTarget; + } + if (GetBattlerSide(gBattleAnimAttacker)) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + InitSpritePosToAnimTarget(sprite, r4); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(battlerId, coordType) + gBattleAnimArgs[3]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +s16 CloneBattlerSpriteWithBlend(u8 animBattler) +{ + u16 i; + u8 spriteId = GetAnimBattlerSpriteId(animBattler); + + if (spriteId != 0xFF) + { + for (i = 0; i < MAX_SPRITES; ++i) + { + if (!gSprites[i].inUse) + { + gSprites[i] = gSprites[spriteId]; + gSprites[i].oam.objMode = ST_OAM_OBJ_BLEND; + gSprites[i].invisible = FALSE; + return i; + } + } + } + return -1; +} + +void obj_delete_but_dont_free_vram(struct Sprite *sprite) +{ + sprite->usingSheet = TRUE; + DestroySprite(sprite); +} + +void sub_8076048(u8 taskId) +{ + s16 v1 = 0, v2 = 0; + + if (gBattleAnimArgs[2] > gBattleAnimArgs[0]) + v2 = 1; + if (gBattleAnimArgs[2] < gBattleAnimArgs[0]) + v2 = -1; + if (gBattleAnimArgs[3] > gBattleAnimArgs[1]) + v1 = 1; + if (gBattleAnimArgs[3] < gBattleAnimArgs[1]) + v1 = -1; + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = gBattleAnimArgs[4]; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = gBattleAnimArgs[0]; + gTasks[taskId].data[4] = gBattleAnimArgs[1]; + gTasks[taskId].data[5] = v2; + gTasks[taskId].data[6] = v1; + gTasks[taskId].data[7] = gBattleAnimArgs[2]; + gTasks[taskId].data[8] = gBattleAnimArgs[3]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gBattleAnimArgs[0], gBattleAnimArgs[1])); + gTasks[taskId].func = sub_80760D0; +} + +static void sub_80760D0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (++task->data[0] > task->data[1]) + { + task->data[0] = 0; + if (++task->data[2] & 1) + { + if (task->data[3] != task->data[7]) + task->data[3] += task->data[5]; + } + else + { + if (task->data[4] != task->data[8]) + task->data[4] += task->data[6]; + } + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4])); + if (task->data[3] == task->data[7] && task->data[4] == task->data[8]) + { + DestroyAnimVisualTask(taskId); + return; + } + } +} + +// Linearly blends a mon's sprite colors with a target color with increasing +// strength, and then blends out to the original color. +// arg 0: anim bank +// arg 1: blend color +// arg 2: target blend coefficient +// arg 3: initial delay +// arg 4: number of times to blend in and out +void AnimTask_BlendMonInAndOut(u8 task) +{ + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + + if (spriteId == 0xFF) + { + DestroyAnimVisualTask(task); + return; + } + gTasks[task].data[0] = (gSprites[spriteId].oam.paletteNum * 0x10) + 0x101; + AnimTask_BlendMonInAndOutSetup(&gTasks[task]); +} + +static void AnimTask_BlendMonInAndOutSetup(struct Task *task) +{ + task->data[1] = gBattleAnimArgs[1]; + task->data[2] = 0; + task->data[3] = gBattleAnimArgs[2]; + task->data[4] = 0; + task->data[5] = gBattleAnimArgs[3]; + task->data[6] = 0; + task->data[7] = gBattleAnimArgs[4]; + task->func = AnimTask_BlendMonInAndOutStep; +} + +static void AnimTask_BlendMonInAndOutStep(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (++task->data[4] >= task->data[5]) + { + task->data[4] = 0; + if (!task->data[6]) + { + ++task->data[2]; + BlendPalette(task->data[0], 15, task->data[2], task->data[1]); + if (task->data[2] == task->data[3]) + task->data[6] = 1; + } + else + { + --task->data[2]; + BlendPalette(task->data[0], 15, task->data[2], task->data[1]); + if (!task->data[2]) + { + if (--task->data[7]) + { + task->data[4] = 0; + task->data[6] = 0; + } + else + { + DestroyAnimVisualTask(taskId); + return; + } + } + } + } +} + +void sub_8076288(u8 taskId) +{ + u8 palette = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); + + if (palette == 0xFF) + { + DestroyAnimVisualTask(taskId); + return; + } + gTasks[taskId].data[0] = (palette * 0x10) + 0x101; + AnimTask_BlendMonInAndOutSetup(&gTasks[taskId]); +} + +void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds) +{ + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 0; + task->data[15] = spriteId; + task->data[10] = 0x100; + task->data[11] = 0x100; + task->data[12] = 0; + StorePointerInVars(&task->data[13], &task->data[14], affineAnimCmds); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); +} + +bool8 RunAffineAnimFromTaskData(struct Task *task) +{ + sAnimTaskAffineAnim = LoadPointerFromVars(task->data[13], task->data[14]) + (task->data[7] << 3); + switch (sAnimTaskAffineAnim->type) + { + default: + if (!sAnimTaskAffineAnim->frame.duration) + { + task->data[10] = sAnimTaskAffineAnim->frame.xScale; + task->data[11] = sAnimTaskAffineAnim->frame.yScale; + task->data[12] = sAnimTaskAffineAnim->frame.rotation; + ++task->data[7]; + ++sAnimTaskAffineAnim; + } + task->data[10] += sAnimTaskAffineAnim->frame.xScale; + task->data[11] += sAnimTaskAffineAnim->frame.yScale; + task->data[12] += sAnimTaskAffineAnim->frame.rotation; + SetSpriteRotScale(task->data[15], task->data[10], task->data[11], task->data[12]); + SetBattlerSpriteYOffsetFromYScale(task->data[15]); + if (++task->data[8] >= sAnimTaskAffineAnim->frame.duration) + { + task->data[8] = 0; + ++task->data[7]; + } + break; + case AFFINEANIMCMDTYPE_JUMP: + task->data[7] = sAnimTaskAffineAnim->jump.target; + break; + case AFFINEANIMCMDTYPE_LOOP: + if (sAnimTaskAffineAnim->loop.count) + { + if (task->data[9]) + { + if (!--task->data[9]) + { + ++task->data[7]; + break; + } + } + else + { + task->data[9] = sAnimTaskAffineAnim->loop.count; + } + if (!task->data[7]) + { + break; + } + while (TRUE) + { + --task->data[7]; + --sAnimTaskAffineAnim; + if (sAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP) + { + ++task->data[7]; + return TRUE; + } + if (!task->data[7]) + return TRUE; + } + } + ++task->data[7]; + break; + case AFFINEANIMCMDTYPE_END: + gSprites[task->data[15]].pos2.y = 0; + ResetSpriteRotScale(task->data[15]); + return FALSE; + } + return TRUE; +} + +// Sets the sprite's y offset equal to the y displacement caused by the +// matrix's scale in the y dimension. +void SetBattlerSpriteYOffsetFromYScale(u8 spriteId) +{ + s32 var = 64 - GetBattlerYDeltaFromSpriteId(spriteId) * 2; + u16 matrix = gSprites[spriteId].oam.matrixNum; + s32 var2 = (var << 8) / gOamMatrices[matrix].d; + + if (var2 > 128) + var2 = 128; + gSprites[spriteId].pos2.y = (var - var2) / 2; +} + +// Sets the sprite's y offset equal to the y displacement caused by another sprite +// matrix's scale in the y dimension. +void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId) +{ + s32 var = 64 - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2; + u16 matrix = gSprites[spriteId].oam.matrixNum; + s32 var2 = (var << 8) / gOamMatrices[matrix].d; + + if (var2 > 128) + var2 = 128; + gSprites[spriteId].pos2.y = (var - var2) / 2; +} + +static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId) +{ + struct BattleSpriteInfo *spriteInfo; + u8 battlerId = gSprites[spriteId].data[0]; + u16 species; + u16 i; + + for (i = 0; i < MAX_BATTLERS_COUNT; ++i) + { + if (gBattlerSpriteIds[i] == spriteId) + { + if (GetBattlerSide(i) == B_SIDE_PLAYER) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + return gMonBackPicCoords[species].y_offset; + } + else + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + return gMonFrontPicCoords[species].y_offset; + } + } + } + return 64; +} + +void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr) +{ + *lo = ((intptr_t)ptr) & 0xffff; + *hi = (((intptr_t)ptr) >> 16) & 0xffff; +} + +void *LoadPointerFromVars(s16 lo, s16 hi) +{ + return (void *)((u16)lo | ((u16)hi << 16)); +} + +void sub_80765D4(struct Task *task, u8 spriteId, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7) +{ + task->data[8] = a7; + task->data[15] = spriteId; + task->data[9] = a3; + task->data[10] = a4; + task->data[13] = a5; + task->data[14] = a6; + task->data[11] = (a5 - a3) / a7; + task->data[12] = (a6 - a4) / a7; +} + +u8 sub_8076640(struct Task *task) +{ + if (!task->data[8]) + return 0; + if (--task->data[8] != 0) + { + task->data[9] += task->data[11]; + task->data[10] += task->data[12]; + } + else + { + task->data[9] = task->data[13]; + task->data[10] = task->data[14]; + } + SetSpriteRotScale(task->data[15], task->data[9], task->data[10], 0); + if (task->data[8]) + SetBattlerSpriteYOffsetFromYScale(task->data[15]); + else + gSprites[task->data[15]].pos2.y = 0; + return task->data[8]; +} + +void AnimTask_GetFrustrationPowerLevel(u8 taskId) +{ + u16 powerLevel; + + if (gAnimFriendship <= 30) + powerLevel = 0; + else if (gAnimFriendship <= 100) + powerLevel = 1; + else if (gAnimFriendship <= 200) + powerLevel = 2; + else + powerLevel = 3; + gBattleAnimArgs[7] = powerLevel; + DestroyAnimVisualTask(taskId); +} + +// not used +static void sub_80766EC(u8 priority) +{ + if (IsBattlerSpriteVisible(gBattleAnimTarget)) + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].oam.priority = priority; + if (IsBattlerSpriteVisible(gBattleAnimAttacker)) + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].oam.priority = priority; + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) + gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]].oam.priority = priority; + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority = priority; +} + +void sub_80767F0(void) +{ + s32 i; + + for (i = 0; i < gBattlersCount; ++i) + { + if (IsBattlerSpriteVisible(i)) + { + gSprites[gBattlerSpriteIds[i]].subpriority = GetBattlerSpriteSubpriority(i); + gSprites[gBattlerSpriteIds[i]].oam.priority = 2; + } + } +} + +u8 GetBattlerSpriteSubpriority(u8 battlerId) +{ + u8 subpriority; + u8 position = GetBattlerPosition(battlerId); + + if (position == B_POSITION_PLAYER_LEFT) + subpriority = 30; + else if (position == B_POSITION_PLAYER_RIGHT) + subpriority = 20; + else if (position == B_POSITION_OPPONENT_LEFT) + subpriority = 40; + else + subpriority = 50; + return subpriority; +} + +u8 GetBattlerSpriteBGPriority(u8 battlerId) +{ + u8 position = GetBattlerPosition(battlerId); + + if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_OPPONENT_RIGHT) + return GetAnimBgAttribute(2, BG_ANIM_PRIORITY); + else + return GetAnimBgAttribute(1, BG_ANIM_PRIORITY); +} + +u8 GetBattlerSpriteBGPriorityRank(u8 battlerId) +{ + u8 position = GetBattlerPosition(battlerId); + + if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_OPPONENT_RIGHT) + return 2; + else + return 1; +} + +u8 sub_80768D0(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10) +{ + u8 spriteId; + u16 sheet = LoadSpriteSheet(&gUnknown_83AE084[a3]); + u16 palette = AllocSpritePalette(gUnknown_83AE054[a3].paletteTag); + + if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->field_17C == NULL) + gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); + if (!isBackpic) + { + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); + if (a10 == 1 || sub_804455C(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) + LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], + gMonSpritesGfxPtr->field_17C, + species, + personality, + TRUE); + else + LoadSpecialPokePic(&gMonFrontPicTable[species], + gMonSpritesGfxPtr->field_17C, + species, + personality, + TRUE); + } + else + { + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); + if (a10 == 1 || sub_804455C(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) + LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], + gMonSpritesGfxPtr->field_17C, + species, + personality, + FALSE); + else + LoadSpecialPokePic(&gMonBackPicTable[species], + gMonSpritesGfxPtr->field_17C, + species, + personality, + FALSE); + } + RequestDma3Copy(gMonSpritesGfxPtr->field_17C, (void *)(OBJ_VRAM0 + (sheet * 0x20)), 0x800, 1); + FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C); + if (!isBackpic) + spriteId = CreateSprite(&gUnknown_83AE054[a3], x, y + gMonFrontPicCoords[species].y_offset, subpriority); + else + spriteId = CreateSprite(&gUnknown_83AE054[a3], x, y + gMonBackPicCoords[species].y_offset, subpriority); + return spriteId; +} + +void DestroySpriteAndFreeResources_(struct Sprite *sprite) +{ + DestroySpriteAndFreeResources(sprite); +} + +s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr) +{ + u16 species; + u32 personality; + u16 letter; + u16 unownSpecies; + s32 ret; + const struct MonCoords *coords; + struct BattleSpriteInfo *spriteInfo; + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + { + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); + } + else + { + species = spriteInfo[battlerId].transformSpecies; + personality = gTransformedPersonalities[battlerId]; + } + if (species == SPECIES_UNOWN) + { + letter = GET_UNOWN_LETTER(personality); + if (!letter) + unownSpecies = SPECIES_UNOWN; + else + unownSpecies = letter + SPECIES_UNOWN_B - 1; + coords = &gMonBackPicCoords[unownSpecies]; + } + else if (species > NUM_SPECIES) + { + coords = &gMonBackPicCoords[0]; + } + else + { + coords = &gMonBackPicCoords[species]; + } + } + else + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + { + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); + } + else + { + species = spriteInfo[battlerId].transformSpecies; + personality = gTransformedPersonalities[battlerId]; + } + + if (species == SPECIES_UNOWN) + { + letter = GET_UNOWN_LETTER(personality); + if (!letter) + unownSpecies = SPECIES_UNOWN; + else + unownSpecies = letter + SPECIES_UNOWN_B - 1; + coords = &gMonFrontPicCoords[unownSpecies]; + } + else if (species == SPECIES_CASTFORM) + { + coords = &gCastformFrontSpriteCoords[gBattleMonForms[battlerId]]; + } + else if (species > NUM_SPECIES) + { + coords = &gMonFrontPicCoords[0]; + } + else + { + coords = &gMonFrontPicCoords[species]; + } + } + switch (attr) + { + case BATTLER_COORD_ATTR_HEIGHT: + return (coords->size & 0xf) * 8; + case BATTLER_COORD_ATTR_WIDTH: + return (coords->size >> 4) * 8; + case BATTLER_COORD_ATTR_LEFT: + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) - ((coords->size >> 4) * 4); + case BATTLER_COORD_ATTR_RIGHT: + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + ((coords->size >> 4) * 4); + case BATTLER_COORD_ATTR_TOP: + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) - ((coords->size & 0xf) * 4); + case BATTLER_COORD_ATTR_BOTTOM: + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) + ((coords->size & 0xf) * 4); + case BATTLER_COORD_ATTR_RAW_BOTTOM: + ret = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 31; + return ret - coords->y_offset; + default: + return 0; + } +} + +void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x, s16 *y) +{ + u8 xCoordType, yCoordType; + s16 battlerX, battlerY; + s16 partnerX, partnerY; + + if (!respectMonPicOffsets) + { + xCoordType = BATTLER_COORD_X; + yCoordType = BATTLER_COORD_Y; + } + else + { + xCoordType = BATTLER_COORD_X_2; + yCoordType = BATTLER_COORD_Y_PIC_OFFSET; + } + battlerX = GetBattlerSpriteCoord(battlerId, xCoordType); + battlerY = GetBattlerSpriteCoord(battlerId, yCoordType); + if (IsDoubleBattle()) + { + partnerX = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), xCoordType); + partnerY = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), yCoordType); + } + else + { + partnerX = battlerX; + partnerY = battlerY; + } + *x = (battlerX + partnerX) / 2; + *y = (battlerY + partnerY) / 2; +} + +u8 sub_8076E34(s32 battlerId, u8 spriteId, s32 species) +{ + u8 newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + + gSprites[newSpriteId] = gSprites[spriteId]; + gSprites[newSpriteId].usingSheet = TRUE; + gSprites[newSpriteId].oam.priority = 0; + gSprites[newSpriteId].oam.objMode = 2; + gSprites[newSpriteId].oam.tileNum = gSprites[spriteId].oam.tileNum; + gSprites[newSpriteId].callback = SpriteCallbackDummy; + return newSpriteId; +} + +void sub_8076ED8(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + if (GetBattlerSide(gBattleAnimAttacker)) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + sprite->hFlip = TRUE; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteLinearAndFlicker; +} + +void sub_8076F58(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] *= -1; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + StartSpriteAnim(sprite, gBattleAnimArgs[6]); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteLinearAndFlicker; +} + +void sub_8076FD0(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + if (GetBattlerSide(gBattleAnimAttacker)) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void sub_8077030(u8 taskId) +{ + u16 src; + u16 dest; + struct Task *task = &gTasks[taskId]; + + task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->data[1] = ((GetBattlerSide(gBattleAnimAttacker)) != B_SIDE_PLAYER) ? -8 : 8; + task->data[2] = 0; + task->data[3] = 0; + gSprites[task->data[0]].pos2.x -= task->data[0]; + task->data[4] = AllocSpritePalette(10097); + task->data[5] = 0; + dest = (task->data[4] + 0x10) * 0x10; + src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; + task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker); + if (task->data[6] == 20 || task->data[6] == 40) + task->data[6] = 2; + else + task->data[6] = 3; + CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20); + BlendPalette(dest, 16, gBattleAnimArgs[1], gBattleAnimArgs[0]); + task->func = sub_8077118; +} + +static void sub_8077118(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[2]) + { + case 0: + sub_80771E4(task, taskId); + gSprites[task->data[0]].pos2.x += task->data[1]; + if (++task->data[3] == 5) + { + --task->data[3]; + ++task->data[2]; + } + break; + case 1: + sub_80771E4(task, taskId); + gSprites[task->data[0]].pos2.x -= task->data[1]; + if (--task->data[3] == 0) + { + gSprites[task->data[0]].pos2.x = 0; + ++task->data[2]; + } + break; + case 2: + if (!task->data[5]) + { + FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); + DestroyAnimVisualTask(taskId); + } + break; + } +} + +static void sub_80771E4(struct Task *task, u8 taskId) +{ + s16 spriteId = CloneBattlerSpriteWithBlend(0); + if (spriteId >= 0) + { + gSprites[spriteId].oam.priority = task->data[6]; + gSprites[spriteId].oam.paletteNum = task->data[4]; + gSprites[spriteId].data[0] = 8; + gSprites[spriteId].data[1] = taskId; + gSprites[spriteId].data[2] = spriteId; + gSprites[spriteId].pos2.x = gSprites[task->data[0]].pos2.x; + gSprites[spriteId].callback = sub_8077268; + ++task->data[5]; + } +} + +static void sub_8077268(struct Sprite *sprite) +{ + if (--sprite->data[0] == 0) + { + --gTasks[sprite->data[1]].data[5]; + obj_delete_but_dont_free_vram(sprite); + } +} + +void sub_807729C(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + if (!GetBattlerSide(gBattleAnimAttacker)) + sprite->data[0] = 5; + else + sprite->data[0] = -10; + sprite->data[1] = -40; + sprite->callback = sub_80772F4; +} + +static void sub_80772F4(struct Sprite *sprite) +{ + sprite->data[2] += sprite->data[0]; + sprite->data[3] += sprite->data[1]; + sprite->pos2.x = sprite->data[2] / 10; + sprite->pos2.y = sprite->data[3] / 10; + if (sprite->data[1] < -20) + ++sprite->data[1]; + if (sprite->pos1.y + sprite->pos2.y < -32) + DestroyAnimSprite(sprite); +} + +void sub_8077350(struct Sprite *sprite) +{ + s32 x; + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[4]; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[5]; + if (!GetBattlerSide(gBattleAnimTarget)) + { + x = (u16)gBattleAnimArgs[4] + 30; + sprite->pos1.x += x; + sprite->pos1.y = gBattleAnimArgs[5] - 20; + } + else + { + x = (u16)gBattleAnimArgs[4] - 30; + sprite->pos1.x += x; + sprite->pos1.y = gBattleAnimArgs[5] - 80; + } + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 795458ab9..5708785c0 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -312,7 +312,7 @@ void sub_80BACEC(u8 taskId) spriteId = GetAnimBattlerSpriteId(0); newSpriteId = sub_8076E34(gBattleAnimAttacker, spriteId, species); sub_80752A0(&animBgData); - sub_807543C(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_tilemap); + AnimLoadCompressedBgTilemap(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_tilemap); if (IsContest()) sub_80730C0(animBgData.paletteId, animBgData.bgTilemap, 0, 0); AnimLoadCompressedBgGfx(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_sheet, animBgData.tilesOffset); @@ -434,9 +434,9 @@ static void sub_80BB2A0(u8 taskId) } sub_80752A0(&animBgData); if (sAnimStatsChangeData->data[0] == 0) - sub_807543C(animBgData.bgId, gBattleStatMask1_Tilemap); + AnimLoadCompressedBgTilemap(animBgData.bgId, gBattleStatMask1_Tilemap); else - sub_807543C(animBgData.bgId, gBattleStatMask2_Tilemap); + AnimLoadCompressedBgTilemap(animBgData.bgId, gBattleStatMask2_Tilemap); if (IsContest()) sub_80730C0(animBgData.paletteId, animBgData.bgTilemap, 0, 0); AnimLoadCompressedBgGfx(animBgData.bgId, gBattleStatMask_Gfx, animBgData.tilesOffset); @@ -736,7 +736,7 @@ void sub_80BBA20(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, if (arg4) newSpriteId = sub_8076E34(battler2, gBattlerSpriteIds[battler2], species); sub_80752A0(&animBgData); - sub_807543C(animBgData.bgId, tilemap); + AnimLoadCompressedBgTilemap(animBgData.bgId, tilemap); if (IsContest()) sub_80730C0(animBgData.paletteId, animBgData.bgTilemap, 0, 0); AnimLoadCompressedBgGfx(animBgData.bgId, gfx, animBgData.tilesOffset); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index b0cd92c2e..3ab5bc1c8 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1191,7 +1191,7 @@ static void sub_80303A8(u8 taskId) { s16 *data = gTasks[taskId].data; u8 battlerId = tExpTask_battler; - u16 v5 = sub_80768B0(battlerId); + u16 v5 = GetBattlerSpriteBGPriorityRank(battlerId); bool32 v6 = ((v5 ^ BIT_SIDE)) != B_SIDE_PLAYER; struct Sprite *sprite = &gSprites[gBattlerSpriteIds[battlerId]]; diff --git a/src/daycare.c b/src/daycare.c index c082b4298..45ca303ee 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -2087,7 +2087,7 @@ struct UnkStruct_82349CC u8 field_3; }; -extern const struct UnkStruct_82349CC gUnknown_82349CC[NUM_SPECIES]; +extern const struct UnkStruct_82349CC gMonFrontPicCoords[NUM_SPECIES]; static void SpriteCB_Egg_2(struct Sprite* sprite) { @@ -2101,7 +2101,7 @@ static void SpriteCB_Egg_2(struct Sprite* sprite) sprite->data[0] = 0; species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0; - gSprites[sEggHatchData->pokeSpriteID].pos2.y = gUnknown_82349CC[species].field_1; + gSprites[sEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].field_1; } else { diff --git a/sym_ewram.txt b/sym_ewram.txt index c503ab553..71b832e87 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -675,10 +675,7 @@ gAnimBattlerSpecies: @ 2037F1C gUnknown_2037F24: @ 2037F24 .space 0x4 -gUnknown_2037F28: @ 2037F28 - .space 0x8 - - .align 2 + .include "src/battle_anim_mons.o" .include "src/title_screen.o" .align 2 From 9f7bd7157d102801c58192c3359d5149244a3ec3 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 6 Oct 2019 02:09:03 +0800 Subject: [PATCH 05/25] ground --- asm/ground.s | 1787 ------------------------------- data/data_835B488.s | 7 +- include/battle_anim.h | 37 + ld_script.txt | 4 +- src/battle_anim_utility_funcs.c | 2 +- src/ground.c | 724 +++++++++++++ 6 files changed, 771 insertions(+), 1790 deletions(-) delete mode 100644 asm/ground.s create mode 100644 src/ground.c diff --git a/asm/ground.s b/asm/ground.s deleted file mode 100644 index eb655ccc8..000000000 --- a/asm/ground.s +++ /dev/null @@ -1,1787 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80B8B6C -sub_80B8B6C: @ 80B8B6C - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080B8BC4 @ =gBattleAnimAttacker - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - movs r0, 0x14 - strh r0, [r4, 0x2E] - ldr r5, _080B8BC8 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - ldr r0, _080B8BCC @ =0x0000ffd8 - strh r0, [r4, 0x38] - adds r0, r4, 0 - bl InitAnimArcTranslation - ldr r0, _080B8BD0 @ =sub_80B8BD4 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B8BC4: .4byte gBattleAnimAttacker -_080B8BC8: .4byte gBattleAnimTarget -_080B8BCC: .4byte 0x0000ffd8 -_080B8BD0: .4byte sub_80B8BD4 - thumb_func_end sub_80B8B6C - - thumb_func_start sub_80B8BD4 -sub_80B8BD4: @ 80B8BD4 - push {r4,r5,lr} - adds r5, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080B8C28 - ldrh r0, [r5, 0x24] - ldrh r1, [r5, 0x20] - adds r0, r1 - movs r1, 0 - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x26] - ldrh r2, [r5, 0x22] - adds r0, r2 - strh r0, [r5, 0x22] - strh r1, [r5, 0x26] - strh r1, [r5, 0x24] - movs r0, 0x14 - strh r0, [r5, 0x2E] - ldr r4, _080B8C30 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - movs r0, 0x28 - strh r0, [r5, 0x38] - adds r0, r5, 0 - bl InitAnimArcTranslation - ldr r0, _080B8C34 @ =sub_80B8C38 - str r0, [r5, 0x1C] -_080B8C28: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B8C30: .4byte gBattleAnimAttacker -_080B8C34: .4byte sub_80B8C38 - thumb_func_end sub_80B8BD4 - - thumb_func_start sub_80B8C38 -sub_80B8C38: @ 80B8C38 - push {r4,lr} - adds r4, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080B8C4C - adds r0, r4, 0 - bl DestroyAnimSprite -_080B8C4C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B8C38 - - thumb_func_start sub_80B8C54 -sub_80B8C54: @ 80B8C54 - push {r4-r6,lr} - adds r6, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r0, _080B8CB4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B8C74 - ldr r1, _080B8CB8 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_080B8C74: - ldr r4, _080B8CB8 @ =gBattleAnimArgs - ldrh r0, [r4, 0x8] - strh r0, [r6, 0x2E] - ldr r5, _080B8CBC @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x4] - adds r0, r1 - strh r0, [r6, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r4, [r4, 0x6] - adds r0, r4 - strh r0, [r6, 0x36] - ldr r0, _080B8CC0 @ =StartAnimLinearTranslation - str r0, [r6, 0x1C] - ldr r1, _080B8CC4 @ =DestroyAnimSprite - adds r0, r6, 0 - bl StoreSpriteCallbackInData6 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B8CB4: .4byte gBattleAnimAttacker -_080B8CB8: .4byte gBattleAnimArgs -_080B8CBC: .4byte gBattleAnimTarget -_080B8CC0: .4byte StartAnimLinearTranslation -_080B8CC4: .4byte DestroyAnimSprite - thumb_func_end sub_80B8C54 - - thumb_func_start sub_80B8CC8 -sub_80B8CC8: @ 80B8CC8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r4, _080B8D48 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord2 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord2 - lsls r0, 24 - lsrs r7, r0, 24 - bl Random - movs r4, 0x1F - adds r5, r4, 0 - ands r5, r0 - bl Random - ands r4, r0 - adds r1, r5, 0 - cmp r1, 0x10 - ble _080B8D10 - movs r0, 0x10 - subs r0, r1 - lsls r0, 16 - lsrs r5, r0, 16 -_080B8D10: - lsls r0, r4, 16 - asrs r1, r0, 16 - cmp r1, 0x10 - ble _080B8D20 - movs r0, 0x10 - subs r0, r1 - lsls r0, 16 - lsrs r4, r0, 16 -_080B8D20: - ldr r0, _080B8D4C @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r6, 0x2E] - mov r1, r8 - adds r0, r1, r5 - strh r0, [r6, 0x32] - adds r0, r7, r4 - strh r0, [r6, 0x36] - ldr r0, _080B8D50 @ =StartAnimLinearTranslation - str r0, [r6, 0x1C] - ldr r1, _080B8D54 @ =DestroySpriteAndMatrix - adds r0, r6, 0 - bl StoreSpriteCallbackInData6 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B8D48: .4byte gBattleAnimTarget -_080B8D4C: .4byte gBattleAnimArgs -_080B8D50: .4byte StartAnimLinearTranslation -_080B8D54: .4byte DestroySpriteAndMatrix - thumb_func_end sub_80B8CC8 - - thumb_func_start sub_80B8D58 -sub_80B8D58: @ 80B8D58 - push {r4-r6,lr} - adds r5, r0, 0 - ldrh r2, [r5, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, 0x1 - ldr r3, _080B8DB8 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080B8DBC @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - ldr r6, _080B8DC0 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080B8DCC - ldr r4, _080B8DC4 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r2, [r6, 0x2] - adds r0, r2 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r3, [r6, 0x4] - adds r0, r3 - strh r0, [r5, 0x22] - movs r1, 0x2 - ldrsh r0, [r6, r1] - movs r2, 0x1 - negs r2, r2 - adds r1, r2, 0 - cmp r0, 0 - ble _080B8DB2 - movs r1, 0x1 -_080B8DB2: - strh r1, [r5, 0x2E] - ldr r0, _080B8DC8 @ =sub_80B8DE8 - b _080B8DDA - .align 2, 0 -_080B8DB8: .4byte 0x000003ff -_080B8DBC: .4byte 0xfffffc00 -_080B8DC0: .4byte gBattleAnimArgs -_080B8DC4: .4byte gBattleAnimAttacker -_080B8DC8: .4byte sub_80B8DE8 -_080B8DCC: - ldrh r0, [r6, 0x2] - strh r0, [r5, 0x20] - ldrh r0, [r6, 0x4] - strh r0, [r5, 0x22] - negs r0, r0 - strh r0, [r5, 0x26] - ldr r0, _080B8DE4 @ =sub_80B8E24 -_080B8DDA: - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B8DE4: .4byte sub_80B8E24 - thumb_func_end sub_80B8D58 - - thumb_func_start sub_80B8DE8 -sub_80B8DE8: @ 80B8DE8 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x30] - adds r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B8E06 - movs r0, 0 - strh r0, [r2, 0x30] - ldrh r0, [r2, 0x2E] - ldrh r1, [r2, 0x20] - adds r0, r1 - strh r0, [r2, 0x20] -_080B8E06: - ldrh r0, [r2, 0x22] - subs r0, 0x4 - strh r0, [r2, 0x22] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x4 - negs r1, r1 - cmp r0, r1 - bge _080B8E1E - adds r0, r2, 0 - bl DestroyAnimSprite -_080B8E1E: - pop {r0} - bx r0 - thumb_func_end sub_80B8DE8 - - thumb_func_start sub_80B8E24 -sub_80B8E24: @ 80B8E24 - push {lr} - adds r3, r0, 0 - movs r0, 0x2E - ldrsh r1, [r3, r0] - cmp r1, 0 - beq _080B8E36 - cmp r1, 0x1 - beq _080B8E4C - b _080B8E8E -_080B8E36: - ldrh r0, [r3, 0x26] - adds r0, 0x4 - strh r0, [r3, 0x26] - lsls r0, 16 - cmp r0, 0 - blt _080B8E8E - strh r1, [r3, 0x26] - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - b _080B8E8E -_080B8E4C: - ldrh r0, [r3, 0x30] - adds r0, 0x1 - strh r0, [r3, 0x30] - lsls r0, 16 - cmp r0, 0 - ble _080B8E8E - movs r0, 0 - strh r0, [r3, 0x30] - movs r1, 0x3E - adds r1, r3 - mov r12, r1 - ldrb r2, [r1] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - ldrh r0, [r3, 0x32] - adds r0, 0x1 - strh r0, [r3, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _080B8E8E - adds r0, r3, 0 - bl DestroyAnimSprite -_080B8E8E: - pop {r0} - bx r0 - thumb_func_end sub_80B8E24 - - thumb_func_start sub_80B8E94 -sub_80B8E94: @ 80B8E94 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B8EB4 @ =gTasks - adds r1, r0, r1 - ldr r0, _080B8EB8 @ =gBattleAnimArgs - movs r3, 0 - ldrsh r0, [r0, r3] - cmp r0, 0 - bne _080B8EC0 - ldr r0, _080B8EBC @ =sub_80B8ED4 - b _080B8EC2 - .align 2, 0 -_080B8EB4: .4byte gTasks -_080B8EB8: .4byte gBattleAnimArgs -_080B8EBC: .4byte sub_80B8ED4 -_080B8EC0: - ldr r0, _080B8ED0 @ =sub_80B908C -_080B8EC2: - str r0, [r1] - ldr r1, [r1] - adds r0, r2, 0 - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_080B8ED0: .4byte sub_80B908C - thumb_func_end sub_80B8E94 - - thumb_func_start sub_80B8ED4 -sub_80B8ED4: @ 80B8ED4 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B8EF8 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bls _080B8EEE - b _080B9082 -_080B8EEE: - lsls r0, 2 - ldr r1, _080B8EFC @ =_080B8F00 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B8EF8: .4byte gTasks -_080B8EFC: .4byte _080B8F00 - .align 2, 0 -_080B8F00: - .4byte _080B8F14 - .4byte _080B8F9C - .4byte _080B8FAC - .4byte _080B9050 - .4byte _080B9064 -_080B8F14: - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1C] - ldr r0, _080B8F3C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1E] - cmp r0, 0x1 - bne _080B8F48 - ldr r0, _080B8F40 @ =gBattle_BG1_X - ldrh r0, [r0] - strh r0, [r4, 0x20] - ldr r0, _080B8F44 @ =gBattle_BG1_Y - b _080B8F50 - .align 2, 0 -_080B8F3C: .4byte gBattleAnimAttacker -_080B8F40: .4byte gBattle_BG1_X -_080B8F44: .4byte gBattle_BG1_Y -_080B8F48: - ldr r0, _080B8F8C @ =gBattle_BG2_X - ldrh r0, [r0] - strh r0, [r4, 0x20] - ldr r0, _080B8F90 @ =gBattle_BG2_Y -_080B8F50: - ldrh r0, [r0] - strh r0, [r4, 0x22] - ldr r0, _080B8F94 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerYCoordWithElevation - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - subs r1, 0x20 - strh r1, [r4, 0x24] - adds r0, 0x20 - strh r0, [r4, 0x26] - cmp r1, 0 - bge _080B8F72 - movs r0, 0 - strh r0, [r4, 0x24] -_080B8F72: - ldr r2, _080B8F98 @ =gSprites - movs r3, 0x1C - ldrsh r1, [r4, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - b _080B9056 - .align 2, 0 -_080B8F8C: .4byte gBattle_BG2_X -_080B8F90: .4byte gBattle_BG2_Y -_080B8F94: .4byte gBattleAnimAttacker -_080B8F98: .4byte gSprites -_080B8F9C: - ldrb r0, [r4, 0x1E] - movs r2, 0x24 - ldrsh r1, [r4, r2] - movs r3, 0x26 - ldrsh r2, [r4, r3] - bl sub_80B92B8 - b _080B9056 -_080B8FAC: - ldrh r0, [r4, 0xC] - adds r0, 0x6 - movs r1, 0x7F - ands r0, r1 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x10] - adds r0, 0x1 - strh r0, [r4, 0x10] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080B8FCE - movs r0, 0 - strh r0, [r4, 0x10] - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] -_080B8FCE: - ldr r1, _080B8FF0 @ =gSineTable - movs r2, 0xC - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - lsls r0, 16 - asrs r0, 20 - ldrh r3, [r4, 0xE] - adds r2, r0, r3 - strh r2, [r4, 0x12] - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _080B8FF8 - ldr r1, _080B8FF4 @ =gBattle_BG1_Y - b _080B8FFA - .align 2, 0 -_080B8FF0: .4byte gSineTable -_080B8FF4: .4byte gBattle_BG1_Y -_080B8FF8: - ldr r1, _080B901C @ =gBattle_BG2_Y -_080B8FFA: - ldrh r0, [r4, 0x22] - subs r0, r2 - strh r0, [r1] - movs r2, 0x12 - ldrsh r0, [r4, r2] - cmp r0, 0x3F - ble _080B9082 - ldrh r0, [r4, 0x24] - movs r1, 0x78 - subs r2, r1, r0 - strh r2, [r4, 0x12] - movs r3, 0x1E - ldrsh r0, [r4, r3] - cmp r0, 0x1 - bne _080B9024 - ldr r1, _080B9020 @ =gBattle_BG1_Y - b _080B9026 - .align 2, 0 -_080B901C: .4byte gBattle_BG2_Y -_080B9020: .4byte gBattle_BG1_Y -_080B9024: - ldr r1, _080B9048 @ =gBattle_BG2_Y -_080B9026: - ldrh r0, [r4, 0x22] - subs r0, r2 - strh r0, [r1] - ldr r2, _080B904C @ =gSprites - movs r1, 0x1C - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r2, [r1, 0x20] - movs r3, 0x88 - lsls r3, 1 - adds r0, r3, 0 - subs r0, r2 - strh r0, [r1, 0x24] - b _080B9056 - .align 2, 0 -_080B9048: .4byte gBattle_BG2_Y -_080B904C: .4byte gSprites -_080B9050: - ldr r1, _080B9060 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] -_080B9056: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B9082 - .align 2, 0 -_080B9060: .4byte gScanlineEffect -_080B9064: - adds r0, r2, 0 - bl DestroyAnimVisualTask - ldr r2, _080B9088 @ =gSprites - movs r0, 0x1C - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_080B9082: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B9088: .4byte gSprites - thumb_func_end sub_80B8ED4 - - thumb_func_start sub_80B908C -sub_80B908C: @ 80B908C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B90CC @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r3, r1, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r3] - movs r4, 0 - strh r4, [r1, 0x24] - strh r4, [r1, 0x26] - ldr r0, _080B90D0 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B90D8 - ldr r0, _080B90D4 @ =gBattle_BG1_Y - b _080B90DA - .align 2, 0 -_080B90CC: .4byte gSprites -_080B90D0: .4byte gBattleAnimAttacker -_080B90D4: .4byte gBattle_BG1_Y -_080B90D8: - ldr r0, _080B90E8 @ =gBattle_BG2_Y -_080B90DA: - strh r4, [r0] - adds r0, r5, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B90E8: .4byte gBattle_BG2_Y - thumb_func_end sub_80B908C - - thumb_func_start sub_80B90EC -sub_80B90EC: @ 80B90EC - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B910C @ =gTasks - adds r1, r0, r1 - ldr r0, _080B9110 @ =gBattleAnimArgs - movs r3, 0 - ldrsh r0, [r0, r3] - cmp r0, 0 - bne _080B9118 - ldr r0, _080B9114 @ =sub_80B912C - b _080B911A - .align 2, 0 -_080B910C: .4byte gTasks -_080B9110: .4byte gBattleAnimArgs -_080B9114: .4byte sub_80B912C -_080B9118: - ldr r0, _080B9128 @ =sub_80B91B0 -_080B911A: - str r0, [r1] - ldr r1, [r1] - adds r0, r2, 0 - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_080B9128: .4byte sub_80B91B0 - thumb_func_end sub_80B90EC - - thumb_func_start sub_80B912C -sub_80B912C: @ 80B912C - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B914C @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r5, [r4, r0] - cmp r5, 0 - beq _080B9150 - cmp r5, 0x1 - beq _080B91A4 - b _080B91AA - .align 2, 0 -_080B914C: .4byte gTasks -_080B9150: - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1C] - ldr r3, _080B91A0 @ =gSprites - movs r0, 0x1C - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - movs r0, 0x1C - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - strh r5, [r0, 0x24] - movs r1, 0x1C - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrh r2, [r1, 0x22] - movs r0, 0xA0 - subs r0, r2 - strh r0, [r1, 0x26] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B91AA - .align 2, 0 -_080B91A0: .4byte gSprites -_080B91A4: - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080B91AA: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B912C - - thumb_func_start sub_80B91B0 -sub_80B91B0: @ 80B91B0 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B91D4 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bhi _080B92B2 - lsls r0, 2 - ldr r1, _080B91D8 @ =_080B91DC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B91D4: .4byte gTasks -_080B91D8: .4byte _080B91DC - .align 2, 0 -_080B91DC: - .4byte _080B91F0 - .4byte _080B9244 - .4byte _080B9252 - .4byte _080B926C - .4byte _080B92AC -_080B91F0: - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1C] - ldr r0, _080B9214 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1E] - cmp r0, 0x1 - bne _080B921C - ldr r0, _080B9218 @ =gBattle_BG1_X - b _080B921E - .align 2, 0 -_080B9214: .4byte gBattleAnimAttacker -_080B9218: .4byte gBattle_BG1_X -_080B921C: - ldr r0, _080B923C @ =gBattle_BG2_X -_080B921E: - ldrh r0, [r0] - strh r0, [r4, 0x20] - ldr r0, _080B9240 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerYCoordWithElevation - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - subs r1, 0x20 - strh r1, [r4, 0x24] - adds r0, 0x20 - strh r0, [r4, 0x26] - b _080B929A - .align 2, 0 -_080B923C: .4byte gBattle_BG2_X -_080B9240: .4byte gBattleAnimAttacker -_080B9244: - ldrb r0, [r4, 0x1E] - movs r1, 0x26 - ldrsh r2, [r4, r1] - movs r1, 0 - bl sub_80B92B8 - b _080B929A -_080B9252: - ldr r2, _080B9268 @ =gSprites - movs r0, 0x1C - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x60 - strh r1, [r0, 0x26] - b _080B929A - .align 2, 0 -_080B9268: .4byte gSprites -_080B926C: - ldr r2, _080B92A4 @ =gSprites - movs r0, 0x1C - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - subs r1, 0x8 - strh r1, [r0, 0x26] - movs r0, 0x1C - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x26 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B92B2 - ldr r1, _080B92A8 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] -_080B929A: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B92B2 - .align 2, 0 -_080B92A4: .4byte gSprites -_080B92A8: .4byte gScanlineEffect -_080B92AC: - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080B92B2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B91B0 - - thumb_func_start sub_80B92B8 -sub_80B92B8: @ 80B92B8 - push {r4-r6,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r4, r2, 16 - cmp r0, 0x1 - bne _080B92DC - ldr r0, _080B92D4 @ =gBattle_BG1_X - ldrh r3, [r0] - ldr r0, _080B92D8 @ =0x04000014 - b _080B92E2 - .align 2, 0 -_080B92D4: .4byte gBattle_BG1_X -_080B92D8: .4byte 0x04000014 -_080B92DC: - ldr r0, _080B9368 @ =gBattle_BG2_X - ldrh r3, [r0] - ldr r0, _080B936C @ =0x04000018 -_080B92E2: - str r0, [sp] - lsls r0, r1, 16 - cmp r0, 0 - bge _080B92EC - movs r1, 0 -_080B92EC: - lsls r2, r1, 16 - lsls r0, r4, 16 - asrs r4, r0, 16 - cmp r2, r0 - bge _080B9318 - ldr r5, _080B9370 @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r6, r5, r0 -_080B92FE: - asrs r2, 16 - lsls r1, r2, 1 - adds r0, r1, r5 - strh r3, [r0] - adds r1, r6 - strh r3, [r1] - adds r2, 0x1 - lsls r2, 16 - lsrs r1, r2, 16 - lsls r2, r1, 16 - asrs r0, r2, 16 - cmp r0, r4 - blt _080B92FE -_080B9318: - lsls r1, 16 - asrs r0, r1, 16 - cmp r0, 0x9F - bgt _080B9346 - ldr r4, _080B9370 @ =gScanlineEffectRegBuffers - lsls r0, r3, 16 - asrs r0, 16 - adds r3, r0, 0 - adds r3, 0xF0 - movs r0, 0xF0 - lsls r0, 3 - adds r5, r4, r0 -_080B9330: - asrs r2, r1, 16 - lsls r1, r2, 1 - adds r0, r1, r4 - strh r3, [r0] - adds r1, r5 - strh r3, [r1] - adds r2, 0x1 - lsls r1, r2, 16 - asrs r0, r1, 16 - cmp r0, 0x9F - ble _080B9330 -_080B9346: - ldr r0, _080B9374 @ =0xa2600001 - str r0, [sp, 0x4] - mov r1, sp - movs r2, 0 - movs r0, 0x1 - strb r0, [r1, 0x8] - mov r0, sp - strb r2, [r0, 0x9] - ldr r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - bl ScanlineEffect_SetParams - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B9368: .4byte gBattle_BG2_X -_080B936C: .4byte 0x04000018 -_080B9370: .4byte gScanlineEffectRegBuffers -_080B9374: .4byte 0xa2600001 - thumb_func_end sub_80B92B8 - - thumb_func_start sub_80B9378 -sub_80B9378: @ 80B9378 - push {r4-r7,lr} - adds r5, r0, 0 - ldr r0, _080B938C @ =gBattleAnimArgs - movs r2, 0 - ldrsh r1, [r0, r2] - adds r7, r0, 0 - cmp r1, 0 - bne _080B9394 - ldr r0, _080B9390 @ =gBattleAnimAttacker - b _080B9396 - .align 2, 0 -_080B938C: .4byte gBattleAnimArgs -_080B9390: .4byte gBattleAnimAttacker -_080B9394: - ldr r0, _080B93F8 @ =gBattleAnimTarget -_080B9396: - ldrb r4, [r0] - movs r6, 0x18 - adds r1, r7, 0 - movs r2, 0x2 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - bne _080B93B2 - negs r0, r6 - lsls r0, 16 - lsrs r6, r0, 16 - movs r2, 0x4 - ldrsh r0, [r1, r2] - negs r0, r0 - strh r0, [r1, 0x4] -_080B93B2: - adds r0, r4, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, r6 - strh r0, [r5, 0x20] - adds r0, r4, 0 - bl GetBattlerYCoordWithElevation - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1E - strh r0, [r5, 0x22] - ldrh r1, [r7, 0xA] - strh r1, [r5, 0x2E] - ldrh r1, [r7, 0x4] - ldrh r2, [r5, 0x20] - adds r1, r2 - strh r1, [r5, 0x32] - ldrh r1, [r7, 0x6] - adds r0, r1 - strh r0, [r5, 0x36] - ldrh r0, [r7, 0x8] - strh r0, [r5, 0x38] - adds r0, r5, 0 - bl InitAnimArcTranslation - ldr r0, _080B93FC @ =sub_80B9400 - str r0, [r5, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B93F8: .4byte gBattleAnimTarget -_080B93FC: .4byte sub_80B9400 - thumb_func_end sub_80B9378 - - thumb_func_start sub_80B9400 -sub_80B9400: @ 80B9400 - push {r4,lr} - adds r4, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080B9414 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B9414: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B9400 - - thumb_func_start sub_80B941C -sub_80B941C: @ 80B941C - push {r4-r6,lr} - adds r6, r0, 0 - ldr r0, _080B9430 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B9438 - ldr r0, _080B9434 @ =gBattleAnimAttacker - b _080B943A - .align 2, 0 -_080B9430: .4byte gBattleAnimArgs -_080B9434: .4byte gBattleAnimAttacker -_080B9438: - ldr r0, _080B9498 @ =gBattleAnimTarget -_080B943A: - ldrb r5, [r0] - adds r0, r5, 0 - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B949C @ =0x0000fff0 - adds r0, r2 - ldr r4, _080B94A0 @ =gBattleAnimArgs - movs r3, 0x2 - ldrsh r1, [r4, r3] - lsls r1, 5 - adds r0, r1 - strh r0, [r6, 0x20] - adds r0, r5, 0 - bl GetBattlerYCoordWithElevation - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x20 - strh r0, [r6, 0x22] - ldrh r2, [r6, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - movs r3, 0x2 - ldrsh r0, [r4, r3] - lsls r0, 3 - adds r1, r0 - ldr r3, _080B94A4 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080B94A8 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r6, 0x4] - ldr r1, _080B94AC @ =DestroyAnimSprite - adds r0, r6, 0 - bl StoreSpriteCallbackInData6 - ldrh r0, [r4, 0x4] - strh r0, [r6, 0x2E] - ldr r0, _080B94B0 @ =WaitAnimForDuration - str r0, [r6, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B9498: .4byte gBattleAnimTarget -_080B949C: .4byte 0x0000fff0 -_080B94A0: .4byte gBattleAnimArgs -_080B94A4: .4byte 0x000003ff -_080B94A8: .4byte 0xfffffc00 -_080B94AC: .4byte DestroyAnimSprite -_080B94B0: .4byte WaitAnimForDuration - thumb_func_end sub_80B941C - - thumb_func_start sub_80B94B4 -sub_80B94B4: @ 80B94B4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080B94D8 @ =gTasks - adds r4, r0, r1 - ldr r0, _080B94DC @ =gBattleAnimArgs - ldrh r2, [r0, 0x2] - movs r3, 0x2 - ldrsh r1, [r0, r3] - adds r6, r0, 0 - cmp r1, 0 - beq _080B94E0 - adds r0, r2, 0x3 - b _080B94EC - .align 2, 0 -_080B94D8: .4byte gTasks -_080B94DC: .4byte gBattleAnimArgs -_080B94E0: - ldr r0, _080B950C @ =gAnimMovePower - ldrh r0, [r0] - movs r1, 0xA - bl __udivsi3 - adds r0, 0x3 -_080B94EC: - strh r0, [r4, 0x26] - strh r0, [r4, 0x24] - adds r1, r6, 0 - ldrh r0, [r1, 0x4] - strh r0, [r4, 0xE] - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0x4 - beq _080B9518 - cmp r0, 0x5 - bne _080B9558 - ldr r0, _080B9510 @ =gBattle_BG3_X - ldrh r0, [r0] - strh r0, [r4, 0x22] - ldr r0, _080B9514 @ =sub_80B9584 - b _080B9576 - .align 2, 0 -_080B950C: .4byte gAnimMovePower -_080B9510: .4byte gBattle_BG3_X -_080B9514: .4byte sub_80B9584 -_080B9518: - movs r0, 0 - strh r0, [r4, 0x22] - movs r5, 0 -_080B951E: - lsls r0, r5, 24 - lsrs r0, 24 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B9548 - movs r3, 0x22 - ldrsh r0, [r4, r3] - adds r0, 0x9 - lsls r0, 1 - adds r1, r4, 0 - adds r1, 0x8 - adds r1, r0 - ldr r0, _080B9554 @ =gBattlerSpriteIds - adds r0, r5, r0 - ldrb r0, [r0] - strh r0, [r1] - ldrh r0, [r4, 0x22] - adds r0, 0x1 - strh r0, [r4, 0x22] -_080B9548: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x3 - bls _080B951E - b _080B9574 - .align 2, 0 -_080B9554: .4byte gBattlerSpriteIds -_080B9558: - ldrb r0, [r6] - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1A] - cmp r0, 0xFF - bne _080B9570 - adds r0, r5, 0 - bl DestroyAnimVisualTask - b _080B9578 -_080B9570: - movs r0, 0x1 - strh r0, [r4, 0x22] -_080B9574: - ldr r0, _080B9580 @ =sub_80B967C -_080B9576: - str r0, [r4] -_080B9578: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B9580: .4byte sub_80B967C - thumb_func_end sub_80B94B4 - - thumb_func_start sub_80B9584 -sub_80B9584: @ 80B9584 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B95A8 @ =gTasks - adds r3, r0, r1 - movs r0, 0x8 - ldrsh r1, [r3, r0] - cmp r1, 0x1 - beq _080B9608 - cmp r1, 0x1 - bgt _080B95AC - cmp r1, 0 - beq _080B95B2 - b _080B9674 - .align 2, 0 -_080B95A8: .4byte gTasks -_080B95AC: - cmp r1, 0x2 - beq _080B9668 - b _080B9674 -_080B95B2: - ldrh r0, [r3, 0xA] - adds r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B9674 - strh r1, [r3, 0xA] - ldrh r1, [r3, 0xC] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080B95DC - ldr r1, _080B95D8 @ =gBattle_BG3_X - ldrh r0, [r3, 0x26] - ldrh r2, [r3, 0x22] - adds r0, r2 - strh r0, [r1] - b _080B95E6 - .align 2, 0 -_080B95D8: .4byte gBattle_BG3_X -_080B95DC: - ldr r0, _080B9604 @ =gBattle_BG3_X - ldrh r1, [r3, 0x22] - ldrh r2, [r3, 0x26] - subs r1, r2 - strh r1, [r0] -_080B95E6: - ldrh r0, [r3, 0xC] - adds r0, 0x1 - strh r0, [r3, 0xC] - lsls r0, 16 - asrs r0, 16 - movs r2, 0xE - ldrsh r1, [r3, r2] - cmp r0, r1 - bne _080B9674 - movs r0, 0 - strh r0, [r3, 0xC] - ldrh r0, [r3, 0x24] - subs r0, 0x1 - strh r0, [r3, 0x24] - b _080B965C - .align 2, 0 -_080B9604: .4byte gBattle_BG3_X -_080B9608: - ldrh r0, [r3, 0xA] - adds r0, 0x1 - strh r0, [r3, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B9674 - movs r0, 0 - strh r0, [r3, 0xA] - ldrh r0, [r3, 0xC] - ands r1, r0 - cmp r1, 0 - bne _080B9634 - ldr r1, _080B9630 @ =gBattle_BG3_X - ldrh r0, [r3, 0x24] - ldrh r2, [r3, 0x22] - adds r0, r2 - strh r0, [r1] - b _080B963E - .align 2, 0 -_080B9630: .4byte gBattle_BG3_X -_080B9634: - ldr r0, _080B9664 @ =gBattle_BG3_X - ldrh r1, [r3, 0x22] - ldrh r2, [r3, 0x24] - subs r1, r2 - strh r1, [r0] -_080B963E: - ldrh r0, [r3, 0xC] - adds r0, 0x1 - strh r0, [r3, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080B9674 - movs r0, 0 - strh r0, [r3, 0xC] - ldrh r0, [r3, 0x24] - subs r0, 0x1 - strh r0, [r3, 0x24] - lsls r0, 16 - cmp r0, 0 - bne _080B9674 -_080B965C: - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] - b _080B9674 - .align 2, 0 -_080B9664: .4byte gBattle_BG3_X -_080B9668: - ldr r1, _080B9678 @ =gBattle_BG3_X - ldrh r0, [r3, 0x22] - strh r0, [r1] - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080B9674: - pop {r0} - bx r0 - .align 2, 0 -_080B9678: .4byte gBattle_BG3_X - thumb_func_end sub_80B9584 - - thumb_func_start sub_80B967C -sub_80B967C: @ 80B967C - push {r4-r7,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - ldr r1, _080B96A0 @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r5, [r4, r0] - cmp r5, 0x1 - beq _080B96DC - cmp r5, 0x1 - bgt _080B96A4 - cmp r5, 0 - beq _080B96AA - b _080B9756 - .align 2, 0 -_080B96A0: .4byte gTasks -_080B96A4: - cmp r5, 0x2 - beq _080B9718 - b _080B9756 -_080B96AA: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B9756 - strh r5, [r4, 0xA] - adds r0, r4, 0 - bl sub_80B9760 - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - movs r2, 0xE - ldrsh r1, [r4, r2] - cmp r0, r1 - bne _080B9756 - strh r5, [r4, 0xC] - ldrh r0, [r4, 0x24] - subs r0, 0x1 - strh r0, [r4, 0x24] - b _080B9710 -_080B96DC: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - movs r5, 0 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B9756 - strh r5, [r4, 0xA] - adds r0, r4, 0 - bl sub_80B9760 - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080B9756 - strh r5, [r4, 0xC] - ldrh r0, [r4, 0x24] - subs r0, 0x1 - strh r0, [r4, 0x24] - lsls r0, 16 - cmp r0, 0 - bne _080B9756 -_080B9710: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B9756 -_080B9718: - movs r2, 0 - movs r7, 0x22 - ldrsh r0, [r4, r7] - cmp r2, r0 - bge _080B9750 - ldr r0, _080B975C @ =gSprites - mov r12, r0 - adds r5, r4, 0 - adds r5, 0x8 - movs r6, 0 -_080B972C: - adds r0, r2, 0 - adds r0, 0x9 - lsls r0, 1 - adds r0, r5, r0 - movs r7, 0 - ldrsh r1, [r0, r7] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r12 - strh r6, [r0, 0x24] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - movs r1, 0x22 - ldrsh r0, [r4, r1] - cmp r2, r0 - blt _080B972C -_080B9750: - adds r0, r3, 0 - bl DestroyAnimVisualTask -_080B9756: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B975C: .4byte gSprites - thumb_func_end sub_80B967C - - thumb_func_start sub_80B9760 -sub_80B9760: @ 80B9760 - push {r4-r7,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0xC] - movs r4, 0x1 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - bne _080B9788 - movs r0, 0x24 - ldrsh r1, [r3, r0] - lsrs r0, r1, 31 - adds r1, r0 - asrs r1, 1 - ldrh r2, [r3, 0x24] - adds r0, r4, 0 - ands r0, r2 - adds r1, r0 - lsls r1, 16 - lsrs r4, r1, 16 - b _080B9798 -_080B9788: - movs r1, 0x24 - ldrsh r0, [r3, r1] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - negs r0, r0 - lsls r0, 16 - lsrs r4, r0, 16 -_080B9798: - movs r2, 0 - movs r7, 0x22 - ldrsh r0, [r3, r7] - cmp r2, r0 - bge _080B97CC - ldr r6, _080B97D4 @ =gSprites - adds r5, r3, 0 - adds r5, 0x8 -_080B97A8: - adds r0, r2, 0 - adds r0, 0x9 - lsls r0, 1 - adds r0, r5, r0 - movs r7, 0 - ldrsh r1, [r0, r7] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strh r4, [r0, 0x24] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - movs r1, 0x22 - ldrsh r0, [r3, r1] - cmp r2, r0 - blt _080B97A8 -_080B97CC: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B97D4: .4byte gSprites - thumb_func_end sub_80B9760 - - thumb_func_start sub_80B97D8 -sub_80B97D8: @ 80B97D8 - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - ldr r3, _080B97F8 @ =gBattleAnimArgs - movs r2, 0 - ldr r0, _080B97FC @ =gAnimMovePower - ldrh r0, [r0] - cmp r0, 0x63 - bls _080B97EC - movs r2, 0x1 -_080B97EC: - strh r2, [r3, 0x1E] - adds r0, r1, 0 - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .align 2, 0 -_080B97F8: .4byte gBattleAnimArgs -_080B97FC: .4byte gAnimMovePower - thumb_func_end sub_80B97D8 - - thumb_func_start sub_80B9800 -sub_80B9800: @ 80B9800 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r2, _080B9818 @ =gBattleAnimArgs - ldrh r1, [r2] - movs r0, 0x1 - ands r0, r1 - adds r6, r2, 0 - cmp r0, 0 - beq _080B9820 - ldr r0, _080B981C @ =gBattleAnimTarget - b _080B9822 - .align 2, 0 -_080B9818: .4byte gBattleAnimArgs -_080B981C: .4byte gBattleAnimTarget -_080B9820: - ldr r0, _080B9890 @ =gBattleAnimAttacker -_080B9822: - ldrb r0, [r0] - adds r5, r0, 0 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0x1 - ble _080B9832 - movs r0, 0x2 - eors r5, r0 -_080B9832: - ldr r0, _080B9894 @ =sub_80B98A8 - ldrb r1, [r6, 0x2] - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _080B9898 @ =gTasks - adds r4, r0 - adds r0, r5, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x20 - subs r1, r0 - ldr r2, _080B989C @ =0x000001ff - adds r0, r2, 0 - ands r1, r0 - strh r1, [r4, 0xA] - adds r0, r5, 0 - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x40 - subs r1, r0 - movs r0, 0xFF - ands r1, r0 - strh r1, [r4, 0xC] - ldr r2, _080B98A0 @ =gBattle_BG3_X - ldrh r0, [r4, 0xA] - strh r0, [r2] - ldr r0, _080B98A4 @ =gBattle_BG3_Y - strh r1, [r0] - ldrh r0, [r6, 0x4] - strh r0, [r4, 0xE] - adds r0, r7, 0 - bl DestroyAnimVisualTask - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B9890: .4byte gBattleAnimAttacker -_080B9894: .4byte sub_80B98A8 -_080B9898: .4byte gTasks -_080B989C: .4byte 0x000001ff -_080B98A0: .4byte gBattle_BG3_X -_080B98A4: .4byte gBattle_BG3_Y - thumb_func_end sub_80B9800 - - thumb_func_start sub_80B98A8 -sub_80B98A8: @ 80B98A8 - push {r4,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - ldr r1, _080B98D8 @ =gTasks - adds r2, r0, r1 - ldr r0, _080B98DC @ =gBattleAnimArgs - movs r4, 0xE - ldrsh r1, [r0, r4] - movs r4, 0xE - ldrsh r0, [r2, r4] - cmp r1, r0 - bne _080B98E8 - ldr r0, _080B98E0 @ =gBattle_BG3_X - movs r1, 0 - strh r1, [r0] - ldr r0, _080B98E4 @ =gBattle_BG3_Y - strh r1, [r0] - adds r0, r3, 0 - bl DestroyTask - b _080B98F4 - .align 2, 0 -_080B98D8: .4byte gTasks -_080B98DC: .4byte gBattleAnimArgs -_080B98E0: .4byte gBattle_BG3_X -_080B98E4: .4byte gBattle_BG3_Y -_080B98E8: - ldr r1, _080B98FC @ =gBattle_BG3_X - ldrh r0, [r2, 0xA] - strh r0, [r1] - ldr r1, _080B9900 @ =gBattle_BG3_Y - ldrh r0, [r2, 0xC] - strh r0, [r1] -_080B98F4: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B98FC: .4byte gBattle_BG3_X -_080B9900: .4byte gBattle_BG3_Y - thumb_func_end sub_80B98A8 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_835B488.s b/data/data_835B488.s index 7bb53324e..7ac2159a0 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -930,7 +930,12 @@ gUnknown_83E7668:: @ 83E7668 .incbin "baserom.gba", 0x3E7668, 0x78 gUnknown_83E76E0:: @ 83E76E0 - .incbin "baserom.gba", 0x3E76E0, 0x528 + .incbin "baserom.gba", 0x3E76E0, 0x320 + + .section .rodata.83E7ADC + +gUnknown_83E7ADC:: @ 83E7ADC + .incbin "baserom.gba", 0x3E7ADC, 0x12C gUnknown_83E7C08:: @ 83E7C08 .incbin "baserom.gba", 0x3E7C08, 0x30 diff --git a/include/battle_anim.h b/include/battle_anim.h index 7738ece11..b3e97ff56 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -58,6 +58,10 @@ extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT]; extern u8 gUnknown_2037F24; extern struct OamData gOamData_83ACA40; +extern struct OamData gOamData_83AC9C8; +extern struct OamData gOamData_83ACA38; +extern struct OamData gOamData_83AC9D0; +extern struct OamData gOamData_83AC9F8; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); @@ -261,8 +265,41 @@ void sub_8099BD4(u8 taskId); // normal.s u32 UnpackSelectedBattleAnimPalettes(s16 selector); +// ground.c +void sub_80B8E94(u8 taskId); +void sub_80B90EC(u8 taskId); +void sub_80B94B4(u8 taskId); +void AnimTask_IsPowerOver99(u8 taskId); +void sub_80B9800(u8 taskId); + // battle_anim_utility_funcs.c +void sub_80BA7F8(u8 taskId); +void sub_80BA83C(u8 taskId); +void AnimTask_SetCamouflageBlend(u8 taskId); +void AnimTask_BlendParticle(u8 taskId); +void sub_80BAB38(u8 taskId); +void sub_80BAB98(u8 taskId); +void sub_80BACEC(u8 taskId); void sub_80BB088(u8 taskId); +void sub_80BB660(u8 taskId); +void sub_80BB7DC(u8 taskId); +void sub_80BB82C(u8 taskId); +void AnimTask_GetAttackerSide(u8 taskId); +void AnimTask_GetTargetSide(u8 taskId); +void AnimTask_GetTargetIsAttackerPartner(u8 taskId); +void sub_80BB9B0(u8 taskId); void sub_80BBA20(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *gfx, const u32 *tilemap, const u32 *palette); +void AnimTask_GetBattleTerrain(u8 taskId); +void sub_80BBE10(u8 taskId); +void sub_80BBE3C(u8 taskId); +void sub_80BBE6C(u8 taskId); +void sub_80BBF08(u8 taskId); +void sub_80BBFA4(u8 taskId); +void AnimTask_IsContest(u8 taskId); +void sub_80BC060(u8 taskId); +void AnimTask_IsTargetSameSide(u8 taskId); +void sub_80BC0DC(u8 taskId); +void sub_80BC0FC(u8 taskId); +void sub_80BC12C(u8 taskId); #endif // GUARD_BATTLE_ANIM_H diff --git a/ld_script.txt b/ld_script.txt index 6202e5ace..fb93afc4f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -168,7 +168,7 @@ SECTIONS { asm/ghost.o(.text); asm/dragon.o(.text); asm/dark.o(.text); - asm/ground.o(.text); + src/ground.o(.text); asm/normal.o(.text); src/battle_anim_utility_funcs.o(.text); src/battle_intro.o(.text); @@ -422,6 +422,8 @@ SECTIONS { src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); data/data_835B488.o(.rodata.83DF09C); + src/ground.o(.rodata); + data/data_835B488.o(.rodata.83E7ADC); src/battle_anim_utility_funcs.o(.rodata); src/battle_intro.o(.rodata); data/data_835B488.o(.rodata.83E7CFC); diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index 5708785c0..e3624b6d9 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -148,7 +148,7 @@ void AnimTask_BlendParticle(u8 taskId) StartBlendAnimSpriteColor(taskId, selectedPalettes); } -void StartBlendAnimSpriteColor(u8 taskId, u32 selectedPalettes) +static void StartBlendAnimSpriteColor(u8 taskId, u32 selectedPalettes) { gTasks[taskId].data[0] = selectedPalettes; gTasks[taskId].data[1] = selectedPalettes >> 16; diff --git a/src/ground.c b/src/ground.c new file mode 100644 index 000000000..4e2a7bcf9 --- /dev/null +++ b/src/ground.c @@ -0,0 +1,724 @@ +#include "global.h" +#include "battle_anim.h" +#include "random.h" +#include "scanline_effect.h" +#include "task.h" +#include "trig.h" + +static void AnimBonemerangProjectile(struct Sprite *sprite); +static void AnimBoneHitProjectile(struct Sprite *sprite); +static void AnimDirtScatter(struct Sprite *sprite); +static void AnimMudSportDirt(struct Sprite *sprite); +static void AnimFissureDirtPlumeParticle(struct Sprite *sprite); +static void AnimDigDirtMound(struct Sprite *sprite); +static void AnimBonemerangProjectileStep(struct Sprite *sprite); +static void AnimBonemerangProjectileEnd(struct Sprite *sprite); +static void AnimMudSportDirtRising(struct Sprite *sprite); +static void AnimMudSportDirtFalling(struct Sprite *sprite); +static void sub_80B8ED4(u8 taskId); +static void sub_80B908C(u8 taskId); +static void sub_80B92B8(u8 useBg1, s16 y, s16 endY); +static void sub_80B912C(u8 taskId); +static void sub_80B91B0(u8 taskId); +static void AnimFissureDirtPlumeParticleStep(struct Sprite *sprite); +static void sub_80B9584(u8 taskId); +static void sub_80B967C(u8 taskId); +static void sub_80B9760(struct Task *task); +static void sub_80B98A8(u8 taskId); + +static const union AffineAnimCmd gUnknown_83E7A00[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 15, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd gUnknown_83E7A10[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const gUnknown_83E7A20[] = +{ + gUnknown_83E7A00, +}; + +static const union AffineAnimCmd *const gUnknown_83E7A24[] = +{ + gUnknown_83E7A10, +}; + +const struct SpriteTemplate gUnknown_83E7A28 = +{ + .tileTag = ANIM_TAG_BONE, + .paletteTag = ANIM_TAG_BONE, + .oam = &gOamData_83ACA38, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7A20, + .callback = AnimBonemerangProjectile, +}; + +const struct SpriteTemplate gUnknown_83E7A40 = +{ + .tileTag = ANIM_TAG_BONE, + .paletteTag = ANIM_TAG_BONE, + .oam = &gOamData_83ACA38, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7A24, + .callback = AnimBoneHitProjectile, +}; + +const struct SpriteTemplate gUnknown_83E7A58 = +{ + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_83AC9C8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDirtScatter, +}; + +static const union AnimCmd gUnknown_83E7A70[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E7A78[] = +{ + gUnknown_83E7A70, +}; + +const struct SpriteTemplate gUnknown_83E7A7C = +{ + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_83AC9D0, + .anims = gUnknown_83E7A78, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDirtScatter, +}; + +const struct SpriteTemplate gUnknown_83E7A94 = +{ + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMudSportDirt, +}; + +const struct SpriteTemplate gUnknown_83E7AAC = +{ + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_83AC9C8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFissureDirtPlumeParticle, +}; + +const struct SpriteTemplate gUnknown_83E7AC4 = +{ + .tileTag = ANIM_TAG_DIRT_MOUND, + .paletteTag = ANIM_TAG_DIRT_MOUND, + .oam = &gOamData_83AC9F8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDigDirtMound, +}; + +// Moves a bone projectile towards the target mon, which moves like +// a boomerang. After hitting the target mon, it comes back to the user. +static void AnimBonemerangProjectile(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[0] = 20; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[5] = -40; + InitAnimArcTranslation(sprite); + sprite->callback = AnimBonemerangProjectileStep; +} + +static void AnimBonemerangProjectileStep(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[0] = 20; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[5] = 40; + InitAnimArcTranslation(sprite); + sprite->callback = AnimBonemerangProjectileEnd; + } +} + +static void AnimBonemerangProjectileEnd(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + DestroyAnimSprite(sprite); +} + +// Moves a bone projectile towards the target mon, starting right next to +// the target mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +static void AnimBoneHitProjectile(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Moves a small dirt projectile towards the target mon. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: duration +// arg 3: target x pixel offset +// arg 4: target y pixel offset +static void AnimDirtScatter(struct Sprite *sprite) +{ + u8 targetXPos, targetYPos; + s16 xOffset, yOffset; + + InitSpritePosToAnimAttacker(sprite, 1); + targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 2); + targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 3); + xOffset = Random() & 0x1F; + yOffset = Random() & 0x1F; + if (xOffset > 16) + xOffset = 16 - xOffset; + if (yOffset > 16) + yOffset = 16 - yOffset; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = targetXPos + xOffset; + sprite->data[4] = targetYPos + yOffset; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); +} + +// Moves a particle of dirt in the Mud Sport animation. +// The dirt can either be rising upward, or falling down. +// arg 0: 0 = dirt is rising into the air, 1 = dirt is falling down +// arg 1: initial x pixel offset +// arg 2: initial y pixel offset +static void AnimMudSportDirt(struct Sprite *sprite) +{ + ++sprite->oam.tileNum; + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1; + sprite->callback = AnimMudSportDirtRising; + } + else + { + sprite->pos1.x = gBattleAnimArgs[1]; + sprite->pos1.y = gBattleAnimArgs[2]; + sprite->pos2.y = -gBattleAnimArgs[2]; + sprite->callback = AnimMudSportDirtFalling; + } +} + +static void AnimMudSportDirtRising(struct Sprite *sprite) +{ + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + sprite->pos1.x += sprite->data[0]; + } + sprite->pos1.y -= 4; + if (sprite->pos1.y < -4) + DestroyAnimSprite(sprite); +} + +static void AnimMudSportDirtFalling(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos2.y += 4; + if (sprite->pos2.y >= 0) + { + sprite->pos2.y = 0; + ++sprite->data[0]; + } + break; + case 1: + if (++sprite->data[1] > 0) + { + sprite->data[1] = 0; + sprite->invisible ^= 1; + if (++sprite->data[2] == 10) + DestroyAnimSprite(sprite); + } + break; + } +} + +void sub_80B8E94(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[0] == 0) + task->func = sub_80B8ED4; + else + task->func = sub_80B908C; + task->func(taskId); +} + +static void sub_80B8ED4(u8 taskId) +{ + u8 var0; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[10] = GetAnimBattlerSpriteId(0); + task->data[11] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); + if (task->data[11] == 1) + { + task->data[12] = gBattle_BG1_X; + task->data[13] = gBattle_BG1_Y; + } + else + { + task->data[12] = gBattle_BG2_X; + task->data[13] = gBattle_BG2_Y; + } + var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker); + task->data[14] = var0 - 32; + task->data[15] = var0 + 32; + if (task->data[14] < 0) + task->data[14] = 0; + gSprites[task->data[10]].invisible = 1; + ++task->data[0]; + break; + case 1: + sub_80B92B8(task->data[11], task->data[14], task->data[15]); + ++task->data[0]; + break; + case 2: + task->data[2] = (task->data[2] + 6) & 0x7F; + if (++task->data[4] > 2) + { + task->data[4] = 0; + ++task->data[3]; + } + task->data[5] = task->data[3] + (gSineTable[task->data[2]] >> 4); + if (task->data[11] == 1) + gBattle_BG1_Y = task->data[13] - task->data[5]; + else + gBattle_BG2_Y = task->data[13] - task->data[5]; + + if (task->data[5] > 63) + { + task->data[5] = 120 - task->data[14]; + if (task->data[11] == 1) + gBattle_BG1_Y = task->data[13] - task->data[5]; + else + gBattle_BG2_Y = task->data[13] - task->data[5]; + + gSprites[task->data[10]].pos2.x = 272 - gSprites[task->data[10]].pos1.x; + ++task->data[0]; + } + break; + case 3: + gScanlineEffect.state = 3; + ++task->data[0]; + break; + case 4: + DestroyAnimVisualTask(taskId); + gSprites[task->data[10]].invisible = 1; + break; + } +} + +static void sub_80B908C(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(0); + + gSprites[spriteId].invisible = 1; + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) + gBattle_BG1_Y = 0; + else + gBattle_BG2_Y = 0; + DestroyAnimVisualTask(taskId); +} + +void sub_80B90EC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[0] == 0) + task->func = sub_80B912C; + else + task->func = sub_80B91B0; + + task->func(taskId); +} + +static void sub_80B912C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[10] = GetAnimBattlerSpriteId(0); + gSprites[task->data[10]].invisible = 0; + gSprites[task->data[10]].pos2.x = 0; + gSprites[task->data[10]].pos2.y = 160 - gSprites[task->data[10]].pos1.y; + ++task->data[0]; + break; + case 1: + DestroyAnimVisualTask(taskId); + } +} + +static void sub_80B91B0(u8 taskId) +{ + u8 var0; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[10] = GetAnimBattlerSpriteId(0); + task->data[11] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); + if (task->data[11] == 1) + task->data[12] = gBattle_BG1_X; + else + task->data[12] = gBattle_BG2_X; + + var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker); + task->data[14] = var0 - 32; + task->data[15] = var0 + 32; + ++task->data[0]; + break; + case 1: + sub_80B92B8(task->data[11], 0, task->data[15]); + ++task->data[0]; + break; + case 2: + gSprites[task->data[10]].pos2.y = 96; + ++task->data[0]; + break; + case 3: + gSprites[task->data[10]].pos2.y -= 8; + if (gSprites[task->data[10]].pos2.y == 0) + { + gScanlineEffect.state = 3; + ++task->data[0]; + } + break; + case 4: + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80B92B8(u8 useBG1, s16 y, s16 endY) +{ + s16 bgX; + struct ScanlineEffectParams scanlineParams; + + if (useBG1 == 1) + { + bgX = gBattle_BG1_X; + scanlineParams.dmaDest = ®_BG1HOFS; + } + else + { + bgX = gBattle_BG2_X; + scanlineParams.dmaDest = ®_BG2HOFS; + } + if (y < 0) + y = 0; + while (y < endY) + { + gScanlineEffectRegBuffers[0][y] = bgX; + gScanlineEffectRegBuffers[1][y] = bgX; + ++y; + } + while (y < 160) + { + gScanlineEffectRegBuffers[0][y] = bgX + 240; + gScanlineEffectRegBuffers[1][y] = bgX + 240; + ++y; + } + scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + scanlineParams.initState = 1; + scanlineParams.unused9 = 0; + ScanlineEffect_SetParams(scanlineParams); +} + +// Moves a particle of dirt in a plume of dirt. Used in Fissure and Dig. +// arg 0: which mon (0 = attacker, 1 = target) +// arg 1: which side of mon (0 = left, 1 = right) +// arg 2: target x offset +// arg 3: target y offset +// arg 4: wave amplitude +// arg 5: duration +static void AnimFissureDirtPlumeParticle(struct Sprite *sprite) +{ + s8 battler; + s16 xOffset; + + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + xOffset = 24; + if (gBattleAnimArgs[1] == 1) + { + xOffset *= -1; + gBattleAnimArgs[2] *= -1; + } + sprite->pos1.x = GetBattlerSpriteCoord(battler, 2) + xOffset; + sprite->pos1.y = GetBattlerYCoordWithElevation(battler) + 30; + sprite->data[0] = gBattleAnimArgs[5]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[4]; + InitAnimArcTranslation(sprite); + sprite->callback = AnimFissureDirtPlumeParticleStep; +} + +static void AnimFissureDirtPlumeParticleStep(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + DestroyAnimSprite(sprite); +} + +// Displays the dirt mound seen in the move Dig for set duration. +// The dirt mound image is too large for a single sprite, so two +// sprites are lined up next to each other. +// arg 0: which mon (0 = attacker, 1 = target) +// arg 1: oam tile num (0 = left half of image, 1 = right half of image) +// arg 2: duration +static void AnimDigDirtMound(struct Sprite *sprite) +{ + s8 battler; + + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + sprite->pos1.x = GetBattlerSpriteCoord(battler, 0) - 16 + (gBattleAnimArgs[1] * 32); + sprite->pos1.y = GetBattlerYCoordWithElevation(battler) + 32; + sprite->oam.tileNum += gBattleAnimArgs[1] * 8; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->callback = WaitAnimForDuration; +} + +void sub_80B94B4(u8 taskId) +{ + u16 i; + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[1]) + task->data[14] = task->data[15] = gBattleAnimArgs[1] + 3; + else + task->data[14] = task->data[15] = (gAnimMovePower / 10) + 3; + + task->data[3] = gBattleAnimArgs[2]; + switch (gBattleAnimArgs[0]) + { + case 5: + task->data[13] = gBattle_BG3_X; + task->func = sub_80B9584; + break; + case 4: + task->data[13] = 0; + for (i = 0; i < MAX_BATTLERS_COUNT; ++i) + { + if (IsBattlerSpriteVisible(i)) + { + task->data[task->data[13] + 9] = gBattlerSpriteIds[i]; + ++task->data[13]; + } + } + task->func = sub_80B967C; + break; + default: + task->data[9] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + if (task->data[9] == 0xFF) + { + DestroyAnimVisualTask(taskId); + } + else + { + task->data[13] = 1; + task->func = sub_80B967C; + } + + break; + } +} + +static void sub_80B9584(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 1) + { + task->data[1] = 0; + if ((task->data[2] & 1) == 0) + gBattle_BG3_X = task->data[13] + task->data[15]; + else + gBattle_BG3_X = task->data[13] - task->data[15]; + + if (++task->data[2] == task->data[3]) + { + task->data[2] = 0; + --task->data[14]; + ++task->data[0]; + } + } + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + if ((task->data[2] & 1) == 0) + gBattle_BG3_X = task->data[13] + task->data[14]; + else + gBattle_BG3_X = task->data[13] - task->data[14]; + + if (++task->data[2] == 4) + { + task->data[2] = 0; + if (--task->data[14] == 0) + ++task->data[0]; + } + } + break; + case 2: + gBattle_BG3_X = task->data[13]; + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80B967C(u8 taskId) +{ + u16 i; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 1) + { + task->data[1] = 0; + sub_80B9760(task); + if (++task->data[2] == task->data[3]) + { + task->data[2] = 0; + --task->data[14]; + ++task->data[0]; + } + } + break; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + sub_80B9760(task); + if (++task->data[2] == 4) + { + task->data[2] = 0; + if (--task->data[14] == 0) + ++task->data[0]; + } + } + break; + case 2: + for (i = 0; i < task->data[13]; ++i) + gSprites[task->data[9 + i]].pos2.x = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80B9760(struct Task *task) +{ + u16 i, xOffset; + + if ((task->data[2] & 1) == 0) + xOffset = (task->data[14] / 2) + (task->data[14] & 1); + else + xOffset = -(task->data[14] / 2); + for (i = 0; i < task->data[13]; ++i) + gSprites[task->data[9 + i]].pos2.x = xOffset; +} + +void AnimTask_IsPowerOver99(u8 taskId) +{ + gBattleAnimArgs[15] = gAnimMovePower > 99; + DestroyAnimVisualTask(taskId); +} + +void sub_80B9800(u8 taskId) +{ + struct Task *newTask; + u8 battler = (gBattleAnimArgs[0] & 1) ? gBattleAnimTarget : gBattleAnimAttacker; + + if (gBattleAnimArgs[0] > 1) + battler ^= BIT_FLANK; + newTask = &gTasks[CreateTask(sub_80B98A8, gBattleAnimArgs[1])]; + newTask->data[1] = (32 - GetBattlerSpriteCoord(battler, 2)) & 0x1FF; + newTask->data[2] = (64 - GetBattlerSpriteCoord(battler, 3)) & 0xFF; + gBattle_BG3_X = newTask->data[1]; + gBattle_BG3_Y = newTask->data[2]; + newTask->data[3] = gBattleAnimArgs[2]; + DestroyAnimVisualTask(taskId); +} + +static void sub_80B98A8(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[7] == task->data[3]) + { + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + DestroyTask(taskId); + } + else + { + gBattle_BG3_X = task->data[1]; + gBattle_BG3_Y = task->data[2]; + } +} From 90e9bbffa6f8ea1b2456e184b02bd05fd2ba92c2 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 7 Oct 2019 02:09:21 +0800 Subject: [PATCH 06/25] normal --- asm/fighting.s | 4 +- asm/normal.s | 1978 ----------------------------------------- data/data_835B488.s | 14 - include/battle_anim.h | 14 +- ld_script.txt | 4 +- src/ground.c | 8 +- src/normal.c | 916 +++++++++++++++++++ 7 files changed, 937 insertions(+), 2001 deletions(-) delete mode 100644 asm/normal.s create mode 100644 src/normal.c diff --git a/asm/fighting.s b/asm/fighting.s index e9bf5ece8..89168ced6 100644 --- a/asm/fighting.s +++ b/asm/fighting.s @@ -267,7 +267,7 @@ _080B0A9C: mov r1, r9 ldrh r0, [r1, 0x2] strh r0, [r5, 0x2E] - ldr r0, _080B0B1C @ =gUnknown_83E7C08 + ldr r0, _080B0B1C @ =gBasicHitSplatSpriteTemplate movs r2, 0x20 ldrsh r1, [r5, r2] movs r3, 0x22 @@ -315,7 +315,7 @@ _080B0B00: _080B0B10: .4byte gBattleAnimTarget _080B0B14: .4byte gBattlerPositions _080B0B18: .4byte 0xfff00000 -_080B0B1C: .4byte gUnknown_83E7C08 +_080B0B1C: .4byte gBasicHitSplatSpriteTemplate _080B0B20: .4byte gSprites _080B0B24: .4byte SpriteCallbackDummy _080B0B28: .4byte sub_80B0B2C diff --git a/asm/normal.s b/asm/normal.s deleted file mode 100644 index 418c32e1d..000000000 --- a/asm/normal.s +++ /dev/null @@ -1,1978 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80B9904 -sub_80B9904: @ 80B9904 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080B993C @ =gBattleAnimArgs - ldrh r0, [r5] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x2E] - ldr r0, _080B9940 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _080B9944 - ldrh r0, [r5, 0x6] - negs r0, r0 - strh r0, [r4, 0x30] - movs r0, 0x1 - strh r0, [r4, 0x36] - b _080B9952 - .align 2, 0 -_080B993C: .4byte gBattleAnimArgs -_080B9940: .4byte gBattleAnimAttacker -_080B9944: - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x30] - strh r1, [r4, 0x36] - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim -_080B9952: - ldr r0, _080B9968 @ =gBattleAnimArgs - ldrh r0, [r0, 0x8] - strh r0, [r4, 0x34] - ldr r1, _080B996C @ =sub_80B9970 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B9968: .4byte gBattleAnimArgs -_080B996C: .4byte sub_80B9970 - thumb_func_end sub_80B9904 - - thumb_func_start sub_80B9970 -sub_80B9970: @ 80B9970 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r1, 0x1E - bl Cos - strh r0, [r4, 0x24] - movs r2, 0x2E - ldrsh r0, [r4, r2] - movs r1, 0xA - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x2E] - cmp r0, 0x7F - bhi _080B99A2 - ldrb r0, [r4, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r4, 0x5] - b _080B99AA -_080B99A2: - ldrb r0, [r4, 0x5] - movs r1, 0xC - orrs r0, r1 - strb r0, [r4, 0x5] -_080B99AA: - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x2E] - adds r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x34 - ldrsh r1, [r4, r2] - cmp r0, r1 - bne _080B99CE - adds r0, r4, 0 - bl DestroyAnimSprite -_080B99CE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B9970 - - thumb_func_start sub_80B99D4 -sub_80B99D4: @ 80B99D4 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - ldr r4, _080B9A0C @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r4, r1] - bl UnpackSelectedBattleAnimPalettes - movs r1, 0x2 - ldrsb r1, [r4, r1] - ldrb r2, [r4, 0x4] - ldrb r3, [r4, 0x6] - ldrh r4, [r4, 0x8] - str r4, [sp] - bl BeginNormalPaletteFade - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080B9A10 @ =sub_80B9A5C - str r0, [r5, 0x1C] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B9A0C: .4byte gBattleAnimArgs -_080B9A10: .4byte sub_80B9A5C - thumb_func_end sub_80B99D4 - - thumb_func_start UnpackSelectedBattleAnimPalettes -UnpackSelectedBattleAnimPalettes: @ 80B9A14 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - lsls r0, 16 - lsrs r0, 16 - movs r4, 0x1 - mov r8, r0 - mov r1, r8 - ands r1, r4 - mov r8, r1 - lsls r0, 16 - asrs r1, r0, 17 - ands r1, r4 - asrs r2, r0, 18 - ands r2, r4 - asrs r3, r0, 19 - ands r3, r4 - asrs r6, r0, 20 - ands r6, r4 - asrs r5, r0, 21 - ands r5, r4 - asrs r0, 22 - ands r0, r4 - str r6, [sp] - str r5, [sp, 0x4] - str r0, [sp, 0x8] - mov r0, r8 - bl sub_8075BE8 - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end UnpackSelectedBattleAnimPalettes - - thumb_func_start sub_80B9A5C -sub_80B9A5C: @ 80B9A5C - push {lr} - adds r2, r0, 0 - ldr r0, _080B9A78 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080B9A72 - adds r0, r2, 0 - bl DestroyAnimSprite -_080B9A72: - pop {r0} - bx r0 - .align 2, 0 -_080B9A78: .4byte gPaletteFade - thumb_func_end sub_80B9A5C - - thumb_func_start sub_80B9A7C -sub_80B9A7C: @ 80B9A7C - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B9AC8 @ =gBattleAnimArgs - ldrh r0, [r4, 0x2] - strh r0, [r5, 0x2E] - strh r0, [r5, 0x30] - ldrh r0, [r4, 0x4] - strh r0, [r5, 0x32] - ldrh r0, [r4, 0x6] - strh r0, [r5, 0x34] - ldrh r0, [r4, 0x8] - strh r0, [r5, 0x36] - ldrh r0, [r4, 0xA] - strh r0, [r5, 0x38] - ldrh r0, [r4, 0xC] - strh r0, [r5, 0x3A] - ldrh r0, [r4] - strh r0, [r5, 0x3C] - movs r1, 0x3C - ldrsh r0, [r5, r1] - bl UnpackSelectedBattleAnimPalettes - ldrb r1, [r4, 0x8] - ldrh r2, [r4, 0x6] - bl BlendPalettes - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080B9ACC @ =sub_80B9AD0 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B9AC8: .4byte gBattleAnimArgs -_080B9ACC: .4byte sub_80B9AD0 - thumb_func_end sub_80B9A7C - - thumb_func_start sub_80B9AD0 -sub_80B9AD0: @ 80B9AD0 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x2E] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080B9AE4 - subs r0, r1, 0x1 - strh r0, [r4, 0x2E] - b _080B9B54 -_080B9AE4: - ldr r0, _080B9B00 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080B9B54 - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B9B08 - ldr r0, _080B9B04 @ =sub_80B9B5C - str r0, [r4, 0x1C] - b _080B9B54 - .align 2, 0 -_080B9B00: .4byte gPaletteFade -_080B9B04: .4byte sub_80B9B5C -_080B9B08: - movs r2, 0x3C - ldrsh r0, [r4, r2] - bl UnpackSelectedBattleAnimPalettes - adds r3, r0, 0 - ldrh r1, [r4, 0x30] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _080B9B2E - ldrh r1, [r4, 0x36] - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r4, 0x34] - adds r0, r3, 0 - bl BlendPalettes - b _080B9B3C -_080B9B2E: - ldrh r1, [r4, 0x3A] - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r4, 0x38] - adds r0, r3, 0 - bl BlendPalettes -_080B9B3C: - ldrh r0, [r4, 0x30] - movs r2, 0x80 - lsls r2, 1 - adds r1, r2, 0 - eors r0, r1 - strh r0, [r4, 0x30] - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x32] - subs r0, 0x1 - strh r0, [r4, 0x32] -_080B9B54: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B9AD0 - - thumb_func_start sub_80B9B5C -sub_80B9B5C: @ 80B9B5C - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080B9B88 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080B9B82 - movs r1, 0x3C - ldrsh r0, [r4, r1] - bl UnpackSelectedBattleAnimPalettes - movs r1, 0 - movs r2, 0 - bl BlendPalettes - adds r0, r4, 0 - bl DestroyAnimSprite -_080B9B82: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B9B88: .4byte gPaletteFade - thumb_func_end sub_80B9B5C - - thumb_func_start sub_80B9B8C -sub_80B9B8C: @ 80B9B8C - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080B9BD0 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - movs r2, 0 - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - strh r2, [r4, 0x2E] - movs r0, 0xA - strh r0, [r4, 0x30] - movs r0, 0x8 - strh r0, [r4, 0x32] - movs r0, 0x28 - strh r0, [r4, 0x34] - movs r0, 0x70 - strh r0, [r4, 0x36] - strh r2, [r4, 0x38] - ldr r1, _080B9BD4 @ =DestroySpriteAndMatrix - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r1, _080B9BD8 @ =TranslateSpriteInGrowingCircleOverDuration - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B9BD0: .4byte gBattleAnimArgs -_080B9BD4: .4byte DestroySpriteAndMatrix -_080B9BD8: .4byte TranslateSpriteInGrowingCircleOverDuration - thumb_func_end sub_80B9B8C - - thumb_func_start sub_80B9BDC -sub_80B9BDC: @ 80B9BDC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080B9C20 @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - ldr r3, _080B9C24 @ =gBattleAnimArgs - ldrh r1, [r3] - movs r5, 0 - strh r1, [r4, 0x8] - ldrh r1, [r3, 0x2] - strh r1, [r4, 0xA] - ldrh r1, [r3, 0x4] - strh r1, [r4, 0xC] - ldrh r1, [r3, 0x6] - strh r1, [r4, 0xE] - ldrh r2, [r3, 0x8] - strh r2, [r4, 0x10] - ldrh r1, [r3, 0xA] - strh r1, [r4, 0x12] - strh r5, [r4, 0x18] - lsls r2, 24 - lsrs r2, 24 - movs r1, 0 - bl sub_80B9C2C - ldr r0, _080B9C28 @ =sub_80B9C7C - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B9C20: .4byte gTasks -_080B9C24: .4byte gBattleAnimArgs -_080B9C28: .4byte sub_80B9C7C - thumb_func_end sub_80B9BDC - - thumb_func_start sub_80B9C2C -sub_80B9C2C: @ 80B9C2C - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - ldr r1, _080B9C78 @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - bl UnpackSelectedBattleAnimPalettes - movs r1, 0xA - ldrsb r1, [r4, r1] - ldrh r2, [r4, 0x12] - str r2, [sp] - adds r2, r5, 0 - adds r3, r6, 0 - bl BeginNormalPaletteFade - ldrh r0, [r4, 0xC] - subs r0, 0x1 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x18] - movs r1, 0x1 - eors r0, r1 - strh r0, [r4, 0x18] - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B9C78: .4byte gTasks - thumb_func_end sub_80B9C2C - - thumb_func_start sub_80B9C7C -sub_80B9C7C: @ 80B9C7C - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - adds r4, r3, 0 - ldr r0, _080B9CB4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080B9CDE - ldr r1, _080B9CB8 @ =gTasks - lsls r2, r3, 2 - adds r0, r2, r3 - lsls r0, 3 - adds r3, r0, r1 - movs r5, 0xC - ldrsh r0, [r3, r5] - adds r6, r1, 0 - adds r5, r2, 0 - cmp r0, 0 - ble _080B9CD8 - movs r1, 0x18 - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _080B9CBC - ldrb r1, [r3, 0xE] - ldrb r2, [r3, 0x10] - b _080B9CC0 - .align 2, 0 -_080B9CB4: .4byte gPaletteFade -_080B9CB8: .4byte gTasks -_080B9CBC: - ldrb r1, [r3, 0x10] - ldrb r2, [r3, 0xE] -_080B9CC0: - adds r0, r5, r4 - lsls r0, 3 - adds r0, r6 - movs r3, 0xC - ldrsh r0, [r0, r3] - cmp r0, 0x1 - bne _080B9CD0 - movs r2, 0 -_080B9CD0: - adds r0, r4, 0 - bl sub_80B9C2C - b _080B9CDE -_080B9CD8: - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080B9CDE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80B9C7C - - thumb_func_start sub_80B9CE4 -sub_80B9CE4: @ 80B9CE4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r6, r0, 24 - movs r5, 0 - ldr r3, _080B9D88 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r3 - ldr r2, _080B9D8C @ =gBattleAnimArgs - ldrh r1, [r2] - strh r1, [r0, 0x8] - ldrh r1, [r2, 0x2] - strh r1, [r0, 0xA] - ldrh r1, [r2, 0x4] - strh r1, [r0, 0xC] - ldrh r1, [r2, 0x6] - strh r1, [r0, 0xE] - ldrh r1, [r2, 0x8] - strh r1, [r0, 0x10] - ldrh r1, [r2, 0xA] - strh r1, [r0, 0x12] - strh r5, [r0, 0x18] - movs r4, 0 - ldr r0, _080B9D90 @ =gBattlersCount - ldrb r1, [r0] - mov r9, r3 - mov r8, r2 - cmp r5, r1 - bge _080B9D4C - ldr r0, _080B9D94 @ =gBattleAnimAttacker - ldrb r3, [r0] - ldr r7, _080B9D98 @ =gBattleAnimTarget - movs r0, 0x1 - mov r12, r0 - adds r2, r1, 0 -_080B9D32: - cmp r4, r3 - beq _080B9D46 - ldrb r1, [r7] - cmp r4, r1 - beq _080B9D46 - adds r1, r4, 0 - adds r1, 0x10 - mov r0, r12 - lsls r0, r1 - orrs r5, r0 -_080B9D46: - adds r4, 0x1 - cmp r4, r2 - blt _080B9D32 -_080B9D4C: - mov r2, r8 - movs r1, 0 - ldrsh r0, [r2, r1] - cmp r0, 0x1 - bne _080B9D5A - movs r0, 0xE - orrs r5, r0 -_080B9D5A: - lsls r4, r6, 2 - adds r4, r6 - lsls r4, 3 - add r4, r9 - lsrs r0, r5, 16 - strh r0, [r4, 0x1A] - movs r0, 0xFF - ands r5, r0 - strh r5, [r4, 0x1C] - ldrb r2, [r4, 0x10] - adds r0, r6, 0 - movs r1, 0 - bl sub_80B9DA0 - ldr r0, _080B9D9C @ =sub_80B9DF0 - str r0, [r4] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B9D88: .4byte gTasks -_080B9D8C: .4byte gBattleAnimArgs -_080B9D90: .4byte gBattlersCount -_080B9D94: .4byte gBattleAnimAttacker -_080B9D98: .4byte gBattleAnimTarget -_080B9D9C: .4byte sub_80B9DF0 - thumb_func_end sub_80B9CE4 - - thumb_func_start sub_80B9DA0 -sub_80B9DA0: @ 80B9DA0 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r1, 0 - adds r3, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r5, 24 - lsrs r5, 24 - lsls r3, 24 - lsrs r3, 24 - ldr r1, _080B9DEC @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - ldrh r0, [r4, 0x1A] - lsls r0, 16 - ldrh r1, [r4, 0x1C] - orrs r0, r1 - movs r1, 0xA - ldrsb r1, [r4, r1] - ldrh r2, [r4, 0x12] - str r2, [sp] - adds r2, r5, 0 - bl BeginNormalPaletteFade - ldrh r0, [r4, 0xC] - subs r0, 0x1 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x18] - movs r1, 0x1 - eors r0, r1 - strh r0, [r4, 0x18] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B9DEC: .4byte gTasks - thumb_func_end sub_80B9DA0 - - thumb_func_start sub_80B9DF0 -sub_80B9DF0: @ 80B9DF0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - adds r4, r3, 0 - ldr r0, _080B9E28 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080B9E52 - ldr r1, _080B9E2C @ =gTasks - lsls r2, r3, 2 - adds r0, r2, r3 - lsls r0, 3 - adds r3, r0, r1 - movs r5, 0xC - ldrsh r0, [r3, r5] - adds r6, r1, 0 - adds r5, r2, 0 - cmp r0, 0 - ble _080B9E4C - movs r1, 0x18 - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _080B9E30 - ldrb r1, [r3, 0xE] - ldrb r2, [r3, 0x10] - b _080B9E34 - .align 2, 0 -_080B9E28: .4byte gPaletteFade -_080B9E2C: .4byte gTasks -_080B9E30: - ldrb r1, [r3, 0x10] - ldrb r2, [r3, 0xE] -_080B9E34: - adds r0, r5, r4 - lsls r0, 3 - adds r0, r6 - movs r3, 0xC - ldrsh r0, [r0, r3] - cmp r0, 0x1 - bne _080B9E44 - movs r2, 0 -_080B9E44: - adds r0, r4, 0 - bl sub_80B9DA0 - b _080B9E52 -_080B9E4C: - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080B9E52: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80B9DF0 - - thumb_func_start sub_80B9E58 -sub_80B9E58: @ 80B9E58 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080B9E9C @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - ldr r3, _080B9EA0 @ =gBattleAnimArgs - ldrh r1, [r3] - movs r5, 0 - strh r1, [r4, 0x8] - ldrh r1, [r3, 0x2] - strh r1, [r4, 0xA] - ldrh r1, [r3, 0x4] - strh r1, [r4, 0xC] - ldrh r1, [r3, 0x6] - strh r1, [r4, 0xE] - ldrh r2, [r3, 0x8] - strh r2, [r4, 0x10] - ldrh r1, [r3, 0xA] - strh r1, [r4, 0x12] - strh r5, [r4, 0x18] - lsls r2, 24 - lsrs r2, 24 - movs r1, 0 - bl sub_80B9EA8 - ldr r0, _080B9EA4 @ =sub_80B9F04 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B9E9C: .4byte gTasks -_080B9EA0: .4byte gBattleAnimArgs -_080B9EA4: .4byte sub_80B9F04 - thumb_func_end sub_80B9E58 - - thumb_func_start sub_80B9EA8 -sub_80B9EA8: @ 80B9EA8 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - ldr r1, _080B9F00 @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - ldrh r0, [r4, 0x8] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x10 - movs r2, 0x1 - lsls r2, r0 - movs r1, 0xA - ldrsb r1, [r4, r1] - ldrh r0, [r4, 0x12] - str r0, [sp] - adds r0, r2, 0 - adds r2, r5, 0 - adds r3, r6, 0 - bl BeginNormalPaletteFade - ldrh r0, [r4, 0xC] - subs r0, 0x1 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x18] - movs r1, 0x1 - eors r0, r1 - strh r0, [r4, 0x18] - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B9F00: .4byte gTasks - thumb_func_end sub_80B9EA8 - - thumb_func_start sub_80B9F04 -sub_80B9F04: @ 80B9F04 - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - adds r4, r3, 0 - ldr r0, _080B9F3C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080B9F66 - ldr r1, _080B9F40 @ =gTasks - lsls r2, r3, 2 - adds r0, r2, r3 - lsls r0, 3 - adds r3, r0, r1 - movs r5, 0xC - ldrsh r0, [r3, r5] - adds r6, r1, 0 - adds r5, r2, 0 - cmp r0, 0 - ble _080B9F60 - movs r1, 0x18 - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _080B9F44 - ldrb r1, [r3, 0xE] - ldrb r2, [r3, 0x10] - b _080B9F48 - .align 2, 0 -_080B9F3C: .4byte gPaletteFade -_080B9F40: .4byte gTasks -_080B9F44: - ldrb r1, [r3, 0x10] - ldrb r2, [r3, 0xE] -_080B9F48: - adds r0, r5, r4 - lsls r0, 3 - adds r0, r6 - movs r3, 0xC - ldrsh r0, [r0, r3] - cmp r0, 0x1 - bne _080B9F58 - movs r2, 0 -_080B9F58: - adds r0, r4, 0 - bl sub_80B9EA8 - b _080B9F66 -_080B9F60: - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080B9F66: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80B9F04 - - thumb_func_start sub_80B9F6C -sub_80B9F6C: @ 80B9F6C - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080B9FCC @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - ldr r5, _080B9FD0 @ =gBattleAnimArgs - ldrh r0, [r5, 0x2] - strh r0, [r4, 0x8] - ldrh r0, [r5, 0x2] - strh r0, [r4, 0xA] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0xC] - ldrh r0, [r5, 0x6] - strh r0, [r4, 0xE] - ldrh r0, [r5, 0x8] - strh r0, [r4, 0x10] - ldrh r0, [r5, 0xA] - strh r0, [r4, 0x12] - ldrh r0, [r5, 0xC] - strh r0, [r4, 0x14] - ldrh r0, [r5] - strh r0, [r4, 0x16] - ldrh r0, [r5] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x10 - movs r1, 0x1 - lsls r1, r0 - ldrb r3, [r5, 0x8] - ldrh r0, [r5, 0x6] - str r0, [sp] - adds r0, r1, 0 - movs r1, 0 - adds r2, r3, 0 - bl BeginNormalPaletteFade - ldr r0, _080B9FD4 @ =sub_80B9FD8 - str r0, [r4] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B9FCC: .4byte gTasks -_080B9FD0: .4byte gBattleAnimArgs -_080B9FD4: .4byte sub_80B9FD8 - thumb_func_end sub_80B9F6C - - thumb_func_start sub_80B9FD8 -sub_80B9FD8: @ 80B9FD8 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080B9FFC @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r1, [r4, 0x8] - movs r2, 0x8 - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080BA000 - subs r0, r1, 0x1 - strh r0, [r4, 0x8] - b _080BA084 - .align 2, 0 -_080B9FFC: .4byte gTasks -_080BA000: - ldr r0, _080BA01C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080BA084 - movs r3, 0xC - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _080BA024 - ldr r0, _080BA020 @ =sub_80BA090 - str r0, [r4] - b _080BA084 - .align 2, 0 -_080BA01C: .4byte gPaletteFade -_080BA020: .4byte sub_80BA090 -_080BA024: - ldrh r0, [r4, 0x16] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x10 - movs r2, 0x1 - lsls r2, r0 - ldrh r1, [r4, 0xA] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _080BA052 - ldrb r3, [r4, 0x10] - ldrh r0, [r4, 0xE] - str r0, [sp] - adds r0, r2, 0 - movs r1, 0 - adds r2, r3, 0 - bl BeginNormalPaletteFade - b _080BA062 -_080BA052: - ldrb r3, [r4, 0x14] - ldrh r0, [r4, 0x12] - str r0, [sp] - adds r0, r2, 0 - movs r1, 0 - adds r2, r3, 0 - bl BeginNormalPaletteFade -_080BA062: - ldr r0, _080BA08C @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0xA] - movs r3, 0x80 - lsls r3, 1 - adds r2, r3, 0 - eors r0, r2 - strh r0, [r1, 0xA] - movs r2, 0xFF - ands r0, r2 - strh r0, [r1, 0x8] - ldrh r0, [r1, 0xC] - subs r0, 0x1 - strh r0, [r1, 0xC] -_080BA084: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BA08C: .4byte gTasks - thumb_func_end sub_80B9FD8 - - thumb_func_start sub_80BA090 -sub_80BA090: @ 80BA090 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080BA0E0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080BA0D6 - ldr r1, _080BA0E4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrh r0, [r0, 0x16] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x10 - movs r1, 0x1 - lsls r1, r0 - str r5, [sp] - adds r0, r1, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl BeginNormalPaletteFade - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080BA0D6: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BA0E0: .4byte gPaletteFade -_080BA0E4: .4byte gTasks - thumb_func_end sub_80BA090 - - thumb_func_start sub_80BA0E8 -sub_80BA0E8: @ 80BA0E8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r2, 0 - ldr r0, _080BA160 @ =gBattleAnimAttacker - ldrb r6, [r0] - ldr r0, _080BA164 @ =gBattleAnimTarget - ldrb r7, [r0] - ldr r4, _080BA168 @ =gBattleAnimArgs - ldrh r1, [r4] - movs r5, 0x80 - lsls r5, 1 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _080BA122 - str r2, [sp] - str r2, [sp, 0x4] - str r2, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r3, 0 - bl sub_8075BE8 - adds r2, r0, 0 -_080BA122: - ldrh r1, [r4, 0x2] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _080BA134 - movs r0, 0x80 - lsls r0, 9 - lsls r0, r6 - orrs r2, r0 -_080BA134: - ldrh r1, [r4, 0x4] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _080BA146 - movs r0, 0x80 - lsls r0, 9 - lsls r0, r7 - orrs r2, r0 -_080BA146: - adds r0, r2, 0 - bl InvertPlttBuffer - mov r0, r8 - bl DestroyAnimVisualTask - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BA160: .4byte gBattleAnimAttacker -_080BA164: .4byte gBattleAnimTarget -_080BA168: .4byte gBattleAnimArgs - thumb_func_end sub_80BA0E8 - - thumb_func_start sub_80BA16C -sub_80BA16C: @ 80BA16C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r5, 0 - ldr r1, _080BA260 @ =gTasks - lsls r0, 2 - add r0, r8 - lsls r0, 3 - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080BA1AE - ldr r1, _080BA264 @ =gBattleAnimArgs - ldrh r0, [r1] - strh r0, [r4, 0xC] - ldrh r0, [r1, 0x2] - strh r0, [r4, 0xE] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x10] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0xA] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x12] - ldrh r0, [r1, 0xA] - strh r0, [r4, 0x14] - ldrh r0, [r1, 0xC] - strh r0, [r4, 0x16] -_080BA1AE: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldr r0, _080BA268 @ =gBattleAnimAttacker - ldrb r0, [r0] - mov r9, r0 - ldr r0, _080BA26C @ =gBattleAnimTarget - ldrb r0, [r0] - mov r10, r0 - ldrh r1, [r4, 0xC] - movs r7, 0x80 - lsls r7, 1 - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _080BA1D0 - ldr r5, _080BA270 @ =0x0000ffff -_080BA1D0: - movs r6, 0x1 - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - beq _080BA200 - ldr r2, _080BA274 @ =gSprites - ldr r0, _080BA278 @ =gHealthboxSpriteIds - add r0, r9 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x14 - adds r0, r2 - ldr r0, [r0] - ldrh r0, [r0, 0x2] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - adds r1, r6, 0 - lsls r1, r0 - lsls r1, 16 - orrs r5, r1 -_080BA200: - ldrh r1, [r4, 0xE] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _080BA214 - adds r0, r6, 0 - mov r2, r9 - lsls r0, r2 - lsls r0, 16 - orrs r5, r0 -_080BA214: - ldrh r1, [r4, 0x10] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _080BA228 - adds r0, r6, 0 - mov r1, r10 - lsls r0, r1 - lsls r0, 16 - orrs r5, r0 -_080BA228: - movs r1, 0x12 - ldrsb r1, [r4, r1] - movs r2, 0x14 - ldrsb r2, [r4, r2] - movs r3, 0x16 - ldrsb r3, [r4, r3] - adds r0, r5, 0 - bl TintPlttBuffer - movs r2, 0x8 - ldrsh r1, [r4, r2] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _080BA252 - adds r0, r5, 0 - bl UnfadePlttBuffer - mov r0, r8 - bl DestroyAnimVisualTask -_080BA252: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BA260: .4byte gTasks -_080BA264: .4byte gBattleAnimArgs -_080BA268: .4byte gBattleAnimAttacker -_080BA26C: .4byte gBattleAnimTarget -_080BA270: .4byte 0x0000ffff -_080BA274: .4byte gSprites -_080BA278: .4byte gHealthboxSpriteIds - thumb_func_end sub_80BA16C - - thumb_func_start sub_80BA27C -sub_80BA27C: @ 80BA27C - push {r4,lr} - adds r4, r0, 0 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r1, _080BA2B0 @ =gBattleAnimArgs - ldrh r0, [r1] - negs r0, r0 - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x30] - strh r0, [r4, 0x32] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x34] - movs r2, 0x6 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - beq _080BA2C4 - cmp r0, 0x1 - bgt _080BA2B4 - cmp r0, 0 - beq _080BA2BA - b _080BA2DC - .align 2, 0 -_080BA2B0: .4byte gBattleAnimArgs -_080BA2B4: - cmp r0, 0x2 - beq _080BA2CC - b _080BA2DC -_080BA2BA: - ldr r1, _080BA2C0 @ =gBattle_BG3_X - b _080BA2CE - .align 2, 0 -_080BA2C0: .4byte gBattle_BG3_X -_080BA2C4: - ldr r1, _080BA2C8 @ =gBattle_BG3_Y - b _080BA2CE - .align 2, 0 -_080BA2C8: .4byte gBattle_BG3_Y -_080BA2CC: - ldr r1, _080BA2D8 @ =gSpriteCoordOffsetX -_080BA2CE: - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - b _080BA2E4 - .align 2, 0 -_080BA2D8: .4byte gSpriteCoordOffsetX -_080BA2DC: - ldr r1, _080BA314 @ =gSpriteCoordOffsetY - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 -_080BA2E4: - movs r0, 0x3A - ldrsh r1, [r4, r0] - movs r2, 0x3C - ldrsh r0, [r4, r2] - lsls r0, 16 - orrs r1, r0 - ldrh r0, [r1] - strh r0, [r4, 0x36] - ldr r0, _080BA318 @ =gBattleAnimArgs - ldrh r0, [r0, 0x6] - strh r0, [r4, 0x38] - subs r0, 0x2 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _080BA308 - bl sub_80BA3CC -_080BA308: - ldr r0, _080BA31C @ =sub_80BA320 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BA314: .4byte gSpriteCoordOffsetY -_080BA318: .4byte gBattleAnimArgs -_080BA31C: .4byte sub_80BA320 - thumb_func_end sub_80BA27C - - thumb_func_start sub_80BA320 -sub_80BA320: @ 80BA320 - push {r4-r7,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x34] - movs r2, 0x34 - ldrsh r0, [r3, r2] - cmp r0, 0 - ble _080BA362 - subs r0, r1, 0x1 - strh r0, [r3, 0x34] - ldrh r1, [r3, 0x30] - movs r2, 0x30 - ldrsh r0, [r3, r2] - cmp r0, 0 - ble _080BA342 - subs r0, r1, 0x1 - strh r0, [r3, 0x30] - b _080BA3BA -_080BA342: - ldrh r0, [r3, 0x32] - strh r0, [r3, 0x30] - movs r0, 0x3A - ldrsh r1, [r3, r0] - movs r2, 0x3C - ldrsh r0, [r3, r2] - lsls r0, 16 - orrs r1, r0 - ldrh r0, [r3, 0x2E] - ldrh r2, [r1] - adds r0, r2 - strh r0, [r1] - ldrh r0, [r3, 0x2E] - negs r0, r0 - strh r0, [r3, 0x2E] - b _080BA3BA -_080BA362: - movs r0, 0x3A - ldrsh r1, [r3, r0] - movs r2, 0x3C - ldrsh r0, [r3, r2] - lsls r0, 16 - orrs r1, r0 - ldrh r0, [r3, 0x36] - strh r0, [r1] - ldrh r0, [r3, 0x38] - subs r0, 0x2 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _080BA3B4 - movs r4, 0 - ldr r5, _080BA3C0 @ =gBattlersCount - ldrb r0, [r5] - cmp r4, r0 - bcs _080BA3B4 - ldr r2, _080BA3C4 @ =gSprites - mov r12, r2 - ldr r6, _080BA3C8 @ =gBattlerSpriteIds - movs r7, 0x3 - negs r7, r7 -_080BA392: - adds r0, r4, r6 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r12 - adds r1, 0x3E - ldrb r2, [r1] - adds r0, r7, 0 - ands r0, r2 - strb r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r0, [r5] - cmp r4, r0 - bcc _080BA392 -_080BA3B4: - adds r0, r3, 0 - bl DestroyAnimSprite -_080BA3BA: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BA3C0: .4byte gBattlersCount -_080BA3C4: .4byte gSprites -_080BA3C8: .4byte gBattlerSpriteIds - thumb_func_end sub_80BA320 - - thumb_func_start sub_80BA3CC -sub_80BA3CC: @ 80BA3CC - push {r4-r6,lr} - ldr r6, _080BA440 @ =gSprites - ldr r4, _080BA444 @ =gBattlerSpriteIds - ldr r5, _080BA448 @ =gBattleAnimAttacker - ldrb r0, [r5] - adds r0, r4 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - adds r1, 0x3E - ldrb r3, [r1] - movs r2, 0x3 - negs r2, r2 - adds r0, r2, 0 - ands r0, r3 - strb r0, [r1] - ldr r3, _080BA44C @ =gBattleAnimTarget - ldrb r0, [r3] - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - adds r0, 0x3E - ldrb r1, [r0] - ands r2, r1 - strb r2, [r0] - ldr r0, _080BA450 @ =gBattleAnimArgs - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, 0x2 - bne _080BA454 - ldrb r0, [r5] - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x2 - orrs r1, r2 - strb r1, [r0] - ldrb r0, [r3] - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - adds r0, 0x3E - ldrb r1, [r0] - b _080BA470 - .align 2, 0 -_080BA440: .4byte gSprites -_080BA444: .4byte gBattlerSpriteIds -_080BA448: .4byte gBattleAnimAttacker -_080BA44C: .4byte gBattleAnimTarget -_080BA450: .4byte gBattleAnimArgs -_080BA454: - cmp r0, 0 - bne _080BA45C - ldrb r0, [r5] - b _080BA45E -_080BA45C: - ldrb r0, [r3] -_080BA45E: - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x2 -_080BA470: - orrs r1, r2 - strb r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80BA3CC - - thumb_func_start sub_80BA47C -sub_80BA47C: @ 80BA47C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080BA4BC @ =gTasks - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 3 - adds r2, r1 - ldr r3, _080BA4C0 @ =gBattleAnimArgs - ldrh r1, [r3] - strh r1, [r2, 0x8] - ldrh r1, [r3, 0x2] - strh r1, [r2, 0xA] - ldrh r1, [r3, 0x4] - strh r1, [r2, 0xC] - ldrh r1, [r3, 0x6] - strh r1, [r2, 0xE] - ldrh r1, [r3, 0x6] - strh r1, [r2, 0x18] - ldr r4, _080BA4C4 @ =gBattle_BG3_X - ldrh r1, [r3] - strh r1, [r4] - ldr r4, _080BA4C8 @ =gBattle_BG3_Y - ldrh r1, [r3, 0x2] - strh r1, [r4] - ldr r1, _080BA4CC @ =sub_80BA4D0 - str r1, [r2] - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BA4BC: .4byte gTasks -_080BA4C0: .4byte gBattleAnimArgs -_080BA4C4: .4byte gBattle_BG3_X -_080BA4C8: .4byte gBattle_BG3_Y -_080BA4CC: .4byte sub_80BA4D0 - thumb_func_end sub_80BA47C - - thumb_func_start sub_80BA4D0 -sub_80BA4D0: @ 80BA4D0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080BA500 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r3, r0, r1 - ldrh r2, [r3, 0xE] - movs r4, 0xE - ldrsh r0, [r3, r4] - mov r12, r1 - cmp r0, 0 - bne _080BA556 - ldr r0, _080BA504 @ =gBattle_BG3_X - ldrh r2, [r0] - movs r7, 0x8 - ldrsh r1, [r3, r7] - adds r6, r0, 0 - cmp r2, r1 - bne _080BA508 - ldrh r0, [r3, 0x8] - negs r0, r0 - b _080BA50A - .align 2, 0 -_080BA500: .4byte gTasks -_080BA504: .4byte gBattle_BG3_X -_080BA508: - ldrh r0, [r3, 0x8] -_080BA50A: - strh r0, [r6] - ldr r2, _080BA528 @ =gBattle_BG3_Y - ldrh r3, [r2] - lsls r1, r5, 2 - adds r0, r1, r5 - lsls r0, 3 - mov r7, r12 - adds r4, r0, r7 - movs r7, 0xA - ldrsh r0, [r4, r7] - cmn r3, r0 - bne _080BA52C - movs r0, 0 - b _080BA530 - .align 2, 0 -_080BA528: .4byte gBattle_BG3_Y -_080BA52C: - ldrh r0, [r4, 0xA] - negs r0, r0 -_080BA530: - strh r0, [r2] - adds r0, r1, r5 - lsls r0, 3 - add r0, r12 - ldrh r1, [r0, 0x18] - strh r1, [r0, 0xE] - ldrh r1, [r0, 0xC] - subs r1, 0x1 - strh r1, [r0, 0xC] - lsls r1, 16 - asrs r1, 16 - cmp r1, 0 - bne _080BA55A - strh r1, [r6] - strh r1, [r2] - adds r0, r5, 0 - bl DestroyAnimVisualTask - b _080BA55A -_080BA556: - subs r0, r2, 0x1 - strh r0, [r3, 0xE] -_080BA55A: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80BA4D0 - - thumb_func_start sub_80BA560 -sub_80BA560: @ 80BA560 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080BA580 @ =gBattleAnimArgs - ldrb r1, [r4, 0x6] - bl StartSpriteAffineAnim - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080BA584 - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - b _080BA58C - .align 2, 0 -_080BA580: .4byte gBattleAnimArgs -_080BA584: - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget -_080BA58C: - ldr r0, _080BA5A0 @ =RunStoredCallbackWhenAffineAnimEnds - str r0, [r5, 0x1C] - ldr r1, _080BA5A4 @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BA5A0: .4byte RunStoredCallbackWhenAffineAnimEnds -_080BA5A4: .4byte DestroyAnimSprite - thumb_func_end sub_80BA560 - - thumb_func_start sub_80BA5A8 -sub_80BA5A8: @ 80BA5A8 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080BA5C8 @ =gBattleAnimArgs - ldrb r1, [r4, 0x6] - bl StartSpriteAffineAnim - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080BA5CC - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - b _080BA5D4 - .align 2, 0 -_080BA5C8: .4byte gBattleAnimArgs -_080BA5CC: - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget -_080BA5D4: - ldr r0, _080BA5EC @ =gBattleAnimArgs - ldrh r0, [r0, 0x8] - strh r0, [r5, 0x2E] - ldr r0, _080BA5F0 @ =RunStoredCallbackWhenAffineAnimEnds - str r0, [r5, 0x1C] - ldr r1, _080BA5F4 @ =sub_80B1D3C - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BA5EC: .4byte gBattleAnimArgs -_080BA5F0: .4byte RunStoredCallbackWhenAffineAnimEnds -_080BA5F4: .4byte sub_80B1D3C - thumb_func_end sub_80BA5A8 - - thumb_func_start sub_80BA5F8 -sub_80BA5F8: @ 80BA5F8 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080BA628 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080BA61C - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080BA61C - ldr r1, _080BA62C @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - negs r0, r0 - strh r0, [r1, 0x2] -_080BA61C: - adds r0, r4, 0 - bl sub_80BA560 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BA628: .4byte gBattleAnimAttacker -_080BA62C: .4byte gBattleAnimArgs - thumb_func_end sub_80BA5F8 - - thumb_func_start sub_80BA630 -sub_80BA630: @ 80BA630 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080BA668 @ =gBattleAnimArgs - movs r0, 0x2 - ldrsh r1, [r5, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080BA64C - bl Random - movs r1, 0x3 - ands r1, r0 - strh r1, [r5, 0x2] -_080BA64C: - ldrb r1, [r5, 0x2] - adds r0, r4, 0 - bl StartSpriteAffineAnim - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080BA66C - adds r0, r4, 0 - movs r1, 0 - bl InitSpritePosToAnimAttacker - b _080BA674 - .align 2, 0 -_080BA668: .4byte gBattleAnimArgs -_080BA66C: - adds r0, r4, 0 - movs r1, 0 - bl InitSpritePosToAnimTarget -_080BA674: - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x30 - bl __umodsi3 - ldr r1, _080BA6B8 @ =0x0000ffe8 - adds r0, r1 - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x18 - bl __umodsi3 - ldr r1, _080BA6BC @ =0x0000fff4 - adds r0, r1 - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldr r1, _080BA6C0 @ =DestroySpriteAndMatrix - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080BA6C4 @ =RunStoredCallbackWhenAffineAnimEnds - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BA6B8: .4byte 0x0000ffe8 -_080BA6BC: .4byte 0x0000fff4 -_080BA6C0: .4byte DestroySpriteAndMatrix -_080BA6C4: .4byte RunStoredCallbackWhenAffineAnimEnds - thumb_func_end sub_80BA630 - - thumb_func_start sub_80BA6C8 -sub_80BA6C8: @ 80BA6C8 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080BA728 @ =gBattleAnimArgs - ldrb r0, [r5] - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x2E] - ldr r2, _080BA72C @ =gSprites - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x24] - ldrh r0, [r0, 0x20] - adds r1, r0 - strh r1, [r4, 0x20] - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - ldrh r0, [r0, 0x22] - adds r1, r0 - strh r1, [r4, 0x22] - ldrh r0, [r5, 0x2] - strh r0, [r4, 0x24] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x26] - ldrb r1, [r5, 0x6] - adds r0, r4, 0 - bl StartSpriteAffineAnim - ldr r1, _080BA730 @ =DestroySpriteAndMatrix - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080BA734 @ =RunStoredCallbackWhenAffineAnimEnds - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BA728: .4byte gBattleAnimArgs -_080BA72C: .4byte gSprites -_080BA730: .4byte DestroySpriteAndMatrix -_080BA734: .4byte RunStoredCallbackWhenAffineAnimEnds - thumb_func_end sub_80BA6C8 - - thumb_func_start sub_80BA738 -sub_80BA738: @ 80BA738 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080BA750 @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080BA754 - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - b _080BA75C - .align 2, 0 -_080BA750: .4byte gBattleAnimArgs -_080BA754: - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget -_080BA75C: - ldr r0, _080BA774 @ =gBattleAnimArgs - ldrh r0, [r0, 0x6] - strh r0, [r4, 0x2E] - ldr r1, _080BA778 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080BA77C @ =WaitAnimForDuration - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080BA774: .4byte gBattleAnimArgs -_080BA778: .4byte DestroyAnimSprite -_080BA77C: .4byte WaitAnimForDuration - thumb_func_end sub_80BA738 - - thumb_func_start sub_80BA780 -sub_80BA780: @ 80BA780 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080BA7A0 @ =gBattleAnimArgs - ldrb r1, [r4, 0x6] - bl StartSpriteAffineAnim - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080BA7A4 - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - b _080BA7AC - .align 2, 0 -_080BA7A0: .4byte gBattleAnimArgs -_080BA7A4: - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget -_080BA7AC: - ldr r0, _080BA7B8 @ =sub_80BA7BC - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080BA7B8: .4byte sub_80BA7BC - thumb_func_end sub_80BA780 - - thumb_func_start sub_80BA7BC -sub_80BA7BC: @ 80BA7BC - push {lr} - adds r3, r0, 0 - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - ldrh r0, [r3, 0x2E] - adds r1, r0, 0x1 - strh r1, [r3, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - ble _080BA7F2 - adds r0, r3, 0 - bl DestroyAnimSprite -_080BA7F2: - pop {r0} - bx r0 - thumb_func_end sub_80BA7BC - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_835B488.s b/data/data_835B488.s index 7ac2159a0..3635065c7 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -932,20 +932,6 @@ gUnknown_83E7668:: @ 83E7668 gUnknown_83E76E0:: @ 83E76E0 .incbin "baserom.gba", 0x3E76E0, 0x320 - .section .rodata.83E7ADC - -gUnknown_83E7ADC:: @ 83E7ADC - .incbin "baserom.gba", 0x3E7ADC, 0x12C - -gUnknown_83E7C08:: @ 83E7C08 - .incbin "baserom.gba", 0x3E7C08, 0x30 - -gUnknown_83E7C38:: @ 83E7C38 - .incbin "baserom.gba", 0x3E7C38, 0x60 - -gUnknown_83E7C98:: @ 83E7C98 - .incbin "baserom.gba", 0x3E7C98, 0x30 - .section .rodata.83E7CFC gUnknown_83E7CFC:: @ 83E7CFC diff --git a/include/battle_anim.h b/include/battle_anim.h index b3e97ff56..fb9f0e53d 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -62,6 +62,9 @@ extern struct OamData gOamData_83AC9C8; extern struct OamData gOamData_83ACA38; extern struct OamData gOamData_83AC9D0; extern struct OamData gOamData_83AC9F8; +extern struct OamData gOamData_83AC9D8; +extern struct OamData gOamData_83ACB58; +extern struct OamData gOamData_83ACAF8; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); @@ -262,8 +265,14 @@ void sub_8099980(u8 taskId); void sub_8099A78(u8 taskId); void sub_8099BD4(u8 taskId); -// normal.s +// normal.c u32 UnpackSelectedBattleAnimPalettes(s16 selector); +void sub_80B9BDC(u8 taskId); +void sub_80B9CE4(u8 taskId); +void sub_80B9E58(u8 taskId); +void sub_80B9F6C(u8 taskId); +void sub_80BA0E8(u8 taskId); +void sub_80BA47C(u8 taskId); // ground.c void sub_80B8E94(u8 taskId); @@ -272,6 +281,9 @@ void sub_80B94B4(u8 taskId); void AnimTask_IsPowerOver99(u8 taskId); void sub_80B9800(u8 taskId); +// flying.c +void sub_80B1D3C(struct Sprite *sprite); + // battle_anim_utility_funcs.c void sub_80BA7F8(u8 taskId); void sub_80BA83C(u8 taskId); diff --git a/ld_script.txt b/ld_script.txt index fb93afc4f..833bcf390 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -169,7 +169,7 @@ SECTIONS { asm/dragon.o(.text); asm/dark.o(.text); src/ground.o(.text); - asm/normal.o(.text); + src/normal.o(.text); src/battle_anim_utility_funcs.o(.text); src/battle_intro.o(.text); asm/bike.o(.text); @@ -423,7 +423,7 @@ SECTIONS { src/item.o(.rodata); data/data_835B488.o(.rodata.83DF09C); src/ground.o(.rodata); - data/data_835B488.o(.rodata.83E7ADC); + src/normal.o(.rodata); src/battle_anim_utility_funcs.o(.rodata); src/battle_intro.o(.rodata); data/data_835B488.o(.rodata.83E7CFC); diff --git a/src/ground.c b/src/ground.c index 4e2a7bcf9..4ae4d8370 100644 --- a/src/ground.c +++ b/src/ground.c @@ -315,7 +315,7 @@ static void sub_80B8ED4(u8 taskId) task->data[15] = var0 + 32; if (task->data[14] < 0) task->data[14] = 0; - gSprites[task->data[10]].invisible = 1; + gSprites[task->data[10]].invisible = TRUE; ++task->data[0]; break; case 1: @@ -353,7 +353,7 @@ static void sub_80B8ED4(u8 taskId) break; case 4: DestroyAnimVisualTask(taskId); - gSprites[task->data[10]].invisible = 1; + gSprites[task->data[10]].invisible = TRUE; break; } } @@ -362,7 +362,7 @@ static void sub_80B908C(u8 taskId) { u8 spriteId = GetAnimBattlerSpriteId(0); - gSprites[spriteId].invisible = 1; + gSprites[spriteId].invisible = TRUE; gSprites[spriteId].pos2.x = 0; gSprites[spriteId].pos2.y = 0; if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) @@ -392,7 +392,7 @@ static void sub_80B912C(u8 taskId) { case 0: task->data[10] = GetAnimBattlerSpriteId(0); - gSprites[task->data[10]].invisible = 0; + gSprites[task->data[10]].invisible = FALSE; gSprites[task->data[10]].pos2.x = 0; gSprites[task->data[10]].pos2.y = 160 - gSprites[task->data[10]].pos1.y; ++task->data[0]; diff --git a/src/normal.c b/src/normal.c new file mode 100644 index 000000000..4d86b55a6 --- /dev/null +++ b/src/normal.c @@ -0,0 +1,916 @@ +#include "global.h" +#include "battle_anim.h" +#include "palette.h" +#include "random.h" +#include "task.h" +#include "trig.h" + +static void AnimConfusionDuck(struct Sprite *sprite); +static void AnimSimplePaletteBlend(struct Sprite *sprite); +static void sub_80B9A7C(struct Sprite *sprite); +static void sub_80B9B8C(struct Sprite *sprite); +static void sub_80BA27C(struct Sprite *sprite); +static void sub_80BA560(struct Sprite *sprite); +static void sub_80BA5F8(struct Sprite *sprite); +static void sub_80BA630(struct Sprite *sprite); +static void sub_80BA6C8(struct Sprite *sprite); +static void sub_80BA738(struct Sprite *sprite); +static void sub_80BA780(struct Sprite *sprite); +static void sub_80BA5A8(struct Sprite *sprite); +static void AnimConfusionDuckStep(struct Sprite *sprite); +static void AnimSimplePaletteBlendStep(struct Sprite *sprite); +static void sub_80B9AD0(struct Sprite *sprite); +static void sub_80B9B5C(struct Sprite *sprite); +static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount); +static void sub_80B9C7C(u8 taskId); +static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount); +static void sub_80B9DF0(u8 taskId); +static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount); +static void sub_80B9F04(u8 taskId); +static void sub_80B9FD8(u8 taskId); +static void sub_80BA090(u8 taskId); +static void sub_80BA3CC(void); +static void sub_80BA320(struct Sprite *sprite); +static void sub_80BA4D0(u8 taskId); +static void sub_80BA7BC(struct Sprite *sprite); + + +static const union AnimCmd gUnknown_83E7ADC[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(8, 8), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd gUnknown_83E7AF0[] = +{ + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(8, 8), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E7B04[] = +{ + gUnknown_83E7ADC, + gUnknown_83E7AF0, +}; + +const struct SpriteTemplate gConfusionDuckSpriteTemplate = +{ + .tileTag = ANIM_TAG_DUCK, + .paletteTag = ANIM_TAG_DUCK, + .oam = &gOamData_83AC9D0, + .anims = gUnknown_83E7B04, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimConfusionDuck, +}; + +const struct SpriteTemplate gSimplePaletteBlendSpriteTemplate = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSimplePaletteBlend, +}; + +const struct SpriteTemplate gComplexPaletteBlendSpriteTemplate = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B9A7C, +}; + +static const union AnimCmd gUnknown_83E7B54[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E7B6C[] = +{ + gUnknown_83E7B54, +}; + +const struct SpriteTemplate gUnknown_83E7B70 = +{ + .tileTag = ANIM_TAG_SPARKLE_4, + .paletteTag = ANIM_TAG_SPARKLE_4, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E7B6C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B9B8C, +}; + +const struct SpriteTemplate gUnknown_83E7B88 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80BA27C, +}; + +static const union AffineAnimCmd gUnknown_83E7BA0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E7BB0[] = +{ + AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E7BC8[] = +{ + AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E7BE0[] = +{ + AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E7BF8[] = +{ + gUnknown_83E7BA0, + gUnknown_83E7BB0, + gUnknown_83E7BC8, + gUnknown_83E7BE0, +}; + +const struct SpriteTemplate gBasicHitSplatSpriteTemplate = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gOamData_83ACB58, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7BF8, + .callback = sub_80BA560, +}; + +const struct SpriteTemplate gUnknown_83E7C20 = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gOamData_83ACB58, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7BF8, + .callback = sub_80BA5F8, +}; + +const struct SpriteTemplate gUnknown_83E7C38 = +{ + .tileTag = ANIM_TAG_WATER_IMPACT, + .paletteTag = ANIM_TAG_WATER_IMPACT, + .oam = &gOamData_83ACB58, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7BF8, + .callback = sub_80BA560, +}; + +const struct SpriteTemplate gUnknown_83E7C50 = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gOamData_83ACB58, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7BF8, + .callback = sub_80BA630, +}; + +const struct SpriteTemplate gUnknown_83E7C68 = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gOamData_83ACB58, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7BF8, + .callback = sub_80BA6C8, +}; + +const struct SpriteTemplate gUnknown_83E7C80 = +{ + .tileTag = ANIM_TAG_CROSS_IMPACT, + .paletteTag = ANIM_TAG_CROSS_IMPACT, + .oam = &gOamData_83ACAF8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80BA738, +}; + +const struct SpriteTemplate gUnknown_83E7C98 = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gOamData_83ACA38, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7BF8, + .callback = sub_80BA780, +}; + +const struct SpriteTemplate gUnknown_83E7CB0 = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gOamData_83ACB58, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7BF8, + .callback = sub_80BA5A8, +}; + +// Moves a spinning duck around the mon's head. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: initial wave offset +// arg 3: wave period (higher means faster wave) +// arg 4: duration +static void AnimConfusionDuck(struct Sprite *sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->data[1] = -gBattleAnimArgs[3]; + sprite->data[4] = 1; + } + else + { + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[4] = 0; + StartSpriteAnim(sprite, 1); + } + sprite->data[3] = gBattleAnimArgs[4]; + sprite->callback = AnimConfusionDuckStep; + sprite->callback(sprite); +} + +static void AnimConfusionDuckStep(struct Sprite *sprite) +{ + sprite->pos2.x = Cos(sprite->data[0], 30); + sprite->pos2.y = Sin(sprite->data[0], 10); + if ((u16)sprite->data[0] < 128) + sprite->oam.priority = 1; + else + sprite->oam.priority = 3; + sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF; + if (++sprite->data[2] == sprite->data[3]) + DestroyAnimSprite(sprite); +} + +// Performs a simple color blend on a specified sprite. +// arg 0: palette selector +// arg 1: delay +// arg 2: start blend amount +// arg 3: end blend amount +// arg 4: blend color +static void AnimSimplePaletteBlend(struct Sprite *sprite) +{ + u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]); + + BeginNormalPaletteFade(selectedPalettes, gBattleAnimArgs[1], gBattleAnimArgs[2], gBattleAnimArgs[3], gBattleAnimArgs[4]); + sprite->invisible = TRUE; + sprite->callback = AnimSimplePaletteBlendStep; +} + +// Unpacks a bitfield and returns a bitmask of its selected palettes. +// Bits 0-6 of the selector parameter result in the following palettes being selected: +// 0: battle background palettes (BG palettes 1, 2, and 3) +// 1: gBattleAnimAttacker OBJ palette +// 2: gBattleAnimTarget OBJ palette +// 3: gBattleAnimAttacker partner OBJ palette +// 4: gBattleAnimTarget partner OBJ palette +// 5: BG palette 4 +// 6: BG palette 5 +u32 UnpackSelectedBattleAnimPalettes(s16 selector) +{ + u8 battleBackground = selector & 1; + u8 attacker = (selector >> 1) & 1; + u8 target = (selector >> 2) & 1; + u8 attackerPartner = (selector >> 3) & 1; + u8 targetPartner = (selector >> 4) & 1; + u8 arg5 = (selector >> 5) & 1; + u8 arg6 = (selector >> 6) & 1; + + return sub_8075BE8(battleBackground, attacker, target, attackerPartner, targetPartner, arg5, arg6); +} + +static void AnimSimplePaletteBlendStep(struct Sprite *sprite) +{ + if (!gPaletteFade.active) + DestroyAnimSprite(sprite); +} + +static void sub_80B9A7C(struct Sprite *sprite) +{ + u32 selectedPalettes; + + sprite->data[0] = gBattleAnimArgs[1]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->data[3] = gBattleAnimArgs[3]; + sprite->data[4] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + sprite->data[6] = gBattleAnimArgs[6]; + sprite->data[7] = gBattleAnimArgs[0]; + selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]); + BlendPalettes(selectedPalettes, gBattleAnimArgs[4], gBattleAnimArgs[3]); + sprite->invisible = TRUE; + sprite->callback = sub_80B9AD0; +} + +static void sub_80B9AD0(struct Sprite *sprite) +{ + u32 selectedPalettes; + + if (sprite->data[0] > 0) + { + --sprite->data[0]; + return; + } + if (gPaletteFade.active) + return; + if (sprite->data[2] == 0) + { + sprite->callback = sub_80B9B5C; + return; + } + selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]); + if (sprite->data[1] & 0x100) + BlendPalettes(selectedPalettes, sprite->data[4], sprite->data[3]); + else + BlendPalettes(selectedPalettes, sprite->data[6], sprite->data[5]); + sprite->data[1] ^= 0x100; + sprite->data[0] = sprite->data[1] & 0xFF; + --sprite->data[2]; +} + +static void sub_80B9B5C(struct Sprite *sprite) +{ + u32 selectedPalettes; + + if (!gPaletteFade.active) + { + selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]); + BlendPalettes(selectedPalettes, 0, 0); + DestroyAnimSprite(sprite); + } +} + +static void sub_80B9B8C(struct Sprite *sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = 0; + sprite->data[1] = 10; + sprite->data[2] = 8; + sprite->data[3] = 40; + sprite->data[4] = 112; + sprite->data[5] = 0; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteInGrowingCircleOverDuration; + sprite->callback(sprite); +} + +void sub_80B9BDC(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].data[5] = gBattleAnimArgs[5]; + gTasks[taskId].data[8] = 0; + sub_80B9C2C(taskId, 0, gTasks[taskId].data[4]); + gTasks[taskId].func = sub_80B9C7C; +} + +static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount) +{ + u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gTasks[taskId].data[0]); + + BeginNormalPaletteFade(selectedPalettes, + gTasks[taskId].data[1], + initialBlendAmount, + targetBlendAmount, + gTasks[taskId].data[5]); + --gTasks[taskId].data[2]; + gTasks[taskId].data[8] ^= 1; +} + +static void sub_80B9C7C(u8 taskId) +{ + u8 initialBlendAmount, targetBlendAmount; + + if (!gPaletteFade.active) + { + if (gTasks[taskId].data[2] > 0) + { + if (gTasks[taskId].data[8] == 0) + { + initialBlendAmount = gTasks[taskId].data[3]; + targetBlendAmount = gTasks[taskId].data[4]; + } + else + { + initialBlendAmount = gTasks[taskId].data[4]; + targetBlendAmount = gTasks[taskId].data[3]; + } + if (gTasks[taskId].data[2] == 1) + targetBlendAmount = 0; + sub_80B9C2C(taskId, initialBlendAmount, targetBlendAmount); + } + else + { + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_80B9CE4(u8 taskId) +{ + s32 battler; + u32 selectedPalettes = 0; + + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].data[5] = gBattleAnimArgs[5]; + gTasks[taskId].data[8] = 0; + for (battler = 0; battler < gBattlersCount; ++battler) + if (battler != gBattleAnimAttacker && battler != gBattleAnimTarget) + selectedPalettes |= 1 << (battler + 16); + if (gBattleAnimArgs[0] == 1) + selectedPalettes |= 0xE; + gTasks[taskId].data[9] = selectedPalettes >> 16; + gTasks[taskId].data[10] = selectedPalettes & 0xFF; + sub_80B9DA0(taskId, 0, gTasks[taskId].data[4]); + gTasks[taskId].func = sub_80B9DF0; +} + +static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount) +{ + u32 selectedPalettes = ((u16)gTasks[taskId].data[9] << 16) | (u16)gTasks[taskId].data[10]; + + BeginNormalPaletteFade(selectedPalettes, + gTasks[taskId].data[1], + initialBlendAmount, + targetBlendAmount, + gTasks[taskId].data[5]); + --gTasks[taskId].data[2]; + gTasks[taskId].data[8] ^= 1; +} + +static void sub_80B9DF0(u8 taskId) +{ + u8 initialBlendAmount, targetBlendAmount; + + if (!gPaletteFade.active) + { + if (gTasks[taskId].data[2] > 0) + { + if (gTasks[taskId].data[8] == 0) + { + initialBlendAmount = gTasks[taskId].data[3]; + targetBlendAmount = gTasks[taskId].data[4]; + } + else + { + initialBlendAmount = gTasks[taskId].data[4]; + targetBlendAmount = gTasks[taskId].data[3]; + } + + if (gTasks[taskId].data[2] == 1) + targetBlendAmount = 0; + sub_80B9DA0(taskId, initialBlendAmount, targetBlendAmount); + } + else + { + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_80B9E58(u8 taskId) +{ + u8 paletteIndex; + + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].data[5] = gBattleAnimArgs[5]; + gTasks[taskId].data[8] = 0; + sub_80B9EA8(taskId, 0, gTasks[taskId].data[4]); + gTasks[taskId].func = sub_80B9F04; +} + +static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount) +{ + u8 paletteIndex = IndexOfSpritePaletteTag(gTasks[taskId].data[0]); + + BeginNormalPaletteFade(1 << (paletteIndex + 16), + gTasks[taskId].data[1], + initialBlendAmount, + targetBlendAmount, + gTasks[taskId].data[5]); + --gTasks[taskId].data[2]; + gTasks[taskId].data[8] ^= 1; +} + +static void sub_80B9F04(u8 taskId) +{ + u8 initialBlendAmount, targetBlendAmount; + + if (!gPaletteFade.active) + { + if (gTasks[taskId].data[2] > 0) + { + if (gTasks[taskId].data[8] == 0) + { + initialBlendAmount = gTasks[taskId].data[3]; + targetBlendAmount = gTasks[taskId].data[4]; + } + else + { + initialBlendAmount = gTasks[taskId].data[4]; + targetBlendAmount = gTasks[taskId].data[3]; + } + + if (gTasks[taskId].data[2] == 1) + targetBlendAmount = 0; + sub_80B9EA8(taskId, initialBlendAmount, targetBlendAmount); + } + else + { + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_80B9F6C(u8 taskId) +{ + u8 paletteIndex; + + gTasks[taskId].data[0] = gBattleAnimArgs[1]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].data[5] = gBattleAnimArgs[5]; + gTasks[taskId].data[6] = gBattleAnimArgs[6]; + gTasks[taskId].data[7] = gBattleAnimArgs[0]; + paletteIndex = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); + BeginNormalPaletteFade(1 << (paletteIndex + 16), + 0, + gBattleAnimArgs[4], + gBattleAnimArgs[4], + gBattleAnimArgs[3]); + gTasks[taskId].func = sub_80B9FD8; +} + +static void sub_80B9FD8(u8 taskId) +{ + u32 selectedPalettes; + + if (gTasks[taskId].data[0] > 0) + { + --gTasks[taskId].data[0]; + return; + } + if (gPaletteFade.active) + return; + if (gTasks[taskId].data[2] == 0) + { + gTasks[taskId].func = sub_80BA090; + return; + } + selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16); + if (gTasks[taskId].data[1] & 0x100) + BeginNormalPaletteFade(selectedPalettes, + 0, + gTasks[taskId].data[4], + gTasks[taskId].data[4], + gTasks[taskId].data[3]); + else + BeginNormalPaletteFade(selectedPalettes, + 0, + gTasks[taskId].data[6], + gTasks[taskId].data[6], + gTasks[taskId].data[5]); + gTasks[taskId].data[1] ^= 0x100; + gTasks[taskId].data[0] = gTasks[taskId].data[1] & 0xFF; + --gTasks[taskId].data[2]; +} + +static void sub_80BA090(u8 taskId) +{ + u32 selectedPalettes; + + if (!gPaletteFade.active) + { + selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16); + BeginNormalPaletteFade(selectedPalettes, 0, 0, 0, RGB(0, 0, 0)); + DestroyAnimVisualTask(taskId); + } +} + +void sub_80BA0E8(u8 taskId) +{ + u32 selectedPalettes = 0; + u8 attackerBattler = gBattleAnimAttacker; + u8 targetBattler = gBattleAnimTarget; + + if (gBattleAnimArgs[0] & 0x100) + selectedPalettes = sub_8075BE8(1, 0, 0, 0, 0, 0, 0); + if (gBattleAnimArgs[1] & 0x100) + selectedPalettes |= (0x10000 << attackerBattler); + if (gBattleAnimArgs[2] & 0x100) + selectedPalettes |= (0x10000 << targetBattler); + InvertPlttBuffer(selectedPalettes); + DestroyAnimVisualTask(taskId); +} + +// not used +static void sub_80BA16C(u8 taskId) +{ + u8 attackerBattler; + u8 targetBattler; + u8 paletteIndex; + u32 selectedPalettes = 0; + + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[2] = gBattleAnimArgs[0]; + gTasks[taskId].data[3] = gBattleAnimArgs[1]; + gTasks[taskId].data[4] = gBattleAnimArgs[2]; + gTasks[taskId].data[1] = gBattleAnimArgs[3]; + gTasks[taskId].data[5] = gBattleAnimArgs[4]; + gTasks[taskId].data[6] = gBattleAnimArgs[5]; + gTasks[taskId].data[7] = gBattleAnimArgs[6]; + } + ++gTasks[taskId].data[0]; + attackerBattler = gBattleAnimAttacker; + targetBattler = gBattleAnimTarget; + if (gTasks[taskId].data[2] & 0x100) + selectedPalettes = 0x0000FFFF; + if (gTasks[taskId].data[2] & 0x1) + { + paletteIndex = IndexOfSpritePaletteTag(gSprites[gHealthboxSpriteIds[attackerBattler]].template->paletteTag); + selectedPalettes |= (1 << paletteIndex) << 16; + } + if (gTasks[taskId].data[3] & 0x100) + selectedPalettes |= (1 << attackerBattler) << 16; + if (gTasks[taskId].data[4] & 0x100) + selectedPalettes |= (1 << targetBattler) << 16; + TintPlttBuffer(selectedPalettes, gTasks[taskId].data[5], gTasks[taskId].data[6], gTasks[taskId].data[7]); + if (gTasks[taskId].data[0] == gTasks[taskId].data[1]) + { + UnfadePlttBuffer(selectedPalettes); + DestroyAnimVisualTask(taskId); + } +} + +static void sub_80BA27C(struct Sprite *sprite) +{ + u16 var0; + + sprite->invisible = TRUE; + sprite->data[0] = -gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[3] = gBattleAnimArgs[2]; + + switch (gBattleAnimArgs[3]) + { + case 0: + StoreSpriteCallbackInData6(sprite, (void *)&gBattle_BG3_X); + break; + case 1: + StoreSpriteCallbackInData6(sprite, (void *)&gBattle_BG3_Y); + break; + case 2: + StoreSpriteCallbackInData6(sprite, (void *)&gSpriteCoordOffsetX); + break; + default: + StoreSpriteCallbackInData6(sprite, (void *)&gSpriteCoordOffsetY); + break; + } + sprite->data[4] = *(u16 *)(sprite->data[6] | (sprite->data[7] << 16)); + sprite->data[5] = gBattleAnimArgs[3]; + var0 = sprite->data[5] - 2; + if (var0 < 2) + sub_80BA3CC(); + sprite->callback = sub_80BA320; +} + +static void sub_80BA320(struct Sprite *sprite) +{ + u8 i; + u16 var0; + + if (sprite->data[3] > 0) + { + --sprite->data[3]; + if (sprite->data[1] > 0) + { + --sprite->data[1]; + } + else + { + sprite->data[1] = sprite->data[2]; + *(u16 *)(sprite->data[6] | (sprite->data[7] << 16)) += sprite->data[0]; + sprite->data[0] = -sprite->data[0]; + } + } + else + { + *(u16 *)(sprite->data[6] | (sprite->data[7] << 16)) = sprite->data[4]; + var0 = sprite->data[5] - 2; + if (var0 < 2) + for (i = 0; i < gBattlersCount; ++i) + gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = 0; + DestroyAnimSprite(sprite); + } +} + +static void sub_80BA3CC(void) +{ + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 0; + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 0; + if (gBattleAnimArgs[4] == 2) + { + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1; + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1; + } + else + { + if (gBattleAnimArgs[4] == 0) + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1; + else + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1; + } +} + +void sub_80BA47C(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[8] = gBattleAnimArgs[3]; + gBattle_BG3_X = gBattleAnimArgs[0]; + gBattle_BG3_Y = gBattleAnimArgs[1]; + gTasks[taskId].func = sub_80BA4D0; + gTasks[taskId].func(taskId); +} + +static void sub_80BA4D0(u8 taskId) +{ + if (gTasks[taskId].data[3] == 0) + { + if (gBattle_BG3_X == gTasks[taskId].data[0]) + gBattle_BG3_X = -gTasks[taskId].data[0]; + else + gBattle_BG3_X = gTasks[taskId].data[0]; + + if (gBattle_BG3_Y == -gTasks[taskId].data[1]) + gBattle_BG3_Y = 0; + else + gBattle_BG3_Y = -gTasks[taskId].data[1]; + + gTasks[taskId].data[3] = gTasks[taskId].data[8]; + if (--gTasks[taskId].data[2] == 0) + { + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + DestroyAnimVisualTask(taskId); + } + } + else + { + --gTasks[taskId].data[3]; + } +} + +static void sub_80BA560(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); + if (gBattleAnimArgs[2] == 0) + InitSpritePosToAnimAttacker(sprite, 1); + else + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_80BA5A8(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); + if (gBattleAnimArgs[2] == 0) + InitSpritePosToAnimAttacker(sprite, 1); + else + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; + StoreSpriteCallbackInData6(sprite, sub_80B1D3C); +} + +static void sub_80BA5F8(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER && !IsContest()) + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + sub_80BA560(sprite); +} + +static void sub_80BA630(struct Sprite *sprite) +{ + if (gBattleAnimArgs[1] == -1) + gBattleAnimArgs[1] = Random() & 3; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]); + if (gBattleAnimArgs[0] == 0) + InitSpritePosToAnimAttacker(sprite, 0); + else + InitSpritePosToAnimTarget(sprite, FALSE); + sprite->pos2.x += (Random() % 48) - 24; + sprite->pos2.y += (Random() % 24) - 12; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; +} + +static void sub_80BA6C8(struct Sprite *sprite) +{ + sprite->data[0] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + sprite->pos1.x = gSprites[sprite->data[0]].pos1.x + gSprites[sprite->data[0]].pos2.x; + sprite->pos1.y = gSprites[sprite->data[0]].pos1.y + gSprites[sprite->data[0]].pos2.y; + sprite->pos2.x = gBattleAnimArgs[1]; + sprite->pos2.y = gBattleAnimArgs[2]; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; +} + +static void sub_80BA738(struct Sprite *sprite) +{ + if (gBattleAnimArgs[2] == 0) + InitSpritePosToAnimAttacker(sprite, 1); + else + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[3]; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = WaitAnimForDuration; +} + +static void sub_80BA780(struct Sprite *sprite) +{ + StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); + if (gBattleAnimArgs[2] == 0) + InitSpritePosToAnimAttacker(sprite, 1); + else + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->callback = sub_80BA7BC; +} + +static void sub_80BA7BC(struct Sprite *sprite) +{ + sprite->invisible ^= 1; + if (sprite->data[0]++ > 12) + DestroyAnimSprite(sprite); +} From 8c40cd5e5cf336a011728e132e7ead070270bb83 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 10 Oct 2019 07:42:34 +0800 Subject: [PATCH 07/25] dark --- asm/battle_anim.s | 14 +- asm/dark.s | 2323 -------------------------------- asm/psychic.s | 4 +- data/data_835B488.s | 2 +- data/graphics.s | 6 +- include/battle_anim.h | 18 +- include/graphics.h | 5 + ld_script.txt | 3 +- src/battle_controller_player.c | 2 +- src/dark.c | 921 +++++++++++++ 10 files changed, 958 insertions(+), 2340 deletions(-) delete mode 100644 asm/dark.s create mode 100644 src/dark.c diff --git a/asm/battle_anim.s b/asm/battle_anim.s index 2adbf9487..d5e389807 100644 --- a/asm/battle_anim.s +++ b/asm/battle_anim.s @@ -1007,7 +1007,7 @@ _08072C62: _08072C88: adds r0, r5, 0 adds r1, r7, 0 - bl sub_8072E48 + bl MoveBattlerSpriteToBG ldr r0, _08072CDC @ =gBattlerSpriteIds adds r0, r5, r0 ldrb r4, [r0] @@ -1091,7 +1091,7 @@ _08072D12: _08072D3E: adds r0, r5, 0 adds r1, r7, 0 - bl sub_8072E48 + bl MoveBattlerSpriteToBG ldr r0, _08072D9C @ =gBattlerSpriteIds adds r0, r5, r0 ldrb r4, [r0] @@ -1217,8 +1217,8 @@ _08072E42: bx r1 thumb_func_end IsBattlerSpriteVisible - thumb_func_start sub_8072E48 -sub_8072E48: @ 8072E48 + thumb_func_start MoveBattlerSpriteToBG +MoveBattlerSpriteToBG: @ 8072E48 push {r4-r7,lr} mov r7, r8 push {r7} @@ -1490,7 +1490,7 @@ _080730B0: .4byte gBattle_BG2_Y _080730B4: .4byte gPlttBufferUnfaded + 0x200 _080730B8: .4byte 0x05000120 _080730BC: .4byte 0x04000008 - thumb_func_end sub_8072E48 + thumb_func_end MoveBattlerSpriteToBG thumb_func_start sub_80730C0 sub_80730C0: @ 80730C0 @@ -1914,7 +1914,7 @@ _080733CE: movs r1, 0 _080733F4: adds r0, r4, 0 - bl sub_8072E48 + bl MoveBattlerSpriteToBG ldr r2, _08073478 @ =gSprites ldr r0, _0807347C @ =gBattlerSpriteIds adds r0, r4, r0 @@ -1952,7 +1952,7 @@ _08073416: movs r1, 0 _08073442: adds r0, r4, 0 - bl sub_8072E48 + bl MoveBattlerSpriteToBG ldr r2, _08073478 @ =gSprites ldr r0, _0807347C @ =gBattlerSpriteIds adds r0, r4, r0 diff --git a/asm/dark.s b/asm/dark.s deleted file mode 100644 index afadcebae..000000000 --- a/asm/dark.s +++ /dev/null @@ -1,2323 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80B78E0 -sub_80B78E0: @ 80B78E0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080B791C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080B7920 @ =gBattleAnimArgs - ldrh r1, [r1] - strh r1, [r0, 0x8] - ldr r1, _080B7924 @ =gBattleAnimAttacker - ldrb r4, [r1] - movs r1, 0x10 - strh r1, [r0, 0xA] - movs r0, 0x52 - bl SetGpuReg - adds r0, r4, 0 - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B792C - ldr r1, _080B7928 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - b _080B7934 - .align 2, 0 -_080B791C: .4byte gTasks -_080B7920: .4byte gBattleAnimArgs -_080B7924: .4byte gBattleAnimAttacker -_080B7928: .4byte 0x00003f42 -_080B792C: - ldr r1, _080B7948 @ =0x00003f44 - movs r0, 0x50 - bl SetGpuReg -_080B7934: - ldr r0, _080B794C @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080B7950 @ =sub_80B7954 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B7948: .4byte 0x00003f44 -_080B794C: .4byte gTasks -_080B7950: .4byte sub_80B7954 - thumb_func_end sub_80B78E0 - - thumb_func_start sub_80B7954 -sub_80B7954: @ 80B7954 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r1, _080B79C0 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r6, r0, r1 - ldrh r0, [r6, 0xA] - lsrs r4, r0, 8 - lsls r0, 24 - lsrs r1, r0, 24 - movs r2, 0xC - ldrsh r0, [r6, r2] - ldrb r2, [r6, 0x8] - cmp r0, r2 - bne _080B79D0 - adds r4, 0x1 - lsls r4, 24 - lsrs r4, 24 - subs r0, r1, 0x1 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r4, 8 - orrs r1, r0 - movs r5, 0 - strh r1, [r6, 0xA] - ldrh r1, [r6, 0xA] - movs r0, 0x52 - bl SetGpuReg - strh r5, [r6, 0xC] - cmp r4, 0x10 - bne _080B79D6 - ldr r2, _080B79C4 @ =gSprites - ldr r1, _080B79C8 @ =gBattlerSpriteIds - ldr r0, _080B79CC @ =gBattleAnimAttacker - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - adds r0, r7, 0 - bl DestroyAnimVisualTask - b _080B79D6 - .align 2, 0 -_080B79C0: .4byte gTasks -_080B79C4: .4byte gSprites -_080B79C8: .4byte gBattlerSpriteIds -_080B79CC: .4byte gBattleAnimAttacker -_080B79D0: - ldrh r0, [r6, 0xC] - adds r0, 0x1 - strh r0, [r6, 0xC] -_080B79D6: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80B7954 - - thumb_func_start sub_80B79DC -sub_80B79DC: @ 80B79DC - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080B7A08 @ =gTasks - lsls r2, r0, 2 - adds r2, r0 - lsls r2, 3 - adds r2, r1 - ldr r0, _080B7A0C @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r2, 0x8] - movs r1, 0x80 - lsls r1, 5 - strh r1, [r2, 0xA] - ldr r0, _080B7A10 @ =sub_80B7A14 - str r0, [r2] - movs r0, 0x52 - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_080B7A08: .4byte gTasks -_080B7A0C: .4byte gBattleAnimArgs -_080B7A10: .4byte sub_80B7A14 - thumb_func_end sub_80B79DC - - thumb_func_start sub_80B7A14 -sub_80B7A14: @ 80B7A14 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r1, _080B7A70 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r6, r0, r1 - ldrh r0, [r6, 0xA] - lsrs r4, r0, 8 - lsls r0, 24 - lsrs r1, r0, 24 - movs r2, 0xC - ldrsh r0, [r6, r2] - ldrb r2, [r6, 0x8] - cmp r0, r2 - bne _080B7A74 - subs r4, 0x1 - lsls r4, 24 - lsrs r4, 24 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r4, 8 - orrs r1, r0 - movs r5, 0 - strh r1, [r6, 0xA] - ldrh r1, [r6, 0xA] - movs r0, 0x52 - bl SetGpuReg - strh r5, [r6, 0xC] - cmp r4, 0 - bne _080B7A7A - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r7, 0 - bl DestroyAnimVisualTask - b _080B7A7A - .align 2, 0 -_080B7A70: .4byte gTasks -_080B7A74: - ldrh r0, [r6, 0xC] - adds r0, 0x1 - strh r0, [r6, 0xC] -_080B7A7A: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80B7A14 - - thumb_func_start sub_80B7A80 -sub_80B7A80: @ 80B7A80 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - ldr r0, _080B7AAC @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B7AB4 - ldr r1, _080B7AB0 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - b _080B7ABC - .align 2, 0 -_080B7AAC: .4byte gBattleAnimAttacker -_080B7AB0: .4byte 0x00003f42 -_080B7AB4: - ldr r1, _080B7AC8 @ =0x00003f44 - movs r0, 0x50 - bl SetGpuReg -_080B7ABC: - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B7AC8: .4byte 0x00003f44 - thumb_func_end sub_80B7A80 - - thumb_func_start sub_80B7ACC -sub_80B7ACC: @ 80B7ACC - push {r4-r6,lr} - adds r4, r0, 0 - ldr r6, _080B7B38 @ =gBattleAnimTarget - ldrb r0, [r6] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x30] - ldr r5, _080B7B3C @ =gBattleAnimAttacker - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrb r0, [r6] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x34] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - movs r0, 0x7E - strh r0, [r4, 0x2E] - adds r0, r4, 0 - bl InitSpriteDataForLinearTranslation - ldrh r0, [r4, 0x30] - negs r0, r0 - strh r0, [r4, 0x34] - ldrh r0, [r4, 0x32] - negs r0, r0 - strh r0, [r4, 0x36] - ldr r0, _080B7B40 @ =0x0000ffd8 - strh r0, [r4, 0x3A] - ldr r1, _080B7B44 @ =sub_80B7B48 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B7B38: .4byte gBattleAnimTarget -_080B7B3C: .4byte gBattleAnimAttacker -_080B7B40: .4byte 0x0000ffd8 -_080B7B44: .4byte sub_80B7B48 - thumb_func_end sub_80B7ACC - - thumb_func_start sub_80B7B48 -sub_80B7B48: @ 80B7B48 - push {r4-r6,lr} - adds r4, r0, 0 - ldrh r5, [r4, 0x30] - ldrh r0, [r4, 0x34] - adds r2, r5, r0 - strh r2, [r4, 0x34] - ldrh r3, [r4, 0x32] - ldrh r6, [r4, 0x36] - adds r1, r3, r6 - strh r1, [r4, 0x36] - lsls r0, r2, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - lsls r0, r1, 16 - asrs r0, 24 - strh r0, [r4, 0x26] - movs r6, 0x3C - ldrsh r0, [r4, r6] - cmp r0, 0 - bne _080B7B8A - adds r0, r2, r5 - strh r0, [r4, 0x34] - adds r1, r3 - strh r1, [r4, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r4, 0x24] - lsls r1, 16 - asrs r1, 24 - strh r1, [r4, 0x26] - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] -_080B7B8A: - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r2, 0x3A - ldrsh r1, [r4, r2] - bl Sin - ldrh r6, [r4, 0x26] - adds r0, r6 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x38] - adds r0, 0x3 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - cmp r0, 0x7F - ble _080B7BBA - movs r0, 0 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x3A] - adds r0, 0x14 - strh r0, [r4, 0x3A] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] -_080B7BBA: - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - cmp r0, 0 - bne _080B7BCC - adds r0, r4, 0 - bl DestroyAnimSprite -_080B7BCC: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80B7B48 - - thumb_func_start sub_80B7BD4 -sub_80B7BD4: @ 80B7BD4 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080B7C08 @ =gBattleAnimArgs - ldrh r0, [r5] - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldrb r1, [r5, 0x4] - adds r0, r4, 0 - bl StartSpriteAffineAnim - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x2E] - ldrh r0, [r5, 0x8] - strh r0, [r4, 0x30] - ldrh r0, [r5, 0xA] - strh r0, [r4, 0x32] - ldr r0, _080B7C0C @ =sub_80B7C10 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B7C08: .4byte gBattleAnimArgs -_080B7C0C: .4byte sub_80B7C10 - thumb_func_end sub_80B7BD4 - - thumb_func_start sub_80B7C10 -sub_80B7C10: @ 80B7C10 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - ldrh r1, [r2, 0x36] - adds r0, r1 - strh r0, [r2, 0x36] - ldrh r1, [r2, 0x30] - ldrh r3, [r2, 0x38] - adds r1, r3 - strh r1, [r2, 0x38] - lsls r0, 16 - asrs r0, 24 - strh r0, [r2, 0x24] - lsls r1, 16 - asrs r1, 24 - strh r1, [r2, 0x26] - ldrh r0, [r2, 0x34] - adds r0, 0x1 - strh r0, [r2, 0x34] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x32 - ldrsh r1, [r2, r3] - cmp r0, r1 - bne _080B7C46 - ldr r0, _080B7C4C @ =sub_80B7C50 - str r0, [r2, 0x1C] -_080B7C46: - pop {r0} - bx r0 - .align 2, 0 -_080B7C4C: .4byte sub_80B7C50 - thumb_func_end sub_80B7C10 - - thumb_func_start sub_80B7C50 -sub_80B7C50: @ 80B7C50 - push {lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x36] - ldrh r0, [r3, 0x2E] - subs r1, r0 - strh r1, [r3, 0x36] - ldrh r0, [r3, 0x38] - ldrh r2, [r3, 0x30] - subs r0, r2 - strh r0, [r3, 0x38] - lsls r1, 16 - asrs r1, 24 - strh r1, [r3, 0x24] - lsls r0, 16 - asrs r0, 24 - strh r0, [r3, 0x26] - ldrh r0, [r3, 0x34] - subs r0, 0x1 - strh r0, [r3, 0x34] - lsls r0, 16 - cmp r0, 0 - bne _080B7C82 - adds r0, r3, 0 - bl DestroySpriteAndMatrix -_080B7C82: - pop {r0} - bx r0 - thumb_func_end sub_80B7C50 - - thumb_func_start sub_80B7C88 -sub_80B7C88: @ 80B7C88 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r0, _080B7C9C @ =gBattleAnimArgs - movs r2, 0 - ldrsh r1, [r0, r2] - adds r3, r0, 0 - cmp r1, 0 - bne _080B7CA4 - ldr r0, _080B7CA0 @ =gBattleAnimAttacker - b _080B7CA6 - .align 2, 0 -_080B7C9C: .4byte gBattleAnimArgs -_080B7CA0: .4byte gBattleAnimAttacker -_080B7CA4: - ldr r0, _080B7CD4 @ =gBattleAnimTarget -_080B7CA6: - ldrb r5, [r0] - movs r6, 0x14 - ldrh r2, [r4, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, 0x4 - ldr r7, _080B7CD8 @ =0x000003ff - adds r0, r7, 0 - ands r1, r0 - ldr r0, _080B7CDC @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x4] - movs r1, 0x2 - ldrsh r0, [r3, r1] - cmp r0, 0x1 - beq _080B7D04 - cmp r0, 0x1 - bgt _080B7CE0 - cmp r0, 0 - beq _080B7CEA - b _080B7D58 - .align 2, 0 -_080B7CD4: .4byte gBattleAnimTarget -_080B7CD8: .4byte 0x000003ff -_080B7CDC: .4byte 0xfffffc00 -_080B7CE0: - cmp r0, 0x2 - beq _080B7D1E - cmp r0, 0x3 - beq _080B7D36 - b _080B7D58 -_080B7CEA: - adds r0, r5, 0 - movs r1, 0x5 - bl GetBattlerSpriteCoordAttr - subs r0, 0x8 - strh r0, [r4, 0x20] - adds r0, r5, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoordAttr - adds r0, 0x8 - strh r0, [r4, 0x22] - b _080B7D58 -_080B7D04: - adds r0, r5, 0 - movs r1, 0x5 - bl GetBattlerSpriteCoordAttr - subs r0, 0xE - strh r0, [r4, 0x20] - adds r0, r5, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoordAttr - adds r0, 0x10 - strh r0, [r4, 0x22] - b _080B7D58 -_080B7D1E: - adds r0, r5, 0 - movs r1, 0x4 - bl GetBattlerSpriteCoordAttr - adds r0, 0x8 - strh r0, [r4, 0x20] - adds r0, r5, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoordAttr - adds r0, 0x8 - b _080B7D4C -_080B7D36: - adds r0, r5, 0 - movs r1, 0x4 - bl GetBattlerSpriteCoordAttr - adds r0, 0xE - strh r0, [r4, 0x20] - adds r0, r5, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoordAttr - adds r0, 0x10 -_080B7D4C: - strh r0, [r4, 0x22] - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - movs r6, 0xEC -_080B7D58: - movs r0, 0x20 - strh r0, [r4, 0x2E] - lsls r0, r6, 24 - asrs r0, 24 - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x22] - adds r0, 0xC - strh r0, [r4, 0x36] - ldr r0, _080B7D80 @ =0x0000fff4 - strh r0, [r4, 0x38] - adds r0, r4, 0 - bl InitAnimArcTranslation - ldr r0, _080B7D84 @ =sub_80B7D88 - str r0, [r4, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B7D80: .4byte 0x0000fff4 -_080B7D84: .4byte sub_80B7D88 - thumb_func_end sub_80B7C88 - - thumb_func_start sub_80B7D88 -sub_80B7D88: @ 80B7D88 - push {r4,lr} - adds r4, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080B7D9C - adds r0, r4, 0 - bl DestroySpriteAndMatrix -_080B7D9C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B7D88 - - thumb_func_start sub_80B7DA4 -sub_80B7DA4: @ 80B7DA4 - push {r4-r7,lr} - sub sp, 0x1C - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080B7E08 @ =gTasks - adds r5, r1, r0 - ldr r4, _080B7E0C @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1F - movs r6, 0 - strh r0, [r5, 0x16] - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoordAttr - subs r0, 0x7 - strh r0, [r5, 0x14] - ldrh r1, [r5, 0x16] - strh r1, [r5, 0x12] - strh r0, [r5, 0x10] - subs r1, r0 - lsls r1, 8 - strh r1, [r5, 0x22] - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - subs r1, 0x20 - strh r1, [r5, 0x24] - adds r0, 0x20 - strh r0, [r5, 0x26] - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B7E14 - ldr r0, _080B7E10 @ =0x0000fff4 - b _080B7E16 - .align 2, 0 -_080B7E08: .4byte gTasks -_080B7E0C: .4byte gBattleAnimAttacker -_080B7E10: .4byte 0x0000fff4 -_080B7E14: - ldr r0, _080B7E60 @ =0x0000ffc0 -_080B7E16: - strh r0, [r5, 0x18] - ldr r0, _080B7E64 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0xE] - cmp r0, 0x1 - bne _080B7E78 - add r4, sp, 0xC - adds r0, r4, 0 - bl sub_80752A0 - ldr r0, _080B7E68 @ =gBattle_BG1_Y - ldrh r0, [r0] - strh r0, [r5, 0x1C] - ldr r1, _080B7E6C @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - ldrb r1, [r4, 0x8] - lsls r1, 4 - movs r0, 0 - movs r2, 0x20 - bl FillPalette - ldr r0, _080B7E70 @ =0x04000016 - str r0, [sp] - movs r7, 0x2 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B7EA8 - ldr r1, _080B7E74 @ =gBattle_BG2_X - b _080B7EA2 - .align 2, 0 -_080B7E60: .4byte 0x0000ffc0 -_080B7E64: .4byte gBattleAnimAttacker -_080B7E68: .4byte gBattle_BG1_Y -_080B7E6C: .4byte 0x00003f42 -_080B7E70: .4byte 0x04000016 -_080B7E74: .4byte gBattle_BG2_X -_080B7E78: - ldr r0, _080B7F30 @ =gBattle_BG2_Y - ldrh r0, [r0] - strh r0, [r5, 0x1C] - ldr r1, _080B7F34 @ =0x00003f44 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0 - movs r1, 0x90 - movs r2, 0x20 - bl FillPalette - ldr r0, _080B7F38 @ =0x0400001a - str r0, [sp] - movs r7, 0x4 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B7EA8 - ldr r1, _080B7F3C @ =gBattle_BG1_X -_080B7EA2: - ldrh r0, [r1] - adds r0, 0xF0 - strh r0, [r1] -_080B7EA8: - ldr r0, _080B7F40 @ =0xa2600001 - str r0, [sp, 0x4] - mov r2, sp - movs r1, 0 - movs r0, 0x1 - strb r0, [r2, 0x8] - mov r0, sp - strb r1, [r0, 0x9] - strh r1, [r5, 0x1E] - movs r0, 0x10 - strh r0, [r5, 0x20] - strh r1, [r5, 0x8] - strh r1, [r5, 0xA] - strh r1, [r5, 0xC] - movs r0, 0x3 - bl sub_80B856C - movs r3, 0 - ldr r4, _080B7F44 @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r6, r4, r0 -_080B7ED4: - lsls r1, r3, 1 - adds r2, r1, r4 - ldrh r0, [r5, 0x1C] - strh r0, [r2] - adds r1, r6 - ldrh r0, [r5, 0x1C] - strh r0, [r1] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x6F - bls _080B7ED4 - ldr r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - bl ScanlineEffect_SetParams - movs r0, 0x3F - eors r7, r0 - movs r1, 0xFC - lsls r1, 6 - adds r0, r1, 0 - orrs r7, r0 - movs r0, 0x4A - adds r1, r7, 0 - bl SetGpuReg - ldr r1, _080B7F48 @ =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - ldr r2, _080B7F4C @ =gBattle_WIN0H - ldrh r0, [r5, 0x24] - lsls r0, 8 - ldrh r1, [r5, 0x26] - orrs r0, r1 - strh r0, [r2] - ldr r1, _080B7F50 @ =gBattle_WIN0V - movs r0, 0xA0 - strh r0, [r1] - ldr r0, _080B7F54 @ =sub_80B7F58 - str r0, [r5] - add sp, 0x1C - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B7F30: .4byte gBattle_BG2_Y -_080B7F34: .4byte 0x00003f44 -_080B7F38: .4byte 0x0400001a -_080B7F3C: .4byte gBattle_BG1_X -_080B7F40: .4byte 0xa2600001 -_080B7F44: .4byte gScanlineEffectRegBuffers -_080B7F48: .4byte 0x00003f3f -_080B7F4C: .4byte gBattle_WIN0H -_080B7F50: .4byte gBattle_WIN0V -_080B7F54: .4byte sub_80B7F58 - thumb_func_end sub_80B7DA4 - - thumb_func_start sub_80B7F58 -sub_80B7F58: @ 80B7F58 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B7F7C @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bls _080B7F72 - b _080B806A -_080B7F72: - lsls r0, 2 - ldr r1, _080B7F80 @ =_080B7F84 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B7F7C: .4byte gTasks -_080B7F80: .4byte _080B7F84 - .align 2, 0 -_080B7F84: - .4byte _080B7F98 - .4byte _080B7FFA - .4byte _080B8014 - .4byte _080B8050 - .4byte _080B8064 -_080B7F98: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B806A - movs r0, 0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B7FC8 - ldrh r1, [r4, 0x1E] - movs r2, 0x1E - ldrsh r0, [r4, r2] - cmp r0, 0xC - beq _080B7FD6 - adds r0, r1, 0x1 - strh r0, [r4, 0x1E] - b _080B7FD6 -_080B7FC8: - ldrh r1, [r4, 0x20] - movs r2, 0x20 - ldrsh r0, [r4, r2] - cmp r0, 0x8 - beq _080B7FD6 - subs r0, r1, 0x1 - strh r0, [r4, 0x20] -_080B7FD6: - ldrh r1, [r4, 0x20] - lsls r1, 8 - ldrh r0, [r4, 0x1E] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r0, 0xC - bne _080B806A - movs r2, 0x20 - ldrsh r0, [r4, r2] - cmp r0, 0x8 - bne _080B806A - b _080B8056 -_080B7FFA: - ldrh r0, [r4, 0x10] - subs r0, 0x8 - strh r0, [r4, 0x10] - adds r0, r4, 0 - bl sub_80B843C - movs r0, 0x10 - ldrsh r1, [r4, r0] - movs r2, 0x18 - ldrsh r0, [r4, r2] - cmp r1, r0 - bge _080B806A - b _080B8056 -_080B8014: - ldrh r0, [r4, 0x10] - subs r0, 0x8 - strh r0, [r4, 0x10] - adds r0, r4, 0 - bl sub_80B843C - ldrh r1, [r4, 0x24] - adds r1, 0x4 - strh r1, [r4, 0x24] - ldrh r0, [r4, 0x26] - subs r2, r0, 0x4 - strh r2, [r4, 0x26] - lsls r1, 16 - lsls r0, r2, 16 - cmp r1, r0 - blt _080B8036 - strh r2, [r4, 0x24] -_080B8036: - ldr r3, _080B804C @ =gBattle_WIN0H - ldrh r2, [r4, 0x24] - lsls r0, r2, 8 - ldrh r1, [r4, 0x26] - orrs r0, r1 - strh r0, [r3] - lsls r2, 16 - lsls r1, 16 - cmp r2, r1 - bne _080B806A - b _080B8056 - .align 2, 0 -_080B804C: .4byte gBattle_WIN0H -_080B8050: - ldr r1, _080B8060 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] -_080B8056: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B806A - .align 2, 0 -_080B8060: .4byte gScanlineEffect -_080B8064: - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080B806A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B7F58 - - thumb_func_start sub_80B8070 -sub_80B8070: @ 80B8070 - push {r4-r7,lr} - sub sp, 0x1C - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _080B8098 @ =gTasks - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0x4 - bls _080B808C - b _080B829E -_080B808C: - lsls r0, 2 - ldr r1, _080B809C @ =_080B80A0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B8098: .4byte gTasks -_080B809C: .4byte _080B80A0 - .align 2, 0 -_080B80A0: - .4byte _080B80B4 - .4byte _080B8138 - .4byte _080B817C - .4byte _080B81E8 - .4byte _080B8250 -_080B80B4: - bl IsContest - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B80F0 - ldr r0, _080B80E4 @ =gBattle_WIN0H - movs r1, 0 - strh r1, [r0] - ldr r0, _080B80E8 @ =gBattle_WIN0V - strh r1, [r0] - ldr r4, _080B80EC @ =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - adds r0, r6, 0 - bl DestroyAnimVisualTask - b _080B829E - .align 2, 0 -_080B80E4: .4byte gBattle_WIN0H -_080B80E8: .4byte gBattle_WIN0V -_080B80EC: .4byte 0x00003f3f -_080B80F0: - ldr r0, _080B8110 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0xE] - cmp r0, 0x1 - bne _080B811C - ldr r1, _080B8114 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - ldr r1, _080B8118 @ =gBattle_BG2_X - b _080B8126 - .align 2, 0 -_080B8110: .4byte gBattleAnimTarget -_080B8114: .4byte 0x00003f42 -_080B8118: .4byte gBattle_BG2_X -_080B811C: - ldr r1, _080B8130 @ =0x00003f44 - movs r0, 0x50 - bl SetGpuReg - ldr r1, _080B8134 @ =gBattle_BG1_X -_080B8126: - ldrh r0, [r1] - adds r0, 0xF0 - strh r0, [r1] - b _080B823C - .align 2, 0 -_080B8130: .4byte 0x00003f44 -_080B8134: .4byte gBattle_BG1_X -_080B8138: - movs r1, 0xE - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _080B8160 - mov r0, sp - bl sub_80752A0 - ldr r0, _080B815C @ =gBattle_BG1_Y - ldrh r0, [r0] - strh r0, [r5, 0x1C] - mov r0, sp - ldrb r1, [r0, 0x8] - lsls r1, 4 - movs r0, 0 - movs r2, 0x20 - bl FillPalette - b _080B8170 - .align 2, 0 -_080B815C: .4byte gBattle_BG1_Y -_080B8160: - ldr r0, _080B8178 @ =gBattle_BG2_Y - ldrh r0, [r0] - strh r0, [r5, 0x1C] - movs r0, 0 - movs r1, 0x90 - movs r2, 0x20 - bl FillPalette -_080B8170: - movs r0, 0x3 - bl sub_80B856C - b _080B823C - .align 2, 0 -_080B8178: .4byte gBattle_BG2_Y -_080B817C: - ldr r4, _080B81C8 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1F - movs r6, 0 - strh r0, [r5, 0x16] - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoordAttr - subs r0, 0x7 - strh r0, [r5, 0x14] - ldrh r1, [r5, 0x16] - subs r1, r0 - lsls r1, 8 - strh r1, [r5, 0x22] - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - subs r1, r0, 0x4 - strh r1, [r5, 0x24] - adds r0, 0x4 - strh r0, [r5, 0x26] - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B81D0 - ldr r0, _080B81CC @ =0x0000fff4 - b _080B81D2 - .align 2, 0 -_080B81C8: .4byte gBattleAnimTarget -_080B81CC: .4byte 0x0000fff4 -_080B81D0: - ldr r0, _080B81E4 @ =0x0000ffc0 -_080B81D2: - strh r0, [r5, 0x18] - ldrh r0, [r5, 0x18] - strh r0, [r5, 0x10] - strh r0, [r5, 0x12] - movs r0, 0xC - strh r0, [r5, 0x1E] - movs r0, 0x8 - strh r0, [r5, 0x20] - b _080B823C - .align 2, 0 -_080B81E4: .4byte 0x0000ffc0 -_080B81E8: - movs r1, 0xE - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _080B81F8 - ldr r0, _080B81F4 @ =0x04000016 - b _080B81FA - .align 2, 0 -_080B81F4: .4byte 0x04000016 -_080B81F8: - ldr r0, _080B8244 @ =0x0400001a -_080B81FA: - str r0, [sp, 0x10] - movs r3, 0 - add r4, sp, 0x10 - ldr r6, _080B8248 @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r7, r6, r0 -_080B8208: - lsls r1, r3, 1 - adds r2, r1, r6 - ldrh r0, [r5, 0x1C] - adds r0, 0x9F - subs r0, r3 - strh r0, [r2] - adds r1, r7 - ldrh r0, [r5, 0x1C] - adds r0, 0x9F - subs r0, r3 - strh r0, [r1] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x6F - bls _080B8208 - ldr r1, _080B824C @ =0xa2600001 - str r1, [r4, 0x4] - movs r2, 0 - movs r0, 0x1 - strb r0, [r4, 0x8] - strb r2, [r4, 0x9] - ldr r0, [sp, 0x10] - ldr r2, [r4, 0x8] - bl ScanlineEffect_SetParams -_080B823C: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - b _080B829E - .align 2, 0 -_080B8244: .4byte 0x0400001a -_080B8248: .4byte gScanlineEffectRegBuffers -_080B824C: .4byte 0xa2600001 -_080B8250: - movs r1, 0xE - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _080B8268 - ldr r1, _080B8264 @ =0x00003f3d - movs r0, 0x4A - bl SetGpuReg - b _080B8270 - .align 2, 0 -_080B8264: .4byte 0x00003f3d -_080B8268: - ldr r1, _080B82A8 @ =0x00003f3b - movs r0, 0x4A - bl SetGpuReg -_080B8270: - ldr r1, _080B82AC @ =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - ldr r2, _080B82B0 @ =gBattle_WIN0H - ldrh r0, [r5, 0x24] - lsls r0, 8 - ldrh r1, [r5, 0x26] - orrs r0, r1 - strh r0, [r2] - ldr r1, _080B82B4 @ =gBattle_WIN0V - movs r0, 0xA0 - strh r0, [r1] - movs r0, 0 - strh r0, [r5, 0x8] - strh r0, [r5, 0xA] - strh r0, [r5, 0xC] - ldr r1, _080B82B8 @ =0x0000080c - movs r0, 0x52 - bl SetGpuReg - ldr r0, _080B82BC @ =sub_80B82C0 - str r0, [r5] -_080B829E: - add sp, 0x1C - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B82A8: .4byte 0x00003f3b -_080B82AC: .4byte 0x00003f3f -_080B82B0: .4byte gBattle_WIN0H -_080B82B4: .4byte gBattle_WIN0V -_080B82B8: .4byte 0x0000080c -_080B82BC: .4byte sub_80B82C0 - thumb_func_end sub_80B8070 - - thumb_func_start sub_80B82C0 -sub_80B82C0: @ 80B82C0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080B82E4 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bls _080B82DA - b _080B842A -_080B82DA: - lsls r0, 2 - ldr r1, _080B82E8 @ =_080B82EC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B82E4: .4byte gTasks -_080B82E8: .4byte _080B82EC - .align 2, 0 -_080B82EC: - .4byte _080B8300 - .4byte _080B832C - .4byte _080B8394 - .4byte _080B83F6 - .4byte _080B8408 -_080B8300: - ldrh r0, [r4, 0x12] - adds r0, 0x8 - strh r0, [r4, 0x12] - lsls r0, 16 - asrs r0, 16 - ldrh r2, [r4, 0x16] - movs r3, 0x16 - ldrsh r1, [r4, r3] - cmp r0, r1 - blt _080B8316 - strh r2, [r4, 0x12] -_080B8316: - adds r0, r4, 0 - bl sub_80B843C - movs r0, 0x12 - ldrsh r1, [r4, r0] - movs r2, 0x16 - ldrsh r0, [r4, r2] - cmp r1, r0 - beq _080B832A - b _080B842A -_080B832A: - b _080B83FC -_080B832C: - movs r3, 0x26 - ldrsh r0, [r4, r3] - movs r2, 0x24 - ldrsh r1, [r4, r2] - subs r0, r1 - cmp r0, 0x3F - bgt _080B8348 - ldrh r0, [r4, 0x24] - subs r0, 0x4 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x26] - adds r0, 0x4 - strh r0, [r4, 0x26] - b _080B834C -_080B8348: - movs r0, 0x1 - strh r0, [r4, 0xA] -_080B834C: - ldr r2, _080B8390 @ =gBattle_WIN0H - ldrh r0, [r4, 0x24] - lsls r0, 8 - ldrh r1, [r4, 0x26] - orrs r0, r1 - strh r0, [r2] - ldrh r0, [r4, 0x10] - adds r0, 0x8 - strh r0, [r4, 0x10] - lsls r0, 16 - asrs r0, 16 - ldrh r2, [r4, 0x14] - movs r3, 0x14 - ldrsh r1, [r4, r3] - cmp r0, r1 - blt _080B836E - strh r2, [r4, 0x10] -_080B836E: - adds r0, r4, 0 - bl sub_80B843C - movs r0, 0x10 - ldrsh r1, [r4, r0] - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _080B842A - movs r3, 0xA - ldrsh r0, [r4, r3] - cmp r0, 0 - beq _080B842A - movs r0, 0 - strh r0, [r4, 0xA] - b _080B83FC - .align 2, 0 -_080B8390: .4byte gBattle_WIN0H -_080B8394: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B842A - movs r0, 0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B83C4 - ldrh r1, [r4, 0x1E] - movs r2, 0x1E - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080B83D2 - subs r0, r1, 0x1 - strh r0, [r4, 0x1E] - b _080B83D2 -_080B83C4: - ldrh r1, [r4, 0x20] - movs r3, 0x20 - ldrsh r0, [r4, r3] - cmp r0, 0xF - bgt _080B83D2 - adds r0, r1, 0x1 - strh r0, [r4, 0x20] -_080B83D2: - ldrh r1, [r4, 0x20] - lsls r1, 8 - ldrh r0, [r4, 0x1E] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B842A - movs r2, 0x20 - ldrsh r0, [r4, r2] - cmp r0, 0x10 - bne _080B842A - b _080B83FC -_080B83F6: - ldr r1, _080B8404 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] -_080B83FC: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B842A - .align 2, 0 -_080B8404: .4byte gScanlineEffect -_080B8408: - ldr r0, _080B8430 @ =gBattle_WIN0H - movs r1, 0 - strh r1, [r0] - ldr r0, _080B8434 @ =gBattle_WIN0V - strh r1, [r0] - ldr r4, _080B8438 @ =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080B842A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B8430: .4byte gBattle_WIN0H -_080B8434: .4byte gBattle_WIN0V -_080B8438: .4byte 0x00003f3f - thumb_func_end sub_80B82C0 - - thumb_func_start sub_80B843C -sub_80B843C: @ 80B843C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - ldrh r0, [r6, 0x12] - ldrh r4, [r6, 0x10] - subs r0, r4 - lsls r0, 16 - asrs r1, r0, 16 - cmp r1, 0 - beq _080B8530 - movs r2, 0x22 - ldrsh r0, [r6, r2] - bl __divsi3 - mov r8, r0 - movs r3, 0x14 - ldrsh r0, [r6, r3] - lsls r5, r0, 8 - lsls r0, r4, 16 - movs r4, 0 - cmp r0, 0 - ble _080B849C - ldr r0, _080B8528 @ =gScanlineEffectRegBuffers - mov r12, r0 - ldr r7, _080B852C @ =gScanlineEffect -_080B8470: - lsls r2, r4, 16 - asrs r2, 16 - lsls r3, r2, 1 - ldrb r1, [r7, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r3, r0 - add r3, r12 - adds r1, r2, 0 - subs r1, 0x9F - ldrh r0, [r6, 0x1C] - subs r0, r1 - strh r0, [r3] - adds r2, 0x1 - lsls r2, 16 - lsrs r4, r2, 16 - asrs r2, 16 - movs r1, 0x10 - ldrsh r0, [r6, r1] - cmp r2, r0 - blt _080B8470 -_080B849C: - ldrh r4, [r6, 0x10] - lsls r3, r4, 16 - asrs r1, r3, 16 - movs r2, 0x12 - ldrsh r0, [r6, r2] - cmp r1, r0 - bgt _080B84E6 - ldr r0, _080B8528 @ =gScanlineEffectRegBuffers - mov r12, r0 - ldr r7, _080B852C @ =gScanlineEffect -_080B84B0: - asrs r4, r3, 16 - cmp r4, 0 - blt _080B84D2 - asrs r1, r5, 8 - subs r1, r4 - lsls r3, r4, 1 - ldrb r2, [r7, 0x14] - lsls r0, r2, 4 - subs r0, r2 - lsls r0, 7 - adds r3, r0 - add r3, r12 - lsls r1, 16 - asrs r1, 16 - ldrh r2, [r6, 0x1C] - adds r1, r2 - strh r1, [r3] -_080B84D2: - add r5, r8 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - lsls r3, r4, 16 - asrs r1, r3, 16 - movs r2, 0x12 - ldrsh r0, [r6, r2] - cmp r1, r0 - ble _080B84B0 -_080B84E6: - movs r3, 0x1C - ldrsh r0, [r6, r3] - adds r0, 0x9F - lsls r2, r4, 16 - asrs r1, r2, 16 - subs r5, r0, r1 - movs r3, 0x16 - ldrsh r0, [r6, r3] - cmp r1, r0 - bge _080B855E - ldr r7, _080B8528 @ =gScanlineEffectRegBuffers - ldr r4, _080B852C @ =gScanlineEffect -_080B84FE: - asrs r3, r2, 16 - cmp r3, 0 - blt _080B8516 - lsls r2, r3, 1 - ldrb r1, [r4, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r7 - strh r5, [r2] - subs r5, 0x1 -_080B8516: - adds r0, r3, 0x1 - lsls r2, r0, 16 - asrs r1, r2, 16 - movs r3, 0x16 - ldrsh r0, [r6, r3] - cmp r1, r0 - blt _080B84FE - b _080B855E - .align 2, 0 -_080B8528: .4byte gScanlineEffectRegBuffers -_080B852C: .4byte gScanlineEffect -_080B8530: - movs r1, 0x1C - ldrsh r0, [r6, r1] - adds r5, r0, 0 - adds r5, 0x9F - movs r4, 0 - ldr r3, _080B8568 @ =gScanlineEffectRegBuffers - movs r2, 0xF0 - lsls r2, 3 - adds r6, r3, r2 -_080B8542: - lsls r0, r4, 16 - asrs r0, 16 - lsls r2, r0, 1 - adds r1, r2, r3 - strh r5, [r1] - adds r2, r6 - strh r5, [r2] - subs r5, 0x1 - adds r0, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x6F - ble _080B8542 -_080B855E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B8568: .4byte gScanlineEffectRegBuffers - thumb_func_end sub_80B843C - - thumb_func_start sub_80B856C -sub_80B856C: @ 80B856C - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - movs r4, 0 - ldr r7, _080B85B4 @ =gSprites - movs r1, 0x3 - ands r0, r1 - lsls r5, r0, 2 - movs r0, 0xD - negs r0, r0 - adds r6, r0, 0 -_080B8582: - lsls r0, r4, 24 - lsrs r0, 24 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _080B85A2 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r7 - ldrb r0, [r1, 0x5] - ands r0, r6 - orrs r0, r5 - strb r0, [r1, 0x5] -_080B85A2: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _080B8582 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B85B4: .4byte gSprites - thumb_func_end sub_80B856C - - thumb_func_start sub_80B85B8 -sub_80B85B8: @ 80B85B8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldr r6, _080B8658 @ =gBattleAnimAttacker - ldrb r0, [r6] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - eors r0, r1 - negs r1, r0 - orrs r1, r0 - lsrs r4, r1, 31 - ldrb r0, [r6] - adds r1, r4, 0 - bl sub_8072E48 - ldr r0, _080B865C @ =gSprites - mov r9, r0 - ldr r0, _080B8660 @ =gBattlerSpriteIds - mov r8, r0 - ldrb r0, [r6] - add r0, r8 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r9 - adds r1, 0x3E - ldrb r2, [r1] - movs r7, 0x5 - negs r7, r7 - adds r0, r7, 0 - ands r0, r2 - strb r0, [r1] - ldrb r0, [r6] - movs r5, 0x2 - eors r0, r5 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B8642 - ldrb r0, [r6] - eors r0, r5 - movs r1, 0x1 - eors r4, r1 - adds r1, r4, 0 - bl sub_8072E48 - ldrb r0, [r6] - eors r0, r5 - add r0, r8 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r9 - adds r0, 0x3E - ldrb r2, [r0] - adds r1, r7, 0 - ands r1, r2 - strb r1, [r0] -_080B8642: - mov r0, r10 - bl DestroyAnimVisualTask - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B8658: .4byte gBattleAnimAttacker -_080B865C: .4byte gSprites -_080B8660: .4byte gBattlerSpriteIds - thumb_func_end sub_80B85B8 - - thumb_func_start sub_80B8664 -sub_80B8664: @ 80B8664 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r4, _080B86AC @ =gBattleAnimAttacker - ldrb r0, [r4] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - eors r0, r1 - negs r1, r0 - orrs r1, r0 - lsrs r5, r1, 31 - adds r0, r5, 0 - bl sub_8073128 - ldrb r1, [r4] - movs r0, 0x2 - eors r0, r1 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B86A0 - movs r0, 0x1 - eors r5, r0 - adds r0, r5, 0 - bl sub_8073128 -_080B86A0: - adds r0, r6, 0 - bl DestroyAnimVisualTask - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B86AC: .4byte gBattleAnimAttacker - thumb_func_end sub_80B8664 - - thumb_func_start sub_80B86B0 -sub_80B86B0: @ 80B86B0 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080B86E0 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x2] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrb r1, [r1, 0x4] - adds r0, r4, 0 - bl StartSpriteAnim - ldr r0, _080B86E4 @ =RunStoredCallbackWhenAnimEnds - str r0, [r4, 0x1C] - ldr r1, _080B86E8 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B86E0: .4byte gBattleAnimArgs -_080B86E4: .4byte RunStoredCallbackWhenAnimEnds -_080B86E8: .4byte DestroyAnimSprite - thumb_func_end sub_80B86B0 - - thumb_func_start sub_80B86EC -sub_80B86EC: @ 80B86EC - push {r4-r7,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r7, r0, 24 - movs r6, 0 - ldr r0, _080B87EC @ =gBattle_WIN0H - strh r6, [r0] - ldr r0, _080B87F0 @ =gBattle_WIN0V - strh r6, [r0] - ldr r1, _080B87F4 @ =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - ldr r1, _080B87F8 @ =0x00003f3d - movs r0, 0x4A - bl SetGpuReg - movs r1, 0x80 - lsls r1, 8 - movs r0, 0 - bl SetGpuRegBits - ldr r1, _080B87FC @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - ldr r1, _080B8800 @ =0x00000c08 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0 - bl SetAnimBgAttribute - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl SetAnimBgAttribute - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B8750 - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0x1 - bl SetAnimBgAttribute -_080B8750: - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080B87CA - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B87CA - ldr r4, _080B8804 @ =gBattleAnimAttacker - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _080B8780 - ldrb r0, [r4] - bl GetBattlerPosition - lsls r0, 24 - cmp r0, 0 - bne _080B87CA -_080B8780: - ldrb r0, [r4] - movs r5, 0x2 - eors r0, r5 - bl IsBattlerSpriteVisible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B87CA - ldr r3, _080B8808 @ =gSprites - ldr r1, _080B880C @ =gBattlerSpriteIds - ldrb r0, [r4] - eors r0, r5 - adds r0, r1 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - ldrb r3, [r2, 0x5] - lsls r1, r3, 28 - lsrs r1, 30 - subs r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r6, 0x1 -_080B87CA: - ldr r4, _080B8804 @ =gBattleAnimAttacker - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B8818 - ldr r1, _080B8810 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080B8814 @ =gEnemyParty - b _080B8828 - .align 2, 0 -_080B87EC: .4byte gBattle_WIN0H -_080B87F0: .4byte gBattle_WIN0V -_080B87F4: .4byte 0x00003f3f -_080B87F8: .4byte 0x00003f3d -_080B87FC: .4byte 0x00003f42 -_080B8800: .4byte 0x00000c08 -_080B8804: .4byte gBattleAnimAttacker -_080B8808: .4byte gSprites -_080B880C: .4byte gBattlerSpriteIds -_080B8810: .4byte gBattlerPartyIndexes -_080B8814: .4byte gEnemyParty -_080B8818: - ldr r1, _080B88B8 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080B88BC @ =gPlayerParty -_080B8828: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - movs r0, 0 - bl GetAnimBattlerSpriteId - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080B88C0 @ =gBattleAnimAttacker - ldrb r0, [r0] - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_8076E34 - lsls r0, 24 - lsrs r5, r0, 24 - mov r0, sp - bl sub_80752A0 - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080B88C4 @ =gFile_graphics_battle_anims_masks_metal_shine_tilemap - bl AnimLoadCompressedBgTilemap - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080B88C8 @ =gFile_graphics_battle_anims_masks_metal_shine_sheet - mov r2, sp - ldrh r2, [r2, 0xA] - bl AnimLoadCompressedBgGfx - ldr r0, _080B88CC @ =gFile_graphics_battle_anims_masks_metal_shine_palette - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadCompressedPalette - ldr r2, _080B88D0 @ =gBattle_BG1_X - ldr r0, _080B88D4 @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x20] - negs r0, r0 - adds r0, 0x60 - strh r0, [r2] - ldr r2, _080B88D8 @ =gBattle_BG1_Y - ldrh r0, [r1, 0x22] - negs r0, r0 - adds r0, 0x20 - strh r0, [r2] - ldrb r0, [r1, 0x5] - lsrs r0, 4 - adds r0, 0x10 - adds r1, r0, 0 - ldr r2, _080B88DC @ =gBattleAnimArgs - movs r3, 0x2 - ldrsh r0, [r2, r3] - cmp r0, 0 - bne _080B88E0 - adds r0, r1, 0 - movs r1, 0 - bl SetGreyscaleOrOriginalPalette - b _080B88EC - .align 2, 0 -_080B88B8: .4byte gBattlerPartyIndexes -_080B88BC: .4byte gPlayerParty -_080B88C0: .4byte gBattleAnimAttacker -_080B88C4: .4byte gFile_graphics_battle_anims_masks_metal_shine_tilemap -_080B88C8: .4byte gFile_graphics_battle_anims_masks_metal_shine_sheet -_080B88CC: .4byte gFile_graphics_battle_anims_masks_metal_shine_palette -_080B88D0: .4byte gBattle_BG1_X -_080B88D4: .4byte gSprites -_080B88D8: .4byte gBattle_BG1_Y -_080B88DC: .4byte gBattleAnimArgs -_080B88E0: - lsls r0, r1, 4 - ldrh r3, [r2, 0x4] - movs r1, 0x10 - movs r2, 0xB - bl BlendPalette -_080B88EC: - ldr r1, _080B8914 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - strh r5, [r0, 0x8] - ldr r2, _080B8918 @ =gBattleAnimArgs - ldrh r1, [r2] - strh r1, [r0, 0xA] - ldrh r1, [r2, 0x2] - strh r1, [r0, 0xC] - ldrh r1, [r2, 0x4] - strh r1, [r0, 0xE] - strh r6, [r0, 0x14] - ldr r1, _080B891C @ =sub_80B8920 - str r1, [r0] - add sp, 0x10 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B8914: .4byte gTasks -_080B8918: .4byte gBattleAnimArgs -_080B891C: .4byte sub_80B8920 - thumb_func_end sub_80B86EC - - thumb_func_start sub_80B8920 -sub_80B8920: @ 80B8920 - push {r4-r6,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - ldr r1, _080B89E8 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r4, r0, r1 - ldrh r0, [r4, 0x1C] - adds r0, 0x4 - movs r5, 0 - strh r0, [r4, 0x1C] - ldr r2, _080B89EC @ =gBattle_BG1_X - ldrh r3, [r2] - subs r1, r3, 0x4 - strh r1, [r2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x80 - beq _080B894E - b _080B8A5E -_080B894E: - strh r5, [r4, 0x1C] - adds r0, r3, 0 - adds r0, 0x7C - strh r0, [r2] - ldrh r0, [r4, 0x1E] - adds r0, 0x1 - strh r0, [r4, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - bne _080B89FC - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - ldr r5, _080B89F0 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r0, [r1, 0x5] - lsrs r0, 4 - adds r0, 0x10 - adds r1, r0, 0 - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080B8990 - adds r0, r1, 0 - movs r1, 0x1 - bl SetGreyscaleOrOriginalPalette -_080B8990: - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl DestroySprite - mov r0, sp - bl sub_80752A0 - mov r0, sp - ldrb r0, [r0, 0x9] - bl sub_8075358 - movs r1, 0x14 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _080B8A5E - ldr r2, _080B89F4 @ =gBattlerSpriteIds - ldr r0, _080B89F8 @ =gBattleAnimAttacker - ldrb r1, [r0] - movs r0, 0x2 - eors r0, r1 - adds r0, r2 - ldrb r0, [r0] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r5 - ldrb r3, [r2, 0x5] - lsls r1, r3, 28 - lsrs r1, 30 - adds r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2, 0x5] - b _080B8A5E - .align 2, 0 -_080B89E8: .4byte gTasks -_080B89EC: .4byte gBattle_BG1_X -_080B89F0: .4byte gSprites -_080B89F4: .4byte gBattlerSpriteIds -_080B89F8: .4byte gBattleAnimAttacker -_080B89FC: - cmp r0, 0x3 - bne _080B8A5E - ldr r0, _080B8A68 @ =gBattle_WIN0H - strh r5, [r0] - ldr r0, _080B8A6C @ =gBattle_WIN0V - strh r5, [r0] - ldr r4, _080B8A70 @ =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B8A2E - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - bl SetAnimBgAttribute -_080B8A2E: - movs r0, 0 - bl GetGpuReg - adds r1, r0, 0 - movs r2, 0x80 - lsls r2, 8 - adds r0, r2, 0 - eors r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080B8A5E: - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B8A68: .4byte gBattle_WIN0H -_080B8A6C: .4byte gBattle_WIN0V -_080B8A70: .4byte 0x00003f3f - thumb_func_end sub_80B8920 - - thumb_func_start sub_80B8A74 -sub_80B8A74: @ 80B8A74 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r0, _080B8A94 @ =gBattleAnimArgs - movs r2, 0 - ldrsh r1, [r0, r2] - adds r2, r0, 0 - cmp r1, 0x7 - bhi _080B8AD8 - lsls r0, r1, 2 - ldr r1, _080B8A98 @ =_080B8A9C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B8A94: .4byte gBattleAnimArgs -_080B8A98: .4byte _080B8A9C - .align 2, 0 -_080B8A9C: - .4byte _080B8ABC - .4byte _080B8ABC - .4byte _080B8ABC - .4byte _080B8ABC - .4byte _080B8AC8 - .4byte _080B8ACC - .4byte _080B8AD0 - .4byte _080B8AD4 -_080B8ABC: - ldrb r0, [r2] - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r2, r0, 24 - b _080B8ADA -_080B8AC8: - movs r4, 0 - b _080B8AE0 -_080B8ACC: - movs r4, 0x2 - b _080B8AE0 -_080B8AD0: - movs r4, 0x1 - b _080B8AE0 -_080B8AD4: - movs r4, 0x3 - b _080B8AE0 -_080B8AD8: - movs r2, 0xFF -_080B8ADA: - movs r0, 0 - cmp r0, 0 - beq _080B8B06 -_080B8AE0: - adds r0, r4, 0 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B8B04 - ldr r0, _080B8B00 @ =gBattlerSpriteIds - adds r0, r4, r0 - ldrb r2, [r0] - b _080B8B06 - .align 2, 0 -_080B8B00: .4byte gBattlerSpriteIds -_080B8B04: - movs r2, 0xFF -_080B8B06: - cmp r2, 0xFF - beq _080B8B22 - ldr r1, _080B8B30 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x5] - lsrs r0, 4 - adds r0, 0x10 - ldr r1, _080B8B34 @ =gBattleAnimArgs - ldrb r1, [r1, 0x2] - bl SetGreyscaleOrOriginalPalette -_080B8B22: - adds r0, r5, 0 - bl DestroyAnimVisualTask - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B8B30: .4byte gSprites -_080B8B34: .4byte gBattleAnimArgs - thumb_func_end sub_80B8A74 - - thumb_func_start sub_80B8B38 -sub_80B8B38: @ 80B8B38 - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r2, _080B8B64 @ =gAnimMoveTurn - ldrb r0, [r2] - cmp r0, 0x1 - bhi _080B8B4C - ldr r1, _080B8B68 @ =gBattleAnimArgs - movs r0, 0 - strh r0, [r1, 0xE] -_080B8B4C: - ldrb r0, [r2] - cmp r0, 0x2 - bne _080B8B58 - ldr r1, _080B8B68 @ =gBattleAnimArgs - movs r0, 0x1 - strh r0, [r1, 0xE] -_080B8B58: - adds r0, r3, 0 - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .align 2, 0 -_080B8B64: .4byte gAnimMoveTurn -_080B8B68: .4byte gBattleAnimArgs - thumb_func_end sub_80B8B38 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/psychic.s b/asm/psychic.s index 2561a4805..d2a694e13 100644 --- a/asm/psychic.s +++ b/asm/psychic.s @@ -57,7 +57,7 @@ _080B2EFE: beq _080B2F3C adds r0, r4, 0 adds r1, r5, 0 - bl sub_8072E48 + bl MoveBattlerSpriteToBG _080B2F3C: movs r0, 0x2 adds r4, r0, 0 @@ -71,7 +71,7 @@ _080B2F3C: eors r5, r0 adds r0, r4, 0 adds r1, r5, 0 - bl sub_8072E48 + bl MoveBattlerSpriteToBG _080B2F5A: bl IsContest lsls r0, 24 diff --git a/data/data_835B488.s b/data/data_835B488.s index 3635065c7..e55eaea08 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -930,7 +930,7 @@ gUnknown_83E7668:: @ 83E7668 .incbin "baserom.gba", 0x3E7668, 0x78 gUnknown_83E76E0:: @ 83E76E0 - .incbin "baserom.gba", 0x3E76E0, 0x320 + .incbin "baserom.gba", 0x3E76E0, 0x198 .section .rodata.83E7CFC diff --git a/data/graphics.s b/data/graphics.s index d0bae69c0..79b622cfa 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -1624,15 +1624,15 @@ gFile_graphics_battle_anims_backgrounds_00_tilemap:: @ 8D1CFD4 .incbin "graphics/battle_anims/backgrounds/00.bin.lz" .align 2 -gFile_graphics_battle_anims_masks_metal_shine_sheet:: @ 8D1D224 +gMetalShineGfx:: @ 8D1D224 .incbin "graphics/battle_anims/masks/metal_shine.4bpp.lz" .align 2 -gFile_graphics_battle_anims_masks_metal_shine_palette:: @ 8D1D360 +gMetalShinePalette:: @ 8D1D360 .incbin "graphics/battle_anims/masks/metal_shine.gbapal.lz" .align 2 -gFile_graphics_battle_anims_masks_metal_shine_tilemap:: @ 8D1D388 +gMetalShineTilemap:: @ 8D1D388 .incbin "graphics/battle_anims/masks/metal_shine.bin.lz" .align 2 diff --git a/include/battle_anim.h b/include/battle_anim.h index fb9f0e53d..9ef664647 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -65,6 +65,8 @@ extern struct OamData gOamData_83AC9F8; extern struct OamData gOamData_83AC9D8; extern struct OamData gOamData_83ACB58; extern struct OamData gOamData_83ACAF8; +extern struct OamData gOamData_83ACB60; +extern struct OamData gOamData_83ACA30; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); @@ -127,7 +129,7 @@ u8 GetBattlerSpriteDefault_Y(u8 battlerId); u8 sub_80A82E4(u8 battlerId); u8 GetSubstituteSpriteDefault_Y(u8 battlerId); u8 GetGhostSpriteDefault_Y(u8 battlerId); -void sub_8072E48(u8 battlerId, u8); +void MoveBattlerSpriteToBG(u8 battlerId, u8); void sub_8073128(u8); // battle_anim_status_effects.s @@ -281,9 +283,21 @@ void sub_80B94B4(u8 taskId); void AnimTask_IsPowerOver99(u8 taskId); void sub_80B9800(u8 taskId); -// flying.c +// flying.s void sub_80B1D3C(struct Sprite *sprite); +// dark.c +void sub_80B78E0(u8 taskId); +void sub_80B79DC(u8 taskId); +void sub_80B7A80(u8 taskId); +void sub_80B7DA4(u8 taskId); +void sub_80B8070(u8 taskId); +void sub_80B85B8(u8 taskId); +void sub_80B8664(u8 taskId); +void AnimTask_MetallicShine(u8 taskId); +void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId); +void sub_80B8B38(u8 taskId); + // battle_anim_utility_funcs.c void sub_80BA7F8(u8 taskId); void sub_80BA83C(u8 taskId); diff --git a/include/graphics.h b/include/graphics.h index 1113eedd0..c769f6ab8 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -976,6 +976,11 @@ extern const u32 gBattleStatMask8_Pal[]; extern const u32 gBattleStatMask1_Tilemap[]; extern const u32 gBattleStatMask2_Tilemap[]; +// dark +extern const u32 gMetalShineGfx[]; +extern const u32 gMetalShinePalette[]; +extern const u32 gMetalShineTilemap[]; + // title_screen extern const u16 gGraphics_TitleScreen_PokemonFireRedLogoPals[]; extern const u8 gGraphics_TitleScreen_PokemonFireRedLogoTiles[]; diff --git a/ld_script.txt b/ld_script.txt index 833bcf390..da75ef40d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -167,7 +167,7 @@ SECTIONS { asm/rock.o(.text); asm/ghost.o(.text); asm/dragon.o(.text); - asm/dark.o(.text); + src/dark.o(.text); src/ground.o(.text); src/normal.o(.text); src/battle_anim_utility_funcs.o(.text); @@ -422,6 +422,7 @@ SECTIONS { src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); data/data_835B488.o(.rodata.83DF09C); + src/dark.o(.rodata); src/ground.o(.rodata); src/normal.o(.rodata); src/battle_anim_utility_funcs.o(.rodata); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 3ab5bc1c8..85a9248b0 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1222,7 +1222,7 @@ static void sub_80303A8(u8 taskId) u32 battlerIdAlt = battlerId; bool32 v6Alt = v6; - sub_8072E48(battlerIdAlt, v6Alt); + MoveBattlerSpriteToBG(battlerIdAlt, v6Alt); } ++data[15]; break; diff --git a/src/dark.c b/src/dark.c new file mode 100644 index 000000000..c080e6243 --- /dev/null +++ b/src/dark.c @@ -0,0 +1,921 @@ +#include "global.h" +#include "battle_anim.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "palette.h" +#include "scanline_effect.h" +#include "trig.h" +#include "util.h" + +static void sub_80B7ACC(struct Sprite *sprite); +static void sub_80B7BD4(struct Sprite *sprite); +static void sub_80B7C88(struct Sprite *sprite); +static void sub_80B86B0(struct Sprite *sprite); +static void sub_80B7954(u8 taskId); +static void sub_80B7A14(u8 taskId); +static void sub_80B7B48(struct Sprite *sprite); +static void sub_80B7C10(struct Sprite *sprite); +static void sub_80B7C50(struct Sprite *sprite); +static void sub_80B7D88(struct Sprite *sprite); +static void sub_80B856C(u8 priority); +static void sub_80B7F58(u8 taskId); +static void sub_80B843C(struct Task *task); +static void sub_80B82C0(u8 taskId); +static void sub_80B8920(u8 taskId); + +const struct SpriteTemplate gUnknown_83E7878 = +{ + .tileTag = ANIM_TAG_TIED_BAG, + .paletteTag = ANIM_TAG_TIED_BAG, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B7ACC, +}; + +static const union AffineAnimCmd gUnknown_83E7890[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E78A0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 32, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E78B0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 64, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E78C0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 96, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E78D0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -128, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E78E0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -96, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E78F0[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -64, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E7900[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -32, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E7910[] = +{ + gUnknown_83E7890, + gUnknown_83E78A0, + gUnknown_83E78B0, + gUnknown_83E78C0, + gUnknown_83E78D0, + gUnknown_83E78E0, + gUnknown_83E78F0, + gUnknown_83E7900, +}; + +const struct SpriteTemplate gUnknown_83E7930 = +{ + .tileTag = ANIM_TAG_SHARP_TEETH, + .paletteTag = ANIM_TAG_SHARP_TEETH, + .oam = &gOamData_83ACB60, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7910, + .callback = sub_80B7BD4, +}; + +const struct SpriteTemplate gUnknown_83E7948 = +{ + .tileTag = ANIM_TAG_CLAMP, + .paletteTag = ANIM_TAG_CLAMP, + .oam = &gOamData_83ACB60, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7910, + .callback = sub_80B7BD4, +}; + +static const union AffineAnimCmd gUnknown_83E7960[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, 80, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E7978[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, -80, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E7990[] = +{ + gUnknown_83E7960, + gUnknown_83E7978, +}; + +const struct SpriteTemplate gUnknown_83E7998 = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_83ACA30, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7990, + .callback = sub_80B7C88, +}; + +static const union AnimCmd gUnknown_83E79B0[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E79C8[] = +{ + ANIMCMD_FRAME(0, 4, .hFlip = TRUE), + ANIMCMD_FRAME(16, 4, .hFlip = TRUE), + ANIMCMD_FRAME(32, 4, .hFlip = TRUE), + ANIMCMD_FRAME(48, 4, .hFlip = TRUE), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E79E0[] = +{ + gUnknown_83E79B0, + gUnknown_83E79C8, +}; + +const struct SpriteTemplate gUnknown_83E79E8 = +{ + .tileTag = ANIM_TAG_CLAW_SLASH, + .paletteTag = ANIM_TAG_CLAW_SLASH, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E79E0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B86B0, +}; + +void sub_80B78E0(u8 taskId) +{ + s32 battler; + + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + battler = gBattleAnimAttacker; + gTasks[taskId].data[1] = 16; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + if (GetBattlerSpriteBGPriorityRank(battler) == 1) + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); + else + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2); + gTasks[taskId].func = sub_80B7954; +} + +static void sub_80B7954(u8 taskId) +{ + u8 blendA = gTasks[taskId].data[1] >> 8; + u8 blendB = gTasks[taskId].data[1]; + + if (gTasks[taskId].data[2] == (u8)gTasks[taskId].data[0]) + { + ++blendA; + --blendB; + gTasks[taskId].data[1] = BLDALPHA_BLEND(blendB, blendA); + SetGpuReg(REG_OFFSET_BLDALPHA, gTasks[taskId].data[1]); + gTasks[taskId].data[2] = 0; + if (blendA == 16) + { + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible = 1; + DestroyAnimVisualTask(taskId); + } + } + else + { + ++gTasks[taskId].data[2]; + } +} + +void sub_80B79DC(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = BLDALPHA_BLEND(0, 16); + gTasks[taskId].func = sub_80B7A14; + SetGpuReg(REG_OFFSET_BLDALPHA, gTasks[taskId].data[1]); +} + +static void sub_80B7A14(u8 taskId) +{ + u8 blendA = gTasks[taskId].data[1] >> 8; + u8 blendB = gTasks[taskId].data[1]; + + if (gTasks[taskId].data[2] == (u8)gTasks[taskId].data[0]) + { + --blendA; + ++blendB; + gTasks[taskId].data[1] = (blendA << 8) | blendB; + SetGpuReg(REG_OFFSET_BLDALPHA, gTasks[taskId].data[1]); + gTasks[taskId].data[2] = 0; + if (blendA == 0) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimVisualTask(taskId); + } + } + else + { + ++gTasks[taskId].data[2]; + } +} + +void sub_80B7A80(u8 taskId) +{ + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); + else + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2); + DestroyAnimVisualTask(taskId); +} + +static void sub_80B7ACC(struct Sprite *sprite) +{ + sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->data[3] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->data[0] = 0x7E; + InitSpriteDataForLinearTranslation(sprite); + sprite->data[3] = -sprite->data[1]; + sprite->data[4] = -sprite->data[2]; + sprite->data[6] = 0xFFD8; + sprite->callback = sub_80B7B48; + sprite->callback(sprite); +} + +static void sub_80B7B48(struct Sprite *sprite) +{ + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + if (sprite->data[7] == 0) + { + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + --sprite->data[0]; + } + sprite->pos2.y += Sin(sprite->data[5], sprite->data[6]); + sprite->data[5] = (sprite->data[5] + 3) & 0xFF; + if (sprite->data[5] > 0x7F) + { + sprite->data[5] = 0; + sprite->data[6] += 20; + ++sprite->data[7]; + } + if (--sprite->data[0] == 0) + DestroyAnimSprite(sprite); +} + +static void sub_80B7BD4(struct Sprite *sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[4]; + sprite->data[2] = gBattleAnimArgs[5]; + sprite->callback = sub_80B7C10; +} + +static void sub_80B7C10(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[0]; + sprite->data[5] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = sprite->data[5] >> 8; + if (++sprite->data[3] == sprite->data[2]) + sprite->callback = sub_80B7C50; +} + +static void sub_80B7C50(struct Sprite *sprite) +{ + sprite->data[4] -= sprite->data[0]; + sprite->data[5] -= sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = sprite->data[5] >> 8; + if (--sprite->data[3] == 0) + DestroySpriteAndMatrix(sprite); +} + +static void sub_80B7C88(struct Sprite *sprite) +{ + u8 battler; + s8 xOffset; + + if (gBattleAnimArgs[0] == 0) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + xOffset = 20; + sprite->oam.tileNum += 4; + switch (gBattleAnimArgs[1]) + { + case 0: + sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) - 8; + sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 8; + break; + case 1: + sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) - 14; + sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 16; + break; + case 2: + sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) + 8; + sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 8; + StartSpriteAffineAnim(sprite, 1); + xOffset = -20; + break; + case 3: + sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) + 14; + sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 16; + StartSpriteAffineAnim(sprite, 1); + xOffset = -20; + break; + } + sprite->data[0] = 32; + sprite->data[2] = sprite->pos1.x + xOffset; + sprite->data[4] = sprite->pos1.y + 12; + sprite->data[5] = -12; + InitAnimArcTranslation(sprite); + sprite->callback = sub_80B7D88; +} + +static void sub_80B7D88(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + DestroySpriteAndMatrix(sprite); +} + +void sub_80B7DA4(u8 taskId) +{ + struct ScanlineEffectParams scanlineParams; + struct BattleAnimBgData animBg; + u16 i; + u8 pos; + s32 var0; + struct Task *task = &gTasks[taskId]; + + task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 31; + task->data[6] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP) - 7; + task->data[5] = task->data[7]; + task->data[4] = task->data[6]; + task->data[13] = (task->data[7] - task->data[6]) << 8; + pos = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + task->data[14] = pos - 32; + task->data[15] = pos + 32; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + task->data[8] = -12; + else + task->data[8] = -64; + task->data[3] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); + if (task->data[3] == 1) + { + sub_80752A0(&animBg); + task->data[10] = gBattle_BG1_Y; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); + FillPalette(0, animBg.paletteId * 16, 32); + scanlineParams.dmaDest = ®_BG1VOFS; + var0 = WINOUT_WIN01_BG1; + if (!IsContest()) + gBattle_BG2_X += 240; + } + else + { + task->data[10] = gBattle_BG2_Y; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2); + FillPalette(0, 144, 32); + scanlineParams.dmaDest = ®_BG2VOFS; + var0 = WINOUT_WIN01_BG2; + if (!IsContest()) + gBattle_BG1_X += 240; + } + scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + scanlineParams.initState = 1; + scanlineParams.unused9 = 0; + task->data[11] = 0; + task->data[12] = 16; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + sub_80B856C(3); + for (i = 0; i < 112; ++i) + { + gScanlineEffectRegBuffers[0][i] = task->data[10]; + gScanlineEffectRegBuffers[1][i] = task->data[10]; + } + ScanlineEffect_SetParams(scanlineParams); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | (var0 ^ (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR))); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + gBattle_WIN0H = (task->data[14] << 8) | task->data[15]; + gBattle_WIN0V = 160; + + task->func = sub_80B7F58; +} + +static void sub_80B7F58(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 1) + { + task->data[1] = 0; + if (++task->data[2] & 1) + { + if (task->data[11] != 12) + ++task->data[11]; + } + else if (task->data[12] != 8) + { + --task->data[12]; + } + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[11], task->data[12])); + if (task->data[11] == 12 && task->data[12] == 8) + ++task->data[0]; + } + break; + case 1: + task->data[4] -= 8; + sub_80B843C(task); + if (task->data[4] < task->data[8]) + ++task->data[0]; + break; + case 2: + task->data[4] -= 8; + sub_80B843C(task); + task->data[14] += 4; + task->data[15] -= 4; + if (task->data[14] >= task->data[15]) + task->data[14] = task->data[15]; + gBattle_WIN0H = (task->data[14] << 8) | task->data[15]; + if (task->data[14] == task->data[15]) + ++task->data[0]; + break; + case 3: + gScanlineEffect.state = 3; + ++task->data[0]; + break; + case 4: + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80B8070(u8 taskId) +{ + struct BattleAnimBgData animBg; + struct ScanlineEffectParams scanlineParams; + u8 x; + u16 i; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (IsContest() == TRUE) + { + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + DestroyAnimVisualTask(taskId); + } + else + { + task->data[3] = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); + if (task->data[3] == 1) + { + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); + gBattle_BG2_X += 240; + } + else + { + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2); + gBattle_BG1_X += 240; + } + ++task->data[0]; + } + break; + case 1: + if (task->data[3] == 1) + { + sub_80752A0(&animBg); + task->data[10] = gBattle_BG1_Y; + FillPalette(0, animBg.paletteId * 16, 32); + } + else + { + task->data[10] = gBattle_BG2_Y; + FillPalette(0, 9 * 16, 32); + } + sub_80B856C(3); + ++task->data[0]; + break; + case 2: + task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 31; + task->data[6] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP) - 7; + task->data[13] = (task->data[7] - task->data[6]) << 8; + x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + task->data[14] = x - 4; + task->data[15] = x + 4; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + task->data[8] = -12; + else + task->data[8] = -64; + task->data[4] = task->data[8]; + task->data[5] = task->data[8]; + task->data[11] = 12; + task->data[12] = 8; + ++task->data[0]; + break; + case 3: + if (task->data[3] == 1) + scanlineParams.dmaDest = ®_BG1VOFS; + else + scanlineParams.dmaDest = ®_BG2VOFS; + for (i = 0; i < 112; ++i) + { + gScanlineEffectRegBuffers[0][i] = task->data[10] + (159 - i); + gScanlineEffectRegBuffers[1][i] = task->data[10] + (159 - i); + } + scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + scanlineParams.initState = 1; + scanlineParams.unused9 = 0; + ScanlineEffect_SetParams(scanlineParams); + ++task->data[0]; + break; + case 4: + if (task->data[3] == 1) + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + else + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + gBattle_WIN0H = (task->data[14] << 8) | task->data[15]; + gBattle_WIN0V = 160; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 8)); + task->func = sub_80B82C0; + break; + } +} + +static void sub_80B82C0(u8 taskId) +{ + u8 pos; + u16 i; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[5] += 8; + if (task->data[5] >= task->data[7]) + task->data[5] = task->data[7]; + sub_80B843C(task); + if (task->data[5] == task->data[7]) + ++task->data[0]; + break; + case 1: + if (task->data[15] - task->data[14] < 0x40) + { + task->data[14] -= 4; + task->data[15] += 4; + } + else + { + task->data[1] = 1; + } + gBattle_WIN0H = (task->data[14] << 8) | task->data[15]; + task->data[4] += 8; + if (task->data[4] >= task->data[6]) + task->data[4] = task->data[6]; + sub_80B843C(task); + if (task->data[4] == task->data[6] && task->data[1]) + { + task->data[1] = 0; + ++task->data[0]; + } + break; + case 2: + if (++task->data[1] > 1) + { + task->data[1] = 0; + ++task->data[2]; + if (task->data[2] & 1) + { + if (task->data[11]) + --task->data[11]; + } + else if (task->data[12] < 16) + { + ++task->data[12]; + } + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[11], task->data[12])); + if (task->data[11] == 0 && task->data[12] == 16) + ++task->data[0]; + } + break; + case 3: + gScanlineEffect.state = 3; + ++task->data[0]; + break; + case 4: + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80B843C(struct Task *task) +{ + s32 var0, var1, var4; + s16 var2, i; + + var2 = task->data[5] - task->data[4]; + if (var2 != 0) + { + var0 = task->data[13] / var2; + var1 = task->data[6] << 8; + for (i = 0; i < task->data[4]; ++i) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[10] - (i - 159); + for (i = task->data[4]; i <= task->data[5]; ++i) + { + if (i >= 0) + { + s16 var3 = (var1 >> 8) - i; + + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = var3 + task->data[10]; + } + var1 += var0; + } + var4 = task->data[10] - (i - 159); + for (; i < task->data[7]; ++i) + if (i >= 0) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = var4--; + } + else + { + var4 = task->data[10] + 159; + for (i = 0; i < 112; ++i) + { + gScanlineEffectRegBuffers[0][i] = var4; + gScanlineEffectRegBuffers[1][i] = var4; + --var4; + } + } +} + +static void sub_80B856C(u8 priority) +{ + u16 i; + + for (i = 0; i < MAX_BATTLERS_COUNT; ++i) + { + u8 spriteId = GetAnimBattlerSpriteId(i); + + if (spriteId != 0xFF) + gSprites[spriteId].oam.priority = priority; + } +} + +void sub_80B85B8(u8 taskId) +{ + u8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? 1 : 0; + + MoveBattlerSpriteToBG(gBattleAnimAttacker, toBG2); + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible = 0; + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + { + MoveBattlerSpriteToBG(gBattleAnimAttacker ^ 2, toBG2 ^ 1); + gSprites[gBattlerSpriteIds[gBattleAnimAttacker ^ 2]].invisible = 0; + } + DestroyAnimVisualTask(taskId); +} + +void sub_80B8664(u8 taskId) +{ + u8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? 1 : 0; + + sub_8073128(toBG2); + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + sub_8073128(toBG2 ^ 1); + DestroyAnimVisualTask(taskId); +} + +static void sub_80B86B0(struct Sprite *sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Makes the attacker metallic and shining. +// Used by MOVE_HARDEN and MOVE_IRON_DEFENSE. +// arg0: if true won't change battler's palette back +// arg1: if true, use custom color +// arg2: custom color +// Custom color argument is used in MOVE_POISON_TAIL to make the mon turn purplish/pinkish as if became cloaked in poison. +void AnimTask_MetallicShine(u8 taskId) +{ + u16 species; + u8 spriteId, newSpriteId; + u16 paletteNum; + struct BattleAnimBgData animBg; + bool32 priorityChanged = FALSE; + + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 12)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 0); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + if (IsDoubleBattle() && !IsContest()) + { + if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_RIGHT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT) + { + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)) == TRUE) + { + gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority--; + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + priorityChanged = TRUE; + } + } + } + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + else + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); + spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + newSpriteId = sub_8076E34(gBattleAnimAttacker, spriteId, species); + sub_80752A0(&animBg); + AnimLoadCompressedBgTilemap(animBg.bgId, gMetalShineTilemap); + AnimLoadCompressedBgGfx(animBg.bgId, gMetalShineGfx, animBg.tilesOffset); + LoadCompressedPalette(gMetalShinePalette, animBg.paletteId * 16, 32); + gBattle_BG1_X = -gSprites[spriteId].pos1.x + 96; + gBattle_BG1_Y = -gSprites[spriteId].pos1.y + 32; + paletteNum = 16 + gSprites[spriteId].oam.paletteNum; + if (gBattleAnimArgs[1] == 0) + SetGreyscaleOrOriginalPalette(paletteNum, FALSE); + else + BlendPalette(paletteNum * 16, 16, 11, gBattleAnimArgs[2]); + gTasks[taskId].data[0] = newSpriteId; + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + gTasks[taskId].data[6] = priorityChanged; + gTasks[taskId].func = sub_80B8920; +} + +static void sub_80B8920(u8 taskId) +{ + struct BattleAnimBgData animBg; + u16 paletteNum; + u8 spriteId; + + gTasks[taskId].data[10] += 4; + gBattle_BG1_X -= 4; + if (gTasks[taskId].data[10] == 128) + { + gTasks[taskId].data[10] = 0; + gBattle_BG1_X += 128; + gTasks[taskId].data[11]++; + if (gTasks[taskId].data[11] == 2) + { + spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + paletteNum = 16 + gSprites[spriteId].oam.paletteNum; + if (gTasks[taskId].data[1] == 0) + SetGreyscaleOrOriginalPalette(paletteNum, 1); + DestroySprite(&gSprites[gTasks[taskId].data[0]]); + sub_80752A0(&animBg); + sub_8075358(animBg.bgId); + if (gTasks[taskId].data[6] == 1) + gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority++; + } + else if (gTasks[taskId].data[11] == 3) + { + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimVisualTask(taskId); + } + } +} + +// Changes battler's palette to either greyscale or original. +// arg0: which battler +// arg1: 0 grayscale, 1 original +void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId) +{ + u8 spriteId, battler; + bool8 calcSpriteId = FALSE; + u8 position = B_POSITION_PLAYER_LEFT; + + switch (gBattleAnimArgs[0]) + { + case 0: + case 1: + case 2: + case 3: + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + break; + case 4: + position = B_POSITION_PLAYER_LEFT; + calcSpriteId = TRUE; + break; + case 5: + position = B_POSITION_PLAYER_RIGHT; + calcSpriteId = TRUE; + break; + case 6: + position = B_POSITION_OPPONENT_LEFT; + calcSpriteId = TRUE; + break; + case 7: + position = B_POSITION_OPPONENT_RIGHT; + calcSpriteId = TRUE; + break; + default: + spriteId = 0xFF; + break; + } + if (calcSpriteId) + { + battler = GetBattlerAtPosition(position); + if (IsBattlerSpriteVisible(battler)) + spriteId = gBattlerSpriteIds[battler]; + else + spriteId = 0xFF; + } + if (spriteId != 0xFF) + SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, gBattleAnimArgs[1]); + DestroyAnimVisualTask(taskId); +} + +void sub_80B8B38(u8 taskId) +{ + if (gAnimMoveTurn < 2) + gBattleAnimArgs[7] = 0; + if (gAnimMoveTurn == 2) + gBattleAnimArgs[7] = 1; + DestroyAnimVisualTask(taskId); +} From 7b28a3ecfd7c6a7ae73283b298b2f04bbbcc72f0 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 10 Oct 2019 08:09:37 +0800 Subject: [PATCH 08/25] dragon --- asm/dragon.s | 835 ------------------------------------------ data/data_835B488.s | 2 +- include/battle_anim.h | 4 + ld_script.txt | 3 +- src/dragon.c | 431 ++++++++++++++++++++++ sym_ewram.txt | 4 +- 6 files changed, 439 insertions(+), 840 deletions(-) delete mode 100644 asm/dragon.s create mode 100644 src/dragon.c diff --git a/asm/dragon.s b/asm/dragon.s deleted file mode 100644 index 2e3684042..000000000 --- a/asm/dragon.s +++ /dev/null @@ -1,835 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80B725C -sub_80B725C: @ 80B725C - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B72A4 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B72AC - ldr r2, _080B72A8 @ =gBattleAnimArgs - ldrh r0, [r5, 0x20] - ldrh r1, [r2] - subs r0, r1 - strh r0, [r5, 0x20] - ldrh r0, [r2, 0x6] - negs r0, r0 - strh r0, [r2, 0x6] - ldrh r0, [r2, 0x8] - negs r0, r0 - strh r0, [r2, 0x8] - adds r1, r2, 0 - b _080B72B6 - .align 2, 0 -_080B72A4: .4byte gBattleAnimAttacker -_080B72A8: .4byte gBattleAnimArgs -_080B72AC: - ldr r1, _080B72EC @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r5, 0x20] - adds r0, r2 - strh r0, [r5, 0x20] -_080B72B6: - ldrh r0, [r1, 0x2] - ldrh r2, [r5, 0x22] - adds r0, r2 - strh r0, [r5, 0x22] - ldrh r0, [r1, 0x4] - strh r0, [r5, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r5, 0x30] - ldrh r0, [r1, 0x8] - strh r0, [r5, 0x34] - ldrh r0, [r1, 0xA] - strh r0, [r5, 0x38] - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r1, _080B72F0 @ =DestroySpriteAndMatrix - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080B72F4 @ =TranslateSpriteLinearAndFlicker - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B72EC: .4byte gBattleAnimArgs -_080B72F0: .4byte DestroySpriteAndMatrix -_080B72F4: .4byte TranslateSpriteLinearAndFlicker - thumb_func_end sub_80B725C - - thumb_func_start sub_80B72F8 -sub_80B72F8: @ 80B72F8 - push {r4,r5,lr} - adds r5, r0, 0 - bl SetSpriteCoordsToAnimAttackerCoords - ldr r4, _080B7350 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - ldr r0, _080B7354 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B735C - ldr r2, _080B7358 @ =gBattleAnimArgs - ldrh r0, [r5, 0x20] - ldrh r1, [r2, 0x2] - subs r0, r1 - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x22] - adds r1, r0 - strh r1, [r5, 0x22] - ldrh r0, [r5, 0x32] - ldrh r1, [r2, 0x4] - subs r0, r1 - strh r0, [r5, 0x32] - ldrh r0, [r2, 0x6] - ldrh r1, [r5, 0x36] - adds r0, r1 - strh r0, [r5, 0x36] - b _080B7386 - .align 2, 0 -_080B7350: .4byte gBattleAnimTarget -_080B7354: .4byte gBattleAnimAttacker -_080B7358: .4byte gBattleAnimArgs -_080B735C: - ldr r1, _080B73A0 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r5, 0x20] - adds r0, r2 - strh r0, [r5, 0x20] - ldrh r0, [r1, 0x2] - ldrh r2, [r5, 0x22] - adds r0, r2 - strh r0, [r5, 0x22] - ldrh r0, [r1, 0x4] - ldrh r2, [r5, 0x32] - adds r0, r2 - strh r0, [r5, 0x32] - ldrh r0, [r1, 0x6] - ldrh r1, [r5, 0x36] - adds r0, r1 - strh r0, [r5, 0x36] - adds r0, r5, 0 - movs r1, 0x1 - bl StartSpriteAnim -_080B7386: - ldr r0, _080B73A0 @ =gBattleAnimArgs - ldrh r0, [r0, 0x8] - strh r0, [r5, 0x2E] - ldr r0, _080B73A4 @ =StartAnimLinearTranslation - str r0, [r5, 0x1C] - ldr r1, _080B73A8 @ =DestroySpriteAndMatrix - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B73A0: .4byte gBattleAnimArgs -_080B73A4: .4byte StartAnimLinearTranslation -_080B73A8: .4byte DestroySpriteAndMatrix - thumb_func_end sub_80B72F8 - - thumb_func_start sub_80B73AC -sub_80B73AC: @ 80B73AC - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080B73C0 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B73C8 - ldr r4, _080B73C4 @ =gBattleAnimAttacker - b _080B73CA - .align 2, 0 -_080B73C0: .4byte gBattleAnimArgs -_080B73C4: .4byte gBattleAnimAttacker -_080B73C8: - ldr r4, _080B740C @ =gBattleAnimTarget -_080B73CA: - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldr r4, _080B7410 @ =gBattleAnimArgs - movs r0, 0x2 - ldrsh r1, [r4, r0] - adds r0, r5, 0 - bl SetAnimSpriteInitialXOffset - ldrh r0, [r4, 0x4] - ldrh r1, [r5, 0x22] - adds r0, r1 - strh r0, [r5, 0x22] - ldr r0, _080B7414 @ =RunStoredCallbackWhenAnimEnds - str r0, [r5, 0x1C] - ldr r1, _080B7418 @ =DestroySpriteAndMatrix - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B740C: .4byte gBattleAnimTarget -_080B7410: .4byte gBattleAnimArgs -_080B7414: .4byte RunStoredCallbackWhenAnimEnds -_080B7418: .4byte DestroySpriteAndMatrix - thumb_func_end sub_80B73AC - - thumb_func_start sub_80B741C -sub_80B741C: @ 80B741C - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080B7444 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B7436 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim -_080B7436: - adds r0, r4, 0 - bl sub_80B72F8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B7444: .4byte gBattleAnimAttacker - thumb_func_end sub_80B741C - - thumb_func_start sub_80B7448 -sub_80B7448: @ 80B7448 - push {r4-r7,lr} - adds r6, r0, 0 - ldr r4, _080B749C @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - movs r5, 0 - strh r0, [r6, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x22] - strh r5, [r6, 0x36] - movs r0, 0x1 - strh r0, [r6, 0x38] - ldr r0, _080B74A0 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r6, 0x3A] - ldr r4, _080B74A4 @ =gBattlerAttacker - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoordAttr - lsls r7, r0, 16 - lsrs r5, r7, 16 - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoordAttr - lsls r1, r0, 16 - lsrs r0, r1, 16 - cmp r5, r0 - bls _080B74A8 - lsrs r0, r7, 17 - b _080B74AA - .align 2, 0 -_080B749C: .4byte gBattleAnimAttacker -_080B74A0: .4byte gBattleAnimArgs -_080B74A4: .4byte gBattlerAttacker -_080B74A8: - lsrs r0, r1, 17 -_080B74AA: - strh r0, [r6, 0x3C] - movs r1, 0x3A - ldrsh r0, [r6, r1] - movs r2, 0x3C - ldrsh r1, [r6, r2] - bl Cos - strh r0, [r6, 0x24] - movs r1, 0x3A - ldrsh r0, [r6, r1] - movs r2, 0x3C - ldrsh r1, [r6, r2] - bl Sin - strh r0, [r6, 0x26] - ldr r0, _080B74D4 @ =sub_80B74D8 - str r0, [r6, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B74D4: .4byte sub_80B74D8 - thumb_func_end sub_80B7448 - - thumb_func_start sub_80B74D8 -sub_80B74D8: @ 80B74D8 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x2E - ldrsh r5, [r4, r0] - cmp r5, 0 - beq _080B74EA - cmp r5, 0x1 - beq _080B7556 - b _080B75DA -_080B74EA: - ldrh r0, [r4, 0x3A] - ldrh r1, [r4, 0x38] - subs r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3A] - movs r1, 0x3A - ldrsh r0, [r4, r1] - movs r2, 0x3C - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x24] - movs r1, 0x3A - ldrsh r0, [r4, r1] - movs r2, 0x3C - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _080B753C - strh r5, [r4, 0x36] - ldrh r1, [r4, 0x38] - movs r2, 0x38 - ldrsh r0, [r4, r2] - cmp r0, 0xF - bgt _080B753C - adds r0, r1, 0x1 - strh r0, [r4, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - ble _080B753C - movs r0, 0x10 - strh r0, [r4, 0x38] -_080B753C: - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3C - ble _080B75DA - movs r0, 0 - strh r0, [r4, 0x34] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080B75DA -_080B7556: - ldrh r0, [r4, 0x3A] - ldrh r1, [r4, 0x38] - subs r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3A] - ldrh r1, [r4, 0x3C] - movs r2, 0x3C - ldrsh r0, [r4, r2] - cmp r0, 0x95 - bgt _080B757E - adds r0, r1, 0 - adds r0, 0x8 - strh r0, [r4, 0x3C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x95 - ble _080B757E - movs r0, 0x96 - strh r0, [r4, 0x3C] -_080B757E: - movs r1, 0x3A - ldrsh r0, [r4, r1] - movs r2, 0x3C - ldrsh r1, [r4, r2] - bl Cos - strh r0, [r4, 0x24] - movs r1, 0x3A - ldrsh r0, [r4, r1] - movs r2, 0x3C - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _080B75C6 - movs r0, 0 - strh r0, [r4, 0x36] - ldrh r1, [r4, 0x38] - movs r2, 0x38 - ldrsh r0, [r4, r2] - cmp r0, 0xF - bgt _080B75C6 - adds r0, r1, 0x1 - strh r0, [r4, 0x38] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - ble _080B75C6 - movs r0, 0x10 - strh r0, [r4, 0x38] -_080B75C6: - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _080B75DA - adds r0, r4, 0 - bl DestroyAnimSprite -_080B75DA: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B74D8 - - thumb_func_start sub_80B75E0 -sub_80B75E0: @ 80B75E0 - push {r4-r6,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080B760C @ =gTasks - adds r4, r1, r0 - ldr r0, _080B7610 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B761C - ldr r0, _080B7614 @ =0x04000014 - str r0, [sp] - ldr r0, _080B7618 @ =gBattle_BG1_X - b _080B7622 - .align 2, 0 -_080B760C: .4byte gTasks -_080B7610: .4byte gBattleAnimAttacker -_080B7614: .4byte 0x04000014 -_080B7618: .4byte gBattle_BG1_X -_080B761C: - ldr r0, _080B7698 @ =0x04000018 - str r0, [sp] - ldr r0, _080B769C @ =gBattle_BG2_X -_080B7622: - ldrh r0, [r0] - strh r0, [r4, 0xC] - ldr r0, _080B76A0 @ =0xa2600001 - str r0, [sp, 0x4] - mov r1, sp - movs r5, 0 - movs r0, 0x1 - strb r0, [r1, 0x8] - mov r0, sp - strb r5, [r0, 0x9] - ldr r0, _080B76A4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerYCoordWithElevation - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - subs r1, 0x20 - strh r1, [r4, 0xE] - adds r0, 0x20 - strh r0, [r4, 0x10] - cmp r1, 0 - bge _080B7652 - strh r5, [r4, 0xE] -_080B7652: - ldrh r3, [r4, 0xE] - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r3, r0 - bgt _080B7680 - ldr r5, _080B76A8 @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r6, r5, r0 -_080B7664: - lsls r1, r3, 1 - adds r2, r1, r5 - ldrh r0, [r4, 0xC] - strh r0, [r2] - adds r1, r6 - ldrh r0, [r4, 0xC] - strh r0, [r1] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r3, r0 - ble _080B7664 -_080B7680: - ldr r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - bl ScanlineEffect_SetParams - ldr r0, _080B76AC @ =sub_80B76B0 - str r0, [r4] - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B7698: .4byte 0x04000018 -_080B769C: .4byte gBattle_BG2_X -_080B76A0: .4byte 0xa2600001 -_080B76A4: .4byte gBattleAnimAttacker -_080B76A8: .4byte gScanlineEffectRegBuffers -_080B76AC: .4byte sub_80B76B0 - thumb_func_end sub_80B75E0 - - thumb_func_start sub_80B76B0 -sub_80B76B0: @ 80B76B0 - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - ldr r1, _080B76D4 @ =gTasks - adds r2, r0, r1 - movs r1, 0x8 - ldrsh r0, [r2, r1] - cmp r0, 0x4 - bhi _080B7766 - lsls r0, 2 - ldr r1, _080B76D8 @ =_080B76DC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B76D4: .4byte gTasks -_080B76D8: .4byte _080B76DC - .align 2, 0 -_080B76DC: - .4byte _080B76F0 - .4byte _080B7712 - .4byte _080B7722 - .4byte _080B774E - .4byte _080B7760 -_080B76F0: - ldrh r0, [r2, 0x16] - adds r0, 0x1 - strh r0, [r2, 0x16] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B7746 - movs r0, 0 - strh r0, [r2, 0x16] - ldrh r0, [r2, 0x14] - adds r0, 0x1 - strh r0, [r2, 0x14] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _080B7746 - b _080B7740 -_080B7712: - ldrh r0, [r2, 0xA] - adds r0, 0x1 - strh r0, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3C - ble _080B7746 - b _080B7740 -_080B7722: - ldrh r0, [r2, 0x16] - adds r0, 0x1 - strh r0, [r2, 0x16] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B7746 - movs r0, 0 - strh r0, [r2, 0x16] - ldrh r0, [r2, 0x14] - subs r0, 0x1 - strh r0, [r2, 0x14] - lsls r0, 16 - cmp r0, 0 - bne _080B7746 -_080B7740: - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] -_080B7746: - adds r0, r2, 0 - bl sub_80B776C - b _080B7766 -_080B774E: - ldr r1, _080B775C @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - b _080B7766 - .align 2, 0 -_080B775C: .4byte gScanlineEffect -_080B7760: - adds r0, r3, 0 - bl DestroyAnimVisualTask -_080B7766: - pop {r0} - bx r0 - thumb_func_end sub_80B76B0 - - thumb_func_start sub_80B776C -sub_80B776C: @ 80B776C - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - ldrh r3, [r5, 0x12] - ldrh r4, [r5, 0xE] - movs r1, 0x10 - ldrsh r0, [r5, r1] - cmp r4, r0 - bgt _080B77C2 - ldr r7, _080B77D8 @ =gScanlineEffectRegBuffers - mov r12, r7 - ldr r0, _080B77DC @ =gSineTable - mov r8, r0 - ldr r6, _080B77E0 @ =gScanlineEffect -_080B778A: - lsls r2, r4, 1 - ldrb r1, [r6, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - add r2, r12 - lsls r0, r3, 1 - add r0, r8 - movs r7, 0 - ldrsh r1, [r0, r7] - movs r7, 0x14 - ldrsh r0, [r5, r7] - muls r0, r1 - asrs r0, 7 - ldrh r1, [r5, 0xC] - adds r0, r1 - strh r0, [r2] - adds r3, 0x8 - movs r0, 0xFF - ands r3, r0 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - movs r7, 0x10 - ldrsh r0, [r5, r7] - cmp r4, r0 - ble _080B778A -_080B77C2: - ldrh r0, [r5, 0x12] - adds r0, 0x9 - movs r1, 0xFF - ands r0, r1 - strh r0, [r5, 0x12] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B77D8: .4byte gScanlineEffectRegBuffers -_080B77DC: .4byte gSineTable -_080B77E0: .4byte gScanlineEffect - thumb_func_end sub_80B776C - - thumb_func_start sub_80B77E4 -sub_80B77E4: @ 80B77E4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r4, r0, 0 - ldr r5, _080B7884 @ =gBattleAnimArgs - movs r0, 0x4 - ldrsh r1, [r5, r0] - lsls r0, r1, 1 - adds r0, r1 - movs r1, 0x5 - bl __divsi3 - adds r6, r0, 0 - ldr r1, _080B7888 @ =gBattleAnimAttacker - mov r8, r1 - ldrb r0, [r1] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - mov r2, r8 - ldrb r0, [r2] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r3, [r5, 0x8] - adds r0, r3 - strh r0, [r4, 0x22] - movs r1, 0x2 - ldrsh r0, [r5, r1] - movs r2, 0x4 - ldrsh r1, [r5, r2] - bl Cos - strh r0, [r4, 0x30] - movs r3, 0x2 - ldrsh r0, [r5, r3] - lsls r6, 16 - asrs r6, 16 - adds r1, r6, 0 - bl Sin - strh r0, [r4, 0x32] - ldrh r1, [r4, 0x30] - ldrh r2, [r5] - adds r3, r2, 0 - muls r3, r1 - adds r1, r3, 0 - ldrh r3, [r4, 0x20] - adds r1, r3 - strh r1, [r4, 0x20] - adds r1, r2, 0 - muls r1, r0 - adds r0, r1, 0 - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x34] - ldr r0, _080B788C @ =sub_80B7894 - str r0, [r4, 0x1C] - adds r4, 0x2E - ldr r2, _080B7890 @ =gUnknown_20399A4 - movs r1, 0x6 -_080B786C: - ldrh r0, [r4] - strh r0, [r2] - adds r4, 0x2 - adds r2, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _080B786C - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B7884: .4byte gBattleAnimArgs -_080B7888: .4byte gBattleAnimAttacker -_080B788C: .4byte sub_80B7894 -_080B7890: .4byte gUnknown_20399A4 - thumb_func_end sub_80B77E4 - - thumb_func_start sub_80B7894 -sub_80B7894: @ 80B7894 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x36] - adds r0, r1 - strh r0, [r4, 0x36] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x38] - adds r0, r2 - strh r0, [r4, 0x38] - movs r1, 0x36 - ldrsh r0, [r4, r1] - movs r1, 0xA - bl __divsi3 - strh r0, [r4, 0x24] - movs r2, 0x38 - ldrsh r0, [r4, r2] - movs r1, 0xA - bl __divsi3 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x34 - ldrsh r1, [r4, r2] - cmp r0, r1 - ble _080B78D8 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B78D8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B7894 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_835B488.s b/data/data_835B488.s index e55eaea08..41b35a648 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -930,7 +930,7 @@ gUnknown_83E7668:: @ 83E7668 .incbin "baserom.gba", 0x3E7668, 0x78 gUnknown_83E76E0:: @ 83E76E0 - .incbin "baserom.gba", 0x3E76E0, 0x198 + .incbin "baserom.gba", 0x3E76E0, 0x30 .section .rodata.83E7CFC diff --git a/include/battle_anim.h b/include/battle_anim.h index 9ef664647..16c3b7819 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -67,6 +67,7 @@ extern struct OamData gOamData_83ACB58; extern struct OamData gOamData_83ACAF8; extern struct OamData gOamData_83ACB60; extern struct OamData gOamData_83ACA30; +extern struct OamData gOamData_83ACA98; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); @@ -283,6 +284,9 @@ void sub_80B94B4(u8 taskId); void AnimTask_IsPowerOver99(u8 taskId); void sub_80B9800(u8 taskId); +// dragon.c +void sub_80B75E0(u8 taskId); + // flying.s void sub_80B1D3C(struct Sprite *sprite); diff --git a/ld_script.txt b/ld_script.txt index da75ef40d..4e7e0f200 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -166,7 +166,7 @@ SECTIONS { asm/bug.o(.text); asm/rock.o(.text); asm/ghost.o(.text); - asm/dragon.o(.text); + src/dragon.o(.text); src/dark.o(.text); src/ground.o(.text); src/normal.o(.text); @@ -422,6 +422,7 @@ SECTIONS { src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); data/data_835B488.o(.rodata.83DF09C); + src/dragon.o(.rodata); src/dark.o(.rodata); src/ground.o(.rodata); src/normal.o(.rodata); diff --git a/src/dragon.c b/src/dragon.c new file mode 100644 index 000000000..34f97ba74 --- /dev/null +++ b/src/dragon.c @@ -0,0 +1,431 @@ +#include "global.h" +#include "battle_anim.h" +#include "scanline_effect.h" +#include "task.h" +#include "trig.h" + +static void sub_80B725C(struct Sprite *sprite); +static void sub_80B741C(struct Sprite *sprite); +static void sub_80B73AC(struct Sprite *sprite); +static void sub_80B7448(struct Sprite *sprite); +static void sub_80B77E4(struct Sprite *sprite); +static void sub_80B74D8(struct Sprite *sprite); +static void sub_80B76B0(u8 taskId); +static void sub_80B776C(struct Task *task); +static void sub_80B7894(struct Sprite *sprite); + +static EWRAM_DATA u16 gUnknown_20399A4[7] = {0}; + +static const union AnimCmd gUnknown_83E7710[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E7728[] = +{ + gUnknown_83E7710, +}; + +const struct SpriteTemplate gUnknown_83E772C = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E7728, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B725C, +}; + +static const union AnimCmd gUnknown_83E7744[] = +{ + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd gUnknown_83E7754[] = +{ + ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(48, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E7764[] = +{ + gUnknown_83E7744, + gUnknown_83E7754, +}; + +static const union AffineAnimCmd gUnknown_83E776C[] = +{ + AFFINEANIMCMD_FRAME(0x50, 0x50, 127, 0), + AFFINEANIMCMD_FRAME(0xD, 0xD, 0, 100), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E7784[] = +{ + AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0), + AFFINEANIMCMD_FRAME(0xD, 0xD, 0, 100), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E779C[] = +{ + gUnknown_83E776C, + gUnknown_83E7784, +}; + +const struct SpriteTemplate gUnknown_83E77A4 = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83ACA98, + .anims = gUnknown_83E7764, + .images = NULL, + .affineAnims = gUnknown_83E779C, + .callback = sub_80B741C, +}; + +const union AnimCmd gUnknown_83E77BC[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_FRAME(64, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E77D4[] = +{ + gUnknown_83E77BC, +}; + +const struct SpriteTemplate gUnknown_83E77D8 = +{ + .tileTag = ANIM_TAG_FIRE_PLUME, + .paletteTag = ANIM_TAG_FIRE_PLUME, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E77D4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B73AC, +}; + +static const union AnimCmd gUnknown_83E77F0[] = +{ + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E7800[] = +{ + gUnknown_83E77F0, + gUnknown_83E77F0, +}; + +static const union AffineAnimCmd gUnknown_83E7808[] = +{ + AFFINEANIMCMD_FRAME(0x64, 0x64, 127, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E7818[] = +{ + AFFINEANIMCMD_FRAME(0x64, 0x64, 0, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E7828[] = +{ + gUnknown_83E7808, + gUnknown_83E7818, +}; + +const struct SpriteTemplate gUnknown_83E7830 = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83ACA98, + .anims = gUnknown_83E7800, + .images = NULL, + .affineAnims = gUnknown_83E7828, + .callback = sub_80B741C, +}; + +const struct SpriteTemplate gUnknown_83E7848 = +{ + .tileTag = ANIM_TAG_HOLLOW_ORB, + .paletteTag = ANIM_TAG_HOLLOW_ORB, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B7448, +}; + +const struct SpriteTemplate gUnknown_83E7860 = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E7728, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B77E4, +}; + +static void sub_80B725C(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + gBattleAnimArgs[4] = -gBattleAnimArgs[4]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + sprite->invisible = TRUE; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteLinearAndFlicker; +} + +static void sub_80B72F8(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x -= gBattleAnimArgs[1]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[2] -= gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[2] += gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; + StartSpriteAnim(sprite, 1); + } + sprite->data[0] = gBattleAnimArgs[4]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); +} + +static void sub_80B73AC(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + } + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[1]); + sprite->pos1.y += gBattleAnimArgs[2]; + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); +} + +static void sub_80B741C(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + StartSpriteAffineAnim(sprite, 1); + sub_80B72F8(sprite); +} + +static void sub_80B7448(struct Sprite *sprite) +{ + u16 r5; + u16 r0; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[4] = 0; + sprite->data[5] = 1; + sprite->data[6] = gBattleAnimArgs[0]; + r5 = GetBattlerSpriteCoordAttr(gBattlerAttacker, BATTLER_COORD_ATTR_HEIGHT); + r0 = GetBattlerSpriteCoordAttr(gBattlerAttacker, BATTLER_COORD_ATTR_WIDTH); + if (r5 > r0) + sprite->data[7] = r5 / 2; + else + sprite->data[7] = r0 / 2; + sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]); + sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]); + sprite->callback = sub_80B74D8; +} + +static void sub_80B74D8(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF; + sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]); + sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]); + if (++sprite->data[4] > 5) + { + sprite->data[4] = 0; + if (sprite->data[5] <= 15 && ++sprite->data[5] > 15) + sprite->data[5] = 16; + } + if (++sprite->data[3] > 0x3C) + { + sprite->data[3] = 0; + ++sprite->data[0]; + } + break; + case 1: + sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF; + if (sprite->data[7] <= 0x95 && (sprite->data[7] += 8) > 0x95) + sprite->data[7] = 0x96; + sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]); + sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]); + if (++sprite->data[4] > 5) + { + sprite->data[4] = 0; + if (sprite->data[5] <= 15 && ++sprite->data[5] > 15) + sprite->data[5] = 16; + } + if (++sprite->data[3] > 20) + DestroyAnimSprite(sprite); + break; + } +} + +void sub_80B75E0(u8 taskId) +{ + struct ScanlineEffectParams sp; + struct Task *task = &gTasks[taskId]; + u16 i; + u8 r1; + + if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) + { + sp.dmaDest = ®_BG1HOFS; + task->data[2] = gBattle_BG1_X; + } + else + { + sp.dmaDest = ®_BG2HOFS; + task->data[2] = gBattle_BG2_X; + } + sp.dmaControl = 0xA2600001; + sp.initState = 1; + sp.unused9 = 0; + r1 = GetBattlerYCoordWithElevation(gBattleAnimAttacker); + task->data[3] = r1 - 32; + task->data[4] = r1 + 32; + if (task->data[3] < 0) + task->data[3] = 0; + for (i = task->data[3]; i <= task->data[4]; ++i) + { + gScanlineEffectRegBuffers[0][i] = task->data[2]; + gScanlineEffectRegBuffers[1][i] = task->data[2]; + } + ScanlineEffect_SetParams(sp); + task->func = sub_80B76B0; +} + +static void sub_80B76B0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[7] > 1) + { + task->data[7] = 0; + if (++task->data[6] == 3) + ++task->data[0]; + } + sub_80B776C(task); + break; + case 1: + if (++task->data[1] > 0x3C) + ++task->data[0]; + sub_80B776C(task); + break; + case 2: + if (++task->data[7] > 1) + { + task->data[7] = 0; + if (--task->data[6] == 0) + ++task->data[0]; + } + sub_80B776C(task); + break; + case 3: + gScanlineEffect.state = 3; + ++task->data[0]; + break; + case 4: + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80B776C(struct Task *task) +{ + u16 i, r3 = task->data[5]; + + for (i = task->data[3]; i <= task->data[4]; ++i) + { + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = ((gSineTable[r3] * task->data[6]) >> 7) + task->data[2]; + r3 = (r3 + 8) & 0xFF; + } + task->data[5] = (task->data[5] + 9) & 0xFF; +} + +static void sub_80B77E4(struct Sprite *sprite) +{ + s32 i, r6 = (gBattleAnimArgs[2] * 3) / 5; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[4]; + sprite->data[1] = Cos(gBattleAnimArgs[1], gBattleAnimArgs[2]); + sprite->data[2] = Sin(gBattleAnimArgs[1], r6); + sprite->pos1.x += sprite->data[1] * gBattleAnimArgs[0]; + sprite->pos1.y += sprite->data[2] * gBattleAnimArgs[0]; + sprite->data[3] = gBattleAnimArgs[3]; + sprite->callback = sub_80B7894; + for (i = 0; i < 7; ++i) + gUnknown_20399A4[i] = sprite->data[i]; +} + +static void sub_80B7894(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[1]; + sprite->data[5] += sprite->data[2]; + sprite->pos2.x = sprite->data[4] / 10; + sprite->pos2.y = sprite->data[5] / 10; + if (++sprite->data[0] > sprite->data[3]) + DestroyAnimSprite(sprite); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 71b832e87..160b9d574 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -878,9 +878,7 @@ gUnknown_203998C: @ 203998C gUnknown_203999C: @ 203999C .space 0x8 -gUnknown_20399A4: @ 20399A4 - .space 0x10 - + .include "src/dragon.o" .include "src/battle_anim_utility_funcs.o" .include "src/battle_intro.o" From c0c4a2e94b691ec102fa84eb555b7964daf92be0 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 11 Oct 2019 06:01:19 +0800 Subject: [PATCH 09/25] ghost --- asm/ghost.s | 4054 ----------------------------------------- data/data_835B488.s | 8 +- include/battle_anim.h | 20 +- include/graphics.h | 7 +- ld_script.txt | 3 +- src/dark.c | 6 +- src/ghost.c | 1484 +++++++++++++++ 7 files changed, 1514 insertions(+), 4068 deletions(-) delete mode 100644 asm/ghost.s create mode 100644 src/ghost.c diff --git a/asm/ghost.s b/asm/ghost.s deleted file mode 100644 index 0e8796310..000000000 --- a/asm/ghost.s +++ /dev/null @@ -1,4054 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80B5268 -sub_80B5268: @ 80B5268 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r0, _080B52C4 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x30] - ldr r5, _080B52C8 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x22] - strh r0, [r4, 0x34] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x36] - adds r0, r4, 0 - bl sub_8075678 - ldr r0, _080B52CC @ =sub_80B52D0 - str r0, [r4, 0x1C] - movs r0, 0x10 - strh r0, [r4, 0x3A] - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - ldrh r1, [r4, 0x3A] - movs r0, 0x52 - bl SetGpuReg - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B52C4: .4byte gBattleAnimArgs -_080B52C8: .4byte gBattleAnimTarget -_080B52CC: .4byte sub_80B52D0 - thumb_func_end sub_80B5268 - - thumb_func_start sub_80B52D0 -sub_80B52D0: @ 80B52D0 - push {r4,lr} - adds r4, r0, 0 - bl sub_80B53C0 - adds r0, r4, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - beq _080B52F0 - ldr r0, _080B52EC @ =sub_80B5344 - str r0, [r4, 0x1C] - b _080B533A - .align 2, 0 -_080B52EC: .4byte sub_80B5344 -_080B52F0: - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r1, 0xA - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r1, 0xF - bl Cos - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r2, [r4, 0x38] - adds r0, r2, 0x5 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x38] - lsls r2, 16 - asrs r2, 16 - cmp r2, 0 - beq _080B5328 - cmp r2, 0xC4 - ble _080B533A -_080B5328: - lsls r0, 16 - cmp r0, 0 - ble _080B533A - ldr r0, _080B5340 @ =gUnknown_2037F24 - movs r1, 0 - ldrsb r1, [r0, r1] - movs r0, 0xBD - bl PlaySE12WithPanning -_080B533A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B5340: .4byte gUnknown_2037F24 - thumb_func_end sub_80B52D0 - - thumb_func_start sub_80B5344 -sub_80B5344: @ 80B5344 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x1 - strh r0, [r4, 0x2E] - adds r0, r4, 0 - bl AnimTranslateLinear - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r1, 0xA - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r1, 0xF - bl Cos - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r2, [r4, 0x38] - adds r0, r2, 0x5 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x38] - lsls r2, 16 - asrs r2, 16 - cmp r2, 0 - beq _080B538A - cmp r2, 0xC4 - ble _080B5396 -_080B538A: - lsls r0, 16 - cmp r0, 0 - ble _080B5396 - movs r0, 0xBD - bl PlaySE -_080B5396: - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B53B4 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080B53B0 @ =DestroyAnimSpriteAndDisableBlend - str r0, [r4, 0x1C] - b _080B53BA - .align 2, 0 -_080B53B0: .4byte DestroyAnimSpriteAndDisableBlend -_080B53B4: - adds r0, r4, 0 - bl sub_80B53C0 -_080B53BA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B5344 - - thumb_func_start sub_80B53C0 -sub_80B53C0: @ 80B53C0 - push {r4,lr} - adds r4, r0, 0 - ldrh r2, [r4, 0x3A] - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0xFF - ble _080B53E4 - adds r0, r2, 0x1 - strh r0, [r4, 0x3A] - lsls r0, 16 - ldr r1, _080B53E0 @ =0x010d0000 - cmp r0, r1 - bne _080B544A - movs r0, 0 - b _080B5448 - .align 2, 0 -_080B53E0: .4byte 0x010d0000 -_080B53E4: - ldrh r1, [r4, 0x3C] - adds r3, r1, 0x1 - strh r3, [r4, 0x3C] - movs r0, 0xFF - ands r0, r1 - cmp r0, 0 - bne _080B544A - ldr r1, _080B5408 @ =0xffffff00 - ands r1, r3 - strh r1, [r4, 0x3C] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _080B540C - adds r0, r2, 0x1 - b _080B540E - .align 2, 0 -_080B5408: .4byte 0xffffff00 -_080B540C: - subs r0, r2, 0x1 -_080B540E: - strh r0, [r4, 0x3A] - ldrh r0, [r4, 0x3A] - movs r1, 0x10 - subs r1, r0 - lsls r1, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r2, 0x3A - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080B5430 - cmp r0, 0x10 - bne _080B543C -_080B5430: - ldrh r0, [r4, 0x3C] - movs r2, 0x80 - lsls r2, 1 - adds r1, r2, 0 - eors r0, r1 - strh r0, [r4, 0x3C] -_080B543C: - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B544A - movs r0, 0x80 - lsls r0, 1 -_080B5448: - strh r0, [r4, 0x3A] -_080B544A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B53C0 - - thumb_func_start sub_80B5450 -sub_80B5450: @ 80B5450 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r1, _080B546C @ =sub_80B5470 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B546C: .4byte sub_80B5470 - thumb_func_end sub_80B5450 - - thumb_func_start sub_80B5470 -sub_80B5470: @ 80B5470 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r1, 0x20 - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r1, 0x8 - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x2E] - subs r0, 0x41 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x82 - bhi _080B54A4 - ldrb r0, [r4, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r0 - movs r0, 0x8 - b _080B54AE -_080B54A4: - ldrb r0, [r4, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r0 - movs r0, 0x4 -_080B54AE: - orrs r1, r0 - strb r1, [r4, 0x5] - ldrh r0, [r4, 0x2E] - adds r0, 0x13 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x32] - adds r0, 0x50 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3D - bne _080B54E0 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B54E0: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B5470 - - thumb_func_start sub_80B54E8 -sub_80B54E8: @ 80B54E8 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0 - bl GetAnimBattlerSpriteId - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0x1 - bl PrepareBattlerSpriteForRotScale - adds r0, r4, 0 - movs r1, 0x80 - movs r2, 0x80 - movs r3, 0 - bl SetSpriteRotScale - ldr r1, _080B5560 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] - ldr r1, _080B5564 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r2, 0 - movs r1, 0x80 - strh r1, [r0, 0x8] - ldr r1, _080B5568 @ =gBattleAnimArgs - ldrh r1, [r1] - strh r1, [r0, 0xA] - strh r2, [r0, 0xC] - movs r1, 0x10 - strh r1, [r0, 0xE] - ldr r1, _080B556C @ =sub_80B5570 - str r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B5560: .4byte gSprites -_080B5564: .4byte gTasks -_080B5568: .4byte gBattleAnimArgs -_080B556C: .4byte sub_80B5570 - thumb_func_end sub_80B54E8 - - thumb_func_start sub_80B5570 -sub_80B5570: @ 80B5570 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B55C0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - strh r0, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _080B55B8 - movs r0, 0 - strh r0, [r4, 0x1C] - ldrh r1, [r4, 0xC] - adds r1, 0x1 - strh r1, [r4, 0xC] - ldrh r0, [r4, 0xE] - subs r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x9 - bne _080B55B8 - ldr r0, _080B55C4 @ =sub_80B55C8 - str r0, [r4] -_080B55B8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B55C0: .4byte gTasks -_080B55C4: .4byte sub_80B55C8 - thumb_func_end sub_80B5570 - - thumb_func_start sub_80B55C8 -sub_80B55C8: @ 80B55C8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - ldr r1, _080B55EC @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080B55F0 - subs r0, r1, 0x1 - strh r0, [r4, 0xA] - b _080B5634 - .align 2, 0 -_080B55EC: .4byte gTasks -_080B55F0: - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r1, r0, 24 - ldrh r0, [r4, 0x8] - adds r0, 0x8 - strh r0, [r4, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xFF - bgt _080B5618 - movs r0, 0x8 - ldrsh r2, [r4, r0] - adds r0, r1, 0 - adds r1, r2, 0 - movs r3, 0 - bl SetSpriteRotScale - b _080B5634 -_080B5618: - adds r0, r1, 0 - bl ResetSpriteRotScale - adds r0, r5, 0 - bl DestroyAnimVisualTask - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg -_080B5634: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B55C8 - - thumb_func_start sub_80B563C -sub_80B563C: @ 80B563C - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x4 - adds r4, r0, 0 - ldrh r5, [r4, 0x20] - ldrh r6, [r4, 0x22] - ldr r0, _080B56D8 @ =gBattleAnimAttacker - mov r8, r0 - ldrb r0, [r0] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - mov r9, r1 - strh r0, [r4, 0x20] - mov r1, r8 - ldrb r0, [r1] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - mov r1, r9 - strh r1, [r4, 0x2E] - ldr r2, _080B56DC @ =gBattleAnimArgs - ldrh r1, [r2] - strh r1, [r4, 0x30] - ldrh r1, [r2, 0x2] - strh r1, [r4, 0x32] - ldrh r1, [r2, 0x4] - strh r1, [r4, 0x34] - ldrh r1, [r4, 0x20] - lsls r1, 4 - strh r1, [r4, 0x36] - lsls r0, 4 - strh r0, [r4, 0x38] - lsls r5, 16 - asrs r5, 16 - movs r1, 0x20 - ldrsh r0, [r4, r1] - subs r5, r0 - lsls r5, 4 - movs r0, 0 - ldrsh r1, [r2, r0] - lsls r1, 1 - adds r0, r5, 0 - str r2, [sp] - bl __divsi3 - strh r0, [r4, 0x3A] - lsls r6, 16 - asrs r6, 16 - movs r1, 0x22 - ldrsh r0, [r4, r1] - subs r6, r0 - lsls r6, 4 - ldr r2, [sp] - movs r0, 0 - ldrsh r1, [r2, r0] - lsls r1, 1 - adds r0, r6, 0 - bl __divsi3 - strh r0, [r4, 0x3C] - ldr r0, _080B56E0 @ =sub_80B56E4 - str r0, [r4, 0x1C] - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B56D8: .4byte gBattleAnimAttacker -_080B56DC: .4byte gBattleAnimArgs -_080B56E0: .4byte sub_80B56E4 - thumb_func_end sub_80B563C - - thumb_func_start sub_80B56E4 -sub_80B56E4: @ 80B56E4 - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _080B572E - cmp r0, 0x1 - bgt _080B56FA - cmp r0, 0 - beq _080B5704 - b _080B57F2 -_080B56FA: - cmp r0, 0x2 - beq _080B5798 - cmp r0, 0x3 - beq _080B57EC - b _080B57F2 -_080B5704: - ldrh r0, [r5, 0x3A] - ldrh r2, [r5, 0x36] - adds r0, r2 - strh r0, [r5, 0x36] - ldrh r1, [r5, 0x3C] - ldrh r2, [r5, 0x38] - adds r1, r2 - strh r1, [r5, 0x38] - lsls r0, 16 - asrs r0, 20 - strh r0, [r5, 0x20] - lsls r1, 16 - asrs r1, 20 - strh r1, [r5, 0x22] - ldrh r0, [r5, 0x30] - subs r0, 0x1 - strh r0, [r5, 0x30] - lsls r0, 16 - cmp r0, 0 - bgt _080B57F2 - b _080B57DE -_080B572E: - ldrh r0, [r5, 0x32] - subs r0, 0x1 - strh r0, [r5, 0x32] - lsls r0, 16 - cmp r0, 0 - bgt _080B57F2 - ldr r4, _080B5794 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x30] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x20] - lsls r0, 4 - strh r0, [r5, 0x36] - ldrh r0, [r5, 0x22] - lsls r0, 4 - strh r0, [r5, 0x38] - movs r1, 0x30 - ldrsh r0, [r5, r1] - movs r2, 0x20 - ldrsh r1, [r5, r2] - subs r0, r1 - lsls r0, 4 - movs r2, 0x34 - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r5, 0x3A] - movs r1, 0x32 - ldrsh r0, [r5, r1] - movs r2, 0x22 - ldrsh r1, [r5, r2] - subs r0, r1 - lsls r0, 4 - movs r2, 0x34 - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r5, 0x3C] - b _080B57DE - .align 2, 0 -_080B5794: .4byte gBattleAnimTarget -_080B5798: - ldrh r0, [r5, 0x3A] - ldrh r1, [r5, 0x36] - adds r0, r1 - strh r0, [r5, 0x36] - ldrh r1, [r5, 0x3C] - ldrh r2, [r5, 0x38] - adds r1, r2 - strh r1, [r5, 0x38] - lsls r0, 16 - asrs r0, 20 - strh r0, [r5, 0x20] - lsls r1, 16 - asrs r1, 20 - strh r1, [r5, 0x22] - ldrh r0, [r5, 0x34] - subs r0, 0x1 - strh r0, [r5, 0x34] - lsls r0, 16 - cmp r0, 0 - bgt _080B57F2 - ldr r4, _080B57E8 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] -_080B57DE: - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - b _080B57F2 - .align 2, 0 -_080B57E8: .4byte gBattleAnimTarget -_080B57EC: - adds r0, r5, 0 - bl DestroySpriteAndMatrix -_080B57F2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B56E4 - - thumb_func_start sub_80B57F8 -sub_80B57F8: @ 80B57F8 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r0, _080B580C @ =sub_80B5810 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B580C: .4byte sub_80B5810 - thumb_func_end sub_80B57F8 - - thumb_func_start sub_80B5810 -sub_80B5810: @ 80B5810 - push {r4-r6,lr} - adds r3, r0, 0 - movs r5, 0 - movs r6, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080B58A6 - adds r1, r3, 0 - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x4 - ands r0, r2 - adds r4, r1, 0 - cmp r0, 0 - bne _080B583A - movs r0, 0x4 - orrs r0, r2 - strb r0, [r4] -_080B583A: - movs r1, 0x2E - ldrsh r0, [r3, r1] - cmp r0, 0 - beq _080B584A - cmp r0, 0x1 - beq _080B5854 - movs r6, 0x1 - b _080B585E -_080B584A: - movs r1, 0x30 - ldrsh r0, [r3, r1] - cmp r0, 0x2 - bne _080B585E - b _080B5862 -_080B5854: - movs r1, 0x30 - ldrsh r0, [r3, r1] - cmp r0, 0x4 - bne _080B585E - movs r5, 0x1 -_080B585E: - cmp r5, 0 - beq _080B5894 -_080B5862: - ldrb r2, [r4] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4] - ldrh r0, [r3, 0x32] - adds r0, 0x1 - movs r1, 0 - strh r0, [r3, 0x32] - strh r1, [r3, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - bne _080B58A6 - strh r1, [r3, 0x32] - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - b _080B58A6 -_080B5894: - cmp r6, 0 - beq _080B58A0 - adds r0, r3, 0 - bl DestroyAnimSprite - b _080B58A6 -_080B58A0: - ldrh r0, [r3, 0x30] - adds r0, 0x1 - strh r0, [r3, 0x30] -_080B58A6: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80B5810 - - thumb_func_start sub_80B58AC -sub_80B58AC: @ 80B58AC - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080B58D8 @ =gTasks - adds r5, r0, r1 - movs r0, 0x1 - bl CloneBattlerSpriteWithBlend - movs r6, 0 - movs r1, 0 - strh r0, [r5, 0x8] - lsls r0, 16 - cmp r0, 0 - bge _080B58DC - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _080B59B8 - .align 2, 0 -_080B58D8: .4byte gTasks -_080B58DC: - strh r1, [r5, 0xA] - movs r0, 0xF - strh r0, [r5, 0xC] - movs r0, 0x2 - strh r0, [r5, 0xE] - strh r1, [r5, 0x10] - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - ldrh r1, [r5, 0xE] - lsls r1, 8 - ldrh r0, [r5, 0xC] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - ldr r4, _080B5944 @ =gSprites - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x50 - strh r1, [r0, 0x2E] - ldr r0, _080B5948 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B5950 - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _080B594C @ =0x0000ff70 - strh r1, [r0, 0x30] - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x70 - b _080B596E - .align 2, 0 -_080B5944: .4byte gSprites -_080B5948: .4byte gBattleAnimTarget -_080B594C: .4byte 0x0000ff70 -_080B5950: - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x90 - strh r1, [r0, 0x30] - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _080B59C0 @ =0x0000ff90 -_080B596E: - strh r1, [r0, 0x32] - ldr r4, _080B59C4 @ =gSprites - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r2, 0 - strh r2, [r0, 0x34] - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r2, [r0, 0x36] - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _080B59C8 @ =SpriteCallbackDummy - bl StoreSpriteCallbackInData6 - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _080B59CC @ =TranslateSpriteLinearFixedPoint - str r1, [r0] - ldr r0, _080B59D0 @ =sub_80B59D4 - str r0, [r5] -_080B59B8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B59C0: .4byte 0x0000ff90 -_080B59C4: .4byte gSprites -_080B59C8: .4byte SpriteCallbackDummy -_080B59CC: .4byte TranslateSpriteLinearFixedPoint -_080B59D0: .4byte sub_80B59D4 - thumb_func_end sub_80B58AC - - thumb_func_start sub_80B59D4 -sub_80B59D4: @ 80B59D4 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B59F8 @ =gTasks - adds r4, r0, r1 - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080B5A78 - cmp r0, 0x1 - bgt _080B59FC - cmp r0, 0 - beq _080B5A02 - b _080B5AA4 - .align 2, 0 -_080B59F8: .4byte gTasks -_080B59FC: - cmp r0, 0x2 - beq _080B5A9E - b _080B5AA4 -_080B5A02: - ldrh r1, [r4, 0xA] - adds r1, 0x1 - strh r1, [r4, 0xA] - movs r0, 0x3 - ands r0, r1 - strh r0, [r4, 0x12] - cmp r0, 0x1 - bne _080B5A20 - ldrh r1, [r4, 0xC] - movs r2, 0xC - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080B5A20 - subs r0, r1, 0x1 - strh r0, [r4, 0xC] -_080B5A20: - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0x3 - bne _080B5A36 - ldrh r1, [r4, 0xE] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r0, 0xF - bgt _080B5A36 - adds r0, r1, 0x1 - strh r0, [r4, 0xE] -_080B5A36: - ldrh r1, [r4, 0xE] - lsls r1, 8 - ldrh r0, [r4, 0xC] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - ldr r1, [r4, 0xC] - movs r0, 0x80 - lsls r0, 13 - cmp r1, r0 - bne _080B5AA4 - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0x50 - ble _080B5AA4 - movs r2, 0x8 - ldrsh r1, [r4, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080B5A74 @ =gSprites - adds r0, r1 - bl obj_delete_but_dont_free_vram - movs r0, 0x1 - strh r0, [r4, 0x10] - b _080B5AA4 - .align 2, 0 -_080B5A74: .4byte gSprites -_080B5A78: - ldrh r0, [r4, 0x14] - adds r0, 0x1 - strh r0, [r4, 0x14] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B5AA4 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - ldrh r0, [r4, 0x10] - adds r0, 0x1 - strh r0, [r4, 0x10] - b _080B5AA4 -_080B5A9E: - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080B5AA4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B59D4 - - thumb_func_start sub_80B5AAC -sub_80B5AAC: @ 80B5AAC - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r2, _080B5ACC @ =gTasks - adds r1, r2 - movs r2, 0 - strh r2, [r1, 0x26] - ldr r2, _080B5AD0 @ =sub_80B5AD4 - str r2, [r1] - bl _call_via_r2 - pop {r0} - bx r0 - .align 2, 0 -_080B5ACC: .4byte gTasks -_080B5AD0: .4byte sub_80B5AD4 - thumb_func_end sub_80B5AAC - - thumb_func_start sub_80B5AD4 -sub_80B5AD4: @ 80B5AD4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080B5B0C @ =gTasks - adds r5, r0, r1 - ldr r0, _080B5B10 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r6, r0, 24 - movs r1, 0x26 - ldrsh r0, [r5, r1] - cmp r0, 0x4 - bls _080B5B00 - b _080B5D22 -_080B5B00: - lsls r0, 2 - ldr r1, _080B5B14 @ =_080B5B18 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B5B0C: .4byte gTasks -_080B5B10: .4byte gBattleAnimTarget -_080B5B14: .4byte _080B5B18 - .align 2, 0 -_080B5B18: - .4byte _080B5B2C - .4byte _080B5C2C - .4byte _080B5C70 - .4byte _080B5CD8 - .4byte _080B5D04 -_080B5B2C: - ldr r7, _080B5B64 @ =0x00002771 - adds r0, r7, 0 - bl AllocSpritePalette - lsls r0, 24 - lsrs r0, 24 - movs r2, 0 - mov r8, r2 - strh r0, [r5, 0x24] - cmp r0, 0xFF - beq _080B5B5A - cmp r0, 0xF - beq _080B5B5A - movs r0, 0x1 - bl CloneBattlerSpriteWithBlend - strh r0, [r5, 0x8] - lsls r0, 16 - cmp r0, 0 - bge _080B5B68 - adds r0, r7, 0 - bl FreeSpritePaletteByTag -_080B5B5A: - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _080B5D28 - .align 2, 0 -_080B5B64: .4byte 0x00002771 -_080B5B68: - ldr r4, _080B5C14 @ =gSprites - movs r1, 0x8 - ldrsh r0, [r5, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r2, [r5, 0x24] - lsls r2, 4 - ldrb r3, [r1, 0x5] - movs r0, 0xF - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x5] - movs r2, 0x8 - ldrsh r0, [r5, r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r1, 0x1] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - movs r0, 0x8 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r1, [r0, 0x5] - movs r2, 0xC - orrs r1, r2 - strb r1, [r0, 0x5] - movs r1, 0x8 - ldrsh r0, [r5, r1] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r4 - ldr r0, _080B5C18 @ =gBattleSpritesDataPtr - ldr r1, [r0] - ldr r0, _080B5C1C @ =gBattleAnimTarget - ldrb r0, [r0] - ldr r1, [r1] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - lsls r1, 31 - adds r2, 0x3E - lsrs r1, 31 - lsls r1, 2 - ldrb r3, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - mov r2, r8 - strh r2, [r5, 0xA] - strh r2, [r5, 0xC] - movs r0, 0x10 - strh r0, [r5, 0xE] - movs r0, 0x1 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - movs r0, 0x22 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x5] - lsrs r0, 4 - adds r0, 0x10 - lsls r0, 4 - strh r0, [r5, 0x10] - cmp r6, 0x1 - bne _080B5C20 - movs r1, 0x80 - lsls r1, 2 - b _080B5C24 - .align 2, 0 -_080B5C14: .4byte gSprites -_080B5C18: .4byte gBattleSpritesDataPtr -_080B5C1C: .4byte gBattleAnimTarget -_080B5C20: - movs r1, 0x80 - lsls r1, 3 -_080B5C24: - movs r0, 0 - bl ClearGpuRegBits - b _080B5D22 -_080B5C2C: - movs r1, 0x24 - ldrsh r0, [r5, r1] - adds r0, 0x10 - lsls r0, 4 - strh r0, [r5, 0x24] - movs r2, 0x10 - ldrsh r0, [r5, r2] - lsls r0, 1 - ldr r1, _080B5C60 @ =gPlttBufferUnfaded - adds r0, r1 - movs r2, 0x24 - ldrsh r1, [r5, r2] - lsls r1, 1 - ldr r2, _080B5C64 @ =gPlttBufferFaded - adds r1, r2 - ldr r2, _080B5C68 @ =0x04000008 - bl CpuSet - ldrh r0, [r5, 0x10] - ldr r3, _080B5C6C @ =0x00003c0d - movs r1, 0x10 - movs r2, 0xA - bl BlendPalette - b _080B5D22 - .align 2, 0 -_080B5C60: .4byte gPlttBufferUnfaded -_080B5C64: .4byte gPlttBufferFaded -_080B5C68: .4byte 0x04000008 -_080B5C6C: .4byte 0x00003c0d -_080B5C70: - ldr r2, _080B5CAC @ =gSprites - movs r0, 0x22 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - ldrh r0, [r0, 0x22] - adds r1, r0 - subs r1, 0x20 - lsls r1, 16 - lsrs r2, r1, 16 - cmp r1, 0 - bge _080B5C90 - movs r2, 0 -_080B5C90: - cmp r6, 0x1 - bne _080B5CB0 - lsls r0, r2, 24 - lsrs r0, 24 - adds r1, r2, 0 - adds r1, 0x40 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - str r2, [sp] - movs r2, 0x4 - str r2, [sp, 0x4] - str r6, [sp, 0x8] - b _080B5CC8 - .align 2, 0 -_080B5CAC: .4byte gSprites -_080B5CB0: - lsls r0, r2, 24 - lsrs r0, 24 - adds r1, r2, 0 - adds r1, 0x40 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - str r2, [sp] - movs r2, 0x8 - str r2, [sp, 0x4] - movs r2, 0x1 - str r2, [sp, 0x8] -_080B5CC8: - movs r2, 0x2 - movs r3, 0x6 - bl ScanlineEffect_InitWave - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x1C] - b _080B5D22 -_080B5CD8: - cmp r6, 0x1 - bne _080B5CEC - ldr r1, _080B5CE8 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - b _080B5CF4 - .align 2, 0 -_080B5CE8: .4byte 0x00003f42 -_080B5CEC: - ldr r1, _080B5D00 @ =0x00003f44 - movs r0, 0x50 - bl SetGpuReg -_080B5CF4: - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - b _080B5D22 - .align 2, 0 -_080B5D00: .4byte 0x00003f44 -_080B5D04: - cmp r6, 0x1 - bne _080B5D14 - movs r1, 0x80 - lsls r1, 2 - movs r0, 0 - bl SetGpuRegBits - b _080B5D1E -_080B5D14: - movs r1, 0x80 - lsls r1, 3 - movs r0, 0 - bl SetGpuRegBits -_080B5D1E: - ldr r0, _080B5D34 @ =sub_80B5D38 - str r0, [r5] -_080B5D22: - ldrh r0, [r5, 0x26] - adds r0, 0x1 - strh r0, [r5, 0x26] -_080B5D28: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B5D34: .4byte sub_80B5D38 - thumb_func_end sub_80B5AD4 - - thumb_func_start sub_80B5D38 -sub_80B5D38: @ 80B5D38 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080B5DC0 @ =gTasks - adds r4, r0, r1 - ldrh r1, [r4, 0xA] - adds r1, 0x1 - strh r1, [r4, 0xA] - movs r0, 0x1 - ands r0, r1 - strh r0, [r4, 0x12] - cmp r0, 0 - bne _080B5D70 - ldr r1, _080B5DC4 @ =gSineTable - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0x12 - bl __divsi3 - strh r0, [r4, 0xC] -_080B5D70: - movs r2, 0x12 - ldrsh r0, [r4, r2] - cmp r0, 0x1 - bne _080B5D92 - ldr r1, _080B5DC4 @ =gSineTable - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0x12 - bl __divsi3 - movs r1, 0x10 - subs r1, r0 - strh r1, [r4, 0xE] -_080B5D92: - ldrh r1, [r4, 0xE] - lsls r1, 8 - ldrh r0, [r4, 0xC] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0x80 - bne _080B5DBA - movs r0, 0 - strh r0, [r4, 0x26] - ldr r1, _080B5DC8 @ =sub_80B5DCC - str r1, [r4] - adds r0, r5, 0 - bl _call_via_r1 -_080B5DBA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B5DC0: .4byte gTasks -_080B5DC4: .4byte gSineTable -_080B5DC8: .4byte sub_80B5DCC - thumb_func_end sub_80B5D38 - - thumb_func_start sub_80B5DCC -sub_80B5DCC: @ 80B5DCC - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080B5DFC @ =gTasks - adds r4, r0, r1 - ldr r0, _080B5E00 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r6, r0, 24 - movs r1, 0x26 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080B5E38 - cmp r0, 0x1 - bgt _080B5E04 - cmp r0, 0 - beq _080B5E0A - b _080B5EB4 - .align 2, 0 -_080B5DFC: .4byte gTasks -_080B5E00: .4byte gBattleAnimTarget -_080B5E04: - cmp r0, 0x2 - beq _080B5E4C - b _080B5EB4 -_080B5E0A: - ldr r1, _080B5E28 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] - movs r0, 0x1 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x24] - cmp r6, 0x1 - bne _080B5E2C - movs r1, 0x80 - lsls r1, 2 - b _080B5E30 - .align 2, 0 -_080B5E28: .4byte gScanlineEffect -_080B5E2C: - movs r1, 0x80 - lsls r1, 3 -_080B5E30: - movs r0, 0 - bl ClearGpuRegBits - b _080B5EB4 -_080B5E38: - ldrh r0, [r4, 0x10] - ldr r3, _080B5E48 @ =0x00003c0d - movs r1, 0x10 - movs r2, 0 - bl BlendPalette - b _080B5EB4 - .align 2, 0 -_080B5E48: .4byte 0x00003c0d -_080B5E4C: - ldr r3, _080B5E9C @ =gSprites - movs r0, 0x24 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - bl obj_delete_but_dont_free_vram - ldr r0, _080B5EA0 @ =0x00002771 - bl FreeSpritePaletteByTag - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - cmp r6, 0x1 - bne _080B5EA4 - movs r1, 0x80 - lsls r1, 2 - movs r0, 0 - bl SetGpuRegBits - b _080B5EAE - .align 2, 0 -_080B5E9C: .4byte gSprites -_080B5EA0: .4byte 0x00002771 -_080B5EA4: - movs r1, 0x80 - lsls r1, 3 - movs r0, 0 - bl SetGpuRegBits -_080B5EAE: - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080B5EB4: - ldrh r0, [r4, 0x26] - adds r0, 0x1 - strh r0, [r4, 0x26] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80B5DCC - - thumb_func_start sub_80B5EC0 -sub_80B5EC0: @ 80B5EC0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r7, r0, 0 - ldr r0, _080B5EFC @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B5F08 - ldr r4, _080B5F00 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 8 - movs r2, 0xE0 - lsls r2, 13 - adds r0, r2 - lsrs r5, r0, 16 - ldr r4, _080B5F04 @ =gBattleAnimTarget - b _080B5F2C - .align 2, 0 -_080B5EFC: .4byte gBattleAnimArgs -_080B5F00: .4byte gBattleAnimAttacker -_080B5F04: .4byte gBattleAnimTarget -_080B5F08: - ldr r4, _080B5FD0 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 8 - movs r2, 0xE0 - lsls r2, 13 - adds r0, r2 - lsrs r5, r0, 16 - ldr r4, _080B5FD4 @ =gBattleAnimAttacker -_080B5F2C: - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 8 - movs r1, 0xE0 - lsls r1, 13 - adds r0, r1 - lsrs r0, 16 - mov r9, r0 - mov r8, r5 - mov r2, r9 - subs r4, r2, r5 - lsls r4, 16 - lsrs r4, 16 - lsls r0, r6, 4 - strh r0, [r7, 0x2E] - lsls r0, r5, 4 - strh r0, [r7, 0x30] - mov r1, r10 - subs r0, r1, r6 - lsls r0, 4 - ldr r5, _080B5FD8 @ =gBattleAnimArgs - movs r2, 0x2 - ldrsh r1, [r5, r2] - bl __divsi3 - strh r0, [r7, 0x32] - lsls r4, 16 - asrs r4, 12 - movs r0, 0x2 - ldrsh r1, [r5, r0] - adds r0, r4, 0 - bl __divsi3 - strh r0, [r7, 0x34] - ldrh r0, [r5, 0x2] - strh r0, [r7, 0x36] - mov r1, r10 - strh r1, [r7, 0x38] - mov r2, r9 - strh r2, [r7, 0x3A] - movs r1, 0x36 - ldrsh r0, [r7, r1] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - strh r0, [r7, 0x3C] - ldrb r1, [r7, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x8 - orrs r0, r1 - strb r0, [r7, 0x5] - strh r6, [r7, 0x20] - mov r2, r8 - strh r2, [r7, 0x22] - ldr r0, _080B5FDC @ =sub_80B5FE0 - str r0, [r7, 0x1C] - adds r2, r7, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B5FD0: .4byte gBattleAnimTarget -_080B5FD4: .4byte gBattleAnimAttacker -_080B5FD8: .4byte gBattleAnimArgs -_080B5FDC: .4byte sub_80B5FE0 - thumb_func_end sub_80B5EC0 - - thumb_func_start sub_80B5FE0 -sub_80B5FE0: @ 80B5FE0 - push {r4,lr} - adds r2, r0, 0 - ldrh r3, [r2, 0x36] - movs r1, 0x36 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _080B6018 - ldrh r0, [r2, 0x32] - ldrh r4, [r2, 0x2E] - adds r0, r4 - strh r0, [r2, 0x2E] - ldrh r1, [r2, 0x34] - ldrh r4, [r2, 0x30] - adds r1, r4 - strh r1, [r2, 0x30] - lsls r0, 16 - asrs r0, 20 - strh r0, [r2, 0x20] - lsls r1, 16 - asrs r1, 20 - strh r1, [r2, 0x22] - subs r0, r3, 0x1 - strh r0, [r2, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bne _080B6018 - strh r0, [r2, 0x2E] -_080B6018: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B5FE0 - - thumb_func_start sub_80B6020 -sub_80B6020: @ 80B6020 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080B6170 @ =gTasks - adds r1, r0 - str r1, [sp] - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0 - ldr r1, [sp] - strh r0, [r1, 0x12] - strh r0, [r1, 0x14] - strh r0, [r1, 0x16] - strh r0, [r1, 0x18] - movs r0, 0x10 - strh r0, [r1, 0x1A] - ldr r2, _080B6174 @ =gBattleAnimArgs - ldrh r0, [r2] - strh r0, [r1, 0x1C] - ldr r4, _080B6178 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x8] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B6090 - b _080B618C -_080B6090: - movs r4, 0 -_080B6092: - lsls r1, r4, 16 - asrs r3, r1, 16 - ldr r0, _080B6178 @ =gBattleAnimAttacker - ldrb r2, [r0] - str r1, [sp, 0x10] - cmp r3, r2 - beq _080B615E - movs r0, 0x2 - eors r2, r0 - cmp r3, r2 - beq _080B615E - lsls r0, r4, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B615E - ldr r6, [sp, 0x4] - ldr r3, [sp, 0x8] - lsls r0, r3, 16 - asrs r7, r0, 16 - ldr r0, _080B617C @ =gUnknown_83E7668 - adds r1, r6, 0 - adds r2, r7, 0 - movs r3, 0x37 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x40 - beq _080B615E - adds r0, r4, 0 - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - adds r0, r4, 0 - movs r1, 0x3 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - mov r0, r8 - lsls r5, r0, 4 - add r5, r8 - lsls r5, 2 - ldr r1, _080B6180 @ =gSprites - adds r4, r5, r1 - lsls r0, r6, 4 - strh r0, [r4, 0x2E] - lsls r0, r7, 4 - strh r0, [r4, 0x30] - mov r2, r10 - subs r0, r2, r6 - lsls r0, 4 - ldr r3, _080B6174 @ =gBattleAnimArgs - movs r2, 0x2 - ldrsh r1, [r3, r2] - bl __divsi3 - strh r0, [r4, 0x32] - mov r3, r9 - lsls r0, r3, 16 - asrs r0, 16 - subs r0, r7 - lsls r0, 4 - ldr r2, _080B6174 @ =gBattleAnimArgs - movs r3, 0x2 - ldrsh r1, [r2, r3] - bl __divsi3 - strh r0, [r4, 0x34] - ldr r1, _080B6174 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x36] - mov r2, r10 - strh r2, [r4, 0x38] - mov r3, r9 - strh r3, [r4, 0x3A] - ldr r0, _080B6184 @ =gSprites + 0x1C - adds r5, r0 - ldr r0, _080B6188 @ =sub_80B5FE0 - str r0, [r5] - ldr r2, [sp] - movs r3, 0x20 - ldrsh r1, [r2, r3] - adds r1, 0xD - lsls r1, 1 - adds r0, r2, 0 - adds r0, 0x8 - adds r0, r1 - mov r1, r8 - strh r1, [r0] - ldrh r0, [r2, 0x20] - adds r0, 0x1 - strh r0, [r2, 0x20] -_080B615E: - ldr r2, [sp, 0x10] - movs r3, 0x80 - lsls r3, 9 - adds r0, r2, r3 - lsrs r4, r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _080B6092 - b _080B6210 - .align 2, 0 -_080B6170: .4byte gTasks -_080B6174: .4byte gBattleAnimArgs -_080B6178: .4byte gBattleAnimAttacker -_080B617C: .4byte gUnknown_83E7668 -_080B6180: .4byte gSprites -_080B6184: .4byte gSprites + 0x1C -_080B6188: .4byte sub_80B5FE0 -_080B618C: - ldr r0, _080B6228 @ =gUnknown_83E7668 - ldr r7, [sp, 0x4] - ldr r2, [sp, 0x8] - lsls r1, r2, 16 - asrs r1, 16 - str r1, [sp, 0xC] - adds r1, r7, 0 - ldr r2, [sp, 0xC] - movs r3, 0x37 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x40 - beq _080B6210 - movs r3, 0x30 - mov r10, r3 - movs r0, 0x28 - mov r9, r0 - ldr r6, _080B622C @ =gSprites - mov r1, r8 - lsls r5, r1, 4 - add r5, r8 - lsls r5, 2 - adds r4, r5, r6 - lsls r0, r7, 4 - strh r0, [r4, 0x2E] - ldr r2, [sp, 0xC] - lsls r0, r2, 4 - strh r0, [r4, 0x30] - subs r0, r3, r7 - lsls r0, 4 - ldr r3, _080B6230 @ =gBattleAnimArgs - movs r2, 0x2 - ldrsh r1, [r3, r2] - bl __divsi3 - strh r0, [r4, 0x32] - mov r3, r9 - ldr r1, [sp, 0xC] - subs r0, r3, r1 - lsls r0, 4 - ldr r2, _080B6230 @ =gBattleAnimArgs - movs r3, 0x2 - ldrsh r1, [r2, r3] - bl __divsi3 - strh r0, [r4, 0x34] - ldr r1, _080B6230 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x36] - mov r2, r10 - strh r2, [r4, 0x38] - mov r3, r9 - strh r3, [r4, 0x3A] - adds r6, 0x1C - adds r5, r6 - ldr r0, _080B6234 @ =sub_80B5FE0 - str r0, [r5] - mov r1, r8 - ldr r0, [sp] - strh r1, [r0, 0x22] - movs r0, 0x1 - ldr r2, [sp] - strh r0, [r2, 0x20] -_080B6210: - ldr r0, _080B6238 @ =sub_80B623C - ldr r3, [sp] - str r0, [r3] - 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 -_080B6228: .4byte gUnknown_83E7668 -_080B622C: .4byte gSprites -_080B6230: .4byte gBattleAnimArgs -_080B6234: .4byte sub_80B5FE0 -_080B6238: .4byte sub_80B623C - thumb_func_end sub_80B6020 - - thumb_func_start sub_80B623C -sub_80B623C: @ 80B623C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080B6260 @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r1, [r4, r0] - cmp r1, 0x1 - beq _080B62F2 - cmp r1, 0x1 - bgt _080B6264 - cmp r1, 0 - beq _080B6272 - b _080B63AE - .align 2, 0 -_080B6260: .4byte gTasks -_080B6264: - cmp r1, 0x2 - bne _080B626A - b _080B6384 -_080B626A: - cmp r1, 0x3 - bne _080B6270 - b _080B6398 -_080B6270: - b _080B63AE -_080B6272: - movs r2, 0x14 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080B62D8 - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B62D8 - strh r1, [r4, 0x12] - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B62A8 - ldrh r1, [r4, 0x18] - movs r2, 0x18 - ldrsh r0, [r4, r2] - cmp r0, 0xF - bgt _080B62B6 - adds r0, r1, 0x1 - strh r0, [r4, 0x18] - b _080B62B6 -_080B62A8: - ldrh r1, [r4, 0x1A] - movs r2, 0x1A - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080B62B6 - subs r0, r1, 0x1 - strh r0, [r4, 0x1A] -_080B62B6: - ldrh r1, [r4, 0x1A] - lsls r1, 8 - ldrh r0, [r4, 0x18] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0x16 - ldrsh r0, [r4, r1] - cmp r0, 0x17 - ble _080B62D8 - movs r0, 0 - strh r0, [r4, 0x16] - movs r0, 0x1 - strh r0, [r4, 0x14] -_080B62D8: - ldrh r1, [r4, 0x1C] - movs r2, 0x1C - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080B62E8 - subs r0, r1, 0x1 - strh r0, [r4, 0x1C] - b _080B63AE -_080B62E8: - movs r1, 0x14 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080B63AE - b _080B6390 -_080B62F2: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B63AE - movs r0, 0 - strh r0, [r4, 0x12] - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] - ands r0, r1 - lsls r0, 16 - cmp r0, 0 - beq _080B6322 - ldrh r1, [r4, 0x18] - movs r2, 0x18 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080B6330 - subs r0, r1, 0x1 - strh r0, [r4, 0x18] - b _080B6330 -_080B6322: - ldrh r1, [r4, 0x1A] - movs r2, 0x1A - ldrsh r0, [r4, r2] - cmp r0, 0xF - bgt _080B6330 - adds r0, r1, 0x1 - strh r0, [r4, 0x1A] -_080B6330: - ldrh r1, [r4, 0x1A] - lsls r1, 8 - ldrh r0, [r4, 0x18] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - ldr r1, [r4, 0x18] - movs r0, 0x80 - lsls r0, 13 - cmp r1, r0 - bne _080B63AE - movs r5, 0 - b _080B6374 -_080B6350: - adds r1, r5, 0 - adds r1, 0xD - lsls r1, 1 - adds r0, r4, 0 - adds r0, 0x8 - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080B6380 @ =gSprites - adds r0, r1 - bl DestroySprite - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_080B6374: - movs r1, 0x20 - ldrsh r0, [r4, r1] - cmp r5, r0 - blt _080B6350 - b _080B6390 - .align 2, 0 -_080B6380: .4byte gSprites -_080B6384: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - cmp r0, 0 - ble _080B63AE -_080B6390: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B63AE -_080B6398: - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080B63AE: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B623C - - thumb_func_start sub_80B63B4 -sub_80B63B4: @ 80B63B4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _080B6400 @ =gBattle_WIN0H - movs r1, 0 - strh r1, [r0] - ldr r0, _080B6404 @ =gBattle_WIN0V - strh r1, [r0] - ldr r1, _080B6408 @ =0x00003f3f - movs r0, 0x48 - bl SetGpuReg - ldr r1, _080B640C @ =0x00003f1f - movs r0, 0x4A - bl SetGpuReg - movs r0, 0x50 - movs r1, 0xC8 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0x10 - bl SetGpuReg - ldr r0, _080B6410 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B63FC - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B6414 -_080B63FC: - movs r6, 0x28 - b _080B6416 - .align 2, 0 -_080B6400: .4byte gBattle_WIN0H -_080B6404: .4byte gBattle_WIN0V -_080B6408: .4byte 0x00003f3f -_080B640C: .4byte 0x00003f1f -_080B6410: .4byte gBattleAnimAttacker -_080B6414: - movs r6, 0xC8 -_080B6416: - ldr r1, _080B6454 @ =gBattle_WIN0H - lsls r3, r6, 16 - asrs r2, r3, 16 - lsls r0, r2, 8 - orrs r0, r2 - strh r0, [r1] - ldr r1, _080B6458 @ =gBattle_WIN0V - movs r5, 0x28 - ldr r0, _080B645C @ =0x00002828 - strh r0, [r1] - lsrs r3, 16 - movs r1, 0xF0 - subs r1, r2 - movs r4, 0x48 - ldr r2, _080B6460 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r2 - strh r3, [r0, 0xA] - strh r1, [r0, 0xC] - strh r5, [r0, 0xE] - strh r4, [r0, 0x10] - strh r6, [r0, 0x12] - strh r5, [r0, 0x14] - ldr r1, _080B6464 @ =sub_80B6468 - str r1, [r0] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B6454: .4byte gBattle_WIN0H -_080B6458: .4byte gBattle_WIN0V -_080B645C: .4byte 0x00002828 -_080B6460: .4byte gTasks -_080B6464: .4byte sub_80B6468 - thumb_func_end sub_80B63B4 - - thumb_func_start sub_80B6468 -sub_80B6468: @ 80B6468 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B6588 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - ldrh r1, [r4, 0x8] - adds r0, r1, 0x1 - strh r0, [r4, 0x8] - ldrh r5, [r4, 0xA] - ldrh r7, [r4, 0xC] - ldrh r0, [r4, 0xE] - mov r10, r0 - ldrh r2, [r4, 0x10] - str r2, [sp, 0xC] - ldrh r0, [r4, 0x12] - ldrh r2, [r4, 0x14] - mov r8, r2 - lsls r1, 16 - asrs r6, r1, 16 - cmp r6, 0xF - ble _080B64A4 - b _080B6594 -_080B64A4: - lsls r0, 16 - asrs r0, 16 - bl __floatsidf - str r0, [sp, 0x10] - str r1, [sp, 0x14] - lsls r0, r5, 16 - asrs r0, 16 - bl __floatsidf - ldr r2, _080B658C @ =0x3fb00000 - ldr r3, _080B658C+4 @ =0x00000000 - bl __muldf3 - adds r5, r1, 0 - adds r4, r0, 0 - adds r0, r6, 0 - bl __floatsidf - str r0, [sp, 0x18] - str r1, [sp, 0x1C] - adds r1, r5, 0 - adds r0, r4, 0 - ldr r2, [sp, 0x18] - ldr r3, [sp, 0x1C] - bl __muldf3 - adds r3, r1, 0 - adds r2, r0, 0 - ldr r0, [sp, 0x10] - ldr r1, [sp, 0x14] - bl __subdf3 - bl __fixunsdfsi - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - lsls r0, r7, 16 - asrs r0, 16 - bl __floatsidf - ldr r2, _080B658C @ =0x3fb00000 - ldr r3, _080B658C+4 @ =0x00000000 - bl __muldf3 - ldr r2, [sp, 0x18] - ldr r3, [sp, 0x1C] - bl __muldf3 - adds r3, r1, 0 - adds r2, r0, 0 - ldr r0, [sp, 0x10] - ldr r1, [sp, 0x14] - bl __adddf3 - bl __fixunsdfsi - lsls r0, 16 - lsrs r7, r0, 16 - mov r1, r8 - lsls r0, r1, 16 - asrs r0, 16 - bl __floatsidf - adds r5, r1, 0 - adds r4, r0, 0 - mov r2, r10 - lsls r0, r2, 16 - asrs r0, 16 - bl __floatsidf - ldr r2, _080B658C @ =0x3fb00000 - ldr r3, _080B658C+4 @ =0x00000000 - bl __muldf3 - ldr r2, [sp, 0x18] - ldr r3, [sp, 0x1C] - bl __muldf3 - adds r3, r1, 0 - adds r2, r0, 0 - adds r1, r5, 0 - adds r0, r4, 0 - bl __subdf3 - bl __fixunsdfsi - lsls r0, 16 - lsrs r6, r0, 16 - ldr r1, [sp, 0xC] - lsls r0, r1, 16 - asrs r0, 16 - bl __floatsidf - ldr r2, _080B658C @ =0x3fb00000 - ldr r3, _080B658C+4 @ =0x00000000 - bl __muldf3 - ldr r2, [sp, 0x18] - ldr r3, [sp, 0x1C] - bl __muldf3 - adds r3, r1, 0 - adds r2, r0, 0 - adds r1, r5, 0 - adds r0, r4, 0 - bl __adddf3 - bl __fixunsdfsi - lsls r0, 16 - lsrs r5, r0, 16 - b _080B65C2 - .align 2, 0 -_080B6588: .4byte gTasks -_080B658C: .double 0.0625 -_080B6594: - movs r2, 0 - mov r9, r2 - movs r7, 0xF0 - movs r6, 0 - movs r5, 0x70 - str r6, [sp] - str r6, [sp, 0x4] - str r6, [sp, 0x8] - movs r0, 0x1 - movs r1, 0 - movs r3, 0 - bl sub_8075BE8 - lsls r0, 16 - lsrs r0, 16 - str r6, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080B65E4 @ =sub_80B65F0 - str r0, [r4] -_080B65C2: - ldr r1, _080B65E8 @ =gBattle_WIN0H - mov r2, r9 - lsls r0, r2, 8 - orrs r7, r0 - strh r7, [r1] - ldr r1, _080B65EC @ =gBattle_WIN0V - lsls r0, r6, 8 - orrs r5, r0 - strh r5, [r1] - 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 -_080B65E4: .4byte sub_80B65F0 -_080B65E8: .4byte gBattle_WIN0H -_080B65EC: .4byte gBattle_WIN0V - thumb_func_end sub_80B6468 - - thumb_func_start sub_80B65F0 -sub_80B65F0: @ 80B65F0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _080B663C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _080B6636 - ldr r0, _080B6640 @ =gBattle_WIN0H - strh r1, [r0] - ldr r0, _080B6644 @ =gBattle_WIN0V - strh r1, [r0] - ldr r4, _080B6648 @ =0x00003f3f - movs r0, 0x48 - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x4A - adds r1, r4, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080B6636: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B663C: .4byte gPaletteFade -_080B6640: .4byte gBattle_WIN0H -_080B6644: .4byte gBattle_WIN0V -_080B6648: .4byte 0x00003f3f - thumb_func_end sub_80B65F0 - - thumb_func_start sub_80B664C -sub_80B664C: @ 80B664C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r0, _080B6678 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B6680 - movs r2, 0x18 - ldr r3, _080B667C @ =0x0000fffe - ldrb r0, [r4, 0x3] - movs r1, 0x3F - negs r1, r1 - ands r1, r0 - movs r0, 0x10 - orrs r1, r0 - strb r1, [r4, 0x3] - b _080B6684 - .align 2, 0 -_080B6678: .4byte gBattleAnimAttacker -_080B667C: .4byte 0x0000fffe -_080B6680: - ldr r2, _080B66A0 @ =0x0000ffe8 - movs r3, 0x2 -_080B6684: - lsls r0, r2, 16 - asrs r0, 16 - ldrh r1, [r4, 0x20] - adds r0, r1 - strh r0, [r4, 0x20] - strh r3, [r4, 0x30] - movs r0, 0x3C - strh r0, [r4, 0x2E] - ldr r0, _080B66A4 @ =sub_80B66A8 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B66A0: .4byte 0x0000ffe8 -_080B66A4: .4byte sub_80B66A8 - thumb_func_end sub_80B664C - - thumb_func_start sub_80B66A8 -sub_80B66A8: @ 80B66A8 - push {r4,lr} - adds r3, r0, 0 - ldrh r1, [r3, 0x2E] - movs r2, 0x2E - ldrsh r0, [r3, r2] - cmp r0, 0 - ble _080B66BA - subs r0, r1, 0x1 - b _080B671E -_080B66BA: - ldrh r0, [r3, 0x30] - ldrh r4, [r3, 0x24] - adds r1, r0, r4 - strh r1, [r3, 0x24] - adds r0, r1, 0x7 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xE - bls _080B6720 - ldrh r0, [r3, 0x20] - adds r0, r1 - strh r0, [r3, 0x20] - movs r0, 0 - strh r0, [r3, 0x24] - ldrh r2, [r3, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, 0x8 - ldr r4, _080B670C @ =0x000003ff - adds r0, r4, 0 - ands r1, r0 - ldr r0, _080B6710 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r3, 0x4] - ldrh r0, [r3, 0x32] - adds r0, 0x1 - strh r0, [r3, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _080B671C - movs r0, 0x1E - strh r0, [r3, 0x2E] - ldr r0, _080B6714 @ =WaitAnimForDuration - str r0, [r3, 0x1C] - ldr r1, _080B6718 @ =sub_80B6728 - adds r0, r3, 0 - bl StoreSpriteCallbackInData6 - b _080B6720 - .align 2, 0 -_080B670C: .4byte 0x000003ff -_080B6710: .4byte 0xfffffc00 -_080B6714: .4byte WaitAnimForDuration -_080B6718: .4byte sub_80B6728 -_080B671C: - movs r0, 0x28 -_080B671E: - strh r0, [r3, 0x2E] -_080B6720: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B66A8 - - thumb_func_start sub_80B6728 -sub_80B6728: @ 80B6728 - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x2E - ldrsh r5, [r4, r0] - cmp r5, 0 - bne _080B6752 - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0x10 - bl SetGpuReg - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - strh r5, [r4, 0x30] - strh r5, [r4, 0x32] - b _080B6796 -_080B6752: - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0x1 - bgt _080B6762 - adds r0, r1, 0x1 - strh r0, [r4, 0x30] - b _080B6796 -_080B6762: - movs r0, 0 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - movs r1, 0x10 - subs r1, r0 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0x10 - bne _080B6796 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080B679C @ =sub_80B67A0 - str r0, [r4, 0x1C] -_080B6796: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B679C: .4byte sub_80B67A0 - thumb_func_end sub_80B6728 - - thumb_func_start sub_80B67A0 -sub_80B67A0: @ 80B67A0 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - ldr r0, _080B67CC @ =gBattle_WIN0H - movs r1, 0 - strh r1, [r0] - ldr r0, _080B67D0 @ =gBattle_WIN0V - strh r1, [r0] - adds r0, r4, 0 - bl DestroyAnimSprite - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B67CC: .4byte gBattle_WIN0H -_080B67D0: .4byte gBattle_WIN0V - thumb_func_end sub_80B67A0 - - thumb_func_start sub_80B67D4 -sub_80B67D4: @ 80B67D4 - push {r4-r7,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - movs r1, 0xC - bl Sin - strh r0, [r5, 0x24] - ldr r0, _080B683C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B67F8 - ldrh r0, [r5, 0x24] - negs r0, r0 - strh r0, [r5, 0x24] -_080B67F8: - ldrh r0, [r5, 0x2E] - adds r0, 0x6 - movs r1, 0xFF - ands r0, r1 - strh r0, [r5, 0x2E] - movs r1, 0x80 - lsls r1, 1 - adds r0, r1, 0 - ldrh r1, [r5, 0x30] - adds r0, r1 - strh r0, [r5, 0x30] - lsls r0, 16 - asrs r0, 24 - negs r0, r0 - strh r0, [r5, 0x26] - ldrh r0, [r5, 0x3C] - adds r0, 0x1 - strh r0, [r5, 0x3C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - bne _080B6844 - ldr r0, _080B6840 @ =0x0000050b - strh r0, [r5, 0x3A] - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - ldrh r1, [r5, 0x3A] - movs r0, 0x52 - bl SetGpuReg - b _080B689C - .align 2, 0 -_080B683C: .4byte gBattleAnimAttacker -_080B6840: .4byte 0x0000050b -_080B6844: - cmp r0, 0x1E - ble _080B689C - ldrh r0, [r5, 0x32] - adds r0, 0x1 - strh r0, [r5, 0x32] - ldrh r1, [r5, 0x3A] - lsls r0, r1, 16 - asrs r0, 24 - lsls r0, 16 - movs r6, 0xFF - ands r6, r1 - movs r1, 0x80 - lsls r1, 9 - adds r0, r1 - lsrs r7, r0, 16 - cmp r7, 0x10 - bls _080B6868 - movs r7, 0x10 -_080B6868: - subs r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r0, 0 - bge _080B6874 - movs r6, 0 -_080B6874: - lsls r4, r7, 8 - orrs r4, r6 - lsls r1, r4, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - strh r4, [r5, 0x3A] - cmp r7, 0x10 - bne _080B689C - cmp r6, 0 - bne _080B689C - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080B68A4 @ =sub_80B68A8 - str r0, [r5, 0x1C] -_080B689C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B68A4: .4byte sub_80B68A8 - thumb_func_end sub_80B67D4 - - thumb_func_start sub_80B68A8 -sub_80B68A8: @ 80B68A8 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r4, 0 - bl DestroyAnimSprite - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B68A8 - - thumb_func_start sub_80B68C8 -sub_80B68C8: @ 80B68C8 - push {r4-r6,lr} - mov r6, r8 - push {r6} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _080B6960 @ =gTasks - adds r4, r0 - movs r6, 0 - strh r6, [r4, 0x8] - movs r0, 0x10 - mov r8, r0 - mov r0, r8 - strh r0, [r4, 0xA] - ldr r5, _080B6964 @ =gBattleAnimAttacker - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1A] - ldrb r0, [r5] - bl GetBattlerYCoordWithElevation - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x1C] - ldrb r0, [r5] - movs r1, 0x1 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r1, r0, 16 - lsrs r0, 31 - adds r1, r0 - asrs r1, 1 - adds r1, 0x8 - strh r1, [r4, 0x1E] - strh r6, [r4, 0x16] - ldrb r0, [r5] - bl GetBattlerSpriteBGPriority - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x12] - ldrb r0, [r5] - bl GetBattlerSpriteSubpriority - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x2 - strh r0, [r4, 0x14] - strh r6, [r4, 0xE] - mov r0, r8 - strh r0, [r4, 0x10] - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - strh r6, [r4, 0x18] - ldr r0, _080B6968 @ =sub_80B696C - str r0, [r4] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B6960: .4byte gTasks -_080B6964: .4byte gBattleAnimAttacker -_080B6968: .4byte sub_80B696C - thumb_func_end sub_80B68C8 - - thumb_func_start sub_80B696C -sub_80B696C: @ 80B696C - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - ldr r1, _080B6990 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x5 - bls _080B6986 - b _080B6AF2 -_080B6986: - lsls r0, 2 - ldr r1, _080B6994 @ =_080B6998 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B6990: .4byte gTasks -_080B6994: .4byte _080B6998 - .align 2, 0 -_080B6998: - .4byte _080B69B0 - .4byte _080B6A20 - .4byte _080B6A62 - .4byte _080B6A76 - .4byte _080B6ACC - .4byte _080B6ADC -_080B69B0: - movs r6, 0 -_080B69B2: - movs r2, 0x1A - ldrsh r1, [r4, r2] - movs r0, 0x1C - ldrsh r2, [r4, r0] - ldrb r3, [r4, 0x14] - ldr r0, _080B6A14 @ =gUnknown_83E76E0 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _080B6A06 - ldr r1, _080B6A18 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r5, r0, r1 - strh r7, [r5, 0x2E] - ldr r0, _080B6A1C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - movs r1, 0 - lsls r0, 24 - cmp r0, 0 - bne _080B69E8 - movs r1, 0x1 -_080B69E8: - strh r1, [r5, 0x30] - movs r0, 0x2A - muls r0, r6 - movs r1, 0xFF - ands r0, r1 - strh r0, [r5, 0x32] - ldrh r0, [r4, 0x1E] - strh r0, [r5, 0x34] - lsls r0, r6, 1 - adds r0, r6 - lsls r0, 1 - strh r0, [r5, 0x38] - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] -_080B6A06: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x5 - bls _080B69B2 - b _080B6AD4 - .align 2, 0 -_080B6A14: .4byte gUnknown_83E76E0 -_080B6A18: .4byte gSprites -_080B6A1C: .4byte gBattleAnimAttacker -_080B6A20: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B6A3E - ldrh r1, [r4, 0xE] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r0, 0xD - bgt _080B6A4C - adds r0, r1, 0x1 - strh r0, [r4, 0xE] - b _080B6A4C -_080B6A3E: - ldrh r1, [r4, 0x10] - movs r2, 0x10 - ldrsh r0, [r4, r2] - cmp r0, 0x4 - ble _080B6A4C - subs r0, r1, 0x1 - strh r0, [r4, 0x10] -_080B6A4C: - movs r1, 0xE - ldrsh r0, [r4, r1] - ldrh r2, [r4, 0xE] - ldrh r1, [r4, 0x10] - cmp r0, 0xE - bne _080B6ABC - cmp r1, 0x4 - bne _080B6ABC - movs r0, 0 - strh r0, [r4, 0xA] - b _080B6AB6 -_080B6A62: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1E - ble _080B6AF2 - movs r0, 0 - strh r0, [r4, 0xA] - b _080B6AD4 -_080B6A76: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B6A94 - ldrh r1, [r4, 0xE] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r0, 0 - ble _080B6AA2 - subs r0, r1, 0x1 - strh r0, [r4, 0xE] - b _080B6AA2 -_080B6A94: - ldrh r1, [r4, 0x10] - movs r2, 0x10 - ldrsh r0, [r4, r2] - cmp r0, 0xF - bgt _080B6AA2 - adds r0, r1, 0x1 - strh r0, [r4, 0x10] -_080B6AA2: - movs r1, 0xE - ldrsh r0, [r4, r1] - ldrh r2, [r4, 0xE] - ldrh r1, [r4, 0x10] - cmp r0, 0 - bne _080B6ABC - cmp r1, 0x10 - bne _080B6ABC - movs r0, 0x1 - strh r0, [r4, 0x18] -_080B6AB6: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080B6ABC: - lsls r1, 8 - orrs r1, r2 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - b _080B6AF2 -_080B6ACC: - movs r2, 0x16 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080B6AF2 -_080B6AD4: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B6AF2 -_080B6ADC: - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r7, 0 - bl DestroyAnimVisualTask -_080B6AF2: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80B696C - - thumb_func_start sub_80B6AF8 -sub_80B6AF8: @ 80B6AF8 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B6B0A - ldrh r0, [r4, 0x32] - adds r0, 0x2 - b _080B6B0E -_080B6B0A: - ldrh r0, [r4, 0x32] - subs r0, 0x2 -_080B6B0E: - strh r0, [r4, 0x32] - ldrh r1, [r4, 0x32] - movs r0, 0xFF - ands r0, r1 - strh r0, [r4, 0x32] - movs r2, 0x32 - ldrsh r0, [r4, r2] - movs r2, 0x34 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x32] - subs r0, 0x41 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x7E - bhi _080B6B50 - ldr r2, _080B6B4C @ =gTasks - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0x12] - adds r1, 0x1 - movs r0, 0x3 - ands r1, r0 - b _080B6B64 - .align 2, 0 -_080B6B4C: .4byte gTasks -_080B6B50: - ldr r2, _080B6BB8 @ =gTasks - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x3 - ldrb r1, [r0, 0x12] - ands r1, r2 -_080B6B64: - lsls r1, 2 - ldrb r2, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - movs r1, 0x38 - ldrsh r0, [r4, r1] - lsls r0, 3 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3A] - movs r2, 0x3A - ldrsh r0, [r4, r2] - movs r1, 0x7 - bl Sin - strh r0, [r4, 0x26] - ldr r2, _080B6BB8 @ =gTasks - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r1, r0, r2 - movs r2, 0x18 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080B6BB2 - ldrh r0, [r1, 0x16] - subs r0, 0x1 - strh r0, [r1, 0x16] - adds r0, r4, 0 - bl DestroySprite -_080B6BB2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B6BB8: .4byte gTasks - thumb_func_end sub_80B6AF8 - - thumb_func_start sub_80B6BBC -sub_80B6BBC: @ 80B6BBC - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r2, _080B6BDC @ =gTasks - adds r1, r2 - movs r2, 0 - strh r2, [r1, 0x26] - ldr r2, _080B6BE0 @ =sub_80B6BE4 - str r2, [r1] - bl _call_via_r2 - pop {r0} - bx r0 - .align 2, 0 -_080B6BDC: .4byte gTasks -_080B6BE0: .4byte sub_80B6BE4 - thumb_func_end sub_80B6BBC - - thumb_func_start sub_80B6BE4 -sub_80B6BE4: @ 80B6BE4 - push {r4-r6,lr} - sub sp, 0x1C - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080B6C18 @ =gTasks - adds r6, r1, r0 - ldr r0, _080B6C1C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r4, r0, 24 - movs r1, 0x26 - ldrsh r0, [r6, r1] - cmp r0, 0x7 - bls _080B6C0C - b _080B6F1E -_080B6C0C: - lsls r0, 2 - ldr r1, _080B6C20 @ =_080B6C24 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B6C18: .4byte gTasks -_080B6C1C: .4byte gBattleAnimAttacker -_080B6C20: .4byte _080B6C24 - .align 2, 0 -_080B6C24: - .4byte _080B6C44 - .4byte _080B6CCC - .4byte _080B6D28 - .4byte _080B6D8C - .4byte _080B6E04 - .4byte _080B6E6C - .4byte _080B6E82 - .4byte _080B6EEC -_080B6C44: - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x2 - bl SetAnimBgAttribute - movs r0, 0x2 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0 - strh r0, [r6, 0xA] - strh r0, [r6, 0xC] - movs r0, 0x10 - strh r0, [r6, 0xE] - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x10] - ldr r3, _080B6CC8 @ =gSprites - movs r2, 0x10 - ldrsh r1, [r6, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r0, [r0, 0x5] - lsls r0, 28 - lsrs r0, 30 - strh r0, [r6, 0x12] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r0, [r0, 0x5] - lsrs r0, 4 - adds r0, 0x10 - lsls r0, 4 - strh r0, [r6, 0x14] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r2, [r0, 0x1] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0, 0x1] - movs r0, 0x10 - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrb r1, [r0, 0x5] - movs r2, 0xC - orrs r1, r2 - strb r1, [r0, 0x5] - movs r0, 0x80 - strh r0, [r6, 0x16] - b _080B6F1E - .align 2, 0 -_080B6CC8: .4byte gSprites -_080B6CCC: - ldrh r0, [r6, 0xA] - adds r0, 0x1 - strh r0, [r6, 0xA] - movs r5, 0x1 - ands r5, r0 - cmp r5, 0 - beq _080B6CDC - b _080B6F24 -_080B6CDC: - ldrh r0, [r6, 0x14] - ldrb r2, [r6, 0xC] - ldr r4, _080B6D08 @ =0x000066e0 - movs r1, 0x10 - adds r3, r4, 0 - bl BlendPalette - ldrh r0, [r6, 0x16] - ldrb r2, [r6, 0xC] - movs r1, 0x10 - adds r3, r4, 0 - bl BlendPalette - ldrh r1, [r6, 0xC] - movs r2, 0xC - ldrsh r0, [r6, r2] - cmp r0, 0xB - bgt _080B6D0C - adds r0, r1, 0x1 - strh r0, [r6, 0xC] - b _080B6F24 - .align 2, 0 -_080B6D08: .4byte 0x000066e0 -_080B6D0C: - strh r5, [r6, 0xA] - strh r5, [r6, 0xC] - ldr r1, _080B6D24 @ =0x00003f44 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - b _080B6F1E - .align 2, 0 -_080B6D24: .4byte 0x00003f44 -_080B6D28: - movs r0, 0x2 - movs r1, 0x3 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl SetAnimBgAttribute - ldr r0, _080B6D7C @ =gBattle_BG2_X - movs r1, 0 - strh r1, [r0] - ldr r4, _080B6D80 @ =gBattle_BG2_Y - strh r1, [r4] - movs r0, 0x18 - movs r1, 0 - bl SetGpuReg - ldrh r1, [r4] - movs r0, 0x1A - bl SetGpuReg - add r0, sp, 0xC - movs r1, 0x2 - bl sub_80752C8 - add r0, sp, 0xC - ldrb r0, [r0, 0x9] - ldr r1, _080B6D84 @ =gFile_graphics_battle_anims_backgrounds_scary_face_sheet - add r2, sp, 0xC - ldrh r2, [r2, 0xA] - bl AnimLoadCompressedBgGfx - ldr r0, _080B6D88 @ =gFile_graphics_battle_anims_backgrounds_scary_face_palette - add r1, sp, 0xC - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadCompressedPalette - b _080B6F1E - .align 2, 0 -_080B6D7C: .4byte gBattle_BG2_X -_080B6D80: .4byte gBattle_BG2_Y -_080B6D84: .4byte gFile_graphics_battle_anims_backgrounds_scary_face_sheet -_080B6D88: .4byte gFile_graphics_battle_anims_backgrounds_scary_face_palette -_080B6D8C: - add r0, sp, 0xC - movs r1, 0x2 - bl sub_80752C8 - movs r0, 0x80 - lsls r0, 6 - bl AllocZeroed - adds r1, r0, 0 - ldr r5, _080B6DFC @ =gMonSpritesGfxPtr - ldr r0, [r5] - movs r4, 0xBE - lsls r4, 1 - adds r0, r4 - str r1, [r0] - ldr r0, _080B6E00 @ =gFile_graphics_battle_anims_backgrounds_scary_face_player_tilemap - bl LZDecompressWram - add r0, sp, 0xC - ldrb r0, [r0, 0x8] - ldr r1, [r5] - adds r1, r4 - ldr r1, [r1] - movs r2, 0x80 - lsls r2, 1 - movs r3, 0 - bl sub_80730C0 - add r0, sp, 0xC - ldrb r0, [r0, 0x9] - ldr r1, [r5] - adds r1, r4 - ldr r1, [r1] - movs r2, 0x20 - str r2, [sp] - str r2, [sp, 0x4] - movs r2, 0x11 - str r2, [sp, 0x8] - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - ldr r0, [r5] - adds r0, r4 - ldr r0, [r0] - bl Free - ldr r0, [r5] - adds r0, r4 - movs r1, 0 - str r1, [r0] - b _080B6F1E - .align 2, 0 -_080B6DFC: .4byte gMonSpritesGfxPtr -_080B6E00: .4byte gFile_graphics_battle_anims_backgrounds_scary_face_player_tilemap -_080B6E04: - ldrh r0, [r6, 0xA] - adds r0, 0x1 - strh r0, [r6, 0xA] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B6E14 - b _080B6F24 -_080B6E14: - ldrh r1, [r6, 0xC] - adds r1, 0x1 - strh r1, [r6, 0xC] - ldrh r0, [r6, 0xE] - subs r0, 0x1 - strh r0, [r6, 0xE] - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0xE - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080B6F24 - strh r0, [r6, 0xA] - strh r0, [r6, 0xC] - movs r0, 0x10 - strh r0, [r6, 0xE] - ldr r1, _080B6E68 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x2 - movs r1, 0x4 - movs r2, 0x2 - bl SetAnimBgAttribute - b _080B6F1E - .align 2, 0 -_080B6E68: .4byte 0x00003f42 -_080B6E6C: - cmp r4, 0x1 - bne _080B6E76 - movs r1, 0x80 - lsls r1, 2 - b _080B6E7A -_080B6E76: - movs r1, 0x80 - lsls r1, 3 -_080B6E7A: - movs r0, 0 - bl ClearGpuRegBits - b _080B6F1E -_080B6E82: - ldr r2, _080B6EC0 @ =gSprites - movs r0, 0x10 - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - ldrh r0, [r0, 0x22] - adds r1, r0 - subs r1, 0x20 - lsls r1, 16 - lsrs r2, r1, 16 - cmp r1, 0 - bge _080B6EA2 - movs r2, 0 -_080B6EA2: - cmp r4, 0x1 - bne _080B6EC4 - lsls r0, r2, 24 - lsrs r0, 24 - adds r1, r2, 0 - adds r1, 0x40 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - str r2, [sp] - movs r2, 0x4 - str r2, [sp, 0x4] - str r4, [sp, 0x8] - b _080B6EDE - .align 2, 0 -_080B6EC0: .4byte gSprites -_080B6EC4: - lsls r0, r2, 24 - lsrs r0, 24 - adds r1, r2, 0 - adds r1, 0x40 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - str r2, [sp] - movs r2, 0x8 - str r2, [sp, 0x4] - movs r2, 0x1 - str r2, [sp, 0x8] - movs r2, 0x4 -_080B6EDE: - movs r3, 0x8 - bl ScanlineEffect_InitWave - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x1C] - b _080B6F1E -_080B6EEC: - ldrh r0, [r6, 0x16] - ldr r3, _080B6F08 @ =0x000077ff - movs r1, 0x10 - movs r2, 0xC - bl BlendPalette - cmp r4, 0x1 - bne _080B6F0C - movs r1, 0x80 - lsls r1, 2 - movs r0, 0 - bl SetGpuRegBits - b _080B6F16 - .align 2, 0 -_080B6F08: .4byte 0x000077ff -_080B6F0C: - movs r1, 0x80 - lsls r1, 3 - movs r0, 0 - bl SetGpuRegBits -_080B6F16: - ldr r0, _080B6F2C @ =sub_80B6F30 - str r0, [r6] - movs r0, 0 - strh r0, [r6, 0x26] -_080B6F1E: - ldrh r0, [r6, 0x26] - adds r0, 0x1 - strh r0, [r6, 0x26] -_080B6F24: - add sp, 0x1C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B6F2C: .4byte sub_80B6F30 - thumb_func_end sub_80B6BE4 - - thumb_func_start sub_80B6F30 -sub_80B6F30: @ 80B6F30 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080B6FB8 @ =gTasks - adds r4, r0, r1 - ldrh r1, [r4, 0xA] - adds r1, 0x1 - strh r1, [r4, 0xA] - movs r0, 0x1 - ands r0, r1 - strh r0, [r4, 0x18] - cmp r0, 0 - bne _080B6F68 - ldr r1, _080B6FBC @ =gSineTable - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0x12 - bl __divsi3 - strh r0, [r4, 0xC] -_080B6F68: - movs r2, 0x18 - ldrsh r0, [r4, r2] - cmp r0, 0x1 - bne _080B6F8A - ldr r1, _080B6FBC @ =gSineTable - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - movs r1, 0x12 - bl __divsi3 - movs r1, 0x10 - subs r1, r0 - strh r1, [r4, 0xE] -_080B6F8A: - ldrh r1, [r4, 0xE] - lsls r1, 8 - ldrh r0, [r4, 0xC] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0x80 - bne _080B6FB2 - movs r0, 0 - strh r0, [r4, 0x26] - ldr r1, _080B6FC0 @ =sub_80B6FC4 - str r1, [r4] - adds r0, r5, 0 - bl _call_via_r1 -_080B6FB2: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B6FB8: .4byte gTasks -_080B6FBC: .4byte gSineTable -_080B6FC0: .4byte sub_80B6FC4 - thumb_func_end sub_80B6F30 - - thumb_func_start sub_80B6FC4 -sub_80B6FC4: @ 80B6FC4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r7, r0, 24 - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - ldr r1, _080B6FE8 @ =gTasks - adds r6, r0, r1 - movs r1, 0x26 - ldrsh r0, [r6, r1] - cmp r0, 0x5 - bls _080B6FDE - b _080B7148 -_080B6FDE: - lsls r0, 2 - ldr r1, _080B6FEC @ =_080B6FF0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B6FE8: .4byte gTasks -_080B6FEC: .4byte _080B6FF0 - .align 2, 0 -_080B6FF0: - .4byte _080B7008 - .4byte _080B7024 - .4byte _080B7044 - .4byte _080B707C - .4byte _080B709C - .4byte _080B70E8 -_080B7008: - ldr r1, _080B701C @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] - ldrh r0, [r6, 0x16] - ldr r3, _080B7020 @ =0x000066e0 - movs r1, 0x10 - movs r2, 0xC - bl BlendPalette - b _080B7148 - .align 2, 0 -_080B701C: .4byte gScanlineEffect -_080B7020: .4byte 0x000066e0 -_080B7024: - ldr r1, _080B7040 @ =0x00003f44 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0x10 - bl SetGpuReg - movs r1, 0 - movs r0, 0x10 - strh r0, [r6, 0xC] - strh r1, [r6, 0xE] - b _080B7148 - .align 2, 0 -_080B7040: .4byte 0x00003f44 -_080B7044: - ldrh r1, [r6, 0xC] - subs r1, 0x1 - strh r1, [r6, 0xC] - ldrh r0, [r6, 0xE] - adds r0, 0x1 - strh r0, [r6, 0xE] - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r2, 0xE - ldrsh r0, [r6, r2] - cmp r0, 0xF - ble _080B714E - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x2 - bl SetAnimBgAttribute - movs r0, 0x2 - movs r1, 0x4 - movs r2, 0x2 - bl SetAnimBgAttribute - b _080B7148 -_080B707C: - movs r0, 0x2 - bl sub_8075358 - movs r0, 0 - movs r1, 0x90 - movs r2, 0x20 - bl FillPalette - movs r0, 0x2 - movs r1, 0x3 - movs r2, 0 - bl SetAnimBgAttribute - movs r0, 0xC - strh r0, [r6, 0xA] - b _080B7148 -_080B709C: - ldrh r0, [r6, 0x14] - ldrb r2, [r6, 0xA] - ldr r4, _080B70C8 @ =0x000066e0 - movs r1, 0x10 - adds r3, r4, 0 - bl BlendPalette - ldrh r0, [r6, 0x16] - ldrb r2, [r6, 0xA] - movs r1, 0x10 - adds r3, r4, 0 - bl BlendPalette - ldrh r0, [r6, 0xA] - movs r2, 0xA - ldrsh r1, [r6, r2] - cmp r1, 0 - beq _080B70CC - subs r0, 0x1 - strh r0, [r6, 0xA] - b _080B714E - .align 2, 0 -_080B70C8: .4byte 0x000066e0 -_080B70CC: - strh r1, [r6, 0xA] - ldr r1, _080B70E4 @ =0x00003f44 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - b _080B7148 - .align 2, 0 -_080B70E4: .4byte 0x00003f44 -_080B70E8: - ldr r5, _080B7154 @ =gSprites - movs r1, 0x10 - ldrsh r0, [r6, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - movs r0, 0x3 - ldrb r2, [r6, 0x12] - ands r2, r0 - lsls r2, 2 - ldrb r4, [r1, 0x5] - movs r3, 0xD - negs r3, r3 - adds r0, r3, 0 - ands r0, r4 - orrs r0, r2 - strb r0, [r1, 0x5] - movs r2, 0x10 - ldrsh r1, [r6, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r1, [r0, 0x1] - ands r3, r1 - strb r3, [r0, 0x1] - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x2 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r7, 0 - bl DestroyAnimVisualTask -_080B7148: - ldrh r0, [r6, 0x26] - adds r0, 0x1 - strh r0, [r6, 0x26] -_080B714E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B7154: .4byte gSprites - thumb_func_end sub_80B6FC4 - - thumb_func_start sub_80B7158 -sub_80B7158: @ 80B7158 - adds r3, r0, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r3] - ldr r2, _080B719C @ =gBattlerSpriteIds - ldr r1, _080B71A0 @ =gBattleAnimAttacker - ldrb r1, [r1] - adds r1, r2 - ldrb r1, [r1] - strh r1, [r0, 0x38] - movs r1, 0x80 - strh r1, [r0, 0x2E] - movs r1, 0xA - strh r1, [r0, 0x30] - ldr r2, _080B71A4 @ =gBattleAnimArgs - ldrh r1, [r2] - strh r1, [r0, 0x32] - ldrh r1, [r2, 0x2] - strh r1, [r0, 0x34] - ldr r1, _080B71A8 @ =sub_80B71B0 - str r1, [r0, 0x1C] - ldr r2, _080B71AC @ =gSprites - movs r3, 0x38 - ldrsh r1, [r0, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - adds r1, 0x8 - strh r1, [r0, 0x22] - bx lr - .align 2, 0 -_080B719C: .4byte gBattlerSpriteIds -_080B71A0: .4byte gBattleAnimAttacker -_080B71A4: .4byte gBattleAnimArgs -_080B71A8: .4byte sub_80B71B0 -_080B71AC: .4byte gSprites - thumb_func_end sub_80B7158 - - thumb_func_start sub_80B71B0 -sub_80B71B0: @ 80B71B0 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x34] - movs r1, 0x34 - ldrsh r3, [r5, r1] - cmp r3, 0 - beq _080B7218 - subs r0, 0x1 - strh r0, [r5, 0x34] - movs r2, 0x2E - ldrsh r0, [r5, r2] - movs r2, 0x30 - ldrsh r1, [r5, r2] - bl Sin - ldr r4, _080B7210 @ =gSprites - movs r1, 0x38 - ldrsh r2, [r5, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - strh r0, [r1, 0x24] - movs r2, 0x2E - ldrsh r0, [r5, r2] - movs r2, 0x30 - ldrsh r1, [r5, r2] - bl Cos - movs r1, 0x38 - ldrsh r2, [r5, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - strh r0, [r1, 0x26] - ldrh r0, [r5, 0x32] - ldrh r2, [r5, 0x2E] - adds r1, r0, r2 - strh r1, [r5, 0x2E] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080B724C - ldr r2, _080B7214 @ =0xffffff00 - adds r0, r1, r2 - strh r0, [r5, 0x2E] - b _080B724C - .align 2, 0 -_080B7210: .4byte gSprites -_080B7214: .4byte 0xffffff00 -_080B7218: - ldr r2, _080B7254 @ =gSprites - movs r0, 0x38 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r3, [r0, 0x24] - movs r0, 0x38 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r3, [r0, 0x26] - movs r0, 0x38 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - subs r1, 0x8 - strh r1, [r0, 0x22] - ldr r0, _080B7258 @ =DestroySpriteAndMatrix - str r0, [r5, 0x1C] -_080B724C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B7254: .4byte gSprites -_080B7258: .4byte DestroySpriteAndMatrix - thumb_func_end sub_80B71B0 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_835B488.s b/data/data_835B488.s index 41b35a648..fd6f9c209 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -924,13 +924,7 @@ gUnknown_83E74D8:: @ 83E74D8 .incbin "baserom.gba", 0x3E74D8, 0x18 gUnknown_83E74F0:: @ 83E74F0 - .incbin "baserom.gba", 0x3E74F0, 0x178 - -gUnknown_83E7668:: @ 83E7668 - .incbin "baserom.gba", 0x3E7668, 0x78 - -gUnknown_83E76E0:: @ 83E76E0 - .incbin "baserom.gba", 0x3E76E0, 0x30 + .incbin "baserom.gba", 0x3E74F0, 0xB8 .section .rodata.83E7CFC diff --git a/include/battle_anim.h b/include/battle_anim.h index 16c3b7819..09eeefb44 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -50,7 +50,6 @@ extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT]; extern u8 gAnimMoveTurn; extern u8 gBattleAnimAttacker; extern u8 gBattleAnimTarget; -extern u8 gUnknown_02038440; extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT]; extern u16 gAnimMovePower; extern s32 gAnimMoveDmg; @@ -68,6 +67,13 @@ extern struct OamData gOamData_83ACAF8; extern struct OamData gOamData_83ACB60; extern struct OamData gOamData_83ACA30; extern struct OamData gOamData_83ACA98; +extern struct OamData gOamData_83ACA90; +extern struct OamData gOamData_83ACAF0; +extern struct OamData gOamData_83ACB10; +extern struct OamData gOamData_83ACB18; +extern struct OamData gOamData_83ACB38; +extern struct OamData gOamData_83ACA18; +extern struct OamData gOamData_83ACB20; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); @@ -84,7 +90,7 @@ s16 sub_80A52EC(s16 a); s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan); bool8 IsBattlerSpriteVisible(u8 battlerId); s16 KeepPanInRange(s16 a, s32 oldPan); -void sub_80730C0(u16, const u16 *, u16 *, u8); +void sub_80730C0(u16, const u16 *, s32, u8); // battle_intro.c void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value); @@ -287,6 +293,16 @@ void sub_80B9800(u8 taskId); // dragon.c void sub_80B75E0(u8 taskId); +// ghost.c +void sub_80B54E8(u8 taskId); +void sub_80B58AC(u8 taskId); +void sub_80B5AAC(u8 taskId); +void sub_80B6020(u8 taskId); +void sub_80B63B4(u8 taskId); +void sub_80B68C8(u8 taskId); +void sub_80B6BBC(u8 taskId); + + // flying.s void sub_80B1D3C(struct Sprite *sprite); diff --git a/include/graphics.h b/include/graphics.h index c769f6ab8..492b21893 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -981,6 +981,11 @@ extern const u32 gMetalShineGfx[]; extern const u32 gMetalShinePalette[]; extern const u32 gMetalShineTilemap[]; +// ghost +extern const u32 gFile_graphics_battle_anims_backgrounds_scary_face_sheet[]; +extern const u32 gFile_graphics_battle_anims_backgrounds_scary_face_palette[]; +extern const u32 gFile_graphics_battle_anims_backgrounds_scary_face_player_tilemap[]; + // title_screen extern const u16 gGraphics_TitleScreen_PokemonFireRedLogoPals[]; extern const u8 gGraphics_TitleScreen_PokemonFireRedLogoTiles[]; @@ -994,6 +999,7 @@ extern const u8 gGraphics_TitleScreen_CopyrightPressStartMap[]; extern const u16 gGraphics_TitleScreen_FirePals[]; extern const u8 gGraphics_TitleScreen_BlankObjTiles[]; +// battle_gfx_sfx_util extern const u32 gHealthboxSinglesPlayerGfx[]; extern const u32 gHealthboxSinglesOpponentGfx[]; extern const u32 gHealthboxDoublesPlayerGfx[]; @@ -1003,7 +1009,6 @@ extern const u32 gBlankGfxCompressed[]; extern const u16 gBattleInterface_BallStatusBarPal[]; extern const u16 gBattleInterface_BallDisplayPal[]; extern const u32 gFile_graphics_interface_hp_numbers[]; - extern const u32 gGhostFrontPic[]; extern const u32 gGhostPalette[]; extern const u32 gSubstituteDollGfx[]; diff --git a/ld_script.txt b/ld_script.txt index 27ac542bc..d7681bda0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -165,7 +165,7 @@ SECTIONS { asm/psychic.o(.text); asm/bug.o(.text); asm/rock.o(.text); - asm/ghost.o(.text); + src/ghost.o(.text); src/dragon.o(.text); src/dark.o(.text); src/ground.o(.text); @@ -423,6 +423,7 @@ SECTIONS { src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); data/data_835B488.o(.rodata.83DF09C); + src/ghost.o(.rodata); src/dragon.o(.rodata); src/dark.o(.rodata); src/ground.o(.rodata); diff --git a/src/dark.c b/src/dark.c index c080e6243..7809e538d 100644 --- a/src/dark.c +++ b/src/dark.c @@ -213,7 +213,7 @@ static void sub_80B7954(u8 taskId) gTasks[taskId].data[2] = 0; if (blendA == 16) { - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible = 1; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible = TRUE; DestroyAnimVisualTask(taskId); } } @@ -730,11 +730,11 @@ void sub_80B85B8(u8 taskId) u8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? 1 : 0; MoveBattlerSpriteToBG(gBattleAnimAttacker, toBG2); - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible = 0; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible = FALSE; if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) { MoveBattlerSpriteToBG(gBattleAnimAttacker ^ 2, toBG2 ^ 1); - gSprites[gBattlerSpriteIds[gBattleAnimAttacker ^ 2]].invisible = 0; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker ^ 2]].invisible = FALSE; } DestroyAnimVisualTask(taskId); } diff --git a/src/ghost.c b/src/ghost.c new file mode 100644 index 000000000..1fc044a77 --- /dev/null +++ b/src/ghost.c @@ -0,0 +1,1484 @@ +#include "global.h" +#include "battle_anim.h" +#include "bg.h" +#include "gpu_regs.h" +#include "palette.h" +#include "scanline_effect.h" +#include "malloc.h" +#include "graphics.h" +#include "sound.h" +#include "trig.h" +#include "util.h" +#include "decompress.h" +#include "constants/songs.h" + +static void sub_80B5268(struct Sprite *sprite); +static void sub_80B52D0(struct Sprite *sprite); +static void sub_80B5344(struct Sprite *sprite); +static void sub_80B53C0(struct Sprite *sprite); +static void sub_80B5450(struct Sprite *sprite); +static void sub_80B5470(struct Sprite *sprite); +static void sub_80B5570(u8 taskId); +static void sub_80B55C8(u8 taskId); +static void InitAnimShadowBall(struct Sprite *sprite); +static void AnimShadowBallStep(struct Sprite *sprite); +static void sub_80B57F8(struct Sprite *sprite); +static void sub_80B5810(struct Sprite *sprite); +static void sub_80B59D4(u8 taskId); +static void sub_80B5AD4(u8 taskId); +static void sub_80B5D38(u8 taskId); +static void sub_80B5DCC(u8 taskId); +static void sub_80B5EC0(struct Sprite *sprite); +static void sub_80B5FE0(struct Sprite *sprite); +static void sub_80B623C(u8 taskId); +static void sub_80B6468(u8 taskId); +static void sub_80B65F0(u8 taskId); +static void sub_80B664C(struct Sprite *sprite); +static void sub_80B66A8(struct Sprite *sprite); +static void sub_80B6728(struct Sprite *sprite); +static void sub_80B67A0(struct Sprite *sprite); +static void sub_80B67D4(struct Sprite *sprite); +static void sub_80B68A8(struct Sprite *sprite); +static void sub_80B696C(u8 taskId); +static void sub_80B6AF8(struct Sprite *sprite); +static void sub_80B7158(struct Sprite *sprite); +static void sub_80B6BE4(u8 taskId); +static void sub_80B6F30(u8 taskId); +static void sub_80B6FC4(u8 taskId); +static void sub_80B71B0(struct Sprite *sprite); + +static const union AffineAnimCmd gUnknown_83E75A8[] = +{ + AFFINEANIMCMD_FRAME(0x1E, 0x1E, 10, 5), + AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 10, 5), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const gUnknown_83E75C0[] = +{ + gUnknown_83E75A8, +}; + +const struct SpriteTemplate gUnknown_83E75C4 = +{ + .tileTag = ANIM_TAG_YELLOW_BALL, + .paletteTag = ANIM_TAG_YELLOW_BALL, + .oam = &gOamData_83ACA90, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E75C0, + .callback = sub_80B5268, +}; + +const struct SpriteTemplate gUnknown_83E75DC = +{ + .tileTag = ANIM_TAG_YELLOW_BALL, + .paletteTag = ANIM_TAG_YELLOW_BALL, + .oam = &gOamData_83ACAF0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B5450, +}; + +static const union AffineAnimCmd gUnknown_83E75F4[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const gUnknown_83E7604[] = +{ + gUnknown_83E75F4, +}; + +const struct SpriteTemplate gShadowBallSpriteTemplate = +{ + .tileTag = ANIM_TAG_SHADOW_BALL, + .paletteTag = ANIM_TAG_SHADOW_BALL, + .oam = &gOamData_83ACA38, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7604, + .callback = InitAnimShadowBall, +}; + +const union AnimCmd gUnknown_83E7620[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(8, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(24, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E7638[] = +{ + gUnknown_83E7620, +}; + +const struct SpriteTemplate gUnknown_83E763C = +{ + .tileTag = ANIM_TAG_LICK, + .paletteTag = ANIM_TAG_LICK, + .oam = &gOamData_83ACA18, + .anims = gUnknown_83E7638, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B57F8, +}; + +// not used +static const union AffineAnimCmd gUnknown_83E7654[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_END, +}; + +// not used +static const union AffineAnimCmd *const gUnknown_83E7664[] = +{ + gUnknown_83E7654, +}; + +const struct SpriteTemplate gUnknown_83E7668 = +{ + .tileTag = ANIM_TAG_WHITE_SHADOW, + .paletteTag = ANIM_TAG_WHITE_SHADOW, + .oam = &gOamData_83ACB20, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B5EC0, +}; + +const struct SpriteTemplate gUnknown_83E7680 = +{ + .tileTag = ANIM_TAG_NAIL, + .paletteTag = ANIM_TAG_NAIL, + .oam = &gOamData_83ACB18, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B664C, +}; + +const struct SpriteTemplate gUnknown_83E7698 = +{ + .tileTag = ANIM_TAG_GHOSTLY_SPIRIT, + .paletteTag = ANIM_TAG_GHOSTLY_SPIRIT, + .oam = &gOamData_83ACAF8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B67D4, +}; + +const struct SpriteTemplate gUnknown_83E76B0 = +{ + .tileTag = ANIM_TAG_DEVIL, + .paletteTag = ANIM_TAG_DEVIL, + .oam = &gOamData_83ACAF8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B67D4, +}; + +static const union AnimCmd gUnknown_83E76C8[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(24, 4), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E76DC[] = +{ + gUnknown_83E76C8, +}; + +const struct SpriteTemplate gUnknown_83E76E0 = +{ + .tileTag = ANIM_TAG_PURPLE_FLAME, + .paletteTag = ANIM_TAG_PURPLE_FLAME, + .oam = &gOamData_83ACB38, + .anims = gUnknown_83E76DC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B6AF8, +}; + +const struct SpriteTemplate gUnknown_83E76F8 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B7158, +}; + +static void sub_80B5268(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sub_8075678(sprite); + sprite->callback = sub_80B52D0; + sprite->data[6] = 16; + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); + SetGpuReg(REG_OFFSET_BLDALPHA, sprite->data[6]); +} + +static void sub_80B52D0(struct Sprite *sprite) +{ + s16 r0, r2; + + sub_80B53C0(sprite); + if (AnimTranslateLinear(sprite)) + { + sprite->callback = sub_80B5344; + return; + } + sprite->pos2.x += Sin(sprite->data[5], 10); + sprite->pos2.y += Cos(sprite->data[5], 15); + r2 = sprite->data[5]; + sprite->data[5] = (sprite->data[5] + 5) & 0xFF; + r0 = sprite->data[5]; + if (r2 != 0 && r2 <= 196) + return; + if (r0 <= 0) + return; + PlaySE12WithPanning(SE_W109, gUnknown_2037F24); +} + +static void sub_80B5344(struct Sprite *sprite) +{ + s16 r2, r0; + + sprite->data[0] = 1; + AnimTranslateLinear(sprite); + sprite->pos2.x += Sin(sprite->data[5], 10); + sprite->pos2.y += Cos(sprite->data[5], 15); + r2 = sprite->data[5]; + sprite->data[5] = (sprite->data[5] + 5) & 0xFF; + r0 = sprite->data[5]; + if ((r2 == 0 || r2 > 196) && r0 > 0) + PlaySE(SE_W109); + if (sprite->data[6] == 0) + { + sprite->invisible = TRUE; + sprite->callback = DestroyAnimSpriteAndDisableBlend; + } + else + { + sub_80B53C0(sprite); + } +} + +static void sub_80B53C0(struct Sprite *sprite) +{ + s16 r0; + + if (sprite->data[6] > 0xFF) + { + if (++sprite->data[6] == 0x10d) + sprite->data[6] = 0; + return; + } + r0 = sprite->data[7]; + ++sprite->data[7]; + if ((r0 & 0xFF) == 0) + { + sprite->data[7] &= 0xff00; + if ((sprite->data[7] & 0x100) != 0) + ++sprite->data[6]; + else + --sprite->data[6]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], 16 - sprite->data[6])); + if (sprite->data[6] == 0 || sprite->data[6] == 16) + sprite->data[7] ^= 0x100; + if (sprite->data[6] == 0) + sprite->data[6] = 0x100; + } +} + +static void sub_80B5450(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->callback = sub_80B5470; + sprite->callback(sprite); +} + +static void sub_80B5470(struct Sprite *sprite) +{ + u16 temp1; + + sprite->pos2.x = Sin(sprite->data[0], 32); + sprite->pos2.y = Cos(sprite->data[0], 8); + temp1 = sprite->data[0] - 65; + if (temp1 <= 130) + sprite->oam.priority = 2; + else + sprite->oam.priority = 1; + sprite->data[0] = (sprite->data[0] + 19) & 0xFF; + sprite->data[2] += 80; + sprite->pos2.y += sprite->data[2] >> 8; + sprite->data[7] += 1; + if (sprite->data[7] == 61) + DestroyAnimSprite(sprite); +} + +void sub_80B54E8(u8 taskId) +{ + u8 spriteId; + + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); + spriteId = GetAnimBattlerSpriteId(0); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND); + SetSpriteRotScale(spriteId, 128, 128, 0); + gSprites[spriteId].invisible = FALSE; + gTasks[taskId].data[0] = 128; + gTasks[taskId].data[1] = *gBattleAnimArgs; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 16; + gTasks[taskId].func = sub_80B5570; +} + +static void sub_80B5570(u8 taskId) +{ + gTasks[taskId].data[10] += 1; + if (gTasks[taskId].data[10] == 3) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[2] += 1; + gTasks[taskId].data[3] -= 1; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[2], gTasks[taskId].data[3])); + if (gTasks[taskId].data[2] != 9) + return; + gTasks[taskId].func = sub_80B55C8; + } +} + +static void sub_80B55C8(u8 taskId) +{ + u8 spriteId; + + if (gTasks[taskId].data[1] > 0) + { + gTasks[taskId].data[1] -= 1; + return; + } + spriteId = GetAnimBattlerSpriteId(0); + gTasks[taskId].data[0] += 8; + if (gTasks[taskId].data[0] <= 0xFF) + { + SetSpriteRotScale(spriteId, gTasks[taskId].data[0], gTasks[taskId].data[0], 0); + } + else + { + ResetSpriteRotScale(spriteId); + DestroyAnimVisualTask(taskId); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + } +} + +// Spins a sprite towards the target, pausing in the middle. +// Used in Shadow Ball. +// arg 0: duration step 1 (attacker -> center) +// arg 1: duration step 2 (spin center) +// arg 2: duration step 3 (center -> target) +static void InitAnimShadowBall(struct Sprite *sprite) +{ + s16 oldPosX = sprite->pos1.x; + s16 oldPosY = sprite->pos1.y; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[3] = gBattleAnimArgs[2]; + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sprite->data[6] = ((oldPosX - sprite->pos1.x) << 4) / (gBattleAnimArgs[0] << 1); + sprite->data[7] = ((oldPosY - sprite->pos1.y) << 4) / (gBattleAnimArgs[0] << 1); + sprite->callback = AnimShadowBallStep; +} + +static void AnimShadowBallStep(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + sprite->data[1] -= 1; + if (sprite->data[1] > 0) + break; + sprite->data[0] += 1; + break; + case 1: + sprite->data[2] -= 1; + if (sprite->data[2] > 0) + break; + sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sprite->data[6] = ((sprite->data[1] - sprite->pos1.x) << 4) / sprite->data[3]; + sprite->data[7] = ((sprite->data[2] - sprite->pos1.y) << 4) / sprite->data[3]; + sprite->data[0] += 1; + break; + case 2: + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + sprite->data[3] -= 1; + if (sprite->data[3] > 0) + break; + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[0] += 1; + break; + case 3: + DestroySpriteAndMatrix(sprite); + break; + } +} + +static void sub_80B57F8(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->callback = sub_80B5810; +} + +static void sub_80B5810(struct Sprite *sprite) +{ + bool8 r5 = FALSE; + bool8 r6 = FALSE; + + if (sprite->animEnded) + { + if (!sprite->invisible) + sprite->invisible = TRUE; + + switch (sprite->data[0]) + { + default: + r6 = TRUE; + break; + case 0: + if (sprite->data[1] == 2) + r5 = TRUE; + break; + case 1: + if (sprite->data[1] == 4) + r5 = TRUE; + break; + } + if (r5) + { + sprite->invisible ^= 1; + ++sprite->data[2]; + sprite->data[1] = 0; + if (sprite->data[2] == 5) + { + sprite->data[2] = 0; + ++sprite->data[0]; + } + } + else if (r6) + { + DestroyAnimSprite(sprite); + } + else + { + ++sprite->data[1]; + } + } +} + +void sub_80B58AC(u8 taskId) +{ + struct Task *task; + + task = &gTasks[taskId]; + task->data[0] = CloneBattlerSpriteWithBlend(1); + if (task->data[0] < 0) + { + DestroyAnimVisualTask(taskId); + return; + } + task->data[1] = 0; + task->data[2] = 15; + task->data[3] = 2; + task->data[4] = 0; + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[2], task->data[3])); + gSprites[task->data[0]].data[0] = 80; + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + { + gSprites[task->data[0]].data[1] = -144; + gSprites[task->data[0]].data[2] = 112; + } + else + { + gSprites[task->data[0]].data[1] = 144; + gSprites[task->data[0]].data[2] = -112; + } + gSprites[task->data[0]].data[3] = 0; + gSprites[task->data[0]].data[4] = 0; + StoreSpriteCallbackInData6(&gSprites[task->data[0]], SpriteCallbackDummy); + gSprites[task->data[0]].callback = TranslateSpriteLinearFixedPoint; + task->func = sub_80B59D4; +} + +static void sub_80B59D4(u8 taskId) +{ + struct Task *task; + + task = &gTasks[taskId]; + switch (task->data[4]) + { + case 0: + task->data[1] += 1; + task->data[5] = task->data[1] & 3; + if (task->data[5] == 1) + if (task->data[2] > 0) + task->data[2] -= 1; + if (task->data[5] == 3) + if (task->data[3] <= 15) + task->data[3] += 1; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[2], task->data[3])); + if (task->data[3] != 16 || task->data[2] != 0) + break; + if (task->data[1] <= 80) + break; + obj_delete_but_dont_free_vram(&gSprites[task->data[0]]); + task->data[4] = 1; + break; + case 1: + if (++task->data[6] <= 1) + break; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + task->data[4] += 1; + break; + case 2: + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80B5AAC(u8 taskId) +{ + struct Task *task; + + task = &gTasks[taskId]; + task->data[15] = 0; + task->func = sub_80B5AD4; + task->func(taskId); +} + +static void sub_80B5AD4(u8 taskId) +{ + s16 startLine; + struct Task *task = &gTasks[taskId]; + u8 position = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); + + switch (task->data[15]) + { + case 0: + task->data[14] = AllocSpritePalette(ANIM_TAG_BENT_SPOON); + if (task->data[14] == 0xFF || task->data[14] == 0xF) + { + DestroyAnimVisualTask(taskId); + } + else + { + task->data[0] = CloneBattlerSpriteWithBlend(1); + if (task->data[0] < 0) + { + FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); + DestroyAnimVisualTask(taskId); + } + else + { + s16 mask2; + + gSprites[task->data[0]].oam.paletteNum = task->data[14]; + gSprites[task->data[0]].oam.objMode = ST_OAM_OBJ_NORMAL; + gSprites[task->data[0]].oam.priority = 3; + gSprites[task->data[0]].invisible = (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].invisible); + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 16; + task->data[13] = GetAnimBattlerSpriteId(1); + task->data[4] = (gSprites[task->data[13]].oam.paletteNum + 16) * 16; + if (position == 1) + { + u16 mask = DISPCNT_BG1_ON; + + mask2 = mask; + } + else + { + u16 mask = DISPCNT_BG2_ON; + + mask2 = mask; + } + ClearGpuRegBits(REG_OFFSET_DISPCNT, mask2); + ++task->data[15]; + } + } + break; + case 1: + task->data[14] = (task->data[14] + 16) * 16; + CpuSet(&gPlttBufferUnfaded[task->data[4]], &gPlttBufferFaded[task->data[14]], 0x4000008); + BlendPalette(task->data[4], 16, 10, RGB(13, 0, 15)); + ++task->data[15]; + break; + case 2: + startLine = gSprites[task->data[13]].pos1.y + gSprites[task->data[13]].pos2.y - 32; + if (startLine < 0) + startLine = 0; + if (position == 1) + task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, 4, 1); + else + task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, 8, 1); + ++task->data[15]; + break; + case 3: + if (position == 1) + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1)); + else + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG2)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); + ++task->data[15]; + break; + case 4: + if (position == 1) + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); + else + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); + task->func = sub_80B5D38; + ++task->data[15]; + break; + default: + ++task->data[15]; + break; + } +} + +static void sub_80B5D38(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + ++task->data[1]; + task->data[5] = task->data[1] & 1; + if (task->data[5] == 0) + task->data[2] = gSineTable[task->data[1]] / 18; + if (task->data[5] == 1) + task->data[3] = 16 - (gSineTable[task->data[1]] / 18); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[2], task->data[3])); + if (task->data[1] == 128) + { + task->data[15] = 0; + task->func = sub_80B5DCC; + task->func(taskId); + } +} + +static void sub_80B5DCC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + u8 rank = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); + + switch (task->data[15]) + { + case 0: + gScanlineEffect.state = 3; + task->data[14] = GetAnimBattlerSpriteId(1); + if (rank == 1) + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); + else + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); + break; + case 1: + BlendPalette(task->data[4], 16, 0, RGB(13, 0, 15)); + break; + case 2: + gSprites[task->data[14]].invisible = TRUE; + obj_delete_but_dont_free_vram(&gSprites[task->data[0]]); + FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + if (rank == 1) + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); + else + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); + DestroyAnimVisualTask(taskId); + break; + } + ++task->data[15]; +} + +static void sub_80B5EC0(struct Sprite *sprite) +{ + s16 battler1X, battler1Y; + s16 battler2X, battler2Y; + s16 yDiff; + + if (gBattleAnimArgs[0] == 0) + { + battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28; + battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28; + } + else + { + battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28; + battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28; + } + yDiff = battler2Y - battler1Y; + sprite->data[0] = battler1X * 16; + sprite->data[1] = battler1Y * 16; + sprite->data[2] = ((battler2X - battler1X) * 16) / gBattleAnimArgs[1]; + sprite->data[3] = (yDiff * 16) / gBattleAnimArgs[1]; + sprite->data[4] = gBattleAnimArgs[1]; + sprite->data[5] = battler2X; + sprite->data[6] = battler2Y; + sprite->data[7] = sprite->data[4] / 2; + sprite->oam.priority = 2; + sprite->pos1.x = battler1X; + sprite->pos1.y = battler1Y; + sprite->callback = sub_80B5FE0; + sprite->invisible = TRUE; +} + +static void sub_80B5FE0(struct Sprite *sprite) +{ + if (sprite->data[4]) + { + sprite->data[0] += sprite->data[2]; + sprite->data[1] += sprite->data[3]; + sprite->pos1.x = sprite->data[0] >> 4; + sprite->pos1.y = sprite->data[1] >> 4; + if (--sprite->data[4] == 0) + sprite->data[0] = 0; + } +} + +void sub_80B6020(u8 taskId) +{ + struct Task *task; + s16 battler; + u8 spriteId; + s16 baseX, baseY; + s16 x, y; + + task = &gTasks[taskId]; + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); + task->data[5] = 0; + task->data[6] = 0; + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 16; + task->data[10] = gBattleAnimArgs[0]; + baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + baseY = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM); + if (!IsContest()) + { + for (battler = 0; battler < 4; ++battler) + { + if (battler != gBattleAnimAttacker + && battler != (gBattleAnimAttacker ^ 2) + && IsBattlerSpriteVisible(battler)) + { + spriteId = CreateSprite(&gUnknown_83E7668, baseX, baseY, 55); + if (spriteId != MAX_SPRITES) + { + x = GetBattlerSpriteCoord(battler, 2); + y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_BOTTOM); + gSprites[spriteId].data[0] = baseX << 4; + gSprites[spriteId].data[1] = baseY << 4; + gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[4] = gBattleAnimArgs[1]; + gSprites[spriteId].data[5] = x; + gSprites[spriteId].data[6] = y; + gSprites[spriteId].callback = sub_80B5FE0; + task->data[task->data[12] + 13] = spriteId; + ++task->data[12]; + } + } + } + } + else + { + spriteId = CreateSprite(&gUnknown_83E7668, baseX, baseY, 55); + if (spriteId != MAX_SPRITES) + { + x = 48; + y = 40; + gSprites[spriteId].data[0] = baseX << 4; + gSprites[spriteId].data[1] = baseY << 4; + gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1]; + gSprites[spriteId].data[4] = gBattleAnimArgs[1]; + gSprites[spriteId].data[5] = x; + gSprites[spriteId].data[6] = y; + gSprites[spriteId].callback = sub_80B5FE0; + task->data[13] = spriteId; + task->data[12] = 1; + } + } + task->func = sub_80B623C; +} + +static void sub_80B623C(u8 taskId) +{ + u16 i; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (task->data[6] == 0) + { + if (++task->data[5] > 1) + { + task->data[5] = 0; + ++task->data[7]; + if (task->data[7] & 1) + { + if (task->data[8] < 16) + ++task->data[8]; + } + else + { + if (task->data[9]) + --task->data[9]; + } + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[8], task->data[9])); + if (task->data[7] >= 24) + { + task->data[7] = 0; + task->data[6] = 1; + } + } + } + if (task->data[10]) + --task->data[10]; + else if (task->data[6]) + ++task->data[0]; + break; + case 1: + if (++task->data[5] > 1) + { + task->data[5] = 0; + ++task->data[7]; + if (task->data[7] & 1) + { + if (task->data[8]) + --task->data[8]; + } + else if (task->data[9] < 16) + { + ++task->data[9]; + } + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[8], task->data[9])); + if (task->data[8] == 0 && task->data[9] == 16) + { + for (i = 0; i < task->data[12]; ++i) + DestroySprite(&gSprites[task->data[i + 13]]); + ++task->data[0]; + } + } + break; + case 2: + if (++task->data[5] > 0) + ++task->data[0]; + break; + case 3: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80B63B4(u8 taskId) +{ + s16 startX, startY; + s16 leftDistance, topDistance, bottomDistance, rightDistance; + + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, ((WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR) | + (WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR))); + SetGpuReg(REG_OFFSET_WINOUT, ((WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ) | + (WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR))); + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_DARKEN)); + SetGpuReg(REG_OFFSET_BLDY, 0x10); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER || IsContest()) + startX = 40; + else + startX = 200; + gBattle_WIN0H = (startX << 8) | startX; + startY = 40; + gBattle_WIN0V = (startY << 8) | startY; + leftDistance = startX; + rightDistance = 240 - startX; + topDistance = startY; + bottomDistance = 72; + gTasks[taskId].data[1] = leftDistance; + gTasks[taskId].data[2] = rightDistance; + gTasks[taskId].data[3] = topDistance; + gTasks[taskId].data[4] = bottomDistance; + gTasks[taskId].data[5] = startX; + gTasks[taskId].data[6] = startY; + gTasks[taskId].func = sub_80B6468; +} + +static void sub_80B6468(u8 taskId) +{ + s16 step, leftDistance, rightDistance, topDistance, bottomDistance, startX, startY; + u16 left, right, top, bottom, selectedPalettes; + + step = gTasks[taskId].data[0]; + ++gTasks[taskId].data[0]; + leftDistance = gTasks[taskId].data[1]; + rightDistance = gTasks[taskId].data[2]; + topDistance = gTasks[taskId].data[3]; + bottomDistance = gTasks[taskId].data[4]; + startX = gTasks[taskId].data[5]; + startY = gTasks[taskId].data[6]; + if (step < 16) + { + left = startX - (leftDistance * 0.0625) * step; + right = startX + (rightDistance * 0.0625) * step; + top = startY - (topDistance * 0.0625) * step; + bottom = startY + (bottomDistance * 0.0625) * step; + } + else + { + left = 0; + right = 240; + top = 0; + bottom = 112; + selectedPalettes = sub_8075BE8(1, 0, 0, 0, 0, 0, 0); + BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0)); + gTasks[taskId].func = sub_80B65F0; + } + gBattle_WIN0H = (left << 8) | right; + gBattle_WIN0V = (top << 8) | bottom; +} + +static void sub_80B65F0(u8 taskId) +{ + if (!gPaletteFade.active) + { + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + SetGpuReg(REG_OFFSET_WININ, ((WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR) | + (WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR))); + SetGpuReg(REG_OFFSET_WINOUT, ((WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR) | + (WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR))); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + DestroyAnimVisualTask(taskId); + } +} + +static void sub_80B664C(struct Sprite *sprite) +{ + s16 xDelta, xDelta2; + + InitSpritePosToAnimAttacker(sprite, 1); + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + xDelta = 24; + xDelta2 = -2; + sprite->oam.matrixNum = ST_OAM_HFLIP; + } + else + { + xDelta = -24; + xDelta2 = 2; + } + sprite->pos1.x += xDelta; + sprite->data[1] = xDelta2; + sprite->data[0] = 60; + sprite->callback = sub_80B66A8; +} + +static void sub_80B66A8(struct Sprite *sprite) +{ + u16 var0; + + if (sprite->data[0] > 0) + { + --sprite->data[0]; + } + else + { + sprite->pos2.x += sprite->data[1]; + var0 = sprite->pos2.x + 7; + if (var0 > 14) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.x = 0; + sprite->oam.tileNum += 8; + if (++sprite->data[2] == 3) + { + sprite->data[0] = 30; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, sub_80B6728); + } + else + { + sprite->data[0] = 40; + } + } + } +} + +static void sub_80B6728(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + ++sprite->data[0]; + sprite->data[1] = 0; + sprite->data[2] = 0; + } + else if (sprite->data[1] < 2) + { + ++sprite->data[1]; + } + else + { + sprite->data[1] = 0; + ++sprite->data[2]; + SetGpuReg(REG_OFFSET_BLDALPHA, (16 - sprite->data[2]) | (sprite->data[2] << 8)); + if (sprite->data[2] == 16) + { + sprite->invisible = TRUE; + sprite->callback = sub_80B67A0; + } + } +} + +static void sub_80B67A0(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + DestroyAnimSprite(sprite); +} + +static void sub_80B67D4(struct Sprite *sprite) +{ + u16 coeffB, coeffA; + + sprite->pos2.x = Sin(sprite->data[0], 12); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos2.x = -sprite->pos2.x; + sprite->data[0] = (sprite->data[0] + 6) & 0xFF; + sprite->data[1] += 0x100; + sprite->pos2.y = -(sprite->data[1] >> 8); + ++sprite->data[7]; + if (sprite->data[7] == 1) + { + sprite->data[6] = 0x050B; + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); + SetGpuReg(REG_OFFSET_BLDALPHA, sprite->data[6]); + } + else if (sprite->data[7] > 30) + { + ++sprite->data[2]; + coeffB = sprite->data[6] >> 8; + coeffA = sprite->data[6] & 0xFF; + if (++coeffB > 16) + coeffB = 16; + --coeffA; + if ((s16)coeffA < 0) + coeffA = 0; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(coeffA, coeffB)); + sprite->data[6] = BLDALPHA_BLEND(coeffA, coeffB); + if (coeffB == 16 && coeffA == 0) + { + sprite->invisible = TRUE; + sprite->callback = sub_80B68A8; + } + } +} + +static void sub_80B68A8(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimSprite(sprite); +} + +void sub_80B68C8(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[0] = 0; + task->data[1] = 16; + task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimAttacker); + task->data[11] = (GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2) + 8; + task->data[7] = 0; + task->data[5] = GetBattlerSpriteBGPriority(gBattleAnimAttacker); + task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 2; + task->data[3] = 0; + task->data[4] = 16; + SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); + task->data[8] = 0; + task->func = sub_80B696C; +} + +static void sub_80B696C(u8 taskId) +{ + u16 i; + u8 spriteId; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + for (i = 0; i < 6; ++i) + { + spriteId = CreateSprite(&gUnknown_83E76E0, task->data[9], task->data[10], task->data[6]); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = taskId; + gSprites[spriteId].data[1] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER; + gSprites[spriteId].data[2] = (i * 42) & 0xFF; + gSprites[spriteId].data[3] = task->data[11]; + gSprites[spriteId].data[5] = i * 6; + ++task->data[7]; + } + } + ++task->data[0]; + break; + case 1: + if (++task->data[1] & 1) + { + if (task->data[3] < 14) + ++task->data[3]; + } + else if (task->data[4] > 4) + { + --task->data[4]; + } + if (task->data[3] == 14 && task->data[4] == 4) + { + task->data[1] = 0; + ++task->data[0]; + } + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4])); + break; + case 2: + if (++task->data[1] > 30) + { + task->data[1] = 0; + ++task->data[0]; + } + break; + case 3: + if (++task->data[1] & 1) + { + if (task->data[3] > 0) + --task->data[3]; + } + else if (task->data[4] < 16) + { + ++task->data[4]; + } + + if (task->data[3] == 0 && task->data[4] == 16) + { + task->data[8] = 1; + ++task->data[0]; + } + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4])); + break; + case 4: + if (task->data[7] == 0) + ++task->data[0]; + break; + case 5: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80B6AF8(struct Sprite *sprite) +{ + u16 index; + + if (sprite->data[1] == 0) + sprite->data[2] += 2; + else + sprite->data[2] -= 2; + sprite->data[2] &= 0xFF; + sprite->pos2.x = Sin(sprite->data[2], sprite->data[3]); + index = sprite->data[2] - 65; + if (index < 127) + sprite->oam.priority = gTasks[sprite->data[0]].data[5] + 1; + else + sprite->oam.priority = gTasks[sprite->data[0]].data[5]; + ++sprite->data[5]; + sprite->data[6] = (sprite->data[5] * 8) & 0xFF; + sprite->pos2.y = Sin(sprite->data[6], 7); + if (gTasks[sprite->data[0]].data[8]) + { + --gTasks[sprite->data[0]].data[7]; + DestroySprite(sprite); + } +} + +void sub_80B6BBC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[15] = 0; + task->func = sub_80B6BE4; + sub_80B6BE4(taskId); +} + +static void sub_80B6BE4(u8 taskId) +{ + s16 y; + struct BattleAnimBgData animBgData; + struct Task *task = &gTasks[taskId]; + u8 rank = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); + + switch (task->data[15]) + { + case 0: + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 2); + SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 1); + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 16; + task->data[4] = GetAnimBattlerSpriteId(0); + task->data[5] = gSprites[task->data[4]].oam.priority; + task->data[6] = (gSprites[task->data[4]].oam.paletteNum + 16) << 4; + gSprites[task->data[4]].oam.objMode = ST_OAM_OBJ_BLEND; + gSprites[task->data[4]].oam.priority = 3; + task->data[7] = 128; + break; + case 1: + ++task->data[1]; + if (task->data[1] & 1) + return; + BlendPalette(task->data[6], 0x10, task->data[2], RGB(0, 23, 25)); + BlendPalette(task->data[7], 0x10, task->data[2], RGB(0, 23, 25)); + if (task->data[2] <= 11) + { + ++task->data[2]; + return; + } + task->data[1] = 0; + task->data[2] = 0; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); + break; + case 2: + SetAnimBgAttribute(2, BG_ANIM_CHAR_BASE_BLOCK, 1); + SetAnimBgAttribute(2, BG_ANIM_SCREEN_SIZE, 0); + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X); + SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); + sub_80752C8(&animBgData, 2); + AnimLoadCompressedBgGfx(animBgData.bgId, gFile_graphics_battle_anims_backgrounds_scary_face_sheet, animBgData.tilesOffset); + LoadCompressedPalette(gFile_graphics_battle_anims_backgrounds_scary_face_palette, 16 * animBgData.paletteId, 0x20); + break; + case 3: + sub_80752C8(&animBgData, 2); + gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); + LZDecompressWram(gFile_graphics_battle_anims_backgrounds_scary_face_player_tilemap, gMonSpritesGfxPtr->field_17C); + sub_80730C0(animBgData.paletteId, gMonSpritesGfxPtr->field_17C, 256, 0); + CopyToBgTilemapBufferRect_ChangePalette(animBgData.bgId, gMonSpritesGfxPtr->field_17C, 0, 0, 0x20, 0x20, 0x11); + CopyBgTilemapBufferToVram(2); + FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C); + break; + case 4: + ++task->data[1]; + if (task->data[1] & 1) + return; + ++task->data[2]; + --task->data[3]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[2], task->data[3])); + if (task->data[3]) + return; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 16; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); + break; + case 5: + if (rank == 1) + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); + else + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); + break; + case 6: + y = gSprites[task->data[4]].pos1.y + gSprites[task->data[4]].pos2.y - 0x20; + if (y < 0) + y = 0; + if (rank == 1) + task->data[10] = ScanlineEffect_InitWave(y, y + 0x40, 4, 8, 0, 4, 1); + else + task->data[10] = ScanlineEffect_InitWave(y, y + 0x40, 4, 8, 0, 8, 1); + break; + case 7: + BlendPalette(task->data[7], 0x10, 0xC, RGB(31, 31, 29)); + if (rank == 1) + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); + else + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); + task->func = sub_80B6F30; + task->data[15] = 0; + break; + } + ++task->data[15]; +} + +static void sub_80B6F30(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + ++task->data[1]; + task->data[8] = task->data[1] & 1; + if (!task->data[8]) + task->data[2] = gSineTable[task->data[1]] / 18; + if (task->data[8] == 1) + task->data[3] = 16 - gSineTable[task->data[1]] / 18; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[2], task->data[3])); + if (task->data[1] == 128) + { + task->data[15] = 0; + task->func = sub_80B6FC4; + sub_80B6FC4(taskId); + } +} + +static void sub_80B6FC4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[15]) + { + case 0: + gScanlineEffect.state = 3; + BlendPalette(task->data[7], 0x10, 0xC, RGB(0, 23, 25)); + break; + case 1: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0)); + task->data[2] = 16; + task->data[3] = 0; + break; + case 2: + --task->data[2]; + ++task->data[3]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[2], task->data[3])); + if (task->data[3] <= 15) + return; + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 2); + SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); + break; + case 3: + sub_8075358(2); + FillPalette(0, 0x90, 0x20); + SetAnimBgAttribute(2, BG_ANIM_CHAR_BASE_BLOCK, 0); + task->data[1] = 12; + break; + case 4: + BlendPalette(task->data[6], 0x10, task->data[1], RGB(0, 23, 25)); + BlendPalette(task->data[7], 0x10, task->data[1], RGB(0, 23, 25)); + if ( task->data[1] ) + { + --task->data[1]; + return; + } + task->data[1] = 0; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10)); + break; + case 5: + gSprites[task->data[4]].oam.priority = task->data[5]; + gSprites[task->data[4]].oam.objMode = ST_OAM_OBJ_NORMAL; + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 1); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_NONE); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimVisualTask(taskId); + break; + } + ++task->data[15]; +} + +static void sub_80B7158(struct Sprite *sprite) +{ + sprite->invisible = TRUE; + sprite->data[5] = gBattlerSpriteIds[gBattleAnimAttacker]; + sprite->data[0] = 128; + sprite->data[1] = 10; + sprite->data[2] = gBattleAnimArgs[0]; + sprite->data[3] = gBattleAnimArgs[1]; + sprite->callback = sub_80B71B0; + gSprites[sprite->data[5]].pos1.y += 8; +} + +static void sub_80B71B0(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + --sprite->data[3]; + gSprites[sprite->data[5]].pos2.x = Sin(sprite->data[0], sprite->data[1]); + gSprites[sprite->data[5]].pos2.y = Cos(sprite->data[0], sprite->data[1]); + sprite->data[0] += sprite->data[2]; + if (sprite->data[0] > 255) + sprite->data[0] -= 256; + } + else + { + gSprites[sprite->data[5]].pos2.x = 0; + gSprites[sprite->data[5]].pos2.y = 0; + gSprites[sprite->data[5]].pos1.y -= 8; + sprite->callback = DestroySpriteAndMatrix; + } +} From 2ea9fe6bde0cf62d4e6a3447aa3bcccce788db39 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 11 Oct 2019 06:33:35 +0800 Subject: [PATCH 10/25] use window macros in battle_transition.c --- src/battle_transition.c | 82 ++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 42 deletions(-) diff --git a/src/battle_transition.c b/src/battle_transition.c index d391b3ed4..19d76fed1 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -857,14 +857,14 @@ static bool8 BT_Phase2BigPokeball_Init(struct Task *task) task->tEva = 0; task-> tTheta = 0; task-> tAmplitude = 0x4000; - sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; sTransitionStructPtr->winOut = 0; - sTransitionStructPtr->win0H = 240; - sTransitionStructPtr->win0V = 160; + sTransitionStructPtr->win0H = WIN_RANGE(0, 0xF0); + sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD; sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva; for (i = 0; i < 160; ++i) - gScanlineEffectRegBuffers[1][i] = 240; + gScanlineEffectRegBuffers[1][i] = 0xF0; SetVBlankCallback(VBCB_BT_Phase2BigPokeball1); BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr); CpuFill16(0, tilemapAddr, 0x800); @@ -897,7 +897,7 @@ static bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task) ++task->tEva; task->tInterval = 1; // Broken logic. This makes the condition always TRUE. } - sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva; + sTransitionStructPtr->bldAlpha = BLDALPHA_BLEND(task->tEva, task->tEvb); // Increment eva until it reaches 50% coeff if (task->tEva > 15) ++task->tState; @@ -1148,13 +1148,11 @@ static bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task) BT_InitCtrlBlk(); ScanlineEffect_Clear(); sTransitionStructPtr->winIn = 0; - sTransitionStructPtr->winOut = 0x3F; - sTransitionStructPtr->win0H = 0xF0F1; - sTransitionStructPtr->win0V = 0x00A0; + sTransitionStructPtr->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; + sTransitionStructPtr->win0H = WIN_RANGE(0xF0, 0xF1); + sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); for (i = 0; i < 160; ++i) - { - gScanlineEffectRegBuffers[1][i] = 0xF3F4; - } + gScanlineEffectRegBuffers[1][i] = WIN_RANGE(0xF3, 0xF4); SetVBlankCallback(VBCB_BT_Phase2ClockwiseBlackFade); sTransitionStructPtr->trEndPtX = 120; ++task->tState; @@ -1167,7 +1165,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task) BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, -1, 1, 1); do { - gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = (sTransitionStructPtr->trCurrentPtX + 1) | 0x7800; + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE(0x78, sTransitionStructPtr->trCurrentPtX + 1); } while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE)); @@ -1197,7 +1195,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task) left = sTransitionStructPtr->trCurrentPtX; right = 240; } - gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right); if (finished) break; finished = BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE); @@ -1211,7 +1209,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task) else { while (sTransitionStructPtr->trCurrentPtY < sTransitionStructPtr->trEndPtY) - gScanlineEffectRegBuffers[0][++sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + gScanlineEffectRegBuffers[0][++sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right); } ++sTransitionStructPtr->vblankDma; return FALSE; @@ -1265,7 +1263,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task) left = 120; right = sTransitionStructPtr->trCurrentPtX; } - win0H = right | (left << 8); + win0H = WIN_RANGE2(left, right); gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = win0H; if (finished) break; @@ -1280,7 +1278,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task) else { while (sTransitionStructPtr->trCurrentPtY > sTransitionStructPtr->trEndPtY) - gScanlineEffectRegBuffers[0][--sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + gScanlineEffectRegBuffers[0][--sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right); } ++sTransitionStructPtr->vblankDma; return FALSE; @@ -1301,7 +1299,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task) left = 0; right = 240; } - gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right); } while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE)); sTransitionStructPtr->trEndPtX += 32; @@ -1431,12 +1429,12 @@ static bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task) BT_InitCtrlBlk(); ScanlineEffect_Clear(); - sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; sTransitionStructPtr->winOut = 0; - sTransitionStructPtr->win0H = 240; - sTransitionStructPtr->win0V = 160; + sTransitionStructPtr->win0H = WIN_RANGE(0, 0xF0); + sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); for (i = 0; i < 160; ++i) - gScanlineEffectRegBuffers[1][i] = 242; + gScanlineEffectRegBuffers[1][i] = WIN_RANGE(0, 0xF2); SetVBlankCallback(VBCB_BT_Phase2BlackWaveToRight); ++task->tState; return TRUE; @@ -1460,7 +1458,7 @@ static bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task) left = 0; if (left > 240) left = 240; - *winVal = (left << 8) | (0xF1); + *winVal = WIN_RANGE(left, 0xF1); if (left < 240) nextFunc = FALSE; } @@ -2529,10 +2527,10 @@ static bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task) BT_InitCtrlBlk(); ScanlineEffect_Clear(); sTransitionStructPtr->winIn = 0; - sTransitionStructPtr->winOut = 0x3F; - sTransitionStructPtr->win0H = 0x7878; - sTransitionStructPtr->win0V = 0x3070; - sTransitionStructPtr->win1V = 0x1090; + sTransitionStructPtr->winOut = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; + sTransitionStructPtr->win0H = WIN_RANGE(0x78, 0x78); + sTransitionStructPtr->win0V = WIN_RANGE(0x30, 0x70); + sTransitionStructPtr->win1V = WIN_RANGE(0x10, 0x90); sTransitionStructPtr->counter = 0; sub_80D1F64(0, 0, FALSE); sub_80D1F64(0, 0, TRUE); @@ -2665,11 +2663,11 @@ static bool8 BT_Phase2Mugshot_Init(struct Task *task) task->tTheta = 0; task->tbg0HOfsOpponent = 1; task->tbg0HOfsPlayer = 239; - sTransitionStructPtr->winIn = 0x3F; - sTransitionStructPtr->winOut = 0x3E; - sTransitionStructPtr->win0V = 160; + sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; + sTransitionStructPtr->winOut = WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR; + sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); for (i = 0; i < 160; ++i) - gScanlineEffectRegBuffers[1][i] = 0xF0F1; + gScanlineEffectRegBuffers[1][i] = WIN_RANGE(0xF0, 0xF1); SetVBlankCallback(VBCB_BT_Phase2Mugshot1_Slide); ++task->tState; return FALSE; @@ -2784,7 +2782,7 @@ static bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task) DmaStop(0); memset(gScanlineEffectRegBuffers[0], 0, 320); memset(gScanlineEffectRegBuffers[1], 0, 320); - SetGpuReg(REG_OFFSET_WIN0H, 0xF0); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0xF0)); SetGpuReg(REG_OFFSET_BLDY, 0); ++task->tState; task->tCounter = 0; @@ -3026,9 +3024,9 @@ static bool8 BT_Phase2SlicedScreen_Init(struct Task *task) ScanlineEffect_Clear(); task->tAcc = 256; task->tJerk = 1; - sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR; sTransitionStructPtr->winOut = 0; - sTransitionStructPtr->win0V = 160; + sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); for (i = 0; i < 160; ++i) { gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->bg123HOfs; @@ -3065,7 +3063,7 @@ static bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task) else { *ofsBuffer = sTransitionStructPtr->bg123HOfs - task->tSpeed; - *win0HBuffer = (task->tSpeed << 8) | 0xF1; + *win0HBuffer = WIN_RANGE(task->tSpeed, 0xF1); } } if (task->tSpeed > 0xEF) @@ -3126,9 +3124,9 @@ static bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task) ScanlineEffect_Clear(); sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN; sTransitionStructPtr->bldY = 0; - sTransitionStructPtr->winIn = 0x1E; - sTransitionStructPtr->winOut = 0x3F; - sTransitionStructPtr->win0V = 160; + sTransitionStructPtr->winIn = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ; + sTransitionStructPtr->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WININ_WIN0_CLR; + sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); for (i = 0; i < 160; ++i) { gScanlineEffectRegBuffers[1][i] = 0; @@ -3180,7 +3178,7 @@ static bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task) sTransitionStructPtr->win0H = 240; sTransitionStructPtr->bldY = 0; sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN; - sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winIn = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WININ_WIN0_CLR; sTransitionStructPtr->counter = 0; SetVBlankCallback(VBCB_BT_Phase2WhiteFadeInStripes2); ++task->tState; @@ -3351,11 +3349,11 @@ static bool8 BT_Phase2BlackDoodles_Init(struct Task *task) BT_InitCtrlBlk(); ScanlineEffect_Clear(); - sTransitionStructPtr->winIn = 0x3F; + sTransitionStructPtr->winIn = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR; sTransitionStructPtr->winOut = 0; - sTransitionStructPtr->win0V = 0xA0; + sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0); for (i = 0; i < 160; ++i) - gScanlineEffectRegBuffers[0][i] = 0x00F0; + gScanlineEffectRegBuffers[0][i] = WIN_RANGE(0, 0xF0); CpuSet(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 160); SetVBlankCallback(VBCB_BT_Phase2BlackDoodles); ++task->tState; @@ -3394,7 +3392,7 @@ static bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task) if (right <= left) right = left; } - gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8); + gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right); if (nextFunc) { ++task->tState; From e61343049278df73a0da8da70a50dea88da0bdae Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 11 Oct 2019 08:48:05 +0800 Subject: [PATCH 11/25] rock --- asm/battle_anim_effects_1.s | 6 +- asm/rock.s | 1558 ----------------------------------- data/data_835B488.s | 21 +- data/graphics.s | 2 +- include/battle_anim.h | 10 + include/gba/io_reg.h | 1 + include/graphics.h | 5 + ld_script.txt | 3 +- src/ghost.c | 10 +- src/rock.c | 833 +++++++++++++++++++ 10 files changed, 869 insertions(+), 1580 deletions(-) delete mode 100644 asm/rock.s create mode 100644 src/rock.c diff --git a/asm/battle_anim_effects_1.s b/asm/battle_anim_effects_1.s index b71600380..42b3517f2 100644 --- a/asm/battle_anim_effects_1.s +++ b/asm/battle_anim_effects_1.s @@ -1316,8 +1316,8 @@ _080A2D08: bx r0 thumb_func_end sub_80A2C68 - thumb_func_start sub_80A2D10 -sub_80A2D10: @ 80A2D10 + thumb_func_start AnimMoveTwisterParticle +AnimMoveTwisterParticle: @ 80A2D10 push {r4,lr} adds r4, r0, 0 bl IsContest @@ -1361,7 +1361,7 @@ _080A2D3C: _080A2D64: .4byte gBattleAnimTarget _080A2D68: .4byte gBattleAnimArgs _080A2D6C: .4byte sub_80A2D70 - thumb_func_end sub_80A2D10 + thumb_func_end AnimMoveTwisterParticle thumb_func_start sub_80A2D70 sub_80A2D70: @ 80A2D70 diff --git a/asm/rock.s b/asm/rock.s deleted file mode 100644 index 7df02ecc3..000000000 --- a/asm/rock.s +++ /dev/null @@ -1,1558 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80B4634 -sub_80B4634: @ 80B4634 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _080B46A0 @ =gBattleAnimArgs - movs r1, 0x6 - ldrsh r0, [r6, r1] - cmp r0, 0 - beq _080B4654 - ldr r0, _080B46A4 @ =gBattleAnimTarget - ldrb r0, [r0] - adds r2, r5, 0 - adds r2, 0x20 - adds r3, r5, 0 - adds r3, 0x22 - movs r1, 0 - bl SetAverageBattlerPositions -_080B4654: - ldrh r0, [r6] - ldrh r1, [r5, 0x20] - adds r0, r1 - movs r4, 0 - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x22] - adds r0, 0xE - strh r0, [r5, 0x22] - ldrb r1, [r6, 0x2] - adds r0, r5, 0 - bl StartSpriteAnim - adds r0, r5, 0 - bl AnimateSprite - strh r4, [r5, 0x2E] - strh r4, [r5, 0x30] - movs r0, 0x4 - strh r0, [r5, 0x32] - movs r0, 0x10 - strh r0, [r5, 0x34] - ldr r0, _080B46A8 @ =0x0000ffba - strh r0, [r5, 0x36] - ldrh r0, [r6, 0x4] - strh r0, [r5, 0x38] - ldr r1, _080B46AC @ =sub_80B46B4 - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldr r1, _080B46B0 @ =TranslateSpriteInEllipseOverDuration - str r1, [r5, 0x1C] - adds r0, r5, 0 - bl _call_via_r1 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B46A0: .4byte gBattleAnimArgs -_080B46A4: .4byte gBattleAnimTarget -_080B46A8: .4byte 0x0000ffba -_080B46AC: .4byte sub_80B46B4 -_080B46B0: .4byte TranslateSpriteInEllipseOverDuration - thumb_func_end sub_80B4634 - - thumb_func_start sub_80B46B4 -sub_80B46B4: @ 80B46B4 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x38] - ldrh r2, [r4, 0x20] - adds r0, r1, r2 - strh r0, [r4, 0x20] - movs r0, 0xC0 - strh r0, [r4, 0x2E] - strh r1, [r4, 0x30] - movs r0, 0x4 - strh r0, [r4, 0x32] - movs r0, 0x20 - strh r0, [r4, 0x34] - ldr r0, _080B46EC @ =0x0000ffe8 - strh r0, [r4, 0x36] - ldr r1, _080B46F0 @ =DestroySpriteAndMatrix - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - ldr r1, _080B46F4 @ =TranslateSpriteInEllipseOverDuration - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B46EC: .4byte 0x0000ffe8 -_080B46F0: .4byte DestroySpriteAndMatrix -_080B46F4: .4byte TranslateSpriteInEllipseOverDuration - thumb_func_end sub_80B46B4 - - thumb_func_start sub_80B46F8 -sub_80B46F8: @ 80B46F8 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B4720 @ =gBattleAnimArgs - ldrb r1, [r4, 0xA] - bl StartSpriteAnim - adds r0, r5, 0 - bl AnimateSprite - ldr r0, _080B4724 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B4728 - ldrh r0, [r5, 0x20] - ldrh r1, [r4] - subs r0, r1 - b _080B472E - .align 2, 0 -_080B4720: .4byte gBattleAnimArgs -_080B4724: .4byte gBattleAnimAttacker -_080B4728: - ldrh r0, [r4] - ldrh r1, [r5, 0x20] - adds r0, r1 -_080B472E: - strh r0, [r5, 0x20] - ldr r3, _080B4770 @ =gBattleAnimArgs - ldrh r2, [r3, 0x2] - ldrh r0, [r5, 0x22] - adds r2, r0 - movs r4, 0 - strh r2, [r5, 0x22] - ldrh r0, [r3, 0x8] - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldrh r1, [r3, 0x4] - adds r0, r1 - strh r0, [r5, 0x32] - strh r2, [r5, 0x34] - ldrh r0, [r3, 0x6] - adds r2, r0 - strh r2, [r5, 0x36] - adds r0, r5, 0 - bl InitSpriteDataForLinearTranslation - strh r4, [r5, 0x34] - strh r4, [r5, 0x36] - ldr r0, _080B4774 @ =TranslateSpriteLinearFixedPoint - str r0, [r5, 0x1C] - ldr r1, _080B4778 @ =DestroySpriteAndMatrix - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B4770: .4byte gBattleAnimArgs -_080B4774: .4byte TranslateSpriteLinearFixedPoint -_080B4778: .4byte DestroySpriteAndMatrix - thumb_func_end sub_80B46F8 - - thumb_func_start sub_80B477C -sub_80B477C: @ 80B477C - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080B4794 @ =gBattleAnimArgs - movs r1, 0xC - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B4798 - adds r0, r4, 0 - movs r1, 0 - bl InitSpritePosToAnimAttacker - b _080B47A0 - .align 2, 0 -_080B4794: .4byte gBattleAnimArgs -_080B4798: - adds r0, r4, 0 - movs r1, 0 - bl InitSpritePosToAnimTarget -_080B47A0: - ldr r1, _080B47BC @ =gBattleAnimArgs - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x32] - ldrh r0, [r1, 0xA] - strh r0, [r4, 0x34] - ldr r0, _080B47C0 @ =sub_80B47C4 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B47BC: .4byte gBattleAnimArgs -_080B47C0: .4byte sub_80B47C4 - thumb_func_end sub_80B477C - - thumb_func_start sub_80B47C4 -sub_80B47C4: @ 80B47C4 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x36] - adds r0, r1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 24 - negs r0, r0 - strh r0, [r4, 0x26] - movs r2, 0x38 - ldrsh r0, [r4, r2] - movs r2, 0x34 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x32] - ldrh r1, [r4, 0x38] - adds r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080B480A - adds r0, r4, 0 - bl DestroyAnimSprite -_080B480A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B47C4 - - thumb_func_start do_boulder_dust -do_boulder_dust: @ 80B4810 - push {r4-r6,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r6, r0, 24 - movs r5, 0 - ldr r1, _080B48E4 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0x80 - lsls r1, 5 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl SetAnimBgAttribute - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B4854 - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0x1 - bl SetAnimBgAttribute -_080B4854: - ldr r0, _080B48E8 @ =gBattle_BG1_X - strh r5, [r0] - ldr r4, _080B48EC @ =gBattle_BG1_Y - strh r5, [r4] - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg - ldrh r1, [r4] - movs r0, 0x16 - bl SetGpuReg - mov r0, sp - bl sub_80752A0 - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080B48F0 @ =gFile_graphics_battle_anims_backgrounds_sandstorm_brew_tilemap - bl AnimLoadCompressedBgTilemap - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080B48F4 @ =gFile_graphics_battle_anims_backgrounds_sandstorm_brew_sheet - mov r2, sp - ldrh r2, [r2, 0xA] - bl AnimLoadCompressedBgGfx - ldr r0, _080B48F8 @ =gFile_graphics_battle_anims_sprites_261_palette - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadCompressedPalette - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B48B0 - mov r0, sp - ldrb r0, [r0, 0x8] - ldr r1, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_80730C0 -_080B48B0: - ldr r0, _080B48FC @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _080B48CA - ldr r0, _080B4900 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B48CA - movs r5, 0x1 -_080B48CA: - ldr r0, _080B4904 @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - strh r5, [r1, 0x8] - ldr r0, _080B4908 @ =sub_80B490C - str r0, [r1] - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B48E4: .4byte 0x00003f42 -_080B48E8: .4byte gBattle_BG1_X -_080B48EC: .4byte gBattle_BG1_Y -_080B48F0: .4byte gFile_graphics_battle_anims_backgrounds_sandstorm_brew_tilemap -_080B48F4: .4byte gFile_graphics_battle_anims_backgrounds_sandstorm_brew_sheet -_080B48F8: .4byte gFile_graphics_battle_anims_sprites_261_palette -_080B48FC: .4byte gBattleAnimArgs -_080B4900: .4byte gBattleAnimAttacker -_080B4904: .4byte gTasks -_080B4908: .4byte sub_80B490C - thumb_func_end do_boulder_dust - - thumb_func_start sub_80B490C -sub_80B490C: @ 80B490C - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080B4934 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - adds r2, r1, 0 - cmp r0, 0 - bne _080B4940 - ldr r1, _080B4938 @ =gBattle_BG1_X - ldr r3, _080B493C @ =0x0000fffa - adds r0, r3, 0 - ldrh r3, [r1] - adds r0, r3 - b _080B4946 - .align 2, 0 -_080B4934: .4byte gTasks -_080B4938: .4byte gBattle_BG1_X -_080B493C: .4byte 0x0000fffa -_080B4940: - ldr r1, _080B4974 @ =gBattle_BG1_X - ldrh r0, [r1] - adds r0, 0x6 -_080B4946: - strh r0, [r1] - ldr r1, _080B4978 @ =gBattle_BG1_Y - ldr r3, _080B497C @ =0x0000ffff - adds r0, r3, 0 - ldrh r3, [r1] - adds r0, r3 - strh r0, [r1] - lsls r1, r5, 2 - adds r0, r1, r5 - lsls r0, 3 - adds r0, r2 - movs r3, 0x20 - ldrsh r0, [r0, r3] - adds r4, r1, 0 - cmp r0, 0x4 - bls _080B4968 - b _080B4A96 -_080B4968: - lsls r0, 2 - ldr r1, _080B4980 @ =_080B4984 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B4974: .4byte gBattle_BG1_X -_080B4978: .4byte gBattle_BG1_Y -_080B497C: .4byte 0x0000ffff -_080B4980: .4byte _080B4984 - .align 2, 0 -_080B4984: - .4byte _080B4998 - .4byte _080B49DA - .4byte _080B49F4 - .4byte _080B4A36 - .4byte _080B4A58 -_080B4998: - adds r0, r4, r5 - lsls r0, 3 - adds r4, r0, r2 - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - movs r5, 0 - strh r0, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080B4A96 - strh r5, [r4, 0x1C] - ldrh r1, [r4, 0x1E] - adds r1, 0x1 - strh r1, [r4, 0x1E] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r0, 0x7 - bne _080B4A96 - ldrh r0, [r4, 0x20] - adds r0, 0x1 - strh r0, [r4, 0x20] - strh r5, [r4, 0x1E] - b _080B4A96 -_080B49DA: - adds r0, r4, r5 - lsls r0, 3 - adds r1, r0, r2 - ldrh r0, [r1, 0x1E] - adds r0, 0x1 - strh r0, [r1, 0x1E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x65 - bne _080B4A96 - movs r0, 0x7 - strh r0, [r1, 0x1E] - b _080B4A4C -_080B49F4: - adds r0, r4, r5 - lsls r0, 3 - adds r4, r0, r2 - ldrh r0, [r4, 0x1C] - adds r0, 0x1 - strh r0, [r4, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080B4A96 - movs r0, 0 - strh r0, [r4, 0x1C] - ldrh r1, [r4, 0x1E] - subs r1, 0x1 - strh r1, [r4, 0x1E] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r2, 0x1E - ldrsh r1, [r4, r2] - cmp r1, 0 - bne _080B4A96 - ldrh r0, [r4, 0x20] - adds r0, 0x1 - strh r0, [r4, 0x20] - strh r1, [r4, 0x1E] - b _080B4A96 -_080B4A36: - mov r0, sp - bl sub_80752A0 - mov r0, sp - ldrb r0, [r0, 0x9] - bl sub_8075358 - ldr r0, _080B4A54 @ =gTasks - adds r1, r4, r5 - lsls r1, 3 - adds r1, r0 -_080B4A4C: - ldrh r0, [r1, 0x20] - adds r0, 0x1 - strh r0, [r1, 0x20] - b _080B4A96 - .align 2, 0 -_080B4A54: .4byte gTasks -_080B4A58: - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B4A6C - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - bl SetAnimBgAttribute -_080B4A6C: - ldr r0, _080B4AA0 @ =gBattle_BG1_X - movs r1, 0 - strh r1, [r0] - ldr r0, _080B4AA4 @ =gBattle_BG1_Y - strh r1, [r0] - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x1 - movs r1, 0x4 - movs r2, 0x1 - bl SetAnimBgAttribute - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080B4A96: - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B4AA0: .4byte gBattle_BG1_X -_080B4AA4: .4byte gBattle_BG1_Y - thumb_func_end sub_80B490C - - thumb_func_start sub_80B4AA8 -sub_80B4AA8: @ 80B4AA8 - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080B4B24 - ldr r4, _080B4AEC @ =gBattleAnimArgs - movs r2, 0x6 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _080B4AF4 - ldr r0, _080B4AF0 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B4AF4 - movs r0, 0x98 - lsls r0, 1 - strh r0, [r5, 0x20] - ldrh r0, [r4, 0x2] - negs r0, r0 - strh r0, [r4, 0x2] - movs r0, 0x1 - strh r0, [r5, 0x38] - ldrb r1, [r5, 0x3] - subs r0, 0x40 - ands r0, r1 - movs r1, 0x10 - orrs r0, r1 - strb r0, [r5, 0x3] - b _080B4AF8 - .align 2, 0 -_080B4AEC: .4byte gBattleAnimArgs -_080B4AF0: .4byte gBattleAnimAttacker -_080B4AF4: - ldr r0, _080B4B18 @ =0x0000ffc0 - strh r0, [r5, 0x20] -_080B4AF8: - ldr r4, _080B4B1C @ =gBattleAnimArgs - ldrh r0, [r4] - strh r0, [r5, 0x22] - ldr r1, _080B4B20 @ =gUnknown_83E7470 - adds r0, r5, 0 - bl SetSubspriteTables - ldrh r0, [r4, 0x2] - strh r0, [r5, 0x30] - ldrh r0, [r4, 0x4] - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - b _080B4B80 - .align 2, 0 -_080B4B18: .4byte 0x0000ffc0 -_080B4B1C: .4byte gBattleAnimArgs -_080B4B20: .4byte gUnknown_83E7470 -_080B4B24: - ldrh r1, [r5, 0x30] - ldrh r3, [r5, 0x34] - adds r1, r3 - ldrh r2, [r5, 0x32] - ldrh r0, [r5, 0x36] - adds r2, r0 - lsls r0, r1, 16 - asrs r0, 24 - ldrh r3, [r5, 0x24] - adds r0, r3 - strh r0, [r5, 0x24] - lsls r0, r2, 16 - asrs r0, 24 - ldrh r3, [r5, 0x26] - adds r0, r3 - strh r0, [r5, 0x26] - movs r0, 0xFF - ands r1, r0 - strh r1, [r5, 0x34] - ands r2, r0 - strh r2, [r5, 0x36] - movs r1, 0x38 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080B4B6A - movs r2, 0x20 - ldrsh r0, [r5, r2] - movs r3, 0x24 - ldrsh r1, [r5, r3] - adds r0, r1 - movs r1, 0x88 - lsls r1, 1 - cmp r0, r1 - ble _080B4B80 - b _080B4B7C -_080B4B6A: - movs r1, 0x20 - ldrsh r0, [r5, r1] - movs r2, 0x24 - ldrsh r1, [r5, r2] - adds r0, r1 - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - bge _080B4B80 -_080B4B7C: - ldr r0, _080B4B88 @ =DestroyAnimSprite - str r0, [r5, 0x1C] -_080B4B80: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B4B88: .4byte DestroyAnimSprite - thumb_func_end sub_80B4AA8 - - thumb_func_start sub_80B4B8C -sub_80B4B8C: @ 80B4B8C - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080B4BC4 @ =gBattleAnimArgs - ldrb r1, [r5, 0x8] - bl StartSpriteAnim - adds r0, r4, 0 - movs r1, 0 - bl InitSpritePosToAnimAttacker - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x20] - strh r0, [r4, 0x32] - ldrh r0, [r5, 0x4] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x36] - ldr r0, _080B4BC8 @ =StartAnimLinearTranslation - str r0, [r4, 0x1C] - ldr r1, _080B4BCC @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B4BC4: .4byte gBattleAnimArgs -_080B4BC8: .4byte StartAnimLinearTranslation -_080B4BCC: .4byte DestroyAnimSprite - thumb_func_end sub_80B4B8C - - thumb_func_start sub_80B4BD0 -sub_80B4BD0: @ 80B4BD0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080B4C50 @ =gTasks - adds r6, r1, r0 - ldr r5, _080B4C54 @ =gBattleAnimAttacker - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldrb r0, [r5] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 8 - movs r1, 0xC0 - lsls r1, 13 - adds r0, r1 - lsrs r7, r0, 16 - ldr r4, _080B4C58 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 8 - movs r2, 0xC0 - lsls r2, 13 - adds r0, r2 - lsrs r0, 16 - mov r8, r0 - ldrb r1, [r5] - movs r0, 0x2 - eors r0, r1 - ldrb r4, [r4] - cmp r0, r4 - bne _080B4C40 - mov r8, r7 -_080B4C40: - bl sub_80B4FB8 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x1 - bne _080B4C5C - movs r0, 0x20 - b _080B4C62 - .align 2, 0 -_080B4C50: .4byte gTasks -_080B4C54: .4byte gBattleAnimAttacker -_080B4C58: .4byte gBattleAnimTarget -_080B4C5C: - lsls r1, r5, 3 - movs r0, 0x30 - subs r0, r1 -_080B4C62: - strh r0, [r6, 0x18] - movs r4, 0 - strh r4, [r6, 0x8] - strh r4, [r6, 0x1E] - strh r4, [r6, 0x1A] - movs r0, 0x1 - strh r0, [r6, 0x20] - movs r1, 0x18 - ldrsh r0, [r6, r1] - cmp r0, 0 - bge _080B4C7A - adds r0, 0x7 -_080B4C7A: - asrs r0, 3 - subs r0, 0x1 - strh r0, [r6, 0x1C] - mov r2, r9 - lsls r0, r2, 3 - strh r0, [r6, 0xC] - lsls r0, r7, 3 - strh r0, [r6, 0xE] - mov r1, r10 - subs r0, r1, r2 - lsls r0, 3 - movs r2, 0x18 - ldrsh r1, [r6, r2] - bl __divsi3 - strh r0, [r6, 0x10] - mov r1, r8 - subs r0, r1, r7 - lsls r0, 3 - movs r2, 0x18 - ldrsh r1, [r6, r2] - bl __divsi3 - strh r0, [r6, 0x12] - strh r4, [r6, 0x14] - strh r4, [r6, 0x16] - movs r0, 0x40 - negs r0, r0 - bl BattleAnimAdjustPanning - adds r4, r0, 0 - lsls r4, 24 - asrs r4, 8 - lsrs r4, 16 - movs r0, 0x3F - bl BattleAnimAdjustPanning - lsls r0, 24 - strh r4, [r6, 0x22] - asrs r0, 24 - lsls r4, 16 - asrs r4, 16 - subs r0, r4 - movs r2, 0x18 - ldrsh r1, [r6, r2] - bl __divsi3 - strh r0, [r6, 0x24] - strh r5, [r6, 0xA] - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x26] - ldr r0, _080B4CFC @ =sub_80B4D00 - str r0, [r6] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B4CFC: .4byte sub_80B4D00 - thumb_func_end sub_80B4BD0 - - thumb_func_start sub_80B4D00 -sub_80B4D00: @ 80B4D00 - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B4D24 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bls _080B4D1A - b _080B4E68 -_080B4D1A: - lsls r0, 2 - ldr r1, _080B4D28 @ =_080B4D2C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B4D24: .4byte gTasks -_080B4D28: .4byte _080B4D2C - .align 2, 0 -_080B4D2C: - .4byte _080B4D40 - .4byte _080B4DA4 - .4byte _080B4DAC - .4byte _080B4E08 - .4byte _080B4E5A -_080B4D40: - ldrh r2, [r4, 0x14] - ldrh r0, [r4, 0x10] - subs r2, r0 - strh r2, [r4, 0x14] - ldrh r0, [r4, 0x16] - ldrh r1, [r4, 0x12] - subs r0, r1 - strh r0, [r4, 0x16] - ldr r3, _080B4DA0 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - lsls r2, 16 - asrs r2, 19 - strh r2, [r0, 0x24] - movs r1, 0x26 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - ldrh r0, [r4, 0x16] - lsls r0, 16 - asrs r0, 19 - strh r0, [r1, 0x26] - ldrh r0, [r4, 0x1A] - adds r0, 0x1 - strh r0, [r4, 0x1A] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _080B4D90 - movs r0, 0x14 - strh r0, [r4, 0x1E] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080B4D90: - ldrh r1, [r4, 0x22] - lsls r1, 24 - asrs r1, 24 - movs r0, 0x9B - bl PlaySE12WithPanning - b _080B4E68 - .align 2, 0 -_080B4DA0: .4byte gSprites -_080B4DA4: - ldrh r0, [r4, 0x1E] - subs r0, 0x1 - strh r0, [r4, 0x1E] - b _080B4E4C -_080B4DAC: - ldrh r0, [r4, 0x1A] - subs r0, 0x1 - strh r0, [r4, 0x1A] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - beq _080B4DCC - ldrh r0, [r4, 0x10] - ldrh r2, [r4, 0x14] - adds r0, r2 - strh r0, [r4, 0x14] - ldrh r0, [r4, 0x12] - ldrh r1, [r4, 0x16] - adds r0, r1 - strh r0, [r4, 0x16] - b _080B4DD6 -_080B4DCC: - strh r0, [r4, 0x14] - strh r0, [r4, 0x16] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080B4DD6: - ldr r2, _080B4E04 @ =gSprites - movs r1, 0x26 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r4, 0x14] - lsls r0, 16 - asrs r0, 19 - strh r0, [r1, 0x24] - movs r1, 0x26 - ldrsh r0, [r4, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r4, 0x16] - lsls r0, 16 - asrs r0, 19 - strh r0, [r1, 0x26] - b _080B4E68 - .align 2, 0 -_080B4E04: .4byte gSprites -_080B4E08: - ldrh r0, [r4, 0x10] - ldrh r2, [r4, 0xC] - adds r0, r2 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x12] - ldrh r1, [r4, 0xE] - adds r0, r1 - strh r0, [r4, 0xE] - ldrh r0, [r4, 0x1A] - adds r0, 0x1 - strh r0, [r4, 0x1A] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x1C - ldrsh r1, [r4, r2] - cmp r0, r1 - blt _080B4E46 - movs r0, 0 - strh r0, [r4, 0x1A] - adds r0, r4, 0 - bl sub_80B4E70 - ldrh r1, [r4, 0x24] - ldrh r0, [r4, 0x22] - adds r1, r0 - strh r1, [r4, 0x22] - lsls r1, 24 - asrs r1, 24 - movs r0, 0xA8 - bl PlaySE12WithPanning -_080B4E46: - ldrh r0, [r4, 0x18] - subs r0, 0x1 - strh r0, [r4, 0x18] -_080B4E4C: - lsls r0, 16 - cmp r0, 0 - bne _080B4E68 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B4E68 -_080B4E5A: - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B4E68 - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080B4E68: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B4D00 - - thumb_func_start sub_80B4E70 -sub_80B4E70: @ 80B4E70 - push {r4-r7,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0xA] - subs r0, 0x1 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bhi _080B4F60 - lsls r0, 2 - ldr r1, _080B4E8C @ =_080B4E90 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B4E8C: .4byte _080B4E90 - .align 2, 0 -_080B4E90: - .4byte _080B4EA4 - .4byte _080B4EB0 - .4byte _080B4EB0 - .4byte _080B4EBC - .4byte _080B4EC8 -_080B4EA4: - ldr r3, _080B4EAC @ =gUnknown_83E74D8 - movs r5, 0 - b _080B4ECC - .align 2, 0 -_080B4EAC: .4byte gUnknown_83E74D8 -_080B4EB0: - ldr r3, _080B4EB8 @ =gUnknown_83E74F0 - movs r5, 0x50 - b _080B4ECC - .align 2, 0 -_080B4EB8: .4byte gUnknown_83E74F0 -_080B4EBC: - ldr r3, _080B4EC4 @ =gUnknown_83E74F0 - movs r5, 0x40 - b _080B4ECC - .align 2, 0 -_080B4EC4: .4byte gUnknown_83E74F0 -_080B4EC8: - ldr r3, _080B4F68 @ =gUnknown_83E74F0 - movs r5, 0x30 -_080B4ECC: - ldrh r1, [r4, 0xC] - lsls r1, 16 - asrs r1, 19 - lsls r1, 16 - lsrs r1, 16 - ldrh r2, [r4, 0xE] - lsls r2, 16 - asrs r2, 19 - lsls r2, 16 - movs r6, 0x20 - ldrsh r0, [r4, r6] - lsls r0, 2 - adds r1, r0 - lsls r1, 16 - lsrs r6, r1, 16 - asrs r1, 16 - lsrs r7, r2, 16 - asrs r2, 16 - adds r0, r3, 0 - movs r3, 0x23 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _080B4F58 - ldr r1, _080B4F6C @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - movs r1, 0x12 - strh r1, [r0, 0x2E] - movs r2, 0x20 - ldrsh r1, [r4, r2] - lsls r2, r1, 2 - adds r2, r1 - lsls r2, 2 - adds r2, r6, r2 - movs r6, 0xA - ldrsh r3, [r4, r6] - lsls r1, r3, 1 - adds r1, r3 - adds r2, r1 - strh r2, [r0, 0x32] - strh r7, [r0, 0x36] - movs r1, 0xA - ldrsh r2, [r4, r1] - lsls r2, 1 - movs r3, 0x10 - negs r3, r3 - adds r1, r3, 0 - subs r1, r2 - strh r1, [r0, 0x38] - ldrh r3, [r0, 0x4] - lsls r2, r3, 22 - lsrs r2, 22 - adds r2, r5 - ldr r5, _080B4F70 @ =0x000003ff - adds r1, r5, 0 - ands r2, r1 - ldr r1, _080B4F74 @ =0xfffffc00 - ands r1, r3 - orrs r1, r2 - strh r1, [r0, 0x4] - bl InitAnimArcTranslation - ldrh r0, [r4, 0x1E] - adds r0, 0x1 - strh r0, [r4, 0x1E] -_080B4F58: - movs r6, 0x20 - ldrsh r0, [r4, r6] - negs r0, r0 - strh r0, [r4, 0x20] -_080B4F60: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B4F68: .4byte gUnknown_83E74F0 -_080B4F6C: .4byte gSprites -_080B4F70: .4byte 0x000003ff -_080B4F74: .4byte 0xfffffc00 - thumb_func_end sub_80B4E70 - - thumb_func_start sub_80B4F78 -sub_80B4F78: @ 80B4F78 - push {r4,lr} - adds r4, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080B4FAA - ldr r0, _080B4FB0 @ =sub_80B4D00 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _080B4FA4 - ldr r0, _080B4FB4 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x1E] - subs r0, 0x1 - strh r0, [r1, 0x1E] -_080B4FA4: - adds r0, r4, 0 - bl DestroySprite -_080B4FAA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B4FB0: .4byte sub_80B4D00 -_080B4FB4: .4byte gTasks - thumb_func_end sub_80B4F78 - - thumb_func_start sub_80B4FB8 -sub_80B4FB8: @ 80B4FB8 - push {lr} - ldr r0, _080B4FE0 @ =gAnimDisableStructPtr - ldr r0, [r0] - ldrb r1, [r0, 0x11] - lsrs r0, r1, 4 - lsls r1, 28 - lsrs r1, 28 - subs r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - movs r2, 0xFF - lsls r2, 24 - adds r0, r2 - lsrs r0, 24 - cmp r0, 0x4 - bls _080B4FDA - movs r1, 0x1 -_080B4FDA: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_080B4FE0: .4byte gAnimDisableStructPtr - thumb_func_end sub_80B4FB8 - - thumb_func_start sub_80B4FE4 -sub_80B4FE4: @ 80B4FE4 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080B501C @ =gBattleAnimArgs - ldrb r1, [r5, 0x8] - bl StartSpriteAnim - ldrh r0, [r5] - strh r0, [r4, 0x24] - ldrh r0, [r5, 0x2] - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x34] - ldrh r1, [r5, 0x4] - subs r0, r1 - strh r0, [r4, 0x34] - movs r0, 0x3 - strh r0, [r4, 0x2E] - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x30] - ldr r0, _080B5020 @ =sub_80B5024 - str r0, [r4, 0x1C] - adds r4, 0x3E - ldrb r0, [r4] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B501C: .4byte gBattleAnimArgs -_080B5020: .4byte sub_80B5024 - thumb_func_end sub_80B4FE4 - - thumb_func_start sub_80B5024 -sub_80B5024: @ 80B5024 - push {lr} - adds r2, r0, 0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x5 - negs r1, r1 - ands r1, r0 - strb r1, [r3] - ldrh r1, [r2, 0x34] - movs r3, 0x34 - ldrsh r0, [r2, r3] - cmp r0, 0 - beq _080B505C - ldrh r3, [r2, 0x32] - adds r0, r1, r3 - strh r0, [r2, 0x26] - ldrh r0, [r2, 0x2E] - adds r1, r0 - strh r1, [r2, 0x34] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r1, 16 - cmp r1, 0 - ble _080B506E - movs r0, 0 - strh r0, [r2, 0x34] - b _080B506E -_080B505C: - ldrh r0, [r2, 0x30] - subs r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _080B506E - adds r0, r2, 0 - bl DestroyAnimSprite -_080B506E: - pop {r0} - bx r0 - thumb_func_end sub_80B5024 - - thumb_func_start sub_80B5074 -sub_80B5074: @ 80B5074 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080B509C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B5090 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim -_080B5090: - adds r0, r4, 0 - bl TranslateAnimSpriteToTargetMonLocation - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B509C: .4byte gBattleAnimAttacker - thumb_func_end sub_80B5074 - - thumb_func_start sub_80B50A0 -sub_80B50A0: @ 80B50A0 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080B50EC @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - ldrb r0, [r5] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B50F0 @ =gBattleAnimArgs - ldrh r3, [r2] - ldrh r5, [r4, 0x20] - adds r1, r3, r5 - strh r1, [r4, 0x20] - ldrh r1, [r2, 0x2] - adds r0, r1 - strh r0, [r4, 0x22] - strh r3, [r4, 0x30] - strh r1, [r4, 0x32] - ldrh r0, [r2, 0x4] - strh r0, [r4, 0x38] - ldrb r1, [r2, 0x6] - adds r0, r4, 0 - bl StartSpriteAnim - ldr r0, _080B50F4 @ =sub_80B50F8 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B50EC: .4byte gBattleAnimTarget -_080B50F0: .4byte gBattleAnimArgs -_080B50F4: .4byte sub_80B50F8 - thumb_func_end sub_80B50A0 - - thumb_func_start sub_80B50F8 -sub_80B50F8: @ 80B50F8 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0x8 - strh r0, [r4, 0x2E] - ldrh r0, [r4, 0x30] - ldrh r1, [r4, 0x34] - adds r0, r1 - strh r0, [r4, 0x34] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x36] - adds r0, r2 - strh r0, [r4, 0x36] - movs r1, 0x34 - ldrsh r0, [r4, r1] - movs r1, 0x28 - bl __divsi3 - ldrh r1, [r4, 0x24] - adds r1, r0 - strh r1, [r4, 0x24] - movs r2, 0x2E - ldrsh r0, [r4, r2] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x26] - subs r1, r0 - strh r1, [r4, 0x26] - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x8C - ble _080B5142 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B5142: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B50F8 - - thumb_func_start sub_80B5148 -sub_80B5148: @ 80B5148 - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r2, _080B5180 @ =gAnimMoveDmg - ldr r0, [r2] - cmp r0, 0x20 - bgt _080B515C - ldr r1, _080B5184 @ =gBattleAnimArgs - movs r0, 0 - strh r0, [r1, 0xE] -_080B515C: - ldr r2, [r2] - adds r0, r2, 0 - subs r0, 0x21 - cmp r0, 0x20 - bhi _080B516C - ldr r1, _080B5184 @ =gBattleAnimArgs - movs r0, 0x1 - strh r0, [r1, 0xE] -_080B516C: - cmp r2, 0x41 - ble _080B5176 - ldr r1, _080B5184 @ =gBattleAnimArgs - movs r0, 0x2 - strh r0, [r1, 0xE] -_080B5176: - adds r0, r3, 0 - bl DestroyAnimVisualTask - pop {r0} - bx r0 - .align 2, 0 -_080B5180: .4byte gAnimMoveDmg -_080B5184: .4byte gBattleAnimArgs - thumb_func_end sub_80B5148 - - thumb_func_start sub_80B5188 -sub_80B5188: @ 80B5188 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _080B51E4 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080B51AA - movs r0, 0 - bl sub_8075458 - movs r0, 0xC8 - strh r0, [r5, 0xA] -_080B51AA: - ldr r4, _080B51E8 @ =gBattle_BG3_Y - movs r1, 0xA - ldrsh r0, [r5, r1] - movs r1, 0xA - bl __divsi3 - ldrh r1, [r4] - adds r1, r0 - strh r1, [r4] - ldrh r0, [r5, 0xA] - subs r0, 0x3 - strh r0, [r5, 0xA] - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0x78 - bne _080B51D6 - movs r0, 0x1 - bl sub_8075458 - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080B51D6: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B51E4: .4byte gTasks -_080B51E8: .4byte gBattle_BG3_Y - thumb_func_end sub_80B5188 - - thumb_func_start sub_80B51EC -sub_80B51EC: @ 80B51EC - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - ldr r1, _080B5258 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B5218 - movs r0, 0 - bl sub_8075458 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldr r0, _080B525C @ =gBattle_BG3_Y - ldrh r0, [r0] - strh r0, [r4, 0xC] -_080B5218: - ldrh r0, [r4, 0xA] - adds r0, 0x50 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0xA] - ldr r6, _080B525C @ =gBattle_BG3_Y - movs r2, 0xA - ldrsh r1, [r4, r2] - movs r0, 0x4 - bl Cos - ldrh r4, [r4, 0xC] - adds r0, r4 - strh r0, [r6] - ldr r0, _080B5260 @ =gBattleAnimArgs - movs r2, 0xE - ldrsh r1, [r0, r2] - ldr r0, _080B5264 @ =0x00000fff - cmp r1, r0 - bne _080B5250 - movs r0, 0 - strh r0, [r6] - movs r0, 0x1 - bl sub_8075458 - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080B5250: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B5258: .4byte gTasks -_080B525C: .4byte gBattle_BG3_Y -_080B5260: .4byte gBattleAnimArgs -_080B5264: .4byte 0x00000fff - thumb_func_end sub_80B51EC - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_835B488.s b/data/data_835B488.s index fd6f9c209..cf435e174 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -843,13 +843,19 @@ gUnknown_83E4410:: @ 83E4410 .incbin "baserom.gba", 0x3E4410, 0x1488 gUnknown_83E5898:: @ 83E5898 - .incbin "baserom.gba", 0x3E5898, 0x248 + .incbin "baserom.gba", 0x3E5898, 0xC0 + +gUnknown_83E5958:: @ 83E5958 + .incbin "baserom.gba", 0x3E5958, 0x188 gUnknown_83E5AE0:: @ 83E5AE0 .incbin "baserom.gba", 0x3E5AE0, 0xA8 gUnknown_83E5B88:: @ 83E5B88 - .incbin "baserom.gba", 0x3E5B88, 0x2A4 + .incbin "baserom.gba", 0x3E5B88, 0x1C0 + +gUnknown_83E5D48:: @ 83E5D48 + .incbin "baserom.gba", 0x3E5D48, 0xE4 gUnknown_83E5E2C:: @ 83E5E2C .incbin "baserom.gba", 0x3E5E2C, 0x18 @@ -915,16 +921,7 @@ gUnknown_83E7044:: @ 83E7044 .incbin "baserom.gba", 0x3E7044, 0xD0 gUnknown_83E7114:: @ 83E7114 - .incbin "baserom.gba", 0x3E7114, 0x35C - -gUnknown_83E7470:: @ 83E7470 - .incbin "baserom.gba", 0x3E7470, 0x68 - -gUnknown_83E74D8:: @ 83E74D8 - .incbin "baserom.gba", 0x3E74D8, 0x18 - -gUnknown_83E74F0:: @ 83E74F0 - .incbin "baserom.gba", 0x3E74F0, 0xB8 + .incbin "baserom.gba", 0x3E7114, 0x27C .section .rodata.83E7CFC diff --git a/data/graphics.s b/data/graphics.s index 79b622cfa..379411a67 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -13554,7 +13554,7 @@ gFile_graphics_battle_anims_backgrounds_sandstorm_brew_sheet:: @ 8E794D0 .incbin "graphics/battle_anims/backgrounds/sandstorm_brew.4bpp.lz" .align 2 -gFile_graphics_battle_anims_sprites_261_palette:: @ 8E799FC +gBattleAnimSpritePal_FlyingDirt:: @ 8E799FC .incbin "graphics/battle_anims/sprites/261.gbapal.lz" .align 2 diff --git a/include/battle_anim.h b/include/battle_anim.h index 09eeefb44..b5bdd05ce 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -74,6 +74,7 @@ extern struct OamData gOamData_83ACB18; extern struct OamData gOamData_83ACB38; extern struct OamData gOamData_83ACA18; extern struct OamData gOamData_83ACB20; +extern struct OamData gOamData_83ACB50; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); @@ -102,6 +103,9 @@ void sub_80BCEF4(s32 bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *ar // battle_anim_special.s void sub_80F1720(u8 battler, struct Pokemon *mon); +// battle_anim_effects_1.s +void AnimMoveTwisterParticle(struct Sprite *sprite); + enum { BATTLER_COORD_X, @@ -302,6 +306,12 @@ void sub_80B63B4(u8 taskId); void sub_80B68C8(u8 taskId); void sub_80B6BBC(u8 taskId); +// rock.c +void AnimTask_LoadSandstormBackground(u8 taskId); +void sub_80B4BD0(u8 taskId); +void AnimTask_GetSeismicTossDamageLevel(u8 taskId); +void sub_80B5188(u8 taskId); +void sub_80B51EC(u8 taskId); // flying.s void sub_80B1D3C(struct Sprite *sprite); diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 2eefb2482..6d54bc5fb 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -596,6 +596,7 @@ // BLDALPHA #define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1)) +#define BLDALPHA_BLEND2(target1, target2) ((target1) | ((target2) << 8)) // SOUNDCNT_H #define SOUND_CGB_MIX_QUARTER 0x0000 diff --git a/include/graphics.h b/include/graphics.h index 492b21893..1c0612fd1 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -986,6 +986,11 @@ extern const u32 gFile_graphics_battle_anims_backgrounds_scary_face_sheet[]; extern const u32 gFile_graphics_battle_anims_backgrounds_scary_face_palette[]; extern const u32 gFile_graphics_battle_anims_backgrounds_scary_face_player_tilemap[]; +// rock +extern const u32 gFile_graphics_battle_anims_backgrounds_sandstorm_brew_tilemap[]; +extern const u32 gFile_graphics_battle_anims_backgrounds_sandstorm_brew_sheet[]; +extern const u32 gBattleAnimSpritePal_FlyingDirt[]; + // title_screen extern const u16 gGraphics_TitleScreen_PokemonFireRedLogoPals[]; extern const u8 gGraphics_TitleScreen_PokemonFireRedLogoTiles[]; diff --git a/ld_script.txt b/ld_script.txt index d7681bda0..9b9147b00 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -164,7 +164,7 @@ SECTIONS { asm/flying.o(.text); asm/psychic.o(.text); asm/bug.o(.text); - asm/rock.o(.text); + src/rock.o(.text); src/ghost.o(.text); src/dragon.o(.text); src/dark.o(.text); @@ -423,6 +423,7 @@ SECTIONS { src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); data/data_835B488.o(.rodata.83DF09C); + src/rock.o(.rodata); src/ghost.o(.rodata); src/dragon.o(.rodata); src/dark.o(.rodata); diff --git a/src/ghost.c b/src/ghost.c index 1fc044a77..fbf452af6 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -942,9 +942,9 @@ void sub_80B63B4(u8 taskId) startX = 40; else startX = 200; - gBattle_WIN0H = (startX << 8) | startX; + gBattle_WIN0H = WIN_RANGE(startX, startX); startY = 40; - gBattle_WIN0V = (startY << 8) | startY; + gBattle_WIN0V = WIN_RANGE(startY, startY); leftDistance = startX; rightDistance = 240 - startX; topDistance = startY; @@ -988,8 +988,8 @@ static void sub_80B6468(u8 taskId) BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0)); gTasks[taskId].func = sub_80B65F0; } - gBattle_WIN0H = (left << 8) | right; - gBattle_WIN0V = (top << 8) | bottom; + gBattle_WIN0H = WIN_RANGE(left, right); + gBattle_WIN0V = WIN_RANGE(top, bottom); } static void sub_80B65F0(u8 taskId) @@ -1079,7 +1079,7 @@ static void sub_80B6728(struct Sprite *sprite) { sprite->data[1] = 0; ++sprite->data[2]; - SetGpuReg(REG_OFFSET_BLDALPHA, (16 - sprite->data[2]) | (sprite->data[2] << 8)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND2(16 - sprite->data[2], sprite->data[2])); if (sprite->data[2] == 16) { sprite->invisible = TRUE; diff --git a/src/rock.c b/src/rock.c new file mode 100644 index 000000000..cc8da4034 --- /dev/null +++ b/src/rock.c @@ -0,0 +1,833 @@ +#include "global.h" +#include "battle_anim.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "palette.h" +#include "sound.h" +#include "task.h" +#include "trig.h" +#include "constants/songs.h" + +extern const union AnimCmd *const gUnknown_83E5958[]; +extern const union AnimCmd *const gUnknown_83E5D48[]; + +static void sub_80B4634(struct Sprite *sprite); +static void sub_80B46F8(struct Sprite *sprite); +static void AnimDirtParticleAcrossScreen(struct Sprite *sprite); +static void AnimRaiseSprite(struct Sprite *sprite); +static void sub_80B4D00(u8 taskId); +static void sub_80B4F78(struct Sprite *sprite); +static void sub_80B4FE4(struct Sprite *sprite); +static void sub_80B5074(struct Sprite *sprite); +static void sub_80B50A0(struct Sprite *sprite); +static void sub_80B477C(struct Sprite *sprite); +static void sub_80B46B4(struct Sprite *sprite); +static void sub_80B47C4(struct Sprite *sprite); +static void sub_80B490C(u8 taskId); +static void sub_80B4E70(struct Task *task); +static u8 sub_80B4FB8(void); +static void sub_80B5024(struct Sprite *sprite); +static void sub_80B50F8(struct Sprite *sprite); + +static const union AnimCmd gUnknown_83E7390[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E7398[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E73A0[] = +{ + ANIMCMD_FRAME(64, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E73A8[] = +{ + gUnknown_83E7390, + gUnknown_83E7398, + gUnknown_83E73A0, +}; + +const struct SpriteTemplate gUnknown_83E73B4 = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E73A8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B4634, +}; + +const struct SpriteTemplate gUnknown_83E73CC = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E73A8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B46F8, +}; + +const struct SpriteTemplate gUnknown_83E73E4 = +{ + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_83AC9C8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B477C, +}; + +static const union AffineAnimCmd gUnknown_83E73FC[] = +{ + AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0), + AFFINEANIMCMD_FRAME(0x2, 0xFFFD, 0, 5), + AFFINEANIMCMD_FRAME(0xFFFE, 0x3, 0, 5), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd *const gUnknown_83E741C[] = +{ + gUnknown_83E73FC, +}; + +const struct SpriteTemplate gUnknown_83E7420 = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_83ACB50, + .anims = gUnknown_83E5958, + .images = NULL, + .affineAnims = gUnknown_83E741C, + .callback = sub_80B477C, +}; + +const struct SpriteTemplate gUnknown_83E7438 = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E5D48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B477C, +}; + +const struct SpriteTemplate gUnknown_83E7450 = +{ + .tileTag = ANIM_TAG_FLYING_DIRT, + .paletteTag = ANIM_TAG_FLYING_DIRT, + .oam = &gOamData_83AC9F8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimDirtParticleAcrossScreen, +}; + +static const struct Subsprite gUnknown_83E7468[] = +{ + { + .x = -16, + .y = 0, + .shape = ST_OAM_H_RECTANGLE, + .size = 2, + .tileOffset = 0, + .priority = 1, + }, + { + .x = 16, + .y = 0, + .shape = ST_OAM_H_RECTANGLE, + .size = 2, + .tileOffset = 8, + .priority = 1, + }, +}; + +static const struct SubspriteTable gUnknown_83E7470[] = +{ + { ARRAY_COUNT(gUnknown_83E7468), gUnknown_83E7468 }, +}; + +static const union AnimCmd gUnknown_83E7478[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E7480[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E7488[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E7490[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E7498[] = +{ + ANIMCMD_FRAME(64, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E74A0[] = +{ + ANIMCMD_FRAME(80, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E74A8[] = +{ + gUnknown_83E7478, + gUnknown_83E7480, +}; + +static const union AnimCmd *const gUnknown_83E74B0[] = +{ + gUnknown_83E7488, + gUnknown_83E7490, +}; + +static const union AnimCmd *const gUnknown_83E74B8[] = +{ + gUnknown_83E7498, + gUnknown_83E74A0, +}; + +const struct SpriteTemplate gUnknown_83E74C0 = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E74A8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRaiseSprite, +}; + +const struct SpriteTemplate gUnknown_83E74D8 = +{ + .tileTag = ANIM_TAG_MUD_SAND, + .paletteTag = ANIM_TAG_MUD_SAND, + .oam = &gOamData_83AC9C8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B4F78, +}; + +const struct SpriteTemplate gUnknown_83E74F0 = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_83AC9D8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B4F78, +}; + +const struct SpriteTemplate gUnknown_83E7508 = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E74A8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B4FE4, +}; + +static const union AffineAnimCmd gUnknown_83E7520[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -5, 5), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd gUnknown_83E7530[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 5, 5), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const gUnknown_83E7540[] = +{ + gUnknown_83E7520, + gUnknown_83E7530, +}; + +const struct SpriteTemplate gUnknown_83E7548 = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_83ACA38, + .anims = gUnknown_83E74A8, + .images = NULL, + .affineAnims = gUnknown_83E7540, + .callback = sub_80B5074, +}; + +const struct SpriteTemplate gUnknown_83E7560 = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_83ACA38, + .anims = gUnknown_83E74A8, + .images = NULL, + .affineAnims = gUnknown_83E7540, + .callback = sub_80B50A0, +}; + +const struct SpriteTemplate gUnknown_83E7578 = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E74B8, + .images = NULL, + .affineAnims = gUnknown_83E7540, + .callback = AnimMoveTwisterParticle, +}; + +const struct SpriteTemplate gUnknown_83E7590 = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gOamData_83ACA38, + .anims = gUnknown_83E74B0, + .images = NULL, + .affineAnims = gUnknown_83E7540, + .callback = sub_8077350, +}; + +static void sub_80B4634(struct Sprite *sprite) +{ + if (gBattleAnimArgs[3] != 0) + SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y); + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += 14; + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + AnimateSprite(sprite); + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 4; + sprite->data[3] = 16; + sprite->data[4] = -70; + sprite->data[5] = gBattleAnimArgs[2]; + StoreSpriteCallbackInData6(sprite, sub_80B46B4); + sprite->callback = TranslateSpriteInEllipseOverDuration; + sprite->callback(sprite); +} + +static void sub_80B46B4(struct Sprite *sprite) +{ + sprite->pos1.x += sprite->data[5]; + sprite->data[0] = 192; + sprite->data[1] = sprite->data[5]; + sprite->data[2] = 4; + sprite->data[3] = 32; + sprite->data[4] = -24; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteInEllipseOverDuration; + sprite->callback(sprite); +} + +static void sub_80B46F8(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, gBattleAnimArgs[5]); + AnimateSprite(sprite); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[3]; + InitSpriteDataForLinearTranslation(sprite); + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->callback = TranslateSpriteLinearFixedPoint; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); +} + +static void sub_80B477C(struct Sprite *sprite) +{ + if (gBattleAnimArgs[6] == 0) + InitSpritePosToAnimAttacker(sprite, 0); + else + InitSpritePosToAnimTarget(sprite, FALSE); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->callback = sub_80B47C4; +} + +static void sub_80B47C4(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[1]; + sprite->pos2.y = -(sprite->data[4] >> 8); + sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]); + sprite->data[5] = (sprite->data[5] + sprite->data[2]) & 0xFF; + if (--sprite->data[0] == -1) + { + DestroyAnimSprite(sprite); + } +} + +void AnimTask_LoadSandstormBackground(u8 taskId) +{ + s32 var0; + struct BattleAnimBgData animBg; + + var0 = 0; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + sub_80752A0(&animBg); + AnimLoadCompressedBgTilemap(animBg.bgId, gFile_graphics_battle_anims_backgrounds_sandstorm_brew_tilemap); + AnimLoadCompressedBgGfx(animBg.bgId, gFile_graphics_battle_anims_backgrounds_sandstorm_brew_sheet, animBg.tilesOffset); + LoadCompressedPalette(gBattleAnimSpritePal_FlyingDirt, animBg.paletteId * 16, 32); + if (IsContest()) + sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 0); + if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + var0 = 1; + gTasks[taskId].data[0] = var0; + gTasks[taskId].func = sub_80B490C; +} + +static void sub_80B490C(u8 taskId) +{ + struct BattleAnimBgData animBg; + + if (gTasks[taskId].data[0] == 0) + gBattle_BG1_X += -6; + else + gBattle_BG1_X += 6; + gBattle_BG1_Y += -1; + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + ++gTasks[taskId].data[11]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 7) + { + ++gTasks[taskId].data[12]; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 101) + { + gTasks[taskId].data[11] = 7; + ++gTasks[taskId].data[12]; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + --gTasks[taskId].data[11]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11])); + if (gTasks[taskId].data[11] == 0) + { + ++gTasks[taskId].data[12]; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_80752A0(&animBg); + sub_8075358(animBg.bgId); + ++gTasks[taskId].data[12]; + break; + case 4: + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + DestroyAnimVisualTask(taskId); + break; + } +} + +// Animates the sprites that fly diagonally across the screen +// in Sandstorm and Heat Wave. +// arg 0: initial y pixel offset +// arg 1: projectile speed +// arg 2: y pixel drop +// arg 3: ??? unknown (possibly a color bit) +static void AnimDirtParticleAcrossScreen(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + if (gBattleAnimArgs[3] != 0 && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x = 304; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + sprite->data[5] = 1; + sprite->oam.matrixNum = ST_OAM_HFLIP; + } + else + { + sprite->pos1.x = -64; + } + sprite->pos1.y = gBattleAnimArgs[0]; + SetSubspriteTables(sprite, gUnknown_83E7470); + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + ++sprite->data[0]; + } + else + { + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x += (sprite->data[3] >> 8); + sprite->pos2.y += (sprite->data[4] >> 8); + sprite->data[3] &= 0xFF; + sprite->data[4] &= 0xFF; + if (sprite->data[5] == 0) + { + if (sprite->pos1.x + sprite->pos2.x > 272) + { + sprite->callback = DestroyAnimSprite; + } + } + else if (sprite->pos1.x + sprite->pos2.x < -32) + { + sprite->callback = DestroyAnimSprite; + } + } +} + +// Animates the rising rocks in Ancient Power. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: terminal y offset +// arg 3: duration +// arg 4: sprite size [1,5] +static void AnimRaiseSprite(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + InitSpritePosToAnimAttacker(sprite, 0); + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[2]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void sub_80B4BD0(u8 taskId) +{ + u16 var0, var1, var2, var3; + u8 var4; + s32 var5; + s16 pan1, pan2; + struct Task *task; + + task = &gTasks[taskId]; + var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 24; + var2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + var3 = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 24; + if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget) + var3 = var1; + var4 = sub_80B4FB8(); + if (var4 == 1) + task->data[8] = 32; + else + task->data[8] = 48 - (var4 * 8); + task->data[0] = 0; + task->data[11] = 0; + task->data[9] = 0; + task->data[12] = 1; + var5 = task->data[8]; + if (var5 < 0) + var5 += 7; + task->data[10] = (var5 >> 3) - 1; + task->data[2] = var0 * 8; + task->data[3] = var1 * 8; + task->data[4] = ((var2 - var0) * 8) / task->data[8]; + task->data[5] = ((var3 - var1) * 8) / task->data[8]; + task->data[6] = 0; + task->data[7] = 0; + pan1 = BattleAnimAdjustPanning(PAN_SIDE_PLAYER); + pan2 = BattleAnimAdjustPanning(PAN_SIDE_OPPONENT); + task->data[13] = pan1; + task->data[14] = (pan2 - pan1) / task->data[8]; + task->data[1] = var4; + task->data[15] = GetAnimBattlerSpriteId(0); + task->func = sub_80B4D00; +} + +static void sub_80B4D00(u8 taskId) +{ + struct Task *task; + + task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + task->data[6] -= task->data[4]; + task->data[7] -= task->data[5]; + gSprites[task->data[15]].pos2.x = task->data[6] >> 3; + gSprites[task->data[15]].pos2.y = task->data[7] >> 3; + if (++task->data[9] == 10) + { + task->data[11] = 20; + ++task->data[0]; + } + PlaySE12WithPanning(SE_W029, task->data[13]); + break; + case 1: + if (--task->data[11] == 0) + ++task->data[0]; + break; + case 2: + if (--task->data[9] != 0) + { + task->data[6] += task->data[4]; + task->data[7] += task->data[5]; + } + else + { + task->data[6] = 0; + task->data[7] = 0; + ++task->data[0]; + } + gSprites[task->data[15]].pos2.x = task->data[6] >> 3; + gSprites[task->data[15]].pos2.y = task->data[7] >> 3; + break; + case 3: + task->data[2] += task->data[4]; + task->data[3] += task->data[5]; + if (++task->data[9] >= task->data[10]) + { + task->data[9] = 0; + sub_80B4E70(task); + task->data[13] += task->data[14]; + PlaySE12WithPanning(SE_W091, task->data[13]); + } + if (--task->data[8] == 0) + { + ++task->data[0]; + } + break; + case 4: + if (task->data[11] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80B4E70(struct Task *task) +{ + const struct SpriteTemplate *spriteTemplate; + s32 var0; + u16 x, y; + u8 spriteId; + + switch (task->data[1]) + { + case 1: + spriteTemplate = &gUnknown_83E74D8; + var0 = 0; + break; + case 2: + case 3: + spriteTemplate = &gUnknown_83E74F0; + var0 = 80; + break; + case 4: + spriteTemplate = &gUnknown_83E74F0; + var0 = 64; + break; + case 5: + spriteTemplate = &gUnknown_83E74F0; + var0 = 48; + break; + default: + return; + } + x = task->data[2] >> 3; + y = task->data[3] >> 3; + x += (task->data[12] * 4); + spriteId = CreateSprite(spriteTemplate, x, y, 35); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = 18; + gSprites[spriteId].data[2] = ((task->data[12] * 20) + x) + (task->data[1] * 3); + gSprites[spriteId].data[4] = y; + gSprites[spriteId].data[5] = -16 - (task->data[1] * 2); + gSprites[spriteId].oam.tileNum += var0; + InitAnimArcTranslation(&gSprites[spriteId]); + ++task->data[11]; + } + task->data[12] *= -1; +} + +static void sub_80B4F78(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + { + u8 taskId = FindTaskIdByFunc(sub_80B4D00); + + if (taskId != TASK_NONE) + --gTasks[taskId].data[11]; + DestroySprite(sprite); + } +} + +static u8 sub_80B4FB8(void) +{ + u8 retVal = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer; + u8 var0 = retVal - 1; + + if (var0 > 4) + retVal = 1; + return retVal; +} + +static void sub_80B4FE4(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + sprite->pos2.x = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[3] -= gBattleAnimArgs[2]; + sprite->data[0] = 3; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->callback = sub_80B5024; + sprite->invisible = TRUE; +} + +static void sub_80B5024(struct Sprite *sprite) +{ + sprite->invisible = FALSE; + if (sprite->data[3] != 0) + { + sprite->pos2.y = sprite->data[2] + sprite->data[3]; + sprite->data[3] += sprite->data[0]; + ++sprite->data[0]; + if (sprite->data[3] > 0) + { + sprite->data[3] = 0; + } + } + else if (--sprite->data[1] == 0) + { + DestroyAnimSprite(sprite); + } +} + +static void sub_80B5074(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + StartSpriteAffineAnim(sprite, 1); + TranslateAnimSpriteToTargetMonLocation(sprite); +} + +static void sub_80B50A0(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[5] = gBattleAnimArgs[2]; + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + sprite->callback = sub_80B50F8; +} + +static void sub_80B50F8(struct Sprite *sprite) +{ + sprite->data[0] += 8; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x += sprite->data[3] / 40; + sprite->pos2.y -= Sin(sprite->data[0], sprite->data[5]); + if (sprite->data[0] > 140) + DestroyAnimSprite(sprite); +} + +void AnimTask_GetSeismicTossDamageLevel(u8 taskId) +{ + if (gAnimMoveDmg < 33) + gBattleAnimArgs[7] = 0; + if ((u32)gAnimMoveDmg - 33 < 33) + gBattleAnimArgs[7] = 1; + if (gAnimMoveDmg > 65) + gBattleAnimArgs[7] = 2; + DestroyAnimVisualTask(taskId); +} + +void sub_80B5188(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + sub_8075458(0); + gTasks[taskId].data[1] = 200; + } + gBattle_BG3_Y += gTasks[taskId].data[1] / 10; + gTasks[taskId].data[1] -= 3; + if (gTasks[taskId].data[0] == 120) + { + sub_8075458(1); + DestroyAnimVisualTask(taskId); + } + ++gTasks[taskId].data[0]; +} + +void sub_80B51EC(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + sub_8075458(0); + ++gTasks[taskId].data[0]; + gTasks[taskId].data[2] = gBattle_BG3_Y; + } + gTasks[taskId].data[1] += 80; + gTasks[taskId].data[1] &= 0xFF; + gBattle_BG3_Y = gTasks[taskId].data[2] + Cos(4, gTasks[taskId].data[1]); + if (gBattleAnimArgs[7] == 0xFFF) + { + gBattle_BG3_Y = 0; + sub_8075458(1); + DestroyAnimVisualTask(taskId); + } +} From 1aa9698ff037aea4e52a5306d6abb4d1c528ef1c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 11 Oct 2019 11:35:33 +0800 Subject: [PATCH 12/25] bug --- asm/bug.s | 829 ------------------------------------------ data/data_835B488.s | 2 +- include/battle_anim.h | 3 + ld_script.txt | 3 +- src/bug.c | 463 +++++++++++++++++++++++ 5 files changed, 469 insertions(+), 831 deletions(-) delete mode 100644 asm/bug.s create mode 100644 src/bug.c diff --git a/asm/bug.s b/asm/bug.s deleted file mode 100644 index 29f38d3a2..000000000 --- a/asm/bug.s +++ /dev/null @@ -1,829 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80B3FAC -sub_80B3FAC: @ 80B3FAC - push {r4-r6,lr} - adds r6, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B3FD8 - adds r0, r6, 0 - movs r1, 0x2 - bl StartSpriteAffineAnim - ldr r0, _080B3FD4 @ =gBattleAnimArgs - ldrh r1, [r0, 0x4] - negs r1, r1 - strh r1, [r0, 0x4] - ldrh r1, [r0] - negs r1, r1 - strh r1, [r0] - b _080B4008 - .align 2, 0 -_080B3FD4: .4byte gBattleAnimArgs -_080B3FD8: - ldr r0, _080B406C @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B4008 - adds r0, r6, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r1, _080B4070 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - negs r0, r0 - strh r0, [r1, 0x2] - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] - ldrh r0, [r1, 0x6] - negs r0, r0 - strh r0, [r1, 0x6] - ldrh r0, [r1] - negs r0, r0 - strh r0, [r1] -_080B4008: - ldr r5, _080B406C @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord2 - lsls r0, 24 - ldr r4, _080B4070 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r4] - adds r0, r1 - strh r0, [r6, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord2 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x2] - adds r0, r1 - strh r0, [r6, 0x22] - ldrh r0, [r4, 0x8] - strh r0, [r6, 0x2E] - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x4] - adds r0, r1 - strh r0, [r6, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r4, [r4, 0x6] - adds r0, r4 - strh r0, [r6, 0x36] - ldr r0, _080B4074 @ =StartAnimLinearTranslation - str r0, [r6, 0x1C] - ldr r1, _080B4078 @ =DestroyAnimSprite - adds r0, r6, 0 - bl StoreSpriteCallbackInData6 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B406C: .4byte gBattleAnimTarget -_080B4070: .4byte gBattleAnimArgs -_080B4074: .4byte StartAnimLinearTranslation -_080B4078: .4byte DestroyAnimSprite - thumb_func_end sub_80B3FAC - - thumb_func_start sub_80B407C -sub_80B407C: @ 80B407C - push {r4-r6,lr} - adds r6, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B40A0 - ldr r1, _080B409C @ =gBattleAnimArgs - ldrh r0, [r1] - negs r0, r0 - strh r0, [r1] - adds r0, r6, 0 - movs r1, 0x2 - bl StartSpriteAffineAnim - b _080B40BC - .align 2, 0 -_080B409C: .4byte gBattleAnimArgs -_080B40A0: - ldr r0, _080B4118 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B40BC - ldr r0, _080B411C @ =gBattleAnimArgs - ldrh r1, [r0, 0x2] - negs r1, r1 - strh r1, [r0, 0x2] - ldrh r1, [r0] - negs r1, r1 - strh r1, [r0] -_080B40BC: - ldr r5, _080B4118 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord2 - lsls r0, 24 - ldr r4, _080B411C @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r4] - adds r0, r1 - strh r0, [r6, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord2 - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x2] - adds r0, r1 - strh r0, [r6, 0x22] - ldrh r0, [r4, 0x4] - strh r0, [r6, 0x2E] - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x36] - ldr r0, _080B4120 @ =StartAnimLinearTranslation - str r0, [r6, 0x1C] - ldr r1, _080B4124 @ =DestroyAnimSprite - adds r0, r6, 0 - bl StoreSpriteCallbackInData6 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B4118: .4byte gBattleAnimTarget -_080B411C: .4byte gBattleAnimArgs -_080B4120: .4byte StartAnimLinearTranslation -_080B4124: .4byte DestroyAnimSprite - thumb_func_end sub_80B407C - - thumb_func_start sub_80B4128 -sub_80B4128: @ 80B4128 - push {r4,r5,lr} - adds r5, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B4144 - ldr r0, _080B4184 @ =gBattleAnimArgs - movs r2, 0x4 - ldrsh r1, [r0, r2] - lsrs r2, r1, 31 - adds r1, r2 - asrs r1, 1 - strh r1, [r0, 0x4] -_080B4144: - adds r0, r5, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r1, _080B4184 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080B418C - ldr r4, _080B4188 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - b _080B419E - .align 2, 0 -_080B4184: .4byte gBattleAnimArgs -_080B4188: .4byte gBattleAnimTarget -_080B418C: - ldr r0, _080B41B4 @ =gBattleAnimTarget - ldrb r0, [r0] - adds r2, r5, 0 - adds r2, 0x32 - adds r3, r5, 0 - adds r3, 0x36 - movs r1, 0x1 - bl SetAverageBattlerPositions -_080B419E: - adds r0, r5, 0 - bl sub_8075678 - ldr r0, _080B41B8 @ =gBattleAnimArgs - ldrh r0, [r0, 0x6] - strh r0, [r5, 0x38] - ldr r0, _080B41BC @ =sub_80B41C0 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B41B4: .4byte gBattleAnimTarget -_080B41B8: .4byte gBattleAnimArgs -_080B41BC: .4byte sub_80B41C0 - thumb_func_end sub_80B4128 - - thumb_func_start sub_80B41C0 -sub_80B41C0: @ 80B41C0 - push {r4,lr} - adds r4, r0, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - beq _080B41D6 - adds r0, r4, 0 - bl DestroyAnimSprite - b _080B41F2 -_080B41D6: - movs r1, 0x3A - ldrsh r0, [r4, r1] - movs r2, 0x38 - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x24] - adds r0, r1 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x3A] - adds r0, 0xD - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3A] -_080B41F2: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B41C0 - - thumb_func_start sub_80B41F8 -sub_80B41F8: @ 80B41F8 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080B4228 @ =gBattleAnimTarget - ldrb r0, [r0] - adds r2, r4, 0 - adds r2, 0x20 - adds r3, r4, 0 - adds r3, 0x22 - movs r1, 0 - bl SetAverageBattlerPositions - ldr r0, _080B422C @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B4234 - ldr r0, _080B4230 @ =gBattleAnimArgs - ldrh r1, [r4, 0x20] - ldrh r2, [r0] - subs r1, r2 - strh r1, [r4, 0x20] - b _080B4240 - .align 2, 0 -_080B4228: .4byte gBattleAnimTarget -_080B422C: .4byte gBattleAnimAttacker -_080B4230: .4byte gBattleAnimArgs -_080B4234: - ldr r1, _080B4268 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - adds r0, r1, 0 -_080B4240: - ldrh r0, [r0, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldr r0, _080B426C @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B425C - ldrh r0, [r4, 0x22] - adds r0, 0x8 - strh r0, [r4, 0x22] -_080B425C: - ldr r0, _080B4270 @ =sub_80B4274 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B4268: .4byte gBattleAnimArgs -_080B426C: .4byte gBattleAnimTarget -_080B4270: .4byte sub_80B4274 - thumb_func_end sub_80B41F8 - - thumb_func_start sub_80B4274 -sub_80B4274: @ 80B4274 - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _080B42A8 - movs r0, 0 - strh r0, [r3, 0x2E] - movs r0, 0x3E - adds r0, r3 - mov r12, r0 - ldrb r2, [r0] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] -_080B42A8: - ldrh r0, [r3, 0x30] - adds r0, 0x1 - strh r0, [r3, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x33 - bne _080B42BC - adds r0, r3, 0 - bl DestroyAnimSprite -_080B42BC: - pop {r0} - bx r0 - thumb_func_end sub_80B4274 - - thumb_func_start sub_80B42C0 -sub_80B42C0: @ 80B42C0 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0x10 - bl SetGpuReg - movs r0, 0x10 - strh r0, [r4, 0x2E] - ldr r0, _080B42E4 @ =sub_80B42E8 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B42E4: .4byte sub_80B42E8 - thumb_func_end sub_80B42C0 - - thumb_func_start sub_80B42E8 -sub_80B42E8: @ 80B42E8 - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x32] - movs r2, 0x32 - ldrsh r0, [r4, r2] - cmp r0, 0x13 - bgt _080B42FC - adds r0, r1, 0x1 - strh r0, [r4, 0x32] - b _080B433A -_080B42FC: - ldrh r1, [r4, 0x30] - adds r0, r1, 0x1 - strh r0, [r4, 0x30] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B433A - ldrh r1, [r4, 0x2E] - subs r1, 0x1 - strh r1, [r4, 0x2E] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B433A - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080B4340 @ =sub_80B4344 - str r0, [r4, 0x1C] -_080B433A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B4340: .4byte sub_80B4344 - thumb_func_end sub_80B42E8 - - thumb_func_start sub_80B4344 -sub_80B4344: @ 80B4344 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r4, 0 - bl DestroyAnimSprite - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B4344 - - thumb_func_start sub_80B4364 -sub_80B4364: @ 80B4364 - push {r4-r7,lr} - sub sp, 0x4 - adds r7, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B4384 - ldr r1, _080B4380 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] - b _080B43A6 - .align 2, 0 -_080B4380: .4byte gBattleAnimArgs -_080B4384: - ldr r0, _080B4480 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B43A6 - ldr r1, _080B4484 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] - ldrh r0, [r1, 0x2] - negs r0, r0 - strh r0, [r1, 0x2] - ldrh r0, [r1, 0x6] - negs r0, r0 - strh r0, [r1, 0x6] -_080B43A6: - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B43F6 - ldr r0, _080B4480 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - adds r4, r0, 0 - ldr r5, _080B4488 @ =gBattleAnimTarget - ldrb r0, [r5] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _080B43F6 - ldrb r0, [r5] - bl GetBattlerPosition - lsls r0, 24 - cmp r0, 0 - beq _080B43E4 - ldrb r0, [r5] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B43F6 -_080B43E4: - ldr r0, _080B4484 @ =gBattleAnimArgs - movs r2, 0x4 - ldrsh r1, [r0, r2] - negs r1, r1 - strh r1, [r0, 0x4] - movs r2, 0 - ldrsh r1, [r0, r2] - negs r1, r1 - strh r1, [r0] -_080B43F6: - adds r0, r7, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r5, _080B4488 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - lsls r4, 24 - ldr r6, _080B4484 @ =gBattleAnimArgs - lsrs r4, 24 - ldrh r0, [r6, 0x4] - adds r4, r0 - lsls r4, 16 - lsrs r4, 16 - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldrh r2, [r6, 0x6] - adds r1, r2 - lsls r1, 16 - ldrh r2, [r7, 0x20] - lsls r0, r4, 16 - asrs r0, 16 - subs r0, r2 - lsls r0, 16 - asrs r0, 16 - ldrh r2, [r7, 0x22] - lsrs r5, r1, 16 - asrs r1, 16 - subs r1, r2 - lsls r1, 16 - asrs r1, 16 - bl ArcTan2Neg - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 24 - adds r0, r1 - lsrs r0, 16 - movs r3, 0x80 - lsls r3, 1 - str r0, [sp] - adds r0, r7, 0 - movs r1, 0 - adds r2, r3, 0 - bl TrySetSpriteRotScale - ldrh r0, [r6, 0x8] - strh r0, [r7, 0x2E] - strh r4, [r7, 0x32] - strh r5, [r7, 0x36] - ldr r0, _080B448C @ =StartAnimLinearTranslation - str r0, [r7, 0x1C] - ldr r1, _080B4490 @ =DestroyAnimSprite - adds r0, r7, 0 - bl StoreSpriteCallbackInData6 - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B4480: .4byte gBattleAnimAttacker -_080B4484: .4byte gBattleAnimArgs -_080B4488: .4byte gBattleAnimTarget -_080B448C: .4byte StartAnimLinearTranslation -_080B4490: .4byte DestroyAnimSprite - thumb_func_end sub_80B4364 - - thumb_func_start sub_80B4494 -sub_80B4494: @ 80B4494 - push {r4-r6,lr} - adds r6, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r0, _080B4500 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B44B4 - ldr r1, _080B4504 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_080B44B4: - ldr r4, _080B4504 @ =gBattleAnimArgs - ldrh r0, [r4, 0x8] - strh r0, [r6, 0x2E] - ldr r5, _080B4508 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x4] - adds r0, r1 - strh r0, [r6, 0x32] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x6] - adds r0, r1 - strh r0, [r6, 0x36] - ldrh r0, [r4, 0xA] - strh r0, [r6, 0x38] - adds r0, r6, 0 - bl InitAnimArcTranslation - ldr r0, _080B450C @ =sub_80B4510 - str r0, [r6, 0x1C] - adds r2, r6, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B4500: .4byte gBattleAnimAttacker -_080B4504: .4byte gBattleAnimArgs -_080B4508: .4byte gBattleAnimTarget -_080B450C: .4byte sub_80B4510 - thumb_func_end sub_80B4494 - - thumb_func_start sub_80B4510 -sub_80B4510: @ 80B4510 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r4, r0, 0 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r0 - strb r1, [r2] - adds r0, r4, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080B453C - adds r0, r4, 0 - bl DestroyAnimSprite - b _080B45CC -_080B453C: - movs r0, 0x2E - adds r0, r4 - mov r8, r0 - ldrh r7, [r4, 0x20] - ldrh r5, [r4, 0x24] - ldrh r1, [r4, 0x22] - mov r12, r1 - ldrh r6, [r4, 0x26] - mov r2, r8 - add r1, sp, 0x4 - movs r3, 0x7 -_080B4552: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _080B4552 - adds r0, r7, r5 - lsls r0, 16 - lsrs r5, r0, 16 - mov r2, r12 - adds r0, r2, r6 - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - bne _080B45CC - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - lsls r1, r5, 16 - asrs r1, 16 - subs r0, r1 - lsls r0, 16 - asrs r0, 16 - ldrh r1, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r1, r2 - lsls r2, r6, 16 - asrs r2, 16 - subs r1, r2 - lsls r1, 16 - asrs r1, 16 - bl ArcTan2Neg - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 24 - adds r0, r1 - lsrs r0, 16 - movs r3, 0x80 - lsls r3, 1 - str r0, [sp] - adds r0, r4, 0 - movs r1, 0 - adds r2, r3, 0 - bl TrySetSpriteRotScale - add r2, sp, 0x4 - mov r1, r8 - movs r3, 0x7 -_080B45BE: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _080B45BE -_080B45CC: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80B4510 - - thumb_func_start sub_80B45D8 -sub_80B45D8: @ 80B45D8 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080B45EC @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B45F4 - ldr r4, _080B45F0 @ =gBattleAnimAttacker - b _080B45F6 - .align 2, 0 -_080B45EC: .4byte gBattleAnimArgs -_080B45F0: .4byte gBattleAnimAttacker -_080B45F4: - ldr r4, _080B4628 @ =gBattleAnimTarget -_080B45F6: - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x12 - strh r0, [r5, 0x22] - ldr r1, _080B462C @ =DestroySpriteAndMatrix - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080B4630 @ =RunStoredCallbackWhenAffineAnimEnds - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B4628: .4byte gBattleAnimTarget -_080B462C: .4byte DestroySpriteAndMatrix -_080B4630: .4byte RunStoredCallbackWhenAffineAnimEnds - thumb_func_end sub_80B45D8 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_835B488.s b/data/data_835B488.s index cf435e174..d909c4f64 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -921,7 +921,7 @@ gUnknown_83E7044:: @ 83E7044 .incbin "baserom.gba", 0x3E7044, 0xD0 gUnknown_83E7114:: @ 83E7114 - .incbin "baserom.gba", 0x3E7114, 0x27C + .incbin "baserom.gba", 0x3E7114, 0xD4 .section .rodata.83E7CFC diff --git a/include/battle_anim.h b/include/battle_anim.h index b5bdd05ce..437b2c610 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -75,6 +75,9 @@ extern struct OamData gOamData_83ACB38; extern struct OamData gOamData_83ACA18; extern struct OamData gOamData_83ACB20; extern struct OamData gOamData_83ACB50; +extern struct OamData gOamData_83ACAB8; +extern struct OamData gOamData_83ACA00; +extern struct OamData gOamData_83ACBC0; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); diff --git a/ld_script.txt b/ld_script.txt index 9b9147b00..579b2cba1 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -163,7 +163,7 @@ SECTIONS { asm/poison.o(.text); asm/flying.o(.text); asm/psychic.o(.text); - asm/bug.o(.text); + src/bug.o(.text); src/rock.o(.text); src/ghost.o(.text); src/dragon.o(.text); @@ -423,6 +423,7 @@ SECTIONS { src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); data/data_835B488.o(.rodata.83DF09C); + src/bug.o(.rodata); src/rock.o(.rodata); src/ghost.o(.rodata); src/dragon.o(.rodata); diff --git a/src/bug.c b/src/bug.c new file mode 100644 index 000000000..fc3e29379 --- /dev/null +++ b/src/bug.c @@ -0,0 +1,463 @@ +#include "global.h" +#include "battle_anim.h" +#include "gpu_regs.h" +#include "trig.h" + +static void sub_80B3FAC(struct Sprite *sprite); +static void sub_80B407C(struct Sprite *sprite); +static void AnimTranslateWebThread(struct Sprite *sprite); +static void sub_80B41F8(struct Sprite *sprite); +static void sub_80B42C0(struct Sprite *sprite); +static void AnimTranslateStinger(struct Sprite *sprite); +static void AnimMissileArc(struct Sprite *sprite); +static void sub_80B45D8(struct Sprite *sprite); +static void sub_80B41C0(struct Sprite *sprite); +static void sub_80B4274(struct Sprite *sprite); +static void sub_80B42E8(struct Sprite *sprite); +static void sub_80B4344(struct Sprite *sprite); +static void AnimMissileArcStep(struct Sprite *sprite); + + +static const union AffineAnimCmd gUnknown_83E71E8[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 30, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E71F8[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, -99, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E7208[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 94, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E7218[] = +{ + gUnknown_83E71E8, + gUnknown_83E71F8, + gUnknown_83E7208, +}; + +const struct SpriteTemplate gUnknown_83E7224 = +{ + .tileTag = ANIM_TAG_HORN_HIT_2, + .paletteTag = ANIM_TAG_HORN_HIT_2, + .oam = &gOamData_83ACAB8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7218, + .callback = sub_80B3FAC, +}; + +static const union AffineAnimCmd gUnknown_83E723C[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -33, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E724C[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 96, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E725C[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -96, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E726C[] = +{ + gUnknown_83E723C, + gUnknown_83E724C, + gUnknown_83E725C, +}; + +const struct SpriteTemplate gUnknown_83E7278 = +{ + .tileTag = ANIM_TAG_NEEDLE, + .paletteTag = ANIM_TAG_NEEDLE, + .oam = &gOamData_83ACA30, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E726C, + .callback = sub_80B407C, +}; + +const struct SpriteTemplate gWebThreadSpriteTemplate = +{ + .tileTag = ANIM_TAG_WEB_THREAD, + .paletteTag = ANIM_TAG_WEB_THREAD, + .oam = &gOamData_83AC9C8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimTranslateWebThread, +}; + +const struct SpriteTemplate gUnknown_83E72A8 = +{ + .tileTag = ANIM_TAG_STRING, + .paletteTag = ANIM_TAG_STRING, + .oam = &gOamData_83ACA00, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B41F8, +}; + +static const union AffineAnimCmd gUnknown_83E72C0[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x6, 0x6, 0, 1), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd *const gUnknown_83E72D8[] = +{ + gUnknown_83E72C0, +}; + +const struct SpriteTemplate gSpiderWebSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPIDER_WEB, + .paletteTag = ANIM_TAG_SPIDER_WEB, + .oam = &gOamData_83ACBC0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E72D8, + .callback = sub_80B42C0, +}; + +const struct SpriteTemplate gLinearStingerSpriteTemplate = +{ + .tileTag = ANIM_TAG_NEEDLE, + .paletteTag = ANIM_TAG_NEEDLE, + .oam = &gOamData_83ACA30, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimTranslateStinger, +}; + +const struct SpriteTemplate gPinMissileSpriteTemplate = +{ + .tileTag = ANIM_TAG_NEEDLE, + .paletteTag = ANIM_TAG_NEEDLE, + .oam = &gOamData_83ACA30, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMissileArc, +}; + +const struct SpriteTemplate gIcicleSpearSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ICICLE_SPEAR, + .oam = &gOamData_83ACA38, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMissileArc, +}; + +static const union AffineAnimCmd gUnknown_83E733C[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 18), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 8), + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 8), + AFFINEANIMCMD_LOOP(5), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E7374[] = +{ + gUnknown_83E733C, +}; + +const struct SpriteTemplate gUnknown_83E7378 = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_83ACB60, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7374, + .callback = sub_80B45D8, +}; + +static void sub_80B3FAC(struct Sprite *sprite) +{ + if (IsContest()) + { + StartSpriteAffineAnim(sprite, 2); + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + else if (!GetBattlerSide(gBattleAnimTarget)) + { + StartSpriteAffineAnim(sprite, 1); + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void sub_80B407C(struct Sprite *sprite) +{ + if (IsContest()) + { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + StartSpriteAffineAnim(sprite, 2); + } + else if (!GetBattlerSide(gBattleAnimTarget)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Creates a single web thread that travels from attacker to target. +// Used by MOVE_STRING_SHOT and MOVE_SPIDER_WEB in their first move phase. +// arg 0: x +// arg 1: y +// arg 2: controls the left-to-right movement +// arg 3: amplitude +// arg 4: if targets both opponents +static void AnimTranslateWebThread(struct Sprite *sprite) +{ + if (IsContest()) + gBattleAnimArgs[2] /= 2; + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + if (!gBattleAnimArgs[4]) + { + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + } + else + { + SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]); + } + sub_8075678(sprite); + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = sub_80B41C0; +} + +static void sub_80B41C0(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + { + DestroyAnimSprite(sprite); + return; + } + sprite->pos2.x += Sin(sprite->data[6], sprite->data[5]); + sprite->data[6] = (sprite->data[6] + 13) & 0xFF; +} + +static void sub_80B41F8(struct Sprite *sprite) +{ + SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y); + if (GetBattlerSide(gBattleAnimAttacker)) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + if (!GetBattlerSide(gBattleAnimTarget)) + sprite->pos1.y += 8; + sprite->callback = sub_80B4274; +} + +static void sub_80B4274(struct Sprite *sprite) +{ + if (++sprite->data[0] == 3) + { + sprite->data[0] = 0; + sprite->invisible ^= 1; + } + if (++sprite->data[1] == 51) + { + DestroyAnimSprite(sprite); + } +} + +static void sub_80B42C0(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + sprite->data[0] = 16; + sprite->callback = sub_80B42E8; +} + +static void sub_80B42E8(struct Sprite *sprite) +{ + if (sprite->data[2] < 20) + { + ++sprite->data[2]; + } + else if (sprite->data[1]++ & 1) + { + --sprite->data[0]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0])); + + if (sprite->data[0] == 0) + { + sprite->invisible = TRUE; + sprite->callback = sub_80B4344; + } + } +} + +static void sub_80B4344(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimSprite(sprite); +} + +// Translates a stinger sprite linearly to a destination location. The sprite is +// initially rotated so that it appears to be traveling in a straight line. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +static void AnimTranslateStinger(struct Sprite *sprite) +{ + s16 lVarX, lVarY; + u16 rot; + + if (IsContest()) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + else if (GetBattlerSide(gBattleAnimAttacker)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + { + if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT + || GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT) + { + s16 temp1, temp2; + + temp1 = gBattleAnimArgs[2]; + gBattleAnimArgs[2] = -temp1; + + temp2 = gBattleAnimArgs[0]; + gBattleAnimArgs[0] = -temp2; + } + } + InitSpritePosToAnimAttacker(sprite, 1); + lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; + lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + rot = ArcTan2Neg(lVarX - sprite->pos1.x, lVarY - sprite->pos1.y); + rot += 0xC000; + TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = lVarX; + sprite->data[4] = lVarY; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Rotates sprite and moves it in an arc, so that it appears like a missle or arrow traveling. +// arg 0: initial x pixel offset +// arg 1: initial y pixel offset +// arg 2: target x pixel offset +// arg 3: target y pixel offset +// arg 4: duration +// arg 5: wave amplitude +static void AnimMissileArc(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, 1); + if (GetBattlerSide(gBattleAnimAttacker)) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + InitAnimArcTranslation(sprite); + sprite->callback = AnimMissileArcStep; + sprite->invisible = TRUE; +} + +static void AnimMissileArcStep(struct Sprite *sprite) +{ + sprite->invisible = FALSE; + + if (TranslateAnimHorizontalArc(sprite)) + { + DestroyAnimSprite(sprite); + } + else + { + s16 tempData[8]; + u16 *data = sprite->data; + u16 x1 = sprite->pos1.x; + s16 x2 = sprite->pos2.x; + u16 y1 = sprite->pos1.y; + s16 y2 = sprite->pos2.y; + s32 i; + + for (i = 0; i < 8; ++i) + tempData[i] = data[i]; + x2 += x1; + y2 += y1; + if (!TranslateAnimHorizontalArc(sprite)) + { + u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2, + sprite->pos1.y + sprite->pos2.y - y2); + + rotation += 0xC000; + TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation); + for (i = 0; i < 8; ++i) + data[i] = tempData[i]; + } + } +} + +static void sub_80B45D8(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 18; + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18; + } + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; +} From 6743faa82211187514153c6754f4ae43af7daf9c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 11 Oct 2019 12:58:59 +0800 Subject: [PATCH 13/25] psychic --- asm/psychic.s | 2180 ----------------------------------------- data/data_835B488.s | 17 +- include/battle_anim.h | 14 +- include/sprite.h | 1 + ld_script.txt | 3 +- src/bug.c | 1 - src/psychic.c | 1083 ++++++++++++++++++++ 7 files changed, 1099 insertions(+), 2200 deletions(-) delete mode 100644 asm/psychic.s create mode 100644 src/psychic.c diff --git a/asm/psychic.s b/asm/psychic.s deleted file mode 100644 index d2a694e13..000000000 --- a/asm/psychic.s +++ /dev/null @@ -1,2180 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80B2ECC -sub_80B2ECC: @ 80B2ECC - push {r4-r7,lr} - adds r6, r0, 0 - ldr r0, _080B2F84 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B2EE8 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B2EFE -_080B2EE8: - ldrb r1, [r6, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x8 - orrs r0, r1 - strb r0, [r6, 0x5] - adds r1, r6, 0 - adds r1, 0x43 - movs r0, 0xC8 - strb r0, [r1] -_080B2EFE: - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B2F5A - movs r0, 0x1 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r4, r0, 24 - adds r7, r4, 0 - adds r0, r4, 0 - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - eors r0, r1 - negs r1, r0 - orrs r1, r0 - lsrs r5, r1, 31 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B2F3C - adds r0, r4, 0 - adds r1, r5, 0 - bl MoveBattlerSpriteToBG -_080B2F3C: - movs r0, 0x2 - adds r4, r0, 0 - eors r4, r7 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B2F5A - movs r0, 0x1 - eors r5, r0 - adds r0, r4, 0 - adds r1, r5, 0 - bl MoveBattlerSpriteToBG -_080B2F5A: - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B2F90 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080B2F90 - ldr r0, _080B2F84 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B2F88 - movs r0, 0x48 - strh r0, [r6, 0x20] - movs r0, 0x50 - b _080B2FCA - .align 2, 0 -_080B2F84: .4byte gBattleAnimAttacker -_080B2F88: - movs r0, 0xB0 - strh r0, [r6, 0x20] - movs r0, 0x28 - b _080B2FCA -_080B2F90: - ldr r5, _080B3000 @ =gBattleAnimAttacker - ldrb r0, [r5] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B2FA6 - ldr r1, _080B3004 @ =gBattleAnimArgs - ldrh r0, [r1] - negs r0, r0 - strh r0, [r1] -_080B2FA6: - ldrb r0, [r5] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - ldr r4, _080B3004 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r4] - adds r0, r1 - strh r0, [r6, 0x20] - ldrb r0, [r5] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r4, [r4, 0x2] - adds r0, r4 -_080B2FCA: - strh r0, [r6, 0x22] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B2FDC - ldrh r0, [r6, 0x22] - adds r0, 0x9 - strh r0, [r6, 0x22] -_080B2FDC: - ldr r0, _080B3004 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 20 - movs r1, 0x80 - lsls r1, 1 - adds r0, r1 - strh r0, [r6, 0x2E] - ldr r1, _080B3008 @ =sub_80B300C - str r1, [r6, 0x1C] - adds r0, r6, 0 - bl _call_via_r1 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B3000: .4byte gBattleAnimAttacker -_080B3004: .4byte gBattleAnimArgs -_080B3008: .4byte sub_80B300C - thumb_func_end sub_80B2ECC - - thumb_func_start sub_80B300C -sub_80B300C: @ 80B300C - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x34] - movs r1, 0x10 - subs r1, r0 - lsls r1, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - ldrh r1, [r4, 0x34] - movs r2, 0x34 - ldrsh r0, [r4, r2] - cmp r0, 0xD - bne _080B3038 - ldr r0, _080B3034 @ =sub_80B3044 - str r0, [r4, 0x1C] - b _080B303C - .align 2, 0 -_080B3034: .4byte sub_80B3044 -_080B3038: - adds r0, r1, 0x1 - strh r0, [r4, 0x34] -_080B303C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B300C - - thumb_func_start sub_80B3044 -sub_80B3044: @ 80B3044 - push {r4-r7,lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x30] - adds r0, 0x1 - strh r0, [r3, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - bne _080B30A2 - movs r0, 0 - strh r0, [r3, 0x30] - ldrh r4, [r3, 0x2E] - ldr r1, _080B30A8 @ =gPlttBufferFaded - adds r0, r4, 0 - adds r0, 0x8 - lsls r0, 1 - adds r0, r1 - ldrh r7, [r0] - movs r5, 0x8 - adds r6, r1, 0 - adds r1, r4, 0x7 - lsls r0, r4, 1 - adds r0, r6 - adds r2, r0, 0 - adds r2, 0x10 - lsls r1, 1 - adds r1, r6 -_080B307A: - ldrh r0, [r1] - strh r0, [r2] - subs r1, 0x2 - subs r2, 0x2 - subs r5, 0x1 - cmp r5, 0 - bgt _080B307A - adds r0, r4, 0x1 - lsls r0, 1 - adds r0, r6 - strh r7, [r0] - ldrh r0, [r3, 0x32] - adds r0, 0x1 - strh r0, [r3, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - bne _080B30A2 - ldr r0, _080B30AC @ =sub_80B30B0 - str r0, [r3, 0x1C] -_080B30A2: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B30A8: .4byte gPlttBufferFaded -_080B30AC: .4byte sub_80B30B0 - thumb_func_end sub_80B3044 - - thumb_func_start sub_80B30B0 -sub_80B30B0: @ 80B30B0 - push {r4-r6,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0x34] - movs r1, 0x10 - subs r1, r0 - lsls r1, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - ldrh r0, [r5, 0x34] - subs r0, 0x1 - strh r0, [r5, 0x34] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080B3156 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B3146 - movs r0, 0x1 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r4, r0, 24 - adds r6, r4, 0 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B3118 - ldr r2, _080B315C @ =gSprites - ldr r0, _080B3160 @ =gBattlerSpriteIds - adds r0, r4, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] -_080B3118: - movs r0, 0x2 - adds r4, r0, 0 - eors r4, r6 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B3146 - ldr r2, _080B315C @ =gSprites - ldr r0, _080B3160 @ =gBattlerSpriteIds - adds r0, r4, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3E - ldrb r2, [r0] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r0] -_080B3146: - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080B3164 @ =sub_80B3168 - str r0, [r5, 0x1C] -_080B3156: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B315C: .4byte gSprites -_080B3160: .4byte gBattlerSpriteIds -_080B3164: .4byte sub_80B3168 - thumb_func_end sub_80B30B0 - - thumb_func_start sub_80B3168 -sub_80B3168: @ 80B3168 - push {r4-r6,lr} - adds r6, r0, 0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B31C0 - movs r0, 0x1 - bl GetBattlerAtPosition - lsls r0, 24 - lsrs r0, 24 - adds r4, r0, 0 - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - eors r0, r1 - negs r1, r0 - orrs r1, r0 - lsrs r5, r1, 31 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B31A6 - adds r0, r5, 0 - bl sub_8073128 -_080B31A6: - movs r0, 0x2 - eors r4, r0 - adds r0, r4, 0 - bl IsBattlerSpriteVisible - lsls r0, 24 - cmp r0, 0 - beq _080B31C0 - movs r0, 0x1 - eors r5, r0 - adds r0, r5, 0 - bl sub_8073128 -_080B31C0: - ldr r0, _080B31CC @ =DestroyAnimSprite - str r0, [r6, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B31CC: .4byte DestroyAnimSprite - thumb_func_end sub_80B3168 - - thumb_func_start sub_80B31D0 -sub_80B31D0: @ 80B31D0 - push {r4-r6,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B325C - ldr r5, _080B321C @ =gBattleAnimArgs - movs r1, 0x6 - ldrsh r0, [r5, r1] - movs r6, 0 - cmp r0, 0 - bne _080B31EA - movs r6, 0x1 -_080B31EA: - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B3232 - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - beq _080B3232 - ldr r0, _080B3220 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B3224 - ldrh r0, [r5] - movs r1, 0x48 - subs r1, r0 - strh r1, [r4, 0x20] - ldrh r0, [r5, 0x2] - adds r0, 0x50 - strh r0, [r4, 0x22] - b _080B3254 - .align 2, 0 -_080B321C: .4byte gBattleAnimArgs -_080B3220: .4byte gBattleAnimAttacker -_080B3224: - ldrh r0, [r5] - adds r0, 0xB0 - strh r0, [r4, 0x20] - ldrh r0, [r5, 0x2] - adds r0, 0x28 - strh r0, [r4, 0x22] - b _080B3254 -_080B3232: - ldr r0, _080B3248 @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B324C - adds r0, r4, 0 - adds r1, r6, 0 - bl InitSpritePosToAnimAttacker - b _080B3254 - .align 2, 0 -_080B3248: .4byte gBattleAnimArgs -_080B324C: - adds r0, r4, 0 - adds r1, r6, 0 - bl InitSpritePosToAnimTarget -_080B3254: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080B3270 -_080B325C: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x30 - ands r0, r1 - cmp r0, 0 - beq _080B3270 - adds r0, r4, 0 - bl DestroySpriteAndMatrix -_080B3270: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80B31D0 - - thumb_func_start sub_80B3278 -sub_80B3278: @ 80B3278 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B32C0 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B32C8 - adds r0, r5, 0 - movs r1, 0x1 - bl StartSpriteAnim - ldrh r0, [r5, 0x20] - subs r0, 0x28 - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x22] - adds r0, 0xA - strh r0, [r5, 0x22] - ldr r0, _080B32C4 @ =0x0000ffff - b _080B32D6 - .align 2, 0 -_080B32C0: .4byte gBattleAnimAttacker -_080B32C4: .4byte 0x0000ffff -_080B32C8: - ldrh r0, [r5, 0x20] - adds r0, 0x28 - strh r0, [r5, 0x20] - ldrh r0, [r5, 0x22] - subs r0, 0xA - strh r0, [r5, 0x22] - movs r0, 0x1 -_080B32D6: - strh r0, [r5, 0x30] - ldr r1, _080B32EC @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080B32F0 @ =RunStoredCallbackWhenAnimEnds - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B32EC: .4byte DestroyAnimSprite -_080B32F0: .4byte RunStoredCallbackWhenAnimEnds - thumb_func_end sub_80B3278 - - thumb_func_start sub_80B32F4 -sub_80B32F4: @ 80B32F4 - push {r4-r7,lr} - adds r5, r0, 0 - ldr r6, _080B3378 @ =gBattleAnimAttacker - ldrb r0, [r6] - movs r1, 0x1 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r1, r0, 16 - lsrs r0, 31 - adds r1, r0 - lsls r1, 15 - lsrs r4, r1, 16 - ldrb r0, [r6] - movs r1, 0 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r1, r0, 16 - lsrs r0, 31 - adds r1, r0 - asrs r1, 1 - negs r1, r1 - lsls r1, 16 - lsrs r7, r1, 16 - ldrb r0, [r6] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B333A - lsls r0, r4, 16 - negs r0, r0 - lsrs r4, r0, 16 -_080B333A: - ldrb r0, [r6] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, r4 - strh r0, [r5, 0x20] - ldrb r0, [r6] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, r7 - strh r0, [r5, 0x22] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xF - bgt _080B3366 - movs r0, 0x10 - strh r0, [r5, 0x22] -_080B3366: - ldr r1, _080B337C @ =sub_80B3384 - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldr r0, _080B3380 @ =RunStoredCallbackWhenAnimEnds - str r0, [r5, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B3378: .4byte gBattleAnimAttacker -_080B337C: .4byte sub_80B3384 -_080B3380: .4byte RunStoredCallbackWhenAnimEnds - thumb_func_end sub_80B32F4 - - thumb_func_start sub_80B3384 -sub_80B3384: @ 80B3384 - push {r4,lr} - adds r4, r0, 0 - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, _080B33B0 @ =gUnknown_83E6FF0 - str r0, [r4, 0x10] - movs r0, 0 - strh r0, [r4, 0x2E] - adds r0, r4, 0 - bl InitSpriteAffineAnim - ldr r0, _080B33B4 @ =sub_80B33B8 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B33B0: .4byte gUnknown_83E6FF0 -_080B33B4: .4byte sub_80B33B8 - thumb_func_end sub_80B3384 - - thumb_func_start sub_80B33B8 -sub_80B33B8: @ 80B33B8 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080B33CA - cmp r0, 0x1 - beq _080B33F8 - b _080B3410 -_080B33CA: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080B3410 - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] - movs r0, 0x12 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080B3410 -_080B33F8: - ldrh r0, [r4, 0x30] - subs r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080B3410 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B3410: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B33B8 - - thumb_func_start sub_80B3418 -sub_80B3418: @ 80B3418 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _080B3448 @ =gTasks - adds r4, r0 - movs r0, 0 - bl GetAnimBattlerSpriteId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - strh r1, [r4, 0x8] - ldr r2, _080B344C @ =gUnknown_83E700C - adds r0, r4, 0 - bl PrepareAffineAnimInTaskData - ldr r0, _080B3450 @ =sub_80B3454 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B3448: .4byte gTasks -_080B344C: .4byte gUnknown_83E700C -_080B3450: .4byte sub_80B3454 - thumb_func_end sub_80B3418 - - thumb_func_start sub_80B3454 -sub_80B3454: @ 80B3454 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080B347C @ =gTasks - adds r0, r1 - bl RunAffineAnimFromTaskData - lsls r0, 24 - cmp r0, 0 - bne _080B3474 - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080B3474: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B347C: .4byte gTasks - thumb_func_end sub_80B3454 - - thumb_func_start sub_80B3480 -sub_80B3480: @ 80B3480 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080B34CC @ =gTasks - adds r4, r1, r0 - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - strh r0, [r4, 0x8] - strh r1, [r4, 0xA] - strh r1, [r4, 0xC] - ldr r0, _080B34D0 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - movs r1, 0x8 - cmp r0, 0 - beq _080B34B4 - movs r1, 0x4 -_080B34B4: - strh r1, [r4, 0xE] - ldrb r1, [r4, 0x8] - ldr r2, _080B34D4 @ =gUnknown_83E702C - adds r0, r4, 0 - bl PrepareAffineAnimInTaskData - ldr r0, _080B34D8 @ =sub_80B34DC - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B34CC: .4byte gTasks -_080B34D0: .4byte gBattleAnimAttacker -_080B34D4: .4byte gUnknown_83E702C -_080B34D8: .4byte sub_80B34DC - thumb_func_end sub_80B3480 - - thumb_func_start sub_80B34DC -sub_80B34DC: @ 80B34DC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080B34FC @ =gTasks - adds r4, r0, r1 - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080B3500 - cmp r0, 0x1 - beq _080B351C - b _080B357A - .align 2, 0 -_080B34FC: .4byte gTasks -_080B3500: - adds r0, r4, 0 - bl RunAffineAnimFromTaskData - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x13 - ble _080B357A - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - b _080B357A -_080B351C: - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080B3544 - ldr r2, _080B3540 @ =gSprites - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - subs r1, 0x8 - strh r1, [r0, 0x26] - ldrh r0, [r4, 0xE] - subs r0, 0x1 - strh r0, [r4, 0xE] - b _080B357A - .align 2, 0 -_080B3540: .4byte gSprites -_080B3544: - ldr r3, _080B3580 @ =gSprites - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - movs r0, 0x8 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - movs r1, 0x88 - lsls r1, 1 - strh r1, [r0, 0x20] - ldrb r0, [r4, 0x8] - bl ResetSpriteRotScale - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080B357A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B3580: .4byte gSprites - thumb_func_end sub_80B34DC - - thumb_func_start sub_80B3584 -sub_80B3584: @ 80B3584 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080B360C @ =gTasks - adds r5, r1, r0 - movs r1, 0 - movs r0, 0x10 - strh r0, [r5, 0xE] - strh r1, [r5, 0x10] - ldr r4, _080B3610 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x24] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r0, 16 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r6, r0, 16 - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoordAttr - lsls r0, 16 - asrs r0, 16 - movs r1, 0x3 - bl __divsi3 - lsls r0, 16 - lsrs r0, 16 - adds r1, r0, 0 - cmp r0, r6 - bcs _080B35EE - adds r1, r6, 0 -_080B35EE: - strh r1, [r5, 0x20] - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0x10 - bl SetGpuReg - ldr r0, _080B3614 @ =sub_80B3618 - str r0, [r5] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B360C: .4byte gTasks -_080B3610: .4byte gBattleAnimAttacker -_080B3614: .4byte sub_80B3618 - thumb_func_end sub_80B3584 - - thumb_func_start sub_80B3618 -sub_80B3618: @ 80B3618 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080B363C @ =gTasks - adds r4, r0, r1 - movs r0, 0x8 - ldrsh r1, [r4, r0] - cmp r1, 0x1 - beq _080B3718 - cmp r1, 0x1 - bgt _080B3640 - cmp r1, 0 - beq _080B364E - b _080B379E - .align 2, 0 -_080B363C: .4byte gTasks -_080B3640: - cmp r1, 0x2 - bne _080B3646 - b _080B377A -_080B3646: - cmp r1, 0x3 - bne _080B364C - b _080B3788 -_080B364C: - b _080B379E -_080B364E: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - bgt _080B365E - b _080B379E -_080B365E: - strh r1, [r4, 0xA] - ldr r0, _080B369C @ =gUnknown_83E7044 - movs r2, 0x22 - ldrsh r1, [r4, r2] - movs r3, 0x24 - ldrsh r2, [r4, r3] - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - movs r0, 0xC - ldrsh r1, [r4, r0] - adds r1, 0x8 - lsls r1, 1 - adds r0, r4, 0 - adds r0, 0x8 - adds r0, r1 - strh r2, [r0] - cmp r2, 0x40 - beq _080B3702 - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080B36BC - cmp r0, 0x1 - bgt _080B36A0 - cmp r0, 0 - beq _080B36AA - b _080B3702 - .align 2, 0 -_080B369C: .4byte gUnknown_83E7044 -_080B36A0: - cmp r0, 0x2 - beq _080B36D4 - cmp r0, 0x3 - beq _080B36EC - b _080B3702 -_080B36AA: - ldr r0, _080B36B8 @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r4, 0x20] - b _080B36FA - .align 2, 0 -_080B36B8: .4byte gSprites -_080B36BC: - ldr r0, _080B36D0 @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r4, 0x20] - negs r0, r0 - strh r0, [r1, 0x24] - ldrh r0, [r4, 0x20] - b _080B3700 - .align 2, 0 -_080B36D0: .4byte gSprites -_080B36D4: - ldr r1, _080B36E8 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldrh r1, [r4, 0x20] - strh r1, [r0, 0x24] - ldrh r1, [r4, 0x20] - strh r1, [r0, 0x26] - b _080B3702 - .align 2, 0 -_080B36E8: .4byte gSprites -_080B36EC: - ldr r0, _080B3714 @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r4, 0x20] - negs r0, r0 -_080B36FA: - strh r0, [r1, 0x24] - ldrh r0, [r4, 0x20] - negs r0, r0 -_080B3700: - strh r0, [r1, 0x26] -_080B3702: - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - bne _080B379E - b _080B377A - .align 2, 0 -_080B3714: .4byte gSprites -_080B3718: - ldrh r0, [r4, 0xA] - ands r1, r0 - cmp r1, 0 - beq _080B3728 - ldrh r0, [r4, 0xE] - subs r0, 0x1 - strh r0, [r4, 0xE] - b _080B372E -_080B3728: - ldrh r0, [r4, 0x10] - adds r0, 0x1 - strh r0, [r4, 0x10] -_080B372E: - ldrh r1, [r4, 0x10] - lsls r1, 8 - ldrh r0, [r4, 0xE] - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x20 - bne _080B379E - movs r5, 0x8 - adds r6, r4, 0 - adds r6, 0x8 -_080B3754: - lsls r0, r5, 1 - adds r1, r6, r0 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0x40 - beq _080B3770 - adds r1, r0, 0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080B3784 @ =gSprites - adds r0, r1 - bl DestroySprite -_080B3770: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0xC - bls _080B3754 -_080B377A: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B379E - .align 2, 0 -_080B3784: .4byte gSprites -_080B3788: - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080B379E: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80B3618 - - thumb_func_start sub_80B37A4 -sub_80B37A4: @ 80B37A4 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x30 - ldrsh r1, [r4, r0] - movs r2, 0x2E - ldrsh r0, [r4, r2] - subs r0, 0xA - cmp r1, r0 - ble _080B37CE - ldrh r0, [r4, 0x30] - movs r1, 0x1 - ands r1, r0 - adds r3, r4, 0 - adds r3, 0x3E - lsls r1, 2 - ldrb r2, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] -_080B37CE: - movs r0, 0x30 - ldrsh r1, [r4, r0] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _080B37E0 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B37E0: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B37A4 - - thumb_func_start sub_80B37EC -sub_80B37EC: @ 80B37EC - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _080B3828 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0 - bne _080B3818 - ldr r4, _080B382C @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] -_080B3818: - ldrh r0, [r6, 0x2] - strh r0, [r5, 0x2E] - ldr r0, _080B3830 @ =sub_80B37A4 - str r0, [r5, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B3828: .4byte gBattleAnimArgs -_080B382C: .4byte gBattleAnimAttacker -_080B3830: .4byte sub_80B37A4 - thumb_func_end sub_80B37EC - - thumb_func_start sub_80B3834 -sub_80B3834: @ 80B3834 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080B3890 @ =gTasks - adds r5, r1, r0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B38D8 - ldr r0, _080B3894 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0x1 - bne _080B38A4 - ldr r0, _080B3898 @ =0x0000fff6 - strh r0, [r5, 0x1C] - ldr r4, _080B389C @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x5 - bl GetBattlerSpriteCoordAttr - subs r0, 0x8 - strh r0, [r5, 0x1E] - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoordAttr - adds r0, 0x8 - strh r0, [r5, 0x20] - ldr r4, _080B38A0 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x5 - bl GetBattlerSpriteCoordAttr - subs r0, 0x8 - strh r0, [r5, 0x22] - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoordAttr - adds r0, 0x8 - b _080B3962 - .align 2, 0 -_080B3890: .4byte gTasks -_080B3894: .4byte gBattleAnimArgs -_080B3898: .4byte 0x0000fff6 -_080B389C: .4byte gBattleAnimTarget -_080B38A0: .4byte gBattleAnimAttacker -_080B38A4: - movs r0, 0xA - strh r0, [r5, 0x1C] - ldr r4, _080B38D0 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x4 - bl GetBattlerSpriteCoordAttr - adds r0, 0x8 - strh r0, [r5, 0x1E] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoordAttr - subs r0, 0x8 - strh r0, [r5, 0x20] - ldr r4, _080B38D4 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x4 - bl GetBattlerSpriteCoordAttr - adds r0, 0x8 - b _080B3956 - .align 2, 0 -_080B38D0: .4byte gBattleAnimAttacker -_080B38D4: .4byte gBattleAnimTarget -_080B38D8: - ldr r0, _080B391C @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0x1 - bne _080B392C - ldr r0, _080B3920 @ =0x0000fff6 - strh r0, [r5, 0x1C] - ldr r4, _080B3924 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x4 - bl GetBattlerSpriteCoordAttr - adds r0, 0x8 - strh r0, [r5, 0x1E] - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoordAttr - adds r0, 0x8 - strh r0, [r5, 0x20] - ldr r4, _080B3928 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x4 - bl GetBattlerSpriteCoordAttr - adds r0, 0x8 - strh r0, [r5, 0x22] - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoordAttr - adds r0, 0x8 - b _080B3962 - .align 2, 0 -_080B391C: .4byte gBattleAnimArgs -_080B3920: .4byte 0x0000fff6 -_080B3924: .4byte gBattleAnimTarget -_080B3928: .4byte gBattleAnimAttacker -_080B392C: - movs r0, 0xA - strh r0, [r5, 0x1C] - ldr r4, _080B3974 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x5 - bl GetBattlerSpriteCoordAttr - subs r0, 0x8 - strh r0, [r5, 0x1E] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoordAttr - subs r0, 0x8 - strh r0, [r5, 0x20] - ldr r4, _080B3978 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x5 - bl GetBattlerSpriteCoordAttr - subs r0, 0x8 -_080B3956: - strh r0, [r5, 0x22] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoordAttr - subs r0, 0x8 -_080B3962: - strh r0, [r5, 0x24] - movs r0, 0x6 - strh r0, [r5, 0xA] - ldr r0, _080B397C @ =sub_80B3980 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B3974: .4byte gBattleAnimAttacker -_080B3978: .4byte gBattleAnimTarget -_080B397C: .4byte sub_80B3980 - thumb_func_end sub_80B3834 - - thumb_func_start sub_80B3980 -sub_80B3980: @ 80B3980 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B39A0 @ =gTasks - adds r5, r0, r1 - movs r0, 0x8 - ldrsh r1, [r5, r0] - cmp r1, 0 - beq _080B39A4 - cmp r1, 0x1 - beq _080B3A18 - b _080B3A2C - .align 2, 0 -_080B39A0: .4byte gTasks -_080B39A4: - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - ble _080B3A2C - strh r1, [r5, 0xA] - ldr r0, _080B3A10 @ =gUnknown_83E7114 - movs r2, 0x1E - ldrsh r1, [r5, r2] - movs r3, 0x20 - ldrsh r2, [r5, r3] - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080B39F8 - ldr r0, _080B3A14 @ =gSprites - lsls r4, r1, 4 - adds r4, r1 - lsls r4, 2 - adds r4, r0 - movs r0, 0x10 - strh r0, [r4, 0x2E] - ldrh r0, [r5, 0x22] - strh r0, [r4, 0x32] - ldrh r0, [r5, 0x24] - strh r0, [r4, 0x36] - ldrh r0, [r5, 0x1C] - strh r0, [r4, 0x38] - adds r0, r4, 0 - bl InitAnimArcTranslation - ldrb r0, [r5, 0xC] - movs r1, 0x3 - ands r1, r0 - adds r0, r4, 0 - bl StartSpriteAffineAnim -_080B39F8: - ldrh r0, [r5, 0xC] - adds r0, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - bne _080B3A2C - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - b _080B3A2C - .align 2, 0 -_080B3A10: .4byte gUnknown_83E7114 -_080B3A14: .4byte gSprites -_080B3A18: - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x11 - ble _080B3A2C - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080B3A2C: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B3980 - - thumb_func_start sub_80B3A34 -sub_80B3A34: @ 80B3A34 - push {r4,lr} - adds r4, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080B3A52 - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl DestroySprite -_080B3A52: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B3A34 - - thumb_func_start sub_80B3A58 -sub_80B3A58: @ 80B3A58 - push {r4-r6,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080B3A90 @ =gTasks - adds r4, r1, r0 - ldr r0, _080B3A94 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerYCoordWithElevation - lsls r0, 24 - lsrs r1, r0, 24 - adds r0, r1, 0 - subs r0, 0x20 - strh r0, [r4, 0x24] - ldr r0, _080B3A98 @ =gBattleAnimArgs - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0x1 - beq _080B3AAE - cmp r0, 0x1 - bgt _080B3A9C - cmp r0, 0 - beq _080B3AA2 - b _080B3ACA - .align 2, 0 -_080B3A90: .4byte gTasks -_080B3A94: .4byte gBattleAnimTarget -_080B3A98: .4byte gBattleAnimArgs -_080B3A9C: - cmp r0, 0x2 - beq _080B3ABA - b _080B3ACA -_080B3AA2: - movs r0, 0x2 - strh r0, [r4, 0x1E] - movs r0, 0x5 - strh r0, [r4, 0x20] - movs r0, 0x40 - b _080B3AC2 -_080B3AAE: - movs r0, 0x2 - strh r0, [r4, 0x1E] - movs r0, 0x5 - strh r0, [r4, 0x20] - movs r0, 0xC0 - b _080B3AC2 -_080B3ABA: - movs r0, 0x4 - strh r0, [r4, 0x1E] - strh r0, [r4, 0x20] - movs r0, 0 -_080B3AC2: - strh r0, [r4, 0x22] - adds r0, r1, 0 - adds r0, 0x20 - strh r0, [r4, 0x26] -_080B3ACA: - movs r1, 0x24 - ldrsh r0, [r4, r1] - cmp r0, 0 - bge _080B3AD6 - movs r0, 0 - strh r0, [r4, 0x24] -_080B3AD6: - ldr r0, _080B3AF0 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriorityRank - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080B3AFC - ldr r0, _080B3AF4 @ =gBattle_BG1_X - ldrh r0, [r0] - strh r0, [r4, 0x1C] - ldr r0, _080B3AF8 @ =0x04000014 - b _080B3B04 - .align 2, 0 -_080B3AF0: .4byte gBattleAnimTarget -_080B3AF4: .4byte gBattle_BG1_X -_080B3AF8: .4byte 0x04000014 -_080B3AFC: - ldr r0, _080B3B64 @ =gBattle_BG2_X - ldrh r0, [r0] - strh r0, [r4, 0x1C] - ldr r0, _080B3B68 @ =0x04000018 -_080B3B04: - str r0, [sp] - ldrh r1, [r4, 0x24] - lsls r3, r1, 16 - asrs r1, r3, 16 - movs r2, 0x24 - ldrsh r0, [r4, r2] - adds r0, 0x40 - cmp r1, r0 - bgt _080B3B3E - ldr r5, _080B3B6C @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r6, r5, r0 -_080B3B1E: - asrs r3, 16 - lsls r1, r3, 1 - adds r2, r1, r5 - ldrh r0, [r4, 0x1C] - strh r0, [r2] - adds r1, r6 - ldrh r0, [r4, 0x1C] - strh r0, [r1] - adds r3, 0x1 - lsls r3, 16 - asrs r1, r3, 16 - movs r2, 0x24 - ldrsh r0, [r4, r2] - adds r0, 0x40 - cmp r1, r0 - ble _080B3B1E -_080B3B3E: - ldr r0, _080B3B70 @ =0xa2600001 - str r0, [sp, 0x4] - mov r1, sp - movs r2, 0 - movs r0, 0x1 - strb r0, [r1, 0x8] - mov r0, sp - strb r2, [r0, 0x9] - ldr r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - bl ScanlineEffect_SetParams - ldr r0, _080B3B74 @ =sub_80B3B78 - str r0, [r4] - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B3B64: .4byte gBattle_BG2_X -_080B3B68: .4byte 0x04000018 -_080B3B6C: .4byte gScanlineEffectRegBuffers -_080B3B70: .4byte 0xa2600001 -_080B3B74: .4byte sub_80B3B78 - thumb_func_end sub_80B3A58 - - thumb_func_start sub_80B3B78 -sub_80B3B78: @ 80B3B78 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080B3BA0 @ =gTasks - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _080B3C52 - cmp r0, 0x1 - bgt _080B3BA4 - cmp r0, 0 - beq _080B3BAA - b _080B3C6A - .align 2, 0 -_080B3BA0: .4byte gTasks -_080B3BA4: - cmp r0, 0x2 - beq _080B3C64 - b _080B3C6A -_080B3BAA: - ldrh r3, [r5, 0x22] - ldrh r4, [r5, 0x24] - movs r2, 0x24 - ldrsh r1, [r5, r2] - movs r2, 0x26 - ldrsh r0, [r5, r2] - cmp r1, r0 - bgt _080B3C42 - ldr r0, _080B3BF4 @ =gSineTable - mov r9, r0 - movs r7, 0x3 - ldr r1, _080B3BF8 @ =gScanlineEffectRegBuffers - mov r12, r1 - movs r2, 0xF0 - lsls r2, 3 - add r2, r12 - mov r8, r2 -_080B3BCC: - lsls r2, r3, 16 - asrs r0, r2, 15 - add r0, r9 - movs r3, 0 - ldrsh r0, [r0, r3] - movs r3, 0x20 - ldrsh r1, [r5, r3] - asrs r0, r1 - lsls r0, 16 - lsrs r1, r0, 16 - asrs r3, r0, 16 - adds r6, r2, 0 - cmp r3, 0 - ble _080B3BFC - ldrh r1, [r5, 0xA] - adds r0, r7, 0 - ands r0, r1 - adds r0, r3, r0 - b _080B3C08 - .align 2, 0 -_080B3BF4: .4byte gSineTable -_080B3BF8: .4byte gScanlineEffectRegBuffers -_080B3BFC: - cmp r3, 0 - bge _080B3C0C - ldrh r1, [r5, 0xA] - adds r0, r7, 0 - ands r0, r1 - subs r0, r3, r0 -_080B3C08: - lsls r0, 16 - lsrs r1, r0, 16 -_080B3C0C: - lsls r2, r4, 16 - asrs r2, 16 - lsls r3, r2, 1 - mov r0, r12 - adds r4, r3, r0 - ldrh r0, [r5, 0x1C] - lsls r1, 16 - asrs r1, 16 - adds r0, r1, r0 - strh r0, [r4] - add r3, r8 - ldrh r0, [r5, 0x1C] - adds r1, r0 - strh r1, [r3] - asrs r0, r6, 16 - ldrh r1, [r5, 0x1E] - adds r0, r1 - lsls r0, 16 - lsrs r3, r0, 16 - adds r2, 0x1 - lsls r2, 16 - lsrs r4, r2, 16 - asrs r2, 16 - movs r1, 0x26 - ldrsh r0, [r5, r1] - cmp r2, r0 - ble _080B3BCC -_080B3C42: - ldrh r0, [r5, 0xA] - adds r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x17 - ble _080B3C6A - b _080B3C58 -_080B3C52: - ldr r1, _080B3C60 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] -_080B3C58: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - b _080B3C6A - .align 2, 0 -_080B3C60: .4byte gScanlineEffect -_080B3C64: - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080B3C6A: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80B3B78 - - thumb_func_start sub_80B3C78 -sub_80B3C78: @ 80B3C78 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r4, r0, 24 - mov r8, r4 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080B3CAC @ =gTasks - adds r7, r0, r1 - bl AllocOamMatrix - lsls r0, 24 - lsrs r5, r0, 24 - mov r10, r5 - adds r6, r5, 0 - cmp r6, 0xFF - bne _080B3CB0 - adds r0, r4, 0 - bl DestroyAnimVisualTask - b _080B3D5A - .align 2, 0 -_080B3CAC: .4byte gTasks -_080B3CB0: - ldr r1, _080B3CD4 @ =gBattleAnimArgs - ldrb r0, [r1] - bl CloneBattlerSpriteWithBlend - lsls r0, 16 - lsrs r1, r0, 16 - mov r9, r1 - asrs r0, 16 - cmp r0, 0 - bge _080B3CD8 - adds r0, r5, 0 - bl FreeOamMatrix - mov r0, r8 - bl DestroyAnimVisualTask - b _080B3D5A - .align 2, 0 -_080B3CD4: .4byte gBattleAnimArgs -_080B3CD8: - ldr r2, _080B3D68 @ =gSprites - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r0, r2, 0 - adds r0, 0x1C - adds r0, r4, r0 - ldr r1, _080B3D6C @ =SpriteCallbackDummy - str r1, [r0] - adds r4, r2 - ldrb r0, [r4, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - movs r0, 0x1F - ands r6, r0 - lsls r2, r6, 1 - ldrb r1, [r4, 0x3] - movs r0, 0x3F - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, 0x3] - adds r2, r4, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - adds r1, r4, 0 - adds r1, 0x43 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - mov r1, r9 - lsls r0, r1, 24 - lsrs r0, 24 - movs r2, 0x80 - lsls r2, 1 - adds r1, r2, 0 - movs r3, 0 - bl SetSpriteRotScale - ldrb r3, [r4, 0x1] - lsrs r1, r3, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - lsls r3, 30 - lsrs r3, 30 - adds r0, r4, 0 - bl CalcCenterToCornerVec - ldr r1, _080B3D70 @ =gBattleAnimArgs - ldrb r0, [r1] - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r7, 0x22] - mov r0, r10 - strh r0, [r7, 0x24] - mov r1, r9 - strh r1, [r7, 0x26] - ldr r0, _080B3D74 @ =sub_80B3D78 - str r0, [r7] -_080B3D5A: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B3D68: .4byte gSprites -_080B3D6C: .4byte SpriteCallbackDummy -_080B3D70: .4byte gBattleAnimArgs -_080B3D74: .4byte sub_80B3D78 - thumb_func_end sub_80B3C78 - - thumb_func_start sub_80B3D78 -sub_80B3D78: @ 80B3D78 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080B3D9C @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080B3DFC - cmp r0, 0x1 - bgt _080B3DA0 - cmp r0, 0 - beq _080B3DAA - b _080B3E7C - .align 2, 0 -_080B3D9C: .4byte gTasks -_080B3DA0: - cmp r0, 0x2 - beq _080B3E4C - cmp r0, 0x3 - beq _080B3E6C - b _080B3E7C -_080B3DAA: - ldrh r0, [r4, 0xA] - adds r0, 0x4 - strh r0, [r4, 0xA] - ldr r1, _080B3DF8 @ =gSineTable - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - lsls r1, 16 - asrs r1, 17 - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - subs r0, r1 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xC - ldrsh r2, [r4, r1] - adds r1, r2, 0 - movs r3, 0 - bl SetSpriteRotScale - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x22] - lsls r1, 24 - lsrs r1, 24 - bl SetBattlerSpriteYOffsetFromOtherYScale - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0x30 - bne _080B3E7C - b _080B3E5E - .align 2, 0 -_080B3DF8: .4byte gSineTable -_080B3DFC: - ldrh r0, [r4, 0xA] - subs r0, 0x4 - strh r0, [r4, 0xA] - ldr r1, _080B3E48 @ =gSineTable - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - lsls r1, 16 - asrs r1, 17 - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - subs r0, r1 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xC - ldrsh r2, [r4, r1] - adds r1, r2, 0 - movs r3, 0 - bl SetSpriteRotScale - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x22] - lsls r1, 24 - lsrs r1, 24 - bl SetBattlerSpriteYOffsetFromOtherYScale - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080B3E7C - b _080B3E5E - .align 2, 0 -_080B3E48: .4byte gSineTable -_080B3E4C: - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080B3E68 @ =gSprites - adds r0, r1 - bl obj_delete_but_dont_free_vram -_080B3E5E: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080B3E7C - .align 2, 0 -_080B3E68: .4byte gSprites -_080B3E6C: - ldrh r0, [r4, 0x24] - lsls r0, 24 - lsrs r0, 24 - bl FreeOamMatrix - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080B3E7C: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B3D78 - - thumb_func_start sub_80B3E84 -sub_80B3E84: @ 80B3E84 - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _080B3EFC - cmp r0, 0x1 - bgt _080B3E9A - cmp r0, 0 - beq _080B3EA4 - b _080B3FA4 -_080B3E9A: - cmp r0, 0x2 - beq _080B3F2E - cmp r0, 0x3 - beq _080B3F8E - b _080B3FA4 -_080B3EA4: - ldr r4, _080B3EF8 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B3ED2 - ldrh r0, [r5, 0x22] - adds r0, 0xC - strh r0, [r5, 0x22] -_080B3ED2: - movs r0, 0x8 - strh r0, [r5, 0x30] - movs r1, 0xFD - lsls r1, 6 - movs r0, 0x50 - bl SetGpuReg - ldrh r0, [r5, 0x30] - movs r1, 0x10 - subs r1, r0 - lsls r1, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - b _080B3F26 - .align 2, 0 -_080B3EF8: .4byte gBattleAnimAttacker -_080B3EFC: - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080B3FA4 - movs r0, 0x40 - negs r0, r0 - bl BattleAnimAdjustPanning - adds r1, r0, 0 - lsls r1, 24 - asrs r1, 24 - movs r0, 0xC4 - bl PlaySE12WithPanning - adds r0, r5, 0 - movs r1, 0x1 - bl ChangeSpriteAffineAnim -_080B3F26: - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - b _080B3FA4 -_080B3F2E: - ldrh r0, [r5, 0x32] - adds r1, r0, 0x1 - strh r1, [r5, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080B3F72 - movs r0, 0 - strh r0, [r5, 0x32] - ldrh r1, [r5, 0x30] - subs r1, 0x1 - strh r1, [r5, 0x30] - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg - movs r1, 0x30 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080B3F72 - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - adds r2, r5, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] -_080B3F72: - movs r0, 0xE0 - lsls r0, 2 - adds r2, r0, 0 - ldrh r1, [r5, 0x34] - adds r2, r1 - lsls r1, r2, 16 - asrs r1, 24 - ldrh r0, [r5, 0x26] - subs r0, r1 - strh r0, [r5, 0x26] - movs r0, 0xFF - ands r2, r0 - strh r2, [r5, 0x34] - b _080B3FA4 -_080B3F8E: - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - adds r0, r5, 0 - bl DestroyAnimSprite -_080B3FA4: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80B3E84 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_835B488.s b/data/data_835B488.s index d909c4f64..7bacc0bc7 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -906,22 +906,7 @@ gUnknown_83E652C:: @ 83E652C .incbin "baserom.gba", 0x3E652C, 0x78 gUnknown_83E65A4:: @ 83E65A4 - .incbin "baserom.gba", 0x3E65A4, 0xA4C - -gUnknown_83E6FF0:: @ 83E6FF0 - .incbin "baserom.gba", 0x3E6FF0, 0x1C - -gUnknown_83E700C:: @ 83E700C - .incbin "baserom.gba", 0x3E700C, 0x20 - -gUnknown_83E702C:: @ 83E702C - .incbin "baserom.gba", 0x3E702C, 0x18 - -gUnknown_83E7044:: @ 83E7044 - .incbin "baserom.gba", 0x3E7044, 0xD0 - -gUnknown_83E7114:: @ 83E7114 - .incbin "baserom.gba", 0x3E7114, 0xD4 + .incbin "baserom.gba", 0x3E65A4, 0x838 .section .rodata.83E7CFC diff --git a/include/battle_anim.h b/include/battle_anim.h index 437b2c610..a63590dd1 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -78,6 +78,8 @@ extern struct OamData gOamData_83ACB50; extern struct OamData gOamData_83ACAB8; extern struct OamData gOamData_83ACA00; extern struct OamData gOamData_83ACBC0; +extern struct OamData gOamData_83ACB00; +extern struct OamData gOamData_83AC9E0; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); @@ -316,8 +318,13 @@ void AnimTask_GetSeismicTossDamageLevel(u8 taskId); void sub_80B5188(u8 taskId); void sub_80B51EC(u8 taskId); -// flying.s -void sub_80B1D3C(struct Sprite *sprite); +// psychic.c +void sub_80B3418(u8 taskId); +void sub_80B3480(u8 taskId); +void sub_80B3584(u8 taskId); +void sub_80B3834(u8 taskId); +void sub_80B3A58(u8 taskId); +void sub_80B3C78(u8 taskId); // dark.c void sub_80B78E0(u8 taskId); @@ -331,6 +338,9 @@ void AnimTask_MetallicShine(u8 taskId); void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId); void sub_80B8B38(u8 taskId); +// flying.s +void sub_80B1D3C(struct Sprite *sprite); + // battle_anim_utility_funcs.c void sub_80BA7F8(u8 taskId); void sub_80BA83C(u8 taskId); diff --git a/include/sprite.h b/include/sprite.h index 04c992dae..85722311f 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -116,6 +116,7 @@ union AffineAnimCmd struct AffineAnimFrameCmd frame; struct AffineAnimLoopCmd loop; struct AffineAnimJumpCmd jump; + struct AffineAnimEndCmdAlt end; }; #define AFFINEANIMCMDTYPE_LOOP 0x7FFD diff --git a/ld_script.txt b/ld_script.txt index 579b2cba1..db79e6d85 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -162,7 +162,7 @@ SECTIONS { asm/fighting.o(.text); asm/poison.o(.text); asm/flying.o(.text); - asm/psychic.o(.text); + src/psychic.o(.text); src/bug.o(.text); src/rock.o(.text); src/ghost.o(.text); @@ -423,6 +423,7 @@ SECTIONS { src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); data/data_835B488.o(.rodata.83DF09C); + src/psychic.o(.rodata); src/bug.o(.rodata); src/rock.o(.rodata); src/ghost.o(.rodata); diff --git a/src/bug.c b/src/bug.c index fc3e29379..9b8935744 100644 --- a/src/bug.c +++ b/src/bug.c @@ -17,7 +17,6 @@ static void sub_80B42E8(struct Sprite *sprite); static void sub_80B4344(struct Sprite *sprite); static void AnimMissileArcStep(struct Sprite *sprite); - static const union AffineAnimCmd gUnknown_83E71E8[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 30, 0), diff --git a/src/psychic.c b/src/psychic.c new file mode 100644 index 000000000..181f21810 --- /dev/null +++ b/src/psychic.c @@ -0,0 +1,1083 @@ +#include "global.h" +#include "battle_anim.h" +#include "gpu_regs.h" +#include "palette.h" +#include "sound.h" +#include "scanline_effect.h" +#include "trig.h" +#include "constants/songs.h" + +static void sub_80B2ECC(struct Sprite *sprite); +static void sub_80B31D0(struct Sprite *sprite); +static void sub_80B3278(struct Sprite *sprite); +static void sub_80B32F4(struct Sprite *sprite); +static void sub_80B37EC(struct Sprite *sprite); +static void sub_80B3A34(struct Sprite *sprite); +static void sub_80B3E84(struct Sprite *sprite); +static void sub_80B300C(struct Sprite *sprite); +static void sub_80B3044(struct Sprite *sprite); +static void sub_80B30B0(struct Sprite *sprite); +static void sub_80B3168(struct Sprite *sprite); +static void sub_80B3384(struct Sprite *sprite); +static void sub_80B33B8(struct Sprite *sprite); +static void sub_80B3454(u8 taskId); +static void sub_80B34DC(u8 taskId); +static void sub_80B3618(u8 taskId); +static void sub_80B3980(u8 taskId); +static void sub_80B3B78(u8 taskId); +static void sub_80B3D78(u8 taskId); + +static const union AffineAnimCmd gUnknown_83E6DDC[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFFE, 0xFFFE, -10, 120), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6DF4[] = +{ + gUnknown_83E6DDC, +}; + +const struct SpriteTemplate gUnknown_83E6DF8 = +{ + .tileTag = ANIM_TAG_SPIRAL, + .paletteTag = ANIM_TAG_SPIRAL, + .oam = &gOamData_83ACB60, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6DF4, + .callback = sub_8075D9C, +}; + +const struct SpriteTemplate gUnknown_83E6E10 = +{ + .tileTag = ANIM_TAG_GREEN_LIGHT_WALL, + .paletteTag = ANIM_TAG_GREEN_LIGHT_WALL, + .oam = &gOamData_83ACB00, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B2ECC, +}; + +const struct SpriteTemplate gUnknown_83E6E28 = +{ + .tileTag = ANIM_TAG_BLUE_LIGHT_WALL, + .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL, + .oam = &gOamData_83ACB00, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B2ECC, +}; + +const struct SpriteTemplate gUnknown_83E6E40 = +{ + .tileTag = ANIM_TAG_RED_LIGHT_WALL, + .paletteTag = ANIM_TAG_RED_LIGHT_WALL, + .oam = &gOamData_83ACB00, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B2ECC, +}; + +const struct SpriteTemplate gUnknown_83E6E58 = +{ + .tileTag = ANIM_TAG_GRAY_LIGHT_WALL, + .paletteTag = ANIM_TAG_GRAY_LIGHT_WALL, + .oam = &gOamData_83ACB00, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B2ECC, +}; + +const struct SpriteTemplate gUnknown_83E6E70 = +{ + .tileTag = ANIM_TAG_ORANGE_LIGHT_WALL, + .paletteTag = ANIM_TAG_ORANGE_LIGHT_WALL, + .oam = &gOamData_83ACB00, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B2ECC, +}; + +static const union AnimCmd gUnknown_83E6E88[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E6EA0[] = +{ + gUnknown_83E6E88, +}; + +const struct SpriteTemplate gUnknown_83E6EA4 = +{ + .tileTag = ANIM_TAG_SPARKLE_4, + .paletteTag = ANIM_TAG_SPARKLE_4, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E6EA0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B31D0, +}; + +static const union AnimCmd gUnknown_83E6EBC[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E6ED0[] = +{ + gUnknown_83E6EBC, +}; + +const struct SpriteTemplate gUnknown_83E6ED4 = +{ + .tileTag = ANIM_TAG_SPARKLE_3, + .paletteTag = ANIM_TAG_SPARKLE_3, + .oam = &gOamData_83AC9D0, + .anims = gUnknown_83E6ED0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B31D0, +}; + +const struct SpriteTemplate gUnknown_83E6EEC = +{ + .tileTag = ANIM_TAG_GOLD_RING, + .paletteTag = ANIM_TAG_GOLD_RING, + .oam = &gOamData_83ACA18, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = TranslateAnimSpriteToTargetMonLocation, +}; + +static const union AnimCmd gUnknown_83E6F04[] = +{ + ANIMCMD_FRAME(8, 60, .hFlip = TRUE), + ANIMCMD_FRAME(16, 5, .hFlip = TRUE), + ANIMCMD_FRAME(8, 5, .hFlip = TRUE), + ANIMCMD_FRAME(0, 5, .hFlip = TRUE), + ANIMCMD_FRAME(8, 22, .hFlip = TRUE), + ANIMCMD_LOOP(0), + ANIMCMD_FRAME(16, 5, .hFlip = TRUE), + ANIMCMD_FRAME(8, 5, .hFlip = TRUE), + ANIMCMD_FRAME(0, 5, .hFlip = TRUE), + ANIMCMD_FRAME(8, 5, .hFlip = TRUE), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(8, 22, .hFlip = TRUE), + ANIMCMD_FRAME(24, 3, .hFlip = TRUE), + ANIMCMD_FRAME(32, 3, .hFlip = TRUE), + ANIMCMD_FRAME(40, 22, .hFlip = TRUE), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_83E6F44[] = +{ + ANIMCMD_FRAME(8, 60), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(8, 22), + ANIMCMD_LOOP(0), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(8, 22), + ANIMCMD_FRAME(24, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(40, 22), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E6F84[] = +{ + gUnknown_83E6F04, + gUnknown_83E6F44, +}; + +const struct SpriteTemplate gUnknown_83E6F8C = +{ + .tileTag = ANIM_TAG_BENT_SPOON, + .paletteTag = ANIM_TAG_BENT_SPOON, + .oam = &gOamData_83ACA18, + .anims = gUnknown_83E6F84, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B3278, +}; + +static const union AnimCmd gUnknown_83E6FA4[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(16, 6), + ANIMCMD_FRAME(32, 6), + ANIMCMD_FRAME(48, 6), + ANIMCMD_FRAME(64, 6), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(96, 18), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E6FC4[] = +{ + gUnknown_83E6FA4, +}; + +static const union AffineAnimCmd gUnknown_83E6FC8[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 4, 4), + AFFINEANIMCMD_FRAME(0, 0, -4, 8), + AFFINEANIMCMD_FRAME(0, 0, 4, 4), + AFFINEANIMCMD_LOOP(2), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6FF0[] = +{ + gUnknown_83E6FC8, +}; + +const struct SpriteTemplate gUnknown_83E6FF4 = +{ + .tileTag = ANIM_TAG_AMNESIA, + .paletteTag = ANIM_TAG_AMNESIA, + .oam = &gOamData_83AC9D8, + .anims = gUnknown_83E6FC4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B32F4, +}; + +static const union AffineAnimCmd gUnknown_83E700C[] = +{ + AFFINEANIMCMD_FRAME(-8, 10, 0, 16), + AFFINEANIMCMD_FRAME(18, -18, 0, 16), + AFFINEANIMCMD_FRAME(-20, 16, 0, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E702C[] = +{ + AFFINEANIMCMD_FRAME(64, -4, 0, 20), + AFFINEANIMCMD_FRAME(0, 0, 0, -56), + AFFINEANIMCMD_END, +}; + +static const struct SpriteTemplate gUnknown_83E7044 = +{ + .tileTag = ANIM_TAG_HOLLOW_ORB, + .paletteTag = ANIM_TAG_HOLLOW_ORB, + .oam = &gOamData_83ACAF0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct SpriteTemplate gUnknown_83E705C = +{ + .tileTag = 0x280A, + .paletteTag = 0x280A, + .oam = &gOamData_83AC9E0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B37EC, +}; + +static const union AffineAnimCmd gUnknown_83E7074[] = +{ + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 8), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd gUnknown_83E708C[] = +{ + AFFINEANIMCMD_FRAME(0xF0, 0xF0, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd gUnknown_83E70B4[] = +{ + AFFINEANIMCMD_FRAME(0xD0, 0xD0, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 4), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd gUnknown_83E70DC[] = +{ + AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 2), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 8), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 6), + AFFINEANIMCMD_JUMP(1), +}; + +static const union AffineAnimCmd *const gUnknown_83E7104[] = +{ + gUnknown_83E7074, + gUnknown_83E708C, + gUnknown_83E70B4, + gUnknown_83E70DC, +}; + +static const struct SpriteTemplate gUnknown_83E7114 = +{ + .tileTag = ANIM_TAG_BLUEGREEN_ORB, + .paletteTag = ANIM_TAG_BLUEGREEN_ORB, + .oam = &gOamData_83ACA30, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7104, + .callback = sub_80B3A34, +}; + +static const union AffineAnimCmd gUnknown_83E712C[] = +{ + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), + AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 120), + AFFINEANIMCMD_END_ALT(1), +}; + +static const union AffineAnimCmd *const gUnknown_83E7144[] = +{ + gUnknown_83E712C, +}; + +const struct SpriteTemplate gUnknown_83E7148 = +{ + .tileTag = ANIM_TAG_WHITE_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_WHITE_CIRCLE_OF_LIGHT, + .oam = &gOamData_83ACBC0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E7144, + .callback = sub_8075D9C, +}; + +static const union AffineAnimCmd gUnknown_83E7160[] = +{ + AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 17), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 10), + AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 10), + AFFINEANIMCMD_LOOP(4), + AFFINEANIMCMD_LOOP(0), + AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 5), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 5), + AFFINEANIMCMD_LOOP(7), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E71B8[] = +{ + AFFINEANIMCMD_FRAME(0xFFEC, 0x18, 0, 15), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E71C8[] = +{ + gUnknown_83E7160, + gUnknown_83E71B8, +}; + +const struct SpriteTemplate gUnknown_83E71D0 = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_83ACBC0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E71C8, + .callback = sub_80B3E84, +}; + +static void sub_80B2ECC(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || IsContest()) + { + sprite->oam.priority = 2; + sprite->subpriority = 200; + } + if (!IsContest()) + { + u8 battlerCopy; + u8 battler = battlerCopy = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + u8 rank = GetBattlerSpriteBGPriorityRank(battler); + s32 var0 = 1; + u8 toBG_2 = (rank ^ var0) != 0; + + if (IsBattlerSpriteVisible(battler)) + MoveBattlerSpriteToBG(battler, toBG_2); + battler = BATTLE_PARTNER(battlerCopy); + if (IsBattlerSpriteVisible(battler)) + MoveBattlerSpriteToBG(battler, toBG_2 ^ var0); + } + if (!IsContest() && IsDoubleBattle()) + { + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + sprite->pos1.x = 72; + sprite->pos1.y = 80; + } + else + { + sprite->pos1.x = 176; + sprite->pos1.y = 40; + } + } + else + { + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + gBattleAnimArgs[1]; + } + if (IsContest()) + sprite->pos1.y += 9; + sprite->data[0] = 256 + IndexOfSpritePaletteTag(gBattleAnimArgs[2]) * 16; + sprite->callback = sub_80B300C; + sub_80B300C(sprite); +} + +static void sub_80B300C(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[3], 16 - sprite->data[3])); + if (sprite->data[3] == 13) + sprite->callback = sub_80B3044; + else + ++sprite->data[3]; +} + +static void sub_80B3044(struct Sprite *sprite) +{ + u16 color; + u16 startOffset; + s32 i; + + if (++sprite->data[1] == 2) + { + sprite->data[1] = 0; + startOffset = sprite->data[0]; + color = gPlttBufferFaded[startOffset + 8]; + for (i = 8; i > 0; --i) + gPlttBufferFaded[startOffset + i] = gPlttBufferFaded[startOffset + i - 1]; + gPlttBufferFaded[startOffset + 1] = color; + if (++sprite->data[2] == 16) + sprite->callback = sub_80B30B0; + } +} + +static void sub_80B30B0(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[3], 16 - sprite->data[3])); + if (--sprite->data[3] == -1) + { + if (!IsContest()) + { + u8 battlerCopy; + u8 battler = battlerCopy = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + + if (IsBattlerSpriteVisible(battler)) + gSprites[gBattlerSpriteIds[battler]].invisible = FALSE; + battler = BATTLE_PARTNER(battlerCopy); + if (IsBattlerSpriteVisible(battler)) + gSprites[gBattlerSpriteIds[battler]].invisible = FALSE; + } + sprite->invisible = TRUE; + sprite->callback = sub_80B3168; + } +} + +static void sub_80B3168(struct Sprite *sprite) +{ + if (!IsContest()) + { + u8 battlerCopy; + u8 battler = battlerCopy = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + u8 rank = GetBattlerSpriteBGPriorityRank(battler); + s32 var0 = 1; + u8 toBG_2 = (rank ^ var0) != 0; + + if (IsBattlerSpriteVisible(battler)) + sub_8073128(toBG_2); + battler = battlerCopy ^ 2; + if (IsBattlerSpriteVisible(battler)) + sub_8073128(toBG_2 ^ var0); + } + sprite->callback = DestroyAnimSprite; +} + +static void sub_80B31D0(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + int arg3 = gBattleAnimArgs[3]; + bool8 respectMonPicOffsets = FALSE; + if (arg3 == 0) + respectMonPicOffsets = TRUE; + if (!IsContest() && IsDoubleBattle()) + { + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + sprite->pos1.x = 72 - gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1] + 80; + } + else + { + sprite->pos1.x = gBattleAnimArgs[0] + 176; + sprite->pos1.y = gBattleAnimArgs[1] + 40; + } + } + else + { + if (gBattleAnimArgs[2] == 0) + InitSpritePosToAnimAttacker(sprite, respectMonPicOffsets); + else + InitSpritePosToAnimTarget(sprite, respectMonPicOffsets); + } + + ++sprite->data[0]; + } + else if (sprite->animEnded || sprite->affineAnimEnded) + { + DestroySpriteAndMatrix(sprite); + } +} + +static void sub_80B3278(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + StartSpriteAnim(sprite, 1); + sprite->pos1.x -= 40; + sprite->pos1.y += 10; + sprite->data[1] = -1; + } + else + { + sprite->pos1.x += 40; + sprite->pos1.y -= 10; + sprite->data[1] = 1; + } + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +static void sub_80B32F4(struct Sprite *sprite) +{ + s16 x = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 2; + s16 y = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / -2; + + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + x = -x; + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + x; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + y; + if (sprite->pos1.y < 16) + sprite->pos1.y = 16; + StoreSpriteCallbackInData6(sprite, sub_80B3384); + sprite->callback = RunStoredCallbackWhenAnimEnds; +} + +static void sub_80B3384(struct Sprite *sprite) +{ + sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL; + sprite->affineAnims = gUnknown_83E6FF0; + sprite->data[0] = 0; + InitSpriteAffineAnim(sprite); + sprite->callback = sub_80B33B8; +} + +static void sub_80B33B8(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (sprite->affineAnimEnded) + { + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + sprite->data[1] = 18; + ++sprite->data[0]; + } + break; + case 1: + if (--sprite->data[1] == -1) + DestroyAnimSprite(sprite); + break; + } +} + +void sub_80B3418(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + + task->data[0] = spriteId; + PrepareAffineAnimInTaskData(task, spriteId, gUnknown_83E700C); + task->func = sub_80B3454; +} + +static void sub_80B3454(u8 taskId) +{ + if (!RunAffineAnimFromTaskData(&gTasks[taskId])) + DestroyAnimVisualTask(taskId); +} + +void sub_80B3480(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); + + task->data[0] = spriteId; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? 4 : 8; + PrepareAffineAnimInTaskData(task, task->data[0], gUnknown_83E702C); + task->func = sub_80B34DC; +} + +static void sub_80B34DC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[1]) + { + case 0: + RunAffineAnimFromTaskData(task); + if (++task->data[2] > 19) + ++task->data[1]; + break; + case 1: + if (task->data[3] != 0) + { + gSprites[task->data[0]].pos2.y -= 8; + --task->data[3]; + } + else + { + gSprites[task->data[0]].invisible = TRUE; + gSprites[task->data[0]].pos1.x = 272; + ResetSpriteRotScale(task->data[0]); + DestroyAnimVisualTask(taskId); + } + break; + } +} + +void sub_80B3584(u8 taskId) +{ + u16 var0, var1; + struct Task *task = &gTasks[taskId]; + + task->data[3] = 16; + task->data[4] = 0; + task->data[13] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + var0 = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_WIDTH) / 3; + var1 = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_HEIGHT) / 3; + task->data[12] = var0 > var1 ? var0 : var1; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + task->func = sub_80B3618; +} + +static void sub_80B3618(u8 taskId) +{ + u16 i; + u8 spriteId; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 8) + { + task->data[1] = 0; + spriteId = CreateSprite(&gUnknown_83E7044, task->data[13], task->data[14], 0); + task->data[task->data[2] + 8] = spriteId; + if (spriteId != MAX_SPRITES) + { + switch (task->data[2]) + { + case 0: + gSprites[spriteId].pos2.x = task->data[12]; + gSprites[spriteId].pos2.y = -task->data[12]; + break; + case 1: + gSprites[spriteId].pos2.x = -task->data[12]; + gSprites[spriteId].pos2.y = task->data[12]; + break; + case 2: + gSprites[spriteId].pos2.x = task->data[12]; + gSprites[spriteId].pos2.y = task->data[12]; + break; + case 3: + gSprites[spriteId].pos2.x = -task->data[12]; + gSprites[spriteId].pos2.y = -task->data[12]; + break; + } + } + + if (++task->data[2] == 5) + ++task->data[0]; + } + break; + case 1: + if (task->data[1] & 1) + --task->data[3]; + else + ++task->data[4]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4])); + if (++task->data[1] == 32) + { + for (i = 8; i < 13; ++i) + if (task->data[i] != 64) + DestroySprite(&gSprites[task->data[i]]); + ++task->data[0]; + } + break; + case 2: + ++task->data[0]; + break; + case 3: + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80B37A4(struct Sprite *sprite) +{ + if (sprite->data[1] > sprite->data[0] - 10) + sprite->invisible = sprite->data[1] & 1; + if (sprite->data[1] == sprite->data[0]) + DestroyAnimSprite(sprite); + ++sprite->data[1]; +} + +static void sub_80B37EC(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + } + sprite->data[0] = gBattleAnimArgs[1]; + sprite->callback = sub_80B37A4; +} + +void sub_80B3834(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (IsContest()) + { + if (gBattleAnimArgs[0] == 1) + { + task->data[10] = -10; + task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_RIGHT) - 8; + task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP) + 8; + task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_RIGHT) - 8; + task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP) + 8; + } + else + { + task->data[10] = 10; + task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_LEFT) + 8; + task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM) - 8; + task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_LEFT) + 8; + task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_BOTTOM) - 8; + } + } + else + { + if (gBattleAnimArgs[0] == 1) + { + task->data[10] = -10; + task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_LEFT) + 8; + task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP) + 8; + task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_LEFT) + 8; + task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP) + 8; + } + else + { + task->data[10] = 10; + task->data[11] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_RIGHT) - 8; + task->data[12] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_BOTTOM) - 8; + task->data[13] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_RIGHT) - 8; + task->data[14] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_BOTTOM) - 8; + } + } + task->data[1] = 6; + task->func = sub_80B3980; +} + +static void sub_80B3980(u8 taskId) +{ + u8 spriteId; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 6) + { + task->data[1] = 0; + spriteId = CreateSprite(&gUnknown_83E7114, task->data[11], task->data[12], 0); + if (spriteId != 64) + { + gSprites[spriteId].data[0] = 16; + gSprites[spriteId].data[2] = task->data[13]; + gSprites[spriteId].data[4] = task->data[14]; + gSprites[spriteId].data[5] = task->data[10]; + InitAnimArcTranslation(&gSprites[spriteId]); + StartSpriteAffineAnim(&gSprites[spriteId], task->data[2] & 3); + } + + if (++task->data[2] == 12) + ++task->data[0]; + } + break; + case 1: + if (++task->data[1] > 17) + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80B3A34(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + { + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } +} + +void sub_80B3A58(u8 taskId) +{ + s16 i; + u8 yOffset; + struct ScanlineEffectParams scanlineParams; + struct Task *task = &gTasks[taskId]; + + yOffset = GetBattlerYCoordWithElevation(gBattleAnimTarget); + task->data[14] = yOffset - 32; + switch (gBattleAnimArgs[0]) + { + case 0: + task->data[11] = 2; + task->data[12] = 5; + task->data[13] = 64; + task->data[15] = yOffset + 32; + break; + case 1: + task->data[11] = 2; + task->data[12] = 5; + task->data[13] = 192; + task->data[15] = yOffset + 32; + break; + case 2: + task->data[11] = 4; + task->data[12] = 4; + task->data[13] = 0; + task->data[15] = yOffset + 32; + break; + } + if (task->data[14] < 0) + task->data[14] = 0; + if (GetBattlerSpriteBGPriorityRank(gBattleAnimTarget) == 1) + { + task->data[10] = gBattle_BG1_X; + scanlineParams.dmaDest = ®_BG1HOFS; + } + else + { + task->data[10] = gBattle_BG2_X; + scanlineParams.dmaDest = ®_BG2HOFS; + } + for (i = task->data[14]; i <= task->data[14] + 64; ++i) + { + gScanlineEffectRegBuffers[0][i] = task->data[10]; + gScanlineEffectRegBuffers[1][i] = task->data[10]; + } + scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + scanlineParams.initState = 1; + scanlineParams.unused9 = 0; + ScanlineEffect_SetParams(scanlineParams); + task->func = sub_80B3B78; +} + +static void sub_80B3B78(u8 taskId) +{ + s16 sineIndex, i; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + sineIndex = task->data[13]; + for (i = task->data[14]; i <= task->data[15]; ++i) + { + s16 var2 = (gSineTable[sineIndex] >> task->data[12]); + + if (var2 > 0) + var2 += (task->data[1] & 3); + else if (var2 < 0) + var2 -= (task->data[1] & 3); + gScanlineEffectRegBuffers[0][i] = task->data[10] + var2; + gScanlineEffectRegBuffers[1][i] = task->data[10] + var2; + sineIndex += task->data[11]; + } + if (++task->data[1] > 23) + ++task->data[0]; + break; + case 1: + gScanlineEffect.state = 3; + ++task->data[0]; + break; + case 2: + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80B3C78(u8 taskId) +{ + s16 spriteId; + s16 matrixNum; + struct Task *task = &gTasks[taskId]; + + matrixNum = AllocOamMatrix(); + if (matrixNum == 0xFF) + { + DestroyAnimVisualTask(taskId); + return; + } + spriteId = CloneBattlerSpriteWithBlend(gBattleAnimArgs[0]); + if (spriteId < 0) + { + FreeOamMatrix(matrixNum); + DestroyAnimVisualTask(taskId); + return; + } + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + gSprites[spriteId].oam.matrixNum = matrixNum; + gSprites[spriteId].affineAnimPaused = TRUE; + ++gSprites[spriteId].subpriority; + SetSpriteRotScale(spriteId, 256, 256, 0); + CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); + task->data[13] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + task->data[14] = matrixNum; + task->data[15] = spriteId; + task->func = sub_80B3D78; +} + +static void sub_80B3D78(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[1] += 4; + task->data[2] = 256 - (gSineTable[task->data[1]] >> 1); + SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0); + SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]); + if (task->data[1] == 48) + ++task->data[0]; + break; + case 1: + task->data[1] -= 4; + task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);; + SetSpriteRotScale(task->data[15], task->data[2], task->data[2], 0); + SetBattlerSpriteYOffsetFromOtherYScale(task->data[15], task->data[13]); + if (task->data[1] == 0) + ++task->data[0]; + break; + case 2: + obj_delete_but_dont_free_vram(&gSprites[task->data[15]]); + ++task->data[0]; + break; + case 3: + FreeOamMatrix(task->data[14]); + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80B3E84(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); + if (IsContest()) + sprite->pos1.y += 12; + sprite->data[1] = 8; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1])); + ++sprite->data[0]; + break; + case 1: + if (sprite->affineAnimEnded) + { + PlaySE12WithPanning(SE_W100, BattleAnimAdjustPanning(-64)); + ChangeSpriteAffineAnim(sprite, 1); + ++sprite->data[0]; + } + break; + case 2: + if (sprite->data[2]++ > 1) + { + sprite->data[2] = 0; + --sprite->data[1]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1])); + if (sprite->data[1] == 0) + { + ++sprite->data[0]; + sprite->invisible = TRUE; + } + } + sprite->data[3] += 0x380; + sprite->pos2.y -= sprite->data[3] >> 8; + sprite->data[3] &= 0xFF; + break; + case 3: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimSprite(sprite); + break; + } +} From b2f13ea37af3d291d198f55877df9fa3acae9e8b Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sat, 12 Oct 2019 06:52:41 +0800 Subject: [PATCH 14/25] trivial fixes --- include/battle_anim.h | 6 ++++++ src/pokemon.c | 1 - src/rock.c | 3 --- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/battle_anim.h b/include/battle_anim.h index a63590dd1..05a17bbd5 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -341,6 +341,12 @@ void sub_80B8B38(u8 taskId); // flying.s void sub_80B1D3C(struct Sprite *sprite); +// water.s +extern const union AnimCmd *const gUnknown_83E5958[]; + +// fire.s +extern const union AnimCmd *const gUnknown_83E5D48[]; + // battle_anim_utility_funcs.c void sub_80BA7F8(u8 taskId); void sub_80BA83C(u8 taskId); diff --git a/src/pokemon.c b/src/pokemon.c index 4685dcbcd..1159b1861 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -13,7 +13,6 @@ #include "event_data.h" #include "util.h" #include "pokemon_storage_system.h" -#include "data.h" #include "battle_gfx_sfx_util.h" #include "battle_controllers.h" #include "evolution_scene.h" diff --git a/src/rock.c b/src/rock.c index cc8da4034..4db903344 100644 --- a/src/rock.c +++ b/src/rock.c @@ -8,9 +8,6 @@ #include "trig.h" #include "constants/songs.h" -extern const union AnimCmd *const gUnknown_83E5958[]; -extern const union AnimCmd *const gUnknown_83E5D48[]; - static void sub_80B4634(struct Sprite *sprite); static void sub_80B46F8(struct Sprite *sprite); static void AnimDirtParticleAcrossScreen(struct Sprite *sprite); From ce18093251f35ad6369d9d42d84e8fe60d398891 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 11 Oct 2019 22:27:24 -0400 Subject: [PATCH 15/25] gitignore compiled song assembly files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a4182afc1..c060f2415 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ cmake-build-* ld_script_ruby.txt ld_script_sapphire.txt sound/**/*.bin +sound/songs/midi/*.s src/*.s src/data/items.h tags From c46e6fa3d923641c875c68027947896f78b68c1c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sat, 12 Oct 2019 11:46:11 +0800 Subject: [PATCH 16/25] flying --- Makefile | 1 + asm/flying.s | 2945 ----------------- asm/poison.s | 36 + data/data_835B488.s | 2 +- graphics/battle_anims/sprites/unk_83E6C18.pal | 19 + include/battle_anim.h | 9 +- ld_script.txt | 3 +- src/flying.c | 1289 ++++++++ 8 files changed, 1356 insertions(+), 2948 deletions(-) delete mode 100644 asm/flying.s create mode 100644 graphics/battle_anims/sprites/unk_83E6C18.pal create mode 100644 src/flying.c diff --git a/Makefile b/Makefile index 297cbb68b..548f0bb7f 100644 --- a/Makefile +++ b/Makefile @@ -191,6 +191,7 @@ $(C_BUILDDIR)/isagbprn.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/isagbprn.o: CFLAGS := -mthumb-interwork #$(C_BUILDDIR)/trainer_tower.o: CFLAGS += -ffreestanding +$(C_BUILDDIR)/flying.o: CFLAGS += -ffreestanding ifeq ($(NODEP),1) $(C_BUILDDIR)/%.o: c_dep := diff --git a/asm/flying.s b/asm/flying.s deleted file mode 100644 index 252a1a957..000000000 --- a/asm/flying.s +++ /dev/null @@ -1,2945 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80B18A0 -sub_80B18A0: @ 80B18A0 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - adds r0, 0xB - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x2E] - movs r1, 0x2E - ldrsh r0, [r4, r1] - movs r1, 0x4 - bl Sin - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x30] - adds r0, 0x30 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 24 - negs r0, r0 - strh r0, [r4, 0x26] - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080B18DC - adds r0, r4, 0 - bl DestroyAnimSprite -_080B18DC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B18A0 - - thumb_func_start sub_80B18E4 -sub_80B18E4: @ 80B18E4 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0 - bl InitSpritePosToAnimTarget - ldrh r0, [r4, 0x22] - adds r0, 0x14 - strh r0, [r4, 0x22] - movs r0, 0xBF - strh r0, [r4, 0x30] - ldr r1, _080B1908 @ =sub_80B190C - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B1908: .4byte sub_80B190C - thumb_func_end sub_80B18E4 - - thumb_func_start sub_80B190C -sub_80B190C: @ 80B190C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x20 - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x8 - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x30] - adds r0, 0x5 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x47 - bne _080B1946 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B1946: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B190C - - thumb_func_start sub_80B194C -sub_80B194C: @ 80B194C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080B197C @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - ldr r1, _080B1980 @ =gBattleAnimArgs - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x8] - ldrh r0, [r1] - strh r0, [r4, 0xA] - ldr r0, _080B1984 @ =0x00002719 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0xC] - ldr r0, _080B1988 @ =sub_80B198C - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B197C: .4byte gTasks -_080B1980: .4byte gBattleAnimArgs -_080B1984: .4byte 0x00002719 -_080B1988: .4byte sub_80B198C - thumb_func_end sub_80B194C - - thumb_func_start sub_80B198C -sub_80B198C: @ 80B198C - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r2, _080B1A0C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r3, r0, r2 - ldrh r0, [r3, 0x1C] - adds r1, r0, 0x1 - strh r1, [r3, 0x1C] - lsls r0, 16 - asrs r0, 16 - movs r4, 0xA - ldrsh r1, [r3, r4] - adds r7, r2, 0 - cmp r0, r1 - bne _080B19EA - movs r0, 0 - strh r0, [r3, 0x1C] - ldrb r0, [r3, 0xC] - ldr r2, _080B1A10 @ =gPlttBufferFaded - lsls r0, 4 - movs r3, 0x84 - lsls r3, 1 - adds r1, r0, r3 - lsls r1, 1 - adds r1, r2 - ldrh r6, [r1] - movs r4, 0x7 - mov r12, r0 - ldr r0, _080B1A14 @ =0x00000107 - add r0, r12 - lsls r0, 1 - adds r3, r0, r2 -_080B19D2: - ldrh r0, [r3] - strh r0, [r1] - subs r3, 0x2 - subs r1, 0x2 - subs r4, 0x1 - cmp r4, 0 - bgt _080B19D2 - ldr r0, _080B1A18 @ =0x00000101 - add r0, r12 - lsls r0, 1 - adds r0, r2 - strh r6, [r0] -_080B19EA: - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r7 - ldrh r1, [r0, 0x8] - subs r1, 0x1 - strh r1, [r0, 0x8] - lsls r1, 16 - cmp r1, 0 - bne _080B1A04 - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080B1A04: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B1A0C: .4byte gTasks -_080B1A10: .4byte gPlttBufferFaded -_080B1A14: .4byte 0x00000107 -_080B1A18: .4byte 0x00000101 - thumb_func_end sub_80B198C - - thumb_func_start sub_80B1A1C -sub_80B1A1C: @ 80B1A1C - push {r4-r6,lr} - adds r6, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r0, _080B1A88 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B1A3C - ldr r1, _080B1A8C @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_080B1A3C: - ldr r4, _080B1A8C @ =gBattleAnimArgs - ldrh r0, [r4, 0x8] - strh r0, [r6, 0x2E] - ldrh r0, [r6, 0x20] - strh r0, [r6, 0x30] - ldr r5, _080B1A90 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r4, 0x4] - adds r0, r1 - strh r0, [r6, 0x32] - ldrh r0, [r6, 0x22] - strh r0, [r6, 0x34] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r4, [r4, 0x6] - adds r0, r4 - strh r0, [r6, 0x36] - adds r0, r6, 0 - bl InitAnimLinearTranslation - ldr r0, _080B1A94 @ =RunStoredCallbackWhenAffineAnimEnds - str r0, [r6, 0x1C] - ldr r1, _080B1A98 @ =sub_80B1A9C - adds r0, r6, 0 - bl StoreSpriteCallbackInData6 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B1A88: .4byte gBattleAnimAttacker -_080B1A8C: .4byte gBattleAnimArgs -_080B1A90: .4byte gBattleAnimTarget -_080B1A94: .4byte RunStoredCallbackWhenAffineAnimEnds -_080B1A98: .4byte sub_80B1A9C - thumb_func_end sub_80B1A1C - - thumb_func_start sub_80B1A9C -sub_80B1A9C: @ 80B1A9C - push {r4,lr} - adds r4, r0, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - beq _080B1AB0 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B1AB0: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B1A9C - - thumb_func_start sub_80B1AB8 -sub_80B1AB8: @ 80B1AB8 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _080B1B54 @ =gBattleAnimAttacker - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B1AE4 - ldr r1, _080B1B58 @ =gBattleAnimArgs - ldrh r0, [r1] - negs r0, r0 - strh r0, [r1] - ldrh r0, [r1, 0x2] - negs r0, r0 - strh r0, [r1, 0x2] - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] - ldrh r0, [r1, 0x6] - negs r0, r0 - strh r0, [r1, 0x6] -_080B1AE4: - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080B1AFC - ldr r0, _080B1B58 @ =gBattleAnimArgs - ldrh r1, [r0, 0x2] - negs r1, r1 - strh r1, [r0, 0x2] - ldrh r1, [r0, 0x6] - negs r1, r1 - strh r1, [r0, 0x6] -_080B1AFC: - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - ldr r2, _080B1B58 @ =gBattleAnimArgs - ldrh r1, [r2] - ldrh r3, [r5, 0x20] - adds r1, r3 - strh r1, [r5, 0x20] - lsrs r0, 24 - ldrh r1, [r2, 0x2] - adds r0, r1 - strh r0, [r5, 0x22] - ldrh r0, [r2, 0x8] - strh r0, [r5, 0x2E] - movs r3, 0xC - ldrsh r0, [r2, r3] - cmp r0, 0 - bne _080B1B60 - ldr r4, _080B1B5C @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - b _080B1B72 - .align 2, 0 -_080B1B54: .4byte gBattleAnimAttacker -_080B1B58: .4byte gBattleAnimArgs -_080B1B5C: .4byte gBattleAnimTarget -_080B1B60: - ldr r0, _080B1BA0 @ =gBattleAnimTarget - ldrb r0, [r0] - adds r2, r5, 0 - adds r2, 0x32 - adds r3, r5, 0 - adds r3, 0x36 - movs r1, 0x1 - bl SetAverageBattlerPositions -_080B1B72: - ldr r4, _080B1BA4 @ =gBattleAnimArgs - ldrh r0, [r4, 0x4] - ldrh r1, [r5, 0x32] - adds r0, r1 - strh r0, [r5, 0x32] - ldrh r0, [r4, 0x6] - ldrh r3, [r5, 0x36] - adds r0, r3 - strh r0, [r5, 0x36] - ldr r0, _080B1BA8 @ =StartAnimLinearTranslation - str r0, [r5, 0x1C] - ldr r1, _080B1BAC @ =DestroyAnimSprite - adds r0, r5, 0 - bl StoreSpriteCallbackInData6 - ldrb r1, [r4, 0xA] - adds r0, r5, 0 - bl SeekSpriteAnim - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B1BA0: .4byte gBattleAnimTarget -_080B1BA4: .4byte gBattleAnimArgs -_080B1BA8: .4byte StartAnimLinearTranslation -_080B1BAC: .4byte DestroyAnimSprite - thumb_func_end sub_80B1AB8 - - thumb_func_start sub_80B1BB0 -sub_80B1BB0: @ 80B1BB0 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r1, _080B1BEC @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x30] - ldr r0, _080B1BF0 @ =sub_80B1BF8 - str r0, [r4, 0x1C] - movs r0, 0 - bl GetAnimBattlerSpriteId - ldr r2, _080B1BF4 @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B1BEC: .4byte gBattleAnimArgs -_080B1BF0: .4byte sub_80B1BF8 -_080B1BF4: .4byte gSprites - thumb_func_end sub_80B1BB0 - - thumb_func_start sub_80B1BF8 -sub_80B1BF8: @ 80B1BF8 - push {lr} - adds r2, r0, 0 - ldrh r1, [r2, 0x2E] - movs r3, 0x2E - ldrsh r0, [r2, r3] - cmp r0, 0 - ble _080B1C0C - subs r0, r1, 0x1 - strh r0, [r2, 0x2E] - b _080B1C1E -_080B1C0C: - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x32] - adds r0, r1 - strh r0, [r2, 0x32] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r2, 0x26] - subs r1, r0 - strh r1, [r2, 0x26] -_080B1C1E: - movs r3, 0x22 - ldrsh r0, [r2, r3] - movs r3, 0x26 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - bge _080B1C36 - adds r0, r2, 0 - bl DestroyAnimSprite -_080B1C36: - pop {r0} - bx r0 - thumb_func_end sub_80B1BF8 - - thumb_func_start sub_80B1C3C -sub_80B1C3C: @ 80B1C3C - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080B1C64 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B1C6C - movs r0, 0x88 - lsls r0, 1 - strh r0, [r5, 0x20] - ldr r0, _080B1C68 @ =0x0000ffe0 - strh r0, [r5, 0x22] - adds r0, r5, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - b _080B1C72 - .align 2, 0 -_080B1C64: .4byte gBattleAnimAttacker -_080B1C68: .4byte 0x0000ffe0 -_080B1C6C: - ldr r0, _080B1CB0 @ =0x0000ffe0 - strh r0, [r5, 0x20] - strh r0, [r5, 0x22] -_080B1C72: - ldr r0, _080B1CB4 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldr r4, _080B1CB8 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x32] - ldrh r0, [r5, 0x22] - strh r0, [r5, 0x34] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl InitAnimLinearTranslation - ldr r0, _080B1CBC @ =sub_80B1CC0 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B1CB0: .4byte 0x0000ffe0 -_080B1CB4: .4byte gBattleAnimArgs -_080B1CB8: .4byte gBattleAnimTarget -_080B1CBC: .4byte sub_80B1CC0 - thumb_func_end sub_80B1C3C - - thumb_func_start sub_80B1CC0 -sub_80B1CC0: @ 80B1CC0 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x1 - strh r0, [r4, 0x2E] - adds r0, r4, 0 - bl AnimTranslateLinear - ldrh r1, [r4, 0x34] - lsrs r0, r1, 8 - cmp r0, 0xC8 - bls _080B1CE8 - ldrh r0, [r4, 0x24] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - movs r0, 0 - strh r0, [r4, 0x24] - movs r0, 0xFF - ands r0, r1 - strh r0, [r4, 0x34] -_080B1CE8: - movs r1, 0x20 - ldrsh r0, [r4, r1] - movs r2, 0x24 - ldrsh r1, [r4, r2] - adds r0, r1 - adds r0, 0x20 - movs r1, 0x98 - lsls r1, 1 - cmp r0, r1 - bhi _080B1D0A - movs r1, 0x22 - ldrsh r0, [r4, r1] - movs r2, 0x26 - ldrsh r1, [r4, r2] - adds r0, r1 - cmp r0, 0xA0 - ble _080B1D30 -_080B1D0A: - movs r0, 0 - bl GetAnimBattlerSpriteId - ldr r2, _080B1D38 @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - adds r0, r4, 0 - bl DestroyAnimSprite -_080B1D30: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B1D38: .4byte gSprites - thumb_func_end sub_80B1CC0 - - thumb_func_start sub_80B1D3C -sub_80B1D3C: @ 80B1D3C - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - subs r1, r0, 0x1 - strh r1, [r4, 0x2E] - lsls r0, 16 - cmp r0, 0 - bgt _080B1D7C - ldrb r0, [r4, 0x1] - lsls r0, 30 - lsrs r0, 30 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B1D6E - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] -_080B1D6E: - adds r0, r4, 0 - bl DestroySprite - ldr r1, _080B1D84 @ =gAnimVisualTaskCount - ldrb r0, [r1] - subs r0, 0x1 - strb r0, [r1] -_080B1D7C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B1D84: .4byte gAnimVisualTaskCount - thumb_func_end sub_80B1D3C - - thumb_func_start sub_80B1D88 -sub_80B1D88: @ 80B1D88 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r7, r0, 0 - adds r5, r7, 0 - adds r5, 0x2E - ldr r0, _080B1DA8 @ =gBattleAnimArgs - ldrh r1, [r0, 0xE] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _080B1DB0 - ldr r0, _080B1DAC @ =gBattleAnimAttacker - b _080B1DB2 - .align 2, 0 -_080B1DA8: .4byte gBattleAnimArgs -_080B1DAC: .4byte gBattleAnimAttacker -_080B1DB0: - ldr r0, _080B1E5C @ =gBattleAnimTarget -_080B1DB2: - ldrb r6, [r0] - adds r0, r6, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B1DC8 - ldr r1, _080B1E60 @ =gBattleAnimArgs - ldrh r0, [r1] - negs r0, r0 - strh r0, [r1] -_080B1DC8: - adds r0, r6, 0 - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - ldr r4, _080B1E60 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r4] - adds r0, r1 - strh r0, [r7, 0x20] - adds r0, r6, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - ldrh r1, [r4, 0x2] - lsrs r0, 24 - adds r1, r0, r1 - strh r1, [r7, 0x22] - lsls r1, 8 - strh r1, [r5, 0x8] - ldrh r1, [r4, 0xC] - adds r0, r1 - lsls r0, 1 - ldrh r2, [r5, 0xE] - movs r1, 0x1 - ands r1, r2 - orrs r1, r0 - strh r1, [r5, 0xE] - ldrb r0, [r5] - movs r2, 0x4 - mov r8, r2 - mov r1, r8 - orrs r0, r1 - strb r0, [r5] - ldrh r0, [r4, 0x4] - ldrb r1, [r4, 0x4] - strh r1, [r5, 0x2] - lsls r0, 16 - lsrs r0, 24 - strh r0, [r5, 0xA] - ldrh r0, [r4, 0x6] - strh r0, [r5, 0x4] - ldrh r0, [r4, 0x8] - strh r0, [r5, 0x6] - ldrh r0, [r4, 0xA] - strh r0, [r5, 0xC] - subs r1, 0x40 - lsls r1, 16 - lsrs r1, 16 - cmp r1, 0x7F - bhi _080B1EBE - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B1E64 - adds r0, r6, 0 - bl GetBattlerSpriteBGPriority - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - lsls r0, 2 - ldrb r2, [r7, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r7, 0x5] - b _080B1E7C - .align 2, 0 -_080B1E5C: .4byte gBattleAnimTarget -_080B1E60: .4byte gBattleAnimArgs -_080B1E64: - adds r0, r6, 0 - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r7, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r7, 0x5] -_080B1E7C: - ldrb r1, [r5, 0xE] - movs r4, 0x2 - negs r4, r4 - adds r0, r4, 0 - ands r0, r1 - strb r0, [r5, 0xE] - movs r2, 0x4 - ldrsh r0, [r5, r2] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - bne _080B1F1E - adds r3, r7, 0 - adds r3, 0x3F - ldrb r2, [r3] - lsls r0, r2, 31 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - adds r0, r4, 0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - lsls r0, 31 - lsrs r0, 31 - adds r1, r7, 0 - adds r1, 0x2A - strb r0, [r1] - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - b _080B1F16 -_080B1EBE: - adds r0, r6, 0 - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r7, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r7, 0x5] - ldrb r0, [r5, 0xE] - movs r4, 0x1 - orrs r0, r4 - strb r0, [r5, 0xE] - movs r1, 0x4 - ldrsh r0, [r5, r1] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - beq _080B1F1E - adds r3, r7, 0 - adds r3, 0x3F - ldrb r2, [r3] - lsls r1, r2, 31 - lsrs r1, 31 - movs r0, 0x1 - eors r1, r0 - ands r1, r4 - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - lsls r0, 31 - lsrs r0, 31 - adds r1, r7, 0 - adds r1, 0x2A - strb r0, [r1] - ldrb r0, [r3] - mov r2, r8 - orrs r0, r2 -_080B1F16: - movs r1, 0x11 - negs r1, r1 - ands r0, r1 - strb r0, [r3] -_080B1F1E: - ldrh r1, [r5, 0x2] - lsrs r1, 6 - lsls r1, 4 - ldrb r2, [r5] - movs r0, 0xF - ands r0, r2 - orrs r0, r1 - strb r0, [r5] - ldr r3, _080B1F88 @ =gSineTable - ldrh r0, [r5, 0x2] - lsls r0, 1 - adds r0, r3 - movs r2, 0 - ldrsh r1, [r0, r2] - ldrb r0, [r5, 0xC] - muls r0, r1 - asrs r0, 8 - strh r0, [r7, 0x24] - ldrb r2, [r7, 0x3] - lsls r2, 26 - lsrs r2, 27 - movs r1, 0x24 - ldrsh r0, [r7, r1] - negs r0, r0 - asrs r0, 1 - ldrb r5, [r5, 0xA] - adds r0, r5 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r3 - ldrh r4, [r1] - ldr r1, _080B1F8C @ =gOamMatrices - lsls r2, 3 - adds r2, r1 - adds r0, 0x40 - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - strh r0, [r2, 0x6] - strh r0, [r2] - strh r4, [r2, 0x2] - lsls r0, r4, 16 - asrs r0, 16 - negs r0, r0 - strh r0, [r2, 0x4] - ldr r0, _080B1F90 @ =sub_80B1F94 - str r0, [r7, 0x1C] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B1F88: .4byte gSineTable -_080B1F8C: .4byte gOamMatrices -_080B1F90: .4byte sub_80B1F94 - thumb_func_end sub_80B1D88 - - thumb_func_start sub_80B1F94 -sub_80B1F94: @ 80B1F94 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r5, r0, 0 - movs r6, 0 - adds r4, r5, 0 - adds r4, 0x2E - ldrb r2, [r4] - movs r7, 0x1 - movs r0, 0x1 - mov r9, r0 - ands r0, r2 - cmp r0, 0 - beq _080B1FCE - ldrb r0, [r4, 0x1] - adds r1, r0, 0 - adds r1, 0xFF - strb r1, [r4, 0x1] - lsls r0, 24 - cmp r0, 0 - beq _080B1FC2 - b _080B24AA -_080B1FC2: - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - strb r0, [r4] - strb r6, [r4, 0x1] - b _080B24AA -_080B1FCE: - ldrh r0, [r4, 0x2] - lsrs r1, r0, 6 - mov r12, r0 - cmp r1, 0x1 - bne _080B1FDA - b _080B20FE -_080B1FDA: - cmp r1, 0x1 - bgt _080B1FE4 - cmp r1, 0 - beq _080B1FF2 - b _080B23F0 -_080B1FE4: - cmp r1, 0x2 - bne _080B1FEA - b _080B21F2 -_080B1FEA: - cmp r1, 0x3 - bne _080B1FF0 - b _080B22E6 -_080B1FF0: - b _080B23F0 -_080B1FF2: - lsls r1, r2, 24 - lsrs r0, r1, 28 - cmp r0, 0x1 - bne _080B2006 - movs r0, 0x8 - orrs r0, r2 - orrs r0, r7 - strb r0, [r4] - strb r6, [r4, 0x1] - b _080B20F4 -_080B2006: - lsrs r0, r1, 28 - cmp r0, 0x3 - bne _080B2028 - lsls r0, r2, 30 - lsrs r0, 31 - movs r1, 0x1 - eors r0, r1 - ands r0, r7 - lsls r0, 1 - movs r1, 0x3 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - orrs r1, r7 - strb r1, [r4] - strb r6, [r4, 0x1] - b _080B20F4 -_080B2028: - movs r0, 0x8 - ands r0, r2 - cmp r0, 0 - beq _080B20F4 - adds r3, r5, 0 - adds r3, 0x3F - ldrb r2, [r3] - lsls r1, r2, 31 - lsrs r1, 31 - movs r6, 0x1 - eors r1, r6 - ands r1, r7 - movs r0, 0x2 - negs r0, r0 - mov r8, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - lsls r0, 31 - lsrs r0, 31 - adds r1, r5, 0 - adds r1, 0x2A - strb r0, [r1] - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - movs r1, 0x11 - negs r1, r1 - ands r0, r1 - strb r0, [r3] - ldrb r1, [r4] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080B20E6 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B20B6 - ldrb r1, [r4, 0xE] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080B209C - ldrb r2, [r5, 0x5] - lsls r1, r2, 28 - lsrs r1, 30 - subs r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - b _080B20D4 -_080B209C: - ldrb r2, [r5, 0x5] - lsls r1, r2, 28 - lsrs r1, 30 - adds r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - b _080B20D4 -_080B20B6: - ldrb r1, [r4, 0xE] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080B20CA - adds r1, r5, 0 - adds r1, 0x43 - ldrb r0, [r1] - subs r0, 0xC - b _080B20D2 -_080B20CA: - adds r1, r5, 0 - adds r1, 0x43 - ldrb r0, [r1] - adds r0, 0xC -_080B20D2: - strb r0, [r1] -_080B20D4: - ldrb r2, [r4, 0xE] - lsls r0, r2, 31 - lsrs r0, 31 - eors r0, r6 - ands r0, r7 - mov r1, r8 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0xE] -_080B20E6: - ldrb r1, [r4] - movs r0, 0x9 - negs r0, r0 - ands r0, r1 - strb r0, [r4] - ldrh r1, [r4, 0x2] - mov r12, r1 -_080B20F4: - ldrb r1, [r4] - movs r0, 0xF - ands r0, r1 - strb r0, [r4] - b _080B23F0 -_080B20FE: - lsls r1, r2, 24 - lsrs r0, r1, 28 - cmp r0, 0 - bne _080B210C - movs r0, 0x8 - orrs r0, r2 - b _080B2114 -_080B210C: - lsrs r0, r1, 28 - cmp r0, 0x2 - bne _080B211C - adds r0, r2, 0 -_080B2114: - orrs r0, r7 - strb r0, [r4] - strb r6, [r4, 0x1] - b _080B21E8 -_080B211C: - movs r0, 0x8 - ands r0, r2 - cmp r0, 0 - beq _080B21E8 - adds r3, r5, 0 - adds r3, 0x3F - ldrb r2, [r3] - lsls r1, r2, 31 - lsrs r1, 31 - movs r6, 0x1 - eors r1, r6 - ands r1, r7 - movs r0, 0x2 - negs r0, r0 - mov r8, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - lsls r0, 31 - lsrs r0, 31 - adds r1, r5, 0 - adds r1, 0x2A - strb r0, [r1] - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - movs r1, 0x11 - negs r1, r1 - ands r0, r1 - strb r0, [r3] - ldrb r1, [r4] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080B21DA - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B21AA - ldrb r1, [r4, 0xE] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080B2190 - ldrb r2, [r5, 0x5] - lsls r1, r2, 28 - lsrs r1, 30 - subs r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - b _080B21C8 -_080B2190: - ldrb r2, [r5, 0x5] - lsls r1, r2, 28 - lsrs r1, 30 - adds r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - b _080B21C8 -_080B21AA: - ldrb r1, [r4, 0xE] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080B21BE - adds r1, r5, 0 - adds r1, 0x43 - ldrb r0, [r1] - subs r0, 0xC - b _080B21C6 -_080B21BE: - adds r1, r5, 0 - adds r1, 0x43 - ldrb r0, [r1] - adds r0, 0xC -_080B21C6: - strb r0, [r1] -_080B21C8: - ldrb r2, [r4, 0xE] - lsls r0, r2, 31 - lsrs r0, 31 - eors r0, r6 - ands r0, r7 - mov r1, r8 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0xE] -_080B21DA: - ldrb r1, [r4] - movs r0, 0x9 - negs r0, r0 - ands r0, r1 - strb r0, [r4] - ldrh r1, [r4, 0x2] - mov r12, r1 -_080B21E8: - ldrb r0, [r4] - movs r1, 0xF - ands r1, r0 - movs r0, 0x10 - b _080B23EC -_080B21F2: - lsls r1, r2, 24 - lsrs r0, r1, 28 - cmp r0, 0x3 - bne _080B2200 - movs r0, 0x8 - orrs r0, r2 - b _080B2208 -_080B2200: - lsrs r0, r1, 28 - cmp r0, 0x1 - bne _080B2210 - adds r0, r2, 0 -_080B2208: - orrs r0, r7 - strb r0, [r4] - strb r6, [r4, 0x1] - b _080B22DC -_080B2210: - movs r0, 0x8 - ands r0, r2 - cmp r0, 0 - beq _080B22DC - adds r3, r5, 0 - adds r3, 0x3F - ldrb r2, [r3] - lsls r1, r2, 31 - lsrs r1, 31 - movs r6, 0x1 - eors r1, r6 - ands r1, r7 - movs r0, 0x2 - negs r0, r0 - mov r8, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - lsls r0, 31 - lsrs r0, 31 - adds r1, r5, 0 - adds r1, 0x2A - strb r0, [r1] - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - movs r1, 0x11 - negs r1, r1 - ands r0, r1 - strb r0, [r3] - ldrb r1, [r4] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080B22CE - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B229E - ldrb r1, [r4, 0xE] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080B2284 - ldrb r2, [r5, 0x5] - lsls r1, r2, 28 - lsrs r1, 30 - subs r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - b _080B22BC -_080B2284: - ldrb r2, [r5, 0x5] - lsls r1, r2, 28 - lsrs r1, 30 - adds r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - b _080B22BC -_080B229E: - ldrb r1, [r4, 0xE] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080B22B2 - adds r1, r5, 0 - adds r1, 0x43 - ldrb r0, [r1] - subs r0, 0xC - b _080B22BA -_080B22B2: - adds r1, r5, 0 - adds r1, 0x43 - ldrb r0, [r1] - adds r0, 0xC -_080B22BA: - strb r0, [r1] -_080B22BC: - ldrb r2, [r4, 0xE] - lsls r0, r2, 31 - lsrs r0, 31 - eors r0, r6 - ands r0, r7 - mov r1, r8 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0xE] -_080B22CE: - ldrb r1, [r4] - movs r0, 0x9 - negs r0, r0 - ands r0, r1 - strb r0, [r4] - ldrh r1, [r4, 0x2] - mov r12, r1 -_080B22DC: - ldrb r0, [r4] - movs r1, 0xF - ands r1, r0 - movs r0, 0x20 - b _080B23EC -_080B22E6: - lsls r1, r2, 24 - lsrs r0, r1, 28 - cmp r0, 0x2 - bne _080B22F6 - movs r0, 0x8 - orrs r0, r2 - strb r0, [r4] - b _080B23E4 -_080B22F6: - lsrs r0, r1, 28 - cmp r0, 0 - bne _080B2318 - lsls r0, r2, 30 - lsrs r0, 31 - movs r1, 0x1 - eors r0, r1 - ands r0, r7 - lsls r0, 1 - movs r1, 0x3 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - orrs r1, r7 - strb r1, [r4] - strb r6, [r4, 0x1] - b _080B23E4 -_080B2318: - movs r0, 0x8 - ands r0, r2 - cmp r0, 0 - beq _080B23E4 - adds r3, r5, 0 - adds r3, 0x3F - ldrb r2, [r3] - lsls r1, r2, 31 - lsrs r1, 31 - movs r6, 0x1 - eors r1, r6 - ands r1, r7 - movs r0, 0x2 - negs r0, r0 - mov r8, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - lsls r0, 31 - lsrs r0, 31 - adds r1, r5, 0 - adds r1, 0x2A - strb r0, [r1] - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - movs r1, 0x11 - negs r1, r1 - ands r0, r1 - strb r0, [r3] - ldrb r1, [r4] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080B23D6 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B23A6 - ldrb r1, [r4, 0xE] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080B238C - ldrb r2, [r5, 0x5] - lsls r1, r2, 28 - lsrs r1, 30 - subs r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - b _080B23C4 -_080B238C: - ldrb r2, [r5, 0x5] - lsls r1, r2, 28 - lsrs r1, 30 - adds r1, 0x1 - movs r0, 0x3 - ands r1, r0 - lsls r1, 2 - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x5] - b _080B23C4 -_080B23A6: - ldrb r1, [r4, 0xE] - mov r0, r9 - ands r0, r1 - cmp r0, 0 - bne _080B23BA - adds r1, r5, 0 - adds r1, 0x43 - ldrb r0, [r1] - subs r0, 0xC - b _080B23C2 -_080B23BA: - adds r1, r5, 0 - adds r1, 0x43 - ldrb r0, [r1] - adds r0, 0xC -_080B23C2: - strb r0, [r1] -_080B23C4: - ldrb r2, [r4, 0xE] - lsls r0, r2, 31 - lsrs r0, 31 - eors r0, r6 - ands r0, r7 - mov r1, r8 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0xE] -_080B23D6: - ldrb r1, [r4] - movs r0, 0x9 - negs r0, r0 - ands r0, r1 - strb r0, [r4] - ldrh r1, [r4, 0x2] - mov r12, r1 -_080B23E4: - ldrb r0, [r4] - movs r1, 0xF - ands r1, r0 - movs r0, 0x30 -_080B23EC: - orrs r1, r0 - strb r1, [r4] -_080B23F0: - ldrb r1, [r4] - lsls r1, 30 - lsrs r1, 31 - adds r0, r4, 0 - adds r0, 0xC - adds r0, r1 - ldrb r1, [r0] - ldr r3, _080B2478 @ =gSineTable - mov r2, r12 - lsls r0, r2, 1 - adds r0, r3 - movs r2, 0 - ldrsh r0, [r0, r2] - muls r0, r1 - asrs r0, 8 - strh r0, [r5, 0x24] - ldrb r2, [r5, 0x3] - lsls r2, 26 - lsrs r2, 27 - movs r1, 0x24 - ldrsh r0, [r5, r1] - negs r0, r0 - asrs r0, 1 - ldrb r1, [r4, 0xA] - adds r0, r1 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r3 - ldrh r6, [r1] - ldr r1, _080B247C @ =gOamMatrices - lsls r2, 3 - adds r2, r1 - adds r0, 0x40 - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - strh r0, [r2, 0x6] - strh r0, [r2] - strh r6, [r2, 0x2] - lsls r0, r6, 16 - asrs r0, 16 - negs r0, r0 - strh r0, [r2, 0x4] - ldrh r0, [r4, 0x6] - ldrh r2, [r4, 0x8] - adds r0, r2 - strh r0, [r4, 0x8] - lsls r0, 16 - lsrs r0, 24 - strh r0, [r5, 0x22] - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - beq _080B2480 - ldrh r0, [r4, 0x4] - subs r1, 0x1 - ands r1, r0 - ldrh r0, [r4, 0x2] - subs r0, r1 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x2] - b _080B2490 - .align 2, 0 -_080B2478: .4byte gSineTable -_080B247C: .4byte gOamMatrices -_080B2480: - ldrh r0, [r4, 0x4] - ldr r1, _080B24B8 @ =0x00007fff - ands r1, r0 - ldrh r2, [r4, 0x2] - adds r1, r2 - movs r0, 0xFF - ands r1, r0 - strh r1, [r4, 0x2] -_080B2490: - movs r0, 0x22 - ldrsh r1, [r5, r0] - movs r2, 0x26 - ldrsh r0, [r5, r2] - adds r1, r0 - ldrh r0, [r4, 0xE] - lsrs r0, 1 - cmp r1, r0 - blt _080B24AA - movs r0, 0 - strh r0, [r5, 0x2E] - ldr r0, _080B24BC @ =sub_80B1D3C - str r0, [r5, 0x1C] -_080B24AA: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B24B8: .4byte 0x00007fff -_080B24BC: .4byte sub_80B1D3C - thumb_func_end sub_80B1F94 - - thumb_func_start sub_80B24C0 -sub_80B24C0: @ 80B24C0 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r0, _080B2508 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - ldr r5, _080B250C @ =gBattleAnimAttacker - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - ldr r0, _080B2510 @ =TranslateAnimSpriteToTargetMonLocation - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B2508: .4byte gBattleAnimTarget -_080B250C: .4byte gBattleAnimAttacker -_080B2510: .4byte TranslateAnimSpriteToTargetMonLocation - thumb_func_end sub_80B24C0 - - thumb_func_start sub_80B2514 -sub_80B2514: @ 80B2514 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r5, _080B2554 @ =gBattleAnimArgs - ldrh r0, [r5] - strh r0, [r4, 0x30] - ldrh r0, [r5, 0x2] - strh r0, [r4, 0x32] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x34] - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080B25C4 - ldr r0, _080B2558 @ =gBattlerPositions - ldr r1, _080B255C @ =gBattleAnimTarget - ldrb r2, [r1] - adds r0, r2, r0 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B2560 - adds r0, r2, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r5, [r5, 0x6] - adds r0, r5 - b _080B256E - .align 2, 0 -_080B2554: .4byte gBattleAnimArgs -_080B2558: .4byte gBattlerPositions -_080B255C: .4byte gBattleAnimTarget -_080B2560: - adds r0, r2, 0 - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x28 -_080B256E: - strh r0, [r4, 0x3C] - ldr r0, _080B259C @ =gBattleAnimArgs - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _080B25A4 - ldr r0, _080B25A0 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - lsls r0, 2 - ldrb r2, [r4, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x5] - b _080B25D8 - .align 2, 0 -_080B259C: .4byte gBattleAnimArgs -_080B25A0: .4byte gBattleAnimTarget -_080B25A4: - ldr r0, _080B25C0 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSpriteBGPriority - movs r1, 0x3 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - b _080B25D8 - .align 2, 0 -_080B25C0: .4byte gBattleAnimTarget -_080B25C4: - ldr r0, _080B267C @ =gBattleAnimTarget - ldrb r0, [r0] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r5, [r5, 0x6] - adds r0, r5 - strh r0, [r4, 0x3C] -_080B25D8: - ldr r5, _080B2680 @ =gSineTable - ldrh r3, [r4, 0x30] - movs r1, 0xFF - ands r1, r3 - lsls r0, r1, 1 - adds r0, r5 - ldrh r0, [r0] - movs r2, 0 - strh r0, [r4, 0x36] - adds r1, 0x40 - lsls r1, 1 - adds r1, r5 - ldrh r0, [r1] - negs r0, r0 - strh r0, [r4, 0x38] - strh r2, [r4, 0x3A] - strh r2, [r4, 0x26] - strh r2, [r4, 0x24] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r6, r0, 27 - lsls r3, 16 - lsrs r3, 24 - strh r3, [r4, 0x30] - bl Random - lsls r0, 16 - asrs r7, r0, 16 - movs r0, 0x80 - lsls r0, 8 - ands r0, r7 - cmp r0, 0 - beq _080B2622 - ldrh r1, [r4, 0x30] - movs r0, 0xFF - subs r0, r1 - strh r0, [r4, 0x30] -_080B2622: - movs r0, 0x30 - ldrsh r1, [r4, r0] - lsls r0, r1, 1 - adds r0, r5 - ldrh r0, [r0] - ldr r3, _080B2684 @ =gOamMatrices - lsls r2, r6, 3 - adds r2, r3 - adds r1, 0x40 - lsls r1, 1 - adds r1, r5 - ldrh r1, [r1] - strh r1, [r2, 0x6] - strh r1, [r2] - strh r0, [r2, 0x2] - lsls r0, 16 - asrs r0, 16 - negs r0, r0 - strh r0, [r2, 0x4] - adds r3, r4, 0 - adds r3, 0x3F - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - movs r1, 0x11 - negs r1, r1 - ands r0, r1 - strb r0, [r3] - movs r0, 0x1 - ands r0, r7 - cmp r0, 0 - beq _080B2672 - adds r2, r4, 0 - adds r2, 0x2A - movs r1, 0x1 - movs r0, 0x1 - strb r0, [r2] - ldrb r0, [r3] - orrs r0, r1 - strb r0, [r3] -_080B2672: - ldr r0, _080B2688 @ =sub_80B268C - str r0, [r4, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B267C: .4byte gBattleAnimTarget -_080B2680: .4byte gSineTable -_080B2684: .4byte gOamMatrices -_080B2688: .4byte sub_80B268C - thumb_func_end sub_80B2514 - - thumb_func_start sub_80B268C -sub_80B268C: @ 80B268C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r4, r0, 0 - adds r5, r4, 0 - adds r5, 0x2E - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - movs r1, 0 - mov r8, r1 - movs r7, 0 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _080B2770 - movs r2, 0x36 - ldrsh r1, [r4, r2] - movs r2, 0x3A - ldrsh r0, [r4, r2] - muls r0, r1 - asrs r6, r0, 8 - strh r6, [r4, 0x24] - movs r0, 0x38 - ldrsh r1, [r4, r0] - movs r2, 0x3A - ldrsh r0, [r4, r2] - muls r0, r1 - asrs r3, r0, 8 - strh r3, [r4, 0x26] - ldrh r2, [r4, 0x34] - movs r1, 0xFF - adds r0, r1, 0 - ands r0, r2 - ldrh r2, [r4, 0x3A] - adds r0, r2 - strh r0, [r4, 0x3A] - ldrh r2, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - ands r1, r2 - cmp r0, r1 - blt _080B2770 - ldrh r0, [r4, 0x20] - adds r0, r6 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x22] - adds r0, r3 - strh r0, [r4, 0x22] - strh r7, [r4, 0x24] - strh r7, [r4, 0x26] - mov r0, sp - adds r1, r5, 0 - movs r2, 0x10 - bl memcpy - adds r0, r5, 0 - movs r1, 0 - movs r2, 0x10 - bl memset - ldrh r0, [r4, 0x22] - lsls r0, 8 - strh r0, [r5, 0x8] - mov r0, sp - ldrh r0, [r0, 0x6] - lsrs r1, r0, 8 - strh r1, [r5, 0x6] - strh r7, [r5, 0x2] - mov r0, sp - ldrh r0, [r0, 0x2] - strh r0, [r5, 0xA] - adds r0, r4, 0 - adds r0, 0x2A - ldrb r0, [r0] - cmp r0, 0 - beq _080B2740 - movs r0, 0x8 - ands r1, r0 - cmp r1, 0 - beq _080B2738 - ldr r0, _080B2734 @ =0x00008001 - b _080B274E - .align 2, 0 -_080B2734: .4byte 0x00008001 -_080B2738: - ldr r0, _080B273C @ =0x00008002 - b _080B274E - .align 2, 0 -_080B273C: .4byte 0x00008002 -_080B2740: - movs r0, 0x8 - ands r1, r0 - cmp r1, 0 - beq _080B274C - movs r0, 0x1 - b _080B274E -_080B274C: - movs r0, 0x2 -_080B274E: - strh r0, [r5, 0x4] - mov r0, sp - ldrh r0, [r0, 0x4] - lsrs r0, 8 - strb r0, [r5, 0xC] - subs r0, 0x2 - strb r0, [r5, 0xD] - mov r0, sp - ldrh r1, [r0, 0xE] - lsls r1, 1 - ldrh r2, [r5, 0xE] - movs r0, 0x1 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0xE] - ldr r0, _080B277C @ =sub_80B1F94 - str r0, [r4, 0x1C] -_080B2770: - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B277C: .4byte sub_80B1F94 - thumb_func_end sub_80B268C - - thumb_func_start sub_80B2780 -sub_80B2780: @ 80B2780 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _080B2798 @ =gBattleAnimArgs - movs r1, 0x4 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B279C - adds r0, r5, 0 - movs r1, 0 - bl InitSpritePosToAnimAttacker - b _080B27A4 - .align 2, 0 -_080B2798: .4byte gBattleAnimArgs -_080B279C: - adds r0, r5, 0 - movs r1, 0 - bl InitSpritePosToAnimTarget -_080B27A4: - ldr r4, _080B280C @ =gBattleAnimArgs - movs r2, 0x4 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080B27BC - ldr r0, _080B2810 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080B27D2 -_080B27BC: - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _080B27D8 - ldr r0, _080B2814 @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080B27D8 -_080B27D2: - ldrh r0, [r5, 0x20] - adds r0, 0x8 - strh r0, [r5, 0x20] -_080B27D8: - ldr r4, _080B280C @ =gBattleAnimArgs - ldrb r1, [r4, 0x8] - adds r0, r5, 0 - bl SeekSpriteAnim - ldrh r0, [r5, 0x20] - subs r0, 0x20 - strh r0, [r5, 0x20] - ldr r0, _080B2818 @ =0x00000ccc - strh r0, [r5, 0x30] - ldrh r1, [r4, 0x8] - movs r0, 0xC - adds r2, r0, 0 - muls r2, r1 - adds r0, r2, 0 - ldrh r2, [r5, 0x24] - adds r0, r2 - strh r0, [r5, 0x24] - strh r1, [r5, 0x2E] - ldrh r0, [r4, 0x6] - strh r0, [r5, 0x3C] - ldr r0, _080B281C @ =sub_80B2820 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B280C: .4byte gBattleAnimArgs -_080B2810: .4byte gBattleAnimAttacker -_080B2814: .4byte gBattleAnimTarget -_080B2818: .4byte 0x00000ccc -_080B281C: .4byte sub_80B2820 - thumb_func_end sub_80B2780 - - thumb_func_start sub_80B2820 -sub_80B2820: @ 80B2820 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r4, 0x24] - adds r0, r1 - movs r1, 0 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6 - bne _080B284A - strh r1, [r4, 0x2E] - strh r1, [r4, 0x24] - adds r0, r4, 0 - bl StartSpriteAnim -_080B284A: - ldrh r0, [r4, 0x3C] - subs r0, 0x1 - strh r0, [r4, 0x3C] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080B2862 - adds r0, r4, 0 - bl DestroyAnimSprite -_080B2862: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B2820 - - thumb_func_start sub_80B2868 -sub_80B2868: @ 80B2868 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - ldr r1, _080B2900 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r7, r0, r1 - ldrh r0, [r7, 0x8] - movs r1, 0x1F - ands r0, r1 - cmp r0, 0 - bne _080B28E2 - ldr r1, _080B2904 @ =gAnimVisualTaskCount - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r1, 0x8 - ldrsh r0, [r7, r1] - movs r5, 0xD - negs r5, r5 - adds r1, r5, 0 - bl Sin - ldr r4, _080B2908 @ =gBattleAnimArgs - strh r0, [r4] - movs r1, 0x8 - ldrsh r0, [r7, r1] - adds r1, r5, 0 - bl Cos - strh r0, [r4, 0x2] - movs r0, 0x1 - strh r0, [r4, 0x4] - movs r0, 0x3 - strh r0, [r4, 0x6] - ldr r0, _080B290C @ =gUnknown_83E7C98 - mov r8, r0 - ldr r5, _080B2910 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - mov r0, r8 - adds r1, r4, 0 - movs r3, 0x3 - bl CreateSpriteAndAnimate -_080B28E2: - ldrh r0, [r7, 0x8] - adds r0, 0x8 - strh r0, [r7, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080B28F6 - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080B28F6: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B2900: .4byte gTasks -_080B2904: .4byte gAnimVisualTaskCount -_080B2908: .4byte gBattleAnimArgs -_080B290C: .4byte gUnknown_83E7C98 -_080B2910: .4byte gBattleAnimTarget - thumb_func_end sub_80B2868 - - thumb_func_start sub_80B2914 -sub_80B2914: @ 80B2914 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080B2926 - cmp r0, 0x1 - beq _080B2958 - b _080B296C -_080B2926: - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - movs r0, 0 - bl GetAnimBattlerSpriteId - ldr r2, _080B2954 @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080B296C - .align 2, 0 -_080B2954: .4byte gSprites -_080B2958: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080B296C - adds r0, r4, 0 - bl DestroyAnimSprite -_080B296C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B2914 - - thumb_func_start sub_80B2974 -sub_80B2974: @ 80B2974 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _080B29AC - cmp r0, 0x1 - bgt _080B298A - cmp r0, 0 - beq _080B2990 - b _080B29FE -_080B298A: - cmp r0, 0x2 - beq _080B29C0 - b _080B29FE -_080B2990: - ldr r0, _080B29A8 @ =gBattleAnimTarget - ldrb r0, [r0] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - negs r0, r0 - subs r0, 0x20 - strh r0, [r4, 0x26] - b _080B29B8 - .align 2, 0 -_080B29A8: .4byte gBattleAnimTarget -_080B29AC: - ldrh r0, [r4, 0x26] - adds r0, 0xA - strh r0, [r4, 0x26] - lsls r0, 16 - cmp r0, 0 - blt _080B29FE -_080B29B8: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - b _080B29FE -_080B29C0: - ldrh r0, [r4, 0x26] - subs r0, 0xA - strh r0, [r4, 0x26] - movs r2, 0x22 - ldrsh r0, [r4, r2] - movs r2, 0x26 - ldrsh r1, [r4, r2] - adds r0, r1 - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - bge _080B29FE - movs r0, 0 - bl GetAnimBattlerSpriteId - ldr r2, _080B2A04 @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - adds r0, r4, 0 - bl DestroyAnimSprite -_080B29FE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B2A04: .4byte gSprites - thumb_func_end sub_80B2974 - - thumb_func_start sub_80B2A08 -sub_80B2A08: @ 80B2A08 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r1, _080B2A44 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x30] - ldr r0, _080B2A48 @ =sub_80B2A50 - str r0, [r4, 0x1C] - movs r0, 0 - bl GetAnimBattlerSpriteId - ldr r2, _080B2A4C @ =gSprites - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B2A44: .4byte gBattleAnimArgs -_080B2A48: .4byte sub_80B2A50 -_080B2A4C: .4byte gSprites - thumb_func_end sub_80B2A08 - - thumb_func_start sub_80B2A50 -sub_80B2A50: @ 80B2A50 - push {lr} - adds r2, r0, 0 - ldrh r1, [r2, 0x2E] - movs r3, 0x2E - ldrsh r0, [r2, r3] - cmp r0, 0 - ble _080B2A64 - subs r0, r1, 0x1 - strh r0, [r2, 0x2E] - b _080B2AA8 -_080B2A64: - movs r1, 0x22 - ldrsh r0, [r2, r1] - movs r3, 0x26 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - ble _080B2A8A - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x32] - adds r0, r1 - strh r0, [r2, 0x32] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r2, 0x26] - subs r1, r0 - strh r1, [r2, 0x26] - b _080B2AA8 -_080B2A8A: - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] - ldrh r0, [r2, 0x34] - adds r1, r0, 0x1 - strh r1, [r2, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _080B2AA8 - ldr r0, _080B2AAC @ =sub_80B2AB0 - str r0, [r2, 0x1C] -_080B2AA8: - pop {r0} - bx r0 - .align 2, 0 -_080B2AAC: .4byte sub_80B2AB0 - thumb_func_end sub_80B2A50 - - thumb_func_start sub_80B2AB0 -sub_80B2AB0: @ 80B2AB0 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x32] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r2, 0x26] - adds r0, r1 - strh r0, [r2, 0x26] - movs r3, 0x22 - ldrsh r0, [r2, r3] - movs r3, 0x26 - ldrsh r1, [r2, r3] - adds r0, r1 - movs r1, 0x20 - negs r1, r1 - cmp r0, r1 - ble _080B2AE0 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r3] -_080B2AE0: - movs r1, 0x26 - ldrsh r0, [r2, r1] - cmp r0, 0 - ble _080B2AEE - adds r0, r2, 0 - bl DestroyAnimSprite -_080B2AEE: - pop {r0} - bx r0 - thumb_func_end sub_80B2AB0 - - thumb_func_start sub_80B2AF4 -sub_80B2AF4: @ 80B2AF4 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080B2B08 - cmp r0, 0x1 - beq _080B2B60 - b _080B2BCC -_080B2B08: - ldr r0, _080B2B18 @ =gBattleAnimArgs - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0 - bne _080B2B20 - ldr r4, _080B2B1C @ =gBattleAnimAttacker - b _080B2B22 - .align 2, 0 -_080B2B18: .4byte gBattleAnimArgs -_080B2B1C: .4byte gBattleAnimAttacker -_080B2B20: - ldr r4, _080B2B5C @ =gBattleAnimTarget -_080B2B22: - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] - movs r0, 0 - movs r3, 0x80 - lsls r3, 2 - strh r3, [r5, 0x30] - movs r2, 0x80 - lsls r2, 1 - str r0, [sp] - adds r0, r5, 0 - movs r1, 0 - bl TrySetSpriteRotScale - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - b _080B2BCC - .align 2, 0 -_080B2B5C: .4byte gBattleAnimTarget -_080B2B60: - movs r1, 0x32 - ldrsh r0, [r5, r1] - cmp r0, 0xB - bgt _080B2B6E - ldrh r0, [r5, 0x30] - subs r0, 0x28 - b _080B2B72 -_080B2B6E: - ldrh r0, [r5, 0x30] - adds r0, 0x28 -_080B2B72: - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x32] - adds r0, 0x1 - movs r1, 0 - strh r0, [r5, 0x32] - movs r2, 0x80 - lsls r2, 1 - movs r0, 0x30 - ldrsh r3, [r5, r0] - str r1, [sp] - adds r0, r5, 0 - bl TrySetSpriteRotScale - ldrb r1, [r5, 0x3] - lsls r1, 26 - lsrs r1, 27 - movs r0, 0xF4 - lsls r0, 6 - ldr r2, _080B2BD4 @ =gOamMatrices - lsls r1, 3 - adds r1, r2 - movs r2, 0x6 - ldrsh r1, [r1, r2] - bl __divsi3 - adds r1, r0, 0x1 - cmp r1, 0x80 - ble _080B2BAC - movs r1, 0x80 -_080B2BAC: - movs r0, 0x40 - subs r0, r1 - lsrs r1, r0, 31 - adds r0, r1 - asrs r1, r0, 1 - strh r1, [r5, 0x26] - movs r1, 0x32 - ldrsh r0, [r5, r1] - cmp r0, 0x18 - bne _080B2BCC - adds r0, r5, 0 - bl sub_8075AD8 - adds r0, r5, 0 - bl DestroyAnimSprite -_080B2BCC: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B2BD4: .4byte gOamMatrices - thumb_func_end sub_80B2AF4 - - thumb_func_start sub_80B2BD8 -sub_80B2BD8: @ 80B2BD8 - push {r4,r5,lr} - adds r5, r0, 0 - bl Random - ldr r4, _080B2BFC @ =0x000001ff - ands r4, r0 - bl Random - movs r1, 0x7F - ands r1, r0 - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _080B2C00 - movs r2, 0xB8 - lsls r2, 2 - adds r0, r4, r2 - b _080B2C08 - .align 2, 0 -_080B2BFC: .4byte 0x000001ff -_080B2C00: - movs r2, 0xB8 - lsls r2, 2 - adds r0, r2, 0 - subs r0, r4 -_080B2C08: - strh r0, [r5, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080B2C1C - movs r2, 0xE0 - lsls r2, 2 - adds r0, r2, 0 - adds r0, r1, r0 - b _080B2C24 -_080B2C1C: - movs r2, 0xE0 - lsls r2, 2 - adds r0, r2, 0 - subs r0, r1 -_080B2C24: - strh r0, [r5, 0x30] - ldr r2, _080B2C4C @ =gBattleAnimArgs - ldrh r0, [r2] - strh r0, [r5, 0x32] - lsls r0, 16 - cmp r0, 0 - beq _080B2C40 - ldrb r0, [r5, 0x3] - movs r1, 0x3F - negs r1, r1 - ands r1, r0 - movs r0, 0x10 - orrs r1, r0 - strb r1, [r5, 0x3] -_080B2C40: - movs r1, 0x2 - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _080B2C54 - ldr r4, _080B2C50 @ =gBattleAnimAttacker - b _080B2C56 - .align 2, 0 -_080B2C4C: .4byte gBattleAnimArgs -_080B2C50: .4byte gBattleAnimAttacker -_080B2C54: - ldr r4, _080B2C80 @ =gBattleAnimTarget -_080B2C56: - ldrb r0, [r4] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x20 - strh r0, [r5, 0x22] - ldr r0, _080B2C84 @ =sub_80B2C88 - str r0, [r5, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B2C80: .4byte gBattleAnimTarget -_080B2C84: .4byte sub_80B2C88 - thumb_func_end sub_80B2BD8 - - thumb_func_start sub_80B2C88 -sub_80B2C88: @ 80B2C88 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080B2CA0 - ldrh r3, [r4, 0x2E] - lsls r0, r3, 16 - asrs r0, 24 - ldrh r1, [r4, 0x24] - adds r0, r1 - b _080B2CAA -_080B2CA0: - ldrh r3, [r4, 0x2E] - lsls r1, r3, 16 - asrs r1, 24 - ldrh r0, [r4, 0x24] - subs r0, r1 -_080B2CAA: - strh r0, [r4, 0x24] - ldrh r2, [r4, 0x30] - lsls r1, r2, 16 - asrs r1, 24 - ldrh r0, [r4, 0x26] - subs r0, r1 - strh r0, [r4, 0x26] - strh r3, [r4, 0x2E] - adds r0, r2, 0 - subs r0, 0x20 - strh r0, [r4, 0x30] - lsls r0, r3, 16 - cmp r0, 0 - bge _080B2CCA - movs r0, 0 - strh r0, [r4, 0x2E] -_080B2CCA: - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1F - bne _080B2CDE - adds r0, r4, 0 - bl DestroyAnimSprite -_080B2CDE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B2C88 - - thumb_func_start sub_80B2CE4 -sub_80B2CE4: @ 80B2CE4 - movs r1, 0 - strh r1, [r0, 0x3A] - movs r1, 0x40 - strh r1, [r0, 0x3C] - ldr r1, _080B2CF4 @ =sub_80B2CF8 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080B2CF4: .4byte sub_80B2CF8 - thumb_func_end sub_80B2CE4 - - thumb_func_start sub_80B2CF8 -sub_80B2CF8: @ 80B2CF8 - push {lr} - adds r3, r0, 0 - movs r0, 0x2E - ldrsh r1, [r3, r0] - cmp r1, 0 - beq _080B2D0A - cmp r1, 0x1 - beq _080B2D58 - b _080B2D5E -_080B2D0A: - ldrh r0, [r3, 0x30] - adds r0, 0x1 - strh r0, [r3, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x8 - ble _080B2D5E - strh r1, [r3, 0x30] - movs r1, 0x3E - adds r1, r3 - mov r12, r1 - ldrb r2, [r1] - lsls r0, r2, 29 - lsrs r0, 31 - movs r1, 0x1 - eors r1, r0 - lsls r1, 2 - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - ldrh r0, [r3, 0x32] - adds r0, 0x1 - strh r0, [r3, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _080B2D5E - ldrb r1, [r1] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080B2D5E - ldrh r0, [r3, 0x2E] - adds r0, 0x1 - strh r0, [r3, 0x2E] - b _080B2D5E -_080B2D58: - adds r0, r3, 0 - bl DestroyAnimSprite -_080B2D5E: - pop {r0} - bx r0 - thumb_func_end sub_80B2CF8 - - thumb_func_start sub_80B2D64 -sub_80B2D64: @ 80B2D64 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x4 - mov r8, r0 - ldrh r4, [r0, 0x20] - ldrh r5, [r0, 0x22] - ldr r6, _080B2E18 @ =gBattleAnimAttacker - ldrb r0, [r6] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r1, r8 - strh r0, [r1, 0x20] - ldrb r0, [r6] - movs r1, 0x3 - bl GetBattlerSpriteCoord - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - mov r2, r8 - strh r6, [r2, 0x22] - ldrh r0, [r2, 0x20] - mov r9, r0 - mov r1, r9 - lsls r0, r1, 4 - strh r0, [r2, 0x36] - lsls r0, r6, 4 - strh r0, [r2, 0x38] - lsls r4, 16 - asrs r4, 16 - movs r1, 0x20 - ldrsh r0, [r2, r1] - subs r0, r4, r0 - lsls r0, 4 - movs r1, 0xC - bl __divsi3 - mov r2, r8 - strh r0, [r2, 0x3A] - lsls r5, 16 - asrs r5, 16 - movs r1, 0x22 - ldrsh r0, [r2, r1] - subs r0, r5, r0 - lsls r0, 4 - movs r1, 0xC - bl __divsi3 - mov r2, r8 - strh r0, [r2, 0x3C] - mov r0, r9 - subs r4, r0 - lsls r4, 16 - asrs r4, 16 - subs r5, r6 - lsls r5, 16 - asrs r5, 16 - adds r0, r4, 0 - adds r1, r5, 0 - bl ArcTan2Neg - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 24 - adds r0, r1 - lsrs r0, 16 - movs r3, 0x80 - lsls r3, 1 - str r0, [sp] - mov r0, r8 - movs r1, 0x1 - adds r2, r3, 0 - bl TrySetSpriteRotScale - ldr r0, _080B2E1C @ =sub_80B2E20 - mov r2, r8 - str r0, [r2, 0x1C] - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B2E18: .4byte gBattleAnimAttacker -_080B2E1C: .4byte sub_80B2E20 - thumb_func_end sub_80B2D64 - - thumb_func_start sub_80B2E20 -sub_80B2E20: @ 80B2E20 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x3A] - ldrh r1, [r2, 0x36] - adds r0, r1 - strh r0, [r2, 0x36] - ldrh r1, [r2, 0x3C] - ldrh r3, [r2, 0x38] - adds r1, r3 - strh r1, [r2, 0x38] - lsls r0, 16 - asrs r0, 20 - strh r0, [r2, 0x20] - lsls r1, 16 - asrs r3, r1, 20 - strh r3, [r2, 0x22] - adds r0, 0x2D - lsls r0, 16 - movs r1, 0xA5 - lsls r1, 17 - cmp r0, r1 - bhi _080B2E5A - adds r1, r3, 0 - cmp r1, 0x9D - bgt _080B2E5A - movs r0, 0x2D - negs r0, r0 - cmp r1, r0 - bge _080B2E60 -_080B2E5A: - adds r0, r2, 0 - bl DestroySpriteAndMatrix -_080B2E60: - pop {r0} - bx r0 - thumb_func_end sub_80B2E20 - - thumb_func_start sub_80B2E64 -sub_80B2E64: @ 80B2E64 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080B2E94 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080B2E9C - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B2E98 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - b _080B2EBA - .align 2, 0 -_080B2E94: .4byte gBattleAnimArgs -_080B2E98: .4byte gSprites -_080B2E9C: - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B2EC8 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 -_080B2EBA: - strb r0, [r1] - adds r0, r4, 0 - bl DestroyAnimVisualTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B2EC8: .4byte gSprites - thumb_func_end sub_80B2E64 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/poison.s b/asm/poison.s index e80bd01af..0028cf7d8 100644 --- a/asm/poison.s +++ b/asm/poison.s @@ -323,4 +323,40 @@ _080B1898: .4byte gBattleAnimAttacker _080B189C: .4byte sub_80B18A0 thumb_func_end sub_80B1838 + thumb_func_start sub_80B18A0 +sub_80B18A0: @ 80B18A0 + push {r4,lr} + adds r4, r0, 0 + ldrh r0, [r4, 0x2E] + adds r0, 0xB + movs r1, 0xFF + ands r0, r1 + strh r0, [r4, 0x2E] + movs r1, 0x2E + ldrsh r0, [r4, r1] + movs r1, 0x4 + bl Sin + strh r0, [r4, 0x24] + ldrh r0, [r4, 0x30] + adds r0, 0x30 + strh r0, [r4, 0x30] + lsls r0, 16 + asrs r0, 24 + negs r0, r0 + strh r0, [r4, 0x26] + adds r0, r4, 0 + adds r0, 0x3F + ldrb r1, [r0] + movs r0, 0x20 + ands r0, r1 + cmp r0, 0 + beq _080B18DC + adds r0, r4, 0 + bl DestroyAnimSprite +_080B18DC: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_80B18A0 + .align 2, 0 @ Don't pad with nop. diff --git a/data/data_835B488.s b/data/data_835B488.s index 7bacc0bc7..2766f0eeb 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -906,7 +906,7 @@ gUnknown_83E652C:: @ 83E652C .incbin "baserom.gba", 0x3E652C, 0x78 gUnknown_83E65A4:: @ 83E65A4 - .incbin "baserom.gba", 0x3E65A4, 0x838 + .incbin "baserom.gba", 0x3E65A4, 0x544 .section .rodata.83E7CFC diff --git a/graphics/battle_anims/sprites/unk_83E6C18.pal b/graphics/battle_anims/sprites/unk_83E6C18.pal new file mode 100644 index 000000000..5e8dc6abe --- /dev/null +++ b/graphics/battle_anims/sprites/unk_83E6C18.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +106 148 139 +148 148 255 +189 197 255 +222 222 255 +238 238 255 +238 246 255 +255 255 255 +238 246 255 +255 255 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +205 213 255 +205 205 255 +230 230 255 diff --git a/include/battle_anim.h b/include/battle_anim.h index 05a17bbd5..feaa8816b 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -80,6 +80,9 @@ extern struct OamData gOamData_83ACA00; extern struct OamData gOamData_83ACBC0; extern struct OamData gOamData_83ACB00; extern struct OamData gOamData_83AC9E0; +extern struct OamData gOamData_83ACA20; +extern struct OamData gOamData_83ACA80; +extern struct OamData gOamData_83ACAA0; void ClearBattleAnimationVars(void); void DoMoveAnim(u16 move); @@ -284,6 +287,8 @@ void sub_8099A78(u8 taskId); void sub_8099BD4(u8 taskId); // normal.c +extern const struct SpriteTemplate gUnknown_83E7C98; + u32 UnpackSelectedBattleAnimPalettes(s16 selector); void sub_80B9BDC(u8 taskId); void sub_80B9CE4(u8 taskId); @@ -338,8 +343,10 @@ void AnimTask_MetallicShine(u8 taskId); void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId); void sub_80B8B38(u8 taskId); -// flying.s +// flying.c +void sub_80B194C(u8 taskId); void sub_80B1D3C(struct Sprite *sprite); +void sub_80B2868(u8 taskId); // water.s extern const union AnimCmd *const gUnknown_83E5958[]; diff --git a/ld_script.txt b/ld_script.txt index db79e6d85..6fb827d8d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -161,7 +161,7 @@ SECTIONS { asm/ice.o(.text); asm/fighting.o(.text); asm/poison.o(.text); - asm/flying.o(.text); + src/flying.o(.text); src/psychic.o(.text); src/bug.o(.text); src/rock.o(.text); @@ -423,6 +423,7 @@ SECTIONS { src/battle_anim_mon_movement.o(.rodata); src/item.o(.rodata); data/data_835B488.o(.rodata.83DF09C); + src/flying.o(.rodata); src/psychic.o(.rodata); src/bug.o(.rodata); src/rock.o(.rodata); diff --git a/src/flying.c b/src/flying.c new file mode 100644 index 000000000..8c3ccb52a --- /dev/null +++ b/src/flying.c @@ -0,0 +1,1289 @@ +#include "global.h" +#include "battle_anim.h" +#include "palette.h" +#include "trig.h" +#include "constants/battle_anim.h" +#include "random.h" + +static void sub_80B18E4(struct Sprite *sprite); +static void sub_80B1A1C(struct Sprite *sprite); +static void sub_80B1AB8(struct Sprite *sprite); +static void sub_80B1BB0(struct Sprite *sprite); +static void sub_80B1C3C(struct Sprite *sprite); +static void sub_80B1D88(struct Sprite *sprite); +static void sub_80B24C0(struct Sprite *sprite); +static void sub_80B2514(struct Sprite *sprite); +static void sub_80B2780(struct Sprite *sprite); +static void sub_80B2914(struct Sprite *sprite); +static void sub_80B2974(struct Sprite *sprite); +static void sub_80B2A08(struct Sprite *sprite); +static void sub_80B2AF4(struct Sprite *sprite); +static void sub_80B2BD8(struct Sprite *sprite); +static void sub_80B2CE4(struct Sprite *sprite); +static void sub_80B2D64(struct Sprite *sprite); +static void sub_80B190C(struct Sprite *sprite); +static void sub_80B198C(u8 taskId); +static void sub_80B1A9C(struct Sprite *sprite); +static void sub_80B1BF8(struct Sprite *sprite); +static void sub_80B1CC0(struct Sprite *sprite); +static void sub_80B1F94(struct Sprite *sprite); +static void sub_80B268C(struct Sprite *sprite); +static void sub_80B2820(struct Sprite *sprite); +static void sub_80B2A50(struct Sprite *sprite); +static void sub_80B2AB0(struct Sprite *sprite); +static void sub_80B2C88(struct Sprite *sprite); +static void sub_80B2CF8(struct Sprite *sprite); +static void sub_80B2E20(struct Sprite *sprite); + +const struct SpriteTemplate gUnknown_83E6AE8 = +{ + .tileTag = ANIM_TAG_GUST, + .paletteTag = ANIM_TAG_GUST, + .oam = &gOamData_83ACA20, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B18E4, +}; + +static const union AffineAnimCmd gUnknown_83E6B00[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xA, 0x0, 0, 24), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6B18[] = +{ + gUnknown_83E6B00, +}; + +const struct SpriteTemplate gUnknown_83E6B1C = +{ + .tileTag = ANIM_TAG_GUST, + .paletteTag = ANIM_TAG_GUST, + .oam = &gOamData_83ACA80, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6B18, + .callback = sub_80B1A1C, +}; + +static const union AnimCmd gUnknown_83E6B34[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(0, 3, .hFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE), + ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gUnknown_83E6B48[] = +{ + gUnknown_83E6B34, +}; + +const struct SpriteTemplate gUnknown_83E6B4C = +{ + .tileTag = ANIM_TAG_AIR_WAVE_2, + .paletteTag = ANIM_TAG_AIR_WAVE_2, + .oam = &gOamData_83AC9F8, + .anims = gUnknown_83E6B48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B1AB8, +}; + +static const union AffineAnimCmd gUnknown_83E6B64[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), + AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6B8C[] = +{ + gUnknown_83E6B64, +}; + +static const union AffineAnimCmd gUnknown_83E6B90[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 50, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gUnknown_83E6B9C[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, -40, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6BB0[] = +{ + gUnknown_83E6B90, + gUnknown_83E6B9C, +}; + +const struct SpriteTemplate gUnknown_83E6BB8 = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_ROUND_SHADOW, + .oam = &gOamData_83ACAA0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6B8C, + .callback = sub_80B1BB0, +}; + +const struct SpriteTemplate gUnknown_83E6BD0 = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_ROUND_SHADOW, + .oam = &gOamData_83ACA40, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6BB0, + .callback = sub_80B1C3C, +}; + +static const union AnimCmd gUnknown_83E6BE8[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_83E6BF0[] = +{ + ANIMCMD_FRAME(16, 0, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E6BF8[] = +{ + gUnknown_83E6BE8, + gUnknown_83E6BF0, +}; + +const struct SpriteTemplate gUnknown_83E6C00 = +{ + .tileTag = ANIM_TAG_WHITE_FEATHER, + .paletteTag = ANIM_TAG_WHITE_FEATHER, + .oam = &gOamData_83ACA38, + .anims = gUnknown_83E6BF8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B1D88, +}; + +// not used +static const u16 gUnknown_83E6C18[] = INCBIN_U16("graphics/battle_anims/sprites/unk_83E6C18.gbapal"); + +const struct SpriteTemplate gUnknown_83E6C38 = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_83AC9D0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B24C0, +}; + +const struct SpriteTemplate gUnknown_83E6C50 = +{ + .tileTag = ANIM_TAG_WHITE_FEATHER, + .paletteTag = ANIM_TAG_WHITE_FEATHER, + .oam = &gOamData_83ACA38, + .anims = gUnknown_83E6BF8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B2514, +}; + +static const union AnimCmd gUnknown_83E6C68[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(8, 1), + ANIMCMD_FRAME(16, 1), + ANIMCMD_FRAME(8, 1, .hFlip = TRUE), + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd *const gUnknown_83E6C80[] = +{ + gUnknown_83E6C68, +}; + +const struct SpriteTemplate gUnknown_83E6C84 = +{ + .tileTag = ANIM_TAG_WHIRLWIND_LINES, + .paletteTag = ANIM_TAG_WHIRLWIND_LINES, + .oam = &gOamData_83AC9F8, + .anims = gUnknown_83E6C80, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B2780, +}; + +static const union AffineAnimCmd gUnknown_83E6C9C[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), + AFFINEANIMCMD_FRAME(0xFFEC, 0x0, 0, 7), + AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, 0, 5), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6CCC[] = +{ + gUnknown_83E6C9C, +}; + +const struct SpriteTemplate gUnknown_83E6CD0 = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_ROUND_SHADOW, + .oam = &gOamData_83ACAA0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6CCC, + .callback = sub_80B2914, +}; + +static const union AffineAnimCmd gUnknown_83E6CE8[] = +{ + AFFINEANIMCMD_FRAME(0xA0, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6CF8[] = +{ + gUnknown_83E6CE8, +}; + +const struct SpriteTemplate gUnknown_83E6CFC = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_ROUND_SHADOW, + .oam = &gOamData_83ACAA0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6CF8, + .callback = sub_80B2974, +}; + +static const union AffineAnimCmd gUnknown_83E6D14[] = +{ + AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x28, 0x0, 0, 6), + AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 5), + AFFINEANIMCMD_FRAME(0xFFF0, 0x20, 0, 10), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gUnknown_83E6D3C[] = +{ + gUnknown_83E6D14, +}; + +const struct SpriteTemplate gUnknown_83E6D40 = +{ + .tileTag = ANIM_TAG_ROUND_SHADOW, + .paletteTag = ANIM_TAG_ROUND_SHADOW, + .oam = &gOamData_83ACAA0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_83E6D3C, + .callback = sub_80B2A08, +}; + +// not used +static const union AffineAnimCmd gUnknown_83E6D58[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x0, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x20, 0, 12), + AFFINEANIMCMD_FRAME(0x0, 0xFFE0, 0, 11), + AFFINEANIMCMD_END, +}; + +// not used +static const union AffineAnimCmd *const gUnknown_83E6D80[] = +{ + gUnknown_83E6D58, +}; + +const struct SpriteTemplate gUnknown_83E6D7C = +{ + .tileTag = ANIM_TAG_SPLASH, + .paletteTag = ANIM_TAG_SPLASH, + .oam = &gOamData_83ACAA0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B2AF4, +}; + +const struct SpriteTemplate gUnknown_83E6D94 = +{ + .tileTag = ANIM_TAG_SWEAT_BEAD, + .paletteTag = ANIM_TAG_SWEAT_BEAD, + .oam = &gOamData_83AC9C8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B2BD8, +}; + +const struct SpriteTemplate gUnknown_83E6DAC = +{ + .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, + .oam = &gOamData_83ACB00, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B2CE4, +}; + +const struct SpriteTemplate gUnknown_83E6DB4 = +{ + .tileTag = ANIM_TAG_BIRD, + .paletteTag = ANIM_TAG_BIRD, + .oam = &gOamData_83ACAA0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80B2D64, +}; + +static void sub_80B18E4(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, FALSE); + sprite->pos1.y += 20; + sprite->data[1] = 191; + sprite->callback = sub_80B190C; + sprite->callback(sprite); +} + +static void sub_80B190C(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[1], 32); + sprite->pos2.y = Cos(sprite->data[1], 8); + sprite->data[1] += 5; + sprite->data[1] &= 0xFF; + if (++sprite->data[0] == 71) + DestroyAnimSprite(sprite); +} + +void sub_80B194C(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[1]; + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_GUST); + gTasks[taskId].func = sub_80B198C; +} + +static void sub_80B198C(u8 taskId) +{ + u8 data2; + u16 temp; + s32 i, base; + + if (gTasks[taskId].data[10]++ == gTasks[taskId].data[1]) + { + gTasks[taskId].data[10] = 0; + data2 = gTasks[taskId].data[2]; + temp = gPlttBufferFaded[16 * data2 + 0x108]; + i = 7; + base = data2 * 16; + do + { + gPlttBufferFaded[base + 0x101 + i] = gPlttBufferFaded[base + 0x100 + i]; + } while (--i > 0); + + gPlttBufferFaded[base + 0x101] = temp; + } + if (--gTasks[taskId].data[0] == 0) + DestroyAnimVisualTask(taskId); +} + +static void sub_80B1A1C(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + InitAnimLinearTranslation(sprite); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; + StoreSpriteCallbackInData6(sprite, sub_80B1A9C); +} + +static void sub_80B1A9C(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + DestroyAnimSprite(sprite); +} + +static void sub_80B1AB8(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + if (IsContest()) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; + if (gBattleAnimArgs[6] == 0) + { + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + } + else + { + SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]); + } + sprite->data[2] = sprite->data[2] + gBattleAnimArgs[2]; + sprite->data[4] = sprite->data[4] + gBattleAnimArgs[3]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + SeekSpriteAnim(sprite, gBattleAnimArgs[5]); +} + +static void sub_80B1BB0(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->callback = sub_80B1BF8; + gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = TRUE; +} + +static void sub_80B1BF8(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + --sprite->data[0]; + } + else + { + sprite->data[2] += sprite->data[1]; + sprite->pos2.y -= (sprite->data[2] >> 8); + } + if (sprite->pos1.y + sprite->pos2.y < -32) + DestroyAnimSprite(sprite); +} + +static void sub_80B1C3C(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x = 272; + sprite->pos1.y = -32; + StartSpriteAffineAnim(sprite, 1); + } + else + { + sprite->pos1.x = -32; + sprite->pos1.y = -32; + } + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + InitAnimLinearTranslation(sprite); + sprite->callback = sub_80B1CC0; +} + +static void sub_80B1CC0(struct Sprite *sprite) +{ + sprite->data[0] = 1; + AnimTranslateLinear(sprite); + if (((u16)sprite->data[3] >> 8) > 200) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos2.x = 0; + sprite->data[3] &= 0xFF; + } + if (sprite->pos1.x + sprite->pos2.x < -32 + || sprite->pos1.x + sprite->pos2.x > 272 + || sprite->pos1.y + sprite->pos2.y > 160) + { + gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].invisible = FALSE; + DestroyAnimSprite(sprite); + } +} + +void sub_80B1D3C(struct Sprite *sprite) +{ + if (sprite->data[0]-- <= 0) + { + if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) + { + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = 0; + } + DestroySprite(sprite); + --gAnimVisualTaskCount; + } +} + +struct FeatherDanceData +{ + u16 unk0_0a:1; + u16 unk0_0b:1; + u16 unk0_0c:1; + u16 unk0_0d:1; + u16 unk0_1:4; + u16 unk1:8; + u16 unk2; + s16 unk4; + u16 unk6; + u16 unk8; + u16 unkA; + u8 unkC[2]; + u16 unkE_0:1; + u16 unkE_1:15; +}; + +static void sub_80B1D88(struct Sprite *sprite) +{ + u8 battler, matrixNum, sinIndex; + s16 spriteCoord, sinVal; + struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data; + + if (gBattleAnimArgs[7] & 0x100) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_HEIGHT) + gBattleAnimArgs[0]; + spriteCoord = GetBattlerSpriteCoord(battler, BATTLER_COORD_ATTR_WIDTH); + sprite->pos1.y = spriteCoord + gBattleAnimArgs[1]; + data->unk8 = sprite->pos1.y << 8; + data->unkE_1 = spriteCoord + gBattleAnimArgs[6]; + data->unk0_0c = 1; + data->unk2 = gBattleAnimArgs[2] & 0xFF; + data->unkA = (gBattleAnimArgs[2] >> 8) & 0xFF; + data->unk4 = gBattleAnimArgs[3]; + data->unk6 = gBattleAnimArgs[4]; + *(u16 *)(data->unkC) = gBattleAnimArgs[5]; + if (data->unk2 >= 64 && data->unk2 <= 191) + { + if (!IsContest()) + sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1; + else + sprite->oam.priority = GetBattlerSpriteBGPriority(battler); + data->unkE_0 = 0; + if (!(data->unk4 & 0x8000)) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + } + } + else + { + sprite->oam.priority = GetBattlerSpriteBGPriority(battler); + data->unkE_0 = 1; + if (data->unk4 & 0x8000) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + } + } + data->unk0_1 = data->unk2 >> 6; + sprite->pos2.x = (gSineTable[data->unk2] * data->unkC[0]) >> 8; + matrixNum = sprite->oam.matrixNum; + sinIndex = (-sprite->pos2.x >> 1) + data->unkA; + sinVal = gSineTable[sinIndex]; + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; + if (sprite) + { + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; + } + else // pointless, exactly the same + { + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; + } + sprite->callback = sub_80B1F94; +} + +static void sub_80B1F94(struct Sprite *sprite) +{ + u8 matrixNum, sinIndex; + s16 sinVal = 0; + struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data; + + if (data->unk0_0a) + { + if (data->unk1-- % 256 == 0) + { + data->unk0_0a = 0; + data->unk1 = 0; + } + } + else + { + switch (data->unk2 / 64) + { + case 0: + if (data->unk0_1 << 24 >> 24 == 1) // the shifts have to be here + { + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_1 << 24 >> 24 == 3) + { + data->unk0_0b ^= 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + --sprite->oam.priority; + data->unkE_0 ^= 1; + } + else + { + ++sprite->oam.priority; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + data->unk2; + } + data->unk0_1 = 0; + break; + case 1: + if (data->unk0_1 << 24 >> 24 == 0) + { + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_1 << 24 >> 24 == 2) + { + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + --sprite->oam.priority; + data->unkE_0 ^= 1; + } + else + { + ++sprite->oam.priority; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 1; + break; + case 2: + if (data->unk0_1 << 24 >> 24 == 3) + { + data->unk0_0d = 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_1 << 24 >> 24 == 1) + { + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + --sprite->oam.priority; + data->unkE_0 ^= 1; + } + else + { + ++sprite->oam.priority; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 2; + break; + case 3: + if (data->unk0_1 << 24 >> 24 == 2) + { + data->unk0_0d = 1; + } + else if (data->unk0_1 << 24 >> 24 == 0) + { + data->unk0_0b ^= 1; + data->unk0_0a = 1; + data->unk1 = 0; + } + else if (data->unk0_0d) + { + sprite->hFlip ^= 1; + sprite->animNum = sprite->hFlip; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (data->unk0_0c) + { + if (!IsContest()) + { + if (!data->unkE_0) + { + --sprite->oam.priority; + data->unkE_0 ^= 1; + } + else + { + ++sprite->oam.priority; + data->unkE_0 ^= 1; + } + } + else + { + if (!data->unkE_0) + { + sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } + else + { + sprite->subpriority += 12; + data->unkE_0 ^= 1; + } + } + } + data->unk0_0d = 0; + } + data->unk0_1 = 3; + break; + } + #ifndef NONMATCHING + asm("":::"r8"); + #endif + sprite->pos2.x = (data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8; + matrixNum = sprite->oam.matrixNum; + sinIndex = (-sprite->pos2.x >> 1) + data->unkA; + sinVal = gSineTable[sinIndex]; + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sinIndex + 64]; + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; + data->unk8 += data->unk6; + sprite->pos1.y = data->unk8 >> 8; + if (data->unk4 & 0x8000) + data->unk2 = (data->unk2 - (data->unk4 & 0x7FFF)) & 0xFF; + else + data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF; + if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1) + { + sprite->data[0] = 0; + sprite->callback = sub_80B1D3C; + } + } +} + +static void sub_80B24C0(struct Sprite *sprite) +{ + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->callback = TranslateAnimSpriteToTargetMonLocation; +} + +static void sub_80B2514(struct Sprite *sprite) +{ + u8 matrixNum; + s16 rn, sinVal; + + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[3] = gBattleAnimArgs[2]; + if (!IsContest()) + { + if (gBattlerPositions[gBattleAnimTarget] & B_POSITION_OPPONENT_LEFT) + sprite->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH) + gBattleAnimArgs[3]; + else + sprite->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH) + 40; + if (gBattleAnimArgs[4]) + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1; + else + sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget); + } + else + { + sprite->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_ATTR_WIDTH) + gBattleAnimArgs[3]; + } + sprite->data[4] = gSineTable[sprite->data[1] & 0xFF]; + sprite->data[5] = -gSineTable[(sprite->data[1] & 0xFF) + 64]; + sprite->data[6] = 0; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + matrixNum = sprite->oam.matrixNum; + sprite->data[1] = (u16)sprite->data[1] >> 8; + rn = Random(); + if (rn & 0x8000) + sprite->data[1] = 0xFF - sprite->data[1]; + sinVal = gSineTable[sprite->data[1]]; + gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[sprite->data[1] + 64]; + gOamMatrices[matrixNum].b = sinVal; + gOamMatrices[matrixNum].c = -sinVal; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; + if (rn & 1) + { + sprite->animNum = 1; + sprite->hFlip = TRUE; + } + sprite->callback = sub_80B268C; +} + +static void sub_80B268C(struct Sprite *sprite) +{ + struct FeatherDanceData fData; + struct FeatherDanceData *tData = (struct FeatherDanceData *)sprite->data; + u8 item; + u32 x, y; + + ++sprite->data[0]; + if (sprite->data[0] <= 4) + return; + sprite->pos2.x = (sprite->data[4] * sprite->data[6]) >> 8; + sprite->pos2.y = (sprite->data[5] * sprite->data[6]) >> 8; + sprite->data[6] += sprite->data[3] & 0xFF; + if (sprite->data[6] < (sprite->data[2] & 0xFF)) + return; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + memcpy(&fData, tData, sizeof(struct FeatherDanceData)); + memset(tData, 0, sizeof(struct FeatherDanceData)); + tData->unk8 = sprite->pos1.y << 8; + tData->unk6 = fData.unk6 >> 8; + tData->unk2 = 0; + tData->unkA = fData.unk2; + if (sprite->animNum != 0) + { + if (tData->unk6 & 8) + tData->unk4 = 0x8001; + else + tData->unk4 = 0x8002; + } + else if (tData->unk6 & 8) + { + tData->unk4 = 1; + } + else + { + tData->unk4 = 2; + } + item = fData.unk4 >> 8; + tData->unkC[0] = item; + tData->unkC[1] = item - 2; + x = (((u16 *)&fData)[7] << 1); + y = (((u16 *)tData)[7] & 1); + ((u16 *)tData)[7] = y | x; + sprite->callback = sub_80B1F94; +} + +static void sub_80B2780(struct Sprite *sprite) +{ + u16 arg; + u8 mult; + + if (!gBattleAnimArgs[2]) + InitSpritePosToAnimAttacker(sprite, 0); + else + InitSpritePosToAnimTarget(sprite, FALSE); + if ((!gBattleAnimArgs[2] && !GetBattlerSide(gBattleAnimAttacker)) + || (gBattleAnimArgs[2] == 1 && !GetBattlerSide(gBattleAnimTarget))) + sprite->pos1.x += 8; + SeekSpriteAnim(sprite, gBattleAnimArgs[4]); + sprite->pos1.x -= 32; + sprite->data[1] = 0x0ccc; + arg = gBattleAnimArgs[4]; + mult = 12; + sprite->pos2.x += mult * arg; + sprite->data[0] = arg; + sprite->data[7] = gBattleAnimArgs[3]; + sprite->callback = sub_80B2820; +} + +static void sub_80B2820(struct Sprite *sprite) +{ + sprite->pos2.x += sprite->data[1] >> 8; + if (++sprite->data[0] == 6) + { + sprite->data[0] = 0; + sprite->pos2.x = 0; + StartSpriteAnim(sprite, 0); + } + + if (--sprite->data[7] == -1) + DestroyAnimSprite(sprite); +} + +void sub_80B2868(u8 taskId) +{ + if (!(gTasks[taskId].data[0] % 32)) + { + ++gAnimVisualTaskCount; + gBattleAnimArgs[0] = Sin(gTasks[taskId].data[0], -13); + gBattleAnimArgs[1] = Cos(gTasks[taskId].data[0], -13); + gBattleAnimArgs[2] = 1; + gBattleAnimArgs[3] = 3; + CreateSpriteAndAnimate(&gUnknown_83E7C98, + GetBattlerSpriteCoord(gBattleAnimTarget, 2), + GetBattlerSpriteCoord(gBattleAnimTarget, 3), + 3); + } + gTasks[taskId].data[0] += 8; + if (gTasks[taskId].data[0] > 255) + DestroyAnimVisualTask(taskId); +} + +static void sub_80B2914(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + InitSpritePosToAnimAttacker(sprite, 1); + gSprites[GetAnimBattlerSpriteId(0)].invisible = TRUE; + ++sprite->data[0]; + break; + case 1: + if (sprite->affineAnimEnded) + DestroyAnimSprite(sprite); + break; + } +} + +static void sub_80B2974(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + sprite->pos2.y = -sprite->pos1.y - 32; + ++sprite->data[0]; + break; + case 1: + sprite->pos2.y += 10; + if (sprite->pos2.y >= 0) + ++sprite->data[0]; + break; + case 2: + sprite->pos2.y -= 10; + if (sprite->pos1.y + sprite->pos2.y < -32) + { + gSprites[GetAnimBattlerSpriteId(0)].invisible = FALSE; + DestroyAnimSprite(sprite); + } + break; + } +} + +static void sub_80B2A08(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->callback = sub_80B2A50; + gSprites[GetAnimBattlerSpriteId(0)].invisible = TRUE; +} + +static void sub_80B2A50(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + --sprite->data[0]; + } + else if (sprite->pos1.y + sprite->pos2.y > -32) + { + sprite->data[2] += sprite->data[1]; + sprite->pos2.y -= (sprite->data[2] >> 8); + } + else + { + sprite->invisible = TRUE; + if (sprite->data[3]++ > 20) + sprite->callback = sub_80B2AB0; + } +} + +static void sub_80B2AB0(struct Sprite *sprite) +{ + sprite->pos2.y += sprite->data[2] >> 8; + if (sprite->pos1.y + sprite->pos2.y > -32) + sprite->invisible = FALSE; + if (sprite->pos2.y > 0) + DestroyAnimSprite(sprite); +} + +static void sub_80B2AF4(struct Sprite *sprite) +{ + u32 matrixNum; + s32 t1, t2; + + switch (sprite->data[0]) + { + case 0: + if (!gBattleAnimArgs[0]) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1); + } + sprite->data[1] = 512; + TrySetSpriteRotScale(sprite, 0, 256, sprite->data[1], 0); + ++sprite->data[0]; + break; + case 1: + if (sprite->data[2] <= 11) + sprite->data[1] -= 40; + else + sprite->data[1] += 40; + ++sprite->data[2]; + TrySetSpriteRotScale(sprite, 0, 256, sprite->data[1], 0); + matrixNum = sprite->oam.matrixNum; + t1 = 15616; + t2 = t1 / gOamMatrices[matrixNum].d + 1; + if (t2 > 128) + t2 = 128; + t2 = (64 - t2) / 2; + sprite->pos2.y = t2; + if (sprite->data[2] == 24) + { + sub_8075AD8(sprite); + DestroyAnimSprite(sprite); + } + break; + } +} + +static void sub_80B2BD8(struct Sprite *sprite) +{ + s32 v1 = 0x1FF & Random(); + s32 v2 = 0x7F & Random(); + + if (v1 % 2) + sprite->data[0] = 736 + v1; + else + sprite->data[0] = 736 - v1; + + if (v2 % 2) + sprite->data[1] = 896 + v2; + else + sprite->data[1] = 896 - v2; + sprite->data[2] = gBattleAnimArgs[0]; + if (sprite->data[2]) + sprite->oam.matrixNum = ST_OAM_HFLIP; + if (gBattleAnimArgs[1] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32; + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 32; + } + sprite->callback = sub_80B2C88; +} + +static void sub_80B2C88(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + { + sprite->pos2.x += sprite->data[0] >> 8; + sprite->pos2.y -= sprite->data[1] >> 8; + } + else + { + sprite->pos2.x -= sprite->data[0] >> 8; + sprite->pos2.y -= sprite->data[1] >> 8; + } + sprite->data[0] = sprite->data[0]; + sprite->data[1] -= 32; + if (sprite->data[0] < 0) + sprite->data[0] = 0; + if (++sprite->data[3] == 31) + DestroyAnimSprite(sprite); +} + +static void sub_80B2CE4(struct Sprite *sprite) +{ + sprite->data[6] = 0; + sprite->data[7] = 64; + sprite->callback = sub_80B2CF8; +} + +static void sub_80B2CF8(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (++sprite->data[1] > 8) + { + sprite->data[1] = 0; + sprite->invisible ^= 1; + if (++sprite->data[2] > 5 && sprite->invisible != FALSE) + ++sprite->data[0]; + } + break; + case 1: + DestroyAnimSprite(sprite); + break; + } +} + +static void sub_80B2D64(struct Sprite *sprite) +{ + u16 rotation; + s16 posx = sprite->pos1.x; + s16 posy = sprite->pos1.y; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + sprite->data[4] = sprite->pos1.x << 4; + sprite->data[5] = sprite->pos1.y << 4; + sprite->data[6] = ((posx - sprite->pos1.x) << 4) / 12; + sprite->data[7] = ((posy - sprite->pos1.y) << 4) / 12; + rotation = ArcTan2Neg(posx - sprite->pos1.x, posy - sprite->pos1.y); + rotation += 49152; + TrySetSpriteRotScale(sprite, 1, 0x100, 0x100, rotation); + sprite->callback = sub_80B2E20; +} + +static void sub_80B2E20(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[6]; + sprite->data[5] += sprite->data[7]; + sprite->pos1.x = sprite->data[4] >> 4; + sprite->pos1.y = sprite->data[5] >> 4; + if (sprite->pos1.x > 285 || sprite->pos1.x < -45 + || sprite->pos1.y > 157 || sprite->pos1.y < -45) + DestroySpriteAndMatrix(sprite); +} + +// not used +static void sub_80B2E64(u8 taskId) +{ + if (gBattleAnimArgs[0] == 0) + { + u8 spriteId = GetAnimBattlerSpriteId(0); + + gSprites[spriteId].invisible = TRUE; + } + else + { + u8 spriteId = GetAnimBattlerSpriteId(0); + + gSprites[spriteId].invisible = FALSE; + } + DestroyAnimVisualTask(taskId); +} From 11b027d13c9639c27b3576908a2030a635bcb6be Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 12 Oct 2019 16:30:51 -0400 Subject: [PATCH 17/25] Decompile player_pc --- asm/field_effect.s | 10 +- asm/field_weather.s | 6 +- asm/mail.s | 4 +- asm/party_menu.s | 18 +- asm/player_pc.s | 1919 ----------------- asm/pokemon_storage_system.s | 2 +- asm/shop.s | 2 +- data/data_83FECCC.s | 31 - .../PalletTown_PlayersHouse_2F/scripts.inc | 2 +- data/strings.s | 30 +- include/event_scripts.h | 3 + include/field_weather.h | 2 +- include/help_system.h | 2 + include/item.h | 1 + include/item_menu.h | 1 + include/mailbox_pc.h | 6 +- include/overworld.h | 1 - include/party_menu.h | 1 + include/player_pc.h | 12 +- include/strings.h | 20 + ld_script.txt | 3 +- src/field_fadetransition.c | 2 +- src/item_use.c | 4 +- src/mailbox_pc.c | 10 +- src/map_preview_screen.c | 2 +- src/player_pc.c | 741 +++++++ sym_ewram.txt | 15 +- 27 files changed, 832 insertions(+), 2018 deletions(-) delete mode 100644 asm/player_pc.s create mode 100644 src/player_pc.c diff --git a/asm/field_effect.s b/asm/field_effect.s index 2393df6a6..9919ccc24 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -2014,7 +2014,7 @@ task00_8084310: @ 8084310 ldrsh r6, [r4, r0] cmp r6, 0 bne _08084350 - bl sub_807AA70 + bl field_weather_is_fade_finished lsls r0, 24 cmp r0, 0 beq _08084376 @@ -2287,7 +2287,7 @@ _08084560: .4byte gSprites sub_8084564: @ 8084564 push {r4,lr} adds r4, r0, 0 - bl sub_807AA70 + bl field_weather_is_fade_finished lsls r0, 24 cmp r0, 0 beq _08084578 @@ -4002,7 +4002,7 @@ sub_8085274: @ 8085274 adds r4, r0, 0 adds r5, r1, 0 adds r6, r2, 0 - bl sub_807AA70 + bl field_weather_is_fade_finished lsls r0, 24 cmp r0, 0 beq _080852B4 @@ -5025,7 +5025,7 @@ _08085A50: .4byte gTasks sub_8085A54: @ 8085A54 push {r4,lr} adds r4, r0, 0 - bl sub_807AA70 + bl field_weather_is_fade_finished lsls r0, 24 cmp r0, 0 beq _08085A78 @@ -5492,7 +5492,7 @@ _08085E08: .4byte gTasks sub_8085E0C: @ 8085E0C push {r4-r6,lr} adds r6, r0, 0 - bl sub_807AA70 + bl field_weather_is_fade_finished lsls r0, 24 cmp r0, 0 beq _08085E82 diff --git a/asm/field_weather.s b/asm/field_weather.s index 403a365be..b65548171 100644 --- a/asm/field_weather.s +++ b/asm/field_weather.s @@ -1889,8 +1889,8 @@ _0807AA68: .4byte 0x000006ca _0807AA6C: .4byte 0x000006cb thumb_func_end FieldWeather_StartFadingOutCreditsMap - thumb_func_start sub_807AA70 -sub_807AA70: @ 807AA70 + thumb_func_start field_weather_is_fade_finished +field_weather_is_fade_finished: @ 807AA70 ldr r0, _0807AA84 @ =gUnknown_2037F34 ldr r1, _0807AA88 @ =0x000006c6 adds r0, r1 @@ -1904,7 +1904,7 @@ sub_807AA70: @ 807AA70 .align 2, 0 _0807AA84: .4byte gUnknown_2037F34 _0807AA88: .4byte 0x000006c6 - thumb_func_end sub_807AA70 + thumb_func_end field_weather_is_fade_finished thumb_func_start sub_807AA8C sub_807AA8C: @ 807AA8C diff --git a/asm/mail.s b/asm/mail.s index 23aba36f6..e5b265df2 100644 --- a/asm/mail.s +++ b/asm/mail.s @@ -204,7 +204,7 @@ _080BED8C: movs r0, 0 movs r1, 0 bl SetGpuReg - ldr r0, _080BEDB0 @ =gUnknown_203AAC4 + ldr r0, _080BEDB0 @ =gPlayerPcMenuManager ldrb r0, [r0, 0x9] cmp r0, 0 bne _080BEDB4 @@ -212,7 +212,7 @@ _080BED8C: bl HelpSystem_SetSomeVariable2 b _080BF0F4 .align 2, 0 -_080BEDB0: .4byte gUnknown_203AAC4 +_080BEDB0: .4byte gPlayerPcMenuManager _080BEDB4: movs r0, 0x1E bl HelpSystem_SetSomeVariable2 diff --git a/asm/party_menu.s b/asm/party_menu.s index 899e8e7ea..b49a09347 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -11978,7 +11978,7 @@ task_launch_hm_phase_2: @ 81248C8 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_807AA70 + bl field_weather_is_fade_finished lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -17272,15 +17272,15 @@ _081273D0: bx r1 thumb_func_end sub_81273AC - thumb_func_start sub_81273D8 -sub_81273D8: @ 81273D8 + thumb_func_start PartyMenuInit_FromPlayerPc +PartyMenuInit_FromPlayerPc: @ 81273D8 push {lr} sub sp, 0xC movs r0, 0x6 str r0, [sp] ldr r0, _081273FC @ =sub_811FB28 str r0, [sp, 0x4] - ldr r0, _08127400 @ =sub_80EC500 + ldr r0, _08127400 @ =CB2_PlayerPC_ReturnFromPartyMenu str r0, [sp, 0x8] movs r0, 0 movs r1, 0 @@ -17292,8 +17292,8 @@ sub_81273D8: @ 81273D8 bx r0 .align 2, 0 _081273FC: .4byte sub_811FB28 -_08127400: .4byte sub_80EC500 - thumb_func_end sub_81273D8 +_08127400: .4byte CB2_PlayerPC_ReturnFromPartyMenu + thumb_func_end PartyMenuInit_FromPlayerPc thumb_func_start sub_8127404 sub_8127404: @ 8127404 @@ -17311,7 +17311,7 @@ sub_8127404: @ 8127404 movs r0, 0 strb r0, [r1] ldr r2, _0812745C @ =gSaveBlock1Ptr - ldr r0, _08127460 @ =gUnknown_203AAC4 + ldr r0, _08127460 @ =gPlayerPcMenuManager ldrh r1, [r0] adds r1, 0x6 ldrh r0, [r0, 0x2] @@ -17337,7 +17337,7 @@ _08127450: .4byte gUnknown_203B0A0 _08127454: .4byte gPlayerParty _08127458: .4byte gUnknown_203B0C0 _0812745C: .4byte gSaveBlock1Ptr -_08127460: .4byte gUnknown_203AAC4 +_08127460: .4byte gPlayerPcMenuManager _08127464: .4byte 0x00002cd0 _08127468: .4byte gUnknown_8416D17 _0812746C: @@ -19373,7 +19373,7 @@ task_hm_without_phase_2: @ 81283FC push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_807AA70 + bl field_weather_is_fade_finished lsls r0, 24 cmp r0, 0 beq _0812841A diff --git a/asm/player_pc.s b/asm/player_pc.s deleted file mode 100644 index fa528abb9..000000000 --- a/asm/player_pc.s +++ /dev/null @@ -1,1919 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start NewGameInitPCItems -NewGameInitPCItems: @ 80EB658 - push {r4-r6,lr} - movs r4, 0 - bl ClearPCItemSlots - ldr r1, _080EB6A8 @ =gUnknown_8402220 - ldrh r0, [r1] - cmp r0, 0 - beq _080EB6A0 - ldrh r0, [r1, 0x2] - cmp r0, 0 - beq _080EB6A0 - adds r5, r1, 0 - adds r6, r5, 0x2 -_080EB672: - lsls r1, r4, 2 - adds r0, r1, r5 - ldrh r0, [r0] - adds r1, r6 - ldrh r1, [r1] - bl AddPCItem - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080EB6A0 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, r4, 2 - adds r0, r1, r5 - ldrh r0, [r0] - cmp r0, 0 - beq _080EB6A0 - adds r0, r1, r6 - ldrh r0, [r0] - cmp r0, 0 - bne _080EB672 -_080EB6A0: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EB6A8: .4byte gUnknown_8402220 - thumb_func_end NewGameInitPCItems - - thumb_func_start sub_80EB6AC -sub_80EB6AC: @ 80EB6AC - push {lr} - ldr r1, _080EB6E0 @ =gUnknown_203AAC4 - movs r0, 0 - strb r0, [r1, 0x9] - bl sub_812B234 - ldr r1, _080EB6E4 @ =gUnknown_203AABC - ldr r0, _080EB6E8 @ =gUnknown_8402200 - str r0, [r1] - ldr r1, _080EB6EC @ =gUnknown_203AAC0 - movs r0, 0x3 - strb r0, [r1] - ldr r0, _080EB6F0 @ =TaskDummy - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080EB6F4 @ =gUnknown_8416262 - ldr r3, _080EB6F8 @ =sub_80EB74C - movs r1, 0x2 - bl DisplayItemMessageOnField - pop {r0} - bx r0 - .align 2, 0 -_080EB6E0: .4byte gUnknown_203AAC4 -_080EB6E4: .4byte gUnknown_203AABC -_080EB6E8: .4byte gUnknown_8402200 -_080EB6EC: .4byte gUnknown_203AAC0 -_080EB6F0: .4byte TaskDummy -_080EB6F4: .4byte gUnknown_8416262 -_080EB6F8: .4byte sub_80EB74C - thumb_func_end sub_80EB6AC - - thumb_func_start sub_80EB6FC -sub_80EB6FC: @ 80EB6FC - push {lr} - ldr r1, _080EB730 @ =gUnknown_203AAC4 - movs r0, 0x1 - strb r0, [r1, 0x9] - bl sub_812B234 - ldr r1, _080EB734 @ =gUnknown_203AABC - ldr r0, _080EB738 @ =gUnknown_8402203 - str r0, [r1] - ldr r1, _080EB73C @ =gUnknown_203AAC0 - movs r0, 0x3 - strb r0, [r1] - ldr r0, _080EB740 @ =TaskDummy - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080EB744 @ =gUnknown_8416262 - ldr r3, _080EB748 @ =sub_80EB74C - movs r1, 0x2 - bl DisplayItemMessageOnField - pop {r0} - bx r0 - .align 2, 0 -_080EB730: .4byte gUnknown_203AAC4 -_080EB734: .4byte gUnknown_203AABC -_080EB738: .4byte gUnknown_8402203 -_080EB73C: .4byte gUnknown_203AAC0 -_080EB740: .4byte TaskDummy -_080EB744: .4byte gUnknown_8416262 -_080EB748: .4byte sub_80EB74C - thumb_func_end sub_80EB6FC - - thumb_func_start sub_80EB74C -sub_80EB74C: @ 80EB74C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r0, 2 - add r0, r8 - lsls r0, 3 - ldr r1, _080EB770 @ =gTasks+0x8 - adds r7, r0, r1 - ldr r0, _080EB774 @ =gUnknown_203AAC0 - ldrb r0, [r0] - cmp r0, 0x3 - bne _080EB77C - ldr r0, _080EB778 @ =gUnknown_8402248 - b _080EB77E - .align 2, 0 -_080EB770: .4byte gTasks+0x8 -_080EB774: .4byte gUnknown_203AAC0 -_080EB778: .4byte gUnknown_8402248 -_080EB77C: - ldr r0, _080EB804 @ =gUnknown_8402250 -_080EB77E: - bl AddWindow - strh r0, [r7, 0x14] - ldrb r0, [r7, 0x14] - movs r1, 0 - bl SetStdWindowBorderStyle - movs r0, 0x2 - movs r1, 0 - bl GetMenuCursorDimensionByFont - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x2 - movs r1, 0x2 - bl GetFontAttribute - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r7, 0x14] - str r0, [sp] - movs r6, 0x10 - str r6, [sp, 0x4] - ldr r5, _080EB808 @ =gUnknown_203AAC0 - ldrb r0, [r5] - str r0, [sp, 0x8] - ldr r0, _080EB80C @ =gUnknown_84021E8 - str r0, [sp, 0xC] - ldr r0, _080EB810 @ =gUnknown_203AABC - ldr r0, [r0] - str r0, [sp, 0x10] - adds r0, r1, 0 - movs r1, 0x2 - adds r2, r4, 0 - movs r3, 0x2 - bl AddItemMenuActionTextPrinters - ldrb r0, [r7, 0x14] - str r6, [sp] - ldrb r1, [r5] - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldr r1, _080EB814 @ =gTasks - mov r2, r8 - lsls r0, r2, 2 - add r0, r8 - lsls r0, 3 - adds r0, r1 - ldr r1, _080EB818 @ =sub_80EB81C - str r1, [r0] - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080EB804: .4byte gUnknown_8402250 -_080EB808: .4byte gUnknown_203AAC0 -_080EB80C: .4byte gUnknown_84021E8 -_080EB810: .4byte gUnknown_203AABC -_080EB814: .4byte gTasks -_080EB818: .4byte sub_80EB81C - thumb_func_end sub_80EB74C - - thumb_func_start sub_80EB81C -sub_80EB81C: @ 80EB81C - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r6, r1, 3 - ldr r7, _080EB870 @ =gTasks+0x8 - adds r4, r6, r7 - bl Menu_ProcessInputNoWrapAround - lsls r0, 24 - asrs r5, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r5, r0 - beq _080EB8AC - adds r0, 0x1 - cmp r5, r0 - bne _080EB878 - movs r0, 0x5 - bl PlaySE - ldrb r0, [r4, 0x14] - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - ldrb r0, [r4, 0x14] - bl ClearWindowTilemap - ldrb r0, [r4, 0x14] - bl RemoveWindow - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _080EB874 @ =sub_80EB9B8 - str r1, [r0] - b _080EB8AC - .align 2, 0 -_080EB870: .4byte gTasks+0x8 -_080EB874: .4byte sub_80EB9B8 -_080EB878: - ldrb r0, [r4, 0x14] - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - ldrb r0, [r4, 0x14] - bl ClearWindowTilemap - ldrb r0, [r4, 0x14] - bl RemoveWindow - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - adds r2, r7, 0 - subs r2, 0x8 - adds r2, r6, r2 - ldr r1, _080EB8B4 @ =gUnknown_84021E8 - ldr r0, _080EB8B8 @ =gUnknown_203AABC - ldr r0, [r0] - adds r0, r5 - ldrb r0, [r0] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r0, [r0] - str r0, [r2] -_080EB8AC: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080EB8B4: .4byte gUnknown_84021E8 -_080EB8B8: .4byte gUnknown_203AABC - thumb_func_end sub_80EB81C - - thumb_func_start sub_80EB8BC -sub_80EB8BC: @ 80EB8BC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_812B248 - ldr r2, _080EB8DC @ =gUnknown_8416262 - ldr r3, _080EB8E0 @ =sub_80EB74C - adds r0, r4, 0 - movs r1, 0x2 - bl DisplayItemMessageOnField - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EB8DC: .4byte gUnknown_8416262 -_080EB8E0: .4byte sub_80EB74C - thumb_func_end sub_80EB8BC - - thumb_func_start sub_80EB8E4 -sub_80EB8E4: @ 80EB8E4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0 - bl sub_80EB9E8 - ldr r1, _080EB908 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080EB90C @ =sub_80EBAB8 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EB908: .4byte gTasks -_080EB90C: .4byte sub_80EBAB8 - thumb_func_end sub_80EB8E4 - - thumb_func_start sub_80EB910 -sub_80EB910: @ 80EB910 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_80EBDC8 - ldr r4, _080EB934 @ =gUnknown_203AAC4 - movs r1, 0 - strb r0, [r4, 0x5] - lsls r0, 24 - cmp r0, 0 - bne _080EB940 - ldr r2, _080EB938 @ =gUnknown_84177EE - ldr r3, _080EB93C @ =sub_80EB8BC - adds r0, r5, 0 - movs r1, 0x2 - bl DisplayItemMessageOnField - b _080EB9A8 - .align 2, 0 -_080EB934: .4byte gUnknown_203AAC4 -_080EB938: .4byte gUnknown_84177EE -_080EB93C: .4byte sub_80EB8BC -_080EB940: - strh r1, [r4] - strh r1, [r4, 0x2] - bl sub_80EBE04 - adds r0, r5, 0 - bl sub_80EBD88 - ldrb r0, [r4, 0x9] - cmp r0, 0 - bne _080EB95C - movs r0, 0x22 - bl HelpSystem_SetSomeVariable2 - b _080EB962 -_080EB95C: - movs r0, 0x1E - bl HelpSystem_SetSomeVariable2 -_080EB962: - ldr r0, _080EB990 @ =gUnknown_203AAC4 - ldrb r0, [r0, 0x5] - bl MailboxPC_InitBuffers - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080EB99C - movs r0, 0 - movs r1, 0 - bl ClearDialogWindowAndFrame - adds r0, r5, 0 - bl sub_80EBEB0 - ldr r0, _080EB994 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080EB998 @ =sub_80EBF40 - str r0, [r1] - b _080EB9A8 - .align 2, 0 -_080EB990: .4byte gUnknown_203AAC4 -_080EB994: .4byte gTasks -_080EB998: .4byte sub_80EBF40 -_080EB99C: - ldr r2, _080EB9B0 @ =gUnknown_84177EE - ldr r3, _080EB9B4 @ =sub_80EB8BC - adds r0, r5, 0 - movs r1, 0x2 - bl DisplayItemMessageOnField -_080EB9A8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EB9B0: .4byte gUnknown_84177EE -_080EB9B4: .4byte sub_80EB8BC - thumb_func_end sub_80EB910 - - thumb_func_start sub_80EB9B8 -sub_80EB9B8: @ 80EB9B8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080EB9D0 @ =gUnknown_203AAC4 - ldrb r0, [r0, 0x9] - cmp r0, 0 - bne _080EB9D8 - ldr r0, _080EB9D4 @ =gUnknown_8168D17 - bl ScriptContext1_SetupScript - b _080EB9DC - .align 2, 0 -_080EB9D0: .4byte gUnknown_203AAC4 -_080EB9D4: .4byte gUnknown_8168D17 -_080EB9D8: - bl EnableBothScriptContexts -_080EB9DC: - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80EB9B8 - - thumb_func_start sub_80EB9E8 -sub_80EB9E8: @ 80EB9E8 - push {r4-r7,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080EBA10 @ =gTasks+0x8 - adds r6, r1, r0 - ldr r0, _080EBA14 @ =gUnknown_203AAC4 - ldrb r0, [r0, 0x9] - cmp r0, 0 - bne _080EBA18 - movs r0, 0x21 - bl HelpSystem_SetSomeVariable2 - b _080EBA1E - .align 2, 0 -_080EBA10: .4byte gTasks+0x8 -_080EBA14: .4byte gUnknown_203AAC4 -_080EBA18: - movs r0, 0x1D - bl HelpSystem_SetSomeVariable2 -_080EBA1E: - ldr r0, _080EBA80 @ =gUnknown_8402258 - bl AddWindow - strh r0, [r6, 0x14] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl SetStdWindowBorderStyle - movs r0, 0x2 - movs r1, 0 - bl GetMenuCursorDimensionByFont - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - ldrb r0, [r6, 0x14] - movs r5, 0x10 - str r5, [sp] - movs r4, 0x3 - str r4, [sp, 0x4] - ldr r1, _080EBA84 @ =gUnknown_8402208 - str r1, [sp, 0x8] - movs r1, 0x2 - movs r3, 0x2 - bl PrintTextArray - ldrb r0, [r6, 0x14] - str r5, [sp] - str r4, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldr r1, _080EBA88 @ =gUnknown_84021DC - lsls r0, r7, 2 - adds r0, r1 - ldr r0, [r0] - bl sub_80EBA8C - add sp, 0xC - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080EBA80: .4byte gUnknown_8402258 -_080EBA84: .4byte gUnknown_8402208 -_080EBA88: .4byte gUnknown_84021DC - thumb_func_end sub_80EB9E8 - - thumb_func_start sub_80EBA8C -sub_80EBA8C: @ 80EBA8C - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - movs r0, 0 - movs r1, 0 - bl DrawDialogueFrame - movs r0, 0x1 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - movs r1, 0x2 - adds r2, r4, 0 - movs r3, 0 - bl AddTextPrinterParameterized - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80EBA8C - - thumb_func_start sub_80EBAB8 -sub_80EBAB8: @ 80EBAB8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, r5, 0 - ldr r2, _080EBAE4 @ =gMain - ldrh r1, [r2, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080EBAE8 - bl Menu_GetCursorPos - lsls r0, 24 - cmp r0, 0 - beq _080EBB64 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - b _080EBB04 - .align 2, 0 -_080EBAE4: .4byte gMain -_080EBAE8: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080EBB20 - bl Menu_GetCursorPos - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _080EBB64 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 -_080EBB04: - bl Menu_MoveCursor - ldr r4, _080EBB1C @ =gUnknown_84021DC - bl Menu_GetCursorPos - lsls r0, 24 - lsrs r0, 22 - adds r0, r4 - ldr r0, [r0] - bl sub_80EBA8C - b _080EBB64 - .align 2, 0 -_080EBB1C: .4byte gUnknown_84021DC -_080EBB20: - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080EBB4C - movs r0, 0x5 - bl PlaySE - ldr r4, _080EBB48 @ =gUnknown_8402208 - bl Menu_GetCursorPos - lsls r0, 24 - lsrs r0, 21 - adds r4, 0x4 - adds r0, r4 - ldr r1, [r0] - adds r0, r5, 0 - bl _call_via_r1 - b _080EBB64 - .align 2, 0 -_080EBB48: .4byte gUnknown_8402208 -_080EBB4C: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080EBB64 - movs r0, 0x5 - bl PlaySE - ldr r0, _080EBB6C @ =gUnknown_8402208 - ldr r1, [r0, 0x14] - adds r0, r4, 0 - bl _call_via_r1 -_080EBB64: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EBB6C: .4byte gUnknown_8402208 - thumb_func_end sub_80EBAB8 - - thumb_func_start sub_80EBB70 -sub_80EBB70: @ 80EBB70 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080EBBA4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080EBB9C - bl CleanupOverworldWindowsAndTilemaps - ldr r2, _080EBBA8 @ =CB2_ReturnToField - movs r0, 0x3 - movs r1, 0 - bl sub_8107DB4 - ldr r1, _080EBBAC @ =gFieldCallback - ldr r0, _080EBBB0 @ =sub_80EBC0C - str r0, [r1] - adds r0, r4, 0 - bl DestroyTask -_080EBB9C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EBBA4: .4byte gPaletteFade -_080EBBA8: .4byte CB2_ReturnToField -_080EBBAC: .4byte gFieldCallback -_080EBBB0: .4byte sub_80EBC0C - thumb_func_end sub_80EBB70 - - thumb_func_start sub_80EBBB4 -sub_80EBBB4: @ 80EBBB4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080EBBD4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080EBBD8 @ =sub_80EBB70 - str r0, [r1] - movs r0, 0x1 - movs r1, 0 - bl fade_screen - pop {r0} - bx r0 - .align 2, 0 -_080EBBD4: .4byte gTasks -_080EBBD8: .4byte sub_80EBB70 - thumb_func_end sub_80EBBB4 - - thumb_func_start sub_80EBBDC -sub_80EBBDC: @ 80EBBDC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_807AA70 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080EBBFC - ldr r0, _080EBC04 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080EBC08 @ =sub_80EBAB8 - str r0, [r1] -_080EBBFC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EBC04: .4byte gTasks -_080EBC08: .4byte sub_80EBAB8 - thumb_func_end sub_80EBBDC - - thumb_func_start sub_80EBC0C -sub_80EBC0C: @ 80EBC0C - push {lr} - bl sub_80F6E9C - movs r0, 0 - movs r1, 0x1 - bl DrawDialogueFrame - ldr r0, _080EBC34 @ =sub_80EBBDC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl sub_80EB9E8 - bl sub_807DC00 - pop {r0} - bx r0 - .align 2, 0 -_080EBC34: .4byte sub_80EBBDC - thumb_func_end sub_80EBC0C - - thumb_func_start sub_80EBC38 -sub_80EBC38: @ 80EBC38 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r6, r0, 3 - ldr r7, _080EBC6C @ =gTasks+0x8 - adds r4, r6, r7 - bl CountItemsInPC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x4] - cmp r0, 0 - beq _080EBC7C - movs r0, 0 - strh r0, [r4, 0xC] - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _080EBC70 @ =sub_80EBD18 - str r1, [r0] - ldr r1, _080EBC74 @ =gFieldCallback - ldr r0, _080EBC78 @ =sub_80EBCAC - str r0, [r1] - b _080EBC9C - .align 2, 0 -_080EBC6C: .4byte gTasks+0x8 -_080EBC70: .4byte sub_80EBD18 -_080EBC74: .4byte gFieldCallback -_080EBC78: .4byte sub_80EBCAC -_080EBC7C: - ldrb r0, [r4, 0x14] - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - ldrb r0, [r4, 0x14] - bl ClearWindowTilemap - ldrb r0, [r4, 0x14] - bl RemoveWindow - ldr r2, _080EBCA4 @ =gUnknown_8417774 - ldr r3, _080EBCA8 @ =sub_80EB8E4 - adds r0, r5, 0 - movs r1, 0x2 - bl DisplayItemMessageOnField -_080EBC9C: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080EBCA4: .4byte gUnknown_8417774 -_080EBCA8: .4byte sub_80EB8E4 - thumb_func_end sub_80EBC38 - - thumb_func_start sub_80EBCAC -sub_80EBCAC: @ 80EBCAC - push {lr} - bl sub_80F6E9C - movs r0, 0 - movs r1, 0x1 - bl DrawDialogueFrame - ldr r0, _080EBCD4 @ =sub_80EBBDC - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_80EB9E8 - bl sub_807DC00 - pop {r0} - bx r0 - .align 2, 0 -_080EBCD4: .4byte sub_80EBBDC - thumb_func_end sub_80EBCAC - - thumb_func_start sub_80EBCD8 -sub_80EBCD8: @ 80EBCD8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080EBD0C @ =gTasks+0x8 - adds r5, r0, r1 - ldr r0, _080EBD10 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080EBD06 - bl CleanupOverworldWindowsAndTilemaps - ldrb r0, [r5, 0xC] - ldr r1, _080EBD14 @ =CB2_ReturnToField - bl ItemPc_Init - adds r0, r4, 0 - bl DestroyTask -_080EBD06: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EBD0C: .4byte gTasks+0x8 -_080EBD10: .4byte gPaletteFade -_080EBD14: .4byte CB2_ReturnToField - thumb_func_end sub_80EBCD8 - - thumb_func_start sub_80EBD18 -sub_80EBD18: @ 80EBD18 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080EBD40 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080EBD44 @ =sub_80EBCD8 - str r0, [r1] - movs r0, 0 - bl ItemPc_SetInitializedFlag - movs r0, 0x1 - movs r1, 0 - bl fade_screen - pop {r0} - bx r0 - .align 2, 0 -_080EBD40: .4byte gTasks -_080EBD44: .4byte sub_80EBCD8 - thumb_func_end sub_80EBD18 - - thumb_func_start sub_80EBD48 -sub_80EBD48: @ 80EBD48 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _080EBD84 @ =gTasks+0x8 - adds r4, r0 - ldrb r0, [r4, 0x14] - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - ldrb r0, [r4, 0x14] - bl ClearWindowTilemap - ldrb r0, [r4, 0x14] - movs r1, 0x1 - bl CopyWindowToVram - ldrb r0, [r4, 0x14] - bl RemoveWindow - adds r0, r5, 0 - bl sub_80EB8BC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EBD84: .4byte gTasks+0x8 - thumb_func_end sub_80EBD48 - - thumb_func_start sub_80EBD88 -sub_80EBD88: @ 80EBD88 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080EBDA8 @ =gTasks+0x8 - adds r1, r0 - ldrh r2, [r1, 0x4] - movs r3, 0x4 - ldrsh r0, [r1, r3] - cmp r0, 0x7 - ble _080EBDAC - movs r0, 0x8 - b _080EBDAE - .align 2, 0 -_080EBDA8: .4byte gTasks+0x8 -_080EBDAC: - adds r0, r2, 0x1 -_080EBDAE: - strh r0, [r1, 0x8] - ldr r1, _080EBDBC @ =gUnknown_203AAC4 - ldrb r0, [r1, 0x5] - cmp r0, 0x7 - bls _080EBDC0 - movs r0, 0x8 - b _080EBDC2 - .align 2, 0 -_080EBDBC: .4byte gUnknown_203AAC4 -_080EBDC0: - adds r0, 0x1 -_080EBDC2: - strb r0, [r1, 0x4] - pop {r0} - bx r0 - thumb_func_end sub_80EBD88 - - thumb_func_start sub_80EBDC8 -sub_80EBDC8: @ 80EBDC8 - push {r4,lr} - movs r2, 0 - movs r1, 0x6 - ldr r0, _080EBDFC @ =gSaveBlock1Ptr - ldr r3, [r0] - ldr r4, _080EBE00 @ =0x00002cf0 -_080EBDD4: - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r3, r0 - adds r0, r4 - ldrh r0, [r0] - cmp r0, 0 - beq _080EBDEA - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 -_080EBDEA: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xF - bls _080EBDD4 - adds r0, r2, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080EBDFC: .4byte gSaveBlock1Ptr -_080EBE00: .4byte 0x00002cf0 - thumb_func_end sub_80EBDC8 - - thumb_func_start sub_80EBE04 -sub_80EBE04: @ 80EBE04 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - movs r2, 0x6 -_080EBE12: - adds r1, r2, 0x1 - lsls r0, r1, 24 - lsrs r4, r0, 24 - mov r8, r1 - cmp r4, 0xF - bhi _080EBE8A - ldr r0, _080EBEA4 @ =gSaveBlock1Ptr - mov r10, r0 - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 2 - mov r12, r0 - ldr r6, _080EBEA8 @ =0x00002cd0 -_080EBE2C: - mov r1, r10 - ldr r1, [r1] - mov r9, r1 - mov r2, r9 - add r2, r12 - ldr r3, _080EBEAC @ =0x00002cf0 - adds r0, r2, r3 - ldrh r0, [r0] - cmp r0, 0 - bne _080EBE80 - adds r2, r6 - mov r1, sp - adds r0, r2, 0 - ldm r0!, {r3,r5,r7} - stm r1!, {r3,r5,r7} - ldm r0!, {r3,r5,r7} - stm r1!, {r3,r5,r7} - ldm r0!, {r3,r5,r7} - stm r1!, {r3,r5,r7} - lsls r3, r4, 3 - adds r3, r4 - lsls r3, 2 - mov r5, r9 - adds r0, r5, r3 - adds r0, r6 - ldm r0!, {r1,r5,r7} - stm r2!, {r1,r5,r7} - ldm r0!, {r1,r5,r7} - stm r2!, {r1,r5,r7} - ldm r0!, {r1,r5,r7} - stm r2!, {r1,r5,r7} - mov r7, r10 - ldr r1, [r7] - adds r1, r3 - adds r1, r6 - mov r0, sp - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r5,r7} - stm r1!, {r2,r5,r7} -_080EBE80: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _080EBE2C -_080EBE8A: - mov r3, r8 - lsls r0, r3, 24 - lsrs r2, r0, 24 - cmp r2, 0xE - bls _080EBE12 - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080EBEA4: .4byte gSaveBlock1Ptr -_080EBEA8: .4byte 0x00002cd0 -_080EBEAC: .4byte 0x00002cf0 - thumb_func_end sub_80EBE04 - - thumb_func_start sub_80EBEB0 -sub_80EBEB0: @ 80EBEB0 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - movs r0, 0 - bl MailboxPC_GetAddWindow - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080EBF34 @ =gUnknown_84176FE - mov r8, r0 - movs r0, 0x2 - mov r1, r8 - movs r2, 0 - bl GetStringWidth - adds r5, r0, 0 - movs r0, 0x1 - bl MailboxPC_GetAddWindow - movs r3, 0x50 - subs r3, r5 - lsrs r0, r3, 31 - adds r3, r0 - asrs r3, 1 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0x2 - mov r2, r8 - bl AddTextPrinterParameterized - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldr r4, _080EBF38 @ =gUnknown_203AAC4 - adds r0, r4, 0 - bl MailboxPC_InitListMenu - ldr r2, _080EBF3C @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x1E] - adds r0, r4, 0 - bl MailboxPC_AddScrollIndicatorArrows - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EBF34: .4byte gUnknown_84176FE -_080EBF38: .4byte gUnknown_203AAC4 -_080EBF3C: .4byte gTasks - thumb_func_end sub_80EBEB0 - - thumb_func_start sub_80EBF40 -sub_80EBF40: @ 80EBF40 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - mov r9, r0 - ldr r0, _080EBF94 @ =gTasks+0x8 - mov r10, r0 - mov r4, r9 - add r4, r10 - ldr r0, _080EBF98 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080EBFEA - ldrb r0, [r4, 0x16] - bl ListMenu_ProcessInput - adds r6, r0, 0 - ldrb r0, [r4, 0x16] - ldr r7, _080EBF9C @ =gUnknown_203AAC6 - subs r1, r7, 0x2 - mov r8, r1 - adds r1, r7, 0 - mov r2, r8 - bl ListMenuGetScrollAndRow - movs r0, 0x2 - negs r0, r0 - cmp r6, r0 - beq _080EBFA0 - adds r0, 0x1 - cmp r6, r0 - bne _080EBFB6 - b _080EBFEA - .align 2, 0 -_080EBF94: .4byte gTasks+0x8 -_080EBF98: .4byte gPaletteFade -_080EBF9C: .4byte gUnknown_203AAC6 -_080EBFA0: - movs r0, 0x5 - bl PlaySE - mov r1, r8 - ldrb r0, [r1, 0xA] - bl RemoveScrollIndicatorArrowPair - adds r0, r5, 0 - bl sub_80EC094 - b _080EBFEA -_080EBFB6: - movs r0, 0x5 - bl PlaySE - movs r0, 0 - bl MailboxPC_RemoveWindow - movs r0, 0x1 - bl MailboxPC_RemoveWindow - ldrb r0, [r4, 0x16] - adds r1, r7, 0 - mov r2, r8 - bl DestroyListMenuTask - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - mov r1, r8 - ldrb r0, [r1, 0xA] - bl RemoveScrollIndicatorArrowPair - mov r0, r10 - subs r0, 0x8 - add r0, r9 - ldr r1, _080EBFF8 @ =sub_80EBFFC - str r1, [r0] -_080EBFEA: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080EBFF8: .4byte sub_80EBFFC - thumb_func_end sub_80EBF40 - - thumb_func_start sub_80EBFFC -sub_80EBFFC: @ 80EBFFC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _080EC054 @ =gStringVar1 - ldr r2, _080EC058 @ =gSaveBlock1Ptr - ldr r1, _080EC05C @ =gUnknown_203AAC4 - ldrh r0, [r1] - adds r0, 0x6 - ldrh r1, [r1, 0x2] - adds r0, r1 - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, [r2] - adds r1, r0 - ldr r0, _080EC060 @ =0x00002ce2 - adds r1, r0 - adds r0, r4, 0 - bl StringCopy - adds r0, r4, 0 - bl StringLength - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x5 - ble _080EC064 - subs r0, r4, 0x1 - adds r1, r0 - cmp r1, r4 - bcc _080EC06C - ldrb r0, [r1] - cmp r0, 0 - bne _080EC06C - movs r3, 0xFF - adds r2, r4, 0 -_080EC044: - strb r3, [r1] - subs r1, 0x1 - cmp r1, r2 - bcc _080EC06C - ldrb r0, [r1] - cmp r0, 0 - beq _080EC044 - b _080EC06C - .align 2, 0 -_080EC054: .4byte gStringVar1 -_080EC058: .4byte gSaveBlock1Ptr -_080EC05C: .4byte gUnknown_203AAC4 -_080EC060: .4byte 0x00002ce2 -_080EC064: - adds r0, r4, 0 - movs r1, 0x1 - bl ConvertInternationalString -_080EC06C: - ldr r4, _080EC088 @ =gStringVar4 - ldr r1, _080EC08C @ =gUnknown_8417806 - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r3, _080EC090 @ =sub_80EC0D8 - adds r0, r5, 0 - movs r1, 0x2 - adds r2, r4, 0 - bl DisplayItemMessageOnField - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EC088: .4byte gStringVar4 -_080EC08C: .4byte gUnknown_8417806 -_080EC090: .4byte sub_80EC0D8 - thumb_func_end sub_80EBFFC - - thumb_func_start sub_80EC094 -sub_80EC094: @ 80EC094 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _080EC0D4 @ =gTasks+0x8 - adds r4, r0 - movs r0, 0 - bl MailboxPC_RemoveWindow - movs r0, 0x1 - bl MailboxPC_RemoveWindow - ldrb r0, [r4, 0x16] - movs r1, 0 - movs r2, 0 - bl DestroyListMenuTask - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - bl MailboxPC_DestroyListMenuBuffer - adds r0, r5, 0 - bl sub_80EB8BC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080EC0D4: .4byte gTasks+0x8 - thumb_func_end sub_80EC094 - - thumb_func_start sub_80EC0D8 -sub_80EC0D8: @ 80EC0D8 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - movs r0, 0x2 - bl MailboxPC_GetAddWindow - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x2 - movs r1, 0 - bl GetMenuCursorDimensionByFont - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - movs r0, 0x10 - mov r8, r0 - str r0, [sp] - movs r6, 0x4 - str r6, [sp, 0x4] - ldr r0, _080EC150 @ =gUnknown_8402228 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0x2 - movs r3, 0x2 - bl PrintTextArray - mov r0, r8 - str r0, [sp] - str r6, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldr r1, _080EC154 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080EC158 @ =sub_80EC15C - str r1, [r0] - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EC150: .4byte gUnknown_8402228 -_080EC154: .4byte gTasks -_080EC158: .4byte sub_80EC15C - thumb_func_end sub_80EC0D8 - - thumb_func_start sub_80EC15C -sub_80EC15C: @ 80EC15C - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - bl Menu_ProcessInput_other - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _080EC19E - adds r0, 0x1 - cmp r4, r0 - bne _080EC188 - movs r0, 0x5 - bl PlaySE - adds r0, r5, 0 - bl sub_80EC574 - b _080EC19E -_080EC188: - movs r0, 0x5 - bl PlaySE - ldr r0, _080EC1A4 @ =gUnknown_8402228 - lsls r1, r4, 3 - adds r0, 0x4 - adds r1, r0 - ldr r1, [r1] - adds r0, r6, 0 - bl _call_via_r1 -_080EC19E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EC1A4: .4byte gUnknown_8402228 - thumb_func_end sub_80EC15C - - thumb_func_start sub_80EC1A8 -sub_80EC1A8: @ 80EC1A8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - movs r1, 0 - bl fade_screen - ldr r1, _080EC1CC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080EC1D0 @ =sub_80EC1D4 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EC1CC: .4byte gTasks -_080EC1D0: .4byte sub_80EC1D4 - thumb_func_end sub_80EC1A8 - - thumb_func_start sub_80EC1D4 -sub_80EC1D4: @ 80EC1D4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080EC21C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080EC216 - bl MailboxPC_DestroyListMenuBuffer - bl CleanupOverworldWindowsAndTilemaps - ldr r2, _080EC220 @ =gSaveBlock1Ptr - ldr r1, _080EC224 @ =gUnknown_203AAC4 - ldrh r0, [r1] - adds r0, 0x6 - ldrh r1, [r1, 0x2] - adds r0, r1 - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _080EC228 @ =0x00002cd0 - adds r1, r0 - ldr r0, [r2] - adds r0, r1 - ldr r1, _080EC22C @ =sub_80EC2C0 - movs r2, 0x1 - bl sub_80BEBEC - adds r0, r4, 0 - bl DestroyTask -_080EC216: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EC21C: .4byte gPaletteFade -_080EC220: .4byte gSaveBlock1Ptr -_080EC224: .4byte gUnknown_203AAC4 -_080EC228: .4byte 0x00002cd0 -_080EC22C: .4byte sub_80EC2C0 - thumb_func_end sub_80EC1D4 - - thumb_func_start sub_80EC230 -sub_80EC230: @ 80EC230 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_807AA70 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080EC250 - ldr r0, _080EC258 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080EC25C @ =sub_80EBF40 - str r0, [r1] -_080EC250: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EC258: .4byte gTasks -_080EC25C: .4byte sub_80EBF40 - thumb_func_end sub_80EC230 - - thumb_func_start sub_80EC260 -sub_80EC260: @ 80EC260 - push {r4,lr} - ldr r0, _080EC274 @ =gUnknown_203AAC4 - ldrb r0, [r0, 0x9] - cmp r0, 0 - bne _080EC278 - movs r0, 0x22 - bl HelpSystem_SetSomeVariable2 - b _080EC27E - .align 2, 0 -_080EC274: .4byte gUnknown_203AAC4 -_080EC278: - movs r0, 0x1E - bl HelpSystem_SetSomeVariable2 -_080EC27E: - bl sub_80F6E9C - ldr r0, _080EC2A8 @ =sub_80EC230 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080EC2AC @ =gUnknown_203AAC4 - ldrb r0, [r0, 0x5] - bl MailboxPC_InitBuffers - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080EC2B0 - adds r0, r4, 0 - bl sub_80EBEB0 - b _080EC2B6 - .align 2, 0 -_080EC2A8: .4byte sub_80EC230 -_080EC2AC: .4byte gUnknown_203AAC4 -_080EC2B0: - adds r0, r4, 0 - bl DestroyTask -_080EC2B6: - bl sub_807DC00 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80EC260 - - thumb_func_start sub_80EC2C0 -sub_80EC2C0: @ 80EC2C0 - push {lr} - ldr r0, _080EC2D4 @ =gFieldCallback - ldr r1, _080EC2D8 @ =sub_80EC260 - str r1, [r0] - ldr r0, _080EC2DC @ =CB2_ReturnToField - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_080EC2D4: .4byte gFieldCallback -_080EC2D8: .4byte sub_80EC260 -_080EC2DC: .4byte CB2_ReturnToField - thumb_func_end sub_80EC2C0 - - thumb_func_start sub_80EC2E0 -sub_80EC2E0: @ 80EC2E0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080EC2F4 @ =gUnknown_8417830 - ldr r3, _080EC2F8 @ =sub_80EC2FC - movs r1, 0x2 - bl DisplayItemMessageOnField - pop {r0} - bx r0 - .align 2, 0 -_080EC2F4: .4byte gUnknown_8417830 -_080EC2F8: .4byte sub_80EC2FC - thumb_func_end sub_80EC2E0 - - thumb_func_start sub_80EC2FC -sub_80EC2FC: @ 80EC2FC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl DisplayYesNoMenuDefaultYes - ldr r1, _080EC31C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080EC320 @ =sub_80EC324 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EC31C: .4byte gTasks -_080EC320: .4byte sub_80EC324 - thumb_func_end sub_80EC2FC - - thumb_func_start sub_80EC324 -sub_80EC324: @ 80EC324 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r0, 24 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - beq _080EC350 - cmp r0, r1 - ble _080EC35C - cmp r0, 0 - beq _080EC348 - cmp r0, 0x1 - beq _080EC356 - b _080EC35C -_080EC348: - adds r0, r4, 0 - bl sub_80EC364 - b _080EC35C -_080EC350: - movs r0, 0x5 - bl PlaySE -_080EC356: - adds r0, r4, 0 - bl sub_80EC3F8 -_080EC35C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80EC324 - - thumb_func_start sub_80EC364 -sub_80EC364: @ 80EC364 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r2, _080EC3A0 @ =gSaveBlock1Ptr - ldr r4, _080EC3A4 @ =gUnknown_203AAC4 - ldrh r1, [r4] - adds r1, 0x6 - ldrh r0, [r4, 0x2] - adds r1, r0 - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080EC3A8 @ =0x00002cd0 - adds r0, r1 - ldr r1, [r2] - adds r5, r1, r0 - ldrh r0, [r5, 0x20] - movs r1, 0x1 - bl AddBagItem - lsls r0, 24 - cmp r0, 0 - bne _080EC3B4 - ldr r2, _080EC3AC @ =gUnknown_8417858 - ldr r3, _080EC3B0 @ =sub_80EC574 - adds r0, r6, 0 - movs r1, 0x2 - bl DisplayItemMessageOnField - b _080EC3EA - .align 2, 0 -_080EC3A0: .4byte gSaveBlock1Ptr -_080EC3A4: .4byte gUnknown_203AAC4 -_080EC3A8: .4byte 0x00002cd0 -_080EC3AC: .4byte gUnknown_8417858 -_080EC3B0: .4byte sub_80EC574 -_080EC3B4: - ldr r2, _080EC3F0 @ =gUnknown_841786B - ldr r3, _080EC3F4 @ =sub_80EC574 - adds r0, r6, 0 - movs r1, 0x2 - bl DisplayItemMessageOnField - adds r0, r5, 0 - bl ClearMailStruct - bl sub_80EBE04 - ldrb r0, [r4, 0x5] - subs r0, 0x1 - strb r0, [r4, 0x5] - ldrb r1, [r4, 0x5] - ldrb r0, [r4, 0x4] - ldrh r2, [r4, 0x2] - adds r0, r2 - cmp r1, r0 - bge _080EC3E4 - cmp r2, 0 - beq _080EC3E4 - subs r0, r2, 0x1 - strh r0, [r4, 0x2] -_080EC3E4: - adds r0, r6, 0 - bl sub_80EBD88 -_080EC3EA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080EC3F0: .4byte gUnknown_841786B -_080EC3F4: .4byte sub_80EC574 - thumb_func_end sub_80EC364 - - thumb_func_start sub_80EC3F8 -sub_80EC3F8: @ 80EC3F8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_80EC574 - pop {r0} - bx r0 - thumb_func_end sub_80EC3F8 - - thumb_func_start sub_80EC408 -sub_80EC408: @ 80EC408 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl CalculatePlayerPartyCount - lsls r0, 24 - cmp r0, 0 - bne _080EC420 - adds r0, r4, 0 - bl sub_80EC520 - b _080EC436 -_080EC420: - movs r0, 0x1 - movs r1, 0 - bl fade_screen - ldr r0, _080EC43C @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080EC440 @ =sub_80EC444 - str r0, [r1] -_080EC436: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EC43C: .4byte gTasks -_080EC440: .4byte sub_80EC444 - thumb_func_end sub_80EC408 - - thumb_func_start sub_80EC444 -sub_80EC444: @ 80EC444 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080EC470 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080EC468 - bl MailboxPC_DestroyListMenuBuffer - bl CleanupOverworldWindowsAndTilemaps - bl sub_81273D8 - adds r0, r4, 0 - bl DestroyTask -_080EC468: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EC470: .4byte gPaletteFade - thumb_func_end sub_80EC444 - - thumb_func_start sub_80EC474 -sub_80EC474: @ 80EC474 - push {r4-r6,lr} - ldr r0, _080EC488 @ =gUnknown_203AAC4 - ldrb r0, [r0, 0x9] - cmp r0, 0 - bne _080EC48C - movs r0, 0x22 - bl HelpSystem_SetSomeVariable2 - b _080EC492 - .align 2, 0 -_080EC488: .4byte gUnknown_203AAC4 -_080EC48C: - movs r0, 0x1E - bl HelpSystem_SetSomeVariable2 -_080EC492: - ldr r0, _080EC4E8 @ =sub_80EC230 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r6, r0, 24 - ldr r5, _080EC4EC @ =gUnknown_203AAC4 - ldrb r4, [r5, 0x5] - bl sub_80EBDC8 - strb r0, [r5, 0x5] - bl sub_80EBE04 - ldrb r0, [r5, 0x5] - cmp r4, r0 - beq _080EC4C6 - ldrb r1, [r5, 0x5] - ldrb r0, [r5, 0x4] - ldrh r2, [r5, 0x2] - adds r0, r2 - cmp r1, r0 - bge _080EC4C6 - cmp r2, 0 - beq _080EC4C6 - subs r0, r2, 0x1 - strh r0, [r5, 0x2] -_080EC4C6: - adds r0, r6, 0 - bl sub_80EBD88 - bl sub_80F6E9C - ldr r0, _080EC4EC @ =gUnknown_203AAC4 - ldrb r0, [r0, 0x5] - bl MailboxPC_InitBuffers - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080EC4F0 - adds r0, r6, 0 - bl sub_80EBEB0 - b _080EC4F6 - .align 2, 0 -_080EC4E8: .4byte sub_80EC230 -_080EC4EC: .4byte gUnknown_203AAC4 -_080EC4F0: - adds r0, r6, 0 - bl DestroyTask -_080EC4F6: - bl sub_807DC00 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80EC474 - - thumb_func_start sub_80EC500 -sub_80EC500: @ 80EC500 - push {lr} - ldr r0, _080EC514 @ =gFieldCallback - ldr r1, _080EC518 @ =sub_80EC474 - str r1, [r0] - ldr r0, _080EC51C @ =CB2_ReturnToField - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_080EC514: .4byte gFieldCallback -_080EC518: .4byte sub_80EC474 -_080EC51C: .4byte CB2_ReturnToField - thumb_func_end sub_80EC500 - - thumb_func_start sub_80EC520 -sub_80EC520: @ 80EC520 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080EC534 @ =gText_ThereIsNoPokemon - ldr r3, _080EC538 @ =sub_80EC574 - movs r1, 0x2 - bl DisplayItemMessageOnField - pop {r0} - bx r0 - .align 2, 0 -_080EC534: .4byte gText_ThereIsNoPokemon -_080EC538: .4byte sub_80EC574 - thumb_func_end sub_80EC520 - - thumb_func_start sub_80EC53C -sub_80EC53C: @ 80EC53C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - movs r1, 0 - bl ClearDialogWindowAndFrame - adds r0, r4, 0 - bl sub_80EBEB0 - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldr r1, _080EC56C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080EC570 @ =sub_80EBF40 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EC56C: .4byte gTasks -_080EC570: .4byte sub_80EBF40 - thumb_func_end sub_80EC53C - - thumb_func_start sub_80EC574 -sub_80EC574: @ 80EC574 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x2 - bl MailboxPC_RemoveWindow - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldr r1, _080EC59C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080EC5A0 @ =sub_80EC53C - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080EC59C: .4byte gTasks -_080EC5A0: .4byte sub_80EC53C - thumb_func_end sub_80EC574 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 180ec0e5d..c6daa62ea 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -1455,7 +1455,7 @@ _0808C3E0: .align 2, 0 _0808C444: .4byte gUnknown_83CDA20 _0808C448: - bl sub_807AA70 + bl field_weather_is_fade_finished lsls r0, 24 cmp r0, 0 bne _0808C454 diff --git a/asm/shop.s b/asm/shop.s index c0f4779b7..bc5eccd64 100644 --- a/asm/shop.s +++ b/asm/shop.s @@ -386,7 +386,7 @@ sub_809AD8C: @ 809AD8C push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_807AA70 + bl field_weather_is_fade_finished lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s index 0944bf82a..ce1f5aeeb 100644 --- a/data/data_83FECCC.s +++ b/data/data_83FECCC.s @@ -139,37 +139,6 @@ gUnknown_84020E6:: @ 84020E6 gUnknown_84020F8:: @ 84020F8 .incbin "baserom.gba", 0x4020F8, 0xE4 -gUnknown_84021DC:: @ 84021DC - .incbin "baserom.gba", 0x4021DC, 0xC - -gUnknown_84021E8:: @ 84021E8 - .incbin "baserom.gba", 0x4021E8, 0x18 - -gUnknown_8402200:: @ 8402200 - .incbin "baserom.gba", 0x402200, 0x3 - -gUnknown_8402203:: @ 8402203 - .incbin "baserom.gba", 0x402203, 0x5 - -gUnknown_8402208:: @ 8402208 - .incbin "baserom.gba", 0x402208, 0x18 - -gUnknown_8402220:: @ 8402220 - .incbin "baserom.gba", 0x402220, 0x8 - -gUnknown_8402228:: @ 8402228 - .incbin "baserom.gba", 0x402228, 0x20 - -gUnknown_8402248:: @ 8402248 - .incbin "baserom.gba", 0x402248, 0x8 - -gUnknown_8402250:: @ 8402250 - .incbin "baserom.gba", 0x402250, 0x8 - -gUnknown_8402258:: @ 8402258 - .incbin "baserom.gba", 0x402258, 0x8 - - .section .rodata.battle_anim_special gUnknown_840BF3C:: @ 840BF3C diff --git a/data/maps/PalletTown_PlayersHouse_2F/scripts.inc b/data/maps/PalletTown_PlayersHouse_2F/scripts.inc index 3700d06be..77ff855e4 100644 --- a/data/maps/PalletTown_PlayersHouse_2F/scripts.inc +++ b/data/maps/PalletTown_PlayersHouse_2F/scripts.inc @@ -47,7 +47,7 @@ PalletTown_PlayersHouse_2F_EventScript_168CE4:: @ 8168CE4 releaseall end -gUnknown_8168D17:: @ 8168D17 +EventScript_PalletTown_PlayersHouse_2F_ShutDownPC:: @ 8168D17 setvar VAR_0x8004, 1 playse SE_PC_OFF special sub_80CA9A8 diff --git a/data/strings.s b/data/strings.s index 63c08bbab..4f0fefb19 100644 --- a/data/strings.s +++ b/data/strings.s @@ -475,11 +475,11 @@ gUnknown_841623D:: @ 841623D .string "YES\n" .string "NO$" -gUnknown_8416244:: +gText_GoBackToThePreviousMenu:: .string "Go back to the\n" .string "previous menu.$" -gUnknown_8416262:: @ 8416262 +gText_WhatWouldYouLikeToDo:: @ 8416262 .string "What would you like to do?$" gUnknown_841627D:: @@ -1135,37 +1135,37 @@ gUnknown_84176CE:: @ 0x84176CE gUnknown_84176CF:: @ 84176CF .string "Cancel the battle?$" -gUnknown_84176E2:: @ 0x84176E2 +gText_TurnOff:: @ 0x84176E2 .string "TURN OFF$" gUnknown_84176EB:: @ 0x84176EB .string "もようがえ$" -gUnknown_84176F1:: @ 0x84176F1 +gText_ItemStorage:: @ 0x84176F1 .string "ITEM STORAGE$" -gUnknown_84176FE:: @ 84176FE +gText_Mailbox:: @ 84176FE .string "MAILBOX$" -gUnknown_8417706:: @ 0x8417706 +gText_DepositItem2:: @ 0x8417706 .string "DEPOSIT ITEM$" -gUnknown_8417713:: @ 0x8417713 +gText_WithdrawItem2:: @ 0x8417713 .string "WITHDRAW ITEM$" gUnknown_8417721:: @ 0x8417721 .string "どうぐを すてる$" -gUnknown_841772A:: @ 0x841772A +gText_StoreItemsInThePC:: @ 0x841772A .string "Store items in the PC.$" -gUnknown_8417741:: @ 0x8417741 +gText_TakeOutItemsFromThePC:: @ 0x8417741 .string "Take out items from the PC.$" gUnknown_841775D:: @ 0x841775D .string "パソコンに あずけている\nどうぐを すてます$" -gUnknown_8417774:: @ 8417774 +gText_ThereAreNoItems:: @ 8417774 .string "There are no items.{PAUSE_UNTIL_PRESS}$" gText_NoMoreRoomInBag:: @ 841778A @@ -1189,19 +1189,19 @@ gOtherText_MoveToBag:: gOtherText_Give2:: .string "GIVE$" -gUnknown_84177EE:: @ 84177EE +gText_TheresNoMailHere:: @ 84177EE .string "There's no MAIL here.{PAUSE_UNTIL_PRESS}$" -gUnknown_8417806:: @ 8417806 +gText_WhatWouldYouLikeToDoWithPlayersMail:: @ 8417806 .string "What would you like to do with\n{STR_VAR_1}'s MAIL?$" -gUnknown_8417830:: @ 8417830 +gText_MessageWillBeLost:: @ 8417830 .string "The message will be lost.\nIs that okay?$" -gUnknown_8417858:: @ 8417858 +gText_BagIsFull:: @ 8417858 .string "The BAG is full.{PAUSE_UNTIL_PRESS}$" -gUnknown_841786B:: @ 841786B +gText_MailReturnedToBagMessageErased:: @ 841786B .string "The MAIL was returned to the BAG\nwith its message erased.{PAUSE_UNTIL_PRESS}$" gText_WithdrawItem:: @ 84178A7 diff --git a/include/event_scripts.h b/include/event_scripts.h index 41a7a7bf2..ce9d0bbf5 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1158,4 +1158,7 @@ extern const u8 EventScript_ItemfinderDigUpUnderfootItem[]; // new_game extern const u8 EventScript_ResetAllMapFlags[]; +// player_pc +extern const u8 EventScript_PalletTown_PlayersHouse_2F_ShutDownPC[]; + #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/field_weather.h b/include/field_weather.h index 78d2f2412..96c1ce7cb 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -13,7 +13,7 @@ void DoCurrentWeather(void); void SetSav1WeatherFromCurrMapHeader(void); void sub_807B0C4(u16 *, u16 *, u32); void PlayRainStoppingSoundEffect(void); -bool8 sub_807AA70(void); +bool8 field_weather_is_fade_finished(void); void SetWeatherScreenFadeOut(void); void sub_807B070(void); u8 GetCurrentWeather(void); diff --git a/include/help_system.h b/include/help_system.h index f28c168f7..ff77d01d6 100644 --- a/include/help_system.h +++ b/include/help_system.h @@ -89,5 +89,7 @@ void HelpSystem_FillPanel3(void); void PrintListMenuItems(void); void PlaceListMenuCursor(void); bool8 MoveCursor(u8 by, u8 dirn); +void sub_812B234(void); +void sub_812B248(void); #endif //GUARD_HELP_SYSTEM_H diff --git a/include/item.h b/include/item.h index 6e0af31bb..69560a0e5 100644 --- a/include/item.h +++ b/include/item.h @@ -77,5 +77,6 @@ u16 GetPcItemQuantity(u16 *); void ItemPcCompaction(void); void RemoveItemFromPC(u16 itemId, u16 quantity); void SortAndCompactBagPocket(struct BagPocket * pocket); +u8 CountItemsInPC(void); #endif // GUARD_ITEM_H diff --git a/include/item_menu.h b/include/item_menu.h index ceaf277a3..83b8d6d15 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -38,5 +38,6 @@ void sub_810A1F8(u8 taskId); void sub_8107ECC(void); void sub_8108DC8(u8 pocketId); void sub_81089F4(u8 pocketId); +void sub_8107DB4(u8 menuType, u8 pocket, MainCallback callback); #endif //GUARD_ITEM_MENU_H diff --git a/include/mailbox_pc.h b/include/mailbox_pc.h index c2d18fc4b..6d23648b3 100644 --- a/include/mailbox_pc.h +++ b/include/mailbox_pc.h @@ -1,12 +1,14 @@ #ifndef GUARD_MAILBOX_PC_H #define GUARD_MAILBOX_PC_H +#include "player_pc.h" + bool8 MailboxPC_InitBuffers(u8 num); u8 MailboxPC_GetAddWindow(u8 winIdx); void MailboxPC_RemoveWindow(u8 winIdx); u8 MailboxPC_GetWindowId(u8 winIdx); -u8 MailboxPC_InitListMenu(struct PlayerPC_Unk_203AAC4 * playerPcStruct); -void MailboxPC_AddScrollIndicatorArrows(struct PlayerPC_Unk_203AAC4 * playerPcStruct); +u8 MailboxPC_InitListMenu(struct PlayerPCItemPageStruct * playerPcStruct); +void MailboxPC_AddScrollIndicatorArrows(struct PlayerPCItemPageStruct * playerPcStruct); void MailboxPC_DestroyListMenuBuffer(void); #endif //GUARD_MAILBOX_PC_H diff --git a/include/overworld.h b/include/overworld.h index 77cacff94..54e1b601f 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -113,7 +113,6 @@ u32 sub_8054C04(void); extern u8 gDisableMapMusicChangeOnMapLoad; extern u8 gUnknown_2036E28; -extern void (*gFieldCallback)(void); extern bool8 (* gFieldCallback2)(void); void SetLastHealLocationWarp(u8 healLocaionId); diff --git a/include/party_menu.h b/include/party_menu.h index bea5dcdde..16dccb6d8 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -82,5 +82,6 @@ void OpenPartyMenuInBattle(u8 arg); void sub_8127EC4(u8 battlerId, u8 unk, u8 arrayIndex); bool8 IsMultiBattle(void); void sub_8126EDC(void); +void PartyMenuInit_FromPlayerPc(void); #endif // GUARD_PARTY_MENU_H diff --git a/include/player_pc.h b/include/player_pc.h index 06ab0cb0f..ecaf023e5 100644 --- a/include/player_pc.h +++ b/include/player_pc.h @@ -6,14 +6,16 @@ // Exported type declarations -struct PlayerPC_Unk_203AAC4 +struct PlayerPCItemPageStruct { u16 selectedRow; u16 scrollOffset; - u8 unk_4; - u8 unk_5; - u8 filler_6[4]; - u8 unk_A; + u8 pageItems; + u8 count; + u8 filler_6[3]; + u8 unk_9; + u8 scrollIndicatorId; + u8 filler_B[5]; }; // Exported RAM declarations diff --git a/include/strings.h b/include/strings.h index e7d40281d..d6608812f 100644 --- a/include/strings.h +++ b/include/strings.h @@ -426,4 +426,24 @@ extern const u8 gText_HaventReceivedGiftOkayToDiscard[]; extern const u8 gText_SendingWonderCard[]; extern const u8 gText_SendingWonderNews[]; +// player_pc +extern const u8 gText_WhatWouldYouLikeToDo[]; +extern const u8 gText_TakeOutItemsFromThePC[]; +extern const u8 gText_StoreItemsInThePC[]; +extern const u8 gText_GoBackToThePreviousMenu[]; +extern const u8 gText_ItemStorage[]; +extern const u8 gText_Mailbox[]; +extern const u8 gText_TurnOff[]; +extern const u8 gText_WithdrawItem2[]; +extern const u8 gText_DepositItem2[]; +extern const u8 gOtherText_Read[]; +extern const u8 gOtherText_MoveToBag[]; +extern const u8 gOtherText_Give2[]; +extern const u8 gText_TheresNoMailHere[]; +extern const u8 gText_ThereAreNoItems[]; +extern const u8 gText_WhatWouldYouLikeToDoWithPlayersMail[]; +extern const u8 gText_MessageWillBeLost[]; +extern const u8 gText_BagIsFull[]; +extern const u8 gText_MailReturnedToBagMessageErased[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 0e8edea06..6407bdca5 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -208,7 +208,7 @@ SECTIONS { src/fldeff_softboiled.o(.text); asm/battle_tower.o(.text); asm/battle_controller_oak.o(.text); - asm/player_pc.o(.text); + src/player_pc.o(.text); src/intro.o(.text); asm/battle_anim_special.o(.text); asm/hall_of_fame.o(.text); @@ -434,6 +434,7 @@ SECTIONS { data/data_83FECCC.o(.rodata); src/battle_controller_safari.o(.rodata); data/data_83FECCC.o(.rodata.83FEDE4); + src/player_pc.o(.rodata); src/intro.o(.rodata); data/data_83FECCC.o(.rodata.battle_anim_special); src/credits.o(.rodata); diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 62254a559..6447ae1b2 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -522,7 +522,7 @@ static bool32 sub_807E40C(void) bool32 sub_807E418(void) { - if (sub_807AA70() == TRUE && sub_80F83B0()) + if (field_weather_is_fade_finished() == TRUE && sub_80F83B0()) return TRUE; else return FALSE; diff --git a/src/item_use.c b/src/item_use.c index f8a99cb1d..9657488f3 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -117,7 +117,7 @@ void sub_80A1084(void) void sub_80A109C(u8 taskId) { - if (sub_807AA70() == TRUE) + if (field_weather_is_fade_finished() == TRUE) { sItemUseOnFieldCB(taskId); } @@ -172,7 +172,7 @@ bool8 sub_80A1194(void) void sub_80A11C0(u8 taskId) { - if (sub_807AA70() == TRUE) + if (field_weather_is_fade_finished() == TRUE) { UnfreezeMapObjects(); ScriptContext2_Disable(); diff --git a/src/mailbox_pc.c b/src/mailbox_pc.c index 0ebffc67e..0a4535271 100644 --- a/src/mailbox_pc.c +++ b/src/mailbox_pc.c @@ -94,10 +94,10 @@ static void ItemPrintFunc(u8 windowId, s32 itemId, u8 y) } } -u8 MailboxPC_InitListMenu(struct PlayerPC_Unk_203AAC4 * playerPcStruct) +u8 MailboxPC_InitListMenu(struct PlayerPCItemPageStruct * playerPcStruct) { u16 i; - for (i = 0; i < playerPcStruct->unk_5; i++) + for (i = 0; i < playerPcStruct->count; i++) { sListMenuItems[i].label = sString_Dummy; sListMenuItems[i].index = i; @@ -106,7 +106,7 @@ u8 MailboxPC_InitListMenu(struct PlayerPC_Unk_203AAC4 * playerPcStruct) sListMenuItems[i].index = -2; gMultiuseListMenuTemplate.items = sListMenuItems; - gMultiuseListMenuTemplate.totalItems = playerPcStruct->unk_5 + 1; + gMultiuseListMenuTemplate.totalItems = playerPcStruct->count + 1; gMultiuseListMenuTemplate.windowId = sWindowIds[1]; gMultiuseListMenuTemplate.header_X = 0; gMultiuseListMenuTemplate.item_X = GetMenuCursorDimensionByFont(2, 0); @@ -132,9 +132,9 @@ static void MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu * list) PlaySE(SE_SELECT); } -void MailboxPC_AddScrollIndicatorArrows(struct PlayerPC_Unk_203AAC4 * playerPcStruct) +void MailboxPC_AddScrollIndicatorArrows(struct PlayerPCItemPageStruct * playerPcStruct) { - playerPcStruct->unk_A = AddScrollIndicatorArrowPairParameterized(2, 0xC2, 0xC, 0x94, playerPcStruct->unk_5 - playerPcStruct->unk_4 + 1, 110, 110, &playerPcStruct->scrollOffset); + playerPcStruct->scrollIndicatorId = AddScrollIndicatorArrowPairParameterized(2, 0xC2, 0xC, 0x94, playerPcStruct->count - playerPcStruct->pageItems + 1, 110, 110, &playerPcStruct->scrollOffset); } void MailboxPC_DestroyListMenuBuffer(void) diff --git a/src/map_preview_screen.c b/src/map_preview_screen.c index 7d9fa935e..c465a5683 100644 --- a/src/map_preview_screen.c +++ b/src/map_preview_screen.c @@ -495,7 +495,7 @@ static void sub_80F83D0(u8 taskId) } break; case 2: - if (sub_807AA70()) + if (field_weather_is_fade_finished()) { Overworld_PlaySpecialMapMusic(); data[0]++; diff --git a/src/player_pc.c b/src/player_pc.c new file mode 100644 index 000000000..cebdd765a --- /dev/null +++ b/src/player_pc.c @@ -0,0 +1,741 @@ +#include "global.h" +#include "palette.h" +#include "item.h" +#include "task.h" +#include "menu_indicators.h" +#include "new_menu_helpers.h" +#include "strings.h" +#include "menu.h" +#include "mail.h" +#include "mail_data.h" +#include "help_system.h" +#include "sound.h" +#include "overworld.h" +#include "script.h" +#include "mailbox_pc.h" +#include "player_pc.h" +#include "field_weather.h" +#include "event_scripts.h" +#include "field_fadetransition.h" +#include "string_util.h" +#include "item_menu.h" +#include "item_pc.h" +#include "party_menu.h" +#include "constants/items.h" +#include "constants/songs.h" + +#define PC_ITEM_ID 0 +#define PC_QUANTITY 1 +#define NEW_GAME_PC_ITEMS(i, type) ((u16)((u16 *)gNewGamePCItems + type)[i * 2]) + +#define tCount data[2] +#define tPageItems data[4] +#define tItemPcParam data[6] +#define tWindowId data[10] +#define tListMenuTaskId data[11] + +static EWRAM_DATA const u8 *sItemOrder = NULL; +static EWRAM_DATA u8 sTopMenuItemCount = 0; +EWRAM_DATA struct PlayerPCItemPageStruct gPlayerPcMenuManager = {}; + +#define SELECTED_MAIL (gSaveBlock1Ptr->mail[PC_MAIL_NUM(gPlayerPcMenuManager.scrollOffset) + gPlayerPcMenuManager.selectedRow]) + +static void Task_DrawPlayerPcTopMenu(u8 taskId); +static void Task_TopMenuHandleInput(u8 taskId); +static void Task_PlayerPcItemStorage(u8 taskId); +static void Task_PlayerPcMailbox(u8 taskId); +static void Task_PlayerPcTurnOff(u8 taskId); +static void Task_CreateItemStorageSubmenu(u8 taskId, u8 cursorPos); +static void PrintStringOnWindow0WithDialogueFrame(const u8 *str); +static void Task_TopMenu_ItemStorageSubmenu_HandleInput(u8 taskId); +static void Task_PlayerPcDepositItem(u8 taskId); +static void Task_DepositItem_WaitFadeAndGoToBag(u8 taskId); +static void CB2_ReturnFromDepositMenu(void); +static void Task_PlayerPcWithdrawItem(u8 taskId); +static void CB2_ReturnFromWithdrawMenu(void); +static void Task_WithdrawItemBeginFade(u8 taskId); +static void Task_PlayerPcCancel(u8 taskId); +static void Tsak_SetPageItemVars(u8 taskId); +static u8 CountPCMail(void); +static void PCMailCompaction(void); +static void Task_DrawMailboxPcMenu(u8 taskId); +static void Task_MailboxPcHandleInput(u8 taskId); +static void Task_PrintWhatToDoWithSelectedMail(u8 taskId); +static void Task_DestroyMailboxPcViewAndCancel(u8 taskId); +static void Task_DrawMailSubmenu(u8 taskId); +static void Task_MailSubmenuHandleInput(u8 taskId); +static void Task_PlayerPcReadMail(u8 taskId); +static void Task_WaitFadeAndReadSelectedMail(u8 taskId); +static void CB2_SetCbToReturnToMailbox(void); +static void Task_PlayerPcMoveMailToBag(u8 taskId); +static void Task_DrawYesNoMenuToConfirmMoveToBag(u8 taskId); +static void Task_MoveToBagYesNoMenuHandleInput(u8 taskId); +static void Task_TryPutMailInBag_DestroyMsgIfSuccessful(u8 taskId); +static void Task_DeclinedMoveMailToBag(u8 taskId); +static void Task_PlayerPcGiveMailToMon(u8 taskId); +static void Task_WaitFadeAndGoToPartyMenu(u8 taskId); +static void Task_Error_NoPokemon(u8 taskId); +static void Task_PlayerPcExitMailSubmenu(u8 taskId); + +static const u8 *const sItemStorageActionDescriptionPtrs[] = { + gText_TakeOutItemsFromThePC, + gText_StoreItemsInThePC, + gText_GoBackToThePreviousMenu +}; + +static const struct MenuAction sMenuActions_TopMenu[] = { + {gText_ItemStorage, Task_PlayerPcItemStorage}, + {gText_Mailbox, Task_PlayerPcMailbox}, + {gText_TurnOff, Task_PlayerPcTurnOff} +}; + +static const u8 gUnknown_8402200[] = { 0, 1, 2 }; +static const u8 gUnknown_8402203[] = { 0, 1, 2 }; + +static const struct MenuAction sMenuActions_ItemPc[] = { + {gText_WithdrawItem2, Task_PlayerPcWithdrawItem}, + {gText_DepositItem2, Task_PlayerPcDepositItem}, + {gFameCheckerText_Cancel, Task_PlayerPcCancel} +}; + +static const struct ItemSlot gNewGamePCItems[] = { + { ITEM_POTION, 1 }, + { ITEM_NONE, 0 } +}; + +static const struct MenuAction sMenuActions_MailSubmenu[] = { + {gOtherText_Read, Task_PlayerPcReadMail}, + {gOtherText_MoveToBag, Task_PlayerPcMoveMailToBag}, + {gOtherText_Give2, Task_PlayerPcGiveMailToMon}, + {gOtherText_Exit, Task_PlayerPcExitMailSubmenu} +}; + +static const struct WindowTemplate sWindowTemplate_TopMenu_3Items = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 13, + .height = 6, + .paletteNum = 15, + .baseBlock = 0x008 +}; + +static const struct WindowTemplate sWindowTemplate_TopMenu_4Items = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 13, + .height = 8, + .paletteNum = 15, + .baseBlock = 0x008 +}; + +static const struct WindowTemplate sWindowTemplate_ItemStorageSubmenu = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 14, + .height = 6, + .paletteNum = 15, + .baseBlock = 0x008 +}; + +void NewGameInitPCItems(void) +{ + u8 i; + + for (i = 0, ClearPCItemSlots(); NEW_GAME_PC_ITEMS(i, PC_ITEM_ID) && NEW_GAME_PC_ITEMS(i, PC_QUANTITY) && + AddPCItem(NEW_GAME_PC_ITEMS(i, PC_ITEM_ID), NEW_GAME_PC_ITEMS(i, PC_QUANTITY)) == TRUE; i++) + ; +} + +void sub_80EB6AC(void) +{ + u8 taskId; + + gPlayerPcMenuManager.unk_9 = 0; + sub_812B234(); + sItemOrder = gUnknown_8402200; + sTopMenuItemCount = 3; + taskId = CreateTask(TaskDummy, 0); + DisplayItemMessageOnField(taskId, 2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu); +} + +void sub_80EB6FC(void) +{ + u8 taskId; + + gPlayerPcMenuManager.unk_9 = 1; + sub_812B234(); + sItemOrder = gUnknown_8402203; + sTopMenuItemCount = 3; + taskId = CreateTask(TaskDummy, 0); + DisplayItemMessageOnField(taskId, 2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu); +} + +static void Task_DrawPlayerPcTopMenu(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (sTopMenuItemCount == 3) + tWindowId = AddWindow(&sWindowTemplate_TopMenu_3Items); + else + tWindowId = AddWindow(&sWindowTemplate_TopMenu_4Items); + SetStdWindowBorderStyle(tWindowId, 0); + AddItemMenuActionTextPrinters(tWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, GetFontAttribute(2, FONTATTR_LETTER_SPACING), 16, sTopMenuItemCount, sMenuActions_TopMenu, sItemOrder); + Menu_InitCursor(tWindowId, 2, 0, 2, 16, sTopMenuItemCount, 0); + ScheduleBgCopyTilemapToVram(0); + gTasks[taskId].func = Task_TopMenuHandleInput; +} + +static void Task_TopMenuHandleInput(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s8 input = Menu_ProcessInputNoWrapAround(); + switch (input) + { + case -2: + break; + case -1: + PlaySE(SE_SELECT); + ClearStdWindowAndFrameToTransparent(tWindowId, FALSE); + ClearWindowTilemap(tWindowId); + RemoveWindow(tWindowId); + ScheduleBgCopyTilemapToVram(0); + gTasks[taskId].func = Task_PlayerPcTurnOff; + break; + default: + ClearStdWindowAndFrameToTransparent(tWindowId, FALSE); + ClearWindowTilemap(tWindowId); + RemoveWindow(tWindowId); + ScheduleBgCopyTilemapToVram(0); + gTasks[taskId].func = sMenuActions_TopMenu[sItemOrder[input]].func.void_u8; + break; + } +} + +static void Task_ReturnToTopMenu(u8 taskId) +{ + sub_812B248(); + DisplayItemMessageOnField(taskId, 2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu); +} + +static void Task_PlayerPcItemStorage(u8 taskId) +{ + Task_CreateItemStorageSubmenu(taskId, FALSE); + gTasks[taskId].func = Task_TopMenu_ItemStorageSubmenu_HandleInput; +} + +static void Task_PlayerPcMailbox(u8 taskId) +{ + gPlayerPcMenuManager.count = CountPCMail(); + if (gPlayerPcMenuManager.count == 0) + { + DisplayItemMessageOnField(taskId, 2, gText_TheresNoMailHere, Task_ReturnToTopMenu); + } + else + { + gPlayerPcMenuManager.selectedRow = 0; + gPlayerPcMenuManager.scrollOffset = 0; + PCMailCompaction(); + Tsak_SetPageItemVars(taskId); + if (gPlayerPcMenuManager.unk_9 == 0) + HelpSystem_SetSomeVariable2(34); + else + HelpSystem_SetSomeVariable2(30); + if (MailboxPC_InitBuffers(gPlayerPcMenuManager.count) == TRUE) + { + ClearDialogWindowAndFrame(0, FALSE); + Task_DrawMailboxPcMenu(taskId); + gTasks[taskId].func = Task_MailboxPcHandleInput; + } + else + { + DisplayItemMessageOnField(taskId, 2, gText_TheresNoMailHere, Task_ReturnToTopMenu); + } + } +} + +static void Task_PlayerPcTurnOff(u8 taskId) +{ + if (gPlayerPcMenuManager.unk_9 == 0) + ScriptContext1_SetupScript(EventScript_PalletTown_PlayersHouse_2F_ShutDownPC); + else + EnableBothScriptContexts(); + DestroyTask(taskId); +} + +static void Task_CreateItemStorageSubmenu(u8 taskId, u8 cursorPos) +{ + s16 *data = gTasks[taskId].data; + if (gPlayerPcMenuManager.unk_9 == 0) + HelpSystem_SetSomeVariable2(33); + else + HelpSystem_SetSomeVariable2(29); + tWindowId = AddWindow(&sWindowTemplate_ItemStorageSubmenu); + SetStdWindowBorderStyle(tWindowId, FALSE); + PrintTextArray(tWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, sMenuActions_ItemPc); + Menu_InitCursor(tWindowId, 2, 0, 2, 16, 3, cursorPos); + ScheduleBgCopyTilemapToVram(0); + PrintStringOnWindow0WithDialogueFrame(sItemStorageActionDescriptionPtrs[cursorPos]); +} + +static void PrintStringOnWindow0WithDialogueFrame(const u8 *str) +{ + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized(0, 2, str, 0, 1, 0, NULL); +} + +static void Task_TopMenu_ItemStorageSubmenu_HandleInput(u8 taskId) +{ + if (JOY_REPT(DPAD_UP)) + { + if (Menu_GetCursorPos() != 0) + { + PlaySE(SE_SELECT); + Menu_MoveCursor(-1); + PrintStringOnWindow0WithDialogueFrame(sItemStorageActionDescriptionPtrs[Menu_GetCursorPos()]); + } + } + else if (JOY_REPT(DPAD_DOWN)) + { + if (Menu_GetCursorPos() != 2) + { + PlaySE(SE_SELECT); + Menu_MoveCursor(+1); + PrintStringOnWindow0WithDialogueFrame(sItemStorageActionDescriptionPtrs[Menu_GetCursorPos()]); + } + } + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sMenuActions_ItemPc[Menu_GetCursorPos()].func.void_u8(taskId); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sMenuActions_ItemPc[2].func.void_u8(taskId); + } +} + +static void Task_DepositItem_WaitFadeAndGoToBag(u8 taskId) +{ + if (!gPaletteFade.active) + { + CleanupOverworldWindowsAndTilemaps(); + sub_8107DB4(3, POCKET_ITEMS - 1, CB2_ReturnToField); + gFieldCallback = CB2_ReturnFromDepositMenu; + DestroyTask(taskId); + } +} + +static void Task_PlayerPcDepositItem(u8 taskId) +{ + gTasks[taskId].func = Task_DepositItem_WaitFadeAndGoToBag; + fade_screen(1, 0); +} + +static void Task_ReturnToItemStorageSubmenu(u8 taskId) +{ + if (field_weather_is_fade_finished() == TRUE) + gTasks[taskId].func = Task_TopMenu_ItemStorageSubmenu_HandleInput; +} + +static void CB2_ReturnFromDepositMenu(void) +{ + u8 taskId; + sub_80F6E9C(); + DrawDialogueFrame(0, TRUE); + taskId = CreateTask(Task_ReturnToItemStorageSubmenu, 0); + Task_CreateItemStorageSubmenu(taskId, 1); + sub_807DC00(); +} + +static void Task_PlayerPcWithdrawItem(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + tCount = CountItemsInPC(); + if (tCount != 0) + { + tItemPcParam = 0; + gTasks[taskId].func = Task_WithdrawItemBeginFade; + gFieldCallback = CB2_ReturnFromWithdrawMenu; + } + else + { + ClearStdWindowAndFrameToTransparent(tWindowId, FALSE); + ClearWindowTilemap(tWindowId); + RemoveWindow(tWindowId); + DisplayItemMessageOnField(taskId, 2, gText_ThereAreNoItems, Task_PlayerPcItemStorage); + } +} + +static void CB2_ReturnFromWithdrawMenu(void) +{ + u8 taskId; + sub_80F6E9C(); + DrawDialogueFrame(0, TRUE); + taskId = CreateTask(Task_ReturnToItemStorageSubmenu, 0); + Task_CreateItemStorageSubmenu(taskId, 0); + sub_807DC00(); +} + +static void Task_WithdrawItem_WaitFadeAndGoToItemStorage(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active) + { + CleanupOverworldWindowsAndTilemaps(); + ItemPc_Init(tItemPcParam, CB2_ReturnToField); + DestroyTask(taskId); + } +} + +static void Task_WithdrawItemBeginFade(u8 taskId) +{ + gTasks[taskId].func = Task_WithdrawItem_WaitFadeAndGoToItemStorage; + ItemPc_SetInitializedFlag(0); + fade_screen(1, 0); +} + +static void Task_PlayerPcCancel(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + ClearStdWindowAndFrameToTransparent(tWindowId, FALSE); + ClearWindowTilemap(tWindowId); + CopyWindowToVram(tWindowId, 1); + RemoveWindow(tWindowId); + Task_ReturnToTopMenu(taskId); +} + +static void Tsak_SetPageItemVars(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (tCount >= 8) + tPageItems = 8; + else + tPageItems = tCount + 1; + if (gPlayerPcMenuManager.count >= 8) + gPlayerPcMenuManager.pageItems = 8; + else + gPlayerPcMenuManager.pageItems = gPlayerPcMenuManager.count + 1; +} + +static u8 CountPCMail(void) +{ + u8 count = 0; + u8 i; + + for (i = PC_MAIL_NUM(0); i < MAIL_COUNT; i++) + { + if (gSaveBlock1Ptr->mail[i].itemId != ITEM_NONE) + count++; + } + return count; +} + +static void PCMailCompaction(void) +{ + u8 i; + u8 j; + for (i = PC_MAIL_NUM(0); i < MAIL_COUNT - 1; i++) + { + for (j = i + 1; j < MAIL_COUNT; j++) + { + if (gSaveBlock1Ptr->mail[i].itemId == ITEM_NONE) + { + struct MailStruct mail = gSaveBlock1Ptr->mail[i]; + gSaveBlock1Ptr->mail[i] = gSaveBlock1Ptr->mail[j]; + gSaveBlock1Ptr->mail[j] = mail; + } + } + } +} + +static void Task_DrawMailboxPcMenu(u8 taskId) +{ + u8 windowId = MailboxPC_GetAddWindow(0); + s32 width = GetStringWidth(2, gText_Mailbox, 0); + MailboxPC_GetAddWindow(1); + AddTextPrinterParameterized(windowId, 2, gText_Mailbox, (80 - width) / 2, 2, 0, NULL); + ScheduleBgCopyTilemapToVram(0); + gTasks[taskId].tListMenuTaskId = MailboxPC_InitListMenu(&gPlayerPcMenuManager); + MailboxPC_AddScrollIndicatorArrows(&gPlayerPcMenuManager); +} + +static void Task_MailboxPcHandleInput(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s32 input; + if (!gPaletteFade.active) + { + input = ListMenu_ProcessInput(tListMenuTaskId); + ListMenuGetScrollAndRow(tListMenuTaskId, &gPlayerPcMenuManager.scrollOffset, &gPlayerPcMenuManager.selectedRow); + switch (input) + { + case -1: + break; + case -2: + PlaySE(SE_SELECT); + RemoveScrollIndicatorArrowPair(gPlayerPcMenuManager.scrollIndicatorId); + Task_DestroyMailboxPcViewAndCancel(taskId); + break; + default: + PlaySE(SE_SELECT); + MailboxPC_RemoveWindow(0); + MailboxPC_RemoveWindow(1); + DestroyListMenuTask(tListMenuTaskId, &gPlayerPcMenuManager.scrollOffset, &gPlayerPcMenuManager.selectedRow); + ScheduleBgCopyTilemapToVram(0); + RemoveScrollIndicatorArrowPair(gPlayerPcMenuManager.scrollIndicatorId); + gTasks[taskId].func = Task_PrintWhatToDoWithSelectedMail; + break; + } + } +} + +static void Task_PrintWhatToDoWithSelectedMail(u8 taskId) +{ + s32 length; + s32 i; + u8 *ptr; + StringCopy(gStringVar1, SELECTED_MAIL.playerName); + length = StringLength(gStringVar1); + if (length > 5) + { + for (ptr = gStringVar1 + length - 1; ptr >= gStringVar1; ptr--) + { + if (*ptr) + break; + *ptr = EOS; + } + } + else + { + ConvertInternationalString(gStringVar1, LANGUAGE_JAPANESE); + } + StringExpandPlaceholders(gStringVar4, gText_WhatWouldYouLikeToDoWithPlayersMail); + DisplayItemMessageOnField(taskId, 2, gStringVar4, Task_DrawMailSubmenu); +} + +static void Task_DestroyMailboxPcViewAndCancel(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + MailboxPC_RemoveWindow(0); + MailboxPC_RemoveWindow(1); + DestroyListMenuTask(tListMenuTaskId, NULL, NULL); + ScheduleBgCopyTilemapToVram(0); + MailboxPC_DestroyListMenuBuffer(); + Task_ReturnToTopMenu(taskId); +} + +static void Task_DrawMailSubmenu(u8 taskId) +{ + u8 windowId = MailboxPC_GetAddWindow(2); + PrintTextArray(windowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 4, sMenuActions_MailSubmenu); + Menu_InitCursor(windowId, 2, 0, 2, 16, 4, 0); + ScheduleBgCopyTilemapToVram(0); + gTasks[taskId].func = Task_MailSubmenuHandleInput; +} + +static void Task_MailSubmenuHandleInput(u8 taskId) +{ + s8 input = Menu_ProcessInput_other(); + switch (input) + { + case -1: + PlaySE(SE_SELECT); + Task_PlayerPcExitMailSubmenu(taskId); + break; + case -2: + break; + default: + PlaySE(SE_SELECT); + sMenuActions_MailSubmenu[input].func.void_u8(taskId); + break; + } +} + +static void Task_PlayerPcReadMail(u8 taskId) +{ + fade_screen(1, 0); + gTasks[taskId].func = Task_WaitFadeAndReadSelectedMail; +} + +static void Task_WaitFadeAndReadSelectedMail(u8 taskId) +{ + if (!gPaletteFade.active) + { + MailboxPC_DestroyListMenuBuffer(); + CleanupOverworldWindowsAndTilemaps(); + sub_80BEBEC(&SELECTED_MAIL, CB2_SetCbToReturnToMailbox, 1); + DestroyTask(taskId); + } +} + +static void Task_WaitFadeAndReturnToMailboxPcInputHandler(u8 taskId) +{ + if (field_weather_is_fade_finished() == TRUE) + gTasks[taskId].func = Task_MailboxPcHandleInput; +} + +static void CB2_ReturnToMailbox(void) +{ + u8 taskId; + if (gPlayerPcMenuManager.unk_9 == 0) + HelpSystem_SetSomeVariable2(34); + else + HelpSystem_SetSomeVariable2(30); + sub_80F6E9C(); + taskId = CreateTask(Task_WaitFadeAndReturnToMailboxPcInputHandler, 0); + if (MailboxPC_InitBuffers(gPlayerPcMenuManager.count) == TRUE) + Task_DrawMailboxPcMenu(taskId); + else + DestroyTask(taskId); + sub_807DC00(); +} + +static void CB2_SetCbToReturnToMailbox(void) +{ + gFieldCallback = CB2_ReturnToMailbox; + SetMainCallback2(CB2_ReturnToField); +} + +static void Task_PlayerPcMoveMailToBag(u8 taskId) +{ + DisplayItemMessageOnField(taskId, 2, gText_MessageWillBeLost, Task_DrawYesNoMenuToConfirmMoveToBag); +} + +static void Task_DrawYesNoMenuToConfirmMoveToBag(u8 taskId) +{ + DisplayYesNoMenuDefaultYes(); + gTasks[taskId].func = Task_MoveToBagYesNoMenuHandleInput; +} + +static void Task_MoveToBagYesNoMenuHandleInput(u8 taskId) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case -2: + break; + case 0: + Task_TryPutMailInBag_DestroyMsgIfSuccessful(taskId); + break; + case -1: + PlaySE(SE_SELECT); + // fallthrough + case 1: + Task_DeclinedMoveMailToBag(taskId); + break; + } +} + +static void Task_TryPutMailInBag_DestroyMsgIfSuccessful(u8 taskId) +{ + struct MailStruct * mail = &SELECTED_MAIL; + if (!AddBagItem(mail->itemId, 1)) + { + DisplayItemMessageOnField(taskId, 2, gText_BagIsFull, Task_PlayerPcExitMailSubmenu); + } + else + { + DisplayItemMessageOnField(taskId, 2, gText_MailReturnedToBagMessageErased, Task_PlayerPcExitMailSubmenu); + ClearMailStruct(mail); + PCMailCompaction(); + gPlayerPcMenuManager.count--; + if (gPlayerPcMenuManager.count < gPlayerPcMenuManager.pageItems + gPlayerPcMenuManager.scrollOffset) + { + if (gPlayerPcMenuManager.scrollOffset != 0) + gPlayerPcMenuManager.scrollOffset--; + } + Tsak_SetPageItemVars(taskId); + } +} + +static void Task_DeclinedMoveMailToBag(u8 taskId) +{ + Task_PlayerPcExitMailSubmenu(taskId); +} + +static void Task_PlayerPcGiveMailToMon(u8 taskId) +{ + if (CalculatePlayerPartyCount() == 0) + { + Task_Error_NoPokemon(taskId); + } + else + { + fade_screen(1, 0); + gTasks[taskId].func = Task_WaitFadeAndGoToPartyMenu; + } +} + +static void Task_WaitFadeAndGoToPartyMenu(u8 taskId) +{ + if (!gPaletteFade.active) + { + MailboxPC_DestroyListMenuBuffer(); + CleanupOverworldWindowsAndTilemaps(); + PartyMenuInit_FromPlayerPc(); + DestroyTask(taskId); + } +} + +static void CB2_ReturnToMailboxPc_UpdateScrollVariables(void) +{ + u8 taskId; + u8 count; + if (gPlayerPcMenuManager.unk_9 == 0) + HelpSystem_SetSomeVariable2(34); + else + HelpSystem_SetSomeVariable2(30); + taskId = CreateTask(Task_WaitFadeAndReturnToMailboxPcInputHandler, 0); + count = gPlayerPcMenuManager.count; + gPlayerPcMenuManager.count = CountPCMail(); + PCMailCompaction(); + if (count != gPlayerPcMenuManager.count) + { + if (gPlayerPcMenuManager.count < gPlayerPcMenuManager.pageItems + gPlayerPcMenuManager.scrollOffset) + { + if (gPlayerPcMenuManager.scrollOffset != 0) + gPlayerPcMenuManager.scrollOffset--; + } + } + Tsak_SetPageItemVars(taskId); + sub_80F6E9C(); + if (MailboxPC_InitBuffers(gPlayerPcMenuManager.count) == TRUE) + Task_DrawMailboxPcMenu(taskId); + else + DestroyTask(taskId); + sub_807DC00(); +} + +void CB2_PlayerPC_ReturnFromPartyMenu(void) +{ + gFieldCallback = CB2_ReturnToMailboxPc_UpdateScrollVariables; + SetMainCallback2(CB2_ReturnToField); +} + +static void Task_Error_NoPokemon(u8 taskId) +{ + DisplayItemMessageOnField(taskId, 2, gText_ThereIsNoPokemon, Task_PlayerPcExitMailSubmenu); +} + +static void Task_RedrawPlayerPcMailboxAndSetUpInputHandler(u8 taskId) +{ + ClearDialogWindowAndFrame(0, FALSE); + Task_DrawMailboxPcMenu(taskId); + ScheduleBgCopyTilemapToVram(0); + gTasks[taskId].func = Task_MailboxPcHandleInput; +} + +static void Task_PlayerPcExitMailSubmenu(u8 taskId) +{ + MailboxPC_RemoveWindow(2); + ScheduleBgCopyTilemapToVram(0); + gTasks[taskId].func = Task_RedrawPlayerPcMailboxAndSetUpInputHandler; +} + +#undef tListMenuTaskId +#undef tWindowId +#undef tItemPcParam +#undef tPageItems +#undef tCount diff --git a/sym_ewram.txt b/sym_ewram.txt index f821f7170..f01e54708 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -985,18 +985,9 @@ gUnknown_203AAB4: @ 203AAB4 gUnknown_203AAB8: @ 203AAB8 .space 0x4 -gUnknown_203AABC: @ 203AABC - .space 0x4 - -gUnknown_203AAC0: @ 203AAC0 - .space 0x4 - -gUnknown_203AAC4: @ 203AAC4 - .space 0x2 - -gUnknown_203AAC6: @ 203AAC6 - .space 0xE - + .align 2 + .include "src/player_pc.o" + .align 2 .include "src/intro.o" .align 2 From 31d2164c9538c598856403a2d3255448fc3c5456 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 12 Oct 2019 16:35:02 -0400 Subject: [PATCH 18/25] Bump baserom.ips --- baserom.ips | Bin 1991829 -> 1702809 bytes tools/br_ips/br_ips.c | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/baserom.ips b/baserom.ips index b1ef4e9dc75312aa1cb03df8fa7dcab0dbee6e66..b4ea36d11696c4f92d7615b6e51d5d55d6af2aea 100644 GIT binary patch delta 114 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 diff --git a/tools/br_ips/br_ips.c b/tools/br_ips/br_ips.c index 64c454a3e..440705cab 100644 --- a/tools/br_ips/br_ips.c +++ b/tools/br_ips/br_ips.c @@ -53,7 +53,7 @@ static int getline(char ** lineptr, size_t * n, FILE * stream) { static void getIncbinsFromFile(hunk_t ** hunks, size_t * num, size_t * maxnum, const char * fname, char ** strbuf, size_t * buffersize) { // Recursively find incbinned segments and encode them as hunks. FILE * file = fopen(fname, "r"); - if (file == NULL) FATAL_ERROR("unable to open file \"%s\" for reading\n", fname); + if (file == NULL) return; hunk_t * data = *hunks; size_t nhunks = *num; size_t maxnhunks = *maxnum; From 66c416875a92a5a8987dca2e1102f76c4cce5e98 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 12 Oct 2019 17:23:17 -0400 Subject: [PATCH 19/25] Review comments --- src/player_pc.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/player_pc.c b/src/player_pc.c index cebdd765a..7197f65f1 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -26,7 +26,7 @@ #define PC_ITEM_ID 0 #define PC_QUANTITY 1 -#define NEW_GAME_PC_ITEMS(i, type) ((u16)((u16 *)gNewGamePCItems + type)[i * 2]) +#define NEW_GAME_PC_ITEMS(i, type) (((u16 *)gNewGamePCItems + type)[i * 2]) #define tCount data[2] #define tPageItems data[4] @@ -55,7 +55,7 @@ static void Task_PlayerPcWithdrawItem(u8 taskId); static void CB2_ReturnFromWithdrawMenu(void); static void Task_WithdrawItemBeginFade(u8 taskId); static void Task_PlayerPcCancel(u8 taskId); -static void Tsak_SetPageItemVars(u8 taskId); +static void Task_SetPageItemVars(u8 taskId); static u8 CountPCMail(void); static void PCMailCompaction(void); static void Task_DrawMailboxPcMenu(u8 taskId); @@ -237,7 +237,7 @@ static void Task_PlayerPcMailbox(u8 taskId) gPlayerPcMenuManager.selectedRow = 0; gPlayerPcMenuManager.scrollOffset = 0; PCMailCompaction(); - Tsak_SetPageItemVars(taskId); + Task_SetPageItemVars(taskId); if (gPlayerPcMenuManager.unk_9 == 0) HelpSystem_SetSomeVariable2(34); else @@ -407,7 +407,7 @@ static void Task_PlayerPcCancel(u8 taskId) Task_ReturnToTopMenu(taskId); } -static void Tsak_SetPageItemVars(u8 taskId) +static void Task_SetPageItemVars(u8 taskId) { s16 *data = gTasks[taskId].data; if (tCount >= 8) @@ -646,7 +646,7 @@ static void Task_TryPutMailInBag_DestroyMsgIfSuccessful(u8 taskId) if (gPlayerPcMenuManager.scrollOffset != 0) gPlayerPcMenuManager.scrollOffset--; } - Tsak_SetPageItemVars(taskId); + Task_SetPageItemVars(taskId); } } @@ -699,7 +699,7 @@ static void CB2_ReturnToMailboxPc_UpdateScrollVariables(void) gPlayerPcMenuManager.scrollOffset--; } } - Tsak_SetPageItemVars(taskId); + Task_SetPageItemVars(taskId); sub_80F6E9C(); if (MailboxPC_InitBuffers(gPlayerPcMenuManager.count) == TRUE) Task_DrawMailboxPcMenu(taskId); From b9f3f05b67579d65347e5b9a4b1aaf4ae8afd2a7 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 13 Oct 2019 06:56:42 +0800 Subject: [PATCH 20/25] InitBgsFromTemplates --- include/bg.h | 14 +++---- src/bg.c | 116 --------------------------------------------------- 2 files changed, 7 insertions(+), 123 deletions(-) diff --git a/include/bg.h b/include/bg.h index 0f20bf1fd..8d7367871 100644 --- a/include/bg.h +++ b/include/bg.h @@ -59,13 +59,13 @@ enum BgTileAllocMode struct BgTemplate { - u32 bg:2; // 0x1, 0x2 -> 0x3 - u32 charBaseIndex:2; // 0x4, 0x8 -> 0xC - u32 mapBaseIndex:5; // 0x10, 0x20, 0x40, 0x80, 0x100 -> 0x1F0 - u32 screenSize:2; // 0x200, 0x400 -> 0x600 - u32 paletteMode:1; // 0x800 - u32 priority:2; // 0x1000, 0x2000 > 0x3000 - u32 baseTile:10; + u16 bg:2; // 0x1, 0x2 -> 0x3 + u16 charBaseIndex:2; // 0x4, 0x8 -> 0xC + u16 mapBaseIndex:5; // 0x10, 0x20, 0x40, 0x80, 0x100 -> 0x1F0 + u16 screenSize:2; // 0x200, 0x400 -> 0x600 + u16 paletteMode:1; // 0x800 + u16 priority:2; // 0x1000, 0x2000 > 0x3000 + u16 baseTile:10; }; void ResetBgs(void); diff --git a/src/bg.c b/src/bg.c index 33a462707..4ad2bebd6 100644 --- a/src/bg.c +++ b/src/bg.c @@ -356,7 +356,6 @@ void ResetBgsAndClearDma3BusyFlags(bool32 enableWindowTileAutoAlloc) } } -#ifdef NONMATCHING void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates) { int i; @@ -390,121 +389,6 @@ void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numT } } } -#else -NAKED -void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x10\n\ - adds r5, r1, 0\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r2, 24\n\ - lsrs r4, r2, 24\n\ - bl SetBgModeInternal\n\ - bl ResetBgControlStructs\n\ - cmp r4, 0\n\ - beq _08001712\n\ - movs r7, 0\n\ - ldr r0, _08001724 @ =sGpuBgConfigs2\n\ - mov r9, r0\n\ - adds r6, r5, 0\n\ - ldr r2, _08001728 @ =gpu_tile_allocation_map_bg\n\ - mov r10, r2\n\ - mov r8, r4\n\ -_08001688:\n\ - ldr r4, [r6]\n\ - lsls r0, r4, 30\n\ - lsrs r5, r0, 30\n\ - cmp r5, 0x3\n\ - bhi _08001704\n\ - lsls r1, r4, 28\n\ - lsrs r1, 30\n\ - lsls r2, r4, 23\n\ - lsrs r2, 27\n\ - lsls r3, r4, 21\n\ - lsrs r3, 30\n\ - lsls r0, r4, 20\n\ - lsrs r0, 31\n\ - str r0, [sp]\n\ - lsls r0, r4, 18\n\ - lsrs r0, 30\n\ - str r0, [sp, 0x4]\n\ - str r7, [sp, 0x8]\n\ - str r7, [sp, 0xC]\n\ - adds r0, r5, 0\n\ - bl SetBgControlAttributes\n\ - lsls r4, r5, 4\n\ - mov r5, r9\n\ - adds r3, r4, r5\n\ - ldr r2, [r6]\n\ - lsls r2, 8\n\ - lsrs r2, 22\n\ - ldrh r0, [r3]\n\ - ldr r5, _0800172C @ =0xfffffc00\n\ - adds r1, r5, 0\n\ - ands r0, r1\n\ - orrs r0, r2\n\ - strh r0, [r3]\n\ - ldrb r0, [r3, 0x1]\n\ - movs r2, 0x3D\n\ - negs r2, r2\n\ - adds r1, r2, 0\n\ - ands r0, r1\n\ - strb r0, [r3, 0x1]\n\ - ldr r0, [r3]\n\ - ldr r1, _08001730 @ =0x00003fff\n\ - ands r0, r1\n\ - str r0, [r3]\n\ - mov r0, r9\n\ - adds r0, 0x4\n\ - adds r0, r4, r0\n\ - str r7, [r0]\n\ - mov r0, r9\n\ - adds r0, 0x8\n\ - adds r0, r4, r0\n\ - str r7, [r0]\n\ - ldr r5, _08001734 @ =sGpuBgConfigs2 + 0xC\n\ - adds r4, r5\n\ - str r7, [r4]\n\ - ldr r0, [r6]\n\ - lsls r0, 28\n\ - lsrs r0, 30\n\ - lsls r0, 6\n\ - add r0, r10\n\ - movs r1, 0x1\n\ - strb r1, [r0]\n\ -_08001704:\n\ - adds r6, 0x4\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - add r8, r0\n\ - mov r2, r8\n\ - cmp r2, 0\n\ - bne _08001688\n\ -_08001712:\n\ - add sp, 0x10\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08001724: .4byte sGpuBgConfigs2\n\ -_08001728: .4byte gpu_tile_allocation_map_bg\n\ -_0800172C: .4byte 0xfffffc00\n\ -_08001730: .4byte 0x00003fff\n\ -_08001734: .4byte sGpuBgConfigs2 + 0xC\n\ -.syntax divided"); -} -#endif // NONMATCHING void InitBgFromTemplate(const struct BgTemplate *template) { From 7c08a10359f404b30ee460460e780f1f66ad5d1f Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 13 Oct 2019 09:09:08 +0800 Subject: [PATCH 21/25] review comments --- asm/battle_2.s | 2 +- src/battle_anim_mons.c | 9 +++++---- src/battle_anim_sound_tasks.c | 2 +- src/dark.c | 4 ++-- src/psychic.c | 12 ++++++------ 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/asm/battle_2.s b/asm/battle_2.s index 775cb1033..bb696b4ab 100644 --- a/asm/battle_2.s +++ b/asm/battle_2.s @@ -4151,7 +4151,7 @@ _08011F46: .align 2, 0 _08011F4C: .4byte gMonFrontPicCoords _08011F50: - ldr r0, _08011F68 @ =0x00000181 + ldr r0, _08011F68 @ =0x00000181 @ SPECIES_CASTFORM cmp r4, r0 bne _08011F74 ldr r0, _08011F6C @ =gCastformFrontSpriteCoords diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index ed9c9bc2b..e871937e7 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -1369,18 +1369,18 @@ void sub_8075D9C(struct Sprite *sprite) // arg 5: lower 8 bits = location on attacking mon, upper 8 bits = location on target mon pick to target void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) { - bool8 v1; + bool8 respectMonPicOffsets; u8 coordType; if (!(gBattleAnimArgs[5] & 0xFF00)) - v1 = TRUE; + respectMonPicOffsets = TRUE; else - v1 = FALSE; + respectMonPicOffsets = FALSE; if (!(gBattleAnimArgs[5] & 0xFF)) coordType = BATTLER_COORD_Y_PIC_OFFSET; else coordType = BATTLER_COORD_Y; - InitSpritePosToAnimAttacker(sprite, v1); + InitSpritePosToAnimAttacker(sprite, respectMonPicOffsets); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[4]; @@ -2183,6 +2183,7 @@ static void sub_8077118(u8 taskId) static void sub_80771E4(struct Task *task, u8 taskId) { s16 spriteId = CloneBattlerSpriteWithBlend(0); + if (spriteId >= 0) { gSprites[spriteId].oam.priority = task->data[6]; diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c index e67c91bfa..d74b743e8 100644 --- a/src/battle_anim_sound_tasks.c +++ b/src/battle_anim_sound_tasks.c @@ -110,7 +110,7 @@ static void sub_80DCFE8(u8 taskId) gTasks[taskId].data[10] = 0; dPan = gTasks[taskId].data[3]; - oldPan = gTasks[taskId].data[11] ; + oldPan = gTasks[taskId].data[11]; gTasks[taskId].data[11] = dPan + oldPan; gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan); } diff --git a/src/dark.c b/src/dark.c index 7809e538d..cb34b991e 100644 --- a/src/dark.c +++ b/src/dark.c @@ -727,7 +727,7 @@ static void sub_80B856C(u8 priority) void sub_80B85B8(u8 taskId) { - u8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? 1 : 0; + bool8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? TRUE : FALSE; MoveBattlerSpriteToBG(gBattleAnimAttacker, toBG2); gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible = FALSE; @@ -741,7 +741,7 @@ void sub_80B85B8(u8 taskId) void sub_80B8664(u8 taskId) { - u8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? 1 : 0; + bool8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? TRUE : FALSE; sub_8073128(toBG2); if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) diff --git a/src/psychic.c b/src/psychic.c index 181f21810..662320a2b 100644 --- a/src/psychic.c +++ b/src/psychic.c @@ -430,13 +430,13 @@ static void sub_80B2ECC(struct Sprite *sprite) u8 battler = battlerCopy = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); u8 rank = GetBattlerSpriteBGPriorityRank(battler); s32 var0 = 1; - u8 toBG_2 = (rank ^ var0) != 0; + bool8 toBG2 = (rank ^ var0) != 0; if (IsBattlerSpriteVisible(battler)) - MoveBattlerSpriteToBG(battler, toBG_2); + MoveBattlerSpriteToBG(battler, toBG2); battler = BATTLE_PARTNER(battlerCopy); if (IsBattlerSpriteVisible(battler)) - MoveBattlerSpriteToBG(battler, toBG_2 ^ var0); + MoveBattlerSpriteToBG(battler, toBG2 ^ var0); } if (!IsContest() && IsDoubleBattle()) { @@ -522,13 +522,13 @@ static void sub_80B3168(struct Sprite *sprite) u8 battler = battlerCopy = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); u8 rank = GetBattlerSpriteBGPriorityRank(battler); s32 var0 = 1; - u8 toBG_2 = (rank ^ var0) != 0; + bool8 toBG2 = (rank ^ var0) != 0; if (IsBattlerSpriteVisible(battler)) - sub_8073128(toBG_2); + sub_8073128(toBG2); battler = battlerCopy ^ 2; if (IsBattlerSpriteVisible(battler)) - sub_8073128(toBG_2 ^ var0); + sub_8073128(toBG2 ^ var0); } sprite->callback = DestroyAnimSprite; } From 8fd0bc424541cec7fc76a4f841035c2b9e793b0e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 13 Oct 2019 22:04:51 -0400 Subject: [PATCH 22/25] Decompile start_menu --- asm/berry_crush_2.s | 4 +- asm/cable_club.s | 8 +- asm/dodrio_berry_picking.s | 4 +- asm/field_message_box.s | 2 +- asm/hall_of_fame.s | 4 +- asm/item_menu.s | 10 +- asm/link_rfu_3.s | 14 +- asm/naming_screen.s | 24 +- asm/option_menu.s | 10 +- asm/overworld.s | 10 +- asm/party_menu.s | 12 +- asm/pokedex_screen.s | 10 +- asm/pokemon_storage_system.s | 2 +- asm/save_failed_screen.s | 8 +- asm/save_menu_util.s | 6 +- asm/script_menu.s | 2 +- asm/start_menu.s | 2219 ----------------- asm/trade.s | 4 +- asm/trainer_card.s | 20 +- common_syms/help_system_812B1E0.txt | 2 +- common_syms/save.txt | 2 +- data/map_event_scripts.inc | 34 +- .../PalletTown_PlayersHouse_2F/scripts.inc | 2 +- data/specials.inc | 8 +- data/start_menu.s | 28 - data/strings.s | 44 +- data/tileset_anims.s | 3 + include/event_scripts.h | 7 + include/field_fadetransition.h | 1 + include/fieldmap.h | 2 + include/gba/macro.h | 31 + include/help_system.h | 6 +- include/item_menu.h | 2 +- include/link_rfu.h | 1 + include/load_save.h | 2 + include/menu.h | 2 +- include/new_game.h | 2 + include/new_menu_helpers.h | 8 +- include/option_menu.h | 6 + include/overworld.h | 3 + include/party_menu.h | 1 + include/pokedex_screen.h | 6 + include/quest_log.h | 7 +- include/save.h | 2 +- include/save_menu_util.h | 15 + include/start_menu.h | 4 +- include/strings.h | 32 +- include/trainer_card.h | 3 + ld_script.txt | 4 +- src/fame_checker.c | 4 +- src/field_fadetransition.c | 12 +- src/help_system_812B1E0.c | 62 +- src/item_use.c | 12 +- src/menu2.c | 2 +- src/mystery_event_script.c | 2 +- src/new_menu_helpers.c | 18 +- src/player_pc.c | 14 +- src/quest_log.c | 38 +- src/save.c | 6 +- src/scrcmd.c | 6 +- src/start_menu.c | 1008 ++++++++ src/teachy_tv.c | 4 +- src/trainer_tower.c | 2 +- sym_bss.txt | 14 +- sym_ewram.txt | 30 +- 65 files changed, 1367 insertions(+), 2510 deletions(-) delete mode 100644 asm/start_menu.s delete mode 100644 data/start_menu.s create mode 100644 include/option_menu.h create mode 100644 include/pokedex_screen.h create mode 100644 include/save_menu_util.h create mode 100644 src/start_menu.c diff --git a/asm/berry_crush_2.s b/asm/berry_crush_2.s index fedf89c50..7495c8519 100644 --- a/asm/berry_crush_2.s +++ b/asm/berry_crush_2.s @@ -2856,7 +2856,7 @@ _0814D106: movs r0, 0 movs r1, 0 bl DrawDialogueFrame - ldr r2, _0814D148 @ =gUnknown_8419F54 + ldr r2, _0814D148 @ =gText_SavingDontTurnOffThePower2 movs r0, 0 str r0, [sp] movs r0, 0x2 @@ -2877,7 +2877,7 @@ _0814D106: bl CreateTask b _0814D178 .align 2, 0 -_0814D148: .4byte gUnknown_8419F54 +_0814D148: .4byte gText_SavingDontTurnOffThePower2 _0814D14C: .4byte sub_80DA634 _0814D150: ldr r0, _0814D160 @ =sub_80DA634 diff --git a/asm/cable_club.s b/asm/cable_club.s index d7432e2c2..76346a28c 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -1496,7 +1496,7 @@ _08081308: .4byte gReceivedRemoteLinkPlayers thumb_func_start sub_808130C sub_808130C: @ 808130C push {lr} - bl sub_806F67C + bl Field_AskSaveTheGame pop {r0} bx r0 thumb_func_end sub_808130C @@ -2001,7 +2001,7 @@ _08081724: ldr r0, _0808173C @ =c2_8056854 _08081728: str r0, [r1, 0x8] - ldr r0, _08081740 @ =sub_806FB7C + ldr r0, _08081740 @ =CB2_SetUpSaveAfterLinkBattle bl SetMainCallback2 pop {r4,r5} pop {r0} @@ -2009,7 +2009,7 @@ _08081728: .align 2, 0 _08081738: .4byte gMain _0808173C: .4byte c2_8056854 -_08081740: .4byte sub_806FB7C +_08081740: .4byte CB2_SetUpSaveAfterLinkBattle thumb_func_end sub_8081668 thumb_func_start sub_8081744 @@ -2388,7 +2388,7 @@ sp02A_crash_sound: @ 8081A1C ldr r0, _08081A2C @ =gSpecialVar_0x8006 ldrb r0, [r0] ldr r1, _08081A30 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl sub_808B700 + bl InitLinkPartnerTrainerCard pop {r0} bx r0 .align 2, 0 diff --git a/asm/dodrio_berry_picking.s b/asm/dodrio_berry_picking.s index c9dd68e4b..8b2797dc8 100644 --- a/asm/dodrio_berry_picking.s +++ b/asm/dodrio_berry_picking.s @@ -10658,7 +10658,7 @@ _08155AA6: movs r0, 0 movs r1, 0 bl DrawDialogueFrame - ldr r2, _08155ACC @ =gUnknown_8419F54 + ldr r2, _08155ACC @ =gText_SavingDontTurnOffThePower2 str r4, [sp] movs r0, 0x2 str r0, [sp, 0x4] @@ -10672,7 +10672,7 @@ _08155AA6: bl AddTextPrinterParameterized2 b _08155B08 .align 2, 0 -_08155ACC: .4byte gUnknown_8419F54 +_08155ACC: .4byte gText_SavingDontTurnOffThePower2 _08155AD0: movs r0, 0 movs r1, 0x3 diff --git a/asm/field_message_box.s b/asm/field_message_box.s index a326e0f59..183b5a3fb 100644 --- a/asm/field_message_box.s +++ b/asm/field_message_box.s @@ -75,7 +75,7 @@ _080693C4: lsls r0, 24 cmp r0, 0 bne _080693D4 - bl sub_80F6E9C + bl LoadStdWindowFrameGfx b _080693E2 _080693D4: bl sub_80F79A4 diff --git a/asm/hall_of_fame.s b/asm/hall_of_fame.s index fbb7cdc9c..36eacbf17 100644 --- a/asm/hall_of_fame.s +++ b/asm/hall_of_fame.s @@ -509,7 +509,7 @@ _080F21B2: movs r0, 0 movs r1, 0 bl DrawDialogueFrame - ldr r2, _080F2214 @ =gUnknown_8419F54 + ldr r2, _080F2214 @ =gText_SavingDontTurnOffThePower2 movs r0, 0 str r0, [sp] movs r0, 0x2 @@ -543,7 +543,7 @@ _080F21B2: _080F2208: .4byte 0x000001ff _080F220C: .4byte gDecompressionBuffer _080F2210: .4byte gUnknown_203AB38 -_080F2214: .4byte gUnknown_8419F54 +_080F2214: .4byte gText_SavingDontTurnOffThePower2 _080F2218: .4byte gTasks _080F221C: .4byte sub_80F2220 thumb_func_end Task_Hof_InitTeamSaveData diff --git a/asm/item_menu.s b/asm/item_menu.s index e58abf87f..9b1ab2492 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -138,18 +138,18 @@ _08107EB0: .4byte gUnknown_203AD10 _08107EB4: .4byte gUnknown_203ACFC thumb_func_end sub_8107DB4 - thumb_func_start ReturnToBagFromKeyItem -ReturnToBagFromKeyItem: @ 8107EB8 + thumb_func_start CB2_BagMenuFromStartMenu +CB2_BagMenuFromStartMenu: @ 8107EB8 push {lr} - ldr r2, _08107EC8 @ =sub_80568A8 + ldr r2, _08107EC8 @ =CB2_ReturnToStartMenu movs r0, 0 movs r1, 0x3 bl sub_8107DB4 pop {r0} bx r0 .align 2, 0 -_08107EC8: .4byte sub_80568A8 - thumb_func_end ReturnToBagFromKeyItem +_08107EC8: .4byte CB2_ReturnToStartMenu + thumb_func_end CB2_BagMenuFromStartMenu thumb_func_start sub_8107ECC sub_8107ECC: @ 8107ECC diff --git a/asm/link_rfu_3.s b/asm/link_rfu_3.s index 4ddbed23a..94a07fdaf 100644 --- a/asm/link_rfu_3.s +++ b/asm/link_rfu_3.s @@ -3252,7 +3252,7 @@ _08117384: lsls r0, 24 lsrs r0, 24 ldr r1, _081173BC @ =CB2_ReturnToField - bl sub_808B700 + bl InitLinkPartnerTrainerCard _081173A2: bl RunTasks bl RunTextPrinters @@ -5840,7 +5840,7 @@ _08118AD4: bl sub_811BEDC bl _081198DC _08118ADE: - ldr r0, _08118B00 @ =sub_806F1F0 + ldr r0, _08118B00 @ =Task_StartMenuHandleInput bl FuncIsActiveTask lsls r0, 24 cmp r0, 0 @@ -5854,7 +5854,7 @@ _08118AEE: movs r0, 0x4 bl _081198DA .align 2, 0 -_08118B00: .4byte sub_806F1F0 +_08118B00: .4byte Task_StartMenuHandleInput _08118B04: bl sub_811A0E0 movs r3, 0x2 @@ -6975,7 +6975,7 @@ _081194DC: movs r0, 0x2F bl sub_8118664 _081194E4: - bl sub_80F7998 + bl DestroyHelpMessageWindow_ b _081198DC .align 2, 0 _081194EC: .4byte gUnknown_8458B44 @@ -7171,7 +7171,7 @@ _08119670: _0811967A: movs r0, 0x1 bl sub_811B258 - bl sub_80F7998 + bl DestroyHelpMessageWindow_ movs r0, 0x4 b _081198DA .align 2, 0 @@ -8482,7 +8482,7 @@ _0811A0B0: .4byte gTasks+0x8 sub_811A0B4: @ 811A0B4 push {r4,lr} adds r4, r0, 0 - bl sub_80F6E9C + bl LoadStdWindowFrameGfx movs r0, 0 movs r1, 0x1 bl DrawDialogueFrame @@ -8528,7 +8528,7 @@ sub_811A0F8: @ 811A0F8 beq _0811A130 b _0811A142 _0811A10A: - bl sub_80F6E9C + bl LoadStdWindowFrameGfx movs r0, 0 movs r1, 0x1 bl DrawDialogueFrame diff --git a/asm/naming_screen.s b/asm/naming_screen.s index ef692b052..09f4ca070 100644 --- a/asm/naming_screen.s +++ b/asm/naming_screen.s @@ -491,7 +491,7 @@ sub_809DD60: @ 809DD60 bl CreateTask ldr r0, _0809DD84 @ =sub_809FB70 bl SetMainCallback2 - bl sub_812B234 + bl HelpSystem_BackupSomeVariable movs r0, 0x3 bl HelpSystem_SetSomeVariable2 pop {r0} @@ -868,7 +868,7 @@ _0809E06C: ldr r0, [r4] bl Free str r5, [r4] - bl sub_812B248 + bl HelpSystem_RestoreSomeVariable _0809E096: movs r0, 0 pop {r4,r5} @@ -4490,7 +4490,7 @@ sub_809FC90: @ 809FC90 ldrb r2, [r1, 0x8] movs r0, 0 str r0, [sp] - ldr r0, _0809FCB4 @ =sub_80568A8 + ldr r0, _0809FCB4 @ =CB2_ReturnToStartMenu str r0, [sp, 0x4] movs r0, 0 movs r3, 0 @@ -4500,7 +4500,7 @@ sub_809FC90: @ 809FC90 bx r0 .align 2, 0 _0809FCB0: .4byte gSaveBlock2Ptr -_0809FCB4: .4byte sub_80568A8 +_0809FCB4: .4byte CB2_ReturnToStartMenu thumb_func_end sub_809FC90 thumb_func_start sub_809FCB8 @@ -4512,7 +4512,7 @@ sub_809FCB8: @ 809FCB8 ldrb r2, [r1, 0x8] movs r0, 0 str r0, [sp] - ldr r0, _0809FCDC @ =sub_80568A8 + ldr r0, _0809FCDC @ =CB2_ReturnToStartMenu str r0, [sp, 0x4] movs r0, 0x1 movs r3, 0 @@ -4522,7 +4522,7 @@ sub_809FCB8: @ 809FCB8 bx r0 .align 2, 0 _0809FCD8: .4byte gSaveBlock2Ptr -_0809FCDC: .4byte sub_80568A8 +_0809FCDC: .4byte CB2_ReturnToStartMenu thumb_func_end sub_809FCB8 thumb_func_start sub_809FCE0 @@ -4534,7 +4534,7 @@ sub_809FCE0: @ 809FCE0 ldrb r2, [r1, 0x8] movs r0, 0 str r0, [sp] - ldr r0, _0809FD04 @ =sub_80568A8 + ldr r0, _0809FD04 @ =CB2_ReturnToStartMenu str r0, [sp, 0x4] movs r0, 0x2 movs r3, 0 @@ -4544,7 +4544,7 @@ sub_809FCE0: @ 809FCE0 bx r0 .align 2, 0 _0809FD00: .4byte gSaveBlock2Ptr -_0809FD04: .4byte sub_80568A8 +_0809FD04: .4byte CB2_ReturnToStartMenu thumb_func_end sub_809FCE0 thumb_func_start sub_809FD08 @@ -4556,7 +4556,7 @@ sub_809FD08: @ 809FD08 ldrb r2, [r1, 0x8] movs r0, 0 str r0, [sp] - ldr r0, _0809FD2C @ =sub_80568A8 + ldr r0, _0809FD2C @ =CB2_ReturnToStartMenu str r0, [sp, 0x4] movs r0, 0x3 movs r3, 0 @@ -4566,7 +4566,7 @@ sub_809FD08: @ 809FD08 bx r0 .align 2, 0 _0809FD28: .4byte gSaveBlock2Ptr -_0809FD2C: .4byte sub_80568A8 +_0809FD2C: .4byte CB2_ReturnToStartMenu thumb_func_end sub_809FD08 thumb_func_start sub_809FD30 @@ -4578,7 +4578,7 @@ sub_809FD30: @ 809FD30 ldrb r2, [r1, 0x8] movs r0, 0 str r0, [sp] - ldr r0, _0809FD54 @ =sub_80568A8 + ldr r0, _0809FD54 @ =CB2_ReturnToStartMenu str r0, [sp, 0x4] movs r0, 0x4 movs r3, 0 @@ -4588,7 +4588,7 @@ sub_809FD30: @ 809FD30 bx r0 .align 2, 0 _0809FD50: .4byte gSaveBlock2Ptr -_0809FD54: .4byte sub_80568A8 +_0809FD54: .4byte CB2_ReturnToStartMenu thumb_func_end sub_809FD30 .align 2, 0 @ Don't pad with nop. diff --git a/asm/option_menu.s b/asm/option_menu.s index bb370f0ba..3b08810c5 100644 --- a/asm/option_menu.s +++ b/asm/option_menu.s @@ -26,14 +26,14 @@ sub_8088374: @ 8088374 bx r0 thumb_func_end sub_8088374 - thumb_func_start sub_8088388 -sub_8088388: @ 8088388 + thumb_func_start CB2_OptionsMenuFromStartMenu +CB2_OptionsMenuFromStartMenu: @ 8088388 push {r4-r6,lr} ldr r1, _08088418 @ =gMain ldr r0, [r1, 0x8] cmp r0, 0 bne _08088396 - ldr r0, _0808841C @ =sub_80568A8 + ldr r0, _0808841C @ =CB2_ReturnToStartMenu str r0, [r1, 0x8] _08088396: ldr r4, _08088420 @ =gUnknown_2039620 @@ -101,12 +101,12 @@ _080883FA: bx r0 .align 2, 0 _08088418: .4byte gMain -_0808841C: .4byte sub_80568A8 +_0808841C: .4byte CB2_ReturnToStartMenu _08088420: .4byte gUnknown_2039620 _08088424: .4byte gSaveBlock2Ptr _08088428: .4byte gUnknown_83CC304 _0808842C: .4byte sub_8088454 - thumb_func_end sub_8088388 + thumb_func_end CB2_OptionsMenuFromStartMenu thumb_func_start sub_8088430 sub_8088430: @ 8088430 diff --git a/asm/overworld.s b/asm/overworld.s index c3ff5e3c8..9bcd95eab 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -3754,20 +3754,20 @@ _080568A0: .4byte gFieldCallback _080568A4: .4byte sub_807DDD0 thumb_func_end c2_8056854 - thumb_func_start sub_80568A8 -sub_80568A8: @ 80568A8 + thumb_func_start CB2_ReturnToStartMenu +CB2_ReturnToStartMenu: @ 80568A8 push {lr} bl sub_80569BC ldr r1, _080568BC @ =gFieldCallback2 - ldr r0, _080568C0 @ =sub_807E3BC + ldr r0, _080568C0 @ =FieldCB2_ReturnToStartMenuInit str r0, [r1] bl CB2_ReturnToField pop {r0} bx r0 .align 2, 0 _080568BC: .4byte gFieldCallback2 -_080568C0: .4byte sub_807E3BC - thumb_func_end sub_80568A8 +_080568C0: .4byte FieldCB2_ReturnToStartMenuInit + thumb_func_end CB2_ReturnToStartMenu thumb_func_start sub_80568C4 sub_80568C4: @ 80568C4 diff --git a/asm/party_menu.s b/asm/party_menu.s index b49a09347..58c6e3732 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -3616,10 +3616,10 @@ sub_8120658: @ 8120658 beq _08120678 cmp r0, 0x5 beq _0812067E - ldr r1, _08120674 @ =gUnknown_8416285 + ldr r1, _08120674 @ =gStartMenuText_Bag b _08120686 .align 2, 0 -_08120674: .4byte gUnknown_8416285 +_08120674: .4byte gStartMenuText_Bag _08120678: movs r0, 0xB6 lsls r0, 1 @@ -12231,7 +12231,7 @@ sub_8124AB0: @ 8124AB0 str r0, [sp] ldr r0, _08124AD4 @ =sub_811FB28 str r0, [sp, 0x4] - ldr r0, _08124AD8 @ =sub_80568A8 + ldr r0, _08124AD8 @ =CB2_ReturnToStartMenu str r0, [sp, 0x8] movs r0, 0 movs r1, 0 @@ -12243,7 +12243,7 @@ sub_8124AB0: @ 8124AB0 bx r0 .align 2, 0 _08124AD4: .4byte sub_811FB28 -_08124AD8: .4byte sub_80568A8 +_08124AD8: .4byte CB2_ReturnToStartMenu thumb_func_end sub_8124AB0 thumb_func_start hm2_waterfall @@ -16634,7 +16634,7 @@ CB2_PartyMenuFromStartMenu: @ 8126EB0 str r0, [sp] ldr r0, _08126ED4 @ =sub_811FB28 str r0, [sp, 0x4] - ldr r0, _08126ED8 @ =sub_80568A8 + ldr r0, _08126ED8 @ =CB2_ReturnToStartMenu str r0, [sp, 0x8] movs r0, 0 movs r1, 0 @@ -16646,7 +16646,7 @@ CB2_PartyMenuFromStartMenu: @ 8126EB0 bx r0 .align 2, 0 _08126ED4: .4byte sub_811FB28 -_08126ED8: .4byte sub_80568A8 +_08126ED8: .4byte CB2_ReturnToStartMenu thumb_func_end CB2_PartyMenuFromStartMenu thumb_func_start sub_8126EDC diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s index b0b53da55..8320c5809 100644 --- a/asm/pokedex_screen.s +++ b/asm/pokedex_screen.s @@ -289,8 +289,8 @@ _081026D0: _08102758: .4byte gUnknown_84404C8 thumb_func_end sub_810250C - thumb_func_start sub_810275C -sub_810275C: @ 810275C + thumb_func_start CB2_OpenPokedexFromStartMenu +CB2_OpenPokedexFromStartMenu: @ 810275C push {lr} bl sub_810250C movs r1, 0xC0 @@ -314,7 +314,7 @@ sub_810275C: @ 810275C bx r0 .align 2, 0 _08102794: .4byte sub_81024D4 - thumb_func_end sub_810275C + thumb_func_end CB2_OpenPokedexFromStartMenu thumb_func_start sub_8102798 sub_8102798: @ 8102798 @@ -428,13 +428,13 @@ sub_8102858: @ 8102858 lsls r1, 7 movs r0, 0 bl SetGpuRegBits - ldr r0, _08102878 @ =sub_80568A8 + ldr r0, _08102878 @ =CB2_ReturnToStartMenu bl SetMainCallback2 _08102874: pop {r0} bx r0 .align 2, 0 -_08102878: .4byte sub_80568A8 +_08102878: .4byte CB2_ReturnToStartMenu thumb_func_end sub_8102858 thumb_func_start sub_810287C diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index c6daa62ea..f1188910d 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -1417,7 +1417,7 @@ _0808C3E0: adds r1, r5, 0 adds r1, 0x26 bl sub_808C72C - bl sub_80F6E9C + bl LoadStdWindowFrameGfx movs r0, 0 movs r1, 0 bl DrawDialogueFrame diff --git a/asm/save_failed_screen.s b/asm/save_failed_screen.s index 09503af6a..aa9d375a3 100644 --- a/asm/save_failed_screen.s +++ b/asm/save_failed_screen.s @@ -158,16 +158,16 @@ _080F5240: adds r1, r0, 0 cmp r1, 0x1 bne _080F5260 - ldr r0, _080F5258 @ =gUnknown_3005420 + ldr r0, _080F5258 @ =gSaveSucceeded strh r1, [r0] ldr r0, _080F525C @ =gUnknown_8418E09 bl sub_80F5404 b _080F526C .align 2, 0 -_080F5258: .4byte gUnknown_3005420 +_080F5258: .4byte gSaveSucceeded _080F525C: .4byte gUnknown_8418E09 _080F5260: - ldr r0, _080F5274 @ =gUnknown_3005420 + ldr r0, _080F5274 @ =gSaveSucceeded movs r1, 0xFF strh r1, [r0] ldr r0, _080F5278 @ =gUnknown_8418CD9 @@ -178,7 +178,7 @@ _080F526C: strb r0, [r1] b _080F52D6 .align 2, 0 -_080F5274: .4byte gUnknown_3005420 +_080F5274: .4byte gSaveSucceeded _080F5278: .4byte gUnknown_8418CD9 _080F527C: .4byte gUnknown_203AB50 _080F5280: diff --git a/asm/save_menu_util.s b/asm/save_menu_util.s index 1cb9d85a3..8ebfc3731 100644 --- a/asm/save_menu_util.s +++ b/asm/save_menu_util.s @@ -5,8 +5,8 @@ .text - thumb_func_start sub_80F7FCC -sub_80F7FCC: @ 80F7FCC + thumb_func_start SaveStatToString +SaveStatToString: @ 80F7FCC push {r4-r7,lr} lsls r0, 24 lsrs r3, r0, 24 @@ -144,6 +144,6 @@ _080F80D8: bx r0 .align 2, 0 _080F80E0: .4byte 0x00000827 - thumb_func_end sub_80F7FCC + thumb_func_end SaveStatToString .align 2, 0 @ Don't pad with nop. diff --git a/asm/script_menu.s b/asm/script_menu.s index 59af843f1..56781a953 100644 --- a/asm/script_menu.s +++ b/asm/script_menu.s @@ -1127,7 +1127,7 @@ _0809D1FA: adds r1, r4, 0 adds r2, r7, 0 movs r3, 0x12 - bl sub_812E6DC + bl Menu_PrintFormatIntlPlayerName movs r0, 0x10 str r0, [sp] mov r0, r9 diff --git a/asm/start_menu.s b/asm/start_menu.s deleted file mode 100644 index 7ab76140f..000000000 --- a/asm/start_menu.s +++ /dev/null @@ -1,2219 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_806ED54 -sub_806ED54: @ 806ED54 - push {lr} - ldr r0, _0806ED6C @ =gUnknown_20370F5 - movs r1, 0 - strb r1, [r0] - bl IsUpdateLinkStateCBActive - cmp r0, 0x1 - bne _0806ED70 - bl sub_806EE34 - b _0806ED90 - .align 2, 0 -_0806ED6C: .4byte gUnknown_20370F5 -_0806ED70: - bl InUnionRoom - cmp r0, 0x1 - bne _0806ED7E - bl sub_806EE58 - b _0806ED90 -_0806ED7E: - bl GetSafariZoneFlag - cmp r0, 0x1 - bne _0806ED8C - bl sub_806EE04 - b _0806ED90 -_0806ED8C: - bl sub_806EDB0 -_0806ED90: - pop {r0} - bx r0 - thumb_func_end sub_806ED54 - - thumb_func_start sub_806ED94 -sub_806ED94: @ 806ED94 - push {lr} - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _0806EDA8 @ =gUnknown_20370F6 - ldr r1, _0806EDAC @ =gUnknown_20370F5 - bl AppendToList - pop {r0} - bx r0 - .align 2, 0 -_0806EDA8: .4byte gUnknown_20370F6 -_0806EDAC: .4byte gUnknown_20370F5 - thumb_func_end sub_806ED94 - - thumb_func_start sub_806EDB0 -sub_806EDB0: @ 806EDB0 - push {lr} - ldr r0, _0806EDFC @ =0x00000829 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806EDC6 - movs r0, 0 - bl sub_806ED94 -_0806EDC6: - ldr r0, _0806EE00 @ =0x00000828 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806EDDA - movs r0, 0x1 - bl sub_806ED94 -_0806EDDA: - movs r0, 0x2 - bl sub_806ED94 - movs r0, 0x3 - bl sub_806ED94 - movs r0, 0x4 - bl sub_806ED94 - movs r0, 0x5 - bl sub_806ED94 - movs r0, 0x6 - bl sub_806ED94 - pop {r0} - bx r0 - .align 2, 0 -_0806EDFC: .4byte 0x00000829 -_0806EE00: .4byte 0x00000828 - thumb_func_end sub_806EDB0 - - thumb_func_start sub_806EE04 -sub_806EE04: @ 806EE04 - push {lr} - movs r0, 0x7 - bl sub_806ED94 - movs r0, 0 - bl sub_806ED94 - movs r0, 0x1 - bl sub_806ED94 - movs r0, 0x2 - bl sub_806ED94 - movs r0, 0x3 - bl sub_806ED94 - movs r0, 0x5 - bl sub_806ED94 - movs r0, 0x6 - bl sub_806ED94 - pop {r0} - bx r0 - thumb_func_end sub_806EE04 - - thumb_func_start sub_806EE34 -sub_806EE34: @ 806EE34 - push {lr} - movs r0, 0x1 - bl sub_806ED94 - movs r0, 0x2 - bl sub_806ED94 - movs r0, 0x8 - bl sub_806ED94 - movs r0, 0x5 - bl sub_806ED94 - movs r0, 0x6 - bl sub_806ED94 - pop {r0} - bx r0 - thumb_func_end sub_806EE34 - - thumb_func_start sub_806EE58 -sub_806EE58: @ 806EE58 - push {lr} - movs r0, 0x1 - bl sub_806ED94 - movs r0, 0x2 - bl sub_806ED94 - movs r0, 0x3 - bl sub_806ED94 - movs r0, 0x5 - bl sub_806ED94 - movs r0, 0x6 - bl sub_806ED94 - pop {r0} - bx r0 - thumb_func_end sub_806EE58 - - thumb_func_start sub_806EE7C -sub_806EE7C: @ 806EE7C - push {r4,r5,lr} - sub sp, 0xC - ldr r4, _0806EEF4 @ =gUnknown_2037101 - ldr r0, _0806EEF8 @ =gUnknown_83A738C - bl AddWindow - strb r0, [r4] - ldrb r0, [r4] - bl PutWindowTilemap - ldrb r0, [r4] - movs r1, 0 - bl DrawStdWindowFrame - ldr r0, _0806EEFC @ =gStringVar1 - ldr r1, _0806EF00 @ =gSafariZoneStepCounter - ldrh r1, [r1] - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r0, _0806EF04 @ =gStringVar2 - movs r1, 0x96 - lsls r1, 2 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r0, _0806EF08 @ =gStringVar3 - ldr r1, _0806EF0C @ =gNumSafariBalls - ldrb r1, [r1] - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r5, _0806EF10 @ =gStringVar4 - ldr r1, _0806EF14 @ =gUnknown_84162A9 - adds r0, r5, 0 - bl StringExpandPlaceholders - ldrb r0, [r4] - movs r1, 0x3 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x2 - adds r2, r5, 0 - movs r3, 0x4 - bl AddTextPrinterParameterized - ldrb r0, [r4] - movs r1, 0x2 - bl CopyWindowToVram - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806EEF4: .4byte gUnknown_2037101 -_0806EEF8: .4byte gUnknown_83A738C -_0806EEFC: .4byte gStringVar1 -_0806EF00: .4byte gSafariZoneStepCounter -_0806EF04: .4byte gStringVar2 -_0806EF08: .4byte gStringVar3 -_0806EF0C: .4byte gNumSafariBalls -_0806EF10: .4byte gStringVar4 -_0806EF14: .4byte gUnknown_84162A9 - thumb_func_end sub_806EE7C - - thumb_func_start sub_806EF18 -sub_806EF18: @ 806EF18 - push {r4,lr} - bl GetSafariZoneFlag - cmp r0, 0 - beq _0806EF3A - ldr r4, _0806EF40 @ =gUnknown_2037101 - ldrb r0, [r4] - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - ldrb r0, [r4] - movs r1, 0x2 - bl CopyWindowToVram - ldrb r0, [r4] - bl RemoveWindow -_0806EF3A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0806EF40: .4byte gUnknown_2037101 - thumb_func_end sub_806EF18 - - thumb_func_start sub_806EF44 -sub_806EF44: @ 806EF44 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - mov r8, r0 - lsls r1, 24 - lsrs r6, r1, 24 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _0806EF9C @ =gUnknown_83A7344 - mov r10, r0 - ldr r1, _0806EFA0 @ =gStringVar4 - mov r9, r1 -_0806EF68: - ldr r1, _0806EFA4 @ =gUnknown_20370F6 - lsls r0, r2, 16 - asrs r5, r0, 16 - adds r4, r5, r1 - ldrb r1, [r4] - adds r7, r0, 0 - cmp r1, 0x3 - beq _0806EF7C - cmp r1, 0x8 - bne _0806EFA8 -_0806EF7C: - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r4] - lsls r1, 3 - add r1, r10 - ldr r1, [r1] - lsls r3, r5, 4 - subs r3, r5 - lsls r3, 16 - lsrs r3, 16 - movs r2, 0x8 - bl sub_812E6DC - b _0806EFDA - .align 2, 0 -_0806EF9C: .4byte gUnknown_83A7344 -_0806EFA0: .4byte gStringVar4 -_0806EFA4: .4byte gUnknown_20370F6 -_0806EFA8: - ldrb r0, [r4] - lsls r0, 3 - add r0, r10 - ldr r1, [r0] - mov r0, r9 - bl StringExpandPlaceholders - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - lsls r1, r5, 4 - subs r1, r5 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp] - movs r1, 0xFF - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x2 - mov r2, r9 - movs r3, 0x8 - bl AddTextPrinterParameterized -_0806EFDA: - movs r0, 0x80 - lsls r0, 9 - adds r1, r7, r0 - lsrs r2, r1, 16 - asrs r1, 16 - ldr r0, _0806F000 @ =gUnknown_20370F5 - ldrb r0, [r0] - cmp r1, r0 - bge _0806F004 - subs r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0 - bne _0806EF68 - mov r1, r8 - strb r2, [r1] - movs r0, 0 - b _0806F00A - .align 2, 0 -_0806F000: .4byte gUnknown_20370F5 -_0806F004: - mov r0, r8 - strb r2, [r0] - movs r0, 0x1 -_0806F00A: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_806EF44 - - thumb_func_start sub_806F01C -sub_806F01C: @ 806F01C - push {r4,lr} - sub sp, 0xC - ldr r0, _0806F038 @ =gUnknown_20370FF - movs r1, 0 - ldrsb r1, [r0, r1] - adds r2, r0, 0 - cmp r1, 0x5 - bls _0806F02E - b _0806F140 -_0806F02E: - lsls r0, r1, 2 - ldr r1, _0806F03C @ =_0806F040 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806F038: .4byte gUnknown_20370FF -_0806F03C: .4byte _0806F040 - .align 2, 0 -_0806F040: - .4byte _0806F058 - .4byte _0806F060 - .4byte _0806F06C - .4byte _0806F090 - .4byte _0806F0A4 - .4byte _0806F0C4 -_0806F058: - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] - b _0806F140 -_0806F060: - bl sub_806ED54 - ldr r1, _0806F068 @ =gUnknown_20370FF - b _0806F0B8 - .align 2, 0 -_0806F068: .4byte gUnknown_20370FF -_0806F06C: - bl sub_80F6E9C - ldr r0, _0806F088 @ =gUnknown_20370F5 - ldrb r0, [r0] - bl sub_80F78E0 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl DrawStdWindowFrame - ldr r1, _0806F08C @ =gUnknown_20370FF - b _0806F0B8 - .align 2, 0 -_0806F088: .4byte gUnknown_20370F5 -_0806F08C: .4byte gUnknown_20370FF -_0806F090: - bl GetSafariZoneFlag - cmp r0, 0 - beq _0806F09C - bl sub_806EE7C -_0806F09C: - ldr r1, _0806F0A0 @ =gUnknown_20370FF - b _0806F0B8 - .align 2, 0 -_0806F0A0: .4byte gUnknown_20370FF -_0806F0A4: - ldr r4, _0806F0C0 @ =gUnknown_2037100 - adds r0, r4, 0 - movs r1, 0x2 - bl sub_806EF44 - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - bne _0806F140 - subs r1, r4, 0x1 -_0806F0B8: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0806F140 - .align 2, 0 -_0806F0C0: .4byte gUnknown_2037100 -_0806F0C4: - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xF - str r1, [sp] - ldr r1, _0806F12C @ =gUnknown_20370F5 - ldrb r1, [r1] - str r1, [sp, 0x4] - ldr r4, _0806F130 @ =gUnknown_20370F4 - ldrb r1, [r4] - str r1, [sp, 0x8] - movs r1, 0x2 - movs r2, 0 - movs r3, 0 - bl Menu_InitCursor - strb r0, [r4] - bl MenuHelpers_LinkSomething - lsls r0, 24 - cmp r0, 0 - bne _0806F118 - bl InUnionRoom - cmp r0, 0x1 - beq _0806F118 - ldr r0, _0806F134 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x13] - cmp r0, 0 - bne _0806F118 - ldr r2, _0806F138 @ =gUnknown_83A7394 - ldr r1, _0806F13C @ =gUnknown_20370F6 - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - bl sub_80F7974 -_0806F118: - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl CopyWindowToVram - movs r0, 0x1 - b _0806F142 - .align 2, 0 -_0806F12C: .4byte gUnknown_20370F5 -_0806F130: .4byte gUnknown_20370F4 -_0806F134: .4byte gSaveBlock2Ptr -_0806F138: .4byte gUnknown_83A7394 -_0806F13C: .4byte gUnknown_20370F6 -_0806F140: - movs r0, 0 -_0806F142: - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_806F01C - - thumb_func_start sub_806F14C -sub_806F14C: @ 806F14C - push {lr} - ldr r1, _0806F164 @ =gUnknown_20370FF - movs r0, 0 - strb r0, [r1] - strb r0, [r1, 0x1] -_0806F156: - bl sub_806F01C - lsls r0, 24 - cmp r0, 0 - beq _0806F156 - pop {r0} - bx r0 - .align 2, 0 -_0806F164: .4byte gUnknown_20370FF - thumb_func_end sub_806F14C - - thumb_func_start task50_startmenu -task50_startmenu: @ 806F168 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_806F01C - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - bne _0806F180 - adds r0, r4, 0 - bl SwitchTaskToFollowupFunc -_0806F180: - pop {r4} - pop {r0} - bx r0 - thumb_func_end task50_startmenu - - thumb_func_start sub_806F188 -sub_806F188: @ 806F188 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r1, _0806F1B0 @ =gUnknown_20370FF - movs r0, 0 - strb r0, [r1] - strb r0, [r1, 0x1] - ldr r4, _0806F1B4 @ =task50_startmenu - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - adds r2, r5, 0 - bl SetTaskFuncWithFollowupFunc - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806F1B0: .4byte gUnknown_20370FF -_0806F1B4: .4byte task50_startmenu - thumb_func_end sub_806F188 - - thumb_func_start sub_806F1B8 -sub_806F1B8: @ 806F1B8 - push {lr} - bl sub_806F01C - lsls r0, 24 - cmp r0, 0 - beq _0806F1CC - bl sub_807E3A0 - movs r0, 0x1 - b _0806F1CE -_0806F1CC: - movs r0, 0 -_0806F1CE: - pop {r1} - bx r1 - thumb_func_end sub_806F1B8 - - thumb_func_start sub_806F1D4 -sub_806F1D4: @ 806F1D4 - ldr r1, _0806F1E4 @ =gUnknown_20370FF - movs r0, 0 - strb r0, [r1] - strb r0, [r1, 0x1] - ldr r1, _0806F1E8 @ =gFieldCallback2 - ldr r0, _0806F1EC @ =sub_806F1B8 - str r0, [r1] - bx lr - .align 2, 0 -_0806F1E4: .4byte gUnknown_20370FF -_0806F1E8: .4byte gFieldCallback2 -_0806F1EC: .4byte sub_806F1B8 - thumb_func_end sub_806F1D4 - - thumb_func_start sub_806F1F0 -sub_806F1F0: @ 806F1F0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0806F210 @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0806F214 - cmp r0, 0x1 - beq _0806F238 - b _0806F24E - .align 2, 0 -_0806F210: .4byte gTasks+0x8 -_0806F214: - bl InUnionRoom - cmp r0, 0x1 - bne _0806F220 - bl var_800D_set_xB -_0806F220: - ldr r1, _0806F230 @ =gUnknown_20370F0 - ldr r0, _0806F234 @ =sub_806F280 - str r0, [r1] - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0806F24E - .align 2, 0 -_0806F230: .4byte gUnknown_20370F0 -_0806F234: .4byte sub_806F280 -_0806F238: - ldr r0, _0806F254 @ =gUnknown_20370F0 - ldr r0, [r0] - bl _call_via_r0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806F24E - adds r0, r5, 0 - bl DestroyTask -_0806F24E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806F254: .4byte gUnknown_20370F0 - thumb_func_end sub_806F1F0 - - thumb_func_start ShowStartMenu -ShowStartMenu: @ 806F258 - push {lr} - bl IsUpdateLinkStateCBActive - cmp r0, 0 - bne _0806F26E - bl player_bitmagic - bl sub_805C270 - bl sub_805C780 -_0806F26E: - ldr r0, _0806F27C @ =sub_806F1F0 - bl sub_806F188 - bl ScriptContext2_Enable - pop {r0} - bx r0 - .align 2, 0 -_0806F27C: .4byte sub_806F1F0 - thumb_func_end ShowStartMenu - - thumb_func_start sub_806F280 -sub_806F280: @ 806F280 - push {r4,lr} - ldr r0, _0806F35C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0806F2D2 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - bl Menu_MoveCursor - ldr r4, _0806F360 @ =gUnknown_20370F4 - strb r0, [r4] - bl MenuHelpers_LinkSomething - lsls r0, 24 - cmp r0, 0 - bne _0806F2D2 - bl InUnionRoom - cmp r0, 0x1 - beq _0806F2D2 - ldr r0, _0806F364 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x13] - cmp r0, 0 - bne _0806F2D2 - ldr r2, _0806F368 @ =gUnknown_83A7394 - ldr r1, _0806F36C @ =gUnknown_20370F6 - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - movs r1, 0x2 - bl sub_8113018 -_0806F2D2: - ldr r0, _0806F35C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0806F320 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl Menu_MoveCursor - ldr r4, _0806F360 @ =gUnknown_20370F4 - strb r0, [r4] - bl MenuHelpers_LinkSomething - lsls r0, 24 - cmp r0, 0 - bne _0806F320 - bl InUnionRoom - cmp r0, 0x1 - beq _0806F320 - ldr r0, _0806F364 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x13] - cmp r0, 0 - bne _0806F320 - ldr r2, _0806F368 @ =gUnknown_83A7394 - ldr r1, _0806F36C @ =gUnknown_20370F6 - ldrb r0, [r4] - adds r0, r1 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - movs r1, 0x2 - bl sub_8113018 -_0806F320: - ldr r0, _0806F35C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0806F378 - movs r0, 0x5 - bl PlaySE - bl sub_806F3CC - lsls r0, 24 - cmp r0, 0 - beq _0806F358 - ldr r3, _0806F370 @ =gUnknown_20370F0 - ldr r1, _0806F374 @ =gUnknown_83A7344 - ldr r2, _0806F36C @ =gUnknown_20370F6 - ldr r0, _0806F360 @ =gUnknown_20370F4 - ldrb r0, [r0] - adds r0, r2 - ldrb r0, [r0] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r0, [r0] - str r0, [r3] - bl sub_806F394 -_0806F358: - movs r0, 0 - b _0806F38E - .align 2, 0 -_0806F35C: .4byte gMain -_0806F360: .4byte gUnknown_20370F4 -_0806F364: .4byte gSaveBlock2Ptr -_0806F368: .4byte gUnknown_83A7394 -_0806F36C: .4byte gUnknown_20370F6 -_0806F370: .4byte gUnknown_20370F0 -_0806F374: .4byte gUnknown_83A7344 -_0806F378: - movs r0, 0xA - ands r0, r1 - cmp r0, 0 - beq _0806F358 - bl sub_806EF18 - bl sub_80F7998 - bl sub_806FEA0 - movs r0, 0x1 -_0806F38E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_806F280 - - thumb_func_start sub_806F394 -sub_806F394: @ 806F394 - push {lr} - ldr r0, _0806F3BC @ =gUnknown_20370F0 - ldr r1, [r0] - ldr r0, _0806F3C0 @ =sub_806F4E8 - cmp r1, r0 - beq _0806F3B8 - ldr r0, _0806F3C4 @ =sub_806F540 - cmp r1, r0 - beq _0806F3B8 - ldr r0, _0806F3C8 @ =sub_806F554 - cmp r1, r0 - beq _0806F3B8 - bl sub_80CCB68 - movs r0, 0x1 - movs r1, 0 - bl fade_screen -_0806F3B8: - pop {r0} - bx r0 - .align 2, 0 -_0806F3BC: .4byte gUnknown_20370F0 -_0806F3C0: .4byte sub_806F4E8 -_0806F3C4: .4byte sub_806F540 -_0806F3C8: .4byte sub_806F554 - thumb_func_end sub_806F394 - - thumb_func_start sub_806F3CC -sub_806F3CC: @ 806F3CC - push {lr} - ldr r1, _0806F3F8 @ =gUnknown_83A7344 - ldr r2, _0806F3FC @ =gUnknown_20370F6 - ldr r0, _0806F400 @ =gUnknown_20370F4 - ldrb r0, [r0] - adds r0, r2 - ldrb r0, [r0] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r1, [r0] - ldr r0, _0806F404 @ =sub_806F410 - cmp r1, r0 - bne _0806F408 - movs r0, 0 - bl GetNationalPokedexCount - lsls r0, 16 - cmp r0, 0 - bne _0806F408 - movs r0, 0 - b _0806F40A - .align 2, 0 -_0806F3F8: .4byte gUnknown_83A7344 -_0806F3FC: .4byte gUnknown_20370F6 -_0806F400: .4byte gUnknown_20370F4 -_0806F404: .4byte sub_806F410 -_0806F408: - movs r0, 0x1 -_0806F40A: - pop {r1} - bx r1 - thumb_func_end sub_806F3CC - - thumb_func_start sub_806F410 -sub_806F410: @ 806F410 - push {lr} - ldr r0, _0806F424 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0806F428 - movs r0, 0 - b _0806F442 - .align 2, 0 -_0806F424: .4byte gPaletteFade -_0806F428: - movs r0, 0x29 - bl IncrementGameStat - bl PlayRainStoppingSoundEffect - bl sub_806EF18 - bl CleanupOverworldWindowsAndTilemaps - ldr r0, _0806F448 @ =sub_810275C - bl SetMainCallback2 - movs r0, 0x1 -_0806F442: - pop {r1} - bx r1 - .align 2, 0 -_0806F448: .4byte sub_810275C - thumb_func_end sub_806F410 - - thumb_func_start sub_806F44C -sub_806F44C: @ 806F44C - push {lr} - ldr r0, _0806F460 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0806F464 - movs r0, 0 - b _0806F478 - .align 2, 0 -_0806F460: .4byte gPaletteFade -_0806F464: - bl PlayRainStoppingSoundEffect - bl sub_806EF18 - bl CleanupOverworldWindowsAndTilemaps - ldr r0, _0806F47C @ =CB2_PartyMenuFromStartMenu - bl SetMainCallback2 - movs r0, 0x1 -_0806F478: - pop {r1} - bx r1 - .align 2, 0 -_0806F47C: .4byte CB2_PartyMenuFromStartMenu - thumb_func_end sub_806F44C - - thumb_func_start sub_806F480 -sub_806F480: @ 806F480 - push {lr} - ldr r0, _0806F494 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0806F498 - movs r0, 0 - b _0806F4AC - .align 2, 0 -_0806F494: .4byte gPaletteFade -_0806F498: - bl PlayRainStoppingSoundEffect - bl sub_806EF18 - bl CleanupOverworldWindowsAndTilemaps - ldr r0, _0806F4B0 @ =ReturnToBagFromKeyItem - bl SetMainCallback2 - movs r0, 0x1 -_0806F4AC: - pop {r1} - bx r1 - .align 2, 0 -_0806F4B0: .4byte ReturnToBagFromKeyItem - thumb_func_end sub_806F480 - - thumb_func_start sub_806F4B4 -sub_806F4B4: @ 806F4B4 - push {lr} - ldr r0, _0806F4C8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0806F4CC - movs r0, 0 - b _0806F4E0 - .align 2, 0 -_0806F4C8: .4byte gPaletteFade -_0806F4CC: - bl PlayRainStoppingSoundEffect - bl sub_806EF18 - bl CleanupOverworldWindowsAndTilemaps - ldr r0, _0806F4E4 @ =sub_80568A8 - bl sub_808B698 - movs r0, 0x1 -_0806F4E0: - pop {r1} - bx r1 - .align 2, 0 -_0806F4E4: .4byte sub_80568A8 - thumb_func_end sub_806F4B4 - - thumb_func_start sub_806F4E8 -sub_806F4E8: @ 806F4E8 - ldr r1, _0806F4F4 @ =gUnknown_20370F0 - ldr r0, _0806F4F8 @ =sub_806F5A4 - str r0, [r1] - movs r0, 0 - bx lr - .align 2, 0 -_0806F4F4: .4byte gUnknown_20370F0 -_0806F4F8: .4byte sub_806F5A4 - thumb_func_end sub_806F4E8 - - thumb_func_start sub_806F4FC -sub_806F4FC: @ 806F4FC - push {lr} - ldr r0, _0806F510 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0806F514 - movs r0, 0 - b _0806F52E - .align 2, 0 -_0806F510: .4byte gPaletteFade -_0806F514: - bl PlayRainStoppingSoundEffect - bl sub_806EF18 - bl CleanupOverworldWindowsAndTilemaps - ldr r0, _0806F534 @ =sub_8088388 - bl SetMainCallback2 - ldr r1, _0806F538 @ =gMain - ldr r0, _0806F53C @ =sub_80568A8 - str r0, [r1, 0x8] - movs r0, 0x1 -_0806F52E: - pop {r1} - bx r1 - .align 2, 0 -_0806F534: .4byte sub_8088388 -_0806F538: .4byte gMain -_0806F53C: .4byte sub_80568A8 - thumb_func_end sub_806F4FC - - thumb_func_start sub_806F540 -sub_806F540: @ 806F540 - push {lr} - bl sub_806EF18 - bl sub_80F7998 - bl sub_806FEA0 - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_806F540 - - thumb_func_start sub_806F554 -sub_806F554: @ 806F554 - push {lr} - bl sub_806EF18 - bl sub_80F7998 - bl sub_806FEA0 - bl SafariZoneRetirePrompt - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end sub_806F554 - - thumb_func_start sub_806F56C -sub_806F56C: @ 806F56C - push {lr} - ldr r0, _0806F580 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0806F584 - movs r0, 0 - b _0806F598 - .align 2, 0 -_0806F580: .4byte gPaletteFade -_0806F584: - bl PlayRainStoppingSoundEffect - bl CleanupOverworldWindowsAndTilemaps - ldr r0, _0806F59C @ =gUnknown_300502C - ldrb r0, [r0] - ldr r1, _0806F5A0 @ =sub_80568A8 - bl sub_808B700 - movs r0, 0x1 -_0806F598: - pop {r1} - bx r1 - .align 2, 0 -_0806F59C: .4byte gUnknown_300502C -_0806F5A0: .4byte sub_80568A8 - thumb_func_end sub_806F56C - - thumb_func_start sub_806F5A4 -sub_806F5A4: @ 806F5A4 - push {lr} - bl sub_812B234 - movs r0, 0xC - bl HelpSystem_SetSomeVariable2 - bl sub_806F624 - ldr r1, _0806F5C0 @ =gUnknown_20370F0 - ldr r0, _0806F5C4 @ =sub_806F5C8 - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0806F5C0: .4byte gUnknown_20370F0 -_0806F5C4: .4byte sub_806F5C8 - thumb_func_end sub_806F5A4 - - thumb_func_start sub_806F5C8 -sub_806F5C8: @ 806F5C8 - push {lr} - bl sub_806F648 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0806F604 - cmp r0, 0x1 - ble _0806F61C - cmp r0, 0x2 - beq _0806F5E4 - cmp r0, 0x3 - beq _0806F604 - b _0806F61C -_0806F5E4: - movs r0, 0 - movs r1, 0 - bl ClearDialogWindowAndFrameToTransparent - bl sub_806F14C - bl sub_812B248 - ldr r1, _0806F5FC @ =gUnknown_20370F0 - ldr r0, _0806F600 @ =sub_806F280 - str r0, [r1] - b _0806F61C - .align 2, 0 -_0806F5FC: .4byte gUnknown_20370F0 -_0806F600: .4byte sub_806F280 -_0806F604: - movs r0, 0 - movs r1, 0x1 - bl ClearDialogWindowAndFrameToTransparent - bl sub_80696C0 - bl ScriptContext2_Disable - bl sub_812B248 - movs r0, 0x1 - b _0806F61E -_0806F61C: - movs r0, 0 -_0806F61E: - pop {r1} - bx r1 - thumb_func_end sub_806F5C8 - - thumb_func_start sub_806F624 -sub_806F624: @ 806F624 - push {lr} - bl save_serialize_map - ldr r1, _0806F63C @ =gUnknown_3000FA4 - ldr r0, _0806F640 @ =sub_806F7A8 - str r0, [r1] - ldr r1, _0806F644 @ =gUnknown_3000FA9 - movs r0, 0 - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0806F63C: .4byte gUnknown_3000FA4 -_0806F640: .4byte sub_806F7A8 -_0806F644: .4byte gUnknown_3000FA9 - thumb_func_end sub_806F624 - - thumb_func_start sub_806F648 -sub_806F648: @ 806F648 - push {lr} - bl RunTextPrinters_CheckPrinter0Active - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - beq _0806F674 - ldr r1, _0806F66C @ =gUnknown_3000FA9 - movs r0, 0 - strb r0, [r1] - ldr r0, _0806F670 @ =gUnknown_3000FA4 - ldr r0, [r0] - bl _call_via_r0 - lsls r0, 24 - lsrs r0, 24 - b _0806F676 - .align 2, 0 -_0806F66C: .4byte gUnknown_3000FA9 -_0806F670: .4byte gUnknown_3000FA4 -_0806F674: - movs r0, 0 -_0806F676: - pop {r1} - bx r1 - thumb_func_end sub_806F648 - - thumb_func_start sub_806F67C -sub_806F67C: @ 806F67C - push {lr} - bl sub_812B234 - movs r0, 0xC - bl HelpSystem_SetSomeVariable2 - bl sub_806F624 - ldr r0, _0806F698 @ =task50_save_game - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_0806F698: .4byte task50_save_game - thumb_func_end sub_806F67C - - thumb_func_start sub_806F69C -sub_806F69C: @ 806F69C - push {r4,lr} - adds r2, r0, 0 - adds r4, r1, 0 - ldr r0, _0806F6C8 @ =gStringVar4 - adds r1, r2, 0 - bl StringExpandPlaceholders - movs r0, 0 - movs r1, 0x1 - bl sub_80F7768 - movs r0, 0x1 - bl AddTextPrinterForMessage - ldr r1, _0806F6CC @ =gUnknown_3000FA9 - movs r0, 0x1 - strb r0, [r1] - ldr r0, _0806F6D0 @ =gUnknown_3000FA4 - str r4, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0806F6C8: .4byte gStringVar4 -_0806F6CC: .4byte gUnknown_3000FA9 -_0806F6D0: .4byte gUnknown_3000FA4 - thumb_func_end sub_806F69C - - thumb_func_start task50_save_game -task50_save_game: @ 806F6D4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_806F648 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x1 - beq _0806F700 - cmp r1, 0x1 - bgt _0806F6F0 - cmp r1, 0 - beq _0806F712 - b _0806F704 -_0806F6F0: - cmp r1, 0x3 - bgt _0806F704 - ldr r1, _0806F6FC @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] - b _0806F704 - .align 2, 0 -_0806F6FC: .4byte gSpecialVar_Result -_0806F700: - ldr r0, _0806F718 @ =gSpecialVar_Result - strh r1, [r0] -_0806F704: - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts - bl sub_812B248 -_0806F712: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0806F718: .4byte gSpecialVar_Result - thumb_func_end task50_save_game - - thumb_func_start sub_806F71C -sub_806F71C: @ 806F71C - push {lr} - movs r0, 0 - movs r1, 0x1 - bl ClearDialogWindowAndFrame - pop {r0} - bx r0 - thumb_func_end sub_806F71C - - thumb_func_start sub_806F72C -sub_806F72C: @ 806F72C - push {lr} - bl sub_806FE84 - pop {r0} - bx r0 - thumb_func_end sub_806F72C - - thumb_func_start sub_806F738 -sub_806F738: @ 806F738 - ldr r1, _0806F740 @ =gUnknown_3000FA8 - movs r0, 0x3C - strb r0, [r1] - bx lr - .align 2, 0 -_0806F740: .4byte gUnknown_3000FA8 - thumb_func_end sub_806F738 - - thumb_func_start sub_806F744 -sub_806F744: @ 806F744 - push {lr} - ldr r1, _0806F764 @ =gUnknown_3000FA8 - ldrb r0, [r1] - subs r2, r0, 0x1 - strb r2, [r1] - ldr r0, _0806F768 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0806F76C - lsls r0, r2, 24 - cmp r0, 0 - beq _0806F772 - movs r0, 0 - b _0806F774 - .align 2, 0 -_0806F764: .4byte gUnknown_3000FA8 -_0806F768: .4byte gMain -_0806F76C: - movs r0, 0x5 - bl PlaySE -_0806F772: - movs r0, 0x1 -_0806F774: - pop {r1} - bx r1 - thumb_func_end sub_806F744 - - thumb_func_start sub_806F778 -sub_806F778: @ 806F778 - push {lr} - ldr r1, _0806F794 @ =gUnknown_3000FA8 - ldrb r0, [r1] - cmp r0, 0 - bne _0806F79C - ldr r0, _0806F798 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0806F7A0 - movs r0, 0x1 - b _0806F7A2 - .align 2, 0 -_0806F794: .4byte gUnknown_3000FA8 -_0806F798: .4byte gMain -_0806F79C: - subs r0, 0x1 - strb r0, [r1] -_0806F7A0: - movs r0, 0 -_0806F7A2: - pop {r1} - bx r1 - thumb_func_end sub_806F778 - - thumb_func_start sub_806F7A8 -sub_806F7A8: @ 806F7A8 - push {lr} - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl ClearStdWindowAndFrame - bl RemoveStartMenuWindow - movs r0, 0 - bl sub_8112EDC - bl sub_806FCF4 - ldr r0, _0806F7D4 @ =gUnknown_81C55C9 - ldr r1, _0806F7D8 @ =sub_806F7DC - bl sub_806F69C - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0806F7D4: .4byte gUnknown_81C55C9 -_0806F7D8: .4byte sub_806F7DC - thumb_func_end sub_806F7A8 - - thumb_func_start sub_806F7DC -sub_806F7DC: @ 806F7DC - push {lr} - bl DisplayYesNoMenuDefaultYes - ldr r1, _0806F7F0 @ =gUnknown_3000FA4 - ldr r0, _0806F7F4 @ =sub_806F7F8 - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0806F7F0: .4byte gUnknown_3000FA4 -_0806F7F4: .4byte sub_806F7F8 - thumb_func_end sub_806F7DC - - thumb_func_start sub_806F7F8 -sub_806F7F8: @ 806F7F8 - push {lr} - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0806F81A - cmp r1, 0 - bgt _0806F814 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0806F858 - b _0806F864 -_0806F814: - cmp r1, 0x1 - beq _0806F858 - b _0806F864 -_0806F81A: - ldr r0, _0806F838 @ =gSaveFileStatus - ldrh r0, [r0] - cmp r0, 0 - beq _0806F826 - cmp r0, 0x2 - bne _0806F82E -_0806F826: - ldr r0, _0806F83C @ =gDifferentSaveFile - ldrb r0, [r0] - cmp r0, 0 - bne _0806F848 -_0806F82E: - ldr r1, _0806F840 @ =gUnknown_3000FA4 - ldr r0, _0806F844 @ =sub_806F86C - str r0, [r1] - b _0806F864 - .align 2, 0 -_0806F838: .4byte gSaveFileStatus -_0806F83C: .4byte gDifferentSaveFile -_0806F840: .4byte gUnknown_3000FA4 -_0806F844: .4byte sub_806F86C -_0806F848: - ldr r1, _0806F850 @ =gUnknown_3000FA4 - ldr r0, _0806F854 @ =sub_806F924 - str r0, [r1] - b _0806F864 - .align 2, 0 -_0806F850: .4byte gUnknown_3000FA4 -_0806F854: .4byte sub_806F924 -_0806F858: - bl sub_806F72C - bl sub_806F71C - movs r0, 0x2 - b _0806F866 -_0806F864: - movs r0, 0 -_0806F866: - pop {r1} - bx r1 - thumb_func_end sub_806F7F8 - - thumb_func_start sub_806F86C -sub_806F86C: @ 806F86C - push {lr} - ldr r0, _0806F880 @ =gDifferentSaveFile - ldrb r0, [r0] - cmp r0, 0x1 - bne _0806F88C - ldr r0, _0806F884 @ =gUnknown_81C566A - ldr r1, _0806F888 @ =sub_806F8C0 - bl sub_806F69C - b _0806F894 - .align 2, 0 -_0806F880: .4byte gDifferentSaveFile -_0806F884: .4byte gUnknown_81C566A -_0806F888: .4byte sub_806F8C0 -_0806F88C: - ldr r0, _0806F89C @ =gUnknown_81C55EA - ldr r1, _0806F8A0 @ =sub_806F8A4 - bl sub_806F69C -_0806F894: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0806F89C: .4byte gUnknown_81C55EA -_0806F8A0: .4byte sub_806F8A4 - thumb_func_end sub_806F86C - - thumb_func_start sub_806F8A4 -sub_806F8A4: @ 806F8A4 - push {lr} - bl DisplayYesNoMenuDefaultYes - ldr r1, _0806F8B8 @ =gUnknown_3000FA4 - ldr r0, _0806F8BC @ =sub_806F8DC - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0806F8B8: .4byte gUnknown_3000FA4 -_0806F8BC: .4byte sub_806F8DC - thumb_func_end sub_806F8A4 - - thumb_func_start sub_806F8C0 -sub_806F8C0: @ 806F8C0 - push {lr} - bl DisplayYesNoMenuDefaultNo - ldr r1, _0806F8D4 @ =gUnknown_3000FA4 - ldr r0, _0806F8D8 @ =sub_806F8DC - str r0, [r1] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0806F8D4: .4byte gUnknown_3000FA4 -_0806F8D8: .4byte sub_806F8DC - thumb_func_end sub_806F8C0 - - thumb_func_start sub_806F8DC -sub_806F8DC: @ 806F8DC - push {lr} - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0806F8FE - cmp r1, 0 - bgt _0806F8F8 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0806F910 - b _0806F91C -_0806F8F8: - cmp r1, 0x1 - beq _0806F910 - b _0806F91C -_0806F8FE: - ldr r1, _0806F908 @ =gUnknown_3000FA4 - ldr r0, _0806F90C @ =sub_806F924 - str r0, [r1] - b _0806F91C - .align 2, 0 -_0806F908: .4byte gUnknown_3000FA4 -_0806F90C: .4byte sub_806F924 -_0806F910: - bl sub_806F72C - bl sub_806F71C - movs r0, 0x2 - b _0806F91E -_0806F91C: - movs r0, 0 -_0806F91E: - pop {r1} - bx r1 - thumb_func_end sub_806F8DC - - thumb_func_start sub_806F924 -sub_806F924: @ 806F924 - push {lr} - bl sub_8112450 - ldr r0, _0806F938 @ =gUnknown_81C5625 - ldr r1, _0806F93C @ =sub_806F940 - bl sub_806F69C - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0806F938: .4byte gUnknown_81C5625 -_0806F93C: .4byte sub_806F940 - thumb_func_end sub_806F924 - - thumb_func_start sub_806F940 -sub_806F940: @ 806F940 - push {r4,lr} - movs r0, 0 - bl IncrementGameStat - ldr r4, _0806F95C @ =gDifferentSaveFile - ldrb r0, [r4] - cmp r0, 0x1 - bne _0806F960 - movs r0, 0x4 - bl TrySavingData - movs r0, 0 - strb r0, [r4] - b _0806F966 - .align 2, 0 -_0806F95C: .4byte gDifferentSaveFile -_0806F960: - movs r0, 0 - bl TrySavingData -_0806F966: - ldr r1, _0806F974 @ =gUnknown_3000FA4 - ldr r0, _0806F978 @ =sub_806F97C - str r0, [r1] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0806F974: .4byte gUnknown_3000FA4 -_0806F978: .4byte sub_806F97C - thumb_func_end sub_806F940 - - thumb_func_start sub_806F97C -sub_806F97C: @ 806F97C - push {lr} - ldr r0, _0806F990 @ =gUnknown_3005420 - ldrh r0, [r0] - cmp r0, 0x1 - bne _0806F99C - ldr r0, _0806F994 @ =gUnknown_81C5647 - ldr r1, _0806F998 @ =sub_806F9B8 - bl sub_806F69C - b _0806F9A4 - .align 2, 0 -_0806F990: .4byte gUnknown_3005420 -_0806F994: .4byte gUnknown_81C5647 -_0806F998: .4byte sub_806F9B8 -_0806F99C: - ldr r0, _0806F9B0 @ =gUnknown_841614B - ldr r1, _0806F9B4 @ =sub_806FA04 - bl sub_806F69C -_0806F9A4: - bl sub_806F738 - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0806F9B0: .4byte gUnknown_841614B -_0806F9B4: .4byte sub_806FA04 - thumb_func_end sub_806F97C - - thumb_func_start sub_806F9B8 -sub_806F9B8: @ 806F9B8 - push {lr} - bl RunTextPrinters_CheckPrinter0Active - lsls r0, 16 - cmp r0, 0 - bne _0806F9D0 - movs r0, 0x30 - bl PlaySE - ldr r1, _0806F9D8 @ =gUnknown_3000FA4 - ldr r0, _0806F9DC @ =SaveDialogCB_ReturnSuccess - str r0, [r1] -_0806F9D0: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0806F9D8: .4byte gUnknown_3000FA4 -_0806F9DC: .4byte SaveDialogCB_ReturnSuccess - thumb_func_end sub_806F9B8 - - thumb_func_start SaveDialogCB_ReturnSuccess -SaveDialogCB_ReturnSuccess: @ 806F9E0 - push {lr} - bl IsSEPlaying - lsls r0, 24 - cmp r0, 0 - bne _0806F9FE - bl sub_806F744 - lsls r0, 24 - cmp r0, 0 - beq _0806F9FE - bl sub_806F72C - movs r0, 0x1 - b _0806FA00 -_0806F9FE: - movs r0, 0 -_0806FA00: - pop {r1} - bx r1 - thumb_func_end SaveDialogCB_ReturnSuccess - - thumb_func_start sub_806FA04 -sub_806FA04: @ 806FA04 - push {lr} - bl RunTextPrinters_CheckPrinter0Active - lsls r0, 16 - cmp r0, 0 - bne _0806FA1C - movs r0, 0x16 - bl PlaySE - ldr r1, _0806FA24 @ =gUnknown_3000FA4 - ldr r0, _0806FA28 @ =SaveDialogCB_ReturnError - str r0, [r1] -_0806FA1C: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_0806FA24: .4byte gUnknown_3000FA4 -_0806FA28: .4byte SaveDialogCB_ReturnError - thumb_func_end sub_806FA04 - - thumb_func_start SaveDialogCB_ReturnError -SaveDialogCB_ReturnError: @ 806FA2C - push {lr} - bl sub_806F778 - lsls r0, 24 - cmp r0, 0 - beq _0806FA40 - bl sub_806F72C - movs r0, 0x3 - b _0806FA42 -_0806FA40: - movs r0, 0 -_0806FA42: - pop {r1} - bx r1 - thumb_func_end SaveDialogCB_ReturnError - - thumb_func_start sub_806FA48 -sub_806FA48: @ 806FA48 - push {lr} - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_806FA48 - - thumb_func_start sub_806FA54 -sub_806FA54: @ 806FA54 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - mov r8, r0 - ldrb r0, [r0] - cmp r0, 0x4 - bls _0806FA66 - b _0806FB64 -_0806FA66: - lsls r0, 2 - ldr r1, _0806FA70 @ =_0806FA74 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806FA70: .4byte _0806FA74 - .align 2, 0 -_0806FA74: - .4byte _0806FA88 - .4byte _0806FB00 - .4byte _0806FB12 - .4byte _0806FB3C - .4byte _0806FB60 -_0806FA88: - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl SetVBlankCallback - bl ScanlineEffect_Stop - movs r2, 0xA0 - lsls r2, 19 - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r1, _0806FAF4 @ =0x040000d4 - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - ldr r0, _0806FAF8 @ =0x81000200 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r2, 0xC0 - lsls r2, 19 - movs r3, 0xC0 - lsls r3, 9 - mov r4, sp - movs r6, 0 - movs r5, 0x80 - lsls r5, 5 - ldr r7, _0806FAFC @ =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_0806FACA: - strh r6, [r4] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r2, r5 - subs r3, r5 - cmp r3, r5 - bhi _0806FACA - strh r6, [r4] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - lsrs r0, r3, 1 - mov r2, r12 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - b _0806FB64 - .align 2, 0 -_0806FAF4: .4byte 0x040000d4 -_0806FAF8: .4byte 0x81000200 -_0806FAFC: .4byte 0x81000800 -_0806FB00: - bl ResetSpriteData - bl ResetTasks - bl ResetPaletteFade - bl ScanlineEffect_Clear - b _0806FB64 -_0806FB12: - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _0806FB34 @ =gUnknown_83A73B8 - movs r0, 0 - movs r2, 0x1 - bl InitBgsFromTemplates - ldr r0, _0806FB38 @ =gUnknown_83A73BC - bl InitWindows - movs r0, 0 - movs r1, 0x8 - movs r2, 0xF0 - bl TextWindow_SetStdFrame0_WithPal - b _0806FB64 - .align 2, 0 -_0806FB34: .4byte gUnknown_83A73B8 -_0806FB38: .4byte gUnknown_83A73BC -_0806FB3C: - movs r0, 0 - bl ShowBg - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - ldr r0, _0806FB5C @ =sub_806FA48 - bl SetVBlankCallback - movs r0, 0x1 - bl EnableInterrupts - b _0806FB64 - .align 2, 0 -_0806FB5C: .4byte sub_806FA48 -_0806FB60: - movs r0, 0x1 - b _0806FB6E -_0806FB64: - mov r1, r8 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 -_0806FB6E: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_806FA54 - - thumb_func_start sub_806FB7C -sub_806FB7C: @ 806FB7C - push {lr} - ldr r0, _0806FB9C @ =gMain + 0x438 - bl sub_806FA54 - cmp r0, 0 - beq _0806FB96 - ldr r0, _0806FBA0 @ =sub_806FBB8 - movs r1, 0x50 - bl CreateTask - ldr r0, _0806FBA4 @ =sub_806FBA8 - bl SetMainCallback2 -_0806FB96: - pop {r0} - bx r0 - .align 2, 0 -_0806FB9C: .4byte gMain + 0x438 -_0806FBA0: .4byte sub_806FBB8 -_0806FBA4: .4byte sub_806FBA8 - thumb_func_end sub_806FB7C - - thumb_func_start sub_806FBA8 -sub_806FBA8: @ 806FBA8 - push {lr} - bl RunTasks - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_806FBA8 - - thumb_func_start sub_806FBB8 -sub_806FBB8: @ 806FBB8 - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _0806FBEC @ =gTasks+0x8 - adds r5, r0, r1 - ldr r0, _0806FBF0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0806FBD8 - b _0806FCE8 -_0806FBD8: - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0x6 - bls _0806FBE2 - b _0806FCE8 -_0806FBE2: - lsls r0, 2 - ldr r1, _0806FBF4 @ =_0806FBF8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806FBEC: .4byte gTasks+0x8 -_0806FBF0: .4byte gPaletteFade -_0806FBF4: .4byte _0806FBF8 - .align 2, 0 -_0806FBF8: - .4byte _0806FC14 - .4byte _0806FC80 - .4byte _0806FC8C - .4byte _0806FC9C - .4byte _0806FCB0 - .4byte _0806FCC8 - .4byte _0806FCD8 -_0806FC14: - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r2, _0806FC74 @ =gUnknown_8419F54 - movs r4, 0 - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x2 - movs r3, 0xFF - bl AddTextPrinterParameterized2 - movs r0, 0 - movs r1, 0x8 - movs r2, 0xF - bl DrawTextBorderOuter - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r0, _0806FC78 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0806FC7C - bl InUnionRoom - cmp r0, 0 - beq _0806FC7C - movs r0, 0x5 - b _0806FCE6 - .align 2, 0 -_0806FC74: .4byte gUnknown_8419F54 -_0806FC78: .4byte gWirelessCommType -_0806FC7C: - movs r0, 0x1 - b _0806FCE6 -_0806FC80: - bl sub_804C1C0 - bl sub_80DA45C - movs r0, 0x2 - b _0806FCE6 -_0806FC8C: - bl sub_80DA4A0 - lsls r0, 24 - cmp r0, 0 - beq _0806FCE8 - bl sav2_gender2_inplace_and_xFE - b _0806FCE4 -_0806FC9C: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - movs r0, 0x4 - b _0806FCE6 -_0806FCB0: - bl FreeAllWindowBuffers - ldr r0, _0806FCC4 @ =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask - b _0806FCE8 - .align 2, 0 -_0806FCC4: .4byte gMain -_0806FCC8: - ldr r0, _0806FCD4 @ =sub_80DA634 - movs r1, 0x5 - bl CreateTask - movs r0, 0x6 - b _0806FCE6 - .align 2, 0 -_0806FCD4: .4byte sub_80DA634 -_0806FCD8: - ldr r0, _0806FCF0 @ =sub_80DA634 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _0806FCE8 -_0806FCE4: - movs r0, 0x3 -_0806FCE6: - strh r0, [r5] -_0806FCE8: - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0806FCF0: .4byte sub_80DA634 - thumb_func_end sub_806FBB8 - - thumb_func_start sub_806FCF4 -sub_806FCF4: @ 806FCF4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - ldr r5, _0806FE54 @ =gUnknown_2037104 - ldr r0, _0806FE58 @ =gUnknown_83A73CC - bl AddWindow - strb r0, [r5] - ldrb r0, [r5] - ldr r4, _0806FE5C @ =0x0000021d - adds r1, r4, 0 - movs r2, 0xD0 - bl TextWindow_SetStdFrame0_WithPal - ldrb r0, [r5] - movs r1, 0 - adds r2, r4, 0 - movs r3, 0xD - bl DrawStdFrameWithCustomTileAndPalette - ldr r4, _0806FE60 @ =gStringVar4 - movs r0, 0x3 - adds r1, r4, 0 - movs r2, 0x8 - bl sub_80F7FCC - movs r6, 0x1 - negs r6, r6 - movs r0, 0x2 - adds r1, r4, 0 - adds r2, r6, 0 - bl GetStringWidth - movs r2, 0x70 - subs r2, r0 - lsrs r2, 1 - lsls r2, 24 - lsrs r2, 24 - ldrb r0, [r5] - ldr r1, _0806FE64 @ =gUnknown_83A73DC - str r1, [sp] - str r6, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x2 - movs r3, 0 - bl AddTextPrinterParameterized3 - movs r0, 0x2 - adds r1, r4, 0 - adds r2, r6, 0 - bl GetStringWidth - ldrb r0, [r5] - ldr r1, _0806FE68 @ =gUnknown_83A73D4 - mov r9, r1 - str r1, [sp] - str r6, [sp, 0x4] - ldr r1, _0806FE6C @ =gUnknown_841617A - str r1, [sp, 0x8] - movs r1, 0 - movs r2, 0x2 - movs r3, 0xE - bl AddTextPrinterParameterized3 - movs r0, 0 - adds r1, r4, 0 - movs r2, 0x2 - bl sub_80F7FCC - ldrb r0, [r5] - adds r1, r4, 0 - movs r2, 0x3C - movs r3, 0xE - bl sub_812E6DC - ldrb r0, [r5] - mov r1, r9 - str r1, [sp] - str r6, [sp, 0x4] - ldr r1, _0806FE70 @ =gUnknown_8416181 - str r1, [sp, 0x8] - movs r1, 0 - movs r2, 0x2 - movs r3, 0x1C - bl AddTextPrinterParameterized3 - movs r0, 0x4 - adds r1, r4, 0 - movs r2, 0x2 - bl sub_80F7FCC - ldrb r0, [r5] - ldr r1, _0806FE74 @ =gUnknown_83A73D8 - mov r8, r1 - str r1, [sp] - str r6, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0 - movs r2, 0x3C - movs r3, 0x1C - bl AddTextPrinterParameterized3 - movs r7, 0x2A - ldr r0, _0806FE78 @ =0x00000829 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806FE0A - ldrb r0, [r5] - mov r1, r9 - str r1, [sp] - str r6, [sp, 0x4] - ldr r1, _0806FE7C @ =gUnknown_8416188 - str r1, [sp, 0x8] - movs r1, 0 - movs r2, 0x2 - movs r3, 0x2A - bl AddTextPrinterParameterized3 - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0x2 - bl sub_80F7FCC - ldrb r0, [r5] - mov r1, r8 - str r1, [sp] - str r6, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0 - movs r2, 0x3C - movs r3, 0x2A - bl AddTextPrinterParameterized3 - movs r7, 0x38 -_0806FE0A: - ldrb r0, [r5] - mov r1, r9 - str r1, [sp] - str r6, [sp, 0x4] - ldr r1, _0806FE80 @ =gUnknown_8416190 - str r1, [sp, 0x8] - movs r1, 0 - movs r2, 0x2 - adds r3, r7, 0 - bl AddTextPrinterParameterized3 - movs r0, 0x2 - adds r1, r4, 0 - movs r2, 0x2 - bl sub_80F7FCC - ldrb r0, [r5] - mov r1, r8 - str r1, [sp] - str r6, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0 - movs r2, 0x3C - adds r3, r7, 0 - bl AddTextPrinterParameterized3 - ldrb r0, [r5] - movs r1, 0x2 - bl CopyWindowToVram - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806FE54: .4byte gUnknown_2037104 -_0806FE58: .4byte gUnknown_83A73CC -_0806FE5C: .4byte 0x0000021d -_0806FE60: .4byte gStringVar4 -_0806FE64: .4byte gUnknown_83A73DC -_0806FE68: .4byte gUnknown_83A73D4 -_0806FE6C: .4byte gUnknown_841617A -_0806FE70: .4byte gUnknown_8416181 -_0806FE74: .4byte gUnknown_83A73D8 -_0806FE78: .4byte 0x00000829 -_0806FE7C: .4byte gUnknown_8416188 -_0806FE80: .4byte gUnknown_8416190 - thumb_func_end sub_806FCF4 - - thumb_func_start sub_806FE84 -sub_806FE84: @ 806FE84 - push {r4,lr} - ldr r4, _0806FE9C @ =gUnknown_2037104 - ldrb r0, [r4] - movs r1, 0 - bl ClearStdWindowAndFrame - ldrb r0, [r4] - bl RemoveWindow - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0806FE9C: .4byte gUnknown_2037104 - thumb_func_end sub_806FE84 - - thumb_func_start sub_806FEA0 -sub_806FEA0: @ 806FEA0 - push {lr} - movs r0, 0x5 - bl PlaySE - bl GetStartMenuWindowId - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl ClearStdWindowAndFrame - bl RemoveStartMenuWindow - bl sub_80696C0 - bl ScriptContext2_Disable - pop {r0} - bx r0 - thumb_func_end sub_806FEA0 - - thumb_func_start AppendToList -AppendToList: @ 806FEC8 - ldrb r3, [r1] - adds r0, r3 - strb r2, [r0] - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bx lr - thumb_func_end AppendToList - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/trade.s b/asm/trade.s index bd98dd698..3573dcfaf 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -14443,7 +14443,7 @@ _080540DC: movs r0, 0x32 strb r0, [r1] ldr r4, _080540FC @ =gStringVar4 - ldr r1, _08054100 @ =gUnknown_8419F54 + ldr r1, _08054100 @ =gText_SavingDontTurnOffThePower2 _080540EA: adds r0, r4, 0 bl StringExpandPlaceholders @@ -14454,7 +14454,7 @@ _080540EA: b _08054396 .align 2, 0 _080540FC: .4byte gStringVar4 -_08054100: .4byte gUnknown_8419F54 +_08054100: .4byte gText_SavingDontTurnOffThePower2 _08054104: bl InUnionRoom cmp r0, 0 diff --git a/asm/trainer_card.s b/asm/trainer_card.s index 9a28cbc5e..1ebda42ab 100644 --- a/asm/trainer_card.s +++ b/asm/trainer_card.s @@ -785,7 +785,7 @@ _0808967C: .align 2, 0 _0808968C: .4byte gMain _08089690: - bl sub_80F6E9C + bl LoadStdWindowFrameGfx ldr r1, _080896A0 @ =gMain movs r0, 0x87 lsls r0, 3 @@ -4723,8 +4723,8 @@ sub_808B66C: @ 808B66C _0808B694: .4byte sub_808B21C thumb_func_end sub_808B66C - thumb_func_start sub_808B698 -sub_808B698: @ 808B698 + thumb_func_start InitTrainerCard +InitTrainerCard: @ 808B698 push {r4,r5,lr} adds r4, r0, 0 ldr r5, _0808B6C0 @ =gUnknown_20397A4 @@ -4770,10 +4770,10 @@ _0808B6F0: .4byte gUnknown_20397A4 _0808B6F4: .4byte 0x00007bcf _0808B6F8: .4byte 0x0000045c _0808B6FC: .4byte sub_80895B8 - thumb_func_end sub_808B698 + thumb_func_end InitTrainerCard - thumb_func_start sub_808B700 -sub_808B700: @ 808B700 + thumb_func_start InitLinkPartnerTrainerCard +InitLinkPartnerTrainerCard: @ 808B700 push {r4-r6,lr} adds r4, r0, 0 adds r6, r1, 0 @@ -4822,7 +4822,7 @@ _0808B764: .4byte gTrainerCards _0808B768: .4byte gLinkPlayers _0808B76C: .4byte 0x00007bcf _0808B770: .4byte sub_80895B8 - thumb_func_end sub_808B700 + thumb_func_end InitLinkPartnerTrainerCard thumb_func_start sub_808B774 sub_808B774: @ 808B774 @@ -5057,7 +5057,7 @@ _0808B948: .4byte 0x00000457 thumb_func_start sub_808B94C sub_808B94C: @ 808B94C push {lr} - bl sub_808B698 + bl InitTrainerCard ldr r0, _0808B95C @ =sub_80895B8 bl SetMainCallback2 pop {r0} @@ -5076,7 +5076,7 @@ sub_808B960: @ 808B960 bl memcpy movs r0, 0 adds r1, r4, 0 - bl sub_808B700 + bl InitLinkPartnerTrainerCard ldr r0, _0808B98C @ =sub_80895B8 bl SetMainCallback2 pop {r4} @@ -5098,7 +5098,7 @@ sub_808B990: @ 808B990 bl memcpy movs r0, 0 adds r1, r4, 0 - bl sub_808B700 + bl InitLinkPartnerTrainerCard ldr r0, _0808B9BC @ =sub_80895B8 bl SetMainCallback2 pop {r4} diff --git a/common_syms/help_system_812B1E0.txt b/common_syms/help_system_812B1E0.txt index 7986bedb5..5e56cc230 100644 --- a/common_syms/help_system_812B1E0.txt +++ b/common_syms/help_system_812B1E0.txt @@ -1,2 +1,2 @@ gUnknown_3005E9C -gUnknown_3005EA0 +gSomeVariableBackup diff --git a/common_syms/save.txt b/common_syms/save.txt index 9b77840e0..a0106f6fa 100644 --- a/common_syms/save.txt +++ b/common_syms/save.txt @@ -9,4 +9,4 @@ gSaveUnusedVar gSaveFileStatus gGameContinueCallback gRamSaveSectionLocations -gUnknown_3005420 +gSaveSucceeded diff --git a/data/map_event_scripts.inc b/data/map_event_scripts.inc index abfd0d550..62a34d33c 100644 --- a/data/map_event_scripts.inc +++ b/data/map_event_scripts.inc @@ -774,7 +774,7 @@ EventScript_1A4EAE:: @ 81A4EAE return EventScript_1A4EAF:: @ 81A4EAF - special sub_806F67C + special Field_AskSaveTheGame waitstate return @@ -4447,21 +4447,33 @@ SevenIsland_TrainerTower_1F_EventScript_1C54EA:: @ 81C54EA gUnknown_81C555B:: @ 81C555B .incbin "baserom.gba", 0x1C555B, 0x6E -gUnknown_81C55C9:: @ 81C55C9 - .incbin "baserom.gba", 0x1C55C9, 0x21 +gText_WouldYouLikeToSaveTheGame:: @ 81C55C9 + .string "Would you like to save the game?$" -gUnknown_81C55EA:: @ 81C55EA - .incbin "baserom.gba", 0x1C55EA, 0x3B +gText_AlreadySaveFile_WouldLikeToOverwrite:: @ 81C55EA + .string "There is already a saved file.\n" + .string "Is it okay to overwrite it?$" -gUnknown_81C5625:: @ 81C5625 - .incbin "baserom.gba", 0x1C5625, 0x22 +gText_SavingDontTurnOffThePower:: @ 81C5625 + .string "SAVING…\n" + .string "DON'T TURN OFF THE POWER.$" -gUnknown_81C5647:: @ 81C5647 - .incbin "baserom.gba", 0x1C5647, 0x23 +gText_PlayerSavedTheGame:: @ 81C5647 + .string "{PLAYER} saved the game.$" + +gUnknown_81C565A:: + .string "セーブに しっぱい しました‥$" @ 0xE5 -gUnknown_81C566A:: @ 81C566A - .incbin "baserom.gba", 0x1C566A, 0xE5 +gText_DifferentGameFile:: @ 81C566A + .string "WARNING!\p" + .string "There is a different game file that\n" + .string "is already saved.\p" + .string "If you save now, the other file's\n" + .string "adventure, including items and\l" + .string "POKéMON, will be entirely lost.\p" + .string "Are you sure you want to save now\n" + .string "and overwrite the other save file?$" gOtherText_NewName:: @ 81C574F .string "NEW NAME$" diff --git a/data/maps/PalletTown_PlayersHouse_2F/scripts.inc b/data/maps/PalletTown_PlayersHouse_2F/scripts.inc index 77ff855e4..51865301c 100644 --- a/data/maps/PalletTown_PlayersHouse_2F/scripts.inc +++ b/data/maps/PalletTown_PlayersHouse_2F/scripts.inc @@ -36,7 +36,7 @@ PalletTown_PlayersHouse_2F_EventScript_168CE4:: @ 8168CE4 goto_if_eq EventScript_1A7AE0 lockall setvar VAR_0x8004, 32 - special sub_812B220 + special Special_SetSomeVariable setvar VAR_0x8004, 1 special sub_80CA86C playse SE_PC_ON diff --git a/data/specials.inc b/data/specials.inc index 6111e4836..d8d208d43 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -102,7 +102,7 @@ gSpecials:: @ 815FD60 def_special nullsub_75 def_special nullsub_75 def_special sub_8081128 - def_special sub_806F67C + def_special Field_AskSaveTheGame def_special nullsub_56 def_special sub_80FEE44 def_special sub_80BDA7C @@ -390,9 +390,9 @@ gSpecials:: @ 815FD60 def_special TakePokemonFromRoute5Daycare def_special ScrSpecial_SeaGallopFerry def_special sub_80CC48C - def_special sub_812B220 - def_special sub_812B234 - def_special sub_812B248 + def_special Special_SetSomeVariable + def_special HelpSystem_BackupSomeVariable + def_special HelpSystem_RestoreSomeVariable def_special ValidateReceivedWonderCard def_special sub_810B810 def_special sub_811999C diff --git a/data/start_menu.s b/data/start_menu.s deleted file mode 100644 index e004a6628..000000000 --- a/data/start_menu.s +++ /dev/null @@ -1,28 +0,0 @@ - .section .rodata - .align 2 -gUnknown_83A7344:: @ 83A7344 - .incbin "baserom.gba", 0x3A7344, 0x48 - -gUnknown_83A738C:: @ 83A738C - .incbin "baserom.gba", 0x3A738C, 0x8 - -gUnknown_83A7394:: @ 83A7394 - .incbin "baserom.gba", 0x3A7394, 0x24 - -gUnknown_83A73B8:: @ 83A73B8 - .incbin "baserom.gba", 0x3A73B8, 0x4 - -gUnknown_83A73BC:: @ 83A73BC - .incbin "baserom.gba", 0x3A73BC, 0x10 - -gUnknown_83A73CC:: @ 83A73CC - .incbin "baserom.gba", 0x3A73CC, 0x8 - -gUnknown_83A73D4:: @ 83A73D4 - .incbin "baserom.gba", 0x3A73D4, 0x4 - -gUnknown_83A73D8:: @ 83A73D8 - .incbin "baserom.gba", 0x3A73D8, 0x4 - -gUnknown_83A73DC:: @ 83A73DC - .incbin "baserom.gba", 0x3A73DC, 0x284 diff --git a/data/strings.s b/data/strings.s index 4f0fefb19..6efa519e6 100644 --- a/data/strings.s +++ b/data/strings.s @@ -45,7 +45,7 @@ gExpandedPlaceholder_Green:: @ 8415A5C gText_EggNickname:: @ 8415A62 .string "EGG$" -gText_Pokemon:: @ 8415A66 +gStartMenuText_Pokemon:: @ 8415A66 .string "POKéMON$" gText_NewGame:: @ 8415A6E @@ -351,19 +351,19 @@ gUnknown_8416133:: @ 0x8416133 gUnknown_8416146:: @ 0x8416146 .string "ポケモン$" -gUnknown_841614B:: @ 841614B +gText_SaveError_PleaseExchangeBackupMemory:: @ 841614B .string "Save error.\pPlease exchange the\nbackup memory.$" -gUnknown_841617A:: @ 841617A +gSaveStatName_Player:: @ 841617A .string "PLAYER$" -gUnknown_8416181:: @ 8416181 +gSaveStatName_Badges:: @ 8416181 .string "BADGES$" -gUnknown_8416188:: @ 8416188 +gSaveStatName_Pokedex:: @ 8416188 .string "POKéDEX$" -gUnknown_8416190:: @ 8416190 +gSaveStatName_Time:: @ 8416190 .string "TIME$" gUnknown_8416195:: @@ -482,28 +482,28 @@ gText_GoBackToThePreviousMenu:: gText_WhatWouldYouLikeToDo:: @ 8416262 .string "What would you like to do?$" -gUnknown_841627D:: +gStartMenuText_Pokedex:: .string "POKéDEX$" -gUnknown_8416285:: @ 8416285 +gStartMenuText_Bag:: @ 8416285 .string "BAG$" gUnknown_8416289:: .string "ポケナビ$" -gUnknown_841628E:: +gStartMenuText_Player:: .string "{PLAYER}$" -gUnknown_8416291:: +gStartMenuText_Save:: .string "SAVE$" -gUnknown_8416296:: +gStartMenuText_Option:: .string "OPTION$" -gUnknown_841629D:: +gStartMenuText_Exit:: .string "EXIT$" -gUnknown_84162A2:: +gStartMenuText_Retire:: .string "RETIRE$" gUnknown_84162A9:: @ 84162A9 @@ -2820,38 +2820,38 @@ gUnknown_8419F10:: @ 0x8419F10 gUnknown_8419F2D:: @ 0x8419F2D .string "ゲ-ムない じかんの しゅうせい システムが\nつかえる ように なりました!$" -gUnknown_8419F54:: @ 8419F54 +gText_SavingDontTurnOffThePower2:: @ 8419F54 .string "SAVING…\n" .string "DON'T TURN OFF THE POWER.$" // Start menu option descriptions -gUnknown_8419F76:: @ 8419F76 // Pokedex +gStartMenuDesc_Pokedex:: @ 8419F76 // Pokedex .string "A device that records POKéMON secrets\n" .string "upon meeting or catching them.$" -gUnknown_8419FBB:: @ 8419FBB // Pokemon +gStartMenuDesc_Pokemon:: @ 8419FBB // Pokemon .string "Check and organize POKéMON that are\n" .string "traveling with you in your party.$" -gUnknown_841A001:: @ 841A001 // Bag +gStartMenuDesc_Bag:: @ 841A001 // Bag .string "Equipped with pockets for storing items\n" .string "you bought, received, or found.$" -gUnknown_841A049:: @ 841A049 // {PLAYER} +gStartMenuDesc_Player:: @ 841A049 // {PLAYER} .string "Check your money and other game data.$" -gUnknown_841A06F:: @ 841A06F // Save +gStartMenuDesc_Save:: @ 841A06F // Save .string "Save your game with a complete record\n" .string "of your progress to take a break.$" -gUnknown_841A0B7:: @ 841A0B7 // Options +gStartMenuDesc_Option:: @ 841A0B7 // Options .string "Adjust various game settings such as text\n" .string "speed, game rules, etc.$" -gUnknown_841A0F9:: @ 841A0F9 // Quit +gStartMenuDesc_Exit:: @ 841A0F9 // Quit .string "Close this MENU window.$" -gUnknown_841A111:: @ 841A111 // Retire +gStartMenuDesc_Retire:: @ 841A111 // Retire .string "Retire from the SAFARI GAME and return to\n" .string "the registration counter.$" diff --git a/data/tileset_anims.s b/data/tileset_anims.s index 9881cdd3f..5f2320fd3 100644 --- a/data/tileset_anims.s +++ b/data/tileset_anims.s @@ -1,5 +1,8 @@ .section .rodata .align 2 +gUnknown_83A73E0:: @ 83A73E0 + .incbin "baserom.gba", 0x3A73E0, 0x280 + gUnknown_83A7660:: @ 83A7660 .incbin "baserom.gba", 0x3A7660, 0x2FF4 diff --git a/include/event_scripts.h b/include/event_scripts.h index ce9d0bbf5..99b453c85 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1161,4 +1161,11 @@ extern const u8 EventScript_ResetAllMapFlags[]; // player_pc extern const u8 EventScript_PalletTown_PlayersHouse_2F_ShutDownPC[]; +// start_menu +extern const u8 gText_WouldYouLikeToSaveTheGame[]; +extern const u8 gText_AlreadySaveFile_WouldLikeToOverwrite[]; +extern const u8 gText_SavingDontTurnOffThePower[]; +extern const u8 gText_PlayerSavedTheGame[]; +extern const u8 gText_DifferentGameFile[]; + #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index fe67fec30..22849a37d 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -15,6 +15,7 @@ void sub_807DF64(void); void sub_807DC18(void); void FieldCallback_ReturnToEventScript2(void); void sub_807DC00(void); +void FadeTransition_FadeInOnReturnToStartMenu(void); bool32 sub_807E418(void); diff --git a/include/fieldmap.h b/include/fieldmap.h index 7bedb1d94..dde05b7ed 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -26,4 +26,6 @@ u32 GetBehaviorByMetatileIdAndMapData(struct MapData *mapData, u16 metatile, u8 const struct MapHeader * mapconnection_get_mapheader(struct MapConnection * connection); struct MapConnection * GetMapConnectionAtPos(s16 x, s16 y); +void save_serialize_map(void); + #endif //GUARD_FIELDMAP_H diff --git a/include/gba/macro.h b/include/gba/macro.h index c0a4e481b..01bb85b7a 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -121,10 +121,31 @@ } \ } +#define DmaFillLarge(dmaNum, value, dest, size, block, bit) \ +{ \ + void *_dest = (void *)dest; \ + u32 _size = size; \ + while (1) \ + { \ + DmaFill##bit(dmaNum, value, _dest, (block)); \ + _dest += (block); \ + _size -= (block); \ + if (_size <= (block)) \ + { \ + DmaFill##bit(dmaNum, value, _dest, _size); \ + break; \ + } \ + } \ +} + #define DmaCopyLarge16(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 16) #define DmaCopyLarge32(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 32) +#define DmaFillLarge16(dmaNum, value, dest, size, block) DmaFillLarge(dmaNum, value, dest, size, block, 16) + +#define DmaFillLarge32(dmaNum, value, dest, size, block) DmaFillLarge(dmaNum, value, dest, size, block, 32) + #define DmaClearLarge16(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 16) #define DmaClearLarge32(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 32) @@ -139,4 +160,14 @@ #define DmaCopy16Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 16) #define DmaCopy32Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 32) +#define DmaFillDefvars(dmaNum, value, dest, size, bit) \ +{ \ + void *_dest = (void *)dest; \ + u32 _size = size; \ + DmaFill##bit(dmaNum, value, _dest, _size); \ +} + +#define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16) +#define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32) + #endif // GUARD_GBA_MACRO_H diff --git a/include/help_system.h b/include/help_system.h index ff77d01d6..53dc45014 100644 --- a/include/help_system.h +++ b/include/help_system.h @@ -29,7 +29,7 @@ extern bool8 gHelpSystemEnabled; extern u8 gUnknown_203F175; // help_system_812B1E0 -void sub_812B1E0(u8); +void HelpSystem_SetSomeVariable(u8); void HelpSystem_SetSomeVariable2(u8); bool8 sub_812B40C(void); bool8 sub_812B45C(void); @@ -89,7 +89,7 @@ void HelpSystem_FillPanel3(void); void PrintListMenuItems(void); void PlaceListMenuCursor(void); bool8 MoveCursor(u8 by, u8 dirn); -void sub_812B234(void); -void sub_812B248(void); +void HelpSystem_BackupSomeVariable(void); +void HelpSystem_RestoreSomeVariable(void); #endif //GUARD_HELP_SYSTEM_H diff --git a/include/item_menu.h b/include/item_menu.h index 83b8d6d15..166906ebe 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -28,7 +28,7 @@ void sub_81AAC70(void); void sub_8108CF0(void); void sub_81089BC(void); void sub_810B108(u8); -void ReturnToBagFromKeyItem(void); +void CB2_BagMenuFromStartMenu(void); void ItemMenu_MoveItemSlotToNewPositionInArray(struct ItemSlot * slots, int pos1, int pos2); void ItemMenu_StartFadeToExitCallback(u8 taskId); void sub_8108CB4(void); diff --git a/include/link_rfu.h b/include/link_rfu.h index 2757e5296..2be9dd3c9 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -39,5 +39,6 @@ bool32 sub_80FAEF0(void); bool32 IsRfuRecvQueueEmpty(void); u32 GetRfuRecvQueueLength(void); void sub_80F8DC0(void); +void var_800D_set_xB(void); #endif //GUARD_LINK_RFU_H diff --git a/include/load_save.h b/include/load_save.h index bd33f89c8..2406b5f03 100644 --- a/include/load_save.h +++ b/include/load_save.h @@ -26,5 +26,7 @@ void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey); void ApplyNewEncryptionKeyToBagItems(u32 encryptionKey); void ApplyNewEncryptionKeyToWord(u32 * word, u32 encryptionKey); void ApplyNewEncryptionKeyToHword(u16 * hword, u32 encryptionKey); +void sav2_gender2_inplace_and_xFE(void); +void sub_804C1C0(void); #endif // GUARD_LOAD_SAVE_H diff --git a/include/menu.h b/include/menu.h index 6f358d34e..b6d757f85 100644 --- a/include/menu.h +++ b/include/menu.h @@ -21,7 +21,7 @@ struct MenuAction void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 x, u8 y, const u8 * color, s8 speed, const u8 * str); void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const u8 *color, s8 speed, const u8 *str); void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16), u8 letterSpacing, u8 lineSpacing); -void sub_812E6DC(u8 windowId, const u8 * src, u16 x, u16 y); +void Menu_PrintFormatIntlPlayerName(u8 windowId, const u8 * src, u16 x, u16 y); void StartBlendTask(u8 eva_start, u8 evb_start, u8 eva_end, u8 evb_end, u8 ev_step, u8 priority); bool8 IsBlendTaskActive(void); u8 sub_812EA78(u16 species, u32 personality, u8 a2); diff --git a/include/new_game.h b/include/new_game.h index ed40546ba..bf048718a 100644 --- a/include/new_game.h +++ b/include/new_game.h @@ -3,6 +3,8 @@ #include "global.h" +extern bool8 gDifferentSaveFile; + void SetTrainerId(u32 trainerId, u8 *dst); void CopyTrainerId(u8 *dst, u8 *src); void NewGameInitData(void); diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h index a7555c505..644e65289 100644 --- a/include/new_menu_helpers.h +++ b/include/new_menu_helpers.h @@ -26,7 +26,7 @@ u16 AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 speed void AddTextPrinterDiffStyle(bool8 allowSkippingDelayWithButtonPress); void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress); void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonPress, u8 speed); -void sub_80F6E9C(void); +void LoadStdWindowFrameGfx(void); void DrawDialogueFrame(u8 windowId, bool8 transfer); void DrawStdWindowFrame(u8 windowId, bool8 copyNow); void ClearDialogWindowAndFrame(u8 windowId, bool8 copyToVram); @@ -41,12 +41,12 @@ void DisplayItemMessageOnField(u8 taskId, u8 bgId, const u8 *src, TaskFunc callb void DisplayYesNoMenuDefaultYes(void); void DisplayYesNoMenuDefaultNo(void); u8 GetTextSpeedSetting(void); -u8 sub_80F78E0(u8 height); +u8 CreateStartMenuWindow(u8 height); u8 GetStartMenuWindowId(void); void RemoveStartMenuWindow(void); u16 GetStdWindowBaseTileNum(void); -void sub_80F7974(const u8 * text); -void sub_80F7998(void); +void DrawHelpMessageWindowWithText(const u8 * text); +void DestroyHelpMessageWindow_(void); void sub_80F79A4(void); void SetDefaultFontsPointer(void); diff --git a/include/option_menu.h b/include/option_menu.h new file mode 100644 index 000000000..21a508973 --- /dev/null +++ b/include/option_menu.h @@ -0,0 +1,6 @@ +#ifndef GUARD_OPTION_MENU_H +#define GUARD_OPTION_MENU_H + +void CB2_OptionsMenuFromStartMenu(void); + +#endif //GUARD_OPTION_MENU_H diff --git a/include/overworld.h b/include/overworld.h index d221e88d1..38c213707 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -38,6 +38,7 @@ extern MainCallback gFieldCallback; extern struct WarpData gUnknown_2031DBC; extern u8 gUnknown_2031DE0; +extern u8 gUnknown_300502C; void IncrementGameStat(u8 index); @@ -138,4 +139,6 @@ bool32 Overworld_DoScrollSceneForCredits(u8 *, const struct CreditsOverworldCmd bool32 sub_8058318(void); +void CB2_ReturnToStartMenu(void); + #endif //GUARD_OVERWORLD_H diff --git a/include/party_menu.h b/include/party_menu.h index 16dccb6d8..5b9b6e1c4 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -83,5 +83,6 @@ void sub_8127EC4(u8 battlerId, u8 unk, u8 arrayIndex); bool8 IsMultiBattle(void); void sub_8126EDC(void); void PartyMenuInit_FromPlayerPc(void); +void CB2_PartyMenuFromStartMenu(void); #endif // GUARD_PARTY_MENU_H diff --git a/include/pokedex_screen.h b/include/pokedex_screen.h new file mode 100644 index 000000000..8855a47fc --- /dev/null +++ b/include/pokedex_screen.h @@ -0,0 +1,6 @@ +#ifndef GUARD_POKEDEX_SCREEN_H +#define GUARD_POKEDEX_SCREEN_H + +void CB2_OpenPokedexFromStartMenu(void); + +#endif //GUARD_POKEDEX_SCREEN_H diff --git a/include/quest_log.h b/include/quest_log.h index 8a2816c74..d12675f18 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -28,14 +28,15 @@ u8 sub_8112CAC(void); bool8 sub_81119D4(void (*func)(void)); void sub_8111F38(u16, u16); void sub_8111134(void); -void sub_8112EDC(u8 a0); -u8 sub_8112EB4(void); -void sub_8113018(const u8 * text, u8 mode); +void DestroyHelpMessageWindow(u8 a0); +u8 CreateHelpMessageWindow(void); +void PrintTextOnHelpMessageWindow(const u8 * text, u8 mode); void MapNamePopupWindowIdSetDummy(void); void sub_8111CF0(void); void sub_811089C(void); void sub_8113044(void); void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId); +void sub_8112450(void); extern u8 gUnknown_203ADFA; diff --git a/include/save.h b/include/save.h index 7a74373c8..41d2ec666 100644 --- a/include/save.h +++ b/include/save.h @@ -84,7 +84,7 @@ extern u16 gSaveUnusedVar; extern u16 gSaveFileStatus; extern void (*gGameContinueCallback)(void); extern struct SaveBlockChunk gRamSaveSectionLocations[0xE]; -extern u16 gUnknown_3005420; +extern u16 gSaveSucceeded; extern struct SaveSection gSaveDataBuffer; diff --git a/include/save_menu_util.h b/include/save_menu_util.h new file mode 100644 index 000000000..f2a18a777 --- /dev/null +++ b/include/save_menu_util.h @@ -0,0 +1,15 @@ +#ifndef GUARD_SAVE_MENU_UTIL_H +#define GUARD_SAVE_MENU_UTIL_H + +enum SaveStat +{ + SAVE_STAT_NAME = 0, + SAVE_STAT_POKEDEX, + SAVE_STAT_TIME, + SAVE_STAT_LOCATION, + SAVE_STAT_BADGES +}; + +void SaveStatToString(u8 a0, u8 *a1, u8 a2); + +#endif //GUARD_SAVE_MENU_UTIL_H diff --git a/include/start_menu.h b/include/start_menu.h index c4a3ce19d..7d39734a4 100644 --- a/include/start_menu.h +++ b/include/start_menu.h @@ -4,7 +4,7 @@ #include "global.h" void AppendToList(u8* list, u8* pos, u8 newEntry); -void sub_806F1F0(u8 taskId); -void sub_806F1D4(void); +void Task_StartMenuHandleInput(u8 taskId); +void SetUpReturnToStartMenu(void); #endif // GUARD_START_MENU_H diff --git a/include/strings.h b/include/strings.h index d6608812f..2c2756eb5 100644 --- a/include/strings.h +++ b/include/strings.h @@ -77,8 +77,8 @@ extern const u8 gText_Ferry[]; extern const u8 gText_SecretBase[]; extern const u8 gText_Hideout[]; extern const u8 gText_FlyToWhere[]; -extern const u8 gText_PokemonLeague[]; -extern const u8 gText_PokemonCenter[]; +extern const u8 gStartMenuText_PokemonLeague[]; +extern const u8 gStartMenuText_PokemonCenter[]; extern const u8 gText_ApostropheSBase[]; extern const u8 gText_NoRegistry[]; extern const u8 gText_OkayToDeleteFromRegistry[]; @@ -90,7 +90,7 @@ extern const u8 gText_IsThisTheCorrectTime[]; extern const u8 gText_PkmnFainted3[]; extern const u8 gText_Coins[]; extern const u8 gText_EggNickname[]; -extern const u8 gText_Pokemon[]; +extern const u8 gStartMenuText_Pokemon[]; extern const u8 gText_PkmnFainted3[]; extern const u8 gOtherText_Use[]; @@ -446,4 +446,30 @@ extern const u8 gText_MessageWillBeLost[]; extern const u8 gText_BagIsFull[]; extern const u8 gText_MailReturnedToBagMessageErased[]; +// start_menu +extern const u8 gStartMenuText_Pokedex[]; +extern const u8 gStartMenuText_Pokemon[]; +extern const u8 gStartMenuText_Bag[]; +extern const u8 gStartMenuText_Player[]; +extern const u8 gStartMenuText_Save[]; +extern const u8 gStartMenuText_Option[]; +extern const u8 gStartMenuText_Exit[]; +extern const u8 gStartMenuText_Retire[]; +extern const u8 gUnknown_84162A9[]; +extern const u8 gStartMenuDesc_Pokedex[]; +extern const u8 gStartMenuDesc_Pokemon[]; +extern const u8 gStartMenuDesc_Bag[]; +extern const u8 gStartMenuDesc_Player[]; +extern const u8 gStartMenuDesc_Save[]; +extern const u8 gStartMenuDesc_Option[]; +extern const u8 gStartMenuDesc_Exit[]; +extern const u8 gStartMenuDesc_Retire[]; +extern const u8 gStartMenuDesc_Player[]; +extern const u8 gText_SaveError_PleaseExchangeBackupMemory[]; +extern const u8 gText_SavingDontTurnOffThePower2[]; +extern const u8 gSaveStatName_Player[]; +extern const u8 gSaveStatName_Badges[]; +extern const u8 gSaveStatName_Pokedex[]; +extern const u8 gSaveStatName_Time[]; + #endif //GUARD_STRINGS_H diff --git a/include/trainer_card.h b/include/trainer_card.h index e8531cef5..b38754988 100644 --- a/include/trainer_card.h +++ b/include/trainer_card.h @@ -40,4 +40,7 @@ struct TrainerCard extern struct TrainerCard gTrainerCards[4]; +void InitTrainerCard(MainCallback callback); +void InitLinkPartnerTrainerCard(u8 whoseCard, MainCallback callback); + #endif //GUARD_TRAINER_CARD_H diff --git a/ld_script.txt b/ld_script.txt index 2369e255f..9a8731e17 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -106,7 +106,7 @@ SECTIONS { asm/event_data.o(.text); src/coord_event_weather.o(.text); asm/field_tasks.o(.text); - asm/start_menu.o(.text); + src/start_menu.o(.text); src/tileset_anims.o(.text); src/palette.o(.text); src/sound.o(.text); @@ -408,7 +408,7 @@ SECTIONS { src/scrcmd.o(.rodata); src/coord_event_weather.o(.rodata); data/field_tasks.o(.rodata); - data/start_menu.o(.rodata); + src/start_menu.o(.rodata); data/tileset_anims.o(.rodata); src/palette.o(.rodata); src/sound.o(.rodata); diff --git a/src/fame_checker.c b/src/fame_checker.c index 0278fda18..e803a9700 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -552,7 +552,7 @@ static void Task_TopMenuHandleInput(u8 taskId) if (FindTaskIdByFunc(Task_FCOpenOrCloseInfoBox) == 0xFF) { RunTextPrinters(); - if ((JOY_NEW(SELECT_BUTTON)) && !sFameCheckerData->inPickMode && sFameCheckerData->savedCallback != ReturnToBagFromKeyItem) + if ((JOY_NEW(SELECT_BUTTON)) && !sFameCheckerData->inPickMode && sFameCheckerData->savedCallback != CB2_BagMenuFromStartMenu) task->func = Task_StartToCloseFameChecker; else if (JOY_NEW(START_BUTTON)) { @@ -802,7 +802,7 @@ static void WipeMsgBoxAndTransfer(void) static void Setup_DrawMsgAndListBoxes(void) { - sub_80F6E9C(); + LoadStdWindowFrameGfx(); DrawDialogueFrame(FCWINDOWID_MSGBOX, TRUE); FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_MSGBOX); FC_PutWindowTilemapAndCopyWindowToVramMode3(FCWINDOWID_LIST); diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 6447ae1b2..6a539b60e 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -475,25 +475,25 @@ static void sub_807E31C(u8 taskId) } } -static void sub_807E378(u8 taskId) +static void Task_WaitFadeAndCreateStartMenuTask(u8 taskId) { if (sub_807E418() == TRUE) { DestroyTask(taskId); - CreateTask(sub_806F1F0, 80); + CreateTask(Task_StartMenuHandleInput, 80); } } -void sub_807E3A0(void) +void FadeTransition_FadeInOnReturnToStartMenu(void) { sub_807DC00(); - CreateTask(sub_807E378, 80); + CreateTask(Task_WaitFadeAndCreateStartMenuTask, 80); ScriptContext2_Enable(); } -bool32 sub_807E3BC(void) +bool8 FieldCB2_ReturnToStartMenuInit(void) { - sub_806F1D4(); + SetUpReturnToStartMenu(); return FALSE; } diff --git a/src/help_system_812B1E0.c b/src/help_system_812B1E0.c index a527525f8..afb792072 100644 --- a/src/help_system_812B1E0.c +++ b/src/help_system_812B1E0.c @@ -16,13 +16,13 @@ #include "constants/maps.h" #include "constants/songs.h" -static EWRAM_DATA u16 gUnknown_203B0EC = 0; +static EWRAM_DATA u16 sSomeVariable = 0; static EWRAM_DATA u8 gUnknown_203B0EE = 0; u8 gUnknown_3005E9C[4]; -u16 gUnknown_3005EA0; +u16 gSomeVariableBackup; -static bool32 sub_812B27C(const u16 * mapIdxs); +static bool32 IsCurrentMapInArray(const u16 * mapIdxs); static void sub_812B520(struct HelpSystemListMenu * a0, struct ListMenuItem * a1); static void sub_812B614(struct HelpSystemListMenu * a0, struct ListMenuItem * a1); static bool8 sub_812B754(void); @@ -824,7 +824,7 @@ static const u8 gUnknown_845C4B6[][6] = { {0, 0, 0, 0, 0, 0} }; -static const u16 gUnknown_845C594[] = { +static const u16 sMartMaps[] = { MAP_VIRIDIAN_CITY_MART, MAP_PEWTER_CITY_MART, MAP_CERULEAN_CITY_MART, @@ -847,7 +847,7 @@ static const u16 gUnknown_845C594[] = { MAP_UNDEFINED }; -static const u16 gUnknown_845C5BC[] = { +static const u16 sGymMaps[] = { MAP_PEWTER_CITY_GYM, MAP_CERULEAN_CITY_GYM, MAP_VERMILION_CITY_GYM, @@ -859,7 +859,7 @@ static const u16 gUnknown_845C5BC[] = { MAP_UNDEFINED }; -static const u8 gUnknown_845C5CE[][3] = { +static const u8 sDungeonMaps[][3] = { { MAP_GROUP(VIRIDIAN_FOREST), MAP_NUM(VIRIDIAN_FOREST), 1 }, { MAP_GROUP(MT_MOON_1F), MAP_NUM(MT_MOON_1F), 3 }, { MAP_GROUP(ROCK_TUNNEL_1F), MAP_NUM(ROCK_TUNNEL_1F), 2 }, @@ -878,14 +878,14 @@ static const u8 gUnknown_845C5CE[][3] = { { MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER), 7 } }; -void sub_812B1E0(u8 a0) +void HelpSystem_SetSomeVariable(u8 a0) { - gUnknown_203B0EC = a0; + sSomeVariable = a0; } void HelpSystem_SetSomeVariable2(u8 a0) { - switch (gUnknown_203B0EC) + switch (sSomeVariable) { case 23: case 24: @@ -895,37 +895,37 @@ void HelpSystem_SetSomeVariable2(u8 a0) break; // fallthrough default: - gUnknown_203B0EC = a0; + sSomeVariable = a0; break; } } -void sub_812B220(void) +void Special_SetSomeVariable(void) { - gUnknown_203B0EC = gSpecialVar_0x8004; + sSomeVariable = gSpecialVar_0x8004; } -void sub_812B234(void) +void HelpSystem_BackupSomeVariable(void) { - gUnknown_3005EA0 = gUnknown_203B0EC; + gSomeVariableBackup = sSomeVariable; } -void sub_812B248(void) +void HelpSystem_RestoreSomeVariable(void) { - gUnknown_203B0EC = gUnknown_3005EA0; + sSomeVariable = gSomeVariableBackup; } -static bool32 sub_812B25C(void) +static bool32 IsInMartMap(void) { - return sub_812B27C(gUnknown_845C594); + return IsCurrentMapInArray(sMartMaps); } -static bool32 sub_812B26C(void) +static bool32 IsInGymMap(void) { - return sub_812B27C(gUnknown_845C5BC); + return IsCurrentMapInArray(sGymMaps); } -static bool32 sub_812B27C(const u16 * mapIdxs) +static bool32 IsCurrentMapInArray(const u16 * mapIdxs) { u16 mapIdx = (gSaveBlock1Ptr->location.mapGroup << 8) + gSaveBlock1Ptr->location.mapNum; s32 i; @@ -939,18 +939,18 @@ static bool32 sub_812B27C(const u16 * mapIdxs) return FALSE; } -static bool8 sub_812B2C4(void) +static bool8 IsInDungeonMap(void) { u8 i, j; for (i = 0; i < 16; i++) { - for (j = 0; j < gUnknown_845C5CE[i][2]; j++) + for (j = 0; j < sDungeonMaps[i][2]; j++) { if ( - gUnknown_845C5CE[i][0] == gSaveBlock1Ptr->location.mapGroup - && gUnknown_845C5CE[i][1] + j == gSaveBlock1Ptr->location.mapNum - && (i != 15 || FlagGet(FLAG_0x849) == TRUE) + sDungeonMaps[i][0] == gSaveBlock1Ptr->location.mapGroup + && sDungeonMaps[i][1] + j == gSaveBlock1Ptr->location.mapNum + && (i != 15 /* TANOBY */ || FlagGet(FLAG_0x849) == TRUE) ) return TRUE; } @@ -964,7 +964,7 @@ void sub_812B35C(void) sub_812B4B8(); if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) HelpSystem_SetSomeVariable2(0x16); - else if (sub_812B2C4()) + else if (IsInDungeonMap()) HelpSystem_SetSomeVariable2(0x15); else if (is_light_level_8_or_9(gMapHeader.mapType)) { @@ -974,9 +974,9 @@ void sub_812B35C(void) HelpSystem_SetSomeVariable2(0x0F); else if (IsCurMapPokeCenter() == TRUE) HelpSystem_SetSomeVariable2(0x10); - else if (sub_812B25C() == TRUE) + else if (IsInMartMap() == TRUE) HelpSystem_SetSomeVariable2(0x11); - else if (sub_812B26C() == TRUE) + else if (IsInGymMap() == TRUE) HelpSystem_SetSomeVariable2(0x12); else HelpSystem_SetSomeVariable2(0x13); @@ -1055,7 +1055,7 @@ static void sub_812B520(struct HelpSystemListMenu * a0, struct ListMenuItem * a1 u8 r4 = 0; for (i = 0; i < 6; i++) { - if (gUnknown_845C4B6[gUnknown_203B0EC][gUnknown_845C4B0[i]] == 1) + if (gUnknown_845C4B6[sSomeVariable][gUnknown_845C4B0[i]] == 1) { a1[r4].label = gUnknown_845B080[gUnknown_845C4B0[i]]; a1[r4].index = gUnknown_845C4B0[i]; @@ -1085,7 +1085,7 @@ static void sub_812B5A8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1 static void sub_812B614(struct HelpSystemListMenu * a0, struct ListMenuItem * a1) { u8 r6 = 0; - const u8 * r3 = gUnknown_845B9E0[gUnknown_203B0EC * 5 + gUnknown_3005E9C[1]]; + const u8 * r3 = gUnknown_845B9E0[sSomeVariable * 5 + gUnknown_3005E9C[1]]; u8 i; for (i = 0; r3[i] != 0xFF; i++) { diff --git a/src/item_use.c b/src/item_use.c index 9657488f3..3a189d84a 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -191,7 +191,7 @@ void sub_80A1208(void) struct MailStruct mail; mail.itemId = gSpecialVar_ItemId; - sub_80BEBEC(&mail, ReturnToBagFromKeyItem, 0); + sub_80BEBEC(&mail, CB2_BagMenuFromStartMenu, 0); } void FieldUseFunc_MachBike(u8 taskId) @@ -404,7 +404,7 @@ void FieldUseFunc_TmCase(u8 taskId) void InitTMCaseFromBag(void) { - InitTMCase(0, ReturnToBagFromKeyItem, 0); + InitTMCase(0, CB2_BagMenuFromStartMenu, 0); } void Task_InitTMCaseFromField(u8 taskId) @@ -435,7 +435,7 @@ void FieldUseFunc_BerryPouch(u8 taskId) void InitBerryPouchFromBag(void) { - InitBerryPouch(BERRYPOUCH_FROMFIELD, ReturnToBagFromKeyItem, 0); + InitBerryPouch(BERRYPOUCH_FROMFIELD, CB2_BagMenuFromStartMenu, 0); } void Task_InitBerryPouchFromField(u8 taskId) @@ -478,7 +478,7 @@ void FieldUseFunc_TeachyTv(u8 taskId) void InitTeachyTvFromBag(void) { - InitTeachyTvController(0, ReturnToBagFromKeyItem); + InitTeachyTvController(0, CB2_BagMenuFromStartMenu); } void Task_InitTeachyTvFromField(u8 taskId) @@ -608,7 +608,7 @@ void FieldUseFunc_TownMap(u8 taskId) void sub_80A1CAC(void) { - sub_80BFF50(0, ReturnToBagFromKeyItem); + sub_80BFF50(0, CB2_BagMenuFromStartMenu); } void sub_80A1CC0(u8 taskId) @@ -640,7 +640,7 @@ void FieldUseFunc_FameChecker(u8 taskId) void sub_80A1D58(void) { - UseFameChecker(ReturnToBagFromKeyItem); + UseFameChecker(CB2_BagMenuFromStartMenu); } void sub_80A1D68(u8 taskId) diff --git a/src/menu2.c b/src/menu2.c index c6d5ab094..221f84318 100644 --- a/src/menu2.c +++ b/src/menu2.c @@ -485,7 +485,7 @@ void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 x, u AddTextPrinter(&printer, speed, callback); } -void sub_812E6DC(u8 windowId, const u8 * src, u16 x, u16 y) +void Menu_PrintFormatIntlPlayerName(u8 windowId, const u8 * src, u16 x, u16 y) { s32 i; diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index 89df1ee34..26cbdb145 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -247,7 +247,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) if (species == SPECIES_EGG) StringCopyN(gStringVar1, gText_EggNickname, POKEMON_NAME_LENGTH + 1); else - StringCopyN(gStringVar1, gText_Pokemon, POKEMON_NAME_LENGTH + 1); + StringCopyN(gStringVar1, gStartMenuText_Pokemon, POKEMON_NAME_LENGTH + 1); if (gPlayerPartyCount == PARTY_SIZE) { diff --git a/src/new_menu_helpers.c b/src/new_menu_helpers.c index 9d2a5c883..f82dbe9c6 100644 --- a/src/new_menu_helpers.c +++ b/src/new_menu_helpers.c @@ -395,7 +395,7 @@ void ResetBg0(void) ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); DeactivateAllTextPrinters(); - sub_80F6E9C(); + LoadStdWindowFrameGfx(); } u16 RunTextPrinters_CheckPrinter0Active(void) @@ -452,7 +452,7 @@ void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonP AddTextPrinterParameterized2(0, 2, gStringVar4, speed, NULL, 2, 1, 3); } -void sub_80F6E9C(void) +void LoadStdWindowFrameGfx(void) { if (gUnknown_203ADFA == 2) { @@ -644,7 +644,7 @@ static u16 GetStdPalColor(u8 colorNum) void DisplayItemMessageOnField(u8 taskId, u8 bgId, const u8 *string, TaskFunc callback) { - sub_80F6E9C(); + LoadStdWindowFrameGfx(); DisplayMessageAndContinueTask(taskId, 0, DLG_WINDOW_BASE_TILE_NUM, DLG_WINDOW_PALETTE_NUM, bgId, GetTextSpeedSetting(), string, callback); CopyWindowToVram(0, 3); } @@ -667,7 +667,7 @@ u8 GetTextSpeedSetting(void) return gUnknown_841F428[gSaveBlock2Ptr->optionsTextSpeed]; } -u8 sub_80F78E0(u8 height) +u8 CreateStartMenuWindow(u8 height) { if (sStartMenuWindowId == 0xFF) { @@ -702,15 +702,15 @@ u16 GetStdWindowBaseTileNum(void) return STD_WINDOW_BASE_TILE_NUM; } -void sub_80F7974(const u8 * text) +void DrawHelpMessageWindowWithText(const u8 * text) { - sub_814FE6C(sub_8112EB4(), DLG_WINDOW_BASE_TILE_NUM, 0x10 * DLG_WINDOW_PALETTE_NUM); - sub_8113018(text, 2); + sub_814FE6C(CreateHelpMessageWindow(), DLG_WINDOW_BASE_TILE_NUM, 0x10 * DLG_WINDOW_PALETTE_NUM); + PrintTextOnHelpMessageWindow(text, 2); } -void sub_80F7998(void) +void DestroyHelpMessageWindow_(void) { - sub_8112EDC(2); + DestroyHelpMessageWindow(2); } void sub_80F79A4(void) diff --git a/src/player_pc.c b/src/player_pc.c index 7197f65f1..b1929b9ed 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -154,7 +154,7 @@ void sub_80EB6AC(void) u8 taskId; gPlayerPcMenuManager.unk_9 = 0; - sub_812B234(); + HelpSystem_BackupSomeVariable(); sItemOrder = gUnknown_8402200; sTopMenuItemCount = 3; taskId = CreateTask(TaskDummy, 0); @@ -166,7 +166,7 @@ void sub_80EB6FC(void) u8 taskId; gPlayerPcMenuManager.unk_9 = 1; - sub_812B234(); + HelpSystem_BackupSomeVariable(); sItemOrder = gUnknown_8402203; sTopMenuItemCount = 3; taskId = CreateTask(TaskDummy, 0); @@ -215,7 +215,7 @@ static void Task_TopMenuHandleInput(u8 taskId) static void Task_ReturnToTopMenu(u8 taskId) { - sub_812B248(); + HelpSystem_RestoreSomeVariable(); DisplayItemMessageOnField(taskId, 2, gText_WhatWouldYouLikeToDo, Task_DrawPlayerPcTopMenu); } @@ -343,7 +343,7 @@ static void Task_ReturnToItemStorageSubmenu(u8 taskId) static void CB2_ReturnFromDepositMenu(void) { u8 taskId; - sub_80F6E9C(); + LoadStdWindowFrameGfx(); DrawDialogueFrame(0, TRUE); taskId = CreateTask(Task_ReturnToItemStorageSubmenu, 0); Task_CreateItemStorageSubmenu(taskId, 1); @@ -372,7 +372,7 @@ static void Task_PlayerPcWithdrawItem(u8 taskId) static void CB2_ReturnFromWithdrawMenu(void) { u8 taskId; - sub_80F6E9C(); + LoadStdWindowFrameGfx(); DrawDialogueFrame(0, TRUE); taskId = CreateTask(Task_ReturnToItemStorageSubmenu, 0); Task_CreateItemStorageSubmenu(taskId, 0); @@ -584,7 +584,7 @@ static void CB2_ReturnToMailbox(void) HelpSystem_SetSomeVariable2(34); else HelpSystem_SetSomeVariable2(30); - sub_80F6E9C(); + LoadStdWindowFrameGfx(); taskId = CreateTask(Task_WaitFadeAndReturnToMailboxPcInputHandler, 0); if (MailboxPC_InitBuffers(gPlayerPcMenuManager.count) == TRUE) Task_DrawMailboxPcMenu(taskId); @@ -700,7 +700,7 @@ static void CB2_ReturnToMailboxPc_UpdateScrollVariables(void) } } Task_SetPageItemVars(taskId); - sub_80F6E9C(); + LoadStdWindowFrameGfx(); if (MailboxPC_InitBuffers(gPlayerPcMenuManager.count) == TRUE) Task_DrawMailboxPcMenu(taskId); else diff --git a/src/quest_log.c b/src/quest_log.c index c8bd19174..ff99bbe30 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -109,7 +109,7 @@ EWRAM_DATA u8 gUnknown_203AF9A[64][2] = {{0}}; EWRAM_DATA u16 gUnknown_203B01A = 0; EWRAM_DATA u16 gUnknown_203B01C = 0; EWRAM_DATA u16 gUnknown_203B01E = 0; -EWRAM_DATA u8 gUnknown_203B020 = 0; +EWRAM_DATA u8 sHelpMessageWindowId = 0; EWRAM_DATA struct UnkStruct_203B024 gUnknown_203B024 = {0}; EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0}; EWRAM_DATA u8 gUnknown_203B048 = 0; @@ -2294,37 +2294,37 @@ void sub_8112E3C(u8 a0, struct UnkStruct_300201C * a1, u16 a2) const u16 gUnknown_84566A8[] = INCBIN_U16("data/graphics/unknown_84566a8.bin"); -const struct WindowTemplate gUnknown_8456928 = { +const struct WindowTemplate sHelpMessageWindowTemplate = { 0x00, 0, 15, 30, 5, 15, 0x008F }; void MapNamePopupWindowIdSetDummy(void) { - gUnknown_203B020 = 0xFF; + sHelpMessageWindowId = 0xFF; } -u8 sub_8112EB4(void) +u8 CreateHelpMessageWindow(void) { - if (gUnknown_203B020 == 0xFF) + if (sHelpMessageWindowId == 0xFF) { - gUnknown_203B020 = AddWindow(&gUnknown_8456928); - PutWindowTilemap(gUnknown_203B020); + sHelpMessageWindowId = AddWindow(&sHelpMessageWindowTemplate); + PutWindowTilemap(sHelpMessageWindowId); } - return gUnknown_203B020; + return sHelpMessageWindowId; } -void sub_8112EDC(u8 a0) +void DestroyHelpMessageWindow(u8 a0) { - if (gUnknown_203B020 != 0xFF) + if (sHelpMessageWindowId != 0xFF) { - FillWindowPixelBuffer(gUnknown_203B020, 0x00); - ClearWindowTilemap(gUnknown_203B020); + FillWindowPixelBuffer(sHelpMessageWindowId, PIXEL_FILL(0)); + ClearWindowTilemap(sHelpMessageWindowId); if (a0) - CopyWindowToVram(gUnknown_203B020, a0); + CopyWindowToVram(sHelpMessageWindowId, a0); - RemoveWindow(gUnknown_203B020); - gUnknown_203B020 = 0xFF; + RemoveWindow(sHelpMessageWindowId); + sHelpMessageWindowId = 0xFF; } } @@ -2460,7 +2460,7 @@ void sub_8112F18(u8 a0) void sub_8112FD0(void) { - sub_8112F18(gUnknown_203B020); + sub_8112F18(sHelpMessageWindowId); } const u8 gUnknown_8456930[3] = { @@ -2469,15 +2469,15 @@ const u8 gUnknown_8456930[3] = { void sub_8112FE4(const u8 * a0) { - AddTextPrinterParameterized4(gUnknown_203B020, 0x02, 2, 5, 1, 1, gUnknown_8456930, -1, a0); + AddTextPrinterParameterized4(sHelpMessageWindowId, 0x02, 2, 5, 1, 1, gUnknown_8456930, -1, a0); } -void sub_8113018(const u8 * text, u8 mode) +void PrintTextOnHelpMessageWindow(const u8 * text, u8 mode) { sub_8112FD0(); sub_8112FE4(text); if (mode) - CopyWindowToVram(gUnknown_203B020, mode); + CopyWindowToVram(sHelpMessageWindowId, mode); } void sub_8113044(void) diff --git a/src/save.c b/src/save.c index 9f580477b..45f5fc6f0 100644 --- a/src/save.c +++ b/src/save.c @@ -85,7 +85,7 @@ u16 gSaveUnusedVar; u16 gSaveFileStatus; void (*gGameContinueCallback)(void); struct SaveBlockChunk gRamSaveSectionLocations[0xE]; -u16 gUnknown_3005420; +u16 gSaveSucceeded; EWRAM_DATA struct SaveSection gSaveDataBuffer = {0}; EWRAM_DATA u32 gSaveUnusedVar2 = 0; @@ -702,11 +702,11 @@ u8 TrySavingData(u8 saveType) else goto OK; // really? } - gUnknown_3005420 = 0xFF; + gSaveSucceeded = 0xFF; return 0xFF; OK: - gUnknown_3005420 = 1; + gSaveSucceeded = 1; return 1; } diff --git a/src/scrcmd.c b/src/scrcmd.c index 85059691f..ae994fceb 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1284,14 +1284,14 @@ bool8 ScrCmd_loadhelp(struct ScriptContext *ctx) if (msg == NULL) msg = (const u8 *)ctx->data[0]; - sub_80F7974(msg); + DrawHelpMessageWindowWithText(msg); CopyWindowToVram(GetStartMenuWindowId(), 1); return FALSE; } bool8 ScrCmd_unloadhelp(struct ScriptContext *ctx) { - sub_80F7998(); + DestroyHelpMessageWindow_(); return FALSE; } @@ -1566,7 +1566,7 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx) if (ptr == NULL) ptr = (u8 *)ctx->data[0]; - sub_80F6E9C(); + LoadStdWindowFrameGfx(); DrawDialogueFrame(0, 1); AddTextPrinterParameterized(0, 6, ptr, 0, 1, 0, NULL); return FALSE; diff --git a/src/start_menu.c b/src/start_menu.c new file mode 100644 index 000000000..1bfca6761 --- /dev/null +++ b/src/start_menu.c @@ -0,0 +1,1008 @@ +#include "global.h" +#include "palette.h" +#include "bg.h" +#include "gpu_regs.h" +#include "scanline_effect.h" +#include "overworld.h" +#include "link.h" +#include "pokedex.h" +#include "item_menu.h" +#include "party_menu.h" +#include "save.h" +#include "link_rfu.h" +#include "event_data.h" +#include "fieldmap.h" +#include "safari_zone.h" +#include "start_menu.h" +#include "menu.h" +#include "load_save.h" +#include "strings.h" +#include "string_util.h" +#include "menu_helpers.h" +#include "text_window.h" +#include "field_fadetransition.h" +#include "field_player_avatar.h" +#include "new_menu_helpers.h" +#include "map_obj_80688E4.h" +#include "map_obj_lock.h" +#include "script.h" +#include "sound.h" +#include "quest_log.h" +#include "new_game.h" +#include "event_scripts.h" +#include "field_weather.h" +#include "field_specials.h" +#include "pokedex_screen.h" +#include "trainer_card.h" +#include "option_menu.h" +#include "save_menu_util.h" +#include "help_system.h" +#include "constants/songs.h" +#include "constants/flags.h" + +enum StartMenuOption +{ + STARTMENU_POKEDEX = 0, + STARTMENU_POKEMON, + STARTMENU_BAG, + STARTMENU_PLAYER, + STARTMENU_SAVE, + STARTMENU_OPTION, + STARTMENU_EXIT, + STARTMENU_RETIRE, + STARTMENU_PLAYER2, + MAX_STARTMENU_ITEMS +}; + +enum SaveCBReturn +{ + SAVECB_RETURN_CONTINUE = 0, + SAVECB_RETURN_OKAY, + SAVECB_RETURN_CANCEL, + SAVECB_RETURN_ERROR +}; + +static EWRAM_DATA bool8 (*sStartMenuCallback)(void) = NULL; +static EWRAM_DATA u8 sStartMenuCursorPos = 0; +static EWRAM_DATA u8 sNumStartMenuItems = 0; +static EWRAM_DATA u8 sStartMenuOrder[MAX_STARTMENU_ITEMS] = {}; +static EWRAM_DATA s8 sDrawStartMenuState[2] = {}; +static EWRAM_DATA u8 sSafariZoneStatsWindowId = 0; +static ALIGNED(4) EWRAM_DATA u8 sSaveStatsWindowId = 0; + +static u8 (*sSaveDialogCB)(void); +static u8 sSaveDialogDelay; +static u8 sSaveDialogIsPrinting; + +static void SetUpStartMenu_Link(void); +static void SetUpStartMenu_UnionRoom(void); +static void SetUpStartMenu_SafariZone(void); +static void SetUpStartMenu_NormalField(void); +static bool8 StartCB_HandleInput(void); +static void StartMenu_FadeScreenIfLeavingOverworld(void); +static bool8 StartMenuPokedexSanityCheck(void); +static bool8 StartMenuPokedexCallback(void); +static bool8 StartMenuPokemonCallback(void); +static bool8 StartMenuBagCallback(void); +static bool8 StartMenuPlayerCallback(void); +static bool8 StartMenuSaveCallback(void); +static bool8 StartMenuOptionCallback(void); +static bool8 StartMenuExitCallback(void); +static bool8 StartMenuSafariZoneRetireCallback(void); +static bool8 StartMenuLinkPlayerCallback(void); +static bool8 StartCB_Save1(void); +static bool8 StartCB_Save2(void); +static void StartMenu_PrepareForSave(void); +static u8 RunSaveDialogCB(void); +static void task50_save_game(u8 taskId); +static u8 SaveDialogCB_PrintAskSaveText(void); +static u8 SaveDialogCB_AskSavePrintYesNoMenu(void); +static u8 SaveDialogCB_AskSaveHandleInput(void); +static u8 SaveDialogCB_PrintAskOverwriteText(void); +static u8 SaveDialogCB_AskOverwritePrintYesNoMenu(void); +static u8 SaveDialogCB_AskReplacePreviousFilePrintYesNoMenu(void); +static u8 SaveDialogCB_AskOverwriteOrReplacePreviousFileHandleInput(void); +static u8 SaveDialogCB_PrintSavingDontTurnOffPower(void); +static u8 SaveDialogCB_DoSave(void); +static u8 SaveDialogCB_PrintSaveResult(void); +static u8 SaveDialogCB_WaitPrintSuccessAndPlaySE(void); +static u8 SaveDialogCB_ReturnSuccess(void); +static u8 SaveDialogCB_WaitPrintErrorAndPlaySE(void); +static u8 SaveDialogCB_ReturnError(void); +static void CB2_WhileSavingAfterLinkBattle(void); +static void task50_after_link_battle_save(u8 taskId); +static void PrintSaveStats(void); +static void CloseSaveStatsWindow(void); +static void CloseStartMenu(void); + +static const struct MenuAction sStartMenuActionTable[] = { + { gStartMenuText_Pokedex, {.u8_void = StartMenuPokedexCallback} }, + { gStartMenuText_Pokemon, {.u8_void = StartMenuPokemonCallback} }, + { gStartMenuText_Bag, {.u8_void = StartMenuBagCallback} }, + { gStartMenuText_Player, {.u8_void = StartMenuPlayerCallback} }, + { gStartMenuText_Save, {.u8_void = StartMenuSaveCallback} }, + { gStartMenuText_Option, {.u8_void = StartMenuOptionCallback} }, + { gStartMenuText_Exit, {.u8_void = StartMenuExitCallback} }, + { gStartMenuText_Retire, {.u8_void = StartMenuSafariZoneRetireCallback} }, + { gStartMenuText_Player, {.u8_void = StartMenuLinkPlayerCallback} } +}; + +static const struct WindowTemplate sSafariZoneStatsWindowTemplate = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 10, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x008 +}; + +static const u8 *const sStartMenuDescPointers[] = { + gStartMenuDesc_Pokedex, + gStartMenuDesc_Pokemon, + gStartMenuDesc_Bag, + gStartMenuDesc_Player, + gStartMenuDesc_Save, + gStartMenuDesc_Option, + gStartMenuDesc_Exit, + gStartMenuDesc_Retire, + gStartMenuDesc_Player +}; + +static const struct BgTemplate sBGTemplates_AfterLinkSaveMessage[] = { + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + } +}; + +static const struct WindowTemplate sWindowTemplates_AfterLinkSaveMessage[] = { + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x198 + }, DUMMY_WIN_TEMPLATE +}; + +static const struct WindowTemplate sSaveStatsWindowTemplate = { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 14, + .height = 9, + .paletteNum = 13, + .baseBlock = 0x008 +}; + +static ALIGNED(2) const u8 sTextColor_StatName[] = { 1, 2, 3 }; +static ALIGNED(2) const u8 sTextColor_StatValue[] = { 1, 4, 5 }; +static ALIGNED(2) const u8 sTextColor_LocationHeader[] = { 1, 6, 7 }; + +static void SetUpStartMenu(void) +{ + sNumStartMenuItems = 0; + if (IsUpdateLinkStateCBActive() == TRUE) + SetUpStartMenu_Link(); + else if (InUnionRoom() == TRUE) + SetUpStartMenu_UnionRoom(); + else if (GetSafariZoneFlag() == TRUE) + SetUpStartMenu_SafariZone(); + else + SetUpStartMenu_NormalField(); +} + +static void AppendToStartMenuItems(u8 newEntry) +{ + AppendToList(sStartMenuOrder, &sNumStartMenuItems, newEntry); +} + +static void SetUpStartMenu_NormalField(void) +{ + if (FlagGet(FLAG_0x829) == TRUE) + AppendToStartMenuItems(STARTMENU_POKEDEX); + if (FlagGet(FLAG_0x828) == TRUE) + AppendToStartMenuItems(STARTMENU_POKEMON); + AppendToStartMenuItems(STARTMENU_BAG); + AppendToStartMenuItems(STARTMENU_PLAYER); + AppendToStartMenuItems(STARTMENU_SAVE); + AppendToStartMenuItems(STARTMENU_OPTION); + AppendToStartMenuItems(STARTMENU_EXIT); +} + +static void SetUpStartMenu_SafariZone(void) +{ + AppendToStartMenuItems(STARTMENU_RETIRE); + AppendToStartMenuItems(STARTMENU_POKEDEX); + AppendToStartMenuItems(STARTMENU_POKEMON); + AppendToStartMenuItems(STARTMENU_BAG); + AppendToStartMenuItems(STARTMENU_PLAYER); + AppendToStartMenuItems(STARTMENU_OPTION); + AppendToStartMenuItems(STARTMENU_EXIT); +} + +static void SetUpStartMenu_Link(void) +{ + AppendToStartMenuItems(STARTMENU_POKEMON); + AppendToStartMenuItems(STARTMENU_BAG); + AppendToStartMenuItems(STARTMENU_PLAYER2); + AppendToStartMenuItems(STARTMENU_OPTION); + AppendToStartMenuItems(STARTMENU_EXIT); +} + +static void SetUpStartMenu_UnionRoom(void) +{ + AppendToStartMenuItems(STARTMENU_POKEMON); + AppendToStartMenuItems(STARTMENU_BAG); + AppendToStartMenuItems(STARTMENU_PLAYER); + AppendToStartMenuItems(STARTMENU_OPTION); + AppendToStartMenuItems(STARTMENU_EXIT); +} + +static void DrawSafariZoneStatsWindow(void) +{ + sSafariZoneStatsWindowId = AddWindow(&sSafariZoneStatsWindowTemplate); + PutWindowTilemap(sSafariZoneStatsWindowId); + DrawStdWindowFrame(sSafariZoneStatsWindowId, FALSE); + ConvertIntToDecimalStringN(gStringVar1, gSafariZoneStepCounter, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, 600, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar3, gNumSafariBalls, STR_CONV_MODE_RIGHT_ALIGN, 2); + StringExpandPlaceholders(gStringVar4, gUnknown_84162A9); + AddTextPrinterParameterized(sSafariZoneStatsWindowId,2, gStringVar4, 4, 3, 0xFF, NULL); + CopyWindowToVram(sSafariZoneStatsWindowId, 2); +} + +static void DestroySafariZoneStatsWindow(void) +{ + if (GetSafariZoneFlag()) + { + ClearStdWindowAndFrameToTransparent(sSafariZoneStatsWindowId, FALSE); + CopyWindowToVram(sSafariZoneStatsWindowId, 2); + RemoveWindow(sSafariZoneStatsWindowId); + } +} + +static s8 PrintStartMenuItems(s8 *cursor_p, u8 nitems) +{ + s16 i = *cursor_p; + do + { + if (sStartMenuOrder[i] == STARTMENU_PLAYER || sStartMenuOrder[i] == STARTMENU_PLAYER2) + { + Menu_PrintFormatIntlPlayerName(GetStartMenuWindowId(), sStartMenuActionTable[sStartMenuOrder[i]].text, 8, i * 15); + } + else + { + StringExpandPlaceholders(gStringVar4, sStartMenuActionTable[sStartMenuOrder[i]].text); + AddTextPrinterParameterized(GetStartMenuWindowId(), 2, gStringVar4, 8, i * 15, 0xFF, NULL); + } + i++; + if (i >= sNumStartMenuItems) + { + *cursor_p = i; + return TRUE; + } + } while (--nitems); + *cursor_p = i; + return FALSE; +} + +static s8 DoDrawStartMenu(void) +{ + switch (sDrawStartMenuState[0]) + { + case 0: + sDrawStartMenuState[0]++; + break; + case 1: + SetUpStartMenu(); + sDrawStartMenuState[0]++; + break; + case 2: + LoadStdWindowFrameGfx(); + DrawStdWindowFrame(CreateStartMenuWindow(sNumStartMenuItems), FALSE); + sDrawStartMenuState[0]++; + break; + case 3: + if (GetSafariZoneFlag()) + DrawSafariZoneStatsWindow(); + sDrawStartMenuState[0]++; + break; + case 4: + if (PrintStartMenuItems(&sDrawStartMenuState[1], 2) == TRUE) + sDrawStartMenuState[0]++; + break; + case 5: + sStartMenuCursorPos = Menu_InitCursor(GetStartMenuWindowId(), 2, 0, 0, 15, sNumStartMenuItems, sStartMenuCursorPos); + if (!MenuHelpers_LinkSomething() && InUnionRoom() != TRUE && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_HELP) + { + DrawHelpMessageWindowWithText(sStartMenuDescPointers[sStartMenuOrder[sStartMenuCursorPos]]); + } + CopyWindowToVram(GetStartMenuWindowId(), 1); + return TRUE; + } + return FALSE; +} + +void DrawStartMenuInOneGo(void) +{ + sDrawStartMenuState[0] = 0; + sDrawStartMenuState[1] = 0; + while (!DoDrawStartMenu()) + ; +} + +static void task50_startmenu(u8 taskId) +{ + if (DoDrawStartMenu() == TRUE) + SwitchTaskToFollowupFunc(taskId); +} + +static void OpenStartMenuWithFollowupFunc(TaskFunc func) +{ + u8 taskId; + sDrawStartMenuState[0] = 0; + sDrawStartMenuState[1] = 0; + taskId = CreateTask(task50_startmenu, 80); + SetTaskFuncWithFollowupFunc(taskId, task50_startmenu, func); +} + +static bool8 FieldCB2_DrawStartMenu(void) +{ + if (!DoDrawStartMenu()) + return FALSE; + FadeTransition_FadeInOnReturnToStartMenu(); + return TRUE; +} + +void SetUpReturnToStartMenu(void) +{ + sDrawStartMenuState[0] = 0; + sDrawStartMenuState[1] = 0; + gFieldCallback2 = FieldCB2_DrawStartMenu; +} + +void Task_StartMenuHandleInput(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + switch (data[0]) + { + case 0: + if (InUnionRoom() == TRUE) + var_800D_set_xB(); + sStartMenuCallback = StartCB_HandleInput; + data[0]++; + break; + case 1: + if (sStartMenuCallback() == TRUE) + DestroyTask(taskId); + break; + } +} + +void ShowStartMenu(void) +{ + if (!IsUpdateLinkStateCBActive()) + { + player_bitmagic(); + sub_805C270(); + sub_805C780(); + } + OpenStartMenuWithFollowupFunc(Task_StartMenuHandleInput); + ScriptContext2_Enable(); +} + +static bool8 StartCB_HandleInput(void) +{ + if (JOY_NEW(DPAD_UP)) + { + PlaySE(SE_SELECT); + sStartMenuCursorPos = Menu_MoveCursor(-1); + if (!MenuHelpers_LinkSomething() && InUnionRoom() != TRUE && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_HELP) + { + PrintTextOnHelpMessageWindow(sStartMenuDescPointers[sStartMenuOrder[sStartMenuCursorPos]], 2); + } + } + if (JOY_NEW(DPAD_DOWN)) + { + PlaySE(SE_SELECT); + sStartMenuCursorPos = Menu_MoveCursor(+1); + if (!MenuHelpers_LinkSomething() && InUnionRoom() != TRUE && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_HELP) + { + PrintTextOnHelpMessageWindow(sStartMenuDescPointers[sStartMenuOrder[sStartMenuCursorPos]], 2); + } + } + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + if (!StartMenuPokedexSanityCheck()) + return FALSE; + sStartMenuCallback = sStartMenuActionTable[sStartMenuOrder[sStartMenuCursorPos]].func.u8_void; + StartMenu_FadeScreenIfLeavingOverworld(); + return FALSE; + } + if (JOY_NEW(B_BUTTON | START_BUTTON)) + { + DestroySafariZoneStatsWindow(); + DestroyHelpMessageWindow_(); + CloseStartMenu(); + return TRUE; + } + return FALSE; +} + +static void StartMenu_FadeScreenIfLeavingOverworld(void) +{ + if (sStartMenuCallback != StartMenuSaveCallback + && sStartMenuCallback != StartMenuExitCallback + && sStartMenuCallback != StartMenuSafariZoneRetireCallback) + { + sub_80CCB68(); + fade_screen(1, 0); + } +} + +static bool8 StartMenuPokedexSanityCheck(void) +{ + if (sStartMenuActionTable[sStartMenuOrder[sStartMenuCursorPos]].func.u8_void == StartMenuPokedexCallback && GetNationalPokedexCount(0) == 0) + return FALSE; + return TRUE; +} + +static bool8 StartMenuPokedexCallback(void) +{ + if (!gPaletteFade.active) + { + IncrementGameStat(GAME_STAT_CHECKED_POKEDEX); + PlayRainStoppingSoundEffect(); + DestroySafariZoneStatsWindow(); + CleanupOverworldWindowsAndTilemaps(); + SetMainCallback2(CB2_OpenPokedexFromStartMenu); + return TRUE; + } + return FALSE; +} + +static bool8 StartMenuPokemonCallback(void) +{ + if (!gPaletteFade.active) + { + PlayRainStoppingSoundEffect(); + DestroySafariZoneStatsWindow(); + CleanupOverworldWindowsAndTilemaps(); + SetMainCallback2(CB2_PartyMenuFromStartMenu); + return TRUE; + } + return FALSE; +} + +static bool8 StartMenuBagCallback(void) +{ + if (!gPaletteFade.active) + { + PlayRainStoppingSoundEffect(); + DestroySafariZoneStatsWindow(); + CleanupOverworldWindowsAndTilemaps(); + SetMainCallback2(CB2_BagMenuFromStartMenu); + return TRUE; + } + return FALSE; +} + +static bool8 StartMenuPlayerCallback(void) +{ + if (!gPaletteFade.active) + { + PlayRainStoppingSoundEffect(); + DestroySafariZoneStatsWindow(); + CleanupOverworldWindowsAndTilemaps(); + InitTrainerCard(CB2_ReturnToStartMenu); + return TRUE; + } + return FALSE; +} + +static bool8 StartMenuSaveCallback(void) +{ + sStartMenuCallback = StartCB_Save1; + return FALSE; +} + +static bool8 StartMenuOptionCallback(void) +{ + if (!gPaletteFade.active) + { + PlayRainStoppingSoundEffect(); + DestroySafariZoneStatsWindow(); + CleanupOverworldWindowsAndTilemaps(); + SetMainCallback2(CB2_OptionsMenuFromStartMenu); + gMain.savedCallback = CB2_ReturnToStartMenu; + return TRUE; + } + return FALSE; +} + +static bool8 StartMenuExitCallback(void) +{ + DestroySafariZoneStatsWindow(); + DestroyHelpMessageWindow_(); + CloseStartMenu(); + return TRUE; +} + +static bool8 StartMenuSafariZoneRetireCallback(void) +{ + DestroySafariZoneStatsWindow(); + DestroyHelpMessageWindow_(); + CloseStartMenu(); + SafariZoneRetirePrompt(); + return TRUE; +} + + +static bool8 StartMenuLinkPlayerCallback(void) +{ + if (!gPaletteFade.active) + { + PlayRainStoppingSoundEffect(); + CleanupOverworldWindowsAndTilemaps(); + InitLinkPartnerTrainerCard(gUnknown_300502C, CB2_ReturnToStartMenu); + return TRUE; + } + return FALSE; +} + +static bool8 StartCB_Save1(void) +{ + HelpSystem_BackupSomeVariable(); + HelpSystem_SetSomeVariable2(12); + StartMenu_PrepareForSave(); + sStartMenuCallback = StartCB_Save2; + return FALSE; +} + +static bool8 StartCB_Save2(void) +{ + switch (RunSaveDialogCB()) + { + case SAVECB_RETURN_CONTINUE: + break; + case SAVECB_RETURN_OKAY: + ClearDialogWindowAndFrameToTransparent(0, TRUE); + sub_80696C0(); + ScriptContext2_Disable(); + HelpSystem_RestoreSomeVariable(); + return TRUE; + case SAVECB_RETURN_CANCEL: + ClearDialogWindowAndFrameToTransparent(0, FALSE); + DrawStartMenuInOneGo(); + HelpSystem_RestoreSomeVariable(); + sStartMenuCallback = StartCB_HandleInput; + break; + case SAVECB_RETURN_ERROR: + ClearDialogWindowAndFrameToTransparent(0, TRUE); + sub_80696C0(); + ScriptContext2_Disable(); + HelpSystem_RestoreSomeVariable(); + return TRUE; + } + return FALSE; +} + +static void StartMenu_PrepareForSave(void) +{ + save_serialize_map(); + sSaveDialogCB = SaveDialogCB_PrintAskSaveText; + sSaveDialogIsPrinting = 0; +} + +static u8 RunSaveDialogCB(void) +{ + if (RunTextPrinters_CheckPrinter0Active() == TRUE) + return 0; + sSaveDialogIsPrinting = 0; + return sSaveDialogCB(); +} + +void Field_AskSaveTheGame(void) +{ + HelpSystem_BackupSomeVariable(); + HelpSystem_SetSomeVariable2(12); + StartMenu_PrepareForSave(); + CreateTask(task50_save_game, 80); +} + +void PrintSaveTextWithFollowupFunc(const u8 *str, bool8 (*savecb)(void)) +{ + StringExpandPlaceholders(gStringVar4, str); + sub_80F7768(0, TRUE); + AddTextPrinterForMessage(TRUE); + sSaveDialogIsPrinting = 1; + sSaveDialogCB = savecb; +} + +void task50_save_game(u8 taskId) +{ + switch (RunSaveDialogCB()) + { + case 0: + return; + case 2: + case 3: + gSpecialVar_Result = FALSE; + break; + case 1: + gSpecialVar_Result = TRUE; + break; + } + DestroyTask(taskId); + EnableBothScriptContexts(); + HelpSystem_RestoreSomeVariable(); +} + +static void CloseSaveMessageWindow(void) +{ + ClearDialogWindowAndFrame(0, TRUE); +} + +static void CloseSaveStatsWindow_(void) +{ + CloseSaveStatsWindow(); +} + +static void SetSaveDialogDelayTo60Frames(void) +{ + sSaveDialogDelay = 60; +} + +static bool8 SaveDialog_Wait60FramesOrAButtonHeld(void) +{ + sSaveDialogDelay--; + if (JOY_HELD(A_BUTTON)) + { + PlaySE(SE_SELECT); + return TRUE; + } + else if (sSaveDialogDelay == 0) + { + return TRUE; + } + else + { + return FALSE; + } +} + +bool8 SaveDialog_Wait60FramesThenCheckAButtonHeld(void) +{ + if (sSaveDialogDelay == 0) + { + if (JOY_HELD(A_BUTTON)) + { + return TRUE; + } + else + { + return FALSE; + } + } + else + { + sSaveDialogDelay--; + return FALSE; + } +} + +static u8 SaveDialogCB_PrintAskSaveText(void) +{ + ClearStdWindowAndFrame(GetStartMenuWindowId(), FALSE); + RemoveStartMenuWindow(); + DestroyHelpMessageWindow(0); + PrintSaveStats(); + PrintSaveTextWithFollowupFunc(gText_WouldYouLikeToSaveTheGame, SaveDialogCB_AskSavePrintYesNoMenu); + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_AskSavePrintYesNoMenu(void) +{ + DisplayYesNoMenuDefaultYes(); + sSaveDialogCB = SaveDialogCB_AskSaveHandleInput; + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_AskSaveHandleInput(void) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + if ((gSaveFileStatus != SAVE_STATUS_EMPTY && gSaveFileStatus != SAVE_STATUS_INVALID) || !gDifferentSaveFile) + sSaveDialogCB = SaveDialogCB_PrintAskOverwriteText; + else + sSaveDialogCB = SaveDialogCB_PrintSavingDontTurnOffPower; + break; + case 1: + case -1: + CloseSaveStatsWindow_(); + CloseSaveMessageWindow(); + return SAVECB_RETURN_CANCEL; + } + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_PrintAskOverwriteText(void) +{ + if (gDifferentSaveFile == TRUE) + PrintSaveTextWithFollowupFunc(gText_DifferentGameFile, SaveDialogCB_AskReplacePreviousFilePrintYesNoMenu); + else + PrintSaveTextWithFollowupFunc(gText_AlreadySaveFile_WouldLikeToOverwrite, SaveDialogCB_AskOverwritePrintYesNoMenu); + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_AskOverwritePrintYesNoMenu(void) +{ + DisplayYesNoMenuDefaultYes(); + sSaveDialogCB = SaveDialogCB_AskOverwriteOrReplacePreviousFileHandleInput; + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_AskReplacePreviousFilePrintYesNoMenu(void) +{ + DisplayYesNoMenuDefaultNo(); + sSaveDialogCB = SaveDialogCB_AskOverwriteOrReplacePreviousFileHandleInput; + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_AskOverwriteOrReplacePreviousFileHandleInput(void) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + sSaveDialogCB = SaveDialogCB_PrintSavingDontTurnOffPower; + break; + case 1: + case -1: + CloseSaveStatsWindow_(); + CloseSaveMessageWindow(); + return SAVECB_RETURN_CANCEL; + } + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_PrintSavingDontTurnOffPower(void) +{ + sub_8112450(); + PrintSaveTextWithFollowupFunc(gText_SavingDontTurnOffThePower, SaveDialogCB_DoSave); + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_DoSave(void) +{ + IncrementGameStat(GAME_STAT_SAVED_GAME); + if (gDifferentSaveFile == TRUE) + { + TrySavingData(SAVE_OVERWRITE_DIFFERENT_FILE); + gDifferentSaveFile = FALSE; + } + else + { + TrySavingData(SAVE_NORMAL); + } + sSaveDialogCB = SaveDialogCB_PrintSaveResult; + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_PrintSaveResult(void) +{ + if (gSaveSucceeded == TRUE) + PrintSaveTextWithFollowupFunc(gText_PlayerSavedTheGame, SaveDialogCB_WaitPrintSuccessAndPlaySE); + else + PrintSaveTextWithFollowupFunc(gText_SaveError_PleaseExchangeBackupMemory, SaveDialogCB_WaitPrintErrorAndPlaySE); + SetSaveDialogDelayTo60Frames(); + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_WaitPrintSuccessAndPlaySE(void) +{ + if (!RunTextPrinters_CheckPrinter0Active()) + { + PlaySE(SE_SAVE); + sSaveDialogCB = SaveDialogCB_ReturnSuccess; + } + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_ReturnSuccess(void) +{ + if (!IsSEPlaying() && SaveDialog_Wait60FramesOrAButtonHeld()) + { + CloseSaveStatsWindow_(); + return SAVECB_RETURN_OKAY; + } + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_WaitPrintErrorAndPlaySE(void) +{ + if (!RunTextPrinters_CheckPrinter0Active()) + { + PlaySE(SE_BOO); + sSaveDialogCB = SaveDialogCB_ReturnError; + } + return SAVECB_RETURN_CONTINUE; +} + +static u8 SaveDialogCB_ReturnError(void) +{ + if (!SaveDialog_Wait60FramesThenCheckAButtonHeld()) + return SAVECB_RETURN_CONTINUE; + CloseSaveStatsWindow_(); + return SAVECB_RETURN_ERROR; +} + +static void VBlankCB_WhileSavingAfterLinkBattle(void) +{ + TransferPlttBuffer(); +} + +bool32 DoSetUpSaveAfterLinkBattle(u8 *state) +{ + switch (*state) + { + case 0: + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetVBlankCallback(NULL); + ScanlineEffect_Stop(); + DmaFill16Defvars(3, 0, (void *)PLTT, PLTT_SIZE); + DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000); + break; + case 1: + ResetSpriteData(); + ResetTasks(); + ResetPaletteFade(); + ScanlineEffect_Clear(); + break; + case 2: + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, sBGTemplates_AfterLinkSaveMessage, NELEMS(sBGTemplates_AfterLinkSaveMessage)); + InitWindows(sWindowTemplates_AfterLinkSaveMessage); + TextWindow_SetStdFrame0_WithPal(0, 0x008, 0xF0); + break; + case 3: + ShowBg(0); + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + SetVBlankCallback(VBlankCB_WhileSavingAfterLinkBattle); + EnableInterrupts(INTR_FLAG_VBLANK); + break; + case 4: + return TRUE; + } + (*state)++; + return FALSE; +} + +void CB2_SetUpSaveAfterLinkBattle(void) +{ + if (DoSetUpSaveAfterLinkBattle(&gMain.state)) + { + CreateTask(task50_after_link_battle_save, 80); + SetMainCallback2(CB2_WhileSavingAfterLinkBattle); + } +} + +static void CB2_WhileSavingAfterLinkBattle(void) +{ + RunTasks(); + UpdatePaletteFade(); +} + +static void task50_after_link_battle_save(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active) + { + switch (data[0]) + { + case 0: + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized2(0, 2, gText_SavingDontTurnOffThePower2, 0xFF, NULL, 2, 1, 3); + DrawTextBorderOuter(0, 0x008, 0x0F); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + if (gWirelessCommType != 0 && InUnionRoom()) + data[0] = 5; + else + data[0] = 1; + break; + case 1: + sub_804C1C0(); + sub_80DA45C(); + data[0] = 2; + break; + case 2: + if (sub_80DA4A0()) + { + sav2_gender2_inplace_and_xFE(); + data[0] = 3; + } + break; + case 3: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + data[0] = 4; + break; + case 4: + FreeAllWindowBuffers(); + SetMainCallback2(gMain.savedCallback); + DestroyTask(taskId); + break; + case 5: + CreateTask(sub_80DA634, 5); + data[0] = 6; + break; + case 6: + if (!FuncIsActiveTask(sub_80DA634)) + data[0] = 3; + break; + } + } +} + +static void PrintSaveStats(void) +{ + u8 y; + u8 x; + sSaveStatsWindowId = AddWindow(&sSaveStatsWindowTemplate); + TextWindow_SetStdFrame0_WithPal(sSaveStatsWindowId, 0x21D, 0xD0); + DrawStdFrameWithCustomTileAndPalette(sSaveStatsWindowId, FALSE, 0x21D, 0x0D); + SaveStatToString(SAVE_STAT_LOCATION, gStringVar4, 8); + x = (u32)(112 - GetStringWidth(2, gStringVar4, -1)) / 2; + AddTextPrinterParameterized3(sSaveStatsWindowId, 2, x, 0, sTextColor_LocationHeader, -1, gStringVar4); + x = (u32)(112 - GetStringWidth(2, gStringVar4, -1)) / 2; + AddTextPrinterParameterized3(sSaveStatsWindowId, 0, 2, 14, sTextColor_StatName, -1, gSaveStatName_Player); + SaveStatToString(SAVE_STAT_NAME, gStringVar4, 2); + Menu_PrintFormatIntlPlayerName(sSaveStatsWindowId, gStringVar4, 60, 14); + AddTextPrinterParameterized3(sSaveStatsWindowId, 0, 2, 28, sTextColor_StatName, -1, gSaveStatName_Badges); + SaveStatToString(SAVE_STAT_BADGES, gStringVar4, 2); + AddTextPrinterParameterized3(sSaveStatsWindowId, 0, 60, 28, sTextColor_StatValue, -1, gStringVar4); + y = 42; + if (FlagGet(FLAG_0x829) == TRUE) + { + AddTextPrinterParameterized3(sSaveStatsWindowId, 0, 2, 42, sTextColor_StatName, -1, gSaveStatName_Pokedex); + SaveStatToString(SAVE_STAT_POKEDEX, gStringVar4, 2); + AddTextPrinterParameterized3(sSaveStatsWindowId, 0, 60, 42, sTextColor_StatValue, -1, gStringVar4); + y = 56; + } + AddTextPrinterParameterized3(sSaveStatsWindowId, 0, 2, y, sTextColor_StatName, -1, gSaveStatName_Time); + SaveStatToString(SAVE_STAT_TIME, gStringVar4, 2); + AddTextPrinterParameterized3(sSaveStatsWindowId, 0, 60, y, sTextColor_StatValue, -1, gStringVar4); + CopyWindowToVram(sSaveStatsWindowId, 2); +} + +static void CloseSaveStatsWindow(void) +{ + ClearStdWindowAndFrame(sSaveStatsWindowId, FALSE); + RemoveWindow(sSaveStatsWindowId); +} + +static void CloseStartMenu(void) +{ + PlaySE(SE_SELECT); + ClearStdWindowAndFrame(GetStartMenuWindowId(), TRUE); + RemoveStartMenuWindow(); + sub_80696C0(); + ScriptContext2_Disable(); +} + +void AppendToList(u8 *list, u8 *cursor, u8 newEntry) +{ + list[*cursor] = newEntry; + (*cursor)++; +} diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 18da0997c..aa273073b 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -510,7 +510,7 @@ static void TeachyTvMainCallback(void) ScheduleBgCopyTilemapToVram(1); ScheduleBgCopyTilemapToVram(2); ScheduleBgCopyTilemapToVram(3); - sub_812B1E0(9); // help system something + HelpSystem_SetSomeVariable(9); // help system something BlendPalettes(0xFFFFFFFF, 0x10, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); SetVBlankCallback(TeachyTvVblankHandler); @@ -736,7 +736,7 @@ static void TeachyTvOptionListController(u8 taskId) { input = ListMenu_ProcessInput(data[0]); ListMenuGetScrollAndRow(data[0], &sStaticResources.scrollOffset, &sStaticResources.selectedRow); - if ((JOY_NEW(SELECT_BUTTON) && sStaticResources.callback != ReturnToBagFromKeyItem)) + if ((JOY_NEW(SELECT_BUTTON) && sStaticResources.callback != CB2_BagMenuFromStartMenu)) { PlaySE(SE_SELECT); TeachyTvQuitBeginFade(taskId); diff --git a/src/trainer_tower.c b/src/trainer_tower.c index 17f6b9e09..9512e73d1 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -1278,7 +1278,7 @@ void sub_815E720(void) sub_815EC0C(); windowId = AddWindow(gUnknown_847A218); - sub_80F6E9C(); + LoadStdWindowFrameGfx(); DrawStdWindowFrame(windowId, FALSE); AddTextPrinterParameterized(windowId, 2, gUnknown_83FE982, 0x4A, 0, 0xFF, NULL); diff --git a/sym_bss.txt b/sym_bss.txt index a2cf9ccd8..c68826ad9 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -53,19 +53,13 @@ gUnknown_3000E9C: @ 3000E9C gUnknown_3000EA0: @ 3000EA0 .space 0x8 + .align 2 .include "src/script.o" - .align 2 -gUnknown_3000FA4: @ 3000FA4 - .space 0x4 - -gUnknown_3000FA8: @ 3000FA8 - .space 0x1 - -gUnknown_3000FA9: @ 3000FA9 - .space 0x3 - + .include "src/start_menu.o" + .align 2 .include "src/tileset_anims.o" + .align 2 .include "src/sound.o" .align 2 diff --git a/sym_ewram.txt b/sym_ewram.txt index 2abc3b9b5..c709745d5 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -576,33 +576,13 @@ gUnknown_20370DE: @ 20370DE gUnknown_20370E0: @ 20370E0 .space 0x10 -gUnknown_20370F0: @ 20370F0 - .space 0x4 - -gUnknown_20370F4: @ 20370F4 - .space 0x1 - -gUnknown_20370F5: @ 20370F5 - .space 0x1 - -gUnknown_20370F6: @ 20370F6 - .space 0x9 - -gUnknown_20370FF: @ 20370FF - .space 0x1 - -gUnknown_2037100: @ 2037100 - .space 0x1 - -gUnknown_2037101: @ 2037101 - .space 0x3 - -gUnknown_2037104: @ 2037104 - .space 0x4 - + .align 2 + .include "src/start_menu.o" + .align 2 .include "src/tileset_anims.o" + .align 2 .include "src/palette.o" - + .align 2 .include "src/sound.o" .align 2 From 5a20fefab11685494cdddb8ec48e08c04400440f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 14 Oct 2019 10:02:00 -0400 Subject: [PATCH 23/25] Address review comments --- data/strings.s | 1037 +++++++++++++++++++++++++++++++++++----------- src/quest_log.c | 44 +- src/start_menu.c | 12 +- sym_bss.txt | 8 +- sym_ewram.txt | 20 +- 5 files changed, 836 insertions(+), 285 deletions(-) diff --git a/data/strings.s b/data/strings.s index 6efa519e6..52abc36de 100644 --- a/data/strings.s +++ b/data/strings.s @@ -64,34 +64,57 @@ gText_MysteryGift:: @ 8415A97 .string "MYSTERY GIFT$" gText_WirelessAdapterIsNotConnected:: @ 8415AA4 - .string "The Wireless Adapter is not\nconnected.$" + .string "The Wireless Adapter is not\n" + .string "connected.$" gText_MysteryGiftCantBeUsedWhileWirelessAdapterIsAttached:: @ 8415ACB - .string "MYSTERY GIFT can't be used while\nthe Wireless Adapter is attached.$" + .string "MYSTERY GIFT can't be used while\n" + .string "the Wireless Adapter is attached.$" gUnknown_8415B0E:: @ 0x8415B0E - .string "がいぶデ-タにより レポ-トを こうしんします\nしばらく おまちください$" + .string "がいぶデ-タにより レポ-トを こうしんします\n" + .string "しばらく おまちください$" gUnknown_8415B33:: @ 0x8415B33 .string "レポ-トが こうしんされました!$" gUnknown_8415B44:: @ 0x8415B44 - .string "レポ-トが こうしんされました!\pこれいじょう\nレポ-トが かききれないので\lバックアップカ-トリッジを\lこうかんしてください!\pくわしくは\nにんてんどう サ-ビスセンタ- まで\lおといあわせ ください$" + .string "レポ-トが こうしんされました!\p" + .string "これいじょう\n" + .string "レポ-トが かききれないので\l" + .string "バックアップカ-トリッジを\l" + .string "こうかんしてください!\p" + .string "くわしくは\n" + .string "にんてんどう サ-ビスセンタ- まで\l" + .string "おといあわせ ください$" gUnknown_8415BAA:: @ 0x8415BAA - .string "レポ-トの こうしんは\nしっぱいしました!\pバックアップカ-トリッジを\nこうかんしてください!\pくわしくは\nにんてんどう サ-ビスセンタ- まで\lおといあわせ ください$" + .string "レポ-トの こうしんは\n" + .string "しっぱいしました!\p" + .string "バックアップカ-トリッジを\n" + .string "こうかんしてください!\p" + .string "くわしくは\n" + .string "にんてんどう サ-ビスセンタ- まで\l" + .string "おといあわせ ください$" gText_SaveFileCorruptedPrevWillBeLoaded:: @ 8415BFF - .string "The save file is corrupted.\pThe previous save file will be\nloaded.$" + .string "The save file is corrupted.\p" + .string "The previous save file will be\n" + .string "loaded.$" gText_SaveFileHasBeenDeleted:: @ 8415C42 - .string "The save file has been\ndeleted...$" + .string "The save file has been\n" + .string "deleted...$" gText_1MSubCircuitBoardNotInstalled:: @ 8415C64 - .string "The 1M sub-circuit board is\nnot installed.$" + .string "The 1M sub-circuit board is\n" + .string "not installed.$" gTextJP_InternalBatteryHasRunDry:: @ 0x8415C8F - .string "でんちぎれの ために\nとけいが うごかなくなりました\pとけいに かんけいする できごとは おきませんが\nゲ-ムを つづけて あそぶことは できます$" + .string "でんちぎれの ために\n" + .string "とけいが うごかなくなりました\p" + .string "とけいに かんけいする できごとは おきませんが\n" + .string "ゲ-ムを つづけて あそぶことは できます$" gUnknown_8415CD9:: @ 0x8415CD9 .string "しゅじんこう$" @@ -311,20 +334,28 @@ gUnknown_8416008:: @ 8416008 .string "Welcome to the HALL OF FAME!$" gUnknown_8416025:: @ 0x8416025 - .string " みつけた ポケモン {STR_VAR_1}!\nつかまえた ポケモン {STR_VAR_2}!\pオダマキはかせの\nポケモンずかん ひょうか!\pオダマキ“どれどれ\p$" + .string " みつけた ポケモン {STR_VAR_1}!\n" + .string "つかまえた ポケモン {STR_VAR_2}!\p" + .string "オダマキはかせの\n" + .string "ポケモンずかん ひょうか!\p" + .string "オダマキ“どれどれ\p" + .string "$" gUnknown_8416067:: @ 0x8416067 - .string " ここまでの レポ-トを かきしるしています!\nでんげんを きらないでください$" + .string " ここまでの レポ-トを かきしるしています!\n" + .string "でんげんを きらないでください$" .align 2 gUnknown_8416090:: @ 8416090 - .string "The HALL OF FAME data is\ncorrupted.$" + .string "The HALL OF FAME data is\n" + .string "corrupted.$" gUnknown_84160B4:: @ 84160B4 .string "HALL OF FAME No. {STR_VAR_1}$" gUnknown_84160C8:: @ 84160C8 - .string "LEAGUE CHAMPION!\nCONGRATULATIONS!$" + .string "LEAGUE CHAMPION!\n" + .string "CONGRATULATIONS!$" .align 2 gUnknown_84160EC:: @ 84160EC @@ -343,7 +374,8 @@ gUnknown_8416104:: @ 8416104 .string "IDNo.$" gUnknown_841610A:: @ 0x841610A - .string "{HIGHLIGHT WHITE2}{COLOR DARK_GREY}オダマキはかせが ピンチだ!\nポケモンを だして たすけてあげよう!$" + .string "{HIGHLIGHT WHITE2}{COLOR DARK_GREY}オダマキはかせが ピンチだ!\n" + .string "ポケモンを だして たすけてあげよう!$" gUnknown_8416133:: @ 0x8416133 .string "{HIGHLIGHT WHITE2}{COLOR DARK_GREY}このポケモンにしますか?$" @@ -352,7 +384,9 @@ gUnknown_8416146:: @ 0x8416146 .string "ポケモン$" gText_SaveError_PleaseExchangeBackupMemory:: @ 841614B - .string "Save error.\pPlease exchange the\nbackup memory.$" + .string "Save error.\p" + .string "Please exchange the\n" + .string "backup memory.$" gSaveStatName_Player:: @ 841617A .string "PLAYER$" @@ -542,7 +576,8 @@ gText_IsSelected:: @ 8416301 .string "selected.$" gUnknown_841630F:: @ 841630F - .string "You can't write\nMAIL here.$" + .string "You can't write\n" + .string "MAIL here.$" gText_ThereIsNoPokemon:: @ 841632A .string "There is no\n" @@ -556,43 +591,58 @@ gText_ItemCantBeHeld:: @ 841635E .string "The {STR_VAR_1} can't be held.$" gText_TheStrVar1CantBeHeldHere:: @ 8416374 - .string "The {STR_VAR_1} can't be held\nhere.$" + .string "The {STR_VAR_1} can't be held\n" + .string "here.$" gUnknown_841638F:: @ 841638F - .string "Deposit how many\n{STR_VAR_1}(s)?$" + .string "Deposit how many\n" + .string "{STR_VAR_1}(s)?$" gUnknown_84163A7:: @ 84163A7 - .string "Deposited {STR_VAR_2}\n{STR_VAR_1}(s).$" + .string "Deposited {STR_VAR_2}\n" + .string "{STR_VAR_1}(s).$" gUnknown_84163BB:: @ 84163BB - .string "There's no room to\nstore items.$" + .string "There's no room to\n" + .string "store items.$" gText_TossOutHowManyStrVar1s:: @ 84163DB - .string "Toss out how many\n{STR_VAR_1}(s)?$" + .string "Toss out how many\n" + .string "{STR_VAR_1}(s)?$" gText_ThrewAwayStrVar2StrVar1s:: @ 84163F4 - .string "Threw away {STR_VAR_2}\n{STR_VAR_1}(s).$" + .string "Threw away {STR_VAR_2}\n" + .string "{STR_VAR_1}(s).$" gText_ThrowAwayStrVar2OfThisItemQM:: @ 8416409 - .string "Throw away {STR_VAR_2} of\nthis item?$" + .string "Throw away {STR_VAR_2} of\n" + .string "this item?$" gUnknown_8416425:: @ 8416425 - .string "OAK: {PLAYER}!\nThis isn't the time to use that!{PAUSE_UNTIL_PRESS}$" + .string "OAK: {PLAYER}!\n" + .string "This isn't the time to use that!{PAUSE_UNTIL_PRESS}$" gUnknown_8416451:: @ 8416451 .string "You can't dismount your BIKE here.{PAUSE_UNTIL_PRESS}$" gText_ItemfinderResponding:: @ 8416476 - .string "Huh?\nThe ITEMFINDER's responding!\pThere's an item buried around here!{PAUSE_UNTIL_PRESS}$" + .string "Huh?\n" + .string "The ITEMFINDER's responding!\p" + .string "There's an item buried around here!{PAUSE_UNTIL_PRESS}$" gText_ItemfinderShakingWildly:: @ 84164BE - .string "Oh!\nThe ITEMFINDER's shaking wildly!\pThere's an item buried underfoot!\p‥ ‥ ‥ ‥ ‥ ‥{PAUSE_UNTIL_PRESS}$" + .string "Oh!\n" + .string "The ITEMFINDER's shaking wildly!\p" + .string "There's an item buried underfoot!\p" + .string "‥ ‥ ‥ ‥ ‥ ‥{PAUSE_UNTIL_PRESS}$" gText_NopeTheresNoResponse:: @ 8416513 - .string "‥ ‥ ‥ ‥Nope!\nThere's no response.{PAUSE_UNTIL_PRESS}$" + .string "‥ ‥ ‥ ‥Nope!\n" + .string "There's no response.{PAUSE_UNTIL_PRESS}$" gUnknown_8416537:: @ 8416537 - .string "Your COINS:\n{STR_VAR_1}{PAUSE_UNTIL_PRESS}$" + .string "Your COINS:\n" + .string "{STR_VAR_1}{PAUSE_UNTIL_PRESS}$" gUnknown_8416548:: @ 0x8416548 .string "わざマシンを きどうした!$" @@ -601,19 +651,28 @@ gUnknown_8416556:: @ 0x8416556 .string "ひでんマシンを きどうした!$" gUnknown_8416565:: @ 0x8416565 - .string "なかには {STR_VAR_1}が\nきろくされていた!\p{STR_VAR_1}を\nポケモンに おぼえさせますか?$" + .string "なかには {STR_VAR_1}が\n" + .string "きろくされていた!\p" + .string "{STR_VAR_1}を\n" + .string "ポケモンに おぼえさせますか?$" gUnknown_841658C:: @ 841658C - .string "{PLAYER} used the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}$" + .string "{PLAYER} used the\n" + .string "{STR_VAR_2}.{PAUSE_UNTIL_PRESS}$" gUnknown_841659E:: @ 841659E - .string "But the effects of a REPEL\nlingered from earlier.{PAUSE_UNTIL_PRESS}$" + .string "But the effects of a REPEL\n" + .string "lingered from earlier.{PAUSE_UNTIL_PRESS}$" gUnknown_84165D2:: @ 84165D2 - .string "{PLAYER} used the\n{STR_VAR_2}.\pWild POKéMON will be lured.{PAUSE_UNTIL_PRESS}$" + .string "{PLAYER} used the\n" + .string "{STR_VAR_2}.\p" + .string "Wild POKéMON will be lured.{PAUSE_UNTIL_PRESS}$" gUnknown_8416600:: @ 8416600 - .string "{PLAYER} used the\n{STR_VAR_2}.\pWild POKéMON will be repelled.{PAUSE_UNTIL_PRESS}$" + .string "{PLAYER} used the\n" + .string "{STR_VAR_2}.\p" + .string "Wild POKéMON will be repelled.{PAUSE_UNTIL_PRESS}$" gUnknown_8416631:: @ 8416631 .string "The BOX is full.{PAUSE_UNTIL_PRESS}$" @@ -658,7 +717,8 @@ gText_BerryPouch:: @ 841670A .string "BERRY POUCH$" gText_TheBerryPouchWillBePutAway:: @ 8416716 - .string "The BERRY POUCH will be\nput away.$" + .string "The BERRY POUCH will be\n" + .string "put away.$" gUnknown_8416738:: @ 0x8416738 .string "BUY$" @@ -676,43 +736,54 @@ gUnknown_8416757:: @ 8416757 .string "Quit shopping.$" gUnknown_8416766:: @ 8416766 - .string "{STR_VAR_1}? Certainly.\nHow many would you like?$" + .string "{STR_VAR_1}? Certainly.\n" + .string "How many would you like?$" gUnknown_841678E:: @ 841678E - .string "{STR_VAR_1}, and you want {STR_VAR_2}.\nThat will be ¥{STR_VAR_3}. Okay?$" + .string "{STR_VAR_1}, and you want {STR_VAR_2}.\n" + .string "That will be ¥{STR_VAR_3}. Okay?$" gUnknown_84167BB:: @ 0x84167BB - .string "{STR_VAR_1} だね!\n{STR_VAR_2}¥ だけど かうかい?$" + .string "{STR_VAR_1} だね!\n" + .string "{STR_VAR_2}¥ だけど かうかい?$" gUnknown_84167D0:: @ 0x84167D0 - .string "{STR_VAR_1} ですね!\n{STR_VAR_2}¥ だけど かいますか?$" + .string "{STR_VAR_1} ですね!\n" + .string "{STR_VAR_2}¥ だけど かいますか?$" gUnknown_84167E7:: @ 84167E7 - .string "Here you are!\nThank you!$" + .string "Here you are!\n" + .string "Thank you!$" gUnknown_8416800:: @ 0x8416800 - .string "どうも ありがとう!\nじたくの パソコンに おくって おきますね!$" + .string "どうも ありがとう!\n" + .string "じたくの パソコンに おくって おきますね!$" gUnknown_8416822:: @ 0x8416822 - .string "どうも ありがとう!\nじたくの パソコンに おくって おくね!$" + .string "どうも ありがとう!\n" + .string "じたくの パソコンに おくって おくね!$" gUnknown_8416842:: @ 8416842 .string "You don't have enough money.{PAUSE_UNTIL_PRESS}$" gUnknown_8416861:: @ 8416861 - .string "You have no more room for this\nitem.{PAUSE_UNTIL_PRESS}$" + .string "You have no more room for this\n" + .string "item.{PAUSE_UNTIL_PRESS}$" gUnknown_8416888:: @ 0x8416888 - .string "{STR_VAR_1}を\nいれる ばしょが いっぱいです{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1}を\n" + .string "いれる ばしょが いっぱいです{PAUSE_UNTIL_PRESS}$" gUnknown_841689E:: @ 841689E .string "Is there anything else I can do?$" gUnknown_84168BF:: @ 0x84168BF - .string "その ほかに\nなにか ちからに なれることは?$" + .string "その ほかに\n" + .string "なにか ちからに なれることは?$" gUnknown_84168D7:: @ 0x84168D7 - .string "プレミアボ-ル 1コ\nおまけ しておきますね!{PAUSE_UNTIL_PRESS}$" + .string "プレミアボ-ル 1コ\n" + .string "おまけ しておきますね!{PAUSE_UNTIL_PRESS}$" gText_OhNoICantBuyThat:: @ 84168F1 .string "{STR_VAR_1}? Oh, no.\n" @@ -727,7 +798,8 @@ gText_ICanPayThisMuch_WouldThatBeOkay:: @ 8416936 .string "Would that be okay?$" gText_TurnedOverItemsWorthYen:: @ 8416959 - .string "Turned over the {STR_VAR_1}シSス\nworth ¥{STR_VAR_3}.$" + .string "Turned over the {STR_VAR_1}シSス\n" + .string "worth ¥{STR_VAR_3}.$" gText_PokedollarVar1:: @ 841697A .string "¥{STR_VAR_1}$" @@ -788,34 +860,43 @@ gUnknown_84169F8:: @ 84169F8 .string "that POKéMON.{PAUSE_UNTIL_PRESS}$" gUnknown_8416A1E:: @ 8416A1E - .string "{STR_VAR_1} can't be switched\nout!{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} can't be switched\n" + .string "out!{PAUSE_UNTIL_PRESS}$" gUnknown_8416A3A:: @ 8416A3A - .string "{STR_VAR_1} is already\nin battle!{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} is already\n" + .string "in battle!{PAUSE_UNTIL_PRESS}$" gUnknown_8416A55:: @ 8416A55 - .string "{STR_VAR_1} has already been\nselected.{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} has already been\n" + .string "selected.{PAUSE_UNTIL_PRESS}$" gUnknown_8416A75:: @ 8416A75 - .string "{STR_VAR_1} has no energy\nleft to battle!{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} has no energy\n" + .string "left to battle!{PAUSE_UNTIL_PRESS}$" gUnknown_8416A98:: @ 8416A98 - .string "You can't switch {STR_VAR_1}'s\nPOKéMON with one of yours!{PAUSE_UNTIL_PRESS}$" + .string "You can't switch {STR_VAR_1}'s\n" + .string "POKéMON with one of yours!{PAUSE_UNTIL_PRESS}$" gUnknown_8416ACB:: @ 8416ACB .string "An EGG can't battle!{PAUSE_UNTIL_PRESS}$" gUnknown_8416AE2:: @ 8416AE2 - .string "This can't be used until a new\nBADGE is obtained.{PAUSE_UNTIL_PRESS}$" + .string "This can't be used until a new\n" + .string "BADGE is obtained.{PAUSE_UNTIL_PRESS}$" gUnknown_8416B16:: @ 8416B16 - .string "No more than three POKéMON\nmay enter.{PAUSE_UNTIL_PRESS}$" + .string "No more than three POKéMON\n" + .string "may enter.{PAUSE_UNTIL_PRESS}$" gUnknown_8416B3E:: @ 8416B3E - .string "No more than two POKéMON\nmay enter.{PAUSE_UNTIL_PRESS}$" + .string "No more than two POKéMON\n" + .string "may enter.{PAUSE_UNTIL_PRESS}$" gUnknown_8416B64:: @ 8416B64 - .string "Send the removed MAIL to\nyour PC?$" + .string "Send the removed MAIL to\n" + .string "your PC?$" gUnknown_8416B86:: @ 8416B86 .string "The MAIL was sent to your PC.{PAUSE_UNTIL_PRESS}$" @@ -824,71 +905,101 @@ gUnknown_8416BA6:: @ 8416BA6 .string "Your PC's MAILBOX is full.{PAUSE_UNTIL_PRESS}$" gUnknown_8416BC3:: @ 8416BC3 - .string "If the MAIL is removed, the\nmessage will be lost. Okay?$" + .string "If the MAIL is removed, the\n" + .string "message will be lost. Okay?$" gUnknown_8416BFB:: @ 8416BFB - .string "MAIL must be removed before\nholding an item.{PAUSE_UNTIL_PRESS}$" + .string "MAIL must be removed before\n" + .string "holding an item.{PAUSE_UNTIL_PRESS}$" gUnknown_8416C2A:: @ 8416C2A - .string "{STR_VAR_1} was given the\n{STR_VAR_2} to hold.{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} was given the\n" + .string "{STR_VAR_2} to hold.{PAUSE_UNTIL_PRESS}$" gUnknown_8416C49:: @ 8416C49 - .string "{STR_VAR_1} is already holding\none {STR_VAR_2}.\pWould you like to switch the\ntwo items?$" + .string "{STR_VAR_1} is already holding\n" + .string "one {STR_VAR_2}.\p" + .string "Would you like to switch the\n" + .string "two items?$" gUnknown_8416C8F:: @ 8416C8F - .string "{STR_VAR_1} isn't holding\nanything.{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} isn't holding\n" + .string "anything.{PAUSE_UNTIL_PRESS}$" gUnknown_8416CAC:: @ 8416CAC - .string "Received the {STR_VAR_2}\nfrom {STR_VAR_1}.{PAUSE_UNTIL_PRESS}$" + .string "Received the {STR_VAR_2}\n" + .string "from {STR_VAR_1}.{PAUSE_UNTIL_PRESS}$" gUnknown_8416CC7:: @ 8416CC7 - .string "MAIL was taken from the\nPOKéMON.{PAUSE_UNTIL_PRESS}$" + .string "MAIL was taken from the\n" + .string "POKéMON.{PAUSE_UNTIL_PRESS}$" gUnknown_8416CEA:: @ 8416CEA - .string "The {STR_VAR_2} was taken and\nreplaced with the {STR_VAR_1}.{PAUSE_UNTIL_PRESS}$" + .string "The {STR_VAR_2} was taken and\n" + .string "replaced with the {STR_VAR_1}.{PAUSE_UNTIL_PRESS}$" gUnknown_8416D17:: @ 8416D17 - .string "This POKéMON is holding an\nitem. It cannot hold MAIL.{PAUSE_UNTIL_PRESS}$" + .string "This POKéMON is holding an\n" + .string "item. It cannot hold MAIL.{PAUSE_UNTIL_PRESS}$" gUnknown_8416D4F:: @ 8416D4F - .string "MAIL was transferred from\nthe MAILBOX.{PAUSE_UNTIL_PRESS}$" + .string "MAIL was transferred from\n" + .string "the MAILBOX.{PAUSE_UNTIL_PRESS}$" gUnknown_8416D78:: @ 8416D78 - .string "The {STR_VAR_1} is full. The POKéMON's\nitem could not be removed.{PAUSE_UNTIL_PRESS}$" + .string "The {STR_VAR_1} is full. The POKéMON's\n" + .string "item could not be removed.{PAUSE_UNTIL_PRESS}$" gUnknown_8416DB3:: @ 8416DB3 - .string "{STR_VAR_1} learned\n{STR_VAR_2}!$" + .string "{STR_VAR_1} learned\n" + .string "{STR_VAR_2}!$" gUnknown_8416DC2:: @ 8416DC2 - .string "{STR_VAR_1} and {STR_VAR_2}\nare not compatible.\p{STR_VAR_2} can't be\nlearned.{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} and {STR_VAR_2}\n" + .string "are not compatible.\p" + .string "{STR_VAR_2} can't be\n" + .string "learned.{PAUSE_UNTIL_PRESS}$" gUnknown_8416DF7:: @ 8416DF7 - .string "{STR_VAR_1} wants to learn the\nmove {STR_VAR_2}.\pHowever, {STR_VAR_1} already\nknows four moves.\pShould a move be deleted and\nreplaced with {STR_VAR_2}?$" + .string "{STR_VAR_1} wants to learn the\n" + .string "move {STR_VAR_2}.\p" + .string "However, {STR_VAR_1} already\n" + .string "knows four moves.\p" + .string "Should a move be deleted and\n" + .string "replaced with {STR_VAR_2}?$" gUnknown_8416E6B:: @ 8416E6B - .string "Stop trying to teach\n{STR_VAR_2}?$" + .string "Stop trying to teach\n" + .string "{STR_VAR_2}?$" gUnknown_8416E84:: @ 8416E84 - .string "{STR_VAR_1} did not learn the\nmove {STR_VAR_2}.{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} did not learn the\n" + .string "move {STR_VAR_2}.{PAUSE_UNTIL_PRESS}$" gUnknown_8416EA4:: @ 8416EA4 .string "Which move should be forgotten?{PAUSE_UNTIL_PRESS}$" gUnknown_8416EC6:: @ 8416EC6 - .string "1, {PAUSE 0x0F}2, and{PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}{PLAY_SE SE_KON}Poof!\p{STR_VAR_1} forgot how to\nuse {STR_VAR_2}.\pAnd...{PAUSE_UNTIL_PRESS}$" + .string "1, {PAUSE 0x0F}2, and{PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}{PLAY_SE SE_KON}Poof!\p" + .string "{STR_VAR_1} forgot how to\n" + .string "use {STR_VAR_2}.\p" + .string "And...{PAUSE_UNTIL_PRESS}$" gUnknown_8416F10:: @ 8416F10 - .string "{STR_VAR_1} already knows\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} already knows\n" + .string "{STR_VAR_2}.{PAUSE_UNTIL_PRESS}$" gUnknown_8416F27:: @ 8416F27 .string "{STR_VAR_1}'s HP was restored\n" .string "by {STR_VAR_2} point(s).{PAUSE_UNTIL_PRESS}$" gUnknown_8416F4E:: @ 8416F4E - .string "{STR_VAR_1} was cured of its\npoisoning.{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} was cured of its\n" + .string "poisoning.{PAUSE_UNTIL_PRESS}$" gUnknown_8416F6F:: @ 8416F6F - .string "{STR_VAR_1} was cured of\nparalysis.{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} was cured of\n" + .string "paralysis.{PAUSE_UNTIL_PRESS}$" gUnknown_8416F8C:: @ 8416F8C .string "{STR_VAR_1} woke up.{PAUSE_UNTIL_PRESS}$" @@ -903,7 +1014,8 @@ gUnknown_8416FC7:: @ 8416FC7 .string "PP was restored.{PAUSE_UNTIL_PRESS}$" gUnknown_8416FDA:: @ 0x8416FDA - .string "{STR_VAR_1}は\nげんきを とりもどした!{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1}は\n" + .string "げんきを とりもどした!{PAUSE_UNTIL_PRESS}$" gUnknown_8416FED:: @ 8416FED .string "{STR_VAR_1} became healthy.{PAUSE_UNTIL_PRESS}$" @@ -912,39 +1024,49 @@ gUnknown_8417002:: @ 8417002 .string "{STR_VAR_1}'s PP increased.{PAUSE_UNTIL_PRESS}$" gUnknown_8417017:: @ 8417017 - .string "{STR_VAR_1} was elevated to\nLv. {STR_VAR_2}.$" + .string "{STR_VAR_1} was elevated to\n" + .string "Lv. {STR_VAR_2}.$" gUnknown_8417032:: @ 8417032 - .string "{STR_VAR_1}'s base {STR_VAR_2}\nstat was raised.{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1}'s base {STR_VAR_2}\n" + .string "stat was raised.{PAUSE_UNTIL_PRESS}$" gUnknown_8417052:: @ 8417052 - .string "{STR_VAR_1} snapped out of its\nconfusion.{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} snapped out of its\n" + .string "confusion.{PAUSE_UNTIL_PRESS}$" gUnknown_8417075:: @ 8417075 - .string "{STR_VAR_1} got over its\ninfatuation.{PAUSE_UNTIL_PRESS}$" + .string "{STR_VAR_1} got over its\n" + .string "infatuation.{PAUSE_UNTIL_PRESS}$" gUnknown_8417094:: @ 0x8417094 - .string "That's your only\nPOKéMON for battle.$" + .string "That's your only\n" + .string "POKéMON for battle.$" .align 2 gUnknown_84170BC:: @ 84170BC - .string "That POKéMON can't be traded\nnow.$" + .string "That POKéMON can't be traded\n" + .string "now.$" .align 2 gUnknown_84170E0:: @ 84170E0 .string "An EGG can't be traded now.$" gUnknown_84170FC:: @ 0x84170FC - .string "The other TRAINER's POKéMON\ncan't be traded now.$" + .string "The other TRAINER's POKéMON\n" + .string "can't be traded now.$" gUnknown_841712D:: @ 0x841712D - .string " The other TRAINER can't accept\nthat POKéMON now.$" + .string " The other TRAINER can't accept\n" + .string "that POKéMON now.$" gUnknown_8417161:: @ 0x8417161 - .string " You can't trade with that\nTRAINER now.$" + .string " You can't trade with that\n" + .string "TRAINER now.$" gUnknown_841718B:: @ 0x841718B - .string " That isn't the type of POKéMON\nthat the other TRAINER wants.$" + .string " That isn't the type of POKéMON\n" + .string "that the other TRAINER wants.$" gUnknown_84171C9:: @ 0x84171C9 .string " That isn't an EGG.$" @@ -1058,10 +1180,17 @@ gUnknown_841744F:: @ 0x841744F .string "LEARNED$" gUnknown_8417457:: @ 8417457 - .string "OAK: It's important to get to know\nyour POKéMON thoroughly.\p$" + .string "OAK: It's important to get to know\n" + .string "your POKéMON thoroughly.\p" + .string "$" gUnknown_8417494:: @ 8417494 - .string "This is a list of your POKéMON,\n{PLAYER}.\pOpen this to check the skills\nand moves of your POKéMON.\pYou also choose POKéMON here if\nyou want to use an item on one.{PAUSE_UNTIL_PRESS}$" + .string "This is a list of your POKéMON,\n" + .string "{PLAYER}.\p" + .string "Open this to check the skills\n" + .string "and moves of your POKéMON.\p" + .string "You also choose POKéMON here if\n" + .string "you want to use an item on one.{PAUSE_UNTIL_PRESS}$" gUnknown_8417533:: @ 0x8417533 .string "Cut a tree or grass.$" @@ -1100,10 +1229,12 @@ gUnknown_84175FB:: @ 0x84175FB .string "Return to a healing spot.$" gUnknown_8417615:: @ 8417615 - .string "Want to escape from here and return\nto {STR_VAR_1}?$" + .string "Want to escape from here and return\n" + .string "to {STR_VAR_1}?$" gUnknown_8417640:: @ 8417640 - .string "Want to return to the healing spot\nused last in {STR_VAR_1}?$" + .string "Want to return to the healing spot\n" + .string "used last in {STR_VAR_1}?$" gUnknown_8417674:: @ 8417674 .string "ATTACK$" @@ -1163,7 +1294,8 @@ gText_TakeOutItemsFromThePC:: @ 0x8417741 .string "Take out items from the PC.$" gUnknown_841775D:: @ 0x841775D - .string "パソコンに あずけている\nどうぐを すてます$" + .string "パソコンに あずけている\n" + .string "どうぐを すてます$" gText_ThereAreNoItems:: @ 8417774 .string "There are no items.{PAUSE_UNTIL_PRESS}$" @@ -1193,16 +1325,19 @@ gText_TheresNoMailHere:: @ 84177EE .string "There's no MAIL here.{PAUSE_UNTIL_PRESS}$" gText_WhatWouldYouLikeToDoWithPlayersMail:: @ 8417806 - .string "What would you like to do with\n{STR_VAR_1}'s MAIL?$" + .string "What would you like to do with\n" + .string "{STR_VAR_1}'s MAIL?$" gText_MessageWillBeLost:: @ 8417830 - .string "The message will be lost.\nIs that okay?$" + .string "The message will be lost.\n" + .string "Is that okay?$" gText_BagIsFull:: @ 8417858 .string "The BAG is full.{PAUSE_UNTIL_PRESS}$" gText_MailReturnedToBagMessageErased:: @ 841786B - .string "The MAIL was returned to the BAG\nwith its message erased.{PAUSE_UNTIL_PRESS}$" + .string "The MAIL was returned to the BAG\n" + .string "with its message erased.{PAUSE_UNTIL_PRESS}$" gText_WithdrawItem:: @ 84178A7 .string "WITHDRAW\n" @@ -2059,16 +2194,20 @@ gUnknown_84185A5:: @ 0x84185A5 .string "SEE YA!$" gUnknown_84185AD:: @ 0x84185AD - .string "You can withdraw a POKéMON if you\nhave any in a BOX.$" + .string "You can withdraw a POKéMON if you\n" + .string "have any in a BOX.$" gUnknown_84185E2:: @ 0x84185E2 - .string "You can deposit your party\nPOKéMON in any BOX.$" + .string "You can deposit your party\n" + .string "POKéMON in any BOX.$" gUnknown_8418611:: @ 0x8418611 - .string "You can move POKéMON that are\nstored in any BOX.$" + .string "You can move POKéMON that are\n" + .string "stored in any BOX.$" gUnknown_8418642:: @ 0x8418642 - .string "You can move items held by any\nPOKéMON in a BOX or your party.$" + .string "You can move items held by any\n" + .string "POKéMON in a BOX or your party.$" gUnknown_8418681:: @ 0x8418681 .string "See you later!$" @@ -2251,31 +2390,40 @@ gUnknown_8418B17:: @ 0x8418B17 .string "って$" gUnknown_8418B1A:: @ 0x8418B1A - .string "\nそう おもわない?$" + .string "\n" + .string "そう おもわない?$" gUnknown_8418B25:: @ 0x8418B25 - .string "たびに でたいな-\nどこか いい ところ しらない?$" + .string "たびに でたいな-\n" + .string "どこか いい ところ しらない?$" gUnknown_8418B40:: @ 0x8418B40 - .string "120しょくの クレヨン かったんだ-\nいいでしょう?$" + .string "120しょくの クレヨン かったんだ-\n" + .string "いいでしょう?$" gUnknown_8418B5C:: @ 0x8418B5C - .string "しゃぼんだまに のって とべるように\nならないかな-$" + .string "しゃぼんだまに のって とべるように\n" + .string "ならないかな-$" gUnknown_8418B77:: @ 0x8418B77 - .string "すなはまに かいた もじは\nすぐに きえちゃうのが かなしいよね-$" + .string "すなはまに かいた もじは\n" + .string "すぐに きえちゃうのが かなしいよね-$" gUnknown_8418B99:: @ 0x8418B99 - .string "うみの そこって どうなってるのかな-\nいちどで いいから みて みたいな-$" + .string "うみの そこって どうなってるのかな-\n" + .string "いちどで いいから みて みたいな-$" gUnknown_8418BC0:: @ 0x8418BC0 - .string "ゆうやけを みると\nウチに かえりたく ならない?$" + .string "ゆうやけを みると\n" + .string "ウチに かえりたく ならない?$" gUnknown_8418BDA:: @ 0x8418BDA - .string "みどりの しばで ねころがると\nきもちいいよね-$" + .string "みどりの しばで ねころがると\n" + .string "きもちいいよね-$" gUnknown_8418BF3:: @ 0x8418BF3 - .string "ひみつきち って いいよね!\nなんか わくわく してこない?$" + .string "ひみつきち って いいよね!\n" + .string "なんか わくわく してこない?$" gUnknown_8418C12:: @ 0x8418C12 .string "ポケモン リ-グ$" @@ -2311,7 +2459,11 @@ gUnknown_8418C6F:: @ 0x8418C6F .string "もう これいじょう たべない みたい‥$" gUnknown_8418C83:: @ 8418C83 - .string "Save failed.\nChecking the backup memory‥\nPlease wait.\n“Time required:\nabout 1 minute”$" + .string "Save failed.\n" + .string "Checking the backup memory‥\n" + .string "Please wait.\n" + .string "“Time required:\n" + .string "about 1 minute”$" gUnknown_8418CD9:: @ 8418CD9 .string "The backup memory is damaged or\n" @@ -2321,16 +2473,22 @@ gUnknown_8418CD9:: @ 8418CD9 .string "“Please press the A Button.”$" gUnknown_8418D70:: @ 8418D70 - .string "{COLOR RED}“このまま ぼうけんをつづけることは できません\nタイトルに もどります”$" + .string "{COLOR RED}“このまま ぼうけんをつづけることは できません\n" + .string "タイトルに もどります”$" gUnknown_8418D99:: @ 0x8418D99 - .string "けんさが しゅうりょうしました!\nもういちど レポ-トを かきこみます\nしばらくおまちください$" + .string "けんさが しゅうりょうしました!\n" + .string "もういちど レポ-トを かきこみます\n" + .string "しばらくおまちください$" gUnknown_8418DC9:: @ 0x8418DC9 - .string "レポ-トの かきこみは しゅうりょうしました\n{COLOR RED}“このまま ぼうけんをつづけることは できません\nタイトルに もどります”$" + .string "レポ-トの かきこみは しゅうりょうしました\n" + .string "{COLOR RED}“このまま ぼうけんをつづけることは できません\n" + .string "タイトルに もどります”$" gUnknown_8418E09:: @ 8418E09 - .string "Save completed.\n“Please press the A Button.”$" + .string "Save completed.\n" + .string "“Please press the A Button.”$" gUnknown_8418E36:: @ 0x8418E36 .string "れんらくせん$" @@ -2590,34 +2748,49 @@ gUnknown_84199AB:: @ 84199AB .string "{UNKNOWN_F7 0x02} at {EXTRA_LV} {UNKNOWN_F7 0x01}).$" gUnknown_84199F4:: @ 84199F4 - .string "{UNKNOWN_F7 0x00} nature. Apparently met in\na fateful encounter シhatched:\n{UNKNOWN_F7 0x02} at {EXTRA_LV} {UNKNOWN_F7 0x01}ス.$" + .string "{UNKNOWN_F7 0x00} nature. Apparently met in\n" + .string "a fateful encounter シhatched:\n" + .string "{UNKNOWN_F7 0x02} at {EXTRA_LV} {UNKNOWN_F7 0x01}ス.$" gUnknown_8419A3D:: @ 0x8419A3D - .string "An odd POKéMON EGG found by the\nDAY-CARE couple.$" + .string "An odd POKéMON EGG found by the\n" + .string "DAY-CARE couple.$" gUnknown_8419A6E:: @ 0x8419A6E - .string "An odd POKéMON EGG obtained from\nthe traveling man.$" + .string "An odd POKéMON EGG obtained from\n" + .string "the traveling man.$" gUnknown_8419AA2:: @ 0x8419AA2 - .string "A wondrously peculiar POKéMON EGG\nobtained at a nice place.$" + .string "A wondrously peculiar POKéMON EGG\n" + .string "obtained at a nice place.$" gUnknown_8419ADE:: @ 0x8419ADE - .string "An odd POKéMON EGG obtained from\nan old woman at the SPA.$" + .string "An odd POKéMON EGG obtained from\n" + .string "an old woman at the SPA.$" gUnknown_8419B18:: @ 0x8419B18 - .string "A peculiar POKéMON EGG obtained\nin a trade.$" + .string "A peculiar POKéMON EGG obtained\n" + .string "in a trade.$" gUnknown_8419B44:: @ 0x8419B44 - .string "It looks like this\nEGG will take a\nlong time to hatch.$" + .string "It looks like this\n" + .string "EGG will take a\n" + .string "long time to hatch.$" gUnknown_8419B7B:: @ 0x8419B7B - .string "What will hatch\nfrom this? It will\ntake some time.$" + .string "What will hatch\n" + .string "from this? It will\n" + .string "take some time.$" gUnknown_8419BAE:: @ 0x8419BAE - .string "It occasionally\nmoves. It should\nhatch soon.$" + .string "It occasionally\n" + .string "moves. It should\n" + .string "hatch soon.$" gUnknown_8419BDB:: @ 0x8419BDB - .string "It's making sounds.\nIt's almost ready\nto hatch!$" + .string "It's making sounds.\n" + .string "It's almost ready\n" + .string "to hatch!$" gUnknown_8419C0B:: @ 8419C0B .string "a trade$" @@ -2665,7 +2838,8 @@ gUnknown_8419CA9:: @ 8419CA9 .string "{KEYGFX_DPAD_UP_DOWN}PICK {KEYGFX_A_BUTTON}DELETE$" gUnknown_8419CB9:: @ 8419CB9 - .string "HM moves can't be\nforgotten now.$" + .string "HM moves can't be\n" + .string "forgotten now.$" gUnknown_8419CDA:: @ 8419CDA .string "NAME: $" @@ -2722,7 +2896,8 @@ gUnknown_8419D7D:: @ 8419D7D .string "BERRY CRUSH$" gUnknown_8419D89:: @ 8419D89 - .string "Waiting for the other TRAINER to\nfinish reading your TRAINER CARD.$" + .string "Waiting for the other TRAINER to\n" + .string "finish reading your TRAINER CARD.$" gUnknown_8419DCC:: @ 8419DCC .string "OPTION$" @@ -2794,7 +2969,8 @@ gUnknown_8419E57:: @ 8419E57 .string "{KEYGFX_DPAD_UP_DOWN}PICK {KEYGFX_DPAD_LEFT_RIGHT}SWITCH {KEYGFX_A_BUTTON}{KEYGFX_B_BUTTON}CANCEL$" gUnknown_8419E72:: @ 0x8419E72 - .string "RTCを リセットします\nAで けってい Bで キャンセル$" + .string "RTCを リセットします\n" + .string "Aで けってい Bで キャンセル$" gUnknown_8419E90:: @ 0x8419E90 .string "げんざいの ゲ-ムない じかん$" @@ -2806,19 +2982,23 @@ gUnknown_8419EB0:: @ 0x8419EB0 .string "じかんを さいせってい してください$" gUnknown_8419EC3:: @ 0x8419EC3 - .string "じかんを さいせってい しました!\nレポ-トを かいています おまちください$" + .string "じかんを さいせってい しました!\n" + .string "レポ-トを かいています おまちください$" gUnknown_8419EEA:: @ 0x8419EEA .string "レポ-トを かきこみました!$" gUnknown_8419EF9:: @ 0x8419EF9 - .string "レポ-トの かきこみに\nしっぱい しました‥$" + .string "レポ-トの かきこみに\n" + .string "しっぱい しました‥$" gUnknown_8419F10:: @ 0x8419F10 - .string "レポ-トが ないので\nじかんの せっていは できません!$" + .string "レポ-トが ないので\n" + .string "じかんの せっていは できません!$" gUnknown_8419F2D:: @ 0x8419F2D - .string "ゲ-ムない じかんの しゅうせい システムが\nつかえる ように なりました!$" + .string "ゲ-ムない じかんの しゅうせい システムが\n" + .string "つかえる ように なりました!$" gText_SavingDontTurnOffThePower2:: @ 8419F54 .string "SAVING…\n" @@ -2858,13 +3038,15 @@ gStartMenuDesc_Retire:: @ 841A111 // Retire .include "data/text/quest_log.inc" gUnknown_841B285:: @ 841B285 - .string " was used on\n$" + .string " was used on\n" + .string "$" gUnknown_841B293:: @ 841B293 .string ".$" gUnknown_841B295:: @ 841B295 - .string "'s level rose to\n$" + .string "'s level rose to\n" + .string "$" gUnknown_841B2A7:: @ 841B2A7 .string ".$" @@ -2900,22 +3082,28 @@ gUnknown_841B2F1:: @ 841B2F1 .string "2, and ‥ ‥ ‥ $" gUnknown_841B2FF:: @ 0x841B2FF - .string "Poof!\p$" + .string "Poof!\p" + .string "$" gUnknown_841B306:: @ 841B306 - .string "{UNKNOWN_F7 0x00} forgot\n{UNKNOWN_F7 0x01}.\p$" + .string "{UNKNOWN_F7 0x00} forgot\n" + .string "{UNKNOWN_F7 0x01}.\p" + .string "$" gUnknown_841B315:: @ 841B315 - .string "And‥\p$" + .string "And‥\p" + .string "$" gUnknown_841B31B:: @ 841B31B - .string "Machine set!\p$" + .string "Machine set!\p" + .string "$" gUnknown_841B329:: @ 841B329 .string "Huh?$" gUnknown_841B32E:: @ 841B32E - .string "{UNKNOWN_F7 0x00} learned\n{UNKNOWN_F7 0x01}!$" + .string "{UNKNOWN_F7 0x00} learned\n" + .string "{UNKNOWN_F7 0x01}!$" gUnknown_841B33D:: @ 0x841B33D .string "UPPER$" @@ -2963,22 +3151,27 @@ gUnknown_841B3E9:: @ 0x841B3E9 .string "Exiting the chat‥$" gUnknown_841B3FB:: @ 0x841B3FB - .string "The LEADER, {UNKNOWN_F7 0x00}, has\nleft, ending the chat.$" + .string "The LEADER, {UNKNOWN_F7 0x00}, has\n" + .string "left, ending the chat.$" gUnknown_841B426:: @ 0x841B426 - .string "The registered text has been changed.\nIs it okay to save the game?$" + .string "The registered text has been changed.\n" + .string "Is it okay to save the game?$" gUnknown_841B469:: @ 0x841B469 - .string "There is already a saved file.\nIs it okay to overwrite it?$" + .string "There is already a saved file.\n" + .string "Is it okay to overwrite it?$" gUnknown_841B4A4:: @ 0x841B4A4 - .string "SAVING‥\nDON'T TURN OFF THE POWER.$" + .string "SAVING‥\n" + .string "DON'T TURN OFF THE POWER.$" gUnknown_841B4C6:: @ 0x841B4C6 .string "{UNKNOWN_F7 0x00} saved the game.$" gUnknown_841B4D9:: @ 0x841B4D9 - .string "If the LEADER leaves, the chat\nwill end. Is that okay?$" + .string "If the LEADER leaves, the chat\n" + .string "will end. Is that okay?$" gUnknown_841B510:: @ 841B510 .string "HELLO$" @@ -3011,16 +3204,25 @@ gUnknown_841B54B:: @ 841B54B .string "BYE-BYE!$" gUnknown_841B554:: @ 841B554 - .string "{PLAYER} scurried to a POKéMON CENTER,\nprotecting the exhausted and fainted\nPOKéMON from further harm‥\p$" + .string "{PLAYER} scurried to a POKéMON CENTER,\n" + .string "protecting the exhausted and fainted\n" + .string "POKéMON from further harm‥\p" + .string "$" gUnknown_841B5B6:: @ 841B5B6 - .string "{PLAYER} scurried back home, protecting\nthe exhausted and fainted POKéMON from\nfurther harm‥\p$" + .string "{PLAYER} scurried back home, protecting\n" + .string "the exhausted and fainted POKéMON from\n" + .string "further harm‥\p" + .string "$" gUnknown_841B60E:: @ 841B60E .string "PLAYER: {UNKNOWN_F7 0x00}$" gUnknown_841B619:: @ 841B619 - .string "This document is issued in\nrecognition of your magnificent\nachievement - the completion of\nthe {UNKNOWN_F7 0x01} POKéDEX.$" + .string "This document is issued in\n" + .string "recognition of your magnificent\n" + .string "achievement - the completion of\n" + .string "the {UNKNOWN_F7 0x01} POKéDEX.$" gUnknown_841B684:: @ 841B684 .string "GAME FREAK$" @@ -3035,7 +3237,8 @@ gUnknown_841B69E:: @ 841B69E .string "Clear all save data areas?$" gUnknown_841B6B9:: @ 841B6B9 - .string "Clearing data‥\nPlease wait.$" + .string "Clearing data‥\n" + .string "Please wait.$" gText_Player:: @ 841B6D5 .string "PLAYER$" @@ -3065,10 +3268,12 @@ gText_HatchedFromEgg:: @ 841B6FD .string "{STR_VAR_1} hatched from the EGG!$" gText_NickHatchPrompt:: @ 841B716 - .string "Would you like to nickname the newly\nhatched {STR_VAR_1}?$" + .string "Would you like to nickname the newly\n" + .string "hatched {STR_VAR_1}?$" gString_OutOfCoins:: @ 841B747 - .string "You've run out of COINS.\nGame over!$" + .string "You've run out of COINS.\n" + .string "Game over!$" gString_QuitPlaying:: @ 841B76B .string "Quit playing?$" @@ -3321,347 +3526,677 @@ gUnknown_841D18D:: @ 841D18D .align 2 gString_PokemonFireRed_Staff:: @ 841D198 - .string "Pokémon FireRed Version\nStaff$" + .string "Pokémon FireRed Version\n" + .string "Staff$" .align 2 gString_PokemonLeafGreen_Staff:: @ 0x841D1B8 - .string "Pokémon LeafGreen Version\nStaff$" + .string "Pokémon LeafGreen Version\n" + .string "Staff$" .align 2 gCreditsString_Director:: @ 0x841D1D8 - .string "\n\nDirector\n\n\n\n$" + .string "\n" + .string "\nDirector\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Junichi_Masuda:: @ 0x841D1E8 - .string "\n\n\nJunichi Masuda\n\n\n$" + .string "\n" + .string "\n\n" + .string "Junichi Masuda\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Art_Director_Battle_Director:: @ 0x841D200 - .string "\nArt Director\n\nBattle Director\n\n\n$" + .string "\n" + .string "Art Director\n" + .string "\nBattle Director\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Ken_Sugimori_Shigeki_Morimoto:: @ 0x841D224 - .string "\n\nKen Sugimori\n\nShigeki Morimoto\n\n$" + .string "\n" + .string "\nKen Sugimori\n" + .string "\nShigeki Morimoto\n" + .string "\n$" .align 2 gCreditsString_Program_Leader_Planning_Leader_Graphic_Design_Leader:: @ 0x841D248 - .string "Program Leader\n\nPlanning Leader\n\nGraphic Design Leader\n\n$" + .string "Program Leader\n" + .string "\nPlanning Leader\n" + .string "\nGraphic Design Leader\n" + .string "\n$" .align 2 gCreditsString_Tetsuya_Watanabe_Koji_Nishino_Takao_Unno:: @ 0x841D284 - .string "\nTetsuya Watanabe\n\nKoji Nishino\n\nTakao Unno\n$" + .string "\n" + .string "Tetsuya Watanabe\n" + .string "\nKoji Nishino\n" + .string "\nTakao Unno\n" + .string "$" .align 2 gCreditsString_Programmers:: @ 0x841D2B4 - .string "Programmers\n\n\n\n\n$" + .string "Programmers\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Hiroyuki_Nakamura_Masao_Taya_Satoshi_Nohara_Miyuki_Iwasawa_Daisuke_Goto:: @ 0x841D2C8 - .string "\nHiroyuki Nakamura\nMasao Taya\nSatoshi Nohara\nMiyuki Iwasawa\nDaisuke Goto\n$" + .string "\n" + .string "Hiroyuki Nakamura\n" + .string "Masao Taya\n" + .string "Satoshi Nohara\n" + .string "Miyuki Iwasawa\n" + .string "Daisuke Goto\n" + .string "$" .align 2 gCreditsString_System_Programmers:: @ 0x841D314 - .string "System Programmers\n\n\n\n\n\n$" + .string "System Programmers\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Tetsuya_Watanabe_Akito_Mori_Hisashi_Sogabe_Sousuke_Tamada:: @ 0x841D330 - .string "\nTetsuya Watanabe\nAkito Mori\nHisashi Sogabe\nSousuke Tamada\n\n$" + .string "\n" + .string "Tetsuya Watanabe\n" + .string "Akito Mori\n" + .string "Hisashi Sogabe\n" + .string "Sousuke Tamada\n" + .string "\n$" .align 2 gCreditsString_Graphic_Designers:: @ 0x841D370 - .string "Graphic Designers\n\n\n\n\n\n$" + .string "Graphic Designers\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Takao_Unno_Asuka_Iwashita_Kanako_Eo_Hiroki_Fuchino:: @ 0x841D388 - .string "\nTakao Unno\nAsuka Iwashita\nKanako Eo\nHiroki Fuchino\n\n$" + .string "\n" + .string "Takao Unno\n" + .string "Asuka Iwashita\n" + .string "Kanako Eo\n" + .string "Hiroki Fuchino\n" + .string "\n$" .align 2 gCreditsString_Graphic_Designers_2:: @ 0x841D3C0 - .string "\nGraphic Designers\n\n\n\n\n$" + .string "\n" + .string "Graphic Designers\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Ken_Sugimori_Hironobu_Yoshida:: @ 0x841D3D8 - .string "\n\nKen Sugimori\nHironobu Yoshida\n\n\n$" + .string "\n" + .string "\nKen Sugimori\n" + .string "Hironobu Yoshida\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Music_Composition:: @ 0x841D3FC - .string "\nMusic Composition\n\n\n\n\n$" + .string "\n" + .string "Music Composition\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Go_Ichinose_Junichi_Masuda:: @ 0x841D414 - .string "\n\nGo Ichinose\nJunichi Masuda\n\n\n$" + .string "\n" + .string "\nGo Ichinose\n" + .string "Junichi Masuda\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Sound_Effects:: @ 0x841D434 - .string "\n\nSound Effects\n\n\n\n$" + .string "\n" + .string "\nSound Effects\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Go_Ichinose:: @ 0x841D448 - .string "\n\n\nGo Ichinose\n\n\n$" + .string "\n" + .string "\n\n" + .string "Go Ichinose\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Game_Designers:: @ 0x841D45C - .string "\nGame Designers\n\n\n\n\n$" + .string "\n" + .string "Game Designers\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Junichi_Masuda_Koji_Nishino_Tetsuji_Ohta:: @ 0x841D474 - .string "\n\nJunichi Masuda\nKoji Nishino\nTetsuji Ohta\n\n$" + .string "\n" + .string "\nJunichi Masuda\n" + .string "Koji Nishino\n" + .string "Tetsuji Ohta\n" + .string "\n$" .align 2 gCreditsString_Game_Designers_2:: @ 0x841D4A4 - .string "\nGame Designers\n\n\n\n\n$" + .string "\n" + .string "Game Designers\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Hitomi_Sato_Shigeru_Ohmori_Tadashi_Takahashi:: @ 0x841D4BC - .string "\n\nHitomi Sato\nShigeru Ohmori\nTadashi Takahashi\n\n$" + .string "\n" + .string "\nHitomi Sato\n" + .string "Shigeru Ohmori\n" + .string "Tadashi Takahashi\n" + .string "\n$" .align 2 gCreditsString_Game_Scenario:: @ 0x841D4F0 - .string "\nGame Scenario\n\n\n\n\n$" + .string "\n" + .string "Game Scenario\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Hitomi_Sato_Satoshi_Tajiri:: @ 0x841D504 - .string "\n\nHitomi Sato\nSatoshi Tajiri\n\n\n$" + .string "\n" + .string "\nHitomi Sato\n" + .string "Satoshi Tajiri\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Script_Designer_Map_Designer:: @ 0x841D524 - .string "\nScript Designer\n\nMap Designer\n\n\n$" + .string "\n" + .string "Script Designer\n" + .string "\nMap Designer\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Satoshi_Nohara_Shigeru_Ohmori:: @ 0x841D548 - .string "\n\nSatoshi Nohara\n\nShigeru Ohmori\n\n$" + .string "\n" + .string "\nSatoshi Nohara\n" + .string "\nShigeru Ohmori\n" + .string "\n$" .align 2 gCreditsString_Parametric_Designers:: @ 0x841D56C - .string "\nParametric Designers\n\n\n\n\n$" + .string "\n" + .string "Parametric Designers\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Koji_Nishino_Tetsuji_Ohta_Shigeki_Morimoto:: @ 0x841D588 - .string "\n\nKoji Nishino\nTetsuji Ohta\nShigeki Morimoto\n\n$" + .string "\n" + .string "\nKoji Nishino\n" + .string "Tetsuji Ohta\n" + .string "Shigeki Morimoto\n" + .string "\n$" .align 2 gCreditsString_POKeDEX_Text:: @ 0x841D5B8 - .string "\n\nPOKéDEX Text\n\n\n\n$" + .string "\n" + .string "\nPOKéDEX Text\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Kenji_Matsushima:: @ 0x841D5CC - .string "\n\n\nKenji Matsushima\n\n\n$" + .string "\n" + .string "\n\n" + .string "Kenji Matsushima\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_POKeMON_Designers:: @ 0x841D5E4 - .string "POKéMON Designers\n\n\n\n\n\n$" + .string "POKéMON Designers\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Ken_Sugimori_Motofumi_Fujiwara_Shigeki_Morimoto_Hironobu_Yoshida:: @ 0x841D5FC - .string "\nKen Sugimori\nMotofumi Fujiwara\nShigeki Morimoto\nHironobu Yoshida\n\n$" + .string "\n" + .string "Ken Sugimori\n" + .string "Motofumi Fujiwara\n" + .string "Shigeki Morimoto\n" + .string "Hironobu Yoshida\n" + .string "\n$" .align 2 gCreditsString_POKeMON_Designers_2:: @ 0x841D640 - .string "POKéMON Designers\n\n\n\n\n\n$" + .string "POKéMON Designers\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Satoshi_Ohta_Asuka_Iwashita_Takao_Unno_Kanako_Eo_Aimi_Tomita:: @ 0x841D658 - .string "\nSatoshi Ohta\nAsuka Iwashita\nTakao Unno\nKanako Eo\nAimi Tomita\n$" + .string "\n" + .string "Satoshi Ohta\n" + .string "Asuka Iwashita\n" + .string "Takao Unno\n" + .string "Kanako Eo\n" + .string "Aimi Tomita\n" + .string "$" .align 2 gCreditsString_POKeMON_Designers_3:: @ 0x841D698 - .string "POKéMON Designers\n\n\n\n\n\n$" + .string "POKéMON Designers\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Atsuko_Nishida_Muneo_Saito_Rena_Yoshikawa_Jun_Okutani:: @ 0x841D6B0 - .string "\nAtsuko Nishida\nMuneo Saito\nRena Yoshikawa\nJun Okutani\n\n$" + .string "\n" + .string "Atsuko Nishida\n" + .string "Muneo Saito\n" + .string "Rena Yoshikawa\n" + .string "Jun Okutani\n" + .string "\n$" .align 2 gCreditsString_Supporting_Programmers:: @ 0x841D6EC - .string "Supporting Programmers\n\n\n\n$" + .string "Supporting Programmers\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Teruyuki_Yoshioka_Takao_Nakano_Satoshi_Mitsuhara_Daisuke_Hoshino:: @ 0x841D708 - .string "\nTeruyuki Yoshioka\nTakao Nakano\n\nSatoshi Mitsuhara\nDaisuke Hoshino\n$" + .string "\n" + .string "Teruyuki Yoshioka\n" + .string "Takao Nakano\n" + .string "\nSatoshi Mitsuhara\n" + .string "Daisuke Hoshino\n" + .string "$" .align 2 gCreditsString_NCL_Product_Testing:: @ 0x841D74C - .string "\n\nNCL Product Testing\n\n\n\n$" + .string "\n" + .string "\nNCL Product Testing\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_NCL_Super_Mario_Club:: @ 0x841D768 - .string "\n\n\nNCL Super Mario Club\n\n\n$" + .string "\n" + .string "\n\n" + .string "NCL Super Mario Club\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Special_Thanks:: @ 0x841D784 - .string "Special Thanks\n\n\n\n\n\n$" + .string "Special Thanks\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Hiro_Nakamura_Hiroyuki_Uesugi_Teruki_Murakawa_Kazuya_Suyama:: @ 0x841D79C - .string "\nHiro Nakamura\nHiroyuki Uesugi\nTeruki Murakawa\n\nKazuya Suyama\n$" + .string "\n" + .string "Hiro Nakamura\n" + .string "Hiroyuki Uesugi\n" + .string "Teruki Murakawa\n" + .string "\nKazuya Suyama\n" + .string "$" .align 2 gCreditsString_Special_Thanks_2:: @ 0x841D7DC - .string "Special Thanks\n\n\n\n\n\n$" + .string "Special Thanks\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Kenji_Tominaga_Kenjiro_Ito_Tomotaka_Komura_Michiko_Takizawa:: @ 0x841D7F4 - .string "\nKenji Tominaga\n\nKenjiro Ito\nTomotaka Komura\nMichiko Takizawa\n$" + .string "\n" + .string "Kenji Tominaga\n" + .string "\nKenjiro Ito\n" + .string "Tomotaka Komura\n" + .string "Michiko Takizawa\n" + .string "$" .align 2 gCreditsString_Special_Thanks_3:: @ 0x841D834 - .string "Special Thanks\n\n\n\n\n\n$" + .string "Special Thanks\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Makiko_Takada_Mikiko_Ohashi_Shusaku_Egami_Takanao_Kondo_Rui_Kawaguchi:: @ 0x841D84C - .string "\nMakiko Takada\nMikiko Ohashi\nShusaku Egami\nTakanao Kondo\nRui Kawaguchi\n$" + .string "\n" + .string "Makiko Takada\n" + .string "Mikiko Ohashi\n" + .string "Shusaku Egami\n" + .string "Takanao Kondo\n" + .string "Rui Kawaguchi\n" + .string "$" .align 2 gCreditsString_Braille_Code_Check:: @ 0x841D894 - .string "\n\nBraille Code Check\n\n\n\n$" + .string "\n" + .string "\nBraille Code Check\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Japan_Braille_Library:: @ 0x841D8B0 - .string "\n\n\nJapan Braille Library\n\n\n$" + .string "\n" + .string "\n\n" + .string "Japan Braille Library\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Information_Supervisors:: @ 0x841D8CC - .string "Information Supervisors\n\n\n\n\n\n$" + .string "Information Supervisors\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Hiroki_Enomoto_Kazuyuki_Terada_Yuri_Sakurai_Yumi_Funasaka_Naoko_Yanase:: @ 0x841D8EC - .string "\nHiroki Enomoto\nKazuyuki Terada\nYuri Sakurai\nYumi Funasaka\nNaoko Yanase\n$" + .string "\n" + .string "Hiroki Enomoto\n" + .string "Kazuyuki Terada\n" + .string "Yuri Sakurai\n" + .string "Yumi Funasaka\n" + .string "Naoko Yanase\n" + .string "$" .align 2 gCreditsString_Coordinators:: @ 0x841D938 - .string "Coordinators\n\n\n\n\n\n$" + .string "Coordinators\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Azusa_Tajima_Akira_Kinashi_Kazuki_Yoshihara_Retsuji_Nomoto:: @ 0x841D94C - .string "\nAzusa Tajima\nAkira Kinashi\nKazuki Yoshihara\n\nRetsuji Nomoto\n$" + .string "\n" + .string "Azusa Tajima\n" + .string "Akira Kinashi\n" + .string "Kazuki Yoshihara\n" + .string "\nRetsuji Nomoto\n" + .string "$" .align 2 gCreditsString_Task_Managers:: @ 0x841D98C - .string "\nTask Managers\n\n\n\n\n$" + .string "\n" + .string "Task Managers\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Hitoshi_Yamagami_Gakuji_Nomoto:: @ 0x841D9A0 - .string "\n\nHitoshi Yamagami\nGakuji Nomoto\n\n\n$" + .string "\n" + .string "\nHitoshi Yamagami\n" + .string "Gakuji Nomoto\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Producers:: @ 0x841D9C4 - .string "\nProducers\n\n\n\n\n$" + .string "\n" + .string "Producers\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Hiroyuki_Jinnai_Takehiro_Izushi_Hiroaki_Tsuru:: @ 0x841D9D4 - .string "\n\nHiroyuki Jinnai\nTakehiro Izushi\nHiroaki Tsuru\n\n$" + .string "\n" + .string "\nHiroyuki Jinnai\n" + .string "Takehiro Izushi\n" + .string "Hiroaki Tsuru\n" + .string "\n$" .align 2 gCreditsString_Executive_Director:: @ 0x841DA08 - .string "\n\nExecutive Director\n\n\n\n$" + .string "\n" + .string "\nExecutive Director\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Satoshi_Tajiri:: @ 0x841DA24 - .string "\n\n\nSatoshi Tajiri\n\n\n$" + .string "\n" + .string "\n\n" + .string "Satoshi Tajiri\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Executive_Producer:: @ 0x841DA3C - .string "\n\nExecutive Producer\n\n\n\n$" + .string "\n" + .string "\nExecutive Producer\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Satoru_Iwata:: @ 0x841DA58 - .string "\n\n\nSatoru Iwata\n\n\n$" + .string "\n" + .string "\n\n" + .string "Satoru Iwata\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Executive_Producer_2:: @ 0x841DA6C - .string "\n\nExecutive Producer\n\n\n\n$" + .string "\n" + .string "\nExecutive Producer\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Tsunekaz_Ishihara:: @ 0x841DA88 - .string "\n\n\nTsunekaz Ishihara\n\n\n$" + .string "\n" + .string "\n\n" + .string "Tsunekaz Ishihara\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_English_Version_Coordinators:: @ 0x841DAA0 - .string "\nEnglish Version Coordinators\n\n\n\n\n$" + .string "\n" + .string "English Version Coordinators\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Hiro_Nakamura_Seth_McMahill:: @ 0x841DAC4 - .string "\n\nHiro Nakamura\nSeth McMahill\n\n\n$" + .string "\n" + .string "\nHiro Nakamura\n" + .string "Seth McMahill\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Translator_Text_Editor:: @ 0x841DAE8 - .string "\nTranslator\n\nText Editor\n\n\n$" + .string "\n" + .string "Translator\n" + .string "\nText Editor\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Nob_Ogasawara_Teresa_Lillygren:: @ 0x841DB04 - .string "\n\nNob Ogasawara\n\nTeresa Lillygren\n\n$" + .string "\n" + .string "\nNob Ogasawara\n" + .string "\nTeresa Lillygren\n" + .string "\n$" .align 2 gCreditsString_Programmers_2:: @ 0x841DB28 - .string "Programmers\n\n\n\n\n\n$" + .string "Programmers\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Teruki_Murakawa_Souichi_Yamamoto_Yuichiro_Ito_Akira_Kinashi:: @ 0x841DB3C - .string "\nTeruki Murakawa\nSouichi Yamamoto\nYuichiro Ito\nAkira Kinashi\n\n$" + .string "\n" + .string "Teruki Murakawa\n" + .string "Souichi Yamamoto\n" + .string "Yuichiro Ito\n" + .string "Akira Kinashi\n" + .string "\n$" .align 2 gCreditsString_Environment_Tool_Programmers:: @ 0x841DB7C - .string "\nEnvironment を Tool Programmers\n\n\n\n\n$" + .string "\n" + .string "Environment を Tool Programmers\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Teruki_Murakawa_Souichi_Yamamoto_Kimiko_Nakamichi:: @ 0x841DBA4 - .string "\n\nTeruki Murakawa\nSouichi Yamamoto\nKimiko Nakamichi\n\n$" + .string "\n" + .string "\nTeruki Murakawa\n" + .string "Souichi Yamamoto\n" + .string "Kimiko Nakamichi\n" + .string "\n$" .align 2 gCreditsString_NOA_Product_Testing:: @ 0x841DBDC - .string "NOA Product Testing\n\n\n\n\n\n$" + .string "NOA Product Testing\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Thomas_Hertzog_Kathy_Huguenard_Mika_Kurosawa:: @ 0x841DBF8 - .string "\nThomas Hertzog\nKathy Huguenard\nMika Kurosawa\n\n\n$" + .string "\n" + .string "Thomas Hertzog\n" + .string "Kathy Huguenard\n" + .string "Mika Kurosawa\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_Braille_Code_Check_2:: @ 0x841DC2C - .string "Braille Code Check\n\n\n\n\n\n$" + .string "Braille Code Check\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_National_Federation_of_the_Blind_Patricia_A_Maurer_Japan_Braille_Library_European_Blind_Union:: @ 0x841DC48 - .string "\nNational Federation\n{CLEAR_TO 0x13}of the Blind\nPatricia A. Maurer\nJapan Braille Library\nEuropean Blind Union\n$" + .string "\n" + .string "National Federation\n" + .string "{CLEAR_TO 0x13}of the Blind\n" + .string "Patricia A. Maurer\n" + .string "Japan Braille Library\n" + .string "European Blind Union\n" + .string "$" .align 2 gCreditsString_Braille_Code_Check_3:: @ 0x841DCAC - .string "\nBraille Code Check\n\n\n\n\n$" + .string "\n" + .string "Braille Code Check\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_National_Information_Library_Service_Margaret_Campion:: @ 0x841DCC8 - .string "\n\nNational Information Library\n{CLEAR_TO 0x2D}Service\nMargaret Campion\n\n$" + .string "\n" + .string "\nNational Information Library\n" + .string "{CLEAR_TO 0x2D}Service\n" + .string "Margaret Campion\n" + .string "\n$" .align 2 gCreditsString_Special_Thanks_4:: @ 0x841DD08 - .string "Special Thanks\n\n\n\n\n\n$" + .string "Special Thanks\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Takehiro_Izushi_Motoyasu_Tojima_Hitoshi_Yamagami_Hiroyuki_Uesugi:: @ 0x841DD20 - .string "\nTakehiro Izushi\nMotoyasu Tojima\nHitoshi Yamagami\nHiroyuki Uesugi\n\n$" + .string "\n" + .string "Takehiro Izushi\n" + .string "Motoyasu Tojima\n" + .string "Hitoshi Yamagami\n" + .string "Hiroyuki Uesugi\n" + .string "\n$" .align 2 gCreditsString_Special_Thanks_5:: @ 0x841DD64 - .string "Special Thanks\n\n\n\n\n\n$" + .string "Special Thanks\n" + .string "\n\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Nicola_Pratt_Barlow_Shellie_Dow_Anthony_Howitt_Naoko_Saeki_Kyoko_Onishi:: @ 0x841DD7C - .string "\nNicola Pratt-Barlow\nShellie Dow\nAnthony Howitt\nNaoko Saeki\nKyoko Onishi\n$" + .string "\n" + .string "Nicola Pratt-Barlow\n" + .string "Shellie Dow\n" + .string "Anthony Howitt\n" + .string "Naoko Saeki\n" + .string "Kyoko Onishi\n" + .string "$" .align 2 gCreditsString_Braille_Code_Check_4:: @ 0x841DDC8 - .string "\nBraille Code Check\n\n\n\n\n$" + .string "\n" + .string "Braille Code Check\n" + .string "\n\n" + .string "\n\n" + .string "$" .align 2 gCreditsString_The_Royal_New_Zealand_Foundation_of_the_Blind_Greg_Moran:: @ 0x841DDE4 - .string "\n\nThe Royal New Zealand\nFoundation of the Blind\nGreg Moran\n\n$" + .string "\n" + .string "\nThe Royal New Zealand\n" + .string "Foundation of the Blind\n" + .string "Greg Moran\n" + .string "\n$" .align 2 gCreditsString_Graphic_Designer:: @ 0x841DE24 - .string "\n\nGraphic Designer\n\n\n\n$" + .string "\n" + .string "\nGraphic Designer\n" + .string "\n\n" + .string "\n$" .align 2 gCreditsString_Akira_Kinashi:: @ 0x841DE3C - .string "\n\n\nAkira Kinashi\n\n\n$" + .string "\n" + .string "\n\n" + .string "Akira Kinashi\n" + .string "\n\n" + .string "$" gJPText_MysteryGift:: @ 841DE50 .string "$" @@ -3679,7 +4214,8 @@ gUnknown_841DE54:: @ 841DE54 .string "$" gUnknown_841DE55:: @ 841DE55 - .string "カ-ドeリ-ダ-{EXTRA_PLUS}の ‘つうしん'を\nえらんで Aボタンを おしてください$" + .string "カ-ドeリ-ダ-{EXTRA_PLUS}の ‘つうしん'を\n" + .string "えらんで Aボタンを おしてください$" gUnknown_841DE7C:: @ 841DE7C .string "$" @@ -3688,7 +4224,8 @@ gUnknown_841DE7D:: @ 841DE7D .string "$" gUnknown_841DE7E:: @ 841DE7E - .string "カ-ドeリ-ダ-{EXTRA_PLUS}と\nつうしん できません$" + .string "カ-ドeリ-ダ-{EXTRA_PLUS}と\n" + .string "つうしん できません$" gUnknown_841DE95:: @ 841DE95 .string "$" @@ -3935,7 +4472,8 @@ gUnknown_841E2EC:: @ 841E2EC .string "{KEYGFX_B_BUTTON}CANCEL$" gUnknown_841E2F5:: @ 841E2F5 - .string "{COLOR BLUE}{SHADOW YELLOW} たいせんの くみあわせ\n{COLOR RED}{SHADOW GREEN}じぶんの ばしょをきめて ください$" + .string "{COLOR BLUE}{SHADOW YELLOW} たいせんの くみあわせ\n" + .string "{COLOR RED}{SHADOW GREEN}じぶんの ばしょをきめて ください$" gUnknown_841E322:: @ 841E322 .string "{EXTRA_ID}$" @@ -3965,31 +4503,44 @@ gUnknown_841E3FB:: @ 841E3FB .string "Teach {STR_VAR_2}?$" gUnknown_841E405:: @ 841E405 - .string "{STR_VAR_1} learned\n{STR_VAR_2}.$" + .string "{STR_VAR_1} learned\n" + .string "{STR_VAR_2}.$" gUnknown_841E414:: @ 841E414 - .string "{STR_VAR_1} is trying to learn\n{STR_VAR_2}.\pBut {STR_VAR_1} can't learn more\nthan four moves.\pDelete an older move to make\nroom for {STR_VAR_2}?$" + .string "{STR_VAR_1} is trying to learn\n" + .string "{STR_VAR_2}.\p" + .string "But {STR_VAR_1} can't learn more\n" + .string "than four moves.\p" + .string "Delete an older move to make\n" + .string "room for {STR_VAR_2}?$" gUnknown_841E481:: @ 841E481 .string "Stop learning {STR_VAR_2}?$" gUnknown_841E493:: @ 841E493 - .string "{PAUSE 0x20}1, {PAUSE 0x0F}2, and {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}{PLAY_SE SE_KON}Poof!\p$" + .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 - .string "{STR_VAR_1} forgot {STR_VAR_3}.\pAnd‥\p{STR_VAR_1}\nlearned {STR_VAR_2}.$" + .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 - .string "Give up trying to teach a new\nmove to {STR_VAR_1}?$" + .string "Give up trying to teach a new\n" + .string "move to {STR_VAR_1}?$" gUnknown_841E50C:: @ 841E50C - .string "Which move should be forgotten?\p$" + .string "Which move should be forgotten?\p" + .string "$" gUnknown_841E52D:: @ 0x841E52D .string "----------$" gUnknown_841E538:: @ 841E538 - .string "Communication standby‥\nAwaiting another player to choose.$" + .string "Communication standby‥\n" + .string "Awaiting another player to choose.$" gUnknown_841E572:: @ 841E572 .string "The battle was refused.{PAUSE 0x3C}$" diff --git a/src/quest_log.c b/src/quest_log.c index ff99bbe30..ae0045326 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -92,30 +92,30 @@ struct UnkStruct_203AE98 * gUnknown_3005E94; static struct UnkStruct_300201C * gUnknown_300201C; static u16 gUnknown_3002020; -EWRAM_DATA u8 gUnknown_203ADF8 = 0; +static EWRAM_DATA u8 gUnknown_203ADF8 = 0; static EWRAM_DATA u8 sNumScenes = 0; EWRAM_DATA u8 gUnknown_203ADFA = 0; -EWRAM_DATA u16 gUnknown_203ADFC = 0; -EWRAM_DATA u8 gUnknown_203ADFE[3] = {0}; -EWRAM_DATA u16 * gUnknown_203AE04 = NULL; -EWRAM_DATA u16 * gUnknown_203AE08 = NULL; -EWRAM_DATA u16 * gUnknown_203AE0C[32] = {NULL}; -EWRAM_DATA void (* gUnknown_203AE8C)(void) = NULL; -EWRAM_DATA u16 *gUnknown_203AE90 = NULL; -EWRAM_DATA struct UnkStruct_203AE94 gUnknown_203AE94 = {0}; -EWRAM_DATA struct UnkStruct_203AE98 gUnknown_203AE98[32] = {0}; -EWRAM_DATA u16 gUnknown_203AF98 = 0; -EWRAM_DATA u8 gUnknown_203AF9A[64][2] = {{0}}; -EWRAM_DATA u16 gUnknown_203B01A = 0; -EWRAM_DATA u16 gUnknown_203B01C = 0; -EWRAM_DATA u16 gUnknown_203B01E = 0; -EWRAM_DATA u8 sHelpMessageWindowId = 0; -EWRAM_DATA struct UnkStruct_203B024 gUnknown_203B024 = {0}; -EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0}; -EWRAM_DATA u8 gUnknown_203B048 = 0; -EWRAM_DATA u8 gUnknown_203B049 = 0; -EWRAM_DATA u8 gUnknown_203B04A = 0; -EWRAM_DATA u8 gUnknown_203B04B = 0; +static EWRAM_DATA u16 gUnknown_203ADFC = 0; +static EWRAM_DATA u8 gUnknown_203ADFE[3] = {0}; +static EWRAM_DATA u16 * gUnknown_203AE04 = NULL; +static EWRAM_DATA u16 * gUnknown_203AE08 = NULL; +static EWRAM_DATA u16 * gUnknown_203AE0C[32] = {NULL}; +static EWRAM_DATA void (* gUnknown_203AE8C)(void) = NULL; +static EWRAM_DATA u16 *gUnknown_203AE90 = NULL; +static EWRAM_DATA struct UnkStruct_203AE94 gUnknown_203AE94 = {0}; +static EWRAM_DATA struct UnkStruct_203AE98 gUnknown_203AE98[32] = {0}; +static EWRAM_DATA u16 gUnknown_203AF98 = 0; +static EWRAM_DATA u8 gUnknown_203AF9A[64][2] = {{0}}; +static EWRAM_DATA u16 gUnknown_203B01A = 0; +static EWRAM_DATA u16 gUnknown_203B01C = 0; +static EWRAM_DATA u16 gUnknown_203B01E = 0; +static EWRAM_DATA u8 sHelpMessageWindowId = 0; +static EWRAM_DATA struct UnkStruct_203B024 gUnknown_203B024 = {0}; +static EWRAM_DATA struct UnkStruct_203B044 gUnknown_203B044 = {0}; +static EWRAM_DATA u8 gUnknown_203B048 = 0; +static EWRAM_DATA u8 gUnknown_203B049 = 0; +static EWRAM_DATA u8 gUnknown_203B04A = 0; +static EWRAM_DATA u8 gUnknown_203B04B = 0; void sub_8110A00(void); void sub_8110A3C(void); diff --git a/src/start_menu.c b/src/start_menu.c index 1bfca6761..0043efcc0 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -72,7 +72,7 @@ static ALIGNED(4) EWRAM_DATA u8 sSaveStatsWindowId = 0; static u8 (*sSaveDialogCB)(void); static u8 sSaveDialogDelay; -static u8 sSaveDialogIsPrinting; +static bool8 sSaveDialogIsPrinting; static void SetUpStartMenu_Link(void); static void SetUpStartMenu_UnionRoom(void); @@ -601,14 +601,14 @@ static void StartMenu_PrepareForSave(void) { save_serialize_map(); sSaveDialogCB = SaveDialogCB_PrintAskSaveText; - sSaveDialogIsPrinting = 0; + sSaveDialogIsPrinting = FALSE; } static u8 RunSaveDialogCB(void) { if (RunTextPrinters_CheckPrinter0Active() == TRUE) return 0; - sSaveDialogIsPrinting = 0; + sSaveDialogIsPrinting = FALSE; return sSaveDialogCB(); } @@ -620,13 +620,13 @@ void Field_AskSaveTheGame(void) CreateTask(task50_save_game, 80); } -void PrintSaveTextWithFollowupFunc(const u8 *str, bool8 (*savecb)(void)) +void PrintSaveTextWithFollowupFunc(const u8 *str, bool8 (*saveDialogCB)(void)) { StringExpandPlaceholders(gStringVar4, str); sub_80F7768(0, TRUE); AddTextPrinterForMessage(TRUE); - sSaveDialogIsPrinting = 1; - sSaveDialogCB = savecb; + sSaveDialogIsPrinting = TRUE; + sSaveDialogCB = saveDialogCB; } void task50_save_game(u8 taskId) diff --git a/sym_bss.txt b/sym_bss.txt index c68826ad9..a8c5ba44c 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -53,11 +53,11 @@ gUnknown_3000E9C: @ 3000E9C gUnknown_3000EA0: @ 3000EA0 .space 0x8 - .align 2 + .align 2 .include "src/script.o" .align 2 .include "src/start_menu.o" - .align 2 + .align 2 .include "src/tileset_anims.o" .align 2 .include "src/sound.o" @@ -105,9 +105,9 @@ gUnknown_3002008: @ 3002008 gUnknown_3002018: @ 3002018 .space 0x4 - .include "src/quest_log.o" + .include "src/quest_log.o" - .align 2 + .align 2 gUnknown_3002024: @ 3002024 .space 0x4 diff --git a/sym_ewram.txt b/sym_ewram.txt index c709745d5..0633da5bf 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -12,7 +12,7 @@ .align 2 .include "src/sprite.o" .align 2 - .include "src/string_util.o" + .include "src/string_util.o" .align 2 .include "src/link.o" .space 8 @@ -510,9 +510,9 @@ gUnknown_203709C: @ 203709C .space 0x4 .include "src/script.o" - .include "src/scrcmd.o" + .include "src/scrcmd.o" - .align 2 + .align 2 gSpecialVar_0x8000: @ 20370B8 .space 0x2 @@ -576,13 +576,13 @@ gUnknown_20370DE: @ 20370DE gUnknown_20370E0: @ 20370E0 .space 0x10 - .align 2 - .include "src/start_menu.o" - .align 2 + .align 2 + .include "src/start_menu.o" + .align 2 .include "src/tileset_anims.o" .align 2 .include "src/palette.o" - .align 2 + .align 2 .include "src/sound.o" .align 2 @@ -958,9 +958,9 @@ gUnknown_203AAB4: @ 203AAB4 gUnknown_203AAB8: @ 203AAB8 .space 0x4 - .align 2 - .include "src/player_pc.o" - .align 2 + .align 2 + .include "src/player_pc.o" + .align 2 .include "src/intro.o" .align 2 From 5c7081b6e748211660a0a4eb14062de5fafec038 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 14 Oct 2019 10:07:01 -0400 Subject: [PATCH 24/25] Address review comments, 2 --- include/start_menu.h | 3 +++ src/start_menu.c | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/start_menu.h b/include/start_menu.h index 7d39734a4..90fe7109a 100644 --- a/include/start_menu.h +++ b/include/start_menu.h @@ -6,5 +6,8 @@ void AppendToList(u8* list, u8* pos, u8 newEntry); void Task_StartMenuHandleInput(u8 taskId); void SetUpReturnToStartMenu(void); +void ShowStartMenu(void); +void Field_AskSaveTheGame(void); +void CB2_SetUpSaveAfterLinkBattle(void); #endif // GUARD_START_MENU_H diff --git a/src/start_menu.c b/src/start_menu.c index 0043efcc0..e3854b803 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -332,7 +332,7 @@ static s8 DoDrawStartMenu(void) return FALSE; } -void DrawStartMenuInOneGo(void) +static void DrawStartMenuInOneGo(void) { sDrawStartMenuState[0] = 0; sDrawStartMenuState[1] = 0; @@ -620,7 +620,7 @@ void Field_AskSaveTheGame(void) CreateTask(task50_save_game, 80); } -void PrintSaveTextWithFollowupFunc(const u8 *str, bool8 (*saveDialogCB)(void)) +static void PrintSaveTextWithFollowupFunc(const u8 *str, bool8 (*saveDialogCB)(void)) { StringExpandPlaceholders(gStringVar4, str); sub_80F7768(0, TRUE); @@ -629,7 +629,7 @@ void PrintSaveTextWithFollowupFunc(const u8 *str, bool8 (*saveDialogCB)(void)) sSaveDialogCB = saveDialogCB; } -void task50_save_game(u8 taskId) +static void task50_save_game(u8 taskId) { switch (RunSaveDialogCB()) { @@ -681,7 +681,7 @@ static bool8 SaveDialog_Wait60FramesOrAButtonHeld(void) } } -bool8 SaveDialog_Wait60FramesThenCheckAButtonHeld(void) +static bool8 SaveDialog_Wait60FramesThenCheckAButtonHeld(void) { if (sSaveDialogDelay == 0) { From d4c9b7782835ec6e31fee4e7c18351658da087cd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 14 Oct 2019 10:18:45 -0400 Subject: [PATCH 25/25] Address review comments, 3 --- include/quest_log.h | 3 + src/quest_log.c | 663 ++++++++++++++++++++++---------------------- 2 files changed, 333 insertions(+), 333 deletions(-) diff --git a/include/quest_log.h b/include/quest_log.h index d12675f18..d3ccbe3da 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -37,6 +37,9 @@ void sub_811089C(void); void sub_8113044(void); void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId); void sub_8112450(void); +void sub_8112364(void); +u8 sub_8112CAC(void); +void sub_81138F8(void); extern u8 gUnknown_203ADFA; diff --git a/src/quest_log.c b/src/quest_log.c index ae0045326..ef8f56249 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -117,163 +117,160 @@ static EWRAM_DATA u8 gUnknown_203B049 = 0; static EWRAM_DATA u8 gUnknown_203B04A = 0; static EWRAM_DATA u8 gUnknown_203B04B = 0; -void sub_8110A00(void); -void sub_8110A3C(void); -void sub_8110BB0(u8); -void sub_8110BE8(u8); -void sub_8110E3C(void); -void sub_8110D94(void); -void sub_8110E20(void); -void sub_8110D48(u8); -u8 sub_8110E68(struct UnkStruct_203AE98 *); -void sub_8110F90(u8); -void sub_8111150(u8); -void sub_8111368(void); -void sub_81115E8(void); -u16 sub_8111618(void); -u16 sub_811164C(void); -void sub_8111688(void); -void sub_811175C(u8, struct UnkStruct_203AE98 *); -void sub_81118F4(s8); -void sub_8111914(void); -void sub_8111984(void); -void sub_8111A34(u8); -void sub_8111AD8(void); -void sub_8111B80(void); -u8 sub_8111BD4(void); -void sub_8111D10(void); -void sub_8111D90(u8); -void sub_8111E20(void); -void sub_8111E64(s8); -void sub_8111E84(void); -bool8 sub_8111F60(void); -void sub_8111F8C(u8); -void sub_8111FCC(u8); -void sub_8112044(u8); -void sub_81120AC(u8); -bool8 sub_81121D8(u8); -void sub_811229C(void); -void sub_8112364(void); -void sub_8112888(u8); -void sub_8112940(u8, struct UnkStruct_203AE98 *, u16); -u8 sub_8112CAC(void); -bool8 sub_8112CEC(void); -bool8 sub_8112D1C(void); -void sub_8113078(struct Var4038Struct *); -void sub_81130BC(struct Var4038Struct *); -u8 sub_8113194(struct Var4038Struct *); -u16 sub_81132A0(struct Var4038Struct *); -void sub_81132E0(struct Var4038Struct *); -bool16 sub_811337C(struct Var4038Struct *); -void sub_8113390(struct Var4038Struct *); -void sub_8113414(struct LinkBattleRecords *, u8, u8); -void sub_81134CC(struct Var4038Struct *); -bool8 sub_8113508(struct Var4038Struct * ); -void sub_8113524(struct Var4038Struct *); -bool8 sub_81136D4(void); -bool8 sub_8113778(u16, u16 *); -bool8 sub_81137E4(u16, u16 *); -u16 * sub_8113828(u16, u16 *); -bool8 sub_81138A0(u16, u16 *); -bool8 sub_8113954(u16, u16 *); -void sub_8113A1C(u16); -void sub_811381C(void); -void sub_81138F8(void); -bool8 sub_8113A44(u16, u16 *); -u16 * sub_8113A78(u16 *, u16 **); -void sub_8113ABC(u16 *); -bool8 sub_8113AE8(u16 *); -bool8 sub_8113B44(u16 *); -void sub_8113B88(void); -void sub_8113B94(u16); -void sub_8113BD8(void); -u16 * sub_8113BF4(u16 *); -u16 * sub_8113C20(u16 *, struct UnkStruct_203AE98 *); -u16 * sub_8113C5C(u16 *, u16); -u16 * sub_8113C8C(u16 *, struct UnkStruct_203AE98 *); -u16 * sub_8113CC8(u16 *, struct UnkStruct_203AE98 *); -u16 * sub_8113D08(u16 *, struct UnkStruct_203AE98 *); -u16 * sub_8113D48(u16 *, struct UnkStruct_203AE98 *); -u16 * sub_8113D94(u16 *, struct UnkStruct_203AE98 *); -u16 * sub_8113F14(u16 *, const u16 *); -const u16 * sub_8113F3C(const u16 *); -u16 * sub_8113F80(u16 *, const u16 *); -const u16 * sub_8113FBC(const u16 *); -u16 * sub_8114174(u16 *, const u16 *); -const u16 * sub_8114188(const u16 *); -u16 * sub_81141D0(u16 *, const u16 *); -const u16 * sub_81141E4(const u16 *); -u16 * sub_811422C(u16 *, const u16 *); -const u16 * sub_8114240(const u16 *); -u16 * sub_8114288(u16 *, const u16 *); -const u16 * sub_811429C(const u16 *); -u16 * sub_8114310(u16 *, const u16 *); -const u16 * sub_8114324(const u16 *); -u16 * sub_8114380(u16 *, const u16 *); -const u16 * sub_8114394(const u16 *); -u16 * sub_81143F0(u16 *, const u16 *); -const u16 * sub_811443C(const u16 *); -u16 * sub_811445C(u16 *, const u16 *); -const u16 * sub_811448C(const u16 *); -u16 * sub_81144EC(u16 *, const u16 *); -const u16 * sub_8114518(const u16 *); -u16 * sub_8114578(u16 *, const u16 *); -const u16 * sub_81145A4(const u16 *); -u16 * sub_8114604(u16 *, const u16 *); -const u16 * sub_811464C(const u16 *); -u16 * sub_8114710(u16 *, const u16 *); -const u16 * sub_8114724(const u16 *); -u16 * sub_8114744(u16 *, const u16 *); -const u16 * sub_8114758(const u16 *); -u16 * sub_8114778(u16 *, const u16 *); -const u16 * sub_81147A8(const u16 *); -u16 * sub_8114808(u16 *, const u16 *); -const u16 * sub_8114834(const u16 *); -u16 * sub_811488C(u16 *, const u16 *); -const u16 * sub_81148BC(const u16 *); -u16 * sub_8114918(u16 *, const u16 *); -const u16 * sub_8114944(const u16 *); -u16 * sub_8114990(u16 *, const u16 *); -const u16 * sub_81149D0(const u16 *); -u16 * sub_8114A1C(u16 *, const u16 *); -const u16 * sub_8114A4C(const u16 *); -u16 * sub_8114AA0(u16 *, const u16 *); -const u16 * sub_8114AC8(const u16 *); -u16 * sub_8114B0C(u16 *, const u16 *); -const u16 * sub_8114B34(const u16 *); -u16 * sub_8114B78(u16 *, const u16 *); -const u16 * sub_8114BA0(const u16 *); -u16 * sub_8114BE4(u16 *, const u16 *); -const u16 * sub_8114C0C(const u16 *); -u16 * sub_8114C68(u16 *, const u16 *); -const u16 * sub_8114C8C(const u16 *); -u16 * sub_8114CC0(u16 *, const u16 *); -const u16 * sub_8114CE4(const u16 *); -u16 * sub_8114D4C(u16 *, const u16 *); -const u16 * sub_8114D68(const u16 *); -u16 * sub_8114DE8(u16 *, const u16 *); -const u16 * sub_8114E68(const u16 *); -bool8 sub_8114FBC(u16); -u16 * sub_8114FF0(u16 *, const u16 *); -const u16 * sub_811500C(const u16 *); -u16 * sub_8115078(u16 *, const u16 *); -const u16 * sub_81150CC(const u16 *); -u16 * sub_81151C0(u16 *, const u16 *); -const u16 * sub_81151DC(const u16 *); -u16 * sub_8115280(u16 *, const u16 *); -const u16 * sub_81152BC(const u16 *); -bool8 sub_81153A8(u16, u16 *); -bool8 sub_81153E4(u16, u16 *); -u16 * sub_8115410(u16 *, const u16 *); -const u16 * sub_8115460(const u16 *); -u16 * sub_81154DC(u16 *, const u16 *); -const u16 * sub_8115518(const u16 *); -u16 * sub_81155A4(u16 *, const u16 *); -const u16 * sub_81155E0(const u16 *); -u16 * sub_81156D8(u16 *, const u16 *); -const u16 * sub_8115700(const u16 *); -u16 * sub_81157DC(u16 *, const u16 *); -const u16 * sub_8115800(const u16 *); +static void sub_8110A00(void); +static void sub_8110A3C(void); +static void sub_8110BB0(u8); +static void sub_8110BE8(u8); +static void sub_8110E3C(void); +static void sub_8110D94(void); +static void sub_8110E20(void); +static void sub_8110D48(u8); +static u8 sub_8110E68(struct UnkStruct_203AE98 *); +static void sub_8110F90(u8); +static void sub_8111150(u8); +static void sub_8111368(void); +static void sub_81115E8(void); +static u16 sub_8111618(void); +static u16 sub_811164C(void); +static void sub_8111688(void); +static void sub_811175C(u8, struct UnkStruct_203AE98 *); +static void sub_81118F4(s8); +static void sub_8111914(void); +static void sub_8111984(void); +static void sub_8111A34(u8); +static void sub_8111AD8(void); +static void sub_8111B80(void); +static u8 sub_8111BD4(void); +static void sub_8111D10(void); +static void sub_8111D90(u8); +static void sub_8111E20(void); +static void sub_8111E64(s8); +static void sub_8111E84(void); +static bool8 sub_8111F60(void); +static void sub_8111F8C(u8); +static void sub_8111FCC(u8); +static void sub_8112044(u8); +static void sub_81120AC(u8); +static bool8 sub_81121D8(u8); +static void sub_811229C(void); +static void sub_8112888(u8); +static void sub_8112940(u8, struct UnkStruct_203AE98 *, u16); +static bool8 sub_8112CEC(void); +static bool8 sub_8112D1C(void); +static void sub_8113078(struct Var4038Struct *); +static void sub_81130BC(struct Var4038Struct *); +static u8 sub_8113194(struct Var4038Struct *); +static u16 sub_81132A0(struct Var4038Struct *); +static void sub_81132E0(struct Var4038Struct *); +static bool16 sub_811337C(struct Var4038Struct *); +static void sub_8113390(struct Var4038Struct *); +static void sub_8113414(struct LinkBattleRecords *, u8, u8); +static void sub_81134CC(struct Var4038Struct *); +static bool8 sub_8113508(struct Var4038Struct * ); +static void sub_8113524(struct Var4038Struct *); +static bool8 sub_81136D4(void); +static bool8 sub_8113778(u16, u16 *); +static bool8 sub_81137E4(u16, u16 *); +static u16 * sub_8113828(u16, u16 *); +static bool8 sub_81138A0(u16, u16 *); +static bool8 sub_8113954(u16, u16 *); +static void sub_8113A1C(u16); +static void sub_811381C(void); +static bool8 sub_8113A44(u16, u16 *); +static u16 * sub_8113A78(u16 *, u16 **); +static void sub_8113ABC(u16 *); +static bool8 sub_8113AE8(u16 *); +static bool8 sub_8113B44(u16 *); +static void sub_8113B88(void); +static void sub_8113B94(u16); +static void sub_8113BD8(void); +static u16 * sub_8113BF4(u16 *); +static u16 * sub_8113C20(u16 *, struct UnkStruct_203AE98 *); +static u16 * sub_8113C5C(u16 *, u16); +static u16 * sub_8113C8C(u16 *, struct UnkStruct_203AE98 *); +static u16 * sub_8113CC8(u16 *, struct UnkStruct_203AE98 *); +static u16 * sub_8113D08(u16 *, struct UnkStruct_203AE98 *); +static u16 * sub_8113D48(u16 *, struct UnkStruct_203AE98 *); +static u16 * sub_8113D94(u16 *, struct UnkStruct_203AE98 *); +static u16 * sub_8113F14(u16 *, const u16 *); +static const u16 * sub_8113F3C(const u16 *); +static u16 * sub_8113F80(u16 *, const u16 *); +static const u16 * sub_8113FBC(const u16 *); +static u16 * sub_8114174(u16 *, const u16 *); +static const u16 * sub_8114188(const u16 *); +static u16 * sub_81141D0(u16 *, const u16 *); +static const u16 * sub_81141E4(const u16 *); +static u16 * sub_811422C(u16 *, const u16 *); +static const u16 * sub_8114240(const u16 *); +static u16 * sub_8114288(u16 *, const u16 *); +static const u16 * sub_811429C(const u16 *); +static u16 * sub_8114310(u16 *, const u16 *); +static const u16 * sub_8114324(const u16 *); +static u16 * sub_8114380(u16 *, const u16 *); +static const u16 * sub_8114394(const u16 *); +static u16 * sub_81143F0(u16 *, const u16 *); +static const u16 * sub_811443C(const u16 *); +static u16 * sub_811445C(u16 *, const u16 *); +static const u16 * sub_811448C(const u16 *); +static u16 * sub_81144EC(u16 *, const u16 *); +static const u16 * sub_8114518(const u16 *); +static u16 * sub_8114578(u16 *, const u16 *); +static const u16 * sub_81145A4(const u16 *); +static u16 * sub_8114604(u16 *, const u16 *); +static const u16 * sub_811464C(const u16 *); +static u16 * sub_8114710(u16 *, const u16 *); +static const u16 * sub_8114724(const u16 *); +static u16 * sub_8114744(u16 *, const u16 *); +static const u16 * sub_8114758(const u16 *); +static u16 * sub_8114778(u16 *, const u16 *); +static const u16 * sub_81147A8(const u16 *); +static u16 * sub_8114808(u16 *, const u16 *); +static const u16 * sub_8114834(const u16 *); +static u16 * sub_811488C(u16 *, const u16 *); +static const u16 * sub_81148BC(const u16 *); +static u16 * sub_8114918(u16 *, const u16 *); +static const u16 * sub_8114944(const u16 *); +static u16 * sub_8114990(u16 *, const u16 *); +static const u16 * sub_81149D0(const u16 *); +static u16 * sub_8114A1C(u16 *, const u16 *); +static const u16 * sub_8114A4C(const u16 *); +static u16 * sub_8114AA0(u16 *, const u16 *); +static const u16 * sub_8114AC8(const u16 *); +static u16 * sub_8114B0C(u16 *, const u16 *); +static const u16 * sub_8114B34(const u16 *); +static u16 * sub_8114B78(u16 *, const u16 *); +static const u16 * sub_8114BA0(const u16 *); +static u16 * sub_8114BE4(u16 *, const u16 *); +static const u16 * sub_8114C0C(const u16 *); +static u16 * sub_8114C68(u16 *, const u16 *); +static const u16 * sub_8114C8C(const u16 *); +static u16 * sub_8114CC0(u16 *, const u16 *); +static const u16 * sub_8114CE4(const u16 *); +static u16 * sub_8114D4C(u16 *, const u16 *); +static const u16 * sub_8114D68(const u16 *); +static u16 * sub_8114DE8(u16 *, const u16 *); +static const u16 * sub_8114E68(const u16 *); +static bool8 sub_8114FBC(u16); +static u16 * sub_8114FF0(u16 *, const u16 *); +static const u16 * sub_811500C(const u16 *); +static u16 * sub_8115078(u16 *, const u16 *); +static const u16 * sub_81150CC(const u16 *); +static u16 * sub_81151C0(u16 *, const u16 *); +static const u16 * sub_81151DC(const u16 *); +static u16 * sub_8115280(u16 *, const u16 *); +static const u16 * sub_81152BC(const u16 *); +static bool8 sub_81153A8(u16, u16 *); +static bool8 sub_81153E4(u16, u16 *); +static u16 * sub_8115410(u16 *, const u16 *); +static const u16 * sub_8115460(const u16 *); +static u16 * sub_81154DC(u16 *, const u16 *); +static const u16 * sub_8115518(const u16 *); +static u16 * sub_81155A4(u16 *, const u16 *); +static const u16 * sub_81155E0(const u16 *); +static u16 * sub_81156D8(u16 *, const u16 *); +static const u16 * sub_8115700(const u16 *); +static u16 * sub_81157DC(u16 *, const u16 *); +static const u16 * sub_8115800(const u16 *); void sub_8115834(u8 *); extern const u8 gUnknown_841A155[]; @@ -404,17 +401,17 @@ extern const u8 gUnknown_841B277[]; extern const u8 gUnknown_8418C1B[]; -const struct WindowTemplate gUnknown_845661C[3] = { +static const struct WindowTemplate gUnknown_845661C[3] = { { 0, 0, 0, 30, 2, 15, 0x0e9 }, { 0, 0, 18, 30, 2, 15, 0x0ad }, { 0, 0, 14, 30, 6, 15, 0x14c } }; -const u8 gUnknown_8456634[3] = {15, 1, 12}; +static const u8 gUnknown_8456634[3] = {15, 1, 12}; -const u16 gUnknown_8456638[] = INCBIN_U16("data/graphics/unknown_8456638.bin"); +static const u16 gUnknown_8456638[] = INCBIN_U16("data/graphics/unknown_8456638.bin"); -const u8 gUnknown_8456698[] = {17, 10, 3}; +static const u8 gUnknown_8456698[] = {17, 10, 3}; void sub_8110840(void * oldPointer) { @@ -493,7 +490,7 @@ void sub_81109CC(u8 a0) gUnknown_203AE8C = sub_8110A3C; } -void sub_8110A00(void) +static void sub_8110A00(void) { if (sub_8110E68(gUnknown_203AE98) != 1) { @@ -504,7 +501,7 @@ void sub_8110A00(void) } } -void sub_8110A3C(void) +static void sub_8110A3C(void) { if (gUnknown_203AE94.unk_0_0 == 2) gUnknown_203AE94.unk_0_0 = 0; @@ -556,7 +553,7 @@ void sub_8110AEC(u16 a0) sub_81109CC(1); } -void sub_8110BB0(u8 a0) +static void sub_8110BB0(u8 a0) { struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0]; questLog->unk_001 = gSaveBlock1Ptr->location.mapGroup; @@ -567,7 +564,7 @@ void sub_8110BB0(u8 a0) } #ifdef NONMATCHING -void sub_8110BE8(u8 a0) +static void sub_8110BE8(u8 a0) { struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0]; u16 i; // r6 @@ -602,7 +599,7 @@ void sub_8110BE8(u8 a0) } #else NAKED -void sub_8110BE8(u8 a0) +static void sub_8110BE8(u8 a0) { asm_unified("\tpush {r4-r7,lr}\n" "\tmov r7, r10\n" @@ -767,7 +764,7 @@ void sub_8110BE8(u8 a0) } #endif // NONMATCHING -void sub_8110D48(u8 a0) +static void sub_8110D48(u8 a0) { struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0]; @@ -775,7 +772,7 @@ void sub_8110D48(u8 a0) CpuCopy16(gSaveBlock1Ptr->vars, questLog->vars, VARS_COUNT * sizeof(u16)); } -void sub_8110D94(void) +static void sub_8110D94(void) { u16 i, j; u16 sp0[4]; @@ -794,19 +791,19 @@ void sub_8110D94(void) } } -void sub_8110E20(void) +static void sub_8110E20(void) { VarSet(VAR_0x40AE, gSaveBlock1Ptr->mapDataId); } -void sub_8110E3C(void) +static void sub_8110E3C(void) { sub_8113BF4(gUnknown_203AE08); if (++gUnknown_203ADF8 > 3) gUnknown_203ADF8 = 0; } -bool8 sub_8110E68(struct UnkStruct_203AE98 * a0) +static bool8 sub_8110E68(struct UnkStruct_203AE98 * a0) { u16 i; @@ -865,7 +862,7 @@ void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId) } } -void sub_8110F90(u8 unused) +static void sub_8110F90(u8 unused) { gSaveBlock1Ptr->location.mapGroup = 3; gSaveBlock1Ptr->location.mapNum = 19; @@ -937,7 +934,7 @@ void sub_8111134(void) CopyWindowToVram(gUnknown_203ADFE[1], 1); } -void sub_8111150(u8 a0) +static void sub_8111150(u8 a0) { struct QuestLog *questLog = &gSaveBlock1Ptr->questLog[a0]; u16 i; @@ -982,7 +979,7 @@ void sub_8111274(u8 a0, u8 a1) } } -void sub_8111368(void) +static void sub_8111368(void) { gUnknown_203ADFA = 2; sub_806E6FC(); @@ -1091,14 +1088,14 @@ void sub_8111438(void) Free(r9); } -void sub_81115E8(void) +static void sub_81115E8(void) { u16 r4 = sub_8111618(); u16 r1 = sub_811164C(); VarSet(VAR_0x4027, (r4 << 12) + r1); } -u16 sub_8111618(void) +static u16 sub_8111618(void) { u16 count = 0; u16 i; @@ -1112,7 +1109,7 @@ u16 sub_8111618(void) return count; } -u16 sub_811164C(void) +static u16 sub_811164C(void) { u16 count = 0; u16 i, j; @@ -1129,7 +1126,7 @@ u16 sub_811164C(void) return count; } -void sub_8111688(void) +static void sub_8111688(void) { u16 i, j; u16 sp0[4]; @@ -1161,7 +1158,7 @@ void sub_8111708(void) } } -void sub_811175C(u8 a0, struct UnkStruct_203AE98 * a1) +static void sub_811175C(u8 a0, struct UnkStruct_203AE98 * a1) { u16 i; u16 *r4; @@ -1208,13 +1205,13 @@ void sub_811175C(u8 a0, struct UnkStruct_203AE98 * a1) } } -void sub_81118F4(s8 a0) +static void sub_81118F4(s8 a0) { fade_screen(1, a0); gUnknown_203AE8C = sub_8111914; } -void sub_8111914(void) +static void sub_8111914(void) { if (!gPaletteFade.active) { @@ -1232,7 +1229,7 @@ void sub_8111914(void) } } -void sub_8111984(void) +static void sub_8111984(void) { sub_806E6FC(); Save_ResetSaveCounters(); @@ -1269,7 +1266,7 @@ bool8 sub_81119D4(void (*a0)(void)) return FALSE; } -void sub_8111A34(u8 taskId) +static void sub_8111A34(u8 taskId) { void (*routine)(void); s16 * data = gTasks[taskId].data; @@ -1298,7 +1295,7 @@ void sub_8111A34(u8 taskId) } } -void sub_8111AD8(void) +static void sub_8111AD8(void) { if (gUnknown_203AE94.unk_0_0 == 1) { @@ -1327,7 +1324,7 @@ void sub_8111AD8(void) } } -void sub_8111B80(void) +static void sub_8111B80(void) { if (gUnknown_203AE94.unk_0_0 == 0) { @@ -1344,7 +1341,7 @@ void sub_8111B80(void) sub_8112888(1); } -u8 sub_8111BD4(void) +static u8 sub_8111BD4(void) { u16 i; u16 count = 0; @@ -1405,7 +1402,7 @@ void sub_8111CF0(void) sub_8111070(sNumScenes); } -void sub_8111D10(void) +static void sub_8111D10(void) { u16 i; u8 count = 0; @@ -1422,7 +1419,7 @@ void sub_8111D10(void) ScheduleBgCopyTilemapToVram(0); } -void sub_8111D90(u8 a0) +static void sub_8111D90(u8 a0) { const u16 * src = gUnknown_8456638; u16 * buffer = Alloc(0x1680); @@ -1459,7 +1456,7 @@ void sub_8111D90(u8 a0) } } -void sub_8111E20(void) +static void sub_8111E20(void) { ClearWindowTilemap(gUnknown_203ADFE[2]); FillWindowPixelRect(gUnknown_203ADFE[2], 15, 0, 0, 0xf0, 0x30); @@ -1468,13 +1465,13 @@ void sub_8111E20(void) CopyWindowToVram(gUnknown_203ADFE[1], 1); } -void sub_8111E64(s8 a0) +static void sub_8111E64(s8 a0) { fade_screen(1, a0); gUnknown_203AE8C = sub_8111E84; } -void sub_8111E84(void) +static void sub_8111E84(void) { if (!gPaletteFade.active) { @@ -1501,7 +1498,7 @@ void sub_8111F38(u16 a0, u16 a1) CpuSet(gPlttBufferUnfaded + a0, gUnknown_203AE90 + a0, a1); } -bool8 sub_8111F60(void) +static bool8 sub_8111F60(void) { LoadPalette(stdpal_get(4), 0xF0, 0x20); sub_8111070(0); @@ -1510,7 +1507,7 @@ bool8 sub_8111F60(void) return TRUE; } -void sub_8111F8C(u8 taskId) +static void sub_8111F8C(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -1524,7 +1521,7 @@ void sub_8111F8C(u8 taskId) } } -void sub_8111FCC(u8 taskId) +static void sub_8111FCC(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -1544,7 +1541,7 @@ void sub_8111FCC(u8 taskId) } } -void sub_8112044(u8 taskId) +static void sub_8112044(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -1559,7 +1556,7 @@ void sub_8112044(u8 taskId) task->data[0]++; } -void sub_81120AC(u8 taskId) +static void sub_81120AC(u8 taskId) { s16 * data = gTasks[taskId].data; u8 i; @@ -1609,7 +1606,7 @@ void sub_81120AC(u8 taskId) } } -bool8 sub_81121D8(u8 taskId) +static bool8 sub_81121D8(u8 taskId) { s16 * data = gTasks[taskId].data; @@ -1626,7 +1623,7 @@ bool8 sub_81121D8(u8 taskId) return FALSE; } -void sub_811229C(void) +static void sub_811229C(void) { u16 * buffer = Alloc(0x400); CpuCopy16(gUnknown_203AE90, buffer, 0x400); @@ -1833,7 +1830,7 @@ void sub_81127F8(struct UnkStruct_3005E90 * a0) } } -void sub_8112888(u8 a0) +static void sub_8112888(u8 a0) { switch (a0) { @@ -1875,7 +1872,7 @@ void sub_81128BC(u8 a0) } } -void sub_8112940(u8 a0, struct UnkStruct_203AE98 *a1, u16 a2) +static void sub_8112940(u8 a0, struct UnkStruct_203AE98 *a1, u16 a2) { s32 i; @@ -2218,21 +2215,21 @@ u8 sub_8112CAC(void) } } -bool8 sub_8112CEC(void) +static bool8 sub_8112CEC(void) { if (gUnknown_203AF98 >= gUnknown_3005E8C || ScriptContext2_IsEnabled() == TRUE) return TRUE; return FALSE; } -bool8 sub_8112D1C(void) +static bool8 sub_8112D1C(void) { if (gUnknown_203AF98 >= gUnknown_3005E8C) return TRUE; return FALSE; } -const struct UnkStruct_300201C gUnknown_84566A4 = { +static const struct UnkStruct_300201C gUnknown_84566A4 = { 0, FALSE, 0x7FFF @@ -2294,7 +2291,7 @@ void sub_8112E3C(u8 a0, struct UnkStruct_300201C * a1, u16 a2) const u16 gUnknown_84566A8[] = INCBIN_U16("data/graphics/unknown_84566a8.bin"); -const struct WindowTemplate sHelpMessageWindowTemplate = { +static const struct WindowTemplate sHelpMessageWindowTemplate = { 0x00, 0, 15, 30, 5, 15, 0x008F }; @@ -2463,7 +2460,7 @@ void sub_8112FD0(void) sub_8112F18(sHelpMessageWindowId); } -const u8 gUnknown_8456930[3] = { +static const u8 gUnknown_8456930[3] = { 0, 10, 2 }; @@ -2491,7 +2488,7 @@ void sub_8113064(void) sub_8113078(VAR_0x4038_STRUCT); } -void sub_8113078(struct Var4038Struct * varPtr) +static void sub_8113078(struct Var4038Struct * varPtr) { if (sub_8113508(varPtr)) { @@ -2505,7 +2502,7 @@ void sub_81130A8(void) sub_81130BC(VAR_0x4038_STRUCT); } -void sub_81130BC(struct Var4038Struct * varPtr) +static void sub_81130BC(struct Var4038Struct * varPtr) { if (!varPtr->unk_0_7) { @@ -2543,11 +2540,11 @@ u8 sub_8113114(struct Var4038Struct * a0, u8 a1) return a0->unk_0_0; } -const u8 gUnknown_8456938[] = { +static const u8 gUnknown_8456938[] = { 1, 3, 5, 0, 7, 6, 4, 2 }; -u8 sub_8113194(struct Var4038Struct * a0) +static u8 sub_8113194(struct Var4038Struct * a0) { u8 i; u8 retval = 0; @@ -2568,7 +2565,7 @@ u8 sub_8113194(struct Var4038Struct * a0) return gUnknown_8456938[retval]; } -const u8 gUnknown_8456940[] = { +static const u8 gUnknown_8456940[] = { 5, 6, 3, 7, 4, 1, 0, 2 }; @@ -2602,7 +2599,7 @@ u16 sub_8113288(void) return sub_81132A0(VAR_0x4038_STRUCT); } -u16 sub_81132A0(struct Var4038Struct * a0) +static u16 sub_81132A0(struct Var4038Struct * a0) { u8 count = 0; u8 i; @@ -2621,7 +2618,7 @@ void sub_81132CC(void) sub_81132E0(VAR_0x4038_STRUCT); } -void sub_81132E0(struct Var4038Struct * a0) +static void sub_81132E0(struct Var4038Struct * a0) { u8 i = 0; u16 var_4039; @@ -2653,12 +2650,12 @@ bool16 sub_8113364(void) return sub_811337C(VAR_0x4038_STRUCT); } -bool16 sub_811337C(struct Var4038Struct * a0) +static bool16 sub_811337C(struct Var4038Struct * a0) { return (a0->unk_1 >> gSpecialVar_0x8004) & 1; } -void sub_8113390(struct Var4038Struct * a0) +static void sub_8113390(struct Var4038Struct * a0) { a0->unk_1 |= 1; a0->unk_1 |= 2; @@ -2697,7 +2694,7 @@ void sub_81133A4(void) sub_8113414(&gSaveBlock2Ptr->linkBattleRecords, r3, r2); } -void sub_8113414(struct LinkBattleRecords * a0, u8 a1, u8 a2) +static void sub_8113414(struct LinkBattleRecords * a0, u8 a1, u8 a2) { u8 * str; const u8 * src = a0->entries[a1].name; @@ -2742,7 +2739,7 @@ void sub_81134B8(void) sub_81134CC(VAR_0x4038_STRUCT); } -void sub_81134CC(struct Var4038Struct * a0) +static void sub_81134CC(struct Var4038Struct * a0) { if (VarGet(VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB) == 2) { @@ -2754,7 +2751,7 @@ void sub_81134CC(struct Var4038Struct * a0) } } -bool8 sub_8113508(struct Var4038Struct * a0) +static bool8 sub_8113508(struct Var4038Struct * a0) { return a0->unk_0_7; } @@ -2764,7 +2761,7 @@ void sub_8113510(void) sub_8113524(VAR_0x4038_STRUCT); } -void sub_8113524(struct Var4038Struct * a0) +static void sub_8113524(struct Var4038Struct * a0) { a0->unk_0_7 = TRUE; } @@ -3092,7 +3089,7 @@ void sub_8113550(u16 a0, const u16 * a1) } #endif // NONMATCHING -bool8 sub_81136D4(void) +static bool8 sub_81136D4(void) { if (gSaveBlock1Ptr->location.mapGroup == 2 && (gSaveBlock1Ptr->location.mapNum == 1 || gSaveBlock1Ptr->location.mapNum == 2 || gSaveBlock1Ptr->location.mapNum == 3 || gSaveBlock1Ptr->location.mapNum == 4 || gSaveBlock1Ptr->location.mapNum == 5 || gSaveBlock1Ptr->location.mapNum == 6 || gSaveBlock1Ptr->location.mapNum == 7 || gSaveBlock1Ptr->location.mapNum == 8 || gSaveBlock1Ptr->location.mapNum == 9 || gSaveBlock1Ptr->location.mapNum == 10 || gSaveBlock1Ptr->location.mapNum == 11)) return TRUE; @@ -3123,7 +3120,7 @@ bool8 sub_8113748(void) return FALSE; } -bool8 sub_8113778(u16 a0, u16 * a1) +static bool8 sub_8113778(u16 a0, u16 * a1) { if (a0 == 36 || a0 == 11) return TRUE; @@ -3143,7 +3140,7 @@ bool8 sub_8113778(u16 a0, u16 * a1) return FALSE; } -bool8 sub_81137E4(u16 a0, u16 * a1) +static bool8 sub_81137E4(u16 a0, u16 * a1) { if (a0 == 34) { @@ -3158,12 +3155,12 @@ bool8 sub_81137E4(u16 a0, u16 * a1) return FALSE; } -void sub_811381C(void) +static void sub_811381C(void) { gUnknown_203B048 = 0; } -u16 * sub_8113828(u16 a0, u16 * a1) +static u16 * sub_8113828(u16 a0, u16 * a1) { if (sub_8113778(a0, a1) == TRUE) return NULL; @@ -3182,7 +3179,7 @@ u16 * sub_8113828(u16 a0, u16 * a1) return sQuestLogStorageCBs[a0](gUnknown_203AE08, a1); } -bool8 sub_81138A0(u16 a0, u16 * a1) +static bool8 sub_81138A0(u16 a0, u16 * a1) { if (a0 < 12 || a0 > 19) return FALSE; @@ -3218,7 +3215,7 @@ void sub_811390C(void) } } -bool8 sub_8113954(u16 a0, u16 * a1) +static bool8 sub_8113954(u16 a0, u16 * a1) { if (a0 != 34 && a0 != 30 && a0 != 32 && a0 != 33) return FALSE; @@ -3250,13 +3247,13 @@ void sub_81139BC(void) } } -void sub_8113A1C(u16 a0) +static void sub_8113A1C(u16 a0) { gUnknown_203AE08 = sub_8113C5C(gUnknown_203AE08, a0); gUnknown_203AF98++; } -bool8 sub_8113A44(u16 a0, u16 *a1) +static bool8 sub_8113A44(u16 a0, u16 *a1) { if (a0 != 31) return FALSE; @@ -3316,7 +3313,7 @@ static const u16 * (*const sQuestLogScriptParsingCBs[])(const u16 *) = { sub_8115800 }; -const u8 gUnknown_8456AA0[] = { +static const u8 gUnknown_8456AA0[] = { 0x08, 0x08, 0x08, @@ -3362,7 +3359,7 @@ const u8 gUnknown_8456AA0[] = { 0x06 }; -u16 * sub_8113A78(u16 * a0, u16 **a1) +static u16 * sub_8113A78(u16 * a0, u16 **a1) { u16 r2 = a0[0] & 0xfff; u16 r4 = a0[0] >> 12; @@ -3374,7 +3371,7 @@ u16 * sub_8113A78(u16 * a0, u16 **a1) return gUnknown_8456AA0[r2] + (gUnknown_8456AA0[r2] - 4) * r4 + (void *)a0; } -void sub_8113ABC(u16 * a0) +static void sub_8113ABC(u16 * a0) { u8 * r2 = (u8 *)(a0 + 2); if ((a0[0] & 0xFFF) != 35) @@ -3384,7 +3381,7 @@ void sub_8113ABC(u16 * a0) } #ifdef NONMATCHING -bool8 sub_8113AE8(u16 * a0) +static bool8 sub_8113AE8(u16 * a0) { if (a0 == NULL || a0[1] > gUnknown_203AF98) return FALSE; @@ -3398,7 +3395,7 @@ bool8 sub_8113AE8(u16 * a0) } #else NAKED -bool8 sub_8113AE8(u16 * a0) +static bool8 sub_8113AE8(u16 * a0) { asm_unified("\tpush {r4,lr}\n" "\tadds r4, r0, 0\n" @@ -3449,7 +3446,7 @@ bool8 sub_8113AE8(u16 * a0) } #endif -bool8 sub_8113B44(u16 * a0) +static bool8 sub_8113B44(u16 * a0) { if (gUnknown_203B044.unk_2 == 0) return FALSE; @@ -3461,12 +3458,12 @@ bool8 sub_8113B44(u16 * a0) return TRUE; } -void sub_8113B88(void) +static void sub_8113B88(void) { gUnknown_203B044 = (struct UnkStruct_203B044){}; } -void sub_8113B94(u16 a0) +static void sub_8113B94(u16 a0) { if (gUnknown_203B044.unk_0 != (u8)a0 || gUnknown_203B044.unk_2 != gUnknown_203AF98) { @@ -3478,14 +3475,14 @@ void sub_8113B94(u16 a0) gUnknown_203B044.unk_1++; } -void sub_8113BD8(void) +static void sub_8113BD8(void) { gUnknown_203B049 = 0; gUnknown_203B04A = 0; gUnknown_203B04B = 0; } -u16 * sub_8113BF4(u16 * a0) +static u16 * sub_8113BF4(u16 * a0) { if (!sub_8110988(a0, gUnknown_8456AA0[39])) return NULL; @@ -3493,7 +3490,7 @@ u16 * sub_8113BF4(u16 * a0) return a0 + 1; } -u16 * sub_8113C20(u16 * a0, struct UnkStruct_203AE98 * a1) +static u16 * sub_8113C20(u16 * a0, struct UnkStruct_203AE98 * a1) { if (!sub_8110988(a0, gUnknown_8456AA0[39])) return NULL; @@ -3506,7 +3503,7 @@ u16 * sub_8113C20(u16 * a0, struct UnkStruct_203AE98 * a1) return a0 + 1; } -u16 * sub_8113C5C(u16 * a0, u16 a1) +static u16 * sub_8113C5C(u16 * a0, u16 a1) { if (!sub_8110988(a0, gUnknown_8456AA0[41])) return NULL; @@ -3515,7 +3512,7 @@ u16 * sub_8113C5C(u16 * a0, u16 a1) return a0 + 2; } -u16 * sub_8113C8C(u16 * a0, struct UnkStruct_203AE98 * a1) +static u16 * sub_8113C8C(u16 * a0, struct UnkStruct_203AE98 * a1) { if (!sub_8110988(a0, gUnknown_8456AA0[41])) return NULL; @@ -3528,7 +3525,7 @@ u16 * sub_8113C8C(u16 * a0, struct UnkStruct_203AE98 * a1) return a0 + 2; } -u16 * sub_8113CC8(u16 * a0, struct UnkStruct_203AE98 * a1) +static u16 * sub_8113CC8(u16 * a0, struct UnkStruct_203AE98 * a1) { u8 * r6 = (u8 *)a0 + 4; @@ -3543,7 +3540,7 @@ u16 * sub_8113CC8(u16 * a0, struct UnkStruct_203AE98 * a1) return (u16 *)(r6 + 4); } -u16 * sub_8113D08(u16 * a0, struct UnkStruct_203AE98 * a1) +static u16 * sub_8113D08(u16 * a0, struct UnkStruct_203AE98 * a1) { u8 * r6 = (u8 *)a0 + 4; @@ -3558,7 +3555,7 @@ u16 * sub_8113D08(u16 * a0, struct UnkStruct_203AE98 * a1) return (u16 *)(r6 + 4); } -u16 * sub_8113D48(u16 * a0, struct UnkStruct_203AE98 * a1) +static u16 * sub_8113D48(u16 * a0, struct UnkStruct_203AE98 * a1) { u16 * r4 = a0; u8 * r6 = (u8 *)a0 + 4; @@ -3577,7 +3574,7 @@ u16 * sub_8113D48(u16 * a0, struct UnkStruct_203AE98 * a1) return (u16 *)(r6 + 4); } -u16 * sub_8113D94(u16 * a0, struct UnkStruct_203AE98 * a1) +static u16 * sub_8113D94(u16 * a0, struct UnkStruct_203AE98 * a1) { u16 * r5 = a0; u8 * r6 = (u8 *)a0 + 4; @@ -3636,7 +3633,7 @@ u16 * sub_8113DE0(u16 a0, u16 * a1) return r5; } -const u16 * sub_8113E88(u16 a0, const u16 * a1) +static const u16 * sub_8113E88(u16 a0, const u16 * a1) { a1 = (const void *)a1 + (gUnknown_203B044.unk_2 * (gUnknown_8456AA0[a0] - 4) + 4); return a1; @@ -3663,7 +3660,7 @@ void QuestLog_AutoGetSpeciesName(u16 a0, u8 * a1, u8 a2) } } -u16 * sub_8113F14(u16 * a0, const u16 * a1) +static u16 * sub_8113F14(u16 * a0, const u16 * a1) { u16 * r2 = sub_8113DE0(3, a0); if (r2 == NULL) @@ -3674,7 +3671,7 @@ u16 * sub_8113F14(u16 * a0, const u16 * a1) return r2 + 2; } -const u16 * sub_8113F3C(const u16 * a0) +static const u16 * sub_8113F3C(const u16 * a0) { const u16 * r4 = sub_8113E88(3, a0); QuestLog_AutoGetSpeciesName(r4[0], gStringVar1, 0); @@ -3684,7 +3681,7 @@ const u16 * sub_8113F3C(const u16 * a0) return r4; } -u16 * sub_8113F80(u16 * a0, const u16 * a1) +static u16 * sub_8113F80(u16 * a0, const u16 * a1) { u16 * r2 = sub_8113DE0(4, a0); if (r2 == NULL) @@ -3700,7 +3697,7 @@ u16 * sub_8113F80(u16 * a0, const u16 * a1) return r2 + 3; } -const u16 * sub_8113FBC(const u16 * a0) +static const u16 * sub_8113FBC(const u16 * a0) { const u16 * r5 = sub_8113E88(4, a0); @@ -3763,12 +3760,12 @@ u16 * sub_811414C(u16 a0, u16 * a1, const u16 * a2) return r1 + 2; } -u16 * sub_8114174(u16 * a0, const u16 * a1) +static u16 * sub_8114174(u16 * a0, const u16 * a1) { return sub_811414C(5, a0, a1); } -const u16 * sub_8114188(const u16 * a0) +static const u16 * sub_8114188(const u16 * a0) { const u16 * r4 = sub_8113E88(5, a0); QuestLog_AutoGetSpeciesName(r4[1], gStringVar1, 0); @@ -3778,12 +3775,12 @@ const u16 * sub_8114188(const u16 * a0) return r4; } -u16 * sub_81141D0(u16 * a0, const u16 * a1) +static u16 * sub_81141D0(u16 * a0, const u16 * a1) { return sub_811414C(6, a0, a1); } -const u16 * sub_81141E4(const u16 * a0) +static const u16 * sub_81141E4(const u16 * a0) { const u16 * r4 = sub_8113E88(6, a0); @@ -3794,12 +3791,12 @@ const u16 * sub_81141E4(const u16 * a0) return r4; } -u16 * sub_811422C(u16 * a0, const u16 * a1) +static u16 * sub_811422C(u16 * a0, const u16 * a1) { return sub_811414C(7, a0, a1); } -const u16 * sub_8114240(const u16 * a0) +static const u16 * sub_8114240(const u16 * a0) { const u16 * r4 = sub_8113E88(7, a0); @@ -3810,12 +3807,12 @@ const u16 * sub_8114240(const u16 * a0) return r4; } -u16 * sub_8114288(u16 * a0, const u16 * a1) +static u16 * sub_8114288(u16 * a0, const u16 * a1) { return sub_811414C(8, a0, a1); } -const u16 * sub_811429C(const u16 * a0) +static const u16 * sub_811429C(const u16 * a0) { const u16 * r4 = sub_8113E88(8, a0); @@ -3838,12 +3835,12 @@ u16 * sub_81142E4(u16 a0, u16 * a1, const u16 * a2) return r1 + 3; } -u16 * sub_8114310(u16 * a0, const u16 * a1) +static u16 * sub_8114310(u16 * a0, const u16 * a1) { return sub_81142E4(9, a0, a1); } -const u16 * sub_8114324(const u16 * a0) +static const u16 * sub_8114324(const u16 * a0) { const u16 * r4 = sub_8113E88(9, a0); QuestLog_AutoGetSpeciesName(r4[2], gStringVar1, 0); @@ -3854,12 +3851,12 @@ const u16 * sub_8114324(const u16 * a0) return r4; } -u16 * sub_8114380(u16 * a0, const u16 * a1) +static u16 * sub_8114380(u16 * a0, const u16 * a1) { return sub_81142E4(10, a0, a1); } -const u16 * sub_8114394(const u16 * a0) +static const u16 * sub_8114394(const u16 * a0) { const u16 * r4 = sub_8113E88(10, a0); QuestLog_AutoGetSpeciesName(r4[2], gStringVar2, 0); @@ -3870,7 +3867,7 @@ const u16 * sub_8114394(const u16 * a0) return r4; } -u16 * sub_81143F0(u16 * a0, const u16 * a1) +static u16 * sub_81143F0(u16 * a0, const u16 * a1) { u16 * r4 = a0; if (gUnknown_203B044.unk_0 == 11 && gUnknown_203B044.unk_1 != 0) @@ -3884,14 +3881,14 @@ u16 * sub_81143F0(u16 * a0, const u16 * a1) return r4 + 2; } -const u16 * sub_811443C(const u16 * a0) +static const u16 * sub_811443C(const u16 * a0) { StringExpandPlaceholders(gStringVar4, gUnknown_841A2B0); a0 += 2; return a0; } -u16 * sub_811445C(u16 * a0, const u16 * a1) +static u16 * sub_811445C(u16 * a0, const u16 * a1) { u16 * r4 = a0 + 4; @@ -3905,7 +3902,7 @@ u16 * sub_811445C(u16 * a0, const u16 * a1) return r4; } -const u16 * sub_811448C(const u16 * a0) +static const u16 * sub_811448C(const u16 * a0) { const u16 * r6 = a0 + 4; @@ -3920,25 +3917,25 @@ const u16 * sub_811448C(const u16 * a0) return r6; } -const u8 *const gUnknown_8456ACC[] = { +static const u8 *const gUnknown_8456ACC[] = { gUnknown_841A74E, gUnknown_841A756, gUnknown_841A762 }; -const u8 *const gUnknown_8456AD8[] = { +static const u8 *const gUnknown_8456AD8[] = { gUnknown_841AF98, gUnknown_841A762, gUnknown_841AF9F }; -const u8 *const gUnknown_8456AE4[] = { +static const u8 *const gUnknown_8456AE4[] = { gUnknown_841A502, gUnknown_841A506, gUnknown_841AFD1 }; -u16 * sub_81144EC(u16 * a0, const u16 * a1) +static u16 * sub_81144EC(u16 * a0, const u16 * a1) { a0[0] = 13; a0[1] = gUnknown_203AF98; @@ -3948,7 +3945,7 @@ u16 * sub_81144EC(u16 * a0, const u16 * a1) return a0; } -const u16 * sub_8114518(const u16 * a0) +static const u16 * sub_8114518(const u16 * a0) { DynamicPlaceholderTextUtil_Reset(); @@ -3962,7 +3959,7 @@ const u16 * sub_8114518(const u16 * a0) return a0; } -u16 * sub_8114578(u16 * a0, const u16 * a1) +static u16 * sub_8114578(u16 * a0, const u16 * a1) { a0[0] = 14; a0[1] = gUnknown_203AF98; @@ -3972,7 +3969,7 @@ u16 * sub_8114578(u16 * a0, const u16 * a1) return a0; } -const u16 * sub_81145A4(const u16 * a0) +static const u16 * sub_81145A4(const u16 * a0) { DynamicPlaceholderTextUtil_Reset(); @@ -3986,7 +3983,7 @@ const u16 * sub_81145A4(const u16 * a0) return a0; } -u16 * sub_8114604(u16 * a0, const u16 * a1) +static u16 * sub_8114604(u16 * a0, const u16 * a1) { a0[0] = 15; a0[1] = gUnknown_203AF98; @@ -3998,7 +3995,7 @@ u16 * sub_8114604(u16 * a0, const u16 * a1) return a0; } -const u16 * sub_811464C(const u16 * a0) +static const u16 * sub_811464C(const u16 * a0) { DynamicPlaceholderTextUtil_Reset(); @@ -4021,35 +4018,35 @@ const u16 * sub_811464C(const u16 * a0) return a0; } -u16 * sub_8114710(u16 * a0, const u16 * a1) +static u16 * sub_8114710(u16 * a0, const u16 * a1) { a0[0] = 16; a0[1] = gUnknown_203AF98; return a0 + 2; } -const u16 * sub_8114724(const u16 * a0) +static const u16 * sub_8114724(const u16 * a0) { StringExpandPlaceholders(gStringVar4, gUnknown_841A50B); a0 += 2; return a0; } -u16 * sub_8114744(u16 * a0, const u16 * a1) +static u16 * sub_8114744(u16 * a0, const u16 * a1) { a0[0] = 17; a0[1] = gUnknown_203AF98; return a0 + 2; } -const u16 * sub_8114758(const u16 * a0) +static const u16 * sub_8114758(const u16 * a0) { StringExpandPlaceholders(gStringVar4, gUnknown_841A732); a0 += 2; return a0; } -u16 * sub_8114778(u16 * a0, const u16 * a1) +static u16 * sub_8114778(u16 * a0, const u16 * a1) { u8 * r4 = (u8 *)(a0 + 4); a0[0] = 18; @@ -4061,7 +4058,7 @@ u16 * sub_8114778(u16 * a0, const u16 * a1) return (u16 *)r4; } -const u16 * sub_81147A8(const u16 * a0) +static const u16 * sub_81147A8(const u16 * a0) { const u8 * r6 = (const u8 *)(a0 + 4); memset(gStringVar1, EOS, 8); @@ -4074,7 +4071,7 @@ const u16 * sub_81147A8(const u16 * a0) return (const u16 *)r6; } -u16 * sub_8114808(u16 * a0, const u16 * a1) +static u16 * sub_8114808(u16 * a0, const u16 * a1) { a0[0] = 19; a0[1] = gUnknown_203AF98; @@ -4084,7 +4081,7 @@ u16 * sub_8114808(u16 * a0, const u16 * a1) return a0; } -const u16 * sub_8114834(const u16 * a0) +static const u16 * sub_8114834(const u16 * a0) { memset(gStringVar1, EOS, 8); memcpy(gStringVar1, (const u8 *)a0 + 5, 7); @@ -4095,7 +4092,7 @@ const u16 * sub_8114834(const u16 * a0) return a0; } -u16 * sub_811488C(u16 * a0, const u16 * a1) +static u16 * sub_811488C(u16 * a0, const u16 * a1) { a0 = sub_8113DE0(20, a0); if (a0 == NULL) @@ -4107,7 +4104,7 @@ u16 * sub_811488C(u16 * a0, const u16 * a1) return a0 + 3; } -const u16 * sub_81148BC(const u16 * a0) +static const u16 * sub_81148BC(const u16 * a0) { const u8 * boxIdxs; a0 = sub_8113E88(20, a0); @@ -4121,7 +4118,7 @@ const u16 * sub_81148BC(const u16 * a0) return a0 + 3; } -u16 * sub_8114918(u16 * a0, const u16 * a1) +static u16 * sub_8114918(u16 * a0, const u16 * a1) { a0 = sub_8113DE0(21, a0); if (a0 == NULL) @@ -4132,7 +4129,7 @@ u16 * sub_8114918(u16 * a0, const u16 * a1) return a0 + 3; } -const u16 * sub_8114944(const u16 * a0) +static const u16 * sub_8114944(const u16 * a0) { const u8 * boxIdxs; a0 = sub_8113E88(21, a0); @@ -4145,7 +4142,7 @@ const u16 * sub_8114944(const u16 * a0) return a0 + 3; } -u16 * sub_8114990(u16 * a0, const u16 * a1) +static u16 * sub_8114990(u16 * a0, const u16 * a1) { u16 * r2; u16 * ret; @@ -4168,7 +4165,7 @@ u16 * sub_8114990(u16 * a0, const u16 * a1) return ret + 1; } -const u16 * sub_81149D0(const u16 * a0) +static const u16 * sub_81149D0(const u16 * a0) { const u8 * boxIdxs; a0 = sub_8113E88(22, a0); @@ -4181,7 +4178,7 @@ const u16 * sub_81149D0(const u16 * a0) return a0 + 3; } -u16 * sub_8114A1C(u16 * a0, const u16 * a1) +static u16 * sub_8114A1C(u16 * a0, const u16 * a1) { u16 * r2; u16 * ret; @@ -4195,7 +4192,7 @@ u16 * sub_8114A1C(u16 * a0, const u16 * a1) return ret + 1; } -const u16 * sub_8114A4C(const u16 * a0) +static const u16 * sub_8114A4C(const u16 * a0) { const u8 * boxIdxs; a0 = sub_8113E88(23, a0); @@ -4208,7 +4205,7 @@ const u16 * sub_8114A4C(const u16 * a0) return (const u16 *)boxIdxs + 1; } -u16 * sub_8114AA0(u16 * a0, const u16 * a1) +static u16 * sub_8114AA0(u16 * a0, const u16 * a1) { u16 * r2; r2 = sub_8113DE0(24, a0); @@ -4219,7 +4216,7 @@ u16 * sub_8114AA0(u16 * a0, const u16 * a1) return r2 + 2; } -const u16 * sub_8114AC8(const u16 * a0) +static const u16 * sub_8114AC8(const u16 * a0) { const u8 * boxIdxs; a0 = sub_8113E88(24, a0); @@ -4231,7 +4228,7 @@ const u16 * sub_8114AC8(const u16 * a0) return (const u16 *)boxIdxs + 1; } -u16 * sub_8114B0C(u16 * a0, const u16 * a1) +static u16 * sub_8114B0C(u16 * a0, const u16 * a1) { u16 * r2; r2 = sub_8113DE0(25, a0); @@ -4242,7 +4239,7 @@ u16 * sub_8114B0C(u16 * a0, const u16 * a1) return r2 + 2; } -const u16 * sub_8114B34(const u16 * a0) +static const u16 * sub_8114B34(const u16 * a0) { const u8 * boxIdxs; a0 = sub_8113E88(25, a0); @@ -4254,7 +4251,7 @@ const u16 * sub_8114B34(const u16 * a0) return (const u16 *)boxIdxs + 1; } -u16 * sub_8114B78(u16 * a0, const u16 * a1) +static u16 * sub_8114B78(u16 * a0, const u16 * a1) { u16 * r2; r2 = sub_8113DE0(26, a0); @@ -4265,7 +4262,7 @@ u16 * sub_8114B78(u16 * a0, const u16 * a1) return r2 + 2; } -const u16 * sub_8114BA0(const u16 * a0) +static const u16 * sub_8114BA0(const u16 * a0) { const u8 * boxIdxs; a0 = sub_8113E88(26, a0); @@ -4277,7 +4274,7 @@ const u16 * sub_8114BA0(const u16 * a0) return (const u16 *)boxIdxs + 1; } -u16 * sub_8114BE4(u16 * a0, const u16 * a1) +static u16 * sub_8114BE4(u16 * a0, const u16 * a1) { u16 * r2; r2 = sub_8113DE0(27, a0); @@ -4288,7 +4285,7 @@ u16 * sub_8114BE4(u16 * a0, const u16 * a1) return r2 + 1; } -const u16 * sub_8114C0C(const u16 * a0) +static const u16 * sub_8114C0C(const u16 * a0) { const u16 *r4 = sub_8113E88(27, a0); DynamicPlaceholderTextUtil_Reset(); @@ -4301,7 +4298,7 @@ const u16 * sub_8114C0C(const u16 * a0) return r4 + 1; } -u16 * sub_8114C68(u16 * a0, const u16 * a1) +static u16 * sub_8114C68(u16 * a0, const u16 * a1) { a0 = sub_8113DE0(28, a0); if (a0 == NULL) @@ -4310,7 +4307,7 @@ u16 * sub_8114C68(u16 * a0, const u16 * a1) return a0 + 1; } -const u16 * sub_8114C8C(const u16 * a0) +static const u16 * sub_8114C8C(const u16 * a0) { const u16 *r4 = sub_8113E88(28, a0); CopyItemName(r4[0], gStringVar1); @@ -4318,7 +4315,7 @@ const u16 * sub_8114C8C(const u16 * a0) return r4 + 1; } -u16 * sub_8114CC0(u16 * a0, const u16 * a1) +static u16 * sub_8114CC0(u16 * a0, const u16 * a1) { a0 = sub_8113DE0(29, a0); if (a0 == NULL) @@ -4327,7 +4324,7 @@ u16 * sub_8114CC0(u16 * a0, const u16 * a1) return a0 + 1; } -const u16 * sub_8114CE4(const u16 * a0) +static const u16 * sub_8114CE4(const u16 * a0) { const u16 *r4 = sub_8113E88(29, a0); CopyItemName(r4[0], gStringVar1); @@ -4348,13 +4345,13 @@ u16 * sub_8114D18(u16 a0, u16 * a1, const u16 * a2) return a1 + 4; } -u16 * sub_8114D4C(u16 * a0, const u16 * a1) +static u16 * sub_8114D4C(u16 * a0, const u16 * a1) { gUnknown_203B048 = TRUE; return sub_8114D18(30, a0, a1); } -const u16 * sub_8114D68(const u16 * a0) +static const u16 * sub_8114D68(const u16 * a0) { const u8 * r6; a0 = sub_8113E88(30, a0); @@ -4370,7 +4367,7 @@ const u16 * sub_8114D68(const u16 * a0) return a0 + 4; } -u16 * sub_8114DE8(u16 * a0, const u16 * a1) +static u16 * sub_8114DE8(u16 * a0, const u16 * a1) { u16 * r4 = a0; u8 * r5 = (u8 *)a0 + 8; @@ -4393,7 +4390,7 @@ u16 * sub_8114DE8(u16 * a0, const u16 * a1) return (u16 *)(r5 + 4); } -const u16 * sub_8114E68(const u16 * a0) +static const u16 * sub_8114E68(const u16 * a0) { const u8 * r6; if (!sub_8110944(a0, gUnknown_8456AA0[31])) @@ -4441,7 +4438,7 @@ const u16 * sub_8114E68(const u16 * a0) return (const u16 *)(r6 + 4); } -bool8 sub_8114FBC(u16 a0) +static bool8 sub_8114FBC(u16 a0) { switch (a0) { @@ -4454,13 +4451,13 @@ bool8 sub_8114FBC(u16 a0) return FALSE; } -u16 * sub_8114FF0(u16 * a0, const u16 * a1) +static u16 * sub_8114FF0(u16 * a0, const u16 * a1) { gUnknown_203B048 = TRUE; return sub_8114D18(32, a0, a1); } -const u16 * sub_811500C(const u16 * a0) +static const u16 * sub_811500C(const u16 * a0) { const u8 * r5; a0 = sub_8113E88(32, a0); @@ -4474,7 +4471,7 @@ const u16 * sub_811500C(const u16 * a0) return a0 + 4; } -u16 * sub_8115078(u16 * a0, const u16 * a1) +static u16 * sub_8115078(u16 * a0, const u16 * a1) { if (!sub_8110944(a0, gUnknown_8456AA0[33])) return NULL; @@ -4487,7 +4484,7 @@ u16 * sub_8115078(u16 * a0, const u16 * a1) return a0 + 5; } -const u16 * sub_81150CC(const u16 * a0) +static const u16 * sub_81150CC(const u16 * a0) { const u8 * r5; if (!sub_8110944(a0, gUnknown_8456AA0[33])) @@ -4518,13 +4515,13 @@ const u16 * sub_81150CC(const u16 * a0) return (const u16 *)(r5 + 2); } -u16 * sub_81151C0(u16 * a0, const u16 * a1) +static u16 * sub_81151C0(u16 * a0, const u16 * a1) { gUnknown_203B048 = TRUE; return sub_8114D18(34, a0, a1); } -const u16 * sub_81151DC(const u16 * a0) +static const u16 * sub_81151DC(const u16 * a0) { const u16 * r5 = sub_8113E88(34, a0); const u8 * r6 = (const u8 *)r5 + 6; @@ -4546,7 +4543,7 @@ const u16 * sub_81151DC(const u16 * a0) return (const u16 *)(r6 + 2); } -const u8 *const gUnknown_8456AF0[] = { +static const u8 *const gUnknown_8456AF0[] = { gUnknown_841B09F, gUnknown_841B0A4, gUnknown_841B0B5, @@ -4600,7 +4597,7 @@ const u8 *const gUnknown_8456AF0[] = { gUnknown_841B277 }; -const u8 *const gUnknown_8456BBC[] = { +static const u8 *const gUnknown_8456BBC[] = { gUnknown_841A53A, gUnknown_841AD9E, gUnknown_841ADC8, @@ -4613,7 +4610,7 @@ const u8 *const gUnknown_8456BBC[] = { gUnknown_841B005 }; -const u8 gUnknown_8456BE4[] = { +static const u8 gUnknown_8456BE4[] = { 0x03, 0x04, 0x05, @@ -4667,7 +4664,7 @@ const u8 gUnknown_8456BE4[] = { 0x07 }; -const u8 gUnknown_8456C17[] = { +static const u8 gUnknown_8456C17[] = { 0x5a, 0x5b, 0x5d, @@ -4678,7 +4675,7 @@ const u8 gUnknown_8456C17[] = { 0x59 }; -const u8 *const gUnknown_8456C20[] = { +static const u8 *const gUnknown_8456C20[] = { gUnknown_841AC51, gUnknown_841ABAB, gUnknown_841ABCD, @@ -4693,7 +4690,7 @@ const u8 *const gUnknown_8456C20[] = { gUnknown_841AD3C }; -u16 * sub_8115280(u16 * a0, const u16 * a1) +static u16 * sub_8115280(u16 * a0, const u16 * a1) { u16 * r2 = sub_8113DE0(35, a0); if (r2 == NULL) @@ -4704,7 +4701,7 @@ u16 * sub_8115280(u16 * a0, const u16 * a1) return r2 + 1; } -const u16 * sub_81152BC(const u16 * a0) +static const u16 * sub_81152BC(const u16 * a0) { u8 r4, r6; const u16 * r5 = sub_8113E88(35, a0); @@ -4738,7 +4735,7 @@ void sub_811539C(void) gUnknown_203B04B = TRUE; } -bool8 sub_81153A8(u16 a0, u16 * a1) +static bool8 sub_81153A8(u16 a0, u16 * a1) { if (a0 != 35) { @@ -4751,7 +4748,7 @@ bool8 sub_81153A8(u16 a0, u16 * a1) return TRUE; } -bool8 sub_81153E4(u16 a0, u16 * a1) +static bool8 sub_81153E4(u16 a0, u16 * a1) { if (a0 != 35) return TRUE; @@ -4761,7 +4758,7 @@ bool8 sub_81153E4(u16 a0, u16 * a1) return TRUE; } -u16 * sub_8115410(u16 * a0, const u16 * a1) +static u16 * sub_8115410(u16 * a0, const u16 * a1) { u8 * r3; a0 = sub_8113DE0(36, a0); @@ -4778,7 +4775,7 @@ u16 * sub_8115410(u16 * a0, const u16 * a1) return (u16 *)(r3 + 2); } -const u16 * sub_8115460(const u16 * a0) +static const u16 * sub_8115460(const u16 * a0) { const u16 * r4 = sub_8113E88(36, a0); const u8 * r5 = (const u8 *)r4 + 2; @@ -4796,7 +4793,7 @@ const u16 * sub_8115460(const u16 * a0) return (const u16 *)(r5 + 2); } -u16 * sub_81154DC(u16 * a0, const u16 * a1) +static u16 * sub_81154DC(u16 * a0, const u16 * a1) { a0 = sub_8113DE0(37, a0); if (a0 == NULL) @@ -4810,7 +4807,7 @@ u16 * sub_81154DC(u16 * a0, const u16 * a1) return a0 + 5; } -const u16 * sub_8115518(const u16 * a0) +static const u16 * sub_8115518(const u16 * a0) { const u16 * r4 = sub_8113E88(37, a0); const u8 * r7 = (const u8 *)r4 + 8; @@ -4830,7 +4827,7 @@ const u16 * sub_8115518(const u16 * a0) return (const u16 *)(r7 + 2); } -u16 * sub_81155A4(u16 * a0, const u16 * a1) +static u16 * sub_81155A4(u16 * a0, const u16 * a1) { a0 = sub_8113DE0(38, a0); if (a0 == NULL) @@ -4844,7 +4841,7 @@ u16 * sub_81155A4(u16 * a0, const u16 * a1) return a0 + 5; } -const u16 * sub_81155E0(const u16 * a0) { +static const u16 * sub_81155E0(const u16 * a0) { const u16 *r5 = sub_8113E88(38, a0); const u8 *r7 = (const u8 *) r5 + 8; u32 r6 = (r5[2] << 16) + r5[3]; @@ -4876,7 +4873,7 @@ const u16 * sub_81155E0(const u16 * a0) { return (const u16 *)(r7 + 2); } -u16 * sub_81156D8(u16 * a0, const u16 * a1) +static u16 * sub_81156D8(u16 * a0, const u16 * a1) { a0 = sub_8113DE0(40, a0); if (a0 == NULL) @@ -4886,7 +4883,7 @@ u16 * sub_81156D8(u16 * a0, const u16 * a1) return a0 + 2; } -const u16 * sub_8115700(const u16 * a0) +static const u16 * sub_8115700(const u16 * a0) { const u16 * r4 = sub_8113E88(40, a0); const u8 * r5 = (const u8 *)r4 + 2; @@ -4896,7 +4893,7 @@ const u16 * sub_8115700(const u16 * a0) return (const u16 *)(r5 + 2); } -const u16 gUnknown_8456C50[] = { +static const u16 gUnknown_8456C50[] = { 0x0891, 0x0892, 0x0893, @@ -4993,7 +4990,7 @@ void sub_8115798(void) } } -u16 * sub_81157DC(u16 * a0, const u16 * a1) +static u16 * sub_81157DC(u16 * a0, const u16 * a1) { a0 = sub_8113DE0(42, a0); if (a0 == NULL) @@ -5002,7 +4999,7 @@ u16 * sub_81157DC(u16 * a0, const u16 * a1) return a0 + 1; } -const u16 * sub_8115800(const u16 * a0) +static const u16 * sub_8115800(const u16 * a0) { const u16 * r4 = sub_8113E88(42, a0); sub_80C4DF8(gStringVar1, r4[0]);