diff options
-rwxr-xr-x | asm/noise.s | 139 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/battle/anim/noise.c | 56 |
3 files changed, 57 insertions, 140 deletions
diff --git a/asm/noise.s b/asm/noise.s deleted file mode 100755 index 930b77309..000000000 --- a/asm/noise.s +++ /dev/null @@ -1,139 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80D2D68 -sub_80D2D68: @ 80D2D68 - push {r4-r7,lr} - adds r5, r0, 0 - ldr r0, _080D2D7C @ =gBattleAnimArgs - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _080D2D84 - ldr r0, _080D2D80 @ =gBattleAnimBankAttacker - b _080D2D86 - .align 2, 0 -_080D2D7C: .4byte gBattleAnimArgs -_080D2D80: .4byte gBattleAnimBankAttacker -_080D2D84: - ldr r0, _080D2E1C @ =gBattleAnimBankTarget -_080D2D86: - ldrb r6, [r0] - adds r0, r6, 0 - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080D2DA0 - ldr r1, _080D2E20 @ =gBattleAnimArgs - movs r2, 0x2 - ldrsh r0, [r1, r2] - negs r0, r0 - strh r0, [r1, 0x2] -_080D2DA0: - adds r0, r6, 0 - movs r1, 0x2 - bl sub_8077ABC - lsls r0, 24 - ldr r7, _080D2E20 @ =gBattleAnimArgs - lsrs r0, 24 - ldrh r3, [r7, 0x2] - adds r0, r3 - movs r4, 0 - strh r0, [r5, 0x20] - adds r0, r6, 0 - movs r1, 0x3 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - ldrh r1, [r7, 0x4] - adds r0, r1 - strh r0, [r5, 0x22] - strh r4, [r5, 0x2E] - ldrh r1, [r5, 0x20] - lsls r1, 3 - strh r1, [r5, 0x30] - lsls r0, 3 - strh r0, [r5, 0x32] - movs r2, 0x2 - ldrsh r0, [r7, r2] - lsls r0, 3 - cmp r0, 0 - bge _080D2DE0 - adds r0, 0x7 -_080D2DE0: - asrs r0, 3 - strh r0, [r5, 0x34] - movs r3, 0x4 - ldrsh r0, [r7, r3] - lsls r0, 3 - cmp r0, 0 - bge _080D2DF0 - adds r0, 0x7 -_080D2DF0: - asrs r0, 3 - strh r0, [r5, 0x36] - ldrh r2, [r5, 0x4] - lsls r1, r2, 22 - lsrs r1, 22 - movs r3, 0x6 - ldrsh r0, [r7, r3] - lsls r0, 4 - adds r1, r0 - ldr r3, _080D2E24 @ =0x000003ff - adds r0, r3, 0 - ands r1, r0 - ldr r0, _080D2E28 @ =0xfffffc00 - ands r0, r2 - orrs r0, r1 - strh r0, [r5, 0x4] - ldr r0, _080D2E2C @ =sub_80D2E30 - str r0, [r5, 0x1C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080D2E1C: .4byte gBattleAnimBankTarget -_080D2E20: .4byte gBattleAnimArgs -_080D2E24: .4byte 0x000003ff -_080D2E28: .4byte 0xfffffc00 -_080D2E2C: .4byte sub_80D2E30 - thumb_func_end sub_80D2D68 - - thumb_func_start sub_80D2E30 -sub_80D2E30: @ 80D2E30 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x34] - ldrh r1, [r2, 0x30] - adds r0, r1 - strh r0, [r2, 0x30] - ldrh r1, [r2, 0x36] - ldrh r3, [r2, 0x32] - adds r1, r3 - strh r1, [r2, 0x32] - lsls r0, 16 - asrs r0, 19 - strh r0, [r2, 0x20] - lsls r1, 16 - asrs r1, 19 - strh r1, [r2, 0x22] - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x10 - ble _080D2E64 - adds r0, r2, 0 - bl move_anim_8072740 -_080D2E64: - pop {r0} - bx r0 - thumb_func_end sub_80D2E30 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 15f8518da..12a7a4c9d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -268,7 +268,7 @@ SECTIONS { src/battle/anim/swipe.o(.text); src/battle/anim/struggle.o(.text); src/battle/anim/uproar.o(.text); - asm/noise.o(.text); + src/battle/anim/noise.o(.text); asm/note_spin.o(.text); asm/guard.o(.text); asm/fury_cutter_count.o(.text); diff --git a/src/battle/anim/noise.c b/src/battle/anim/noise.c new file mode 100644 index 000000000..78953d96a --- /dev/null +++ b/src/battle/anim/noise.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "battle_anim.h" + +extern s16 gBattleAnimArgs[8]; +extern u8 gBattleAnimBankAttacker; +extern u8 gBattleAnimBankTarget; + +static void sub_80D2E30(struct Sprite *); + +// noise (moving music note) +// Used in Uproar. + +void sub_80D2D68(struct Sprite* sprite) +{ + int var1; + u8 slot = gBattleAnimArgs[0] == 0 ? gBattleAnimBankAttacker : gBattleAnimBankTarget; + + if (GetBankSide(slot) == 1) + { + gBattleAnimArgs[1] *= -1; + } + + sprite->pos1.x = sub_8077ABC(slot, 2) + gBattleAnimArgs[1]; + sprite->pos1.y = sub_8077ABC(slot, 3) + gBattleAnimArgs[2]; + sprite->data[0] = 0; + sprite->data[1] = (u16)sprite->pos1.x << 3; + sprite->data[2] = (u16)sprite->pos1.y << 3; + + var1 = gBattleAnimArgs[1] << 3; + if (var1 < 0) + var1 += 7; + sprite->data[3] = var1 >> 3; + + var1 = gBattleAnimArgs[2] << 3; + if (var1 < 0) + var1 += 7; + sprite->data[4] = var1 >> 3; + + sprite->oam.tileNum += gBattleAnimArgs[3] * 16; + sprite->callback = sub_80D2E30; +} + +static void sub_80D2E30(struct Sprite *sprite) +{ + sprite->data[1] += sprite->data[3]; + sprite->data[2] += sprite->data[4]; + + sprite->pos1.x = sprite->data[1] >> 3; + sprite->pos1.y = sprite->data[2] >> 3; + + if (++sprite->data[0] > 16) + { + move_anim_8072740(sprite); + } +} |