blob: 6c7e36190a742ab2da3a380ab1ade1345f54d306 (
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
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
#include "global.h"
#include "rom_8077ABC.h"
#include "sound.h"
#include "trig.h"
extern s16 gBattleAnimArgs[];
extern u8 gAnimBankTarget;
extern u8 gUnknown_0202F7D2;
void sub_80DDBD8(struct Sprite *);
void sub_80DDC4C(struct Sprite *);
void sub_80DDCC8(struct Sprite *);
void sub_80DDB6C(struct Sprite *sprite) {
InitAnimSpritePos(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2);
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3);
sub_8078BD4(sprite);
sprite->callback = sub_80DDBD8;
sprite->data[6] = 0x10;
REG_BLDCNT = 0x3F40;
REG_BLDALPHA = sprite->data[6];
}
void sub_80DDBD8(struct Sprite *sprite) {
s16 r0;
s16 r2;
sub_80DDCC8(sprite);
if (TranslateAnimSpriteByDeltas(sprite)) {
sprite->callback = sub_80DDC4C;
return;
}
sprite->pos2.x += Sin(sprite->data[5], 10);
sprite->pos2.y += Cos(sprite->data[5], 15);
r2 = sprite->data[5];
sprite->data[5] = (sprite->data[5] + 5) & 0xFF;
r0 = sprite->data[5];
if (r2 != 0) {
if (r2 <= 0xC4)
return;
}
if (r0 <= 0)
return;
PlaySE12WithPanning(0xC4, gUnknown_0202F7D2);
}
void sub_80DDC4C(struct Sprite *sprite)
{
s16 r2;
s16 r0;
sprite->data[0] = 1;
TranslateAnimSpriteByDeltas(sprite);
sprite->pos2.x += Sin(sprite->data[5],10);
sprite->pos2.y += Cos(sprite->data[5],15);
r2 = sprite->data[5];
sprite->data[5] = (sprite->data[5] + 5) & 0xFF;
r0 = sprite->data[5];
if(r2 == 0 || r2 > 0xC4)
{
if(r0 > 0)
PlaySE(0xC4);
}
if(sprite->data[6] == 0)
{
sprite->invisible = TRUE;
sprite->callback = sub_807861C;
}
else
sub_80DDCC8(sprite);
}
void sub_80DDCC8(struct Sprite *sprite)
{
s16 r0;
if(sprite->data[6] > 0xFF)
{
if(++sprite->data[6] == 0x10d)
sprite->data[6] = 0;
return;
}
r0 = sprite->data[7];
sprite->data[7]++;
if((r0 & 0xFF) == 0)
{
sprite->data[7] &= 0xff00;
if((sprite->data[7] & 0x100) != 0)
sprite->data[6]++;
else
sprite->data[6]--;
}
else
return;
REG_BLDALPHA = ((16 - sprite->data[6]) << 8) | sprite->data[6];
if(sprite->data[6] == 0 || sprite->data[6] == 16)
{
sprite->data[7] ^= 0x100;
}
if(sprite->data[6] == 0)
sprite->data[6] = 0x100;
}
|