From ba5e6c8a32c617f0d70e62968bf13023d1e1ff5e Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Sun, 31 Dec 2017 13:06:30 +0100 Subject: disassembled fire.s --- asm/fire.s | 360 ------------------------------------------------- include/rom_8077ABC.h | 1 + ld_script.txt | 2 +- src/battle/anim/fire.c | 113 ++++++++++++++++ 4 files changed, 115 insertions(+), 361 deletions(-) delete mode 100755 asm/fire.s create mode 100644 src/battle/anim/fire.c diff --git a/asm/fire.s b/asm/fire.s deleted file mode 100755 index bafe1d7e1..000000000 --- a/asm/fire.s +++ /dev/null @@ -1,360 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - @ fire - - thumb_func_start sub_80D4ED8 -sub_80D4ED8: @ 80D4ED8 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080D4F0C @ =gBattleAnimArgs - ldrh r0, [r0] - strh r0, [r4, 0x2E] - movs r0, 0x3C - strh r0, [r4, 0x30] - movs r0, 0x9 - strh r0, [r4, 0x32] - movs r0, 0x1E - strh r0, [r4, 0x34] - movs r0, 0xFE - lsls r0, 8 - strh r0, [r4, 0x36] - ldr r1, _080D4F10 @ =move_anim_8072740 - adds r0, r4, 0 - bl StoreSpriteCallbackInData - ldr r1, _080D4F14 @ =sub_8078174 - str r1, [r4, 0x1C] - adds r0, r4, 0 - bl _call_via_r1 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D4F0C: .4byte gBattleAnimArgs -_080D4F10: .4byte move_anim_8072740 -_080D4F14: .4byte sub_8078174 - thumb_func_end sub_80D4ED8 - - thumb_func_start sub_80D4F18 -sub_80D4F18: @ 80D4F18 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _080D4F50 @ =gBattleAnimArgs - movs r0, 0 - ldrsh r1, [r5, r0] - adds r0, r4, 0 - bl sub_807867C - ldrh r0, [r5, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldrh r0, [r5, 0x8] - strh r0, [r4, 0x2E] - ldrh r0, [r5, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r5, 0x6] - strh r0, [r4, 0x32] - ldr r0, _080D4F54 @ =sub_8078394 - str r0, [r4, 0x1C] - ldr r1, _080D4F58 @ =move_anim_8072740 - adds r0, r4, 0 - bl StoreSpriteCallbackInData - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D4F50: .4byte gBattleAnimArgs -_080D4F54: .4byte sub_8078394 -_080D4F58: .4byte move_anim_8072740 - thumb_func_end sub_80D4F18 - - thumb_func_start sub_80D4F5C -sub_80D4F5C: @ 80D4F5C - push {r4,lr} - adds r4, r0, 0 - bl sub_8078650 - ldr r0, _080D4F90 @ =gBattleAnimBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _080D4F98 - ldr r2, _080D4F94 @ =gBattleAnimArgs - ldrh r0, [r4, 0x20] - ldrh r1, [r2] - subs r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r2, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldrh r0, [r2, 0x8] - negs r0, r0 - strh r0, [r4, 0x32] - adds r1, r2, 0 - b _080D4FAE - .align 2, 0 -_080D4F90: .4byte gBattleAnimBankAttacker -_080D4F94: .4byte gBattleAnimArgs -_080D4F98: - ldr r1, _080D4FC4 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x2] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x32] -_080D4FAE: - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x36] - ldrh r0, [r1, 0xA] - strh r0, [r4, 0x34] - ldr r0, _080D4FC8 @ =sub_80D5038 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D4FC4: .4byte gBattleAnimArgs -_080D4FC8: .4byte sub_80D5038 - thumb_func_end sub_80D4F5C - - thumb_func_start sub_80D4FCC -sub_80D4FCC: @ 80D4FCC - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080D4FF8 @ =gBattleAnimBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _080D5000 - ldr r2, _080D4FFC @ =gBattleAnimArgs - ldrh r0, [r4, 0x20] - ldrh r1, [r2] - subs r0, r1 - strh r0, [r4, 0x20] - ldrh r0, [r2, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - strh r0, [r4, 0x22] - ldrh r0, [r2, 0x8] - strh r0, [r4, 0x32] - adds r1, r2, 0 - b _080D5018 - .align 2, 0 -_080D4FF8: .4byte gBattleAnimBankAttacker -_080D4FFC: .4byte gBattleAnimArgs -_080D5000: - ldr r1, _080D5030 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x2] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x8] - negs r0, r0 - strh r0, [r4, 0x32] -_080D5018: - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x36] - ldrh r0, [r1, 0xA] - strh r0, [r4, 0x34] - ldr r0, _080D5034 @ =sub_80D5038 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D5030: .4byte gBattleAnimArgs -_080D5034: .4byte sub_80D5038 - thumb_func_end sub_80D4FCC - - thumb_func_start sub_80D5038 -sub_80D5038: @ 80D5038 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x36 - ldrsh r1, [r2, r3] - cmp r0, r1 - bge _080D505E - ldrh r0, [r2, 0x32] - ldrh r1, [r2, 0x24] - adds r0, r1 - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x34] - ldrh r3, [r2, 0x26] - adds r0, r3 - strh r0, [r2, 0x26] -_080D505E: - movs r0, 0x2E - ldrsh r1, [r2, r0] - movs r3, 0x30 - ldrsh r0, [r2, r3] - cmp r1, r0 - bne _080D5070 - adds r0, r2, 0 - bl move_anim_8074EE0 -_080D5070: - pop {r0} - bx r0 - thumb_func_end sub_80D5038 - - thumb_func_start sub_80D5074 -sub_80D5074: @ 80D5074 - push {r4,lr} - adds r4, r0, 0 - bl sub_8078650 - ldr r0, _080D5098 @ =gBattleAnimBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - beq _080D50A0 - ldr r0, _080D509C @ =gBattleAnimArgs - ldrh r1, [r4, 0x20] - ldrh r2, [r0] - subs r1, r2 - strh r1, [r4, 0x20] - b _080D50B2 - .align 2, 0 -_080D5098: .4byte gBattleAnimBankAttacker -_080D509C: .4byte gBattleAnimArgs -_080D50A0: - ldr r0, _080D50E0 @ =gBattleAnimArgs - ldrh r1, [r0] - ldrh r2, [r4, 0x20] - adds r1, r2 - strh r1, [r4, 0x20] - adds r2, r4, 0 - adds r2, 0x43 - movs r1, 0x8 - strb r1, [r2] -_080D50B2: - adds r2, r0, 0 - ldrh r0, [r2, 0x2] - ldrh r1, [r4, 0x22] - adds r0, r1 - movs r1, 0 - strh r0, [r4, 0x22] - ldrh r0, [r2, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r2, 0x6] - strh r0, [r4, 0x30] - ldrh r0, [r2, 0x8] - strh r0, [r4, 0x32] - ldrh r0, [r2, 0xA] - strh r0, [r4, 0x34] - ldrh r0, [r2, 0xC] - strh r0, [r4, 0x36] - strh r1, [r4, 0x38] - ldr r0, _080D50E4 @ =sub_80D50E8 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D50E0: .4byte gBattleAnimArgs -_080D50E4: .4byte sub_80D50E8 - thumb_func_end sub_80D5074 - - thumb_func_start sub_80D50E8 -sub_80D50E8: @ 80D50E8 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x34 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080D5170 - movs r2, 0x38 - ldrsh r1, [r4, r2] - ldr r0, _080D5154 @ =0x00002710 - cmp r1, r0 - ble _080D5106 - adds r1, r4, 0 - adds r1, 0x43 - movs r0, 0x1 - strb r0, [r1] -_080D5106: - movs r1, 0x2E - ldrsh r0, [r4, r1] - ldrh r1, [r4, 0x38] - lsls r1, 16 - asrs r1, 24 - ldrh r2, [r4, 0x30] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x2E - ldrsh r0, [r4, r1] - ldrh r1, [r4, 0x38] - lsls r1, 16 - asrs r1, 24 - ldrh r2, [r4, 0x30] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - ldrh r2, [r4, 0x2E] - adds r1, r0, r2 - strh r1, [r4, 0x2E] - ldrh r0, [r4, 0x36] - ldrh r2, [r4, 0x38] - adds r0, r2 - strh r0, [r4, 0x38] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _080D515C - ldr r2, _080D5158 @ =0xffffff00 - b _080D5164 - .align 2, 0 -_080D5154: .4byte 0x00002710 -_080D5158: .4byte 0xffffff00 -_080D515C: - cmp r0, 0 - bge _080D5168 - movs r2, 0x80 - lsls r2, 1 -_080D5164: - adds r0, r1, r2 - strh r0, [r4, 0x2E] -_080D5168: - ldrh r0, [r4, 0x34] - subs r0, 0x1 - strh r0, [r4, 0x34] - b _080D5176 -_080D5170: - adds r0, r4, 0 - bl move_anim_8074EE0 -_080D5176: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D50E8 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h index 70bd6fe5a..70fd15e93 100644 --- a/include/rom_8077ABC.h +++ b/include/rom_8077ABC.h @@ -86,6 +86,7 @@ void sub_80785E4(struct Sprite *sprite); void sub_8078278(struct Sprite *sprite); void sub_8078C00(struct Sprite *sprite); void sub_8078114(struct Sprite *sprite); +void sub_8078174(struct Sprite *sprite); void sub_80793C4(struct Sprite *sprite); void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4); u8 sub_8079ED4(u8 slot); diff --git a/ld_script.txt b/ld_script.txt index 62a7bf680..49c6e7c5a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -278,7 +278,7 @@ SECTIONS { src/battle/anim/energy_wave.o(.text); src/battle/anim/water.o(.text); asm/water.o(.text); - asm/fire.o(.text); + src/battle/anim/fire.o(.text); src/battle/anim/sunlight.o(.text); asm/fire_2.o(.text); src/battle/anim/heated_rock.o(.text); diff --git a/src/battle/anim/fire.c b/src/battle/anim/fire.c new file mode 100644 index 000000000..3cf633ab6 --- /dev/null +++ b/src/battle/anim/fire.c @@ -0,0 +1,113 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gBattleAnimBankAttacker; + +void sub_80D5038(struct Sprite *); +void sub_80D50E8(struct Sprite *); + +void sub_80D4ED8(struct Sprite *sprite) { + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = 60; + sprite->data[2] = 9; + sprite->data[3] = 30; + sprite->data[4] = 65024; + StoreSpriteCallbackInData(sprite, move_anim_8072740); // DestroyAnimSprite + sprite->callback = sub_8078174; + sub_8078174(sprite); +} + +void sub_80D4F18(struct Sprite *sprite) { + sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[3]; + sprite->callback = sub_8078394; + StoreSpriteCallbackInData(sprite, move_anim_8072740); // DestroyAnimSprite +} + +void sub_80D4F5C(struct Sprite *sprite) { + sub_8078650(sprite); + if (GetBankSide(gBattleAnimBankAttacker) << 24) { // g.. = gAnimBankAttacker + sprite->pos1.x = sprite->pos1.x - gBattleAnimArgs[0]; + sprite->pos1.y = sprite->pos1.y + gBattleAnimArgs[1]; + sprite->data[2] = -gBattleAnimArgs[4]; + } else { + sprite->pos1.x = sprite->pos1.x + gBattleAnimArgs[0]; + sprite->pos1.y = sprite->pos1.y + gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[4]; + } + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->callback = sub_80D5038; +} + +void sub_80D4FCC(struct Sprite *sprite) { + if (GetBankSide(gBattleAnimBankAttacker) << 24) { // g.. = gAnimBankAttacker + sprite->pos1.x = sprite->pos1.x - gBattleAnimArgs[0]; + sprite->pos1.y = sprite->pos1.y + gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[4]; + } else { + sprite->pos1.x = sprite->pos1.x + gBattleAnimArgs[0]; + sprite->pos1.y = sprite->pos1.y + gBattleAnimArgs[1]; + sprite->data[2] = -gBattleAnimArgs[4]; + } + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[4] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[5]; + sprite->callback = sub_80D5038; +} + +void sub_80D5038(struct Sprite *sprite) { + sprite->data[0]++; + if (sprite->data[0] < sprite->data[4]) { + sprite->pos2.x = sprite->pos2.x + sprite->data[2]; + sprite->pos2.y = sprite->pos2.y + sprite->data[3]; + } + if (sprite->data[0] == sprite->data[1]) { + move_anim_8074EE0(sprite); + } +} + +void sub_80D5074(struct Sprite *sprite) { + sub_8078650(sprite); + if (GetBankSide(gBattleAnimBankAttacker) << 24) { // g.. = gAnimBankAttacker + sprite->pos1.x = sprite->pos1.x - gBattleAnimArgs[0]; + } else { + sprite->pos1.x = sprite->pos1.x + gBattleAnimArgs[0]; + sprite->subpriority = 8; + } + sprite->pos1.y = 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->data[4] = gBattleAnimArgs[6]; + sprite->data[5] = 0; + sprite->callback = sub_80D50E8; +} + +void sub_80D50E8(struct Sprite *sprite) { + if (sprite->data[3]) { + if(sprite->data[5] > 0x00002710) { + sprite->subpriority = 1; + } + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8)); + sprite->pos2.y = Cos(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8)); + sprite->data[0] = sprite->data[0] + sprite->data[2]; + sprite->data[5] = sprite->data[5] + sprite->data[4]; + if (sprite->data[0] > 255) { + sprite->data[0] = sprite->data[0] - 256; + } else if (sprite->data[0] < 0) { + sprite->data[0] = sprite->data[0] + 256; + } + sprite->data[3]--; + } else { + move_anim_8074EE0(sprite); + } +} \ No newline at end of file -- cgit v1.2.3 From b5ecdfa404a34c66fdf9f96342a2de0f173e6e73 Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Wed, 3 Jan 2018 16:22:06 +0100 Subject: Decompiled fire_2.s --- asm/fire_2.s | 955 --------------------------------------------- data/battle_anim_80CA710.s | 2 +- include/heated_rock.h | 10 + include/rom_8077ABC.h | 4 + ld_script.txt | 2 +- src/battle/anim/fire.c | 49 ++- src/battle/anim/fire_2.c | 259 ++++++++++++ src/rom_8077ABC.c | 2 +- 8 files changed, 300 insertions(+), 983 deletions(-) delete mode 100755 asm/fire_2.s create mode 100644 include/heated_rock.h create mode 100644 src/battle/anim/fire_2.c diff --git a/asm/fire_2.s b/asm/fire_2.s deleted file mode 100755 index 6e8ea7ce4..000000000 --- a/asm/fire_2.s +++ /dev/null @@ -1,955 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - @ fire_2 - - thumb_func_start sub_80D51A8 -sub_80D51A8: @ 80D51A8 - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, _080D5200 @ =gAnimBankAttacker - ldrb r0, [r5] - bl GetBankSide - adds r4, r0, 0 - ldr r0, _080D5204 @ =gAnimBankTarget - ldrb r0, [r0] - bl GetBankSide - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _080D51EE - movs r0, 0x2 - bl GetBankByPlayerAI - ldrb r1, [r5] - lsls r0, 24 - lsrs r0, 24 - cmp r1, r0 - beq _080D51E6 - movs r0, 0x3 - bl GetBankByPlayerAI - ldrb r1, [r5] - lsls r0, 24 - lsrs r0, 24 - cmp r1, r0 - bne _080D51EE -_080D51E6: - ldr r1, _080D5208 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - negs r0, r0 - strh r0, [r1, 0x4] -_080D51EE: - ldr r1, _080D520C @ =sub_8079534 - str r1, [r6, 0x1C] - adds r0, r6, 0 - bl _call_via_r1 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D5200: .4byte gAnimBankAttacker -_080D5204: .4byte gAnimBankTarget -_080D5208: .4byte gBattleAnimArgs -_080D520C: .4byte sub_8079534 - thumb_func_end sub_80D51A8 - - thumb_func_start sub_80D5210 -sub_80D5210: @ 80D5210 - ldr r2, _080D5224 @ =gBattleAnimArgs - ldrh r1, [r2] - negs r1, r1 - strh r1, [r2] - ldrh r1, [r2, 0x4] - negs r1, r1 - strh r1, [r2, 0x4] - ldr r1, _080D5228 @ =sub_8079534 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080D5224: .4byte gBattleAnimArgs -_080D5228: .4byte sub_8079534 - thumb_func_end sub_80D5210 - - thumb_func_start sub_80D522C -sub_80D522C: @ 80D522C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl sub_80787B0 - ldr r0, _080D524C @ =gBattleAnimArgs - ldrh r0, [r0, 0x4] - movs r1, 0 - strh r0, [r4, 0x3C] - strh r1, [r4, 0x2E] - ldr r0, _080D5250 @ =sub_80D5254 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D524C: .4byte gBattleAnimArgs -_080D5250: .4byte sub_80D5254 - thumb_func_end sub_80D522C - - thumb_func_start sub_80D5254 -sub_80D5254: @ 80D5254 - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_80D5348 - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x12 - bne _080D529E - movs r0, 0x19 - strh r0, [r5, 0x2E] - ldrh r0, [r5, 0x20] - strh r0, [r5, 0x30] - ldr r4, _080D52A4 @ =gAnimBankTarget - ldrb r0, [r4] - movs r1, 0x2 - bl GetBankPosition - 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 GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5, 0x36] - adds r0, r5, 0 - bl obj_translate_based_on_private_1_2_3_4 - ldr r0, _080D52A8 @ =sub_80D52AC - str r0, [r5, 0x1C] -_080D529E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D52A4: .4byte gAnimBankTarget -_080D52A8: .4byte sub_80D52AC - thumb_func_end sub_80D5254 - - thumb_func_start sub_80D52AC -sub_80D52AC: @ 80D52AC - push {r4-r6,lr} - adds r6, r0, 0 - bl sub_8078B5C - lsls r0, 24 - cmp r0, 0 - beq _080D52F4 - movs r4, 0 - strh r4, [r6, 0x2E] - ldr r5, _080D52EC @ =gAnimBankTarget - ldrb r0, [r5] - movs r1, 0x2 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x20] - ldrb r0, [r5] - movs r1, 0x3 - bl GetBankPosition - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0x22] - strh r4, [r6, 0x26] - strh r4, [r6, 0x24] - ldr r1, _080D52F0 @ =sub_80D5324 - str r1, [r6, 0x1C] - adds r0, r6, 0 - bl _call_via_r1 - b _080D531E - .align 2, 0 -_080D52EC: .4byte gAnimBankTarget -_080D52F0: .4byte sub_80D5324 -_080D52F4: - movs r1, 0x3C - ldrsh r0, [r6, r1] - movs r1, 0x1C - bl Sin - ldrh r1, [r6, 0x24] - adds r0, r1 - strh r0, [r6, 0x24] - movs r1, 0x3C - ldrsh r0, [r6, r1] - movs r1, 0x1C - bl Cos - ldrh r1, [r6, 0x26] - adds r0, r1 - strh r0, [r6, 0x26] - ldrh r0, [r6, 0x3C] - adds r0, 0x14 - movs r1, 0xFF - ands r0, r1 - strh r0, [r6, 0x3C] -_080D531E: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80D52AC - - thumb_func_start sub_80D5324 -sub_80D5324: @ 80D5324 - push {r4,lr} - adds r4, r0, 0 - bl sub_80D5348 - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1F - bne _080D5340 - adds r0, r4, 0 - bl DestroyAnimSprite -_080D5340: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D5324 - - thumb_func_start sub_80D5348 -sub_80D5348: @ 80D5348 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x3C - ldrsh r0, [r4, r1] - movs r1, 0x1C - bl Sin - strh r0, [r4, 0x24] - movs r1, 0x3C - ldrsh r0, [r4, r1] - movs r1, 0x1C - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x3C] - adds r0, 0x14 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x3C] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D5348 - - thumb_func_start sub_80D5374 -sub_80D5374: @ 80D5374 - push {r4,lr} - adds r4, r0, 0 - ldr r1, _080D53A8 @ =gBattleAnimArgs - ldrh r0, [r1] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r4, 0x20] - ldrh r0, [r1, 0x2] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x2E] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x8] - strh r0, [r4, 0x32] - ldr r1, _080D53AC @ =DestroyAnimSprite - adds r0, r4, 0 - bl StoreSpriteCallbackInData - ldr r0, _080D53B0 @ =sub_8078364 - str r0, [r4, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D53A8: .4byte gBattleAnimArgs -_080D53AC: .4byte DestroyAnimSprite -_080D53B0: .4byte sub_8078364 - thumb_func_end sub_80D5374 - - thumb_func_start sub_80D53B4 -sub_80D53B4: @ 80D53B4 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x1 - bl sub_80787B0 - ldr r1, _080D53E8 @ =gBattleAnimArgs - ldrh r0, [r1, 0x4] - strh r0, [r4, 0x30] - ldrh r0, [r1, 0x6] - strh r0, [r4, 0x2E] - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _080D53EC @ =sub_80782D8 - str r0, [r4, 0x1C] - ldr r1, _080D53F0 @ =sub_80D53F4 - adds r0, r4, 0 - bl StoreSpriteCallbackInData - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080D53E8: .4byte gBattleAnimArgs -_080D53EC: .4byte sub_80782D8 -_080D53F0: .4byte sub_80D53F4 - thumb_func_end sub_80D53B4 - - thumb_func_start sub_80D53F4 -sub_80D53F4: @ 80D53F4 - push {lr} - adds r3, r0, 0 - adds r3, 0x3E - ldrb r2, [r3] - movs r1, 0x5 - negs r1, r1 - ands r1, r2 - strb r1, [r3] - ldrh r1, [r0, 0x30] - movs r2, 0 - strh r1, [r0, 0x2E] - strh r2, [r0, 0x30] - ldr r1, _080D5418 @ =sub_80D541C - str r1, [r0, 0x1C] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_080D5418: .4byte sub_80D541C - thumb_func_end sub_80D53F4 - - thumb_func_start sub_80D541C -sub_80D541C: @ 80D541C - 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 r1, 0x30 - ldrsh r0, [r4, r1] - ldrh r1, [r4, 0x32] - lsls r1, 16 - asrs r1, 24 - bl Cos - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x30] - adds r0, 0xA - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x32] - adds r0, 0xD0 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x2E] - subs r0, 0x1 - strh r0, [r4, 0x2E] - lsls r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080D5468 - adds r0, r4, 0 - bl DestroyAnimSprite -_080D5468: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80D541C - - thumb_func_start sub_80D5470 -sub_80D5470: @ 80D5470 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _080D54D0 @ =gTasks - adds r4, r0 - movs r0, 0 - bl GetAnimBankSpriteId - lsls r0, 24 - lsrs r0, 24 - movs r5, 0 - strh r0, [r4, 0x26] - strh r5, [r4, 0x8] - strh r5, [r4, 0xA] - strh r5, [r4, 0xC] - strh r5, [r4, 0xE] - ldr r2, _080D54D4 @ =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, 0x10] - ldr r0, _080D54D8 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x12] - strh r5, [r4, 0x14] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_8078E70 - ldr r0, _080D54DC @ =sub_80D54E0 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080D54D0: .4byte gTasks -_080D54D4: .4byte gSprites -_080D54D8: .4byte gAnimBankAttacker -_080D54DC: .4byte sub_80D54E0 - thumb_func_end sub_80D5470 - - thumb_func_start sub_80D54E0 -sub_80D54E0: @ 80D54E0 - push {r4,r5,lr} - sub sp, 0xC - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080D5508 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x6 - bls _080D54FC - b _080D57BA -_080D54FC: - lsls r0, 2 - ldr r1, _080D550C @ =_080D5510 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080D5508: .4byte gTasks -_080D550C: .4byte _080D5510 - .align 2, 0 -_080D5510: - .4byte _080D552C - .4byte _080D5552 - .4byte _080D5604 - .4byte _080D5664 - .4byte _080D5682 - .4byte _080D5758 - .4byte _080D57AC -_080D552C: - 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_8079C08 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080D5552: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080D559A - movs r0, 0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080D5588 - ldr r2, _080D5584 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x3 - b _080D5598 - .align 2, 0 -_080D5584: .4byte gSprites -_080D5588: - ldr r2, _080D55FC @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, _080D5600 @ =0x0000fffd -_080D5598: - strh r1, [r0, 0x24] -_080D559A: - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080D55C8 - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _080D55C8 - movs r0, 0 - strh r0, [r4, 0xE] - ldr r2, _080D55FC @ =gSprites - 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] -_080D55C8: - adds r0, r4, 0 - bl sub_8079C74 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _080D55D8 - b _080D57BA -_080D55D8: - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl sub_8079A64 - ldr r2, _080D55FC @ =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, 0xA] - strh r5, [r4, 0xC] - strh r5, [r4, 0xE] - b _080D57A0 - .align 2, 0 -_080D55FC: .4byte gSprites -_080D5600: .4byte 0x0000fffd -_080D5604: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bgt _080D5614 - b _080D57BA -_080D5614: - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080D563E - 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, 0xF0 - str r0, [sp, 0x4] - movs r0, 0x6 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r2, 0xE0 - bl sub_8079C08 - b _080D565E -_080D563E: - 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, 0xC0 - str r0, [sp, 0x4] - movs r0, 0x6 - str r0, [sp, 0x8] - adds r0, r4, 0 - movs r2, 0xE0 - bl sub_8079C08 -_080D565E: - movs r0, 0 - strh r0, [r4, 0xA] - b _080D57A0 -_080D5664: - adds r0, r4, 0 - bl sub_8079C74 - lsls r0, 24 - cmp r0, 0 - beq _080D5672 - b _080D57BA -_080D5672: - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - adds r1, r5, 0 - movs r2, 0x6 - bl sub_80D57C4 - b _080D57A0 -_080D5682: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x1 - ble _080D56D0 - movs r0, 0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080D56BC - ldr r2, _080D56B8 @ =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, 0x3 - b _080D56CE - .align 2, 0 -_080D56B8: .4byte gSprites -_080D56BC: - ldr r2, _080D5708 @ =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, 0x3 -_080D56CE: - strh r1, [r0, 0x26] -_080D56D0: - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x18 - ble _080D57BA - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080D570C - 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, 0xF0 - bl sub_8079C08 - b _080D572A - .align 2, 0 -_080D5708: .4byte gSprites -_080D570C: - 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, 0xC0 - bl sub_8079C08 -_080D572A: - ldrh r1, [r4, 0xC] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080D5748 - ldr r2, _080D5754 @ =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, 0x3 - strh r1, [r0, 0x26] -_080D5748: - movs r0, 0 - strh r0, [r4, 0xA] - strh r0, [r4, 0xC] - strh r0, [r4, 0xE] - b _080D57A0 - .align 2, 0 -_080D5754: .4byte gSprites -_080D5758: - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080D5774 - ldr r2, _080D57A8 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x22] - subs r1, 0x1 - strh r1, [r0, 0x22] -_080D5774: - adds r0, r4, 0 - bl sub_8079C74 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080D57BA - ldr r2, _080D57A8 @ =gSprites - movs r0, 0x26 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r4, 0x10] - strh r1, [r0, 0x22] - ldrh r0, [r4, 0x26] - lsls r0, 24 - lsrs r0, 24 - bl sub_8078F40 - strh r5, [r4, 0xC] -_080D57A0: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080D57BA - .align 2, 0 -_080D57A8: .4byte gSprites -_080D57AC: - movs r1, 0x14 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080D57BA - adds r0, r5, 0 - bl DestroyAnimVisualTask -_080D57BA: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80D54E0 - - thumb_func_start sub_80D57C4 -sub_80D57C4: @ 80D57C4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - adds r0, r4, 0 - bl sub_80D5940 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - ldr r1, _080D5814 @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r0, r1 - ldrh r4, [r0, 0x20] - ldr r0, _080D5818 @ =gAnimBankAttacker - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _080D581C - adds r0, r4, 0 - subs r0, 0xC - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0x1 - b _080D5826 - .align 2, 0 -_080D5814: .4byte gSprites -_080D5818: .4byte gAnimBankAttacker -_080D581C: - adds r0, r4, 0 - adds r0, 0x10 - lsls r0, 16 - lsrs r4, r0, 16 - movs r0, 0xFF -_080D5826: - movs r6, 0 - movs r5, 0 - lsls r4, 16 - str r4, [sp, 0x8] - mov r1, r9 - lsls r1, 16 - str r1, [sp, 0x4] - ldr r2, _080D58E0 @ =gUnknown_083D96DC - mov r9, r2 - lsls r0, 24 - asrs r0, 24 - str r0, [sp] - mov r3, r8 - lsls r3, 1 - mov r10, r3 -_080D5844: - ldr r0, _080D58E4 @ =gSpriteTemplate_83D96C4 - ldr r2, [sp, 0x8] - asrs r1, r2, 16 - ldr r3, [sp, 0x4] - asrs r2, r3, 16 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _080D58C6 - ldr r1, _080D58E8 @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r4, r0, r1 - ldrh r2, [r4, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - lsls r0, r5, 2 - adds r0, 0x40 - adds r1, r0 - ldr r3, _080D58EC @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r3, _080D58F0 @ =0xfffffc00 - adds r0, r3, 0 - ands r2, r0 - orrs r2, r1 - strh r2, [r4, 0x4] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x4 - bls _080D588E - movs r5, 0 -_080D588E: - lsls r2, r6, 2 - mov r1, r9 - adds r0, r2, r1 - ldrh r0, [r0] - ldr r3, [sp] - adds r1, r0, 0 - muls r1, r3 - lsls r1, 16 - asrs r1, 16 - ldr r0, _080D58F4 @ =gUnknown_083D96DC + 0x2 - adds r2, r0 - movs r3, 0 - ldrsh r2, [r2, r3] - adds r0, r4, 0 - bl sub_80D5994 - strh r7, [r4, 0x3A] - mov r0, r8 - strh r0, [r4, 0x3C] - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - add r0, r10 - ldr r1, _080D58F8 @ =gTasks + 0x8 - adds r0, r1 - ldrh r1, [r0] - adds r1, 0x1 - strh r1, [r0] -_080D58C6: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x6 - bls _080D5844 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D58E0: .4byte gUnknown_083D96DC -_080D58E4: .4byte gSpriteTemplate_83D96C4 -_080D58E8: .4byte gSprites -_080D58EC: .4byte 0x000003ff -_080D58F0: .4byte 0xfffffc00 -_080D58F4: .4byte gUnknown_083D96DC + 0x2 -_080D58F8: .4byte gTasks + 0x8 - thumb_func_end sub_80D57C4 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/battle_anim_80CA710.s b/data/battle_anim_80CA710.s index ba5d9f533..bd50379b0 100644 --- a/data/battle_anim_80CA710.s +++ b/data/battle_anim_80CA710.s @@ -2505,7 +2505,7 @@ gSpriteTemplate_83D96C4:: @ 83D96C4 spr_template 10201, 10201, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D58FC .align 1 -gUnknown_083D96DC:: @ 83D96DC +gUnknown_083D96DC:: @ 83D96DC @ holds coords for heated rocks of Move_ERUPTION .2byte -2, -5 .2byte -1, -1 .2byte 3, -6 diff --git a/include/heated_rock.h b/include/heated_rock.h new file mode 100644 index 000000000..26856fe7f --- /dev/null +++ b/include/heated_rock.h @@ -0,0 +1,10 @@ +#ifndef GUARD_HEATED_ROCK_H +#define GUARD_HEATED_ROCK_H + +// heated_rock (moves heated rock sprites) +// Used in Eruption. + +u16 sub_80D5940(u8 spriteId); +void sub_80D5994(struct Sprite *sprite, s16 x, s16 y); + +#endif // GUARD_HEATED_ROCK_H \ No newline at end of file diff --git a/include/rom_8077ABC.h b/include/rom_8077ABC.h index 02023a215..dda90c48f 100644 --- a/include/rom_8077ABC.h +++ b/include/rom_8077ABC.h @@ -46,6 +46,7 @@ void sub_8078E70(u8 sprite, u8); void sub_8078F40(u8 sprite); void sub_8078F9C(u8 sprite); void sub_8079518(struct Sprite *sprite); +void sub_8079534(struct Sprite *sprite); void sub_80796F8(u8 task); void sub_80797EC(struct Task *task); void sub_8079814(u8 taskId); @@ -53,6 +54,9 @@ void sub_8079A64(u8 sprite); u16 sub_8079B10(u8 sprite); void sub_8079BF4(s16 *bottom, s16 *top, const void *ptr); void *sub_8079BFC(s16 bottom, s16 top); +// u8 a2 := u8 sprite +void sub_8079C08(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7); +u8 sub_8079C74(struct Task *task); void sub_8079E24(); u8 sub_8079E90(u8 slot); u8 GetBankIdentity_permutated(u8 slot); diff --git a/ld_script.txt b/ld_script.txt index 49c6e7c5a..6d35da842 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -280,7 +280,7 @@ SECTIONS { asm/water.o(.text); src/battle/anim/fire.o(.text); src/battle/anim/sunlight.o(.text); - asm/fire_2.o(.text); + src/battle/anim/fire_2.o(.text); src/battle/anim/heated_rock.o(.text); src/battle/anim/wisp_orb.o(.text); asm/wisp_fire.o(.text); diff --git a/src/battle/anim/fire.c b/src/battle/anim/fire.c index 41a4a9592..b71eedcdc 100644 --- a/src/battle/anim/fire.c +++ b/src/battle/anim/fire.c @@ -11,10 +11,10 @@ void sub_80D50E8(struct Sprite *); void sub_80D4ED8(struct Sprite *sprite) { sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = 60; - sprite->data[2] = 9; - sprite->data[3] = 30; - sprite->data[4] = 65024; + sprite->data[1] = 0x3C; + sprite->data[2] = 0x9; + sprite->data[3] = 0x1E; + sprite->data[4] = 0xFE00; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); sprite->callback = sub_8078174; sub_8078174(sprite); @@ -33,12 +33,12 @@ void sub_80D4F18(struct Sprite *sprite) { void sub_80D4F5C(struct Sprite *sprite) { sub_8078650(sprite); if (GetBankSide(gAnimBankAttacker) << 24) { - sprite->pos1.x = sprite->pos1.x - gBattleAnimArgs[0]; - sprite->pos1.y = sprite->pos1.y + gBattleAnimArgs[1]; + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = -gBattleAnimArgs[4]; } else { - sprite->pos1.x = sprite->pos1.x + gBattleAnimArgs[0]; - sprite->pos1.y = sprite->pos1.y + gBattleAnimArgs[1]; + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = gBattleAnimArgs[4]; } sprite->data[1] = gBattleAnimArgs[2]; @@ -49,12 +49,12 @@ void sub_80D4F5C(struct Sprite *sprite) { void sub_80D4FCC(struct Sprite *sprite) { if (GetBankSide(gAnimBankAttacker) << 24) { - sprite->pos1.x = sprite->pos1.x - gBattleAnimArgs[0]; - sprite->pos1.y = sprite->pos1.y + gBattleAnimArgs[1]; + sprite->pos1.x -= gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = gBattleAnimArgs[4]; } else { - sprite->pos1.x = sprite->pos1.x + gBattleAnimArgs[0]; - sprite->pos1.y = sprite->pos1.y + gBattleAnimArgs[1]; + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = -gBattleAnimArgs[4]; } sprite->data[1] = gBattleAnimArgs[2]; @@ -64,10 +64,9 @@ void sub_80D4FCC(struct Sprite *sprite) { } void sub_80D5038(struct Sprite *sprite) { - sprite->data[0]++; - if (sprite->data[0] < sprite->data[4]) { - sprite->pos2.x = sprite->pos2.x + sprite->data[2]; - sprite->pos2.y = sprite->pos2.y + sprite->data[3]; + if (++sprite->data[0] < sprite->data[4]) { + sprite->pos2.x += sprite->data[2]; + sprite->pos2.y += sprite->data[3]; } if (sprite->data[0] == sprite->data[1]) { move_anim_8074EE0(sprite); @@ -77,12 +76,12 @@ void sub_80D5038(struct Sprite *sprite) { void sub_80D5074(struct Sprite *sprite) { sub_8078650(sprite); if (GetBankSide(gAnimBankAttacker) << 24) { - sprite->pos1.x = sprite->pos1.x - gBattleAnimArgs[0]; + sprite->pos1.x -= gBattleAnimArgs[0]; } else { - sprite->pos1.x = sprite->pos1.x + gBattleAnimArgs[0]; + sprite->pos1.x += gBattleAnimArgs[0]; sprite->subpriority = 8; } - sprite->pos1.y = sprite->pos1.y + gBattleAnimArgs[1]; + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[3]; sprite->data[2] = gBattleAnimArgs[4]; @@ -94,17 +93,17 @@ void sub_80D5074(struct Sprite *sprite) { void sub_80D50E8(struct Sprite *sprite) { if (sprite->data[3]) { - if(sprite->data[5] > 0x00002710) { + if(sprite->data[5] > 10000) { sprite->subpriority = 1; } sprite->pos2.x = Sin(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8)); sprite->pos2.y = Cos(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8)); - sprite->data[0] = sprite->data[0] + sprite->data[2]; - sprite->data[5] = sprite->data[5] + sprite->data[4]; - if (sprite->data[0] > 255) { - sprite->data[0] = sprite->data[0] - 256; + sprite->data[0] += sprite->data[2]; + sprite->data[5] += sprite->data[4]; + if (sprite->data[0] > 0xFF) { + sprite->data[0] -= 0x100; } else if (sprite->data[0] < 0) { - sprite->data[0] = sprite->data[0] + 256; + sprite->data[0] += 0x100; } sprite->data[3]--; } else { diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c new file mode 100644 index 000000000..d13142941 --- /dev/null +++ b/src/battle/anim/fire_2.c @@ -0,0 +1,259 @@ +#include "global.h" +#include "battle_anim.h" +#include "heated_rock.h" +#include "rom_8077ABC.h" +#include "task.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern struct SpriteTemplate gSpriteTemplate_83D96C4; +extern s16 gUnknown_083D96DC[7][2]; // x,y coords for heated rocks of Move_ERUPTION + +void sub_80D5254(struct Sprite *); +void sub_80D5348(struct Sprite *); +void sub_80D52AC(struct Sprite *); +void sub_80D5324(struct Sprite *); +void sub_80D53F4(struct Sprite *); +void sub_80D541C(struct Sprite *); +void sub_80D54E0(u8 taskId); +void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3); + +void sub_80D51A8(struct Sprite *sprite) { + if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget)) { + if (gAnimBankAttacker == GetBankByPlayerAI(2) || gAnimBankAttacker == GetBankByPlayerAI(3)) { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + } + sprite->callback = sub_8079534; + sub_8079534(sprite); +} + +struct Sprite *sub_80D5210(struct Sprite *sprite) { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->callback = sub_8079534; + return sprite; +} + +void sub_80D522C(struct Sprite *sprite) { + sub_80787B0(sprite, 1); + sprite->data[7] = gBattleAnimArgs[2]; + sprite->data[0] = 0; + sprite->callback = sub_80D5254; +} + +void sub_80D5254(struct Sprite *sprite) { + sub_80D5348(sprite); + sprite->data[0]++; + if (sprite->data[0] == 0x12) { + sprite->data[0] = 0x19; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_80D52AC; + } +} + +void sub_80D52AC(struct Sprite *sprite) { + if (sub_8078B5C(sprite)) { + sprite->data[0] = 0; + sprite->pos1.x = GetBankPosition(gAnimBankTarget, 2); + sprite->pos1.y = GetBankPosition(gAnimBankTarget, 3); + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->callback = sub_80D5324; + sub_80D5324(sprite); + } else { + sprite->pos2.x += Sin(sprite->data[7], 28); + sprite->pos2.y += Cos(sprite->data[7], 28); + sprite->data[7] = (sprite->data[7] + 20) & 0xFF; + } +} + +void sub_80D5324(struct Sprite *sprite) { + sub_80D5348(sprite); + if (++sprite->data[0] == 0x1F) { + DestroyAnimSprite(sprite); + } +} + +void sub_80D5348(struct Sprite *sprite) { + sprite->pos2.x = Sin(sprite->data[7], 28); + sprite->pos2.y = Cos(sprite->data[7], 28); + sprite->data[7] = (sprite->data[7] + 20) & 0xFF; +} + +void sub_80D5374(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]; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->callback = sub_8078364; +} + +void sub_80D53B4(struct Sprite *sprite) { + sub_80787B0(sprite, 1); + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[3]; + sprite->invisible = TRUE; + sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80D53F4); +} + +void sub_80D53F4(struct Sprite *sprite) { + sprite->invisible = FALSE; + sprite->data[0] = sprite->data[1]; + sprite->data[1] = 0; + sprite->callback = sub_80D541C; + sub_80D541C(sprite); +} + +void sub_80D541C(struct Sprite *sprite) { + sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[2] >> 8); + sprite->data[1] = (sprite->data[1] + 10) & 0xFF; + sprite->data[2] += 0xD0; + sprite->data[0]--; + if (sprite->data[0] == -1) { + DestroyAnimSprite(sprite); + } +} + +void sub_80D5470(u8 taskId) { // initialize animation task for Move_ERUPTION? + struct Task *task = &gTasks[taskId]; + task->data[15] = GetAnimBankSpriteId(0); + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[4] = gSprites[task->data[15]].pos1.y; + task->data[5] = GetBankSide(gAnimBankAttacker); + task->data[6] = 0; + sub_8078E70(task->data[15], 0); + task->func = sub_80D54E0; +} + +void sub_80D54E0(u8 taskId) { // animate Move_ERUPTION? + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) { + case 0: + sub_8079C08(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 0x20); + task->data[0]++; + case 1: + if (++task->data[1] > 1) { + task->data[1] = 0; + if (++task->data[2] & 0x1) { + gSprites[task->data[15]].pos2.x = 3; + } else { + gSprites[task->data[15]].pos2.x = -3; + } + } + if (task->data[5]) { + if (++task->data[3] > 4) { + task->data[3] = 0; + gSprites[task->data[15]].pos1.y++; + } + } + if(!sub_8079C74(task)) { + sub_8079A64(task->data[15]); + gSprites[task->data[15]].pos2.x = 0; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 4) { + if (task->data[5]) { + sub_8079C08(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 0x6); + } else { + sub_8079C08(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 0x6); + } + task->data[1] = 0; + task->data[0]++; + } + break; + case 3: + if (!sub_8079C74(task) << 24) { + sub_80D57C4(task->data[15], taskId, 6); + task->data[0]++; + } + break; + case 4: + if (++task->data[1] > 1) { + task->data[1] = 0; + if (++task->data[2] & 1) { + gSprites[task->data[15]].pos2.y += 3; + } else { + gSprites[task->data[15]].pos2.y -= 3; + } + } + if (++task->data[3] > 0x18) { + if (task->data[5]) { + sub_8079C08(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 0x8); + } else { + sub_8079C08(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 0x8); + } + if (task->data[2] & 1) { + gSprites[task->data[15]].pos2.y -= 3; + } + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + } + break; + case 5: + if (task->data[5]) { + gSprites[task->data[15]].pos1.y--; + } + if (!sub_8079C74(task)) { + gSprites[task->data[15]].pos1.y = task->data[4]; + sub_8078F40(task->data[15]); + task->data[2] = 0; + task->data[0]++; + } + break; + case 6: + if (!task->data[6]) { + DestroyAnimVisualTask(taskId); + } + break; + default: + } +} + +void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3) { + u16 i; + u16 j; + u16 y = sub_80D5940(spriteId); + u16 x = gSprites[spriteId].pos1.x; + s8 sign; + if(!GetBankSide(gAnimBankAttacker) << 24) { + x -= 0xC; + sign = 1; + } else { + x += 0x10; + sign = -1; + } + for (i = 0, j = 0; i <= 6; i++) { + u8 spriteId = CreateSprite(&gSpriteTemplate_83D96C4, x, y, 2); + if (spriteId != 0x40) { + gSprites[spriteId].oam.tileNum += j * 4 + 0x40; + if (++j >= 5) { + j = 0; + } + sub_80D5994(&gSprites[spriteId], gUnknown_083D96DC[i][0] * sign, gUnknown_083D96DC[i][1]); + gSprites[spriteId].data[6] = taskId; + gSprites[spriteId].data[7] = a3; + gTasks[taskId].data[a3]++; + } + } +} \ No newline at end of file diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c index cf57f8823..9cf28a111 100644 --- a/src/rom_8077ABC.c +++ b/src/rom_8077ABC.c @@ -1565,7 +1565,7 @@ void *sub_8079BFC(s16 bottom, s16 top) { void sub_8079C08(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7) { task->data[8] = a7; - task->data[15] = a2; + task->data[15] = a2; // spriteId task->data[9] = a3; task->data[10] = a4; task->data[13] = a5; -- cgit v1.2.3 From 6649ab0876f608eedbdc5bff55d4c55593b12122 Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Wed, 3 Jan 2018 20:55:10 +0100 Subject: Updated with pull request remarks --- data/battle_anim_80CA710.s | 2 +- src/battle/anim/fire.c | 6 +++--- src/battle/anim/fire_2.c | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/data/battle_anim_80CA710.s b/data/battle_anim_80CA710.s index bd50379b0..4430cd372 100644 --- a/data/battle_anim_80CA710.s +++ b/data/battle_anim_80CA710.s @@ -2505,7 +2505,7 @@ gSpriteTemplate_83D96C4:: @ 83D96C4 spr_template 10201, 10201, gOamData_837DF2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D58FC .align 1 -gUnknown_083D96DC:: @ 83D96DC @ holds coords for heated rocks of Move_ERUPTION +gHeatedRockCoords:: @ 83D96DC .2byte -2, -5 .2byte -1, -1 .2byte 3, -6 diff --git a/src/battle/anim/fire.c b/src/battle/anim/fire.c index b71eedcdc..d1ef86731 100644 --- a/src/battle/anim/fire.c +++ b/src/battle/anim/fire.c @@ -32,7 +32,7 @@ void sub_80D4F18(struct Sprite *sprite) { void sub_80D4F5C(struct Sprite *sprite) { sub_8078650(sprite); - if (GetBankSide(gAnimBankAttacker) << 24) { + if (GetBankSide(gAnimBankAttacker)) { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = -gBattleAnimArgs[4]; @@ -48,7 +48,7 @@ void sub_80D4F5C(struct Sprite *sprite) { } void sub_80D4FCC(struct Sprite *sprite) { - if (GetBankSide(gAnimBankAttacker) << 24) { + if (GetBankSide(gAnimBankAttacker)) { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = gBattleAnimArgs[4]; @@ -75,7 +75,7 @@ void sub_80D5038(struct Sprite *sprite) { void sub_80D5074(struct Sprite *sprite) { sub_8078650(sprite); - if (GetBankSide(gAnimBankAttacker) << 24) { + if (GetBankSide(gAnimBankAttacker)) { sprite->pos1.x -= gBattleAnimArgs[0]; } else { sprite->pos1.x += gBattleAnimArgs[0]; diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c index d13142941..c68bc51f9 100644 --- a/src/battle/anim/fire_2.c +++ b/src/battle/anim/fire_2.c @@ -9,7 +9,7 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern struct SpriteTemplate gSpriteTemplate_83D96C4; -extern s16 gUnknown_083D96DC[7][2]; // x,y coords for heated rocks of Move_ERUPTION +extern s16 gHeatedRockCoords[7][2]; void sub_80D5254(struct Sprite *); void sub_80D5348(struct Sprite *); @@ -181,7 +181,7 @@ void sub_80D54E0(u8 taskId) { // animate Move_ERUPTION? } break; case 3: - if (!sub_8079C74(task) << 24) { + if (!sub_8079C74(task)) { sub_80D57C4(task->data[15], taskId, 6); task->data[0]++; } @@ -236,7 +236,7 @@ void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3) { u16 y = sub_80D5940(spriteId); u16 x = gSprites[spriteId].pos1.x; s8 sign; - if(!GetBankSide(gAnimBankAttacker) << 24) { + if(!GetBankSide(gAnimBankAttacker)) { x -= 0xC; sign = 1; } else { @@ -250,7 +250,7 @@ void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3) { if (++j >= 5) { j = 0; } - sub_80D5994(&gSprites[spriteId], gUnknown_083D96DC[i][0] * sign, gUnknown_083D96DC[i][1]); + sub_80D5994(&gSprites[spriteId], gHeatedRockCoords[i][0] * sign, gHeatedRockCoords[i][1]); gSprites[spriteId].data[6] = taskId; gSprites[spriteId].data[7] = a3; gTasks[taskId].data[a3]++; -- cgit v1.2.3 From ff1a79f2fcc111360fe0ce478fdd24cfcdf93932 Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Thu, 4 Jan 2018 21:48:30 +0100 Subject: Formatted to fit with the rest of the source code --- src/battle/anim/fire.c | 84 +++++++++---- src/battle/anim/fire_2.c | 307 +++++++++++++++++++++++++++++------------------ 2 files changed, 246 insertions(+), 145 deletions(-) diff --git a/src/battle/anim/fire.c b/src/battle/anim/fire.c index d1ef86731..253236805 100644 --- a/src/battle/anim/fire.c +++ b/src/battle/anim/fire.c @@ -9,78 +9,105 @@ extern u8 gAnimBankAttacker; void sub_80D5038(struct Sprite *); void sub_80D50E8(struct Sprite *); -void sub_80D4ED8(struct Sprite *sprite) { +void sub_80D4ED8(struct Sprite *sprite) +{ sprite->data[0] = gBattleAnimArgs[0]; sprite->data[1] = 0x3C; sprite->data[2] = 0x9; sprite->data[3] = 0x1E; sprite->data[4] = 0xFE00; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->callback = sub_8078174; sub_8078174(sprite); } -void sub_80D4F18(struct Sprite *sprite) { +void sub_80D4F18(struct Sprite *sprite) +{ sub_807867C(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[4]; sprite->data[1] = gBattleAnimArgs[2]; sprite->data[2] = gBattleAnimArgs[3]; + sprite->callback = sub_8078394; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } -void sub_80D4F5C(struct Sprite *sprite) { +void sub_80D4F5C(struct Sprite *sprite) +{ sub_8078650(sprite); - if (GetBankSide(gAnimBankAttacker)) { + + if (GetBankSide(gAnimBankAttacker)) + { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = -gBattleAnimArgs[4]; - } else { + } + else + { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = gBattleAnimArgs[4]; } + sprite->data[1] = gBattleAnimArgs[2]; sprite->data[4] = gBattleAnimArgs[3]; sprite->data[3] = gBattleAnimArgs[5]; + sprite->callback = sub_80D5038; } -void sub_80D4FCC(struct Sprite *sprite) { - if (GetBankSide(gAnimBankAttacker)) { +void sub_80D4FCC(struct Sprite *sprite) +{ + if (GetBankSide(gAnimBankAttacker)) + { sprite->pos1.x -= gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = gBattleAnimArgs[4]; - } else { + } + else + { sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[2] = -gBattleAnimArgs[4]; } + sprite->data[1] = gBattleAnimArgs[2]; sprite->data[4] = gBattleAnimArgs[3]; sprite->data[3] = gBattleAnimArgs[5]; + sprite->callback = sub_80D5038; } -void sub_80D5038(struct Sprite *sprite) { - if (++sprite->data[0] < sprite->data[4]) { +void sub_80D5038(struct Sprite *sprite) +{ + if (++sprite->data[0] < sprite->data[4]) + { sprite->pos2.x += sprite->data[2]; sprite->pos2.y += sprite->data[3]; } - if (sprite->data[0] == sprite->data[1]) { + + if (sprite->data[0] == sprite->data[1]) move_anim_8074EE0(sprite); - } } -void sub_80D5074(struct Sprite *sprite) { +void sub_80D5074(struct Sprite *sprite) +{ sub_8078650(sprite); - if (GetBankSide(gAnimBankAttacker)) { + + if (GetBankSide(gAnimBankAttacker)) + { sprite->pos1.x -= gBattleAnimArgs[0]; - } else { + } + else + { sprite->pos1.x += gBattleAnimArgs[0]; sprite->subpriority = 8; } + sprite->pos1.y += gBattleAnimArgs[1]; sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[3]; @@ -88,25 +115,32 @@ void sub_80D5074(struct Sprite *sprite) { sprite->data[3] = gBattleAnimArgs[5]; sprite->data[4] = gBattleAnimArgs[6]; sprite->data[5] = 0; + sprite->callback = sub_80D50E8; } -void sub_80D50E8(struct Sprite *sprite) { - if (sprite->data[3]) { - if(sprite->data[5] > 10000) { +void sub_80D50E8(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + if(sprite->data[5] > 10000) sprite->subpriority = 1; - } + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8)); sprite->pos2.y = Cos(sprite->data[0], sprite->data[1] + (sprite->data[5] >> 8)); + sprite->data[0] += sprite->data[2]; sprite->data[5] += sprite->data[4]; - if (sprite->data[0] > 0xFF) { - sprite->data[0] -= 0x100; - } else if (sprite->data[0] < 0) { - sprite->data[0] += 0x100; - } + + if (sprite->data[0] > 255) + sprite->data[0] -= 256; + else if (sprite->data[0] < 0) + sprite->data[0] += 256; + sprite->data[3]--; - } else { + } + else + { move_anim_8074EE0(sprite); } } \ No newline at end of file diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c index c68bc51f9..6dc304232 100644 --- a/src/battle/anim/fire_2.c +++ b/src/battle/anim/fire_2.c @@ -20,114 +20,149 @@ void sub_80D541C(struct Sprite *); void sub_80D54E0(u8 taskId); void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3); -void sub_80D51A8(struct Sprite *sprite) { - if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget)) { - if (gAnimBankAttacker == GetBankByPlayerAI(2) || gAnimBankAttacker == GetBankByPlayerAI(3)) { +void sub_80D51A8(struct Sprite *sprite) +{ + if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget) + && (gAnimBankAttacker == GetBankByPlayerAI(2) + || gAnimBankAttacker == GetBankByPlayerAI(3))) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - } + sprite->callback = sub_8079534; sub_8079534(sprite); } -struct Sprite *sub_80D5210(struct Sprite *sprite) { +struct Sprite *sub_80D5210(struct Sprite *sprite) +{ gBattleAnimArgs[0] = -gBattleAnimArgs[0]; gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->callback = sub_8079534; return sprite; } -void sub_80D522C(struct Sprite *sprite) { +void sub_80D522C(struct Sprite *sprite) +{ sub_80787B0(sprite, 1); + sprite->data[7] = gBattleAnimArgs[2]; sprite->data[0] = 0; + sprite->callback = sub_80D5254; } -void sub_80D5254(struct Sprite *sprite) { +void sub_80D5254(struct Sprite *sprite) +{ sub_80D5348(sprite); - sprite->data[0]++; - if (sprite->data[0] == 0x12) { + + if (++sprite->data[0] == 0x12) + { sprite->data[0] = 0x19; sprite->data[1] = sprite->pos1.x; sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); sprite->data[3] = sprite->pos1.y; sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); + obj_translate_based_on_private_1_2_3_4(sprite); + sprite->callback = sub_80D52AC; } } -void sub_80D52AC(struct Sprite *sprite) { - if (sub_8078B5C(sprite)) { +void sub_80D52AC(struct Sprite *sprite) +{ + if (sub_8078B5C(sprite)) + { sprite->data[0] = 0; + sprite->pos1.x = GetBankPosition(gAnimBankTarget, 2); sprite->pos1.y = GetBankPosition(gAnimBankTarget, 3); sprite->pos2.y = 0; sprite->pos2.x = 0; + sprite->callback = sub_80D5324; sub_80D5324(sprite); - } else { + } + else + { sprite->pos2.x += Sin(sprite->data[7], 28); sprite->pos2.y += Cos(sprite->data[7], 28); + sprite->data[7] = (sprite->data[7] + 20) & 0xFF; } } -void sub_80D5324(struct Sprite *sprite) { +void sub_80D5324(struct Sprite *sprite) +{ sub_80D5348(sprite); - if (++sprite->data[0] == 0x1F) { + + if (++sprite->data[0] == 0x1F) DestroyAnimSprite(sprite); - } } -void sub_80D5348(struct Sprite *sprite) { +void sub_80D5348(struct Sprite *sprite) +{ sprite->pos2.x = Sin(sprite->data[7], 28); sprite->pos2.y = Cos(sprite->data[7], 28); + sprite->data[7] = (sprite->data[7] + 20) & 0xFF; } -void sub_80D5374(struct Sprite *sprite) { +void sub_80D5374(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]; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->callback = sub_8078364; } -void sub_80D53B4(struct Sprite *sprite) { +void sub_80D53B4(struct Sprite *sprite) +{ sub_80787B0(sprite, 1); + sprite->data[1] = gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[3]; + sprite->invisible = TRUE; sprite->callback = sub_80782D8; + StoreSpriteCallbackInData(sprite, sub_80D53F4); } -void sub_80D53F4(struct Sprite *sprite) { +void sub_80D53F4(struct Sprite *sprite) +{ sprite->invisible = FALSE; + sprite->data[0] = sprite->data[1]; sprite->data[1] = 0; + sprite->callback = sub_80D541C; sub_80D541C(sprite); } -void sub_80D541C(struct Sprite *sprite) { +void sub_80D541C(struct Sprite *sprite) +{ sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8); sprite->pos2.y = Cos(sprite->data[1], sprite->data[2] >> 8); + sprite->data[1] = (sprite->data[1] + 10) & 0xFF; sprite->data[2] += 0xD0; - sprite->data[0]--; - if (sprite->data[0] == -1) { + + if (--sprite->data[0] == -1) DestroyAnimSprite(sprite); - } } -void sub_80D5470(u8 taskId) { // initialize animation task for Move_ERUPTION? +void sub_80D5470(u8 taskId) // initialize animation task for Move_ERUPTION? +{ struct Task *task = &gTasks[taskId]; + task->data[15] = GetAnimBankSpriteId(0); + task->data[0] = 0; task->data[1] = 0; task->data[2] = 0; @@ -135,124 +170,156 @@ void sub_80D5470(u8 taskId) { // initialize animation task for Move_ERUPTION? task->data[4] = gSprites[task->data[15]].pos1.y; task->data[5] = GetBankSide(gAnimBankAttacker); task->data[6] = 0; + sub_8078E70(task->data[15], 0); + task->func = sub_80D54E0; } -void sub_80D54E0(u8 taskId) { // animate Move_ERUPTION? +void sub_80D54E0(u8 taskId) // animate Move_ERUPTION? +{ struct Task *task = &gTasks[taskId]; - switch (task->data[0]) { - case 0: - sub_8079C08(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 0x20); - task->data[0]++; - case 1: - if (++task->data[1] > 1) { - task->data[1] = 0; - if (++task->data[2] & 0x1) { - gSprites[task->data[15]].pos2.x = 3; - } else { - gSprites[task->data[15]].pos2.x = -3; - } - } - if (task->data[5]) { - if (++task->data[3] > 4) { - task->data[3] = 0; - gSprites[task->data[15]].pos1.y++; - } - } - if(!sub_8079C74(task)) { - sub_8079A64(task->data[15]); - gSprites[task->data[15]].pos2.x = 0; - task->data[1] = 0; - task->data[2] = 0; - task->data[3] = 0; - task->data[0]++; - } - break; - case 2: - if (++task->data[1] > 4) { - if (task->data[5]) { - sub_8079C08(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 0x6); - } else { - sub_8079C08(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 0x6); - } - task->data[1] = 0; - task->data[0]++; - } - break; - case 3: - if (!sub_8079C74(task)) { - sub_80D57C4(task->data[15], taskId, 6); - task->data[0]++; - } - break; - case 4: - if (++task->data[1] > 1) { - task->data[1] = 0; - if (++task->data[2] & 1) { - gSprites[task->data[15]].pos2.y += 3; - } else { - gSprites[task->data[15]].pos2.y -= 3; - } - } - if (++task->data[3] > 0x18) { - if (task->data[5]) { - sub_8079C08(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 0x8); - } else { - sub_8079C08(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 0x8); - } - if (task->data[2] & 1) { - gSprites[task->data[15]].pos2.y -= 3; - } - task->data[1] = 0; - task->data[2] = 0; + + switch (task->data[0]) + { + case 0: + sub_8079C08(task, task->data[15], 0x100, 0x100, 0xE0, 0x200, 0x20); + + task->data[0]++; + case 1: + if (++task->data[1] > 1) + { + task->data[1] = 0; + + if (++task->data[2] & 0x1) + gSprites[task->data[15]].pos2.x = 3; + else + gSprites[task->data[15]].pos2.x = -3; + } + + if (task->data[5]) + { + if (++task->data[3] > 4) + { task->data[3] = 0; - task->data[0]++; - } - break; - case 5: - if (task->data[5]) { - gSprites[task->data[15]].pos1.y--; - } - if (!sub_8079C74(task)) { - gSprites[task->data[15]].pos1.y = task->data[4]; - sub_8078F40(task->data[15]); - task->data[2] = 0; - task->data[0]++; + gSprites[task->data[15]].pos1.y++; } - break; - case 6: - if (!task->data[6]) { - DestroyAnimVisualTask(taskId); - } - break; - default: + } + + if(!sub_8079C74(task)) + { + sub_8079A64(task->data[15]); + gSprites[task->data[15]].pos2.x = 0; + + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 4) + { + if (task->data[5]) + sub_8079C08(task, task->data[15], 0xE0, 0x200, 0x180, 0xF0, 0x6); + else + sub_8079C08(task, task->data[15], 0xE0, 0x200, 0x180, 0xC0, 0x6); + + task->data[1] = 0; + task->data[0]++; + } + break; + case 3: + if (!sub_8079C74(task)) + { + sub_80D57C4(task->data[15], taskId, 6); + + task->data[0]++; + } + break; + case 4: + if (++task->data[1] > 1) + { + task->data[1] = 0; + + if (++task->data[2] & 1) + gSprites[task->data[15]].pos2.y += 3; + else + gSprites[task->data[15]].pos2.y -= 3; + } + + if (++task->data[3] > 0x18) + { + if (task->data[5]) + sub_8079C08(task, task->data[15], 0x180, 0xF0, 0x100, 0x100, 0x8); + else + sub_8079C08(task, task->data[15], 0x180, 0xC0, 0x100, 0x100, 0x8); + + if (task->data[2] & 1) + gSprites[task->data[15]].pos2.y -= 3; + + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = 0; + task->data[0]++; + } + break; + case 5: + if (task->data[5]) + gSprites[task->data[15]].pos1.y--; + + if (!sub_8079C74(task)) + { + gSprites[task->data[15]].pos1.y = task->data[4]; + sub_8078F40(task->data[15]); + + task->data[2] = 0; + task->data[0]++; + } + break; + case 6: + if (!task->data[6]) + DestroyAnimVisualTask(taskId); + + break; + default: } } -void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3) { - u16 i; - u16 j; +void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3) +{ + u16 i, j; + s8 sign; + u16 y = sub_80D5940(spriteId); u16 x = gSprites[spriteId].pos1.x; - s8 sign; - if(!GetBankSide(gAnimBankAttacker)) { + + if(!GetBankSide(gAnimBankAttacker)) + { x -= 0xC; sign = 1; - } else { + } + else + { x += 0x10; sign = -1; } - for (i = 0, j = 0; i <= 6; i++) { + + for (i = 0, j = 0; i <= 6; i++) + { u8 spriteId = CreateSprite(&gSpriteTemplate_83D96C4, x, y, 2); - if (spriteId != 0x40) { + + if (spriteId != 0x40) + { gSprites[spriteId].oam.tileNum += j * 4 + 0x40; - if (++j >= 5) { + + if (++j >= 5) j = 0; - } + sub_80D5994(&gSprites[spriteId], gHeatedRockCoords[i][0] * sign, gHeatedRockCoords[i][1]); gSprites[spriteId].data[6] = taskId; gSprites[spriteId].data[7] = a3; + gTasks[taskId].data[a3]++; } } -- cgit v1.2.3