more pokemon anim funcs
This commit is contained in:
+190
-2147
File diff suppressed because it is too large
Load Diff
+821
-6
@@ -4,10 +4,11 @@
|
|||||||
#include "pokemon_animation.h"
|
#include "pokemon_animation.h"
|
||||||
#include "trig.h"
|
#include "trig.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
|
#include "blend_palette.h"
|
||||||
|
|
||||||
struct UnkAnimStruct
|
struct UnkAnimStruct
|
||||||
{
|
{
|
||||||
s16 field_0;
|
u16 field_0;
|
||||||
s16 field_2;
|
s16 field_2;
|
||||||
s16 field_4;
|
s16 field_4;
|
||||||
s16 field_6;
|
s16 field_6;
|
||||||
@@ -172,6 +173,8 @@ void pokemonanimfunc_94(struct Sprite *sprite);
|
|||||||
void pokemonanimfunc_95(struct Sprite *sprite);
|
void pokemonanimfunc_95(struct Sprite *sprite);
|
||||||
void pokemonanimfunc_96(struct Sprite *sprite);
|
void pokemonanimfunc_96(struct Sprite *sprite);
|
||||||
|
|
||||||
|
void SpriteCB_SetDummyOnAnimEnd(struct Sprite *sprite);
|
||||||
|
|
||||||
// const rom data
|
// const rom data
|
||||||
static const u8 sSpeciesToBackAnimId[] =
|
static const u8 sSpeciesToBackAnimId[] =
|
||||||
{
|
{
|
||||||
@@ -591,7 +594,13 @@ static const u8 sSpeciesToBackAnimId[] =
|
|||||||
|
|
||||||
const u8 gUnknown_0860AA64[] = {0x00, 0x05, 0x01, 0x01, 0x00, 0x0f, 0x01, 0x04, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x00, 0xff};
|
const u8 gUnknown_0860AA64[] = {0x00, 0x05, 0x01, 0x01, 0x00, 0x0f, 0x01, 0x04, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x00, 0x02, 0x00, 0xff};
|
||||||
|
|
||||||
const u8 gUnknown_0860AA80[] = {0x06, 0x1e, 0xfe, 0x0f, 0x06, 0x1e, 0xff, 0x00};
|
const u8 gUnknown_0860AA80[][2] =
|
||||||
|
{
|
||||||
|
{6, 30},
|
||||||
|
{0xFE, 15},
|
||||||
|
{6, 30},
|
||||||
|
{0xFF, 0}
|
||||||
|
};
|
||||||
|
|
||||||
static void (* const sMonAnimFunctions[])(struct Sprite *sprite) =
|
static void (* const sMonAnimFunctions[])(struct Sprite *sprite) =
|
||||||
{
|
{
|
||||||
@@ -825,6 +834,8 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_860AD68[] =
|
|||||||
gSpriteAffineAnim_860AD58
|
gSpriteAffineAnim_860AD58
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern const s8 gUnknown_0860AD70[][3];
|
||||||
|
|
||||||
// code
|
// code
|
||||||
void MonAnimDummySpriteCallback(struct Sprite *sprite)
|
void MonAnimDummySpriteCallback(struct Sprite *sprite)
|
||||||
{
|
{
|
||||||
@@ -919,7 +930,7 @@ void sub_817F60C(struct Sprite *sprite)
|
|||||||
sprite->callback = MonAnimDummySpriteCallback;
|
sprite->callback = MonAnimDummySpriteCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_817F618(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation)
|
void SetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation)
|
||||||
{
|
{
|
||||||
u8 matrixNum;
|
u8 matrixNum;
|
||||||
struct ObjAffineSrcData affineSrcData;
|
struct ObjAffineSrcData affineSrcData;
|
||||||
@@ -938,7 +949,7 @@ void sub_817F618(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation)
|
|||||||
gOamMatrices[matrixNum].d = dest.d;
|
gOamMatrices[matrixNum].d = dest.d;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_817F670(struct Sprite *sprite)
|
void HandleStartAffineAnim(struct Sprite *sprite)
|
||||||
{
|
{
|
||||||
sprite->oam.affineMode = 3;
|
sprite->oam.affineMode = 3;
|
||||||
sprite->affineAnims = gSpriteAffineAnimTable_860AD68;
|
sprite->affineAnims = gSpriteAffineAnimTable_860AD68;
|
||||||
@@ -955,7 +966,7 @@ void sub_817F670(struct Sprite *sprite)
|
|||||||
sprite->affineAnimPaused = 1;
|
sprite->affineAnimPaused = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_817F6D4(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation)
|
void HandleSetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation)
|
||||||
{
|
{
|
||||||
if (!sprite->data[1])
|
if (!sprite->data[1])
|
||||||
{
|
{
|
||||||
@@ -963,7 +974,7 @@ void sub_817F6D4(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rotation)
|
|||||||
rotation *= -1;
|
rotation *= -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub_817F618(sprite, xScale, yScale, rotation);
|
SetAffineData(sprite, xScale, yScale, rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_817F70C(struct Sprite *sprite)
|
void sub_817F70C(struct Sprite *sprite)
|
||||||
@@ -1013,3 +1024,807 @@ void sub_817F77C(struct Sprite *sprite)
|
|||||||
sprite->oam.affineMode = 0;
|
sprite->oam.affineMode = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_01(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
HandleStartAffineAnim(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > 40)
|
||||||
|
{
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, 0);
|
||||||
|
sub_817F77C(sprite);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s16 var = (sprite->data[2] * 512 / 40) % 256;
|
||||||
|
|
||||||
|
sprite->data[4] = Sin(var, 32) + 256;
|
||||||
|
sprite->data[5] = Cos(var, 32) + 256;
|
||||||
|
HandleSetAffineData(sprite, sprite->data[4], sprite->data[5], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_02(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
if (sprite->data[2] > 40)
|
||||||
|
{
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
sprite->pos2.x = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s8 var;
|
||||||
|
|
||||||
|
if (!(sprite->data[2] & 1))
|
||||||
|
var = 1;
|
||||||
|
else
|
||||||
|
var = -1;
|
||||||
|
|
||||||
|
sprite->pos2.x = Sin((sprite->data[2] * 128 / 40) % 256, 6) * var;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_817F8FC(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > sprite->data[0])
|
||||||
|
{
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
sprite->pos2.x = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->pos2.x = Sin((sprite->data[2] * 384 / sprite->data[0]) % 256, 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_03(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sprite->data[0] = 40;
|
||||||
|
sub_817F8FC(sprite);
|
||||||
|
sprite->callback = sub_817F8FC;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_817F978(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > sprite->data[0])
|
||||||
|
{
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
sprite->pos2.y = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->pos2.y = -(Sin((sprite->data[2] * 384 / sprite->data[0]) % 256, 6));
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_04(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sprite->data[0] = 40;
|
||||||
|
sub_817F978(sprite);
|
||||||
|
sprite->callback = sub_817F978;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef NONMATCHING
|
||||||
|
void sub_817F9F4(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
s32 counter = sprite->data[2];
|
||||||
|
|
||||||
|
if (counter > 384)
|
||||||
|
{
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
sprite->pos2.x = 0;
|
||||||
|
sprite->pos2.y = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s32 divCounter = counter / 128;
|
||||||
|
|
||||||
|
switch (divCounter)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
sprite->pos2.y = -(Sin(counter % 128, sprite->data[0] * 2));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
sprite->pos2.y = -(Sin(counter - 256, sprite->data[0] * 3));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2] += 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
__attribute__((naked))
|
||||||
|
void sub_817F9F4(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
asm(".syntax unified\n\
|
||||||
|
push {r4,lr}\n\
|
||||||
|
adds r4, r0, 0\n\
|
||||||
|
movs r0, 0x32\n\
|
||||||
|
ldrsh r1, [r4, r0]\n\
|
||||||
|
movs r0, 0xC0\n\
|
||||||
|
lsls r0, 1\n\
|
||||||
|
cmp r1, r0\n\
|
||||||
|
ble _0817FA14\n\
|
||||||
|
ldr r0, =SpriteCB_SetDummyOnAnimEnd\n\
|
||||||
|
str r0, [r4, 0x1C]\n\
|
||||||
|
movs r0, 0\n\
|
||||||
|
strh r0, [r4, 0x24]\n\
|
||||||
|
b _0817FA5E\n\
|
||||||
|
.pool\n\
|
||||||
|
_0817FA14:\n\
|
||||||
|
adds r0, r1, 0\n\
|
||||||
|
cmp r1, 0\n\
|
||||||
|
bge _0817FA1C\n\
|
||||||
|
adds r0, 0x7F\n\
|
||||||
|
_0817FA1C:\n\
|
||||||
|
asrs r2, r0, 7\n\
|
||||||
|
lsls r0, r2, 16\n\
|
||||||
|
asrs r0, 16\n\
|
||||||
|
cmp r0, 0\n\
|
||||||
|
blt _0817FA60\n\
|
||||||
|
cmp r0, 0x1\n\
|
||||||
|
ble _0817FA48\n\
|
||||||
|
cmp r0, 0x3\n\
|
||||||
|
bgt _0817FA60\n\
|
||||||
|
ldr r2, =0xffffff00\n\
|
||||||
|
adds r1, r2\n\
|
||||||
|
lsls r0, r1, 16\n\
|
||||||
|
asrs r0, 16\n\
|
||||||
|
movs r1, 0x2E\n\
|
||||||
|
ldrsh r2, [r4, r1]\n\
|
||||||
|
lsls r1, r2, 1\n\
|
||||||
|
adds r1, r2\n\
|
||||||
|
lsls r1, 16\n\
|
||||||
|
b _0817FA56\n\
|
||||||
|
.pool\n\
|
||||||
|
_0817FA48:\n\
|
||||||
|
lsls r0, r2, 7\n\
|
||||||
|
subs r0, r1, r0\n\
|
||||||
|
lsls r0, 16\n\
|
||||||
|
asrs r0, 16\n\
|
||||||
|
movs r2, 0x2E\n\
|
||||||
|
ldrsh r1, [r4, r2]\n\
|
||||||
|
lsls r1, 17\n\
|
||||||
|
_0817FA56:\n\
|
||||||
|
asrs r1, 16\n\
|
||||||
|
bl Sin\n\
|
||||||
|
negs r0, r0\n\
|
||||||
|
_0817FA5E:\n\
|
||||||
|
strh r0, [r4, 0x26]\n\
|
||||||
|
_0817FA60:\n\
|
||||||
|
ldrh r0, [r4, 0x32]\n\
|
||||||
|
adds r0, 0xC\n\
|
||||||
|
strh r0, [r4, 0x32]\n\
|
||||||
|
pop {r4}\n\
|
||||||
|
pop {r0}\n\
|
||||||
|
bx r0\n\
|
||||||
|
.syntax divided");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // NONMATCHING
|
||||||
|
|
||||||
|
void pokemonanimfunc_1E(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sprite->data[0] = 4;
|
||||||
|
sub_817F9F4(sprite);
|
||||||
|
sprite->callback = sub_817F9F4;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_06(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
s32 counter = sprite->data[2];
|
||||||
|
|
||||||
|
if (counter > 768)
|
||||||
|
{
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
sprite->pos2.x = 0;
|
||||||
|
sprite->pos2.y = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s16 divCounter = counter / 128;
|
||||||
|
|
||||||
|
switch (divCounter)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
sprite->pos2.x = 0;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
counter = 0;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
sprite->pos2.x = -(counter % 128 * 8) / 128;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
sprite->pos2.x = (counter % 128) / 8 - 8;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
sprite->pos2.x = -(counter % 128 * 8) / 128 + 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->pos2.y = -(Sin(counter % 128, 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2] += 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_09(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
HandleStartAffineAnim(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > 40)
|
||||||
|
{
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, 0);
|
||||||
|
sub_817F77C(sprite);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s16 index = (sprite->data[2] * 256 / 40) % 256;
|
||||||
|
|
||||||
|
if (sprite->data[2] % 2 == 0)
|
||||||
|
{
|
||||||
|
sprite->data[4] = Sin(index, 32) + 256;
|
||||||
|
sprite->data[5] = Sin(index, 32) + 256;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->data[4] = Sin(index, 8) + 256;
|
||||||
|
sprite->data[5] = Sin(index, 8) + 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
HandleSetAffineData(sprite, sprite->data[4], sprite->data[5], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_817FC20(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
sprite->data[3] = 0;
|
||||||
|
|
||||||
|
if (gUnknown_0860AD70[sprite->data[3]][2] == sprite->data[2])
|
||||||
|
{
|
||||||
|
if (gUnknown_0860AD70[sprite->data[3]][2] == 0)
|
||||||
|
{
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->data[3]++;
|
||||||
|
sprite->data[2] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gUnknown_0860AD70[sprite->data[3]][2] == 0)
|
||||||
|
{
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->pos2.x += gUnknown_0860AD70[sprite->data[3]][0];
|
||||||
|
sprite->pos2.y += gUnknown_0860AD70[sprite->data[3]][1];
|
||||||
|
sprite->data[2]++;
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_0A(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sub_817FC20(sprite);
|
||||||
|
sprite->callback = sub_817FC20;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_817FCDC(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
s32 counter = sprite->data[2];
|
||||||
|
|
||||||
|
if (counter > 2304)
|
||||||
|
{
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
sprite->pos2.x = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->pos2.x = Sin(counter % 256, sprite->data[7]);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2] += sprite->data[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_0F(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sprite->data[0] = 60;
|
||||||
|
sprite->data[7] = 3;
|
||||||
|
sub_817FCDC(sprite);
|
||||||
|
sprite->callback = sub_817FCDC;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_817FD44(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
s32 counter = sprite->data[2];
|
||||||
|
|
||||||
|
if (counter > 2304)
|
||||||
|
{
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
sprite->pos2.y = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->pos2.y = Sin(counter % 256, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2] += sprite->data[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_10(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sprite->data[0] = 60;
|
||||||
|
sub_817FD44(sprite);
|
||||||
|
sprite->callback = sub_817FD44;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_11(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
if (sprite->data[2] > 512)
|
||||||
|
{
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
sprite->pos2.x = 0;
|
||||||
|
sprite->pos2.y = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s8 var;
|
||||||
|
s32 index, amplitude;
|
||||||
|
|
||||||
|
if (!(sprite->data[2] & 1))
|
||||||
|
var = 1;
|
||||||
|
else
|
||||||
|
var = -1;
|
||||||
|
|
||||||
|
amplitude = Sin(sprite->data[2] / 4, 8);
|
||||||
|
index = sprite->data[2] % 256;
|
||||||
|
|
||||||
|
sprite->pos2.y = Sin(index, amplitude) * var;
|
||||||
|
sprite->pos2.x = Cos(index, amplitude) * var;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2] += 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_817FE30(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
s16 id = sprite->data[0];
|
||||||
|
|
||||||
|
if (gUnknown_03001240[id].field_0 != 0)
|
||||||
|
{
|
||||||
|
gUnknown_03001240[id].field_0--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (sprite->data[2] == 0 && gUnknown_03001240[id].field_8 == 0)
|
||||||
|
{
|
||||||
|
HandleStartAffineAnim(sprite);
|
||||||
|
gUnknown_03001240[id].field_8++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sprite->data[2] > gUnknown_03001240[id].field_6)
|
||||||
|
{
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, 0);
|
||||||
|
|
||||||
|
if (gUnknown_03001240[id].field_4 > 1)
|
||||||
|
{
|
||||||
|
gUnknown_03001240[id].field_4--;
|
||||||
|
gUnknown_03001240[id].field_0 = 10;
|
||||||
|
sprite->data[2] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sub_817F77C(sprite);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->data[6] = Sin(sprite->data[2] % 256, 4096);
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[6]);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2] += 16;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_12(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
u8 id = sprite->data[0] = sub_817F758();
|
||||||
|
|
||||||
|
gUnknown_03001240[id].field_6 = 512;
|
||||||
|
gUnknown_03001240[id].field_0 = 0;
|
||||||
|
sub_817FE30(sprite);
|
||||||
|
sprite->callback = sub_817FE30;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_817FF3C(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
u8 id = sprite->data[0];
|
||||||
|
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
HandleStartAffineAnim(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > gUnknown_03001240[id].field_0)
|
||||||
|
{
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, 0);
|
||||||
|
sub_817F77C(sprite);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->data[6] = (65536 / gUnknown_03001240[id].field_8) * sprite->data[2];
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, sprite->data[6]);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_1F(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
u8 id = sprite->data[0] = sub_817F758();
|
||||||
|
|
||||||
|
gUnknown_03001240[id].field_0 = 60;
|
||||||
|
gUnknown_03001240[id].field_8 = 20;
|
||||||
|
sub_817FF3C(sprite);
|
||||||
|
sprite->callback = sub_817FF3C;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_817FFF0(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
u8 id = sprite->data[0];
|
||||||
|
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > gUnknown_03001240[id].field_6)
|
||||||
|
{
|
||||||
|
sprite->pos2.x = 0;
|
||||||
|
sprite->pos2.y = 0;
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s16 index = (sprite->data[2] + 192) % 256;
|
||||||
|
|
||||||
|
sprite->pos2.x = -(Cos(index, gUnknown_03001240[id].field_8 * 2));
|
||||||
|
sprite->pos2.y = Sin(index, gUnknown_03001240[id].field_8) + gUnknown_03001240[id].field_8;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2] += gUnknown_03001240[id].field_2;
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_14(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
u8 id = sprite->data[0] = sub_817F758();
|
||||||
|
|
||||||
|
gUnknown_03001240[id].field_6 = 512;
|
||||||
|
gUnknown_03001240[id].field_8 = 6;
|
||||||
|
gUnknown_03001240[id].field_2 = 24;
|
||||||
|
sub_817FFF0(sprite);
|
||||||
|
sprite->callback = sub_817FFF0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_15(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
sprite->data[7] = (sprite->oam.paletteNum * 16) + 256;
|
||||||
|
|
||||||
|
if (sprite->data[2] > 128)
|
||||||
|
{
|
||||||
|
BlendPalette(sprite->data[7], 0x10, 0, 0);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->data[6] = Sin(sprite->data[2], 16);
|
||||||
|
BlendPalette(sprite->data[7], 0x10, sprite->data[6], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_16(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
s16 index1 = 0, index2 = 0;
|
||||||
|
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
HandleStartAffineAnim(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > 40)
|
||||||
|
{
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, 0);
|
||||||
|
sub_817F77C(sprite);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index2 = (sprite->data[2] * 128) / 40;
|
||||||
|
|
||||||
|
if (sprite->data[2] >= 10 && sprite->data[2] <= 29)
|
||||||
|
{
|
||||||
|
sprite->data[7] += 51;
|
||||||
|
index1 = 0xFF & sprite->data[7];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sprite->data[1] == 0)
|
||||||
|
sprite->data[4] = (Sin(index2, 40) - 256) + Sin(index1, 16);
|
||||||
|
else
|
||||||
|
sprite->data[4] = (256 - Sin(index2, 40)) - Sin(index1, 16);
|
||||||
|
|
||||||
|
sprite->data[5] = Sin(index2, 16) + 256;
|
||||||
|
SetAffineData(sprite, sprite->data[4], sprite->data[5], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_17(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
s16 posY = 0, index1 = 0, index2 = 0;
|
||||||
|
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
HandleStartAffineAnim(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > 40)
|
||||||
|
{
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, 0);
|
||||||
|
sub_817F77C(sprite);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
sprite->pos2.y = posY;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index2 = (sprite->data[2] * 128) / 40;
|
||||||
|
|
||||||
|
if (sprite->data[2] >= 10 && sprite->data[2] <= 29)
|
||||||
|
{
|
||||||
|
sprite->data[7] += 51;
|
||||||
|
index1 = 0xFF & sprite->data[7];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sprite->data[1] == 0)
|
||||||
|
sprite->data[4] = -(Sin(index2, 16)) - 256;
|
||||||
|
else
|
||||||
|
sprite->data[4] = Sin(index2, 16) + 256;
|
||||||
|
|
||||||
|
sprite->data[5] = (256 - Sin(index2, 40)) - Sin(index1, 8);
|
||||||
|
|
||||||
|
if (sprite->data[5] != 256)
|
||||||
|
posY = (256 - sprite->data[5]) / 8;
|
||||||
|
|
||||||
|
sprite->pos2.y = -(posY);
|
||||||
|
SetAffineData(sprite, sprite->data[4], sprite->data[5], 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_818031C(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
u8 index = sprite->data[2];
|
||||||
|
u8 var7 = sprite->data[6];
|
||||||
|
u8 var5 = gUnknown_0860AA80[sprite->data[5]][0];
|
||||||
|
u8 var6 = gUnknown_0860AA80[sprite->data[5]][1];
|
||||||
|
u8 amplitude = 0;
|
||||||
|
|
||||||
|
if (var5 != 0xFE)
|
||||||
|
amplitude = (var6 - var7) * var5 / var6;
|
||||||
|
else
|
||||||
|
amplitude = 0;
|
||||||
|
|
||||||
|
if (var5 == 0xFF)
|
||||||
|
{
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
sprite->pos2.y = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->pos2.y = Sin(index, amplitude);
|
||||||
|
|
||||||
|
if (var7 == var6)
|
||||||
|
{
|
||||||
|
sprite->data[5]++;
|
||||||
|
sprite->data[6] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->data[2] += sprite->data[0];
|
||||||
|
sprite->data[6]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_19(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sprite->data[0] = 48;
|
||||||
|
sub_818031C(sprite);
|
||||||
|
sprite->callback = sub_818031C;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_1A(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
u8 counter = 0;
|
||||||
|
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
counter = sprite->data[2];
|
||||||
|
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
HandleStartAffineAnim(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > 35)
|
||||||
|
{
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, 0);
|
||||||
|
sub_817F77C(sprite);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
sprite->pos2.x = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s16 index = ((counter - 10) * 128) / 20;
|
||||||
|
|
||||||
|
if (counter < 10)
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, counter / 2 * 512);
|
||||||
|
else if (counter >= 10 && counter <= 29)
|
||||||
|
sprite->pos2.x = -(Sin(index, 5));
|
||||||
|
else
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, (35 - counter) / 2 * 1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_1B(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
HandleStartAffineAnim(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > 100)
|
||||||
|
{
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, 0);
|
||||||
|
sprite->pos2.y = 0;
|
||||||
|
sub_817F77C(sprite);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s16 index = (sprite->data[2] * 256) / 100;
|
||||||
|
sprite->pos2.y = Sin(index, 10);
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, Sin(index, 3276));
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_81804F8(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
s32 var = 0;
|
||||||
|
s16 index = 0;
|
||||||
|
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
HandleStartAffineAnim(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > 100)
|
||||||
|
{
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, 0);
|
||||||
|
sprite->pos2.y = 0;
|
||||||
|
sub_817F77C(sprite);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index = (sprite->data[2] * 256) / 100;
|
||||||
|
var = (sprite->data[2] * 512) / 100;
|
||||||
|
var &= 0xFF;
|
||||||
|
sprite->pos2.y = Sin(index, sprite->data[0]);
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, Sin(var, 3276));
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_1C(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sprite->data[0] = 10;
|
||||||
|
sub_81804F8(sprite);
|
||||||
|
sprite->callback = sub_81804F8;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_81805B0(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
s32 var = 0;
|
||||||
|
s16 index = 0;
|
||||||
|
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
HandleStartAffineAnim(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > 100)
|
||||||
|
{
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, 0);
|
||||||
|
sprite->pos2.y = 0;
|
||||||
|
sub_817F77C(sprite);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index = (sprite->data[2] * 256) / 100;
|
||||||
|
var = (sprite->data[2] * 512) / 100;
|
||||||
|
var &= 0xFF;
|
||||||
|
sprite->pos2.y = -(Sin(index / 2, sprite->data[0] * 2));
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, Sin(var, 3276));
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_18(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
sprite->data[0] = 5;
|
||||||
|
sub_81805B0(sprite);
|
||||||
|
sprite->callback = sub_81805B0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pokemonanimfunc_1D(struct Sprite *sprite)
|
||||||
|
{
|
||||||
|
s32 var;
|
||||||
|
s16 index = 0;
|
||||||
|
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
var = 0;
|
||||||
|
|
||||||
|
if (sprite->data[2] == 0)
|
||||||
|
HandleStartAffineAnim(sprite);
|
||||||
|
|
||||||
|
if (sprite->data[2] > 100)
|
||||||
|
{
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, 0);
|
||||||
|
sprite->pos2.x = 0;
|
||||||
|
sub_817F77C(sprite);
|
||||||
|
sprite->callback = SpriteCB_SetDummyOnAnimEnd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s16 toDiv = 100;
|
||||||
|
|
||||||
|
index = (sprite->data[2] * 256) / toDiv;
|
||||||
|
var = (sprite->data[2] * 512) / toDiv;
|
||||||
|
var &= 0xFF;
|
||||||
|
sprite->pos2.x = Sin(index, 8);
|
||||||
|
HandleSetAffineData(sprite, 0x100, 0x100, Sin(var, 3276));
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite->data[2]++;
|
||||||
|
sub_817F70C(sprite);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user