summaryrefslogtreecommitdiff
path: root/src/battle/anim/rain.c
blob: b38233e3c677868160f94d815082edcccd7c64bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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);
    }
}