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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#include "global.h"
#include "battle_anim.h"
#include "random.h"
#include "sprite.h"
#include "task.h"
extern s16 gBattleAnimArgs[8];
void SetAnimRaindropCallback(struct Sprite *sprite);
static void MoveAnimRaindrop(struct Sprite *sprite);
// rain (spawns and animates raindrops)
// Used in Rain Dance and general rain animation.
const u8 gUnknown_3D7D8C[] = INCBIN_U8("graphics/unknown/unknown_3D7D8C.4bpp");
const u8 gUnknown_3D810C[] = INCBIN_U8("graphics/unknown/unknown_3D810C.bin");
const union AnimCmd gSpriteAnim_83D910C[] =
{
ANIMCMD_FRAME(0, 2),
ANIMCMD_FRAME(8, 2),
ANIMCMD_FRAME(16, 2),
ANIMCMD_FRAME(24, 6),
ANIMCMD_FRAME(32, 2),
ANIMCMD_FRAME(40, 2),
ANIMCMD_FRAME(48, 2),
ANIMCMD_END,
};
const union AnimCmd *const gSpriteAnimTable_83D912C[] =
{
gSpriteAnim_83D910C,
};
const struct SpriteTemplate gSpriteTemplate_83D9130 =
{
.tileTag = 10115,
.paletteTag = 10115,
.oam = &gOamData_837DF74,
.anims = gSpriteAnimTable_83D912C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SetAnimRaindropCallback,
};
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->x2++;
sprite->y2 += 4;
}
if (sprite->animEnded)
{
DestroySprite(sprite);
}
}
|