summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/rain.s123
-rw-r--r--data/battle_anim_80CA710.s2
-rw-r--r--data/battle_anim_scripts.s8
-rw-r--r--ld_script.txt2
-rw-r--r--src/battle/anim/rain.c56
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);
+ }
+}