summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/enemy.c2
-rw-r--r--src/enemy/gyorgMale.c6
-rw-r--r--src/enemy/gyorgMaleEye.c137
3 files changed, 141 insertions, 4 deletions
diff --git a/src/enemy.c b/src/enemy.c
index faf5d59f..60a0653c 100644
--- a/src/enemy.c
+++ b/src/enemy.c
@@ -530,7 +530,7 @@ void (*const gEnemyFunctions[])(Entity* ent) = {
[VAATI_WRATH_EYE] = VaatiWrathEye,
[GYORG_CHILD] = GyorgChild,
[GYORG_FEMALE_EYE] = GyorgFemaleEye,
- [ENEMY_62] = Enemy62,
+ [GYORG_MALE_EYE] = GyorgMaleEye,
[GYORG_FEMALE_MOUTH] = GyorgFemaleMouth,
[ENEMY_64] = Enemy64,
[TREE_ITEM] = TreeItem,
diff --git a/src/enemy/gyorgMale.c b/src/enemy/gyorgMale.c
index d50d44ab..667fa934 100644
--- a/src/enemy/gyorgMale.c
+++ b/src/enemy/gyorgMale.c
@@ -693,7 +693,7 @@ void sub_08047508(GyorgMaleEntity* this) {
this->unk_76 = super->direction << 8;
}
if (--this->unk_7e == 0) {
- Entity* tmp = CreateEnemy(ENEMY_62, Random() & 3);
+ Entity* tmp = CreateEnemy(GYORG_MALE_EYE, Random() & 3);
if (tmp) {
tmp->parent = super;
}
@@ -748,7 +748,7 @@ void sub_0804763C(GyorgMaleEntity* this) {
this->unk_76 = super->direction << 8;
}
if (--this->unk_7e == 0) {
- Entity* tmp = CreateEnemy(ENEMY_62, Random() & 3);
+ Entity* tmp = CreateEnemy(GYORG_MALE_EYE, Random() & 3);
if (tmp) {
tmp->parent = super;
}
@@ -856,7 +856,7 @@ void sub_08047978(GyorgMaleEntity* this) {
if (--this->unk_7e == 0) {
Entity* tmp;
this->unk_7e = 0xF0;
- tmp = CreateEnemy(ENEMY_62, Random() & 3);
+ tmp = CreateEnemy(GYORG_MALE_EYE, Random() & 3);
if (tmp) {
tmp->parent = super;
}
diff --git a/src/enemy/gyorgMaleEye.c b/src/enemy/gyorgMaleEye.c
new file mode 100644
index 00000000..6f87fe4c
--- /dev/null
+++ b/src/enemy/gyorgMaleEye.c
@@ -0,0 +1,137 @@
+/**
+ * @file gyorgMaleEye.c
+ * @ingroup Enemies
+ *
+ * @brief GyorgMaleEye enemy
+ */
+
+#define NENT_DEPRECATED
+#include "global.h"
+#include "enemy.h"
+#include "functions.h"
+#include "fade.h"
+
+typedef struct {
+ /*0x00*/ Entity base;
+ /*0x68*/ u8 unk_68[0x10];
+ /*0x78*/ u8 unk_78;
+} GyorgMaleEyeEntity;
+
+extern void (*const GyorgMaleEye_Functions[])(GyorgMaleEyeEntity*);
+extern void (*const GyorgMaleEye_Actions[])(GyorgMaleEyeEntity*);
+extern const u8 gUnk_080D2300[];
+extern const u8 gUnk_080D2348[];
+
+void sub_08048F50(GyorgMaleEyeEntity*);
+void sub_08048F74(GyorgMaleEyeEntity*);
+
+void GyorgMaleEye(GyorgMaleEyeEntity* this) {
+ Entity* parent = super->parent;
+ if (parent->next == NULL) {
+ DeleteThisEntity();
+ }
+ GyorgMaleEye_Functions[GetNextFunction(super)](this);
+ super->spriteOrientation.flipY = parent->spriteOrientation.flipY;
+ super->spriteRendering.b3 = parent->spriteRendering.b3;
+ super->spritePriority.b0 = parent->spritePriority.b0 - 1;
+}
+
+void GyorgMaleEye_OnTick(GyorgMaleEyeEntity* this) {
+ GyorgMaleEye_Actions[super->action](this);
+}
+
+void sub_08048E1C(GyorgMaleEyeEntity* this) {
+ u32 tmp;
+ Entity* entity;
+
+ tmp = 0xff - super->health;
+ if (tmp != 0) {
+ entity = super->parent;
+ if (entity->health > tmp) {
+ entity->health -= tmp;
+ SoundReq(SFX_BOSS_HIT);
+ } else {
+ entity->health = 0;
+ SoundReq(SFX_BOSS_DIE);
+ InitScreenShake(0x28, 0);
+ }
+ if (super->iframes > 0) {
+ entity->iframes = super->iframes;
+ entity = entity->child;
+ entity->iframes = super->iframes;
+ entity = entity->child;
+ entity->iframes = super->iframes;
+ entity = entity->child;
+ entity->iframes = super->iframes;
+ }
+ super->health = 0xff;
+ }
+ sub_0804AA30(super, GyorgMaleEye_Functions);
+}
+
+void GyorgMaleEye_Init(GyorgMaleEyeEntity* this) {
+ super->action = 1;
+ this->unk_78 = (((super->parent)->animationState & 0xe0) >> 3) + super->type;
+ sub_08048F50(this);
+ sub_08048F74(this);
+}
+
+void GyorgMaleEye_Action1(GyorgMaleEyeEntity* this) {
+ sub_08048F50(this);
+ GetNextFrame(super);
+ if ((super->frame & 0x80) != 0) {
+ super->action = 2;
+ super->flags |= 0x80;
+ super->actionDelay = 0x2d;
+ }
+}
+
+void GyorgMaleEye_Action2(GyorgMaleEyeEntity* this) {
+ sub_08048F50(this);
+ if (--super->actionDelay == 0) {
+ super->action = 3;
+ super->flags &= 0x7f;
+ InitializeAnimation(super, super->animIndex + 4);
+ }
+}
+
+void GyorgMaleEye_Action3(GyorgMaleEyeEntity* this) {
+ sub_08048F50(this);
+ GetNextFrame(super);
+ if ((super->frame & 0x80) != 0) {
+ DeleteThisEntity();
+ }
+}
+
+void sub_08048F50(GyorgMaleEyeEntity* this) {
+ const s8* ptr = &gUnk_080D2300[this->unk_78 * 2];
+ sub_0806FA90(super->parent, super, ptr[0], ptr[1]);
+}
+
+void sub_08048F74(GyorgMaleEyeEntity* this) {
+ InitializeAnimation(super, gUnk_080D2348[this->unk_78]);
+}
+
+void (*const GyorgMaleEye_Functions[])(GyorgMaleEyeEntity*) = {
+ GyorgMaleEye_OnTick,
+ sub_08048E1C,
+ (void (*)(GyorgMaleEyeEntity*))sub_08001324,
+ (void (*)(GyorgMaleEyeEntity*))sub_0804A7D4,
+ (void (*)(GyorgMaleEyeEntity*))sub_08001242,
+ GyorgMaleEye_OnTick,
+};
+void (*const GyorgMaleEye_Actions[])(GyorgMaleEyeEntity*) = {
+ GyorgMaleEye_Init,
+ GyorgMaleEye_Action1,
+ GyorgMaleEye_Action2,
+ GyorgMaleEye_Action3,
+};
+const u8 gUnk_080D2300[] = {
+ 240, 240, 17, 240, 17, 16, 240, 16, 0, 232, 24, 0, 0, 24, 232, 0, 16, 240, 16, 17, 240, 17, 240, 240, 24,
+ 0, 0, 24, 232, 0, 0, 232, 16, 16, 239, 16, 239, 240, 16, 240, 0, 24, 232, 0, 0, 232, 24, 0, 240, 16,
+ 240, 239, 16, 239, 16, 16, 232, 0, 0, 232, 24, 0, 0, 24, 240, 240, 17, 240, 17, 16, 240, 16,
+};
+const u8 gUnk_080D2348[] = {
+ 0, 1, 2, 3, 8, 9, 10, 11, 16, 17, 18, 19, 24, 25, 26, 27,
+ 32, 33, 34, 35, 40, 41, 42, 43, 48, 49, 50, 51, 56, 57, 58, 59,
+};