diff options
author | Garak <thomastaps194@comcast.net> | 2018-06-27 10:11:44 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-27 10:11:44 -0400 |
commit | 65fd5f89e17ae08bde8e0b70ac41484f5330c282 (patch) | |
tree | 8a3b5ff05d71bf1c0b7943c345dc42fd72e59597 | |
parent | 1cada74444df875649b239ed488c6ee4deb8a7f1 (diff) | |
parent | 2f8d67642649374667f902736d8920cb38a03daa (diff) |
Merge pull request #5 from pret/master
source repo sync
-rw-r--r-- | asm/battle_anim_812C144.s | 1288 | ||||
-rw-r--r-- | include/ewram.h | 1 | ||||
-rw-r--r-- | include/rom_8077ABC.h | 4 | ||||
-rw-r--r-- | src/battle/battle_anim_812C144.c | 721 |
4 files changed, 726 insertions, 1288 deletions
diff --git a/asm/battle_anim_812C144.s b/asm/battle_anim_812C144.s index ec7a7211f..a72117c08 100644 --- a/asm/battle_anim_812C144.s +++ b/asm/battle_anim_812C144.s @@ -5,1294 +5,6 @@ .text - thumb_func_start sub_812EA4C -sub_812EA4C: @ 812EA4C - push {r4-r6,lr} - adds r5, r0, 0 - movs r1, 0x2E - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0812EAAC - ldr r6, _0812EAA4 @ =gBattleAnimArgs - movs r2, 0x4 - ldrsh r0, [r6, r2] - cmp r0, 0 - bne _0812EA80 - ldr r4, _0812EAA8 @ =gAnimBankAttacker - ldrb r0, [r4] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x20] - ldrb r0, [r4] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x22] -_0812EA80: - ldrh r0, [r6] - ldrh r1, [r5, 0x20] - adds r0, r1 - strh r0, [r5, 0x20] - ldrh r1, [r6, 0x2] - ldrh r2, [r5, 0x22] - adds r0, r1, r2 - strh r0, [r5, 0x22] - movs r0, 0x80 - strh r0, [r5, 0x30] - movs r0, 0xC0 - lsls r0, 2 - strh r0, [r5, 0x32] - strh r1, [r5, 0x34] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - b _0812EB0A - .align 2, 0 -_0812EAA4: .4byte gBattleAnimArgs -_0812EAA8: .4byte gAnimBankAttacker -_0812EAAC: - ldrh r1, [r5, 0x30] - lsls r0, r1, 16 - asrs r0, 24 - strh r0, [r5, 0x24] - ldrh r0, [r5, 0x32] - lsls r0, 16 - asrs r0, 24 - ldrh r2, [r5, 0x26] - adds r0, r2 - strh r0, [r5, 0x26] - movs r2, 0x36 - ldrsh r0, [r5, r2] - adds r4, r1, 0 - cmp r0, 0 - bne _0812EAEA - movs r0, 0x26 - ldrsh r1, [r5, r0] - movs r2, 0x34 - ldrsh r0, [r5, r2] - cmn r1, r0 - ble _0812EAEA - movs r0, 0x1 - strh r0, [r5, 0x36] - movs r1, 0x32 - ldrsh r0, [r5, r1] - negs r0, r0 - movs r1, 0x3 - bl __divsi3 - lsls r0, 1 - strh r0, [r5, 0x32] -_0812EAEA: - adds r0, r4, 0 - adds r0, 0xC0 - strh r0, [r5, 0x30] - ldrh r0, [r5, 0x32] - adds r0, 0x80 - strh r0, [r5, 0x32] - adds r0, r5, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0812EB0A - adds r0, r5, 0 - bl DestroyAnimSprite -_0812EB0A: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_812EA4C - - thumb_func_start sub_812EB10 -sub_812EB10: @ 812EB10 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - adds r7, r0, 0 - ldr r1, _0812EB40 @ =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r2, r0, r1 - movs r1, 0x8 - ldrsh r0, [r2, r1] - cmp r0, 0 - bne _0812EC1C - ldr r0, _0812EB44 @ =gBattleAnimArgs - movs r3, 0 - ldrsh r1, [r0, r3] - mov r8, r0 - cmp r1, 0 - bne _0812EB4C - ldr r0, _0812EB48 @ =gAnimBankAttacker - b _0812EB4E - .align 2, 0 -_0812EB40: .4byte gTasks -_0812EB44: .4byte gBattleAnimArgs -_0812EB48: .4byte gAnimBankAttacker -_0812EB4C: - ldr r0, _0812EB88 @ =gAnimBankTarget -_0812EB4E: - ldrb r0, [r0] - strh r0, [r2, 0x1E] - mov r1, r8 - ldrb r0, [r1] - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0812EB8C @ =gTasks - lsls r4, r7, 2 - adds r0, r4, r7 - lsls r0, 3 - adds r6, r0, r1 - strh r5, [r6, 0x1C] - adds r0, r5, 0 - movs r1, 0 - bl sub_8078E70 - mov r2, r8 - movs r3, 0x2 - ldrsh r0, [r2, r3] - cmp r0, 0x1 - beq _0812EBB0 - cmp r0, 0x1 - bgt _0812EB90 - cmp r0, 0 - beq _0812EB98 - lsls r2, r5, 4 - b _0812EBF8 - .align 2, 0 -_0812EB88: .4byte gAnimBankTarget -_0812EB8C: .4byte gTasks -_0812EB90: - cmp r0, 0x2 - beq _0812EBBA - lsls r2, r5, 4 - b _0812EBF8 -_0812EB98: - movs r2, 0xA0 - lsls r2, 1 - adds r0, r5, 0 - movs r1, 0xE0 - movs r3, 0 - bl obj_id_set_rotscale - adds r0, r5, 0 - bl sub_8079A64 - lsls r2, r5, 4 - b _0812EBF8 -_0812EBB0: - movs r2, 0x98 - lsls r2, 1 - movs r3, 0xF0 - lsls r3, 4 - b _0812EBC2 -_0812EBBA: - movs r2, 0x98 - lsls r2, 1 - movs r3, 0xF1 - lsls r3, 8 -_0812EBC2: - adds r0, r5, 0 - movs r1, 0xD0 - bl obj_id_set_rotscale - adds r0, r5, 0 - bl sub_8079A64 - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _0812EBE8 - ldrb r0, [r6, 0x1E] - bl GetBattlerSide - lsls r0, 24 - lsls r2, r5, 4 - cmp r0, 0 - bne _0812EBF8 -_0812EBE8: - ldr r0, _0812EC14 @ =gSprites - lsls r2, r5, 4 - adds r1, r2, r5 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x26] - adds r0, 0x10 - strh r0, [r1, 0x26] -_0812EBF8: - ldr r1, _0812EC14 @ =gSprites - adds r0, r2, r5 - lsls r0, 2 - adds r0, r1 - movs r1, 0x2 - strh r1, [r0, 0x24] - ldr r0, _0812EC18 @ =gTasks - adds r1, r4, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - b _0812EC68 - .align 2, 0 -_0812EC14: .4byte gSprites -_0812EC18: .4byte gTasks -_0812EC1C: - ldrb r5, [r2, 0x1C] - ldrh r0, [r2, 0xC] - adds r0, 0x1 - movs r4, 0 - strh r0, [r2, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - bne _0812EC40 - strh r4, [r2, 0xC] - ldr r0, _0812EC74 @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r1, r0 - ldrh r0, [r1, 0x24] - negs r0, r0 - strh r0, [r1, 0x24] -_0812EC40: - ldrh r0, [r2, 0xA] - adds r0, 0x1 - strh r0, [r2, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - bne _0812EC68 - adds r0, r5, 0 - bl sub_8078F40 - ldr r1, _0812EC74 @ =gSprites - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - strh r4, [r0, 0x24] - strh r4, [r0, 0x26] - adds r0, r7, 0 - bl DestroyAnimVisualTask -_0812EC68: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812EC74: .4byte gSprites - thumb_func_end sub_812EB10 - - thumb_func_start sub_812EC78 -sub_812EC78: @ 812EC78 - push {r4,r5,lr} - adds r4, r0, 0 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xC - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - ldrh r2, [r4, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - adds r1, r0 - ldr r3, _0812ECC4 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _0812ECC8 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r4, 0x4] - bl Random - ldr r5, _0812ECCC @ =0x000001ff - ands r5, r0 - bl Random - movs r1, 0xFF - ands r1, r0 - movs r0, 0x1 - ands r0, r5 - cmp r0, 0 - beq _0812ECD0 - movs r2, 0xBC - lsls r2, 3 - adds r0, r5, r2 - b _0812ECD8 - .align 2, 0 -_0812ECC4: .4byte 0x000003ff -_0812ECC8: .4byte 0xfffffc00 -_0812ECCC: .4byte 0x000001ff -_0812ECD0: - movs r3, 0xBC - lsls r3, 3 - adds r0, r3, 0 - subs r0, r5 -_0812ECD8: - strh r0, [r4, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0812ECEA - movs r2, 0x90 - lsls r2, 3 - adds r0, r1, r2 - b _0812ECF2 -_0812ECEA: - movs r3, 0x90 - lsls r3, 3 - adds r0, r3, 0 - subs r0, r1 -_0812ECF2: - strh r0, [r4, 0x30] - ldr r0, _0812ED04 @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r4, 0x32] - lsls r0, 16 - cmp r0, 0 - bne _0812ED0C - ldr r0, _0812ED08 @ =0x0000fff8 - b _0812ED0E - .align 2, 0 -_0812ED04: .4byte gBattleAnimArgs -_0812ED08: .4byte 0x0000fff8 -_0812ED0C: - movs r0, 0xF8 -_0812ED0E: - strh r0, [r4, 0x20] - movs r0, 0x68 - strh r0, [r4, 0x22] - ldr r0, _0812ED20 @ =sub_812ED24 - str r0, [r4, 0x1C] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812ED20: .4byte sub_812ED24 - thumb_func_end sub_812EC78 - - thumb_func_start sub_812ED24 -sub_812ED24: @ 812ED24 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0812ED3C - ldrh r3, [r4, 0x2E] - lsls r0, r3, 16 - asrs r0, 24 - ldrh r1, [r4, 0x24] - adds r0, r1 - b _0812ED46 -_0812ED3C: - ldrh r3, [r4, 0x2E] - lsls r1, r3, 16 - asrs r1, 24 - ldrh r0, [r4, 0x24] - subs r0, r1 -_0812ED46: - strh r0, [r4, 0x24] - ldrh r2, [r4, 0x30] - lsls r1, r2, 16 - asrs r1, 24 - ldrh r0, [r4, 0x26] - subs r0, r1 - strh r0, [r4, 0x26] - adds r0, r3, 0 - subs r0, 0x16 - strh r0, [r4, 0x2E] - adds r1, r2, 0 - subs r1, 0x30 - strh r1, [r4, 0x30] - lsls r0, 16 - cmp r0, 0 - bge _0812ED6A - movs r0, 0 - strh r0, [r4, 0x2E] -_0812ED6A: - ldrh r0, [r4, 0x34] - adds r0, 0x1 - strh r0, [r4, 0x34] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1F - bne _0812ED7E - adds r0, r4, 0 - bl DestroyAnimSprite -_0812ED7E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_812ED24 - - thumb_func_start sub_812ED84 -sub_812ED84: @ 812ED84 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _0812EDE4 @ =REG_WINOUT - ldr r2, _0812EDE8 @ =0x00001f3f - adds r0, r2, 0 - strh r0, [r1] - movs r2, 0x80 - lsls r2, 19 - ldrh r0, [r2] - movs r3, 0x80 - lsls r3, 8 - adds r1, r3, 0 - orrs r0, r1 - strh r0, [r2] - ldr r0, _0812EDEC @ =gBattle_WIN0H - movs r1, 0 - strh r1, [r0] - ldr r0, _0812EDF0 @ =gBattle_WIN0V - strh r1, [r0] - ldr r0, _0812EDF4 @ =REG_WIN0H - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - ldr r0, _0812EDF8 @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - strh r0, [r4, 0x2E] - adds r0, r4, 0 - movs r1, 0 - bl sub_8078764 - ldrb r1, [r4, 0x1] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x8 - orrs r0, r1 - strb r0, [r4, 0x1] - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0812EDFC @ =sub_812EE00 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812EDE4: .4byte REG_WINOUT -_0812EDE8: .4byte 0x00001f3f -_0812EDEC: .4byte gBattle_WIN0H -_0812EDF0: .4byte gBattle_WIN0V -_0812EDF4: .4byte REG_WIN0H -_0812EDF8: .4byte gBattleAnimArgs -_0812EDFC: .4byte sub_812EE00 - thumb_func_end sub_812ED84 - - thumb_func_start sub_812EE00 -sub_812EE00: @ 812EE00 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0812EE3E - cmp r0, 0x1 - bgt _0812EE16 - cmp r0, 0 - beq _0812EE20 - b _0812EE94 -_0812EE16: - cmp r0, 0x2 - beq _0812EE54 - cmp r0, 0x3 - beq _0812EE76 - b _0812EE94 -_0812EE20: - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0812EE94 - b _0812EE6E -_0812EE3E: - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - cmp r0, 0 - bne _0812EE94 - adds r0, r4, 0 - movs r1, 0x1 - bl ChangeSpriteAffineAnim - b _0812EE6E -_0812EE54: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0812EE94 - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] -_0812EE6E: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - b _0812EE94 -_0812EE76: - ldr r1, _0812EE9C @ =REG_WINOUT - ldr r2, _0812EEA0 @ =0x00003f3f - adds r0, r2, 0 - strh r0, [r1] - movs r2, 0x80 - lsls r2, 19 - ldrh r0, [r2] - movs r3, 0x80 - lsls r3, 8 - adds r1, r3, 0 - eors r0, r1 - strh r0, [r2] - adds r0, r4, 0 - bl DestroyAnimSprite -_0812EE94: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812EE9C: .4byte REG_WINOUT -_0812EEA0: .4byte 0x00003f3f - thumb_func_end sub_812EE00 - - thumb_func_start sub_812EEA4 -sub_812EEA4: @ 812EEA4 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _0812EEE0 @ =gAnimBankAttacker - ldrb r0, [r5] - movs r1, 0x2 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBattlerSpriteCoord - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - ldr r1, _0812EEE4 @ =gBattleAnimArgs - ldrh r0, [r1] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x2] - strh r0, [r4, 0x30] - ldr r1, _0812EEE8 @ =sub_812EEEC - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812EEE0: .4byte gAnimBankAttacker -_0812EEE4: .4byte gBattleAnimArgs -_0812EEE8: .4byte sub_812EEEC - thumb_func_end sub_812EEA4 - - thumb_func_start sub_812EEEC -sub_812EEEC: @ 812EEEC - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x30 - ldrsh r0, [r4, r1] - ldrh r1, [r4, 0x32] - lsls r1, 16 - asrs r1, 24 - bl Sin - strh r0, [r4, 0x24] - movs r2, 0x30 - ldrsh r0, [r4, r2] - ldrh r1, [r4, 0x34] - lsls r1, 16 - asrs r1, 24 - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x30] - adds r0, 0x9 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x30] - lsls r1, r0, 16 - cmp r0, 0x3F - bls _0812EF26 - asrs r0, r1, 16 - cmp r0, 0xC3 - ble _0812EF38 -_0812EF26: - ldr r0, _0812EF34 @ =gAnimBankAttacker - ldrb r0, [r0] - bl sub_8079E90 - subs r0, 0x1 - b _0812EF42 - .align 2, 0 -_0812EF34: .4byte gAnimBankAttacker -_0812EF38: - ldr r0, _0812EF84 @ =gAnimBankAttacker - ldrb r0, [r0] - bl sub_8079E90 - adds r0, 0x1 -_0812EF42: - adds r1, r4, 0 - adds r1, 0x43 - strb r0, [r1] - movs r3, 0x38 - ldrsh r2, [r4, r3] - cmp r2, 0 - bne _0812EF88 - movs r1, 0x80 - lsls r1, 3 - adds r0, r1, 0 - ldrh r3, [r4, 0x32] - adds r0, r3 - strh r0, [r4, 0x32] - movs r1, 0x80 - lsls r1, 1 - adds r0, r1, 0 - ldrh r3, [r4, 0x34] - adds r0, r3 - strh r0, [r4, 0x34] - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x2E - ldrsh r1, [r4, r3] - cmp r0, r1 - bne _0812EFB8 - strh r2, [r4, 0x36] - movs r0, 0x1 - strh r0, [r4, 0x38] - b _0812EFB8 - .align 2, 0 -_0812EF84: .4byte gAnimBankAttacker -_0812EF88: - cmp r2, 0x1 - bne _0812EFB8 - ldr r1, _0812EFC0 @ =0xfffffc00 - adds r0, r1, 0 - ldrh r2, [r4, 0x32] - adds r0, r2 - strh r0, [r4, 0x32] - ldr r3, _0812EFC4 @ =0xffffff00 - adds r0, r3, 0 - ldrh r1, [r4, 0x34] - adds r0, r1 - strh r0, [r4, 0x34] - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - movs r2, 0x2E - ldrsh r1, [r4, r2] - cmp r0, r1 - bne _0812EFB8 - adds r0, r4, 0 - bl DestroyAnimSprite -_0812EFB8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812EFC0: .4byte 0xfffffc00 -_0812EFC4: .4byte 0xffffff00 - thumb_func_end sub_812EEEC - - thumb_func_start sub_812EFC8 -sub_812EFC8: @ 812EFC8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x10] - movs r0, 0 - bl GetAnimBattlerSpriteId - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _0812F004 - movs r0, 0x1 - str r0, [sp, 0x14] - ldr r0, _0812F000 @ =gSharedMem + 0x19348 - ldr r1, [r0, 0x10] - mov r9, r1 - ldr r2, [r0, 0xC] - mov r8, r2 - ldrh r6, [r0, 0x2] - movs r3, 0x14 - b _0812F13C - .align 2, 0 -_0812F000: .4byte gSharedMem + 0x19348 -_0812F004: - ldr r0, _0812F070 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _0812F0AC - movs r0, 0 - str r0, [sp, 0x14] - ldr r6, _0812F074 @ =gBattlerPartyIndexes - ldr r4, _0812F078 @ =gAnimBankTarget - ldrb r0, [r4] - lsls r0, 1 - adds r0, r6 - ldrh r0, [r0] - movs r5, 0x64 - muls r0, r5 - ldr r7, _0812F07C @ =gPlayerParty - adds r0, r7 - movs r1, 0 - bl GetMonData - mov r9, r0 - ldrb r0, [r4] - lsls r0, 1 - adds r0, r6 - ldrh r0, [r0] - muls r0, r5 - adds r0, r7 - movs r1, 0x1 - bl GetMonData - mov r8, r0 - ldrb r2, [r4] - lsls r1, r2, 2 - ldr r0, _0812F080 @ =gSharedMem + 0x17800 - adds r1, r0 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _0812F0A4 - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0812F084 - ldrb r0, [r4] - lsls r0, 1 - adds r0, r6 - ldrh r0, [r0] - muls r0, r5 - adds r0, r7 - b _0812F092 - .align 2, 0 -_0812F070: .4byte gAnimBankAttacker -_0812F074: .4byte gBattlerPartyIndexes -_0812F078: .4byte gAnimBankTarget -_0812F07C: .4byte gPlayerParty -_0812F080: .4byte gSharedMem + 0x17800 -_0812F084: - ldrb r0, [r4] - lsls r0, 1 - adds r0, r6 - ldrh r0, [r0] - muls r0, r5 - ldr r1, _0812F0A0 @ =gEnemyParty - adds r0, r1 -_0812F092: - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - b _0812F0A6 - .align 2, 0 -_0812F0A0: .4byte gEnemyParty -_0812F0A4: - ldrh r6, [r1, 0x2] -_0812F0A6: - movs r1, 0x14 - mov r10, r1 - b _0812F13E -_0812F0AC: - movs r2, 0x1 - str r2, [sp, 0x14] - ldr r6, _0812F10C @ =gBattlerPartyIndexes - ldr r4, _0812F110 @ =gAnimBankTarget - ldrb r0, [r4] - lsls r0, 1 - adds r0, r6 - ldrh r0, [r0] - movs r5, 0x64 - muls r0, r5 - ldr r7, _0812F114 @ =gEnemyParty - adds r0, r7 - movs r1, 0 - bl GetMonData - mov r9, r0 - ldrb r0, [r4] - lsls r0, 1 - adds r0, r6 - ldrh r0, [r0] - muls r0, r5 - adds r0, r7 - movs r1, 0x1 - bl GetMonData - mov r8, r0 - ldrb r2, [r4] - lsls r1, r2, 2 - ldr r0, _0812F118 @ =gSharedMem + 0x17800 - adds r1, r0 - ldrh r0, [r1, 0x2] - cmp r0, 0 - bne _0812F138 - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - bne _0812F120 - ldrb r0, [r4] - lsls r0, 1 - adds r0, r6 - ldrh r0, [r0] - muls r0, r5 - ldr r1, _0812F11C @ =gPlayerParty - adds r0, r1 - b _0812F12C - .align 2, 0 -_0812F10C: .4byte gBattlerPartyIndexes -_0812F110: .4byte gAnimBankTarget -_0812F114: .4byte gEnemyParty -_0812F118: .4byte gSharedMem + 0x17800 -_0812F11C: .4byte gPlayerParty -_0812F120: - ldrb r0, [r4] - lsls r0, 1 - adds r0, r6 - ldrh r0, [r0] - muls r0, r5 - adds r0, r7 -_0812F12C: - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - b _0812F13A -_0812F138: - ldrh r6, [r1, 0x2] -_0812F13A: - ldr r3, _0812F218 @ =0x0000ffec -_0812F13C: - mov r10, r3 -_0812F13E: - ldr r0, _0812F21C @ =gAnimBankAttacker - ldrb r0, [r0] - bl sub_8079ED4 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r5, _0812F21C @ =gAnimBankAttacker - ldrb r0, [r5] - movs r1, 0 - bl GetBattlerSpriteCoord - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldrb r0, [r5] - movs r1, 0x1 - bl GetBattlerSpriteCoord - lsls r0, 24 - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - adds r4, r1 - lsls r4, 16 - asrs r4, 16 - lsrs r0, 24 - str r0, [sp] - movs r0, 0x5 - str r0, [sp, 0x4] - mov r3, r9 - str r3, [sp, 0x8] - mov r0, r8 - str r0, [sp, 0xC] - adds r0, r6, 0 - ldr r1, [sp, 0x14] - movs r2, 0 - adds r3, r4, 0 - bl sub_8079F44 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - ldr r0, _0812F220 @ =gSprites - lsls r5, r6, 4 - adds r5, r6 - lsls r5, 2 - adds r5, r0 - movs r0, 0x3 - ands r7, r0 - lsls r7, 2 - mov r8, r7 - ldrb r0, [r5, 0x5] - movs r4, 0xD - negs r4, r4 - adds r1, r4, 0 - ands r1, r0 - mov r2, r8 - orrs r1, r2 - strb r1, [r5, 0x5] - ldrb r2, [r5, 0x1] - adds r0, r4, 0 - ands r0, r2 - movs r2, 0x4 - orrs r0, r2 - strb r0, [r5, 0x1] - ldr r0, _0812F224 @ =0x00007fff - lsrs r1, 4 - lsls r1, 4 - movs r3, 0x80 - lsls r3, 1 - adds r2, r3, 0 - orrs r1, r2 - movs r2, 0x20 - bl FillPalette - ldrb r0, [r5, 0x5] - ands r4, r0 - mov r0, r8 - orrs r4, r0 - strb r4, [r5, 0x5] - ldr r1, _0812F228 @ =REG_BLDCNT - movs r2, 0xFD - lsls r2, 6 - adds r0, r2, 0 - strh r0, [r1] - ldr r3, _0812F22C @ =REG_BLDALPHA - ldr r0, _0812F230 @ =gTasks - ldr r2, [sp, 0x10] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldrh r2, [r1, 0xA] - movs r0, 0x10 - subs r0, r2 - lsls r0, 8 - orrs r0, r2 - strh r0, [r3] - strh r6, [r1, 0x8] - ldr r0, _0812F234 @ =sub_812F238 - str r0, [r1] - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812F218: .4byte 0x0000ffec -_0812F21C: .4byte gAnimBankAttacker -_0812F220: .4byte gSprites -_0812F224: .4byte 0x00007fff -_0812F228: .4byte REG_BLDCNT -_0812F22C: .4byte REG_BLDALPHA -_0812F230: .4byte gTasks -_0812F234: .4byte sub_812F238 - thumb_func_end sub_812EFC8 - - thumb_func_start sub_812F238 -sub_812F238: @ 812F238 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0812F284 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r3, r1, r2 - ldrh r0, [r3, 0x1C] - adds r1, r0, 0x1 - strh r1, [r3, 0x1C] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _0812F280 - movs r0, 0 - strh r0, [r3, 0x1C] - ldrh r1, [r3, 0xA] - adds r1, 0x1 - strh r1, [r3, 0xA] - ldr r2, _0812F288 @ =REG_BLDALPHA - movs r0, 0x10 - subs r0, r1 - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - movs r1, 0xA - ldrsh r0, [r3, r1] - cmp r0, 0xA - bne _0812F280 - movs r0, 0x80 - lsls r0, 1 - strh r0, [r3, 0x1C] - strh r0, [r3, 0x1E] - ldr r0, _0812F28C @ =sub_812F290 - str r0, [r3] -_0812F280: - pop {r0} - bx r0 - .align 2, 0 -_0812F284: .4byte gTasks -_0812F288: .4byte REG_BLDALPHA -_0812F28C: .4byte sub_812F290 - thumb_func_end sub_812F238 - - thumb_func_start sub_812F290 -sub_812F290: @ 812F290 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0812F308 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r5, r1, r2 - ldrb r2, [r5, 0x8] - ldrh r0, [r5, 0x1C] - subs r0, 0x10 - movs r4, 0 - strh r0, [r5, 0x1C] - ldrh r0, [r5, 0x1E] - adds r0, 0x80 - strh r0, [r5, 0x1E] - ldr r1, _0812F30C @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r6, r0, r1 - ldrb r2, [r6, 0x1] - lsls r1, r2, 30 - lsrs r1, 30 - movs r0, 0x2 - orrs r1, r0 - subs r0, 0x6 - ands r0, r2 - orrs r0, r1 - strb r0, [r6, 0x1] - movs r0, 0x1C - ldrsh r2, [r5, r0] - movs r0, 0x1E - ldrsh r3, [r5, r0] - str r4, [sp] - adds r0, r6, 0 - movs r1, 0x1 - bl sub_8078FDC - ldrh r0, [r5, 0x20] - adds r0, 0x1 - strh r0, [r5, 0x20] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - bne _0812F2FE - adds r0, r6, 0 - bl sub_8079098 - adds r0, r6, 0 - bl sub_807A0F4 - ldr r0, _0812F310 @ =sub_8078634 - str r0, [r5] -_0812F2FE: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812F308: .4byte gTasks -_0812F30C: .4byte gSprites -_0812F310: .4byte sub_8078634 - thumb_func_end sub_812F290 - - thumb_func_start sub_812F314 -sub_812F314: @ 812F314 - push {r4-r7,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0812F334 @ =gTasks - adds r4, r1, r0 - ldr r0, _0812F338 @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _0812F340 - ldr r0, _0812F33C @ =gAnimBankAttacker - b _0812F342 - .align 2, 0 -_0812F334: .4byte gTasks -_0812F338: .4byte gBattleAnimArgs -_0812F33C: .4byte gAnimBankAttacker -_0812F340: - ldr r0, _0812F3C0 @ =gAnimBankTarget -_0812F342: - ldrb r5, [r0] - movs r6, 0 - strh r6, [r4, 0x8] - strh r6, [r4, 0xA] - strh r6, [r4, 0xC] - movs r0, 0x10 - strh r0, [r4, 0xE] - strh r6, [r4, 0x10] - strh r5, [r4, 0x12] - movs r0, 0x20 - strh r0, [r4, 0x14] - strh r6, [r4, 0x16] - movs r0, 0x18 - strh r0, [r4, 0x18] - adds r0, r5, 0 - bl GetBattlerSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0812F374 - movs r2, 0x18 - ldrsh r0, [r4, r2] - negs r0, r0 - strh r0, [r4, 0x18] -_0812F374: - adds r0, r5, 0 - bl sub_8077FC0 - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x22 - strh r0, [r4, 0x22] - cmp r0, 0 - bge _0812F388 - strh r6, [r4, 0x22] -_0812F388: - ldrh r0, [r4, 0x22] - adds r0, 0x42 - strh r0, [r4, 0x24] - ldr r0, _0812F3C4 @ =gBattleAnimArgs - ldrb r0, [r0] - bl GetAnimBattlerSpriteId - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x26] - adds r0, r5, 0 - bl GetBattlerPosition_permutated - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0812F3DC - ldr r0, _0812F3C8 @ =REG_BG1HOFS - str r0, [sp] - ldr r1, _0812F3CC @ =REG_BLDCNT - ldr r2, _0812F3D0 @ =0x00003f42 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _0812F3D4 @ =gBattle_BG1_X - ldrh r5, [r0] - ldr r0, _0812F3D8 @ =gBattle_BG1_Y - b _0812F3EE - .align 2, 0 -_0812F3C0: .4byte gAnimBankTarget -_0812F3C4: .4byte gBattleAnimArgs -_0812F3C8: .4byte REG_BG1HOFS -_0812F3CC: .4byte REG_BLDCNT -_0812F3D0: .4byte 0x00003f42 -_0812F3D4: .4byte gBattle_BG1_X -_0812F3D8: .4byte gBattle_BG1_Y -_0812F3DC: - ldr r0, _0812F454 @ =REG_BG2HOFS - str r0, [sp] - ldr r1, _0812F458 @ =REG_BLDCNT - ldr r2, _0812F45C @ =0x00003f44 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _0812F460 @ =gBattle_BG2_X - ldrh r5, [r0] - ldr r0, _0812F464 @ =gBattle_BG2_Y -_0812F3EE: - ldrh r3, [r0] - movs r7, 0 - movs r2, 0 - ldr r6, _0812F468 @ =gScanlineEffectRegBuffers - movs r0, 0xF0 - lsls r0, 3 - adds r0, r6 - mov r12, r0 -_0812F3FE: - lsls r2, 16 - asrs r2, 16 - lsls r1, r2, 1 - adds r0, r1, r6 - strh r5, [r0] - add r1, r12 - strh r5, [r1] - adds r0, r2, 0x1 - lsls r0, 1 - adds r1, r0, r6 - strh r3, [r1] - add r0, r12 - strh r3, [r0] - lsls r0, r7, 16 - movs r1, 0x80 - lsls r1, 9 - adds r0, r1 - adds r2, 0x2 - lsls r2, 16 - lsrs r2, 16 - lsrs r7, r0, 16 - asrs r0, 16 - cmp r0, 0x9F - ble _0812F3FE - ldr r0, _0812F46C @ =0xa6600001 - str r0, [sp, 0x4] - mov r1, sp - movs r2, 0 - movs r0, 0x1 - strb r0, [r1, 0x8] - mov r0, sp - strb r2, [r0, 0x9] - ldr r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - bl ScanlineEffect_SetParams - ldr r0, _0812F470 @ =sub_812F474 - str r0, [r4] - add sp, 0xC - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812F454: .4byte REG_BG2HOFS -_0812F458: .4byte REG_BLDCNT -_0812F45C: .4byte 0x00003f44 -_0812F460: .4byte gBattle_BG2_X -_0812F464: .4byte gBattle_BG2_Y -_0812F468: .4byte gScanlineEffectRegBuffers -_0812F46C: .4byte 0xa6600001 -_0812F470: .4byte sub_812F474 - thumb_func_end sub_812F314 - thumb_func_start sub_812F474 sub_812F474: @ 812F474 push {r4-r7,lr} diff --git a/include/ewram.h b/include/ewram.h index baa64f42f..01c4c3492 100644 --- a/include/ewram.h +++ b/include/ewram.h @@ -233,6 +233,7 @@ extern u8 gSharedMem[]; #define shared192D0 (*(struct UnknownContestStruct7 *)(gSharedMem + 0x192D0)) #define eContestAI ((struct ContestAIInfo *)(gSharedMem + 0x192E4)) #define EWRAM_19348 ((u16 *)(gSharedMem + 0x19348)) +#define eWRAM_19348Struct ((struct EWRAM_19348_Struct *)(gSharedMem + 0x19348)) #define ewram19800 (&gSharedMem[0x19800]) #define ePokedexView4 (struct PokedexView *)(gSharedMem + 0x19800) #define ewram1A000 (&gSharedMem[0x1A000]) diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h index 3942397eb..26b2a9475 100644 --- a/include/rom_8077ABC.h +++ b/include/rom_8077ABC.h @@ -115,5 +115,9 @@ u8 sub_807A4A0(int bank, u8 sprite, int species); void sub_80794A8(struct Sprite *sprite); void sub_807A9BC(struct Sprite *sprite); void sub_8078954(struct Struct_sub_8078914*, u8); +u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, u32 a8); +void sub_8079098(struct Sprite *sprite); +void sub_807A0F4(struct Sprite *sprite); +void sub_8078634(u8 task); #endif // GUARD_ROM_8077ABC_H diff --git a/src/battle/battle_anim_812C144.c b/src/battle/battle_anim_812C144.c index eeb2c3514..2175f7d2a 100644 --- a/src/battle/battle_anim_812C144.c +++ b/src/battle/battle_anim_812C144.c @@ -12,6 +12,16 @@ #include "sound.h" #include "trig.h" #include "constants/songs.h" +#include "constants/species.h" + +struct EWRAM_19348_Struct +{ + /*0x00*/ u8 filler0[0x2]; + /*0x02*/ u16 species; + /*0x04*/ u8 filler4[0x8]; + /*0x0C*/ u32 otId; + /*0x10*/ u32 personality; +}; extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; @@ -46,6 +56,7 @@ extern const u8 gUnknown_08402608[]; extern const struct SpriteTemplate gBattleAnimSpriteTemplate_84025EC; extern u8 gBattleMonForms[]; extern u8 gBankSpriteIds[]; +extern u16 gBattlerPartyIndexes[]; extern u8 sub_8046234(s16 x, s16 y, u8 a3); @@ -75,6 +86,12 @@ static void sub_812E0F8(struct Sprite *sprite); static void sub_812E638(u8 taskId); static void sub_812E7F0(struct Sprite *sprite); static void sub_812E8B4(u8 taskId); +static void sub_812ED24(struct Sprite *sprite); +static void sub_812EE00(struct Sprite *sprite); +static void sub_812EEEC(struct Sprite *sprite); +/*static*/ void sub_812F238(u8 taskId); +static void sub_812F290(u8 taskId); +void sub_812F474(u8 taskId); void sub_812C144(struct Sprite *sprite) @@ -1841,3 +1858,707 @@ static void sub_812E8B4(u8 taskId) } } } + +void sub_812EA4C(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + if (gBattleAnimArgs[2] == 0) + { + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + } + + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[1] = 0x80; + sprite->data[2] = 0x300; + sprite->data[3] = gBattleAnimArgs[1]; + sprite->data[0]++; + } + else + { + sprite->pos2.x = sprite->data[1] >> 8; + sprite->pos2.y += sprite->data[2] >> 8; + if (sprite->data[4] == 0 && sprite->pos2.y > -sprite->data[3]) + { + sprite->data[4] = 1; + sprite->data[2] = (-sprite->data[2] / 3) * 2; + } + + sprite->data[1] += 192; + sprite->data[2] += 128; + if (sprite->animEnded) + DestroyAnimSprite(sprite); + } +} + +void sub_812EB10(u8 taskId) +{ + u8 spriteId; + + if (gTasks[taskId].data[0] == 0) + { + if (gBattleAnimArgs[0] == 0) + gTasks[taskId].data[11] = gAnimBankAttacker; + else + gTasks[taskId].data[11] = gAnimBankTarget; + + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + gTasks[taskId].data[10] = spriteId; + sub_8078E70(spriteId, 0); + + switch (gBattleAnimArgs[1]) + { + case 0: + obj_id_set_rotscale(spriteId, 0xE0, 0x140, 0); + sub_8079A64(spriteId); + break; + case 1: + obj_id_set_rotscale(spriteId, 0xD0, 0x130, 0xF00); + sub_8079A64(spriteId); + if (IsContest() || GetBattlerSide(gTasks[taskId].data[11]) == B_SIDE_PLAYER) + gSprites[spriteId].pos2.y += 16; + break; + case 2: + obj_id_set_rotscale(spriteId, 0xD0, 0x130, 0xF100); + sub_8079A64(spriteId); + if (IsContest() || GetBattlerSide(gTasks[taskId].data[11]) == B_SIDE_PLAYER) + gSprites[spriteId].pos2.y += 16; + break; + } + + gSprites[spriteId].pos2.x = 2; + gTasks[taskId].data[0]++; + } + else + { + spriteId = gTasks[taskId].data[10]; + if (++gTasks[taskId].data[2] == 3) + { + gTasks[taskId].data[2] = 0; + gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x; + } + + if (++gTasks[taskId].data[1] == 13) + { + sub_8078F40(spriteId); + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } + } +} + +void sub_812EC78(struct Sprite *sprite) +{ + u8 tileOffset; + int rand1; + int rand2; + + tileOffset = Random() % 12; + sprite->oam.tileNum += tileOffset; + rand1 = Random() & 0x1FF; + rand2 = Random() & 0xFF; + + if (rand1 & 1) + sprite->data[0] = 0x5E0 + rand1; + else + sprite->data[0] = 0x5E0 - rand1; + + if (rand2 & 1) + sprite->data[1] = 0x480 + rand2; + else + sprite->data[1] = 0x480 - rand2; + + sprite->data[2] = gBattleAnimArgs[0]; + if (sprite->data[2] == 0) + sprite->pos1.x = -8; + else + sprite->pos1.x = 248; + + sprite->pos1.y = 104; + sprite->callback = sub_812ED24; +} + +static void sub_812ED24(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + { + sprite->pos2.x += sprite->data[0] >> 8; + sprite->pos2.y -= sprite->data[1] >> 8; + } + else + { + sprite->pos2.x -= sprite->data[0] >> 8; + sprite->pos2.y -= sprite->data[1] >> 8; + } + + sprite->data[0] -= 22; + sprite->data[1] -= 48; + if (sprite->data[0] < 0) + sprite->data[0] = 0; + + if (++sprite->data[3] == 31) + DestroyAnimSprite(sprite); +} + +void sub_812ED84(struct Sprite *sprite) +{ + REG_WINOUT = 0x1F3F; + REG_DISPCNT |= DISPCNT_OBJWIN_ON; + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + REG_WIN0H = 0; + REG_WIN0V = 0; + + sprite->data[0] = gBattleAnimArgs[2]; + sub_8078764(sprite, 0); + sprite->oam.objMode = ST_OAM_OBJ_WINDOW; + sprite->invisible = 1; + sprite->callback = sub_812EE00; +} + +static void sub_812EE00(struct Sprite *sprite) +{ + switch (sprite->data[1]) + { + case 0: + sprite->invisible = 0; + if (sprite->affineAnimEnded) + sprite->data[1]++; + break; + case 1: + if (--sprite->data[0] == 0) + { + ChangeSpriteAffineAnim(sprite, 1); + sprite->data[1]++; + } + break; + case 2: + if (sprite->affineAnimEnded) + { + sprite->invisible = 1; + sprite->data[1]++; + } + break; + case 3: + REG_WINOUT = 0x3F3F; + REG_DISPCNT ^= DISPCNT_OBJWIN_ON; + DestroyAnimSprite(sprite); + break; + } +} + +void sub_812EEA4(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = gBattleAnimArgs[1]; + sprite->callback = sub_812EEEC; + sprite->callback(sprite); +} + +static void sub_812EEEC(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8); + sprite->data[1] = (sprite->data[1] + 9) & 0xFF; + + if ((u16)sprite->data[1] < 64 || sprite->data[1] > 195) + sprite->subpriority = sub_8079E90(gAnimBankAttacker) - 1; + else + sprite->subpriority = sub_8079E90(gAnimBankAttacker) + 1; + + if (sprite->data[5] == 0) + { + sprite->data[2] += 0x400; + sprite->data[3] += 0x100; + sprite->data[4]++; + if (sprite->data[4] == sprite->data[0]) + { + sprite->data[4] = 0; + sprite->data[5] = 1; + } + } + else if (sprite->data[5] == 1) + { + sprite->data[2] -= 0x400; + sprite->data[3] -= 0x100; + sprite->data[4]++; + if (sprite->data[4] == sprite->data[0]) + DestroyAnimSprite(sprite); + } +} + +#ifdef NONMATCHING // functionally equivalent, but seems to be missing a temporary variable +void sub_812EFC8(u8 taskId) +{ + u8 isBackPic; + u32 personality; + u32 otId; + u16 species; + s16 xOffset; + u32 priority; + u8 spriteId; + s16 coord1, coord2; + + GetAnimBattlerSpriteId(0); + if (IsContest()) + { + isBackPic = 1; + personality = eWRAM_19348Struct->personality; + otId = eWRAM_19348Struct->otId; + species = eWRAM_19348Struct->species; + xOffset = 20; + } + else + { + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + { + isBackPic = 0; + personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gAnimBankTarget]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gAnimBankTarget]], MON_DATA_OT_ID); + if (eTransformStatuses[gAnimBankTarget].species == SPECIES_NONE) + { + if (GetBattlerSide(gAnimBankTarget) == B_SIDE_PLAYER) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gAnimBankTarget]], MON_DATA_SPECIES); + else + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gAnimBankTarget]], MON_DATA_SPECIES); + } + else + { + species = eTransformStatuses[gAnimBankTarget].species; + } + + xOffset = 20; + } + else + { + isBackPic = 1; + personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gAnimBankTarget]], MON_DATA_PERSONALITY); + otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gAnimBankTarget]], MON_DATA_OT_ID); + if (eTransformStatuses[gAnimBankTarget].species == SPECIES_NONE) + { + if (GetBattlerSide(gAnimBankTarget) == B_SIDE_PLAYER) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gAnimBankTarget]], MON_DATA_SPECIES); + else + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gAnimBankTarget]], MON_DATA_SPECIES); + } + else + { + species = eTransformStatuses[gAnimBankTarget].species; + } + + xOffset = -20; + } + } + + priority = sub_8079ED4(gAnimBankAttacker); + coord1 = GetBattlerSpriteCoord(gAnimBankAttacker, 0); + coord2 = GetBattlerSpriteCoord(gAnimBankAttacker, 1); + spriteId = sub_8079F44(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId); + + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; + FillPalette(RGB(31, 31, 31), (gSprites[spriteId].oam.paletteNum << 4) + 0x100, 32); + gSprites[spriteId].oam.priority = priority; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = ((16 - gTasks[taskId].data[1]) << 8) | gTasks[taskId].data[1]; + + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].func = sub_812F238; +} +#else +NAKED +void sub_812EFC8(u8 taskId) +{ + asm(".syntax unified\n\ + .equ REG_BLDCNT, 0x4000050\n\ + .equ REG_BLDALPHA, 0x4000052\n\ + 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\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x10]\n\ + movs r0, 0\n\ + bl GetAnimBattlerSpriteId\n\ + bl IsContest\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _0812F004\n\ + movs r0, 0x1\n\ + str r0, [sp, 0x14]\n\ + ldr r0, _0812F000 @ =gSharedMem + 0x19348\n\ + ldr r1, [r0, 0x10]\n\ + mov r9, r1\n\ + ldr r2, [r0, 0xC]\n\ + mov r8, r2\n\ + ldrh r6, [r0, 0x2]\n\ + movs r3, 0x14\n\ + b _0812F13C\n\ + .align 2, 0\n\ +_0812F000: .4byte gSharedMem + 0x19348\n\ +_0812F004:\n\ + ldr r0, _0812F070 @ =gAnimBankAttacker\n\ + ldrb r0, [r0]\n\ + bl GetBattlerSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _0812F0AC\n\ + movs r0, 0\n\ + str r0, [sp, 0x14]\n\ + ldr r6, _0812F074 @ =gBattlerPartyIndexes\n\ + ldr r4, _0812F078 @ =gAnimBankTarget\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + movs r5, 0x64\n\ + muls r0, r5\n\ + ldr r7, _0812F07C @ =gPlayerParty\n\ + adds r0, r7\n\ + movs r1, 0\n\ + bl GetMonData\n\ + mov r9, r0\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + muls r0, r5\n\ + adds r0, r7\n\ + movs r1, 0x1\n\ + bl GetMonData\n\ + mov r8, r0\n\ + ldrb r2, [r4]\n\ + lsls r1, r2, 2\n\ + ldr r0, _0812F080 @ =gSharedMem + 0x17800\n\ + adds r1, r0\n\ + ldrh r0, [r1, 0x2]\n\ + cmp r0, 0\n\ + bne _0812F0A4\n\ + adds r0, r2, 0\n\ + bl GetBattlerSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0812F084\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + muls r0, r5\n\ + adds r0, r7\n\ + b _0812F092\n\ + .align 2, 0\n\ +_0812F070: .4byte gAnimBankAttacker\n\ +_0812F074: .4byte gBattlerPartyIndexes\n\ +_0812F078: .4byte gAnimBankTarget\n\ +_0812F07C: .4byte gPlayerParty\n\ +_0812F080: .4byte gSharedMem + 0x17800\n\ +_0812F084:\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + muls r0, r5\n\ + ldr r1, _0812F0A0 @ =gEnemyParty\n\ + adds r0, r1\n\ +_0812F092:\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + b _0812F0A6\n\ + .align 2, 0\n\ +_0812F0A0: .4byte gEnemyParty\n\ +_0812F0A4:\n\ + ldrh r6, [r1, 0x2]\n\ +_0812F0A6:\n\ + movs r1, 0x14\n\ + mov r10, r1\n\ + b _0812F13E\n\ +_0812F0AC:\n\ + movs r2, 0x1\n\ + str r2, [sp, 0x14]\n\ + ldr r6, _0812F10C @ =gBattlerPartyIndexes\n\ + ldr r4, _0812F110 @ =gAnimBankTarget\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + movs r5, 0x64\n\ + muls r0, r5\n\ + ldr r7, _0812F114 @ =gEnemyParty\n\ + adds r0, r7\n\ + movs r1, 0\n\ + bl GetMonData\n\ + mov r9, r0\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + muls r0, r5\n\ + adds r0, r7\n\ + movs r1, 0x1\n\ + bl GetMonData\n\ + mov r8, r0\n\ + ldrb r2, [r4]\n\ + lsls r1, r2, 2\n\ + ldr r0, _0812F118 @ =gSharedMem + 0x17800\n\ + adds r1, r0\n\ + ldrh r0, [r1, 0x2]\n\ + cmp r0, 0\n\ + bne _0812F138\n\ + adds r0, r2, 0\n\ + bl GetBattlerSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0812F120\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + muls r0, r5\n\ + ldr r1, _0812F11C @ =gPlayerParty\n\ + adds r0, r1\n\ + b _0812F12C\n\ + .align 2, 0\n\ +_0812F10C: .4byte gBattlerPartyIndexes\n\ +_0812F110: .4byte gAnimBankTarget\n\ +_0812F114: .4byte gEnemyParty\n\ +_0812F118: .4byte gSharedMem + 0x17800\n\ +_0812F11C: .4byte gPlayerParty\n\ +_0812F120:\n\ + ldrb r0, [r4]\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + muls r0, r5\n\ + adds r0, r7\n\ +_0812F12C:\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + b _0812F13A\n\ +_0812F138:\n\ + ldrh r6, [r1, 0x2]\n\ +_0812F13A:\n\ + ldr r3, _0812F218 @ =0x0000ffec\n\ +_0812F13C:\n\ + mov r10, r3\n\ +_0812F13E:\n\ + ldr r0, _0812F21C @ =gAnimBankAttacker\n\ + ldrb r0, [r0]\n\ + bl sub_8079ED4\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + ldr r5, _0812F21C @ =gAnimBankAttacker\n\ + ldrb r0, [r5]\n\ + movs r1, 0\n\ + bl GetBattlerSpriteCoord\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + ldrb r0, [r5]\n\ + movs r1, 0x1\n\ + bl GetBattlerSpriteCoord\n\ + lsls r0, 24\n\ + mov r2, r10\n\ + lsls r1, r2, 16\n\ + asrs r1, 16\n\ + adds r4, r1\n\ + lsls r4, 16\n\ + asrs r4, 16\n\ + lsrs r0, 24\n\ + str r0, [sp]\n\ + movs r0, 0x5\n\ + str r0, [sp, 0x4]\n\ + mov r3, r9\n\ + str r3, [sp, 0x8]\n\ + mov r0, r8\n\ + str r0, [sp, 0xC]\n\ + adds r0, r6, 0\n\ + ldr r1, [sp, 0x14]\n\ + movs r2, 0\n\ + adds r3, r4, 0\n\ + bl sub_8079F44\n\ + adds r6, r0, 0\n\ + lsls r6, 24\n\ + lsrs r6, 24\n\ + ldr r0, _0812F220 @ =gSprites\n\ + lsls r5, r6, 4\n\ + adds r5, r6\n\ + lsls r5, 2\n\ + adds r5, r0\n\ + movs r0, 0x3\n\ + ands r7, r0\n\ + lsls r7, 2\n\ + mov r8, r7\n\ + ldrb r0, [r5, 0x5]\n\ + movs r4, 0xD\n\ + negs r4, r4\n\ + adds r1, r4, 0\n\ + ands r1, r0\n\ + mov r2, r8\n\ + orrs r1, r2\n\ + strb r1, [r5, 0x5]\n\ + ldrb r2, [r5, 0x1]\n\ + adds r0, r4, 0\n\ + ands r0, r2\n\ + movs r2, 0x4\n\ + orrs r0, r2\n\ + strb r0, [r5, 0x1]\n\ + ldr r0, _0812F224 @ =0x00007fff\n\ + lsrs r1, 4\n\ + lsls r1, 4\n\ + movs r3, 0x80\n\ + lsls r3, 1\n\ + adds r2, r3, 0\n\ + orrs r1, r2\n\ + movs r2, 0x20\n\ + bl FillPalette\n\ + ldrb r0, [r5, 0x5]\n\ + ands r4, r0\n\ + mov r0, r8\n\ + orrs r4, r0\n\ + strb r4, [r5, 0x5]\n\ + ldr r1, _0812F228 @ =REG_BLDCNT\n\ + movs r2, 0xFD\n\ + lsls r2, 6\n\ + adds r0, r2, 0\n\ + strh r0, [r1]\n\ + ldr r3, _0812F22C @ =REG_BLDALPHA\n\ + ldr r0, _0812F230 @ =gTasks\n\ + ldr r2, [sp, 0x10]\n\ + lsls r1, r2, 2\n\ + adds r1, r2\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldrh r2, [r1, 0xA]\n\ + movs r0, 0x10\n\ + subs r0, r2\n\ + lsls r0, 8\n\ + orrs r0, r2\n\ + strh r0, [r3]\n\ + strh r6, [r1, 0x8]\n\ + ldr r0, _0812F234 @ =sub_812F238\n\ + str r0, [r1]\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\ + .align 2, 0\n\ +_0812F218: .4byte 0x0000ffec\n\ +_0812F21C: .4byte gAnimBankAttacker\n\ +_0812F220: .4byte gSprites\n\ +_0812F224: .4byte 0x00007fff\n\ +_0812F228: .4byte REG_BLDCNT\n\ +_0812F22C: .4byte REG_BLDALPHA\n\ +_0812F230: .4byte gTasks\n\ +_0812F234: .4byte sub_812F238\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +/*static*/ void sub_812F238(u8 taskId) +{ + if (gTasks[taskId].data[10]++ > 1) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[1]++; + REG_BLDALPHA = ((16 - gTasks[taskId].data[1]) << 8) | gTasks[taskId].data[1]; + if (gTasks[taskId].data[1] == 10) + { + gTasks[taskId].data[10] = 256; + gTasks[taskId].data[11] = 256; + gTasks[taskId].func = sub_812F290; + } + } +} + +static void sub_812F290(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[0]; + gTasks[taskId].data[10] -= 16; + gTasks[taskId].data[11] += 128; + gSprites[spriteId].oam.affineMode |= 2; + sub_8078FDC(&gSprites[spriteId], 1, gTasks[taskId].data[10], gTasks[taskId].data[11], 0); + if (++gTasks[taskId].data[12] == 9) + { + sub_8079098(&gSprites[spriteId]); + sub_807A0F4(&gSprites[spriteId]); + gTasks[taskId].func = sub_8078634; + } +} + +void sub_812F314(u8 taskId) +{ + u8 battler; + u16 bgX, bgY; + s16 y, i; + struct ScanlineEffectParams scanlineParams; + struct Task *task = &gTasks[taskId]; + + if (gBattleAnimArgs[0] == 0) + battler = gAnimBankAttacker; + else + battler = gAnimBankTarget; + + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 16; + task->data[4] = 0; + task->data[5] = battler; + task->data[6] = 32; + task->data[7] = 0; + task->data[8] = 24; + + if (GetBattlerSide(battler) == B_SIDE_OPPONENT) + task->data[8] *= -1; + + task->data[13] = sub_8077FC0(battler) - 34; + if (task->data[13] < 0) + task->data[13] = 0; + + task->data[14] = task->data[13] + 66; + task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + if (GetBattlerPosition_permutated(battler) == 1) + { + scanlineParams.dmaDest = ®_BG1HOFS; + REG_BLDCNT = 0x3F42; + bgX = gBattle_BG1_X; + bgY = gBattle_BG1_Y; + } + else + { + scanlineParams.dmaDest = ®_BG2HOFS; + REG_BLDCNT = 0x3F44; + bgX = gBattle_BG2_X; + bgY = gBattle_BG2_Y; + } + + for (y = 0, i = 0; y < 160; y++, i += 2) + { + gScanlineEffectRegBuffers[0][i] = bgX; + gScanlineEffectRegBuffers[1][i] = bgX; + gScanlineEffectRegBuffers[0][i + 1] = bgY; + gScanlineEffectRegBuffers[1][i + 1] = bgY; + } + + scanlineParams.dmaControl = 0xA6600001; + scanlineParams.initState = 1; + scanlineParams.unused9 = 0; + ScanlineEffect_SetParams(scanlineParams); + task->func = sub_812F474; +} |