mirror of https://github.com/zeldaret/tmc.git
108 lines
2.7 KiB
C
108 lines
2.7 KiB
C
/**
|
|
* @file moleMittsParticle.c
|
|
* @ingroup Objects
|
|
*
|
|
* @brief Mole Mitts Particle object
|
|
*/
|
|
#define NENT_DEPRECATED
|
|
#include "area.h"
|
|
#include "functions.h"
|
|
#include "global.h"
|
|
#include "object.h"
|
|
|
|
void MoleMittsParticle_Init(Entity*);
|
|
void MoleMittsParticle_Action1(Entity*);
|
|
void sub_08087640(Entity*);
|
|
|
|
void MoleMittsParticle(Entity* this) {
|
|
static void (*const MoleMittsParticle_Actions[])(Entity*) = {
|
|
MoleMittsParticle_Init,
|
|
MoleMittsParticle_Action1,
|
|
};
|
|
if (!EntityIsDeleted(this)) {
|
|
MoleMittsParticle_Actions[this->action](this);
|
|
}
|
|
}
|
|
|
|
void MoleMittsParticle_Init(Entity* this) {
|
|
u32 palette;
|
|
|
|
this->action = 1;
|
|
this->animationState = gPlayerEntity.animationState >> 1;
|
|
this->spriteRendering.b3 = 2;
|
|
this->spritePriority.b0 = 3;
|
|
this->spriteOrientation.flipY--;
|
|
if (this->type2 != 0) {
|
|
this->palette.b.b0 = 1;
|
|
if (this->animationState == 1) {
|
|
this->spriteSettings.flipX = 1;
|
|
}
|
|
sub_08087640(this);
|
|
} else {
|
|
if (gArea.locationIndex == 0x10) {
|
|
palette = 0x16a;
|
|
} else {
|
|
palette = 4;
|
|
}
|
|
ChangeObjPalette(this, palette);
|
|
switch (this->animationState) {
|
|
case 3:
|
|
if (this->type == 0x40) {
|
|
this->y.HALF.HI += 4;
|
|
}
|
|
break;
|
|
case 1:
|
|
this->spriteSettings.flipX = 1;
|
|
if (this->type == 0x40) {
|
|
this->y.HALF.HI += 4;
|
|
}
|
|
break;
|
|
default:
|
|
if (this->type == 0x40) {
|
|
this->spriteSettings.flipX = 1;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
SetDefaultPriority(this, 3);
|
|
InitializeAnimation(this, this->type2 * 4 + this->animationState);
|
|
}
|
|
|
|
void MoleMittsParticle_Action1(Entity* this) {
|
|
GetNextFrame(this);
|
|
if ((this->frame & ANIM_DONE) != 0) {
|
|
DeleteThisEntity();
|
|
}
|
|
if (this->type2 != 0) {
|
|
this->spritePriority.b0 = gPlayerEntity.spritePriority.b0 + 1 - this->frame;
|
|
}
|
|
}
|
|
|
|
void sub_08087640(Entity* this) {
|
|
static const s8 gUnk_081208C0[] = { 0, -12, 16, 0, 0, 15, -16, 0 };
|
|
s32 oldX;
|
|
s32 oldY;
|
|
u32 tmp;
|
|
const s8* ptr;
|
|
|
|
oldX = this->x.HALF.HI;
|
|
oldY = this->y.HALF.HI;
|
|
ptr = &gUnk_081208C0[this->animationState * 2];
|
|
this->x.HALF.HI += ptr[0];
|
|
this->y.HALF.HI += ptr[1];
|
|
if (gRoomControls.area == 3 && gRoomControls.room == 4) {
|
|
#ifdef EU
|
|
tmp = 0x18;
|
|
} else {
|
|
tmp = 0x17;
|
|
#else
|
|
tmp = 0x17;
|
|
} else {
|
|
tmp = 0x16;
|
|
#endif
|
|
}
|
|
CreateRandomItemDrop(this, tmp);
|
|
this->x.HALF.HI = oldX;
|
|
this->y.HALF.HI = oldY;
|
|
}
|