diff options
-rwxr-xr-x | asm/rain.s | 123 | ||||
-rw-r--r-- | data/battle_anim_80CA710.s | 2 | ||||
-rw-r--r-- | data/battle_anim_scripts.s | 8 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/battle/anim/rain.c | 56 |
5 files changed, 62 insertions, 129 deletions
diff --git a/asm/rain.s b/asm/rain.s deleted file mode 100755 index f8f68dd28..000000000 --- a/asm/rain.s +++ /dev/null @@ -1,123 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - @ rain - - thumb_func_start sub_80D30F0 -sub_80D30F0: @ 80D30F0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - ldr r1, _080D3178 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080D3118 - ldr r1, _080D317C @ =gBattleAnimArgs - ldrh r0, [r1] - strh r0, [r5, 0xA] - ldrh r0, [r1, 0x2] - strh r0, [r5, 0xC] - ldrh r0, [r1, 0x4] - strh r0, [r5, 0xE] -_080D3118: - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r2, 0x8 - ldrsh r0, [r5, r2] - movs r2, 0xC - ldrsh r1, [r5, r2] - bl __modsi3 - cmp r0, 0x1 - bne _080D3160 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF0 - bl __umodsi3 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x50 - bl __umodsi3 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _080D3180 @ =gSpriteTemplate_83D9130 - adds r1, r4, 0 - movs r3, 0x4 - bl CreateSprite -_080D3160: - movs r0, 0x8 - ldrsh r1, [r5, r0] - movs r2, 0xE - ldrsh r0, [r5, r2] - cmp r1, r0 - bne _080D3172 - adds r0, r6, 0 - bl DestroyAnimVisualTask -_080D3172: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080D3178: .4byte gTasks -_080D317C: .4byte gBattleAnimArgs -_080D3180: .4byte gSpriteTemplate_83D9130 - thumb_func_end sub_80D30F0 - - thumb_func_start sub_80D3184 -sub_80D3184: @ 80D3184 - ldr r1, _080D318C @ =sub_80D3190 - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_080D318C: .4byte sub_80D3190 - thumb_func_end sub_80D3184 - - thumb_func_start sub_80D3190 -sub_80D3190: @ 80D3190 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xD - bgt _080D31AE - ldrh r0, [r2, 0x24] - adds r0, 0x1 - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x26] - adds r0, 0x4 - strh r0, [r2, 0x26] -_080D31AE: - adds r0, r2, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080D31C2 - adds r0, r2, 0 - bl DestroySprite -_080D31C2: - pop {r0} - bx r0 - thumb_func_end sub_80D3190 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/battle_anim_80CA710.s b/data/battle_anim_80CA710.s index 24881ab7c..ba5d9f533 100644 --- a/data/battle_anim_80CA710.s +++ b/data/battle_anim_80CA710.s @@ -2091,7 +2091,7 @@ gSpriteAnimTable_83D912C:: @ 83D912C .align 2 gSpriteTemplate_83D9130:: @ 83D9130 - spr_template 10115, 10115, gOamData_837DF74, gSpriteAnimTable_83D912C, NULL, gDummySpriteAffineAnimTable, sub_80D3184 + spr_template 10115, 10115, gOamData_837DF74, gSpriteAnimTable_83D912C, NULL, gDummySpriteAffineAnimTable, SetAnimRaindropCallback .align 2 gSpriteAffineAnim_83D9148:: @ 83D9148 diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index 5e5293e63..e0d11637d 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -5271,8 +5271,8 @@ Move_RAIN_DANCE: @ 81CE997 panse_19 SE_W240, 192 createtask sub_80E2A38, 10, 1921, 2, 0, 4, 0 wait - createtask sub_80D30F0, 2, 0, 3, 120 - createtask sub_80D30F0, 2, 0, 3, 120 + createtask CreateAnimRaindrops, 2, 0, 3, 120 + createtask CreateAnimRaindrops, 2, 0, 3, 120 pause 120 pause 30 wait @@ -10497,8 +10497,8 @@ General_Rain: @ 81D67BB panse_19 SE_W240, 192 createtask sub_80E2A38, 10, 1921, 2, 0, 4, 0 wait - createtask sub_80D30F0, 2, 0, 3, 60 - createtask sub_80D30F0, 2, 0, 3, 60 + createtask CreateAnimRaindrops, 2, 0, 3, 60 + createtask CreateAnimRaindrops, 2, 0, 3, 60 pause 50 wait createtask sub_80E2A38, 10, 1921, 2, 4, 0, 0 diff --git a/ld_script.txt b/ld_script.txt index 43c714c21..9bef7726d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -272,7 +272,7 @@ SECTIONS { src/battle/anim/note_spin.o(.text); src/battle/anim/guard.o(.text); src/battle/anim/fury_cutter_count.o(.text); - asm/rain.o(.text); + src/battle/anim/rain.o(.text); src/battle/anim/bubble.o(.text); src/battle/anim/aurora.o(.text); asm/liquid_ball.o(.text); diff --git a/src/battle/anim/rain.c b/src/battle/anim/rain.c new file mode 100644 index 000000000..b38233e3c --- /dev/null +++ b/src/battle/anim/rain.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "battle_anim.h" +#include "random.h" +#include "sprite.h" +#include "task.h" + +extern s16 gBattleAnimArgs[8]; +extern const struct SpriteTemplate gSpriteTemplate_83D9130[]; + +static void MoveAnimRaindrop(struct Sprite *); + +// rain (spawns and animates raindrops) +// Used in Rain Dance and general rain animation. + +void CreateAnimRaindrops(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + } + + gTasks[taskId].data[0]++; + + if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1) + { + u8 x = Random() % 240; + u8 y = Random() % 80; + CreateSprite(gSpriteTemplate_83D9130, x, y, 4); + } + + if (gTasks[taskId].data[0] == gTasks[taskId].data[3]) + { + DestroyAnimVisualTask(taskId); + } +} + +void SetAnimRaindropCallback(struct Sprite *sprite) +{ + sprite->callback = MoveAnimRaindrop; +} + +static void MoveAnimRaindrop(struct Sprite *sprite) +{ + if (++sprite->data[0] <= 13) + { + sprite->pos2.x++; + sprite->pos2.y += 4; + } + + if (sprite->animEnded) + { + DestroySprite(sprite); + } +} |