diff options
-rwxr-xr-x | asm/fire.s | 360 | ||||
-rw-r--r-- | include/rom_8077ABC.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/battle/anim/fire.c | 113 |
4 files changed, 115 insertions, 361 deletions
diff --git a/asm/fire.s b/asm/fire.s deleted file mode 100755 index dcf793e39..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 @ =DestroyAnimSprite - 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 DestroyAnimSprite -_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 @ =DestroyAnimSprite - 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 DestroyAnimSprite - 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 @ =gAnimBankAttacker - 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 gAnimBankAttacker -_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 @ =gAnimBankAttacker - 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 gAnimBankAttacker -_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 @ =gAnimBankAttacker - 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 gAnimBankAttacker -_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 04d996a21..02023a215 100644 --- a/include/rom_8077ABC.h +++ b/include/rom_8077ABC.h @@ -77,6 +77,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..41a4a9592 --- /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 gAnimBankAttacker; + +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, 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, DestroyAnimSprite); +} + +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->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(gAnimBankAttacker) << 24) { + 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(gAnimBankAttacker) << 24) { + 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 |