summaryrefslogtreecommitdiff
path: root/src/enemy
diff options
context:
space:
mode:
authoroctorock <79596758+octorock@users.noreply.github.com>2023-07-30 23:56:42 +0200
committeroctorock <79596758+octorock@users.noreply.github.com>2023-12-29 22:56:38 +0100
commitc63a86fbcac78c1773b31383a8837a508c649971 (patch)
treec6dfd8950b4afaaf1281b525b818261afe191944 /src/enemy
parentb28f865051ab27862d14077a046f2eea6e72191e (diff)
Create some enemy structs
Diffstat (limited to 'src/enemy')
-rw-r--r--src/enemy/acroBandits.c670
-rw-r--r--src/enemy/armos.c8
-rw-r--r--src/enemy/ballChainSoldier.c18
-rw-r--r--src/enemy/beetle.c367
-rw-r--r--src/enemy/bladeTrap.c32
-rw-r--r--src/enemy/bobomb.c359
-rw-r--r--src/enemy/bombPeahat.c821
-rw-r--r--src/enemy/bombarossa.c18
-rw-r--r--src/enemy/bowMoblin.c14
-rw-r--r--src/enemy/businessScrub.c477
-rw-r--r--src/enemy/businessScrubPrologue.c62
-rw-r--r--src/enemy/chaser.c2
-rw-r--r--src/enemy/chuchu.c840
-rw-r--r--src/enemy/chuchuBoss.c5
-rw-r--r--src/enemy/cloudPiranha.c2
-rw-r--r--src/enemy/crow.c8
-rw-r--r--src/enemy/cuccoAggr.c24
-rw-r--r--src/enemy/cuccoChickAggr.c2
-rw-r--r--src/enemy/curtain.c7
-rw-r--r--src/enemy/darkNut.c582
-rw-r--r--src/enemy/doorMimic.c135
-rw-r--r--src/enemy/dust.c14
-rw-r--r--src/enemy/enemy4D.c5
-rw-r--r--src/enemy/enemy50.c4
-rw-r--r--src/enemy/enemy64.c4
-rw-r--r--src/enemy/enemy66.c7
-rw-r--r--src/enemy/enemyE.c4
-rw-r--r--src/enemy/eyegore.c6
-rw-r--r--src/enemy/fallingBoulder.c201
-rw-r--r--src/enemy/fireballGuy.c128
-rw-r--r--src/enemy/flyingPot.c2
-rw-r--r--src/enemy/flyingSkull.c20
-rw-r--r--src/enemy/ghini.c4
-rw-r--r--src/enemy/gibdo.c28
-rw-r--r--src/enemy/gleerok.c34
-rw-r--r--src/enemy/gyorgChild.c11
-rw-r--r--src/enemy/gyorgFemale.c54
-rw-r--r--src/enemy/gyorgFemaleEye.c13
-rw-r--r--src/enemy/gyorgFemaleMouth.c9
-rw-r--r--src/enemy/gyorgMale.c8
-rw-r--r--src/enemy/gyorgMaleEye.c4
-rw-r--r--src/enemy/hangingSeed.c4
-rw-r--r--src/enemy/helmasaur.c431
-rw-r--r--src/enemy/keaton.c270
-rw-r--r--src/enemy/keese.c1
-rw-r--r--src/enemy/lakitu.c298
-rw-r--r--src/enemy/lakituCloud.c142
-rw-r--r--src/enemy/leever.c162
-rw-r--r--src/enemy/likeLike.c5
-rw-r--r--src/enemy/madderpillar.c512
-rw-r--r--src/enemy/mazaalBracelet.c66
-rw-r--r--src/enemy/mazaalHand.c2
-rw-r--r--src/enemy/mazaalHead.c2
-rw-r--r--src/enemy/mazaalMacro.c216
-rw-r--r--src/enemy/miniFireballGuy.c94
-rw-r--r--src/enemy/miniSlime.c127
-rw-r--r--src/enemy/moldorm.c4
-rw-r--r--src/enemy/moldworm.c2
-rw-r--r--src/enemy/mulldozer.c2
-rw-r--r--src/enemy/octorok.c20
-rw-r--r--src/enemy/octorokGolden.c9
-rw-r--r--src/enemy/peahat.c467
-rw-r--r--src/enemy/pesto.c76
-rw-r--r--src/enemy/puffstool.c90
-rw-r--r--src/enemy/rockChuchu.c30
-rw-r--r--src/enemy/rollobite.c335
-rw-r--r--src/enemy/rope.c228
-rw-r--r--src/enemy/ropeGolden.c173
-rw-r--r--src/enemy/rupeeLike.c329
-rw-r--r--src/enemy/scissorsBeetle.c22
-rw-r--r--src/enemy/sensorBladeTrap.c87
-rw-r--r--src/enemy/slime.c144
-rw-r--r--src/enemy/sluggula.c16
-rw-r--r--src/enemy/smallPesto.c164
-rw-r--r--src/enemy/spark.c18
-rw-r--r--src/enemy/spearMoblin.c32
-rw-r--r--src/enemy/spikedBeetle.c2
-rw-r--r--src/enemy/spinyBeetle.c8
-rw-r--r--src/enemy/spinyChuchu.c2
-rw-r--r--src/enemy/stalfos.c2
-rw-r--r--src/enemy/takkuri.c26
-rw-r--r--src/enemy/tektite.c2
-rw-r--r--src/enemy/tektiteGolden.c2
-rw-r--r--src/enemy/torchTrap.c10
-rw-r--r--src/enemy/treeItem.c5
-rw-r--r--src/enemy/vaatiArm.c20
-rw-r--r--src/enemy/vaatiBall.c8
-rw-r--r--src/enemy/vaatiEyesMacro.c2
-rw-r--r--src/enemy/vaatiProjectile.c2
-rw-r--r--src/enemy/vaatiRebornEnemy.c4
-rw-r--r--src/enemy/vaatiTransfigured.c4
-rw-r--r--src/enemy/vaatiTransfiguredEye.c6
-rw-r--r--src/enemy/vaatiWrath.c6
-rw-r--r--src/enemy/vaatiWrathEye.c2
-rw-r--r--src/enemy/wallMaster.c10
-rw-r--r--src/enemy/wallMaster2.c2
-rw-r--r--src/enemy/waterDrop.c12
-rw-r--r--src/enemy/wisp.c16
-rw-r--r--src/enemy/wizzrobeFire.c4
-rw-r--r--src/enemy/wizzrobeIce.c4
-rw-r--r--src/enemy/wizzrobeWind.c4
101 files changed, 5074 insertions, 4684 deletions
diff --git a/src/enemy/acroBandits.c b/src/enemy/acroBandits.c
index 86d5d1db..eb2af238 100644
--- a/src/enemy/acroBandits.c
+++ b/src/enemy/acroBandits.c
@@ -4,85 +4,101 @@
*
* @brief Acro Bandits enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[4];
+ /*0x6c*/ u8 unk_6c;
+ /*0x6d*/ u8 unused2[1];
+ /*0x6e*/ u8 unk_6e;
+ /*0x6f*/ u8 unk_6f;
+ /*0x70*/ u16 unk_70;
+ /*0x72*/ u16 unk_72;
+ /*0x74*/ union SplitHWord unk_74;
+ /*0x76*/ union SplitHWord unk_76;
+ /*0x78*/ u8 unk_78;
+ /*0x79*/ u8 unk_79;
+ /*0x7a*/ u8 unk_7a;
+ /*0x7b*/ u8 unused6[1];
+ /*0x7c*/ Entity* unk_7c;
+} AcroBanditEntity;
+
extern Entity* gUnk_020000B0;
-static void sub_08031E48(Entity* this, Entity* child);
-static void sub_08032290(Entity* this);
-static bool32 sub_080322A4(Entity* this);
-static void sub_08032338(Entity* this);
-static void sub_080322E8(Entity* this);
-static bool32 sub_08031E04(Entity* this);
-
-void AcroBandit_OnTick(Entity* this);
-void AcroBandit_OnCollision(Entity* this);
-void AcroBandit_OnKnockback(Entity* this);
-void GenericDeath(Entity* this);
-void GenericConfused(Entity* this);
-void AcroBandit_OnGrabbed(Entity* this);
-void AcroBandit_Type0(Entity* this);
-void AcroBandit_Type1(Entity* this);
-void AcroBandit_Type0Action0(Entity* this);
-void AcroBandit_Type0Action1(Entity* this);
-void AcroBandit_Type0Action2(Entity* this);
-void AcroBandit_Type0Action3(Entity* this);
-void AcroBandit_Type0Action4(Entity* this);
-void AcroBandit_Type0Action5(Entity* this);
-void AcroBandit_Type0Action6(Entity* this);
-void AcroBandit_Type0Action7(Entity* this);
-void AcroBandit_Type0Action8(Entity* this);
-void AcroBandit_Type1Init(Entity* this);
-void AcroBandit_Type1Action1(Entity* this);
-void AcroBandit_Type1Action2(Entity* this);
-void AcroBandit_Type1Action3(Entity* this);
-void AcroBandit_Type1Action4(Entity* this);
-void AcroBandit_Type1Action5(Entity* this);
-void AcroBandit_Type1Action6(Entity* this);
-void AcroBandit_Type1Action7(Entity* this);
-void AcroBandit_Type1Action8(Entity* this);
-void AcroBandit_Type1Action9(Entity* this);
-
-static void (*const AcroBandit_Functions[])(Entity*) = {
+static void sub_08031E48(AcroBanditEntity* this, AcroBanditEntity* child);
+static void sub_08032290(AcroBanditEntity* this);
+static bool32 sub_080322A4(AcroBanditEntity* this);
+static void sub_08032338(AcroBanditEntity* this);
+static void sub_080322E8(AcroBanditEntity* this);
+static bool32 sub_08031E04(AcroBanditEntity* this);
+
+void AcroBandit_OnTick(AcroBanditEntity* this);
+void AcroBandit_OnCollision(AcroBanditEntity* this);
+void AcroBandit_OnKnockback(AcroBanditEntity* this);
+void AcroBandit_OnGrabbed(AcroBanditEntity* this);
+void AcroBandit_Type0(AcroBanditEntity* this);
+void AcroBandit_Type1(AcroBanditEntity* this);
+void AcroBandit_Type0Action0(AcroBanditEntity* this);
+void AcroBandit_Type0Action1(AcroBanditEntity* this);
+void AcroBandit_Type0Action2(AcroBanditEntity* this);
+void AcroBandit_Type0Action3(AcroBanditEntity* this);
+void AcroBandit_Type0Action4(AcroBanditEntity* this);
+void AcroBandit_Type0Action5(AcroBanditEntity* this);
+void AcroBandit_Type0Action6(AcroBanditEntity* this);
+void AcroBandit_Type0Action7(AcroBanditEntity* this);
+void AcroBandit_Type0Action8(AcroBanditEntity* this);
+void AcroBandit_Type1Init(AcroBanditEntity* this);
+void AcroBandit_Type1Action1(AcroBanditEntity* this);
+void AcroBandit_Type1Action2(AcroBanditEntity* this);
+void AcroBandit_Type1Action3(AcroBanditEntity* this);
+void AcroBandit_Type1Action4(AcroBanditEntity* this);
+void AcroBandit_Type1Action5(AcroBanditEntity* this);
+void AcroBandit_Type1Action6(AcroBanditEntity* this);
+void AcroBandit_Type1Action7(AcroBanditEntity* this);
+void AcroBandit_Type1Action8(AcroBanditEntity* this);
+void AcroBandit_Type1Action9(AcroBanditEntity* this);
+
+static void (*const AcroBandit_Functions[])(AcroBanditEntity*) = {
AcroBandit_OnTick, AcroBandit_OnCollision, AcroBandit_OnKnockback,
- GenericDeath, GenericConfused, AcroBandit_OnGrabbed,
+ (void (*)(AcroBanditEntity*))GenericDeath, (void (*)(AcroBanditEntity*))GenericConfused, AcroBandit_OnGrabbed,
};
-void AcroBandit(Entity* this) {
+void AcroBandit(AcroBanditEntity* this) {
s32 index;
- index = sub_080012DC(this);
+ index = sub_080012DC(super);
if (index) {
- if ((this->gustJarState & 1) == 0)
+ if ((super->gustJarState & 1) == 0)
sub_08032338(this);
- gUnk_080012C8[index](this);
+ gUnk_080012C8[index](super);
} else {
- AcroBandit_Functions[GetNextFunction(this)](this);
- SetChildOffset(this, 0, 1, -0x10);
+ AcroBandit_Functions[GetNextFunction(super)](this);
+ SetChildOffset(super, 0, 1, -0x10);
}
}
-void AcroBandit_OnTick(Entity* this) {
- static void (*const typeFuncs[])(Entity*) = {
+void AcroBandit_OnTick(AcroBanditEntity* this) {
+ static void (*const typeFuncs[])(AcroBanditEntity*) = {
AcroBandit_Type0,
AcroBandit_Type1,
};
- typeFuncs[this->type](this);
+ typeFuncs[super->type](this);
}
-void AcroBandit_OnCollision(Entity* this) {
+void AcroBandit_OnCollision(AcroBanditEntity* this) {
Entity* brother;
- if (this->contactFlags != 0x80 && this->contactFlags != 0x81) {
- if (this->type == 1) {
- if (this->action < 7 && this->knockbackDuration != 0) {
- brother = this->child;
+ if (super->contactFlags != 0x80 && super->contactFlags != 0x81) {
+ if (super->type == 1) {
+ if (super->action < 7 && super->knockbackDuration != 0) {
+ brother = super->child;
if (brother != NULL) {
- brother->parent = this->parent;
+ brother->parent = super->parent;
do {
brother->action = 5;
brother->spritePriority.b1 = 1;
@@ -90,469 +106,469 @@ void AcroBandit_OnCollision(Entity* this) {
brother->iframes = -12;
} while (brother = brother->child, brother != NULL);
}
- if (this->parent != NULL) {
- this->parent->child = this->child;
+ if (super->parent != NULL) {
+ super->parent->child = super->child;
} else {
- if (this->child != NULL)
- this->parent = this;
+ if (super->child != NULL)
+ super->parent = super;
}
- this->action = 9;
- this->spritePriority.b1 = 1;
- if (this->knockbackDirection < 0x10) {
- this->spriteSettings.flipX = 0;
+ super->action = 9;
+ super->spritePriority.b1 = 1;
+ if (super->knockbackDirection < 0x10) {
+ super->spriteSettings.flipX = 0;
} else {
- this->spriteSettings.flipX = 1;
+ super->spriteSettings.flipX = 1;
}
- InitializeAnimation(this, 14);
+ InitializeAnimation(super, 14);
}
- if (this->health == 0) {
- this->knockbackDirection = DirectionNormalize((this->knockbackDirection + (7 & Random())) - 4);
- this->knockbackDuration += this->type2 * 3;
+ if (super->health == 0) {
+ super->knockbackDirection = DirectionNormalize((super->knockbackDirection + (7 & Random())) - 4);
+ super->knockbackDuration += super->type2 * 3;
sub_08032338(this);
}
}
- if (this->knockbackDuration != 0 && this->frame & 0x10) {
- if (this->type == 0) {
- this->action = 8;
+ if (super->knockbackDuration != 0 && super->frame & 0x10) {
+ if (super->type == 0) {
+ super->action = 8;
} else {
- this->action = 9;
+ super->action = 9;
}
- if (this->knockbackDirection < 0x10) {
- this->spriteSettings.flipX = 0;
+ if (super->knockbackDirection < 0x10) {
+ super->spriteSettings.flipX = 0;
} else {
- this->spriteSettings.flipX = 1;
+ super->spriteSettings.flipX = 1;
}
- this->spritePriority.b1 = 1;
- InitializeAnimation(this, 14);
+ super->spritePriority.b1 = 1;
+ InitializeAnimation(super, 14);
}
}
- if (this->confusedTime)
- Create0x68FX(this, FX_STARS);
+ if (super->confusedTime)
+ Create0x68FX(super, FX_STARS);
- EnemyFunctionHandlerAfterCollision(this, AcroBandit_Functions);
+ EnemyFunctionHandlerAfterCollision(super, AcroBandit_Functions);
}
-void AcroBandit_OnKnockback(Entity* this) {
- if (this->iframes > 0)
- GravityUpdate(this, Q_8_8(24.0));
+void AcroBandit_OnKnockback(AcroBanditEntity* this) {
+ if (super->iframes > 0)
+ GravityUpdate(super, Q_8_8(24.0));
- GenericKnockback(this);
+ GenericKnockback(super);
}
-void AcroBandit_OnGrabbed(Entity* this) {
+void AcroBandit_OnGrabbed(AcroBanditEntity* this) {
}
-void AcroBandit_Type0(Entity* this) {
- static void (*const AcroBandit_Type0_Actions[])(Entity*) = {
+void AcroBandit_Type0(AcroBanditEntity* this) {
+ static void (*const AcroBandit_Type0_Actions[])(AcroBanditEntity*) = {
AcroBandit_Type0Action0, AcroBandit_Type0Action1, AcroBandit_Type0Action2,
AcroBandit_Type0Action3, AcroBandit_Type0Action4, AcroBandit_Type0Action5,
AcroBandit_Type0Action6, AcroBandit_Type0Action7, AcroBandit_Type0Action8,
};
- AcroBandit_Type0_Actions[this->action](this);
+ AcroBandit_Type0_Actions[super->action](this);
}
-void AcroBandit_Type0Action0(Entity* this) {
- sub_0804A720(this);
- this->action = 1;
- this->field_0x74.HWORD = this->x.HALF.HI;
- this->field_0x76.HWORD = this->y.HALF.HI;
- this->field_0x78.HALF.HI = Random();
+void AcroBandit_Type0Action0(AcroBanditEntity* this) {
+ sub_0804A720(super);
+ super->action = 1;
+ this->unk_74.HWORD = super->x.HALF.HI;
+ this->unk_76.HWORD = super->y.HALF.HI;
+ this->unk_79 = Random();
}
-void AcroBandit_Type0Action1(Entity* this) {
+void AcroBandit_Type0Action1(AcroBanditEntity* this) {
u32 rand;
s32 x;
s32 y;
- if (this->timer != 0) {
- this->timer--;
+ if (super->timer != 0) {
+ super->timer--;
} else {
- if (sub_08049FDC(this, 1)) {
+ if (sub_08049FDC(super, 1)) {
rand = Random();
- x = this->field_0x74.HWORD + ((s32)rand % 5) * 0x10 - 0x20;
- y = this->field_0x76.HWORD + ((s32)(rand >> 4) % 5) * 0x10 - 0x20;
- if (sub_080B1B18(x, y, this->collisionLayer) == 0) {
- this->action = 2;
- this->spriteSettings.draw = 1;
- this->x.HALF.HI = x;
- this->y.HALF.HI = y;
- InitializeAnimation(this, 0);
+ x = this->unk_74.HWORD + ((s32)rand % 5) * 0x10 - 0x20;
+ y = this->unk_76.HWORD + ((s32)(rand >> 4) % 5) * 0x10 - 0x20;
+ if (sub_080B1B18(x, y, super->collisionLayer) == 0) {
+ super->action = 2;
+ super->spriteSettings.draw = 1;
+ super->x.HALF.HI = x;
+ super->y.HALF.HI = y;
+ InitializeAnimation(super, 0);
}
}
}
}
-void AcroBandit_Type0Action2(Entity* this) {
+void AcroBandit_Type0Action2(AcroBanditEntity* this) {
static const u8 timers[] = { 2, 2, 2, 3, 3, 3, 3, 4 };
- GetNextFrame(this);
- if (this->frame & 1) {
- this->frame = 0;
- COLLISION_ON(this);
+ GetNextFrame(super);
+ if (super->frame & 1) {
+ super->frame = 0;
+ COLLISION_ON(super);
} else {
- if (this->frame & ANIM_DONE) {
- this->action = 0x3;
- this->timer = timers[Random() & 7];
- InitializeAnimation(this, 1);
+ if (super->frame & ANIM_DONE) {
+ super->action = 0x3;
+ super->timer = timers[Random() & 7];
+ InitializeAnimation(super, 1);
}
}
}
-void AcroBandit_Type0Action3(Entity* this) {
+void AcroBandit_Type0Action3(AcroBanditEntity* this) {
if (sub_08031E04(this)) {
- this->action = 5;
- if (this->x.HALF.HI > gUnk_020000B0->x.HALF.HI) {
- this->spriteSettings.flipX = 0;
+ super->action = 5;
+ if (super->x.HALF.HI > gUnk_020000B0->x.HALF.HI) {
+ super->spriteSettings.flipX = 0;
} else {
- this->spriteSettings.flipX = 1;
+ super->spriteSettings.flipX = 1;
}
- InitializeAnimation(this, 3);
+ InitializeAnimation(super, 3);
} else {
- if ((this->frame & 1) && this->timer) {
- this->frame &= 0xfe;
- this->timer--;
+ if ((super->frame & 1) && super->timer) {
+ super->frame &= 0xfe;
+ super->timer--;
}
- GetNextFrame(this);
- if (this->timer == 0) {
- this->action = 4;
- COLLISION_OFF(this);
- InitializeAnimation(this, 2);
+ GetNextFrame(super);
+ if (super->timer == 0) {
+ super->action = 4;
+ COLLISION_OFF(super);
+ InitializeAnimation(super, 2);
}
}
}
-void AcroBandit_Type0Action4(Entity* this) {
+void AcroBandit_Type0Action4(AcroBanditEntity* this) {
static const u8 timers[] = { 60, 60, 90, 120, 120, 120, 120, 150 };
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 1;
- this->timer = timers[Random() & 7];
- this->spriteSettings.draw = 0;
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 1;
+ super->timer = timers[Random() & 7];
+ super->spriteSettings.draw = 0;
}
}
-void AcroBandit_Type0Action5(Entity* this) {
- Entity *a, *b;
+void AcroBandit_Type0Action5(AcroBanditEntity* this) {
+ AcroBanditEntity *a, *b;
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
if (gEntCount < MAX_ENTITIES - 4) {
u32 tmp = Random();
tmp &= 3;
- a = CreateEnemy(ACRO_BANDIT, 1);
- a->type2 = 0;
- a->parent = NULL;
- a->field_0x74.HALF.LO = tmp;
+ a = (AcroBanditEntity*) CreateEnemy(ACRO_BANDIT, 1);
+ a->base.type2 = 0;
+ a->base.parent = NULL;
+ a->unk_74.HALF.LO = tmp;
sub_08031E48(this, a);
- a->child = CreateEnemy(ACRO_BANDIT, 1);
+ a->base.child = CreateEnemy(ACRO_BANDIT, 1);
- b = a->child;
- b->type2 = 1;
- b->parent = a;
- b->field_0x74.HALF.LO = tmp;
+ b = (AcroBanditEntity*) a->base.child;
+ b->base.type2 = 1;
+ b->base.parent = &a->base;
+ b->unk_74.HALF.LO = tmp;
sub_08031E48(this, b);
- b->child = CreateEnemy(ACRO_BANDIT, 1);
+ b->base.child = CreateEnemy(ACRO_BANDIT, 1);
- a = b->child;
- a->type2 = 2;
- a->parent = b;
- a->field_0x74.HALF.LO = tmp;
+ a = (AcroBanditEntity*) b->base.child;
+ a->base.type2 = 2;
+ a->base.parent = &b->base;
+ a->unk_74.HALF.LO = tmp;
sub_08031E48(this, a);
- a->child = CreateEnemy(ACRO_BANDIT, 1);
+ a->base.child = CreateEnemy(ACRO_BANDIT, 1);
- b = a->child;
- b->type2 = 3;
- b->parent = a;
- b->field_0x74.HALF.LO = tmp;
+ b = (AcroBanditEntity*) a->base.child;
+ b->base.type2 = 3;
+ b->base.parent = &a->base;
+ b->unk_74.HALF.LO = tmp;
sub_08031E48(this, b);
- b->child = CreateEnemy(ACRO_BANDIT, 1);
+ b->base.child = CreateEnemy(ACRO_BANDIT, 1);
- a = b->child;
- a->type2 = 4;
- a->parent = b;
- a->child = NULL;
- a->field_0x74.HALF.LO = tmp;
+ a = (AcroBanditEntity*) b->base.child;
+ a->base.type2 = 4;
+ a->base.parent = &b->base;
+ a->base.child = NULL;
+ a->unk_74.HALF.LO = tmp;
sub_08031E48(this, a);
- this->action = 6;
- this->timer = 20;
- this->spritePriority.b0 = 7;
- InitializeAnimation(this, 7);
+ super->action = 6;
+ super->timer = 20;
+ super->spritePriority.b0 = 7;
+ InitializeAnimation(super, 7);
}
} else {
- if (this->frame & 1) {
- this->frame = 0;
- COLLISION_OFF(this);
+ if (super->frame & 1) {
+ super->frame = 0;
+ COLLISION_OFF(super);
}
}
}
-void AcroBandit_Type0Action6(Entity* this) {
- GetNextFrame(this);
- if (--this->timer == 0) {
- this->action = 7;
- COLLISION_OFF(this);
- this->timer = 5;
- this->spriteSettings.draw = 0;
+void AcroBandit_Type0Action6(AcroBanditEntity* this) {
+ GetNextFrame(super);
+ if (--super->timer == 0) {
+ super->action = 7;
+ COLLISION_OFF(super);
+ super->timer = 5;
+ super->spriteSettings.draw = 0;
}
}
-void AcroBandit_Type0Action7(Entity* this) {
- if ((this->timer & 0xF) == 0) {
- if (this->timer == 80) {
- DeleteEntity(this);
+void AcroBandit_Type0Action7(AcroBanditEntity* this) {
+ if ((super->timer & 0xF) == 0) {
+ if (super->timer == 80) {
+ DeleteEntity(super);
} else {
- this->action = 1;
- this->timer = 180;
+ super->action = 1;
+ super->timer = 180;
}
}
}
-void AcroBandit_Type0Action8(Entity* this) {
- if (this->frame & ANIM_DONE) {
- this->action = 1;
- this->timer = 180;
- this->spriteSettings.draw = 0;
+void AcroBandit_Type0Action8(AcroBanditEntity* this) {
+ if (super->frame & ANIM_DONE) {
+ super->action = 1;
+ super->timer = 180;
+ super->spriteSettings.draw = 0;
} else {
- GetNextFrame(this);
- if ((this->frame & 0xf) == 2) {
- COLLISION_OFF(this);
+ GetNextFrame(super);
+ if ((super->frame & 0xf) == 2) {
+ COLLISION_OFF(super);
}
}
}
-static bool32 sub_08031E04(Entity* this) {
+static bool32 sub_08031E04(AcroBanditEntity* this) {
static const s8 gUnk_080CE5C0[] = { -32, 0, 0, 32, 32, 0, 0, 0 };
- Entity* ent;
+ Entity* entity;
const s8* tmp;
- ent = sub_08049DF4(1);
- if (ent == NULL)
+ entity = sub_08049DF4(1);
+ if (entity == NULL)
return FALSE;
- tmp = &gUnk_080CE5C0[this->frame & 6];
- return EntityWithinDistance(this, ent->x.HALF.HI + tmp[0], ent->y.HALF.HI + tmp[1], 0x50);
+ tmp = &gUnk_080CE5C0[super->frame & 6];
+ return EntityWithinDistance(super, entity->x.HALF.HI + tmp[0], entity->y.HALF.HI + tmp[1], 0x50);
}
-static void sub_08031E48(Entity* this, Entity* child) {
- CopyPosition(this, child);
- child->field_0x6c.HALF.LO = this->field_0x6c.HALF.LO;
- child->field_0x70.HALF.LO = this->field_0x70.HALF.LO;
- child->field_0x70.HALF.HI = this->field_0x70.HALF.HI;
- child->field_0x6e.HALF.LO = this->field_0x6e.HALF.LO;
- child->field_0x6e.HALF.HI = this->field_0x6e.HALF.HI;
- child->field_0x7c.WORD = (s32)this;
+static void sub_08031E48(AcroBanditEntity* this, AcroBanditEntity* child) {
+ CopyPosition(super, &child->base);
+ child->unk_6c = this->unk_6c;
+ child->unk_70 = this->unk_70;
+ child->unk_72 = this->unk_72;
+ child->unk_6e = this->unk_6e;
+ child->unk_6f = this->unk_6f;
+ child->unk_7c = super;
}
-void AcroBandit_Type1(Entity* this) {
- static void (*const AcroBandit_Type1_Actions[])(Entity*) = {
+void AcroBandit_Type1(AcroBanditEntity* this) {
+ static void (*const AcroBandit_Type1_Actions[])(AcroBanditEntity*) = {
AcroBandit_Type1Init, AcroBandit_Type1Action1, AcroBandit_Type1Action2, AcroBandit_Type1Action3,
AcroBandit_Type1Action4, AcroBandit_Type1Action5, AcroBandit_Type1Action6, AcroBandit_Type1Action7,
AcroBandit_Type1Action8, AcroBandit_Type1Action9,
};
- AcroBandit_Type1_Actions[this->action](this);
+ AcroBandit_Type1_Actions[super->action](this);
}
-void AcroBandit_Type1Init(Entity* this) {
- this->action = 1;
- this->spritePriority.b1 = 1;
- this->zVelocity = Q_16_16(4.0);
- this->z.HALF.HI = (4 - this->type2) * 0xe;
- this->field_0x78.HALF.HI = Random();
- InitializeAnimation(this, 4);
+void AcroBandit_Type1Init(AcroBanditEntity* this) {
+ super->action = 1;
+ super->spritePriority.b1 = 1;
+ super->zVelocity = Q_16_16(4.0);
+ super->z.HALF.HI = (4 - super->type2) * 0xe;
+ this->unk_79 = Random();
+ InitializeAnimation(super, 4);
}
-void AcroBandit_Type1Action1(Entity* this) {
+void AcroBandit_Type1Action1(AcroBanditEntity* this) {
int draw;
- this->z.WORD -= this->zVelocity;
- this->zVelocity -= Q_16_16(3.0 / 32.0);
+ super->z.WORD -= super->zVelocity;
+ super->zVelocity -= Q_16_16(3.0 / 32.0);
- if (this->z.HALF.HI < 1) {
- draw = this->spriteSettings.draw;
+ if (super->z.HALF.HI < 1) {
+ draw = super->spriteSettings.draw;
if (!draw)
EnqueueSFX(SFX_12B);
- this->spriteSettings.draw = 1;
+ super->spriteSettings.draw = 1;
}
- draw = this->spriteSettings.draw;
+ draw = super->spriteSettings.draw;
if (draw == 1)
- GetNextFrame(this);
+ GetNextFrame(super);
- if (this->zVelocity <= 0) {
- this->action = 2;
- COLLISION_ON(this);
- InitializeAnimation(this, 5);
+ if (super->zVelocity <= 0) {
+ super->action = 2;
+ COLLISION_ON(super);
+ InitializeAnimation(super, 5);
}
}
-void AcroBandit_Type1Action2(Entity* this) {
+void AcroBandit_Type1Action2(AcroBanditEntity* this) {
static const u16 banditGravity[] = { Q_8_8(22.0), Q_8_8(19.0), Q_8_8(16.0), Q_8_8(13.0), Q_8_8(11.0) };
- GravityUpdate(this, banditGravity[this->type2]);
- if (this->type2 * -0xe <= this->z.HALF.HI) {
- this->action = 3;
- this->timer = 20;
- this->z.HALF.HI = this->type2 * -0xe;
- if (this->parent != NULL)
- this->spritePriority.b1 = 0;
- InitializeAnimation(this, 6);
+ GravityUpdate(super, banditGravity[super->type2]);
+ if (super->type2 * -0xe <= super->z.HALF.HI) {
+ super->action = 3;
+ super->timer = 20;
+ super->z.HALF.HI = super->type2 * -0xe;
+ if (super->parent != NULL)
+ super->spritePriority.b1 = 0;
+ InitializeAnimation(super, 6);
}
}
-void AcroBandit_Type1Action3(Entity* this) {
- GetNextFrame(this);
- if ((this->frame & ANIM_DONE) && ((this->parent != NULL) || (--this->timer == 0))) {
- this->action = 4;
- this->direction = sub_08049F84(this, 1);
- *(u8*)&this->field_0x76 = 0;
- if (this->child != NULL) {
- InitializeAnimation(this, 9);
+void AcroBandit_Type1Action3(AcroBanditEntity* this) {
+ GetNextFrame(super);
+ if ((super->frame & ANIM_DONE) && ((super->parent != NULL) || (--super->timer == 0))) {
+ super->action = 4;
+ super->direction = sub_08049F84(super, 1);
+ this->unk_76.HALF.LO = 0;
+ if (super->child != NULL) {
+ InitializeAnimation(super, 9);
} else {
- InitializeAnimation(this, 8);
+ InitializeAnimation(super, 8);
}
}
}
-void AcroBandit_Type1Action4(Entity* this) {
+void AcroBandit_Type1Action4(AcroBanditEntity* this) {
Entity* parent;
if (!sub_080322A4(this)) {
- parent = this->parent;
+ parent = super->parent;
if (parent == NULL) {
- if (sub_08049FDC(this, 1)) {
- if ((++this->field_0x78.HALF.HI & 7) == 0) {
- sub_08004596(this, GetFacingDirection(this, gUnk_020000B0));
+ if (sub_08049FDC(super, 1)) {
+ if ((++this->unk_79 & 7) == 0) {
+ sub_08004596(super, GetFacingDirection(super, gUnk_020000B0));
}
- this->field_0x76.HALF.LO = 0;
+ this->unk_76.HALF.LO = 0;
} else {
- if (this->field_0x76.HALF.LO) {
- (this->field_0x76.HALF.LO)--;
- sub_08004596(this, this->field_0x7a.HALF.LO);
+ if (this->unk_76.HALF.LO) {
+ (this->unk_76.HALF.LO)--;
+ sub_08004596(super, this->unk_7a);
} else {
- this->field_0x76.HALF.LO = 0x10;
- if (sub_08049FA0(this) == 0 && (Random() & 1)) {
- this->field_0x7a.HALF.LO = sub_08049EE4(this);
+ this->unk_76.HALF.LO = 0x10;
+ if (sub_08049FA0(super) == 0 && (Random() & 1)) {
+ this->unk_7a = sub_08049EE4(super);
} else {
- this->field_0x7a.HALF.LO = Random() & 30;
+ this->unk_7a = Random() & 30;
}
}
}
- if (this->direction & 0xf)
- this->spriteSettings.flipX = (this->direction >> 4 ^ 1);
+ if (super->direction & 0xf)
+ super->spriteSettings.flipX = (super->direction >> 4 ^ 1);
- ProcessMovement0(this);
+ ProcessMovement0(super);
} else {
- if (this->field_0x76.HALF.HI == 0) {
- if (EntityWithinDistance(this, parent->x.HALF.HI, parent->y.HALF.HI, 1) == 0) {
- this->field_0x76.HALF.HI = 1;
- this->direction = GetFacingDirection(this, parent);
+ if (this->unk_76.HALF.HI == 0) {
+ if (EntityWithinDistance(super, parent->x.HALF.HI, parent->y.HALF.HI, 1) == 0) {
+ this->unk_76.HALF.HI = 1;
+ super->direction = GetFacingDirection(super, parent);
sub_080322E8(this);
- LinearMoveUpdate(this);
+ LinearMoveUpdate(super);
}
} else {
- this->direction = GetFacingDirection(this, parent);
+ super->direction = GetFacingDirection(super, parent);
sub_080322E8(this);
- LinearMoveUpdate(this);
- if (this->x.HALF.HI == parent->x.HALF.HI && this->y.HALF.HI == parent->y.HALF.HI)
- this->field_0x76.HALF.HI = 0;
+ LinearMoveUpdate(super);
+ if (super->x.HALF.HI == parent->x.HALF.HI && super->y.HALF.HI == parent->y.HALF.HI)
+ this->unk_76.HALF.HI = 0;
}
}
- GetNextFrame(this);
+ GetNextFrame(super);
}
}
-void AcroBandit_Type1Action5(Entity* this) {
- if (GravityUpdate(this, Q_8_8(32.0)))
+void AcroBandit_Type1Action5(AcroBanditEntity* this) {
+ if (GravityUpdate(super, Q_8_8(32.0)))
return;
sub_08032290(this);
}
-void AcroBandit_Type1Action6(Entity* this) {
+void AcroBandit_Type1Action6(AcroBanditEntity* this) {
static const u8 fallDirections[] = { 0x8, 0x1c, 0x11, 0x2, 0x15, 0xc, 0x0, 0x15, 0x6, 0x19,
0x10, 0x4, 0x19, 0xa, 0x1d, 0x14, 0x8, 0x1d, 0xe, 0x1 };
Entity* tmp;
u32 dir;
- if (this->timer == 0) {
- this->action = 7;
- dir = fallDirections[this->field_0x74.HALF.LO * 5 + this->type2];
- this->direction = dir;
+ if (super->timer == 0) {
+ super->action = 7;
+ dir = fallDirections[this->unk_74.HALF.LO * 5 + super->type2];
+ super->direction = dir;
if (dir >= 0x10) {
- this->spriteSettings.flipX = 1;
+ super->spriteSettings.flipX = 1;
} else {
- this->spriteSettings.flipX = 0;
+ super->spriteSettings.flipX = 0;
}
- this->speed = 0xf0;
- this->zVelocity = Q_16_16(1.125);
- this->spritePriority.b1 = 1;
- InitializeAnimation(this, 12);
+ super->speed = 0xf0;
+ super->zVelocity = Q_16_16(1.125);
+ super->spritePriority.b1 = 1;
+ InitializeAnimation(super, 12);
}
- if (this->child == NULL) {
- for (tmp = this->parent; tmp != NULL; tmp = tmp->parent) {
+ if (super->child == NULL) {
+ for (tmp = super->parent; tmp != NULL; tmp = tmp->parent) {
if (tmp->health != 0)
tmp->timer = 0;
}
- this->timer = 0;
+ super->timer = 0;
}
}
-void AcroBandit_Type1Action7(Entity* this) {
- ProcessMovement2(this);
+void AcroBandit_Type1Action7(AcroBanditEntity* this) {
+ ProcessMovement2(super);
- if (sub_080044EC(this, 0x2000) == 0)
- this->action = 8;
+ if (sub_080044EC(super, 0x2000) == 0)
+ super->action = 8;
}
-void AcroBandit_Type1Action8(Entity* this) {
- GetNextFrame(this);
- if (this->frame & 1) {
- this->frame = 0;
- this->frameDuration = (Random() & 0x30) + 30;
+void AcroBandit_Type1Action8(AcroBanditEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & 1) {
+ super->frame = 0;
+ super->frameDuration = (Random() & 0x30) + 30;
} else {
- if (this->frame & ANIM_DONE) {
- this->action = 9;
- InitializeAnimation(this, 13);
+ if (super->frame & ANIM_DONE) {
+ super->action = 9;
+ InitializeAnimation(super, 13);
}
}
}
-void AcroBandit_Type1Action9(Entity* this) {
- if (GravityUpdate(this, Q_8_8(24.0)) == 0) {
- if (this->frame & ANIM_DONE) {
- ((Entity*)this->field_0x7c.WORD)->timer--;
+void AcroBandit_Type1Action9(AcroBanditEntity* this) {
+ if (GravityUpdate(super, Q_8_8(24.0)) == 0) {
+ if (super->frame & ANIM_DONE) {
+ this->unk_7c->timer--;
- DeleteEntity(this);
+ DeleteEntity(super);
} else {
- GetNextFrame(this);
+ GetNextFrame(super);
- if ((this->frame & 0xf) == 2)
- COLLISION_OFF(this);
+ if ((super->frame & 0xf) == 2)
+ COLLISION_OFF(super);
}
}
}
-static void sub_08032290(Entity* this) {
- this->action = 6;
- this->timer = 12;
- InitializeAnimation(this, 11);
+static void sub_08032290(AcroBanditEntity* this) {
+ super->action = 6;
+ super->timer = 12;
+ InitializeAnimation(super, 11);
}
-static bool32 sub_080322A4(Entity* this) {
- if (this->child != NULL && (this->child->z.HALF.HI + 8) >= this->z.HALF.HI) {
- if (this->z.HALF.HI) {
- this->action = 5;
- this->z.HALF.HI = this->child->z.HALF.HI + 8;
- InitializeAnimation(this, 11);
+static bool32 sub_080322A4(AcroBanditEntity* this) {
+ if (super->child != NULL && (super->child->z.HALF.HI + 8) >= super->z.HALF.HI) {
+ if (super->z.HALF.HI) {
+ super->action = 5;
+ super->z.HALF.HI = super->child->z.HALF.HI + 8;
+ InitializeAnimation(super, 11);
return TRUE;
} else {
sub_08032290(this);
@@ -562,25 +578,25 @@ static bool32 sub_080322A4(Entity* this) {
return FALSE;
}
-static void sub_080322E8(Entity* this) {
- if (this->field_0x78.HALF.LO) {
- if (--this->field_0x78.HALF.LO == 0) {
- u32 flipX = this->spriteSettings.flipX;
- this->spriteSettings.flipX = flipX ^ 1;
+static void sub_080322E8(AcroBanditEntity* this) {
+ if (this->unk_78) {
+ if (--this->unk_78 == 0) {
+ u32 flipX = super->spriteSettings.flipX;
+ super->spriteSettings.flipX = flipX ^ 1;
}
} else {
- u8 tmp = this->direction;
+ u8 tmp = super->direction;
if (tmp & 0xF) {
tmp >>= 4;
tmp ^= 1;
- if (tmp != this->spriteSettings.flipX) {
- this->field_0x78.HALF.LO = 6;
+ if (tmp != super->spriteSettings.flipX) {
+ this->unk_78 = 6;
}
}
}
}
-static void sub_08032338(Entity* this) {
- if ((((Entity*)this->field_0x7c.WORD)->timer += 15) != 80)
- this->field_0x6c.HALF.LO = 0;
+static void sub_08032338(AcroBanditEntity* this) {
+ if ((this->unk_7c->timer += 15) != 80)
+ this->unk_6c = 0;
}
diff --git a/src/enemy/armos.c b/src/enemy/armos.c
index e4fa4af1..402fa65e 100644
--- a/src/enemy/armos.c
+++ b/src/enemy/armos.c
@@ -4,15 +4,13 @@
*
* @brief Armos enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
+#include "collision.h"
+#include "common.h"
#include "enemy.h"
+#include "flags.h"
#include "functions.h"
#include "hitbox.h"
-#include "common.h"
-#include "flags.h"
-#include "collision.h"
typedef struct {
/*0x00*/ Entity base;
diff --git a/src/enemy/ballChainSoldier.c b/src/enemy/ballChainSoldier.c
index d2227940..3efbe43e 100644
--- a/src/enemy/ballChainSoldier.c
+++ b/src/enemy/ballChainSoldier.c
@@ -1,6 +1,12 @@
+/**
+ * @file ballChainSoldier.c
+ * @ingroup Enemies
+ *
+ * @brief Ball Chain Soldier enemy
+ */
#define NENT_DEPRECATED
-#include "entity.h"
#include "enemy.h"
+#include "entity.h"
#include "functions.h"
typedef struct {
@@ -57,14 +63,14 @@ void BallChainSoldier_OnGrabbed(BallChainSoldierEntity* this) {
}
void BallChainSoldier_Init(BallChainSoldierEntity* this) {
- Entity* ent;
+ Entity* entity;
sub_0804A720(super);
- ent = CreateProjectileWithParent(super, BALL_AND_CHAIN, 0);
- if (ent == NULL)
+ entity = CreateProjectileWithParent(super, BALL_AND_CHAIN, 0);
+ if (entity == NULL)
return;
- ent->parent = super;
- super->child = ent;
+ entity->parent = super;
+ super->child = entity;
COLLISION_ON(super);
super->spriteSettings.draw = 1;
super->animationState = Random() & 3;
diff --git a/src/enemy/beetle.c b/src/enemy/beetle.c
index ace73b7f..f6650533 100644
--- a/src/enemy/beetle.c
+++ b/src/enemy/beetle.c
@@ -4,44 +4,51 @@
*
* @brief Beetle enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
-u32 sub_08021D00(Entity*);
-void sub_08021D44(Entity* this, u32 direction);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[30];
+ /*0x86*/ u8 unk_86;
+ /*0x87*/ u8 unk_87;
+} BeetleEntity;
+
+u32 sub_08021D00(BeetleEntity*);
+void sub_08021D44(BeetleEntity* this, u32 direction);
-extern void (*const Beetle_Functions[])(Entity*);
-extern void (*const gUnk_080CB5A8[])(Entity*);
-extern void (*const gUnk_080CB5C8[])(Entity*);
-extern void (*const gUnk_080CB5D4[])(Entity*);
+extern void (*const Beetle_Functions[])(BeetleEntity*);
+extern void (*const gUnk_080CB5A8[])(BeetleEntity*);
+extern void (*const gUnk_080CB5C8[])(BeetleEntity*);
+extern void (*const gUnk_080CB5D4[])(BeetleEntity*);
extern const s8 gUnk_080CB5DC[];
extern const s8 gUnk_080CB5E4[];
-void Beetle(Entity* this) {
- EnemyFunctionHandler(this, Beetle_Functions);
+void Beetle(BeetleEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)Beetle_Functions);
}
-void Beetle_OnTick(Entity* this) {
- gUnk_080CB5A8[this->action](this);
+void Beetle_OnTick(BeetleEntity* this) {
+ gUnk_080CB5A8[super->action](this);
}
-void Beetle_OnCollision(Entity* this) {
- switch (this->contactFlags) {
+void Beetle_OnCollision(BeetleEntity* this) {
+ switch (super->contactFlags) {
case 0x80:
if (gPlayerState.framestate == PL_STATE_CLIMB) {
Beetle_OnTick(this);
} else {
- this->action = 5;
- this->timer = 180;
- this->subtimer = 0;
- COLLISION_OFF(this);
- this->spritePriority.b0 = 3;
- CopyPositionAndSpriteOffset(&gPlayerEntity, this);
- this->z.HALF.HI = -1;
- ((u8*)&this->field_0x86)[1] = 1;
- InitializeAnimation(this, 6);
+ super->action = 5;
+ super->timer = 180;
+ super->subtimer = 0;
+ COLLISION_OFF(super);
+ super->spritePriority.b0 = 3;
+ CopyPositionAndSpriteOffset(&gPlayerEntity, super);
+ super->z.HALF.HI = -1;
+ this->unk_87 = 1;
+ InitializeAnimation(super, 6);
}
break;
case 0x93:
@@ -49,288 +56,288 @@ void Beetle_OnCollision(Entity* this) {
break;
}
- if (this->health == 0)
- this->knockbackDuration = 0;
+ if (super->health == 0)
+ super->knockbackDuration = 0;
- EnemyFunctionHandlerAfterCollision(this, Beetle_Functions);
+ EnemyFunctionHandlerAfterCollision(super, Beetle_Functions);
}
-void Beetle_OnDeath(Entity* this) {
- if (this->type == 0) {
- GenericDeath(this);
+void Beetle_OnDeath(BeetleEntity* this) {
+ if (super->type == 0) {
+ GenericDeath(super);
} else {
- Entity* ent = this->parent;
- if (ent != NULL) {
- ent->subtimer--;
- this->parent = NULL;
+ Entity* entity = super->parent;
+ if (entity != NULL) {
+ entity->subtimer--;
+ super->parent = NULL;
}
- CreateDeathFx(this, 0xf0, 0);
+ CreateDeathFx(super, 0xf0, 0);
}
}
-void Beetle_OnGrabbed(Entity* this) {
- if (sub_0806F520(this)) {
- gUnk_080CB5C8[this->subAction](this);
+void Beetle_OnGrabbed(BeetleEntity* this) {
+ if (sub_0806F520(super)) {
+ gUnk_080CB5C8[super->subAction](this);
} else {
- this->action = 3;
- this->z.HALF.HI = 0;
- InitializeAnimation(this, 2);
+ super->action = 3;
+ super->z.HALF.HI = 0;
+ InitializeAnimation(super, 2);
}
}
-void sub_0802187C(Entity* this) {
- this->subAction = 2;
+void sub_0802187C(BeetleEntity* this) {
+ super->subAction = 2;
}
-void nullsub_130(Entity* this) {
+void nullsub_130(BeetleEntity* this) {
}
-void sub_08021888(Entity* this) {
- if (sub_0806F3E4(this))
+void sub_08021888(BeetleEntity* this) {
+ if (sub_0806F3E4(super))
Beetle_OnDeath(this);
}
-void Beetle_Initialize(Entity* this) {
- sub_0804A720(this);
- this->action = 1;
- this->gustJarFlags = 1;
- InitializeAnimation(this, 3);
+void Beetle_Initialize(BeetleEntity* this) {
+ sub_0804A720(super);
+ super->action = 1;
+ super->gustJarFlags = 1;
+ InitializeAnimation(super, 3);
}
-void sub_080218B4(Entity* this) {
- gUnk_080CB5D4[this->type2](this);
+void sub_080218B4(BeetleEntity* this) {
+ gUnk_080CB5D4[super->type2](this);
}
-void sub_080218CC(Entity* this) {
- if (this->subAction == 0) {
- this->subAction = 1;
- this->spriteSettings.draw = 1;
- this->direction = ((sub_08049F84(this, 1) ^ 0x10) + gUnk_080CB5DC[Random() & 7]) & 0x1f;
- this->speed = 0x100;
- this->zVelocity = Q_16_16(1.125);
+void sub_080218CC(BeetleEntity* this) {
+ if (super->subAction == 0) {
+ super->subAction = 1;
+ super->spriteSettings.draw = 1;
+ super->direction = ((sub_08049F84(super, 1) ^ 0x10) + gUnk_080CB5DC[Random() & 7]) & 0x1f;
+ super->speed = 0x100;
+ super->zVelocity = Q_16_16(1.125);
}
- GetNextFrame(this);
- if (this->frame & 1) {
- ProcessMovement2(this);
- if (sub_080044EC(this, 0x1c00) == 0)
- this->frameDuration = 1;
+ GetNextFrame(super);
+ if (super->frame & 1) {
+ ProcessMovement2(super);
+ if (sub_080044EC(super, 0x1c00) == 0)
+ super->frameDuration = 1;
}
- if (this->frame & ANIM_DONE) {
- this->action = 2;
- this->timer = (Random() & 0x38) + 8;
- this->subtimer = 1;
- COLLISION_ON(this);
- this->speed = 0x180;
- InitializeAnimation(this, 0);
+ if (super->frame & ANIM_DONE) {
+ super->action = 2;
+ super->timer = (Random() & 0x38) + 8;
+ super->subtimer = 1;
+ COLLISION_ON(super);
+ super->speed = 0x180;
+ InitializeAnimation(super, 0);
}
}
-void sub_08021984(Entity* this) {
- if (this->subAction == 0) {
- this->subAction = 1;
- COLLISION_ON(this);
- this->spriteSettings.draw = 3;
- this->z.HALF.HI = -0x80;
- this->spriteRendering.b3 = 1;
- this->spriteOrientation.flipY = 1;
+void sub_08021984(BeetleEntity* this) {
+ if (super->subAction == 0) {
+ super->subAction = 1;
+ COLLISION_ON(super);
+ super->spriteSettings.draw = 3;
+ super->z.HALF.HI = -0x80;
+ super->spriteRendering.b3 = 1;
+ super->spriteOrientation.flipY = 1;
EnqueueSFX(SFX_12D);
}
- if (GravityUpdate(this, Q_8_8(24.0)) == 0) {
- this->action = 2;
- this->timer = 16;
- this->subtimer = 1;
- this->spriteSettings.draw = 1;
- this->speed = 0x180;
- ((u8*)&this->field_0x86)[0] = 60;
- InitializeAnimation(this, 0);
- UpdateSpriteForCollisionLayer(this);
+ if (GravityUpdate(super, Q_8_8(24.0)) == 0) {
+ super->action = 2;
+ super->timer = 16;
+ super->subtimer = 1;
+ super->spriteSettings.draw = 1;
+ super->speed = 0x180;
+ this->unk_86 = 60;
+ InitializeAnimation(super, 0);
+ UpdateSpriteForCollisionLayer(super);
}
}
-void sub_08021A10(Entity* this) {
- GetNextFrame(this);
- if (EntityInRectRadius(this, &gPlayerEntity, 120, 80) && sub_08021D00(this) == 0) {
- if (--this->timer == 0) {
- this->action = 3;
- this->timer = (Random() & 0x3f) + 30;
- sub_08021D44(this, this->direction);
- InitializeAnimation(this, 2);
+void sub_08021A10(BeetleEntity* this) {
+ GetNextFrame(super);
+ if (EntityInRectRadius(super, &gPlayerEntity, 120, 80) && sub_08021D00(this) == 0) {
+ if (--super->timer == 0) {
+ super->action = 3;
+ super->timer = (Random() & 0x3f) + 30;
+ sub_08021D44(this, super->direction);
+ InitializeAnimation(super, 2);
}
}
}
-void sub_08021A64(Entity* this) {
+void sub_08021A64(BeetleEntity* this) {
if (!sub_08021D00(this)) {
- if (--this->timer == 0) {
- this->action = 2;
- this->timer = (Random() & 0x1F) + 30;
- InitializeAnimation(this, 0);
+ if (--super->timer == 0) {
+ super->action = 2;
+ super->timer = (Random() & 0x1F) + 30;
+ InitializeAnimation(super, 0);
}
- if (--this->subtimer == 0) {
+ if (--super->subtimer == 0) {
u32 tmp;
- this->subtimer = 8;
- tmp = sub_08049F84(this, 1);
+ super->subtimer = 8;
+ tmp = sub_08049F84(super, 1);
if (tmp == 0xff) {
- this->action = 7;
- InitializeAnimation(this, 1);
+ super->action = 7;
+ InitializeAnimation(super, 1);
return;
}
sub_08021D44(this, tmp);
}
- ProcessMovement0(this);
- GetNextFrame(this);
+ ProcessMovement0(super);
+ GetNextFrame(super);
}
}
-void sub_08021AD8(Entity* this) {
- GetNextFrame(this);
- if (this->frame & 1) {
- if (this->timer != 0) {
+void sub_08021AD8(BeetleEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & 1) {
+ if (super->timer != 0) {
u32 tmp;
- this->timer = 0;
- tmp = sub_08049F84(this, 1);
+ super->timer = 0;
+ tmp = sub_08049F84(super, 1);
if (tmp == 0xff) {
- this->action = 2;
- this->timer = 8;
- InitializeAnimation(this, 0);
+ super->action = 2;
+ super->timer = 8;
+ InitializeAnimation(super, 0);
return;
}
- this->direction = (u8)tmp;
+ super->direction = (u8)tmp;
EnqueueSFX(SFX_PLY_JUMP);
}
- ProcessMovement2(this);
- if (!GravityUpdate(this, Q_8_8(24.0)))
- this->frameDuration = 1;
+ ProcessMovement2(super);
+ if (!GravityUpdate(super, Q_8_8(24.0)))
+ super->frameDuration = 1;
}
- if (this->frame & ANIM_DONE) {
- this->action = 2;
- this->timer = 20;
- ((u8*)&this->field_0x86)[0] = 60;
- InitializeAnimation(this, 0);
+ if (super->frame & ANIM_DONE) {
+ super->action = 2;
+ super->timer = 20;
+ this->unk_86 = 60;
+ InitializeAnimation(super, 0);
}
}
-void sub_08021B64(Entity* this) {
+void sub_08021B64(BeetleEntity* this) {
if (gPlayerState.flags & PL_DROWNING) {
- this->action = 3;
- this->z.WORD = 0;
- InitializeAnimation(this, 2);
+ super->action = 3;
+ super->z.WORD = 0;
+ InitializeAnimation(super, 2);
} else {
s32 iVar4 = 1;
if (gPlayerState.framestate != PL_STATE_JUMP && gPlayerState.framestate != PL_STATE_CAPE) {
if (sub_0807953C())
- iVar4 = this->type * 3 + 8;
+ iVar4 = super->type * 3 + 8;
- iVar4 = this->timer - iVar4;
+ iVar4 = super->timer - iVar4;
if (iVar4 < 0)
iVar4 = 0;
- this->timer = (u8)iVar4;
+ super->timer = (u8)iVar4;
}
if (gPlayerState.flags & (PL_DISABLE_ITEMS | PL_CAPTURED))
iVar4 = 0;
if (iVar4 == 0) {
- this->action = 6;
- this->zVelocity = Q_16_16(1.0);
- ((u8*)&this->field_0x86)[1] = 0;
+ super->action = 6;
+ super->zVelocity = Q_16_16(1.0);
+ this->unk_87 = 0;
if (gPlayerEntity.direction != 0xff) {
- this->direction = 0x10 ^ gPlayerEntity.direction;
+ super->direction = 0x10 ^ gPlayerEntity.direction;
} else {
- this->direction = (gPlayerEntity.animationState << 2) ^ 0x10;
+ super->direction = (gPlayerEntity.animationState << 2) ^ 0x10;
}
- InitializeAnimation(this, 5);
+ InitializeAnimation(super, 5);
} else {
gPlayerState.mobility |= 0x80;
gPlayerState.speed_modifier -= 0x50;
gPlayerState.attachedBeetleCount++;
- CopyPositionAndSpriteOffset(&gPlayerEntity, this);
- this->x.HALF.HI += gUnk_080CB5E4[(this->subtimer++ & 0xe) >> 1];
- this->z.HALF.HI--;
- GetNextFrame(this);
+ CopyPositionAndSpriteOffset(&gPlayerEntity, super);
+ super->x.HALF.HI += gUnk_080CB5E4[(super->subtimer++ & 0xe) >> 1];
+ super->z.HALF.HI--;
+ GetNextFrame(super);
}
}
}
-void sub_08021C58(Entity* this) {
- GetNextFrame(this);
- if (this->frame & 1) {
- ProcessMovement2(this);
- if (GravityUpdate(this, Q_8_8(24.0)) == 0)
- this->frameDuration = 1;
+void sub_08021C58(BeetleEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & 1) {
+ ProcessMovement2(super);
+ if (GravityUpdate(super, Q_8_8(24.0)) == 0)
+ super->frameDuration = 1;
}
- if (this->frame & ANIM_DONE) {
- this->action = 2;
- this->timer = 60;
- this->subtimer = 1;
- COLLISION_ON(this);
- this->spritePriority.b0 = 4;
- ((u8*)&this->field_0x86)[0] = 60;
- InitializeAnimation(this, 0);
+ if (super->frame & ANIM_DONE) {
+ super->action = 2;
+ super->timer = 60;
+ super->subtimer = 1;
+ COLLISION_ON(super);
+ super->spritePriority.b0 = 4;
+ this->unk_86 = 60;
+ InitializeAnimation(super, 0);
}
}
-void sub_08021CD0(Entity* this) {
- if ((this->frame & ANIM_DONE) == 0)
- GetNextFrame(this);
+void sub_08021CD0(BeetleEntity* this) {
+ if ((super->frame & ANIM_DONE) == 0)
+ GetNextFrame(super);
- if (sub_08049F84(this, 1) == 0xff)
+ if (sub_08049F84(super, 1) == 0xff)
return;
- this->action = 3;
- InitializeAnimation(this, 2);
+ super->action = 3;
+ InitializeAnimation(super, 2);
}
-u32 sub_08021D00(Entity* this) {
+u32 sub_08021D00(BeetleEntity* this) {
u32 ret;
- if (((u8*)&this->field_0x86)[0]) {
- ((u8*)&this->field_0x86)[0]--;
+ if (this->unk_86) {
+ this->unk_86--;
ret = 0;
- } else if (PlayerInRange(this, 1, 0x10) == 0) {
+ } else if (PlayerInRange(super, 1, 0x10) == 0) {
ret = 0;
} else {
- this->action = 4;
- this->timer = 1;
- this->zVelocity = Q_16_16(1.5);
- InitializeAnimation(this, 4);
+ super->action = 4;
+ super->timer = 1;
+ super->zVelocity = Q_16_16(1.5);
+ InitializeAnimation(super, 4);
ret = 1;
}
return ret;
}
-void sub_08021D44(Entity* this, u32 direction) {
+void sub_08021D44(BeetleEntity* this, u32 direction) {
direction = DirectionRoundUp(direction);
- this->direction = direction;
+ super->direction = direction;
if (DirectionIsHorizontal(direction)) {
- this->speed = 0x180;
+ super->speed = 0x180;
} else {
- this->speed = 0xc0;
+ super->speed = 0xc0;
}
}
// clang-format off
-void (*const Beetle_Functions[])(Entity*) = {
+void (*const Beetle_Functions[])(BeetleEntity*) = {
Beetle_OnTick,
Beetle_OnCollision,
- GenericKnockback,
+ (void (*)(BeetleEntity*))GenericKnockback,
Beetle_OnDeath,
- GenericConfused,
+ (void (*)(BeetleEntity*))GenericConfused,
Beetle_OnGrabbed,
};
-void (*const gUnk_080CB5A8[])(Entity*) = {
+void (*const gUnk_080CB5A8[])(BeetleEntity*) = {
Beetle_Initialize,
sub_080218B4,
sub_08021A10,
@@ -341,13 +348,13 @@ void (*const gUnk_080CB5A8[])(Entity*) = {
sub_08021CD0,
};
-void (*const gUnk_080CB5C8[])(Entity*) = {
+void (*const gUnk_080CB5C8[])(BeetleEntity*) = {
sub_0802187C,
nullsub_130,
sub_08021888,
};
-void (*const gUnk_080CB5D4[])(Entity*) = {
+void (*const gUnk_080CB5D4[])(BeetleEntity*) = {
sub_080218CC,
sub_08021984,
};
diff --git a/src/enemy/bladeTrap.c b/src/enemy/bladeTrap.c
index 86fe70d0..1f178dfa 100644
--- a/src/enemy/bladeTrap.c
+++ b/src/enemy/bladeTrap.c
@@ -4,26 +4,32 @@
*
* @brief Blade Trap enemy
*/
-
-#include "sound.h"
+#define NENT_DEPRECATED
#include "entity.h"
-#include "room.h"
#include "object.h"
+#include "room.h"
+#include "sound.h"
+
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[12];
+ /*0x74*/ u16 unk_74;
+} BladeTrapEntity;
-void BladeTrap(Entity* this) {
- if (this->action == 0) {
- this->action = 1;
- this->child = GetCurrentRoomProperty(this->type);
- UpdateRailMovement(this, (u16**)&this->child, &this->field_0x74.HWORD);
+void BladeTrap(BladeTrapEntity* this) {
+ if (super->action == 0) {
+ super->action = 1;
+ super->child = GetCurrentRoomProperty(super->type);
+ UpdateRailMovement(super, (u16**)&super->child, &this->unk_74);
}
- if (!(this->direction & 0x80)) {
- LinearMoveUpdate(this);
+ if (!(super->direction & 0x80)) {
+ LinearMoveUpdate(super);
}
- if (!(--this->field_0x74.HWORD)) {
- if (!(this->direction & 0x80)) {
+ if (!(--this->unk_74)) {
+ if (!(super->direction & 0x80)) {
EnqueueSFX(SFX_METAL_CLINK);
}
- UpdateRailMovement(this, (u16**)&this->child, &this->field_0x74.HWORD);
+ UpdateRailMovement(super, (u16**)&super->child, &this->unk_74);
}
}
diff --git a/src/enemy/bobomb.c b/src/enemy/bobomb.c
index bfc8f092..1a35c1f4 100644
--- a/src/enemy/bobomb.c
+++ b/src/enemy/bobomb.c
@@ -4,38 +4,47 @@
*
* @brief Bobomb enemy
*/
-
+#define NENT_DEPRECATED
#include "asm.h"
#include "collision.h"
-#include "sound.h"
#include "enemy.h"
-#include "object.h"
#include "functions.h"
+#include "object.h"
+#include "sound.h"
-void sub_0802CB68(Entity*);
-void sub_0802CBC4(Entity*);
-void sub_0802CC18(Entity*);
-
-extern void (*const Bobomb_Functions[])(Entity*);
-extern void (*const gUnk_080CD5EC[])(Entity*);
-extern void (*const gUnk_080CD600[])(Entity*);
-extern void (*const gUnk_080CD618[])(Entity*);
-
-void Bobomb(Entity* this) {
- EnemyFunctionHandler(this, Bobomb_Functions);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[24];
+ /*0x80*/ u8 unk_80;
+ /*0x81*/ u8 unk_81;
+ /*0x82*/ u8 unk_82;
+ /*0x83*/ u8 unk_83;
+} BobombEntity;
+
+void sub_0802CB68(BobombEntity* this);
+void sub_0802CBC4(BobombEntity* this);
+void sub_0802CC18(BobombEntity* this);
+
+extern void (*const Bobomb_Functions[])(BobombEntity*);
+extern void (*const gUnk_080CD5EC[])(BobombEntity*);
+extern void (*const gUnk_080CD600[])(BobombEntity*);
+extern void (*const gUnk_080CD618[])(BobombEntity*);
+
+void Bobomb(BobombEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)Bobomb_Functions);
}
-void Bobomb_OnTick(Entity* this) {
- gUnk_080CD5EC[this->action](this);
+void Bobomb_OnTick(BobombEntity* this) {
+ gUnk_080CD5EC[super->action](this);
}
-void Bobomb_OnCollision(Entity* this) {
- if (this->contactFlags & 0x80) {
- switch (this->contactFlags & 0x7f) {
+void Bobomb_OnCollision(BobombEntity* this) {
+ if (super->contactFlags & 0x80) {
+ switch (super->contactFlags & 0x7f) {
case 0:
case 1:
- if (this->field_0x82.HALF.LO) {
- this->knockbackDuration = 0;
+ if (this->unk_82) {
+ super->knockbackDuration = 0;
gPlayerEntity.knockbackDuration = 4;
}
return;
@@ -43,276 +52,276 @@ void Bobomb_OnCollision(Entity* this) {
case 0x14:
case 0x15:
case 0x16:
- this->action = 3;
- this->knockbackDuration = 0;
+ super->action = 3;
+ super->knockbackDuration = 0;
sub_0802CBC4(this);
return;
}
- this->field_0x82.HALF.LO++;
- this->field_0x80.HALF.LO = 28;
- switch (this->field_0x82.HALF.LO) {
+ this->unk_82++;
+ this->unk_80 = 28;
+ switch (this->unk_82) {
case 1:
sub_0802CB68(this);
EnqueueSFX(SFX_14D);
break;
case 2:
- this->action = 3;
- this->hitType = 0x6e;
- this->subtimer = 1;
- this->zVelocity = Q_16_16(1.5);
- this->speed = 0;
- this->field_0x80.HALF.HI = 1;
- InitializeAnimation(this, this->direction >> 4 | 6);
+ super->action = 3;
+ super->hitType = 0x6e;
+ super->subtimer = 1;
+ super->zVelocity = Q_16_16(1.5);
+ super->speed = 0;
+ this->unk_81 = 1;
+ InitializeAnimation(super, super->direction >> 4 | 6);
break;
}
}
- EnemyFunctionHandlerAfterCollision(this, Bobomb_Functions);
+ EnemyFunctionHandlerAfterCollision(super, Bobomb_Functions);
}
-void Bobomb_OnGrabbed(Entity* this) {
- if (this->subAction < 3 && !sub_0806F520(this)) {
- this->subAction = 0;
- this->subtimer = 1;
- this->z.HALF.HI = 0;
- if (this->field_0x82.HALF.LO != 2) {
- this->speed = this->field_0x82.HALF.LO ? 0x200 : 0x80;
+void Bobomb_OnGrabbed(BobombEntity* this) {
+ if (super->subAction < 3 && !sub_0806F520(super)) {
+ super->subAction = 0;
+ super->subtimer = 1;
+ super->z.HALF.HI = 0;
+ if (this->unk_82 != 2) {
+ super->speed = this->unk_82 ? 0x200 : 0x80;
}
- this->zVelocity = Q_16_16(1.5);
- this->field_0x82.HALF.HI = 0;
- this->field_0x80.HALF.HI = 0;
+ super->zVelocity = Q_16_16(1.5);
+ this->unk_83 = 0;
+ this->unk_81 = 0;
} else {
- this->z.HALF.HI = -1;
- gUnk_080CD600[this->subAction](this);
- if (this->timer != 0) {
- GetNextFrame(this);
+ super->z.HALF.HI = -1;
+ gUnk_080CD600[super->subAction](this);
+ if (super->timer != 0) {
+ GetNextFrame(super);
}
}
}
-void sub_0802C820(Entity* this) {
- this->subAction = 1;
- this->gustJarTolerance = 60;
+void sub_0802C820(BobombEntity* this) {
+ super->subAction = 1;
+ super->gustJarTolerance = 60;
}
-void sub_0802C82C(Entity* this) {
- sub_0806F4E8(this);
+void sub_0802C82C(BobombEntity* this) {
+ sub_0806F4E8(super);
}
-void sub_0802C834(Entity* this) {
- sub_0806F3E4(this);
+void sub_0802C834(BobombEntity* this) {
+ sub_0806F3E4(super);
}
-void sub_0802C83C(Entity* this) {
- if (this->field_0x82.HALF.LO) {
- if (--this->timer == 0) {
- this->action = 3;
+void sub_0802C83C(BobombEntity* this) {
+ if (this->unk_82) {
+ if (--super->timer == 0) {
+ super->action = 3;
switch (gPlayerEntity.animationState & 6) {
case 2:
- this->x.HALF.HI -= 6;
+ super->x.HALF.HI -= 6;
break;
case 6:
- this->x.HALF.HI += 6;
+ super->x.HALF.HI += 6;
break;
}
sub_0802CBC4(this);
} else {
sub_0802CC18(this);
- COLLISION_OFF(this);
- this->hitType = 0x6e;
+ COLLISION_OFF(super);
+ super->hitType = 0x6e;
}
} else {
- this->field_0x82.HALF.LO = 2;
- this->timer = 120;
- InitializeAnimation(this, (this->direction >> 4) | 6);
- COLLISION_OFF(this);
- this->hitType = 0x6e;
+ this->unk_82 = 2;
+ super->timer = 120;
+ InitializeAnimation(super, (super->direction >> 4) | 6);
+ COLLISION_OFF(super);
+ super->hitType = 0x6e;
}
}
-void nullsub_149(Entity* this) {
+void nullsub_149(BobombEntity* this) {
/* ... */
}
-void sub_0802C8B8(Entity* this) {
- this->action = 3;
+void sub_0802C8B8(BobombEntity* this) {
+ super->action = 3;
sub_0802CBC4(this);
}
-void Bobomb_OnDeath(Entity* this) {
- GenericDeath(this);
- this->spriteSettings.draw = 0;
+void Bobomb_OnDeath(BobombEntity* this) {
+ GenericDeath(super);
+ super->spriteSettings.draw = 0;
}
-void sub_0802C8D8(Entity* this) {
- this->action = 1;
- this->timer = 60;
- this->subtimer = 0;
- this->direction = (Random() & 0x18) | 4;
- this->carryFlags = 0;
- this->gustJarFlags = 0x12;
- this->field_0x82.HALF.LO = 0;
- this->field_0x82.HALF.HI = 0;
- this->field_0x80.HALF.LO = 0;
- this->field_0x80.HALF.HI = 0;
- InitializeAnimation(this, this->direction >> 4);
+void sub_0802C8D8(BobombEntity* this) {
+ super->action = 1;
+ super->timer = 60;
+ super->subtimer = 0;
+ super->direction = (Random() & 0x18) | 4;
+ super->carryFlags = 0;
+ super->gustJarFlags = 0x12;
+ this->unk_82 = 0;
+ this->unk_83 = 0;
+ this->unk_80 = 0;
+ this->unk_81 = 0;
+ InitializeAnimation(super, super->direction >> 4);
}
-void sub_0802C91C(Entity* this) {
- GetNextFrame(this);
- ProcessMovement0(this);
- if (this->field_0x82.HALF.LO) {
- if (this->collisions != COL_NONE) {
- sub_0800417E(this, this->collisions);
- InitializeAnimation(this, (this->direction >> 4) | 2);
+void sub_0802C91C(BobombEntity* this) {
+ GetNextFrame(super);
+ ProcessMovement0(super);
+ if (this->unk_82) {
+ if (super->collisions != COL_NONE) {
+ sub_0800417E(super, super->collisions);
+ InitializeAnimation(super, (super->direction >> 4) | 2);
}
- if (--this->timer == 0) {
+ if (--super->timer == 0) {
sub_0802CBC4(this);
} else {
- if ((this->timer & 0xf) == 8) {
- CreateDustSmall(this);
+ if ((super->timer & 0xf) == 8) {
+ CreateDustSmall(super);
}
sub_0802CC18(this);
}
} else {
- if (this->collisions != COL_NONE) {
- sub_0800417E(this, this->collisions);
- InitializeAnimation(this, this->direction >> 4);
+ if (super->collisions != COL_NONE) {
+ sub_0800417E(super, super->collisions);
+ InitializeAnimation(super, super->direction >> 4);
}
- if (--this->timer == 0) {
- this->timer = 60;
- this->direction = (this->direction + 8) & 0x1c;
- InitializeAnimation(this, this->direction >> 4);
+ if (--super->timer == 0) {
+ super->timer = 60;
+ super->direction = (super->direction + 8) & 0x1c;
+ InitializeAnimation(super, super->direction >> 4);
}
}
}
-void sub_0802C9B8(Entity* this) {
- gUnk_080CD618[this->subAction](this);
+void sub_0802C9B8(BobombEntity* this) {
+ gUnk_080CD618[super->subAction](this);
}
-void sub_0802C9D0(Entity* this) {
- this->subAction = 1;
- COLLISION_OFF(this);
- this->spritePriority.b1 = 0;
- this->field_0x82.HALF.HI = 1;
+void sub_0802C9D0(BobombEntity* this) {
+ super->subAction = 1;
+ COLLISION_OFF(super);
+ super->spritePriority.b1 = 0;
+ this->unk_83 = 1;
sub_0802CC18(this);
- InitializeAnimation(this, (this->direction >> 4) | 6);
- GetNextFrame(this);
+ InitializeAnimation(super, (super->direction >> 4) | 6);
+ GetNextFrame(super);
}
-void sub_0802CA10(Entity* this) {
+void sub_0802CA10(BobombEntity* this) {
if (gPlayerState.heldObject != 5) {
- if (--this->timer == 0) {
+ if (--super->timer == 0) {
sub_0802CBC4(this);
} else {
sub_0802CC18(this);
- GetNextFrame(this);
+ GetNextFrame(super);
}
} else {
- this->field_0x82.HALF.HI = 2;
- this->direction = (((gPlayerEntity.animationState) << 2) | 4) & 0x1c;
+ this->unk_83 = 2;
+ super->direction = (((gPlayerEntity.animationState) << 2) | 4) & 0x1c;
sub_0802CC18(this);
- GetNextFrame(this);
+ GetNextFrame(super);
}
}
-void sub_0802CA6C(Entity* this) {
- if (--this->timer == 0) {
+void sub_0802CA6C(BobombEntity* this) {
+ if (--super->timer == 0) {
sub_0802CBC4(this);
} else {
sub_0802CC18(this);
- GetNextFrame(this);
+ GetNextFrame(super);
}
}
-void sub_0802CA94(Entity* this) {
- this->action = 3;
- COLLISION_OFF(this);
- this->subtimer = 1;
- this->spritePriority.b1 = 1;
- this->zVelocity = Q_16_16(1.5);
- this->speed = 0;
- this->field_0x82.HALF.HI = 0;
- this->field_0x80.HALF.HI = 0;
- this->direction = ((gPlayerEntity.animationState << 2) | 4) & 0x1c;
- InitializeAnimation(this, (this->direction >> 4) | 6);
+void sub_0802CA94(BobombEntity* this) {
+ super->action = 3;
+ COLLISION_OFF(super);
+ super->subtimer = 1;
+ super->spritePriority.b1 = 1;
+ super->zVelocity = Q_16_16(1.5);
+ super->speed = 0;
+ this->unk_83 = 0;
+ this->unk_81 = 0;
+ super->direction = ((gPlayerEntity.animationState << 2) | 4) & 0x1c;
+ InitializeAnimation(super, (super->direction >> 4) | 6);
}
-void sub_0802CAF8(Entity* this) {
- if (--this->timer == 0) {
+void sub_0802CAF8(BobombEntity* this) {
+ if (--super->timer == 0) {
sub_0802CBC4(this);
} else {
- if (this->field_0x80.HALF.HI && sub_080044EC(this, 0x2800) == 1) {
+ if (this->unk_81 && sub_080044EC(super, 0x2800) == 1) {
EnqueueSFX(SFX_PLACE_OBJ);
}
sub_0802CC18(this);
- RegisterCarryEntity(this);
- if (this->subtimer && this->z.HALF.HI == 0) {
- this->subtimer = 0;
- COLLISION_ON(this);
- this->hitType = 0x6e;
+ RegisterCarryEntity(super);
+ if (super->subtimer && super->z.HALF.HI == 0) {
+ super->subtimer = 0;
+ COLLISION_ON(super);
+ super->hitType = 0x6e;
}
- GetNextFrame(this);
+ GetNextFrame(super);
}
}
-void nullsub_150(Entity* this) {
+void nullsub_150(BobombEntity* this) {
/* ... */
}
-void sub_0802CB68(Entity* this) {
- this->action = 1;
- this->subAction = 0;
- this->direction = Random() & 0x18;
- this->direction |= 4;
- COLLISION_ON(this);
- if (this->field_0x82.HALF.LO) {
- this->timer = 200;
- this->speed = 0x200;
- InitializeAnimation(this, (this->direction >> 4) | 2);
+void sub_0802CB68(BobombEntity* this) {
+ super->action = 1;
+ super->subAction = 0;
+ super->direction = Random() & 0x18;
+ super->direction |= 4;
+ COLLISION_ON(super);
+ if (this->unk_82) {
+ super->timer = 200;
+ super->speed = 0x200;
+ InitializeAnimation(super, (super->direction >> 4) | 2);
} else {
- this->timer = 60;
- this->speed = 0x80;
- InitializeAnimation(this, this->direction >> 4);
+ super->timer = 60;
+ super->speed = 0x80;
+ InitializeAnimation(super, super->direction >> 4);
}
}
-void sub_0802CBC4(Entity* this) {
- Entity* ent;
+void sub_0802CBC4(BobombEntity* this) {
+ Entity* entity;
- this->action = 4;
- this->spriteSettings.draw = 0;
- COLLISION_OFF(this);
- this->health = 0;
- if (this->field_0x82.HALF.HI) {
+ super->action = 4;
+ super->spriteSettings.draw = 0;
+ COLLISION_OFF(super);
+ super->health = 0;
+ if (this->unk_83) {
PlayerDropHeldObject();
}
- FreeCarryEntity(this);
+ FreeCarryEntity(super);
- ent = CreateObjectWithParent(this, SMOKE_PARTICLE, 0, 0);
- if (ent != NULL) {
- ent->collisionLayer = this->collisionLayer;
+ entity = CreateObjectWithParent(super, SMOKE_PARTICLE, 0, 0);
+ if (entity != NULL) {
+ entity->collisionLayer = super->collisionLayer;
}
}
-void sub_0802CC18(Entity* this) {
- if (--this->field_0x80.HALF.LO == 0) {
- this->field_0x80.HALF.LO = 28;
+void sub_0802CC18(BobombEntity* this) {
+ if (--this->unk_80 == 0) {
+ this->unk_80 = 28;
EnqueueSFX(SFX_14D);
}
}
// clang-format off
-void (*const Bobomb_Functions[])(Entity*) = {
+void (*const Bobomb_Functions[])(BobombEntity*) = {
Bobomb_OnTick,
Bobomb_OnCollision,
- GenericKnockback,
+ (void (*)(BobombEntity*))GenericKnockback,
Bobomb_OnDeath,
- GenericConfused,
+ (void (*)(BobombEntity*))GenericConfused,
Bobomb_OnGrabbed,
};
-void (*const gUnk_080CD5EC[])(Entity*) = {
+void (*const gUnk_080CD5EC[])(BobombEntity*) = {
sub_0802C8D8,
sub_0802C91C,
sub_0802C9B8,
@@ -320,7 +329,7 @@ void (*const gUnk_080CD5EC[])(Entity*) = {
nullsub_150,
};
-void (*const gUnk_080CD600[])(Entity*) = {
+void (*const gUnk_080CD600[])(BobombEntity*) = {
sub_0802C820,
sub_0802C82C,
sub_0802C834,
@@ -329,7 +338,7 @@ void (*const gUnk_080CD600[])(Entity*) = {
sub_0802C8B8,
};
-void (*const gUnk_080CD618[])(Entity*) = {
+void (*const gUnk_080CD618[])(BobombEntity*) = {
sub_0802C9D0,
sub_0802CA10,
sub_0802CA6C,
diff --git a/src/enemy/bombPeahat.c b/src/enemy/bombPeahat.c
index 96dbcba4..63a53074 100644
--- a/src/enemy/bombPeahat.c
+++ b/src/enemy/bombPeahat.c
@@ -4,593 +4,606 @@
*
* @brief Bomb Peahat enemy
*/
-
+#define NENT_DEPRECATED
#include "asm.h"
-#include "entity.h"
#include "enemy.h"
-#include "player.h"
-#include "object.h"
+#include "entity.h"
#include "functions.h"
+#include "object.h"
+#include "player.h"
-void sub_0802AD1C(Entity*, u32);
-void sub_0802AD54(Entity*);
-void sub_0802B048(Entity*);
-void sub_0802ACDC(Entity*, u32);
-void sub_0802ADDC(Entity*);
-void sub_0802AC40(Entity*);
-bool32 sub_0802B234(Entity*);
-Entity* sub_0802B250(Entity*);
-void sub_0802B264(Entity*);
-
-extern void (*const BombPeahat_Functions[])(Entity*);
-extern void (*const gUnk_080CD108[])(Entity*);
-extern void (*const gUnk_080CD120[])(Entity*);
-extern void (*const gUnk_080CD134[])(Entity*);
-extern void (*const gUnk_080CD140[])(Entity*);
-extern void (*const gUnk_080CD158[])(Entity*);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[16];
+ /*0x78*/ u8 unk_78;
+ /*0x79*/ u8 unk_79;
+ /*0x7a*/ u8 unk_7a;
+ /*0x7b*/ u8 unk_7b;
+ /*0x7c*/ u8 unused2[4];
+ /*0x80*/ u8 unk_80;
+ /*0x81*/ u8 unk_81;
+ /*0x82*/ u16 unk_82;
+} BombPeahatEntity;
+
+void sub_0802AD1C(BombPeahatEntity*, u32);
+void sub_0802AD54(BombPeahatEntity*);
+void sub_0802B048(BombPeahatEntity*);
+void sub_0802ACDC(BombPeahatEntity*, u32);
+void sub_0802ADDC(BombPeahatEntity*);
+void sub_0802AC40(BombPeahatEntity*);
+bool32 sub_0802B234(BombPeahatEntity*);
+BombPeahatEntity* sub_0802B250(BombPeahatEntity*);
+void sub_0802B264(BombPeahatEntity*);
+
+extern void (*const BombPeahat_Functions[])(BombPeahatEntity*);
+extern void (*const gUnk_080CD108[])(BombPeahatEntity*);
+extern void (*const gUnk_080CD120[])(BombPeahatEntity*);
+extern void (*const gUnk_080CD134[])(BombPeahatEntity*);
+extern void (*const gUnk_080CD140[])(BombPeahatEntity*);
+extern void (*const gUnk_080CD158[])(BombPeahatEntity*);
extern const Hitbox gUnk_080CD16C;
extern const Hitbox gUnk_080CD174;
extern const Hitbox gUnk_080CD17C;
-void BombPeahat(Entity* this) {
+void BombPeahat(BombPeahatEntity* this) {
s32 iVar1;
- if ((this->type == 2) && (iVar1 = sub_080012DC(this), iVar1)) {
- gUnk_080012C8[iVar1](this);
+ if ((super->type == 2) && (iVar1 = sub_080012DC(super), iVar1)) {
+ gUnk_080012C8[iVar1](super);
} else {
- BombPeahat_Functions[GetNextFunction(this)](this);
+ BombPeahat_Functions[GetNextFunction(super)](this);
}
}
-void BombPeahat_OnTick(Entity* this) {
- switch (this->type) {
+void BombPeahat_OnTick(BombPeahatEntity* this) {
+ switch (super->type) {
default:
- gUnk_080CD108[this->action](this);
+ gUnk_080CD108[super->action](this);
sub_0802AD54(this);
break;
case 2:
- gUnk_080CD120[this->action](this);
+ gUnk_080CD120[super->action](this);
sub_0802B048(this);
break;
case 3:
- gUnk_080CD134[this->action](this);
+ gUnk_080CD134[super->action](this);
break;
}
}
-void BombPeahat_OnCollision(Entity* this) {
- this->field_0x80.HALF.HI = 0;
- if (this->type < 2) {
- InitializeAnimation(this, 0);
+void BombPeahat_OnCollision(BombPeahatEntity* this) {
+ this->unk_81 = 0;
+ if (super->type < 2) {
+ InitializeAnimation(super, 0);
}
}
-void BombPeahat_OnGrabbed(Entity* this) {
- gUnk_080CD140[this->subAction](this);
+void BombPeahat_OnGrabbed(BombPeahatEntity* this) {
+ gUnk_080CD140[super->subAction](this);
}
-void sub_0802A8E0(Entity* this) {
- this->subAction = 1;
- this->gustJarTolerance = 60;
+void sub_0802A8E0(BombPeahatEntity* this) {
+ super->subAction = 1;
+ super->gustJarTolerance = 60;
}
-void sub_0802A8EC(Entity* this) {
- sub_0806F4E8(this);
+void sub_0802A8EC(BombPeahatEntity* this) {
+ sub_0806F4E8(super);
}
-void sub_0802A8F4(Entity* this) {
- sub_0806F3E4(this);
+void sub_0802A8F4(BombPeahatEntity* this) {
+ sub_0806F3E4(super);
}
-void sub_0802A8FC(Entity* this) {
+void sub_0802A8FC(BombPeahatEntity* this) {
if ((gPlayerState.field_0x1c & 0xf) == 0) {
- this->health = gPlayerState.field_0x1c & 0xf;
+ super->health = gPlayerState.field_0x1c & 0xf;
}
}
-void nullsub_143(Entity* this) {
+void nullsub_143(BombPeahatEntity* this) {
}
-void sub_0802A91C(Entity* this) {
- this->health = 0;
+void sub_0802A91C(BombPeahatEntity* this) {
+ super->health = 0;
}
-void sub_0802A924(Entity* this) {
- this->action = 1;
- this->subAction = 0;
- this->timer = 0;
- this->subtimer = 0;
- this->hitbox = (Hitbox*)&gUnk_080CD16C;
+void sub_0802A924(BombPeahatEntity* this) {
+ super->action = 1;
+ super->subAction = 0;
+ super->timer = 0;
+ super->subtimer = 0;
+ super->hitbox = (Hitbox*)&gUnk_080CD16C;
#ifdef EU
- this->collisionFlags |= 0x10;
+ super->collisionFlags |= 0x10;
#endif
- this->z.HALF.HI = -0x30;
- this->field_0x80.HALF.LO = Random() & 1;
- this->field_0x82.HWORD = 0;
- this->field_0x7a.HALF.HI = 0;
- this->field_0x80.HALF.HI = 0;
- this->field_0x7a.HALF.LO = 0;
+ super->z.HALF.HI = -0x30;
+ this->unk_80 = Random() & 1;
+ this->unk_82 = 0;
+ this->unk_7b = 0;
+ this->unk_81 = 0;
+ this->unk_7a = 0;
#ifndef EU
- this->field_0x78.HALF.LO = 0;
- this->field_0x78.HALF.HI = 0;
+ this->unk_78 = 0;
+ this->unk_79 = 0;
#endif
- this->collisionLayer = 3;
- this->spriteOrientation.flipY = 1;
- this->spriteRendering.b3 = 1;
- this->spritePriority.b0 = 1;
- InitializeAnimation(this, this->type + 1);
+ super->collisionLayer = 3;
+ super->spriteOrientation.flipY = 1;
+ super->spriteRendering.b3 = 1;
+ super->spritePriority.b0 = 1;
+ InitializeAnimation(super, super->type + 1);
}
-void sub_0802A9A8(Entity* this) {
- if (this->subtimer) {
- this->subtimer--;
+void sub_0802A9A8(BombPeahatEntity* this) {
+ if (super->subtimer) {
+ super->subtimer--;
} else {
- if (this->timer != 0) {
- if (--this->timer == 0) {
- this->action = 2;
- this->subAction = 0;
- this->timer = 64;
+ if (super->timer != 0) {
+ if (--super->timer == 0) {
+ super->action = 2;
+ super->subAction = 0;
+ super->timer = 64;
sub_0802ACDC(this, 8);
}
} else {
if (gRoomControls.reload_flags != 0) {
return;
}
- this->spriteSettings.draw = 1;
- this->field_0x82.HWORD = 1;
- if (this->field_0x80.HALF.LO) {
- this->x.HALF.HI = gRoomControls.scroll_x - 0x10;
- this->direction = 8;
+ super->spriteSettings.draw = 1;
+ this->unk_82 = 1;
+ if (this->unk_80) {
+ super->x.HALF.HI = gRoomControls.scroll_x - 0x10;
+ super->direction = 8;
} else {
- this->x.HALF.HI = gRoomControls.scroll_x + 0x100;
- this->direction = 0x18;
+ super->x.HALF.HI = gRoomControls.scroll_x + 0x100;
+ super->direction = 0x18;
}
- this->y.HALF.HI = gRoomControls.scroll_y + 0x40;
- this->timer = 128;
+ super->y.HALF.HI = gRoomControls.scroll_y + 0x40;
+ super->timer = 128;
sub_0802ADDC(this);
}
sub_0802AC40(this);
}
}
-void sub_0802AA40(Entity* this) {
+void sub_0802AA40(BombPeahatEntity* this) {
sub_0802AC40(this);
- if (--this->subtimer == 0) {
+ if (--super->subtimer == 0) {
sub_0802ACDC(this, 8);
- this->field_0x7a.HALF.HI++;
+ this->unk_7b++;
}
- if (this->timer != 0) {
- this->timer--;
+ if (super->timer != 0) {
+ super->timer--;
} else {
- Entity* ent = this->child;
- if (ent != NULL) {
- if (ent->next == NULL) {
- this->child = NULL;
+ BombPeahatEntity* entity = (BombPeahatEntity*)super->child;
+ if (entity != NULL) {
+ if (entity->base.next == NULL) {
+ super->child = NULL;
} else {
- u32 direction = DirectionRound(this->field_0x80.HALF.LO * 0x10 + 0x18);
+ u32 direction = DirectionRound(this->unk_80 * 0x10 + 0x18);
- if (0x20 < this->field_0x7a.HALF.HI) {
- this->direction = direction;
+ if (0x20 < this->unk_7b) {
+ super->direction = direction;
}
- if (this->direction == direction) {
- this->action = 3;
- this->speed = 0x180;
- this->field_0x7a.HALF.HI = 0;
- ent->field_0x80.HALF.LO = 1;
- ent->timer = 150;
+ if (super->direction == direction) {
+ super->action = 3;
+ super->speed = 0x180;
+ this->unk_7b = 0;
+ entity->unk_80 = 1;
+ entity->base.timer = 150;
}
}
}
}
}
-void sub_0802AAC0(Entity* this) {
+void sub_0802AAC0(BombPeahatEntity* this) {
sub_0802AC40(this);
- if (--this->subtimer == 0) {
+ if (--super->subtimer == 0) {
sub_0802AD1C(this, 4);
}
- if (this->field_0x80.HALF.HI) {
- Entity* ent = this->child;
- if (ent == NULL) {
- this->field_0x80.HALF.HI = 0;
- } else if (ent->next == NULL) {
- this->field_0x80.HALF.HI = 0;
- this->child = NULL;
+ if (this->unk_81) {
+ Entity* entity = super->child;
+ if (entity == NULL) {
+ this->unk_81 = 0;
+ } else if (entity->next == NULL) {
+ this->unk_81 = 0;
+ super->child = NULL;
#ifdef EU
- } else if (ent->timer == 0) {
- if (sub_080B1B44(COORD_TO_TILE(this), 1) == 0) {
- if (EntityInRectRadius(this, &gPlayerEntity, 0x10, 0x10) && ent->subtimer <= 0x50) {
- this->field_0x80.HALF.HI = 0;
+ } else if (entity->timer == 0) {
+ if (sub_080B1B44(COORD_TO_TILE(super), 1) == 0) {
+ if (EntityInRectRadius(super, &gPlayerEntity, 0x10, 0x10) && entity->subtimer <= 0x50) {
+ this->unk_81 = 0;
}
- } else if (ent->subtimer <= 0x13) {
- this->field_0x80.HALF.HI = 0;
+ } else if (entity->subtimer <= 0x13) {
+ this->unk_81 = 0;
}
}
#else
- } else if ((ent->timer == 0) && (ent->subtimer <= 0x50)) {
- this->field_0x80.HALF.HI = 0;
+ } else if ((entity->timer == 0) && (entity->subtimer <= 0x50)) {
+ this->unk_81 = 0;
}
#endif
} else {
- this->action = 4;
- this->timer = 192;
- this->subtimer = 4;
- this->field_0x80.HALF.LO ^= 1;
+ super->action = 4;
+ super->timer = 192;
+ super->subtimer = 4;
+ this->unk_80 ^= 1;
#ifndef EU
- this->field_0x78.HALF.LO = 0;
- this->field_0x78.HALF.HI = 4;
- this->direction = 0xff;
+ this->unk_78 = 0;
+ this->unk_79 = 4;
+ super->direction = 0xff;
#endif
- InitializeAnimation(this, 0);
+ InitializeAnimation(super, 0);
}
}
#ifdef EU
-void sub_0802AB40(Entity* this) {
- sub_0802AC40(this);
- if (--this->timer == 0) {
- if (this->field_0x7a.HALF.LO <= 4) {
- this->action = 5;
- this->speed = 0;
- InitializeAnimation(this, this->type + 1);
+void sub_0802AB40(BombPeahatEntity* this) {
+ sub_0802AC40(super);
+ if (--super->timer == 0) {
+ if (this->unk_7a <= 4) {
+ super->action = 5;
+ super->speed = 0;
+ InitializeAnimation(super, super->type + 1);
} else {
- this->timer = 192;
- this->subtimer = 4;
- this->field_0x80.HALF.LO ^= 1;
+ super->timer = 192;
+ super->subtimer = 4;
+ this->unk_80 ^= 1;
}
- } else if (--this->subtimer == 0) {
- sub_0802ACDC(this, 4);
+ } else if (--super->subtimer == 0) {
+ sub_0802ACDC(super, 4);
}
}
#else
-void sub_0802AB40(Entity* this) {
+void sub_0802AB40(BombPeahatEntity* this) {
sub_0802AC40(this);
- switch (this->field_0x78.HALF.LO) {
+ switch (this->unk_78) {
case 0:
- if (this->z.HALF.HI) {
- if (--this->field_0x78.HALF.HI == 0) {
- this->field_0x78.HALF.HI = 4;
- this->z.HALF.HI++;
+ if (super->z.HALF.HI) {
+ if (--this->unk_79 == 0) {
+ this->unk_79 = 4;
+ super->z.HALF.HI++;
}
} else {
- this->field_0x78.HALF.LO = 1;
- this->field_0x78.HALF.HI = 0x30;
- this->direction = sub_08049F84(this, 0);
+ this->unk_78 = 1;
+ this->unk_79 = 0x30;
+ super->direction = sub_08049F84(super, 0);
}
break;
case 1:
- if (--this->field_0x78.HALF.HI == 0) {
- this->field_0x78.HALF.LO = 2;
- this->field_0x78.HALF.HI = 4;
- } else if ((this->field_0x78.HALF.HI & 7) == 0) {
- this->direction = sub_08049F84(this, 0);
+ if (--this->unk_79 == 0) {
+ this->unk_78 = 2;
+ this->unk_79 = 4;
+ } else if ((this->unk_79 & 7) == 0) {
+ super->direction = sub_08049F84(super, 0);
}
break;
case 2:
- if (-0x30 < this->z.HALF.HI) {
- if (--this->field_0x78.HALF.HI == 0) {
- this->field_0x78.HALF.HI = 4;
- this->z.HALF.HI--;
+ if (-0x30 < super->z.HALF.HI) {
+ if (--this->unk_79 == 0) {
+ this->unk_79 = 4;
+ super->z.HALF.HI--;
sub_0802ACDC(this, 4);
}
} else {
- this->action = 5;
- this->speed = 0;
- InitializeAnimation(this, this->type + 1);
+ super->action = 5;
+ super->speed = 0;
+ InitializeAnimation(super, super->type + 1);
}
break;
}
}
#endif
-void sub_0802AC08(Entity* this) {
- if (this->frame & ANIM_DONE) {
- this->action = 2;
- this->subAction = 0;
- this->timer = 64;
- this->speed = 0xc0;
+void sub_0802AC08(BombPeahatEntity* this) {
+ if (super->frame & ANIM_DONE) {
+ super->action = 2;
+ super->subAction = 0;
+ super->timer = 64;
+ super->speed = 0xc0;
sub_0802ACDC(this, 8);
sub_0802ADDC(this);
}
- GetNextFrame(this);
+ GetNextFrame(super);
}
-void sub_0802AC40(Entity* this) {
- GetNextFrame(this);
- LinearMoveUpdate(this);
- if (this->field_0x7a.HALF.LO) {
+void sub_0802AC40(BombPeahatEntity* this) {
+ GetNextFrame(super);
+ LinearMoveUpdate(super);
+ if (this->unk_7a) {
if (!sub_0802B234(this)) {
- this->field_0x7a.HALF.LO = 0;
- this->spritePriority.b1 = 0;
+ this->unk_7a = 0;
+ super->spritePriority.b1 = 0;
#ifndef EU
} else {
- if (this->z.HALF.HI == 0) {
- if (this->spritePriority.b1 != 1) {
- this->spritePriority.b1 = 1;
+ if (super->z.HALF.HI == 0) {
+ if (super->spritePriority.b1 != 1) {
+ super->spritePriority.b1 = 1;
}
} else {
- if (this->spritePriority.b1 != 3) {
- this->spritePriority.b1 = 3;
+ if (super->spritePriority.b1 != 3) {
+ super->spritePriority.b1 = 3;
}
}
#endif
}
} else {
if (sub_0802B234(this)) {
- this->field_0x7a.HALF.LO = 1;
+ this->unk_7a = 1;
#ifndef EU
- if (this->z.HALF.HI == 0) {
- this->spritePriority.b1 = 1;
+ if (super->z.HALF.HI == 0) {
+ super->spritePriority.b1 = 1;
} else {
- this->spritePriority.b1 = 3;
+ super->spritePriority.b1 = 3;
}
#else
- this->spritePriority.b1 = 3;
+ super->spritePriority.b1 = 3;
#endif
}
}
}
-void sub_0802ACDC(Entity* this, u32 param_2) {
+void sub_0802ACDC(BombPeahatEntity* this, u32 param_2) {
u32 x;
- if (this->field_0x80.HALF.LO) {
- x = sub_080045B4(this, gRoomControls.scroll_x + 0x20, gRoomControls.scroll_y + 0x60);
+ if (this->unk_80) {
+ x = sub_080045B4(super, gRoomControls.scroll_x + 0x20, gRoomControls.scroll_y + 0x60);
} else {
- x = sub_080045B4(this, gRoomControls.scroll_x + 0xd0, gRoomControls.scroll_y + 0x60);
+ x = sub_080045B4(super, gRoomControls.scroll_x + 0xd0, gRoomControls.scroll_y + 0x60);
}
- sub_08004596(this, x);
- this->subtimer = param_2;
+ sub_08004596(super, x);
+ super->subtimer = param_2;
}
-void sub_0802AD1C(Entity* this, u32 param_2) {
- Entity* ent = sub_08049DF4(1);
- if (ent != NULL) {
- u32 y = ent->y.HALF.HI - 0x18;
- u32 x = ent->x.HALF.HI;
- sub_08004596(this, sub_080045B4(this, x, y));
- this->subtimer = param_2;
+void sub_0802AD1C(BombPeahatEntity* this, u32 param_2) {
+ Entity* entity = sub_08049DF4(1);
+ if (entity != NULL) {
+ u32 y = entity->y.HALF.HI - 0x18;
+ u32 x = entity->x.HALF.HI;
+ sub_08004596(super, sub_080045B4(super, x, y));
+ super->subtimer = param_2;
} else {
sub_0802ACDC(this, param_2);
}
}
-void sub_0802AD54(Entity* this) {
- if (this->field_0x82.HWORD != 0) {
+void sub_0802AD54(BombPeahatEntity* this) {
+ if (this->unk_82 != 0) {
if (gRoomControls.reload_flags != 0) {
- this->spriteSettings.draw = 0;
- DeleteEntity(this);
+ super->spriteSettings.draw = 0;
+ DeleteEntity(super);
return;
}
- if (gRoomControls.origin_y > this->y.HALF.HI ||
- (gRoomControls.origin_y + gRoomControls.height + 0x20) < this->y.HALF.HI) {
- this->spriteSettings.draw = 0;
+ if (gRoomControls.origin_y > super->y.HALF.HI ||
+ (gRoomControls.origin_y + gRoomControls.height + 0x20) < super->y.HALF.HI) {
+ super->spriteSettings.draw = 0;
} else {
- this->spriteSettings.draw = 1;
+ super->spriteSettings.draw = 1;
}
}
- if (this->field_0x80.HALF.HI) {
- if (this->child == NULL || this->child->next == NULL) {
- this->action = 4;
- this->timer = 192;
- this->subtimer = 4;
- this->field_0x80.HALF.LO ^= 1;
+ if (this->unk_81) {
+ if (super->child == NULL || super->child->next == NULL) {
+ super->action = 4;
+ super->timer = 192;
+ super->subtimer = 4;
+ this->unk_80 ^= 1;
}
}
}
-void sub_0802ADDC(Entity* this) {
- Entity* ent = CreateEnemy(BOMB_PEAHAT, this->type + 2);
- if (ent != NULL) {
- ent->type2 = !!sub_0802B234(this);
- ent->parent = this;
- this->child = ent;
- CopyPosition(this, ent);
+void sub_0802ADDC(BombPeahatEntity* this) {
+ Entity* entity = CreateEnemy(BOMB_PEAHAT, super->type + 2);
+ if (entity != NULL) {
+ entity->type2 = !!sub_0802B234(this);
+ entity->parent = super;
+ super->child = entity;
+ CopyPosition(super, entity);
#ifdef EU
- ent->z.HALF.HI += 8;
+ entity->z.HALF.HI += 8;
#endif
- this->field_0x80.HALF.HI = 1;
- if (this->type == 0) {
- this->field_0x7a.HALF.LO++;
+ this->unk_81 = 1;
+ if (super->type == 0) {
+ this->unk_7a++;
}
}
}
-void sub_0802AE24(Entity* this) {
- this->action = 1;
- this->timer = 240;
- this->zVelocity = Q_16_16(0.5);
- this->hitbox = (Hitbox*)&gUnk_080CD174;
- this->collisionFlags = 3;
- this->carryFlags = 0;
- this->gustJarFlags = 2;
- this->field_0x80.HALF.HI = 0;
- this->field_0x7a.HALF.HI = 1;
- InitializeAnimation(this, 3);
+void sub_0802AE24(BombPeahatEntity* this) {
+ super->action = 1;
+ super->timer = 240;
+ super->zVelocity = Q_16_16(0.5);
+ super->hitbox = (Hitbox*)&gUnk_080CD174;
+ super->collisionFlags = 3;
+ super->carryFlags = 0;
+ super->gustJarFlags = 2;
+ this->unk_81 = 0;
+ this->unk_7b = 1;
+ InitializeAnimation(super, 3);
}
#ifdef EU
-void sub_0802AE68(Entity* this) {
- Entity* ent = this->parent;
- if (ent == NULL) {
- this->action = 3;
- this->spriteSettings.draw = 1;
- this->field_0x80.HALF.LO = 1;
- }
-
- if (ent->field_0x80.HALF.HI) {
- CopyPosition(ent, this);
- this->z.HALF.HI += 8;
- this->spriteSettings.draw = 0;
+void sub_0802AE68(BombPeahatEntity* this) {
+ Entity* entity = super->parent;
+ if (entity == NULL) {
+ super->action = 3;
+ super->spriteSettings.draw = 1;
+ this->unk_80 = 1;
+ }
+
+ if (entity->field_0x80.HALF.HI) {
+ CopyPosition(entity, super);
+ super->z.HALF.HI += 8;
+ super->spriteSettings.draw = 0;
} else {
- this->action = 3;
- this->field_0x80.HALF.LO = 1;
- this->spriteSettings.draw = 1;
- if (sub_0802B234(this)) {
- this->spritePriority.b1 = 3;
+ super->action = 3;
+ this->unk_80 = 1;
+ super->spriteSettings.draw = 1;
+ if (sub_0802B234(super)) {
+ super->spritePriority.b1 = 3;
} else {
- this->spritePriority.b1 = 0;
+ super->spritePriority.b1 = 0;
}
- GetNextFrame(this);
+ GetNextFrame(super);
}
}
#else
-void sub_0802AE68(Entity* this) {
- Entity* ent = sub_0802B250(this);
- if (ent == NULL) {
- this->action = 3;
- this->field_0x80.HALF.LO = 1;
+void sub_0802AE68(BombPeahatEntity* this) {
+ BombPeahatEntity* entity = sub_0802B250(this);
+ if (entity == NULL) {
+ super->action = 3;
+ this->unk_80 = 1;
sub_0802B264(this);
} else {
- if (ent->field_0x80.HALF.HI) {
- CopyPosition(ent, this);
- this->spriteSettings.draw = 0;
+ if (entity->unk_81) {
+ CopyPosition(&entity->base, super);
+ super->spriteSettings.draw = 0;
} else {
- this->action = 3;
- this->field_0x80.HALF.LO = 1;
+ super->action = 3;
+ this->unk_80 = 1;
sub_0802B264(this);
}
}
}
#endif
-void sub_0802AEBC(Entity* this) {
- gUnk_080CD158[this->subAction](this);
+void sub_0802AEBC(BombPeahatEntity* this) {
+ gUnk_080CD158[super->subAction](this);
}
-void sub_0802AED4(Entity* this) {
- GetNextFrame(this);
- if (this->field_0x80.HALF.HI < 2) {
- if (sub_080044EC(this, 0x2800) == 1) {
- this->field_0x80.HALF.HI++;
+void sub_0802AED4(BombPeahatEntity* this) {
+ GetNextFrame(super);
+ if (this->unk_81 < 2) {
+ if (sub_080044EC(super, 0x2800) == 1) {
+ this->unk_81++;
}
} else {
- if (!sub_0800442E(this)) {
- RegisterCarryEntity(this);
+ if (!sub_0800442E(super)) {
+ RegisterCarryEntity(super);
}
}
- if (this->type2 != 0 && this->field_0x80.HALF.HI) {
- this->timer = 0;
- this->subtimer = 1;
+ if (super->type2 != 0 && this->unk_81) {
+ super->timer = 0;
+ super->subtimer = 1;
}
}
-void sub_0802AF28(Entity* this) {
- this->subAction = 1;
- sub_08079BD8(this);
- this->spritePriority.b1 = 2;
- GetNextFrame(this);
+void sub_0802AF28(BombPeahatEntity* this) {
+ super->subAction = 1;
+ sub_08079BD8(super);
+ super->spritePriority.b1 = 2;
+ GetNextFrame(super);
}
-void sub_0802AF50(Entity* this) {
- GetNextFrame(this);
+void sub_0802AF50(BombPeahatEntity* this) {
+ GetNextFrame(super);
}
-void sub_0802AF58(Entity* this) {
- GetNextFrame(this);
- this->spritePriority.b1 = 3;
+void sub_0802AF58(BombPeahatEntity* this) {
+ GetNextFrame(super);
+ super->spritePriority.b1 = 3;
}
-void sub_0802AF74(Entity* this) {
- this->action = 3;
- this->subAction = 0;
- if (this->timer > 60) {
- this->timer = 60;
+void sub_0802AF74(BombPeahatEntity* this) {
+ super->action = 3;
+ super->subAction = 0;
+ if (super->timer > 60) {
+ super->timer = 60;
}
- GetNextFrame(this);
+ GetNextFrame(super);
}
-void sub_0802AF94(Entity* this) {
- DeleteEntity(this);
+void sub_0802AF94(BombPeahatEntity* this) {
+ DeleteEntity(super);
}
-void sub_0802AF9C(Entity* this) {
- GetNextFrame(this);
- if (--this->timer == 0) {
- if (this->parent->field_0x7a.HALF.LO) {
- this->parent->field_0x7a.HALF.LO--;
+void sub_0802AF9C(BombPeahatEntity* this) {
+ GetNextFrame(super);
+ if (--super->timer == 0) {
+ if (((BombPeahatEntity*)super->parent)->unk_7a) {
+ ((BombPeahatEntity*)super->parent)->unk_7a--;
}
- DeleteEntity(this);
+ DeleteEntity(super);
}
}
-void sub_0802AFC8(Entity* this) {
- u32 subtimer = this->subtimer;
+void sub_0802AFC8(BombPeahatEntity* this) {
+ u32 subtimer = super->subtimer;
u32 flag = 8;
if (subtimer < 0x29) {
u32 tmp, tmp2;
flag = 4;
- if (this->field_0x82.HWORD & 0x8000) {
- this->field_0x82.HWORD -= 0x10;
+ if (this->unk_82 & 0x8000) {
+ this->unk_82 -= 0x10;
} else {
- this->field_0x82.HWORD += 0x10;
+ this->unk_82 += 0x10;
}
- tmp = this->field_0x82.HWORD & 0xf0;
+ tmp = this->unk_82 & 0xf0;
if (tmp == 0 || tmp > 0x80) {
- this->field_0x82.HWORD ^= 0x8000;
+ this->unk_82 ^= 0x8000;
}
- tmp = this->field_0x82.HWORD & 0xf0;
- SetAffineInfo(this, 0x130 - tmp, 0x130 - tmp, 0);
+ tmp = this->unk_82 & 0xf0;
+ SetAffineInfo(super, 0x130 - tmp, 0x130 - tmp, 0);
}
- if (this->subtimer & flag) {
- this->palette.b.b0 = this->palette.b.b4;
+ if (super->subtimer & flag) {
+ super->palette.b.b0 = super->palette.b.b4;
} else {
- this->palette.b.b0 = 0;
+ super->palette.b.b0 = 0;
}
}
-void sub_0802B048(Entity* this) {
- Entity* ent;
+void sub_0802B048(BombPeahatEntity* this) {
+ Entity* entity;
u32 action;
- if (this->field_0x7a.HALF.HI) {
- if (gRoomControls.origin_y > this->y.HALF.HI ||
- (gRoomControls.origin_y + gRoomControls.height + 0x20) < this->y.HALF.HI) {
- COLLISION_OFF(this);
+ if (this->unk_7b) {
+ if (gRoomControls.origin_y > super->y.HALF.HI ||
+ (gRoomControls.origin_y + gRoomControls.height + 0x20) < super->y.HALF.HI) {
+ COLLISION_OFF(super);
} else {
- COLLISION_ON(this);
+ COLLISION_ON(super);
}
}
- ent = this->parent;
- if ((ent != NULL) && this->action == 1) {
- this->spriteRendering.b3 = ent->spriteRendering.b3;
- this->spritePriority.b0 = ent->spritePriority.b0;
- this->spriteOrientation.flipY = ent->spriteOrientation.flipY;
+ entity = super->parent;
+ if ((entity != NULL) && super->action == 1) {
+ super->spriteRendering.b3 = entity->spriteRendering.b3;
+ super->spritePriority.b0 = entity->spritePriority.b0;
+ super->spriteOrientation.flipY = entity->spriteOrientation.flipY;
}
- action = this->action;
- if (action != 4 && this->field_0x80.HALF.LO) {
- if (this->timer != 0) {
- if (--this->timer == 0) {
- this->subtimer = 80;
- this->field_0x82.HWORD = 0;
- this->spriteRendering.b0 = 3;
- SetAffineInfo(this, 0x100, 0x100, 0);
+ action = super->action;
+ if (action != 4 && this->unk_80) {
+ if (super->timer != 0) {
+ if (--super->timer == 0) {
+ super->subtimer = 80;
+ this->unk_82 = 0;
+ super->spriteRendering.b0 = 3;
+ SetAffineInfo(super, 0x100, 0x100, 0);
}
} else {
- if (this->subtimer) {
- if (--this->subtimer == 0) {
- if (action == 2 && this->subAction == 1) {
+ if (super->subtimer) {
+ if (--super->subtimer == 0) {
+ if (action == 2 && super->subAction == 1) {
gPlayerState.heldObject = 0;
}
- sub_0805EC60(this);
- this->action = 4;
- this->hitbox = (Hitbox*)&gUnk_080CD17C;
- this->timer = 15;
- this->spriteSettings.draw = 0;
- COLLISION_ON(this);
- this->field_0x7a.HALF.HI = 0;
- FreeCarryEntity(this);
- if (this->parent->next != NULL) {
- this->parent->field_0x80.HALF.HI = 0;
+ sub_0805EC60(super);
+ super->action = 4;
+ super->hitbox = (Hitbox*)&gUnk_080CD17C;
+ super->timer = 15;
+ super->spriteSettings.draw = 0;
+ COLLISION_ON(super);
+ this->unk_7b = 0;
+ FreeCarryEntity(super);
+ if (super->parent->next != NULL) {
+ ((BombPeahatEntity*)super->parent)->unk_81 = 0;
}
- ent = CreateObjectWithParent(this, SMOKE_PARTICLE, 0, 0);
- if (ent != NULL) {
- this->collisionLayer = 1;
+ entity = CreateObjectWithParent(super, SMOKE_PARTICLE, 0, 0);
+ if (entity != NULL) {
+ super->collisionLayer = 1;
} else {
- DeleteEntity(this);
+ DeleteEntity(super);
}
} else {
sub_0802AFC8(this);
@@ -600,116 +613,116 @@ void sub_0802B048(Entity* this) {
}
}
-void sub_0802B1A0(Entity* this) {
- this->action = 1;
- this->timer = 0;
- this->subtimer = 79;
- this->field_0x80.HALF.HI = 1;
- InitializeAnimation(this, 0);
+void sub_0802B1A0(BombPeahatEntity* this) {
+ super->action = 1;
+ super->timer = 0;
+ super->subtimer = 79;
+ this->unk_81 = 1;
+ InitializeAnimation(super, 0);
}
#ifdef EU
-void sub_0802B1BC(Entity* this) {
- Entity* ent;
+void sub_0802B1BC(BombPeahatEntity* this) {
+ Entity* entity;
- if (this->timer != 0) {
- this->timer--;
+ if (super->timer != 0) {
+ super->timer--;
}
- ent = this->parent;
- if (ent == NULL) {
- this->action = 2;
- this->spriteSettings.draw = 1;
+ entity = super->parent;
+ if (entity == NULL) {
+ super->action = 2;
+ super->spriteSettings.draw = 1;
}
- if (ent->field_0x80.HALF.HI) {
- CopyPosition(ent, this);
- this->z.HALF.HI += 8;
+ if (entity->field_0x80.HALF.HI) {
+ CopyPosition(entity, super);
+ super->z.HALF.HI += 8;
} else {
- this->action = 2;
- this->spriteSettings.draw = 1;
- if (sub_0802B234(this)) {
- this->spritePriority.b1 = 3;
+ super->action = 2;
+ super->spriteSettings.draw = 1;
+ if (sub_0802B234(super)) {
+ super->spritePriority.b1 = 3;
} else {
- this->spritePriority.b1 = 0;
+ super->spritePriority.b1 = 0;
}
- GetNextFrame(this);
+ GetNextFrame(super);
}
}
#else
-void sub_0802B1BC(Entity* this) {
- Entity* ent;
+void sub_0802B1BC(BombPeahatEntity* this) {
+ BombPeahatEntity* entity;
- if (this->timer != 0) {
- this->timer--;
+ if (super->timer != 0) {
+ super->timer--;
}
- ent = sub_0802B250(this);
- if (ent == NULL) {
- this->action = 2;
+ entity = sub_0802B250(this);
+ if (entity == NULL) {
+ super->action = 2;
sub_0802B264(this);
} else {
- if (ent->field_0x80.HALF.HI) {
- CopyPosition(ent, this);
+ if (entity->unk_81) {
+ CopyPosition(&entity->base, super);
} else {
- this->action = 2;
+ super->action = 2;
sub_0802B264(this);
}
}
}
#endif
-void sub_0802B204(Entity* this) {
- if (sub_080044EC(this, 0x2800) == 1) {
- Entity* ent = CreateEnemy(BOBOMB, 1);
- if (ent != NULL) {
- CopyPosition(this, ent);
- ent->parent = this->parent;
+void sub_0802B204(BombPeahatEntity* this) {
+ if (sub_080044EC(super, 0x2800) == 1) {
+ Entity* entity = CreateEnemy(BOBOMB, 1);
+ if (entity != NULL) {
+ CopyPosition(super, entity);
+ entity->parent = super->parent;
}
DeleteThisEntity();
}
}
-bool32 sub_0802B234(Entity* this) {
+bool32 sub_0802B234(BombPeahatEntity* this) {
bool32 ret = FALSE;
- if (GetTileTypeByEntity(this) - 0x1c4 > 1)
+ if (GetTileTypeByEntity(super) - 0x1c4 > 1)
ret = TRUE;
return ret;
}
#ifndef EU
-Entity* sub_0802B250(Entity* this) {
- Entity* parent = this->parent;
- if ((parent != NULL) && (parent->next == NULL)) {
+BombPeahatEntity* sub_0802B250(BombPeahatEntity* this) {
+ BombPeahatEntity* parent = (BombPeahatEntity*)super->parent;
+ if ((parent != NULL) && (parent->base.next == NULL)) {
parent = NULL;
}
return parent;
}
-void sub_0802B264(Entity* this) {
- this->spriteSettings.draw = 1;
+void sub_0802B264(BombPeahatEntity* this) {
+ super->spriteSettings.draw = 1;
if (sub_0802B234(this)) {
- this->spritePriority.b1 = 3;
+ super->spritePriority.b1 = 3;
} else {
- this->spritePriority.b1 = 0;
+ super->spritePriority.b1 = 0;
}
- GetNextFrame(this);
+ GetNextFrame(super);
}
#endif
// clang-format off
-void (*const BombPeahat_Functions[])(Entity*) = {
+void (*const BombPeahat_Functions[])(BombPeahatEntity*) = {
BombPeahat_OnTick,
BombPeahat_OnCollision,
- GenericKnockback,
- GenericDeath,
- GenericConfused,
+ (void (*)(BombPeahatEntity*))GenericKnockback,
+ (void (*)(BombPeahatEntity*))GenericDeath,
+ (void (*)(BombPeahatEntity*))GenericConfused,
BombPeahat_OnGrabbed,
};
-void (*const gUnk_080CD108[])(Entity*) = {
+void (*const gUnk_080CD108[])(BombPeahatEntity*) = {
sub_0802A924,
sub_0802A9A8,
sub_0802AA40,
@@ -718,7 +731,7 @@ void (*const gUnk_080CD108[])(Entity*) = {
sub_0802AC08,
};
-void (*const gUnk_080CD120[])(Entity*) = {
+void (*const gUnk_080CD120[])(BombPeahatEntity*) = {
sub_0802AE24,
sub_0802AE68,
sub_0802AEBC,
@@ -726,13 +739,13 @@ void (*const gUnk_080CD120[])(Entity*) = {
sub_0802AF9C,
};
-void (*const gUnk_080CD134[])(Entity*) = {
+void (*const gUnk_080CD134[])(BombPeahatEntity*) = {
sub_0802B1A0,
sub_0802B1BC,
sub_0802B204,
};
-void (*const gUnk_080CD140[])(Entity*) = {
+void (*const gUnk_080CD140[])(BombPeahatEntity*) = {
sub_0802A8E0,
sub_0802A8EC,
sub_0802A8F4,
@@ -741,7 +754,7 @@ void (*const gUnk_080CD140[])(Entity*) = {
sub_0802A91C,
};
-void (*const gUnk_080CD158[])(Entity*) = {
+void (*const gUnk_080CD158[])(BombPeahatEntity*) = {
sub_0802AF28,
sub_0802AF50,
sub_0802AF58,
diff --git a/src/enemy/bombarossa.c b/src/enemy/bombarossa.c
index 8ef13341..1f9120fe 100644
--- a/src/enemy/bombarossa.c
+++ b/src/enemy/bombarossa.c
@@ -1,8 +1,14 @@
+/**
+ * @file bombarossa.c
+ * @ingroup Enemies
+ *
+ * @brief Bombarossa enemy
+ */
#define NENT_DEPRECATED
-#include "entity.h"
#include "enemy.h"
-#include "room.h"
+#include "entity.h"
#include "object.h"
+#include "room.h"
typedef struct {
Entity base;
@@ -39,12 +45,12 @@ void Bombarossa_OnTick(BombarossaEntity* this) {
}
void Bombarossa_OnCollision(BombarossaEntity* this) {
- Entity* ent;
+ Entity* entity;
switch (super->contactFlags & 0x7f) {
default:
- ent = CreateObject(SMOKE_PARTICLE, 0, 0);
- if (ent != NULL) {
- CopyPosition(super, ent);
+ entity = CreateObject(SMOKE_PARTICLE, 0, 0);
+ if (entity != NULL) {
+ CopyPosition(super, entity);
}
DeleteThisEntity();
case 1:
diff --git a/src/enemy/bowMoblin.c b/src/enemy/bowMoblin.c
index fd7e73bd..1f6bdbb5 100644
--- a/src/enemy/bowMoblin.c
+++ b/src/enemy/bowMoblin.c
@@ -4,11 +4,9 @@
*
* @brief Bow Moblin enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
-#include "entity.h"
#include "enemy.h"
+#include "entity.h"
#include "functions.h"
typedef struct {
@@ -270,16 +268,16 @@ void sub_0803C4B0(BowMoblinEntity* this) {
bool32 sub_0803C568(BowMoblinEntity* this) {
if (this->unk_0x81 == 0) {
- Entity* ent = sub_08049DF4(1);
- if (ent != NULL) {
+ Entity* entity = sub_08049DF4(1);
+ if (entity != NULL) {
if (this->unk_0x82 == 2) {
- if (sub_0806FC80(super, ent, 0x30)) {
+ if (sub_0806FC80(super, entity, 0x30)) {
return TRUE;
}
}
- if (sub_0806FC80(super, ent, 0x40)) {
- u32 direction = (GetFacingDirection(super, ent) + 4) & 0x18;
+ if (sub_0806FC80(super, entity, 0x40)) {
+ u32 direction = (GetFacingDirection(super, entity) + 4) & 0x18;
direction = direction >> 2;
if (direction == super->animationState) {
return TRUE;
diff --git a/src/enemy/businessScrub.c b/src/enemy/businessScrub.c
index 823a8740..d1dbd054 100644
--- a/src/enemy/businessScrub.c
+++ b/src/enemy/businessScrub.c
@@ -4,35 +4,16 @@
*
* @brief Business Scrub enemy
*/
-
+#define NENT_DEPRECATED
#include "asm.h"
#include "enemy.h"
-#include "message.h"
-#include "save.h"
-#include "npc.h"
#include "functions.h"
#include "game.h"
#include "item.h"
#include "kinstone.h"
-
-void sub_08028E9C(Entity*);
-void sub_08028EDC(Entity*);
-bool32 sub_08028F98(Entity*, u32);
-bool32 sub_08028FDC(Entity*);
-void sub_08028FFC(Entity*);
-void sub_08029078(Entity*);
-void sub_080290E0(Entity*, u32);
-void sub_080290FC(Entity*);
-bool32 sub_0802915C(Entity*);
-bool32 BusinessScrub_CheckRefillFitsBag(Entity*);
-void sub_0802922C(Entity*);
-void sub_0802925C(Entity*);
-
-extern const struct SalesOffering gUnk_080CC954[];
-extern const u8 kinstoneTypes[];
-extern void (*const BusinessScrub_Functions[])(Entity*);
-extern void (*const BusinessScrub_Actions[])(Entity*);
-extern const u8 gUnk_080CCA04[];
+#include "message.h"
+#include "npc.h"
+#include "save.h"
struct SalesOffering {
u8 field_0x0;
@@ -45,131 +26,165 @@ struct SalesOffering {
u16 local_flag;
};
-void BusinessScrub(Entity* this) {
- EnemyFunctionHandler(this, BusinessScrub_Functions);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[12];
+ /*0x74*/ u16 unk_74;
+ /*0x76*/ u16 unk_76;
+ /*0x78*/ u16 unk_78;
+ /*0x7a*/ u16 unk_7a;
+ /*0x7c*/ const struct SalesOffering* unk_7c;
+ /*0x80*/ u8 unk_80;
+ /*0x81*/ u8 unk_81;
+ /*0x82*/ u8 unused2[4];
+ /*0x86*/ u16 unk_86;
+} BusinessScrubEntity;
+
+void sub_08028E9C(BusinessScrubEntity*);
+void sub_08028EDC(BusinessScrubEntity*);
+bool32 sub_08028F98(BusinessScrubEntity*, u32);
+bool32 sub_08028FDC(BusinessScrubEntity*);
+void sub_08028FFC(BusinessScrubEntity*);
+void sub_08029078(BusinessScrubEntity*);
+void sub_080290E0(BusinessScrubEntity*, u32);
+void sub_080290FC(BusinessScrubEntity*);
+bool32 sub_0802915C(BusinessScrubEntity*);
+bool32 BusinessScrub_CheckRefillFitsBag(BusinessScrubEntity*);
+void sub_0802922C(BusinessScrubEntity*);
+void sub_0802925C(BusinessScrubEntity*);
+
+extern const struct SalesOffering gUnk_080CC954[];
+extern const u8 kinstoneTypes[];
+extern void (*const BusinessScrub_Functions[])(BusinessScrubEntity*);
+extern void (*const BusinessScrub_Actions[])(BusinessScrubEntity*);
+extern const u8 gUnk_080CCA04[];
+
+
+void BusinessScrub(BusinessScrubEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)BusinessScrub_Functions);
}
-void BusinessScrub_OnTick(Entity* this) {
- BusinessScrub_Actions[this->action](this);
+void BusinessScrub_OnTick(BusinessScrubEntity* this) {
+ BusinessScrub_Actions[super->action](this);
}
-void BusinessScrub_OnCollision(Entity* this) {
- Entity* pEVar1;
+void BusinessScrub_OnCollision(BusinessScrubEntity* this) {
+ Entity* fx;
- if (this->hitType == 1 && (this->contactFlags & 0x7f) == 0x42) {
- this->action = 3;
- this->subAction = 0;
- this->timer = 40;
- COLLISION_OFF(this);
+ if (super->hitType == 1 && (super->contactFlags & 0x7f) == 0x42) {
+ super->action = 3;
+ super->subAction = 0;
+ super->timer = 40;
+ COLLISION_OFF(super);
sub_080290E0(this, 4);
- pEVar1 = CreateFx(this, FX_BUSH, 0);
- if (pEVar1 != NULL) {
- pEVar1->z.HALF.HI -= 8;
+ fx = CreateFx(super, FX_BUSH, 0);
+ if (fx != NULL) {
+ fx->z.HALF.HI -= 8;
}
EnqueueSFX(SFX_EM_DEKUSCRUB_HIT);
}
}
-void BusinessScrub_OnGrabbed(Entity* this) {
+void BusinessScrub_OnGrabbed(BusinessScrubEntity* this) {
/* ... */
}
-void BusinessScrub_Action0(Entity* this) {
- this->subtimer = 0;
- this->field_0x78.HWORD = this->x.HALF.HI;
- this->field_0x7a.HWORD = this->y.HALF.HI;
- this->animationState = 0;
- this->direction = 0x10;
+void BusinessScrub_Action0(BusinessScrubEntity* this) {
+ super->subtimer = 0;
+ this->unk_78 = super->x.HALF.HI;
+ this->unk_7a = super->y.HALF.HI;
+ super->animationState = 0;
+ super->direction = 0x10;
sub_08028E9C(this);
- if ((*(u8*)this->field_0x7c.WORD & 1) || CheckFlags(this->field_0x86.HWORD)) {
- this->action = 4;
- this->timer = 120;
- this->spritePriority.b1 = 1;
+ if ((*(u8*)this->unk_7c & 1) || CheckFlags(this->unk_86)) {
+ super->action = 4;
+ super->timer = 120;
+ super->spritePriority.b1 = 1;
sub_0802925C(this);
sub_080290E0(this, 0);
} else {
- this->timer = 0;
- this->field_0x76.HWORD = COORD_TO_TILE(this);
- this->field_0x74.HWORD = GetTileIndex(this->field_0x76.HWORD, this->collisionLayer);
- this->hurtType = 0x41;
+ super->timer = 0;
+ this->unk_76 = COORD_TO_TILE(super);
+ this->unk_74 = GetTileIndex(this->unk_76, super->collisionLayer);
+ super->hurtType = 0x41;
sub_08028FFC(this);
}
}
-void BusinessScrub_Action1(Entity* this) {
- if (this->timer != 0) {
- this->timer--;
+void BusinessScrub_Action1(BusinessScrubEntity* this) {
+ if (super->timer != 0) {
+ super->timer--;
} else if (sub_08028F98(this, 0)) {
sub_08029078(this);
- this->subAction = 0;
- this->subtimer = 1;
+ super->subAction = 0;
+ super->subtimer = 1;
}
}
-void BusinessScrub_Action2(Entity* this) {
+void BusinessScrub_Action2(BusinessScrubEntity* this) {
u32 unk;
- GetNextFrame(this);
- switch (this->subAction) {
+ GetNextFrame(super);
+ switch (super->subAction) {
case 0:
unk = 1;
- if (this->frame & ANIM_DONE) {
- this->subAction = 1;
- this->timer = 60;
- this->subtimer = 16;
+ if (super->frame & ANIM_DONE) {
+ super->subAction = 1;
+ super->timer = 60;
+ super->subtimer = 16;
sub_08028FDC(this);
sub_080290E0(this, 1);
}
break;
case 1:
unk = 1;
- if (--this->timer == 0) {
- this->subAction = 2;
- this->timer = 32;
- this->subtimer = 0;
+ if (--super->timer == 0) {
+ super->subAction = 2;
+ super->timer = 32;
+ super->subtimer = 0;
sub_08028FDC(this);
sub_080290E0(this, 2);
- } else if (--this->subtimer == 0) {
+ } else if (--super->subtimer == 0) {
if (sub_08028FDC(this)) {
sub_080290E0(this, 1);
}
- this->subtimer = 16;
+ super->subtimer = 16;
}
break;
case 2:
unk = 1;
sub_080290FC(this);
- if (this->frame & 1) {
- Entity* ent = CreateProjectileWithParent(this, DEKU_SEED_PROJECTILE, 0);
- if (ent != NULL) {
- ent->parent = this;
- ent->direction = this->direction;
- this->frame &= ~1;
- this->subAction = 3;
+ if (super->frame & 1) {
+ Entity* entity = CreateProjectileWithParent(super, DEKU_SEED_PROJECTILE, 0);
+ if (entity != NULL) {
+ entity->parent = super;
+ entity->direction = super->direction;
+ super->frame &= ~1;
+ super->subAction = 3;
}
}
break;
case 3:
unk = 2;
- if (this->frame & ANIM_DONE) {
- this->subAction = 4;
- this->timer = 80;
+ if (super->frame & ANIM_DONE) {
+ super->subAction = 4;
+ super->timer = 80;
sub_080290E0(this, 1);
}
break;
case 4:
unk = 2;
- if (--this->timer == 0) {
+ if (--super->timer == 0) {
if (sub_08028F98(this, 0)) {
- this->subAction = 1;
- this->timer = 60;
- this->subtimer = 16;
+ super->subAction = 1;
+ super->timer = 60;
+ super->subtimer = 16;
sub_08028FDC(this);
} else {
sub_08028FFC(this);
- this->subAction = 0;
- this->timer = 80;
- this->subtimer = 0;
+ super->subAction = 0;
+ super->timer = 80;
+ super->subtimer = 0;
}
return;
}
@@ -178,73 +193,73 @@ void BusinessScrub_Action2(Entity* this) {
if (!sub_08028F98(this, unk)) {
sub_08028FFC(this);
- this->subAction = 0;
- this->timer = 80;
- this->subtimer = 0;
+ super->subAction = 0;
+ super->timer = 80;
+ super->subtimer = 0;
}
}
-void BusinessScrub_Action3(Entity* this) {
+void BusinessScrub_Action3(BusinessScrubEntity* this) {
Entity* iVar1;
- switch (this->subAction) {
+ switch (super->subAction) {
case 0:
- if (this->timer == 0) {
- if (this->frame & ANIM_DONE) {
- this->subAction = 1;
+ if (super->timer == 0) {
+ if (super->frame & ANIM_DONE) {
+ super->subAction = 1;
sub_08028FDC(this);
sub_080290E0(this, 5);
- this->spritePriority.b1 = 1;
+ super->spritePriority.b1 = 1;
}
} else {
- this->timer--;
+ super->timer--;
}
break;
case 1:
- if (this->frame & ANIM_DONE) {
- this->action = 4;
- this->subAction = 0;
- this->timer = 30;
- this->subtimer = 5;
+ if (super->frame & ANIM_DONE) {
+ super->action = 4;
+ super->subAction = 0;
+ super->timer = 30;
+ super->subtimer = 5;
sub_080290E0(this, 0);
- iVar1 = Create0x68FX(this, FX_STARS);
+ iVar1 = Create0x68FX(super, FX_STARS);
if (iVar1 != NULL) {
iVar1->spritePriority.b0 = 3;
iVar1->z.HALF.HI -= 12;
SetDefaultPriority(iVar1, PRIO_MESSAGE);
}
- SetFlag(this->field_0x86.HWORD);
+ SetFlag(this->unk_86);
sub_0802925C(this);
}
break;
}
- GetNextFrame(this);
- sub_0800445C(this);
+ GetNextFrame(super);
+ sub_0800445C(super);
}
extern void sub_0804AA1C(Entity*);
-void sub_08028F0C(Entity*);
-
-void BusinessScrub_Action4(Entity* this) {
- if (--this->timer == 0) {
- this->timer = 48;
- if (this->subtimer) {
- if (--this->subtimer == 0) {
- sub_0804AA1C(this);
+void sub_08028F0C(BusinessScrubEntity*);
+
+void BusinessScrub_Action4(BusinessScrubEntity* this) {
+ if (--super->timer == 0) {
+ super->timer = 48;
+ if (super->subtimer) {
+ if (--super->subtimer == 0) {
+ sub_0804AA1C(super);
}
- } else if (sub_08028FDC(this) || this->field_0x80.HALF.LO) {
- this->field_0x80.HALF.LO = 0;
+ } else if (sub_08028FDC(this) || this->unk_80) {
+ this->unk_80 = 0;
sub_080290E0(this, 0);
}
}
- GetNextFrame(this);
- sub_0800445C(this);
+ GetNextFrame(super);
+ sub_0800445C(super);
sub_08028F0C(this);
}
-void BusinessScrub_Action5(Entity* this) {
- struct SalesOffering* offer = (struct SalesOffering*)this->field_0x7c.WORD;
+void BusinessScrub_Action5(BusinessScrubEntity* this) {
+ struct SalesOffering* offer = (struct SalesOffering*)this->unk_7c;
u32 subtype;
if ((gMessage.doTextBox & 0x7f) == 0 && sub_0802915C(this) && !sub_08056338()) {
@@ -264,9 +279,9 @@ void BusinessScrub_Action5(Entity* this) {
CreateItemEntity(offer->offeredItem, subtype, 0);
- this->action = 6;
- this->timer = 4;
- this->field_0x80.HALF.HI = 0;
+ super->action = 6;
+ super->timer = 4;
+ this->unk_81 = 0;
sub_080290E0(this, 3);
#if defined(USA) || defined(DEMO_USA)
SetLocalFlag(KS_B06);
@@ -274,12 +289,12 @@ void BusinessScrub_Action5(Entity* this) {
return;
case 1: // refill, bottle, specific kinstone
CreateItemEntity(offer->offeredItem, offer->item_subtype, 0);
- this->timer = 4;
+ super->timer = 4;
sub_0802922C(this);
return;
case 2: // grip ring
CreateItemEntity(offer->offeredItem, offer->item_subtype, 0);
- this->timer = 8;
+ super->timer = 8;
sub_0802922C(this);
return;
}
@@ -291,95 +306,95 @@ void BusinessScrub_Action5(Entity* this) {
}
}
- sub_0800445C(this);
- this->action = 4;
- this->timer = 48;
+ sub_0800445C(super);
+ super->action = 4;
+ super->timer = 48;
sub_080290E0(this, 0);
}
-void BusinessScrub_Action6(Entity* this) {
+void BusinessScrub_Action6(BusinessScrubEntity* this) {
if (gPlayerEntity.action == PLAYER_ITEMGET) {
- if (this->field_0x80.HALF.HI == 0) {
+ if (this->unk_81 == 0) {
SetPlayerControl(1);
- this->field_0x80.HALF.HI = 1;
+ this->unk_81 = 1;
}
} else {
MessageFromTarget(TEXT_INDEX(TEXT_BUSINESS_SCRUB, 0x02));
- this->action = 4;
- this->field_0x80.HALF.HI = 0;
- this->timer = 1;
+ super->action = 4;
+ this->unk_81 = 0;
+ super->timer = 1;
sub_08028EDC(this);
SetPlayerControl(0);
- sub_0800445C(this);
- GetNextFrame(this);
+ sub_0800445C(super);
+ GetNextFrame(super);
}
}
-void BusinessScrub_Action7(Entity* this) {
+void BusinessScrub_Action7(BusinessScrubEntity* this) {
if ((gMessage.doTextBox & 0x7f) == 0) {
- struct SalesOffering* offer = (struct SalesOffering*)this->field_0x7c.WORD;
+ struct SalesOffering* offer = (struct SalesOffering*)this->unk_7c;
- this->action = 4;
- this->subAction = gMessage.doTextBox & 0x7f;
- this->timer = 1;
+ super->action = 4;
+ super->subAction = gMessage.doTextBox & 0x7f;
+ super->timer = 1;
if (!CheckLocalFlag(offer->local_flag)) {
SetLocalFlag(offer->local_flag);
}
SetPlayerControl(0);
}
- sub_0800445C(this);
- GetNextFrame(this);
+ sub_0800445C(super);
+ GetNextFrame(super);
}
-void BusinessScrub_Action8(Entity* this) {
- if (UpdateFuseInteraction(this)) {
- this->action = 4;
- this->timer = 1;
+void BusinessScrub_Action8(BusinessScrubEntity* this) {
+ if (UpdateFuseInteraction(super)) {
+ super->action = 4;
+ super->timer = 1;
}
}
bool32 sub_08029198(const struct SalesOffering*);
-void sub_08028E9C(Entity* this) {
- const struct SalesOffering* offer = &gUnk_080CC954[this->type];
+void sub_08028E9C(BusinessScrubEntity* this) {
+ const struct SalesOffering* offer = &gUnk_080CC954[super->type];
if (sub_08029198(offer) && (offer->field_0x0 & 2)) {
offer = &gUnk_080CC954[offer->local_flag];
}
- this->field_0x7c.WORD = (u32)offer;
- this->field_0x80.HALF.LO = 0;
+ this->unk_7c = offer;
+ this->unk_80 = 0;
}
-void sub_08028EDC(Entity* this) {
- const struct SalesOffering* offer = (const struct SalesOffering*)this->field_0x7c.WORD;
+void sub_08028EDC(BusinessScrubEntity* this) {
+ const struct SalesOffering* offer = this->unk_7c;
if (sub_08029198(offer) && (offer->field_0x0 & 2)) {
offer = &gUnk_080CC954[offer->local_flag];
- this->field_0x7c.WORD = (u32)offer;
+ this->unk_7c = offer;
}
}
-void sub_08028F0C(Entity* this) {
- if (this->interactType == 2) {
- this->action = 8;
- this->interactType = 0;
- sub_0806F118(this);
- } else if (this->interactType != 0) {
+void sub_08028F0C(BusinessScrubEntity* this) {
+ if (super->interactType == 2) {
+ super->action = 8;
+ super->interactType = 0;
+ sub_0806F118(super);
+ } else if (super->interactType != 0) {
u16 dialog;
- const struct SalesOffering* offer = (const struct SalesOffering*)this->field_0x7c.WORD;
+ const struct SalesOffering* offer = (const struct SalesOffering*)this->unk_7c;
- this->interactType = 0;
- sub_0804AA1C(this);
- this->direction = (GetAnimationState(this) << 3);
+ super->interactType = 0;
+ sub_0804AA1C(super);
+ super->direction = (GetAnimationState(super) << 3);
sub_080290E0(this, 3);
- this->field_0x80.HALF.LO = 1;
- this->timer = 32;
- this->subtimer = 0;
+ this->unk_80 = 1;
+ super->timer = 32;
+ super->subtimer = 0;
if (sub_08029198(offer)) {
dialog = offer->field_0x6;
} else {
if ((offer->field_0x0 & 0xfc) != 0xc) {
- this->action = 5;
+ super->action = 5;
} else {
- this->action = 7;
+ super->action = 7;
}
dialog = offer->field_0x4;
SetPlayerControl(1);
@@ -389,16 +404,16 @@ void sub_08028F0C(Entity* this) {
}
}
-bool32 sub_08028F98(Entity* this, u32 param_2) {
- Entity* ent = sub_08049DF4(1);
- if (ent == NULL || EntityInRectRadius(this, ent, 0x28, 0x28)) {
+bool32 sub_08028F98(BusinessScrubEntity* this, u32 param_2) {
+ Entity* entity = sub_08049DF4(1);
+ if (entity == NULL || EntityInRectRadius(super, entity, 0x28, 0x28)) {
return FALSE;
}
if (param_2 != 2) {
u32 distance = param_2 ? 0x58 : 0x50;
- if (!EntityInRectRadius(this, ent, distance, distance)) {
+ if (!EntityInRectRadius(super, entity, distance, distance)) {
return FALSE;
}
}
@@ -406,67 +421,67 @@ bool32 sub_08028F98(Entity* this, u32 param_2) {
return TRUE;
}
-bool32 sub_08028FDC(Entity* this) {
- u32 direction = DirectionRoundUp(sub_08049F84(this, 1));
- if (direction == this->direction) {
+bool32 sub_08028FDC(BusinessScrubEntity* this) {
+ u32 direction = DirectionRoundUp(sub_08049F84(super, 1));
+ if (direction == super->direction) {
return FALSE;
} else {
- this->direction = direction;
+ super->direction = direction;
return TRUE;
}
}
-void sub_08028FFC(Entity* this) {
- this->action = 1;
- COLLISION_OFF(this);
- this->spritePriority.b1 = 0;
- UnloadGFXSlots(this);
- UnloadOBJPalette(this);
- this->spriteVramOffset = 0xe8;
- this->palette.b.b0 = 2;
- this->palette.b.b4 = 2;
- this->spriteIndex = 0xa7;
- this->x.HALF.HI = this->field_0x78.HWORD;
- this->y.HALF.HI = this->field_0x7a.HWORD;
- InitializeAnimation(this, 0);
- SetTile(0x4022, this->field_0x76.HWORD, this->collisionLayer);
+void sub_08028FFC(BusinessScrubEntity* this) {
+ super->action = 1;
+ COLLISION_OFF(super);
+ super->spritePriority.b1 = 0;
+ UnloadGFXSlots(super);
+ UnloadOBJPalette(super);
+ super->spriteVramOffset = 0xe8;
+ super->palette.b.b0 = 2;
+ super->palette.b.b4 = 2;
+ super->spriteIndex = 0xa7;
+ super->x.HALF.HI = this->unk_78;
+ super->y.HALF.HI = this->unk_7a;
+ InitializeAnimation(super, 0);
+ SetTile(0x4022, this->unk_76, super->collisionLayer);
}
-void sub_08029078(Entity* this) {
- this->action = 2;
- COLLISION_ON(this);
- this->spritePriority.b1 = 1;
- if (LoadFixedGFX(this, 0x72) == 0) {
- DeleteEntity(this);
+void sub_08029078(BusinessScrubEntity* this) {
+ super->action = 2;
+ COLLISION_ON(super);
+ super->spritePriority.b1 = 1;
+ if (LoadFixedGFX(super, 0x72) == 0) {
+ DeleteEntity(super);
} else {
- LoadObjPalette(this, 0x6e);
- this->spriteIndex = 0xd0;
+ LoadObjPalette(super, 0x6e);
+ super->spriteIndex = 0xd0;
sub_08028FDC(this);
sub_080290E0(this, 1);
- SetTile(this->field_0x74.HWORD, this->field_0x76.HWORD, this->collisionLayer);
+ SetTile(this->unk_74, this->unk_76, super->collisionLayer);
}
}
-void sub_080290E0(Entity* this, u32 param_2) {
- InitializeAnimation(this, this->direction >> 3 | gUnk_080CCA04[param_2]);
+void sub_080290E0(BusinessScrubEntity* this, u32 param_2) {
+ InitializeAnimation(super, super->direction >> 3 | gUnk_080CCA04[param_2]);
}
-void sub_080290FC(Entity* this) {
- if (this->timer != 0) {
- this->timer--;
- if ((this->timer < 16) && ((this->timer & 1) == 0)) {
- s32 sVar3 = ((this->direction & 0x10) != 0) ? -1 : 1;
- if ((this->direction & 8) != 0) {
- this->x.HALF.HI += ((this->timer & 8) != 0) ? -sVar3 : sVar3;
+void sub_080290FC(BusinessScrubEntity* this) {
+ if (super->timer != 0) {
+ super->timer--;
+ if ((super->timer < 16) && ((super->timer & 1) == 0)) {
+ s32 sVar3 = ((super->direction & 0x10) != 0) ? -1 : 1;
+ if ((super->direction & 8) != 0) {
+ super->x.HALF.HI += ((super->timer & 8) != 0) ? -sVar3 : sVar3;
} else {
- this->y.HALF.HI += ((this->timer & 8) != 0) ? sVar3 : -sVar3;
+ super->y.HALF.HI += ((super->timer & 8) != 0) ? sVar3 : -sVar3;
}
}
}
}
-bool32 sub_0802915C(Entity* this) {
- const struct SalesOffering* offer = (const struct SalesOffering*)this->field_0x7c.WORD;
+bool32 sub_0802915C(BusinessScrubEntity* this) {
+ const struct SalesOffering* offer = (const struct SalesOffering*)this->unk_7c;
switch (offer->offeredItem) {
case ITEM_GRIP_RING:
@@ -511,8 +526,8 @@ bool32 sub_08029198(const struct SalesOffering* offer) {
return TRUE;
}
-bool32 BusinessScrub_CheckRefillFitsBag(Entity* this) {
- const struct SalesOffering* offer = (const struct SalesOffering*)this->field_0x7c.WORD;
+bool32 BusinessScrub_CheckRefillFitsBag(BusinessScrubEntity* this) {
+ const struct SalesOffering* offer = (const struct SalesOffering*)this->unk_7c;
switch (offer->offeredItem) {
case ITEM_BOMBS10:
@@ -528,11 +543,11 @@ bool32 BusinessScrub_CheckRefillFitsBag(Entity* this) {
return FALSE;
}
-void sub_0802922C(Entity* this) {
+void sub_0802922C(BusinessScrubEntity* this) {
const struct SalesOffering* offer;
- this->action = 6;
- this->field_0x80.HALF.HI = 0;
- offer = (const struct SalesOffering*)this->field_0x7c.WORD;
+ super->action = 6;
+ this->unk_81 = 0;
+ offer = (const struct SalesOffering*)this->unk_7c;
switch (offer->offeredItem) {
case ITEM_BOTTLE1:
@@ -547,17 +562,17 @@ void sub_0802922C(Entity* this) {
}
}
-void sub_0802925C(Entity* this) {
- AddInteractableWhenBigFuser(this, GetFusionToOffer(this));
+void sub_0802925C(BusinessScrubEntity* this) {
+ AddInteractableWhenBigFuser(super, GetFusionToOffer(super));
}
-void sub_08029270(Entity* this) {
- if (this->action == 0) {
- this->action++;
- this->spriteSettings.draw = 1;
- InitializeAnimation(this, 0xe);
+void sub_08029270(BusinessScrubEntity* this) {
+ if (super->action == 0) {
+ super->action++;
+ super->spriteSettings.draw = 1;
+ InitializeAnimation(super, 0xe);
} else {
- GetNextFrame(this);
+ GetNextFrame(super);
}
}
@@ -580,16 +595,16 @@ const struct SalesOffering gUnk_080CC954[] = {
const u8 kinstoneTypes[] = { 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75 };
-void (*const BusinessScrub_Functions[])(Entity*) = {
+void (*const BusinessScrub_Functions[])(BusinessScrubEntity*) = {
BusinessScrub_OnTick,
BusinessScrub_OnCollision,
- GenericKnockback,
- GenericDeath,
- GenericConfused,
+ (void (*)(BusinessScrubEntity*))GenericKnockback,
+ (void (*)(BusinessScrubEntity*))GenericDeath,
+ (void (*)(BusinessScrubEntity*))GenericConfused,
BusinessScrub_OnGrabbed,
};
-void (*const BusinessScrub_Actions[])(Entity*) = {
+void (*const BusinessScrub_Actions[])(BusinessScrubEntity*) = {
BusinessScrub_Action0,
BusinessScrub_Action1,
BusinessScrub_Action2,
diff --git a/src/enemy/businessScrubPrologue.c b/src/enemy/businessScrubPrologue.c
index ba7349e9..607f38b4 100644
--- a/src/enemy/businessScrubPrologue.c
+++ b/src/enemy/businessScrubPrologue.c
@@ -1,6 +1,12 @@
+/**
+ * @file businessScrubPrologue.c
+ * @ingroup Enemies
+ *
+ * @brief Business Scrub Prologue enemy
+ */
#define NENT_DEPRECATED
-#include "entity.h"
#include "enemy.h"
+#include "entity.h"
#include "functions.h"
typedef struct {
@@ -39,7 +45,7 @@ void BusinessScrubPrologue_OnTick(BusinessScrubPrologueEntity* this) {
}
void BusinessScrubPrologue_OnCollision(BusinessScrubPrologueEntity* this) {
- Entity* ent;
+ Entity* entity;
if (super->hitType == 1) {
if ((super->contactFlags & 0x7f) == 0x42) {
super->action = 4;
@@ -47,9 +53,9 @@ void BusinessScrubPrologue_OnCollision(BusinessScrubPrologueEntity* this) {
super->timer = 40;
super->flags &= ~ENT_COLLIDE;
sub_08046030(this, 4);
- ent = CreateFx(super, FX_BUSH, 0);
- if (ent != NULL) {
- ent->z.HALF.HI -= 8;
+ entity = CreateFx(super, FX_BUSH, 0);
+ if (entity != NULL) {
+ entity->z.HALF.HI -= 8;
}
gPlayerState.field_0x27[0] = 0xff;
@@ -93,7 +99,7 @@ void nullsub_24(BusinessScrubPrologueEntity* this) {
}
void sub_08045CE0(BusinessScrubPrologueEntity* this) {
- Entity* ent;
+ Entity* entity;
u32 r6;
GetNextFrame(super);
@@ -122,10 +128,10 @@ void sub_08045CE0(BusinessScrubPrologueEntity* this) {
r6 = 1;
sub_0804604C(this);
if (super->frame & 1) {
- ent = CreateProjectileWithParent(super, DEKU_SEED_PROJECTILE, 0);
- if (ent != NULL) {
- ent->parent = super;
- ent->direction = super->direction;
+ entity = CreateProjectileWithParent(super, DEKU_SEED_PROJECTILE, 0);
+ if (entity != NULL) {
+ entity->parent = super;
+ entity->direction = super->direction;
super->frame &= 0xfe;
super->subAction = 3;
}
@@ -165,7 +171,7 @@ void sub_08045CE0(BusinessScrubPrologueEntity* this) {
}
void sub_08045E14(BusinessScrubPrologueEntity* this) {
- Entity* ent;
+ Entity* entity;
gPlayerState.field_0x27[0] = 0xff;
switch (super->subAction) {
case 0:
@@ -185,11 +191,11 @@ void sub_08045E14(BusinessScrubPrologueEntity* this) {
super->action = 5;
super->subAction = 0;
sub_08046030(this, 0);
- ent = Create0x68FX(super, FX_STARS);
- if (ent != NULL) {
- ent->spritePriority.b0 = 3;
- ent->z.HALF.HI -= 0xc;
- SetDefaultPriority(ent, PRIO_MESSAGE);
+ entity = Create0x68FX(super, FX_STARS);
+ if (entity != NULL) {
+ entity->spritePriority.b0 = 3;
+ entity->z.HALF.HI -= 0xc;
+ SetDefaultPriority(entity, PRIO_MESSAGE);
}
}
break;
@@ -233,12 +239,12 @@ void nullsub_25(BusinessScrubPrologueEntity* this) {
}
bool32 sub_08045F54(BusinessScrubPrologueEntity* this, u32 arg2) {
- Entity* ent = sub_08049DF4(1);
+ Entity* entity = sub_08049DF4(1);
u32 r3;
- if (ent == NULL)
+ if (entity == NULL)
return 0;
- if (EntityInRectRadius(super, ent, 0x20, 0x20))
+ if (EntityInRectRadius(super, entity, 0x20, 0x20))
return 0;
if (arg2 == 2)
return 1;
@@ -247,7 +253,7 @@ bool32 sub_08045F54(BusinessScrubPrologueEntity* this, u32 arg2) {
r3 = 0x58;
}
- if (EntityInRectRadius(super, ent, r3, r3))
+ if (EntityInRectRadius(super, entity, r3, r3))
return 1;
return 0;
}
@@ -292,17 +298,17 @@ void sub_0804604C(BusinessScrubPrologueEntity* this) {
void sub_08046078(BusinessScrubPrologueEntity* this) {
s32 index;
- Entity* ent;
+ Entity* entity;
const u16* ptr;
gPlayerState.field_0x27[0] = 0;
ptr = gUnk_080D1A4E;
for (index = 0; index <= 4; index++) {
- ent = CreateFx(super, FX_DEATH, 0x40);
+ entity = CreateFx(super, FX_DEATH, 0x40);
- if (ent != NULL) {
- ent->x.HALF.HI = gRoomControls.origin_x + *ptr;
+ if (entity != NULL) {
+ entity->x.HALF.HI = gRoomControls.origin_x + *ptr;
ptr++;
- ent->y.HALF.HI = gRoomControls.origin_y + *ptr;
+ entity->y.HALF.HI = gRoomControls.origin_y + *ptr;
ptr++;
}
}
@@ -314,9 +320,9 @@ void sub_08046078(BusinessScrubPrologueEntity* this) {
RestorePrevTileEntity(0x7a6, 1);
RestorePrevTileEntity(0x7a7, 1);
- ent = CreateFx(super, FX_BIG_EXPLOSION2, 0x40);
- if (ent != NULL) {
- CopyPosition(super, ent);
+ entity = CreateFx(super, FX_BIG_EXPLOSION2, 0x40);
+ if (entity != NULL) {
+ CopyPosition(super, entity);
EnqueueSFX(SFX_184);
}
diff --git a/src/enemy/chaser.c b/src/enemy/chaser.c
index 895c13f1..1f22bac4 100644
--- a/src/enemy/chaser.c
+++ b/src/enemy/chaser.c
@@ -4,7 +4,7 @@
*
* @brief Chaser enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/chuchu.c b/src/enemy/chuchu.c
index 82de5555..c5122f8a 100644
--- a/src/enemy/chuchu.c
+++ b/src/enemy/chuchu.c
@@ -4,201 +4,213 @@
*
* @brief Chuchu enemy
*/
-
+#define NENT_DEPRECATED
#include "asm.h"
#include "enemy.h"
#include "functions.h"
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ Entity* unk_68;
+ /*0x6c*/ u8 unused1[6];
+ /*0x72*/ u8 unk_72;
+ /*0x73*/ u8 unused2[13];
+ /*0x80*/ u8 unk_80;
+ /*0x81*/ u8 unk_81;
+ /*0x82*/ u8 unk_82;
+ /*0x83*/ u8 unk_83;
+} ChuchuEntity;
+
extern Entity* gUnk_020000B0;
-void sub_0801F328(Entity*);
-void sub_0801F340(Entity*);
-void sub_0801F360(Entity*);
-void sub_0801F3AC(Entity*);
-void sub_0801F730(Entity*);
-void sub_0801F748(Entity*);
-void sub_0801F764(Entity*);
-void sub_0801FAE0(Entity*);
-void sub_0801FAF8(Entity*);
-void sub_0801FB14(Entity*);
-void sub_0801FB34(Entity*);
-void sub_0801FB68(Entity*);
-u32 sub_0801FBD0(Entity*);
-void Chuchu_JumpAtPlayer(Entity*);
-
-extern void (*const Chuchu_Functions[])(Entity*);
-extern void (*const gUnk_080CA234[])(Entity*);
-extern void (*const gUnk_080CA25C[])(Entity*);
-extern void (*const gUnk_080CA288[])(Entity*);
+void sub_0801F328(ChuchuEntity* this);
+void sub_0801F340(ChuchuEntity* this);
+void sub_0801F360(ChuchuEntity* this);
+void sub_0801F3AC(ChuchuEntity* this);
+void sub_0801F730(ChuchuEntity* this);
+void sub_0801F748(ChuchuEntity* this);
+void sub_0801F764(ChuchuEntity* this);
+void sub_0801FAE0(ChuchuEntity* this);
+void sub_0801FAF8(ChuchuEntity* this);
+void sub_0801FB14(ChuchuEntity* this);
+void sub_0801FB34(ChuchuEntity* this);
+void sub_0801FB68(ChuchuEntity* this);
+u32 sub_0801FBD0(ChuchuEntity* this);
+void Chuchu_JumpAtPlayer(ChuchuEntity* this);
+
+extern void (*const Chuchu_Functions[])(ChuchuEntity*);
+extern void (*const gUnk_080CA234[])(ChuchuEntity*);
+extern void (*const gUnk_080CA25C[])(ChuchuEntity*);
+extern void (*const gUnk_080CA288[])(ChuchuEntity*);
extern const s8 gUnk_080CA2B4[];
-void Chuchu(Entity* this) {
- int index;
+void Chuchu(ChuchuEntity* this) {
+ s32 index;
- index = sub_080012DC(this);
+ index = sub_080012DC(super);
switch (index) {
default:
- gUnk_080012C8[index](this);
+ gUnk_080012C8[index](super);
return;
case 0:
/* ... */
break;
case 2:
- this->gustJarState &= 0xfe;
- if (index != this->field_0x80.HALF.HI) {
- switch (this->type) {
+ super->gustJarState &= 0xfe;
+ if (index != this->unk_81) {
+ switch (super->type) {
case 0:
- if (this->flags & ENT_COLLIDE) {
- this->action = 6;
- COLLISION_OFF(this);
- this->speed = 0x20;
- this->hitType = 0x5c;
- InitializeAnimation(this, 5);
+ if (super->flags & ENT_COLLIDE) {
+ super->action = 6;
+ COLLISION_OFF(super);
+ super->speed = 0x20;
+ super->hitType = 0x5c;
+ InitializeAnimation(super, 5);
}
break;
case 1:
/* ... */
break;
case 2:
- sub_080043A8(this);
+ sub_080043A8(super);
return;
}
}
break;
}
- this->field_0x80.HALF.HI = index;
- Chuchu_Functions[GetNextFunction(this)](this);
- if (*(char*)(*(int*)&this->field_0x68 + 10) == 0x1c) {
- SetChildOffset(this, 0, 1, -0x10);
- } else if (this->type == 2) {
+ this->unk_81 = index;
+ Chuchu_Functions[GetNextFunction(super)](this);
+ if (this->unk_68->type == 0x1c) {
+ SetChildOffset(super, 0, 1, -0x10);
+ } else if (super->type == 2) {
sub_0801FB34(this);
}
}
-void Chuchu_OnTick(Entity* this) {
- switch (this->type) {
+void Chuchu_OnTick(ChuchuEntity* this) {
+ switch (super->type) {
case 0:
sub_0801F3AC(this);
- gUnk_080CA234[this->action](this);
+ gUnk_080CA234[super->action](this);
break;
case 1:
sub_0801F764(this);
- gUnk_080CA25C[this->action](this);
+ gUnk_080CA25C[super->action](this);
break;
case 2:
- gUnk_080CA288[this->action](this);
+ gUnk_080CA288[super->action](this);
break;
}
}
-void Chuchu_OnCollision(Entity* this) {
+void Chuchu_OnCollision(ChuchuEntity* this) {
u8 health;
- if (this->type == 2) {
- if (this->contactFlags == 0x8e || this->contactFlags == 0x95) {
- COLLISION_OFF(this);
- this->health = 0;
+ if (super->type == 2) {
+ if (super->contactFlags == 0x8e || super->contactFlags == 0x95) {
+ COLLISION_OFF(super);
+ super->health = 0;
}
}
- health = this->health;
+ health = super->health;
if (health) {
- if (this->contactFlags == 0x94) {
+ if (super->contactFlags == 0x94) {
sub_0801FB68(this);
- Create0x68FX(this, FX_STARS);
- InitializeAnimation(this, 6);
- } else if (this->field_0x80.HALF.LO != health) {
+ Create0x68FX(super, FX_STARS);
+ InitializeAnimation(super, 6);
+ } else if (this->unk_80 != health) {
sub_0801FB68(this);
- InitializeAnimation(this, 6);
+ InitializeAnimation(super, 6);
}
} else {
- sub_0804AA1C(this);
- this->zVelocity = 0;
- InitializeAnimation(this, 9);
+ sub_0804AA1C(super);
+ super->zVelocity = 0;
+ InitializeAnimation(super, 9);
}
- this->field_0x80.HALF.LO = this->health;
- EnemyFunctionHandlerAfterCollision(this, Chuchu_Functions);
+ this->unk_80 = super->health;
+ EnemyFunctionHandlerAfterCollision(super, Chuchu_Functions);
}
-void Chuchu_OnGrabbed(Entity* this) {
- if (!sub_0806F520(this) && this->confusedTime) {
- Create0x68FX(this, FX_STARS);
- InitializeAnimation(this, 6);
+void Chuchu_OnGrabbed(ChuchuEntity* this) {
+ if (!sub_0806F520(super) && super->confusedTime) {
+ Create0x68FX(super, FX_STARS);
+ InitializeAnimation(super, 6);
} else {
- if (this->animIndex != 8) {
+ if (super->animIndex != 8) {
sub_0801FB68(this);
- InitializeAnimation(this, 8);
+ InitializeAnimation(super, 8);
}
- GravityUpdate(this, Q_8_8(24.0));
- GetNextFrame(this);
+ GravityUpdate(super, Q_8_8(24.0));
+ GetNextFrame(super);
}
}
-void Chuchu_OnKnockback(Entity* this) {
- if (this->animIndex == 6)
- GetNextFrame(this);
- sub_08001318(this);
+void Chuchu_OnKnockback(ChuchuEntity* this) {
+ if (super->animIndex == 6)
+ GetNextFrame(super);
+ sub_08001318(super);
}
-void Chuchu_OnDeath(Entity* this) {
- GravityUpdate(this, Q_8_8(24.0));
- GetNextFrame(this);
- if (this->type == 0) {
- GenericDeath(this);
- } else if (this->type == 1) {
- CreateDeathFx(this, 0xf2, 0);
+void Chuchu_OnDeath(ChuchuEntity* this) {
+ GravityUpdate(super, Q_8_8(24.0));
+ GetNextFrame(super);
+ if (super->type == 0) {
+ GenericDeath(super);
+ } else if (super->type == 1) {
+ CreateDeathFx(super, 0xf2, 0);
} else {
- CreateDeathFx(this, 0xf1, 0);
+ CreateDeathFx(super, 0xf1, 0);
}
}
-void Chuchu_OnConfused(Entity* this) {
- if ((this->frame & ANIM_DONE) == 0)
- GetNextFrame(this);
- GenericConfused(this);
+void Chuchu_OnConfused(ChuchuEntity* this) {
+ if ((super->frame & ANIM_DONE) == 0)
+ GetNextFrame(super);
+ GenericConfused(super);
}
-void sub_0801F0A4(Entity* this) {
- sub_0804A720(this);
- this->action = 1;
- this->field_0x80.HALF.LO = this->health;
- this->field_0x82.HALF.LO = 0;
+void sub_0801F0A4(ChuchuEntity* this) {
+ sub_0804A720(super);
+ super->action = 1;
+ this->unk_80 = super->health;
+ this->unk_82 = 0;
}
-void nullsub_4(Entity* this) {
- (void)this;
+void nullsub_4(ChuchuEntity* this) {
+ (void)super;
}
-void sub_0801F0C8(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 3;
- this->timer = (Random() & 3) + 12;
- this->subtimer = Random();
- this->direction = sub_08049F84(this, 1);
- COLLISION_ON(this);
- this->spritePriority.b0 = 4;
- this->spritePriority.b1 = 3;
- InitializeAnimation(this, 2);
+void sub_0801F0C8(ChuchuEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 3;
+ super->timer = (Random() & 3) + 12;
+ super->subtimer = Random();
+ super->direction = sub_08049F84(super, 1);
+ COLLISION_ON(super);
+ super->spritePriority.b0 = 4;
+ super->spritePriority.b1 = 3;
+ InitializeAnimation(super, 2);
}
}
-void sub_0801F12C(Entity* this) {
+void sub_0801F12C(ChuchuEntity* this) {
if (sub_0801FBD0(this)) {
sub_0801F328(this);
} else {
- if ((this->subtimer++ & 7) == 0) {
- this->direction = sub_08049F84(this, 1);
+ if ((super->subtimer++ & 7) == 0) {
+ super->direction = sub_08049F84(super, 1);
}
- ProcessMovement0(this);
- GetNextFrame(this);
- if (--this->timer == 0) {
- if (PlayerInRange(this, 1, 0x38)) {
- this->action = 4;
+ ProcessMovement0(super);
+ GetNextFrame(super);
+ if (--super->timer == 0) {
+ if (PlayerInRange(super, 1, 0x38)) {
+ super->action = 4;
Chuchu_JumpAtPlayer(this);
- } else if (PlayerInRange(this, 1, 0x48)) {
- this->timer = (Random() & 3) + 12;
+ } else if (PlayerInRange(super, 1, 0x48)) {
+ super->timer = (Random() & 3) + 12;
} else {
sub_0801F328(this);
}
@@ -206,21 +218,21 @@ void sub_0801F12C(Entity* this) {
}
}
-void sub_0801F1B0(Entity* this) {
- if (this->frame & 0x10) {
- if (this->frame & 1) {
- this->frame ^= 1;
- this->hitType = 90;
+void sub_0801F1B0(ChuchuEntity* this) {
+ if (super->frame & 0x10) {
+ if (super->frame & 1) {
+ super->frame ^= 1;
+ super->hitType = 90;
EnqueueSFX(SFX_12B);
}
- ProcessMovement2(this);
- if (GravityUpdate(this, Q_8_8(64.0)) == 0)
- GetNextFrame(this);
+ ProcessMovement2(super);
+ if (GravityUpdate(super, Q_8_8(64.0)) == 0)
+ GetNextFrame(super);
} else {
- GetNextFrame(this);
+ GetNextFrame(super);
}
- if (this->frame & ANIM_DONE) {
+ if (super->frame & ANIM_DONE) {
if (sub_0801FBD0(this)) {
sub_0801F328(this);
} else {
@@ -229,497 +241,497 @@ void sub_0801F1B0(Entity* this) {
}
}
-void sub_0801F228(Entity* this) {
- if (--this->timer == 0) {
- this->action = 3;
- this->direction = sub_08049F84(this, 1);
+void sub_0801F228(ChuchuEntity* this) {
+ if (--super->timer == 0) {
+ super->action = 3;
+ super->direction = sub_08049F84(super, 1);
}
- GetNextFrame(this);
+ GetNextFrame(super);
}
-void sub_0801F250(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE)
+void sub_0801F250(ChuchuEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE)
sub_0801F360(this);
}
-void sub_0801F270(Entity* this) {
- if ((this->subtimer++ & 7) == 0) {
- this->direction = sub_08049F84(this, 1);
+void sub_0801F270(ChuchuEntity* this) {
+ if ((super->subtimer++ & 7) == 0) {
+ super->direction = sub_08049F84(super, 1);
}
- ProcessMovement5(this);
- GetNextFrame(this);
+ ProcessMovement5(super);
+ GetNextFrame(super);
if (sub_0801FBD0(this))
return;
- if (--this->timer != 0)
+ if (--super->timer != 0)
return;
- if (this->field_0x80.HALF.HI == 0) {
- this->action = 2;
- InitializeAnimation(this, 4);
+ if (this->unk_81 == 0) {
+ super->action = 2;
+ InitializeAnimation(super, 4);
} else {
- this->timer = 8;
+ super->timer = 8;
}
}
-void sub_0801F2CC(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 1;
- this->spriteSettings.draw = 0;
- InitializeAnimation(this, 4);
+void sub_0801F2CC(ChuchuEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 1;
+ super->spriteSettings.draw = 0;
+ InitializeAnimation(super, 4);
}
}
-void sub_0801F2F8(Entity* this) {
- GravityUpdate(this, Q_8_8(24.0));
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
+void sub_0801F2F8(ChuchuEntity* this) {
+ GravityUpdate(super, Q_8_8(24.0));
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
sub_0801F340(this);
- sub_0804AA1C(this);
+ sub_0804AA1C(super);
}
}
-void sub_0801F328(Entity* this) {
- this->action = 6;
- COLLISION_OFF(this);
- InitializeAnimation(this, 5);
+void sub_0801F328(ChuchuEntity* this) {
+ super->action = 6;
+ COLLISION_OFF(super);
+ InitializeAnimation(super, 5);
}
-void sub_0801F340(Entity* this) {
- this->action = 5;
- this->timer = 60;
- this->speed = 0x20;
- this->hitType = 92;
- InitializeAnimation(this, 2);
+void sub_0801F340(ChuchuEntity* this) {
+ super->action = 5;
+ super->timer = 60;
+ super->speed = 0x20;
+ super->hitType = 92;
+ InitializeAnimation(super, 2);
}
-void sub_0801F360(Entity* this) {
- this->action = 7;
- this->timer = (Random() & 0x38) + 180;
- this->subtimer = Random();
- this->direction = sub_08049F84(this, 1);
- this->spritePriority.b1 = 2;
- this->spritePriority.b0 = 6;
- InitializeAnimation(this, 1);
+void sub_0801F360(ChuchuEntity* this) {
+ super->action = 7;
+ super->timer = (Random() & 0x38) + 180;
+ super->subtimer = Random();
+ super->direction = sub_08049F84(super, 1);
+ super->spritePriority.b1 = 2;
+ super->spritePriority.b0 = 6;
+ InitializeAnimation(super, 1);
}
-void sub_0801F3AC(Entity* this) {
- if (this->action == 9 || this->action == 0)
+void sub_0801F3AC(ChuchuEntity* this) {
+ if (super->action == 9 || super->action == 0)
return;
- if (sub_08049FDC(this, 1)) {
- if (this->field_0x82.HALF.LO || PlayerInRange(this, 1, 0x48)) {
- if (this->action == 1) {
- this->action = 2;
- this->spriteSettings.draw = 1;
- this->field_0x82.HALF.LO = 1;
- InitializeAnimation(this, 0);
+ if (sub_08049FDC(super, 1)) {
+ if (this->unk_82 || PlayerInRange(super, 1, 0x48)) {
+ if (super->action == 1) {
+ super->action = 2;
+ super->spriteSettings.draw = 1;
+ this->unk_82 = 1;
+ InitializeAnimation(super, 0);
}
- } else if (this->action == 3) {
+ } else if (super->action == 3) {
sub_0801F328(this);
}
- } else if (this->action == 3) {
+ } else if (super->action == 3) {
sub_0801F328(this);
- } else if (this->action == 7) {
- this->action = 8;
- InitializeAnimation(this, 7);
+ } else if (super->action == 7) {
+ super->action = 8;
+ InitializeAnimation(super, 7);
}
}
-void sub_0801F428(Entity* this) {
- sub_0804A720(this);
- this->action = 1;
- this->timer = Random();
- this->field_0x80.HALF.LO = this->health;
- this->field_0x82.HALF.LO = 0;
- if (this->type2 == 0)
+void sub_0801F428(ChuchuEntity* this) {
+ sub_0804A720(super);
+ super->action = 1;
+ super->timer = Random();
+ this->unk_80 = super->health;
+ this->unk_82 = 0;
+ if (super->type2 == 0)
return;
- this->action = 3;
- this->subtimer = 30;
+ super->action = 3;
+ super->subtimer = 30;
#ifdef EU
- this->direction = sub_08049F84(this, 1);
+ super->direction = sub_08049F84(super, 1);
#endif
- COLLISION_ON(this);
- this->spritePriority.b1 = 3;
+ COLLISION_ON(super);
+ super->spritePriority.b1 = 3;
#ifndef EU
- this->spriteSettings.draw = 1;
+ super->spriteSettings.draw = 1;
#endif
- InitializeAnimation(this, 2);
+ InitializeAnimation(super, 2);
}
-void sub_0801F48C(Entity* this) {
- GetNextFrame(this);
+void sub_0801F48C(ChuchuEntity* this) {
+ GetNextFrame(super);
}
-void sub_0801F494(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 3;
- this->subtimer = 30;
- this->direction = sub_08049F84(this, 1);
- COLLISION_ON(this);
- this->spritePriority.b0 = 4;
- this->spritePriority.b1 = 3;
- InitializeAnimation(this, 2);
+void sub_0801F494(ChuchuEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 3;
+ super->subtimer = 30;
+ super->direction = sub_08049F84(super, 1);
+ COLLISION_ON(super);
+ super->spritePriority.b0 = 4;
+ super->spritePriority.b1 = 3;
+ InitializeAnimation(super, 2);
}
}
-void sub_0801F4EC(Entity* this) {
- GetNextFrame(this);
- if (--this->subtimer == 0)
- this->action = 4;
+void sub_0801F4EC(ChuchuEntity* this) {
+ GetNextFrame(super);
+ if (--super->subtimer == 0)
+ super->action = 4;
}
-void sub_0801F508(Entity* this) {
+void sub_0801F508(ChuchuEntity* this) {
if (sub_0801FBD0(this)) {
- this->field_0x82.HALF.HI = 0;
+ this->unk_83 = 0;
sub_0801F730(this);
} else {
- u8 tmp = ++this->timer & 7;
- if (tmp == 0 && PlayerInRange(this, 1, 0x38)) {
+ u8 tmp = ++super->timer & 7;
+ if (tmp == 0 && PlayerInRange(super, 1, 0x38)) {
if (Random() & 1) {
- this->action = 5;
+ super->action = 5;
Chuchu_JumpAtPlayer(this);
} else {
- this->field_0x82.HALF.HI = 120;
+ this->unk_83 = 120;
sub_0801F730(this);
}
} else {
if (tmp == 4) {
- this->direction = sub_08049F84(this, 1);
+ super->direction = sub_08049F84(super, 1);
}
- ProcessMovement0(this);
- GetNextFrame(this);
+ ProcessMovement0(super);
+ GetNextFrame(super);
}
}
}
-void sub_0801F584(Entity* this) {
- if (this->frame & 0x10) {
- if (this->frame & 0x1) {
- this->frame ^= 1;
- this->hitType = 91;
+void sub_0801F584(ChuchuEntity* this) {
+ if (super->frame & 0x10) {
+ if (super->frame & 0x1) {
+ super->frame ^= 1;
+ super->hitType = 91;
EnqueueSFX(SFX_12B);
}
- ProcessMovement2(this);
- if (GravityUpdate(this, Q_8_8(64.0)) == 0)
- GetNextFrame(this);
+ ProcessMovement2(super);
+ if (GravityUpdate(super, Q_8_8(64.0)) == 0)
+ GetNextFrame(super);
} else {
- GetNextFrame(this);
+ GetNextFrame(super);
}
- if (this->frame & ANIM_DONE) {
+ if (super->frame & ANIM_DONE) {
if (sub_0801FBD0(this)) {
- this->field_0x82.HALF.HI = 0;
+ this->unk_83 = 0;
sub_0801F730(this);
} else {
- this->action = 6;
- this->subtimer = 60;
- this->speed = 0x20;
- this->hitType = 92;
- InitializeAnimation(this, 2);
+ super->action = 6;
+ super->subtimer = 60;
+ super->speed = 0x20;
+ super->hitType = 92;
+ InitializeAnimation(super, 2);
}
}
}
-void sub_0801F61C(Entity* this) {
- if (--this->subtimer == 0)
- this->action = 4;
- GetNextFrame(this);
+void sub_0801F61C(ChuchuEntity* this) {
+ if (--super->subtimer == 0)
+ super->action = 4;
+ GetNextFrame(super);
}
-void sub_0801F638(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 8;
- this->subtimer = 30;
- this->direction = sub_08049F84(this, 1);
- this->spritePriority.b1 = 2;
- this->spritePriority.b0 = 6;
- InitializeAnimation(this, 1);
+void sub_0801F638(ChuchuEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 8;
+ super->subtimer = 30;
+ super->direction = sub_08049F84(super, 1);
+ super->spritePriority.b1 = 2;
+ super->spritePriority.b0 = 6;
+ InitializeAnimation(super, 1);
}
}
-void sub_0801F688(Entity* this) {
- if (this->field_0x82.HALF.HI)
- this->field_0x82.HALF.HI--;
+void sub_0801F688(ChuchuEntity* this) {
+ if (this->unk_83)
+ this->unk_83--;
- if (sub_0801FBD0(this) || this->field_0x82.HALF.HI) {
- this->direction = sub_08049F84(this, 1);
- ProcessMovement5(this);
- GetNextFrame(this);
+ if (sub_0801FBD0(this) || this->unk_83) {
+ super->direction = sub_08049F84(super, 1);
+ ProcessMovement5(super);
+ GetNextFrame(super);
} else {
sub_0801F748(this);
}
}
-void sub_0801F6CC(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 1;
- this->spriteSettings.draw = 0;
- InitializeAnimation(this, 4);
+void sub_0801F6CC(ChuchuEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 1;
+ super->spriteSettings.draw = 0;
+ InitializeAnimation(super, 4);
}
}
-void sub_0801F6F8(Entity* this) {
- GravityUpdate(this, Q_8_8(24.0));
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 4;
- this->speed = 0x20;
- sub_0804AA1C(this);
- InitializeAnimation(this, 2);
+void sub_0801F6F8(ChuchuEntity* this) {
+ GravityUpdate(super, Q_8_8(24.0));
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 4;
+ super->speed = 0x20;
+ sub_0804AA1C(super);
+ InitializeAnimation(super, 2);
}
}
-void sub_0801F730(Entity* this) {
- this->action = 7;
- COLLISION_OFF(this);
- InitializeAnimation(this, 5);
+void sub_0801F730(ChuchuEntity* this) {
+ super->action = 7;
+ COLLISION_OFF(super);
+ InitializeAnimation(super, 5);
}
-void sub_0801F748(Entity* this) {
- this->action = 2;
- this->spriteSettings.draw = 1;
- InitializeAnimation(this, 4);
+void sub_0801F748(ChuchuEntity* this) {
+ super->action = 2;
+ super->spriteSettings.draw = 1;
+ InitializeAnimation(super, 4);
}
-void sub_0801F764(Entity* this) {
- if (this->action == 10 || this->action == 0)
+void sub_0801F764(ChuchuEntity* this) {
+ if (super->action == 10 || super->action == 0)
return;
- if (sub_08049FDC(this, 1)) {
- if (this->action == 1) {
- if (this->field_0x82.HALF.LO || PlayerInRange(this, 1, 0x48)) {
- this->action = 2;
- this->spriteSettings.draw = 1;
- this->field_0x82.HALF.LO = 1;
- InitializeAnimation(this, 0);
+ if (sub_08049FDC(super, 1)) {
+ if (super->action == 1) {
+ if (this->unk_82 || PlayerInRange(super, 1, 0x48)) {
+ super->action = 2;
+ super->spriteSettings.draw = 1;
+ this->unk_82 = 1;
+ InitializeAnimation(super, 0);
}
}
- } else if (this->action == 4) {
+ } else if (super->action == 4) {
sub_0801F730(this);
- } else if (this->action == 8) {
- this->action = 9;
- InitializeAnimation(this, 7);
+ } else if (super->action == 8) {
+ super->action = 9;
+ InitializeAnimation(super, 7);
}
}
-void sub_0801F7D8(Entity* this) {
- sub_0804A720(this);
- this->action = 1;
- this->timer = Random();
- this->field_0x80.HALF.LO = this->health;
- this->field_0x82.HALF.LO = 0;
+void sub_0801F7D8(ChuchuEntity* this) {
+ sub_0804A720(super);
+ super->action = 1;
+ super->timer = Random();
+ this->unk_80 = super->health;
+ this->unk_82 = 0;
}
-void sub_0801F7FC(Entity* this) {
- if (sub_08049FDC(this, 1) == 0)
+void sub_0801F7FC(ChuchuEntity* this) {
+ if (sub_08049FDC(super, 1) == 0)
return;
- if (this->field_0x82.HALF.LO || PlayerInRange(this, 1, 0x48)) {
- this->action = 2;
- this->spriteSettings.draw = 1;
- this->field_0x82.HALF.LO = 1;
- InitializeAnimation(this, 0);
+ if (this->unk_82 || PlayerInRange(super, 1, 0x48)) {
+ super->action = 2;
+ super->spriteSettings.draw = 1;
+ this->unk_82 = 1;
+ InitializeAnimation(super, 0);
}
}
-void sub_0801F840(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
+void sub_0801F840(ChuchuEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
sub_0801FB14(this);
- COLLISION_ON(this);
- this->spritePriority.b0 = 4;
- this->spritePriority.b1 = 3;
+ COLLISION_ON(super);
+ super->spritePriority.b0 = 4;
+ super->spritePriority.b1 = 3;
}
}
-void sub_0801F884(Entity* this) {
- GetNextFrame(this);
- if (this->subtimer) {
- this->subtimer--;
+void sub_0801F884(ChuchuEntity* this) {
+ GetNextFrame(super);
+ if (super->subtimer) {
+ super->subtimer--;
} else {
- Entity* ent = Create0x68FX(this, FX_LIGHTNING_STRIKE);
- if (ent != NULL) {
- ent->type2 = 64;
- this->action = 4;
- this->hitType = 165;
+ Entity* entity = Create0x68FX(super, FX_LIGHTNING_STRIKE);
+ if (entity != NULL) {
+ entity->type2 = 64;
+ super->action = 4;
+ super->hitType = 165;
EnqueueSFX(SFX_193);
}
}
}
-void sub_0801F8C0(Entity* this) {
+void sub_0801F8C0(ChuchuEntity* this) {
if (sub_0801FBD0(this)) {
sub_0801FAE0(this);
- } else if (sub_08049FDC(this, 1) == 0) {
+ } else if (sub_08049FDC(super, 1) == 0) {
sub_0801F730(this);
} else {
- u8 tmp = ++this->timer & 7;
- if (tmp == 0 && sub_08049F1C(this, gUnk_020000B0, 0x38)) {
- this->action = 5;
+ u8 tmp = ++super->timer & 7;
+ if (tmp == 0 && sub_08049F1C(super, gUnk_020000B0, 0x38)) {
+ super->action = 5;
Chuchu_JumpAtPlayer(this);
} else {
if (tmp == 4) {
- this->direction = GetFacingDirection(this, gUnk_020000B0);
+ super->direction = GetFacingDirection(super, gUnk_020000B0);
}
- ProcessMovement0(this);
- GetNextFrame(this);
+ ProcessMovement0(super);
+ GetNextFrame(super);
}
}
}
-void sub_0801F940(Entity* this) {
- if (this->frame & 0x10) {
- if (this->frame & 1) {
- this->frame ^= 1;
+void sub_0801F940(ChuchuEntity* this) {
+ if (super->frame & 0x10) {
+ if (super->frame & 1) {
+ super->frame ^= 1;
EnqueueSFX(SFX_12B);
}
- ProcessMovement2(this);
- if (GravityUpdate(this, Q_8_8(64.0)) == 0)
- GetNextFrame(this);
+ ProcessMovement2(super);
+ if (GravityUpdate(super, Q_8_8(64.0)) == 0)
+ GetNextFrame(super);
} else {
- GetNextFrame(this);
+ GetNextFrame(super);
}
- if (this->frame & ANIM_DONE) {
+ if (super->frame & ANIM_DONE) {
if (sub_0801FBD0(this)) {
sub_0801FAE0(this);
} else {
- this->action = 6;
- this->subtimer = 60;
- this->speed = 0x20;
- InitializeAnimation(this, 2);
+ super->action = 6;
+ super->subtimer = 60;
+ super->speed = 0x20;
+ InitializeAnimation(super, 2);
}
}
}
-void sub_0801F9C4(Entity* this) {
- if (--this->subtimer == 0)
- this->action = 4;
- GetNextFrame(this);
+void sub_0801F9C4(ChuchuEntity* this) {
+ if (--super->subtimer == 0)
+ super->action = 4;
+ GetNextFrame(super);
}
-void sub_0801F9E0(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 8;
- this->subtimer = 30;
- this->direction = sub_08049F84(this, 1);
- this->spritePriority.b1 = 2;
- this->spritePriority.b0 = 6;
- InitializeAnimation(this, 1);
+void sub_0801F9E0(ChuchuEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 8;
+ super->subtimer = 30;
+ super->direction = sub_08049F84(super, 1);
+ super->spritePriority.b1 = 2;
+ super->spritePriority.b0 = 6;
+ InitializeAnimation(super, 1);
}
}
-void sub_0801FA30(Entity* this) {
+void sub_0801FA30(ChuchuEntity* this) {
if (sub_0801FBD0(this)) {
- this->direction = sub_08049F84(this, 1);
- ProcessMovement5(this);
- GetNextFrame(this);
- } else if (sub_08049FDC(this, 1) == 0) {
- this->action = 9;
- InitializeAnimation(this, 7);
+ super->direction = sub_08049F84(super, 1);
+ ProcessMovement5(super);
+ GetNextFrame(super);
+ } else if (sub_08049FDC(super, 1) == 0) {
+ super->action = 9;
+ InitializeAnimation(super, 7);
} else {
sub_0801FAF8(this);
}
}
-void sub_0801FA78(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 1;
- this->spriteSettings.draw = 0;
- InitializeAnimation(this, 4);
- sub_0804AA1C(this);
+void sub_0801FA78(ChuchuEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 1;
+ super->spriteSettings.draw = 0;
+ InitializeAnimation(super, 4);
+ sub_0804AA1C(super);
}
}
-void sub_0801FAAC(Entity* this) {
- GravityUpdate(this, Q_8_8(24.0));
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
+void sub_0801FAAC(ChuchuEntity* this) {
+ GravityUpdate(super, Q_8_8(24.0));
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
sub_0801FB14(this);
- this->speed = 0x20;
- sub_0804AA1C(this);
+ super->speed = 0x20;
+ sub_0804AA1C(super);
}
}
-void sub_0801FAE0(Entity* this) {
- this->action = 7;
- COLLISION_OFF(this);
- InitializeAnimation(this, 5);
+void sub_0801FAE0(ChuchuEntity* this) {
+ super->action = 7;
+ COLLISION_OFF(super);
+ InitializeAnimation(super, 5);
}
-void sub_0801FAF8(Entity* this) {
- this->action = 2;
- this->spriteSettings.draw = 1;
- InitializeAnimation(this, 4);
+void sub_0801FAF8(ChuchuEntity* this) {
+ super->action = 2;
+ super->spriteSettings.draw = 1;
+ InitializeAnimation(super, 4);
}
-void sub_0801FB14(Entity* this) {
- this->action = 3;
- this->subtimer = 30;
- this->direction = sub_08049F84(this, 1);
- InitializeAnimation(this, 2);
+void sub_0801FB14(ChuchuEntity* this) {
+ super->action = 3;
+ super->subtimer = 30;
+ super->direction = sub_08049F84(super, 1);
+ InitializeAnimation(super, 2);
}
-void sub_0801FB34(Entity* this) {
- if (*(Entity**)&this->field_0x68) {
- sub_0806FA90(this, *(Entity**)&this->field_0x68, gUnk_080CA2B4[this->frame & 0xf], 1);
- (*(Entity**)&this->field_0x68)->spriteOffsetY--;
+void sub_0801FB34(ChuchuEntity* this) {
+ if (this->unk_68) {
+ sub_0806FA90(super, this->unk_68, gUnk_080CA2B4[super->frame & 0xf], 1);
+ (this->unk_68)->spriteOffsetY--;
}
}
-void sub_0801FB68(Entity* this) {
- switch (this->type) {
+void sub_0801FB68(ChuchuEntity* this) {
+ switch (super->type) {
case 0:
- this->action = 9;
+ super->action = 9;
break;
case 1:
- this->action = 10;
- COLLISION_ON(this);
- this->spriteSettings.draw = 1;
- this->spritePriority.b1 = 3;
+ super->action = 10;
+ COLLISION_ON(super);
+ super->spriteSettings.draw = 1;
+ super->spritePriority.b1 = 3;
break;
case 2:
- this->action = 10;
- this->hitType = 92;
- sub_0804AA1C(this);
+ super->action = 10;
+ super->hitType = 92;
+ sub_0804AA1C(super);
break;
}
- this->zVelocity = 0;
+ super->zVelocity = 0;
}
-u32 sub_0801FBD0(Entity* this) {
- if (GetTileUnderEntity(this) == 0x10) {
+u32 sub_0801FBD0(ChuchuEntity* this) {
+ if (GetTileUnderEntity(super) == 0x10) {
return 1;
} else {
return 0;
}
}
-void Chuchu_JumpAtPlayer(Entity* this) {
- this->speed = 0x180;
- this->zVelocity = Q_16_16(2.0);
- this->direction = sub_08049F84(this, 1);
- InitializeAnimation(this, 3);
+void Chuchu_JumpAtPlayer(ChuchuEntity* this) {
+ super->speed = 0x180;
+ super->zVelocity = Q_16_16(2.0);
+ super->direction = sub_08049F84(super, 1);
+ InitializeAnimation(super, 3);
}
// clang-format off
-void (*const Chuchu_Functions[])(Entity*) = {
+void (*const Chuchu_Functions[])(ChuchuEntity*) = {
Chuchu_OnTick,
Chuchu_OnCollision,
Chuchu_OnKnockback,
@@ -728,7 +740,7 @@ void (*const Chuchu_Functions[])(Entity*) = {
Chuchu_OnGrabbed,
};
-void (*const gUnk_080CA234[])(Entity*) = {
+void (*const gUnk_080CA234[])(ChuchuEntity*) = {
sub_0801F0A4,
nullsub_4,
sub_0801F0C8,
@@ -741,7 +753,7 @@ void (*const gUnk_080CA234[])(Entity*) = {
sub_0801F2F8,
};
-void (*const gUnk_080CA25C[])(Entity*) = {
+void (*const gUnk_080CA25C[])(ChuchuEntity*) = {
sub_0801F428,
sub_0801F48C,
sub_0801F494,
@@ -755,7 +767,7 @@ void (*const gUnk_080CA25C[])(Entity*) = {
sub_0801F6F8,
};
-void (*const gUnk_080CA288[])(Entity*) = {
+void (*const gUnk_080CA288[])(ChuchuEntity*) = {
sub_0801F7D8,
sub_0801F7FC,
sub_0801F840,
diff --git a/src/enemy/chuchuBoss.c b/src/enemy/chuchuBoss.c
index ab565a0d..c91cf858 100644
--- a/src/enemy/chuchuBoss.c
+++ b/src/enemy/chuchuBoss.c
@@ -1,14 +1,13 @@
-#define NENT_DEPRECATED
/**
* @file chuchuBoss.c
* @ingroup Enemies
*
* @brief Chuchu Boss enemy
*/
-#include "global.h"
+#define NENT_DEPRECATED
#include "enemy.h"
-#include "object.h"
#include "functions.h"
+#include "object.h"
typedef struct {
u8 unk_00;
diff --git a/src/enemy/cloudPiranha.c b/src/enemy/cloudPiranha.c
index d9ae589f..83061808 100644
--- a/src/enemy/cloudPiranha.c
+++ b/src/enemy/cloudPiranha.c
@@ -4,9 +4,7 @@
*
* @brief Cloud Piranha enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
#include "collision.h"
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/crow.c b/src/enemy/crow.c
index bd2fb325..ccbf5026 100644
--- a/src/enemy/crow.c
+++ b/src/enemy/crow.c
@@ -1,6 +1,12 @@
+/**
+ * @file crow.c
+ * @ingroup Enemies
+ *
+ * @brief Crow enemy
+ */
#define NENT_DEPRECATED
-#include "entity.h"
#include "enemy.h"
+#include "entity.h"
#include "functions.h"
typedef struct {
diff --git a/src/enemy/cuccoAggr.c b/src/enemy/cuccoAggr.c
index c14a4464..4eae33ed 100644
--- a/src/enemy/cuccoAggr.c
+++ b/src/enemy/cuccoAggr.c
@@ -1,6 +1,12 @@
+/**
+ * @file cuccoAggr.c
+ * @ingroup Enemies
+ *
+ * @brief Cucco Aggr enemy
+ */
#define NENT_DEPRECATED
-#include "entity.h"
#include "enemy.h"
+#include "entity.h"
#include "functions.h"
typedef struct {
@@ -292,13 +298,13 @@ bool32 CuccoAggr_IsOutsideScroll(CuccoAggrEntity* this) {
void sub_080391B4(CuccoAggrEntity* this) {
if (this->unk_7a) {
if ((this->unk_7b++ & 0x1f) == 0) {
- Entity* ent = CreateEnemy(CUCCO_AGGR, 2);
- if (ent != NULL) {
+ Entity* entity = CreateEnemy(CUCCO_AGGR, 2);
+ if (entity != NULL) {
u32 rand = (Random() & 0x17);
const PosOffset* ptr = &gCuccoAggrSpawnPoints[rand];
- ent->x.HALF.HI = gRoomControls.scroll_x + ptr->x;
- ent->y.HALF.HI = gRoomControls.scroll_y + ptr->y;
- ent->collisionLayer = super->collisionLayer;
+ entity->x.HALF.HI = gRoomControls.scroll_x + ptr->x;
+ entity->y.HALF.HI = gRoomControls.scroll_y + ptr->y;
+ entity->collisionLayer = super->collisionLayer;
}
}
}
@@ -317,10 +323,10 @@ void sub_08039218(CuccoAggrEntity* this) {
}
void CuccoAggr_CreateFx(CuccoAggrEntity* this) {
- Entity* ent = CreateFx(super, gCuccoAggrFx[super->type], 0);
+ Entity* entity = CreateFx(super, gCuccoAggrFx[super->type], 0);
- if (ent != NULL) {
- ent->x.HALF.HI += gCuccoAggrFxHorizontalOffsets[super->spriteSettings.flipX];
+ if (entity != NULL) {
+ entity->x.HALF.HI += gCuccoAggrFxHorizontalOffsets[super->spriteSettings.flipX];
}
}
diff --git a/src/enemy/cuccoChickAggr.c b/src/enemy/cuccoChickAggr.c
index ca4f3585..2431398d 100644
--- a/src/enemy/cuccoChickAggr.c
+++ b/src/enemy/cuccoChickAggr.c
@@ -4,7 +4,7 @@
*
* @brief Cucco Chick Aggr enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/curtain.c b/src/enemy/curtain.c
index 77af09ea..3450ea7c 100644
--- a/src/enemy/curtain.c
+++ b/src/enemy/curtain.c
@@ -1,3 +1,10 @@
+/**
+ * @file curtain.c
+ * @ingroup Enemies
+ *
+ * @brief Curtain enemy
+ */
+#define NENT_DEPRECATED
#include "enemy.h"
#include "entity.h"
diff --git a/src/enemy/darkNut.c b/src/enemy/darkNut.c
index ae29107c..fa729f59 100644
--- a/src/enemy/darkNut.c
+++ b/src/enemy/darkNut.c
@@ -4,38 +4,54 @@
*
* @brief Dark Nut enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
+
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[12];
+ /*0x74*/ u8 unk_74;
+ /*0x75*/ u8 unk_75;
+ /*0x76*/ u16 unk_76;
+ /*0x78*/ u8 unk_78;
+ /*0x79*/ u8 unk_79;
+ /*0x7a*/ u8 unk_7a;
+ /*0x7b*/ u8 unk_7b;
+ /*0x7c*/ u8 unk_7c;
+ /*0x7d*/ u8 unused2[7];
+ /*0x84*/ u8 unk_84;
+} DarkNutEntity;
+
typedef struct {
u8 field_0x0;
u8 field_0x1;
} PACKED stuct_080CAB14;
-void sub_08021218(Entity*, u32, u32);
-void sub_0802124C(Entity*);
+void sub_08021218(DarkNutEntity*, u32, u32);
+void sub_0802124C(DarkNutEntity*);
u32 sub_08021274(u32, u32);
-void sub_08021390(Entity*);
-void sub_080213B0(Entity*);
-void sub_080213D0(Entity*, u32);
-void sub_080213F0(Entity*);
-void sub_08021400(Entity*);
-void sub_08021414(Entity*);
-void sub_08021424(Entity*);
-u32 sub_080214FC(Entity*);
-void sub_08021540(Entity*);
-void sub_08021588(Entity*);
-void sub_0802159C(Entity*);
-void sub_08021600(Entity*);
-void sub_08021644(Entity*);
-u32 sub_08021664(Entity*, Entity*);
-u32 sub_0802169C(Entity*, Entity*);
+void sub_08021390(DarkNutEntity*);
+void sub_080213B0(DarkNutEntity*);
+void sub_080213D0(DarkNutEntity*, u32);
+void sub_080213F0(DarkNutEntity*);
+void sub_08021400(DarkNutEntity*);
+void sub_08021414(DarkNutEntity*);
+void sub_08021424(DarkNutEntity*);
+u32 sub_080214FC(DarkNutEntity*);
+void sub_08021540(DarkNutEntity*);
+void sub_08021588(DarkNutEntity*);
+void sub_0802159C(DarkNutEntity*);
+void sub_08021600(DarkNutEntity*);
+void sub_08021644(DarkNutEntity*);
+u32 sub_08021664(DarkNutEntity*, Entity*);
+u32 sub_0802169C(DarkNutEntity*, Entity*);
extern Entity* gUnk_020000B0;
-extern void (*const DarkNut_Functions[])(Entity*);
-extern void (*const gUnk_080CAAB0[])(Entity*);
+extern void (*const DarkNut_Functions[])(DarkNutEntity*);
+extern void (*const gUnk_080CAAB0[])(DarkNutEntity*);
extern const s8 gUnk_080CAB00[];
extern const s8 gUnk_080CAB04[];
@@ -49,150 +65,150 @@ extern const u8 gUnk_080CAB4A[];
extern const u8 gUnk_080CAB52[];
extern const u8 gUnk_080CAB68[];
-extern void (*const gUnk_080CAB58[])(Entity*);
+extern void (*const gUnk_080CAB58[])(DarkNutEntity*);
-void DarkNut(Entity* this) {
- EnemyFunctionHandler(this, DarkNut_Functions);
- SetChildOffset(this, 0, 1, -22);
+void DarkNut(DarkNutEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)DarkNut_Functions);
+ SetChildOffset(super, 0, 1, -22);
}
-void DarkNut_OnTick(Entity* this) {
- gUnk_080CAAB0[this->action](this);
+void DarkNut_OnTick(DarkNutEntity* this) {
+ gUnk_080CAAB0[super->action](this);
}
-void DarkNut_OnCollision(Entity* this) {
- switch (this->contactFlags & 0x7f) {
+void DarkNut_OnCollision(DarkNutEntity* this) {
+ switch (super->contactFlags & 0x7f) {
case 0x1c:
- this->action = 11;
- this->timer = gUnk_080CAB0C[this->type];
- this->hitType = 81;
- sub_08021218(this, 8, DirectionToAnimationState(this->knockbackDirection ^ 0x10));
+ super->action = 11;
+ super->timer = gUnk_080CAB0C[super->type];
+ super->hitType = 81;
+ sub_08021218(this, 8, DirectionToAnimationState(super->knockbackDirection ^ 0x10));
sub_08021588(this);
- Create0x68FX(this, FX_STARS);
+ Create0x68FX(super, FX_STARS);
break;
case 0x16:
- this->action = 11;
- this->timer = gUnk_080CAB10[this->type];
- this->hitType = 81;
- sub_08021218(this, 8, DirectionToAnimationState(this->knockbackDirection ^ 0x10));
+ super->action = 11;
+ super->timer = gUnk_080CAB10[super->type];
+ super->hitType = 81;
+ sub_08021218(this, 8, DirectionToAnimationState(super->knockbackDirection ^ 0x10));
sub_08021588(this);
- Create0x68FX(this, FX_STARS);
+ Create0x68FX(super, FX_STARS);
break;
case 0x4b:
- if (this->action == 13 || this->action == 15 || this->action == 19 || this->action == 18)
+ if (super->action == 13 || super->action == 15 || super->action == 19 || super->action == 18)
break;
- switch (this->field_0x78.HALF.HI) {
+ switch (this->unk_79) {
case 8 ... 12:
- this->field_0x7a.HALF.LO = gUnk_080CAB04[this->type];
+ this->unk_7a = gUnk_080CAB04[super->type];
break;
case 4 ... 6:
- this->field_0x7a.HALF.LO = gUnk_080CAB00[this->type];
+ this->unk_7a = gUnk_080CAB00[super->type];
break;
default:
- this->field_0x7a.HALF.LO = 0;
+ this->unk_7a = 0;
break;
}
- this->action = 10;
- sub_08021218(this, 0xb, this->animationState);
+ super->action = 10;
+ sub_08021218(this, 0xb, super->animationState);
EnqueueSFX(SFX_15D);
sub_08021588(this);
break;
case 0x4c:
- if (this->action == 15) {
+ if (super->action == 15) {
u8 bVar3 = 0xff;
- if (this->child != NULL) {
- bVar3 = this->child->contactFlags & 0x7f;
+ if (super->child != NULL) {
+ bVar3 = super->child->contactFlags & 0x7f;
}
if (bVar3 == 2) {
- sub_080213D0(this, gUnk_080CAB08[this->type]);
+ sub_080213D0(this, gUnk_080CAB08[super->type]);
} else {
sub_080213D0(this, 0);
}
}
break;
default:
- if (this->health != this->field_0x78.HALF.LO) {
+ if (super->health != this->unk_78) {
sub_08021588(this);
sub_08021390(this);
- sub_0804AA1C(this);
+ sub_0804AA1C(super);
}
break;
}
- this->field_0x78.HALF.LO = this->health;
- EnemyFunctionHandlerAfterCollision(this, DarkNut_Functions);
+ this->unk_78 = super->health;
+ EnemyFunctionHandlerAfterCollision(super, DarkNut_Functions);
}
-void DarkNut_OnGrabbed(Entity* this) {
+void DarkNut_OnGrabbed(DarkNutEntity* this) {
}
-void sub_08020D70(Entity* this) {
- sub_0804A720(this);
- this->action = 1;
- this->field_0x74.HALF.HI = 0;
- this->field_0x78.HALF.LO = this->health;
- this->animationState = -1;
+void sub_08020D70(DarkNutEntity* this) {
+ sub_0804A720(super);
+ super->action = 1;
+ this->unk_75 = 0;
+ this->unk_78 = super->health;
+ super->animationState = -1;
sub_08021218(this, 0, 2);
}
-void sub_08020D9C(Entity* this) {
- if (sub_08049FDC(this, 1))
+void sub_08020D9C(DarkNutEntity* this) {
+ if (sub_08049FDC(super, 1))
sub_080213F0(this);
}
-void sub_08020DB4(Entity* this) {
- UpdateAnimationSingleFrame(this);
- if (this->frame & ANIM_DONE)
+void sub_08020DB4(DarkNutEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ if (super->frame & ANIM_DONE)
sub_08021390(this);
}
-void sub_08020DD4(Entity* this) {
+void sub_08020DD4(DarkNutEntity* this) {
if (sub_080214FC(this)) {
sub_080213F0(this);
- } else if (--this->field_0x76.HWORD == 0) {
- this->action = 5;
- sub_08021218(this, 5, this->animationState);
+ } else if (--this->unk_76 == 0) {
+ super->action = 5;
+ sub_08021218(this, 5, super->animationState);
} else {
- if (--this->timer == 0)
+ if (--super->timer == 0)
sub_08021540(this);
- ProcessMovement0(this);
- UpdateAnimationSingleFrame(this);
+ ProcessMovement0(super);
+ UpdateAnimationSingleFrame(super);
}
}
-void sub_08020E28(Entity* this) {
- UpdateAnimationSingleFrame(this);
- if (this->frame & ANIM_DONE)
+void sub_08020E28(DarkNutEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ if (super->frame & ANIM_DONE)
sub_080213B0(this);
}
-void sub_08020E48(Entity* this) {
+void sub_08020E48(DarkNutEntity* this) {
if (sub_080214FC(this)) {
sub_080213F0(this);
} else {
- UpdateAnimationSingleFrame(this);
- if (this->frame & ANIM_DONE)
+ UpdateAnimationSingleFrame(super);
+ if (super->frame & ANIM_DONE)
sub_080213B0(this);
}
}
-void sub_08020E78(Entity* this) {
- UpdateAnimationSingleFrame(this);
- if (this->frame & ANIM_DONE)
+void sub_08020E78(DarkNutEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ if (super->frame & ANIM_DONE)
sub_08021390(this);
}
-void sub_08020E98(Entity* this) {
- if (PlayerInRange(this, 1, 56)) {
+void sub_08020E98(DarkNutEntity* this) {
+ if (PlayerInRange(super, 1, 56)) {
if (sub_0802169C(this, gUnk_020000B0)) {
- this->action = 8;
- sub_08021218(this, 7, this->animationState);
+ super->action = 8;
+ sub_08021218(this, 7, super->animationState);
} else {
- this->direction = GetFacingDirection(gUnk_020000B0, this);
- if (ProcessMovement0(this) == 0) {
- this->action = 8;
- sub_08021218(this, 7, this->animationState);
+ super->direction = GetFacingDirection(gUnk_020000B0, super);
+ if (ProcessMovement0(super) == 0) {
+ super->action = 8;
+ sub_08021218(this, 7, super->animationState);
} else {
- this->direction = DirectionTurnAround(this->direction);
+ super->direction = DirectionTurnAround(super->direction);
sub_0802124C(this);
sub_08021644(this);
}
@@ -201,35 +217,35 @@ void sub_08020E98(Entity* this) {
if (gUnk_020000B0 == NULL) {
sub_08021414(this);
} else {
- this->direction = GetFacingDirection(this, gUnk_020000B0);
- ProcessMovement0(this);
+ super->direction = GetFacingDirection(super, gUnk_020000B0);
+ ProcessMovement0(super);
sub_0802124C(this);
sub_08021644(this);
}
}
}
-void sub_08020F28(Entity* this) {
- UpdateAnimationSingleFrame(this);
- if (this->frame & ANIM_DONE)
+void sub_08020F28(DarkNutEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ if (super->frame & ANIM_DONE)
sub_08021400(this);
}
-void sub_08020F48(Entity* this) {
- if (PlayerInRange(this, 1, 0x48)) {
+void sub_08020F48(DarkNutEntity* this) {
+ if (PlayerInRange(super, 1, 0x48)) {
if (sub_08021664(this, gUnk_020000B0)) {
- u32 uVar2 = sub_0804A044(this, gUnk_020000B0, 9);
+ u32 uVar2 = sub_0804A044(super, gUnk_020000B0, 9);
if (uVar2 == 0xff) {
sub_08021424(this);
} else {
Entity* pEVar3;
- this->action = 14;
+ super->action = 14;
sub_08021218(this, 13, uVar2 >> 3);
- pEVar3 = CreateProjectileWithParent(this, DARK_NUT_SWORD_SLASH, 1);
+ pEVar3 = CreateProjectileWithParent(super, DARK_NUT_SWORD_SLASH, 1);
if (pEVar3) {
- pEVar3->parent = this;
- this->child = pEVar3;
+ pEVar3->parent = super;
+ super->child = pEVar3;
}
}
} else {
@@ -240,155 +256,155 @@ void sub_08020F48(Entity* this) {
}
}
-void sub_08020FAC(Entity* this) {
- if (this->frame & ANIM_DONE) {
- if (this->field_0x7a.HALF.LO) {
- this->field_0x7a.HALF.LO--;
+void sub_08020FAC(DarkNutEntity* this) {
+ if (super->frame & ANIM_DONE) {
+ if (this->unk_7a) {
+ this->unk_7a--;
} else {
- this->iframes = -8;
+ super->iframes = -8;
sub_08021390(this);
}
} else {
- UpdateAnimationSingleFrame(this);
+ UpdateAnimationSingleFrame(super);
}
}
-void sub_08020FE4(Entity* this) {
- UpdateAnimationSingleFrame(this);
- if (--this->timer == 0) {
- this->action = 12;
- sub_08021218(this, 9, this->animationState);
- sub_0804AA1C(this);
+void sub_08020FE4(DarkNutEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ if (--super->timer == 0) {
+ super->action = 12;
+ sub_08021218(this, 9, super->animationState);
+ sub_0804AA1C(super);
}
}
-void sub_08021010(Entity* this) {
- UpdateAnimationSingleFrame(this);
- if (this->frame & ANIM_DONE) {
- this->hitType = 0x56;
+void sub_08021010(DarkNutEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->hitType = 0x56;
sub_080213F0(this);
}
}
-void sub_08021038(Entity* this) {
- if (this->child == NULL && this->frame) {
- Entity* pEVar2 = (Entity*)CreateProjectileWithParent(this, DARK_NUT_SWORD_SLASH, 0);
+void sub_08021038(DarkNutEntity* this) {
+ if (super->child == NULL && super->frame) {
+ Entity* pEVar2 = (Entity*)CreateProjectileWithParent(super, DARK_NUT_SWORD_SLASH, 0);
if (pEVar2) {
- pEVar2->parent = this;
- this->child = pEVar2;
+ pEVar2->parent = super;
+ super->child = pEVar2;
}
EnqueueSFX(SFX_10E);
}
- if (this->frame & ANIM_DONE) {
+ if (super->frame & ANIM_DONE) {
sub_08021588(this);
- if (this->field_0x7c.BYTES.byte0) {
- this->field_0x7c.BYTES.byte0--;
+ if (this->unk_7c) {
+ this->unk_7c--;
} else {
sub_08021390(this);
}
} else {
- UpdateAnimationSingleFrame(this);
- if (this->frame == 4)
- this->hitType = 81;
+ UpdateAnimationSingleFrame(super);
+ if (super->frame == 4)
+ super->hitType = 81;
}
}
-void sub_080210A8(Entity* this) {
- UpdateAnimationSingleFrame(this);
- if (this->frame & 1) {
- this->frame = 0;
+void sub_080210A8(DarkNutEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ if (super->frame & 1) {
+ super->frame = 0;
sub_08021588(this);
EnqueueSFX(SFX_15D);
- } else if (this->frame & ANIM_DONE) {
+ } else if (super->frame & ANIM_DONE) {
sub_08021390(this);
}
}
-void sub_080210E4(Entity* this) {
- UpdateAnimationSingleFrame(this);
- if (this->frame & 1) {
- Entity* ent;
+void sub_080210E4(DarkNutEntity* this) {
+ UpdateAnimationSingleFrame(super);
+ if (super->frame & 1) {
+ Entity* entity;
- this->frame &= ~1;
- ent = CreateProjectileWithParent(this, DARK_NUT_SWORD_SLASH, 2);
- if (ent != NULL) {
- ent->parent = this;
- this->child = ent;
+ super->frame &= ~1;
+ entity = CreateProjectileWithParent(super, DARK_NUT_SWORD_SLASH, 2);
+ if (entity != NULL) {
+ entity->parent = super;
+ super->child = entity;
}
EnqueueSFX(SFX_10E);
}
sub_08021644(this);
- if ((this->frame & 0x10) && (!ProcessMovement0(this) || (this->child && (this->child->contactFlags & 0x80)))) {
+ if ((super->frame & 0x10) && (!ProcessMovement0(super) || (super->child && (super->child->contactFlags & 0x80)))) {
sub_080213D0(this, 0);
} else {
- if (--this->field_0x76.HWORD == 0)
+ if (--this->unk_76 == 0)
sub_080213D0(this, 0);
}
}
-void sub_08021170(Entity* this) {
- if (this->frame & ANIM_DONE) {
- if (this->field_0x7a.HALF.HI) {
- this->field_0x7a.HALF.HI--;
+void sub_08021170(DarkNutEntity* this) {
+ if (super->frame & ANIM_DONE) {
+ if (this->unk_7b) {
+ this->unk_7b--;
} else {
sub_08021390(this);
}
} else {
- UpdateAnimationSingleFrame(this);
+ UpdateAnimationSingleFrame(super);
}
}
-void sub_080211A0(Entity* this) {
+void sub_080211A0(DarkNutEntity* this) {
if (sub_080214FC(this)) {
sub_08021390(this);
} else {
- UpdateAnimationSingleFrame(this);
- if (this->frame & ANIM_DONE)
+ UpdateAnimationSingleFrame(super);
+ if (super->frame & ANIM_DONE)
sub_080213B0(this);
}
}
-void sub_080211D0(Entity* this)
+void sub_080211D0(DarkNutEntity* this)
{
- UpdateAnimationSingleFrame(this);
+ UpdateAnimationSingleFrame(super);
sub_0802159C(this);
- if (this->frame & ANIM_DONE)
+ if (super->frame & ANIM_DONE)
sub_08021390(this);
}
-void sub_080211F4(Entity* this) {
- UpdateAnimationSingleFrame(this);
+void sub_080211F4(DarkNutEntity* this) {
+ UpdateAnimationSingleFrame(super);
sub_08021600(this);
- if (this->frame & ANIM_DONE)
+ if (super->frame & ANIM_DONE)
sub_08021390(this);
}
-void sub_08021218(Entity* this, u32 param_2, u32 param_3) {
+void sub_08021218(DarkNutEntity* this, u32 param_2, u32 param_3) {
const stuct_080CAB14* unk;
- if (this->field_0x74.HALF.LO == param_2 && this->animationState == param_3)
+ if (this->unk_74 == param_2 && super->animationState == param_3)
return;
- this->animationState = param_3;
- this->field_0x74.HALF.LO = param_2;
+ super->animationState = param_3;
+ this->unk_74 = param_2;
unk = &gUnk_080CAB14[param_2];
- this->spriteIndex = unk->field_0x1;
- InitAnimationForceUpdate(this, unk->field_0x0 + param_3);
+ super->spriteIndex = unk->field_0x1;
+ InitAnimationForceUpdate(super, unk->field_0x0 + param_3);
}
-void sub_0802124C(Entity* this) {
- u32 iVar1 = sub_08021274(this->animationState, this->direction);
+void sub_0802124C(DarkNutEntity* this) {
+ u32 iVar1 = sub_08021274(super->animationState, super->direction);
if (iVar1 != 0xff) {
- sub_08021218(this, this->field_0x74.HALF.LO, iVar1);
+ sub_08021218(this, this->unk_74, iVar1);
} else {
- UpdateAnimationSingleFrame(this);
+ UpdateAnimationSingleFrame(super);
}
}
@@ -404,103 +420,103 @@ u32 sub_08021274(u32 animationState, u32 dir) {
return dir;
}
-void sub_080212B0(Entity* this) {
+void sub_080212B0(DarkNutEntity* this) {
u8 tmp;
- switch (this->field_0x74.HALF.HI) {
+ switch (this->unk_75) {
default:
- this->field_0x74.HALF.HI = 1;
+ this->unk_75 = 1;
tmp = gUnk_080CAB3A[Random() & 7];
break;
case 1:
- this->field_0x74.HALF.HI = 2;
+ this->unk_75 = 2;
tmp = gUnk_080CAB42[Random() & 7];
break;
case 2:
- this->field_0x74.HALF.HI = 0;
+ this->unk_75 = 0;
tmp = gUnk_080CAB4A[Random() & 7];
break;
}
- if (this->type < 2 && tmp == 2)
+ if (super->type < 2 && tmp == 2)
tmp = gUnk_080CAB52[Random() & 3];
- this->child = NULL;
+ super->child = NULL;
gUnk_080CAB58[tmp](this);
}
-void sub_08021328(Entity* this) {
- this->action = 13;
- this->field_0x7c.BYTES.byte0 = gUnk_080CAB68[this->type];
- sub_08021218(this, 0xc, this->animationState);
+void sub_08021328(DarkNutEntity* this) {
+ super->action = 13;
+ this->unk_7c = gUnk_080CAB68[super->type];
+ sub_08021218(this, 0xc, super->animationState);
}
-void sub_0802134C(Entity* this) {
- this->action = 15;
- this->direction = DirectionFromAnimationState(this->animationState);
- this->speed = 0x200;
- this->field_0x76.HWORD = 0x78;
- sub_08021218(this, 0xe, this->animationState);
+void sub_0802134C(DarkNutEntity* this) {
+ super->action = 15;
+ super->direction = DirectionFromAnimationState(super->animationState);
+ super->speed = 0x200;
+ this->unk_76 = 0x78;
+ sub_08021218(this, 0xe, super->animationState);
}
-void sub_08021370(Entity* this) {
- this->action = 18;
- sub_08021218(this, 0x10, this->animationState);
+void sub_08021370(DarkNutEntity* this) {
+ super->action = 18;
+ sub_08021218(this, 0x10, super->animationState);
}
-void sub_08021380(Entity* this) {
- this->action = 19;
- sub_08021218(this, 0x11, this->animationState);
+void sub_08021380(DarkNutEntity* this) {
+ super->action = 19;
+ sub_08021218(this, 0x11, super->animationState);
}
-void sub_08021390(Entity* this) {
- this->action = 7;
- this->speed = 0x200;
- this->hitType = 0x56;
- sub_08021218(this, 6, this->animationState);
+void sub_08021390(DarkNutEntity* this) {
+ super->action = 7;
+ super->speed = 0x200;
+ super->hitType = 0x56;
+ sub_08021218(this, 6, super->animationState);
}
-void sub_080213B0(Entity* this) {
- this->action = 3;
- this->timer = 1;
- this->speed = 0xc0;
- this->field_0x76.HWORD = 0xf0;
- sub_08021218(this, 3, this->animationState);
+void sub_080213B0(DarkNutEntity* this) {
+ super->action = 3;
+ super->timer = 1;
+ super->speed = 0xc0;
+ this->unk_76 = 0xf0;
+ sub_08021218(this, 3, super->animationState);
}
-void sub_080213D0(Entity* this, u32 param_2) {
- this->action = 16;
- this->field_0x7a.HALF.HI = param_2;
- sub_08021218(this, 0xf, this->animationState);
+void sub_080213D0(DarkNutEntity* this, u32 param_2) {
+ super->action = 16;
+ this->unk_7b = param_2;
+ sub_08021218(this, 0xf, super->animationState);
sub_08021588(this);
}
-void sub_080213F0(Entity* this) {
- this->action = 6;
- sub_08021218(this, 1, this->animationState);
+void sub_080213F0(DarkNutEntity* this) {
+ super->action = 6;
+ sub_08021218(this, 1, super->animationState);
}
-void sub_08021400(Entity* this) {
- this->action = 9;
- this->speed = 0x60;
- sub_08021218(this, 10, this->animationState);
+void sub_08021400(DarkNutEntity* this) {
+ super->action = 9;
+ super->speed = 0x60;
+ sub_08021218(this, 10, super->animationState);
}
-void sub_08021414(Entity* this) {
- this->action = 17;
- sub_08021218(this, 5, this->animationState);
+void sub_08021414(DarkNutEntity* this) {
+ super->action = 17;
+ sub_08021218(this, 5, super->animationState);
}
-void sub_08021424(Entity* this) {
+void sub_08021424(DarkNutEntity* this) {
s32 x, y;
u32 tmp;
- u32 dir = GetFacingDirection(this, gUnk_020000B0);
- tmp = sub_08021274(this->animationState, dir);
+ u32 dir = GetFacingDirection(super, gUnk_020000B0);
+ tmp = sub_08021274(super->animationState, dir);
if (tmp != 0xff) {
- sub_08021218(this, this->field_0x74.HALF.LO, tmp);
+ sub_08021218(this, this->unk_74, tmp);
} else {
- tmp = this->animationState;
+ tmp = super->animationState;
}
switch (tmp) {
@@ -522,122 +538,122 @@ void sub_08021424(Entity* this) {
break;
}
- if (!(6 < (x - this->x.HALF.HI) + 3U) && !(4 < (y - this->y.HALF.HI) + 2U)) {
+ if (!(6 < (x - super->x.HALF.HI) + 3U) && !(4 < (y - super->y.HALF.HI) + 2U)) {
sub_080212B0(this);
} else {
- this->direction = CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, x, y);
- if (!ProcessMovement0(this)) {
+ super->direction = CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, x, y);
+ if (!ProcessMovement0(super)) {
sub_080212B0(this);
} else {
- UpdateAnimationSingleFrame(this);
+ UpdateAnimationSingleFrame(super);
}
}
}
-u32 sub_080214FC(Entity* this) {
+u32 sub_080214FC(DarkNutEntity* this) {
u32 direction;
- if (!sub_08049FDC(this, 1))
+ if (!sub_08049FDC(super, 1))
return 0;
- direction = GetFacingDirection(this, gUnk_020000B0);
- if (4 < (direction - (this->frame & 0x1f)) - 2)
+ direction = GetFacingDirection(super, gUnk_020000B0);
+ if (4 < (direction - (super->frame & 0x1f)) - 2)
return 0;
- this->animationState = DirectionToAnimationState(direction);
+ super->animationState = DirectionToAnimationState(direction);
return 1;
}
-void sub_08021540(Entity* this) {
+void sub_08021540(DarkNutEntity* this) {
u32 tmp, tmp2;
u32 rand;
rand = Random();
- if (!sub_08049FA0(this) && (rand & 1)) {
- tmp2 = DirectionRoundUp(sub_08049EE4(this));
+ if (!sub_08049FA0(super) && (rand & 1)) {
+ tmp2 = DirectionRoundUp(sub_08049EE4(super));
} else {
tmp2 = DirectionRound(rand >> 0x10);
}
- this->direction = tmp2;
+ super->direction = tmp2;
- tmp = sub_08021274(this->animationState, tmp2);
+ tmp = sub_08021274(super->animationState, tmp2);
if (tmp != 0xff)
sub_08021218(this, 3, tmp);
- this->timer = 30;
+ super->timer = 30;
}
-void sub_08021588(Entity* this) {
- if (this->child != NULL) {
- this->child->parent = NULL;
- this->child = NULL;
+void sub_08021588(DarkNutEntity* this) {
+ if (super->child != NULL) {
+ super->child->parent = NULL;
+ super->child = NULL;
}
}
-void sub_0802159C(Entity* this) {
- if (this->frame == 1) {
- Entity* ent;
+void sub_0802159C(DarkNutEntity* this) {
+ if (super->frame == 1) {
+ Entity* entity;
- this->frame = 0;
- this->hitType = 0x51;
- ent = CreateProjectileWithParent(this, DARK_NUT_SWORD_SLASH, 3);
- if (ent != NULL) {
- ent->parent = this;
- this->child = ent;
+ super->frame = 0;
+ super->hitType = 0x51;
+ entity = CreateProjectileWithParent(super, DARK_NUT_SWORD_SLASH, 3);
+ if (entity != NULL) {
+ entity->parent = super;
+ super->child = entity;
}
EnqueueSFX(SFX_116);
- } else if (this->frame == 2) {
- this->frame = 0;
+ } else if (super->frame == 2) {
+ super->frame = 0;
sub_08021588(this);
- } else if (this->frame & 0x20) {
- this->frame &= ~0x20;
+ } else if (super->frame & 0x20) {
+ super->frame &= ~0x20;
EnqueueSFX(SFX_115);
}
}
-void sub_08021600(Entity* this) {
- if (this->frame == 1) {
- Entity* ent;
+void sub_08021600(DarkNutEntity* this) {
+ if (super->frame == 1) {
+ Entity* entity;
- this->frame = 0;
- this->hitType = 0x51;
- ent = CreateProjectileWithParent(this, DARK_NUT_SWORD_SLASH, 4);
- if (ent != NULL) {
- ent->parent = this;
- this->child = ent;
+ super->frame = 0;
+ super->hitType = 0x51;
+ entity = CreateProjectileWithParent(super, DARK_NUT_SWORD_SLASH, 4);
+ if (entity != NULL) {
+ entity->parent = super;
+ super->child = entity;
}
EnqueueSFX(SFX_10E);
- } else if (this->frame == 2) {
- this->frame = 0;
+ } else if (super->frame == 2) {
+ super->frame = 0;
sub_08021588(this);
}
}
-void sub_08021644(Entity* this) {
- if (this->frame & 0x20) {
- this->frame &= ~0x20;
+void sub_08021644(DarkNutEntity* this) {
+ if (super->frame & 0x20) {
+ super->frame &= ~0x20;
EnqueueSFX(SFX_PLY_LAND);
}
}
-u32 sub_08021664(Entity* this, Entity* ent) {
- switch (this->animationState) {
+u32 sub_08021664(DarkNutEntity* this, Entity* entity) {
+ switch (super->animationState) {
case 0:
- return sub_08049F1C(this, ent, 0x22);
+ return sub_08049F1C(super, entity, 0x22);
case 1:
- return sub_08049F1C(this, ent, 0x1a);
+ return sub_08049F1C(super, entity, 0x1a);
case 2:
- return sub_08049F1C(this, ent, 0x13);
+ return sub_08049F1C(super, entity, 0x13);
case 3:
- return sub_08049F1C(this, ent, 0x1a);
+ return sub_08049F1C(super, entity, 0x1a);
}
return 0;
}
-u32 sub_0802169C(Entity* this, Entity* ent) {
+u32 sub_0802169C(DarkNutEntity* this, Entity* entity) {
u32 ret;
- switch (this->animationState) {
+ switch (super->animationState) {
case 0:
ret = 0x2c;
break;
@@ -652,7 +668,7 @@ u32 sub_0802169C(Entity* this, Entity* ent) {
return 0;
}
- if (sub_08049F1C(this, ent, ret)) {
+ if (sub_08049F1C(super, entity, ret)) {
return 0;
} else {
return 1;
@@ -660,15 +676,15 @@ u32 sub_0802169C(Entity* this, Entity* ent) {
}
// clang-format off
-void (*const DarkNut_Functions[])(Entity*) = {
+void (*const DarkNut_Functions[])(DarkNutEntity*) = {
DarkNut_OnTick,
DarkNut_OnCollision,
- GenericKnockback,
- GenericDeath,
- GenericConfused,
+ (void (*)(DarkNutEntity*))GenericKnockback,
+ (void (*)(DarkNutEntity*))GenericDeath,
+ (void (*)(DarkNutEntity*))GenericConfused,
DarkNut_OnGrabbed,
};
-void (*const gUnk_080CAAB0[])(Entity*) = {
+void (*const gUnk_080CAAB0[])(DarkNutEntity*) = {
sub_08020D70,
sub_08020D9C,
sub_08020DB4,
@@ -749,7 +765,7 @@ const u8 gUnk_080CAB52[] = {
0, 3, 1, 0, 0, 0
};
-void (*const gUnk_080CAB58[])(Entity*) = {
+void (*const gUnk_080CAB58[])(DarkNutEntity*) = {
sub_08021328,
sub_0802134C,
sub_08021370,
diff --git a/src/enemy/doorMimic.c b/src/enemy/doorMimic.c
index b7745c4a..e9719c0f 100644
--- a/src/enemy/doorMimic.c
+++ b/src/enemy/doorMimic.c
@@ -4,20 +4,29 @@
*
* @brief Door Mimic enemy
*/
-
-#include "sound.h"
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
+#include "sound.h"
+
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[16];
+ /*0x78*/ u16 unk_78;
+ /*0x7a*/ u16 unk_7a;
+ /*0x7c*/ u16 unk_7c;
+ /*0x7e*/ u16 unk_7e;
+} DoorMimicEntity;
-void sub_080221C0(Entity*);
+void sub_080221C0(DoorMimicEntity*);
typedef struct {
s8 h;
s8 v;
} PACKED PosOffset;
-extern void (*const DoorMimic_Functions[])(Entity*);
-extern void (*const gUnk_080CB74C[])(Entity*);
+extern void (*const DoorMimic_Functions[])(DoorMimicEntity*);
+extern void (*const gUnk_080CB74C[])(DoorMimicEntity*);
extern const s8 gUnk_080CB764[];
extern const PosOffset gUnk_080CB76C[4][6];
@@ -26,111 +35,111 @@ extern const Hitbox* const* const gUnk_080CB8A4[];
extern s16 gUnk_080B4488[];
-void DoorMimic(Entity* this) {
- DoorMimic_Functions[GetNextFunction(this)](this);
- this->hitbox = (Hitbox*)gUnk_080CB8A4[this->type2][this->frameIndex];
+void DoorMimic(DoorMimicEntity* this) {
+ DoorMimic_Functions[GetNextFunction(super)](this);
+ super->hitbox = (Hitbox*)gUnk_080CB8A4[super->type2][super->frameIndex];
}
-void DoorMimic_OnTick(Entity* this) {
- gUnk_080CB74C[this->action](this);
+void DoorMimic_OnTick(DoorMimicEntity* this) {
+ gUnk_080CB74C[super->action](this);
}
-void DoorMimic_OnCollision(Entity* this) {
- EnemyFunctionHandlerAfterCollision(this, DoorMimic_Functions);
+void DoorMimic_OnCollision(DoorMimicEntity* this) {
+ EnemyFunctionHandlerAfterCollision(super, DoorMimic_Functions);
}
-void DoorMimic_OnDeath(Entity* this) {
- SetTile((u16)this->field_0x7c.HALF.LO, (u16)this->field_0x7c.HALF.HI, this->collisionLayer);
- CreateFx(this, FX_POT_SHATTER, 0);
- sub_08049CF4(this);
+void DoorMimic_OnDeath(DoorMimicEntity* this) {
+ SetTile(this->unk_7c, this->unk_7e, super->collisionLayer);
+ CreateFx(super, FX_POT_SHATTER, 0);
+ sub_08049CF4(super);
DeleteThisEntity();
}
-void sub_08022034(Entity* this) {
- this->action = 1;
- this->type2 = this->type & 3;
- this->spritePriority.b0 = 5;
- this->field_0x78.HWORD = gUnk_080CB764[this->type2 * 2 + 0] + this->x.HALF.HI;
- this->field_0x7a.HWORD = gUnk_080CB764[this->type2 * 2 + 1] + this->y.HALF.HI;
- InitializeAnimation(this, this->type2);
+void sub_08022034(DoorMimicEntity* this) {
+ super->action = 1;
+ super->type2 = super->type & 3;
+ super->spritePriority.b0 = 5;
+ this->unk_78 = gUnk_080CB764[super->type2 * 2 + 0] + super->x.HALF.HI;
+ this->unk_7a = gUnk_080CB764[super->type2 * 2 + 1] + super->y.HALF.HI;
+ InitializeAnimation(super, super->type2);
sub_080221C0(this);
}
-void sub_0802209C(Entity* this) {
- if (this->timer == 0) {
- if (CheckPlayerProximity(this->field_0x78.HWORD, this->field_0x7a.HWORD, 0x10, 0x10)) {
- this->action = 2;
- this->timer = 18;
- InitializeAnimation(this, this->type2 + 4);
+void sub_0802209C(DoorMimicEntity* this) {
+ if (super->timer == 0) {
+ if (CheckPlayerProximity(this->unk_78, this->unk_7a, 0x10, 0x10)) {
+ super->action = 2;
+ super->timer = 18;
+ InitializeAnimation(super, super->type2 + 4);
}
} else {
- this->timer--;
+ super->timer--;
}
}
-void sub_080220D8(Entity* this) {
- if (--this->timer == 0)
- this->action = 3;
+void sub_080220D8(DoorMimicEntity* this) {
+ if (--super->timer == 0)
+ super->action = 3;
}
-void sub_080220F0(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
+void sub_080220F0(DoorMimicEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
const PosOffset* off;
u32 i;
- this->action = 4;
- this->timer = 120;
- this->damage = 0;
- off = gUnk_080CB76C[this->type2];
+ super->action = 4;
+ super->timer = 120;
+ super->damage = 0;
+ off = gUnk_080CB76C[super->type2];
for (i = 0; i < 6; i++, off++) {
- Entity* fx = CreateFx(this, FX_DASH, 0);
+ Entity* fx = CreateFx(super, FX_DASH, 0);
if (fx) {
fx->x.HALF.HI += off->h;
fx->y.HALF.HI += off->v;
}
}
EnqueueSFX(SFX_PLACE_OBJ);
- } else if (this->frame & 1) {
- this->damage = 4;
+ } else if (super->frame & 1) {
+ super->damage = 4;
}
}
-void sub_08022174(Entity* this) {
- sub_0800445C(this);
- if (--this->timer == 0) {
- this->action = 5;
- InitializeAnimation(this, this->type2 + 8);
+void sub_08022174(DoorMimicEntity* this) {
+ sub_0800445C(super);
+ if (--super->timer == 0) {
+ super->action = 5;
+ InitializeAnimation(super, super->type2 + 8);
}
}
-void sub_08022198(Entity* this) {
- sub_0800445C(this);
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 1;
- this->timer = 90;
+void sub_08022198(DoorMimicEntity* this) {
+ sub_0800445C(super);
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 1;
+ super->timer = 90;
}
}
-void sub_080221C0(Entity* this) {
- u32 tile = COORD_TO_TILE(this) + gUnk_080B4488[this->type2];
- this->field_0x7c.HALF.HI = tile;
- this->field_0x7c.HALF.LO = GetTileIndex(tile, this->collisionLayer);
- SetTile(gUnk_080CB79C[this->type2], tile, this->collisionLayer);
+void sub_080221C0(DoorMimicEntity* this) {
+ u32 tile = COORD_TO_TILE(super) + gUnk_080B4488[super->type2];
+ this->unk_7e = tile;
+ this->unk_7c = GetTileIndex(tile, super->collisionLayer);
+ SetTile(gUnk_080CB79C[super->type2], tile, super->collisionLayer);
}
// clang-format off
-void (*const DoorMimic_Functions[])(Entity*) = {
+void (*const DoorMimic_Functions[])(DoorMimicEntity*) = {
DoorMimic_OnTick,
DoorMimic_OnCollision,
- GenericKnockback,
+ (void (*)(DoorMimicEntity*))GenericKnockback,
DoorMimic_OnDeath,
- GenericConfused,
+ (void (*)(DoorMimicEntity*))GenericConfused,
DoorMimic_OnTick,
};
-void (*const gUnk_080CB74C[])(Entity*) = {
+void (*const gUnk_080CB74C[])(DoorMimicEntity*) = {
sub_08022034,
sub_0802209C,
sub_080220D8,
diff --git a/src/enemy/dust.c b/src/enemy/dust.c
index 9b2bec8a..df2073fe 100644
--- a/src/enemy/dust.c
+++ b/src/enemy/dust.c
@@ -1,12 +1,18 @@
+/**
+ * @file dust.c
+ * @ingroup Enemies
+ *
+ * @brief Dust enemy
+ */
#define NENT_DEPRECATED
-#include "entity.h"
+#include "asm.h"
#include "enemy.h"
+#include "entity.h"
#include "hitbox.h"
-#include "player.h"
+#include "object.h"
#include "physics.h"
+#include "player.h"
#include "room.h"
-#include "asm.h"
-#include "object.h"
typedef struct {
Entity base;
diff --git a/src/enemy/enemy4D.c b/src/enemy/enemy4D.c
index 7e0ee931..f4ebdf70 100644
--- a/src/enemy/enemy4D.c
+++ b/src/enemy/enemy4D.c
@@ -2,12 +2,11 @@
* @file enemy4D.c
* @ingroup Enemies
*
- * @brief enemy 4D
+ * @brief Enemy4D enemy
*/
#define NENT_DEPRECATED
-#include "global.h"
-#include "entity.h"
#include "enemy.h"
+#include "entity.h"
#include "functions.h"
typedef struct {
diff --git a/src/enemy/enemy50.c b/src/enemy/enemy50.c
index db7bd2c1..cd59db89 100644
--- a/src/enemy/enemy50.c
+++ b/src/enemy/enemy50.c
@@ -4,12 +4,10 @@
*
* @brief Enemy50 enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
+#include "area.h"
#include "enemy.h"
#include "functions.h"
-#include "area.h"
#include "player.h"
typedef struct {
diff --git a/src/enemy/enemy64.c b/src/enemy/enemy64.c
index 5cfd1a60..d6da9844 100644
--- a/src/enemy/enemy64.c
+++ b/src/enemy/enemy64.c
@@ -4,12 +4,10 @@
*
* @brief Enemy64 enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
#include "enemy.h"
-#include "functions.h"
#include "fade.h"
+#include "functions.h"
typedef struct {
/*0x00*/ Entity base;
diff --git a/src/enemy/enemy66.c b/src/enemy/enemy66.c
index 859bc556..ca5a6423 100644
--- a/src/enemy/enemy66.c
+++ b/src/enemy/enemy66.c
@@ -1,3 +1,10 @@
+/**
+ * @file enemy66.c
+ * @ingroup Enemies
+ *
+ * @brief Enemy66 enemy
+ */
+#define NENT_DEPRECATED
#include "entity.h"
void (*const gUnk_080D2ABC[])(Entity*);
diff --git a/src/enemy/enemyE.c b/src/enemy/enemyE.c
index 957c953b..b470d584 100644
--- a/src/enemy/enemyE.c
+++ b/src/enemy/enemyE.c
@@ -2,9 +2,9 @@
* @file enemyE.c
* @ingroup Enemies
*
- * @brief enemy E
+ * @brief EnemyE enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/eyegore.c b/src/enemy/eyegore.c
index f0c8efd5..516bc646 100644
--- a/src/enemy/eyegore.c
+++ b/src/enemy/eyegore.c
@@ -4,14 +4,12 @@
*
* @brief Eyegore enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
#include "enemy.h"
-#include "functions.h"
#include "fade.h"
-#include "object.h"
+#include "functions.h"
#include "hitbox.h"
+#include "object.h"
typedef struct {
/*0x00*/ Entity base;
diff --git a/src/enemy/fallingBoulder.c b/src/enemy/fallingBoulder.c
index 5f9f5ce2..d0b82155 100644
--- a/src/enemy/fallingBoulder.c
+++ b/src/enemy/fallingBoulder.c
@@ -4,109 +4,120 @@
*
* @brief Falling Boulder enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
-void sub_0802C4B0(Entity*);
-void sub_0802C62C(Entity*);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[18];
+ /*0x7a*/ u16 unk_7a;
+ /*0x7c*/ u16 unk_7c;
+ /*0x7e*/ u16 unk_7e;
+ /*0x80*/ u16 unk_80;
+ /*0x82*/ u16 unk_82;
+ /*0x84*/ u32 unk_84;
+} FallingBoulderEntity;
+
+void sub_0802C4B0(FallingBoulderEntity* this);
+void sub_0802C62C(FallingBoulderEntity* this);
-extern void (*const FallingBoulder_Functions[])(Entity*);
-extern void (*const gUnk_080CD558[])(Entity*);
+extern void (*const FallingBoulder_Functions[])(FallingBoulderEntity*);
+extern void (*const gUnk_080CD558[])(FallingBoulderEntity*);
extern const u16 gUnk_080CD568[];
extern const u8 gUnk_080CD580[];
extern const s16 gUnk_080CD58C[];
-void FallingBoulder(Entity* this) {
- EnemyFunctionHandler(this, FallingBoulder_Functions);
+void FallingBoulder(FallingBoulderEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)FallingBoulder_Functions);
}
-void FallingBoulder_OnTick(Entity* this) {
- gUnk_080CD558[this->action](this);
+void FallingBoulder_OnTick(FallingBoulderEntity* this) {
+ gUnk_080CD558[super->action](this);
}
-void FallingBoulder_OnCollision(Entity* this) {
+void FallingBoulder_OnCollision(FallingBoulderEntity* this) {
/* ... */
}
-void FallingBoulder_OnGrabbed(Entity* this) {
+void FallingBoulder_OnGrabbed(FallingBoulderEntity* this) {
/* ... */
}
-void sub_0802C258(Entity* this) {
- sub_0804A720(this);
- this->zVelocity = Q_16_16(2.0);
- this->timer = 2;
- this->field_0x7a.HWORD = Random() & 0x70;
- switch (this->type) {
+void sub_0802C258(FallingBoulderEntity* this) {
+ sub_0804A720(super);
+ super->zVelocity = Q_16_16(2.0);
+ super->timer = 2;
+ this->unk_7a = Random() & 0x70;
+ switch (super->type) {
case 1:
- this->field_0x7a.HWORD |= 0x100;
+ this->unk_7a |= 0x100;
break;
case 2:
- this->field_0x7a.HWORD |= 0x200;
+ this->unk_7a |= 0x200;
break;
}
- this->field_0x80.HWORD = this->x.HALF.HI;
- this->field_0x82.HWORD = this->y.HALF.HI;
- this->z.HALF.HI = -0x10;
- this->collisionLayer = 3;
- this->spriteRendering.b3 = 1;
- this->spritePriority.b0 = 2;
- this->field_0x7c.HALF.LO = 0;
- this->field_0x7c.HALF.HI = COORD_TO_TILE(this);
+ this->unk_80 = super->x.HALF.HI;
+ this->unk_82 = super->y.HALF.HI;
+ super->z.HALF.HI = -0x10;
+ super->collisionLayer = 3;
+ super->spriteRendering.b3 = 1;
+ super->spritePriority.b0 = 2;
+ this->unk_7c = 0;
+ this->unk_7e = COORD_TO_TILE(super);
sub_0802C62C(this);
sub_0802C4B0(this);
}
-void sub_0802C318(Entity* this) {
- if (--this->field_0x7a.HWORD == 0) {
- this->action = 2;
+void sub_0802C318(FallingBoulderEntity* this) {
+ if (--this->unk_7a == 0) {
+ super->action = 2;
}
}
-void sub_0802C334(Entity* this) {
- register Entity* ent asm("r2");
+void sub_0802C334(FallingBoulderEntity* this) {
+ register Entity* entity asm("r2");
u32 diff;
u16 tmp;
- if (this->field_0x7c.HALF_U.LO == 0) {
+ if (this->unk_7c == 0) {
u32 tmp = gRoomControls.origin_y;
- ent = &gPlayerEntity;
- if (ent == NULL)
+ entity = &gPlayerEntity;
+ if (entity == NULL)
return;
- if (ent->y.HALF.HI - tmp <= 0x38) {
+ if (entity->y.HALF.HI - tmp <= 0x38) {
return;
}
- this->field_0x7c.HALF_U.LO = 1;
- this->spriteSettings.draw = 1;
+ this->unk_7c = 1;
+ super->spriteSettings.draw = 1;
}
- GetNextFrame(this);
- this->field_0x7c.HALF.HI = COORD_TO_TILE(this);
- if (sub_080044EC(this, *(u32*)&this->cutsceneBeh) == 1) {
+ GetNextFrame(super);
+ this->unk_7e = COORD_TO_TILE(super);
+ if (sub_080044EC(super, this->unk_84) == 1) {
EnqueueSFX(0x14c);
- COLLISION_ON(this);
- this->field_0x7a.HWORD = 0xc;
+ COLLISION_ON(super);
+ this->unk_7a = 0xc;
sub_0802C4B0(this);
} else {
s32 y;
- if (this->field_0x7a.HWORD) {
- tmp = --this->field_0x7a.HWORD;
+ if (this->unk_7a) {
+ tmp = --this->unk_7a;
switch (tmp) {
case 0:
- COLLISION_OFF(this);
+ COLLISION_OFF(super);
break;
case 8:
- if (this->type2 != 0 && !sub_08049FA0(this)) {
+ if (super->type2 != 0 && !sub_08049FA0(super)) {
diff = 0;
for (y = 1; y > -1; y--) {
- ent = CreateFx(this, FX_ROCK2, 0);
- if (ent) {
- ent->x.HALF.HI = ent->x.HALF.HI + 12 - diff;
+ entity = CreateFx(super, FX_ROCK2, 0);
+ if (entity) {
+ entity->x.HALF.HI = entity->x.HALF.HI + 12 - diff;
}
diff += 0x18;
}
sub_0802C62C(this);
- this->field_0x7a.HWORD = (Random() & 0xff) | 0x100;
+ this->unk_7a = (Random() & 0xff) | 0x100;
return;
}
break;
@@ -115,37 +126,37 @@ void sub_0802C334(Entity* this) {
{
FORCE_REGISTER(RoomControls * tmp, r0) = &gRoomControls;
- y = tmp->origin_y + tmp->height - this->y.HALF.HI;
+ y = tmp->origin_y + tmp->height - super->y.HALF.HI;
}
if (y >= 5) {
- ProcessMovement1(this);
+ ProcessMovement1(super);
} else {
- LinearMoveUpdate(this);
- if (this->z.HALF.HI - y > 0x38) {
+ LinearMoveUpdate(super);
+ if (super->z.HALF.HI - y > 0x38) {
sub_0802C62C(this);
- this->field_0x7a.HWORD = (Random() & 0x7f) | 0x80;
- if (this->type == 3) {
- this->action = 3;
+ this->unk_7a = (Random() & 0x7f) | 0x80;
+ if (super->type == 3) {
+ super->action = 3;
}
}
}
}
- this->collisionLayer = 3;
- this->spritePriority.b0 = 1;
- UpdateSpriteForCollisionLayer(this);
+ super->collisionLayer = 3;
+ super->spritePriority.b0 = 1;
+ UpdateSpriteForCollisionLayer(super);
}
-void nullsub_148(Entity* this) {
+void nullsub_148(FallingBoulderEntity* this) {
/* ... */
}
-void sub_0802C4B0(Entity* this) {
+void sub_0802C4B0(FallingBoulderEntity* this) {
u32 offset;
u32 index;
u32 rand;
- switch (GetTileIndex(this->field_0x7c.HALF_U.HI, this->collisionLayer)) {
+ switch (GetTileIndex(this->unk_7e, super->collisionLayer)) {
case 0x1ab ... 0x1af:
offset = 8;
break;
@@ -160,78 +171,78 @@ void sub_0802C4B0(Entity* this) {
rand = Random() & 7;
if (rand & 4) {
if (rand & 3) {
- this->speed = gUnk_080CD568[offset | 2];
+ super->speed = gUnk_080CD568[offset | 2];
} else {
- this->speed = gUnk_080CD568[offset | 0];
+ super->speed = gUnk_080CD568[offset | 0];
}
} else {
if (rand & 3) {
- this->speed = gUnk_080CD568[offset | 1];
+ super->speed = gUnk_080CD568[offset | 1];
} else {
- this->speed = gUnk_080CD568[offset | 3];
+ super->speed = gUnk_080CD568[offset | 3];
}
}
rand = Random() & 7;
if (rand & 4) {
- if (this->timer != 0) {
- this->timer = 0;
- InitializeAnimation(this, 0);
+ if (super->timer != 0) {
+ super->timer = 0;
+ InitializeAnimation(super, 0);
}
if (rand & 3) {
- this->direction = gUnk_080CD580[offset | 1];
+ super->direction = gUnk_080CD580[offset | 1];
} else {
- this->direction = gUnk_080CD580[offset | 0];
+ super->direction = gUnk_080CD580[offset | 0];
}
} else {
- if (this->timer != 1) {
- this->timer = 1;
- InitializeAnimation(this, 1);
+ if (super->timer != 1) {
+ super->timer = 1;
+ InitializeAnimation(super, 1);
}
if (rand & 3) {
- this->direction = gUnk_080CD580[offset | 2];
+ super->direction = gUnk_080CD580[offset | 2];
} else {
- this->direction = gUnk_080CD580[offset | 3];
+ super->direction = gUnk_080CD580[offset | 3];
}
}
rand = Random() & 7;
- this->zVelocity = Q_16_16(2.0);
+ super->zVelocity = Q_16_16(2.0);
if (rand & 4) {
if (rand & 3) {
- *(u32*)&this->cutsceneBeh = gUnk_080CD58C[offset | 1];
+ this->unk_84 = gUnk_080CD58C[offset | 1];
} else {
- *(u32*)&this->cutsceneBeh = gUnk_080CD58C[offset | 3];
+ this->unk_84 = gUnk_080CD58C[offset | 3];
}
} else {
if (rand & 3) {
- *(u32*)&this->cutsceneBeh = gUnk_080CD58C[offset | 2];
+ this->unk_84 = gUnk_080CD58C[offset | 2];
} else {
- *(u32*)&this->cutsceneBeh = gUnk_080CD58C[offset | 0];
+ this->unk_84 = gUnk_080CD58C[offset | 0];
}
}
}
-void sub_0802C62C(Entity* this) {
- this->action = 1;
- this->y.HALF.HI = this->field_0x82.HWORD;
- this->x.HALF.HI = this->field_0x80.HWORD;
- this->spriteSettings.draw = 0;
- COLLISION_OFF(this);
- this->field_0x7c.HALF.LO = 0;
+void sub_0802C62C(FallingBoulderEntity* this) {
+ super->action = 1;
+ super->y.HALF.HI = this->unk_82;
+ super->x.HALF.HI = this->unk_80;
+ super->spriteSettings.draw = 0;
+ COLLISION_OFF(super);
+ this->unk_7c = 0;
}
// clang-format off
-void (*const FallingBoulder_Functions[])(Entity*) = {
+void (*const FallingBoulder_Functions[])(FallingBoulderEntity*) = {
FallingBoulder_OnTick,
FallingBoulder_OnCollision,
- GenericKnockback,
- GenericDeath,
- GenericConfused,
+ (void (*)(FallingBoulderEntity*))GenericKnockback,
+ (void (*)(FallingBoulderEntity*))GenericDeath,
+ (void (*)(FallingBoulderEntity*))GenericConfused,
FallingBoulder_OnGrabbed,
};
-void (*const gUnk_080CD558[])(Entity*) = {
+void (*const gUnk_080CD558[])(FallingBoulderEntity*) = {
sub_0802C258,
sub_0802C318,
sub_0802C334,
diff --git a/src/enemy/fireballGuy.c b/src/enemy/fireballGuy.c
index db1bf3da..557163d4 100644
--- a/src/enemy/fireballGuy.c
+++ b/src/enemy/fireballGuy.c
@@ -4,135 +4,141 @@
*
* @brief Fireball Guy enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[28];
+ /*0x84*/ u8 unk_84;
+} FireballGuyEntity;
+
+typedef struct {
s8 h, v;
} PACKED PosOffset;
-extern void sub_08045524(Entity*);
+extern void sub_08045524(FireballGuyEntity*);
void sub_08045178(Entity*, Entity*, int, int);
-void FireballGuy_OnTick(Entity*);
-void FireballGuy_OnCollision(Entity*);
-void FireballGuy_OnGrabbed(Entity*);
-void FireballGuy_Init(Entity*);
-void FireballGuy_Action1(Entity*);
-void FireballGuy_Action2(Entity*);
-
-static void (*const FireballGuy_Functions[])(Entity*) = {
- FireballGuy_OnTick, FireballGuy_OnCollision, GenericKnockback, GenericDeath, GenericConfused, FireballGuy_OnGrabbed,
+void FireballGuy_OnTick(FireballGuyEntity*);
+void FireballGuy_OnCollision(FireballGuyEntity*);
+void FireballGuy_OnGrabbed(FireballGuyEntity*);
+void FireballGuy_Init(FireballGuyEntity*);
+void FireballGuy_Action1(FireballGuyEntity*);
+void FireballGuy_Action2(FireballGuyEntity*);
+
+static void (*const FireballGuy_Functions[])(FireballGuyEntity*) = {
+ FireballGuy_OnTick, FireballGuy_OnCollision, (void (*)(FireballGuyEntity*))GenericKnockback, (void (*)(FireballGuyEntity*))GenericDeath, (void (*)(FireballGuyEntity*))GenericConfused, FireballGuy_OnGrabbed,
};
-void FireballGuy(Entity* this) {
- EnemyFunctionHandler(this, FireballGuy_Functions);
+void FireballGuy(FireballGuyEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)FireballGuy_Functions);
}
-void FireballGuy_OnTick(Entity* this) {
- static void (*const FireballGuy_Actions[])(Entity*) = {
+void FireballGuy_OnTick(FireballGuyEntity* this) {
+ static void (*const FireballGuy_Actions[])(FireballGuyEntity*) = {
FireballGuy_Init,
FireballGuy_Action1,
FireballGuy_Action2,
};
- FireballGuy_Actions[this->action](this);
+ FireballGuy_Actions[super->action](this);
}
-void FireballGuy_OnCollision(Entity* this) {
- if (this->health && this->cutsceneBeh.HALF.LO != this->health) {
- this->action = 2;
+void FireballGuy_OnCollision(FireballGuyEntity* this) {
+ if (super->health && this->unk_84 != super->health) {
+ super->action = 2;
} else {
- EnemyFunctionHandlerAfterCollision(this, FireballGuy_Functions);
+ EnemyFunctionHandlerAfterCollision(super, FireballGuy_Functions);
}
}
-void FireballGuy_OnGrabbed(Entity* this) {
+void FireballGuy_OnGrabbed(FireballGuyEntity* this) {
}
-void FireballGuy_Init(Entity* this) {
- this->action = 1;
- this->timer = 0;
- this->spriteSettings.draw = 1;
- this->speed = 0x80;
- this->cutsceneBeh.HALF.LO = this->health;
- this->collisionFlags |= 0x10;
- sub_0804A720(this);
- InitializeAnimation(this, 0);
+void FireballGuy_Init(FireballGuyEntity* this) {
+ super->action = 1;
+ super->timer = 0;
+ super->spriteSettings.draw = 1;
+ super->speed = 0x80;
+ this->unk_84 = super->health;
+ super->collisionFlags |= 0x10;
+ sub_0804A720(super);
+ InitializeAnimation(super, 0);
sub_08045524(this);
}
-void FireballGuy_Action1(Entity* this) {
- ProcessMovement2(this);
- GetNextFrame(this);
- if (GravityUpdate(this, Q_8_8(24.0)) == 0)
+void FireballGuy_Action1(FireballGuyEntity* this) {
+ ProcessMovement2(super);
+ GetNextFrame(super);
+ if (GravityUpdate(super, Q_8_8(24.0)) == 0)
sub_08045524(this);
}
/* Split FireballGuy into new ones */
-void FireballGuy_Action2(Entity* this) {
+void FireballGuy_Action2(FireballGuyEntity* this) {
// Entity count per form
static const u8 typeEntityCount[4] = { 2, 3, 4, 5 };
static const PosOffset gUnk_080D1810[4] = { { 6, 0 }, { -6, 0 }, { 0, 6 }, { 0, -6 } };
Entity* entities[4];
- Entity* ent;
+ Entity* entity;
s32 count, i;
const PosOffset* off;
u32 tmp;
/* Can we create enough new entities? */
- count = typeEntityCount[this->type];
+ count = typeEntityCount[super->type];
if (MAX_ENTITIES + 1 - count <= gEntCount)
return;
/* Create 2-5 new MiniFireballGuy */
for (i = 0; i < count; i++)
- entities[i] = CreateEnemy(MINI_FIREBALL_GUY, this->type);
+ entities[i] = CreateEnemy(MINI_FIREBALL_GUY, super->type);
off = gUnk_080D1810;
for (i = 0; i < count; i++) {
- ent = entities[i];
- ent->child = entities[(i + 1) % count];
- ent->parent = entities[(i + count - 1) % count];
+ entity = entities[i];
+ entity->child = entities[(i + 1) % count];
+ entity->parent = entities[(i + count - 1) % count];
tmp = 0;
- ent->type2 = 1;
- ent->z.HALF.HI = tmp;
- ent->iframes = -0x10;
+ entity->type2 = 1;
+ entity->z.HALF.HI = tmp;
+ entity->iframes = -0x10;
/* Set MiniFireballGuy offset relative to killed slime. */
- sub_08045178(this, ent, off->h, off->v);
+ sub_08045178(super, entity, off->h, off->v);
off++;
}
- ent = CreateFx(this, FX_DEATH, 0);
- if (ent != NULL)
- CopyPosition(this, ent);
+ entity = CreateFx(super, FX_DEATH, 0);
+ if (entity != NULL)
+ CopyPosition(super, entity);
- DeleteEntity(this);
+ DeleteEntity(super);
}
u32 sub_0804A024(Entity*, u32, u32);
-void sub_08045524(Entity* this) {
+void sub_08045524(FireballGuyEntity* this) {
u32 tmp, tmp1, tmp2;
- this->zVelocity = Q_16_16(1.75);
- tmp = sub_0804A024(this, 1, 8);
+ super->zVelocity = Q_16_16(1.75);
+ tmp = sub_0804A024(super, 1, 8);
if (tmp != 0xff && (Random() & 3) == 0) {
- this->timer = Random() & 3;
- this->direction = DirectionRound(tmp);
+ super->timer = Random() & 3;
+ super->direction = DirectionRound(tmp);
} else {
- if (this->timer != 0) {
- this->timer--;
+ if (super->timer != 0) {
+ super->timer--;
return;
}
- this->timer = Random() & 3;
- if (sub_08049FA0(this) == 0 && (Random() & 3)) {
- tmp1 = sub_08049EE4(this);
+ super->timer = Random() & 3;
+ if (sub_08049FA0(super) == 0 && (Random() & 3)) {
+ tmp1 = sub_08049EE4(super);
tmp2 = Random() & 8;
tmp2 += 0xfc;
- this->direction = DirectionRound(tmp1 + tmp2);
+ super->direction = DirectionRound(tmp1 + tmp2);
} else {
- this->direction = DirectionRound(Random());
+ super->direction = DirectionRound(Random());
}
}
}
diff --git a/src/enemy/flyingPot.c b/src/enemy/flyingPot.c
index 1b628d71..d69ca000 100644
--- a/src/enemy/flyingPot.c
+++ b/src/enemy/flyingPot.c
@@ -6,8 +6,8 @@
*/
#define NENT_DEPRECATED
#include "collision.h"
-#include "functions.h"
#include "enemy.h"
+#include "functions.h"
#include "player.h"
#include "room.h"
diff --git a/src/enemy/flyingSkull.c b/src/enemy/flyingSkull.c
index 7897de3a..d7d87212 100644
--- a/src/enemy/flyingSkull.c
+++ b/src/enemy/flyingSkull.c
@@ -1,7 +1,13 @@
+/**
+ * @file flyingSkull.c
+ * @ingroup Enemies
+ *
+ * @brief Flying Skull enemy
+ */
#define NENT_DEPRECATED
#include "collision.h"
-#include "entity.h"
#include "enemy.h"
+#include "entity.h"
#include "functions.h"
#include "hitbox.h"
@@ -132,16 +138,16 @@ void sub_08039DD8(FlyingSkullEntity* this) {
RegisterCarryEntity(super);
} else {
if ((gPlayerState.flags & PL_MINISH) == 0) {
- Entity* ent = &gPlayerEntity;
- if (EntityWithinDistance(super, ent->x.HALF.HI, ent->y.HALF.HI, 0x30)) {
+ Entity* player = &gPlayerEntity;
+ if (EntityWithinDistance(super, player->x.HALF.HI, player->y.HALF.HI, 0x30)) {
if (super->type == 1) {
super->action = 3;
super->timer = 30;
} else {
- ent = CreateEnemy(STALFOS, super->type - 2);
- if (ent != NULL) {
- ent->type2 = 1;
- CopyPosition(super, ent);
+ player = CreateEnemy(STALFOS, super->type - 2);
+ if (player != NULL) {
+ player->type2 = 1;
+ CopyPosition(super, player);
SetTile(this->unk_0x74, COORD_TO_TILE(super), super->collisionLayer);
DeleteEntity(super);
}
diff --git a/src/enemy/ghini.c b/src/enemy/ghini.c
index d74709c7..f2749f15 100644
--- a/src/enemy/ghini.c
+++ b/src/enemy/ghini.c
@@ -4,12 +4,10 @@
*
* @brief Ghini enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
+#include "area.h"
#include "enemy.h"
#include "functions.h"
-#include "area.h"
#include "physics.h"
typedef struct {
diff --git a/src/enemy/gibdo.c b/src/enemy/gibdo.c
index f28fb1e4..a225996a 100644
--- a/src/enemy/gibdo.c
+++ b/src/enemy/gibdo.c
@@ -4,12 +4,10 @@
*
* @brief Gibdo enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
#include "enemy.h"
-#include "object.h"
#include "functions.h"
+#include "object.h"
typedef struct {
Entity base;
@@ -409,23 +407,23 @@ void Gibdo_CreateObjects(GibdoEntity* this) {
}
void Gibdo_MoveObjectsToStalfos(GibdoEntity* this, Entity* that) {
- Entity* ent = this->field_0x80;
+ Entity* entity = this->field_0x80;
- if (ent != NULL) {
- ent->timer = 15;
- ent->parent = that;
+ if (entity != NULL) {
+ entity->timer = 15;
+ entity->parent = that;
}
- ent = this->field_0x84;
- if (ent != NULL) {
- ent->timer = 15;
- ent->parent = that;
+ entity = this->field_0x84;
+ if (entity != NULL) {
+ entity->timer = 15;
+ entity->parent = that;
}
- ent = super->child;
- if (ent != NULL) {
- ent->timer = 15;
- ent->parent = that;
+ entity = super->child;
+ if (entity != NULL) {
+ entity->timer = 15;
+ entity->parent = that;
}
}
diff --git a/src/enemy/gleerok.c b/src/enemy/gleerok.c
index c1a569a3..7047f61a 100644
--- a/src/enemy/gleerok.c
+++ b/src/enemy/gleerok.c
@@ -1,10 +1,16 @@
+/**
+ * @file gleerok.c
+ * @ingroup Enemies
+ *
+ * @brief Gleerok enemy
+ */
#define NENT_DEPRECATED
-#include "entity.h"
#include "enemy.h"
-#include "player.h"
-#include "screen.h"
+#include "entity.h"
#include "functions.h"
#include "object.h"
+#include "player.h"
+#include "screen.h"
typedef struct {
union SplitHWord unk0;
@@ -19,7 +25,7 @@ typedef struct {
/*0x2e*/ u16 filler_2e;
/*0x30*/ u8 unk_30[6];
/*0x36*/ u8 filler_36[0x2];
- /*0x38*/ Entity* ent;
+ /*0x38*/ Entity* entity1;
/*0x3c*/ Entity* entities[5];
/*0x50*/ Entity* ent2;
} Gleerok_HeapStruct;
@@ -485,7 +491,7 @@ void sub_0802D714(GleerokEntity* this) {
super->child = enemy;
if (enemy) {
enemy->parent = super;
- heap->ent = super->child;
+ heap->entity1 = super->child;
((GleerokEntity*)(super->child))->unk_84 = heap;
}
@@ -612,7 +618,7 @@ void sub_0802D86C(GleerokEntity* this) {
super->child = enemy;
if (enemy) {
enemy->parent = super->parent;
- this->unk_84->ent = super->child;
+ this->unk_84->entity1 = super->child;
((GleerokEntity*)super->child)->unk_84 = this->unk_84;
}
@@ -633,7 +639,7 @@ void sub_0802D86C(GleerokEntity* this) {
if (enemy) {
enemy->parent = super->parent;
super->timer = this->unk_84->filler[0].unk0.HALF.HI;
- this->unk_84->ent = super->child;
+ this->unk_84->entity1 = super->child;
((GleerokEntity*)super->child)->unk_84 = this->unk_84;
}
@@ -689,7 +695,7 @@ void sub_0802D86C(GleerokEntity* this) {
super->child = CreateEnemy(GLEEROK, 4);
if (super->child) {
super->child->parent = super->parent;
- this->unk_84->ent = super->child;
+ this->unk_84->entity1 = super->child;
((GleerokEntity*)super->child)->unk_84 = this->unk_84;
CopyPosition(super, ((volatile Entity*)super)->child);
DeleteThisEntity();
@@ -1097,7 +1103,7 @@ void sub_0802E300(GleerokEntity* this) {
u32 index;
Gleerok_HeapStruct2* ptr;
u8* ptr2;
- Entity* ent;
+ Entity* entity;
Gleerok_HeapStruct* heap;
if ((this->unk_79 & 0x80) == 0) {
this->unk_7c.HALF.LO--;
@@ -1144,11 +1150,11 @@ void sub_0802E300(GleerokEntity* this) {
super->type2 = 0;
*ptr2 = 0;
InitializeAnimation(super, 0x4d);
- ent = CreateEnemy(GLEEROK, 5);
- super->child = ent;
+ entity = CreateEnemy(GLEEROK, 5);
+ super->child = entity;
if (super->child != NULL) {
super->child->parent = super;
- heap->ent = super->child;
+ heap->entity1 = super->child;
((GleerokEntity*)super->child)->unk_84 = heap;
}
@@ -1368,7 +1374,7 @@ void sub_0802E7E4(Gleerok_HeapStruct* this) {
this->entities[i + 1]->spritePriority.b0 = bVar6;
}
}
- this->ent->spritePriority.b0 = 0;
+ this->entity1->spritePriority.b0 = 0;
} else {
bVar6 = 5;
@@ -1388,7 +1394,7 @@ void sub_0802E7E4(Gleerok_HeapStruct* this) {
this->entities[i + 1]->spritePriority.b0 = bVar6;
}
}
- this->ent->spritePriority.b0 = 6;
+ this->entity1->spritePriority.b0 = 6;
}
}
diff --git a/src/enemy/gyorgChild.c b/src/enemy/gyorgChild.c
index 54423715..c7306f5d 100644
--- a/src/enemy/gyorgChild.c
+++ b/src/enemy/gyorgChild.c
@@ -1,9 +1,14 @@
+/**
+ * @file gyorgChild.c
+ * @ingroup Enemies
+ *
+ * @brief Gyorg Child enemy
+ */
#define NENT_DEPRECATED
-#include "global.h"
-#include "room.h"
#include "asm.h"
-#include "functions.h"
#include "enemy/gyorg.h"
+#include "functions.h"
+#include "room.h"
void GyorgChild_OnTick(GyorgChildEntity*);
void GyorgChild_OnCollision(GyorgChildEntity*);
diff --git a/src/enemy/gyorgFemale.c b/src/enemy/gyorgFemale.c
index 6a8e11d8..394ef46b 100644
--- a/src/enemy/gyorgFemale.c
+++ b/src/enemy/gyorgFemale.c
@@ -1,3 +1,9 @@
+/**
+ * @file gyorgFemale.c
+ * @ingroup Enemies
+ *
+ * @brief Gyorg Female enemy
+ */
#define NENT_DEPRECATED
#include "asm.h"
#include "collision.h"
@@ -51,32 +57,32 @@ void GyorgFemale(Entity* this) {
}
void GyorgFemale_Setup(GyorgFemaleEntity* this) {
- Entity* tmp;
+ Entity* entity;
if (gEntCount > 0x3d)
return;
- tmp = CreateProjectile(GYORG_TAIL);
- tmp->type = 0;
- tmp->parent = super;
- ((GyorgHeap*)super->myHeap)->tail = (GenericEntity*)tmp;
- tmp = CreateEnemy(GYORG_FEMALE_MOUTH, 0);
- tmp->parent = super;
- ((GyorgHeap*)super->myHeap)->mouth = (GyorgFemaleMouthEntity*)tmp;
- tmp = CreateEnemy(GYORG_FEMALE_EYE, 0);
- tmp->parent = super;
- tmp = CreateEnemy(GYORG_FEMALE_EYE, 1);
- tmp->parent = super;
- tmp = CreateEnemy(GYORG_FEMALE_EYE, 2);
- tmp->parent = super;
- tmp = CreateEnemy(GYORG_FEMALE_EYE, 3);
- tmp->parent = super;
- tmp = CreateEnemy(GYORG_FEMALE_EYE, 4);
- tmp->parent = super;
- tmp = CreateEnemy(GYORG_FEMALE_EYE, 5);
- tmp->parent = super;
- tmp = CreateEnemy(GYORG_FEMALE_EYE, 6);
- tmp->parent = super;
- tmp = CreateEnemy(GYORG_FEMALE_EYE, 7);
- tmp->parent = super;
+ entity = CreateProjectile(GYORG_TAIL);
+ entity->type = 0;
+ entity->parent = super;
+ ((GyorgHeap*)super->myHeap)->tail = (GenericEntity*)entity;
+ entity = CreateEnemy(GYORG_FEMALE_MOUTH, 0);
+ entity->parent = super;
+ ((GyorgHeap*)super->myHeap)->mouth = (GyorgFemaleMouthEntity*)entity;
+ entity = CreateEnemy(GYORG_FEMALE_EYE, 0);
+ entity->parent = super;
+ entity = CreateEnemy(GYORG_FEMALE_EYE, 1);
+ entity->parent = super;
+ entity = CreateEnemy(GYORG_FEMALE_EYE, 2);
+ entity->parent = super;
+ entity = CreateEnemy(GYORG_FEMALE_EYE, 3);
+ entity->parent = super;
+ entity = CreateEnemy(GYORG_FEMALE_EYE, 4);
+ entity->parent = super;
+ entity = CreateEnemy(GYORG_FEMALE_EYE, 5);
+ entity->parent = super;
+ entity = CreateEnemy(GYORG_FEMALE_EYE, 6);
+ entity->parent = super;
+ entity = CreateEnemy(GYORG_FEMALE_EYE, 7);
+ entity->parent = super;
super->action = 1;
super->spriteOrientation.flipY = 2;
super->spriteRendering.b3 = 2;
diff --git a/src/enemy/gyorgFemaleEye.c b/src/enemy/gyorgFemaleEye.c
index 5033fdff..0be6a03e 100644
--- a/src/enemy/gyorgFemaleEye.c
+++ b/src/enemy/gyorgFemaleEye.c
@@ -1,10 +1,15 @@
+/**
+ * @file gyorgFemaleEye.c
+ * @ingroup Enemies
+ *
+ * @brief Gyorg Female Eye enemy
+ */
#define NENT_DEPRECATED
-#include "global.h"
-#include "entity.h"
#include "enemy.h"
-#include "player.h"
-#include "functions.h"
#include "enemy/gyorg.h"
+#include "entity.h"
+#include "functions.h"
+#include "player.h"
void GyorgFemaleEye_OnTick(GyorgFemaleEyeEntity*);
void GyorgFemaleEye_OnCollision(GyorgFemaleEyeEntity*);
diff --git a/src/enemy/gyorgFemaleMouth.c b/src/enemy/gyorgFemaleMouth.c
index 525eb3be..d9c224f9 100644
--- a/src/enemy/gyorgFemaleMouth.c
+++ b/src/enemy/gyorgFemaleMouth.c
@@ -1,8 +1,13 @@
+/**
+ * @file gyorgFemaleMouth.c
+ * @ingroup Enemies
+ *
+ * @brief Gyorg Female Mouth enemy
+ */
#define NENT_DEPRECATED
-#include "global.h"
+#include "enemy/gyorg.h"
#include "player.h"
#include "room.h"
-#include "enemy/gyorg.h"
extern const Hitbox gUnk_080D28DC;
extern const Hitbox gUnk_080D28E4;
diff --git a/src/enemy/gyorgMale.c b/src/enemy/gyorgMale.c
index 20f09035..7f2192b1 100644
--- a/src/enemy/gyorgMale.c
+++ b/src/enemy/gyorgMale.c
@@ -4,15 +4,13 @@
*
* @brief Gyorg Male enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
+#include "effects.h"
#include "enemy.h"
-#include "player.h"
+#include "enemy/gyorg.h"
#include "fileselect.h"
#include "functions.h"
-#include "effects.h"
-#include "enemy/gyorg.h"
+#include "player.h"
// todo: wrong types
extern void sub_080A1D70(Entity*, u32);
diff --git a/src/enemy/gyorgMaleEye.c b/src/enemy/gyorgMaleEye.c
index 8f257b7c..2bd7f05d 100644
--- a/src/enemy/gyorgMaleEye.c
+++ b/src/enemy/gyorgMaleEye.c
@@ -4,12 +4,10 @@
*
* @brief GyorgMaleEye enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
#include "enemy.h"
-#include "functions.h"
#include "fade.h"
+#include "functions.h"
typedef struct {
/*0x00*/ Entity base;
diff --git a/src/enemy/hangingSeed.c b/src/enemy/hangingSeed.c
index 3c6dbdab..2328d5f9 100644
--- a/src/enemy/hangingSeed.c
+++ b/src/enemy/hangingSeed.c
@@ -4,9 +4,9 @@
*
* @brief Hanging Seed enemy
*/
-
-#include "entity.h"
+#define NENT_DEPRECATED
#include "enemy.h"
+#include "entity.h"
#include "functions.h"
extern void (*const HangingSeed_Functions[])(Entity*);
diff --git a/src/enemy/helmasaur.c b/src/enemy/helmasaur.c
index 18976674..35fb249e 100644
--- a/src/enemy/helmasaur.c
+++ b/src/enemy/helmasaur.c
@@ -4,317 +4,324 @@
*
* @brief Helmasaur enemy
*/
-
+#define NENT_DEPRECATED
+#include "collision.h"
#include "enemy.h"
-#include "object.h"
#include "functions.h"
-#include "collision.h"
+#include "object.h"
+
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[16];
+ /*0x78*/ u8 unk_78;
+ /*0x79*/ u8 unk_79;
+} HelmasaurEntity;
extern u32 sub_0804A024(Entity*, u32, u32);
-void sub_0802C18C(Entity*);
-void sub_0802C218(Entity*);
-void sub_0802C1C0(Entity*);
-u32 sub_0802C020(Entity*);
-void sub_0802C058(Entity*, u32);
-bool32 sub_0802C06C(Entity*);
-void sub_0802C1CC(Entity*);
-bool32 sub_0802C0E8(Entity*);
-
-extern void (*const Helmasaur_Functions[])(Entity*);
-extern void (*const gUnk_080CD3FC[])(Entity*);
-extern void (*const gUnk_080CD408[])(Entity*);
-extern void (*const gUnk_080CD42C[])(Entity*);
-extern void (*const gUnk_080CD438[])(Entity*);
-extern void (*const gUnk_080CD450[])(Entity*);
+void sub_0802C18C(HelmasaurEntity*);
+void sub_0802C218(HelmasaurEntity*);
+void sub_0802C1C0(HelmasaurEntity*);
+u32 sub_0802C020(HelmasaurEntity*);
+void sub_0802C058(HelmasaurEntity*, u32);
+bool32 sub_0802C06C(HelmasaurEntity*);
+void sub_0802C1CC(HelmasaurEntity*);
+bool32 sub_0802C0E8(HelmasaurEntity*);
+
+extern void (*const Helmasaur_Functions[])(HelmasaurEntity*);
+extern void (*const gUnk_080CD3FC[])(HelmasaurEntity*);
+extern void (*const gUnk_080CD408[])(HelmasaurEntity*);
+extern void (*const gUnk_080CD42C[])(HelmasaurEntity*);
+extern void (*const gUnk_080CD438[])(HelmasaurEntity*);
+extern void (*const gUnk_080CD450[])(HelmasaurEntity*);
extern const s8 gUnk_080CD45C[];
extern const s8 gUnk_080CD464[];
-void Helmasaur(Entity* this) {
- if (this->type == 0) {
- EnemyFunctionHandler(this, Helmasaur_Functions);
- SetChildOffset(this, 0, 1, -0x10);
+void Helmasaur(HelmasaurEntity* this) {
+ if (super->type == 0) {
+ EnemyFunctionHandler(super, (EntityActionArray)Helmasaur_Functions);
+ SetChildOffset(super, 0, 1, -0x10);
} else {
- gUnk_080CD3FC[this->action](this);
+ gUnk_080CD3FC[super->action](this);
}
}
-void Helmasaur_OnTick(Entity* this) {
- gUnk_080CD408[this->action](this);
+void Helmasaur_OnTick(HelmasaurEntity* this) {
+ gUnk_080CD408[super->action](this);
}
-void Helmasaur_OnCollision(Entity* this) {
- if (this->hitType != 0x19) {
- switch (this->contactFlags & 0x7f) {
+void Helmasaur_OnCollision(HelmasaurEntity* this) {
+ if (super->hitType != 0x19) {
+ switch (super->contactFlags & 0x7f) {
case 0:
case 2:
case 3:
- if (this->action == 4) {
- this->knockbackDuration = 0;
+ if (super->action == 4) {
+ super->knockbackDuration = 0;
sub_0802C218(this);
}
break;
}
}
- if (this->confusedTime != 0) {
- Create0x68FX(this, FX_STARS);
+ if (super->confusedTime != 0) {
+ Create0x68FX(super, FX_STARS);
}
- EnemyFunctionHandlerAfterCollision(this, Helmasaur_Functions);
+ EnemyFunctionHandlerAfterCollision(super, Helmasaur_Functions);
}
-void Helmasaur_OnGrabbed(Entity* this) {
- if (this->hitType != 0x19) {
- if (sub_0806F520(this)) {
- gUnk_080CD42C[this->subAction](this);
+void Helmasaur_OnGrabbed(HelmasaurEntity* this) {
+ if (super->hitType != 0x19) {
+ if (sub_0806F520(super)) {
+ gUnk_080CD42C[super->subAction](this);
}
- } else if (2 < this->subAction || sub_0806F520(this)) {
- gUnk_080CD438[this->subAction](this);
+ } else if (2 < super->subAction || sub_0806F520(super)) {
+ gUnk_080CD438[super->subAction](this);
}
}
-void sub_0802BC74(Entity* this) {
+void sub_0802BC74(HelmasaurEntity* this) {
sub_0802C1C0(this);
- this->subAction = 1;
- this->gustJarTolerance = 60;
- this->animationState = AnimationStateFlip90(gPlayerEntity.animationState >> 1);
- InitializeAnimation(this, this->animationState);
-}
-
-void sub_0802BCA0(Entity* this) {
- sub_0806F4E8(this);
-}
-
-void sub_0802BCA8(Entity* this) {
- if (this->hitType != 0x19) {
- Entity* ent;
-
- this->action = 7;
- this->timer = 90;
- this->zVelocity = Q_16_16(1.5);
- this->hitType = 0x19;
- this->gustJarState = this->gustJarState & 0xfb;
- this->gustJarFlags = 0x12;
- ent = CreateEnemy(HELMASAUR, 1);
- if (ent != NULL) {
- ent->animationState = this->animationState;
- CopyPosition(this, ent);
+ super->subAction = 1;
+ super->gustJarTolerance = 60;
+ super->animationState = AnimationStateFlip90(gPlayerEntity.animationState >> 1);
+ InitializeAnimation(super, super->animationState);
+}
+
+void sub_0802BCA0(HelmasaurEntity* this) {
+ sub_0806F4E8(super);
+}
+
+void sub_0802BCA8(HelmasaurEntity* this) {
+ if (super->hitType != 0x19) {
+ Entity* entity;
+
+ super->action = 7;
+ super->timer = 90;
+ super->zVelocity = Q_16_16(1.5);
+ super->hitType = 0x19;
+ super->gustJarState = super->gustJarState & 0xfb;
+ super->gustJarFlags = 0x12;
+ entity = CreateEnemy(HELMASAUR, 1);
+ if (entity != NULL) {
+ entity->animationState = super->animationState;
+ CopyPosition(super, entity);
}
- InitializeAnimation(this, this->animationState + 4);
+ InitializeAnimation(super, super->animationState + 4);
}
}
-void sub_0802BCFC(Entity* this) {
- this->subAction = 1;
- this->gustJarTolerance = 60;
+void sub_0802BCFC(HelmasaurEntity* this) {
+ super->subAction = 1;
+ super->gustJarTolerance = 60;
}
-void sub_0802BD08(Entity* this) {
- sub_0806F3E4(this);
+void sub_0802BD08(HelmasaurEntity* this) {
+ sub_0806F3E4(super);
}
-void sub_0802BD10(Entity* this) {
- COLLISION_OFF(this);
- UpdateAnimationVariableFrames(this, 2);
+void sub_0802BD10(HelmasaurEntity* this) {
+ COLLISION_OFF(super);
+ UpdateAnimationVariableFrames(super, 2);
}
-void nullsub_145(Entity* this) {
+void nullsub_145(HelmasaurEntity* this) {
/* ... */
}
-void sub_0802BD28(Entity* this) {
- if (this->flags & ENT_COLLIDE) {
- COLLISION_ON(this);
- this->gustJarState &= ~0x4;
+void sub_0802BD28(HelmasaurEntity* this) {
+ if (super->flags & ENT_COLLIDE) {
+ COLLISION_ON(super);
+ super->gustJarState &= ~0x4;
} else {
- this->health = 0;
+ super->health = 0;
}
}
-void sub_0802BD54(Entity* this) {
- sub_0804A720(this);
- this->action = 1;
- this->field_0x78.HALF.LO = Random();
- this->gustJarTolerance = 60;
- this->field_0x78.HALF.HI = 0xff;
- this->direction = DirectionRound(Random());
- this->animationState = this->direction >> 3;
- InitializeAnimation(this, this->animationState);
+void sub_0802BD54(HelmasaurEntity* this) {
+ sub_0804A720(super);
+ super->action = 1;
+ this->unk_78 = Random();
+ super->gustJarTolerance = 60;
+ this->unk_79 = 0xff;
+ super->direction = DirectionRound(Random());
+ super->animationState = super->direction >> 3;
+ InitializeAnimation(super, super->animationState);
}
-void sub_0802BD8C(Entity* this) {
- if (this->timer) {
- this->timer--;
+void sub_0802BD8C(HelmasaurEntity* this) {
+ if (super->timer) {
+ super->timer--;
} else {
u32 direction;
- if (sub_08049FDC(this, 1)) {
- direction = sub_0804A024(this, 1, 0x10);
- if (direction != 0xff && direction != this->field_0x78.HALF.HI) {
+ if (sub_08049FDC(super, 1)) {
+ direction = sub_0804A024(super, 1, 0x10);
+ if (direction != 0xff && direction != this->unk_79) {
sub_0802C058(this, direction);
return;
}
}
direction = sub_0802C020(this);
- if (direction != this->direction) {
+ if (direction != super->direction) {
sub_0802C058(this, direction);
}
}
}
-void sub_0802BDE0(Entity* this) {
+void sub_0802BDE0(HelmasaurEntity* this) {
if (sub_0802C06C(this)) {
- this->action = 3;
- this->timer = 60;
- this->field_0x78.HALF.HI = 0xff;
+ super->action = 3;
+ super->timer = 60;
+ this->unk_79 = 0xff;
} else {
- this->action = 1;
- this->timer = (Random() & 0xf) + 15;
- this->field_0x78.HALF.HI = this->direction;
+ super->action = 1;
+ super->timer = (Random() & 0xf) + 15;
+ this->unk_79 = super->direction;
}
}
-void sub_0802BE18(Entity* this) {
- UpdateAnimationVariableFrames(this, 2);
- if (--this->timer == 0) {
- this->action = 4;
- this->timer = 30;
- this->speed = 0x300;
+void sub_0802BE18(HelmasaurEntity* this) {
+ UpdateAnimationVariableFrames(super, 2);
+ if (--super->timer == 0) {
+ super->action = 4;
+ super->timer = 30;
+ super->speed = 0x300;
} else {
sub_0802C18C(this);
}
}
-void sub_0802BE48(Entity* this) {
- if (!ProcessMovement2(this)) {
+void sub_0802BE48(HelmasaurEntity* this) {
+ if (!ProcessMovement2(super)) {
sub_0802C218(this);
InitScreenShake(8, 0);
} else {
- GetNextFrame(this);
+ GetNextFrame(super);
sub_0802C1CC(this);
if (sub_0802C0E8(this)) {
- this->action = 5;
+ super->action = 5;
}
}
}
-void sub_0802BE80(Entity* this) {
- this->speed -= 0x20;
- if (0xff < this->speed) {
+void sub_0802BE80(HelmasaurEntity* this) {
+ super->speed -= 0x20;
+ if (0xff < super->speed) {
sub_0802C1CC(this);
}
- if (this->speed > 0) {
- ProcessMovement2(this);
+ if (super->speed > 0) {
+ ProcessMovement2(super);
sub_0802C18C(this);
} else {
sub_0802C1C0(this);
- this->timer += 30;
+ super->timer += 30;
}
}
-void sub_0802BEBC(Entity* this) {
- this->direction ^= 0x10;
- ProcessMovement2(this);
- this->direction ^= 0x10;
- if (!sub_080044EC(this, Q_16_16(0.125))) {
+void sub_0802BEBC(HelmasaurEntity* this) {
+ super->direction ^= 0x10;
+ ProcessMovement2(super);
+ super->direction ^= 0x10;
+ if (!sub_080044EC(super, Q_16_16(0.125))) {
sub_0802C1C0(this);
}
}
-void sub_0802BEEC(Entity* this) {
- if (this->timer != 0) {
- if ((--this->timer & 0x1F) == 0) {
- this->animationState ^= 2;
- this->direction = this->animationState << 3;
- InitializeAnimation(this, this->animationState + 4);
+void sub_0802BEEC(HelmasaurEntity* this) {
+ if (super->timer != 0) {
+ if ((--super->timer & 0x1F) == 0) {
+ super->animationState ^= 2;
+ super->direction = super->animationState << 3;
+ InitializeAnimation(super, super->animationState + 4);
}
- } else if (!GravityUpdate(this, Q_8_8(28.0))) {
- this->action = 8;
- this->timer = 30;
- this->speed = 0x120;
+ } else if (!GravityUpdate(super, Q_8_8(28.0))) {
+ super->action = 8;
+ super->timer = 30;
+ super->speed = 0x120;
}
}
-void sub_0802BF3C(Entity* this) {
- ProcessMovement0(this);
- GetNextFrame(this);
- if (--this->timer == 0) {
+void sub_0802BF3C(HelmasaurEntity* this) {
+ ProcessMovement0(super);
+ GetNextFrame(super);
+ if (--super->timer == 0) {
u32 sprite;
- this->timer = 30;
- this->direction = sub_0802C020(this);
- sprite = this->direction >> 3;
- if (sprite != this->animationState) {
- this->animationState = sprite;
- InitializeAnimation(this, sprite + 4);
+ super->timer = 30;
+ super->direction = sub_0802C020(this);
+ sprite = super->direction >> 3;
+ if (sprite != super->animationState) {
+ super->animationState = sprite;
+ InitializeAnimation(super, sprite + 4);
}
}
}
-void sub_0802BF78(Entity* this) {
- this->action = 1;
- this->flags2 = 4;
- this->gustJarFlags = 1;
- this->direction = this->animationState << 3;
- InitializeAnimation(this, this->animationState + 8);
+void sub_0802BF78(HelmasaurEntity* this) {
+ super->action = 1;
+ super->flags2 = 4;
+ super->gustJarFlags = 1;
+ super->direction = super->animationState << 3;
+ InitializeAnimation(super, super->animationState + 8);
}
-void sub_0802BF98(Entity* this) {
- if (sub_0806F520(this)) {
- gUnk_080CD450[this->subAction](this);
+void sub_0802BF98(HelmasaurEntity* this) {
+ if (sub_0806F520(super)) {
+ gUnk_080CD450[super->subAction](this);
} else {
- this->action = 2;
- this->timer = 30;
- COLLISION_OFF(this);
+ super->action = 2;
+ super->timer = 30;
+ COLLISION_OFF(super);
}
}
-void sub_0802BFD0(Entity* this) {
- this->subAction = 2;
+void sub_0802BFD0(HelmasaurEntity* this) {
+ super->subAction = 2;
}
-void sub_0802BFD8(Entity* this) {
- sub_0806F4E8(this);
+void sub_0802BFD8(HelmasaurEntity* this) {
+ sub_0806F4E8(super);
}
-void sub_0802BFE0(Entity* this) {
- if (sub_0806F3E4(this)) {
- DeleteEntity(this);
+void sub_0802BFE0(HelmasaurEntity* this) {
+ if (sub_0806F3E4(super)) {
+ DeleteEntity(super);
}
}
-void sub_0802BFF4(Entity* this) {
- this->spriteSettings.draw ^= 1;
- if (--this->timer == 0) {
- DeleteEntity(this);
+void sub_0802BFF4(HelmasaurEntity* this) {
+ super->spriteSettings.draw ^= 1;
+ if (--super->timer == 0) {
+ DeleteEntity(super);
}
}
-u32 sub_0802C020(Entity* this) {
+u32 sub_0802C020(HelmasaurEntity* this) {
u32 uVar1 = Random();
- if (sub_08049FA0(this) || (uVar1 & 1))
+ if (sub_08049FA0(super) || (uVar1 & 1))
return DirectionRound(uVar1);
- return (sub_08049EE4(this) + (uVar1 >> 0x10 & 1) * 4) & 0x18;
+ return (sub_08049EE4(super) + (uVar1 >> 0x10 & 1) * 4) & 0x18;
}
-void sub_0802C058(Entity* this, u32 param_2) {
- this->action = 2;
- this->direction = param_2;
- this->animationState = param_2 >> 3;
- InitializeAnimation(this, this->animationState);
+void sub_0802C058(HelmasaurEntity* this, u32 param_2) {
+ super->action = 2;
+ super->direction = param_2;
+ super->animationState = param_2 >> 3;
+ InitializeAnimation(super, super->animationState);
}
-bool32 sub_0802C06C(Entity* this) {
- u32 x = this->x.HALF.HI + this->hitbox->offset_x;
- u32 y = this->y.HALF.HI + this->hitbox->offset_y;
- u32 xdiff = gUnk_080CD45C[(this->direction >> 2) + 0];
- u32 ydiff = gUnk_080CD45C[(this->direction >> 2) + 1];
+bool32 sub_0802C06C(HelmasaurEntity* this) {
+ u32 x = super->x.HALF.HI + super->hitbox->offset_x;
+ u32 y = super->y.HALF.HI + super->hitbox->offset_y;
+ u32 xdiff = gUnk_080CD45C[(super->direction >> 2) + 0];
+ u32 ydiff = gUnk_080CD45C[(super->direction >> 2) + 1];
- u8* layer = this->collisionLayer == 2 ? gMapTop.collisionData : gMapBottom.collisionData;
+ u8* layer = super->collisionLayer == 2 ? gMapTop.collisionData : gMapBottom.collisionData;
u32 i;
for (i = 0; i < 8; i++) {
@@ -329,15 +336,15 @@ bool32 sub_0802C06C(Entity* this) {
bool32 sub_0806FC24(u32, u32);
-bool32 sub_0802C0E8(Entity* this) {
- if (--this->timer == 0) {
+bool32 sub_0802C0E8(HelmasaurEntity* this) {
+ if (--super->timer == 0) {
return TRUE;
} else {
- const s8* ptr = &gUnk_080CD45C[this->direction >> 2];
- s32 x = this->x.HALF.HI + this->hitbox->offset_x + ptr[0] * 6;
- s32 y = this->y.HALF.HI + this->hitbox->offset_y + ptr[1] * 6;
+ const s8* ptr = &gUnk_080CD45C[super->direction >> 2];
+ s32 x = super->x.HALF.HI + super->hitbox->offset_x + ptr[0] * 6;
+ s32 y = super->y.HALF.HI + super->hitbox->offset_y + ptr[1] * 6;
- u8* layer = this->collisionLayer == 2 ? gMapTop.collisionData : gMapBottom.collisionData;
+ u8* layer = super->collisionLayer == 2 ? gMapTop.collisionData : gMapBottom.collisionData;
u32 ret = FALSE;
if (!sub_0806FC24(TILE(x, y), 9)) {
if (IsTileCollision(layer, x, y, 0)) {
@@ -350,50 +357,50 @@ bool32 sub_0802C0E8(Entity* this) {
}
}
-void sub_0802C18C(Entity* this) {
- this->field_0x78.HALF.LO--;
- if ((this->field_0x78.HALF.LO & 7) == 0) {
- Entity* ent = CreateObject(SPECIAL_FX, FX_DASH, 0x40);
- if (ent != NULL) {
- PositionRelative(this, ent, 0, Q_16_16(1.0));
+void sub_0802C18C(HelmasaurEntity* this) {
+ this->unk_78--;
+ if ((this->unk_78 & 7) == 0) {
+ Entity* entity = CreateObject(SPECIAL_FX, FX_DASH, 0x40);
+ if (entity != NULL) {
+ PositionRelative(super, entity, 0, Q_16_16(1.0));
}
}
}
-void sub_0802C1C0(Entity* this) {
- this->action = 1;
- this->timer = 30;
+void sub_0802C1C0(HelmasaurEntity* this) {
+ super->action = 1;
+ super->timer = 30;
}
-void sub_0802C1CC(Entity* this) {
- const s8* ptr = &gUnk_080CD464[this->animationState << 2];
- sub_08008796(this, 9, this->x.HALF.HI + ptr[0], this->y.HALF.HI + ptr[1]);
- sub_08008796(this, 9, this->x.HALF.HI + ptr[2], this->y.HALF.HI + ptr[3]);
+void sub_0802C1CC(HelmasaurEntity* this) {
+ const s8* ptr = &gUnk_080CD464[super->animationState << 2];
+ sub_08008796(super, 9, super->x.HALF.HI + ptr[0], super->y.HALF.HI + ptr[1]);
+ sub_08008796(super, 9, super->x.HALF.HI + ptr[2], super->y.HALF.HI + ptr[3]);
}
-void sub_0802C218(Entity* this) {
- this->action = 6;
- this->speed = Q_8_8(0.875);
- this->zVelocity = Q_16_16(1.5);
+void sub_0802C218(HelmasaurEntity* this) {
+ super->action = 6;
+ super->speed = Q_8_8(0.875);
+ super->zVelocity = Q_16_16(1.5);
}
// clang-format off
-void (*const Helmasaur_Functions[])(Entity*) = {
+void (*const Helmasaur_Functions[])(HelmasaurEntity*) = {
Helmasaur_OnTick,
Helmasaur_OnCollision,
- GenericKnockback,
- GenericDeath,
- GenericConfused,
+ (void (*)(HelmasaurEntity*))GenericKnockback,
+ (void (*)(HelmasaurEntity*))GenericDeath,
+ (void (*)(HelmasaurEntity*))GenericConfused,
Helmasaur_OnGrabbed,
};
-void (*const gUnk_080CD3FC[])(Entity*) = {
+void (*const gUnk_080CD3FC[])(HelmasaurEntity*) = {
sub_0802BF78,
sub_0802BF98,
sub_0802BFF4,
};
-void (*const gUnk_080CD408[])(Entity*) = {
+void (*const gUnk_080CD408[])(HelmasaurEntity*) = {
sub_0802BD54,
sub_0802BD8C,
sub_0802BDE0,
@@ -405,13 +412,13 @@ void (*const gUnk_080CD408[])(Entity*) = {
sub_0802BF3C,
};
-void (*const gUnk_080CD42C[])(Entity*) = {
+void (*const gUnk_080CD42C[])(HelmasaurEntity*) = {
sub_0802BC74,
sub_0802BCA0,
sub_0802BCA8,
};
-void (*const gUnk_080CD438[])(Entity*) = {
+void (*const gUnk_080CD438[])(HelmasaurEntity*) = {
sub_0802BCFC,
sub_0802BCA0,
sub_0802BD08,
@@ -420,7 +427,7 @@ void (*const gUnk_080CD438[])(Entity*) = {
sub_0802BD28,
};
-void (*const gUnk_080CD450[])(Entity*) = {
+void (*const gUnk_080CD450[])(HelmasaurEntity*) = {
sub_0802BFD0,
sub_0802BFD8,
sub_0802BFE0,
diff --git a/src/enemy/keaton.c b/src/enemy/keaton.c
index 3ef48b9e..ee1d0b93 100644
--- a/src/enemy/keaton.c
+++ b/src/enemy/keaton.c
@@ -4,206 +4,216 @@
*
* @brief keaton enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[12];
+ /*0x74*/ u16 unk_74;
+ /*0x76*/ u16 unk_76;
+ /*0x78*/ u16 unk_78;
+ /*0x7a*/ u8 unused2[1];
+ /*0x7b*/ u8 unk_7b;
+} KeatonEntity;
+
extern Entity* gUnk_020000B0;
-void Keaton_OnTick(Entity*);
-void Keaton_OnCollision(Entity*);
-void Keaton_OnGrabbed(Entity*);
-void Keaton_Init(Entity*);
-void Keaton_Action1(Entity*);
-void Keaton_Action2(Entity*);
-void Keaton_Action3(Entity*);
-void Keaton_Action4(Entity*);
-void Keaton_Action5(Entity*);
-
-static void (*const Keaton_Functions[])(Entity*) = {
- Keaton_OnTick, Keaton_OnCollision, GenericKnockback, GenericDeath, GenericConfused, Keaton_OnGrabbed,
+void Keaton_OnTick(KeatonEntity*);
+void Keaton_OnCollision(KeatonEntity*);
+void Keaton_OnGrabbed(KeatonEntity*);
+void Keaton_Init(KeatonEntity*);
+void Keaton_Action1(KeatonEntity*);
+void Keaton_Action2(KeatonEntity*);
+void Keaton_Action3(KeatonEntity*);
+void Keaton_Action4(KeatonEntity*);
+void Keaton_Action5(KeatonEntity*);
+
+static void (*const Keaton_Functions[])(KeatonEntity*) = {
+ Keaton_OnTick, Keaton_OnCollision, (void (*)(KeatonEntity*))GenericKnockback, (void (*)(KeatonEntity*))GenericDeath, (void (*)(KeatonEntity*))GenericConfused, Keaton_OnGrabbed,
};
-bool32 sub_080325E8(Entity* this);
-void sub_08032650(Entity* this);
-void sub_0803269C(Entity* this, u32 direction);
-void sub_080326FC(Entity* this);
-bool32 sub_0803271C(Entity* this);
-void sub_08032740(Entity* this);
-void sub_0803275C(Entity* this);
-void sub_08032784(Entity* this);
-void sub_08032794(Entity* this);
-void sub_080327C8(Entity* this);
-void sub_080327E0(Entity* this);
-
-void Keaton(Entity* this) {
- EnemyFunctionHandler(this, Keaton_Functions);
- SetChildOffset(this, 0, 1, -18);
+bool32 sub_080325E8(KeatonEntity* this);
+void sub_08032650(KeatonEntity* this);
+void sub_0803269C(KeatonEntity* this, u32 direction);
+void sub_080326FC(KeatonEntity* this);
+bool32 sub_0803271C(KeatonEntity* this);
+void sub_08032740(KeatonEntity* this);
+void sub_0803275C(KeatonEntity* this);
+void sub_08032784(KeatonEntity* this);
+void sub_08032794(KeatonEntity* this);
+void sub_080327C8(KeatonEntity* this);
+void sub_080327E0(KeatonEntity* this);
+
+void Keaton(KeatonEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)Keaton_Functions);
+ SetChildOffset(super, 0, 1, -18);
}
-void Keaton_OnTick(Entity* this) {
- static void (*const Keaton_Actions[])(Entity*) = {
+void Keaton_OnTick(KeatonEntity* this) {
+ static void (*const Keaton_Actions[])(KeatonEntity*) = {
Keaton_Init, Keaton_Action1, Keaton_Action2, Keaton_Action3, Keaton_Action4, Keaton_Action5,
};
- Keaton_Actions[this->action](this);
+ Keaton_Actions[super->action](this);
}
-void Keaton_OnCollision(Entity* this) {
+void Keaton_OnCollision(KeatonEntity* this) {
u32 var;
- if (this->action != 3 && this->action != 4) {
- this->action = 3;
- this->timer = 12;
- this->direction = DirectionTurnAround(DirectionRoundUp(this->knockbackDirection));
- InitAnimationForceUpdate(this, this->direction >> 3);
- } else if (this->contactFlags == 0xCC) {
- if (this->confusedTime == 0) {
+ if (super->action != 3 && super->action != 4) {
+ super->action = 3;
+ super->timer = 12;
+ super->direction = DirectionTurnAround(DirectionRoundUp(super->knockbackDirection));
+ InitAnimationForceUpdate(super, super->direction >> 3);
+ } else if (super->contactFlags == 0xCC) {
+ if (super->confusedTime == 0) {
sub_0803275C(this);
}
}
- if (this->confusedTime != 0) {
- Create0x68FX(this, FX_STARS);
+ if (super->confusedTime != 0) {
+ Create0x68FX(super, FX_STARS);
}
- EnemyFunctionHandlerAfterCollision(this, Keaton_Functions);
+ EnemyFunctionHandlerAfterCollision(super, Keaton_Functions);
}
-void Keaton_OnGrabbed(Entity* this) {
+void Keaton_OnGrabbed(KeatonEntity* this) {
}
-void Keaton_Init(Entity* this) {
- sub_0804A720(this);
- this->animationState = 0;
- InitAnimationForceUpdate(this, 0);
+void Keaton_Init(KeatonEntity* this) {
+ sub_0804A720(super);
+ super->animationState = 0;
+ InitAnimationForceUpdate(super, 0);
sub_080326FC(this);
sub_08032740(this);
}
-void Keaton_Action1(Entity* this) {
+void Keaton_Action1(KeatonEntity* this) {
if (!sub_080325E8(this) && !sub_0803271C(this)) {
- this->timer--;
- if (this->timer == 0) {
+ super->timer--;
+ if (super->timer == 0) {
sub_08032650(this);
}
- if (!ProcessMovement0(this)) {
- this->timer = 1;
+ if (!ProcessMovement0(super)) {
+ super->timer = 1;
}
- UpdateAnimationSingleFrame(this);
+ UpdateAnimationSingleFrame(super);
}
}
-void Keaton_Action2(Entity* this) {
+void Keaton_Action2(KeatonEntity* this) {
if (!sub_080325E8(this)) {
- UpdateAnimationSingleFrame(this);
- if (this->frame & ANIM_DONE) {
+ UpdateAnimationSingleFrame(super);
+ if (super->frame & ANIM_DONE) {
sub_080326FC(this);
sub_08032740(this);
}
}
}
-void Keaton_Action3(Entity* this) {
- if (this->timer != 0) {
- this->timer--;
- if (this->timer == 0) {
- this->subtimer = 30;
- this->animationState = this->direction / 8;
- InitAnimationForceUpdate(this, this->animationState + 4);
+void Keaton_Action3(KeatonEntity* this) {
+ if (super->timer != 0) {
+ super->timer--;
+ if (super->timer == 0) {
+ super->subtimer = 30;
+ super->animationState = super->direction / 8;
+ InitAnimationForceUpdate(super, super->animationState + 4);
} else {
return;
}
}
- UpdateAnimationSingleFrame(this);
- UpdateAnimationSingleFrame(this);
- this->subtimer--;
- if (this->subtimer == 0) {
- this->action = 4;
- this->speed = 0x1E0;
- this->field_0x76.HWORD = 0x46;
- this->field_0x78.HWORD = 0;
- *(((u8*)&this->field_0x7a) + 1) = 0;
+ UpdateAnimationSingleFrame(super);
+ UpdateAnimationSingleFrame(super);
+ super->subtimer--;
+ if (super->subtimer == 0) {
+ super->action = 4;
+ super->speed = 0x1E0;
+ this->unk_76 = 0x46;
+ this->unk_78 = 0;
+ this->unk_7b = 0;
sub_080327C8(this);
} else {
- if ((this->subtimer & 0x3) == 0) {
+ if ((super->subtimer & 0x3) == 0) {
sub_08032794(this);
}
}
}
-void Keaton_Action4(Entity* this) {
- if (this->child && (this->child->contactFlags & 0x80)) {
+void Keaton_Action4(KeatonEntity* this) {
+ if (super->child && (super->child->contactFlags & 0x80)) {
sub_0803275C(this);
return;
}
- if (--this->field_0x76.HWORD == 0 || !ProcessMovement2(this)) {
+ if (--this->unk_76 == 0 || !ProcessMovement2(super)) {
sub_0803275C(this);
return;
}
- UpdateAnimationSingleFrame(this);
- if ((this->field_0x76.HWORD & 0x7) == 0) {
+ UpdateAnimationSingleFrame(super);
+ if ((this->unk_76 & 0x7) == 0) {
sub_08032794(this);
}
}
-void Keaton_Action5(Entity* this) {
- this->timer--;
- if ((this->timer == 0) && !sub_080325E8(this)) {
+void Keaton_Action5(KeatonEntity* this) {
+ super->timer--;
+ if ((super->timer == 0) && !sub_080325E8(this)) {
sub_08032784(this);
}
}
-u32 sub_080325E8(Entity* this) {
- if ((sub_08049FA0(this) && sub_08049FDC(this, 1)) && (EntityInRectRadius(this, gUnk_020000B0, 0x68, 0x40) != 0)) {
- if (((GetFacingDirection(this, gUnk_020000B0) - (DirectionRound(this->frame)) + 2) & 0x1F) < 5) {
- this->action = 3;
- this->timer = 12;
- this->direction = DirectionRound(this->frame);
+u32 sub_080325E8(KeatonEntity* this) {
+ if ((sub_08049FA0(super) && sub_08049FDC(super, 1)) && (EntityInRectRadius(super, gUnk_020000B0, 0x68, 0x40) != 0)) {
+ if (((GetFacingDirection(super, gUnk_020000B0) - (DirectionRound(super->frame)) + 2) & 0x1F) < 5) {
+ super->action = 3;
+ super->timer = 12;
+ super->direction = DirectionRound(super->frame);
return TRUE;
}
}
return FALSE;
}
-void sub_08032650(Entity* this) {
+void sub_08032650(KeatonEntity* this) {
static const u8 gUnk_080CE7E0[] = { 60, 60, 90, 90, 90, 90, 120, 120, 120, 120, 120, 120, 120, 120, 150, 150 };
u32 rand = Random();
- this->timer = gUnk_080CE7E0[rand & 0xF];
- if (!((sub_08049FA0(this) == 0) && ((rand >> 8 & 1) == 0))) {
- this->direction = DirectionRound(rand >> 0x10);
+ super->timer = gUnk_080CE7E0[rand & 0xF];
+ if (!((sub_08049FA0(super) == 0) && ((rand >> 8 & 1) == 0))) {
+ super->direction = DirectionRound(rand >> 0x10);
} else {
- this->direction = DirectionRoundUp(sub_08049EE4(this));
+ super->direction = DirectionRoundUp(sub_08049EE4(super));
}
- sub_0803269C(this, this->direction);
+ sub_0803269C(this, super->direction);
}
-void sub_0803269C(Entity* this, u32 direction) {
+void sub_0803269C(KeatonEntity* this, u32 direction) {
u32 uVar1;
if (((direction - 3) & 7) < 3) {
uVar1 = DirectionToAnimationState(direction);
- if (((this->animationState - uVar1) & 3) > 1) {
- this->animationState = uVar1;
- InitAnimationForceUpdate(this, (this->animIndex & 0xFC) + uVar1);
+ if (((super->animationState - uVar1) & 3) > 1) {
+ super->animationState = uVar1;
+ InitAnimationForceUpdate(super, (super->animIndex & 0xFC) + uVar1);
}
} else {
uVar1 = DirectionToAnimationState(direction);
- if (uVar1 != this->animationState) {
- this->animationState = uVar1;
- InitAnimationForceUpdate(this, (this->animIndex & 0xFC) + uVar1);
+ if (uVar1 != super->animationState) {
+ super->animationState = uVar1;
+ InitAnimationForceUpdate(super, (super->animIndex & 0xFC) + uVar1);
}
}
}
-void sub_080326FC(Entity* this) {
+void sub_080326FC(KeatonEntity* this) {
static const u16 gUnk_080CE7F0[] = { 0xd2, 0xd2, 0xf0, 0xf0, 0x10e, 0x10e, 0x10e, 0x10e,
0x12c, 0x12c, 0x12c, 0x12c, 0x12c, 0x12c, 0x12c, 0x12c };
- this->field_0x74.HWORD = gUnk_080CE7F0[Random() & 0xF];
+ this->unk_74 = gUnk_080CE7F0[Random() & 0xF];
}
-bool32 sub_0803271C(Entity* this) {
- this->field_0x74.HWORD--;
- if (this->field_0x74.HWORD == 0) {
+bool32 sub_0803271C(KeatonEntity* this) {
+ this->unk_74--;
+ if (this->unk_74 == 0) {
sub_08032784(this);
return TRUE;
} else {
@@ -211,52 +221,52 @@ bool32 sub_0803271C(Entity* this) {
}
}
-void sub_08032740(Entity* this) {
- this->action = 1;
- this->speed = 0x80;
- InitializeAnimation(this, this->animationState);
+void sub_08032740(KeatonEntity* this) {
+ super->action = 1;
+ super->speed = 0x80;
+ InitializeAnimation(super, super->animationState);
sub_08032650(this);
}
-void sub_0803275C(Entity* this) {
- this->action = 5;
- this->timer = 45;
- this->speed = 0x80;
- InitAnimationForceUpdate(this, this->animationState);
- sub_0803269C(this, this->direction);
+void sub_0803275C(KeatonEntity* this) {
+ super->action = 5;
+ super->timer = 45;
+ super->speed = 0x80;
+ InitAnimationForceUpdate(super, super->animationState);
+ sub_0803269C(this, super->direction);
sub_080327E0(this);
}
-void sub_08032784(Entity* this) {
- this->action = 2;
- InitAnimationForceUpdate(this, this->animationState + 8);
+void sub_08032784(KeatonEntity* this) {
+ super->action = 2;
+ InitAnimationForceUpdate(super, super->animationState + 8);
}
-void sub_08032794(Entity* this) {
+void sub_08032794(KeatonEntity* this) {
Entity* target;
const s8* temp;
static const s8 gUnk_080CE810[] = { 0, 2, -4, 0, 0, -11, 4, 0 };
- target = CreateFx(this, FX_DASH, 0x40);
+ target = CreateFx(super, FX_DASH, 0x40);
if (target != NULL) {
- temp = &gUnk_080CE810[this->animationState * 2];
- PositionRelative(this, target, Q_16_16(temp[0]), Q_16_16(temp[1]));
+ temp = &gUnk_080CE810[super->animationState * 2];
+ PositionRelative(super, target, Q_16_16(temp[0]), Q_16_16(temp[1]));
}
}
-void sub_080327C8(Entity* this) {
+void sub_080327C8(KeatonEntity* this) {
Entity* child;
- child = CreateProjectileWithParent(this, KEATON_DAGGER, 0);
+ child = CreateProjectileWithParent(super, KEATON_DAGGER, 0);
if (child != NULL) {
- child->parent = this;
- this->child = child;
+ child->parent = super;
+ super->child = child;
}
}
-void sub_080327E0(Entity* this) {
- if (this->child != NULL) {
- this->child->parent = NULL;
- this->child = NULL;
+void sub_080327E0(KeatonEntity* this) {
+ if (super->child != NULL) {
+ super->child->parent = NULL;
+ super->child = NULL;
}
}
diff --git a/src/enemy/keese.c b/src/enemy/keese.c
index 0a6b0d1f..467ea0ff 100644
--- a/src/enemy/keese.c
+++ b/src/enemy/keese.c
@@ -4,7 +4,6 @@
*
* @brief Keese enemy
*/
-
#define NENT_DEPRECATED
#include "enemy.h"
#include "physics.h"
diff --git a/src/enemy/lakitu.c b/src/enemy/lakitu.c
index e27643cd..6bbc0fee 100644
--- a/src/enemy/lakitu.c
+++ b/src/enemy/lakitu.c
@@ -4,23 +4,31 @@
*
* @brief Lakitu enemy
*/
-
-#include "global.h"
+#define NENT_DEPRECATED
#include "enemy.h"
#include "physics.h"
#include "player.h"
-extern void (*const LakituActionFuncs[])(Entity*);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[12];
+ /*0x74*/ u16 unk_74;
+ /*0x76*/ u16 unk_76;
+ /*0x78*/ u8 unk_78;
+ /*0x79*/ u8 unk_79;
+} LakituEntity;
+
+extern void (*const LakituActionFuncs[])(LakituEntity*);
// Forward references to functions in lakitu.c
-extern void sub_0803CAD0(Entity*);
-extern void sub_0803CBAC(Entity*);
-extern void sub_0803CA84(Entity*, u32);
-extern bool32 sub_0803CA4C(Entity*);
-extern bool32 sub_0803CB04(Entity*);
-extern void Lakitu_SpawnLightning(Entity*);
-extern void sub_0803CB34(Entity*);
-extern void sub_0803CC08(Entity* this);
+extern void sub_0803CAD0(LakituEntity* this);
+extern void sub_0803CBAC(LakituEntity* this);
+extern void sub_0803CA84(LakituEntity* this, u32);
+extern bool32 sub_0803CA4C(LakituEntity* this);
+extern bool32 sub_0803CB04(LakituEntity* this);
+extern void Lakitu_SpawnLightning(LakituEntity* this);
+extern void sub_0803CB34(LakituEntity* this);
+extern void sub_0803CC08(LakituEntity* this);
enum {
INIT,
@@ -39,36 +47,36 @@ typedef struct {
} PACKED OffsetCoords;
// Variables
-extern void (*const Lakitu_Functions[])(Entity*);
-extern void (*const gUnk_080D0128[])(Entity*);
-extern void (*const gUnk_080D0148[])(Entity*);
+extern void (*const Lakitu_Functions[])(LakituEntity*);
+extern void (*const gUnk_080D0128[])(LakituEntity*);
+extern void (*const gUnk_080D0148[])(LakituEntity*);
extern const OffsetCoords gUnk_080D0154[];
-void Lakitu(Entity* this) {
- EnemyFunctionHandler(this, Lakitu_Functions);
+void Lakitu(LakituEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)Lakitu_Functions);
- SetChildOffset(this, 0, 1, -16);
+ SetChildOffset(super, 0, 1, -16);
}
-void Lakitu_OnTick(Entity* this) {
- if (this->action != 0 && this->action != 7) {
+void Lakitu_OnTick(LakituEntity* this) {
+ if (super->action != 0 && super->action != 7) {
sub_0803CAD0(this);
}
- LakituActionFuncs[this->action](this);
+ LakituActionFuncs[super->action](this);
}
-void Lakitu_OnCollision(Entity* this) {
- if ((this->contactFlags & 0x7f) == 0x1d) {
- this->zVelocity = Q_16_16(2.0);
+void Lakitu_OnCollision(LakituEntity* this) {
+ if ((super->contactFlags & 0x7f) == 0x1d) {
+ super->zVelocity = Q_16_16(2.0);
sub_0803CBAC(this);
} else {
- if (this->hitType == 0x43) {
- Entity* fx = CreateFx(this, FX_DEATH, 0);
+ if (super->hitType == 0x43) {
+ Entity* fx = CreateFx(super, FX_DEATH, 0);
if (fx != NULL) {
- u32 angle = (this->knockbackDirection ^ 0x10) << 3;
+ u32 angle = (super->knockbackDirection ^ 0x10) << 3;
s32 sine;
sine = gSineTable[angle];
@@ -88,163 +96,163 @@ void Lakitu_OnCollision(Entity* this) {
}
}
- if (this->confusedTime) {
- Create0x68FX(this, FX_STARS);
+ if (super->confusedTime) {
+ Create0x68FX(super, FX_STARS);
}
- EnemyFunctionHandlerAfterCollision(this, Lakitu_Functions);
+ EnemyFunctionHandlerAfterCollision(super, Lakitu_Functions);
}
-void Lakitu_OnGrabbed(Entity* this) {
- if (sub_0806F520(this)) {
- gUnk_080D0148[this->subAction](this);
+void Lakitu_OnGrabbed(LakituEntity* this) {
+ if (sub_0806F520(super)) {
+ gUnk_080D0148[super->subAction](this);
}
}
-void sub_0803C844(Entity* this) {
- this->subAction = 1;
- this->gustJarTolerance = 0x3c;
+void sub_0803C844(LakituEntity* this) {
+ super->subAction = 1;
+ super->gustJarTolerance = 0x3c;
}
-void sub_0803C850(Entity* this) {
- Entity* cloud = this->child;
+void sub_0803C850(LakituEntity* this) {
+ Entity* cloud = super->child;
if (cloud != NULL) {
- cloud->spriteOffsetX = this->spriteOffsetX;
+ cloud->spriteOffsetX = super->spriteOffsetX;
}
- sub_0806F4E8(this);
+ sub_0806F4E8(super);
}
-void sub_0803C86C(Entity* this) {
+void sub_0803C86C(LakituEntity* this) {
sub_0803CBAC(this);
- this->child = NULL;
+ super->child = NULL;
}
-void Lakitu_Initialize(Entity* this) {
- Entity* cloud = CreateProjectileWithParent(this, 17, 0);
+void Lakitu_Initialize(LakituEntity* this) {
+ Entity* cloud = CreateProjectileWithParent(super, 17, 0);
if (cloud == NULL) {
return;
}
- cloud->parent = this;
- this->child = cloud;
+ cloud->parent = super;
+ super->child = cloud;
- sub_0804A720(this);
+ sub_0804A720(super);
- this->action = HIDDEN;
+ super->action = HIDDEN;
- this->z.HALF.HI = -2;
+ super->z.HALF.HI = -2;
- this->spriteOffsetY = 0xff;
+ super->spriteOffsetY = 0xff;
- this->field_0x74.HWORD = this->x.HALF.HI;
- this->field_0x76.HWORD = this->y.HALF.HI;
+ this->unk_74 = super->x.HALF.HI;
+ this->unk_76 = super->y.HALF.HI;
}
-void Lakitu_Hide(Entity* this) {
+void Lakitu_Hide(LakituEntity* this) {
sub_0803CA84(this, 0);
if (sub_0803CA4C(this)) {
- this->action = END_HIDE;
- this->spriteSettings.draw = 1;
+ super->action = END_HIDE;
+ super->spriteSettings.draw = 1;
}
}
-void Lakitu_EndHide(Entity* this) {
- UpdateAnimationSingleFrame(this);
+void Lakitu_EndHide(LakituEntity* this) {
+ UpdateAnimationSingleFrame(super);
- if (this->frame & ANIM_DONE) {
- this->action = IDLE;
- this->timer = 60;
+ if (super->frame & ANIM_DONE) {
+ super->action = IDLE;
+ super->timer = 60;
- this->hitType = 0x42;
+ super->hitType = 0x42;
- InitAnimationForceUpdate(this, this->animationState + 4);
+ InitAnimationForceUpdate(super, super->animationState + 4);
}
}
-void Lakitu_Idle(Entity* this) {
+void Lakitu_Idle(LakituEntity* this) {
if (sub_0803CB04(this)) {
return;
}
if (!sub_0803CA4C(this)) {
- this->action = BEGIN_HIDE;
+ super->action = BEGIN_HIDE;
- this->hitType = 0x43;
- InitAnimationForceUpdate(this, this->animationState + 0xc);
+ super->hitType = 0x43;
+ InitAnimationForceUpdate(super, super->animationState + 0xc);
} else {
sub_0803CA84(this, 4);
}
}
-void Lakitu_BeginHide(Entity* this) {
- UpdateAnimationSingleFrame(this);
+void Lakitu_BeginHide(LakituEntity* this) {
+ UpdateAnimationSingleFrame(super);
- if (this->frame & ANIM_DONE) {
- this->action = HIDDEN;
- this->spriteSettings.draw = 0;
+ if (super->frame & ANIM_DONE) {
+ super->action = HIDDEN;
+ super->spriteSettings.draw = 0;
- InitAnimationForceUpdate(this, this->animationState);
+ InitAnimationForceUpdate(super, super->animationState);
}
}
-void Lakitu_Lightning(Entity* this) {
- UpdateAnimationSingleFrame(this);
+void Lakitu_Lightning(LakituEntity* this) {
+ UpdateAnimationSingleFrame(super);
- if (!(this->frame & ANIM_DONE)) {
+ if (!(super->frame & ANIM_DONE)) {
return;
}
Lakitu_SpawnLightning(this);
- this->action = LIGHTNING_DELAY;
- this->hitType = 0x42;
+ super->action = LIGHTNING_DELAY;
+ super->hitType = 0x42;
- if ((Random() & 1) && !this->field_0x78.HALF.HI) {
- this->timer = 15;
+ if ((Random() & 1) && !this->unk_79) {
+ super->timer = 15;
- this->field_0x78.HALF.HI = TRUE;
+ this->unk_79 = TRUE;
} else {
- this->timer = 30;
+ super->timer = 30;
- this->field_0x78.HALF.HI = FALSE;
+ this->unk_79 = FALSE;
- InitAnimationForceUpdate(this->child, this->animationState);
+ InitAnimationForceUpdate(super->child, super->animationState);
}
}
-void Lakitu_LightningDelay(Entity* this) {
- this->timer--;
+void Lakitu_LightningDelay(LakituEntity* this) {
+ super->timer--;
- if (this->timer != 0) {
+ if (super->timer != 0) {
return;
}
- if (this->field_0x78.HALF.HI == 1) {
+ if (this->unk_79 == 1) {
sub_0803CB34(this);
} else {
- this->action = IDLE;
- this->timer = 180;
+ super->action = IDLE;
+ super->timer = 180;
- InitAnimationForceUpdate(this, this->animationState + 4);
+ InitAnimationForceUpdate(super, super->animationState + 4);
}
}
-void Lakitu_Cloudless(Entity* this) {
- if (GravityUpdate(this, Q_8_8(24.0)) == 0 && this->animIndex <= 19) {
- InitAnimationForceUpdate(this, this->animationState + 20);
+void Lakitu_Cloudless(LakituEntity* this) {
+ if (GravityUpdate(super, Q_8_8(24.0)) == 0 && super->animIndex <= 19) {
+ InitAnimationForceUpdate(super, super->animationState + 20);
- this->spritePriority.b1 = 0;
+ super->spritePriority.b1 = 0;
}
- UpdateAnimationSingleFrame(this);
+ UpdateAnimationSingleFrame(super);
sub_0803CC08(this);
}
-bool32 sub_0803CA4C(Entity* this) {
- if (EntityWithinDistance(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x28) == 0) {
- if (EntityInRectRadius(this, &gPlayerEntity, 0x70, 0x50)) {
+bool32 sub_0803CA4C(LakituEntity* this) {
+ if (EntityWithinDistance(super, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x28) == 0) {
+ if (EntityInRectRadius(super, &gPlayerEntity, 0x70, 0x50)) {
return TRUE;
}
}
@@ -252,158 +260,158 @@ bool32 sub_0803CA4C(Entity* this) {
return FALSE;
}
-void sub_0803CA84(Entity* this, u32 unkParameter) {
- u32 altAnimState = GetFacingDirection(this, &gPlayerEntity);
+void sub_0803CA84(LakituEntity* this, u32 unkParameter) {
+ u32 altAnimState = GetFacingDirection(super, &gPlayerEntity);
- if (((altAnimState - 3) & 7) > 2 || ((this->animationState - (altAnimState >> 3)) & 3) > 1) {
+ if (((altAnimState - 3) & 7) > 2 || ((super->animationState - (altAnimState >> 3)) & 3) > 1) {
altAnimState = DirectionRoundUp(altAnimState) >> 3;
- if (altAnimState != this->animationState) {
- this->animationState = altAnimState;
+ if (altAnimState != super->animationState) {
+ super->animationState = altAnimState;
- InitAnimationForceUpdate(this, altAnimState + unkParameter);
- InitAnimationForceUpdate(this->child, altAnimState);
+ InitAnimationForceUpdate(super, altAnimState + unkParameter);
+ InitAnimationForceUpdate(super->child, altAnimState);
}
}
}
-void sub_0803CAD0(Entity* this) {
- if (!EntityWithinDistance(this, this->field_0x74.HWORD, this->field_0x76.HWORD, 1)) {
- this->direction =
- CalculateDirectionTo(this->x.HALF.HI, this->y.HALF.HI, this->field_0x74.HWORD, this->field_0x76.HWORD);
+void sub_0803CAD0(LakituEntity* this) {
+ if (!EntityWithinDistance(super, this->unk_74, this->unk_76, 1)) {
+ super->direction =
+ CalculateDirectionTo(super->x.HALF.HI, super->y.HALF.HI, this->unk_74, this->unk_76);
- ProcessMovement2(this);
+ ProcessMovement2(super);
}
}
-bool32 sub_0803CB04(Entity* this) {
+bool32 sub_0803CB04(LakituEntity* this) {
bool32 ret;
u8 delay;
- delay = --this->timer;
+ delay = --super->timer;
if (delay != 0) {
ret = FALSE;
} else {
sub_0803CB34(this);
- this->field_0x78.HALF.HI = delay;
+ this->unk_79 = delay;
- InitAnimationForceUpdate(this->child, this->animationState + 4);
+ InitAnimationForceUpdate(super->child, super->animationState + 4);
ret = TRUE;
}
return ret;
}
-void sub_0803CB34(Entity* this) {
- this->action = LIGHTNING_THROW;
- this->hitType = 0xa6;
+void sub_0803CB34(LakituEntity* this) {
+ super->action = LIGHTNING_THROW;
+ super->hitType = 0xa6;
- this->field_0x78.HALF.LO = GetFacingDirection(this, &gPlayerEntity);
+ this->unk_78 = GetFacingDirection(super, &gPlayerEntity);
- InitAnimationForceUpdate(this, this->animationState + 8);
+ InitAnimationForceUpdate(super, super->animationState + 8);
}
-void Lakitu_SpawnLightning(Entity* this) {
+void Lakitu_SpawnLightning(LakituEntity* this) {
Entity* lightning;
const OffsetCoords* offset;
- lightning = CreateProjectileWithParent(this, LAKITU_LIGHTNING, 0);
+ lightning = CreateProjectileWithParent(super, LAKITU_LIGHTNING, 0);
if (lightning == NULL) {
return;
}
- offset = &gUnk_080D0154[this->animationState];
+ offset = &gUnk_080D0154[super->animationState];
- lightning->direction = this->field_0x78.HALF.LO;
+ lightning->direction = this->unk_78;
- PositionRelative(this, lightning, Q_16_16(offset->x), Q_16_16(offset->y));
+ PositionRelative(super, lightning, Q_16_16(offset->x), Q_16_16(offset->y));
EnqueueSFX(SFX_193);
}
-void sub_0803CBAC(Entity* this) {
+void sub_0803CBAC(LakituEntity* this) {
Entity* cloud;
- cloud = this->child;
+ cloud = super->child;
if (cloud != NULL) {
cloud->flags |= ENT_COLLIDE;
cloud->hitType = 0x43;
}
- this->action = CLOUDLESS;
- this->spriteSettings.draw = 1;
+ super->action = CLOUDLESS;
+ super->spriteSettings.draw = 1;
- this->spritePriority.b1 = 1;
+ super->spritePriority.b1 = 1;
- this->flags2 &= 0x7b;
+ super->flags2 &= 0x7b;
- this->hitType = 0x42;
+ super->hitType = 0x42;
- InitAnimationForceUpdate(this, this->animationState + 16);
+ InitAnimationForceUpdate(super, super->animationState + 16);
}
-void sub_0803CC08(Entity* this) {
+void sub_0803CC08(LakituEntity* this) {
Entity* cloud;
Entity* fx;
const s32 diff = Q_8_8(3.0 / 128.0);
- cloud = this->child;
+ cloud = super->child;
if (cloud == NULL) {
return;
}
- if ((u32)(cloud->z.HALF.HI - this->z.HALF.HI) > 2) {
+ if ((u32)(cloud->z.HALF.HI - super->z.HALF.HI) > 2) {
return;
}
- if (this->zVelocity >= 0) {
+ if (super->zVelocity >= 0) {
return;
}
- if (!EntityWithinDistance(this, cloud->x.HALF.HI, cloud->y.HALF.HI, 6)) {
+ if (!EntityWithinDistance(super, cloud->x.HALF.HI, cloud->y.HALF.HI, 6)) {
return;
}
- fx = CreateFx(this, FX_DEATH, 0);
+ fx = CreateFx(super, FX_DEATH, 0);
if (fx != NULL) {
fx->x.HALF.HI += diff;
fx->y.HALF.HI += diff;
}
- fx = CreateFx(this, FX_DEATH, 0);
+ fx = CreateFx(super, FX_DEATH, 0);
if (fx != NULL) {
fx->x.HALF.HI -= diff;
fx->y.HALF.HI += diff;
}
- fx = CreateFx(this, FX_DEATH, 0);
+ fx = CreateFx(super, FX_DEATH, 0);
if (fx != NULL) {
fx->x.HALF.HI += diff;
fx->y.HALF.HI -= diff;
}
- fx = CreateFx(this, FX_DEATH, 0);
+ fx = CreateFx(super, FX_DEATH, 0);
if (fx != NULL) {
fx->x.HALF.HI -= diff;
fx->y.HALF.HI -= diff;
}
- this->child = NULL;
+ super->child = NULL;
DeleteEntity(cloud);
}
-void (*const Lakitu_Functions[])(Entity*) = {
- Lakitu_OnTick, Lakitu_OnCollision, GenericKnockback, GenericDeath, GenericConfused, Lakitu_OnGrabbed,
+void (*const Lakitu_Functions[])(LakituEntity*) = {
+ Lakitu_OnTick, Lakitu_OnCollision, (void (*)(LakituEntity*))GenericKnockback, (void (*)(LakituEntity*))GenericDeath, (void (*)(LakituEntity*))GenericConfused, Lakitu_OnGrabbed,
};
-void (*const LakituActionFuncs[])(Entity*) = {
+void (*const LakituActionFuncs[])(LakituEntity*) = {
Lakitu_Initialize, Lakitu_Hide, Lakitu_EndHide, Lakitu_Idle,
Lakitu_BeginHide, Lakitu_Lightning, Lakitu_LightningDelay, Lakitu_Cloudless,
};
-void (*const gUnk_080D0148[])(Entity*) = {
+void (*const gUnk_080D0148[])(LakituEntity*) = {
sub_0803C844,
sub_0803C850,
sub_0803C86C,
diff --git a/src/enemy/lakituCloud.c b/src/enemy/lakituCloud.c
index 6e2c7091..f86690d6 100644
--- a/src/enemy/lakituCloud.c
+++ b/src/enemy/lakituCloud.c
@@ -4,58 +4,66 @@
*
* @brief Lakitu Cloud enemy
*/
-
-#include "global.h"
+#define NENT_DEPRECATED
#include "asm.h"
-#include "entity.h"
-#include "player.h"
#include "effects.h"
#include "enemy.h"
+#include "entity.h"
+#include "object.h"
#include "physics.h"
+#include "player.h"
#include "room.h"
-#include "object.h"
-extern void (*const LakituCloud_Functions[6])(Entity*);
-extern void (*const gUnk_080D0430[3])(Entity*);
-extern void (*const gUnk_080D043C[3])(Entity*);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[12];
+ /*0x74*/ u16 unk_74;
+ /*0x76*/ u8 unused2[2];
+ /*0x78*/ u16 unk_78;
+ /*0x7a*/ u16 unk_7a;
+} LakituCloudEntity;
+
+extern void (*const LakituCloud_Functions[6])(LakituCloudEntity*);
+extern void (*const gUnk_080D0430[3])(LakituCloudEntity*);
+extern void (*const gUnk_080D043C[3])(LakituCloudEntity*);
-void sub_0803CE14(Entity*);
-void sub_0803CE3C(Entity*);
+void sub_0803CE14(LakituCloudEntity*);
+void sub_0803CE3C(LakituCloudEntity*);
-void LakituCloud(Entity* this) {
- LakituCloud_Functions[GetNextFunction(this)](this);
+void LakituCloud(LakituCloudEntity* this) {
+ LakituCloud_Functions[GetNextFunction(super)](this);
}
-void LakituCloud_OnTick(Entity* this) {
- gUnk_080D0430[this->action](this);
+void LakituCloud_OnTick(LakituCloudEntity* this) {
+ gUnk_080D0430[super->action](this);
}
-void LakituCloud_OnKnockback(Entity* this) {
- this->knockbackDuration = 0;
+void LakituCloud_OnKnockback(LakituCloudEntity* this) {
+ super->knockbackDuration = 0;
LakituCloud_OnTick(this);
}
-void LakituCloud_OnGrabbed(Entity* this) {
- if (!sub_0806F520(this)) {
- if (this->subAction == 2) {
+void LakituCloud_OnGrabbed(LakituCloudEntity* this) {
+ if (!sub_0806F520(super)) {
+ if (super->subAction == 2) {
sub_0803CE3C(this);
}
} else {
- gUnk_080D043C[this->subAction](this);
+ gUnk_080D043C[super->subAction](this);
}
}
-void sub_0803CD2C(Entity* this) {
- this->subAction = 1;
- this->gustJarTolerance = 0x3c;
+void sub_0803CD2C(LakituCloudEntity* this) {
+ super->subAction = 1;
+ super->gustJarTolerance = 0x3c;
}
-void sub_0803CD38(Entity* this) {
- sub_0806F4E8(this);
+void sub_0803CD38(LakituCloudEntity* this) {
+ sub_0806F4E8(super);
}
-void sub_0803CD40(Entity* this) {
- if (!sub_0806F3E4(this)) {
+void sub_0803CD40(LakituCloudEntity* this) {
+ if (!sub_0806F3E4(super)) {
return;
}
@@ -67,101 +75,103 @@ void sub_0803CD40(Entity* this) {
sub_0803CE3C(this);
}
-void sub_0803CD6C(Entity* this) {
+void sub_0803CD6C(LakituCloudEntity* this) {
Entity* lakitu;
- this->action = 1;
- this->z.HALF.HI = -2;
+ super->action = 1;
+ super->z.HALF.HI = -2;
// Set parent to lakitu
- lakitu = GetCurrentRoomProperty(this->type);
- this->child = lakitu;
- this->parent = lakitu;
+ lakitu = GetCurrentRoomProperty(super->type);
+ super->child = lakitu;
+ super->parent = lakitu;
- this->field_0x78.HWORD = this->x.HALF.HI;
- this->field_0x7a.HWORD = this->y.HALF.HI;
+ this->unk_78 = super->x.HALF.HI;
+ this->unk_7a = super->y.HALF.HI;
- InitAnimationForceUpdate(this, 4);
+ InitAnimationForceUpdate(super, 4);
sub_0803CE14(this);
}
-void sub_0803CDA8(Entity* this) {
- UpdateAnimationSingleFrame(this);
+void sub_0803CDA8(LakituCloudEntity* this) {
+ UpdateAnimationSingleFrame(super);
- if ((this->direction & 0x80) == 0) {
- LinearMoveUpdate(this);
+ if ((super->direction & 0x80) == 0) {
+ LinearMoveUpdate(super);
}
- if (--this->field_0x74.HWORD << 0x10 == 0) {
+ if (--this->unk_74 << 0x10 == 0) {
sub_0803CE14(this);
}
}
-void sub_0803CDD8(Entity* this) {
+void sub_0803CDD8(LakituCloudEntity* this) {
u8 one;
u8 draw;
- draw = this->spriteSettings.draw;
+ draw = super->spriteSettings.draw;
one = 1;
- this->spriteSettings.draw = draw ^ one;
+ super->spriteSettings.draw = draw ^ one;
- this->timer--;
+ super->timer--;
- if (this->timer == 0) {
- this->action = 1;
+ if (super->timer == 0) {
+ super->action = 1;
- COLLISION_ON(this);
+ COLLISION_ON(super);
- this->spriteSettings.draw = one;
+ super->spriteSettings.draw = one;
}
}
-void sub_0803CE14(Entity* this) {
+void sub_0803CE14(LakituCloudEntity* this) {
u8 direction;
- UpdateRailMovement(this, (u16**)&this->child, &this->field_0x74.HWORD);
+ UpdateRailMovement(super, (u16**)&super->child, &this->unk_74);
- direction = this->direction;
+ direction = super->direction;
if (direction & 0x80) {
return;
}
direction = direction / 8 + 4;
- InitAnimationForceUpdate(this, direction);
+ InitAnimationForceUpdate(super, direction);
}
-void sub_0803CE3C(Entity* this) {
- CreateFx(this, FX_DEATH, 0);
+void sub_0803CE3C(LakituCloudEntity* this) {
+ CreateFx(super, FX_DEATH, 0);
- this->action = 2;
- this->timer = 60;
+ super->action = 2;
+ super->timer = 60;
- COLLISION_OFF(this);
+ COLLISION_OFF(super);
- this->gustJarState &= 0xfb;
+ super->gustJarState &= 0xfb;
- this->x.HALF.HI = this->field_0x78.HWORD;
- this->y.HALF.HI = this->field_0x7a.HWORD;
+ super->x.HALF.HI = this->unk_78;
+ super->y.HALF.HI = this->unk_7a;
- this->child = this->parent;
+ super->child = super->parent;
sub_0803CE14(this);
}
-void (*const LakituCloud_Functions[])(Entity*) = {
+void (*const LakituCloud_Functions[])(LakituCloudEntity*) = {
LakituCloud_OnTick, LakituCloud_OnTick, LakituCloud_OnKnockback,
- GenericDeath, GenericConfused, LakituCloud_OnGrabbed,
+ (void (*)(LakituCloudEntity*))
+GenericDeath, (void (*)(LakituCloudEntity*))
+GenericConfused, LakituCloud_OnGrabbed,
};
-void (*const gUnk_080D0430[])(Entity*) = {
+void (*const gUnk_080D0430[])(LakituCloudEntity*) = {
sub_0803CD6C,
sub_0803CDA8,
sub_0803CDD8,
};
-void (*const gUnk_080D043C[])(Entity*) = {
+void (*const gUnk_080D043C[])(LakituCloudEntity*) = {
sub_0803CD2C,
sub_0803CD38,
sub_0803CD40,
diff --git a/src/enemy/leever.c b/src/enemy/leever.c
index 87f8dc9a..d7c49b23 100644
--- a/src/enemy/leever.c
+++ b/src/enemy/leever.c
@@ -4,20 +4,26 @@
*
* @brief Leever enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "physics.h"
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[12];
+ /*0x74*/ u16 unk_74;
+} LeeverEntity;
+
extern u32 sub_080B1B18(s32, s32, u32);
extern u32 sub_080B1AB4(s32, s32, u32);
extern Entity* gUnk_020000B0;
bool32 Leever_PlayerInRange(Entity*, s32);
-void Leever_Move(Entity*);
+void Leever_Move(LeeverEntity*);
-extern void (*const Leever_Functions[])(Entity*);
-extern void (*const gLeeverActions[])(Entity*);
+extern void (*const Leever_Functions[])(LeeverEntity*);
+extern void (*const gLeeverActions[])(LeeverEntity*);
extern const s8 gLeeverDrift[];
extern const u16 gUnk_080CA4CA[];
@@ -32,95 +38,95 @@ enum {
LeeverForm_Blue,
};
-void Leever(Entity* this) {
- EnemyFunctionHandler(this, Leever_Functions);
- SetChildOffset(this, 0, 1, -0x10);
+void Leever(LeeverEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)Leever_Functions);
+ SetChildOffset(super, 0, 1, -0x10);
}
-void Leever_OnTick(Entity* this) {
- gLeeverActions[this->action](this);
+void Leever_OnTick(LeeverEntity* this) {
+ gLeeverActions[super->action](this);
}
-void Leever_OnCollision(Entity* this) {
- if (this->contactFlags == 0x80) {
- if (this->action == 3) {
- this->field_0x74.HWORD = 1;
+void Leever_OnCollision(LeeverEntity* this) {
+ if (super->contactFlags == 0x80) {
+ if (super->action == 3) {
+ this->unk_74 = 1;
}
} else {
- if (this->confusedTime != 0) {
- Create0x68FX(this, FX_STARS);
+ if (super->confusedTime != 0) {
+ Create0x68FX(super, FX_STARS);
}
}
- EnemyFunctionHandlerAfterCollision(this, Leever_Functions);
+ EnemyFunctionHandlerAfterCollision(super, Leever_Functions);
}
-void Leever_OnDeath(Entity* this) {
- if (this->type == LeeverForm_Red) {
- GenericDeath(this);
+void Leever_OnDeath(LeeverEntity* this) {
+ if (super->type == LeeverForm_Red) {
+ GenericDeath(super);
} else {
- CreateDeathFx(this, 0xf1, 0);
+ CreateDeathFx(super, 0xf1, 0);
}
}
-void Leever_Initialize(Entity* this) {
- sub_0804A720(this);
- this->action = 1;
- this->timer = Random();
+void Leever_Initialize(LeeverEntity* this) {
+ sub_0804A720(super);
+ super->action = 1;
+ super->timer = Random();
}
-void Leever_Idle(Entity* this) {
- if (--this->timer == 0) {
- if (Leever_PlayerInRange(this, Random() & 0x1f)) {
- this->action = 2;
- this->spriteSettings.draw = TRUE;
- this->direction = (GetFacingDirection(this, gUnk_020000B0) + gLeeverDrift[Random() & 1]) & 0x1f;
- InitializeAnimation(this, LeeverAnimation_DigUp);
- UpdateSpriteForCollisionLayer(this);
+void Leever_Idle(LeeverEntity* this) {
+ if (--super->timer == 0) {
+ if (Leever_PlayerInRange(super, Random() & 0x1f)) {
+ super->action = 2;
+ super->spriteSettings.draw = TRUE;
+ super->direction = (GetFacingDirection(super, gUnk_020000B0) + gLeeverDrift[Random() & 1]) & 0x1f;
+ InitializeAnimation(super, LeeverAnimation_DigUp);
+ UpdateSpriteForCollisionLayer(super);
} else {
- this->timer = DirectionRound(Random()) + 8;
+ super->timer = DirectionRound(Random()) + 8;
}
}
}
-void Leever_DigUp(Entity* this) {
- GetNextFrame(this);
+void Leever_DigUp(LeeverEntity* this) {
+ GetNextFrame(super);
- if (this->frame & ANIM_DONE) {
- this->action = 3;
- if (this->type == LeeverForm_Red) {
- this->field_0x74.HWORD = 180;
+ if (super->frame & ANIM_DONE) {
+ super->action = 3;
+ if (super->type == LeeverForm_Red) {
+ this->unk_74 = 180;
} else {
- this->field_0x74.HWORD = 110;
+ this->unk_74 = 110;
}
- InitializeAnimation(this, LeeverAnimation_Attack);
- } else if ((this->frame & 1) != 0) {
- this->frame &= 0xfe;
- COLLISION_ON(this);
+ InitializeAnimation(super, LeeverAnimation_Attack);
+ } else if ((super->frame & 1) != 0) {
+ super->frame &= 0xfe;
+ COLLISION_ON(super);
}
}
-void Leever_Attack(Entity* this) {
+void Leever_Attack(LeeverEntity* this) {
Leever_Move(this);
- GetNextFrame(this);
+ GetNextFrame(super);
- if (--this->field_0x74.HWORD == 0) {
- this->action = 4;
- COLLISION_OFF(this);
- InitializeAnimation(this, LeeverAnimation_DigDown);
+ if (--this->unk_74 == 0) {
+ super->action = 4;
+ COLLISION_OFF(super);
+ InitializeAnimation(super, LeeverAnimation_DigDown);
}
}
-void Leever_DigDown(Entity* this) {
+void Leever_DigDown(LeeverEntity* this) {
Leever_Move(this);
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 1;
- this->timer = 240;
- this->spriteSettings.draw = FALSE;
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 1;
+ super->timer = 240;
+ super->spriteSettings.draw = FALSE;
}
}
-u32 sub_0801FDE4(Entity* ent, s32 x, s32 y) {
+u32 sub_0801FDE4(Entity* entity, s32 x, s32 y) {
u32 uVar3;
const u16* puVar4;
@@ -130,9 +136,9 @@ u32 sub_0801FDE4(Entity* ent, s32 x, s32 y) {
uVar3 = sub_080B1AB4(x, y, gUnk_020000B0->collisionLayer);
for (puVar4 = gUnk_080CA4CA; *puVar4 != (u16)-1;) {
if (*puVar4++ == uVar3) {
- ent->x.HALF.HI = (x & 0xfff0) + 8;
- ent->y.HALF.HI = (y & 0xfff0) + 8;
- ent->collisionLayer = gUnk_020000B0->collisionLayer;
+ entity->x.HALF.HI = (x & 0xfff0) + 8;
+ entity->y.HALF.HI = (y & 0xfff0) + 8;
+ entity->collisionLayer = gUnk_020000B0->collisionLayer;
return 1;
}
}
@@ -140,12 +146,12 @@ u32 sub_0801FDE4(Entity* ent, s32 x, s32 y) {
}
}
-bool32 Leever_PlayerInRange(Entity* ent, s32 arg2) {
+bool32 Leever_PlayerInRange(Entity* entity, s32 arg2) {
s32 sin, cos;
s32 x, y;
u32 i;
- if (sub_08049FDC(ent, 1) == 0) {
+ if (sub_08049FDC(entity, 1) == 0) {
return 0;
} else {
x = gUnk_020000B0->x.WORD;
@@ -155,7 +161,7 @@ bool32 Leever_PlayerInRange(Entity* ent, s32 arg2) {
for (i = 0; i < 8; i++) {
x += sin;
y += -cos;
- if (sub_0801FDE4(ent, x >> 0x10, y >> 0x10) == 0) {
+ if (sub_0801FDE4(entity, x >> 0x10, y >> 0x10) == 0) {
return 0;
}
}
@@ -163,37 +169,37 @@ bool32 Leever_PlayerInRange(Entity* ent, s32 arg2) {
}
}
-void Leever_Move(Entity* this) {
- if (sub_08049FDC(this, 1) == 0) {
- this->field_0x74.HWORD = 1;
+void Leever_Move(LeeverEntity* this) {
+ if (sub_08049FDC(super, 1) == 0) {
+ this->unk_74 = 1;
}
- this->speed = (this->frame & 0xf) * 0x20;
- if (this->type == LeeverForm_Red) {
- if ((this->subtimer++ & 0xf) == 0) {
- sub_08004596(this, sub_0800132C(this, gUnk_020000B0));
+ super->speed = (super->frame & 0xf) * 0x20;
+ if (super->type == LeeverForm_Red) {
+ if ((super->subtimer++ & 0xf) == 0) {
+ sub_08004596(super, sub_0800132C(super, gUnk_020000B0));
}
} else {
- this->speed += 0x40;
- if ((this->subtimer++ & 0x7) == 0) {
- sub_08004596(this, sub_0800132C(this, gUnk_020000B0));
+ super->speed += 0x40;
+ if ((super->subtimer++ & 0x7) == 0) {
+ sub_08004596(super, sub_0800132C(super, gUnk_020000B0));
}
}
- ProcessMovement0(this);
+ ProcessMovement0(super);
}
// clang-format off
-void (*const Leever_Functions[])(Entity*) = {
+void (*const Leever_Functions[])(LeeverEntity*) = {
Leever_OnTick,
Leever_OnCollision,
- GenericKnockback,
+ (void (*)(LeeverEntity*))GenericKnockback,
Leever_OnDeath,
- GenericConfused,
+ (void (*)(LeeverEntity*))GenericConfused,
Leever_OnTick,
};
-void (*const gLeeverActions[])(Entity*) = {
+void (*const gLeeverActions[])(LeeverEntity*) = {
Leever_Initialize,
Leever_Idle,
Leever_DigUp,
diff --git a/src/enemy/likeLike.c b/src/enemy/likeLike.c
index 886aa8b7..859bbd46 100644
--- a/src/enemy/likeLike.c
+++ b/src/enemy/likeLike.c
@@ -4,13 +4,12 @@
*
* @brief Like Like enemy
*/
-
#define NENT_DEPRECATED
#include "enemy.h"
+#include "item.h"
#include "message.h"
-#include "save.h"
#include "object.h"
-#include "item.h"
+#include "save.h"
typedef struct {
Entity base;
diff --git a/src/enemy/madderpillar.c b/src/enemy/madderpillar.c
index ad81c2d4..4666b7fd 100644
--- a/src/enemy/madderpillar.c
+++ b/src/enemy/madderpillar.c
@@ -4,49 +4,71 @@
*
* @brief Madderpillar enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
#include "hitbox.h"
-void sub_08029E0C(Entity*);
-void sub_08029EEC(Entity*);
-void sub_0802A098(Entity*);
-void sub_0802A16C(Entity*);
-void sub_0802A058(Entity*);
-bool32 sub_0802A14C(Entity*);
-void sub_0802A18C(Entity*);
-bool32 sub_08029FE4(Entity*);
-void sub_08029FB4(Entity*, u32, u32);
-void sub_0802A0F8(Entity*);
-void sub_08029F0C(Entity*);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[12];
+ /*0x74*/ u8 unk_74;
+ /*0x75*/ u8 unk_75;
+ /*0x76*/ u8 unused2[1];
+ /*0x77*/ u8 unk_77;
+ /*0x78*/ union SplitHWord unk_78;
+ /*0x7a*/ union SplitHWord unk_7a;
+ /*0x7c*/ u8 unk_7c;
+ /*0x7d*/ u8 unk_7d;
+ /*0x7e*/ u8 unk_7e;
+ /*0x7f*/ u8 unk_7f;
+ /*0x80*/ u8 unk_80;
+ /*0x81*/ u8 unk_81;
+ /*0x82*/ u8 unk_82;
+ /*0x83*/ u8 unk_83;
+ /*0x84*/ u8 unk_84;
+ /*0x85*/ u8 unk_85;
+ /*0x86*/ u8 unk_86;
+} MadderpillarEntity;
+
+void sub_08029E0C(MadderpillarEntity* this);
+void sub_08029EEC(MadderpillarEntity* this);
+void sub_0802A098(MadderpillarEntity* this);
+void sub_0802A16C(MadderpillarEntity* this);
+void sub_0802A058(MadderpillarEntity* this);
+bool32 sub_0802A14C(MadderpillarEntity* this);
+void sub_0802A18C(MadderpillarEntity* this);
+bool32 sub_08029FE4(MadderpillarEntity* this);
+void sub_08029FB4(MadderpillarEntity* this, u32, u32);
+void sub_0802A0F8(MadderpillarEntity* this);
+void sub_08029F0C(MadderpillarEntity* this);
extern s16 gUnk_080B4488[];
-extern void (*const gUnk_080CCD44[])(Entity*);
-extern void (*const Madderpillar_Functions[])(Entity*);
-extern void (*const gUnk_080CCD78[])(Entity*);
-extern void (*const gUnk_080CCD88[])(Entity*);
+extern void (*const gUnk_080CCD44[])(MadderpillarEntity*);
+extern void (*const Madderpillar_Functions[])(MadderpillarEntity*);
+extern void (*const gUnk_080CCD78[])(MadderpillarEntity*);
+extern void (*const gUnk_080CCD88[])(MadderpillarEntity*);
extern const u8 gUnk_080CCDA0[];
-extern void (*const gUnk_080CCDA8[])(Entity*);
+extern void (*const gUnk_080CCDA8[])(MadderpillarEntity*);
extern const u8 gUnk_080CCDC8[];
extern const u16 gUnk_080CCDD4[];
-void Madderpillar(Entity* this) {
- gUnk_080CCD44[this->type](this);
+void Madderpillar(MadderpillarEntity* this) {
+ gUnk_080CCD44[super->type](this);
}
-void sub_08029870(Entity* this) {
- Madderpillar_Functions[GetNextFunction(this)](this);
+void sub_08029870(MadderpillarEntity* this) {
+ Madderpillar_Functions[GetNextFunction(super)](this);
}
-void Madderpillar_OnTick(Entity* this) {
- gUnk_080CCD78[this->action](this);
+void Madderpillar_OnTick(MadderpillarEntity* this) {
+ gUnk_080CCD78[super->action](this);
}
-void Madderpillar_OnCollision(Entity* this) {
- if (this->action == 1) {
- switch (this->contactFlags & 0x7f) {
+void Madderpillar_OnCollision(MadderpillarEntity* this) {
+ if (super->action == 1) {
+ switch (super->contactFlags & 0x7f) {
case 0:
case 1:
case 2:
@@ -57,273 +79,273 @@ void Madderpillar_OnCollision(Entity* this) {
case 0x1e:
break;
default:
- this->action = 2;
- this->timer = 0;
- this->hitType = 0x6b;
- this->field_0x76.HALF.HI = 0;
- ChangeObjPalette(this, 0x7f);
+ super->action = 2;
+ super->timer = 0;
+ super->hitType = 0x6b;
+ this->unk_77 = 0;
+ ChangeObjPalette(super, 0x7f);
EnqueueSFX(SFX_HIT);
- this->child->action = 2;
+ super->child->action = 2;
break;
}
}
- EnemyFunctionHandlerAfterCollision(this, Madderpillar_Functions);
+ EnemyFunctionHandlerAfterCollision(super, Madderpillar_Functions);
}
-void Madderpillar_OnDeath(Entity* this) {
- if (this->subtimer) {
- this->subtimer--;
+void Madderpillar_OnDeath(MadderpillarEntity* this) {
+ if (super->subtimer) {
+ super->subtimer--;
} else {
- GenericDeath(this);
+ GenericDeath(super);
}
}
-void Madderpillar_OnGrabbed(Entity* this) {
+void Madderpillar_OnGrabbed(MadderpillarEntity* this) {
/* ... */
}
-void sub_0802999C(Entity* this) {
+void sub_0802999C(MadderpillarEntity* this) {
if (gEntCount < 0x44) {
Entity *ent1, *ent2, *ent3, *ent4, *ent5, *ent6;
ent1 = CreateEnemy(MADDERPILLAR, 1);
- ent1->parent = this;
- PositionRelative(this, ent1, 0, 5);
- this->child = ent1;
+ ent1->parent = super;
+ PositionRelative(super, ent1, 0, 5);
+ super->child = ent1;
ent2 = CreateEnemy(MADDERPILLAR, 2);
- ent2->parent = this;
- PositionRelative(this, ent2, 0, 4);
+ ent2->parent = super;
+ PositionRelative(super, ent2, 0, 4);
ent1->child = ent2;
ent3 = CreateEnemy(MADDERPILLAR, 3);
- ent3->parent = this;
- PositionRelative(this, ent3, 0, 3);
+ ent3->parent = super;
+ PositionRelative(super, ent3, 0, 3);
ent2->child = ent3;
ent4 = CreateEnemy(MADDERPILLAR, 4);
- ent4->parent = this;
- PositionRelative(this, ent4, 0, 2);
+ ent4->parent = super;
+ PositionRelative(super, ent4, 0, 2);
ent3->child = ent4;
ent5 = CreateEnemy(MADDERPILLAR, 5);
- ent5->parent = this;
- PositionRelative(this, ent5, 0, 1);
+ ent5->parent = super;
+ PositionRelative(super, ent5, 0, 1);
ent4->child = ent5;
ent6 = CreateEnemy(MADDERPILLAR, 6);
- ent6->child = this;
- ent6->parent = this;
- PositionRelative(this, ent6, 0, 0);
+ ent6->child = super;
+ ent6->parent = super;
+ PositionRelative(super, ent6, 0, 0);
ent5->child = ent6;
- this->action = 1;
- COLLISION_ON(this);
- this->direction = DirectionRound(Random());
- this->speed = 0xa0;
- this->animationState = 0xff;
- this->y.WORD += 6;
- this->parent = this;
- this->field_0x74.HALF.LO = 0xff;
- this->field_0x74.HALF.HI = 0;
- this->field_0x76.HALF.HI = 1;
+ super->action = 1;
+ COLLISION_ON(super);
+ super->direction = DirectionRound(Random());
+ super->speed = 0xa0;
+ super->animationState = 0xff;
+ super->y.WORD += 6;
+ super->parent = super;
+ this->unk_74 = 0xff;
+ this->unk_75 = 0;
+ this->unk_77 = 1;
sub_08029E0C(this);
sub_08029EEC(this);
}
}
-void sub_08029A94(Entity* this) {
- UpdateAnimationSingleFrame(this);
+void sub_08029A94(MadderpillarEntity* this) {
+ UpdateAnimationSingleFrame(super);
sub_0802A098(this);
}
-void sub_08029AA4(Entity* this) {
- if (this->field_0x76.HALF.HI != 0) {
- this->action = 3;
- this->speed = 0x108;
- this->hitType = 0x6a;
- this->field_0x7a.HWORD = 0x168;
- this->field_0x74.HALF.HI = 4;
+void sub_08029AA4(MadderpillarEntity* this) {
+ if (this->unk_77 != 0) {
+ super->action = 3;
+ super->speed = 0x108;
+ super->hitType = 0x6a;
+ this->unk_7a.HWORD = 0x168;
+ this->unk_75 = 4;
sub_08029EEC(this);
EnqueueSFX(SFX_19D);
}
}
-void sub_08029AE0(Entity* this) {
- UpdateAnimationSingleFrame(this);
+void sub_08029AE0(MadderpillarEntity* this) {
+ UpdateAnimationSingleFrame(super);
sub_0802A16C(this);
sub_0802A098(this);
- if (--this->field_0x7a.HWORD == 0) {
- this->action = 1;
- this->speed = 0xa0;
- this->field_0x74.HALF.HI = 0;
+ if (--this->unk_7a.HWORD == 0) {
+ super->action = 1;
+ super->speed = 0xa0;
+ this->unk_75 = 0;
sub_08029EEC(this);
- ChangeObjPalette(this, 0x77);
+ ChangeObjPalette(super, 0x77);
EnqueueSFX(SFX_182);
}
}
-void sub_08029B2C(Entity* this) {
+void sub_08029B2C(MadderpillarEntity* this) {
if (sub_0802A14C(this)) {
- if (this->field_0x86.HALF.LO) {
- if (--this->timer == 0) {
- CreateFx(this, FX_GIANT_EXPLOSION3, 0);
- DeleteEntity(this);
+ if (this->unk_86) {
+ if (--super->timer == 0) {
+ CreateFx(super, FX_GIANT_EXPLOSION3, 0);
+ DeleteEntity(super);
}
} else {
- COLLISION_OFF(this);
- this->timer = -(this->type * 15 - 90);
- this->field_0x86.HALF.LO = 1;
+ COLLISION_OFF(super);
+ super->timer = -(super->type * 15 - 90);
+ this->unk_86 = 1;
}
} else {
- gUnk_080CCD88[this->action](this);
+ gUnk_080CCD88[super->action](this);
}
}
-void sub_08029B90(Entity* this) {
- this->action = 1;
- this->spriteSettings.draw = 1;
+void sub_08029B90(MadderpillarEntity* this) {
+ super->action = 1;
+ super->spriteSettings.draw = 1;
sub_0802A058(this);
- if (this->type < 2) {
- InitializeAnimation(this, 0);
+ if (super->type < 2) {
+ InitializeAnimation(super, 0);
} else {
- InitializeAnimation(this, 4);
+ InitializeAnimation(super, 4);
}
}
-void sub_08029BC4(Entity* this) {
+void sub_08029BC4(MadderpillarEntity* this) {
u32 uVar1;
u32 uVar2;
sub_0802A18C(this);
- uVar1 = this->x.HALF.HI;
- uVar2 = this->y.HALF.HI;
+ uVar1 = super->x.HALF.HI;
+ uVar2 = super->y.HALF.HI;
if (sub_08029FE4(this)) {
u32 index;
- if (this->type < 2) {
+ if (super->type < 2) {
index = 0;
} else {
index = 4;
}
- InitializeAnimation(this, this->animationState + index);
+ InitializeAnimation(super, super->animationState + index);
}
- sub_08029FB4(this, this->x.HALF.HI - uVar1, this->y.HALF.HI - uVar2);
+ sub_08029FB4(this, super->x.HALF.HI - uVar1, super->y.HALF.HI - uVar2);
}
-void sub_08029C08(Entity* this) {
- this->action = 3;
- this->timer = gUnk_080CCDA0[this->type];
- this->hitType = 0x6b;
- this->child->action = 2;
+void sub_08029C08(MadderpillarEntity* this) {
+ super->action = 3;
+ super->timer = gUnk_080CCDA0[super->type];
+ super->hitType = 0x6b;
+ super->child->action = 2;
}
-void sub_08029C2C(Entity* this) {
- if (--this->timer == 0) {
- this->action = 4;
- ChangeObjPalette(this, 0x7f);
+void sub_08029C2C(MadderpillarEntity* this) {
+ if (--super->timer == 0) {
+ super->action = 4;
+ ChangeObjPalette(super, 0x7f);
EnqueueSFX(SFX_MENU_CANCEL);
}
}
-void sub_08029C50(Entity* this) {
- if (this->parent->field_0x76.HALF.HI != 0) {
- this->action = 5;
- this->hitType = 0x6a;
+void sub_08029C50(MadderpillarEntity* this) {
+ if (((MadderpillarEntity*)super->parent)->unk_77 != 0) {
+ super->action = 5;
+ super->hitType = 0x6a;
}
}
-void sub_08029C6C(Entity* this) {
+void sub_08029C6C(MadderpillarEntity* this) {
sub_0802A18C(this);
sub_08029BC4(this);
- if (this->parent->action != 3) {
- this->action = 1;
- ChangeObjPalette(this, 0x77);
+ if (super->parent->action != 3) {
+ super->action = 1;
+ ChangeObjPalette(super, 0x77);
} else {
sub_0802A16C(this);
}
}
-void sub_08029C98(Entity* this) {
+void sub_08029C98(MadderpillarEntity* this) {
if (sub_0802A14C(this)) {
- CreateFx(this, FX_GIANT_EXPLOSION3, 0);
- DeleteEntity(this);
+ CreateFx(super, FX_GIANT_EXPLOSION3, 0);
+ DeleteEntity(super);
} else {
- gUnk_080CCDA8[this->action](this);
+ gUnk_080CCDA8[super->action](this);
}
}
-void sub_08029CCC(Entity* this) {
- this->action = 1;
- this->spriteSettings.draw = 1;
+void sub_08029CCC(MadderpillarEntity* this) {
+ super->action = 1;
+ super->spriteSettings.draw = 1;
sub_0802A058(this);
- InitializeAnimation(this, 8);
+ InitializeAnimation(super, 8);
}
-void sub_08029CF0(Entity* this) {
+void sub_08029CF0(MadderpillarEntity* this) {
if (sub_08029FE4(this)) {
- InitializeAnimation(this, this->animationState + 8);
+ InitializeAnimation(super, super->animationState + 8);
}
}
-void sub_08029D08(Entity* this) {
- this->action = 3;
- this->timer = 71;
+void sub_08029D08(MadderpillarEntity* this) {
+ super->action = 3;
+ super->timer = 71;
}
-void sub_08029D14(Entity* this) {
- if (this->timer != 0) {
- if (--this->timer == 0) {
- InitializeAnimation(this, this->animationState + 0xc);
- ChangeObjPalette(this, 0x7f);
+void sub_08029D14(MadderpillarEntity* this) {
+ if (super->timer != 0) {
+ if (--super->timer == 0) {
+ InitializeAnimation(super, super->animationState + 0xc);
+ ChangeObjPalette(super, 0x7f);
EnqueueSFX(SFX_MENU_CANCEL);
}
} else {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 4;
- this->timer = 120;
- this->hitType = 0x6c;
- this->hitbox = (Hitbox*)&gUnk_080FD298;
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 4;
+ super->timer = 120;
+ super->hitType = 0x6c;
+ super->hitbox = (Hitbox*)&gUnk_080FD298;
EnqueueSFX(SFX_6B);
}
}
}
-void sub_08029D78(Entity* this) {
+void sub_08029D78(MadderpillarEntity* this) {
sub_0802A0F8(this);
- if (--this->timer == 0) {
- this->action = 5;
- this->hitType = 0x6a;
- this->hitbox = (Hitbox*)&gUnk_080FD2A0;
- InitializeAnimation(this, this->animationState + 0x10);
+ if (--super->timer == 0) {
+ super->action = 5;
+ super->hitType = 0x6a;
+ super->hitbox = (Hitbox*)&gUnk_080FD2A0;
+ InitializeAnimation(super, super->animationState + 0x10);
}
}
-void sub_08029DAC(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 6;
- this->parent->field_0x76.HALF.HI = 1;
- InitializeAnimation(this, this->animationState + 8);
+void sub_08029DAC(MadderpillarEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 6;
+ ((MadderpillarEntity*)super->parent)->unk_77 = 1;
+ InitializeAnimation(super, super->animationState + 8);
}
}
-void sub_08029DDC(Entity* this) {
- this->action = 7;
+void sub_08029DDC(MadderpillarEntity* this) {
+ super->action = 7;
}
-void sub_08029DE4(Entity* this) {
+void sub_08029DE4(MadderpillarEntity* this) {
sub_08029CF0(this);
- if (this->parent->action != 3) {
- this->action = 1;
- ChangeObjPalette(this, 0x77);
+ if (super->parent->action != 3) {
+ super->action = 1;
+ ChangeObjPalette(super, 0x77);
} else {
sub_0802A16C(this);
}
}
-void sub_08029E0C(Entity* this) {
+void sub_08029E0C(MadderpillarEntity* this) {
u32 tile;
s32 uVar4;
s32 iVar3;
@@ -333,16 +355,16 @@ void sub_08029E0C(Entity* this) {
u32 local_24;
u32 dir;
- uVar2 = (this->direction >> 3) * 3;
+ uVar2 = (super->direction >> 3) * 3;
ptr = &gUnk_080CCDC8[uVar2];
uVar4 = (Random() & 1) * 2 - 1;
iVar3 = ((s32)Random() & 0xf) % 3;
- tile = COORD_TO_TILE(this);
+ tile = COORD_TO_TILE(super);
for (i = 0; i < 3; i++) {
dir = ptr[iVar3];
- if (sub_080B1B44(gUnk_080B4488[dir >> 3] + tile, this->collisionLayer) == 0) {
+ if (sub_080B1B44(gUnk_080B4488[dir >> 3] + tile, super->collisionLayer) == 0) {
local_24 = dir;
- if (this->direction - this->field_0x74.HALF.LO != dir - this->direction)
+ if (super->direction - this->unk_74 != dir - super->direction)
break;
}
iVar3 = (iVar3 + uVar4 + 3) % 3;
@@ -352,61 +374,61 @@ void sub_08029E0C(Entity* this) {
dir = local_24;
}
- if (this->field_0x74.HALF.LO != this->direction) {
- this->field_0x74.HALF.LO = this->direction;
+ if (this->unk_74 != super->direction) {
+ this->unk_74 = super->direction;
}
- this->direction = dir;
+ super->direction = dir;
sub_08029F0C(this);
}
-void sub_08029EEC(Entity* this) {
- u32 uVar1 = (this->direction >> 3) + this->field_0x74.HALF.HI;
- if (uVar1 != this->animationState) {
- this->animationState = uVar1;
- InitAnimationForceUpdate(this, uVar1);
+void sub_08029EEC(MadderpillarEntity* this) {
+ u32 uVar1 = (super->direction >> 3) + this->unk_75;
+ if (uVar1 != super->animationState) {
+ super->animationState = uVar1;
+ InitAnimationForceUpdate(super, uVar1);
}
}
-void sub_08029F0C(Entity* this) {
- switch (this->direction >> 3) {
+void sub_08029F0C(MadderpillarEntity* this) {
+ switch (super->direction >> 3) {
case 0:
- this->field_0x78.HWORD = this->y.HALF.HI - 0x10;
+ this->unk_78.HWORD = super->y.HALF.HI - 0x10;
break;
case 1:
- this->field_0x78.HWORD = this->x.HALF.HI + 0x10;
+ this->unk_78.HWORD = super->x.HALF.HI + 0x10;
break;
case 2:
- this->field_0x78.HWORD = this->y.HALF.HI + 0x10;
+ this->unk_78.HWORD = super->y.HALF.HI + 0x10;
break;
case 3:
- this->field_0x78.HWORD = this->x.HALF.HI - 0x10;
+ this->unk_78.HWORD = super->x.HALF.HI - 0x10;
break;
}
}
-bool32 sub_08029F48(Entity* this) {
- switch (this->direction >> 3) {
+bool32 sub_08029F48(MadderpillarEntity* this) {
+ switch (super->direction >> 3) {
case 0:
- if (this->y.HALF.HI <= this->field_0x78.HWORD) {
- this->y.HALF.HI = this->field_0x78.HWORD;
+ if (super->y.HALF.HI <= this->unk_78.HWORD) {
+ super->y.HALF.HI = this->unk_78.HWORD;
return TRUE;
}
break;
case 1:
- if (this->x.HALF.HI >= this->field_0x78.HWORD) {
- this->x.HALF.HI = this->field_0x78.HWORD;
+ if (super->x.HALF.HI >= this->unk_78.HWORD) {
+ super->x.HALF.HI = this->unk_78.HWORD;
return TRUE;
}
break;
case 2:
- if (this->y.HALF.HI >= this->field_0x78.HWORD) {
- this->y.HALF.HI = this->field_0x78.HWORD;
+ if (super->y.HALF.HI >= this->unk_78.HWORD) {
+ super->y.HALF.HI = this->unk_78.HWORD;
return TRUE;
}
break;
case 3:
- if (this->x.HALF.HI <= this->field_0x78.HWORD) {
- this->x.HALF.HI = this->field_0x78.HWORD;
+ if (super->x.HALF.HI <= this->unk_78.HWORD) {
+ super->x.HALF.HI = this->unk_78.HWORD;
return TRUE;
}
break;
@@ -415,23 +437,23 @@ bool32 sub_08029F48(Entity* this) {
return FALSE;
}
-void sub_08029FB4(Entity* this, u32 x, u32 y) {
- u8* dst = (u8*)&this->child->field_0x78;
- s32 unk = this->parent->field_0x7c.BYTES.byte2;
+void sub_08029FB4(MadderpillarEntity* this, u32 x, u32 y) {
+ u8* dst = (u8*)&((MadderpillarEntity*)super->child)->unk_78;
+ s32 unk = ((MadderpillarEntity*)super->parent)->unk_7e;
u8 idx = unk % 0xe;
dst[idx] = ((x + 8) & 0xf) | (((y + 8) & 0xf) << 4);
}
/* The optimizer is strong within you. */
-bool32 sub_08029FE4(Entity* this) {
+bool32 sub_08029FE4(MadderpillarEntity* this) {
u8 state;
- u8* dst = (u8*)&this->field_0x78;
- s32 unk = this->parent->field_0x7c.BYTES.byte2 + 1;
+ u8* dst = (u8*)&this->unk_78;
+ s32 unk = ((MadderpillarEntity*)super->parent)->unk_7e + 1;
s8 iVar6 = (dst[unk % 0xe] & 0xf) - 8;
s8 iVar5 = (dst[unk % 0xe] >> 4) - 8;
- this->x.HALF.HI += iVar6;
- this->y.HALF.HI += iVar5;
- GetNextFrame(this);
+ super->x.HALF.HI += iVar6;
+ super->y.HALF.HI += iVar5;
+ GetNextFrame(super);
state = 0xff;
if (iVar6 != 0) {
@@ -450,72 +472,72 @@ bool32 sub_08029FE4(Entity* this) {
}
}
- if (state != 0xff && state != this->animationState) {
- this->animationState = state;
+ if (state != 0xff && state != super->animationState) {
+ super->animationState = state;
return TRUE;
} else {
return FALSE;
}
}
-void sub_0802A058(Entity* this) {
- this->field_0x78.HALF.LO = 0x88;
- this->field_0x78.HALF.HI = 0x88;
- this->field_0x7a.HALF.LO = 0x88;
- this->field_0x7a.HALF.HI = 0x88;
- this->field_0x7c.BYTES.byte0 = 0x88;
- this->field_0x7c.BYTES.byte1 = 0x88;
- this->field_0x7c.BYTES.byte2 = 0x88;
- this->field_0x7c.BYTES.byte3 = 0x88;
- this->field_0x80.HALF.LO = 0x88;
- this->field_0x80.HALF.HI = 0x88;
- this->field_0x82.HALF.LO = 0x88;
- this->field_0x82.HALF.HI = 0x88;
- this->cutsceneBeh.HALF.LO = 0x88;
- this->cutsceneBeh.HALF.HI = 0x88;
-}
-
-void sub_0802A098(Entity* this) {
+void sub_0802A058(MadderpillarEntity* this) {
+ this->unk_78.HALF.LO = 0x88;
+ this->unk_78.HALF.HI = 0x88;
+ this->unk_7a.HALF.LO = 0x88;
+ this->unk_7a.HALF.HI = 0x88;
+ this->unk_7c = 0x88;
+ this->unk_7d = 0x88;
+ this->unk_7e = 0x88;
+ this->unk_7f = 0x88;
+ this->unk_80 = 0x88;
+ this->unk_81 = 0x88;
+ this->unk_82 = 0x88;
+ this->unk_83 = 0x88;
+ this->unk_84 = 0x88;
+ this->unk_85 = 0x88;
+}
+
+void sub_0802A098(MadderpillarEntity* this) {
u32 uVar1;
u32 uVar2;
- s32 unk = (++this->field_0x7c.BYTES.byte2, this->field_0x7c.BYTES.byte2);
+ s32 unk = (++this->unk_7e, this->unk_7e);
u8 idx = unk % 0xe;
if (idx == 0) {
- this->field_0x7c.BYTES.byte2 = 0;
+ this->unk_7e = 0;
}
- uVar1 = this->x.HALF.HI;
- uVar2 = this->y.HALF.HI;
- ProcessMovement0(this);
+ uVar1 = super->x.HALF.HI;
+ uVar2 = super->y.HALF.HI;
+ ProcessMovement0(super);
if (sub_08029F48(this)) {
sub_08029E0C(this);
sub_08029EEC(this);
EnqueueSFX(SFX_PLACE_OBJ);
}
- sub_08029FB4(this, this->x.HALF.HI - uVar1, this->y.HALF.HI - uVar2);
+ sub_08029FB4(this, super->x.HALF.HI - uVar1, super->y.HALF.HI - uVar2);
}
-void sub_0802A0F8(Entity* this) {
- if (this->health != 0) {
- if ((this->contactFlags & 0x80) && this->iframes != 0) {
- Entity* ent = this;
+void sub_0802A0F8(MadderpillarEntity* this) {
+ if (super->health != 0) {
+ if ((super->contactFlags & 0x80) && super->iframes != 0) {
+ Entity* entity = super;
u32 i;
for (i = 0; i < 6; i++) {
- ent = ent->child;
- ent->iframes = this->iframes;
+ entity = entity->child;
+ entity->iframes = super->iframes;
}
}
} else {
- this->parent->flags &= ~ENT_COLLIDE;
- this->parent->health = 0;
- this->parent->subtimer = 105;
+ super->parent->flags &= ~ENT_COLLIDE;
+ super->parent->health = 0;
+ super->parent->subtimer = 105;
}
}
-bool32 sub_0802A14C(Entity* this) {
+bool32 sub_0802A14C(MadderpillarEntity* this) {
u32 ret = FALSE;
- if (this->parent->health == 0 || this->field_0x86.HALF.LO) {
+ if (super->parent->health == 0 || this->unk_86) {
ret = TRUE;
} else {
ret = FALSE;
@@ -523,13 +545,13 @@ bool32 sub_0802A14C(Entity* this) {
return ret;
}
-void sub_0802A16C(Entity* this) {
- ChangeObjPalette(this, gUnk_080CCDD4[this->parent->field_0x7a.HWORD >> 2 & 3]);
+void sub_0802A16C(MadderpillarEntity* this) {
+ ChangeObjPalette(super, gUnk_080CCDD4[((MadderpillarEntity*)super->parent)->unk_7a.HWORD >> 2 & 3]);
}
-void sub_0802A18C(Entity* this) {
- if (this->contactFlags & 0x80) {
- switch (this->contactFlags & 0x7f) {
+void sub_0802A18C(MadderpillarEntity* this) {
+ if (super->contactFlags & 0x80) {
+ switch (super->contactFlags & 0x7f) {
case 0:
case 1:
case 2:
@@ -547,7 +569,7 @@ void sub_0802A18C(Entity* this) {
}
// clang-format off
-void (*const gUnk_080CCD44[])(Entity*) = {
+void (*const gUnk_080CCD44[])(MadderpillarEntity*) = {
sub_08029870,
sub_08029B2C,
sub_08029B2C,
@@ -557,23 +579,23 @@ void (*const gUnk_080CCD44[])(Entity*) = {
sub_08029C98,
};
-void (*const Madderpillar_Functions[])(Entity*) = {
+void (*const Madderpillar_Functions[])(MadderpillarEntity*) = {
Madderpillar_OnTick,
Madderpillar_OnCollision,
Madderpillar_OnTick,
Madderpillar_OnDeath,
- GenericConfused,
+ (void (*)(MadderpillarEntity*))GenericConfused,
Madderpillar_OnGrabbed,
};
-void (*const gUnk_080CCD78[])(Entity*) = {
+void (*const gUnk_080CCD78[])(MadderpillarEntity*) = {
sub_0802999C,
sub_08029A94,
sub_08029AA4,
sub_08029AE0,
};
-void (*const gUnk_080CCD88[])(Entity*) = {
+void (*const gUnk_080CCD88[])(MadderpillarEntity*) = {
sub_08029B90,
sub_08029BC4,
sub_08029C08,
@@ -592,7 +614,7 @@ const u8 gUnk_080CCDA0[] = {
0x00,
};
-void (*const gUnk_080CCDA8[])(Entity*) = {
+void (*const gUnk_080CCDA8[])(MadderpillarEntity*) = {
sub_08029CCC,
sub_08029CF0,
sub_08029D08,
diff --git a/src/enemy/mazaalBracelet.c b/src/enemy/mazaalBracelet.c
index d21e8636..6a0228cb 100644
--- a/src/enemy/mazaalBracelet.c
+++ b/src/enemy/mazaalBracelet.c
@@ -4,11 +4,33 @@
*
* @brief Mazaal Bracelet enemy
*/
-
+//#define NENT_DEPRECATED
#include "enemy.h"
-#include "object.h"
#include "functions.h"
#include "hitbox.h"
+#include "object.h"
+
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[12];
+ /*0x74*/ u32 unk_74;
+// // Overlap of 4
+// /*0x74*/ u8 unk_74;
+// /*0x75*/ u8 unk_75;
+ /*0x76*/ u8 unused2[2];
+ /*0x78*/ u32 unk_78;
+// // Overlap of 4
+// /*0x78*/ u16 unk_78;
+ /*0x7a*/ u8 unused3[2];
+ /*0x7c*/ u8 unk_7c;
+ /*0x7d*/ u8 unk_7d;
+ /*0x7e*/ u16 unk_7e;
+ /*0x80*/ u8 unk_80;
+// // Overlap of 1
+// /*0x80*/ u16 unk_80;
+ /*0x82*/ u8 unused4[2];
+ /*0x84*/ u8 unk_84;
+} MazaalBraceletEntity;
void sub_0803B538(Entity*);
u32 sub_0803B4E4(Entity*);
@@ -134,27 +156,27 @@ void MazaalBracelet_OnTick(Entity* this) {
}
void MazaalBracelet_OnCollision(Entity* this) {
- Entity* ent;
+ Entity* entity;
if (this->type < 2) {
if (this->action != 0x2b) {
if ((0 < this->iframes) && ((this->contactFlags == 0x95 || (this->contactFlags == 0x8e)))) {
this->action = 0x28;
COLLISION_OFF(this);
- ent = this->parent;
- ent->field_0x7c.BYTES.byte1 = ent->field_0x7c.BYTES.byte1 | (this->type == 0 ? 1 : 2);
- ent->field_0x80.HALF.LO = (this->type == 0 ? 1 : 2) | ent->field_0x80.HALF.LO;
- ent = this->child;
- ent->iframes = this->iframes;
- ent = (*(Entity**)&this->field_0x74);
- ent->iframes = this->iframes;
+ entity = this->parent;
+ entity->field_0x7c.BYTES.byte1 = entity->field_0x7c.BYTES.byte1 | (this->type == 0 ? 1 : 2);
+ entity->field_0x80.HALF.LO = (this->type == 0 ? 1 : 2) | entity->field_0x80.HALF.LO;
+ entity = this->child;
+ entity->iframes = this->iframes;
+ entity = (*(Entity**)&this->field_0x74);
+ entity->iframes = this->iframes;
SoundReq(SFX_BOSS_HIT);
}
} else {
- ent = this->child;
- ent->iframes = this->iframes;
- ent = (*(Entity**)&this->field_0x74);
- ent->iframes = this->iframes;
+ entity = this->child;
+ entity->iframes = this->iframes;
+ entity = (*(Entity**)&this->field_0x74);
+ entity->iframes = this->iframes;
InitializeAnimation(this, 0x18);
InitAnimationForceUpdate(this->child, 9);
SoundReq(SFX_BOSS_HIT);
@@ -1357,10 +1379,10 @@ void sub_0803BA80(Entity* this) {
}
void sub_0803BA8C(Entity* this, u32 unk) {
- u32 sVar2;
+ u32 palette;
u32 tmp;
- sVar2 = 0;
+ palette = 0;
tmp = this->field_0x74.HALF.LO & 0xe0;
if ((this->field_0x74.HALF.LO & 0xe0) == 0) {
if (this->field_0x74.HALF.LO == 0) {
@@ -1368,9 +1390,9 @@ void sub_0803BA8C(Entity* this, u32 unk) {
this->field_0x74.HALF.HI = 0;
}
if (this->type == 2) {
- sVar2 = gUnk_080CFD30[this->field_0x74.HALF.HI];
+ palette = gUnk_080CFD30[this->field_0x74.HALF.HI];
} else {
- sVar2 = gUnk_080CFD44[this->field_0x74.HALF.HI];
+ palette = gUnk_080CFD44[this->field_0x74.HALF.HI];
}
}
this->field_0x74.HALF.LO++;
@@ -1381,14 +1403,14 @@ void sub_0803BA8C(Entity* this, u32 unk) {
if ((tmp & 0x80) == 0) {
this->field_0x74.HALF.LO |= 0x80;
if ((tmp & 0x20) != 0) {
- sVar2 = gUnk_080CFD58[this->type - 2];
+ palette = gUnk_080CFD58[this->type - 2];
} else {
- sVar2 = gUnk_080CFD5C[this->type - 2];
+ palette = gUnk_080CFD5C[this->type - 2];
}
}
}
- if (sVar2 != 0) {
- ChangeObjPalette(this, sVar2);
+ if (palette != 0) {
+ ChangeObjPalette(this, palette);
(*(Entity**)&this->parent->field_0x78)->palette.b.b0 = this->palette.raw << 0x1c >> 0x1c;
(*(Entity**)&this->parent->field_0x78)->palette.b.b4 = this->palette.b.b0;
this->parent->child->palette.b.b0 = this->palette.raw << 0x1c >> 0x1c;
diff --git a/src/enemy/mazaalHand.c b/src/enemy/mazaalHand.c
index df14d4bd..65b7d10a 100644
--- a/src/enemy/mazaalHand.c
+++ b/src/enemy/mazaalHand.c
@@ -4,7 +4,7 @@
*
* @brief Mazaal Hand enemy
*/
-
+#define NENT_DEPRECATED
#include "entity.h"
#include "hitbox.h"
diff --git a/src/enemy/mazaalHead.c b/src/enemy/mazaalHead.c
index a6a9ad92..32d00bdd 100644
--- a/src/enemy/mazaalHead.c
+++ b/src/enemy/mazaalHead.c
@@ -4,7 +4,7 @@
*
* @brief Mazaal Head enemy
*/
-
+//#define NENT_DEPRECATED
#include "area.h"
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/mazaalMacro.c b/src/enemy/mazaalMacro.c
index 2c8aa172..51e29b6d 100644
--- a/src/enemy/mazaalMacro.c
+++ b/src/enemy/mazaalMacro.c
@@ -4,46 +4,56 @@
*
* @brief Mazaal Macro enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
#include "screenTransitions.h"
#include "script.h"
#include "structures.h"
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[5];
+ /*0x6d*/ u8 unk_6d;
+ /*0x6e*/ u8 unused2[10];
+ /*0x78*/ u16 unk_78;
+ /*0x7a*/ u8 unused3[10];
+ /*0x84*/ ScriptExecutionContext* context;
+} MazaalMacroEntity;
+
extern void sub_0807B600(u32);
extern const u16 script_MazaalMacroDefeated[];
-void sub_08034E18(Entity*);
-void sub_08034FA0(Entity*);
-u32 sub_08035084(Entity*);
-void sub_08034F70(Entity*);
-void sub_08035120(Entity*);
-void sub_08035050(Entity*);
-
-void MazaalMacro_OnTick(Entity* this);
-void MazaalMacro_OnCollision(Entity* this);
-void MazaalMacro_OnDeath(Entity* this);
-void sub_08034CC4(Entity* this);
-void sub_08034D4C(Entity* this);
-void sub_08034DC8(Entity* this);
-void sub_08034E30(Entity* this);
-void sub_08034E68(Entity* this);
-void sub_08034EC0(Entity* this);
-void sub_08034ED8(Entity* this);
-void sub_08034EE4(Entity* this);
-void sub_08034F58(Entity* this);
-
-void (*const MazaalMacro_Functions[])(Entity*) = {
- MazaalMacro_OnTick, MazaalMacro_OnCollision, GenericKnockback, MazaalMacro_OnDeath, GenericConfused,
+void sub_08034E18(MazaalMacroEntity* this);
+void sub_08034FA0(MazaalMacroEntity* this);
+u32 sub_08035084(MazaalMacroEntity* this);
+void sub_08034F70(MazaalMacroEntity* this);
+void sub_08035120(MazaalMacroEntity* this);
+void sub_08035050(MazaalMacroEntity* this);
+
+void MazaalMacro_OnTick(MazaalMacroEntity* this);
+void MazaalMacro_OnCollision(MazaalMacroEntity* this);
+void MazaalMacro_OnDeath(MazaalMacroEntity* this);
+void sub_08034CC4(MazaalMacroEntity* this);
+void sub_08034D4C(MazaalMacroEntity* this);
+void sub_08034DC8(MazaalMacroEntity* this);
+void sub_08034E30(MazaalMacroEntity* this);
+void sub_08034E68(MazaalMacroEntity* this);
+void sub_08034EC0(MazaalMacroEntity* this);
+void sub_08034ED8(MazaalMacroEntity* this);
+void sub_08034EE4(MazaalMacroEntity* this);
+void sub_08034F58(MazaalMacroEntity* this);
+
+void (*const MazaalMacro_Functions[])(MazaalMacroEntity*) = {
+ MazaalMacro_OnTick, MazaalMacro_OnCollision, (void (*)(MazaalMacroEntity*))GenericKnockback, MazaalMacro_OnDeath, (void (*)(MazaalMacroEntity*))GenericConfused,
};
-void (*const gUnk_080CEEA4[])(Entity*) = {
+void (*const gUnk_080CEEA4[])(MazaalMacroEntity*) = {
sub_08034CC4,
sub_08034D4C,
sub_08034DC8,
};
-void (*const gUnk_080CEEB0[])(Entity*) = {
+void (*const gUnk_080CEEB0[])(MazaalMacroEntity*) = {
sub_08034E30, sub_08034E68, sub_08034EC0, sub_08034ED8, sub_08034EE4, sub_08034F58,
};
@@ -52,101 +62,101 @@ const u8 gUnk_080CEECC[] = { 0x58, 0x68, 0x88, 0x68, 0xb8, 0x68, 0x58, 0xa8, 0x8
const s16 gUnk_080CEED8[] = { -0x82, -0x81, -0x80, -0x7f, -0x7e, -0x42, -0x41, -0x40, -0x3f, -0x3e, -2, -1,
1, 2, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x7e, 0x7f, 0x80, 0x81, 0x82 };
-void MazaalMacro(Entity* this) {
- MazaalMacro_Functions[GetNextFunction(this)](this);
+void MazaalMacro(MazaalMacroEntity* this) {
+ MazaalMacro_Functions[GetNextFunction(super)](this);
}
-void MazaalMacro_OnTick(Entity* this) {
- if (this->type != 2) {
- gUnk_080CEEA4[this->action](this);
+void MazaalMacro_OnTick(MazaalMacroEntity* this) {
+ if (super->type != 2) {
+ gUnk_080CEEA4[super->action](this);
} else {
sub_08034E18(this);
}
}
-void MazaalMacro_OnCollision(Entity* this) {
+void MazaalMacro_OnCollision(MazaalMacroEntity* this) {
sub_08034FA0(this);
- EnemyFunctionHandlerAfterCollision(this, MazaalMacro_Functions);
+ EnemyFunctionHandlerAfterCollision(super, MazaalMacro_Functions);
}
-void MazaalMacro_OnDeath(Entity* this) {
- GenericDeath(this);
+void MazaalMacro_OnDeath(MazaalMacroEntity* this) {
+ GenericDeath(super);
}
-void sub_08034CC4(Entity* this) {
+void sub_08034CC4(MazaalMacroEntity* this) {
Entity* entity;
if (sub_08035084(this) != 0) {
- this->action = this->type + 1;
- this->subtimer = 0;
- this->field_0x6c.HALF.HI |= 1;
- this->field_0x78.HWORD = 0x4b0;
+ super->action = super->type + 1;
+ super->subtimer = 0;
+ this->unk_6d |= 1;
+ this->unk_78 = 0x4b0;
sub_08034F70(this);
- InitializeAnimation(this, this->type);
- SetTile(0x4022, COORD_TO_TILE(this), this->collisionLayer);
+ InitializeAnimation(super, super->type);
+ SetTile(0x4022, COORD_TO_TILE(super), super->collisionLayer);
entity = CreateEnemy(MAZAAL_MACRO, 2);
if (entity != NULL) {
- this->child = entity;
- entity->parent = this;
- CopyPosition(this, entity);
+ super->child = entity;
+ entity->parent = super;
+ CopyPosition(super, entity);
}
}
}
-void sub_08034D4C(Entity* this) {
+void sub_08034D4C(MazaalMacroEntity* this) {
Entity* entity;
- GetNextFrame(this);
- if (--this->field_0x78.HWORD == 0) {
- if ((this->subtimer < 8) && (entity = CreateEnemy(VAATI_PROJECTILE, 0), entity != (Entity*)0x0)) {
+ GetNextFrame(super);
+ if (--this->unk_78 == 0) {
+ if ((super->subtimer < 8) && (entity = CreateEnemy(VAATI_PROJECTILE, 0), entity != (Entity*)0x0)) {
entity->direction = (s32)Random() % 5 + 0xc;
entity->x.HALF.HI = (gRoomControls.width / 2) + gRoomControls.origin_x;
entity->y.HALF.HI = gRoomControls.origin_y + 8;
entity->collisionLayer = 3;
- entity->parent = this;
+ entity->parent = super;
UpdateSpriteForCollisionLayer(entity);
- this->field_0x78.HWORD = 600;
- this->subtimer = this->subtimer + 1;
+ this->unk_78 = 600;
+ super->subtimer = super->subtimer + 1;
} else {
- this->field_0x78.HWORD = 0x78;
+ this->unk_78 = 0x78;
}
}
}
-void sub_08034DC8(Entity* this) {
+void sub_08034DC8(MazaalMacroEntity* this) {
if (gRoomTransition.field_0x39 == 0) {
- CreateFx(this, FX_GIANT_EXPLOSION4, 0);
- RestorePrevTileEntity(COORD_TO_TILE(this), this->collisionLayer);
+ CreateFx(super, FX_GIANT_EXPLOSION4, 0);
+ RestorePrevTileEntity(COORD_TO_TILE(super), super->collisionLayer);
DeleteThisEntity();
}
}
-void sub_08034E18(Entity* this) {
- gUnk_080CEEB0[this->action](this);
+void sub_08034E18(MazaalMacroEntity* this) {
+ gUnk_080CEEB0[super->action](this);
}
-void sub_08034E30(Entity* this) {
- this->action = this->parent->type + 1;
- this->collisionLayer = 2;
- this->spritePriority.b0 = 7;
- this->spritePriority.b1 = 0;
- UpdateSpriteForCollisionLayer(this);
- InitializeAnimation(this, 2);
+void sub_08034E30(MazaalMacroEntity* this) {
+ super->action = super->parent->type + 1;
+ super->collisionLayer = 2;
+ super->spritePriority.b0 = 7;
+ super->spritePriority.b1 = 0;
+ UpdateSpriteForCollisionLayer(super);
+ InitializeAnimation(super, 2);
}
-void sub_08034E68(Entity* this) {
+void sub_08034E68(MazaalMacroEntity* this) {
ScriptExecutionContext* scriptExecutionContext;
- if (this->parent->next == NULL) {
- if (this->spriteSettings.draw != 0) {
- this->spriteSettings.draw = 0;
+ if (super->parent->next == NULL) {
+ if (super->spriteSettings.draw != 0) {
+ super->spriteSettings.draw = 0;
sub_08035120(this);
}
if (gRoomTransition.field_0x39 == 0) {
if (PlayerCanBeMoved()) {
- this->action = 3;
- scriptExecutionContext = StartCutscene(this, (u16*)script_MazaalMacroDefeated);
- *(ScriptExecutionContext**)&this->cutsceneBeh = scriptExecutionContext;
+ super->action = 3;
+ scriptExecutionContext = StartCutscene(super, (u16*)script_MazaalMacroDefeated);
+ this->context = scriptExecutionContext;
}
} else {
DeleteThisEntity();
@@ -154,24 +164,24 @@ void sub_08034E68(Entity* this) {
}
}
-void sub_08034EC0(Entity* this) {
- if (this->parent->next == NULL) {
+void sub_08034EC0(MazaalMacroEntity* this) {
+ if (super->parent->next == NULL) {
sub_08035120(this);
DeleteThisEntity();
}
}
-void sub_08034ED8(Entity* this) {
- ExecuteScriptForEntity(this, NULL);
+void sub_08034ED8(MazaalMacroEntity* this) {
+ ExecuteScriptForEntity(super, NULL);
}
-void sub_08034EE4(Entity* this) {
+void sub_08034EE4(MazaalMacroEntity* this) {
u32 randomValue;
Entity* entity;
- if ((++this->timer & 0xf) == 0) {
+ if ((++super->timer & 0xf) == 0) {
randomValue = Random();
- entity = CreateFx(this, gUnk_080CEEC8[randomValue & 3], 0);
+ entity = CreateFx(super, gUnk_080CEEC8[randomValue & 3], 0);
if (entity != NULL) {
entity->x.HALF.HI = (((randomValue >> 2) & 0x77) << 1) + 1 + gRoomControls.scroll_x;
entity->y.HALF.HI = ((randomValue >> 9) & 0x7e) + 1 + gRoomControls.scroll_y;
@@ -179,59 +189,59 @@ void sub_08034EE4(Entity* this) {
UpdateSpriteForCollisionLayer(entity);
}
}
- ExecuteScriptForEntity(this, NULL);
+ ExecuteScriptForEntity(super, NULL);
}
-void sub_08034F58(Entity* this) {
+void sub_08034F58(MazaalMacroEntity* this) {
DoExitTransition(&gUnk_0813ABA8);
- DeleteEntity(this);
+ DeleteEntity(super);
}
-void sub_08034F70(Entity* this) {
- this->health = gRoomTransition.field_0x39;
+void sub_08034F70(MazaalMacroEntity* this) {
+ super->health = gRoomTransition.field_0x39;
if (gRoomTransition.field_0x39 >= 0x3d) {
- this->type2 = 0;
+ super->type2 = 0;
} else if (gRoomTransition.field_0x39 >= 0x1f) {
- this->type2 = 1;
+ super->type2 = 1;
} else {
- this->type2 = 2;
+ super->type2 = 2;
}
}
-void sub_08034FA0(Entity* this) {
- if (0 < this->iframes) {
- this->child->iframes = this->iframes;
+void sub_08034FA0(MazaalMacroEntity* this) {
+ if (0 < super->iframes) {
+ super->child->iframes = super->iframes;
InitScreenShake(12, 1);
}
- switch (this->type2) {
+ switch (super->type2) {
case 0:
- if (this->health < 0x3c) {
+ if (super->health < 0x3c) {
gRoomTransition.field_0x39 = 0x3c;
sub_08035050(this);
return;
}
break;
case 1:
- if (this->health < 0x1e) {
+ if (super->health < 0x1e) {
gRoomTransition.field_0x39 = 0x1e;
sub_08035050(this);
return;
}
break;
default:
- if (this->health == 0) {
- RestorePrevTileEntity(COORD_TO_TILE(this), this->collisionLayer);
+ if (super->health == 0) {
+ RestorePrevTileEntity(COORD_TO_TILE(super), super->collisionLayer);
}
break;
}
- gRoomTransition.field_0x39 = this->health;
+ gRoomTransition.field_0x39 = super->health;
}
-void sub_08035050(Entity* this) {
+void sub_08035050(MazaalMacroEntity* this) {
Entity* entity;
- COLLISION_OFF(this);
- this->health = 0;
+ COLLISION_OFF(super);
+ super->health = 0;
entity = CreateEnemy(VAATI_PROJECTILE, 0);
if (entity != NULL) {
entity->type2 = 1;
@@ -241,13 +251,13 @@ void sub_08035050(Entity* this) {
}
}
-u32 sub_08035084(Entity* this) {
+u32 sub_08035084(MazaalMacroEntity* this) {
u32 vulnPillar;
Entity* entity;
u32 i;
const u8* coords;
- if (this->type == 0) {
+ if (super->type == 0) {
if (0x42 < gEntCount) {
return 0;
}
@@ -257,7 +267,7 @@ u32 sub_08035084(Entity* this) {
gRoomTransition.field_0x38 = (gRoomTransition.field_0x38 & 0xf) | (vulnPillar << 4);
for (i = 0, coords = gUnk_080CEECC; i < 6; i++, coords += 2) {
if (i == vulnPillar) {
- entity = this;
+ entity = super;
} else {
entity = CreateEnemy(MAZAAL_MACRO, 1);
}
@@ -270,11 +280,11 @@ u32 sub_08035084(Entity* this) {
return 1;
}
-void sub_08035120(Entity* this) {
+void sub_08035120(MazaalMacroEntity* this) {
s32 tile;
u32 i;
- tile = COORD_TO_TILE(this);
+ tile = COORD_TO_TILE(super);
for (i = 0; i < 0x18; i++) {
sub_0807B600(tile + gUnk_080CEED8[i]);
}
diff --git a/src/enemy/miniFireballGuy.c b/src/enemy/miniFireballGuy.c
index be66f3da..b72a3350 100644
--- a/src/enemy/miniFireballGuy.c
+++ b/src/enemy/miniFireballGuy.c
@@ -4,79 +4,85 @@
*
* @brief Mini Fireball Guy enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
-extern void sub_08045678(Entity*);
-void MiniFireballGuy_OnTick(Entity*);
-void MiniFireballGuy_OnCollision(Entity*);
-void MiniFireballGuy_OnDeath(Entity*);
-void MiniFireballGuy_OnGrabbed(Entity*);
-void sub_08045618(Entity*);
-void sub_08045654(Entity*);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[4];
+ /*0x6c*/ u8 unk_6c;
+} MiniFireballGuyEntity;
+
+extern void sub_08045678(MiniFireballGuyEntity* this);
+void MiniFireballGuy_OnTick(MiniFireballGuyEntity* this);
+void MiniFireballGuy_OnCollision(MiniFireballGuyEntity* this);
+void MiniFireballGuy_OnDeath(MiniFireballGuyEntity* this);
+void MiniFireballGuy_OnGrabbed(MiniFireballGuyEntity* this);
+void sub_08045618(MiniFireballGuyEntity* this);
+void sub_08045654(MiniFireballGuyEntity* this);
-static void (*const MiniFireballGuy_Functions[])(Entity*) = {
- MiniFireballGuy_OnTick, MiniFireballGuy_OnCollision, GenericKnockback, MiniFireballGuy_OnDeath,
- GenericConfused, MiniFireballGuy_OnGrabbed,
+static void (*const MiniFireballGuy_Functions[])(MiniFireballGuyEntity*) = {
+ MiniFireballGuy_OnTick, MiniFireballGuy_OnCollision, (void (*)(MiniFireballGuyEntity*))GenericKnockback, MiniFireballGuy_OnDeath,
+ (void (*)(MiniFireballGuyEntity*))GenericConfused, MiniFireballGuy_OnGrabbed,
};
-void MiniFireballGuy(Entity* this) {
- EnemyFunctionHandler(this, MiniFireballGuy_Functions);
+void MiniFireballGuy(MiniFireballGuyEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)MiniFireballGuy_Functions);
}
-void MiniFireballGuy_OnTick(Entity* this) {
- static void (*const actionFuncs[])(Entity*) = {
+void MiniFireballGuy_OnTick(MiniFireballGuyEntity* this) {
+ static void (*const actionFuncs[])(MiniFireballGuyEntity*) = {
sub_08045618,
sub_08045654,
};
- actionFuncs[this->action](this);
+ actionFuncs[super->action](this);
}
-void MiniFireballGuy_OnCollision(Entity* this) {
- EnemyFunctionHandlerAfterCollision(this, MiniFireballGuy_Functions);
+void MiniFireballGuy_OnCollision(MiniFireballGuyEntity* this) {
+ EnemyFunctionHandlerAfterCollision(super, MiniFireballGuy_Functions);
}
-void MiniFireballGuy_OnDeath(Entity* this) {
- if ((this != this->parent) && (this->parent != NULL)) {
- this->field_0x6c.HALF.LO &= ~0x80;
- this->parent->child = this->child;
- this->child->parent = this->parent;
+void MiniFireballGuy_OnDeath(MiniFireballGuyEntity* this) {
+ if ((super != super->parent) && (super->parent != NULL)) {
+ this->unk_6c &= ~0x80;
+ super->parent->child = super->child;
+ super->child->parent = super->parent;
}
- GenericDeath(this);
+ GenericDeath(super);
}
-void MiniFireballGuy_OnGrabbed(Entity* this) {
+void MiniFireballGuy_OnGrabbed(MiniFireballGuyEntity* this) {
}
-void sub_08045618(Entity* this) {
- this->action = 1;
- this->spriteSettings.draw = 1;
- this->speed = 0x80;
- this->collisionFlags = this->collisionFlags | 0x10;
- sub_0804A720(this);
- InitializeAnimation(this, 1);
+void sub_08045618(MiniFireballGuyEntity* this) {
+ super->action = 1;
+ super->spriteSettings.draw = 1;
+ super->speed = 0x80;
+ super->collisionFlags = super->collisionFlags | 0x10;
+ sub_0804A720(super);
+ InitializeAnimation(super, 1);
sub_08045678(this);
}
-void sub_08045654(Entity* this) {
- ProcessMovement2(this);
- GetNextFrame(this);
- if (GravityUpdate(this, Q_8_8(24.0)) == 0) {
+void sub_08045654(MiniFireballGuyEntity* this) {
+ ProcessMovement2(super);
+ GetNextFrame(super);
+ if (GravityUpdate(super, Q_8_8(24.0)) == 0) {
sub_08045678(this);
}
}
-void sub_08045678(Entity* this) {
- this->zVelocity = Q_16_16(1.75);
- if (this->timer != 0) {
- this->timer--;
+void sub_08045678(MiniFireballGuyEntity* this) {
+ super->zVelocity = Q_16_16(1.75);
+ if (super->timer != 0) {
+ super->timer--;
} else {
- this->timer = Random() & 3;
- if ((sub_08049FA0(this) == 0) && (Random() & 3)) {
- this->direction = DirectionRound(sub_08049EE4(this) - 4 + (Random() & 8));
+ super->timer = Random() & 3;
+ if ((sub_08049FA0(super) == 0) && (Random() & 3)) {
+ super->direction = DirectionRound(sub_08049EE4(super) - 4 + (Random() & 8));
} else {
- this->direction = DirectionRound(Random());
+ super->direction = DirectionRound(Random());
}
}
}
diff --git a/src/enemy/miniSlime.c b/src/enemy/miniSlime.c
index 67e7675b..45108259 100644
--- a/src/enemy/miniSlime.c
+++ b/src/enemy/miniSlime.c
@@ -4,107 +4,112 @@
*
* @brief Mini Slime enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "physics.h"
-void sub_08045374(Entity*);
-void MiniSlime_OnTick(Entity*);
-void MiniSlime_OnCollision(Entity*);
-void MiniSlime_OnDeath(Entity*);
-void MiniSlime_OnGrabbed(Entity*);
-void sub_080452A4(Entity*);
-void sub_080452E4(Entity*);
-void sub_080452FC(Entity*);
-void sub_08045374(Entity*);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[4];
+ /*0x6c*/ u8 unk_6c;
+ /*0x6d*/ u8 unk_6d;
+} MiniSlimeEntity;
+
+void sub_08045374(MiniSlimeEntity* this);
+void MiniSlime_OnTick(MiniSlimeEntity* this);
+void MiniSlime_OnCollision(MiniSlimeEntity* this);
+void MiniSlime_OnDeath(MiniSlimeEntity* this);
+void MiniSlime_OnGrabbed(MiniSlimeEntity* this);
+void sub_080452A4(MiniSlimeEntity* this);
+void sub_080452E4(MiniSlimeEntity* this);
+void sub_080452FC(MiniSlimeEntity* this);
-extern void sub_080452E4(Entity*);
extern void ReplaceMonitoredEntity(Entity*, Entity*);
-static void (*const MiniSlime_Functions[])(Entity*) = {
- MiniSlime_OnTick, MiniSlime_OnCollision, GenericKnockback, MiniSlime_OnDeath, GenericConfused, MiniSlime_OnGrabbed,
+static void (*const MiniSlime_Functions[])(MiniSlimeEntity*) = {
+ MiniSlime_OnTick, MiniSlime_OnCollision, (void (*)(MiniSlimeEntity*))GenericKnockback, MiniSlime_OnDeath, (void (*)(MiniSlimeEntity*))GenericConfused, MiniSlime_OnGrabbed,
};
-void MiniSlime(Entity* this) {
- EnemyFunctionHandler(this, MiniSlime_Functions);
- SetChildOffset(this, 0, 1, -8);
+void MiniSlime(MiniSlimeEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)MiniSlime_Functions);
+ SetChildOffset(super, 0, 1, -8);
}
-void MiniSlime_OnTick(Entity* this) {
- static void (*const actionFuncs[])(Entity*) = {
+void MiniSlime_OnTick(MiniSlimeEntity* this) {
+ static void (*const actionFuncs[])(MiniSlimeEntity*) = {
sub_080452A4,
sub_080452E4,
sub_080452FC,
sub_08045374,
};
- actionFuncs[this->action](this);
+ actionFuncs[super->action](this);
}
-void MiniSlime_OnCollision(Entity* this) {
- if (this->confusedTime)
- Create0x68FX(this, FX_STARS);
+void MiniSlime_OnCollision(MiniSlimeEntity* this) {
+ if (super->confusedTime)
+ Create0x68FX(super, FX_STARS);
- EnemyFunctionHandlerAfterCollision(this, MiniSlime_Functions);
+ EnemyFunctionHandlerAfterCollision(super, MiniSlime_Functions);
}
-void MiniSlime_OnDeath(Entity* this) {
- Entity* parent = this->parent;
- if ((this != parent) && (parent != NULL)) {
- this->field_0x6c.HALF.LO &= ~0x80;
- this->parent->child = this->child;
- this->child->parent = this->parent;
- if (this->field_0x6c.HALF.HI & 0x40)
- ReplaceMonitoredEntity(this, parent);
+void MiniSlime_OnDeath(MiniSlimeEntity* this) {
+ Entity* parent = super->parent;
+ if ((super != parent) && (parent != NULL)) {
+ this->unk_6c &= ~0x80;
+ super->parent->child = super->child;
+ super->child->parent = super->parent;
+ if (this->unk_6d & 0x40)
+ ReplaceMonitoredEntity(super, parent);
}
- GenericDeath(this);
+ GenericDeath(super);
}
-void MiniSlime_OnGrabbed(Entity* this) {
+void MiniSlime_OnGrabbed(MiniSlimeEntity* this) {
}
-void sub_080452A4(Entity* this) {
- this->action = 1;
- this->spriteSettings.draw = 1;
- this->speed = 0x100;
- sub_0804A720(this);
- InitializeAnimation(this, 6);
- if (this->type2) {
- this->action = 2;
- this->timer = 1;
+void sub_080452A4(MiniSlimeEntity* this) {
+ super->action = 1;
+ super->spriteSettings.draw = 1;
+ super->speed = 0x100;
+ sub_0804A720(super);
+ InitializeAnimation(super, 6);
+ if (super->type2) {
+ super->action = 2;
+ super->timer = 1;
} else {
sub_080452E4(this);
}
}
-void sub_080452E4(Entity* this) {
- this->action = 2;
- this->timer = (Random() & 0x1f) + 1;
+void sub_080452E4(MiniSlimeEntity* this) {
+ super->action = 2;
+ super->timer = (Random() & 0x1f) + 1;
}
-void sub_080452FC(Entity* this) {
+void sub_080452FC(MiniSlimeEntity* this) {
u32 cVar2, bVar3;
- GetNextFrame(this);
- if (--this->timer == 0) {
- this->action = 3;
- this->timer = 1;
- if (0 < this->speed)
- this->timer = FixedDiv(0x1000, this->speed) >> 8;
+ GetNextFrame(super);
+ if (--super->timer == 0) {
+ super->action = 3;
+ super->timer = 1;
+ if (0 < super->speed)
+ super->timer = FixedDiv(0x1000, super->speed) >> 8;
- if (sub_08049FA0(this) == 0 && (Random() & 3)) {
- cVar2 = sub_08049EE4(this);
+ if (sub_08049FA0(super) == 0 && (Random() & 3)) {
+ cVar2 = sub_08049EE4(super);
bVar3 = Random() & 8;
bVar3 += 0xfc;
- this->direction = DirectionRound(cVar2 + bVar3);
+ super->direction = DirectionRound(cVar2 + bVar3);
} else {
- this->direction = DirectionRound(Random());
+ super->direction = DirectionRound(Random());
sub_08045374(this);
}
}
}
-void sub_08045374(Entity* this) {
- ProcessMovement0(this);
- GetNextFrame(this);
- if (--this->timer == 0)
- this->action = 1;
+void sub_08045374(MiniSlimeEntity* this) {
+ ProcessMovement0(super);
+ GetNextFrame(super);
+ if (--super->timer == 0)
+ super->action = 1;
}
diff --git a/src/enemy/moldorm.c b/src/enemy/moldorm.c
index facad891..8caf1f7a 100644
--- a/src/enemy/moldorm.c
+++ b/src/enemy/moldorm.c
@@ -4,9 +4,9 @@
*
* @brief Moldorm enemy
*/
-
-#include "enemy.h"
+//#define NENT_DEPRECATED
#include "collision.h"
+#include "enemy.h"
#include "functions.h"
void sub_08022EAC(Entity*);
diff --git a/src/enemy/moldworm.c b/src/enemy/moldworm.c
index 04923737..db8410cb 100644
--- a/src/enemy/moldworm.c
+++ b/src/enemy/moldworm.c
@@ -4,7 +4,7 @@
*
* @brief Moldworm enemy
*/
-
+//#define NENT_DEPRECATED
#include "collision.h"
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/mulldozer.c b/src/enemy/mulldozer.c
index f8b79c7e..f1f3059a 100644
--- a/src/enemy/mulldozer.c
+++ b/src/enemy/mulldozer.c
@@ -4,9 +4,7 @@
*
* @brief Mulldozer enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
#include "collision.h"
#include "enemy.h"
diff --git a/src/enemy/octorok.c b/src/enemy/octorok.c
index 267b0acf..68ff799c 100644
--- a/src/enemy/octorok.c
+++ b/src/enemy/octorok.c
@@ -4,7 +4,7 @@
*
* @brief Octorok enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "physics.h"
@@ -128,14 +128,14 @@ void Octorok_Move(Entity* this) {
void Octorok_ShootNut(Entity* this) {
GetNextFrame(this);
if (this->frame & 1) {
- Entity* ent = CreateProjectileWithParent(this, ROCK_PROJECTILE, 0);
- if (ent != NULL) {
+ Entity* entity = CreateProjectileWithParent(this, ROCK_PROJECTILE, 0);
+ if (entity != NULL) {
const s8* off;
- ent->direction = this->direction;
+ entity->direction = this->direction;
off = &gOctorokNutOffset[this->direction / 4];
- ent->x.HALF.HI += off[0];
- ent->y.HALF.HI += off[1];
- ent->z.HALF.HI = -3;
+ entity->x.HALF.HI += off[0];
+ entity->y.HALF.HI += off[1];
+ entity->z.HALF.HI = -3;
this->frame &= 0xfe;
EnqueueSFX(SFX_18D);
}
@@ -182,12 +182,12 @@ void Octorok_Turn(Entity* this) {
}
bool32 Octorok_FacesPlayer(Entity* this) {
- Entity* ent = sub_08049DF4(1);
+ Entity* entity = sub_08049DF4(1);
- if (ent == NULL)
+ if (entity == NULL)
return FALSE;
- if (DirectionRoundUp(GetFacingDirection(this, ent)) != this->direction)
+ if (DirectionRoundUp(GetFacingDirection(this, entity)) != this->direction)
return FALSE;
return TRUE;
diff --git a/src/enemy/octorokGolden.c b/src/enemy/octorokGolden.c
index 12be6a8f..7c0fd384 100644
--- a/src/enemy/octorokGolden.c
+++ b/src/enemy/octorokGolden.c
@@ -1,6 +1,13 @@
+/**
+ * @file octorokGolden.c
+ * @ingroup Enemies
+ *
+ * @brief Golden Octorock enemy
+ */
+#define NENT_DEPRECATED
#include "collision.h"
-#include "map.h"
#include "enemy.h"
+#include "map.h"
#include "player.h"
#include "item.h"
diff --git a/src/enemy/peahat.c b/src/enemy/peahat.c
index 7b5ead2a..d0fe6e28 100644
--- a/src/enemy/peahat.c
+++ b/src/enemy/peahat.c
@@ -4,21 +4,30 @@
*
* @brief Peahat enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
-#include "room.h"
#include "physics.h"
+#include "room.h"
+
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[24];
+ /*0x80*/ u8 unk_80;
+ /*0x81*/ u8 unk_81;
+ /*0x82*/ u8 unk_82;
+ /*0x83*/ u8 unk_83;
+} PeahatEntity;
-extern void (*const Peahat_Functions[])(Entity*);
-extern void (*const gPeahatPropellerFunctions[])(Entity*);
-extern void (*const gPeahatActions[])(Entity*);
-extern void (*const gUnk_080CA5BC[])(Entity*);
+extern void (*const Peahat_Functions[])(PeahatEntity*);
+extern void (*const gPeahatPropellerFunctions[])(PeahatEntity*);
+extern void (*const gPeahatActions[])(PeahatEntity*);
+extern void (*const gUnk_080CA5BC[])(PeahatEntity*);
extern const s8 gPeahatFlightHeights[];
extern const s8 gUnk_080CA5D4[];
-void sub_080205F8(Entity*);
-void sub_08020604(Entity*);
+void sub_080205F8(PeahatEntity* this);
+void sub_08020604(PeahatEntity* this);
extern Entity* gUnk_020000B0;
@@ -36,354 +45,354 @@ enum {
PeahatAnimation_RepairPropeller,
};
-void Peahat(Entity* this) {
- if (this->type == PeahatForm_Torso) {
- EnemyFunctionHandler(this, Peahat_Functions);
- SetChildOffset(this, 0, 1, -0x10);
+void Peahat(PeahatEntity* this) {
+ if (super->type == PeahatForm_Torso) {
+ EnemyFunctionHandler(super, (EntityActionArray)Peahat_Functions);
+ SetChildOffset(super, 0, 1, -0x10);
} else {
- gPeahatPropellerFunctions[this->action](this);
+ gPeahatPropellerFunctions[super->action](this);
}
}
-void Peahat_OnTick(Entity* this) {
- gPeahatActions[this->action](this);
- if (this->field_0x80.HALF.HI)
- this->z.HALF.HI = gPeahatFlightHeights[(this->subtimer++ & 0x30) >> 4];
+void Peahat_OnTick(PeahatEntity* this) {
+ gPeahatActions[super->action](this);
+ if (this->unk_81)
+ super->z.HALF.HI = gPeahatFlightHeights[(super->subtimer++ & 0x30) >> 4];
}
-void Peahat_OnCollision(Entity* this) {
- if (this->field_0x82.HALF.LO) {
- if (this->contactFlags == 0x94) {
- Entity* ent = CreateEnemy(PEAHAT, PeahatForm_Propeller);
- if (ent != NULL) {
- CopyPosition(this, ent);
- ent->z.HALF.HI -= 8;
+void Peahat_OnCollision(PeahatEntity* this) {
+ if (this->unk_82) {
+ if (super->contactFlags == 0x94) {
+ Entity* entity = CreateEnemy(PEAHAT, PeahatForm_Propeller);
+ if (entity != NULL) {
+ CopyPosition(super, entity);
+ entity->z.HALF.HI -= 8;
}
- this->field_0x82.HALF.LO = 0;
- this->animationState = PeahatAnimation_SlicedPropeller;
- this->action = 5;
- this->speed = 0x80;
- this->iframes = -30;
- this->field_0x80.HALF.HI = 0;
- InitializeAnimation(this, this->animationState);
- } else if (this->contactFlags == 0x9b) {
- this->animationState = PeahatAnimation_BrokenPropeller;
- this->action = 5;
- this->speed = 0x80;
- this->iframes = -30;
- this->field_0x80.HALF.HI = 0;
- InitializeAnimation(this, this->animationState);
- } else if (this->contactFlags == 0x80) {
- if (this->animationState == PeahatAnimation_Flying) {
- this->action = 1;
- this->timer = 30;
- this->speed = 0x80;
- this->direction = -1;
- this->field_0x82.HALF.HI = 0x78;
- GetNextFrame(this);
+ this->unk_82 = 0;
+ super->animationState = PeahatAnimation_SlicedPropeller;
+ super->action = 5;
+ super->speed = 0x80;
+ super->iframes = -30;
+ this->unk_81 = 0;
+ InitializeAnimation(super, super->animationState);
+ } else if (super->contactFlags == 0x9b) {
+ super->animationState = PeahatAnimation_BrokenPropeller;
+ super->action = 5;
+ super->speed = 0x80;
+ super->iframes = -30;
+ this->unk_81 = 0;
+ InitializeAnimation(super, super->animationState);
+ } else if (super->contactFlags == 0x80) {
+ if (super->animationState == PeahatAnimation_Flying) {
+ super->action = 1;
+ super->timer = 30;
+ super->speed = 0x80;
+ super->direction = -1;
+ this->unk_83 = 0x78;
+ GetNextFrame(super);
}
}
}
- if (this->confusedTime)
- Create0x68FX(this, FX_STARS);
+ if (super->confusedTime)
+ Create0x68FX(super, FX_STARS);
- EnemyFunctionHandlerAfterCollision(this, Peahat_Functions);
+ EnemyFunctionHandlerAfterCollision(super, Peahat_Functions);
}
-void Peahat_OnGrabbed(Entity* this) {
- if (2 >= this->subAction && !sub_0806F520(this))
+void Peahat_OnGrabbed(PeahatEntity* this) {
+ if (2 >= super->subAction && !sub_0806F520(super))
return;
- gUnk_080CA5BC[this->subAction](this);
+ gUnk_080CA5BC[super->subAction](this);
}
-void sub_080200B4(Entity* this) {
- this->subAction = 1;
- this->gustJarTolerance = 60;
- if (this->animationState == PeahatAnimation_Flying) {
- this->animationState = PeahatAnimation_BrokenPropeller;
- this->action = 5;
- this->hitType = 0x71;
- this->field_0x80.HALF.HI = 0;
- InitializeAnimation(this, this->animationState);
+void sub_080200B4(PeahatEntity* this) {
+ super->subAction = 1;
+ super->gustJarTolerance = 60;
+ if (super->animationState == PeahatAnimation_Flying) {
+ super->animationState = PeahatAnimation_BrokenPropeller;
+ super->action = 5;
+ super->hitType = 0x71;
+ this->unk_81 = 0;
+ InitializeAnimation(super, super->animationState);
}
}
-void sub_080200E4(Entity* this) {
- sub_0806F4E8(this);
+void sub_080200E4(PeahatEntity* this) {
+ sub_0806F4E8(super);
}
-void sub_080200EC(Entity* this) {
- sub_0806F3E4(this);
+void sub_080200EC(PeahatEntity* this) {
+ sub_0806F3E4(super);
}
-void sub_080200F4(Entity* this) {
- COLLISION_OFF(this);
+void sub_080200F4(PeahatEntity* this) {
+ COLLISION_OFF(super);
}
-void nullsub_5(Entity* this) {
+void nullsub_5(PeahatEntity* this) {
}
-void sub_08020104(Entity* this) {
- if (this->flags & ENT_COLLIDE) {
- COLLISION_ON(this);
- this->gustJarState &= 0xfb;
+void sub_08020104(PeahatEntity* this) {
+ if (super->flags & ENT_COLLIDE) {
+ COLLISION_ON(super);
+ super->gustJarState &= 0xfb;
} else {
- this->health = 0;
+ super->health = 0;
}
}
-void Peahat_Initialize(Entity* this) {
- sub_0804A720(this);
- this->action = 1;
- this->timer = 16;
- this->subtimer = Random();
- this->direction = Random() & 0x1f;
- this->gustJarFlags = 18;
- this->field_0x80.HALF.LO = (Random() & 1) ? 2 : -2;
- this->field_0x80.HALF.HI = 1;
- this->field_0x82.HALF.LO = 1;
- this->animationState = PeahatAnimation_Flying;
- InitializeAnimation(this, this->animationState);
+void Peahat_Initialize(PeahatEntity* this) {
+ sub_0804A720(super);
+ super->action = 1;
+ super->timer = 16;
+ super->subtimer = Random();
+ super->direction = Random() & 0x1f;
+ super->gustJarFlags = 18;
+ this->unk_80 = (Random() & 1) ? 2 : -2;
+ this->unk_81 = 1;
+ this->unk_82 = 1;
+ super->animationState = PeahatAnimation_Flying;
+ InitializeAnimation(super, super->animationState);
}
-void Peahat_Fly(Entity* this) {
- if (this->field_0x82.HALF.HI)
- this->field_0x82.HALF.HI--;
+void Peahat_Fly(PeahatEntity* this) {
+ if (this->unk_83)
+ this->unk_83--;
- if (sub_08049FDC(this, 1)) {
- if (this->field_0x82.HALF.HI == 0 && (this->subtimer & 0xf) == 0 && sub_08049F1C(this, gUnk_020000B0, 0x30)) {
- this->action = 2;
- this->subAction = Random() & 3;
- this->timer = 60;
- this->speed = 160;
+ if (sub_08049FDC(super, 1)) {
+ if (this->unk_83 == 0 && (super->subtimer & 0xf) == 0 && sub_08049F1C(super, gUnk_020000B0, 0x30)) {
+ super->action = 2;
+ super->subAction = Random() & 3;
+ super->timer = 60;
+ super->speed = 160;
}
}
- if (--this->timer == 0) {
- this->timer = 16;
+ if (--super->timer == 0) {
+ super->timer = 16;
sub_08020604(this);
if ((Random() & 3) == 0) {
- this->field_0x80.HALF.LO = (Random() & 1) ? 2 : -2;
+ this->unk_80 = (Random() & 1) ? 2 : -2;
}
}
- ProcessMovement2(this);
- GetNextFrame(this);
+ ProcessMovement2(super);
+ GetNextFrame(super);
}
-void Peahat_ChargeStart(Entity* this) {
- if (sub_08049FDC(this, 1)) {
- if (--this->timer) {
- UpdateAnimationVariableFrames(this, 4 - ((this->timer >> 4) & 0x3));
+void Peahat_ChargeStart(PeahatEntity* this) {
+ if (sub_08049FDC(super, 1)) {
+ if (--super->timer) {
+ UpdateAnimationVariableFrames(super, 4 - ((super->timer >> 4) & 0x3));
return;
} else {
- this->action = 3;
- this->timer = 120;
- this->speed = 192;
- this->direction = (GetFacingDirection(this, gUnk_020000B0) + gUnk_080CA5D4[Random() & 1]) & 0x1f;
+ super->action = 3;
+ super->timer = 120;
+ super->speed = 192;
+ super->direction = (GetFacingDirection(super, gUnk_020000B0) + gUnk_080CA5D4[Random() & 1]) & 0x1f;
}
} else {
sub_080205F8(this);
}
- UpdateAnimationVariableFrames(this, 4);
+ UpdateAnimationVariableFrames(super, 4);
}
-void Peahat_ChargeTarget(Entity* this) {
- if (sub_08049FDC(this, 1)) {
- if (--this->timer == 0) {
+void Peahat_ChargeTarget(PeahatEntity* this) {
+ if (sub_08049FDC(super, 1)) {
+ if (--super->timer == 0) {
sub_080205F8(this);
}
- if (this->timer > 60) {
- if (this->timer & 1)
- this->speed += 4;
+ if (super->timer > 60) {
+ if (super->timer & 1)
+ super->speed += 4;
if ((gRoomTransition.frameCount & 3) == 0)
- sub_08004596(this, GetFacingDirection(this, gUnk_020000B0));
+ sub_08004596(super, GetFacingDirection(super, gUnk_020000B0));
}
- ProcessMovement2(this);
+ ProcessMovement2(super);
} else {
sub_080205F8(this);
}
- UpdateAnimationVariableFrames(this, 4);
+ UpdateAnimationVariableFrames(super, 4);
}
-void Peahat_ChargeEnd(Entity* this) {
- if (--this->timer == 0) {
- this->action = 1;
- this->timer = 1;
- this->speed = 128;
- this->field_0x82.HALF.HI = 120;
- GetNextFrame(this);
+void Peahat_ChargeEnd(PeahatEntity* this) {
+ if (--super->timer == 0) {
+ super->action = 1;
+ super->timer = 1;
+ super->speed = 128;
+ this->unk_83 = 120;
+ GetNextFrame(super);
} else {
- if (this->timer & 1)
- this->speed -= 8;
+ if (super->timer & 1)
+ super->speed -= 8;
- ProcessMovement2(this);
- UpdateAnimationVariableFrames(this, 4);
+ ProcessMovement2(super);
+ UpdateAnimationVariableFrames(super, 4);
}
}
-void Peahat_Stunned(Entity* this) {
- switch (this->animationState) {
+void Peahat_Stunned(PeahatEntity* this) {
+ switch (super->animationState) {
default:
- if (sub_080044EC(this, 0x1800) == 0) {
- this->action = 6;
- this->timer = 240;
- this->subtimer = 10;
- this->hitType = 0x71;
+ if (sub_080044EC(super, 0x1800) == 0) {
+ super->action = 6;
+ super->timer = 240;
+ super->subtimer = 10;
+ super->hitType = 0x71;
}
- if (this->direction == 0xff)
- this->direction = this->knockbackDirection;
+ if (super->direction == 0xff)
+ super->direction = super->knockbackDirection;
- ProcessMovement0(this);
- GetNextFrame(this);
+ ProcessMovement0(super);
+ GetNextFrame(super);
break;
case PeahatAnimation_SlicedPropeller:
- GravityUpdate(this, Q_8_8(28.0));
- if (this->z.HALF.HI == 0) {
- this->action = 7;
- this->timer = 150;
- this->subtimer = 10;
- this->hitType = 0x71;
+ GravityUpdate(super, Q_8_8(28.0));
+ if (super->z.HALF.HI == 0) {
+ super->action = 7;
+ super->timer = 150;
+ super->subtimer = 10;
+ super->hitType = 0x71;
}
break;
};
}
-void Peahat_RepairPropeller(Entity* this) {
- if ((this->subtimer != 0) && (--this->subtimer == 0)) {
- Create0x68FX(this, FX_STARS);
+void Peahat_RepairPropeller(PeahatEntity* this) {
+ if ((super->subtimer != 0) && (--super->subtimer == 0)) {
+ Create0x68FX(super, FX_STARS);
}
- if (sub_0800442E(this) || (--this->timer == 0)) {
- this->action = 9;
- this->zVelocity = Q_16_16(1.5);
- this->direction = Random() & 0x1f;
- sub_0804AA1C(this);
- this->animationState = PeahatAnimation_RepairPropeller;
- InitializeAnimation(this, this->animationState);
+ if (sub_0800442E(super) || (--super->timer == 0)) {
+ super->action = 9;
+ super->zVelocity = Q_16_16(1.5);
+ super->direction = Random() & 0x1f;
+ sub_0804AA1C(super);
+ super->animationState = PeahatAnimation_RepairPropeller;
+ InitializeAnimation(super, super->animationState);
}
}
-void Peahat_Recover(Entity* this) {
- if ((this->subtimer != 0) && (--this->subtimer == 0)) {
- Create0x68FX(this, FX_STARS);
+void Peahat_Recover(PeahatEntity* this) {
+ if ((super->subtimer != 0) && (--super->subtimer == 0)) {
+ Create0x68FX(super, FX_STARS);
}
- if (sub_0800442E(this) || (--this->timer == 0)) {
- this->action = 8;
- this->timer = 240;
- this->direction = Random() & 0x1f;
- sub_0804AA1C(this);
+ if (sub_0800442E(super) || (--super->timer == 0)) {
+ super->action = 8;
+ super->timer = 240;
+ super->direction = Random() & 0x1f;
+ sub_0804AA1C(super);
}
}
-void Peahat_Hop(Entity* this) {
- GetNextFrame(this);
- if (--this->timer == 0) {
- if (this->frame & ANIM_DONE) {
- this->action = 9;
- this->zVelocity = Q_16_16(1.5);
- this->animationState = PeahatAnimation_NewPropeller;
- InitializeAnimation(this, this->animationState);
+void Peahat_Hop(PeahatEntity* this) {
+ GetNextFrame(super);
+ if (--super->timer == 0) {
+ if (super->frame & ANIM_DONE) {
+ super->action = 9;
+ super->zVelocity = Q_16_16(1.5);
+ super->animationState = PeahatAnimation_NewPropeller;
+ InitializeAnimation(super, super->animationState);
} else {
- this->timer = 1;
+ super->timer = 1;
}
}
- if (this->frame & 2) {
- this->frame &= ~2;
- this->direction = Random() & 0x1f;
+ if (super->frame & 2) {
+ super->frame &= ~2;
+ super->direction = Random() & 0x1f;
}
- if (this->frame & 1) {
- sub_0800442E(this);
+ if (super->frame & 1) {
+ sub_0800442E(super);
} else {
- ProcessMovement0(this);
+ ProcessMovement0(super);
}
}
-void Peahat_Takeoff(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- this->action = 1;
- this->hitType = 0x70;
- this->field_0x82.HALF.LO = 1;
- this->field_0x80.HALF.HI = 1;
- this->animationState = PeahatAnimation_Flying;
- InitializeAnimation(this, this->animationState);
- } else if (this->frame & 1) {
- sub_0800442E(this);
+void Peahat_Takeoff(PeahatEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ super->action = 1;
+ super->hitType = 0x70;
+ this->unk_82 = 1;
+ this->unk_81 = 1;
+ super->animationState = PeahatAnimation_Flying;
+ InitializeAnimation(super, super->animationState);
+ } else if (super->frame & 1) {
+ sub_0800442E(super);
} else {
- GravityUpdate(this, Q_8_8(28.0));
- ProcessMovement0(this);
+ GravityUpdate(super, Q_8_8(28.0));
+ ProcessMovement0(super);
}
}
-void PeahatPropeller_Initialize(Entity* this) {
- this->action = 1;
- this->timer = 240;
- this->subtimer = 40;
- this->spriteSettings.draw = 1;
- this->spriteRendering.b3 = 1;
- this->spriteOrientation.flipY = 1;
- this->spriteSettings.shadow = 0;
- this->speed = 0x20;
- this->direction = (Random() & 0x10) + 8;
- InitializeAnimation(this, PeahatAnimation_Propeller);
+void PeahatPropeller_Initialize(PeahatEntity* this) {
+ super->action = 1;
+ super->timer = 240;
+ super->subtimer = 40;
+ super->spriteSettings.draw = 1;
+ super->spriteRendering.b3 = 1;
+ super->spriteOrientation.flipY = 1;
+ super->spriteSettings.shadow = 0;
+ super->speed = 0x20;
+ super->direction = (Random() & 0x10) + 8;
+ InitializeAnimation(super, PeahatAnimation_Propeller);
}
-void PeahatPropeller_Fly(Entity* this) {
- GetNextFrame(this);
- if (--this->timer == 0) {
- DeleteEntity(this);
+void PeahatPropeller_Fly(PeahatEntity* this) {
+ GetNextFrame(super);
+ if (--super->timer == 0) {
+ DeleteEntity(super);
} else {
- if (this->timer < 60)
- this->spriteSettings.draw ^= 1;
-
- this->z.WORD -= Q_16_16(0.75);
- LinearMoveUpdate(this);
- if (--this->subtimer == 0) {
- this->subtimer = 40;
- this->direction = (Random() & 0x10) + 8;
+ if (super->timer < 60)
+ super->spriteSettings.draw ^= 1;
+
+ super->z.WORD -= Q_16_16(0.75);
+ LinearMoveUpdate(super);
+ if (--super->subtimer == 0) {
+ super->subtimer = 40;
+ super->direction = (Random() & 0x10) + 8;
}
}
}
-void sub_080205F8(Entity* this) {
- this->action = 4;
- this->timer = 60;
+void sub_080205F8(PeahatEntity* this) {
+ super->action = 4;
+ super->timer = 60;
}
-void sub_08020604(Entity* this) {
- if (!sub_08049FA0(this) && (Random() & 3)) {
- this->direction = sub_08049EE4(this);
+void sub_08020604(PeahatEntity* this) {
+ if (!sub_08049FA0(super) && (Random() & 3)) {
+ super->direction = sub_08049EE4(super);
} else {
- this->direction += this->field_0x80.HALF.LO;
- this->direction &= 0x1f;
+ super->direction += this->unk_80;
+ super->direction &= 0x1f;
}
}
// clang-format off
-void (*const Peahat_Functions[])(Entity*) = {
+void (*const Peahat_Functions[])(PeahatEntity*) = {
Peahat_OnTick,
Peahat_OnCollision,
- GenericKnockback,
- GenericDeath,
- GenericConfused,
+ (void (*)(PeahatEntity*))GenericKnockback,
+ (void (*)(PeahatEntity*))GenericDeath,
+ (void (*)(PeahatEntity*))GenericConfused,
Peahat_OnGrabbed,
};
-void (*const gPeahatPropellerFunctions[])(Entity*) = {
+void (*const gPeahatPropellerFunctions[])(PeahatEntity*) = {
PeahatPropeller_Initialize,
PeahatPropeller_Fly,
};
-void (*const gPeahatActions[])(Entity*) = {
+void (*const gPeahatActions[])(PeahatEntity*) = {
Peahat_Initialize,
Peahat_Fly,
Peahat_ChargeStart,
@@ -400,7 +409,7 @@ const s8 gPeahatFlightHeights[] = {
-5, -6, -7, -6,
};
-void (*const gUnk_080CA5BC[])(Entity*) = {
+void (*const gUnk_080CA5BC[])(PeahatEntity*) = {
sub_080200B4,
sub_080200E4,
sub_080200EC,
diff --git a/src/enemy/pesto.c b/src/enemy/pesto.c
index b395ba9e..5d13addb 100644
--- a/src/enemy/pesto.c
+++ b/src/enemy/pesto.c
@@ -4,13 +4,13 @@
*
* @brief Pesto enemy
*/
-
-#include "enemy.h"
+//#define NENT_DEPRECATED
#include "collision.h"
-#include "object.h"
+#include "enemy.h"
#include "game.h"
-#include "save.h"
+#include "object.h"
#include "playeritem.h"
+#include "save.h"
void sub_080249F4(Entity*);
void sub_08024940(Entity*);
@@ -166,14 +166,14 @@ void sub_080240B8(Entity* this) {
sub_080249DC(this);
if (this->type == 1) {
- Entity* ent;
+ Entity* entity;
this->field_0x82.HALF.HI = 0;
- ent = CreateProjectileWithParent(this, DIRT_BALL_PROJECTILE, this->field_0x82.HALF.HI);
- if (ent != NULL) {
- this->child = ent;
- ent->parent = this;
- ent->y.HALF.HI += 0x10;
+ entity = CreateProjectileWithParent(this, DIRT_BALL_PROJECTILE, this->field_0x82.HALF.HI);
+ if (entity != NULL) {
+ this->child = entity;
+ entity->parent = this;
+ entity->y.HALF.HI += 0x10;
}
}
}
@@ -403,7 +403,7 @@ void sub_080244E8(Entity* this) {
break;
case 1:
if (EntityInRectRadius(this, this->child, 6, 6)) {
- Entity* ent;
+ Entity* entity;
this->field_0x80.HALF.LO++;
this->timer = 12;
@@ -412,34 +412,34 @@ void sub_080244E8(Entity* this) {
this->z.HALF.HI -= 0xe;
this->field_0x78.HWORD -= 0xe;
- ent = CreateProjectileWithParent(this, DIRT_BALL_PROJECTILE, this->field_0x82.HALF.HI);
- if (ent != NULL) {
- ent->parent = this;
- ent->z.HALF.HI += 0xe;
- ent->child = this->child;
- CopyPosition(ent, ent->child);
- this->child = ent;
+ entity = CreateProjectileWithParent(this, DIRT_BALL_PROJECTILE, this->field_0x82.HALF.HI);
+ if (entity != NULL) {
+ entity->parent = this;
+ entity->z.HALF.HI += 0xe;
+ entity->child = this->child;
+ CopyPosition(entity, entity->child);
+ this->child = entity;
}
}
break;
case 2:
if (EntityInRectRadius(this, this->child, 6, 6)) {
- Entity* ent;
+ Entity* entity;
this->field_0x80.HALF.LO++;
this->timer = 12;
this->field_0x82.HALF.HI &= ~0x80;
- ent = this->child;
- SetTile((u16)ent->field_0x70.HALF.LO, COORD_TO_TILE(ent), ent->collisionLayer);
- DeleteEntity(ent);
+ entity = this->child;
+ SetTile((u16)entity->field_0x70.HALF.LO, COORD_TO_TILE(entity), entity->collisionLayer);
+ DeleteEntity(entity);
this->z.HALF.HI -= 0xe;
this->field_0x78.HWORD -= 0xe;
- ent = CreateProjectileWithParent(this, DIRT_BALL_PROJECTILE, this->field_0x82.HALF.HI);
- if (ent != NULL) {
- ent->parent = this;
- ent->z.HALF.HI += 0xe;
- this->child = ent;
+ entity = CreateProjectileWithParent(this, DIRT_BALL_PROJECTILE, this->field_0x82.HALF.HI);
+ if (entity != NULL) {
+ entity->parent = this;
+ entity->z.HALF.HI += 0xe;
+ this->child = entity;
}
}
break;
@@ -635,7 +635,7 @@ bool32 sub_08024AD8(Entity* this) {
bool32 sub_08024B38(Entity* this) {
int iVar4 = 0;
- Entity* ent;
+ Entity* entity;
if (gPlayerState.hurtBlinkSpeed != 0) {
if (gPlayerState.swim_state == 1) {
@@ -660,34 +660,34 @@ bool32 sub_08024B38(Entity* this) {
}
}
- ent = FindEntityByID(PLAYER_ITEM, PLAYER_ITEM_BOMB, 2);
- if (ent != NULL) {
+ entity = FindEntityByID(PLAYER_ITEM, PLAYER_ITEM_BOMB, 2);
+ if (entity != NULL) {
do {
- if (ent->action != 2 && ent->z.HALF.HI == 0 && sub_08049F1C(this, ent, 0xa0)) {
+ if (entity->action != 2 && entity->z.HALF.HI == 0 && sub_08049F1C(this, entity, 0xa0)) {
iVar4 = 1;
- this->child = ent;
+ this->child = entity;
this->field_0x82.HALF.HI |= 1;
this->field_0x82.HALF.HI &= ~0x40;
break;
}
- } while (ent = FindNextDuplicateID(ent, 2), ent != NULL);
+ } while (entity = FindNextDuplicateID(entity, 2), entity != NULL);
}
if (iVar4 != 0) {
return iVar4;
}
- ent = FindEntityByID(OBJECT, POT, 6);
- if (ent != NULL) {
+ entity = FindEntityByID(OBJECT, POT, 6);
+ if (entity != NULL) {
do {
- if (ent->action == 1 && sub_08049F1C(this, ent, 0xa0)) {
+ if (entity->action == 1 && sub_08049F1C(this, entity, 0xa0)) {
iVar4 = 1;
- this->child = ent;
+ this->child = entity;
this->field_0x82.HALF.HI |= 2;
this->field_0x82.HALF.HI &= ~0x40;
break;
}
- } while (ent = FindNextDuplicateID(ent, 6), ent != NULL);
+ } while (entity = FindNextDuplicateID(entity, 6), entity != NULL);
}
if (iVar4 == 0) {
diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c
index 63ef70b4..03f8f0e8 100644
--- a/src/enemy/puffstool.c
+++ b/src/enemy/puffstool.c
@@ -4,11 +4,31 @@
*
* @brief Puffstool enemy
*/
-
+//#define NENT_DEPRECATED
#include "collision.h"
#include "enemy.h"
#include "object.h"
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[16];
+ /*0x78*/ u16 unk_78;
+ /*0x7a*/ u8 unk_7a;
+ /*0x7b*/ u8 unk_7b;
+ /*0x7c*/ u8 unk_7c;
+// // Overlap of 1
+// /*0x7c*/ u16 unk_7c;
+// Overlap of 1
+ /*0x7d*/ u8 unk_7d;
+ /*0x7e*/ u16 unk_7e;
+ /*0x80*/ u8 unk_80;
+ /*0x81*/ u8 unk_81;
+ /*0x82*/ u8 unk_82;
+ /*0x83*/ u8 unused2[1];
+ /*0x84*/ u16 unk_84;
+ /*0x86*/ u16 unk_86;
+} PuffstoolEntity;
+
extern u8 gUnk_080B3E80[];
bool32 sub_080258C4(Entity*);
@@ -83,10 +103,10 @@ void Puffstool_OnCollide(Entity* this) {
break;
default:
if (this->hitType == 0x82 && this->iframes < 0) {
- Entity* ent = CreateObject(DIRT_PARTICLE, 2, 0);
- if (ent != NULL) {
- ent->spritePriority.b0 = 3;
- CopyPosition(this, ent);
+ Entity* entity = CreateObject(DIRT_PARTICLE, 2, 0);
+ if (entity != NULL) {
+ entity->spritePriority.b0 = 3;
+ CopyPosition(this, entity);
}
EnqueueSFX(SFX_186);
}
@@ -299,12 +319,12 @@ void sub_08025514(Entity* this) {
}
void sub_08025554(Entity* this) {
- Entity* ent = sub_08049DF4(1);
- if (ent == NULL) {
+ Entity* entity = sub_08049DF4(1);
+ if (entity == NULL) {
sub_080256B4(this);
} else {
if ((this->timer & 3) == 0) {
- this->direction = GetFacingDirection(ent, this);
+ this->direction = GetFacingDirection(entity, this);
}
sub_08025C44(this);
GetNextFrame(this);
@@ -319,8 +339,8 @@ void sub_08025554(Entity* this) {
}
void sub_080255AC(Entity* this) {
- Entity* ent = sub_08049DF4(1);
- if (ent == NULL) {
+ Entity* entity = sub_08049DF4(1);
+ if (entity == NULL) {
sub_080256B4(this);
} else {
if (this->field_0x80.HALF.HI != 0) {
@@ -338,7 +358,7 @@ void sub_080255AC(Entity* this) {
}
tmp -= 7;
- this->direction = (GetFacingDirection(ent, this) + tmp) & 0x1f;
+ this->direction = (GetFacingDirection(entity, this) + tmp) & 0x1f;
}
if (this->field_0x78.HWORD == 0) {
@@ -437,15 +457,15 @@ bool32 sub_080257EC(Entity* this, u32 x, u32 y) {
}
bool32 sub_080258C4(Entity* this) {
- Entity* ent = sub_08049DF4(1);
- if (ent == NULL) {
+ Entity* entity = sub_08049DF4(1);
+ if (entity == NULL) {
return FALSE;
} else {
s32 iVar4;
s32 iVar1;
- iVar4 = ent->x.HALF.HI - this->x.HALF.HI;
+ iVar4 = entity->x.HALF.HI - this->x.HALF.HI;
iVar4 = iVar4 * iVar4;
- iVar1 = ent->y.HALF.HI - this->y.HALF.HI;
+ iVar1 = entity->y.HALF.HI - this->y.HALF.HI;
iVar1 = iVar1 * iVar1;
iVar4 = iVar4 + iVar1;
if (this->cutsceneBeh.HWORD == 0 && this->field_0x80.HALF.HI == 0 && 0x400 >= iVar4) {
@@ -522,21 +542,21 @@ bool32 sub_08025AB8(u32 tile, u32 layer) {
}
void sub_08025AE8(Entity* this) {
- Entity* ent;
+ Entity* entity;
- ent = CreateFx(this, FX_BROWN_SMOKE, 0);
- if (ent != NULL) {
- ent->y.WORD--;
+ entity = CreateFx(this, FX_BROWN_SMOKE, 0);
+ if (entity != NULL) {
+ entity->y.WORD--;
}
- ent = CreateFx(this, FX_BROWN_SMOKE_LARGE, 0);
- if (ent != NULL) {
- ent->y.WORD++;
+ entity = CreateFx(this, FX_BROWN_SMOKE_LARGE, 0);
+ if (entity != NULL) {
+ entity->y.WORD++;
}
}
void sub_08025B18(Entity* this) {
- Entity* ent;
+ Entity* entity;
s32 x = this->x.HALF.HI - gRoomControls.origin_x;
s32 y = this->y.HALF.HI - gRoomControls.origin_y;
@@ -548,25 +568,25 @@ void sub_08025B18(Entity* this) {
for (; i < 9; i++, offset += 2) {
sub_08025AB8((((x + offset[0]) >> 4) & 0x3fU) | ((((y + offset[1]) >> 4) & 0x3fU) << 6), layer);
- ent = CreateObject(DIRT_PARTICLE, 2, 0);
- if (ent != NULL) {
- PositionRelative(this, ent, Q_16_16(offset[0]), Q_16_16(offset[1]));
- ent->x.HALF.HI &= -0x10;
- ent->x.HALF.HI += 8;
- ent->y.HALF.HI &= -0x10;
- ent->y.HALF.HI += 8;
- ent->z.HALF.HI = -1;
+ entity = CreateObject(DIRT_PARTICLE, 2, 0);
+ if (entity != NULL) {
+ PositionRelative(this, entity, Q_16_16(offset[0]), Q_16_16(offset[1]));
+ entity->x.HALF.HI &= -0x10;
+ entity->x.HALF.HI += 8;
+ entity->y.HALF.HI &= -0x10;
+ entity->y.HALF.HI += 8;
+ entity->z.HALF.HI = -1;
}
}
}
void sub_08025BD4(Entity* this) {
if (this->field_0x82.HALF.LO && (this->frame & 1) == 0) {
- Entity* ent = CreateObject(DIRT_PARTICLE, 0, 0);
- if (ent != NULL) {
- PositionRelative(this, ent, Q_16_16(gUnk_080CC0BA[this->animationState * 2 + 0]),
+ Entity* entity = CreateObject(DIRT_PARTICLE, 0, 0);
+ if (entity != NULL) {
+ PositionRelative(this, entity, Q_16_16(gUnk_080CC0BA[this->animationState * 2 + 0]),
Q_16_16(gUnk_080CC0BA[this->animationState * 2 + 1]));
- ent->z.HALF.HI = -10;
+ entity->z.HALF.HI = -10;
}
}
}
diff --git a/src/enemy/rockChuchu.c b/src/enemy/rockChuchu.c
index 893ec8b6..c1d77726 100644
--- a/src/enemy/rockChuchu.c
+++ b/src/enemy/rockChuchu.c
@@ -4,7 +4,7 @@
*
* @brief Rock Chuchu enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "player.h"
@@ -20,7 +20,7 @@ void RockChuchu_OnTick(Entity* this) {
}
void RockChuchu_OnCollision(Entity* this) {
- Entity* ent;
+ Entity* entity;
if (this->health) {
switch (this->contactFlags & 0x7f) {
@@ -44,18 +44,18 @@ void RockChuchu_OnCollision(Entity* this) {
case 0x16:
case 0x1c:
CreateFx(this, FX_ROCK, 0);
- ent = CreateEnemy(CHUCHU, 1);
- if (ent != NULL) {
- ent->type2 = 1;
+ entity = CreateEnemy(CHUCHU, 1);
+ if (entity != NULL) {
+ entity->type2 = 1;
#ifndef EU
- ent->iframes = -8;
+ entity->iframes = -8;
#endif
- sub_0804A4E4(this, ent);
+ sub_0804A4E4(this, entity);
this->action = 2;
COLLISION_OFF(this);
this->spriteSettings.draw = 0;
this->direction = this->knockbackDirection;
- this->child = ent;
+ this->child = entity;
}
}
} else {
@@ -97,15 +97,15 @@ void sub_08022390(Entity* this) {
}
void sub_080223E4(Entity* this) {
- Entity* ent;
+ Entity* entity;
- ent = this->child;
- if (ent != NULL) {
- ent->contactFlags = 0x94;
- ent->iframes = 0x10;
+ entity = this->child;
+ if (entity != NULL) {
+ entity->contactFlags = 0x94;
+ entity->iframes = 0x10;
#ifndef EU
- ent->knockbackDuration = 0xc;
- ent->knockbackDirection = this->direction;
+ entity->knockbackDuration = 0xc;
+ entity->knockbackDirection = this->direction;
#endif
}
diff --git a/src/enemy/rollobite.c b/src/enemy/rollobite.c
index f55a3c34..2a3a7fbe 100644
--- a/src/enemy/rollobite.c
+++ b/src/enemy/rollobite.c
@@ -4,281 +4,288 @@
*
* @brief Rollobite enemy
*/
-
+#define NENT_DEPRECATED
+#include "collision.h"
#include "enemy.h"
#include "physics.h"
#include "player.h"
#include "room.h"
-#include "collision.h"
-extern void (*const Rollobite_Functions[])(Entity*);
-extern void (*const gRollobiteActions[])(Entity*);
-extern void (*const gUnk_080CA6A4[])(Entity*);
-extern void (*const gUnk_080CA6BC[])(Entity*);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[28];
+ /*0x84*/ u8 unk_84;
+ /*0x85*/ u8 unk_85;
+} RollobiteEntity;
+
+extern void (*const Rollobite_Functions[])(RollobiteEntity*);
+extern void (*const gRollobiteActions[])(RollobiteEntity*);
+extern void (*const gUnk_080CA6A4[])(RollobiteEntity*);
+extern void (*const gUnk_080CA6BC[])(RollobiteEntity*);
extern const u8 gUnk_080CA6CC[];
extern const s8 gUnk_080CA6D4[];
-void sub_08020A30(Entity*);
-void sub_08020A7C(Entity*);
-bool32 Rollobite_TryToHoleUp(Entity*);
-bool32 Rollobite_IsRolledUp(Entity*);
+void sub_08020A30(RollobiteEntity* this);
+void sub_08020A7C(RollobiteEntity* this);
+bool32 Rollobite_TryToHoleUp(RollobiteEntity* this);
+bool32 Rollobite_IsRolledUp(RollobiteEntity* this);
extern void RegisterCarryEntity(Entity*);
-void Rollobite(Entity* this) {
- EnemyFunctionHandler(this, Rollobite_Functions);
+void Rollobite(RollobiteEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)Rollobite_Functions);
}
-void Rollobite_OnTick(Entity* this) {
+void Rollobite_OnTick(RollobiteEntity* this) {
Rollobite_TryToHoleUp(this);
- gRollobiteActions[this->action](this);
+ gRollobiteActions[super->action](this);
}
-void Rollobite_OnCollision(Entity* this) {
- if (this->hitType == 34 && this->health != 0xff) {
- this->action = 4;
- this->zVelocity = Q_16_16(2.0);
- this->direction = 0xff;
- this->health = 0xff;
- this->hitType = 35;
- InitializeAnimation(this, this->animationState + 8);
+void Rollobite_OnCollision(RollobiteEntity* this) {
+ if (super->hitType == 34 && super->health != 0xff) {
+ super->action = 4;
+ super->zVelocity = Q_16_16(2.0);
+ super->direction = 0xff;
+ super->health = 0xff;
+ super->hitType = 35;
+ InitializeAnimation(super, super->animationState + 8);
}
- if (this->contactFlags != 0x80) {
- if (this->action == 4 || this->action == 5) {
- this->action = 4;
- this->timer = 180;
- this->direction = 0xff;
- InitializeAnimation(this, this->animationState + 0x10);
+ if (super->contactFlags != 0x80) {
+ if (super->action == 4 || super->action == 5) {
+ super->action = 4;
+ super->timer = 180;
+ super->direction = 0xff;
+ InitializeAnimation(super, super->animationState + 0x10);
}
}
- if (this->contactFlags == 0x93)
+ if (super->contactFlags == 0x93)
Rollobite_OnTick(this);
}
-void Rollobite_OnKnockback(Entity* this) {
+void Rollobite_OnKnockback(RollobiteEntity* this) {
if (Rollobite_TryToHoleUp(this)) {
- this->knockbackDuration = 0;
+ super->knockbackDuration = 0;
} else if (Rollobite_IsRolledUp(this)) {
- this->knockbackDuration--;
- CalculateEntityTileCollisions(this, this->knockbackDirection, 10);
- ProcessMovementInternal(this, this->knockbackSpeed, this->knockbackDirection, 10);
+ super->knockbackDuration--;
+ CalculateEntityTileCollisions(super, super->knockbackDirection, 10);
+ ProcessMovementInternal(super, super->knockbackSpeed, super->knockbackDirection, 10);
} else {
- GenericKnockback(this);
+ GenericKnockback(super);
}
}
-void Rollobite_OnGrabbed(Entity* this) {
- if (this->subAction < 3 && !sub_0806F520(this)) {
- this->action = 4;
- COLLISION_ON(this);
- this->direction = 0xff;
- InitializeAnimation(this, this->animationState + 0x10);
+void Rollobite_OnGrabbed(RollobiteEntity* this) {
+ if (super->subAction < 3 && !sub_0806F520(super)) {
+ super->action = 4;
+ COLLISION_ON(super);
+ super->direction = 0xff;
+ InitializeAnimation(super, super->animationState + 0x10);
} else {
- gUnk_080CA6A4[this->subAction](this);
+ gUnk_080CA6A4[super->subAction](this);
}
}
-void sub_0802077C(Entity* this) {
- this->subAction = 1;
- this->gustJarTolerance = 60;
+void sub_0802077C(RollobiteEntity* this) {
+ super->subAction = 1;
+ super->gustJarTolerance = 60;
}
-void sub_08020788(Entity* this) {
- sub_0806F4E8(this);
+void sub_08020788(RollobiteEntity* this) {
+ sub_0806F4E8(super);
}
-void sub_08020790(Entity* this) {
- sub_0806F3E4(this);
+void sub_08020790(RollobiteEntity* this) {
+ sub_0806F3E4(super);
}
-void sub_08020798(Entity* this) {
- COLLISION_OFF(this);
+void sub_08020798(RollobiteEntity* this) {
+ COLLISION_OFF(super);
}
-void nullsub_6(Entity* this) {
+void nullsub_6(RollobiteEntity* this) {
/* ... */
}
-void sub_080207A8(Entity* this) {
- this->action = 4;
- COLLISION_ON(this);
- this->spritePriority.b0 = 4;
- this->gustJarState &= 0xfb;
- this->direction ^= 0x10;
- this->zVelocity = Q_16_16(1.5);
- this->speed = 0x80;
- InitializeAnimation(this, this->animationState + 0x10);
+void sub_080207A8(RollobiteEntity* this) {
+ super->action = 4;
+ COLLISION_ON(super);
+ super->spritePriority.b0 = 4;
+ super->gustJarState &= 0xfb;
+ super->direction ^= 0x10;
+ super->zVelocity = Q_16_16(1.5);
+ super->speed = 0x80;
+ InitializeAnimation(super, super->animationState + 0x10);
}
-void Rollobite_Initialize(Entity* this) {
- sub_0804A720(this);
- this->carryFlags = 0x30;
- this->gustJarFlags = 18;
- this->cutsceneBeh.HALF.LO = 0;
- this->direction = DirectionRound(Random());
+void Rollobite_Initialize(RollobiteEntity* this) {
+ sub_0804A720(super);
+ super->carryFlags = 0x30;
+ super->gustJarFlags = 18;
+ this->unk_84 = 0;
+ super->direction = DirectionRound(Random());
sub_08020A30(this);
}
-void Rollobite_Walk(Entity* this) {
- GetNextFrame(this);
- if (this->frame & 0x1) {
- this->frame &= ~0x1;
- if (!ProcessMovement0(this))
- this->timer = 1;
+void Rollobite_Walk(RollobiteEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & 0x1) {
+ super->frame &= ~0x1;
+ if (!ProcessMovement0(super))
+ super->timer = 1;
}
- if (this->frame & 0x10) {
- this->frame &= ~0x10;
- if (--this->timer == 0) {
- this->action = 3;
- this->timer = 60;
+ if (super->frame & 0x10) {
+ super->frame &= ~0x10;
+ if (--super->timer == 0) {
+ super->action = 3;
+ super->timer = 60;
}
}
}
-void sub_08020874(Entity* this) {
- gUnk_080CA6BC[this->subAction](this);
+void sub_08020874(RollobiteEntity* this) {
+ gUnk_080CA6BC[super->subAction](this);
}
-void sub_0802088C(Entity* this) {
- this->subAction = 1;
- COLLISION_OFF(this);
- this->cutsceneBeh.HALF.HI = gPlayerEntity.animationState;
- this->spritePriority.b1 = 0;
+void sub_0802088C(RollobiteEntity* this) {
+ super->subAction = 1;
+ COLLISION_OFF(super);
+ this->unk_85 = gPlayerEntity.animationState;
+ super->spritePriority.b1 = 0;
}
-void sub_080208B4(Entity* this) {
- s8 uVar1 = (this->cutsceneBeh.HALF.HI - gPlayerEntity.animationState) / 2;
+void sub_080208B4(RollobiteEntity* this) {
+ s8 uVar1 = (this->unk_85 - gPlayerEntity.animationState) / 2;
if (uVar1) {
- this->animationState = (this->animationState + uVar1) & 3;
- InitializeAnimation(this, this->animationState + 0x10);
+ super->animationState = (super->animationState + uVar1) & 3;
+ InitializeAnimation(super, super->animationState + 0x10);
}
- this->cutsceneBeh.HALF.HI = gPlayerEntity.animationState;
+ this->unk_85 = gPlayerEntity.animationState;
}
-void sub_080208F0(Entity* this) {
- this->spritePriority.b1 = 3;
+void sub_080208F0(RollobiteEntity* this) {
+ super->spritePriority.b1 = 3;
}
-void sub_08020904(Entity* this) {
- this->action = 4;
- COLLISION_ON(this);
- this->direction = -1;
- InitializeAnimation(this, this->animationState + 0x10);
+void sub_08020904(RollobiteEntity* this) {
+ super->action = 4;
+ COLLISION_ON(super);
+ super->direction = -1;
+ InitializeAnimation(super, super->animationState + 0x10);
}
-void Rollobite_Turn(Entity* this) {
- if (--this->timer == 0)
+void Rollobite_Turn(RollobiteEntity* this) {
+ if (--super->timer == 0)
sub_08020A30(this);
}
-void Rollobite_RolledUp(Entity* this) {
+void Rollobite_RolledUp(RollobiteEntity* this) {
u32 unk;
- if ((this->frame & ANIM_DONE) == 0)
- GetNextFrame(this);
+ if ((super->frame & ANIM_DONE) == 0)
+ GetNextFrame(super);
- unk = sub_080044EC(this, 0x2800);
+ unk = sub_080044EC(super, 0x2800);
if (unk == 0) {
- if (--this->timer == 0) {
- this->action = 5;
- InitializeAnimation(this, this->animationState + 12);
+ if (--super->timer == 0) {
+ super->action = 5;
+ InitializeAnimation(super, super->animationState + 12);
}
- RegisterCarryEntity(this);
+ RegisterCarryEntity(super);
} else {
if (unk == 1)
EnqueueSFX(SFX_PLACE_OBJ);
- if ((this->direction & 0x80) == 0)
- ProcessMovement2(this);
+ if ((super->direction & 0x80) == 0)
+ ProcessMovement2(super);
}
}
-void Rollobite_Unroll(Entity* this) {
- GetNextFrame(this);
- if (this->frame & ANIM_DONE) {
- COLLISION_ON(this);
- this->speed = 0x100;
- this->hitType = 34;
+void Rollobite_Unroll(RollobiteEntity* this) {
+ GetNextFrame(super);
+ if (super->frame & ANIM_DONE) {
+ COLLISION_ON(super);
+ super->speed = 0x100;
+ super->hitType = 34;
sub_08020A30(this);
- this->direction = DirectionFromAnimationState(this->animationState);
- InitializeAnimation(this, this->animationState);
+ super->direction = DirectionFromAnimationState(super->animationState);
+ InitializeAnimation(super, super->animationState);
} else {
- if ((this->frame & 1) == 0)
- RegisterCarryEntity(this);
+ if ((super->frame & 1) == 0)
+ RegisterCarryEntity(super);
}
}
-void Rollobite_LinedUp(Entity* this) {
- if (GravityUpdate(this, Q_8_8(28.0)) == 0) {
- this->action = 7;
- this->spritePriority.b0 = 7;
+void Rollobite_LinedUp(RollobiteEntity* this) {
+ if (GravityUpdate(super, Q_8_8(28.0)) == 0) {
+ super->action = 7;
+ super->spritePriority.b0 = 7;
}
- if (this->frame == 0)
- GetNextFrame(this);
+ if (super->frame == 0)
+ GetNextFrame(super);
}
-void Rollobite_Holed(Entity* this) {
- GetNextFrame(this);
+void Rollobite_Holed(RollobiteEntity* this) {
+ GetNextFrame(super);
}
-void sub_08020A30(Entity* this) {
- if (this->cutsceneBeh.HALF.LO < 2) {
- this->timer = gUnk_080CA6CC[Random() & 7];
- if (this->timer == 0) {
- this->action = 3;
- this->timer = 60;
- this->cutsceneBeh.HALF.LO++;
+void sub_08020A30(RollobiteEntity* this) {
+ if (this->unk_84 < 2) {
+ super->timer = gUnk_080CA6CC[Random() & 7];
+ if (super->timer == 0) {
+ super->action = 3;
+ super->timer = 60;
+ this->unk_84++;
return;
}
}
- this->action = 1;
- this->cutsceneBeh.HALF.LO = 0;
+ super->action = 1;
+ this->unk_84 = 0;
sub_08020A7C(this);
}
-void sub_08020A7C(Entity* this) {
+void sub_08020A7C(RollobiteEntity* this) {
int tmp = Random();
- u32 state = DirectionRound(this->direction + gUnk_080CA6D4[tmp % 3]);
+ u32 state = DirectionRound(super->direction + gUnk_080CA6D4[tmp % 3]);
- if (sub_08049FA0(this) == 0) {
- int tmp = DirectionRoundUp(sub_08049EE4(this));
+ if (sub_08049FA0(super) == 0) {
+ int tmp = DirectionRoundUp(sub_08049EE4(super));
if ((state ^ 0x10) == tmp)
state ^= 0x10;
}
- this->direction = state;
- this->animationState = (u8)(state >> 3);
- InitializeAnimation(this, this->animationState);
+ super->direction = state;
+ super->animationState = (u8)(state >> 3);
+ InitializeAnimation(super, super->animationState);
}
-bool32 Rollobite_TryToHoleUp(Entity* this) {
- if (Rollobite_IsRolledUp(this) && this->z.HALF.HI == 0) {
- int tile = COORD_TO_TILE(this);
- int iVar1 = GetTileType(tile, this->collisionLayer);
+bool32 Rollobite_TryToHoleUp(RollobiteEntity* this) {
+ if (Rollobite_IsRolledUp(this) && super->z.HALF.HI == 0) {
+ int tile = COORD_TO_TILE(super);
+ int iVar1 = GetTileType(tile, super->collisionLayer);
if ((iVar1 * 0x10000 - 0x710000U) >> 0x10 < 2) {
- this->action = 6;
- COLLISION_OFF(this);
- this->x.HALF.HI &= 0xfff0;
- this->x.HALF.HI += 8;
- this->y.HALF.HI &= 0xfff0;
- this->y.HALF.HI += 13;
- this->zVelocity = Q_16_16(2.0);
- InitializeAnimation(this, this->animationState + 0x14);
- SetTile(0x4034, tile, this->collisionLayer);
+ super->action = 6;
+ COLLISION_OFF(super);
+ super->x.HALF.HI &= 0xfff0;
+ super->x.HALF.HI += 8;
+ super->y.HALF.HI &= 0xfff0;
+ super->y.HALF.HI += 13;
+ super->zVelocity = Q_16_16(2.0);
+ InitializeAnimation(super, super->animationState + 0x14);
+ SetTile(0x4034, tile, super->collisionLayer);
return TRUE;
}
}
return FALSE;
}
-bool32 Rollobite_IsRolledUp(Entity* this) {
- u32 tmp = this->animIndex;
+bool32 Rollobite_IsRolledUp(RollobiteEntity* this) {
+ u32 tmp = super->animIndex;
if (16 <= tmp && tmp <= 19) {
return TRUE;
} else {
@@ -287,16 +294,16 @@ bool32 Rollobite_IsRolledUp(Entity* this) {
}
// clang-format off
-void (*const Rollobite_Functions[])(Entity*) = {
+void (*const Rollobite_Functions[])(RollobiteEntity*) = {
Rollobite_OnTick,
Rollobite_OnCollision,
Rollobite_OnKnockback,
- GenericDeath,
- GenericConfused,
+ (void (*)(RollobiteEntity*))GenericDeath,
+ (void (*)(RollobiteEntity*))GenericConfused,
Rollobite_OnGrabbed,
};
-void (*const gRollobiteActions[])(Entity*) = {
+void (*const gRollobiteActions[])(RollobiteEntity*) = {
Rollobite_Initialize,
Rollobite_Walk,
sub_08020874,
@@ -307,7 +314,7 @@ void (*const gRollobiteActions[])(Entity*) = {
Rollobite_Holed,
};
-void (*const gUnk_080CA6A4[])(Entity*) = {
+void (*const gUnk_080CA6A4[])(RollobiteEntity*) = {
sub_0802077C,
sub_08020788,
sub_08020790,
@@ -316,7 +323,7 @@ void (*const gUnk_080CA6A4[])(Entity*) = {
sub_080207A8,
};
-void (*const gUnk_080CA6BC[])(Entity*) = {
+void (*const gUnk_080CA6BC[])(RollobiteEntity*) = {
sub_0802088C,
sub_080208B4,
sub_080208F0,
diff --git a/src/enemy/rope.c b/src/enemy/rope.c
index 098d4b89..72c04f71 100644
--- a/src/enemy/rope.c
+++ b/src/enemy/rope.c
@@ -4,203 +4,211 @@
*
* @brief Rope enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "physics.h"
-void Rope_OnTick(Entity*);
-void Rope_OnCollision(Entity*);
-void Rope_OnGrabbed(Entity*);
-void sub_08031434(Entity*);
-void sub_08031480(Entity*);
-void sub_080314FC(Entity*);
-void sub_080315BC(Entity*);
-void sub_0803140C(Entity*);
-void sub_08031418(Entity*);
-void sub_08031420(Entity*);
-
-static void (*const Rope_Functions[6])(Entity*) = {
- Rope_OnTick, Rope_OnCollision, GenericKnockback, GenericDeath, GenericConfused, Rope_OnGrabbed,
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[16];
+ /*0x78*/ u8 unk_78;
+ /*0x79*/ u8 unused2[1];
+ /*0x7a*/ u16 unk_7a;
+} RopeEntity;
+
+void Rope_OnTick(RopeEntity* this);
+void Rope_OnCollision(RopeEntity* this);
+void Rope_OnGrabbed(RopeEntity* this);
+void sub_08031434(RopeEntity* this);
+void sub_08031480(RopeEntity* this);
+void sub_080314FC(RopeEntity* this);
+void sub_080315BC(RopeEntity* this);
+void sub_0803140C(RopeEntity* this);
+void sub_08031418(RopeEntity* this);
+void sub_08031420(RopeEntity* this);
+
+static void (*const Rope_Functions[6])(RopeEntity*) = {
+ Rope_OnTick, Rope_OnCollision, (void (*)(RopeEntity*))GenericKnockback, (void (*)(RopeEntity*))GenericDeath, (void (*)(RopeEntity*))GenericConfused, Rope_OnGrabbed,
};
extern Entity* gUnk_020000B0;
-void sub_08031600(Entity*);
-u32 sub_0803163C(Entity*);
+void sub_08031600(RopeEntity* this);
+u32 sub_0803163C(RopeEntity* this);
-void Rope(Entity* this) {
- EnemyFunctionHandler(this, Rope_Functions);
- SetChildOffset(this, 0, 1, -16);
+void Rope(RopeEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)Rope_Functions);
+ SetChildOffset(super, 0, 1, -16);
}
-void Rope_OnTick(Entity* this) {
- static void (*const actionFuncs[4])(Entity*) = {
+void Rope_OnTick(RopeEntity* this) {
+ static void (*const actionFuncs[4])(RopeEntity*) = {
sub_08031434,
sub_08031480,
sub_080314FC,
sub_080315BC,
};
- actionFuncs[this->action](this);
+ actionFuncs[super->action](this);
}
-void Rope_OnCollision(Entity* this) {
- if (this->action == 3) {
- this->subtimer = 30;
- this->field_0x78.HALF.LO = 0x3c;
+void Rope_OnCollision(RopeEntity* this) {
+ if (super->action == 3) {
+ super->subtimer = 30;
+ this->unk_78 = 0x3c;
sub_08031600(this);
}
- if (this->confusedTime) {
- Create0x68FX(this, FX_STARS);
+ if (super->confusedTime) {
+ Create0x68FX(super, FX_STARS);
}
- EnemyFunctionHandlerAfterCollision(this, Rope_Functions);
+ EnemyFunctionHandlerAfterCollision(super, Rope_Functions);
}
-void Rope_OnGrabbed(Entity* this) {
- static void (*const subActionFuncs[3])(Entity*) = {
+void Rope_OnGrabbed(RopeEntity* this) {
+ static void (*const subActionFuncs[3])(RopeEntity*) = {
sub_0803140C,
sub_08031418,
sub_08031420,
};
- if (sub_0806F520(this)) {
- subActionFuncs[this->subAction](this);
+ if (sub_0806F520(super)) {
+ subActionFuncs[super->subAction](this);
}
}
-void sub_0803140C(Entity* this) {
- this->subAction = 1;
- this->gustJarTolerance = 0x3c;
+void sub_0803140C(RopeEntity* this) {
+ super->subAction = 1;
+ super->gustJarTolerance = 0x3c;
}
-void sub_08031418(Entity* this) {
- sub_0806F4E8(this);
+void sub_08031418(RopeEntity* this) {
+ sub_0806F4E8(super);
}
-void sub_08031420(Entity* this) {
- if (sub_0806F3E4(this)) {
- GenericDeath(this);
+void sub_08031420(RopeEntity* this) {
+ if (sub_0806F3E4(super)) {
+ GenericDeath(super);
}
}
-void sub_08031434(Entity* this) {
+void sub_08031434(RopeEntity* this) {
- sub_0804A720(this);
- this->animationState = 0xff;
- this->gustJarFlags = 1;
- this->field_0x7a.HWORD = this->speed;
- if (!(this->type)) {
+ sub_0804A720(super);
+ super->animationState = 0xff;
+ super->gustJarFlags = 1;
+ this->unk_7a = super->speed;
+ if (!(super->type)) {
sub_08031600(this);
} else {
- this->action = 1;
- this->subAction = 0;
- this->spriteSettings.draw = (this->spriteSettings.draw & 0xfc);
- this->z.HALF.HI = -0x80;
- this->frameIndex = 0xff;
+ super->action = 1;
+ super->subAction = 0;
+ super->spriteSettings.draw = (super->spriteSettings.draw & 0xfc);
+ super->z.HALF.HI = -0x80;
+ super->frameIndex = 0xff;
}
}
-void sub_08031480(Entity* this) {
- if (this->subAction == 0) {
- if (this->timer != 0) {
- this->timer--;
+void sub_08031480(RopeEntity* this) {
+ if (super->subAction == 0) {
+ if (super->timer != 0) {
+ super->timer--;
} else {
sub_08031600(this);
- this->action = 1;
- this->subAction = 1;
- this->spriteSettings.draw = 3;
- this->spriteRendering.b3 = 1;
- this->spriteOrientation.flipY = 1;
+ super->action = 1;
+ super->subAction = 1;
+ super->spriteSettings.draw = 3;
+ super->spriteRendering.b3 = 1;
+ super->spriteOrientation.flipY = 1;
SoundReq(SFX_12D);
}
} else {
- if (GravityUpdate(this, Q_8_8(24.0)) == 0) {
- this->action = 2;
- this->subtimer = 15;
- this->spriteSettings.draw = 1;
- UpdateSpriteForCollisionLayer(this);
+ if (GravityUpdate(super, Q_8_8(24.0)) == 0) {
+ super->action = 2;
+ super->subtimer = 15;
+ super->spriteSettings.draw = 1;
+ UpdateSpriteForCollisionLayer(super);
EnqueueSFX(SFX_WATER_SPLASH);
}
}
}
-void sub_080314FC(Entity* this) {
+void sub_080314FC(RopeEntity* this) {
u32 u;
- GetNextFrame(this);
- if (this->subtimer) {
- this->subtimer--;
+ GetNextFrame(super);
+ if (super->subtimer) {
+ super->subtimer--;
} else {
- if (this->field_0x78.HALF.LO) {
- this->field_0x78.HALF.LO--;
+ if (this->unk_78) {
+ this->unk_78--;
}
- if (sub_08049FA0(this)) {
- if (!(this->field_0x78.HALF.LO)) {
- if (sub_08049FDC(this, 1)) {
- u = sub_0804A044(this, gUnk_020000B0, 0xc);
+ if (sub_08049FA0(super)) {
+ if (!(this->unk_78)) {
+ if (sub_08049FDC(super, 1)) {
+ u = sub_0804A044(super, gUnk_020000B0, 0xc);
if (u != 0xff) {
- this->action = 3;
- this->timer = 30;
- this->field_0x7a.HWORD = this->speed = 0x1a0;
- this->direction = u;
- this->animationState = this->direction >> 3;
- InitializeAnimation(this, this->animationState + 4);
+ super->action = 3;
+ super->timer = 30;
+ this->unk_7a = super->speed = 0x1a0;
+ super->direction = u;
+ super->animationState = super->direction >> 3;
+ InitializeAnimation(super, super->animationState + 4);
return;
}
}
}
} else {
if ((Random() & 1)) {
- this->direction = DirectionRoundUp(sub_08049EE4(this));
- u = this->direction >> 3;
- if (u != this->animationState) {
- this->animationState = u;
- InitializeAnimation(this, u);
+ super->direction = DirectionRoundUp(sub_08049EE4(super));
+ u = super->direction >> 3;
+ if (u != super->animationState) {
+ super->animationState = u;
+ InitializeAnimation(super, u);
}
}
}
- if (--this->timer == 0) {
+ if (--super->timer == 0) {
sub_08031600(this);
}
sub_0803163C(this);
}
}
-void sub_080315BC(Entity* this) {
- if (this->timer != 0) {
- this->timer--;
- UpdateAnimationVariableFrames(this, 2);
+void sub_080315BC(RopeEntity* this) {
+ if (super->timer != 0) {
+ super->timer--;
+ UpdateAnimationVariableFrames(super, 2);
} else {
- if (sub_08049FA0(this)) {
- GetNextFrame(this);
+ if (sub_08049FA0(super)) {
+ GetNextFrame(super);
if (sub_0803163C(this)) {
return;
}
}
- this->field_0x78.HALF.LO = 0x1e;
+ this->unk_78 = 0x1e;
sub_08031600(this);
}
}
-void sub_08031600(Entity* this) {
+void sub_08031600(RopeEntity* this) {
u32 r;
- this->action = 2;
- this->timer = (Random() & 0x30) + 60;
- this->speed = 0x80;
- this->field_0x7a.HWORD = 0x80;
+ super->action = 2;
+ super->timer = (Random() & 0x30) + 60;
+ super->speed = 0x80;
+ this->unk_7a = 0x80;
r = Random() & 0x18;
- this->direction = r;
+ super->direction = r;
r = r / 8;
- if (r != this->animationState) {
- this->animationState = r;
- InitializeAnimation(this, r);
+ if (r != super->animationState) {
+ super->animationState = r;
+ InitializeAnimation(super, r);
}
}
-u32 sub_0803163C(Entity* this) {
+u32 sub_0803163C(RopeEntity* this) {
u32 h;
- if (GetTileUnderEntity(this) == 0x13) {
- h = this->field_0x7a.HWORD / 2;
+ if (GetTileUnderEntity(super) == 0x13) {
+ h = this->unk_7a / 2;
} else {
- h = this->field_0x7a.HWORD;
+ h = this->unk_7a;
}
- this->speed = h;
- return ProcessMovement0(this);
+ super->speed = h;
+ return ProcessMovement0(super);
}
diff --git a/src/enemy/ropeGolden.c b/src/enemy/ropeGolden.c
index b5d0f886..fd9127c7 100644
--- a/src/enemy/ropeGolden.c
+++ b/src/enemy/ropeGolden.c
@@ -4,166 +4,173 @@
*
* @brief Golden Rope enemy
*/
-
-#include "global.h"
-#include "entity.h"
+#define NENT_DEPRECATED
#include "enemy.h"
+#include "entity.h"
#include "physics.h"
#include "player.h"
#include "item.h"
-void RopeGolden_OnTick(Entity*);
-void RopeGolden_OnCollision(Entity*);
-void RopeGolden_OnDeath(Entity*);
-void sub_08038258(Entity*);
-void sub_0803827C(Entity*);
-void sub_080382EC(Entity*);
-void sub_08038304(Entity*);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[16];
+ /*0x78*/ u8 unk_78;
+ /*0x79*/ u8 unk_79;
+ /*0x7a*/ u8 unk_7a;
+} RopeGoldenEntity;
+
+void RopeGolden_OnTick(RopeGoldenEntity* this);
+void RopeGolden_OnCollision(RopeGoldenEntity* this);
+void RopeGolden_OnDeath(RopeGoldenEntity* this);
+void sub_08038258(RopeGoldenEntity* this);
+void sub_0803827C(RopeGoldenEntity* this);
+void sub_080382EC(RopeGoldenEntity* this);
+void sub_08038304(RopeGoldenEntity* this);
-static void (*const RopeGolden_Functions[6])(Entity*) = {
- RopeGolden_OnTick, RopeGolden_OnCollision, GenericKnockback, RopeGolden_OnDeath, GenericConfused, RopeGolden_OnTick,
+static void (*const RopeGolden_Functions[6])(RopeGoldenEntity*) = {
+ RopeGolden_OnTick, RopeGolden_OnCollision, (void (*)(RopeGoldenEntity*))GenericKnockback, RopeGolden_OnDeath, (void (*)(RopeGoldenEntity*))GenericConfused, RopeGolden_OnTick,
};
-void sub_080383AC(Entity*);
-void sub_080383E4(Entity*);
+void sub_080383AC(RopeGoldenEntity* this);
+void sub_080383E4(RopeGoldenEntity* this);
-void RopeGolden(Entity* this) {
+void RopeGolden(RopeGoldenEntity* this) {
u32 x;
- x = sub_080012DC(this);
+ x = sub_080012DC(super);
if (x != 0) {
- gUnk_080012C8[x](this);
+ gUnk_080012C8[x](super);
} else {
- RopeGolden_Functions[GetNextFunction(this)](this);
- SetChildOffset(this, 0, 1, -0x10);
+ RopeGolden_Functions[GetNextFunction(super)](this);
+ SetChildOffset(super, 0, 1, -0x10);
}
}
-void RopeGolden_OnTick(Entity* this) {
- static void (*const actionFuncs[4])(Entity*) = {
+void RopeGolden_OnTick(RopeGoldenEntity* this) {
+ static void (*const actionFuncs[4])(RopeGoldenEntity*) = {
sub_08038258,
sub_0803827C,
sub_080382EC,
sub_08038304,
};
- actionFuncs[this->action](this);
+ actionFuncs[super->action](this);
}
-void RopeGolden_OnCollision(Entity* this) {
- if (this->confusedTime != 0) {
- Create0x68FX(this, FX_STARS);
+void RopeGolden_OnCollision(RopeGoldenEntity* this) {
+ if (super->confusedTime != 0) {
+ Create0x68FX(super, FX_STARS);
}
- EnemyFunctionHandlerAfterCollision(this, RopeGolden_Functions);
+ EnemyFunctionHandlerAfterCollision(super, RopeGolden_Functions);
}
-void RopeGolden_OnDeath(Entity* this) {
- if ((this->gustJarState & 2) == 0) {
- SetGlobalFlag(this->type2);
+void RopeGolden_OnDeath(RopeGoldenEntity* this) {
+ if ((super->gustJarState & 2) == 0) {
+ SetGlobalFlag(super->type2);
}
- CreateDeathFx(this, 0xff, ITEM_RUPEE100);
+ CreateDeathFx(super, 0xff, ITEM_RUPEE100);
}
-void sub_08038258(Entity* this) {
- if (CheckGlobalFlag(this->type2) != 0) {
+void sub_08038258(RopeGoldenEntity* this) {
+ if (CheckGlobalFlag(super->type2) != 0) {
DeleteThisEntity();
}
- sub_0804A720(this);
- this->animationState = 0xff;
+ sub_0804A720(super);
+ super->animationState = 0xff;
sub_080383AC(this);
}
-void sub_0803827C(Entity* this) {
- if (this->subtimer != 0) {
- this->subtimer--;
+void sub_0803827C(RopeGoldenEntity* this) {
+ if (super->subtimer != 0) {
+ super->subtimer--;
} else {
- if ((sub_0804A044(this, &gPlayerEntity, 0x8) != 0xff) ||
- (EntityWithinDistance(this, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x24) != 0)) {
+ if ((sub_0804A044(super, &gPlayerEntity, 0x8) != 0xff) ||
+ (EntityWithinDistance(super, gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI, 0x24) != 0)) {
sub_080383E4(this);
return;
}
}
- UpdateAnimationVariableFrames(this, 0x2);
- if (!ProcessMovement0(this)) {
+ UpdateAnimationVariableFrames(super, 0x2);
+ if (!ProcessMovement0(super)) {
sub_080383AC(this);
} else {
- if (--this->timer == 0) {
+ if (--super->timer == 0) {
sub_080383AC(this);
}
}
}
-void sub_080382EC(Entity* this) {
- if (--this->timer == 0) {
- this->action = 3;
+void sub_080382EC(RopeGoldenEntity* this) {
+ if (--super->timer == 0) {
+ super->action = 3;
}
}
-void sub_08038304(Entity* this) {
+void sub_08038304(RopeGoldenEntity* this) {
u32 cVar2;
s32 tmp;
u32 tmp3;
u32 h;
- UpdateAnimationVariableFrames(this, 2);
- if (!ProcessMovement0(this)) {
- if (this->field_0x78.HALF.LO == this->direction) {
+ UpdateAnimationVariableFrames(super, 2);
+ if (!ProcessMovement0(super)) {
+ if (this->unk_78 == super->direction) {
#ifdef EU
- this->subtimer = 30;
+ super->subtimer = 30;
#else
- this->subtimer = 90;
+ super->subtimer = 90;
#endif
sub_080383AC(this);
} else {
- this->direction = this->field_0x78.HALF.LO;
+ super->direction = this->unk_78;
}
} else {
tmp = 10;
- if ((u8)((++this->timer) % tmp) == 0) {
- this->timer = 0;
- if (this->field_0x78.HALF.LO == this->direction) {
+ if ((u8)((++super->timer) % tmp) == 0) {
+ super->timer = 0;
+ if (this->unk_78 == super->direction) {
cVar2 = ((Random() & 2) - 1) << 27;
cVar2 = cVar2 >> 24;
- h = this->field_0x78.HALF.HI;
+ h = this->unk_79;
tmp3 = (u8)cVar2 << 24;
if (tmp3 >> 24 == h) {
- if (h == this->field_0x7a.HALF.LO) {
+ if (h == this->unk_7a) {
cVar2 = -tmp3 >> 24;
}
}
- this->field_0x7a.HALF.LO = this->field_0x78.HALF.HI;
- this->field_0x78.HALF.HI = cVar2;
- this->direction = (this->direction + cVar2) & 0x18;
+ this->unk_7a = this->unk_79;
+ this->unk_79 = cVar2;
+ super->direction = (super->direction + cVar2) & 0x18;
} else {
- this->direction = this->field_0x78.HALF.LO;
+ super->direction = this->unk_78;
}
- this->animationState = this->direction >> 3;
- InitializeAnimation(this, this->animationState + 4);
+ super->animationState = super->direction >> 3;
+ InitializeAnimation(super, super->animationState + 4);
}
}
}
-void sub_080383AC(Entity* this) {
+void sub_080383AC(RopeGoldenEntity* this) {
u32 v;
- this->action = 1;
- this->timer = 8;
- this->speed = 0x100;
- this->direction = DirectionRoundUp(GetFacingDirection(this, &gPlayerEntity));
- v = this->direction >> 3;
- if (v != this->animationState) {
- this->animationState = v;
- InitializeAnimation(this, v);
+ super->action = 1;
+ super->timer = 8;
+ super->speed = 0x100;
+ super->direction = DirectionRoundUp(GetFacingDirection(super, &gPlayerEntity));
+ v = super->direction >> 3;
+ if (v != super->animationState) {
+ super->animationState = v;
+ InitializeAnimation(super, v);
}
}
-void sub_080383E4(Entity* this) {
+void sub_080383E4(RopeGoldenEntity* this) {
u32 v;
- this->action = 2;
- this->timer = 8;
- this->speed = 0x280;
- v = DirectionRoundUp(GetFacingDirection(this, &gPlayerEntity));
- this->direction = v;
- this->field_0x78.HALF.LO = v;
- this->animationState = this->direction >> 3;
- this->field_0x78.HALF.HI = 0xff;
- this->field_0x7a.HALF.LO = -1;
- InitializeAnimation(this, this->animationState + 4);
+ super->action = 2;
+ super->timer = 8;
+ super->speed = 0x280;
+ v = DirectionRoundUp(GetFacingDirection(super, &gPlayerEntity));
+ super->direction = v;
+ this->unk_78 = v;
+ super->animationState = super->direction >> 3;
+ this->unk_79 = 0xff;
+ this->unk_7a = -1;
+ InitializeAnimation(super, super->animationState + 4);
}
diff --git a/src/enemy/rupeeLike.c b/src/enemy/rupeeLike.c
index 39a8e586..03a65ffe 100644
--- a/src/enemy/rupeeLike.c
+++ b/src/enemy/rupeeLike.c
@@ -4,237 +4,246 @@
*
* @brief Rupee Like enemy
*/
-
-#include "global.h"
-#include "entity.h"
+#define NENT_DEPRECATED
#include "enemy.h"
-#include "object.h"
-#include "save.h"
+#include "entity.h"
#include "hitbox.h"
+#include "object.h"
#include "room.h"
+#include "save.h"
-extern void sub_080293DC(Entity*);
-extern void sub_080296D8(Entity*);
-extern void sub_08029770(Entity*);
-extern void sub_080297F0(Entity*);
-extern void sub_080296C8(Entity*);
-extern void sub_0802969C(Entity*);
-
-extern void (*const RupeeLike_Functions[])(Entity*);
-extern void (*const gUnk_080CCC18[])(Entity*);
-extern void (*const gUnk_080CCC3C[])(Entity*);
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[24];
+ /*0x80*/ u8 unk_80;
+ /*0x81*/ u8 unk_81;
+ /*0x82*/ u8 unk_82;
+ /*0x83*/ u8 unk_83;
+ /*0x84*/ u8 unk_84;
+} RupeeLikeEntity;
+
+extern void sub_080293DC(RupeeLikeEntity* this);
+extern void sub_080296D8(RupeeLikeEntity* this);
+extern void sub_08029770(RupeeLikeEntity* this);
+extern void sub_080297F0(RupeeLikeEntity* this);
+extern void sub_080296C8(RupeeLikeEntity* this);
+extern void sub_0802969C(RupeeLikeEntity* this);
+
+extern void (*const RupeeLike_Functions[])(RupeeLikeEntity*);
+extern void (*const gUnk_080CCC18[])(RupeeLikeEntity*);
+extern void (*const gUnk_080CCC3C[])(RupeeLikeEntity*);
extern const u8 gUnk_080CCC34[];
extern const s8 gUnk_080CCC44[];
extern const u8 gUnk_080CCC47[];
-void RupeeLike(Entity* this) {
+void RupeeLike(RupeeLikeEntity* this) {
u32 uVar1;
- if (this->type2 == 0) {
- uVar1 = (u8)sub_080043E8(this);
+ if (super->type2 == 0) {
+ uVar1 = (u8)sub_080043E8(super);
if (uVar1 != 0) {
- if (this->action == 4) {
+ if (super->action == 4) {
sub_080296D8(this);
}
- sub_08001290(this, uVar1);
+ sub_08001290(super, uVar1);
} else {
- RupeeLike_Functions[GetNextFunction(this)](this);
- SetChildOffset(this, 0, 1, -0x10);
+ RupeeLike_Functions[GetNextFunction(super)](this);
+ SetChildOffset(super, 0, 1, -0x10);
}
} else {
sub_080293DC(this);
}
}
-void RupeeLike_OnTick(Entity* this) {
- gUnk_080CCC18[this->action](this);
+void RupeeLike_OnTick(RupeeLikeEntity* this) {
+ gUnk_080CCC18[super->action](this);
}
-void RupeeLike_OnCollision(Entity* this) {
- if (this->hitType == 0x8e) {
+void RupeeLike_OnCollision(RupeeLikeEntity* this) {
+ if (super->hitType == 0x8e) {
sub_08029770(this);
} else {
- if (this->action == 4) {
+ if (super->action == 4) {
sub_080296D8(this);
}
- if (*(u8*)(*(u32*)&this->contactedEntity + 8) == 1) {
- if (this->action == 2) {
- InitializeAnimation(this, 0);
- InitializeAnimation(this->child, 4);
+ if (*(u8*)(*(u32*)&super->contactedEntity + 8) == 1) {
+ if (super->action == 2) {
+ InitializeAnimation(super, 0);
+ InitializeAnimation(super->child, 4);
}
- this->action = 4;
- this->timer = 60;
- this->subtimer = 0;
- this->field_0x82.HALF.HI = 0x41;
- this->flags2 &= 0xfc;
- this->field_0x80.HALF.LO = gPlayerEntity.spritePriority.b1;
+ super->action = 4;
+ super->timer = 60;
+ super->subtimer = 0;
+ this->unk_83 = 0x41;
+ super->flags2 &= 0xfc;
+ this->unk_80 = gPlayerEntity.spritePriority.b1;
EnqueueSFX(SFX_PLACE_OBJ);
} else {
- if (this->confusedTime != 0) {
- Create0x68FX(this, FX_STARS);
+ if (super->confusedTime != 0) {
+ Create0x68FX(super, FX_STARS);
}
}
}
- EnemyFunctionHandlerAfterCollision(this, RupeeLike_Functions);
+ EnemyFunctionHandlerAfterCollision(super, RupeeLike_Functions);
}
-void RupeeLike_OnDeath(Entity* this) {
- CreateDeathFx(this, 0xff, gUnk_080CCC34[this->cutsceneBeh.HALF.LO * 3 + this->type]);
+void RupeeLike_OnDeath(RupeeLikeEntity* this) {
+ CreateDeathFx(super, 0xff, gUnk_080CCC34[this->unk_84 * 3 + super->type]);
}
-void RupeeLike_OnGrabbed(Entity* this) {
+void RupeeLike_OnGrabbed(RupeeLikeEntity* this) {
}
-void sub_080293DC(Entity* this) {
- CopyPositionAndSpriteOffset(this->parent, this);
- this->y.HALF.HI++;
- this->z.HALF.HI--;
- gUnk_080CCC3C[this->action](this);
+void sub_080293DC(RupeeLikeEntity* this) {
+ CopyPositionAndSpriteOffset(super->parent, super);
+ super->y.HALF.HI++;
+ super->z.HALF.HI--;
+ gUnk_080CCC3C[super->action](this);
}
-void sub_0802940C(Entity* this) {
- Entity* ent;
-
- ent = CreateEnemy(RUPEE_LIKE, this->type);
- if (ent != NULL) {
- sub_0804A720(this);
- ent->parent = this;
- ent->type2 = 1;
- this->child = ent;
- this->field_0x80.HALF.HI = 0;
- this->cutsceneBeh.HALF.LO = 0;
- this->field_0x82.HALF.LO = this->palette.b.b0;
+void sub_0802940C(RupeeLikeEntity* this) {
+ Entity* entity;
+
+ entity = CreateEnemy(RUPEE_LIKE, super->type);
+ if (entity != NULL) {
+ sub_0804A720(super);
+ entity->parent = super;
+ entity->type2 = 1;
+ super->child = entity;
+ this->unk_81 = 0;
+ this->unk_84 = 0;
+ this->unk_82 = super->palette.b.b0;
sub_080297F0(this);
}
}
-void sub_0802944C(Entity* this) {
+void sub_0802944C(RupeeLikeEntity* this) {
sub_080296C8(this);
- if ((this->field_0x80.HALF.HI != 0) && sub_08049FDC(this, 1)) {
+ if ((this->unk_81 != 0) && sub_08049FDC(super, 1)) {
sub_08029770(this);
}
}
-void sub_08029474(Entity* this) {
+void sub_08029474(RupeeLikeEntity* this) {
u32 bVar1;
sub_080296C8(this);
- if (this->frame & ANIM_DONE) {
- this->action = 3;
- this->timer = 8;
- bVar1 = GetFacingDirection(this, &gPlayerEntity);
- this->direction = bVar1;
- this->animationState = (bVar1 << 0x18) >> 0x1c;
- InitializeAnimation(this, this->animationState);
- InitializeAnimation(this->child, this->animationState + 4);
+ if (super->frame & ANIM_DONE) {
+ super->action = 3;
+ super->timer = 8;
+ bVar1 = GetFacingDirection(super, &gPlayerEntity);
+ super->direction = bVar1;
+ super->animationState = (bVar1 << 0x18) >> 0x1c;
+ InitializeAnimation(super, super->animationState);
+ InitializeAnimation(super->child, super->animationState + 4);
} else {
- if (this->frame == 1) {
- this->frame = 0;
- COLLISION_ON(this);
+ if (super->frame == 1) {
+ super->frame = 0;
+ COLLISION_ON(super);
}
}
}
-void sub_080294D4(Entity* this) {
- if (sub_08049FDC(this, 1) != 0) {
- if (--this->timer == 0) {
- this->timer = 8;
- sub_08004596(this, GetFacingDirection(this, &gPlayerEntity));
+void sub_080294D4(RupeeLikeEntity* this) {
+ if (sub_08049FDC(super, 1) != 0) {
+ if (--super->timer == 0) {
+ super->timer = 8;
+ sub_08004596(super, GetFacingDirection(super, &gPlayerEntity));
sub_0802969C(this);
}
- ProcessMovement0(this);
+ ProcessMovement0(super);
sub_080296C8(this);
} else {
- this->action = 6;
- COLLISION_OFF(this);
- InitializeAnimation(this, 3);
- InitializeAnimation(this->child, 7);
+ super->action = 6;
+ COLLISION_OFF(super);
+ InitializeAnimation(super, 3);
+ InitializeAnimation(super->child, 7);
}
}
-void sub_0802953C(Entity* this) {
+void sub_0802953C(RupeeLikeEntity* this) {
u8* pbVar3;
sub_080296C8(this);
sub_080296C8(this);
if (sub_0807953C() != 0) {
- this->subtimer++;
+ super->subtimer++;
}
- if (this->timer != 0) {
- this->timer--;
+ if (super->timer != 0) {
+ super->timer--;
}
- if (((this->subtimer > 0x2d) || (gSave.stats.rupees == 0)) && (this->timer == 0)) {
+ if (((super->subtimer > 0x2d) || (gSave.stats.rupees == 0)) && (super->timer == 0)) {
sub_080296D8(this);
} else {
ResetActiveItems();
gPlayerState.mobility |= 0x80;
- PositionRelative(this, &gPlayerEntity, 0, Q_16_16(1.0));
- pbVar3 = GetSpriteSubEntryOffsetDataPointer((u16)this->spriteIndex, this->frameIndex);
+ PositionRelative(super, &gPlayerEntity, 0, Q_16_16(1.0));
+ pbVar3 = GetSpriteSubEntryOffsetDataPointer((u16)super->spriteIndex, super->frameIndex);
gPlayerEntity.spriteOffsetX = pbVar3[0];
gPlayerEntity.spriteOffsetY = pbVar3[1] - 1;
gPlayerEntity.spritePriority.b1 = 0;
- if (--this->field_0x82.HALF.HI == 0) {
- this->field_0x82.HALF.HI = 0x41;
+ if (--this->unk_83 == 0) {
+ this->unk_83 = 0x41;
if (gSave.stats.rupees != 0) {
- ModRupees(gUnk_080CCC44[this->type]);
- this->cutsceneBeh.HALF.LO = 1;
+ ModRupees(gUnk_080CCC44[super->type]);
+ this->unk_84 = 1;
}
}
}
}
-void sub_08029610(Entity* this) {
- if (--this->subtimer == 0) {
- this->action = 3;
- this->timer = 1;
+void sub_08029610(RupeeLikeEntity* this) {
+ if (--super->subtimer == 0) {
+ super->action = 3;
+ super->timer = 1;
}
sub_080296C8(this);
}
-void sub_08029630(Entity* this) {
+void sub_08029630(RupeeLikeEntity* this) {
sub_080296C8(this);
- if (this->frame & ANIM_DONE) {
- this->field_0x80.HALF.HI = 1;
- this->child->spriteSettings.draw = FALSE;
+ if (super->frame & ANIM_DONE) {
+ this->unk_81 = 1;
+ super->child->spriteSettings.draw = FALSE;
sub_080297F0(this);
}
}
-void sub_08029660(Entity* this) {
+void sub_08029660(RupeeLikeEntity* this) {
u32 temp;
- this->action = 1;
- this->spriteIndex = 0xd1;
- temp = gUnk_080CCC47[this->type];
- this->palette.b.b0 = temp;
+ super->action = 1;
+ super->spriteIndex = 0xd1;
+ temp = gUnk_080CCC47[super->type];
+ super->palette.b.b0 = temp;
}
-void sub_08029688(Entity* this) {
- if (this->parent->next == NULL) {
- DeleteEntity(this);
+void sub_08029688(RupeeLikeEntity* this) {
+ if (super->parent->next == NULL) {
+ DeleteEntity(super);
}
}
-void sub_0802969C(Entity* this) {
+void sub_0802969C(RupeeLikeEntity* this) {
u32 bVar1;
- if ((this->direction & 0xf) != 0) {
+ if ((super->direction & 0xf) != 0) {
- bVar1 = this->direction >> 4;
- if (bVar1 != this->animationState) {
- this->animationState = bVar1;
- InitializeAnimation(this, bVar1);
- InitializeAnimation(this->child, bVar1 + 4);
+ bVar1 = super->direction >> 4;
+ if (bVar1 != super->animationState) {
+ super->animationState = bVar1;
+ InitializeAnimation(super, bVar1);
+ InitializeAnimation(super->child, bVar1 + 4);
}
}
}
-void sub_080296C8(Entity* this) {
- GetNextFrame(this);
- GetNextFrame(this->child);
+void sub_080296C8(RupeeLikeEntity* this) {
+ GetNextFrame(super);
+ GetNextFrame(super->child);
}
-void sub_080296D8(Entity* this) {
+void sub_080296D8(RupeeLikeEntity* this) {
gPlayerState.jump_status = 0x41;
gPlayerState.flags &= ~PL_CAPTURED;
gPlayerEntity.flags |= ENT_COLLIDE;
@@ -242,65 +251,65 @@ void sub_080296D8(Entity* this) {
gPlayerEntity.iframes = 0xa6;
gPlayerEntity.z.HALF.HI = -2;
gPlayerEntity.direction = gPlayerEntity.animationState << 2;
- gPlayerEntity.spritePriority.b1 = this->field_0x80.HALF.LO;
+ gPlayerEntity.spritePriority.b1 = this->unk_80;
gPlayerEntity.spriteOffsetY = 0;
gPlayerEntity.speed = 0x140;
- this->action = 5;
- this->subtimer = 60;
- this->flags2 |= 3;
- if ((s8)this->iframes == 0) {
- this->iframes = 0xf4;
+ super->action = 5;
+ super->subtimer = 60;
+ super->flags2 |= 3;
+ if ((s8)super->iframes == 0) {
+ super->iframes = 0xf4;
}
}
-void sub_08029770(Entity* this) {
+void sub_08029770(RupeeLikeEntity* this) {
u32 temp;
- if (LoadFixedGFX(this, 0x73) != 0) {
- this->action = 2;
- COLLISION_OFF(this);
- this->spriteIndex = 0xd1;
- this->spritePriority.b1 = 3;
- temp = this->field_0x82.HALF.LO;
- this->palette.b.b0 = temp;
- this->hitType = 0x8d;
- this->hitbox = (Hitbox*)&gUnk_080FD260;
- InitializeAnimation(this, 2);
- this->child->spriteSettings.draw = TRUE;
- InitializeAnimation(this->child, 6);
- CreateDust(this);
+ if (LoadFixedGFX(super, 0x73) != 0) {
+ super->action = 2;
+ COLLISION_OFF(super);
+ super->spriteIndex = 0xd1;
+ super->spritePriority.b1 = 3;
+ temp = this->unk_82;
+ super->palette.b.b0 = temp;
+ super->hitType = 0x8d;
+ super->hitbox = (Hitbox*)&gUnk_080FD260;
+ InitializeAnimation(super, 2);
+ super->child->spriteSettings.draw = TRUE;
+ InitializeAnimation(super->child, 6);
+ CreateDust(super);
}
}
-void sub_080297F0(Entity* this) {
+void sub_080297F0(RupeeLikeEntity* this) {
u32 temp;
- this->action = 1;
- this->timer = 120;
- COLLISION_ON(this);
- this->spriteSettings.draw = TRUE;
- this->hitType = 0x8e;
- UnloadGFXSlots(this);
+ super->action = 1;
+ super->timer = 120;
+ COLLISION_ON(super);
+ super->spriteSettings.draw = TRUE;
+ super->hitType = 0x8e;
+ UnloadGFXSlots(super);
#ifdef EU
- this->spriteIndex = 0x142;
+ super->spriteIndex = 0x142;
#else
- this->spriteIndex = 0x143;
+ super->spriteIndex = 0x143;
#endif
- temp = gUnk_080CCC47[this->type];
- this->palette.b.b0 = temp;
- this->spriteVramOffset = 9;
- InitializeAnimation(this, 0x54);
+ temp = gUnk_080CCC47[super->type];
+ super->palette.b.b0 = temp;
+ super->spriteVramOffset = 9;
+ InitializeAnimation(super, 0x54);
}
// clang-format off
-void (*const RupeeLike_Functions[])(Entity*) = {
+void (*const RupeeLike_Functions[])(RupeeLikeEntity*) = {
RupeeLike_OnTick,
RupeeLike_OnCollision,
- GenericKnockback,
+ (void (*)(RupeeLikeEntity*))GenericKnockback,
RupeeLike_OnDeath,
- GenericConfused,
+ (void (*)(RupeeLikeEntity*))GenericConfused,
RupeeLike_OnGrabbed,
};
-void (*const gUnk_080CCC18[])(Entity*) = {
+void (*const gUnk_080CCC18[])(RupeeLikeEntity*) = {
sub_0802940C,
sub_0802944C,
sub_08029474,
@@ -316,7 +325,7 @@ const u8 gUnk_080CCC34[] = {
0x56, 0x57,
};
-void (*const gUnk_080CCC3C[])(Entity*) = {
+void (*const gUnk_080CCC3C[])(RupeeLikeEntity*) = {
sub_08029660,
sub_08029688,
};
diff --git a/src/enemy/scissorsBeetle.c b/src/enemy/scissorsBeetle.c
index 46a39494..35cc21b1 100644
--- a/src/enemy/scissorsBeetle.c
+++ b/src/enemy/scissorsBeetle.c
@@ -1,7 +1,13 @@
+/**
+ * @file scissorsBeetle.c
+ * @ingroup Enemies
+ *
+ * @brief Scissors Beetle enemy
+ */
#define NENT_DEPRECATED
#include "collision.h"
-#include "entity.h"
#include "enemy.h"
+#include "entity.h"
typedef struct {
Entity base;
@@ -62,22 +68,22 @@ void ScissorsBeetle_OnGrabbed(ScissorsBeetleEntity* this) {
}
void ScissorsBeetle_Init(ScissorsBeetleEntity* this) {
- Entity* ent = CreateProjectile(MANDIBLES_PROJECTILE);
- if (ent == NULL)
+ Entity* entity = CreateProjectile(MANDIBLES_PROJECTILE);
+ if (entity == NULL)
return;
sub_0804A720(super);
super->action = 1;
super->spriteSettings.draw = 1;
COLLISION_ON(super);
- super->child = ent;
+ super->child = entity;
super->animationState = Random() & 6;
this->unk_80 = 0;
this->unk_7a = 0;
- ent->parent = super;
- ent->type = 0;
- ent->animationState = 0xff;
- ent->collisionLayer = super->collisionLayer;
+ entity->parent = super;
+ entity->type = 0;
+ entity->animationState = 0xff;
+ entity->collisionLayer = super->collisionLayer;
sub_08038BA8(this);
}
diff --git a/src/enemy/sensorBladeTrap.c b/src/enemy/sensorBladeTrap.c
index 627a75bb..2527a3a2 100644
--- a/src/enemy/sensorBladeTrap.c
+++ b/src/enemy/sensorBladeTrap.c
@@ -4,105 +4,118 @@
*
* @brief Sensor Blade Trap enemy
*/
+#define NENT_DEPRECATED
#include "collision.h"
#include "enemy.h"
#include "map.h"
#include "physics.h"
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[16];
+ /*0x78*/ u16 unk_78;
+ /*0x7a*/ u16 unk_7a;
+ /*0x7c*/ u16 unk_7c;
+ /*0x7e*/ u16 unk_7e;
+ /*0x80*/ u8 unused2[4];
+ /*0x84*/ u16 unk_84;
+ /*0x86*/ u16 unk_86;
+} SensorBladeTrapEntity;
+
extern u32 sub_0804A024(Entity*, u32, u32);
-void sub_0802BB10(Entity*);
-bool32 sub_0802BB2C(Entity*, u32);
+void sub_0802BB10(SensorBladeTrapEntity* this);
+bool32 sub_0802BB2C(SensorBladeTrapEntity* this, u32);
-extern void (*const gUnk_080CD3C4[])(Entity*);
+extern void (*const gUnk_080CD3C4[])(SensorBladeTrapEntity*);
extern const u16 gUnk_080CD3D4[];
extern const s8 gUnk_080CD3DC[];
-void SensorBladeTrap(Entity* this) {
- gUnk_080CD3C4[this->action](this);
+void SensorBladeTrap(SensorBladeTrapEntity* this) {
+ gUnk_080CD3C4[super->action](this);
}
-void sub_0802B9EC(Entity* this) {
- this->action = 1;
- this->field_0x78.HWORD = gUnk_080CD3D4[this->type];
- this->field_0x7c.HALF.LO = this->cutsceneBeh.HWORD;
- this->field_0x7c.HALF.HI = this->field_0x86.HWORD;
+void sub_0802B9EC(SensorBladeTrapEntity* this) {
+ super->action = 1;
+ this->unk_78 = gUnk_080CD3D4[super->type];
+ this->unk_7c = this->unk_84;
+ this->unk_7e = this->unk_86;
}
-void sub_0802BA18(Entity* this) {
- u32 direction = sub_0804A024(this, 1, 0xe);
+void sub_0802BA18(SensorBladeTrapEntity* this) {
+ u32 direction = sub_0804A024(super, 1, 0xe);
if (direction == 0xff)
return;
if (sub_0802BB2C(this, direction))
return;
- this->action = 2;
- this->speed = this->field_0x78.HWORD;
- this->direction = direction;
+ super->action = 2;
+ super->speed = this->unk_78;
+ super->direction = direction;
switch (direction >> 3) {
case 0:
- this->field_0x7a.HWORD = this->y.HALF.HI - this->field_0x7c.HALF.HI;
+ this->unk_7a = super->y.HALF.HI - this->unk_7e;
break;
case 1:
- this->field_0x7a.HWORD = this->x.HALF.HI + this->field_0x7c.HALF.LO;
+ this->unk_7a = super->x.HALF.HI + this->unk_7c;
break;
case 2:
- this->field_0x7a.HWORD = this->y.HALF.HI + this->field_0x7c.HALF.HI;
+ this->unk_7a = super->y.HALF.HI + this->unk_7e;
break;
case 3:
- this->field_0x7a.HWORD = this->x.HALF.HI - this->field_0x7c.HALF.LO;
+ this->unk_7a = super->x.HALF.HI - this->unk_7c;
break;
}
}
-void sub_0802BA8C(Entity* this) {
- if (!ProcessMovement12(this)) {
+void sub_0802BA8C(SensorBladeTrapEntity* this) {
+ if (!ProcessMovement12(super)) {
sub_0802BB10(this);
} else {
- switch (this->direction >> 3) {
+ switch (super->direction >> 3) {
case 0:
- if (this->field_0x7a.HWORD >= this->y.HALF.HI)
+ if (this->unk_7a >= super->y.HALF.HI)
sub_0802BB10(this);
break;
case 1:
- if (this->field_0x7a.HWORD <= this->x.HALF.HI)
+ if (this->unk_7a <= super->x.HALF.HI)
sub_0802BB10(this);
break;
case 2:
- if (this->field_0x7a.HWORD <= this->y.HALF.HI)
+ if (this->unk_7a <= super->y.HALF.HI)
sub_0802BB10(this);
break;
case 3:
- if (this->field_0x7a.HWORD >= this->x.HALF.HI)
+ if (this->unk_7a >= super->x.HALF.HI)
sub_0802BB10(this);
break;
}
}
}
-void sub_0802BAFC(Entity* this) {
- if (!ProcessMovement12(this)) {
- this->action = 1;
+void sub_0802BAFC(SensorBladeTrapEntity* this) {
+ if (!ProcessMovement12(super)) {
+ super->action = 1;
}
}
-void sub_0802BB10(Entity* this) {
- this->action = 3;
- this->speed = 0xc0;
- this->direction = this->direction ^ 0x10;
+void sub_0802BB10(SensorBladeTrapEntity* this) {
+ super->action = 3;
+ super->speed = 0xc0;
+ super->direction = super->direction ^ 0x10;
EnqueueSFX(SFX_METAL_CLINK);
}
-bool32 sub_0802BB2C(Entity* this, u32 param_2) {
- u8* layer = this->collisionLayer == 2 ? gMapTop.collisionData : gMapBottom.collisionData;
+bool32 sub_0802BB2C(SensorBladeTrapEntity* this, u32 param_2) {
+ u8* layer = super->collisionLayer == 2 ? gMapTop.collisionData : gMapBottom.collisionData;
const s8* ptr = &gUnk_080CD3DC[param_2 >> 2];
- return IsTileCollision(layer, this->x.HALF.HI + ptr[0], this->y.HALF.HI + ptr[1], 0);
+ return IsTileCollision(layer, super->x.HALF.HI + ptr[0], super->y.HALF.HI + ptr[1], 0);
}
// clang-format off
-void (*const gUnk_080CD3C4[])(Entity*) = {
+void (*const gUnk_080CD3C4[])(SensorBladeTrapEntity*) = {
sub_0802B9EC,
sub_0802BA18,
sub_0802BA8C,
diff --git a/src/enemy/slime.c b/src/enemy/slime.c
index 494d0459..66d102b7 100644
--- a/src/enemy/slime.c
+++ b/src/enemy/slime.c
@@ -4,142 +4,148 @@
*
* @brief Slime enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "physics.h"
#include "room.h"
typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[28];
+ /*0x84*/ u8 unk_84;
+} SlimeEntity;
+
+typedef struct {
s8 h, v;
} PACKED PosOffset;
-void sub_08044FF8(Entity*);
-void Slime_OnTick(Entity*);
-void Slime_OnCollision(Entity*);
-void Slime_OnGrabbed(Entity*);
-void sub_08044FC8(Entity*);
-void sub_08044FF8(Entity*);
-void sub_08045018(Entity*);
-void sub_08045088(Entity*);
-void sub_080450A8(Entity*);
-void sub_08045178(Entity*, Entity*, int, int);
-
-static void (*const Slime_Functions[])(Entity*) = {
- Slime_OnTick, Slime_OnCollision, GenericKnockback, GenericDeath, GenericConfused, Slime_OnGrabbed,
+void sub_08044FF8(SlimeEntity* this);
+void Slime_OnTick(SlimeEntity* this);
+void Slime_OnCollision(SlimeEntity* this);
+void Slime_OnGrabbed(SlimeEntity* this);
+void sub_08044FC8(SlimeEntity* this);
+void sub_08044FF8(SlimeEntity* this);
+void sub_08045018(SlimeEntity* this);
+void sub_08045088(SlimeEntity* this);
+void sub_080450A8(SlimeEntity* this);
+void sub_08045178(SlimeEntity* this, Entity*, int, int);
+
+static void (*const Slime_Functions[])(SlimeEntity*) = {
+ Slime_OnTick, Slime_OnCollision, (void (*)(SlimeEntity*))GenericKnockback, (void (*)(SlimeEntity*))GenericDeath, (void (*)(SlimeEntity*))GenericConfused, Slime_OnGrabbed,
};
-void Slime(Entity* this) {
- EnemyFunctionHandler(this, Slime_Functions);
- SetChildOffset(this, 0, 1, -12);
+void Slime(SlimeEntity* this) {
+ EnemyFunctionHandler(super, (EntityActionArray)Slime_Functions);
+ SetChildOffset(super, 0, 1, -12);
}
-void Slime_OnTick(Entity* this) {
- static void (*const actionFuncs[])(Entity*) = {
+void Slime_OnTick(SlimeEntity* this) {
+ static void (*const actionFuncs[])(SlimeEntity*) = {
sub_08044FC8, sub_08044FF8, sub_08045018, sub_08045088, sub_080450A8,
};
- actionFuncs[this->action](this);
+ actionFuncs[super->action](this);
}
-void Slime_OnCollision(Entity* this) {
- if ((this->health != 0) && (this->cutsceneBeh.HALF.LO != this->health)) {
- this->action = 4;
+void Slime_OnCollision(SlimeEntity* this) {
+ if ((super->health != 0) && (this->unk_84 != super->health)) {
+ super->action = 4;
} else {
- EnemyFunctionHandlerAfterCollision(this, Slime_Functions);
+ EnemyFunctionHandlerAfterCollision(super, Slime_Functions);
}
- if (this->confusedTime != 0) {
- Create0x68FX(this, FX_STARS);
+ if (super->confusedTime != 0) {
+ Create0x68FX(super, FX_STARS);
}
}
-void Slime_OnGrabbed(Entity* this) {
+void Slime_OnGrabbed(SlimeEntity* this) {
}
-void sub_08044FC8(Entity* this) {
- this->action = 1;
- this->spriteSettings.draw = 1;
- this->speed = 128;
- sub_0804A720(this);
- InitializeAnimation(this, 0);
+void sub_08044FC8(SlimeEntity* this) {
+ super->action = 1;
+ super->spriteSettings.draw = 1;
+ super->speed = 128;
+ sub_0804A720(super);
+ InitializeAnimation(super, 0);
sub_08044FF8(this);
}
-void sub_08044FF8(Entity* this) {
- this->action = 2;
- this->timer = (Random() & 0x1F) + 30;
- this->cutsceneBeh.HALF.LO = this->health;
+void sub_08044FF8(SlimeEntity* this) {
+ super->action = 2;
+ super->timer = (Random() & 0x1F) + 30;
+ this->unk_84 = super->health;
}
-void sub_08045018(Entity* this) {
- GetNextFrame(this);
- if (--this->timer == 0) {
- this->action = 3;
- this->timer = 1;
- if (0 < this->speed) {
- this->timer = FixedDiv(0x1000, this->speed) >> 8;
+void sub_08045018(SlimeEntity* this) {
+ GetNextFrame(super);
+ if (--super->timer == 0) {
+ super->action = 3;
+ super->timer = 1;
+ if (0 < super->speed) {
+ super->timer = FixedDiv(0x1000, super->speed) >> 8;
}
- if (sub_08049FA0(this) == 0 && (Random() & 3)) {
- this->direction = (sub_08049EE4(this) + 0xfc + (Random() & 8)) & 24;
+ if (sub_08049FA0(super) == 0 && (Random() & 3)) {
+ super->direction = (sub_08049EE4(super) + 0xfc + (Random() & 8)) & 24;
return;
}
- this->direction = Random() & 24;
+ super->direction = Random() & 24;
}
}
-void sub_08045088(Entity* this) {
- ProcessMovement0(this);
- GetNextFrame(this);
- if (--this->timer == 0) {
- this->action = 1;
+void sub_08045088(SlimeEntity* this) {
+ ProcessMovement0(super);
+ GetNextFrame(super);
+ if (--super->timer == 0) {
+ super->action = 1;
}
}
/* Split slime into new ones */
-void sub_080450A8(Entity* this) {
+void sub_080450A8(SlimeEntity* this) {
Entity* entities[4];
- Entity* ent;
+ Entity* entity;
s32 count, i;
const PosOffset* off;
static const u8 typeEntityCount[4] = { 2, 2, 4, 2 };
static const PosOffset gUnk_080D16D4[4] = { { 6, 0 }, { -6, 0 }, { 0, 6 }, { 0, -6 } };
/* Can we create enough new entities? */
- count = typeEntityCount[this->type];
+ count = typeEntityCount[super->type];
if (MAX_ENTITIES + 1 - count <= gEntCount)
return;
/* Create 2-4 new MiniSlime */
for (i = 0; i < count; i++)
- entities[i] = CreateEnemy(MINI_SLIME, this->type);
+ entities[i] = CreateEnemy(MINI_SLIME, super->type);
off = gUnk_080D16D4;
for (i = 0; i < count; i++) {
- ent = entities[i];
- ent->child = entities[(i + 1) % count];
- ent->parent = entities[(i + count - 1) % count];
- ent->type2 = 1;
- ent->z.HALF.HI = 0;
- ent->iframes = -0x10;
+ entity = entities[i];
+ entity->child = entities[(i + 1) % count];
+ entity->parent = entities[(i + count - 1) % count];
+ entity->type2 = 1;
+ entity->z.HALF.HI = 0;
+ entity->iframes = -0x10;
/* Set MiniSlime offset relative to killed slime. */
- sub_08045178(this, ent, off->h, off->v);
+ sub_08045178(this, entity, off->h, off->v);
off++;
}
- ent = CreateFx(this, FX_DEATH, 0);
- if (ent != NULL)
- CopyPosition(this, ent);
+ entity = CreateFx(super, FX_DEATH, 0);
+ if (entity != NULL)
+ CopyPosition(super, entity);
- DeleteEntity(this);
+ DeleteEntity(super);
}
-void sub_08045178(Entity* this, Entity* child, int h, int v) {
+void sub_08045178(SlimeEntity* this, Entity* child, int h, int v) {
int x, y;
if (child == NULL)
return;
- sub_0804A4E4(this, child);
+ sub_0804A4E4(super, child);
if (sub_080B1AF0(child, h, v))
return;
diff --git a/src/enemy/sluggula.c b/src/enemy/sluggula.c
index a5bf26bb..c2cf7d5f 100644
--- a/src/enemy/sluggula.c
+++ b/src/enemy/sluggula.c
@@ -4,7 +4,7 @@
*
* @brief Sluggula enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "physics.h"
@@ -129,9 +129,9 @@ void sub_08023CE0(Entity* this) {
GetNextFrame(this);
if (this->frame) {
if (this->frame & ANIM_DONE) {
- Entity* ent = CreateEnemy(SLUGGULA, 1);
- if (ent != NULL) {
- sub_0804A4E4(this, ent);
+ Entity* entity = CreateEnemy(SLUGGULA, 1);
+ if (entity != NULL) {
+ sub_0804A4E4(this, entity);
DeleteThisEntity();
}
} else {
@@ -156,14 +156,14 @@ void sub_08023E10(Entity* this) {
}
void sub_08023E54(Entity* this) {
- Entity* ent;
+ Entity* entity;
if (this->subtimer++ > 27) {
this->subtimer = 0;
- ent = CreateEnemy(SLUGGULA, 2);
- if (ent != NULL) {
+ entity = CreateEnemy(SLUGGULA, 2);
+ if (entity != NULL) {
const s8* ptr = &gUnk_080CBDF7[this->animationState * 2];
- PositionRelative(this, ent, Q_16_16(ptr[0]), Q_16_16(ptr[1]));
+ PositionRelative(this, entity, Q_16_16(ptr[0]), Q_16_16(ptr[1]));
}
}
}
diff --git a/src/enemy/smallPesto.c b/src/enemy/smallPesto.c
index 490da140..74e6254c 100644
--- a/src/enemy/smallPesto.c
+++ b/src/enemy/smallPesto.c
@@ -4,146 +4,152 @@
*
* @brief Small Pesto enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "physics.h"
-void sub_080317F8(Entity*);
-void SmallPesto_OnTick(Entity*);
-void SmallPesto_OnCollision(Entity*);
-void SmallPesto_OnGrabbed(Entity*);
-void sub_08031704(Entity*);
-void sub_08031714(Entity*);
-void sub_08031770(Entity*);
-void sub_080316DC(Entity*);
-void sub_080316E8(Entity*);
-void sub_080316F0(Entity*);
-
-static void (*const SmallPesto_Functions[])(Entity*) = {
- SmallPesto_OnTick, SmallPesto_OnCollision, GenericKnockback, GenericDeath, GenericConfused, SmallPesto_OnGrabbed,
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unused1[24];
+ /*0x80*/ u16 unk_80;
+} SmallPestoEntity;
+
+void sub_080317F8(SmallPestoEntity* this);
+void SmallPesto_OnTick(SmallPestoEntity* this);
+void SmallPesto_OnCollision(SmallPestoEntity* this);
+void SmallPesto_OnGrabbed(SmallPestoEntity* this);
+void sub_08031704(SmallPestoEntity* this);
+void sub_08031714(SmallPestoEntity* this);
+void sub_08031770(SmallPestoEntity* this);
+void sub_080316DC(SmallPestoEntity* this);
+void sub_080316E8(SmallPestoEntity* this);
+void sub_080316F0(SmallPestoEntity* this);
+
+static void (*const SmallPesto_Functions[])(SmallPestoEntity*) = {
+ SmallPesto_OnTick, SmallPesto_OnCollision, (void (*)(SmallPestoEntity*))GenericKnockback, (void (*)(SmallPestoEntity*))GenericDeath, (void (*)(SmallPestoEntity*))GenericConfused, SmallPesto_OnGrabbed,
};
-void sub_080317B4(Entity*);
-void sub_080317E0(Entity*);
-void sub_08031840(Entity*);
+void sub_080317B4(SmallPestoEntity* this);
+void sub_080317E0(SmallPestoEntity* this);
+void sub_08031840(SmallPestoEntity* this);
-void SmallPesto(Entity* this) {
- SmallPesto_Functions[GetNextFunction(this)](this);
+void SmallPesto(SmallPestoEntity* this) {
+ SmallPesto_Functions[GetNextFunction(super)](this);
}
-void SmallPesto_OnTick(Entity* this) {
- static void (*const actionFuncs[])(Entity*) = {
+void SmallPesto_OnTick(SmallPestoEntity* this) {
+ static void (*const actionFuncs[])(SmallPestoEntity*) = {
sub_08031704,
sub_08031714,
sub_08031770,
};
- actionFuncs[this->action](this);
+ actionFuncs[super->action](this);
}
-void SmallPesto_OnCollision(Entity* this) {
+void SmallPesto_OnCollision(SmallPestoEntity* this) {
}
-void SmallPesto_OnGrabbed(Entity* this) {
+void SmallPesto_OnGrabbed(SmallPestoEntity* this) {
s32 iVar1;
- static void (*const subActionFuncs[])(Entity*) = {
+ static void (*const subActionFuncs[])(SmallPestoEntity*) = {
sub_080316DC,
sub_080316E8,
sub_080316F0,
};
- GetNextFrame(this);
- iVar1 = sub_0806F520(this);
+ GetNextFrame(super);
+ iVar1 = sub_0806F520(super);
if (iVar1 == 0) {
- this->action = 1;
- this->subAction = 0;
- COLLISION_ON(this);
- this->speed = 0x40;
- this->subtimer = 1;
+ super->action = 1;
+ super->subAction = 0;
+ COLLISION_ON(super);
+ super->speed = 0x40;
+ super->subtimer = 1;
} else {
- subActionFuncs[this->subAction](this);
+ subActionFuncs[super->subAction](this);
}
}
-void sub_080316DC(Entity* this) {
- this->subAction = 1;
- this->gustJarTolerance = 0x3c;
+void sub_080316DC(SmallPestoEntity* this) {
+ super->subAction = 1;
+ super->gustJarTolerance = 0x3c;
}
-void sub_080316E8(Entity* this) {
- sub_0806F4E8(this);
+void sub_080316E8(SmallPestoEntity* this) {
+ sub_0806F4E8(super);
}
-void sub_080316F0(Entity* this) {
- if (sub_0806F3E4(this)) {
- GenericDeath(this);
+void sub_080316F0(SmallPestoEntity* this) {
+ if (sub_0806F3E4(super)) {
+ GenericDeath(super);
}
}
-void sub_08031704(Entity* this) {
- sub_0804A720(this);
+void sub_08031704(SmallPestoEntity* this) {
+ sub_0804A720(super);
sub_080317F8(this);
}
-void sub_08031714(Entity* this) {
+void sub_08031714(SmallPestoEntity* this) {
sub_080317B4(this);
- if (--this->subtimer == 0) {
- this->subtimer = (Random() & 0xf) + 16;
- if (sub_08049FA0(this) == 0 && (this->subtimer & 1) != 0) {
- this->direction = sub_08049EE4(this);
+ if (--super->subtimer == 0) {
+ super->subtimer = (Random() & 0xf) + 16;
+ if (sub_08049FA0(super) == 0 && (super->subtimer & 1) != 0) {
+ super->direction = sub_08049EE4(super);
} else {
- this->direction += 0x18;
- this->direction = ((Random() & 0xe) + this->direction) & 0x1f;
+ super->direction += 0x18;
+ super->direction = ((Random() & 0xe) + super->direction) & 0x1f;
}
sub_080317E0(this);
}
}
-void sub_08031770(Entity* this) {
- if (this->field_0x80.HWORD != 0) {
- if (--this->field_0x80.HWORD == 0) {
+void sub_08031770(SmallPestoEntity* this) {
+ if (this->unk_80 != 0) {
+ if (--this->unk_80 == 0) {
sub_08031840(this);
}
- } else if (this->child == NULL) {
- this->field_0x80.HWORD = (Random() & 0x7f) | (0x80 << 2);
+ } else if (super->child == NULL) {
+ this->unk_80 = (Random() & 0x7f) | (0x80 << 2);
} else {
- if (this->child->next == NULL) {
- this->child = NULL;
+ if (super->child->next == NULL) {
+ super->child = NULL;
}
}
}
-void sub_080317B4(Entity* this) {
- this->z.HALF.HI = ((Random() & 0x30) != 0) ? -0xc : -0xd;
- LinearMoveUpdate(this);
- GetNextFrame(this);
+void sub_080317B4(SmallPestoEntity* this) {
+ super->z.HALF.HI = ((Random() & 0x30) != 0) ? -0xc : -0xd;
+ LinearMoveUpdate(super);
+ GetNextFrame(super);
}
-void sub_080317E0(Entity* this) {
- this->animationState = ((u8)(this->direction + 2) & 0x1c) >> 2;
- InitializeAnimation(this, this->animationState);
+void sub_080317E0(SmallPestoEntity* this) {
+ super->animationState = ((u8)(super->direction + 2) & 0x1c) >> 2;
+ InitializeAnimation(super, super->animationState);
}
-void sub_080317F8(Entity* this) {
+void sub_080317F8(SmallPestoEntity* this) {
static const Hitbox3D gUnk_080CE560 = { 0, -3, { 3, 2, 2, 3 }, 2, 2, 12, { 0, 0, 0 } };
u8 newDirection = Random() & 0x18;
- this->action = 1;
- this->z.HALF.HI = 0x0000FFF4;
- this->collisionLayer = 1;
- this->collisionFlags |= 0x10;
- this->gustJarFlags = 1;
- this->direction = newDirection;
- this->hitbox = (Hitbox*)&gUnk_080CE560;
+ super->action = 1;
+ super->z.HALF.HI = 0x0000FFF4;
+ super->collisionLayer = 1;
+ super->collisionFlags |= 0x10;
+ super->gustJarFlags = 1;
+ super->direction = newDirection;
+ super->hitbox = (Hitbox*)&gUnk_080CE560;
sub_080317E0(this);
- this->timer = 0;
- this->subtimer = 32;
+ super->timer = 0;
+ super->subtimer = 32;
}
-void sub_08031840(Entity* this) {
- Entity* enemy = CreateEnemy(SMALL_PESTO, this->type);
+void sub_08031840(SmallPestoEntity* this) {
+ Entity* enemy = CreateEnemy(SMALL_PESTO, super->type);
if (enemy != NULL) {
- CopyPosition(this, enemy);
- enemy->parent = this;
- this->child = enemy;
+ CopyPosition(super, enemy);
+ enemy->parent = super;
+ super->child = enemy;
enemy->type2 = 1;
}
}
diff --git a/src/enemy/spark.c b/src/enemy/spark.c
index 26ea7c79..2ec43e2b 100644
--- a/src/enemy/spark.c
+++ b/src/enemy/spark.c
@@ -4,7 +4,7 @@
*
* @brief Spark enemy
*/
-
+#define NENT_DEPRECATED
#include "collision.h"
#include "enemy.h"
#include "object.h"
@@ -21,7 +21,7 @@ void Spark_OnTick(Entity* this) {
}
void Spark_OnCollision(Entity* this) {
- Entity* ent;
+ Entity* entity;
if (this->contactFlags & 0x80) {
if ((this->contactFlags & 0x7f) == 0x14) {
@@ -29,11 +29,11 @@ void Spark_OnCollision(Entity* this) {
this->iframes = 0;
this->spriteSettings.draw = 0;
this->action = 2;
- ent = CreateFx(this, FX_DEATH, 0);
- if (ent != NULL) {
- this->child = ent;
+ entity = CreateFx(this, FX_DEATH, 0);
+ if (entity != NULL) {
+ this->child = entity;
this->timer = 14;
- CopyPosition(this, ent);
+ CopyPosition(this, entity);
}
}
}
@@ -120,9 +120,9 @@ void sub_0802B35C(Entity* this) {
void sub_0802B4A8(Entity* this) {
if (--this->timer == 0) {
- Entity* ent = CreateObjectWithParent(this, GROUND_ITEM, 0x60, 0);
- if (ent != NULL) {
- ent->y.HALF.HI -= 4;
+ Entity* entity = CreateObjectWithParent(this, GROUND_ITEM, 0x60, 0);
+ if (entity != NULL) {
+ entity->y.HALF.HI -= 4;
}
DeleteEntity(this);
}
diff --git a/src/enemy/spearMoblin.c b/src/enemy/spearMoblin.c
index 29c2584f..57159b15 100644
--- a/src/enemy/spearMoblin.c
+++ b/src/enemy/spearMoblin.c
@@ -4,7 +4,7 @@
*
* @brief Spear Moblin enemy
*/
-
+//#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
@@ -196,10 +196,10 @@ void sub_08028488(Entity* this) {
}
void sub_08028528(Entity* this) {
- Entity* ent = sub_08049DF4(1);
+ Entity* entity = sub_08049DF4(1);
const Hitbox* box;
- if (ent == NULL) {
+ if (entity == NULL) {
this->subtimer = 0;
sub_08028728(this);
} else {
@@ -218,7 +218,7 @@ void sub_08028528(Entity* this) {
if (++this->timer == 0x20) {
u32 direction;
this->timer = 0;
- direction = GetFacingDirection(this, ent);
+ direction = GetFacingDirection(this, entity);
if (sub_08028828(this->direction, direction)) {
this->direction = direction;
}
@@ -282,13 +282,13 @@ void sub_08028604(Entity* this) {
bool32 sub_080286CC(Entity* this) {
if (this->field_0x80.HALF.HI == 0) {
- Entity* ent = sub_08049DF4(1);
- if (ent != NULL) {
- if (this->field_0x82.HALF.LO == 2 && sub_0806FC80(this, ent, 0x30))
+ Entity* entity = sub_08049DF4(1);
+ if (entity != NULL) {
+ if (this->field_0x82.HALF.LO == 2 && sub_0806FC80(this, entity, 0x30))
return TRUE;
- if (sub_0806FC80(this, ent, 0x40) &&
- DirectionRoundUp(GetFacingDirection(this, ent)) >> 2 == this->animationState)
+ if (sub_0806FC80(this, entity, 0x40) &&
+ DirectionRoundUp(GetFacingDirection(this, entity)) >> 2 == this->animationState)
return TRUE;
}
}
@@ -386,13 +386,13 @@ bool32 sub_080288A4(Entity* this) {
}
void sub_080288C0(Entity* this) {
- Entity* ent = this->child;
- if ((ent != NULL) && (ent->contactFlags & 0x80)) {
- this->knockbackDirection = ent->knockbackDirection;
- this->iframes = -ent->iframes;
- this->knockbackSpeed = ent->knockbackSpeed;
- this->knockbackDuration = ent->knockbackDuration;
- ent->knockbackDuration = 0;
+ Entity* entity = this->child;
+ if ((entity != NULL) && (entity->contactFlags & 0x80)) {
+ this->knockbackDirection = entity->knockbackDirection;
+ this->iframes = -entity->iframes;
+ this->knockbackSpeed = entity->knockbackSpeed;
+ this->knockbackDuration = entity->knockbackDuration;
+ entity->knockbackDuration = 0;
}
}
diff --git a/src/enemy/spikedBeetle.c b/src/enemy/spikedBeetle.c
index 36deab65..07dccce7 100644
--- a/src/enemy/spikedBeetle.c
+++ b/src/enemy/spikedBeetle.c
@@ -4,7 +4,7 @@
*
* @brief Spiked Beetle enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/spinyBeetle.c b/src/enemy/spinyBeetle.c
index fe57c230..0e082d7b 100644
--- a/src/enemy/spinyBeetle.c
+++ b/src/enemy/spinyBeetle.c
@@ -1,6 +1,12 @@
+/**
+ * @file spinyBeetle.c
+ * @ingroup Enemies
+ *
+ * @brief Spiny Beetle enemy
+ */
#define NENT_DEPRECATED
-#include "entity.h"
#include "enemy.h"
+#include "entity.h"
#include "functions.h"
#include "object.h"
diff --git a/src/enemy/spinyChuchu.c b/src/enemy/spinyChuchu.c
index 157a9bef..c93ef05a 100644
--- a/src/enemy/spinyChuchu.c
+++ b/src/enemy/spinyChuchu.c
@@ -4,7 +4,7 @@
*
* @brief Spiny Chuchu enemy
*/
-
+//#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
#include "hitbox.h"
diff --git a/src/enemy/stalfos.c b/src/enemy/stalfos.c
index bb2db80e..7042dea5 100644
--- a/src/enemy/stalfos.c
+++ b/src/enemy/stalfos.c
@@ -4,9 +4,7 @@
*
* @brief Stalfos enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
#include "collision.h"
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/takkuri.c b/src/enemy/takkuri.c
index 28a75426..b24e2e3e 100644
--- a/src/enemy/takkuri.c
+++ b/src/enemy/takkuri.c
@@ -1,10 +1,16 @@
+/**
+ * @file takkuri.c
+ * @ingroup Enemies
+ *
+ * @brief Takkuri enemy
+ */
#define NENT_DEPRECATED
+#include "enemy.h"
#include "entity.h"
#include "functions.h"
-#include "enemy.h"
-#include "save.h"
-#include "object.h"
#include "item.h"
+#include "object.h"
+#include "save.h"
typedef struct {
Entity base;
@@ -118,7 +124,7 @@ void sub_0803BCA4(TakkuriEntity* this) {
}
void sub_0803BD08(TakkuriEntity* this) {
- Entity* ent;
+ Entity* entity;
if (super->subtimer) {
if (CheckOnScreen(super) == 0) {
@@ -131,8 +137,8 @@ void sub_0803BD08(TakkuriEntity* this) {
sub_0803BEE8(this);
GetNextFrame(super);
- ent = sub_08049DF4(1);
- if (ent != NULL) {
+ entity = sub_08049DF4(1);
+ if (entity != NULL) {
if (EntityInRectRadius(super, gUnk_020000B0, 0x88, 0x50)) {
if (gUnk_020000B0->y.HALF.HI > super->y.HALF.HI + 8) {
super->action = 2;
@@ -304,9 +310,9 @@ void sub_0803BF70(TakkuriEntity* this) {
void sub_0803C0AC(Entity* this) {
u32 index, rupeeType, rupees;
- Entity* ent;
- ent = sub_08049DF4(1);
- if (ent == NULL)
+ Entity* entity;
+ entity = sub_08049DF4(1);
+ if (entity == NULL)
return;
rupees = gSave.stats.rupees;
@@ -331,7 +337,7 @@ void sub_0803C0AC(Entity* this) {
Entity* obj = CreateObject(RUPEE_OBJECT, rupeeType, 0);
if (obj) {
- CopyPosition(ent, obj);
+ CopyPosition(entity, obj);
}
}
}
diff --git a/src/enemy/tektite.c b/src/enemy/tektite.c
index 04b9769c..62ef03a0 100644
--- a/src/enemy/tektite.c
+++ b/src/enemy/tektite.c
@@ -4,7 +4,7 @@
*
* @brief Tektite enemy
*/
-
+//#define NENT_DEPRECATED
#include "collision.h"
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/tektiteGolden.c b/src/enemy/tektiteGolden.c
index b6ffdca9..48c9d6a5 100644
--- a/src/enemy/tektiteGolden.c
+++ b/src/enemy/tektiteGolden.c
@@ -4,7 +4,7 @@
*
* @brief Golden Tektite enemy
*/
-
+//#define NENT_DEPRECATED
#include "collision.h"
#include "enemy.h"
#include "item.h"
diff --git a/src/enemy/torchTrap.c b/src/enemy/torchTrap.c
index dc3c07cf..71b2a2c7 100644
--- a/src/enemy/torchTrap.c
+++ b/src/enemy/torchTrap.c
@@ -1,9 +1,15 @@
+/**
+ * @file torchTrap.c
+ * @ingroup Enemies
+ *
+ * @brief Torch Trap enemy
+ */
#define NENT_DEPRECATED
-#include "entity.h"
#include "enemy.h"
-#include "room.h"
+#include "entity.h"
#include "physics.h"
#include "player.h"
+#include "room.h"
typedef struct {
Entity base;
diff --git a/src/enemy/treeItem.c b/src/enemy/treeItem.c
index 3226609d..41dfa9d6 100644
--- a/src/enemy/treeItem.c
+++ b/src/enemy/treeItem.c
@@ -4,11 +4,10 @@
*
* @brief Tree Item enemy
*/
-
-#include "global.h"
+//#define NENT_DEPRECATED
#include "enemy.h"
-#include "object.h"
#include "item.h"
+#include "object.h"
static bool32 ShouldSpawnTreeItem(Entity*);
diff --git a/src/enemy/vaatiArm.c b/src/enemy/vaatiArm.c
index 4ed717de..73ac6db2 100644
--- a/src/enemy/vaatiArm.c
+++ b/src/enemy/vaatiArm.c
@@ -4,7 +4,7 @@
*
* @brief Vaati Arm enemy
*/
-
+//#define NENT_DEPRECATED
#include "area.h"
#include "enemy.h"
#include "functions.h"
@@ -866,7 +866,7 @@ void sub_080432A8(Entity* this) {
s32 iVar3;
s32 i;
VaatiArm_HeapStruct1* hs;
- Entity* ent;
+ Entity* entity;
i = 3;
iVar3 = 0;
@@ -884,10 +884,10 @@ void sub_080432A8(Entity* this) {
hs->unk04.HALF.HI -= 2;
for (i = 0; i < 4; i++) {
- ent = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i];
- if (ent->z.HALF.HI < 4) {
- COLLISION_ON(ent);
- ent->spriteSettings.draw = 1;
+ entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[i];
+ if (entity->z.HALF.HI < 4) {
+ COLLISION_ON(entity);
+ entity->spriteSettings.draw = 1;
}
}
@@ -1205,11 +1205,11 @@ void sub_0804393C(Entity* this) {
s32 uVar6;
s32 iVar7;
VaatiArm_HeapStruct1* hs;
- Entity* ent;
+ Entity* entity;
- ent = ((VaatiArm_HeapStruct*)this->myHeap)->entities[0];
- if (ent->field_0x7c.BYTES.byte0 != 0 && ent->field_0x7c.BYTES.byte1 <= this->type) {
- uVar2 = gUnk_080D1362[this->type * 16 + ((ent->field_0x7c.BYTES.byte0 >> 3) & 0xf)];
+ entity = ((VaatiArm_HeapStruct*)this->myHeap)->entities[0];
+ if (entity->field_0x7c.BYTES.byte0 != 0 && entity->field_0x7c.BYTES.byte1 <= this->type) {
+ uVar2 = gUnk_080D1362[this->type * 16 + ((entity->field_0x7c.BYTES.byte0 >> 3) & 0xf)];
} else {
uVar2 = 0;
}
diff --git a/src/enemy/vaatiBall.c b/src/enemy/vaatiBall.c
index 7095b875..1d52e752 100644
--- a/src/enemy/vaatiBall.c
+++ b/src/enemy/vaatiBall.c
@@ -4,12 +4,12 @@
*
* @brief Vaati Ball enemy
*/
-
-#include "entity.h"
+//#define NENT_DEPRECATED
#include "enemy.h"
-#include "player.h"
-#include "object.h"
+#include "entity.h"
#include "functions.h"
+#include "object.h"
+#include "player.h"
typedef struct {
s8 h, v;
diff --git a/src/enemy/vaatiEyesMacro.c b/src/enemy/vaatiEyesMacro.c
index 3a99ae35..8370eac3 100644
--- a/src/enemy/vaatiEyesMacro.c
+++ b/src/enemy/vaatiEyesMacro.c
@@ -4,7 +4,7 @@
*
* @brief Vaati Eyes Macro enemy
*/
-
+//#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/vaatiProjectile.c b/src/enemy/vaatiProjectile.c
index 98aff7a5..d97551e6 100644
--- a/src/enemy/vaatiProjectile.c
+++ b/src/enemy/vaatiProjectile.c
@@ -4,7 +4,7 @@
*
* @brief Vaati Projectile enemy
*/
-
+//#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
#include "screenTransitions.h"
diff --git a/src/enemy/vaatiRebornEnemy.c b/src/enemy/vaatiRebornEnemy.c
index b6a257eb..adfacb07 100644
--- a/src/enemy/vaatiRebornEnemy.c
+++ b/src/enemy/vaatiRebornEnemy.c
@@ -4,9 +4,9 @@
*
* @brief Vaati Reborn enemy
*/
-
-#include "enemy.h"
+//#define NENT_DEPRECATED
#include "area.h"
+#include "enemy.h"
#include "functions.h"
void VaatiRebornEnemyType0PreAction(Entity*);
diff --git a/src/enemy/vaatiTransfigured.c b/src/enemy/vaatiTransfigured.c
index 5e3ccd6b..8332a9a4 100644
--- a/src/enemy/vaatiTransfigured.c
+++ b/src/enemy/vaatiTransfigured.c
@@ -4,10 +4,10 @@
*
* @brief Vaati Transfigured enemy
*/
-
+//#define NENT_DEPRECATED
#include "enemy.h"
-#include "object.h"
#include "functions.h"
+#include "object.h"
void sub_080409B0(Entity*);
void sub_080408EC(Entity*);
diff --git a/src/enemy/vaatiTransfiguredEye.c b/src/enemy/vaatiTransfiguredEye.c
index f56a6eb0..01fdf24c 100644
--- a/src/enemy/vaatiTransfiguredEye.c
+++ b/src/enemy/vaatiTransfiguredEye.c
@@ -4,12 +4,12 @@
*
* @brief Vaati Transfigured Eye enemy
*/
-
-#include "entity.h"
+//#define NENT_DEPRECATED
#include "enemy.h"
+#include "entity.h"
+#include "functions.h"
#include "message.h"
#include "physics.h"
-#include "functions.h"
void sub_08045A00(Entity*);
void sub_08045A28(Entity*);
diff --git a/src/enemy/vaatiWrath.c b/src/enemy/vaatiWrath.c
index b7c9fd3a..ecfaaea7 100644
--- a/src/enemy/vaatiWrath.c
+++ b/src/enemy/vaatiWrath.c
@@ -4,11 +4,11 @@
*
* @brief Vaati Wrath enemy
*/
-
+//#define NENT_DEPRECATED
#include "enemy.h"
-#include "object.h"
-#include "message.h"
#include "functions.h"
+#include "message.h"
+#include "object.h"
#include "save.h"
#include "screen.h"
diff --git a/src/enemy/vaatiWrathEye.c b/src/enemy/vaatiWrathEye.c
index 3bc64342..6dadee24 100644
--- a/src/enemy/vaatiWrathEye.c
+++ b/src/enemy/vaatiWrathEye.c
@@ -4,7 +4,7 @@
*
* @brief Vaati Wrath Eye enemy
*/
-
+//#define NENT_DEPRECATED
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/wallMaster.c b/src/enemy/wallMaster.c
index cb76d0b6..a41578ca 100644
--- a/src/enemy/wallMaster.c
+++ b/src/enemy/wallMaster.c
@@ -4,7 +4,7 @@
*
* @brief Wall Master enemy
*/
-
+//#define NENT_DEPRECATED
#include "area.h"
#include "enemy.h"
#include "functions.h"
@@ -70,14 +70,14 @@ void sub_0802A534(Entity* this) {
if (this->field_0x78.HWORD) {
this->field_0x78.HWORD--;
} else if (this->field_0x7a.HWORD == 0) {
- Entity* ent = sub_08049DF4(1);
- if (ent != NULL) {
+ Entity* entity = sub_08049DF4(1);
+ if (entity != NULL) {
this->action = 2;
this->timer = 90;
COLLISION_ON(this);
this->spriteSettings.draw = 3;
- this->x.HALF.HI = ent->x.HALF.HI;
- this->y.HALF.HI = ent->y.HALF.HI;
+ this->x.HALF.HI = entity->x.HALF.HI;
+ this->y.HALF.HI = entity->y.HALF.HI;
this->z.HALF.HI = -0x80;
this->spritePriority.b1 = 1;
this->spriteSettings.shadow = 2;
diff --git a/src/enemy/wallMaster2.c b/src/enemy/wallMaster2.c
index a6866f83..f8475010 100644
--- a/src/enemy/wallMaster2.c
+++ b/src/enemy/wallMaster2.c
@@ -4,7 +4,7 @@
*
* @brief Wall Master 2 enemy
*/
-
+//#define NENT_DEPRECATED
#include "area.h"
#include "enemy.h"
#include "functions.h"
diff --git a/src/enemy/waterDrop.c b/src/enemy/waterDrop.c
index 2563f82c..7dc2b686 100644
--- a/src/enemy/waterDrop.c
+++ b/src/enemy/waterDrop.c
@@ -4,10 +4,10 @@
*
* @brief Water Drop enemy
*/
-
+#define NENT_DEPRECATED
#include "enemy.h"
-#include "screen.h"
#include "object.h"
+#include "screen.h"
#include "structures.h"
void sub_0802A39C(Entity*);
@@ -22,7 +22,7 @@ void WaterDrop(Entity* this) {
}
void sub_0802A250(Entity* this) {
- Entity* ent;
+ Entity* entity;
this->action = 1;
this->timer = 0;
@@ -33,9 +33,9 @@ void sub_0802A250(Entity* this) {
InitializeAnimation(this, 0);
UpdateSpriteForCollisionLayer(this);
- ent = CreateObject(WATER_DROP_OBJECT, 0, 0);
- if (ent != NULL) {
- ent->parent = this;
+ entity = CreateObject(WATER_DROP_OBJECT, 0, 0);
+ if (entity != NULL) {
+ entity->parent = this;
}
}
diff --git a/src/enemy/wisp.c b/src/enemy/wisp.c
index e978415e..0c8a8068 100644
--- a/src/enemy/wisp.c
+++ b/src/enemy/wisp.c
@@ -4,12 +4,12 @@
*
* @brief Wisp enemy
*/
-
+//#define NENT_DEPRECATED
#include "collision.h"
#include "enemy.h"
-#include "save.h"
-#include "object.h"
#include "functions.h"
+#include "object.h"
+#include "save.h"
static void sub_08033744(Entity* this);
void Wisp_OnTick(Entity* this);
@@ -41,7 +41,7 @@ void Wisp_OnTick(Entity* this) {
void Wisp_OnCollision(Entity* this) {
u32 bits;
- Entity* ent;
+ Entity* entity;
bits = this->contactFlags;
if ((bits & 0x80) == 0) {
@@ -70,11 +70,11 @@ void Wisp_OnCollision(Entity* this) {
COLLISION_OFF(this);
this->iframes = 0;
this->spriteSettings.draw = FALSE;
- ent = CreateFx(this, FX_DEATH, 0);
- if (ent != NULL) {
- this->child = ent;
+ entity = CreateFx(this, FX_DEATH, 0);
+ if (entity != NULL) {
+ this->child = entity;
this->timer = 14;
- CopyPosition(this, ent);
+ CopyPosition(this, entity);
}
DeleteThisEntity();
break;
diff --git a/src/enemy/wizzrobeFire.c b/src/enemy/wizzrobeFire.c
index 820bd8ea..dc1aa173 100644
--- a/src/enemy/wizzrobeFire.c
+++ b/src/enemy/wizzrobeFire.c
@@ -4,11 +4,9 @@
*
* @brief Wizzrobe Fire enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
-#include "enemy.h"
#include "enemy/wizzrobe.h"
+#include "enemy.h"
#include "functions.h"
extern void (*const WizzrobeFire_Functions[])(WizzrobeEntity*);
diff --git a/src/enemy/wizzrobeIce.c b/src/enemy/wizzrobeIce.c
index edd48331..9607a275 100644
--- a/src/enemy/wizzrobeIce.c
+++ b/src/enemy/wizzrobeIce.c
@@ -4,11 +4,9 @@
*
* @brief Wizzrobe Ice enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
-#include "enemy.h"
#include "enemy/wizzrobe.h"
+#include "enemy.h"
#include "functions.h"
#include "object.h"
diff --git a/src/enemy/wizzrobeWind.c b/src/enemy/wizzrobeWind.c
index 4d407677..33a9e25f 100644
--- a/src/enemy/wizzrobeWind.c
+++ b/src/enemy/wizzrobeWind.c
@@ -4,12 +4,10 @@
*
* @brief Wizzrobe Wind enemy
*/
-
#define NENT_DEPRECATED
-#include "global.h"
+#include "enemy/wizzrobe.h"
#include "collision.h"
#include "enemy.h"
-#include "enemy/wizzrobe.h"
#include "functions.h"
#include "object.h"