diff options
author | fieldy101 <fieldy101@gmail.com> | 2020-04-22 22:29:35 +1000 |
---|---|---|
committer | fieldy101 <fieldy101@gmail.com> | 2020-04-22 23:30:44 +1000 |
commit | 9634b58d7ae9acb42c1cad41553a1806879d47cf (patch) | |
tree | b476adc421013dc2ed420db9345aadac1e854a4e | |
parent | cdc705f7e36436924b4ce5f7815983a862c52873 (diff) |
Port emerald water functions into firered
-rw-r--r-- | asm/water.s | 3775 | ||||
-rw-r--r-- | data/battle_anim_effects_misc.s | 210 | ||||
-rw-r--r-- | data/battle_anim_scripts.s | 256 | ||||
-rw-r--r-- | graphics/battle_anims/backgrounds/water_contest.bin (renamed from graphics/unknown/unknown_E822B8.bin) | 0 | ||||
-rw-r--r-- | graphics/battle_anims/backgrounds/water_opponent.bin (renamed from graphics/unknown/unknown_E81D14.bin) | bin | 4096 -> 4096 bytes | |||
-rw-r--r-- | graphics/battle_anims/backgrounds/water_player.bin (renamed from graphics/unknown/unknown_E81FE4.bin) | 0 | ||||
-rw-r--r-- | include/battle_anim.h | 16 | ||||
-rw-r--r-- | include/graphics.h | 6 | ||||
-rw-r--r-- | include/random.h | 2 | ||||
-rw-r--r-- | src/battle_anim_mons.c | 2 | ||||
-rw-r--r-- | src/battle_anim_status_effects.c | 2 | ||||
-rw-r--r-- | src/fire.c | 2 | ||||
-rw-r--r-- | src/graphics.c | 14 | ||||
-rw-r--r-- | src/ground.c | 2 | ||||
-rw-r--r-- | src/ice.c | 4 | ||||
-rw-r--r-- | src/normal.c | 2 | ||||
-rw-r--r-- | src/poison.c | 6 | ||||
-rw-r--r-- | src/rock.c | 4 | ||||
-rw-r--r-- | src/water.c | 2225 |
19 files changed, 2391 insertions, 4137 deletions
diff --git a/asm/water.s b/asm/water.s deleted file mode 100644 index 89fcfa3c8..000000000 --- a/asm/water.s +++ /dev/null @@ -1,3775 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80AABC0 -sub_80AABC0: @ 80AABC0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - ldr r1, _080AAC48 @ =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 _080AABE8 - ldr r1, _080AAC4C @ =gBattleAnimArgs - ldrh r0, [r1] - strh r0, [r5, 0xA] - ldrh r0, [r1, 0x2] - strh r0, [r5, 0xC] - ldrh r0, [r1, 0x4] - strh r0, [r5, 0xE] -_080AABE8: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r2, 0x8 - ldrsh r0, [r5, r2] - movs r2, 0xC - ldrsh r1, [r5, r2] - bl __modsi3 - cmp r0, 0x1 - bne _080AAC30 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF0 - bl __umodsi3 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x50 - bl __umodsi3 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _080AAC50 @ =gUnknown_83E5898 - adds r1, r4, 0 - movs r3, 0x4 - bl CreateSprite -_080AAC30: - movs r0, 0x8 - ldrsh r1, [r5, r0] - movs r2, 0xE - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _080AAC42 - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080AAC42: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AAC48: .4byte gTasks -_080AAC4C: .4byte gBattleAnimArgs -_080AAC50: .4byte gUnknown_83E5898 - thumb_func_end sub_80AABC0 - - thumb_func_start sub_80AAC54 -sub_80AAC54: @ 80AAC54 - ldr r1, _080AAC5C @ =sub_80AAC60 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080AAC5C: .4byte sub_80AAC60 - thumb_func_end sub_80AAC54 - - thumb_func_start sub_80AAC60 -sub_80AAC60: @ 80AAC60 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - bgt _080AAC7E - ldrh r0, [r2, 0x24] - adds r0, 0x1 - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x26] - adds r0, 0x4 - strh r0, [r2, 0x26] -_080AAC7E: - adds r0, r2, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080AAC92 - adds r0, r2, 0 - bl DestroySprite -_080AAC92: - pop {r0} - bx r0 - thumb_func_end sub_80AAC60 - - thumb_func_start sub_80AAC98 -sub_80AAC98: @ 80AAC98 - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, _080AACC0 @ =gBattleAnimAttacker - ldrb r0, [r5] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AACC8 - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldr r4, _080AACC4 @ =gBattleAnimArgs - ldrh r1, [r4] - subs r0, r1 - b _080AACDA - .align 2, 0 -_080AACC0: .4byte gBattleAnimAttacker -_080AACC4: .4byte gBattleAnimArgs -_080AACC8: - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - ldr r4, _080AADA0 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r1, [r4] - adds r0, r1 -_080AACDA: - strh r0, [r6, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r4, [r4, 0x2] - adds r0, r4 - strh r0, [r6, 0x22] - adds r2, r6, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x40 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080AADA4 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AAD10 - ldr r1, _080AADA0 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_080AAD10: - ldr r5, _080AADA0 @ =gBattleAnimArgs - ldrh r0, [r5, 0xC] - strh r0, [r6, 0x2E] - ldrh r0, [r6, 0x20] - strh r0, [r6, 0x30] - ldr r4, _080AADA8 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x32] - ldrh r0, [r6, 0x22] - strh r0, [r6, 0x34] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x36] - adds r0, r6, 0 - bl InitAnimLinearTranslation - ldr r0, _080AADAC @ =SpriteCallbackDummy - bl CreateInvisibleSpriteWithCallback - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - strh r4, [r6, 0x38] - ldrb r0, [r5, 0x8] - movs r2, 0x4 - ldrsh r1, [r5, r2] - bl Sin - ldrh r1, [r6, 0x20] - subs r1, r0 - strh r1, [r6, 0x20] - ldrb r0, [r5, 0x8] - movs r2, 0x6 - ldrsh r1, [r5, r2] - bl Cos - ldrh r1, [r6, 0x22] - subs r1, r0 - strh r1, [r6, 0x22] - ldr r0, _080AADB0 @ =gSprites - lsls r1, r4, 4 - adds r1, r4 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r5, 0x4] - strh r0, [r1, 0x2E] - ldrh r0, [r5, 0x6] - strh r0, [r1, 0x30] - ldrh r0, [r5, 0xA] - strh r0, [r1, 0x32] - ldrb r0, [r5, 0x8] - lsls r0, 8 - strh r0, [r1, 0x34] - ldrh r0, [r5, 0xC] - strh r0, [r1, 0x36] - ldr r1, _080AADB4 @ =sub_80AADB8 - str r1, [r6, 0x1C] - adds r0, r6, 0 - bl _call_via_r1 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AADA0: .4byte gBattleAnimArgs -_080AADA4: .4byte gBattleAnimAttacker -_080AADA8: .4byte gBattleAnimTarget -_080AADAC: .4byte SpriteCallbackDummy -_080AADB0: .4byte gSprites -_080AADB4: .4byte sub_80AADB8 - thumb_func_end sub_80AAC98 - - thumb_func_start sub_80AADB8 -sub_80AADB8: @ 80AADB8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r5, r0, 0 - ldrh r1, [r5, 0x38] - lsls r1, 24 - lsrs r1, 24 - ldr r2, _080AAE20 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r7, r0, r2 - ldrh r4, [r7, 0x36] - lsls r4, 24 - lsrs r4, 24 - ldrh r0, [r7, 0x34] - mov r8, r0 - movs r0, 0x1 - strh r0, [r5, 0x2E] - adds r0, r5, 0 - bl AnimTranslateLinear - mov r1, r8 - lsrs r6, r1, 8 - movs r0, 0x2E - ldrsh r1, [r7, r0] - adds r0, r6, 0 - bl Sin - ldrh r1, [r5, 0x24] - adds r0, r1 - strh r0, [r5, 0x24] - movs r0, 0x30 - ldrsh r1, [r7, r0] - adds r0, r6, 0 - bl Cos - ldrh r1, [r5, 0x26] - adds r0, r1 - strh r0, [r5, 0x26] - ldrh r0, [r7, 0x32] - mov r1, r8 - adds r1, r0 - strh r1, [r7, 0x34] - subs r4, 0x1 - lsls r4, 24 - lsrs r4, 24 - cmp r4, 0 - beq _080AAE24 - strh r4, [r7, 0x36] - b _080AAE2E - .align 2, 0 -_080AAE20: .4byte gSprites -_080AAE24: - ldr r0, _080AAE3C @ =sub_80AAE40 - str r0, [r5, 0x1C] - adds r0, r7, 0 - bl DestroySprite -_080AAE2E: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AAE3C: .4byte sub_80AAE40 - thumb_func_end sub_80AADB8 - - thumb_func_start sub_80AAE40 -sub_80AAE40: @ 80AAE40 - push {lr} - adds r3, r0, 0 - adds r3, 0x2C - ldrb r2, [r3] - movs r1, 0x41 - negs r1, r1 - ands r1, r2 - strb r1, [r3] - ldr r1, _080AAE60 @ =RunStoredCallbackWhenAnimEnds - str r1, [r0, 0x1C] - ldr r1, _080AAE64 @ =sub_80AAE68 - bl StoreSpriteCallbackInData6 - pop {r0} - bx r0 - .align 2, 0 -_080AAE60: .4byte RunStoredCallbackWhenAnimEnds -_080AAE64: .4byte sub_80AAE68 - thumb_func_end sub_80AAE40 - - thumb_func_start sub_80AAE68 -sub_80AAE68: @ 80AAE68 - push {lr} - movs r1, 0xA - strh r1, [r0, 0x2E] - ldr r1, _080AAE7C @ =WaitAnimForDuration - str r1, [r0, 0x1C] - ldr r1, _080AAE80 @ =DestroySpriteAndMatrix - bl StoreSpriteCallbackInData6 - pop {r0} - bx r0 - .align 2, 0 -_080AAE7C: .4byte WaitAnimForDuration -_080AAE80: .4byte DestroySpriteAndMatrix - thumb_func_end sub_80AAE68 - - thumb_func_start sub_80AAE84 -sub_80AAE84: @ 80AAE84 - push {r4-r7,lr} - adds r5, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r0, _080AAEAC @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AAEB4 - ldr r1, _080AAEB0 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - lsls r0, 16 - lsrs r6, r0, 16 - adds r7, r1, 0 - b _080AAEBA - .align 2, 0 -_080AAEAC: .4byte gBattleAnimAttacker -_080AAEB0: .4byte gBattleAnimArgs -_080AAEB4: - ldr r0, _080AAF10 @ =gBattleAnimArgs - ldrh r6, [r0, 0x4] - adds r7, r0, 0 -_080AAEBA: - ldrh r0, [r7, 0x8] - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldr r4, _080AAF14 @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - adds r0, r6 - 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 - ldrh r7, [r7, 0x6] - adds r0, r7 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl InitAnimLinearTranslation - ldr r0, _080AAF18 @ =sub_80AAF1C - str r0, [r5, 0x1C] - adds r2, r5, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] - ldr r1, [r5, 0x1C] - adds r0, r5, 0 - bl _call_via_r1 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AAF10: .4byte gBattleAnimArgs -_080AAF14: .4byte gBattleAnimTarget -_080AAF18: .4byte sub_80AAF1C - thumb_func_end sub_80AAE84 - - thumb_func_start sub_80AAF1C -sub_80AAF1C: @ 80AAF1C - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080AAF58 @ =gBattleAnimArgs - ldrh r1, [r0, 0xE] - ldr r0, _080AAF5C @ =0x0000ffff - cmp r1, r0 - bne _080AAF3E - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim - adds r2, r4, 0 - adds r2, 0x2C - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] -_080AAF3E: - adds r0, r4, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - beq _080AAF50 - adds r0, r4, 0 - bl DestroyAnimSprite -_080AAF50: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AAF58: .4byte gBattleAnimArgs -_080AAF5C: .4byte 0x0000ffff - thumb_func_end sub_80AAF1C - - thumb_func_start sub_80AAF60 -sub_80AAF60: @ 80AAF60 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080AAF94 @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - ldr r0, _080AAF98 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r4, 0x8] - ldr r0, _080AAF9C @ =0x0000279c - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 20 - movs r1, 0x80 - lsls r1, 1 - adds r0, r1 - strh r0, [r4, 0xC] - ldr r0, _080AAFA0 @ =sub_80AAFA4 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AAF94: .4byte gTasks -_080AAF98: .4byte gBattleAnimArgs -_080AAF9C: .4byte 0x0000279c -_080AAFA0: .4byte sub_80AAFA4 - thumb_func_end sub_80AAF60 - - thumb_func_start sub_80AAFA4 -sub_80AAFA4: @ 80AAFA4 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080AB01C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r1 - ldrh r0, [r2, 0x1C] - adds r0, 0x1 - strh r0, [r2, 0x1C] - lsls r0, 16 - asrs r0, 16 - mov r12, r1 - cmp r0, 0x3 - bne _080AAFF6 - movs r0, 0 - strh r0, [r2, 0x1C] - ldrh r0, [r2, 0xC] - adds r0, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r1, _080AB020 @ =gPlttBufferFaded - lsls r0, r5, 1 - adds r0, r1 - ldrh r6, [r0] - adds r7, r1, 0 - adds r3, r0, 0x2 - movs r1, 0x6 - adds r2, r0, 0 -_080AAFE0: - ldrh r0, [r3] - strh r0, [r2] - adds r3, 0x2 - adds r2, 0x2 - subs r1, 0x1 - cmp r1, 0 - bge _080AAFE0 - adds r0, r5, 0x7 - lsls r0, 1 - adds r0, r7 - strh r6, [r0] -_080AAFF6: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - add r0, r12 - ldrh r1, [r0, 0x1E] - adds r1, 0x1 - strh r1, [r0, 0x1E] - lsls r1, 16 - asrs r1, 16 - movs r2, 0x8 - ldrsh r0, [r0, r2] - cmp r1, r0 - bne _080AB016 - adds r0, r4, 0 - bl DestroyAnimVisualTask -_080AB016: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AB01C: .4byte gTasks -_080AB020: .4byte gPlttBufferFaded - thumb_func_end sub_80AAFA4 - - thumb_func_start sub_80AB024 -sub_80AB024: @ 80AB024 - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - movs r0, 0x1E - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldr r4, _080AB08C @ =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 - movs r0, 0x2E - ldrsh r1, [r5, r0] - movs r0, 0xD2 - lsls r0, 8 - bl __divsi3 - strh r0, [r5, 0x38] - ldr r0, _080AB090 @ =gBattleAnimArgs - ldrh r2, [r0, 0x6] - strh r2, [r5, 0x3C] - ldrh r1, [r0, 0xE] - movs r3, 0xE - ldrsh r0, [r0, r3] - cmp r0, 0x7F - ble _080AB094 - adds r0, r1, 0 - subs r0, 0x7F - lsls r0, 8 - strh r0, [r5, 0x3A] - negs r0, r2 - strh r0, [r5, 0x3C] - b _080AB098 - .align 2, 0 -_080AB08C: .4byte gBattleAnimTarget -_080AB090: .4byte gBattleAnimArgs -_080AB094: - lsls r0, r1, 8 - strh r0, [r5, 0x3A] -_080AB098: - ldr r1, _080AB0A8 @ =sub_80AB0AC - str r1, [r5, 0x1C] - adds r0, r5, 0 - bl _call_via_r1 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AB0A8: .4byte sub_80AB0AC - thumb_func_end sub_80AB024 - - thumb_func_start sub_80AB0AC -sub_80AB0AC: @ 80AB0AC - push {r4,lr} - adds r4, r0, 0 - bl AnimTranslateLinear - lsls r0, 24 - cmp r0, 0 - beq _080AB0C0 - adds r0, r4, 0 - bl DestroyAnimSprite -_080AB0C0: - ldrh r0, [r4, 0x3A] - lsls r0, 16 - asrs r0, 24 - movs r2, 0x3C - ldrsh r1, [r4, r2] - bl Sin - ldrh r1, [r4, 0x26] - adds r0, r1 - strh r0, [r4, 0x26] - movs r2, 0x3A - ldrsh r0, [r4, r2] - movs r2, 0x38 - ldrsh r1, [r4, r2] - adds r0, r1 - asrs r0, 8 - cmp r0, 0x7F - ble _080AB0F0 - movs r0, 0 - strh r0, [r4, 0x3A] - ldrh r0, [r4, 0x3C] - negs r0, r0 - strh r0, [r4, 0x3C] - b _080AB0F8 -_080AB0F0: - ldrh r0, [r4, 0x38] - ldrh r1, [r4, 0x3A] - adds r0, r1 - strh r0, [r4, 0x3A] -_080AB0F8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AB0AC - - thumb_func_start sub_80AB100 -sub_80AB100: @ 80AB100 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080AB120 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r3, _080AB124 @ =gBattleAnimArgs - ldrh r0, [r3] - movs r2, 0 - strh r0, [r1, 0x8] - strh r2, [r3, 0xE] - ldr r0, _080AB128 @ =sub_80AB12C - str r0, [r1] - bx lr - .align 2, 0 -_080AB120: .4byte gTasks -_080AB124: .4byte gBattleAnimArgs -_080AB128: .4byte sub_80AB12C - thumb_func_end sub_80AB100 - - thumb_func_start sub_80AB12C -sub_80AB12C: @ 80AB12C - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r2, _080AB160 @ =gBattleAnimArgs - ldrh r0, [r2, 0xE] - adds r0, 0x3 - movs r1, 0xFF - ands r0, r1 - strh r0, [r2, 0xE] - ldr r1, _080AB164 @ =gTasks - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x8] - subs r1, 0x1 - strh r1, [r0, 0x8] - lsls r1, 16 - cmp r1, 0 - bne _080AB15A - adds r0, r3, 0 - bl DestroyAnimVisualTask -_080AB15A: - pop {r0} - bx r0 - .align 2, 0 -_080AB160: .4byte gBattleAnimArgs -_080AB164: .4byte gTasks - thumb_func_end sub_80AB12C - - thumb_func_start sub_80AB168 -sub_80AB168: @ 80AB168 - push {r4-r7,lr} - adds r4, r0, 0 - ldr r7, _080AB1B4 @ =gBattleAnimAttacker - ldrb r0, [r7] - movs r1, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - ldrb r0, [r7] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - ldr r6, _080AB1B8 @ =0x0000fff6 - strh r6, [r4, 0x26] - ldrb r0, [r7] - bl GetBattlerSpriteSubpriority - lsls r0, 24 - lsrs r5, r0, 24 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080AB1C2 - ldrb r0, [r7] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080AB1BC - movs r0, 0xA - strh r0, [r4, 0x24] - b _080AB1C4 - .align 2, 0 -_080AB1B4: .4byte gBattleAnimAttacker -_080AB1B8: .4byte 0x0000fff6 -_080AB1BC: - strh r6, [r4, 0x24] - subs r0, r5, 0x2 - b _080AB1C6 -_080AB1C2: - strh r6, [r4, 0x24] -_080AB1C4: - adds r0, r5, 0x2 -_080AB1C6: - adds r1, r4, 0 - adds r1, 0x43 - strb r0, [r1] - ldr r0, _080AB1D8 @ =sub_80AB1DC - str r0, [r4, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AB1D8: .4byte sub_80AB1DC - thumb_func_end sub_80AB168 - - thumb_func_start sub_80AB1DC -sub_80AB1DC: @ 80AB1DC - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080AB1F2 - adds r0, r2, 0 - bl DestroyAnimSprite -_080AB1F2: - pop {r0} - bx r0 - thumb_func_end sub_80AB1DC - - thumb_func_start sub_80AB1F8 -sub_80AB1F8: @ 80AB1F8 - push {r4-r7,lr} - adds r6, r0, 0 - ldr r5, _080AB2B8 @ =gBattleAnimAttacker - ldrb r0, [r5] - bl GetBattlerSide - adds r4, r0, 0 - ldr r0, _080AB2BC @ =gBattleAnimTarget - ldrb r0, [r0] - bl GetBattlerSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _080AB242 - ldr r4, _080AB2C0 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r4, r1] - negs r0, r0 - strh r0, [r4] - ldrb r0, [r5] - bl GetBattlerPosition - lsls r0, 24 - cmp r0, 0 - beq _080AB23A - ldrb r0, [r5] - bl GetBattlerPosition - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080AB242 -_080AB23A: - movs r1, 0 - ldrsh r0, [r4, r1] - negs r0, r0 - strh r0, [r4] -_080AB242: - ldr r5, _080AB2C0 @ =gBattleAnimArgs - movs r1, 0xA - ldrsh r0, [r5, r1] - movs r1, 0xFF - lsls r1, 8 - ands r0, r1 - movs r1, 0 - cmp r0, 0 - bne _080AB256 - movs r1, 0x1 -_080AB256: - ldrb r0, [r5, 0xA] - movs r7, 0x1 - cmp r0, 0 - bne _080AB260 - movs r7, 0x3 -_080AB260: - adds r0, r6, 0 - bl InitSpritePosToAnimAttacker - ldr r0, _080AB2B8 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _080AB27A - ldrh r0, [r5, 0x4] - negs r0, r0 - strh r0, [r5, 0x4] -_080AB27A: - ldrh r0, [r5, 0x8] - strh r0, [r6, 0x2E] - ldr r4, _080AB2BC @ =gBattleAnimTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r5, 0x4] - adds r0, r1 - strh r0, [r6, 0x32] - ldrb r0, [r4] - adds r1, r7, 0 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - ldrh r5, [r5, 0x6] - adds r0, r5 - strh r0, [r6, 0x36] - ldr r0, _080AB2C4 @ =StartAnimLinearTranslation - str r0, [r6, 0x1C] - ldr r1, _080AB2C8 @ =DestroyAnimSprite - adds r0, r6, 0 - bl StoreSpriteCallbackInData6 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AB2B8: .4byte gBattleAnimAttacker -_080AB2BC: .4byte gBattleAnimTarget -_080AB2C0: .4byte gBattleAnimArgs -_080AB2C4: .4byte StartAnimLinearTranslation -_080AB2C8: .4byte DestroyAnimSprite - thumb_func_end sub_80AB1F8 - - thumb_func_start sub_80AB2CC -sub_80AB2CC: @ 80AB2CC - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - ldr r0, _080AB2FC @ =gBattleAnimArgs - ldrh r1, [r0, 0x8] - strh r1, [r4, 0x2E] - ldrh r0, [r0, 0x4] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x22] - adds r1, r0 - strh r1, [r4, 0x36] - ldr r0, _080AB300 @ =StartAnimLinearTranslation - str r0, [r4, 0x1C] - ldr r1, _080AB304 @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData6 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AB2FC: .4byte gBattleAnimArgs -_080AB300: .4byte StartAnimLinearTranslation -_080AB304: .4byte DestroyAnimSprite - thumb_func_end sub_80AB2CC - - thumb_func_start sub_80AB308 -sub_80AB308: @ 80AB308 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080AB320 @ =gBattleAnimArgs - movs r1, 0x6 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _080AB324 - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - b _080AB32C - .align 2, 0 -_080AB320: .4byte gBattleAnimArgs -_080AB324: - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker -_080AB32C: - ldr r0, _080AB33C @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r4, 0x3C] - ldr r0, _080AB340 @ =sub_80AB344 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AB33C: .4byte gBattleAnimArgs -_080AB340: .4byte sub_80AB344 - thumb_func_end sub_80AB308 - - thumb_func_start sub_80AB344 -sub_80AB344: @ 80AB344 - 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] - 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 _080AB384 - adds r0, r4, 0 - bl DestroyAnimSprite -_080AB384: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AB344 - - thumb_func_start sub_80AB38C -sub_80AB38C: @ 80AB38C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldr r1, _080AB3FC @ =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, 0x1 - bl SetAnimBgAttribute - mov r0, sp - bl sub_80752A0 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080AB418 - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0x1 - bl SetAnimBgAttribute - ldr r0, _080AB400 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080AB408 - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080AB404 @ =gFile_graphics_unknown_unknown_E81D14_tilemap - bl AnimLoadCompressedBgTilemap - b _080AB42E - .align 2, 0 -_080AB3FC: .4byte 0x00003f42 -_080AB400: .4byte gBattleAnimAttacker -_080AB404: .4byte gFile_graphics_unknown_unknown_E81D14_tilemap -_080AB408: - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080AB414 @ =gFile_graphics_unknown_unknown_E81FE4_tilemap - bl AnimLoadCompressedBgTilemap - b _080AB42E - .align 2, 0 -_080AB414: .4byte gFile_graphics_unknown_unknown_E81FE4_tilemap -_080AB418: - ldr r0, _080AB458 @ =gFile_graphics_unknown_unknown_E822B8_tilemap - ldr r1, [sp, 0x4] - bl LZDecompressVram - mov r0, sp - ldrb r0, [r0, 0x8] - ldr r1, [sp, 0x4] - movs r2, 0 - movs r3, 0x1 - bl sub_80730C0 -_080AB42E: - mov r0, sp - ldrb r0, [r0, 0x9] - ldr r1, _080AB45C @ =gFile_graphics_battle_anims_backgrounds_water_sheet - mov r2, sp - ldrh r2, [r2, 0xA] - bl AnimLoadCompressedBgGfx - ldr r0, _080AB460 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080AB468 - ldr r0, _080AB464 @ =gFile_graphics_battle_anims_backgrounds_water_palette - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadCompressedPalette - b _080AB476 - .align 2, 0 -_080AB458: .4byte gFile_graphics_unknown_unknown_E822B8_tilemap -_080AB45C: .4byte gFile_graphics_battle_anims_backgrounds_water_sheet -_080AB460: .4byte gBattleAnimArgs -_080AB464: .4byte gFile_graphics_battle_anims_backgrounds_water_palette -_080AB468: - ldr r0, _080AB4E0 @ =gFile_graphics_battle_anims_backgrounds_water_muddy_palette - mov r1, sp - ldrb r1, [r1, 0x8] - lsls r1, 4 - movs r2, 0x20 - bl LoadCompressedPalette -_080AB476: - ldr r0, _080AB4E4 @ =sub_80AB79C - ldr r4, _080AB4E8 @ =gTasks - mov r2, r10 - lsls r5, r2, 2 - adds r1, r5, r2 - lsls r1, 3 - adds r6, r1, r4 - ldrb r1, [r6, 0x7] - adds r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r0, 0 - mov r9, r0 - mov r1, r8 - strh r1, [r6, 0x26] - mov r2, r8 - lsls r0, r2, 2 - add r0, r8 - lsls r0, 3 - adds r7, r0, r4 - mov r0, r9 - strh r0, [r7, 0x8] - movs r0, 0x80 - lsls r0, 5 - strh r0, [r7, 0xA] - strh r0, [r7, 0xC] - bl IsContest - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _080AB4F8 - ldr r1, _080AB4EC @ =0x0000ffb0 - adds r0, r1, 0 - ldr r2, _080AB4F0 @ =gBattle_BG1_X - strh r0, [r2] - adds r1, 0x20 - adds r0, r1, 0 - ldr r2, _080AB4F4 @ =gBattle_BG1_Y - strh r0, [r2] - movs r0, 0x2 - strh r0, [r6, 0x8] - movs r0, 0x1 - strh r0, [r6, 0xA] - mov r0, r9 - strh r0, [r7, 0xE] - b _080AB552 - .align 2, 0 -_080AB4E0: .4byte gFile_graphics_battle_anims_backgrounds_water_muddy_palette -_080AB4E4: .4byte sub_80AB79C -_080AB4E8: .4byte gTasks -_080AB4EC: .4byte 0x0000ffb0 -_080AB4F0: .4byte gBattle_BG1_X -_080AB4F4: .4byte gBattle_BG1_Y -_080AB4F8: - ldr r0, _080AB528 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x1 - bne _080AB53C - ldr r2, _080AB52C @ =0x0000ff20 - adds r0, r2, 0 - ldr r2, _080AB530 @ =gBattle_BG1_X - strh r0, [r2] - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - ldr r2, _080AB534 @ =gBattle_BG1_Y - strh r0, [r2] - movs r0, 0x2 - strh r0, [r6, 0x8] - ldr r0, _080AB538 @ =0x0000ffff - strh r0, [r6, 0xA] - strh r1, [r7, 0xE] - b _080AB552 - .align 2, 0 -_080AB528: .4byte gBattleAnimAttacker -_080AB52C: .4byte 0x0000ff20 -_080AB530: .4byte gBattle_BG1_X -_080AB534: .4byte gBattle_BG1_Y -_080AB538: .4byte 0x0000ffff -_080AB53C: - ldr r0, _080AB584 @ =gBattle_BG1_X - strh r4, [r0] - ldr r1, _080AB588 @ =0x0000ffd0 - adds r0, r1, 0 - ldr r2, _080AB58C @ =gBattle_BG1_Y - strh r0, [r2] - ldr r0, _080AB590 @ =0x0000fffe - strh r0, [r6, 0x8] - movs r0, 0x1 - strh r0, [r6, 0xA] - strh r4, [r7, 0xE] -_080AB552: - ldr r0, _080AB584 @ =gBattle_BG1_X - ldrh r1, [r0] - movs r0, 0x14 - bl SetGpuReg - ldr r2, _080AB58C @ =gBattle_BG1_Y - ldrh r1, [r2] - movs r0, 0x16 - bl SetGpuReg - ldr r1, _080AB594 @ =gTasks - mov r2, r8 - lsls r0, r2, 2 - add r0, r8 - lsls r0, 3 - adds r1, r0, r1 - movs r2, 0xE - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080AB598 - movs r0, 0x30 - strh r0, [r1, 0x10] - movs r0, 0x70 - b _080AB59C - .align 2, 0 -_080AB584: .4byte gBattle_BG1_X -_080AB588: .4byte 0x0000ffd0 -_080AB58C: .4byte gBattle_BG1_Y -_080AB590: .4byte 0x0000fffe -_080AB594: .4byte gTasks -_080AB598: - movs r0, 0 - strh r0, [r1, 0x10] -_080AB59C: - strh r0, [r1, 0x12] - ldr r1, _080AB5C0 @ =gTasks - mov r2, r10 - adds r0, r5, r2 - lsls r0, 3 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0, 0x14] - ldr r1, _080AB5C4 @ =sub_80AB5C8 - str r1, [r0] - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AB5C0: .4byte gTasks -_080AB5C4: .4byte sub_80AB5C8 - thumb_func_end sub_80AB38C - - thumb_func_start sub_80AB5C8 -sub_80AB5C8: @ 80AB5C8 - push {r4-r7,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080AB6F4 @ =gBattle_BG1_X - ldr r2, _080AB6F8 @ =gBattle_BG1_Y - ldr r0, _080AB6FC @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - ldrh r0, [r4, 0x8] - ldrh r3, [r1] - adds r0, r3 - strh r0, [r1] - ldrh r0, [r4, 0xA] - ldrh r1, [r2] - adds r0, r1 - strh r0, [r2] - mov r0, sp - bl sub_80752A0 - ldrh r0, [r4, 0xA] - ldrh r3, [r4, 0xC] - adds r0, r3 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bne _080AB65C - ldr r1, _080AB700 @ =gPlttBufferFaded - mov r0, sp - ldrb r0, [r0, 0x8] - lsls r0, 4 - adds r0, 0x7 - lsls r0, 1 - adds r0, r1 - ldrh r6, [r0] - movs r2, 0x6 - adds r7, r1, 0 - adds r3, r7, 0 - mov r4, sp -_080AB622: - ldrb r0, [r4, 0x8] - lsls r0, 4 - adds r1, r2, 0x1 - adds r0, r1 - lsls r1, r0, 1 - adds r1, r3 - subs r0, 0x1 - lsls r0, 1 - adds r0, r3 - ldrh r0, [r0] - strh r0, [r1] - subs r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _080AB622 - mov r0, sp - ldrb r0, [r0, 0x8] - lsls r0, 4 - adds r0, 0x1 - lsls r0, 1 - adds r0, r7 - strh r6, [r0] - ldr r1, _080AB6FC @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - strh r2, [r0, 0x12] -_080AB65C: - ldr r1, _080AB6FC @ =gTasks - lsls r2, r5, 2 - adds r0, r2, r5 - lsls r0, 3 - adds r3, r0, r1 - ldrh r0, [r3, 0x14] - adds r0, 0x1 - strh r0, [r3, 0x14] - lsls r0, 16 - asrs r0, 16 - adds r4, r1, 0 - adds r6, r2, 0 - cmp r0, 0x1 - ble _080AB6CA - movs r0, 0 - strh r0, [r3, 0x14] - ldrh r0, [r3, 0xE] - adds r2, r0, 0x1 - strh r2, [r3, 0xE] - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0xD - bgt _080AB6A6 - movs r1, 0x26 - ldrsh r0, [r3, r1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r4 - movs r0, 0x10 - subs r0, r2 - lsls r0, 8 - orrs r2, r0 - strh r2, [r1, 0xA] - ldrh r0, [r3, 0x10] - adds r0, 0x1 - strh r0, [r3, 0x10] -_080AB6A6: - movs r1, 0xE - ldrsh r0, [r3, r1] - cmp r0, 0x36 - ble _080AB6CA - ldrh r2, [r3, 0x10] - subs r2, 0x1 - strh r2, [r3, 0x10] - movs r1, 0x26 - ldrsh r0, [r3, r1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r4 - movs r0, 0x10 - subs r0, r2 - lsls r0, 8 - orrs r2, r0 - strh r2, [r1, 0xA] -_080AB6CA: - adds r0, r6, r5 - lsls r0, 3 - adds r2, r0, r4 - movs r3, 0x26 - ldrsh r1, [r2, r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r4 - ldrh r0, [r0, 0xA] - movs r3, 0x1F - ands r3, r0 - cmp r3, 0 - bne _080AB6EC - strh r3, [r2, 0x8] - ldr r0, _080AB704 @ =sub_80AB708 - str r0, [r2] -_080AB6EC: - add sp, 0x10 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AB6F4: .4byte gBattle_BG1_X -_080AB6F8: .4byte gBattle_BG1_Y -_080AB6FC: .4byte gTasks -_080AB700: .4byte gPlttBufferFaded -_080AB704: .4byte sub_80AB708 - thumb_func_end sub_80AB5C8 - - thumb_func_start sub_80AB708 -sub_80AB708: @ 80AB708 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - ldr r7, _080AB740 @ =gBattle_BG1_X - ldr r0, _080AB744 @ =gBattle_BG1_Y - mov r8, r0 - ldr r6, _080AB748 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r4, r0, r6 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080AB74C - movs r0, 0x1 - bl sub_8075358 - movs r0, 0x2 - bl sub_8075358 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080AB78E - .align 2, 0 -_080AB740: .4byte gBattle_BG1_X -_080AB744: .4byte gBattle_BG1_Y -_080AB748: .4byte gTasks -_080AB74C: - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080AB760 - movs r0, 0x1 - movs r1, 0x3 - movs r2, 0 - bl SetAnimBgAttribute -_080AB760: - movs r0, 0 - strh r0, [r7] - mov r1, r8 - strh r0, [r1] - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r6 - ldr r1, _080AB798 @ =0x0000ffff - strh r1, [r0, 0x26] - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080AB78E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080AB798: .4byte 0x0000ffff - thumb_func_end sub_80AB708 - - thumb_func_start sub_80AB79C -sub_80AB79C: @ 80AB79C - push {r4-r7,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r7, r0, 24 - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - ldr r1, _080AB7C4 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _080AB7B8 - b _080AB8F0 -_080AB7B8: - cmp r0, 0x1 - bgt _080AB7C8 - cmp r0, 0 - beq _080AB7D0 - b _080ABA66 - .align 2, 0 -_080AB7C4: .4byte gTasks -_080AB7C8: - cmp r0, 0x2 - bne _080AB7CE - b _080AB9BC -_080AB7CE: - b _080ABA66 -_080AB7D0: - movs r3, 0 - movs r2, 0x10 - ldrsh r0, [r4, r2] - ldr r1, _080AB8A0 @ =gScanlineEffectRegBuffers - mov r12, r1 - cmp r3, r0 - bge _080AB80E - mov r7, r12 - movs r5, 0xF0 - lsls r5, 3 - add r5, r12 - ldr r6, _080AB8A4 @ =0x0000ffff -_080AB7E8: - lsls r2, r3, 16 - asrs r2, 16 - lsls r1, r2, 1 - adds r3, r1, r7 - adds r1, r5 - ldrh r0, [r4, 0xC] - strh r0, [r1] - ldrh r1, [r4, 0xC] - adds r0, r6, 0 - ands r0, r1 - strh r0, [r3] - adds r2, 0x1 - lsls r2, 16 - lsrs r3, r2, 16 - asrs r2, 16 - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r2, r0 - blt _080AB7E8 -_080AB80E: - ldrh r3, [r4, 0x10] - lsls r2, r3, 16 - asrs r1, r2, 16 - movs r3, 0x12 - ldrsh r0, [r4, r3] - cmp r1, r0 - bge _080AB848 - ldr r5, _080AB8A0 @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r6, r5, r0 - ldr r7, _080AB8A4 @ =0x0000ffff -_080AB826: - asrs r2, 16 - lsls r1, r2, 1 - adds r3, r1, r5 - adds r1, r6 - ldrh r0, [r4, 0xA] - strh r0, [r1] - ldrh r1, [r4, 0xA] - adds r0, r7, 0 - ands r0, r1 - strh r0, [r3] - adds r2, 0x1 - lsls r2, 16 - asrs r1, r2, 16 - movs r3, 0x12 - ldrsh r0, [r4, r3] - cmp r1, r0 - blt _080AB826 -_080AB848: - ldrh r3, [r4, 0x12] - lsls r2, r3, 16 - asrs r0, r2, 16 - cmp r0, 0x9F - bgt _080AB87E - ldr r5, _080AB8A0 @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r6, r5, r0 - ldr r7, _080AB8A4 @ =0x0000ffff -_080AB85C: - asrs r2, 16 - lsls r1, r2, 1 - adds r3, r1, r5 - adds r1, r6 - ldrh r0, [r4, 0xC] - strh r0, [r1] - ldrh r1, [r4, 0xC] - adds r0, r7, 0 - ands r0, r1 - strh r0, [r3] - adds r2, 0x1 - lsls r2, 16 - lsrs r3, r2, 16 - lsls r2, r3, 16 - asrs r0, r2, 16 - cmp r0, 0x9F - ble _080AB85C -_080AB87E: - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080AB8A8 - lsls r0, r3, 16 - asrs r0, 15 - mov r3, r12 - adds r2, r0, r3 - movs r1, 0xF0 - lsls r1, 3 - add r1, r12 - adds r0, r1 - ldrh r1, [r4, 0xA] - strh r1, [r0] - ldrh r0, [r4, 0xA] - b _080AB8BE - .align 2, 0 -_080AB8A0: .4byte gScanlineEffectRegBuffers -_080AB8A4: .4byte 0x0000ffff -_080AB8A8: - lsls r0, r3, 16 - asrs r0, 15 - mov r1, r12 - adds r2, r0, r1 - movs r1, 0xF0 - lsls r1, 3 - add r1, r12 - adds r0, r1 - ldrh r1, [r4, 0xC] - strh r1, [r0] - ldrh r0, [r4, 0xC] -_080AB8BE: - strh r0, [r2] - ldr r0, _080AB8E8 @ =0x04000052 - str r0, [sp] - ldr r0, _080AB8EC @ =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 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080ABA66 - .align 2, 0 -_080AB8E8: .4byte 0x04000052 -_080AB8EC: .4byte 0xa2600001 -_080AB8F0: - movs r2, 0xE - ldrsh r1, [r4, r2] - cmp r1, 0 - bne _080AB908 - ldrh r0, [r4, 0x10] - subs r0, 0x1 - strh r0, [r4, 0x10] - lsls r0, 16 - cmp r0, 0 - bgt _080AB91C - strh r1, [r4, 0x10] - b _080AB916 -_080AB908: - ldrh r0, [r4, 0x12] - adds r0, 0x1 - strh r0, [r4, 0x12] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x6F - ble _080AB91C -_080AB916: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080AB91C: - movs r3, 0 - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r3, r0 - bge _080AB950 - ldr r6, _080AB9B4 @ =gScanlineEffectRegBuffers - ldr r5, _080AB9B8 @ =gScanlineEffect -_080AB92A: - lsls r1, r3, 16 - asrs r1, 16 - lsls r3, r1, 1 - ldrb r2, [r5, 0x14] - lsls r0, r2, 4 - subs r0, r2 - lsls r0, 7 - adds r3, r0 - adds r3, r6 - ldrh r0, [r4, 0xC] - strh r0, [r3] - adds r1, 0x1 - lsls r1, 16 - lsrs r3, r1, 16 - asrs r1, 16 - movs r2, 0x10 - ldrsh r0, [r4, r2] - cmp r1, r0 - blt _080AB92A -_080AB950: - ldrh r3, [r4, 0x10] - lsls r2, r3, 16 - asrs r1, r2, 16 - movs r3, 0x12 - ldrsh r0, [r4, r3] - cmp r1, r0 - bge _080AB984 - ldr r6, _080AB9B4 @ =gScanlineEffectRegBuffers - ldr r5, _080AB9B8 @ =gScanlineEffect -_080AB962: - asrs r3, r2, 16 - lsls r2, r3, 1 - ldrb r1, [r5, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r6 - ldrh r0, [r4, 0xA] - strh r0, [r2] - adds r3, 0x1 - lsls r2, r3, 16 - asrs r1, r2, 16 - movs r3, 0x12 - ldrsh r0, [r4, r3] - cmp r1, r0 - blt _080AB962 -_080AB984: - ldrh r3, [r4, 0x12] - lsls r1, r3, 16 - asrs r0, r1, 16 - cmp r0, 0x9F - bgt _080ABA66 - ldr r6, _080AB9B4 @ =gScanlineEffectRegBuffers - ldr r5, _080AB9B8 @ =gScanlineEffect -_080AB992: - asrs r3, r1, 16 - lsls r2, r3, 1 - ldrb r1, [r5, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r6 - ldrh r0, [r4, 0xC] - strh r0, [r2] - adds r3, 0x1 - lsls r1, r3, 16 - asrs r0, r1, 16 - cmp r0, 0x9F - ble _080AB992 - b _080ABA66 - .align 2, 0 -_080AB9B4: .4byte gScanlineEffectRegBuffers -_080AB9B8: .4byte gScanlineEffect -_080AB9BC: - movs r3, 0 - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r3, r0 - bge _080AB9F0 - ldr r6, _080ABA70 @ =gScanlineEffectRegBuffers - ldr r5, _080ABA74 @ =gScanlineEffect -_080AB9CA: - lsls r1, r3, 16 - asrs r1, 16 - lsls r3, r1, 1 - ldrb r2, [r5, 0x14] - lsls r0, r2, 4 - subs r0, r2 - lsls r0, 7 - adds r3, r0 - adds r3, r6 - ldrh r0, [r4, 0xC] - strh r0, [r3] - adds r1, 0x1 - lsls r1, 16 - lsrs r3, r1, 16 - asrs r1, 16 - movs r2, 0x10 - ldrsh r0, [r4, r2] - cmp r1, r0 - blt _080AB9CA -_080AB9F0: - ldrh r3, [r4, 0x10] - lsls r2, r3, 16 - asrs r1, r2, 16 - movs r3, 0x12 - ldrsh r0, [r4, r3] - cmp r1, r0 - bge _080ABA24 - ldr r6, _080ABA70 @ =gScanlineEffectRegBuffers - ldr r5, _080ABA74 @ =gScanlineEffect -_080ABA02: - asrs r3, r2, 16 - lsls r2, r3, 1 - ldrb r1, [r5, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r6 - ldrh r0, [r4, 0xA] - strh r0, [r2] - adds r3, 0x1 - lsls r2, r3, 16 - asrs r1, r2, 16 - movs r3, 0x12 - ldrsh r0, [r4, r3] - cmp r1, r0 - blt _080ABA02 -_080ABA24: - ldrh r3, [r4, 0x12] - lsls r1, r3, 16 - asrs r0, r1, 16 - cmp r0, 0x9F - bgt _080ABA50 - ldr r6, _080ABA70 @ =gScanlineEffectRegBuffers - ldr r5, _080ABA74 @ =gScanlineEffect -_080ABA32: - asrs r3, r1, 16 - lsls r2, r3, 1 - ldrb r1, [r5, 0x14] - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 7 - adds r2, r0 - adds r2, r6 - ldrh r0, [r4, 0xC] - strh r0, [r2] - adds r3, 0x1 - lsls r1, r3, 16 - asrs r0, r1, 16 - cmp r0, 0x9F - ble _080ABA32 -_080ABA50: - movs r0, 0x26 - ldrsh r1, [r4, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080ABA66 - bl ScanlineEffect_Stop - adds r0, r7, 0 - bl DestroyTask -_080ABA66: - add sp, 0xC - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080ABA70: .4byte gScanlineEffectRegBuffers -_080ABA74: .4byte gScanlineEffect - thumb_func_end sub_80AB79C - - thumb_func_start sub_80ABA78 -sub_80ABA78: @ 80ABA78 - push {r4-r6,lr} - adds r4, r0, 0 - ldrh r2, [r4, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, 0x8 - ldr r3, _080ABACC @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080ABAD0 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x4] - adds r0, r4, 0 - movs r1, 0x1 - bl InitSpritePosToAnimTarget - bl Random - movs r5, 0xFF - ands r5, r0 - movs r0, 0x80 - lsls r0, 1 - adds r6, r0, 0 - orrs r5, r6 - bl Random - ldr r1, _080ABAD4 @ =0x000001ff - ands r1, r0 - adds r0, r1, 0 - cmp r0, 0xFF - ble _080ABABE - subs r0, r6, r0 - lsls r0, 16 - lsrs r1, r0, 16 -_080ABABE: - strh r5, [r4, 0x30] - strh r1, [r4, 0x32] - ldr r0, _080ABAD8 @ =sub_80ABADC - str r0, [r4, 0x1C] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080ABACC: .4byte 0x000003ff -_080ABAD0: .4byte 0xfffffc00 -_080ABAD4: .4byte 0x000001ff -_080ABAD8: .4byte sub_80ABADC - thumb_func_end sub_80ABA78 - - thumb_func_start sub_80ABADC -sub_80ABADC: @ 80ABADC - push {r4,lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x30] - ldrh r1, [r2, 0x34] - adds r3, r0, r1 - strh r3, [r2, 0x34] - ldrh r1, [r2, 0x32] - ldrh r4, [r2, 0x36] - adds r1, r4 - strh r1, [r2, 0x36] - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _080ABB00 - lsls r0, r3, 16 - asrs r0, 24 - negs r0, r0 - b _080ABB04 -_080ABB00: - lsls r0, r3, 16 - asrs r0, 24 -_080ABB04: - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x36] - lsls r0, 16 - asrs r0, 24 - strh r0, [r2, 0x26] - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x15 - bne _080ABB22 - adds r0, r2, 0 - bl DestroyAnimSprite -_080ABB22: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80ABADC - - thumb_func_start sub_80ABB28 -sub_80ABB28: @ 80ABB28 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _080ABB78 @ =gTasks - adds r4, r0 - movs r0, 0 - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x26] - ldr r2, _080ABB7C @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r0, [r0, 0x22] - strh r0, [r4, 0x12] - bl sub_80ABDC8 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl PrepareBattlerSpriteForRotScale - ldr r0, _080ABB80 @ =sub_80ABB84 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080ABB78: .4byte gTasks -_080ABB7C: .4byte gSprites -_080ABB80: .4byte sub_80ABB84 - thumb_func_end sub_80ABB28 - - thumb_func_start sub_80ABB84 -sub_80ABB84: @ 80ABB84 - push {r4-r6,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080ABBAC @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x7 - bls _080ABBA0 - b _080ABDBE -_080ABBA0: - lsls r0, 2 - ldr r1, _080ABBB0 @ =_080ABBB4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080ABBAC: .4byte gTasks -_080ABBB0: .4byte _080ABBB4 - .align 2, 0 -_080ABBB4: - .4byte _080ABBD4 - .4byte _080ABBFA - .4byte _080ABC8C - .4byte _080ABCC2 - .4byte _080ABCD6 - .4byte _080ABCE4 - .4byte _080ABD64 - .4byte _080ABDB0 -_080ABBD4: - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - movs r3, 0x80 - lsls r3, 1 - movs r0, 0xE0 - str r0, [sp] - movs r0, 0x80 - lsls r0, 2 - str r0, [sp, 0x4] - movs r0, 0x20 - str r0, [sp, 0x8] - adds r0, r4, 0 - adds r2, r3, 0 - bl sub_80765D4 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080ABBFA: - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080ABC56 - movs r0, 0 - strh r0, [r4, 0xE] - ldrh r0, [r4, 0x10] - adds r0, 0x1 - strh r0, [r4, 0x10] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080ABC44 - ldr r2, _080ABC40 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x3 - strh r1, [r0, 0x24] - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - adds r1, 0x1 - strh r1, [r0, 0x22] - b _080ABC56 - .align 2, 0 -_080ABC40: .4byte gSprites -_080ABC44: - ldr r2, _080ABC84 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, _080ABC88 @ =0x0000fffd - strh r1, [r0, 0x24] -_080ABC56: - adds r0, r4, 0 - bl sub_8076640 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _080ABC66 - b _080ABDBE -_080ABC66: - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl SetBattlerSpriteYOffsetFromYScale - ldr r2, _080ABC84 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r5, [r0, 0x24] - strh r5, [r4, 0xE] - b _080ABDA0 - .align 2, 0 -_080ABC84: .4byte gSprites -_080ABC88: .4byte 0x0000fffd -_080ABC8C: - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bgt _080ABC9C - b _080ABDBE -_080ABC9C: - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - movs r3, 0x80 - lsls r3, 2 - movs r0, 0xC0 - lsls r0, 1 - str r0, [sp] - movs r0, 0xE0 - str r0, [sp, 0x4] - movs r0, 0x8 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r2, 0xE0 - bl sub_80765D4 - movs r0, 0 - strh r0, [r4, 0xE] - b _080ABDA2 -_080ABCC2: - adds r0, r4, 0 - bl sub_8076640 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - bne _080ABDBE - strh r0, [r4, 0xE] - strh r0, [r4, 0x10] - b _080ABDA2 -_080ABCD6: - adds r0, r4, 0 - adds r1, r2, 0 - bl sub_80ABE4C - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080ABCE4: - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080ABDBE - movs r0, 0 - strh r0, [r4, 0xE] - ldrh r0, [r4, 0x10] - adds r0, 0x1 - strh r0, [r4, 0x10] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080ABD1C - ldr r2, _080ABD18 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - adds r1, 0x2 - b _080ABD2E - .align 2, 0 -_080ABD18: .4byte gSprites -_080ABD1C: - ldr r2, _080ABD60 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x26] - subs r1, 0x2 -_080ABD2E: - strh r1, [r0, 0x26] - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r0, 0xA - bne _080ABDBE - ldrh r1, [r4, 0x26] - lsls r1, 24 - lsrs r1, 24 - movs r2, 0xC0 - lsls r2, 1 - movs r0, 0x80 - lsls r0, 1 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x8 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r3, 0xE0 - bl sub_80765D4 - movs r0, 0 - strh r0, [r4, 0xE] - strh r0, [r4, 0x10] - b _080ABDA2 - .align 2, 0 -_080ABD60: .4byte gSprites -_080ABD64: - ldr r6, _080ABDAC @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrh r1, [r0, 0x22] - subs r1, 0x1 - strh r1, [r0, 0x22] - adds r0, r4, 0 - bl sub_8076640 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080ABDBE - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl ResetSpriteRotScale - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrh r1, [r4, 0x12] - strh r1, [r0, 0x22] -_080ABDA0: - strh r5, [r4, 0x10] -_080ABDA2: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080ABDBE - .align 2, 0 -_080ABDAC: .4byte gSprites -_080ABDB0: - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080ABDBE - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080ABDBE: - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80ABB84 - - thumb_func_start sub_80ABDC8 -sub_80ABDC8: @ 80ABDC8 - push {r4,r5,lr} - ldr r4, _080ABDEC @ =gBattleAnimAttacker - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080ABDFC - ldr r1, _080ABDF0 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _080ABDF4 @ =gPlayerParty - b _080ABE0C - .align 2, 0 -_080ABDEC: .4byte gBattleAnimAttacker -_080ABDF0: .4byte gBattlerPartyIndexes -_080ABDF4: .4byte gPlayerParty -_080ABDF8: - adds r0, r2, 0 - b _080ABE3E -_080ABDFC: - ldr r1, _080ABE44 @ =gBattlerPartyIndexes - ldrb r0, [r4] - lsls r0, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r1, r0 - ldr r0, _080ABE48 @ =gEnemyParty -_080ABE0C: - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0x3A - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r3, r0, 16 - lsrs r4, 18 - movs r2, 0 -_080ABE2A: - adds r1, r2, 0x1 - adds r0, r4, 0 - muls r0, r1 - cmp r3, r0 - blt _080ABDF8 - lsls r0, r1, 24 - lsrs r2, r0, 24 - cmp r2, 0x2 - bls _080ABE2A - movs r0, 0x3 -_080ABE3E: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080ABE44: .4byte gBattlerPartyIndexes -_080ABE48: .4byte gEnemyParty - thumb_func_end sub_80ABDC8 - - thumb_func_start sub_80ABE4C -sub_80ABE4C: @ 80ABE4C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - adds r7, r0, 0 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp] - ldr r4, _080ABF54 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r6, r0, 24 - movs r5, 0xAC - ldrb r0, [r4] - bl GetBattlerSpriteSubpriority - subs r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x8] - ldrh r1, [r7, 0xA] - movs r0, 0x4 - subs r0, r1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r0, 0 - bgt _080ABE9C - movs r1, 0x1 -_080ABE9C: - movs r0, 0 - str r0, [sp, 0x4] - lsls r0, r1, 16 - mov r10, r8 - mov r9, r6 - mov r1, r10 - lsls r1, 4 - str r1, [sp, 0xC] - mov r1, r9 - lsls r1, 4 - str r1, [sp, 0x10] - asrs r0, 16 - mov r8, r0 -_080ABEB6: - ldr r0, _080ABF58 @ =gUnknown_83E5AE0 - mov r1, r10 - mov r2, r9 - ldr r3, [sp, 0x8] - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - lsls r6, r5, 16 - cmp r2, 0x40 - beq _080ABF1E - ldr r1, _080ABF5C @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r5, r0, r1 - mov r0, sp - ldrh r0, [r0, 0x4] - strh r0, [r5, 0x30] - mov r1, sp - ldrh r1, [r1, 0xC] - strh r1, [r5, 0x32] - mov r0, sp - ldrh r0, [r0, 0x10] - strh r0, [r5, 0x34] - asrs r4, r6, 16 - adds r0, r4, 0 - movs r1, 0x40 - bl Cos - strh r0, [r5, 0x36] - adds r0, r4, 0 - movs r1, 0x40 - bl Sin - strh r0, [r5, 0x38] - mov r1, sp - ldrh r1, [r1] - strh r1, [r5, 0x3A] - movs r0, 0x2 - strh r0, [r5, 0x3C] - ldrh r1, [r7, 0xC] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080ABF18 - adds r0, r5, 0 - bl sub_80ABF60 -_080ABF18: - ldrh r0, [r7, 0xC] - adds r0, 0x1 - strh r0, [r7, 0xC] -_080ABF1E: - mov r1, r8 - lsls r0, r1, 1 - asrs r1, r6, 16 - adds r1, r0 - lsls r1, 16 - movs r0, 0xFF - lsls r0, 16 - ands r0, r1 - lsrs r5, r0, 16 - ldr r1, [sp, 0x4] - lsls r0, r1, 16 - asrs r0, 16 - add r0, r8 - lsls r0, 16 - lsrs r1, r0, 16 - str r1, [sp, 0x4] - asrs r0, 16 - cmp r0, 0x13 - ble _080ABEB6 - 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 -_080ABF54: .4byte gBattleAnimAttacker -_080ABF58: .4byte gUnknown_83E5AE0 -_080ABF5C: .4byte gSprites - thumb_func_end sub_80ABE4C - - thumb_func_start sub_80ABF60 -sub_80ABF60: @ 80ABF60 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080ABF72 - cmp r0, 0x1 - beq _080ABFA8 - b _080AC002 -_080ABF72: - movs r2, 0x30 - ldrsh r0, [r4, r2] - movs r1, 0x6 - bl __modsi3 - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 1 - adds r1, r0 - ldrh r0, [r4, 0x36] - adds r1, r0 - strh r1, [r4, 0x36] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x3 - bl __modsi3 - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 1 - adds r1, r0 - ldrh r2, [r4, 0x38] - adds r1, r2 - strh r1, [r4, 0x38] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] -_080ABFA8: - ldrh r0, [r4, 0x36] - ldrh r1, [r4, 0x32] - adds r0, r1 - strh r0, [r4, 0x32] - ldrh r1, [r4, 0x38] - ldrh r2, [r4, 0x34] - adds r1, r2 - strh r1, [r4, 0x34] - lsls r0, 16 - asrs r0, 20 - strh r0, [r4, 0x20] - lsls r1, 16 - asrs r2, r1, 20 - strh r2, [r4, 0x22] - adds r0, 0x8 - lsls r0, 16 - movs r1, 0x80 - lsls r1, 17 - cmp r0, r1 - bhi _080ABFDE - adds r1, r2, 0 - movs r0, 0x8 - negs r0, r0 - cmp r1, r0 - blt _080ABFDE - cmp r1, 0x78 - ble _080AC002 -_080ABFDE: - ldr r3, _080AC008 @ =gTasks - movs r0, 0x3C - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x3A - 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 DestroySprite -_080AC002: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AC008: .4byte gTasks - thumb_func_end sub_80ABF60 - - thumb_func_start sub_80AC00C -sub_80AC00C: @ 80AC00C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080AC03C @ =gTasks - adds r4, r1, r0 - bl sub_80ABDC8 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0xA] - ldr r0, _080AC040 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _080AC044 - movs r0, 0x88 - strh r0, [r4, 0x10] - movs r0, 0x28 - b _080AC04A - .align 2, 0 -_080AC03C: .4byte gTasks -_080AC040: .4byte gBattleAnimAttacker -_080AC044: - movs r0, 0x10 - strh r0, [r4, 0x10] - movs r0, 0x50 -_080AC04A: - strh r0, [r4, 0x14] - movs r0, 0x62 - strh r0, [r4, 0x12] - ldrh r0, [r4, 0x10] - adds r0, 0x31 - strh r0, [r4, 0x16] - movs r0, 0xA - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - adds r0, 0x5 - strh r0, [r4, 0x20] - ldr r0, _080AC06C @ =sub_80AC070 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AC06C: .4byte sub_80AC070 - thumb_func_end sub_80AC00C - - thumb_func_start sub_80AC070 -sub_80AC070: @ 80AC070 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r1, r0, 24 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r7, _080AC094 @ =gTasks - adds r4, r0, r7 - movs r0, 0x8 - ldrsh r2, [r4, r0] - cmp r2, 0 - beq _080AC098 - cmp r2, 0x1 - beq _080AC148 - b _080AC156 - .align 2, 0 -_080AC094: .4byte gTasks -_080AC098: - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080AC0AE - strh r2, [r4, 0xC] - adds r0, r4, 0 - bl sub_80AC160 -_080AC0AE: - movs r1, 0x1C - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080AC128 - movs r2, 0x22 - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080AC128 - ldr r5, _080AC13C @ =gBattleAnimArgs - movs r1, 0x1 - mov r8, r1 - mov r2, r8 - strh r2, [r5] - strh r0, [r5, 0x2] - movs r0, 0xC - strh r0, [r5, 0x4] - ldr r6, _080AC140 @ =sub_80B94B4 - adds r0, r6, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _080AC0F8 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r7 - ldr r1, [r0] - adds r0, r2, 0 - bl _call_via_r1 - ldr r1, _080AC144 @ =gAnimVisualTaskCount - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080AC0F8: - movs r0, 0x3 - strh r0, [r5] - adds r0, r6, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _080AC124 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r7 - ldr r1, [r0] - adds r0, r2, 0 - bl _call_via_r1 - ldr r1, _080AC144 @ =gAnimVisualTaskCount - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080AC124: - mov r0, r8 - strh r0, [r4, 0x22] -_080AC128: - movs r2, 0x1E - ldrsh r1, [r4, r2] - movs r2, 0x20 - ldrsh r0, [r4, r2] - cmp r1, r0 - blt _080AC156 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080AC156 - .align 2, 0 -_080AC13C: .4byte gBattleAnimArgs -_080AC140: .4byte sub_80B94B4 -_080AC144: .4byte gAnimVisualTaskCount -_080AC148: - movs r2, 0x1A - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080AC156 - adds r0, r1, 0 - bl DestroyAnimVisualTask -_080AC156: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80AC070 - - thumb_func_start sub_80AC160 -sub_80AC160: @ 80AC160 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 24 - lsrs r6, r1, 24 - ldr r1, _080AC1EC @ =gSineTable - movs r2, 0x18 - ldrsh r0, [r4, r2] - lsls r0, 1 - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - adds r0, 0x3 - asrs r0, 4 - ldrh r2, [r4, 0x14] - adds r0, r2 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, _080AC1F0 @ =gUnknown_83E5AE0 - movs r2, 0x16 - ldrsh r1, [r4, r2] - movs r2, 0 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _080AC1BA - ldr r3, _080AC1F4 @ =gSprites - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r3, 0 - adds r1, 0x1C - adds r1, r0, r1 - ldr r2, _080AC1F8 @ =sub_80AC204 - str r2, [r1] - adds r0, r3 - strh r5, [r0, 0x38] - strh r6, [r0, 0x3A] - movs r1, 0x9 - strh r1, [r0, 0x3C] - ldrh r0, [r4, 0x1A] - adds r0, 0x1 - strh r0, [r4, 0x1A] -_080AC1BA: - ldrh r0, [r4, 0x1E] - adds r0, 0x1 - strh r0, [r4, 0x1E] - ldrh r0, [r4, 0x18] - adds r0, 0x27 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x18] - movs r0, 0x16 - ldrsh r1, [r4, r0] - ldr r0, _080AC1FC @ =0x41c64e6d - muls r0, r1 - ldr r1, _080AC200 @ =0x00003039 - adds r0, r1 - movs r2, 0x12 - ldrsh r1, [r4, r2] - bl __modsi3 - ldrh r1, [r4, 0x10] - adds r1, r0 - strh r1, [r4, 0x16] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AC1EC: .4byte gSineTable -_080AC1F0: .4byte gUnknown_83E5AE0 -_080AC1F4: .4byte gSprites -_080AC1F8: .4byte sub_80AC204 -_080AC1FC: .4byte 0x41c64e6d -_080AC200: .4byte 0x00003039 - thumb_func_end sub_80AC160 - - thumb_func_start sub_80AC204 -sub_80AC204: @ 80AC204 - push {r4,r5,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080AC29A - ldrh r0, [r5, 0x22] - adds r0, 0x8 - strh r0, [r5, 0x22] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x38 - ldrsh r1, [r5, r2] - cmp r0, r1 - blt _080AC29A - ldr r2, _080AC2A0 @ =gTasks - movs r3, 0x3A - ldrsh r1, [r5, r3] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r1, 0x1 - strh r1, [r0, 0x1C] - ldr r0, _080AC2A4 @ =gUnknown_83E7C38 - movs r2, 0x20 - ldrsh r1, [r5, r2] - movs r3, 0x22 - ldrsh r2, [r5, r3] - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x30] - cmp r0, 0x40 - beq _080AC294 - movs r0, 0x30 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _080AC2A8 @ =gSprites - adds r0, r4 - movs r1, 0x3 - bl StartSpriteAffineAnim - movs r2, 0x30 - ldrsh r1, [r5, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r5, 0x3A] - strh r1, [r0, 0x3A] - movs r3, 0x30 - ldrsh r1, [r5, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r5, 0x3C] - strh r1, [r0, 0x3C] - movs r0, 0x30 - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _080AC2AC @ =sub_80AC2B0 - str r1, [r0] -_080AC294: - adds r0, r5, 0 - bl DestroySprite -_080AC29A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AC2A0: .4byte gTasks -_080AC2A4: .4byte gUnknown_83E7C38 -_080AC2A8: .4byte gSprites -_080AC2AC: .4byte sub_80AC2B0 - thumb_func_end sub_80AC204 - - thumb_func_start sub_80AC2B0 -sub_80AC2B0: @ 80AC2B0 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080AC31C - movs r0, 0 - strh r0, [r4, 0x30] - 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] - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - bne _080AC31C - ldr r3, _080AC324 @ =gTasks - movs r0, 0x3C - ldrsh r1, [r4, r0] - lsls r1, 1 - movs r0, 0x3A - 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] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r0, r4, 0 - bl DestroySprite -_080AC31C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AC324: .4byte gTasks - thumb_func_end sub_80AC2B0 - - thumb_func_start sub_80AC328 -sub_80AC328: @ 80AC328 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080AC3AC @ =gTasks - adds r5, r1, r0 - ldr r4, _080AC3B0 @ =gBattleAnimAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - movs r6, 0 - strh r0, [r5, 0xE] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x10] - ldrb r0, [r4] - bl GetBattlerSide - lsls r0, 24 - movs r2, 0x1 - negs r2, r2 - adds r1, r2, 0 - cmp r0, 0 - bne _080AC36C - movs r1, 0x1 -_080AC36C: - strh r1, [r5, 0x16] - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080AC380 - movs r1, 0x16 - ldrsh r0, [r5, r1] - negs r0, r0 - strh r0, [r5, 0x16] -_080AC380: - movs r2, 0x16 - ldrsh r0, [r5, r2] - lsls r0, 3 - ldrh r1, [r5, 0xE] - adds r0, r1 - strh r0, [r5, 0x12] - movs r2, 0x16 - ldrsh r1, [r5, r2] - lsls r1, 3 - ldrh r0, [r5, 0x10] - subs r0, r1 - strh r0, [r5, 0x14] - ldr r0, _080AC3B4 @ =0x0000ffe0 - strh r0, [r5, 0x1A] - strh r6, [r5, 0xA] - strh r6, [r5, 0x8] - ldr r0, _080AC3B8 @ =sub_80AC3BC - str r0, [r5] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AC3AC: .4byte gTasks -_080AC3B0: .4byte gBattleAnimAttacker -_080AC3B4: .4byte 0x0000ffe0 -_080AC3B8: .4byte sub_80AC3BC - thumb_func_end sub_80AC328 - - thumb_func_start sub_80AC3BC -sub_80AC3BC: @ 80AC3BC - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - ldr r1, _080AC3E0 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x6 - bls _080AC3D6 - b _080AC4F6 -_080AC3D6: - lsls r0, 2 - ldr r1, _080AC3E4 @ =_080AC3E8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080AC3E0: .4byte gTasks -_080AC3E4: .4byte _080AC3E8 - .align 2, 0 -_080AC3E8: - .4byte _080AC404 - .4byte _080AC414 - .4byte _080AC42E - .4byte _080AC470 - .4byte _080AC492 - .4byte _080AC4C0 - .4byte _080AC4E6 -_080AC404: - adds r0, r4, 0 - bl sub_80AC504 - movs r1, 0x1C - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080AC4FC - b _080AC4EE -_080AC414: - adds r0, r4, 0 - bl sub_80AC504 - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _080AC4FC - movs r0, 0 - strh r0, [r4, 0xA] - b _080AC4EE -_080AC42E: - adds r0, r4, 0 - bl sub_80AC504 - movs r1, 0x16 - ldrsh r0, [r4, r1] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 1 - ldrh r0, [r4, 0x12] - adds r1, r0 - movs r2, 0 - strh r1, [r4, 0x12] - adds r1, 0x10 - lsls r1, 16 - movs r0, 0x88 - lsls r0, 17 - cmp r1, r0 - bls _080AC4FC - ldrh r0, [r4, 0x20] - adds r0, 0x1 - strh r0, [r4, 0x20] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - ble _080AC46C - movs r0, 0x1 - strh r0, [r4, 0x22] - movs r0, 0x6 - strh r0, [r4, 0x8] - strh r2, [r4, 0xA] - b _080AC4FC -_080AC46C: - strh r2, [r4, 0xA] - b _080AC4EE -_080AC470: - adds r0, r4, 0 - bl sub_80AC504 - movs r0, 0x16 - ldrsh r1, [r4, r0] - lsls r1, 1 - ldrh r0, [r4, 0x14] - subs r0, r1 - strh r0, [r4, 0x14] - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _080AC4FC - b _080AC4EE -_080AC492: - adds r0, r4, 0 - bl sub_80AC504 - movs r1, 0x16 - ldrsh r0, [r4, r1] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 1 - ldrh r0, [r4, 0x12] - subs r0, r1 - strh r0, [r4, 0x12] - adds r0, 0x10 - lsls r0, 16 - movs r1, 0x88 - lsls r1, 17 - cmp r0, r1 - bls _080AC4FC - ldrh r0, [r4, 0x20] - adds r0, 0x1 - strh r0, [r4, 0x20] - movs r0, 0 - strh r0, [r4, 0xA] - b _080AC4EE -_080AC4C0: - adds r0, r4, 0 - bl sub_80AC504 - movs r0, 0x16 - ldrsh r1, [r4, r0] - lsls r1, 1 - ldrh r0, [r4, 0x14] - subs r0, r1 - strh r0, [r4, 0x14] - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _080AC4FC - movs r0, 0x2 - strh r0, [r4, 0x8] - b _080AC4FC -_080AC4E6: - movs r1, 0x18 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080AC4FC -_080AC4EE: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080AC4FC -_080AC4F6: - adds r0, r2, 0 - bl DestroyAnimVisualTask -_080AC4FC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AC3BC - - thumb_func_start sub_80AC504 -sub_80AC504: @ 80AC504 - push {r4-r6,lr} - adds r6, r0, 0 - ldrh r0, [r6, 0xC] - adds r0, 0x1 - strh r0, [r6, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080AC55E - movs r0, 0 - strh r0, [r6, 0xC] - ldr r0, _080AC564 @ =gUnknown_83E5AE0 - movs r2, 0xE - ldrsh r1, [r6, r2] - movs r3, 0x10 - ldrsh r2, [r6, r3] - movs r3, 0xA - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _080AC55E - ldr r5, _080AC568 @ =gSprites - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r0, r4, r5 - movs r1, 0x10 - strh r1, [r0, 0x2E] - ldrh r1, [r6, 0x12] - strh r1, [r0, 0x32] - ldrh r1, [r6, 0x14] - strh r1, [r0, 0x36] - ldrh r1, [r6, 0x1A] - strh r1, [r0, 0x38] - bl InitAnimArcTranslation - adds r5, 0x1C - adds r4, r5 - ldr r0, _080AC56C @ =sub_80AC570 - str r0, [r4] - ldrh r0, [r6, 0x18] - adds r0, 0x1 - strh r0, [r6, 0x18] -_080AC55E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AC564: .4byte gUnknown_83E5AE0 -_080AC568: .4byte gSprites -_080AC56C: .4byte sub_80AC570 - thumb_func_end sub_80AC504 - - thumb_func_start sub_80AC570 -sub_80AC570: @ 80AC570 - push {r4-r6,lr} - adds r6, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080AC5CA - ldrh r0, [r6, 0x24] - ldrh r1, [r6, 0x20] - adds r0, r1 - strh r0, [r6, 0x20] - ldrh r0, [r6, 0x26] - ldrh r1, [r6, 0x22] - adds r0, r1 - strh r0, [r6, 0x22] - movs r0, 0x6 - strh r0, [r6, 0x2E] - bl Random - movs r4, 0x1F - adds r1, r4, 0 - ands r1, r0 - ldr r5, _080AC5D0 @ =0x0000fff0 - adds r1, r5 - ldrh r0, [r6, 0x20] - adds r1, r0 - strh r1, [r6, 0x32] - bl Random - ands r4, r0 - adds r4, r5 - ldrh r1, [r6, 0x22] - adds r4, r1 - strh r4, [r6, 0x36] - bl Random - movs r1, 0x7 - ands r1, r0 - mvns r1, r1 - strh r1, [r6, 0x38] - adds r0, r6, 0 - bl InitAnimArcTranslation - ldr r0, _080AC5D4 @ =sub_80AC5D8 - str r0, [r6, 0x1C] -_080AC5CA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AC5D0: .4byte 0x0000fff0 -_080AC5D4: .4byte sub_80AC5D8 - thumb_func_end sub_80AC570 - - thumb_func_start sub_80AC5D8 -sub_80AC5D8: @ 80AC5D8 - push {r4-r6,lr} - adds r5, r0, 0 - bl TranslateAnimHorizontalArc - lsls r0, 24 - cmp r0, 0 - beq _080AC614 - movs r4, 0 - ldr r6, _080AC61C @ =gTasks -_080AC5EA: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r2, r0, r6 - ldr r1, [r2] - ldr r0, _080AC620 @ =sub_80AC3BC - cmp r1, r0 - bne _080AC60A - movs r0, 0x1 - strh r0, [r2, 0x1C] - ldrh r0, [r2, 0x18] - subs r0, 0x1 - strh r0, [r2, 0x18] - adds r0, r5, 0 - bl DestroySprite -_080AC60A: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0xF - bls _080AC5EA -_080AC614: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080AC61C: .4byte gTasks -_080AC620: .4byte sub_80AC3BC - thumb_func_end sub_80AC5D8 - - thumb_func_start sub_80AC624 -sub_80AC624: @ 80AC624 - ldr r2, _080AC644 @ =gBattleAnimArgs - ldrh r1, [r2] - strh r1, [r0, 0x20] - ldrh r1, [r2, 0x2] - strh r1, [r0, 0x22] - ldrh r1, [r2, 0x4] - strh r1, [r0, 0x2E] - ldrh r1, [r2, 0x6] - strh r1, [r0, 0x30] - ldrh r1, [r2, 0x8] - strh r1, [r0, 0x32] - ldrh r1, [r2, 0xA] - strh r1, [r0, 0x34] - ldr r1, _080AC648 @ =sub_80AC64C - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080AC644: .4byte gBattleAnimArgs -_080AC648: .4byte sub_80AC64C - thumb_func_end sub_80AC624 - - thumb_func_start sub_80AC64C -sub_80AC64C: @ 80AC64C - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x36] - ldrh r1, [r4, 0x2E] - subs r0, r1 - strh r0, [r4, 0x36] - movs r1, 0x36 - ldrsh r0, [r4, r1] - movs r1, 0xA - bl __divsi3 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x30] - ldrh r2, [r4, 0x38] - adds r0, r2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x38] - movs r1, 0x38 - ldrsh r0, [r4, r1] - movs r2, 0x32 - ldrsh r1, [r4, r2] - bl Sin - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - cmp r0, 0 - bne _080AC690 - adds r0, r4, 0 - bl DestroyAnimSprite -_080AC690: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AC64C - - thumb_func_start sub_80AC698 -sub_80AC698: @ 80AC698 - push {r4,lr} - adds r4, r0, 0 - 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, 23 - strh r0, [r4, 0x24] - lsls r1, 16 - asrs r1, 23 - strh r1, [r4, 0x26] - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - cmp r0, 0 - bne _080AC6D0 - adds r0, r4, 0 - bl FreeSpriteOamMatrix - adds r0, r4, 0 - bl DestroySprite -_080AC6D0: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80AC698 - - thumb_func_start AnimWaterPulseRing -AnimWaterPulseRing: @ 80AC6D8 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl InitSpritePosToAnimAttacker - ldr r5, _080AC714 @ =gBattleAnimTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x30] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x32] - ldr r1, _080AC718 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x34] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x36] - ldr r0, _080AC71C @ =sub_80AC720 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080AC714: .4byte gBattleAnimTarget -_080AC718: .4byte gBattleAnimArgs -_080AC71C: .4byte sub_80AC720 - thumb_func_end AnimWaterPulseRing - - thumb_func_start sub_80AC720 -sub_80AC720: @ 80AC720 - push {r4-r6,lr} - adds r4, r0, 0 - movs r0, 0x30 - ldrsh r1, [r4, r0] - movs r2, 0x20 - ldrsh r0, [r4, r2] - subs r6, r1, r0 - movs r0, 0x32 - ldrsh r1, [r4, r0] - movs r2, 0x22 - ldrsh r0, [r4, r2] - subs r5, r1, r0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - muls r0, r6 - movs r2, 0x34 - ldrsh r1, [r4, r2] - bl __divsi3 - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - muls r0, r5 - movs r2, 0x34 - ldrsh r1, [r4, r2] - bl __divsi3 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x36 - ldrsh r1, [r4, r2] - cmp r0, r1 - bne _080AC778 - movs r0, 0 - strh r0, [r4, 0x38] - adds r0, r4, 0 - adds r1, r6, 0 - adds r2, r5, 0 - bl sub_80AC798 -_080AC778: - movs r0, 0x34 - ldrsh r1, [r4, r0] - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _080AC78A - adds r0, r4, 0 - bl DestroyAnimSprite -_080AC78A: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80AC720 - - thumb_func_start sub_80AC798 -sub_80AC798: @ 80AC798 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - adds r4, r1, 0 - adds r5, r2, 0 - movs r2, 0x2E - ldrsh r1, [r0, r2] - lsrs r2, r1, 31 - adds r1, r2 - lsls r1, 15 - lsrs r1, 16 - str r1, [sp] - ldrh r1, [r0, 0x24] - ldrh r3, [r0, 0x20] - adds r1, r3 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - ldrh r1, [r0, 0x26] - ldrh r0, [r0, 0x22] - adds r1, r0 - lsls r1, 16 - lsrs r1, 16 - mov r10, r1 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xA - bl __umodsi3 - adds r0, r5, r0 - subs r0, 0x5 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - bl Random - negs r4, r4 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xA - bl __umodsi3 - adds r4, r0 - subs r4, 0x5 - lsls r4, 16 - lsrs r7, r4, 16 - movs r6, 0 - mov r0, r8 - lsls r0, 16 - mov r8, r0 - mov r1, r10 - lsls r1, 16 - str r1, [sp, 0xC] - ldr r2, [sp] - lsls r2, 16 - str r2, [sp, 0x10] - asrs r1, 16 - lsls r0, r7, 16 - asrs r5, r0, 16 - str r0, [sp, 0x14] - negs r3, r5 - str r3, [sp, 0x4] - asrs r0, r2, 16 - adds r1, r0 - lsls r1, 16 - mov r10, r1 -_080AC826: - ldr r0, _080AC868 @ =gUnknown_83E5B88 - mov r2, r8 - asrs r1, r2, 16 - mov r3, r10 - asrs r2, r3, 16 - movs r3, 0x82 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080AC86C @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r4, r0, r1 - movs r0, 0x14 - strh r0, [r4, 0x2E] - mov r0, r9 - strh r0, [r4, 0x30] - ldr r0, _080AC870 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSpriteSubpriority - subs r0, 0x1 - adds r1, r4, 0 - adds r1, 0x43 - strb r0, [r1] - cmp r5, 0 - bge _080AC874 - mov r1, sp - ldrh r1, [r1, 0x4] - strh r1, [r4, 0x32] - b _080AC876 - .align 2, 0 -_080AC868: .4byte gUnknown_83E5B88 -_080AC86C: .4byte gSprites -_080AC870: .4byte gBattleAnimAttacker -_080AC874: - strh r7, [r4, 0x32] -_080AC876: - lsls r0, r6, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r2 - lsrs r6, r0, 16 - cmp r0, 0 - ble _080AC826 - movs r6, 0 - ldr r3, [sp, 0xC] - asrs r1, r3, 16 - ldr r0, [sp, 0x14] - asrs r5, r0, 16 - negs r2, r5 - str r2, [sp, 0x8] - ldr r3, [sp, 0x10] - asrs r0, r3, 16 - subs r1, r0 - lsls r1, 16 - mov r10, r1 -_080AC89C: - ldr r0, _080AC8E0 @ =gUnknown_83E5B88 - mov r2, r8 - asrs r1, r2, 16 - mov r3, r10 - asrs r2, r3, 16 - movs r3, 0x82 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080AC8E4 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r4, r0, r1 - movs r0, 0x14 - strh r0, [r4, 0x2E] - mov r0, r9 - strh r0, [r4, 0x30] - ldr r0, _080AC8E8 @ =gBattleAnimAttacker - ldrb r0, [r0] - bl GetBattlerSpriteSubpriority - subs r0, 0x1 - adds r1, r4, 0 - adds r1, 0x43 - strb r0, [r1] - cmp r5, 0 - ble _080AC8EC - mov r1, sp - ldrh r1, [r1, 0x8] - strh r1, [r4, 0x32] - b _080AC8EE - .align 2, 0 -_080AC8E0: .4byte gUnknown_83E5B88 -_080AC8E4: .4byte gSprites -_080AC8E8: .4byte gBattleAnimAttacker -_080AC8EC: - strh r7, [r4, 0x32] -_080AC8EE: - lsls r0, r6, 16 - movs r2, 0x80 - lsls r2, 9 - adds r0, r2 - lsrs r6, r0, 16 - cmp r0, 0 - ble _080AC89C - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80AC798 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/battle_anim_effects_misc.s b/data/battle_anim_effects_misc.s deleted file mode 100644 index c6cb89e24..000000000 --- a/data/battle_anim_effects_misc.s +++ /dev/null @@ -1,210 +0,0 @@ -#include "constants/maps.h" -#include "constants/species.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnknown_83E44F4:: @ 83E44F4 - .incbin "graphics/battle_anims/unk_83E4874.4bpp" - -gUnknown_83E4874:: - .incbin "graphics/battle_anims/unk_83E4874.bin" - -gUnknown_83E5874:: @ 83E5874 - obj_image_anim_frame 0, 2 - obj_image_anim_frame 8, 2 - obj_image_anim_frame 16, 2 - obj_image_anim_frame 24, 6 - obj_image_anim_frame 32, 2 - obj_image_anim_frame 40, 2 - obj_image_anim_frame 48, 2 - obj_image_anim_end - -gUnknown_83E5894:: @ 83E5894 - .4byte gUnknown_83E5874 - -gUnknown_83E5898:: @ 83E5898 - spr_template 10115, 10115, gOamData_AffineOff_ObjNormal_16x32, gUnknown_83E5894, NULL, gDummySpriteAffineAnimTable, sub_80AAC54 - -gUnknown_83E58B0:: @ 83E58B0 - obj_rot_scal_anim_frame -5, -5, 0, 10 - obj_rot_scal_anim_frame 5, 5, 0, 10 - obj_rot_scal_anim_jump 0 - -gUnknown_83E58C8:: @ 83E58C8 - .4byte gUnknown_83E58B0 - -gUnknown_83E58CC:: @ 83E58CC - obj_image_anim_frame 0, 1 - obj_image_anim_frame 4, 5 - obj_image_anim_frame 8, 5 - obj_image_anim_end - -gUnknown_83E58DC:: @ 83E58DC - .4byte gUnknown_83E58CC - -gUnknown_83E58E0:: @ 83E58E0 - spr_template 10146, 10146, gOamData_AffineNormal_ObjBlend_16x16, gUnknown_83E58DC, NULL, gUnknown_83E58C8, sub_80AAC98 - -gUnknown_83E58F8:: @ 83E58F8 - obj_image_anim_frame 0, 1 - obj_image_anim_end - -gUnknown_83E5900:: @ 83E5900 - obj_image_anim_frame 4, 1 - obj_image_anim_end - -gUnknown_83E5908:: @ 83E5908 - .4byte gUnknown_83E58F8 - .4byte gUnknown_83E5900 - -gUnknown_83E5910:: @ 83E5910 - obj_rot_scal_anim_frame 0, 0, 0, 1 - obj_rot_scal_anim_frame 96, 96, 0, 1 - obj_rot_scal_anim_end - -gUnknown_83E5928:: @ 83E5928 - .4byte gUnknown_83E5910 - -gUnknown_83E592C:: @ 83E592C - spr_template 10140, 10140, gOamData_AffineDouble_ObjNormal_8x16, gUnknown_83E5908, NULL, gUnknown_83E5928, sub_80AAE84 - -gUnknown_83E5944:: @ 83E5944 - obj_image_anim_frame 0, 1 - obj_image_anim_frame 4, 1 - obj_image_anim_frame 8, 1 - obj_image_anim_frame 12, 1 - obj_image_anim_jump 0 - -gUnknown_83E5958:: @ 83E5958 - .4byte gUnknown_83E5944 - -gUnknown_83E595C:: @ 83E595C - spr_template 10149, 10149, gOamData_AffineOff_ObjBlend_16x16, gUnknown_83E5958, NULL, gDummySpriteAffineAnimTable, sub_80AB024 - -gUnknown_83E5974:: @ 83E5974 - spr_template 10259, 10259, gOamData_AffineOff_ObjBlend_16x16, gUnknown_83E5958, NULL, gDummySpriteAffineAnimTable, sub_80AB024 - -gUnknown_83E598C:: @ 83E598C - spr_template 10264, 10264, gOamData_AffineOff_ObjNormal_8x8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AB024 - -gUnknown_83E59A4:: @ 83E59A4 - spr_template 10265, 10265, gOamData_AffineOff_ObjNormal_8x8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80AB024 - -gUnknown_83E59BC:: @ 83E59BC - obj_image_anim_frame 16, 2 - obj_image_anim_frame 32, 2 - obj_image_anim_frame 48, 2 - obj_image_anim_jump 0 - -gUnknown_83E59CC:: @ 83E59CC - .4byte gUnknown_83E59BC - -gUnknown_83E59D0:: @ 83E59D0 - spr_template 10029, 10029, gOamData_AffineOff_ObjNormal_32x32, gUnknown_83E59CC, NULL, gDummySpriteAffineAnimTable, sub_80AB024 - -gUnknown_83E59E8:: @ 83E59E8 - spr_template 10165, 10165, gOamData_AffineDouble_ObjNormal_16x32, gDummySpriteAnimTable, NULL, gGrowingRingAffineAnimTable, sub_80AB024 - -gUnknown_83E5A00:: @ 83E5A00 - obj_rot_scal_anim_frame 3, 3, 10, 50 - obj_rot_scal_anim_frame 0, 0, 0, 10 - obj_rot_scal_anim_frame -20, -20, 246, 20 - obj_rot_scal_anim_end - -gUnknown_83E5A20:: @ 83E5A20 - obj_rot_scal_anim_frame 336, 336, 0, 0 - obj_rot_scal_anim_end - -gUnknown_83E5A30:: @ 83E5A30 - .4byte gUnknown_83E5A00 - -gUnknown_83E5A34:: @ 83E5A34 - .4byte gUnknown_83E5A20 - -gUnknown_83E5A38:: @ 83E5A38 - spr_template 10149, 10149, gOamData_AffineDouble_ObjBlend_16x16, gUnknown_83E5958, NULL, gUnknown_83E5A30, sub_80AB168 - -gUnknown_83E5A50:: @ 83E5A50 - spr_template 10149, 10149, gOamData_AffineDouble_ObjBlend_16x16, gUnknown_83E5958, NULL, gUnknown_83E5A34, sub_80AB1F8 - -gUnknown_83E5A68:: @ 83E5A68 - obj_image_anim_frame 0, 1 - obj_image_anim_end - -gUnknown_83E5A70:: @ 83E5A70 - obj_image_anim_frame 4, 1 - obj_image_anim_end - -gUnknown_83E5A78:: @ 83E5A78 - .4byte gUnknown_83E5A68 - -gUnknown_83E5A7C:: @ 83E5A7C - .4byte gUnknown_83E5A70 - -gUnknown_83E5A80:: @ 83E5A80 - spr_template 10155, 10155, gOamData_AffineOff_ObjBlend_16x16, gUnknown_83E5A78, NULL, gDummySpriteAffineAnimTable, AnimThrowProjectile - -gUnknown_83E5A98:: @ 83E5A98 - spr_template 10155, 10155, gOamData_AffineDouble_ObjBlend_16x16, gUnknown_83E5A7C, NULL, gUnknown_83E6A80, sub_80AB2CC - -gUnknown_83E5AB0:: @ 83E5AB0 - spr_template 10141, 10141, gOamData_AffineOff_ObjNormal_8x8, gUnknown_83E6330, NULL, gDummySpriteAffineAnimTable, sub_80AB308 - -gUnknown_83E5AC8:: @ 83E5AC8 - spr_template 10155, 10155, gOamData_AffineOff_ObjNormal_8x8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80ABA78 - -gUnknown_83E5AE0:: @ 83E5AE0 - spr_template 10268, 10268, gOamData_AffineOff_ObjNormal_8x8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80ABF60 - -gUnknown_83E5AF8:: @ 83E5AF8 - obj_image_anim_frame 8, 1 - obj_image_anim_end - -gUnknown_83E5B00:: @ 83E5B00 - obj_image_anim_frame 9, 1 - obj_image_anim_end - -gUnknown_83E5B08:: @ 83E5B08 - obj_image_anim_frame 4, 1 - obj_image_anim_end - -gUnknown_83E5B10:: @ 83E5B10 - .4byte gUnknown_83E5AF8 - .4byte gUnknown_83E5B00 - -gUnknown_83E5B18:: @ 83E5B18 - .4byte gUnknown_83E5B08 - -gUnknown_83E5B1C:: @ 83E5B1C - obj_rot_scal_anim_frame 256, 256, 0, 0 - obj_rot_scal_anim_frame -10, -10, 0, 15 - obj_rot_scal_anim_end - -gUnknown_83E5B34:: @ 83E5B34 - obj_rot_scal_anim_frame 224, 224, 0, 0 - obj_rot_scal_anim_frame -8, -8, 0, 15 - obj_rot_scal_anim_end - -gUnknown_83E5B4C:: @ 83E5B4C - obj_rot_scal_anim_frame 336, 336, 0, 0 - obj_rot_scal_anim_frame 0, 0, 0, 15 - obj_rot_scal_anim_end - -gUnknown_83E5B64:: @ 83E5B64 - .4byte gUnknown_83E5B1C - .4byte gUnknown_83E5B34 - -gUnknown_83E5B6C:: @ 83E5B6C - .4byte gUnknown_83E5B4C - -gUnknown_83E5B70:: @ 83E5B70 - spr_template 10155, 10155, gOamData_AffineOff_ObjNormal_8x8, gUnknown_83E5B10, NULL, gDummySpriteAffineAnimTable, sub_80AC624 - -gUnknown_83E5B88:: @ 83E5B88 - spr_template 10155, 10155, gOamData_AffineNormal_ObjNormal_8x8, gUnknown_83E5B10, NULL, gUnknown_83E5B64, sub_80AC698 - -gUnknown_83E5BA0:: @ 83E5BA0 - spr_template 10155, 10155, gOamData_AffineNormal_ObjNormal_16x16, gUnknown_83E5B18, NULL, gUnknown_83E5B6C, sub_8077350 diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 05f298340..d87c4053e 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -1612,28 +1612,28 @@ Move_WATERFALL:: @ 81C8BC1 createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 23, 1 delay 5 playsewithpan SE_W152, 192 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 10, 10, 25, 0 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 25, 0 delay 4 playsewithpan SE_W152, 192 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -15, 0, 25, 0 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -15, 0, 25, 0 delay 4 playsewithpan SE_W152, 192 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 20, 10, 25, 0 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 20, 10, 25, 0 delay 4 playsewithpan SE_W152, 192 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 0, -10, 25, 0 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0, -10, 25, 0 delay 4 playsewithpan SE_W152, 192 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -10, 15, 25, 0 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -10, 15, 25, 0 delay 4 playsewithpan SE_W152, 192 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 25, 20, 25, 0 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 25, 20, 25, 0 delay 4 playsewithpan SE_W152, 192 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -20, 20, 25, 0 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -20, 20, 25, 0 delay 4 playsewithpan SE_W152, 192 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 12, 0, 25, 0 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 12, 0, 25, 0 waitforvisualfinish delay 10 createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 6, 5 @@ -1647,41 +1647,41 @@ Move_WATERFALL:: @ 81C8BC1 gUnknown_81C8CA2:: @ 81C8CA2 playsewithpan SE_W127, 63 createvisualtask AnimTask_ShakeMon2, 5, 1, 4, 0, 17, 1 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 20, 1, 1 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 20 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 20 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 20 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 20 delay 2 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 15, 1, 1 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 15 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 15 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 15, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 15 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 15 delay 2 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 10, 1, 1 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 10 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 10 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 10 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 10 delay 2 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 5, 1, 1 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 5 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 5 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 5, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 5 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 5 delay 2 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, 0, 1, 1 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 0 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, 0 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 0 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, 0 delay 2 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -5, 1, 1 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -5 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -5 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -5, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -5 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -5 delay 2 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -10, 1, 1 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -10 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -10 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -10 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -10 delay 2 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -15, 1, 1 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -15 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -15 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -15, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -15 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -15 delay 2 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 3, 0, -20, 1, 1 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -20 - createsprite gUnknown_83E5AC8, ANIM_ATTACKER, 4, 0, -20 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, -20, 1, 1 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -20 + createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -20 return Move_EXPLOSION:: @ 81C8E15 @@ -2277,22 +2277,22 @@ Move_BUBBLE_BEAM:: @ 81C9D13 end gUnknown_81C9D4D:: @ 81C9D4D - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 35, 70, 0, 256, 50 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 35, 70, 0, 256, 50 playsewithpan SE_W145, 192 delay 3 - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 20, 40, -10, 256, 50 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 20, 40, -10, 256, 50 playsewithpan SE_W145, 192 delay 3 - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 10, -60, 0, 256, 50 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 10, -60, 0, 256, 50 playsewithpan SE_W145, 192 delay 3 - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 15, -15, 10, 256, 50 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 15, -15, 10, 256, 50 playsewithpan SE_W145, 192 delay 3 - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 30, 10, -10, 256, 50 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 30, 10, -10, 256, 50 playsewithpan SE_W145, 192 delay 3 - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 25, -30, 10, 256, 50 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 25, -30, 10, 256, 50 playsewithpan SE_W145, 192 delay 3 return @@ -2672,8 +2672,8 @@ Move_LOW_KICK:: @ 81CA674 end Move_EARTHQUAKE:: @ 81CA6D1 - createvisualtask sub_80B94B4, 5, 5, 10, 50 - createvisualtask sub_80B94B4, 5, 4, 10, 50 + createvisualtask AnimTask_HorizontalShake, 5, 5, 10, 50 + createvisualtask AnimTask_HorizontalShake, 5, 4, 10, 50 playsewithpan SE_W089, 0 delay 10 createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 0, 14, RGB_WHITE, 14 @@ -2683,8 +2683,8 @@ Move_EARTHQUAKE:: @ 81CA6D1 Move_FISSURE:: @ 81CA71E loadspritegfx ANIM_TAG_MUD_SAND - createvisualtask sub_80B94B4, 3, 5, 10, 50 - createvisualtask sub_80B94B4, 3, 1, 10, 50 + createvisualtask AnimTask_HorizontalShake, 3, 5, 10, 50 + createvisualtask AnimTask_HorizontalShake, 3, 1, 10, 50 playsewithpan SE_W089, 63 delay 8 call gUnknown_81CA79F @@ -3016,7 +3016,7 @@ gUnknown_81CAD40:: @ 81CAD40 waitforvisualfinish delay 12 createvisualtask AnimTask_BlendSelected, 10, 2, 1, 8, 0, RGB_BLACK - createvisualtask sub_80B94B4, 5, 0, 2, 16 + createvisualtask AnimTask_HorizontalShake, 5, 0, 2, 16 loopsewithpan SE_W287, 192, 4, 8 createvisualtask AnimTask_BlendSelected, 10, 2, 1, 0, 15, RGB_WHITE delay 20 @@ -3033,7 +3033,7 @@ gUnknown_81CADB7:: @ 81CADB7 waitforvisualfinish delay 12 createvisualtask AnimTask_BlendSelected, 10, 2, 1, 8, 0, RGB_BLACK - createvisualtask sub_80B94B4, 5, 0, 2, 16 + createvisualtask AnimTask_HorizontalShake, 5, 0, 2, 16 playsewithpan SE_W287, 192 delay 8 createvisualtask AnimTask_BlendSelected, 10, 2, 1, 0, 15, RGB_WHITE @@ -3416,14 +3416,14 @@ gUnknown_81CB468:: @ 81CB468 end gUnknown_81CB469:: @ 81CB469 - createvisualtask sub_80B94B4, 5, 5, 0, 50 - createvisualtask sub_80B94B4, 5, 4, 0, 50 + createvisualtask AnimTask_HorizontalShake, 5, 5, 0, 50 + createvisualtask AnimTask_HorizontalShake, 5, 4, 0, 50 loopsewithpan SE_W070, 63, 8, 10 goto gUnknown_81CB468 gUnknown_81CB48E:: @ 81CB48E - createvisualtask sub_80B94B4, 5, 5, 0, 50 - createvisualtask sub_80B94B4, 5, 4, 0, 50 + createvisualtask AnimTask_HorizontalShake, 5, 5, 0, 50 + createvisualtask AnimTask_HorizontalShake, 5, 4, 0, 50 loopsewithpan SE_W070, 63, 8, 10 delay 10 createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 3, 1, 0, 14, RGB_WHITE, 14 @@ -3915,8 +3915,8 @@ Move_ERUPTION:: @ 81CBEEF createsprite gUnknown_83E5E60, ANIM_ATTACKER, 40, 110, -32, 64, 50, 0 createsprite gUnknown_83E5E60, ANIM_ATTACKER, 40, 60, -32, 80, 70, 1 delay 22 - createvisualtask sub_80B94B4, 5, 5, 8, 60 - createvisualtask sub_80B94B4, 5, 4, 8, 60 + createvisualtask AnimTask_HorizontalShake, 5, 5, 8, 60 + createvisualtask AnimTask_HorizontalShake, 5, 4, 8, 60 loopsewithpan SE_W088, 63, 16, 12 delay 80 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, 31, 4, 4, 0, 31 @@ -3946,7 +3946,7 @@ Move_IMPRISON:: @ 81CC007 waitforvisualfinish delay 4 createsprite gUnknown_83E705C, ANIM_ATTACKER, 5, 0, 40 - createvisualtask sub_80B94B4, 5, 4, 1, 10 + createvisualtask AnimTask_HorizontalShake, 5, 4, 1, 10 playsewithpan SE_W063, 192 clearmonbg 3 call gUnknown_81D59C7 @@ -4040,7 +4040,7 @@ Move_LUSTER_PURGE:: @ 81CC0FB createvisualtask sub_80DD3DC, 5, 208, 63 waitforvisualfinish createvisualtask AnimTask_BlendExcept, 5, 5, 2, 16, 0, -1 - createvisualtask sub_80B94B4, 5, 1, 5, 14 + createvisualtask AnimTask_HorizontalShake, 5, 1, 5, 14 waitforvisualfinish clearmonbg 0 blendoff @@ -4389,13 +4389,13 @@ Move_WATER_SPOUT:: @ 81CCB48 loadspritegfx ANIM_TAG_WATER_IMPACT monbg 3 setalpha 12, 8 - createvisualtask sub_80ABB28, 5, + createvisualtask AnimTask_WaterSpoutLaunch, 5, playsewithpan SE_W029, 192 delay 44 playsewithpan SE_W291, 192 waitforvisualfinish delay 16 - createvisualtask sub_80AC00C, 5, + createvisualtask AnimTask_WaterSpoutRain, 5, playsewithpan SE_W057, 63 clearmonbg 3 blendoff @@ -4559,7 +4559,7 @@ Move_VOLT_TACKLE:: @ 81CCD79 Move_WATER_SPORT:: @ 81CCE71 loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB - createvisualtask sub_80AC328, 5, + createvisualtask AnimTask_WaterSport, 5, delay 8 playsewithpan SE_W057, 192 delay 44 @@ -5210,27 +5210,27 @@ Move_BUBBLE:: @ 81CDD4A monbg 1 setalpha 12, 8 delay 1 - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 15, -15, 10, 128, 100 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 15, -15, 10, 128, 100 playsewithpan SE_W145, 192 waitplaysewithpan SE_W145B, 63, 100 delay 6 - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 35, 37, 40, 128, 100 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 35, 37, 40, 128, 100 playsewithpan SE_W145, 192 waitplaysewithpan SE_W145B, 63, 100 delay 6 - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 10, -37, 30, 128, 100 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 10, -37, 30, 128, 100 playsewithpan SE_W145, 192 waitplaysewithpan SE_W145B, 63, 100 delay 6 - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 30, 10, 15, 128, 100 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 30, 10, 15, 128, 100 playsewithpan SE_W145, 192 waitplaysewithpan SE_W145B, 63, 100 delay 6 - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 20, 33, 20, 128, 100 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 20, 33, 20, 128, 100 playsewithpan SE_W145, 192 waitplaysewithpan SE_W145B, 63, 100 delay 6 - createsprite gUnknown_83E58E0, ANIM_ATTACKER, 2, 18, 0, 25, -30, 10, 128, 100 + createsprite gWaterBubbleProjectileSpriteTemplate, ANIM_ATTACKER, 2, 18, 0, 25, -30, 10, 128, 100 playsewithpan SE_W145, 192 waitplaysewithpan SE_W145B, 63, 100 waitforvisualfinish @@ -5394,8 +5394,8 @@ Move_RAIN_DANCE:: @ 81CE145 playsewithpan SE_W240, 192 createvisualtask AnimTask_BlendSelected, 10, 1 | (0xF << 7), 2, 0, 4, RGB_BLACK waitforvisualfinish - createvisualtask sub_80AABC0, 2, 0, 3, 120 - createvisualtask sub_80AABC0, 2, 0, 3, 120 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 120 delay 120 delay 30 waitforvisualfinish @@ -5522,7 +5522,7 @@ Move_AURORA_BEAM:: @ 81CE43F waitbgfadein playsewithpan SE_W062, 192 setarg 7, 0 - createvisualtask sub_80AAF60, 10, 130 + createvisualtask AnimTask_RotateAuroraRingColors, 10, 130 call gUnknown_81CE4C6 createvisualtask AnimTask_ShakeMon2, 5, 1, 1, 0, 17, 1 call gUnknown_81CE4C6 @@ -5543,13 +5543,13 @@ Move_AURORA_BEAM:: @ 81CE43F end gUnknown_81CE4C6:: @ 81CE4C6 - createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17 + createsprite gAuroraBeamRingSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 0, 17 delay 1 - createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17 + createsprite gAuroraBeamRingSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 0, 17 delay 1 - createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17 + createsprite gAuroraBeamRingSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 0, 17 delay 1 - createsprite gUnknown_83E592C, ANIM_TARGET, 2, 20, 0, 0, 0, 17 + createsprite gAuroraBeamRingSpriteTemplate, ANIM_TARGET, 2, 20, 0, 0, 0, 17 delay 1 return @@ -5746,7 +5746,7 @@ Move_HYDRO_PUMP:: @ 81CE9EE createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 40, 1 delay 6 panse_1B SE_W056, 192, 63, 2, 0 - createvisualtask sub_80AB100, 5, 100 + createvisualtask AnimTask_StartSinAnimTimer, 5, 100 call gUnknown_81CEA8D call gUnknown_81CEA8D call gUnknown_81CEA8D @@ -5773,17 +5773,17 @@ Move_HYDRO_PUMP:: @ 81CE9EE end gUnknown_81CEA8D:: @ 81CEA8D - createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, 16 - createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, -16 + createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16 + createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, -16 delay 1 - createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, 16 - createsprite gUnknown_83E595C, ANIM_ATTACKER, 3, 10, 10, 0, -16 + createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16 + createsprite gHydroPumpOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, -16 delay 1 return gUnknown_81CEACE:: @ 81CEACE - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, 15, 1, 1 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, -15, 1, 1 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 15, 1, 1 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, -15, 1, 1 return Move_SIGNAL_BEAM:: @ 81CEAED @@ -5793,7 +5793,7 @@ Move_SIGNAL_BEAM:: @ 81CEAED createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 25, 1 delay 6 panse_1B SE_W062, 192, 63, 1, 0 - createvisualtask sub_80AB100, 5, 100 + createvisualtask AnimTask_StartSinAnimTimer, 5, 100 call gUnknown_81CEBB4 call gUnknown_81CEBB4 call gUnknown_81CEBB4 @@ -5823,8 +5823,8 @@ Move_SIGNAL_BEAM:: @ 81CEAED end gUnknown_81CEBB4:: @ 81CEBB4 - createsprite gUnknown_83E598C, ANIM_TARGET, 3, 10, 10, 0, 16 - createsprite gUnknown_83E59A4, ANIM_TARGET, 3, 10, 10, 0, -16 + createsprite gSignalBeamRedOrbSpriteTemplate, ANIM_TARGET, 3, 10, 10, 0, 16 + createsprite gSignalBeamGreenOrbSpriteTemplate, ANIM_TARGET, 3, 10, 10, 0, -16 delay 1 return @@ -6381,18 +6381,18 @@ Move_WATER_GUN:: @ 81CF87A monbg 3 monbgprio_28 1 setalpha 12, 8 - createsprite gUnknown_83E5A80, ANIM_ATTACKER, 2, 20, 0, 0, 0, 40, -25 + createsprite gWaterGunProjectileSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 0, 0, 40, -25 playsewithpan SE_W145, 192 waitforvisualfinish createvisualtask AnimTask_ShakeMon2, 5, 1, 1, 0, 8, 1 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, 0, 1, 2 - createsprite gUnknown_83E5A98, ANIM_ATTACKER, 2, 0, -15, 0, 15, 55 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 1, 2 + createsprite gWaterGunDropletSpriteTemplate, ANIM_ATTACKER, 2, 0, -15, 0, 15, 55 playsewithpan SE_W152, 63 delay 10 - createsprite gUnknown_83E5A98, ANIM_ATTACKER, 2, 15, -20, 0, 15, 50 + createsprite gWaterGunDropletSpriteTemplate, ANIM_ATTACKER, 2, 15, -20, 0, 15, 50 playsewithpan SE_W152, 63 delay 10 - createsprite gUnknown_83E5A98, ANIM_ATTACKER, 2, -15, -10, 0, 10, 45 + createsprite gWaterGunDropletSpriteTemplate, ANIM_ATTACKER, 2, -15, -10, 0, 10, 45 playsewithpan SE_W152, 63 waitforvisualfinish clearmonbg 3 @@ -6404,7 +6404,7 @@ Move_CRABHAMMER:: @ 81CF907 loadspritegfx ANIM_TAG_WATER_IMPACT monbg 3 setalpha 12, 8 - createsprite gUnknown_83E7C38, ANIM_ATTACKER, 4, 0, 0, 1, 0 + createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 1, 0 playsewithpan SE_W233B, 63 delay 1 createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 31, 3, 1, 32429, 10, 0, 0 @@ -6416,28 +6416,28 @@ Move_CRABHAMMER:: @ 81CF907 waitforvisualfinish loopsewithpan SE_W152, 63, 20, 3 createvisualtask AnimTask_ShakeMon, 5, 1, 0, 4, 8, 1 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 10, 10, 20, 1 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 10, 10, 20, 1 delay 4 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 20, -20, 20, 1 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 20, -20, 20, 1 delay 4 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -15, 15, 20, 1 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -15, 15, 20, 1 delay 4 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 0, 0, 20, 1 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 20, 1 delay 4 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -10, -20, 20, 1 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -10, -20, 20, 1 delay 4 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 16, -8, 20, 1 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 16, -8, 20, 1 delay 4 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, 5, 8, 20, 1 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, 5, 8, 20, 1 delay 4 - createsprite gUnknown_83E5AB0, ANIM_ATTACKER, 2, -16, 0, 20, 1 + createsprite gSmallBubblePairSpriteTemplate, ANIM_ATTACKER, 2, -16, 0, 20, 1 waitforvisualfinish clearmonbg 3 blendoff end Move_SURF:: @ 81CFA01 - createvisualtask sub_80AB38C, 2, 0 + createvisualtask AnimTask_CreateSurfWave, 2, 0 delay 24 panse_1B SE_W057, 192, 63, 2, 0 waitforvisualfinish @@ -6450,7 +6450,7 @@ Move_FLAMETHROWER:: @ 81CFA15 setalpha 12, 8 createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 46, 1 delay 6 - createvisualtask sub_80AB100, 5, 100 + createvisualtask AnimTask_StartSinAnimTimer, 5, 100 panse_1B SE_W053, 192, 63, 2, 0 call gUnknown_81CFA8F call gUnknown_81CFA8F @@ -6470,9 +6470,9 @@ Move_FLAMETHROWER:: @ 81CFA15 end gUnknown_81CFA8F:: @ 81CFA8F - createsprite gUnknown_83E59D0, ANIM_ATTACKER, 3, 10, 10, 0, 16 + createsprite gFlamethrowerFlameSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16 delay 2 - createsprite gUnknown_83E59D0, ANIM_ATTACKER, 3, 10, 10, 0, 16 + createsprite gFlamethrowerFlameSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16 delay 2 return @@ -7318,7 +7318,7 @@ Move_PSYWAVE:: @ 81D0E4A loadspritegfx ANIM_TAG_BLUE_RING playsewithpan SE_W060, 192 call gUnknown_81D59BB - createvisualtask sub_80AB100, 5, 100 + createvisualtask AnimTask_StartSinAnimTimer, 5, 100 createsoundtask mas_80DCF38, 196, -64, 63, 2, 9, 0, 10 call gUnknown_81D0EAD call gUnknown_81D0EAD @@ -7333,9 +7333,9 @@ Move_PSYWAVE:: @ 81D0E4A end gUnknown_81D0EAD:: @ 81D0EAD - createsprite gUnknown_83E59E8, ANIM_TARGET, 3, 10, 10, 0, 16 + createsprite gPsywaveRingSpriteTemplate, ANIM_TARGET, 3, 10, 10, 0, 16 delay 4 - createsprite gUnknown_83E59E8, ANIM_TARGET, 3, 10, 10, 0, 16 + createsprite gPsywaveRingSpriteTemplate, ANIM_TARGET, 3, 10, 10, 0, 16 delay 4 return @@ -8763,7 +8763,7 @@ gUnknown_81D2F14:: @ 81D2F14 Move_MUDDY_WATER:: @ 81D2F28 panse_1B SE_W250, 192, 63, 2, 0 - createvisualtask sub_80AB38C, 2, 1 + createvisualtask AnimTask_CreateSurfWave, 2, 1 waitforvisualfinish end @@ -8860,7 +8860,7 @@ Move_MUD_SHOT:: @ 81D3239 setalpha 12, 8 createvisualtask AnimTask_ShakeMon, 5, 0, 0, 2, 46, 1 delay 6 - createvisualtask sub_80AB100, 5, 100 + createvisualtask AnimTask_StartSinAnimTimer, 5, 100 panse_1B SE_W250, 192, 63, 1, 0 call gUnknown_81D32B3 call gUnknown_81D32B3 @@ -8880,9 +8880,9 @@ Move_MUD_SHOT:: @ 81D3239 end gUnknown_81D32B3:: @ 81D32B3 - createsprite gUnknown_83E5974, ANIM_ATTACKER, 3, 10, 10, 0, 16 + createsprite gMudShotOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16 delay 2 - createsprite gUnknown_83E5974, ANIM_ATTACKER, 3, 10, 10, 0, 16 + createsprite gMudShotOrbSpriteTemplate, ANIM_ATTACKER, 3, 10, 10, 0, 16 delay 2 return @@ -9556,24 +9556,24 @@ Move_HYDRO_CANNON:: @ 81D45B2 monbg 3 setalpha 12, 8 playsewithpan SE_W057, 192 - createsprite gUnknown_83E5A38, ANIM_TARGET, 2, + createsprite gHydroCannonChargeSpriteTemplate, ANIM_TARGET, 2, delay 10 createvisualtask sub_80BA0E8, 2, 257, 257, 257 delay 30 panse_1B SE_W056, 192, 63, 2, 0 call gUnknown_81D467C createvisualtask AnimTask_ShakeMon, 5, 1, 10, 0, 40, 1 - createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 call gUnknown_81D467C - createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 call gUnknown_81D467C - createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 call gUnknown_81D467C - createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 call gUnknown_81D467C - createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 call gUnknown_81D467C - createsprite gUnknown_83E7C38, ANIM_TARGET, 2, 0, 0, 1, 0 + createsprite gWaterHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, 1, 0 waitforvisualfinish createvisualtask sub_80BA0E8, 2, 257, 257, 257 waitforvisualfinish @@ -9582,15 +9582,15 @@ Move_HYDRO_CANNON:: @ 81D45B2 end gUnknown_81D467C:: @ 81D467C - createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 + createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 delay 1 - createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 + createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 delay 1 - createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 + createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 delay 1 - createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 + createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 delay 1 - createsprite gUnknown_83E5A50, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 + createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 return Move_ASTONISH:: @ 81D46E4 @@ -9697,11 +9697,11 @@ Move_WATER_PULSE:: @ 81D48A6 playsewithpan SE_W145C, 192 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 0, 7, 29472 delay 10 - createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 100, 100, 8, 1, 20, 40, 0 - createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 20, 100, 16, 2, 10, 35, 1 - createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 200, 80, 8, 1, 40, 20, 0 - createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 80, 60, 10, 3, 20, 50, 0 - createsprite gUnknown_83E5B70, ANIM_ATTACKER, 66, 140, 100, 16, 1, 20, 30, 1 + createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 100, 100, 8, 1, 20, 40, 0 + createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 20, 100, 16, 2, 10, 35, 1 + createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 200, 80, 8, 1, 40, 20, 0 + createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 80, 60, 10, 3, 20, 50, 0 + createsprite gWaterPulseBubbleSpriteTemplate, ANIM_ATTACKER, 66, 140, 100, 16, 1, 20, 30, 1 playsewithpan SE_W145C, 63 waitforvisualfinish playsewithpan SE_W202, 192 @@ -10113,13 +10113,13 @@ gUnknown_81D5205:: @ 81D5205 gUnknown_81D5269:: @ 81D5269 loadspritegfx ANIM_TAG_SMALL_BUBBLES - createsprite gUnknown_83E5BA0, ANIM_TARGET, 2, -30, -100, 25, 1, 50, 10 + createsprite gWeatherBallWaterDownSpriteTemplate, ANIM_TARGET, 2, -30, -100, 25, 1, 50, 10 playsewithpan SE_W152, 63 delay 8 - createsprite gUnknown_83E5BA0, ANIM_TARGET, 2, -30, -100, 25, 1, -20, 20 + createsprite gWeatherBallWaterDownSpriteTemplate, ANIM_TARGET, 2, -30, -100, 25, 1, -20, 20 playsewithpan SE_W152, 63 delay 13 - createsprite gUnknown_83E5BA0, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0 + createsprite gWeatherBallWaterDownSpriteTemplate, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0 playsewithpan SE_W152, 63 waitforvisualfinish createvisualtask AnimTask_ShakeMon, 2, 1, 0, 3, 8, 1 @@ -10759,8 +10759,8 @@ General_Rain:: @ 81D5F8F playsewithpan SE_W240, 192 createvisualtask AnimTask_BlendSelected, 10, 1 | (0xF << 7), 2, 0, 4, RGB_BLACK waitforvisualfinish - createvisualtask sub_80AABC0, 2, 0, 3, 60 - createvisualtask sub_80AABC0, 2, 0, 3, 60 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 delay 50 waitforvisualfinish createvisualtask AnimTask_BlendSelected, 10, 1 | (0xF << 7), 2, 4, 0, RGB_BLACK diff --git a/graphics/unknown/unknown_E822B8.bin b/graphics/battle_anims/backgrounds/water_contest.bin index 6312b8645..6312b8645 100644 --- a/graphics/unknown/unknown_E822B8.bin +++ b/graphics/battle_anims/backgrounds/water_contest.bin diff --git a/graphics/unknown/unknown_E81D14.bin b/graphics/battle_anims/backgrounds/water_opponent.bin Binary files differindex d48de1d6f..d48de1d6f 100644 --- a/graphics/unknown/unknown_E81D14.bin +++ b/graphics/battle_anims/backgrounds/water_opponent.bin diff --git a/graphics/unknown/unknown_E81FE4.bin b/graphics/battle_anims/backgrounds/water_player.bin index 6a6f7c049..6a6f7c049 100644 --- a/graphics/unknown/unknown_E81FE4.bin +++ b/graphics/battle_anims/backgrounds/water_player.bin diff --git a/include/battle_anim.h b/include/battle_anim.h index e987457c7..eacb51f2c 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -218,6 +218,7 @@ void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite); void sub_80A2F0C(u8 taskId); // battle_anim_effects_2.c +extern const union AffineAnimCmd *const gGrowingRingAffineAnimTable[]; void sub_80A6E48(struct Sprite *); void sub_80A6E98(struct Sprite *); void sub_80A6F8C(struct Sprite *); @@ -345,7 +346,6 @@ void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId); // battle_anim_mons.c extern const struct MonCoords gCastformFrontSpriteCoords[]; - u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType); u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType); u8 GetBattlerSpriteDefault_Y(u8 battlerId); @@ -447,7 +447,7 @@ 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); +void AnimWeatherBallDown(struct Sprite *sprite); // battle_anim_mon_movement.c void AnimTask_ShakeMon(u8 taskId); @@ -467,6 +467,7 @@ void sub_8099BD4(u8 taskId); // normal.c extern const struct SpriteTemplate gUnknown_83E7C98; extern const struct SpriteTemplate gBasicHitSplatSpriteTemplate; +extern const struct SpriteTemplate gWaterHitSplatSpriteTemplate; u32 UnpackSelectedBattleAnimPalettes(s16 selector); void AnimTask_CurseBlendEffect(u8 taskId); void sub_80B9CE4(u8 taskId); @@ -478,7 +479,7 @@ void sub_80BA47C(u8 taskId); // ground.c void sub_80B8E94(u8 taskId); void sub_80B90EC(u8 taskId); -void sub_80B94B4(u8 taskId); +void AnimTask_HorizontalShake(u8 taskId); void AnimTask_IsPowerOver99(u8 taskId); void sub_80B9800(u8 taskId); @@ -527,10 +528,14 @@ void sub_80B194C(u8 taskId); void sub_80B1D3C(struct Sprite *sprite); void sub_80B2868(u8 taskId); +// poison.c +extern const union AffineAnimCmd *const gAffineAnims_Droplet[]; + // fighting.c void sub_80B1530(u8 taskId); // ice.c +extern const union AnimCmd *const gAnims_SmallBubblePair[]; void AnimTask_Haze1(u8 taskId); void AnimTask_LoadMistTiles(u8 taskId); void AnimTask_Hail1(u8 taskId); @@ -546,15 +551,14 @@ void sub_80AEFA0(u8 taskId); // fire.c extern const union AnimCmd *const gUnknown_83E5D48[]; - void sub_80ACEA4(u8 taskId); void sub_80ADAD8(u8 taskId); void AnimTask_BlendBackground(u8 taskId); void sub_80AD800(u8 taskId); // water.s -extern const union AnimCmd *const gUnknown_83E5958[]; -extern const union AnimCmd *const gUnknown_83E5A78[]; +extern const union AnimCmd *const gAnims_WaterMudOrb[]; +extern const union AnimCmd *const gAnims_WaterBubble[]; void AnimWaterPulseRing(struct Sprite *sprite); // smokescreen.s diff --git a/include/graphics.h b/include/graphics.h index 40a41b87e..35ef29391 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4241,6 +4241,7 @@ extern const u32 gBattleAnimBgImage_Cosmic[]; extern const u32 gBattleAnimBgImage_InAir[]; extern const u32 gBattleAnimBgImage_Aurora[]; extern const u32 gBattleAnimBgImage_Fissure[]; +extern const u32 gBattleAnimBgImage_Surf[]; extern const u32 gBattleAnimBgPalette_Dark[]; extern const u32 gBattleAnimBgPalette_Ghost[]; extern const u32 gBattleAnimBgPalette_Psychic[]; @@ -4252,11 +4253,13 @@ extern const u32 gBattleAnimBgPalette_Guillotine[]; extern const u32 gBattleAnimBgPalette_Ice[]; extern const u32 gBattleAnimBgPalette_Cosmic[]; extern const u32 gBattleAnimBgPalette_InAir[]; +extern const u32 gBattleAnimBgPalette_MuddyWater[]; extern const u32 gBattleAnimBgPalette_Sky[]; extern const u32 gBattleAnimBgPalette_Aurora[]; extern const u32 gBattleAnimBgPalette_Fissure[]; extern const u32 gBattleAnimBgPalette_Bug[]; extern const u32 gBattleAnimBgPalette_Solarbeam[]; +extern const u32 gBattleAnimBgPalette_Surf[]; extern const u32 gBattleAnimBgTilemap_Dark[]; extern const u32 gBattleAnimBgTilemap_Ghost[]; extern const u32 gBattleAnimBgTilemap_Psychic[]; @@ -4276,6 +4279,9 @@ extern const u32 gBattleAnimBgTilemap_Cosmic[]; extern const u32 gBattleAnimBgTilemap_InAir[]; extern const u32 gBattleAnimBgTilemap_Aurora[]; extern const u32 gBattleAnimBgTilemap_Fissure[]; +extern const u32 gBattleAnimBgTilemap_SurfOpponent[]; +extern const u32 gBattleAnimBgTilemap_SurfPlayer[]; +extern const u32 gBattleAnimBgTilemap_SurfContest[]; // dark extern const u32 gMetalShineGfx[]; diff --git a/include/random.h b/include/random.h index 139316f9d..1eaff3245 100644 --- a/include/random.h +++ b/include/random.h @@ -13,6 +13,8 @@ u16 Random2(void); //Returns a 32-bit pseudorandom number #define Random32() (Random() | (Random() << 16)) +#define ISO_RANDOMIZE2(val)(1103515245 * (val) + 12345) + //Sets the initial seed value of the pseudorandom number generator void SeedRng(u16 seed); void SeedRng2(u16 seed); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 741fdf312..d6c601572 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -2225,7 +2225,7 @@ static void sub_80772F4(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_8077350(struct Sprite *sprite) +void AnimWeatherBallDown(struct Sprite *sprite) { s32 x; diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index 4eb475a5c..8797670db 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -87,7 +87,7 @@ const struct SpriteTemplate gSpriteTemplate_83BF44C = .anims = sSpriteAnimTable_83BF430, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8077350, + .callback = AnimWeatherBallDown, }; static const union AnimCmd sUnknown_83BF464[] = diff --git a/src/fire.c b/src/fire.c index a5a2ee5f6..51c9dff84 100644 --- a/src/fire.c +++ b/src/fire.c @@ -337,7 +337,7 @@ const struct SpriteTemplate gUnknown_83E5E14 = .anims = gUnknown_83E5D48, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8077350, + .callback = AnimWeatherBallDown, }; static const struct SpriteTemplate gUnknown_83E5E2C = diff --git a/src/graphics.c b/src/graphics.c index 7eee42bf0..655bf43bc 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1019,7 +1019,7 @@ const u32 gBattleAnimBgTilemap_InAir[] = INCBIN_U32("graphics/battle_anims/backg const u32 gBattleAnimSpriteGfx_Protect[] = INCBIN_U32("graphics/battle_anims/sprites/protect.4bpp.lz"); const u32 gBattleAnimSpritePal_Protect[] = INCBIN_U32("graphics/battle_anims/sprites/protect.gbapal.lz"); -const u32 gFile_graphics_battle_anims_backgrounds_water_muddy_palette[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_muddy.gbapal.lz"); +const u32 gBattleAnimBgPalette_MuddyWater[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_muddy.gbapal.lz"); const u32 gFile_graphics_battle_interface_enemy_mon_shadow_sheet[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadow.4bpp.lz"); @@ -1085,11 +1085,13 @@ const u32 gBattleAnimSpritePal_Bird[] = INCBIN_U32("graphics/battle_anims/sprite const u32 gBattleAnimSpriteGfx_CrossImpact[] = INCBIN_U32("graphics/battle_anims/sprites/cross_impact.4bpp.lz"); const u32 gBattleAnimSpritePal_CrossImpact[] = INCBIN_U32("graphics/battle_anims/sprites/cross_impact.gbapal.lz"); -const u32 gFile_graphics_battle_anims_backgrounds_water_sheet[] = INCBIN_U32("graphics/battle_anims/backgrounds/water.4bpp.lz"); -const u32 gFile_graphics_battle_anims_backgrounds_water_palette[] = INCBIN_U32("graphics/battle_anims/backgrounds/water.gbapal.lz"); -const u32 gFile_graphics_unknown_unknown_E81D14_tilemap[] = INCBIN_U32("graphics/unknown/unknown_E81D14.bin.lz"); -const u32 gFile_graphics_unknown_unknown_E81FE4_tilemap[] = INCBIN_U32("graphics/unknown/unknown_E81FE4.bin.lz"); -const u32 gFile_graphics_unknown_unknown_E822B8_tilemap[] = INCBIN_U32("graphics/unknown/unknown_E822B8.bin.lz"); +const u32 gBattleAnimBgImage_Surf[] = INCBIN_U32("graphics/battle_anims/backgrounds/water.4bpp.lz"); +const u32 gBattleAnimBgPalette_Surf[] = INCBIN_U32("graphics/battle_anims/backgrounds/water.gbapal.lz"); + +// TODO Rename and move graphics +const u32 gBattleAnimBgTilemap_SurfOpponent[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_opponent.bin.lz"); +const u32 gBattleAnimBgTilemap_SurfPlayer[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_player.bin.lz"); +const u32 gBattleAnimBgTilemap_SurfContest[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_contest.bin.lz"); const u32 gBattleAnimSpritePal_Slash2[] = INCBIN_U32("graphics/battle_anims/sprites/slash_2.gbapal.lz"); diff --git a/src/ground.c b/src/ground.c index 423671112..5c4291623 100644 --- a/src/ground.c +++ b/src/ground.c @@ -538,7 +538,7 @@ static void AnimDigDirtMound(struct Sprite *sprite) sprite->callback = WaitAnimForDuration; } -void sub_80B94B4(u8 taskId) +void AnimTask_HorizontalShake(u8 taskId) { u16 i; struct Task *task = &gTasks[taskId]; @@ -130,7 +130,7 @@ static const union AnimCmd *const gUnknown_83E632C[] = gUnknown_83E6308, }; -const union AnimCmd *const gUnknown_83E6330[] = +const union AnimCmd *const gAnims_SmallBubblePair[] = { gUnknown_83E6310, }; @@ -432,7 +432,7 @@ const struct SpriteTemplate gUnknown_83E65BC = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_83E65A0, - .callback = sub_8077350, + .callback = AnimWeatherBallDown, }; static const union AnimCmd gUnknown_83E65D4[] = diff --git a/src/normal.c b/src/normal.c index 5a4d98907..c20316942 100644 --- a/src/normal.c +++ b/src/normal.c @@ -186,7 +186,7 @@ const struct SpriteTemplate gUnknown_83E7C20 = .callback = sub_80BA5F8, }; -const struct SpriteTemplate gUnknown_83E7C38 = +const struct SpriteTemplate gWaterHitSplatSpriteTemplate = { .tileTag = ANIM_TAG_WATER_IMPACT, .paletteTag = ANIM_TAG_WATER_IMPACT, diff --git a/src/poison.c b/src/poison.c index af7f8ee86..250fbcac4 100644 --- a/src/poison.c +++ b/src/poison.c @@ -134,7 +134,7 @@ static const union AffineAnimCmd gUnknown_83E6A68[] = AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const gUnknown_83E6A80[] = +const union AffineAnimCmd *const gAffineAnims_Droplet[] = { gUnknown_83E6A68, }; @@ -146,7 +146,7 @@ const struct SpriteTemplate gUnknown_83E6A84 = .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = gUnknown_83E69E0, .images = NULL, - .affineAnims = gUnknown_83E6A80, + .affineAnims = gAffineAnims_Droplet, .callback = sub_80B17C4, }; @@ -178,7 +178,7 @@ const struct SpriteTemplate gWaterBubbleSpriteTemplate = .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, .oam = &gOamData_AffineNormal_ObjBlend_16x16, - .anims = gUnknown_83E5A78, + .anims = gAnims_WaterBubble, .images = NULL, .affineAnims = gUnknown_83E6AB4, .callback = AnimBubbleEffect, diff --git a/src/rock.c b/src/rock.c index a2d28d057..565ce9461 100644 --- a/src/rock.c +++ b/src/rock.c @@ -100,7 +100,7 @@ const struct SpriteTemplate gUnknown_83E7420 = .tileTag = ANIM_TAG_WATER_ORB, .paletteTag = ANIM_TAG_WATER_ORB, .oam = &gOamData_AffineNormal_ObjBlend_16x16, - .anims = gUnknown_83E5958, + .anims = gAnims_WaterMudOrb, .images = NULL, .affineAnims = gUnknown_83E741C, .callback = sub_80B477C, @@ -310,7 +310,7 @@ const struct SpriteTemplate gUnknown_83E7590 = .anims = gUnknown_83E74B0, .images = NULL, .affineAnims = gUnknown_83E7540, - .callback = sub_8077350, + .callback = AnimWeatherBallDown, }; static void sub_80B4634(struct Sprite *sprite) diff --git a/src/water.c b/src/water.c new file mode 100644 index 000000000..31a4b32e7 --- /dev/null +++ b/src/water.c @@ -0,0 +1,2225 @@ +#include "global.h" +#include "battle_anim.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "palette.h" +#include "pokemon.h" +#include "random.h" +#include "scanline_effect.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "util.h" + +static void AnimRainDrop(struct Sprite *); +static void AnimRainDrop_Step(struct Sprite *); +static void AnimWaterBubbleProjectile(struct Sprite *); +static void AnimWaterBubbleProjectile_Step1(struct Sprite *); +static void AnimWaterBubbleProjectile_Step2(struct Sprite *); +static void AnimWaterBubbleProjectile_Step3(struct Sprite *); +static void AnimAuroraBeamRings(struct Sprite *); +static void AnimAuroraBeamRings_Step(struct Sprite *); +static void AnimToTargetInSinWave(struct Sprite *); +static void AnimToTargetInSinWave_Step(struct Sprite *); +static void AnimHydroCannonCharge(struct Sprite *); +static void AnimHydroCannonCharge_Step(struct Sprite *); +static void AnimHydroCannonBeam(struct Sprite *); +static void AnimWaterGunDroplet(struct Sprite *); +static void AnimSmallBubblePair(struct Sprite *); +static void AnimSmallBubblePair_Step(struct Sprite *); +static void AnimSmallDriftingBubbles(struct Sprite *); +static void AnimSmallDriftingBubbles_Step(struct Sprite *); +static void AnimSmallWaterOrb(struct Sprite *); +static void AnimWaterSpoutRain(struct Sprite *); +static void AnimWaterSpoutRainHit(struct Sprite *); +static void AnimWaterSportDroplet(struct Sprite *); +static void AnimWaterSportDroplet_Step(struct Sprite *); +static void AnimWaterPulseBubble(struct Sprite *); +static void AnimWaterPulseBubble_Step(struct Sprite *); +static void AnimWaterPulseRingBubble(struct Sprite *); +static void AnimWaterPulseRing_Step(struct Sprite *); +static void AnimTask_RotateAuroraRingColors_Step(u8); +static void AnimTask_RunSinAnimTimer(u8); +static void AnimTask_CreateSurfWave_Step1(u8); +static void AnimTask_CreateSurfWave_Step2(u8); +static void AnimTask_SurfWaveScanlineEffect(u8); +static void AnimTask_WaterSpoutLaunch_Step(u8); +static void AnimTask_WaterSpoutRain_Step(u8); +static u8 GetWaterSpoutPowerForAnim(void); +static void CreateWaterSpoutLaunchDroplets(struct Task*, u8); +static void CreateWaterSpoutRainDroplet(struct Task*, u8); +static void AnimTask_WaterSport_Step(u8); +static void CreateWaterSportDroplet(struct Task*); +static void CreateWaterPulseRingBubbles(struct Sprite*, int, int); + +// Both unused? Comment copied from pokeemerald +const u8 gUnknown_83E44F4[] = INCBIN_U8("graphics/battle_anims/unk_83E4874.4bpp"); +const u8 gUnknown_83E4874[] = INCBIN_U8("graphics/battle_anims/unk_83E4874.bin"); + +static const union AnimCmd sAnim_RainDrop[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(8, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(24, 6), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(40, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_END, +}; + +static const union AnimCmd *const sAnims_RainDrop[] = +{ + sAnim_RainDrop, +}; + +const struct SpriteTemplate gRainDropSpriteTemplate = +{ + .tileTag = ANIM_TAG_RAIN_DROPS, + .paletteTag = ANIM_TAG_RAIN_DROPS, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = sAnims_RainDrop, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimRainDrop, +}; + +static const union AffineAnimCmd sAffineAnim_WaterBubbleProjectile[] = +{ + AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 10), + AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const sAffineAnims_WaterBubbleProjectile[] = +{ + sAffineAnim_WaterBubbleProjectile, +}; + +static const union AnimCmd sAnim_WaterBubbleProjectile[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const sAnims_WaterBubbleProjectile[] = +{ + sAnim_WaterBubbleProjectile, +}; + +const struct SpriteTemplate gWaterBubbleProjectileSpriteTemplate = +{ + .tileTag = ANIM_TAG_BUBBLE, + .paletteTag = ANIM_TAG_BUBBLE, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = sAnims_WaterBubbleProjectile, + .images = NULL, + .affineAnims = sAffineAnims_WaterBubbleProjectile, + .callback = AnimWaterBubbleProjectile, +}; + +static const union AnimCmd sAnim_AuroraBeamRing_0[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_AuroraBeamRing_1[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sAnims_AuroraBeamRing[] = +{ + sAnim_AuroraBeamRing_0, + sAnim_AuroraBeamRing_1, +}; + +static const union AffineAnimCmd sAffineAnim_AuroraBeamRing[] = +{ + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1), + AFFINEANIMCMD_FRAME(0x60, 0x60, 0, 1), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sAffineAnims_AuroraBeamRing[] = +{ + sAffineAnim_AuroraBeamRing, +}; + +const struct SpriteTemplate gAuroraBeamRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_RAINBOW_RINGS, + .paletteTag = ANIM_TAG_RAINBOW_RINGS, + .oam = &gOamData_AffineDouble_ObjNormal_8x16, + .anims = sAnims_AuroraBeamRing, + .images = NULL, + .affineAnims = sAffineAnims_AuroraBeamRing, + .callback = AnimAuroraBeamRings, +}; + +static const union AnimCmd sAnim_WaterMudOrb[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(8, 1), + ANIMCMD_FRAME(12, 1), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gAnims_WaterMudOrb[] = +{ + sAnim_WaterMudOrb, +}; + +const struct SpriteTemplate gHydroPumpOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineOff_ObjBlend_16x16, + .anims = gAnims_WaterMudOrb, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimToTargetInSinWave, +}; + +const struct SpriteTemplate gMudShotOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_BROWN_ORB, + .paletteTag = ANIM_TAG_BROWN_ORB, + .oam = &gOamData_AffineOff_ObjBlend_16x16, + .anims = gAnims_WaterMudOrb, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimToTargetInSinWave, +}; + +const struct SpriteTemplate gSignalBeamRedOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_GLOWY_RED_ORB, + .paletteTag = ANIM_TAG_GLOWY_RED_ORB, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimToTargetInSinWave, +}; + +const struct SpriteTemplate gSignalBeamGreenOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_GLOWY_GREEN_ORB, + .paletteTag = ANIM_TAG_GLOWY_GREEN_ORB, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimToTargetInSinWave, +}; + +static const union AnimCmd sAnim_FlamethrowerFlame[] = +{ + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(48, 2), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sAnims_FlamethrowerFlame[] = +{ + sAnim_FlamethrowerFlame, +}; + +const struct SpriteTemplate gFlamethrowerFlameSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = sAnims_FlamethrowerFlame, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimToTargetInSinWave, +}; + +const struct SpriteTemplate gPsywaveRingSpriteTemplate = +{ + .tileTag = ANIM_TAG_BLUE_RING, + .paletteTag = ANIM_TAG_BLUE_RING, + .oam = &gOamData_AffineDouble_ObjNormal_16x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gGrowingRingAffineAnimTable, + .callback = AnimToTargetInSinWave, +}; + +static const union AffineAnimCmd sAffineAnim_HydroCannonCharge[] = +{ + AFFINEANIMCMD_FRAME(0x3, 0x3, 10, 50), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 10), + AFFINEANIMCMD_FRAME(0xFFEC, 0xFFEC, -10, 20), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sAffineAnim_HydroCannonBeam[] = +{ + AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sAffineAnims_HydroCannonCharge[] = +{ + sAffineAnim_HydroCannonCharge, +}; + +static const union AffineAnimCmd *const sAffineAnims_HydroCannonBeam[] = +{ + sAffineAnim_HydroCannonBeam, +}; + +const struct SpriteTemplate gHydroCannonChargeSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_16x16, + .anims = gAnims_WaterMudOrb, + .images = NULL, + .affineAnims = sAffineAnims_HydroCannonCharge, + .callback = AnimHydroCannonCharge, +}; + +const struct SpriteTemplate gHydroCannonBeamSpriteTemplate = +{ + .tileTag = ANIM_TAG_WATER_ORB, + .paletteTag = ANIM_TAG_WATER_ORB, + .oam = &gOamData_AffineDouble_ObjBlend_16x16, + .anims = gAnims_WaterMudOrb, + .images = NULL, + .affineAnims = sAffineAnims_HydroCannonBeam, + .callback = AnimHydroCannonBeam, +}; + +static const union AnimCmd sAnim_WaterBubble[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_WaterGunDroplet[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gAnims_WaterBubble[] = +{ + sAnim_WaterBubble, +}; + +static const union AnimCmd *const sAnims_WaterGunDroplet[] = +{ + sAnim_WaterGunDroplet, +}; + +const struct SpriteTemplate gWaterGunProjectileSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_AffineOff_ObjBlend_16x16, + .anims = gAnims_WaterBubble, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimThrowProjectile, +}; + +const struct SpriteTemplate gWaterGunDropletSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_AffineDouble_ObjBlend_16x16, + .anims = sAnims_WaterGunDroplet, + .images = NULL, + .affineAnims = gAffineAnims_Droplet, + .callback = AnimWaterGunDroplet, +}; + +const struct SpriteTemplate gSmallBubblePairSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICE_CRYSTALS, // ice_crystals_4, which are bubbles + .paletteTag = ANIM_TAG_ICE_CRYSTALS, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gAnims_SmallBubblePair, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSmallBubblePair, +}; + +const struct SpriteTemplate gSmallDriftingBubblesSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSmallDriftingBubbles, +}; + +// Used by Water Spout / Water Sport +const struct SpriteTemplate gSmallWaterOrbSpriteTemplate = +{ + .tileTag = ANIM_TAG_GLOWY_BLUE_ORB, + .paletteTag = ANIM_TAG_GLOWY_BLUE_ORB, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSmallWaterOrb, +}; + +static const union AnimCmd sAnim_WaterPulseBubble_0[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_WaterPulseBubble_1[] = +{ + ANIMCMD_FRAME(9, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sAnim_WeatherBallWaterDown[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sAnims_WaterPulseBubble[] = +{ + sAnim_WaterPulseBubble_0, + sAnim_WaterPulseBubble_1, +}; + +static const union AnimCmd *const sAnims_WeatherBallWaterDown[] = +{ + sAnim_WeatherBallWaterDown, +}; + +static const union AffineAnimCmd sAffineAnim_WaterPulseRingBubble_0[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 15), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sAffineAnim_WaterPulseRingBubble_1[] = +{ + AFFINEANIMCMD_FRAME(0xE0, 0xE0, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF8, 0xFFF8, 0, 15), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sAffineAnim_WeatherBallWaterDown[] = +{ + AFFINEANIMCMD_FRAME(0x150, 0x150, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sAffineAnims_WaterPulseRingBubble[] = +{ + sAffineAnim_WaterPulseRingBubble_0, + sAffineAnim_WaterPulseRingBubble_1, +}; + +static const union AffineAnimCmd *const sAffineAnims_WeatherBallWaterDown[] = +{ + sAffineAnim_WeatherBallWaterDown, +}; + +const struct SpriteTemplate gWaterPulseBubbleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = sAnims_WaterPulseBubble, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWaterPulseBubble, +}; + +const struct SpriteTemplate gWaterPulseRingBubbleSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_AffineNormal_ObjNormal_8x8, + .anims = sAnims_WaterPulseBubble, + .images = NULL, + .affineAnims = sAffineAnims_WaterPulseRingBubble, + .callback = AnimWaterPulseRingBubble, +}; + +const struct SpriteTemplate gWeatherBallWaterDownSpriteTemplate = +{ + .tileTag = ANIM_TAG_SMALL_BUBBLES, + .paletteTag = ANIM_TAG_SMALL_BUBBLES, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = sAnims_WeatherBallWaterDown, + .images = NULL, + .affineAnims = sAffineAnims_WeatherBallWaterDown, + .callback = AnimWeatherBallDown, +}; + +void AnimTask_CreateRaindrops(u8 taskId) +{ + u8 x, y; + + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + } + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1) + { + x = Random() % 240; + y = Random() % 80; + CreateSprite(&gRainDropSpriteTemplate, x, y, 4); + } + if (gTasks[taskId].data[0] == gTasks[taskId].data[3]) + DestroyAnimVisualTask(taskId); +} + +static void AnimRainDrop(struct Sprite *sprite) { + sprite->callback = AnimRainDrop_Step; +} + +static void AnimRainDrop_Step(struct Sprite *sprite) { + if (++sprite->data[0] < 14) // Was 13 in emerald + { + sprite->pos2.x += 1; + sprite->pos2.y += 4; + } + if (sprite->animEnded) + { + DestroySprite(sprite); + } +} + +// For water bubbles that move to a dest, as in Bubble/Bubblebeam +static void AnimWaterBubbleProjectile(struct Sprite *sprite) +{ + u8 spriteId; + + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1]; + sprite->animPaused = TRUE; + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1]; + sprite->animPaused = TRUE; + } + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[6]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + InitAnimLinearTranslation(sprite); + spriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + sprite->data[5] = spriteId; + sprite->pos1.x -= Sin((u8)gBattleAnimArgs[4], gBattleAnimArgs[2]); + sprite->pos1.y -= Cos((u8)gBattleAnimArgs[4], gBattleAnimArgs[3]); + gSprites[spriteId].data[0] = gBattleAnimArgs[2]; + gSprites[spriteId].data[1] = gBattleAnimArgs[3]; + gSprites[spriteId].data[2] = gBattleAnimArgs[5]; + gSprites[spriteId].data[3] = (u8)gBattleAnimArgs[4] * 256; + gSprites[spriteId].data[4] = gBattleAnimArgs[6]; + sprite->callback = AnimWaterBubbleProjectile_Step1; + sprite->callback(sprite); +} + +static void AnimWaterBubbleProjectile_Step1(struct Sprite *sprite) +{ + u8 otherSpriteId = sprite->data[5]; + u8 timer = gSprites[otherSpriteId].data[4]; + u16 trigIndex = gSprites[otherSpriteId].data[3]; + + sprite->data[0] = 1; + AnimTranslateLinear(sprite); + sprite->pos2.x += Sin(trigIndex >> 8, gSprites[otherSpriteId].data[0]); + sprite->pos2.y += Cos(trigIndex >> 8, gSprites[otherSpriteId].data[1]); + gSprites[otherSpriteId].data[3] = trigIndex + gSprites[otherSpriteId].data[2]; + if (--timer != 0) + { + gSprites[otherSpriteId].data[4] = timer; + } + else + { + sprite->callback = AnimWaterBubbleProjectile_Step2; + DestroySprite(&gSprites[otherSpriteId]); + } +} + +static void AnimWaterBubbleProjectile_Step2(struct Sprite *sprite) +{ + sprite->animPaused = FALSE; + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, AnimWaterBubbleProjectile_Step3); +} + +static void AnimWaterBubbleProjectile_Step3(struct Sprite *sprite) +{ + sprite->data[0] = 10; + sprite->callback = WaitAnimForDuration; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); +} + +static void AnimAuroraBeamRings(struct Sprite *sprite) +{ + s16 unkArg; + + InitSpritePosToAnimAttacker(sprite, TRUE); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + unkArg = -gBattleAnimArgs[2]; + else + unkArg = gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + unkArg; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3]; + InitAnimLinearTranslation(sprite); + sprite->callback = AnimAuroraBeamRings_Step; + sprite->affineAnimPaused = TRUE; + sprite->callback(sprite); +} + +static void AnimAuroraBeamRings_Step(struct Sprite *sprite) +{ + if ((u16)gBattleAnimArgs[7] == 0xFFFF) + { + StartSpriteAnim(sprite, 1); + sprite->affineAnimPaused = FALSE; + } + if (AnimTranslateLinear(sprite)) + DestroyAnimSprite(sprite); +} + +// Updates the palette on the rainbow rings used in Aurora Beam to make them appear to be rotating counterclockwise +void AnimTask_RotateAuroraRingColors(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_RAINBOW_RINGS) * 16 + 256; + gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step; +} + +#ifdef NONMATCHING +static void AnimTask_RotateAuroraRingColors_Step(u8 taskId) +{ + int i; + u16 palIndex; + u16 *palPtr1; + u16 *palPtr2; + u16 rgbBuffer; + + if (++gTasks[taskId].data[10] == 3) + { + gTasks[taskId].data[10] = 0; + palIndex = gTasks[taskId].data[2] + 1; + palPtr1 = &gPlttBufferFaded[palIndex]; + rgbBuffer = *palPtr1; + palPtr2 = &palPtr1[1]; + for (i = 0; i < 7; i++) + palPtr1[i] = palPtr2[i]; + gPlttBufferFaded[palIndex + 7] = rgbBuffer; + } + if (++gTasks[taskId].data[11] == gTasks[taskId].data[0]) + DestroyAnimVisualTask(taskId); +} +#else +NAKED +static void AnimTask_RotateAuroraRingColors_Step(u8 taskId) +{ + asm_unified("push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldr r1, =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r2, r0, r1\n\ + ldrh r0, [r2, 0x1C]\n\ + adds r0, 0x1\n\ + strh r0, [r2, 0x1C]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + mov r12, r1\n\ + cmp r0, 0x3\n\ + bne _081075BE\n\ + movs r0, 0\n\ + strh r0, [r2, 0x1C]\n\ + ldrh r0, [r2, 0xC]\n\ + adds r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + ldr r1, =gPlttBufferFaded\n\ + lsls r0, r5, 1\n\ + adds r0, r1\n\ + ldrh r6, [r0]\n\ + adds r7, r1, 0\n\ + adds r3, r0, 0x2\n\ + movs r1, 0x6\n\ + adds r2, r0, 0\n\ +_081075A8:\n\ + ldrh r0, [r3]\n\ + strh r0, [r2]\n\ + adds r3, 0x2\n\ + adds r2, 0x2\n\ + subs r1, 0x1\n\ + cmp r1, 0\n\ + bge _081075A8\n\ + adds r0, r5, 0x7\n\ + lsls r0, 1\n\ + adds r0, r7\n\ + strh r6, [r0]\n\ +_081075BE:\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + add r0, r12\n\ + ldrh r1, [r0, 0x1E]\n\ + adds r1, 0x1\n\ + strh r1, [r0, 0x1E]\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + movs r2, 0x8\n\ + ldrsh r0, [r0, r2]\n\ + cmp r1, r0\n\ + bne _081075DE\n\ + adds r0, r4, 0\n\ + bl DestroyAnimVisualTask\n\ +_081075DE:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n"); +} +#endif + +// For animating undulating beam attacks (e.g. Flamethrower, Hydro Pump, Signal Beam) +static void AnimToTargetInSinWave(struct Sprite *sprite) +{ + u16 retArg; + + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[0] = 30; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + InitAnimLinearTranslation(sprite); + sprite->data[5] = 0xD200 / sprite->data[0]; + sprite->data[7] = gBattleAnimArgs[3]; + retArg = gBattleAnimArgs[7]; + if (gBattleAnimArgs[7] > 127) + { + sprite->data[6] = (retArg - 127) * 256; + sprite->data[7] = -sprite->data[7]; + } + else + { + sprite->data[6] = retArg * 256; + } + sprite->callback = AnimToTargetInSinWave_Step; + sprite->callback(sprite); +} + +static void AnimToTargetInSinWave_Step(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + DestroyAnimSprite(sprite); + sprite->pos2.y += Sin(sprite->data[6] >> 8, sprite->data[7]); + if ((sprite->data[6] + sprite->data[5]) >> 8 > 127) + { + sprite->data[6] = 0; + sprite->data[7] = -sprite->data[7]; + } + else + { + sprite->data[6] += sprite->data[5]; + } +} + +void AnimTask_StartSinAnimTimer(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gBattleAnimArgs[7] = 0; + gTasks[taskId].func = AnimTask_RunSinAnimTimer; +} + +static void AnimTask_RunSinAnimTimer(u8 taskId) +{ + gBattleAnimArgs[7] = (gBattleAnimArgs[7] + 3) & 0xFF; + if (--gTasks[taskId].data[0] == 0) + DestroyAnimVisualTask(taskId); +} + +// Flashing blue orbs grow in size near the attacker. First stage of Hydro Cannon +static void AnimHydroCannonCharge(struct Sprite *sprite) +{ + u8 priority; + + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + sprite->pos2.y = -10; + priority = GetBattlerSpriteSubpriority(gBattleAnimAttacker); + if (!IsContest()) + { + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + sprite->pos2.x = 10; + sprite->subpriority = priority + 2; + } + else + { + sprite->pos2.x = -10; + sprite->subpriority = priority - 2; + } + } + else + { + sprite->pos2.x = -10; + sprite->subpriority = priority + 2; + } + sprite->callback = AnimHydroCannonCharge_Step; +} + +static void AnimHydroCannonCharge_Step(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + DestroyAnimSprite(sprite); +} + +// Flashing blue orbs move from the attacker to the target. Second stage of Hydro Cannon +static void AnimHydroCannonBeam(struct Sprite *sprite) +{ + bool8 animType; + u8 coordType; + if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget)) + { + gBattleAnimArgs[0] *= -1; + if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT) + gBattleAnimArgs[0] *= -1; + } + if ((gBattleAnimArgs[5] & 0xFF00) == 0) + animType = TRUE; + else + animType = FALSE; + if ((u8)gBattleAnimArgs[5] == 0) + coordType = 3; + else + coordType = 1; + InitSpritePosToAnimAttacker(sprite, animType); + 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, coordType) + gBattleAnimArgs[3]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Water droplet appears and drips down. Used by Water Gun on impact +static void AnimWaterGunDroplet(struct Sprite *sprite) +{ + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[4]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +static void AnimSmallBubblePair(struct Sprite *sprite) +{ + if (gBattleAnimArgs[3] != ANIM_ATTACKER) + InitSpritePosToAnimTarget(sprite, TRUE); + else + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[7] = gBattleAnimArgs[2]; + sprite->callback = AnimSmallBubblePair_Step; +} + +static void AnimSmallBubblePair_Step(struct Sprite *sprite) +{ + sprite->data[0] = (sprite->data[0] + 11) & 0xFF; + sprite->pos2.x = Sin(sprite->data[0], 4); + sprite->data[1] += 48; + sprite->pos2.y = -(sprite->data[1] >> 8); + if (--sprite->data[7] == -1) + DestroyAnimSprite(sprite); +} + +#ifdef NONMATCHING +void AnimTask_CreateSurfWave(u8 taskId) +{ + struct BattleAnimBgData animBg; + u8 taskId2; + + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1); + sub_80752A0(&animBg); + if (!IsContest()) + { + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimBgTilemap_SurfOpponent); + else + AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimBgTilemap_SurfPlayer); + } + else + { + // Changed from Emerald + LZDecompressVram(gBattleAnimBgTilemap_SurfContest, animBg->bgTilemap); + sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 1); + } + AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBgImage_Surf, animBg.tilesOffset); + if (gBattleAnimArgs[0] == 0) + LoadCompressedPalette(gBattleAnimBgPalette_Surf, animBg.paletteId * 16, 32); + else + LoadCompressedPalette(gBattleAnimBgPalette_MuddyWater, animBg.paletteId * 16, 32); + taskId2 = CreateTask(AnimTask_SurfWaveScanlineEffect, gTasks[taskId].priority + 1); + gTasks[taskId].data[15] = taskId2; + gTasks[taskId2].data[0] = 0; + gTasks[taskId2].data[1] = 0x1000; + gTasks[taskId2].data[2] = 0x1000; + if (IsContest()) + { + gBattle_BG1_X = -80; + gBattle_BG1_Y = -48; + gTasks[taskId].data[0] = 2; + gTasks[taskId].data[1] = 1; + gTasks[taskId2].data[3] = 0; + } + else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + { + gBattle_BG1_X = -224; + gBattle_BG1_Y = 256; + gTasks[taskId].data[0] = 2; + gTasks[taskId].data[1] = -1; + gTasks[taskId2].data[3] = 1; + } + else + { + gBattle_BG1_X = 0; + gBattle_BG1_Y = -48; + gTasks[taskId].data[0] = -2; + gTasks[taskId].data[1] = 1; + gTasks[taskId2].data[3] = 0; + } + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + if (gTasks[taskId2].data[3] == 0) + { + gTasks[taskId2].data[4] = 48; + gTasks[taskId2].data[5] = 112; + } + else + { + gTasks[taskId2].data[4] = 0; + gTasks[taskId2].data[5] = 0; + } + gTasks[taskId].data[6] = 1; + gTasks[taskId].func = AnimTask_CreateSurfWave_Step1; +} +#else +NAKED +void AnimTask_CreateSurfWave(u8 taskId) +{ + asm_unified("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\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + ldr r1, =0x00003f42\n\ + movs r0, 0x50\n\ + bl SetGpuReg\n\ + movs r1, 0x80\n\ + lsls r1, 5\n\ + movs r0, 0x52\n\ + bl SetGpuReg\n\ + movs r0, 0x1\n\ + movs r1, 0x4\n\ + movs r2, 0x1\n\ + bl SetAnimBgAttribute\n\ + movs r0, 0x1\n\ + movs r1, 0\n\ + movs r2, 0x1\n\ + bl SetAnimBgAttribute\n\ + mov r0, sp\n\ + bl sub_80752A0\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _081079E0\n\ + movs r0, 0x1\n\ + movs r1, 0x3\n\ + movs r2, 0x1\n\ + bl SetAnimBgAttribute\n\ + ldr r0, =gBattleAnimAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBattlerSide\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _081079D0\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x9]\n\ + ldr r1, =gBattleAnimBgTilemap_SurfOpponent\n\ + bl AnimLoadCompressedBgTilemap\n\ + b _081079EA\n\ + .pool\n\ +_081079D0:\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x9]\n\ + ldr r1, =gBattleAnimBgTilemap_SurfPlayer\n\ + bl AnimLoadCompressedBgTilemap\n\ + b _081079EA\n\ + .pool\n\ +_081079E0:\n\ + ldr r0, =gBattleAnimBgTilemap_SurfContest\n\ + ldr r1, [sp, 0x4]\n\ + bl LZDecompressVram\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x8]\n\ + ldr r1, [sp, 0x4]\n\ + movs r2, 0\n\ + movs r3, 0x1\n\ + bl sub_80730C0\n\ +_081079EA:\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x9]\n\ + ldr r1, =gBattleAnimBgImage_Surf\n\ + mov r2, sp\n\ + ldrh r2, [r2, 0xA]\n\ + bl AnimLoadCompressedBgGfx\n\ + ldr r0, =gBattleAnimArgs\n\ + movs r1, 0\n\ + ldrsh r0, [r0, r1]\n\ + cmp r0, 0\n\ + bne _08107A24\n\ + ldr r0, =gBattleAnimBgPalette_Surf\n\ + mov r1, sp\n\ + ldrb r1, [r1, 0x8]\n\ + lsls r1, 4\n\ + movs r2, 0x20\n\ + bl LoadCompressedPalette\n\ + b _08107A32\n\ + .pool\n\ +_08107A24:\n\ + ldr r0, =gBattleAnimBgPalette_MuddyWater\n\ + mov r1, sp\n\ + ldrb r1, [r1, 0x8]\n\ + lsls r1, 4\n\ + movs r2, 0x20\n\ + bl LoadCompressedPalette\n\ +_08107A32:\n\ + ldr r0, =AnimTask_SurfWaveScanlineEffect\n\ + ldr r4, =gTasks\n\ + mov r2, r10\n\ + lsls r5, r2, 2\n\ + adds r1, r5, r2\n\ + lsls r1, 3\n\ + adds r6, r1, r4\n\ + ldrb r1, [r6, 0x7]\n\ + adds r1, 0x1\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + bl CreateTask\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + movs r0, 0\n\ + mov r9, r0\n\ + mov r1, r8\n\ + strh r1, [r6, 0x26]\n\ + mov r2, r8\n\ + lsls r0, r2, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + adds r7, r0, r4\n\ + mov r0, r9\n\ + strh r0, [r7, 0x8]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + strh r0, [r7, 0xA]\n\ + strh r0, [r7, 0xC]\n\ + bl IsContest\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + beq _08107AB4\n\ + ldr r1, =0x0000ffb0\n\ + adds r0, r1, 0\n\ + ldr r2, =gBattle_BG1_X\n\ + strh r0, [r2]\n\ + adds r1, 0x20\n\ + adds r0, r1, 0\n\ + ldr r2, =gBattle_BG1_Y\n\ + strh r0, [r2]\n\ + movs r0, 0x2\n\ + strh r0, [r6, 0x8]\n\ + movs r0, 0x1\n\ + strh r0, [r6, 0xA]\n\ + mov r0, r9\n\ + strh r0, [r7, 0xE]\n\ + b _08107B0E\n\ + .pool\n\ +_08107AB4:\n\ + ldr r0, =gBattleAnimAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBattlerSide\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + cmp r1, 0x1\n\ + bne _08107AF8\n\ + ldr r2, =0x0000ff20\n\ + adds r0, r2, 0\n\ + ldr r2, =gBattle_BG1_X\n\ + strh r0, [r2]\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + adds r0, r2, 0\n\ + ldr r2, =gBattle_BG1_Y\n\ + strh r0, [r2]\n\ + movs r0, 0x2\n\ + strh r0, [r6, 0x8]\n\ + ldr r0, =0x0000ffff\n\ + strh r0, [r6, 0xA]\n\ + strh r1, [r7, 0xE]\n\ + b _08107B0E\n\ + .pool\n\ +_08107AF8:\n\ + ldr r0, =gBattle_BG1_X\n\ + strh r4, [r0]\n\ + ldr r1, =0x0000ffd0\n\ + adds r0, r1, 0\n\ + ldr r2, =gBattle_BG1_Y\n\ + strh r0, [r2]\n\ + ldr r0, =0x0000fffe\n\ + strh r0, [r6, 0x8]\n\ + movs r0, 0x1\n\ + strh r0, [r6, 0xA]\n\ + strh r4, [r7, 0xE]\n\ +_08107B0E:\n\ + ldr r0, =gBattle_BG1_X\n\ + ldrh r1, [r0]\n\ + movs r0, 0x14\n\ + bl SetGpuReg\n\ + ldr r2, =gBattle_BG1_Y\n\ + ldrh r1, [r2]\n\ + movs r0, 0x16\n\ + bl SetGpuReg\n\ + ldr r1, =gTasks\n\ + mov r2, r8\n\ + lsls r0, r2, 2\n\ + add r0, r8\n\ + lsls r0, 3\n\ + adds r1, r0, r1\n\ + movs r2, 0xE\n\ + ldrsh r0, [r1, r2]\n\ + cmp r0, 0\n\ + bne _08107B54\n\ + movs r0, 0x30\n\ + strh r0, [r1, 0x10]\n\ + movs r0, 0x70\n\ + b _08107B58\n\ + .pool\n\ +_08107B54:\n\ + movs r0, 0\n\ + strh r0, [r1, 0x10]\n\ +_08107B58:\n\ + strh r0, [r1, 0x12]\n\ + ldr r1, =gTasks\n\ + mov r2, r10\n\ + adds r0, r5, r2\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + movs r1, 0x1\n\ + strh r1, [r0, 0x14]\n\ + ldr r1, =AnimTask_CreateSurfWave_Step1\n\ + str r1, [r0]\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\ + .pool\n"); +} +#endif + +#ifdef NONMATCHING +static void AnimTask_CreateSurfWave_Step1(u8 taskId) +{ + struct BattleAnimBgData animBg; + u8 i; + u16 rgbBuffer; + u16 *BGptrX = &gBattle_BG1_X; + u16 *BGptrY = &gBattle_BG1_Y; + s16 unkUse; + u32 palOffset; + u16 palNum; + + *BGptrX += gTasks[taskId].data[0]; + *BGptrY += gTasks[taskId].data[1]; + sub_80752A0(&animBg); + gTasks[taskId].data[2] += gTasks[taskId].data[1]; + if (++gTasks[taskId].data[5] == 4) + { + rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7]; + for (i = 6; i != 0; i--) + { + palNum = animBg.paletteId * 16; + palOffset = 1 + i; + gPlttBufferFaded[palNum + palOffset] = gPlttBufferFaded[palNum + palOffset - 1]; + } + gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer; + gTasks[taskId].data[5] = 0; + } + if (++gTasks[taskId].data[6] > 1) + { + gTasks[taskId].data[6] = 0; + unkUse = ++gTasks[taskId].data[3]; + if (unkUse <= 13) + { + gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256); + gTasks[taskId].data[4]++; + } + if (gTasks[taskId].data[3] > 54) + { + unkUse = --gTasks[taskId].data[4]; + gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256); + } + } + if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F)) + { + gTasks[taskId].data[0] = gTasks[gTasks[taskId].data[15]].data[1] & 0x1F; + gTasks[taskId].func = AnimTask_CreateSurfWave_Step2; + } +} +#else +NAKED +static void AnimTask_CreateSurfWave_Step1(u8 taskId) +{ + asm_unified("push {r4-r7,lr}\n\ + sub sp, 0x10\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r1, =gBattle_BG1_X\n\ + ldr r2, =gBattle_BG1_Y\n\ + ldr r0, =gTasks\n\ + lsls r4, r5, 2\n\ + adds r4, r5\n\ + lsls r4, 3\n\ + adds r4, r0\n\ + ldrh r0, [r4, 0x8]\n\ + ldrh r3, [r1]\n\ + adds r0, r3\n\ + strh r0, [r1]\n\ + ldrh r0, [r4, 0xA]\n\ + ldrh r1, [r2]\n\ + adds r0, r1\n\ + strh r0, [r2]\n\ + mov r0, sp\n\ + bl sub_80752A0\n\ + ldrh r0, [r4, 0xA]\n\ + ldrh r3, [r4, 0xC]\n\ + adds r0, r3\n\ + strh r0, [r4, 0xC]\n\ + ldrh r0, [r4, 0x12]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x12]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x4\n\ + bne _08107C18\n\ + ldr r1, =gPlttBufferFaded\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 4\n\ + adds r0, 0x7\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r6, [r0]\n\ + movs r2, 0x6\n\ + adds r7, r1, 0\n\ + adds r3, r7, 0\n\ + mov r4, sp\n\ +_08107BDE:\n\ + ldrb r0, [r4, 0x8]\n\ + lsls r0, 4\n\ + adds r1, r2, 0x1\n\ + adds r0, r1\n\ + lsls r1, r0, 1\n\ + adds r1, r3\n\ + subs r0, 0x1\n\ + lsls r0, 1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ + subs r0, r2, 0x1\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r2, 0\n\ + bne _08107BDE\n\ + mov r0, sp\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 4\n\ + adds r0, 0x1\n\ + lsls r0, 1\n\ + adds r0, r7\n\ + strh r6, [r0]\n\ + ldr r1, =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + strh r2, [r0, 0x12]\n\ +_08107C18:\n\ + ldr r1, =gTasks\n\ + lsls r2, r5, 2\n\ + adds r0, r2, r5\n\ + lsls r0, 3\n\ + adds r3, r0, r1\n\ + ldrh r0, [r3, 0x14]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x14]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + adds r4, r1, 0\n\ + adds r6, r2, 0\n\ + cmp r0, 0x1\n\ + ble _08107C86\n\ + movs r0, 0\n\ + strh r0, [r3, 0x14]\n\ + ldrh r0, [r3, 0xE]\n\ + adds r2, r0, 0x1\n\ + strh r2, [r3, 0xE]\n\ + lsls r0, r2, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xD\n\ + bgt _08107C62\n\ + movs r1, 0x26\n\ + ldrsh r0, [r3, r1]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + adds r1, r4\n\ + movs r0, 0x10\n\ + subs r0, r2\n\ + lsls r0, 8\n\ + orrs r2, r0\n\ + strh r2, [r1, 0xA]\n\ + ldrh r0, [r3, 0x10]\n\ + adds r0, 0x1\n\ + strh r0, [r3, 0x10]\n\ +_08107C62:\n\ + movs r1, 0xE\n\ + ldrsh r0, [r3, r1]\n\ + cmp r0, 0x36\n\ + ble _08107C86\n\ + ldrh r2, [r3, 0x10]\n\ + subs r2, 0x1\n\ + strh r2, [r3, 0x10]\n\ + movs r1, 0x26\n\ + ldrsh r0, [r3, r1]\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + adds r1, r4\n\ + movs r0, 0x10\n\ + subs r0, r2\n\ + lsls r0, 8\n\ + orrs r2, r0\n\ + strh r2, [r1, 0xA]\n\ +_08107C86:\n\ + adds r0, r6, r5\n\ + lsls r0, 3\n\ + adds r2, r0, r4\n\ + movs r3, 0x26\n\ + ldrsh r1, [r2, r3]\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r4\n\ + ldrh r0, [r0, 0xA]\n\ + movs r3, 0x1F\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + bne _08107CA8\n\ + strh r3, [r2, 0x8]\n\ + ldr r0, =AnimTask_CreateSurfWave_Step2\n\ + str r0, [r2]\n\ +_08107CA8:\n\ + add sp, 0x10\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n"); +} +#endif + +static void AnimTask_CreateSurfWave_Step2(u8 taskId) +{ + u16 *BGptrX = &gBattle_BG1_X; + u16 *BGptrY = &gBattle_BG1_Y; + if (gTasks[taskId].data[0] == 0) + { + sub_8075358(1); + sub_8075358(2); + gTasks[taskId].data[0]++; + } + else + { + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + *BGptrX = 0; + *BGptrY = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0)); + gTasks[gTasks[taskId].data[15]].data[15] = -1; + DestroyAnimVisualTask(taskId); + } +} + +static void AnimTask_SurfWaveScanlineEffect(u8 taskId) +{ + s16 i; + struct ScanlineEffectParams params; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + for (i = 0; i < task->data[4]; i++) + gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2]; + for (i = task->data[4]; i < task->data[5]; i++) + gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1]; + for (i = task->data[5]; i < 160; i++) + gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2]; + + if (task->data[4] == 0) + gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1]; + else + gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2]; + + params.dmaDest = (vu16 *)REG_ADDR_BLDALPHA; + params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + params.initState = 1; + params.unused9 = 0; + ScanlineEffect_SetParams(params); + task->data[0]++; + break; + case 1: + if (task->data[3] == 0) + { + if (--task->data[4] <= 0) + { + task->data[4] = 0; + task->data[0]++; + } + } + else if (++task->data[5] > 111) + { + task->data[0]++; + } + + for (i = 0; i < task->data[4]; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2]; + for (i = task->data[4]; i < task->data[5]; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[1]; + for (i = task->data[5]; i < 160; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2]; + break; + case 2: + for (i = 0; i < task->data[4]; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2]; + for (i = task->data[4]; i < task->data[5]; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[1]; + for (i = task->data[5]; i < 160; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2]; + + if (task->data[15] == -1) + { + ScanlineEffect_Stop(); + DestroyTask(taskId); + } + break; + } +} + +static void AnimSmallDriftingBubbles(struct Sprite *sprite) +{ + s16 randData; + s16 randData2; + + sprite->oam.tileNum += 8; + InitSpritePosToAnimTarget(sprite, TRUE); + randData = (Random() & 0xFF) | 256; + randData2 = (Random() & 0x1FF); + if (randData2 > 255) + randData2 = 256 - randData2; + sprite->data[1] = randData; + sprite->data[2] = randData2; + sprite->callback = AnimSmallDriftingBubbles_Step; +} + +static void AnimSmallDriftingBubbles_Step(struct Sprite *sprite) +{ + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + if (sprite->data[1] & 1) + sprite->pos2.x = -(sprite->data[3] >> 8); + else + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + if (++sprite->data[0] == 21) + DestroyAnimSprite(sprite); +} + +void AnimTask_WaterSpoutLaunch(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->data[5] = gSprites[task->data[15]].pos1.y; + task->data[1] = GetWaterSpoutPowerForAnim(); + PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL); + task->func = AnimTask_WaterSpoutLaunch_Step; +} + +static void AnimTask_WaterSpoutLaunch_Step(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + sub_80765D4(task, task->data[15], 0x100, 0x100, 224, 0x200, 32); + task->data[0]++; + case 1: + if (++task->data[3] > 1) + { + task->data[3] = 0; + if (++task->data[4] & 1) + { + gSprites[task->data[15]].pos2.x = 3; + gSprites[task->data[15]].pos1.y++; + } + else + { + gSprites[task->data[15]].pos2.x = -3; + } + } + if (sub_8076640(task) == 0) + { + SetBattlerSpriteYOffsetFromYScale(task->data[15]); + gSprites[task->data[15]].pos2.x = 0; + task->data[3] = 0; + task->data[4] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[3] > 4) + { + sub_80765D4(task, task->data[15], 224, 0x200, 384, 224, 8); + task->data[3] = 0; + task->data[0]++; + } + break; + case 3: + if (sub_8076640(task) == 0) + { + task->data[3] = 0; + task->data[4] = 0; + task->data[0]++; + } + break; + case 4: + CreateWaterSpoutLaunchDroplets(task, taskId); + task->data[0]++; + case 5: + if (++task->data[3] > 1) + { + task->data[3] = 0; + if (++task->data[4] & 1) + gSprites[task->data[15]].pos2.y += 2; + else + gSprites[task->data[15]].pos2.y -= 2; + if (task->data[4] == 10) + { + sub_80765D4(task, task->data[15], 384, 224, 0x100, 0x100, 8); + task->data[3] = 0; + task->data[4] = 0; + task->data[0]++; + } + } + break; + case 6: + gSprites[task->data[15]].pos1.y--; + if (sub_8076640(task) == 0) + { + ResetSpriteRotScale(task->data[15]); + gSprites[task->data[15]].pos1.y = task->data[5]; + task->data[4] = 0; + task->data[0]++; + } + break; + case 7: + if (task->data[2] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +// Returns a value 0-3 relative to which quarter HP the attacker is in +// A higher number results in more water sprites during the Water Spout animation +static u8 GetWaterSpoutPowerForAnim(void) +{ + u8 i; + u16 hp; + u16 maxhp; + u16 partyIndex; + struct Pokemon *slot; + + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + partyIndex = gBattlerPartyIndexes[gBattleAnimAttacker]; + slot = &gPlayerParty[partyIndex]; + maxhp = GetMonData(slot, MON_DATA_MAX_HP); + hp = GetMonData(slot, MON_DATA_HP); + maxhp /= 4; + } + else + { + partyIndex = gBattlerPartyIndexes[gBattleAnimAttacker]; + slot = &gEnemyParty[partyIndex]; + maxhp = GetMonData(slot, MON_DATA_MAX_HP); + hp = GetMonData(slot, MON_DATA_HP); + maxhp /= 4; + } + for (i = 0; i < 3; i++) + { + if (hp < maxhp * (i + 1)) + return i; + } + return 3; +} + +static void CreateWaterSpoutLaunchDroplets(struct Task *task, u8 taskId) +{ + s16 i; + s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + s16 trigIndex = 172; + u8 subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; + s16 increment = 4 - task->data[1]; + u8 spriteId; + + if (increment <= 0) + increment = 1; + for (i = 0; i < 20; i += increment) + { + spriteId = CreateSprite(&gSmallWaterOrbSpriteTemplate, attackerCoordX, attackerCoordY, subpriority); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[1] = i; + gSprites[spriteId].data[2] = attackerCoordX * 16; + gSprites[spriteId].data[3] = attackerCoordY * 16; + gSprites[spriteId].data[4] = Cos(trigIndex, 64); + gSprites[spriteId].data[5] = Sin(trigIndex, 64); + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = 2; + if (task->data[2] & 1) + AnimSmallWaterOrb(&gSprites[spriteId]); + task->data[2]++; + } + trigIndex = (trigIndex + increment * 2); + trigIndex &= 0xFF; + } +} + +static void AnimSmallWaterOrb(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[4] += (sprite->data[1] % 6) * 3; + sprite->data[5] += (sprite->data[1] % 3) * 3; + sprite->data[0]++; + case 1: + sprite->data[2] += sprite->data[4]; + sprite->data[3] += sprite->data[5]; + sprite->pos1.x = sprite->data[2] >> 4; + sprite->pos1.y = sprite->data[3] >> 4; + if (sprite->pos1.x < -8 || sprite->pos1.x > 248 || sprite->pos1.y < -8 || sprite->pos1.y > 120) + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + DestroySprite(sprite); + } + break; + } +} + +void AnimTask_WaterSpoutRain(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[1] = GetWaterSpoutPowerForAnim(); + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + { + task->data[4] = 136; + task->data[6] = 40; + } + else + { + task->data[4] = 16; + task->data[6] = 80; + } + task->data[5] = 98; + task->data[7] = task->data[4] + 49; + task->data[12] = task->data[1] * 5 + 5; + task->func = AnimTask_WaterSpoutRain_Step; +} + +static void AnimTask_WaterSpoutRain_Step(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + u8 taskId2; + + switch (task->data[0]) + { + case 0: + if (++task->data[2] > 2) + { + task->data[2] = 0; + CreateWaterSpoutRainDroplet(task, taskId); + } + if (task->data[10] != 0 && task->data[13] == 0) + { + gBattleAnimArgs[0] = ANIM_TARGET; + gBattleAnimArgs[1] = 0; + gBattleAnimArgs[2] = 12; + taskId2 = CreateTask(AnimTask_HorizontalShake, 80); + if (taskId2 != 0xFF) + { + gTasks[taskId2].func(taskId2); + gAnimVisualTaskCount++; + } + gBattleAnimArgs[0] = ANIM_DEF_PARTNER; + taskId2 = CreateTask(AnimTask_HorizontalShake, 80); + if (taskId2 != 0xFF) + { + gTasks[taskId2].func(taskId2); + gAnimVisualTaskCount++; + } + task->data[13] = 1; + } + if (task->data[11] >= task->data[12]) + task->data[0]++; + break; + case 1: + if (task->data[9] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +static void CreateWaterSpoutRainDroplet(struct Task *task, u8 taskId) +{ + u16 yPosArg = ((gSineTable[task->data[8]] + 3) >> 4) + task->data[6]; + u8 spriteId = CreateSprite(&gSmallWaterOrbSpriteTemplate, task->data[7], 0, 0); + + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].callback = AnimWaterSpoutRain; + gSprites[spriteId].data[5] = yPosArg; + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = 9; + task->data[9]++; + } + task->data[11]++; + task->data[8] = (task->data[8] + 39) & 0xFF; + task->data[7] = (ISO_RANDOMIZE2(task->data[7]) % task->data[5]) + task->data[4]; +} + +static void AnimWaterSpoutRain(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + sprite->pos1.y += 8; + if (sprite->pos1.y >= sprite->data[5]) + { + gTasks[sprite->data[6]].data[10] = 1; + sprite->data[1] = CreateSprite(&gWaterHitSplatSpriteTemplate, sprite->pos1.x, sprite->pos1.y, 1); + if (sprite->data[1] != MAX_SPRITES) + { + StartSpriteAffineAnim(&gSprites[sprite->data[1]], 3); + gSprites[sprite->data[1]].data[6] = sprite->data[6]; + gSprites[sprite->data[1]].data[7] = sprite->data[7]; + gSprites[sprite->data[1]].callback = AnimWaterSpoutRainHit; + } + DestroySprite(sprite); + } + } +} + +static void AnimWaterSpoutRainHit(struct Sprite *sprite) +{ + if (++sprite->data[1] > 1) + { + sprite->data[1] = 0; + sprite->invisible ^= 1; + if (++sprite->data[2] == 12) + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } + } +} + +void AnimTask_WaterSport(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); + task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); + task->data[7] = (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) ? 1 : -1; + if (IsContest()) + task->data[7] *= -1; + task->data[5] = task->data[3] + task->data[7] * 8; + task->data[6] = task->data[4] - task->data[7] * 8; + task->data[9] = -32; + task->data[1] = 0; + task->data[0] = 0; + task->func = AnimTask_WaterSport_Step; +} + +static void AnimTask_WaterSport_Step(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + CreateWaterSportDroplet(task); + if (task->data[10] != 0) + task->data[0]++; + break; + case 1: + CreateWaterSportDroplet(task); + if (++task->data[1] > 16) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + CreateWaterSportDroplet(task); + task->data[5] += task->data[7] * 6; + if (!(task->data[5] >= -16 && task->data[5] <= 256)) + { + if (++task->data[12] > 2) + { + task->data[13] = 1; + task->data[0] = 6; + task->data[1] = 0; + } + else + { + task->data[1] = 0; + task->data[0]++; + } + } + break; + case 3: + CreateWaterSportDroplet(task); + task->data[6] -= task->data[7] * 2; + if (++task->data[1] > 7) + task->data[0]++; + break; + case 4: + CreateWaterSportDroplet(task); + task->data[5] -= task->data[7] * 6; + if (!(task->data[5] >= -16 && task->data[5] <= 256)) + { + task->data[12]++; + task->data[1] = 0; + task->data[0]++; + } + break; + case 5: + CreateWaterSportDroplet(task); + task->data[6] -= task->data[7] * 2; + if (++task->data[1] > 7) + task->data[0] = 2; + break; + case 6: + if (task->data[8] == 0) + task->data[0]++; + break; + default: + DestroyAnimVisualTask(taskId); + break; + } +} + +static void CreateWaterSportDroplet(struct Task *task) +{ + u8 spriteId; + + if (++task->data[2] > 1) + { + task->data[2] = 0; + spriteId = CreateSprite(&gSmallWaterOrbSpriteTemplate, task->data[3], task->data[4], 10); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = 16; + gSprites[spriteId].data[2] = task->data[5]; + gSprites[spriteId].data[4] = task->data[6]; + gSprites[spriteId].data[5] = task->data[9]; + InitAnimArcTranslation(&gSprites[spriteId]); + gSprites[spriteId].callback = AnimWaterSportDroplet; + task->data[8]++; + } + } +} + +static void AnimWaterSportDroplet(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->data[0] = 6; + sprite->data[2] = (Random() & 0x1F) - 16 + sprite->pos1.x; + sprite->data[4] = (Random() & 0x1F) - 16 + sprite->pos1.y; + sprite->data[5] = ~(Random() & 7); + InitAnimArcTranslation(sprite); + sprite->callback = AnimWaterSportDroplet_Step; + } +} + +static void AnimWaterSportDroplet_Step(struct Sprite *sprite) +{ + u16 i; + + if (TranslateAnimHorizontalArc(sprite)) + { + for (i = 0; i < NUM_TASKS; i++) + { + if (gTasks[i].func == AnimTask_WaterSport_Step) + { + gTasks[i].data[10] = 1; + gTasks[i].data[8]--; + DestroySprite(sprite); + } + } + } +} + +static void AnimWaterPulseBubble(struct Sprite *sprite) +{ + sprite->pos1.x = gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->callback = AnimWaterPulseBubble_Step; +} + +static void AnimWaterPulseBubble_Step(struct Sprite *sprite) +{ + sprite->data[4] -= sprite->data[0]; + sprite->pos2.y = sprite->data[4] / 10; + sprite->data[5] = (sprite->data[5] + sprite->data[1]) & 0xFF; + sprite->pos2.x = Sin(sprite->data[5], sprite->data[2]); + if (--sprite->data[3] == 0) + DestroyAnimSprite(sprite); +} + +static void AnimWaterPulseRingBubble(struct Sprite *sprite) +{ + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 7; + sprite->pos2.y = sprite->data[4] >> 7; + if (--sprite->data[0] == 0) + { + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } +} + +void AnimWaterPulseRing(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); + sprite->data[3] = gBattleAnimArgs[2]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->callback = AnimWaterPulseRing_Step; +} + +static void AnimWaterPulseRing_Step(struct Sprite *sprite) +{ + int xDiff = sprite->data[1] - sprite->pos1.x; + int yDiff = sprite->data[2] - sprite->pos1.y; + + sprite->pos2.x = (sprite->data[0] * xDiff) / sprite->data[3]; + sprite->pos2.y = (sprite->data[0] * yDiff) / sprite->data[3]; + if (++sprite->data[5] == sprite->data[4]) + { + sprite->data[5] = 0; + CreateWaterPulseRingBubbles(sprite, xDiff, yDiff); + } + if (sprite->data[3] == sprite->data[0]) + DestroyAnimSprite(sprite); + sprite->data[0]++; +} + +#ifdef NONMATCHING +static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff) +{ + s16 something = sprite->data[0] / 2; + s16 combinedX = sprite->pos1.x + sprite->pos2.x; + s16 combinedY = sprite->pos1.y + sprite->pos2.y; + s16 randomSomethingY = yDiff + (Random() % 10) - 5; + s16 randomSomethingX = -xDiff + (Random() % 10) - 5; + s16 i; + u8 spriteId; + + for (i = 0; i <= 0; i++) + { + spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY + something, 130); + gSprites[spriteId].data[0] = 20; + gSprites[spriteId].data[1] = randomSomethingY; + gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; + if (randomSomethingX < 0) + gSprites[spriteId].data[2] = -randomSomethingX; + else + gSprites[spriteId].data[2] = randomSomethingX; + } + for (i = 0; i <= 0; i++) + { + spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY - something, 130); + gSprites[spriteId].data[0] = 20; + gSprites[spriteId].data[1] = randomSomethingY; + gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1; + if (randomSomethingX > 0) + gSprites[spriteId].data[2] = -randomSomethingX; + else + gSprites[spriteId].data[2] = randomSomethingX; + } +} +#else +NAKED +static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff) +{ + asm_unified("push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x18\n\ + adds r4, r1, 0\n\ + adds r5, r2, 0\n\ + movs r2, 0x2E\n\ + ldrsh r1, [r0, r2]\n\ + lsrs r2, r1, 31\n\ + adds r1, r2\n\ + lsls r1, 15\n\ + lsrs r1, 16\n\ + str r1, [sp]\n\ + ldrh r1, [r0, 0x24]\n\ + ldrh r3, [r0, 0x20]\n\ + adds r1, r3\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r8, r1\n\ + ldrh r1, [r0, 0x26]\n\ + ldrh r0, [r0, 0x22]\n\ + adds r1, r0\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r10, r1\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + adds r0, r5, r0\n\ + subs r0, 0x5\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r9, r0\n\ + bl Random\n\ + negs r4, r4\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + adds r4, r0\n\ + subs r4, 0x5\n\ + lsls r4, 16\n\ + lsrs r7, r4, 16\n\ + movs r6, 0\n\ + mov r0, r8\n\ + lsls r0, 16\n\ + mov r8, r0\n\ + mov r1, r10\n\ + lsls r1, 16\n\ + str r1, [sp, 0xC]\n\ + ldr r2, [sp]\n\ + lsls r2, 16\n\ + str r2, [sp, 0x10]\n\ + asrs r1, 16\n\ + lsls r0, r7, 16\n\ + asrs r5, r0, 16\n\ + str r0, [sp, 0x14]\n\ + negs r3, r5\n\ + str r3, [sp, 0x4]\n\ + asrs r0, r2, 16\n\ + adds r1, r0\n\ + lsls r1, 16\n\ + mov r10, r1\n\ +_08108DE2:\n\ + ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\ + mov r2, r8\n\ + asrs r1, r2, 16\n\ + mov r3, r10\n\ + asrs r2, r3, 16\n\ + movs r3, 0x82\n\ + bl CreateSprite\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldr r1, =gSprites\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r4, r0, r1\n\ + movs r0, 0x14\n\ + strh r0, [r4, 0x2E]\n\ + mov r0, r9\n\ + strh r0, [r4, 0x30]\n\ + ldr r0, =gBattleAnimAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBattlerSpriteSubpriority\n\ + subs r0, 0x1\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + strb r0, [r1]\n\ + cmp r5, 0\n\ + bge _08108E30\n\ + mov r1, sp\n\ + ldrh r1, [r1, 0x4]\n\ + strh r1, [r4, 0x32]\n\ + b _08108E32\n\ + .pool\n\ +_08108E30:\n\ + strh r7, [r4, 0x32]\n\ +_08108E32:\n\ + lsls r0, r6, 16\n\ + movs r2, 0x80\n\ + lsls r2, 9\n\ + adds r0, r2\n\ + lsrs r6, r0, 16\n\ + cmp r0, 0\n\ + ble _08108DE2\n\ + movs r6, 0\n\ + ldr r3, [sp, 0xC]\n\ + asrs r1, r3, 16\n\ + ldr r0, [sp, 0x14]\n\ + asrs r5, r0, 16\n\ + negs r2, r5\n\ + str r2, [sp, 0x8]\n\ + ldr r3, [sp, 0x10]\n\ + asrs r0, r3, 16\n\ + subs r1, r0\n\ + lsls r1, 16\n\ + mov r10, r1\n\ +_08108E58:\n\ + ldr r0, =gWaterPulseRingBubbleSpriteTemplate\n\ + mov r2, r8\n\ + asrs r1, r2, 16\n\ + mov r3, r10\n\ + asrs r2, r3, 16\n\ + movs r3, 0x82\n\ + bl CreateSprite\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + ldr r1, =gSprites\n\ + lsls r0, r2, 4\n\ + adds r0, r2\n\ + lsls r0, 2\n\ + adds r4, r0, r1\n\ + movs r0, 0x14\n\ + strh r0, [r4, 0x2E]\n\ + mov r0, r9\n\ + strh r0, [r4, 0x30]\n\ + ldr r0, =gBattleAnimAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBattlerSpriteSubpriority\n\ + subs r0, 0x1\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + strb r0, [r1]\n\ + cmp r5, 0\n\ + ble _08108EA8\n\ + mov r1, sp\n\ + ldrh r1, [r1, 0x8]\n\ + strh r1, [r4, 0x32]\n\ + b _08108EAA\n\ + .pool\n\ +_08108EA8:\n\ + strh r7, [r4, 0x32]\n\ +_08108EAA:\n\ + lsls r0, r6, 16\n\ + movs r2, 0x80\n\ + lsls r2, 9\n\ + adds r0, r2\n\ + lsrs r6, r0, 16\n\ + cmp r0, 0\n\ + ble _08108E58\n\ + add sp, 0x18\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"); +} +#endif
\ No newline at end of file |