summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/npc/castorWildsStatue.c76
1 files changed, 73 insertions, 3 deletions
diff --git a/src/npc/castorWildsStatue.c b/src/npc/castorWildsStatue.c
index 0a809793..f3614564 100644
--- a/src/npc/castorWildsStatue.c
+++ b/src/npc/castorWildsStatue.c
@@ -15,6 +15,13 @@ extern s8 gUnk_08110E64[];
extern u32 gUnk_08110E68[];
+typedef struct {
+ s8 x;
+ s8 y;
+} PACKED PosOffset;
+extern PosOffset gUnk_08110E78[];
+extern PosOffset gUnk_08110E8A[];
+
void CastorWildsStatue(Entity* this) {
if ((this->flags & 2) != 0) {
gUnk_08110E5C[this->action](this);
@@ -113,14 +120,77 @@ void sub_0806757C(Entity* this) {
}
}
-ASM_FUNC("asm/non_matching/castorWildsStatue/sub_080675D4.inc", void sub_080675D4(Entity* this))
+void sub_080675D4(Entity* this) {
+ PosOffset* gUnk = gUnk_08110E78;
+ u32 subAction = (this->subAction << 2) - 0xc;
+ s32 i;
+
+ for (i = 0; i < 9; i++, gUnk++) {
+ Entity* ent = CreateFx(this, 2, 0);
+ if (ent) {
+ ent->x.HALF.HI += gUnk->x;
+ ent->y.HALF.HI += gUnk->y;
+ ent->z.HALF.HI = subAction;
+ ent->collisionLayer = this->collisionLayer;
+ ent->spriteOrientation.flipY = this->spriteOrientation.flipY;
+ ent->spriteRendering.b3 = this->spriteRendering.b3;
+ ResolveEntityOnTop(this, ent);
+ }
+ };
+ gUnk = gUnk_08110E8A;
+ for (i = 0; i < 4; i++, gUnk++) {
+ Entity* ent = CreateFx(this, 4, 0);
+ if (ent) {
+ ent->x.HALF.HI = gUnk->x + ent->x.HALF.HI;
+ ent->y.HALF.HI = gUnk->y + ent->y.HALF.HI;
+ ent->z.HALF.HI = subAction;
+ ent->collisionLayer = this->collisionLayer;
+ ent->spriteOrientation.flipY = this->spriteOrientation.flipY;
+ ent->spriteRendering.b3 = this->spriteRendering.b3;
+ ResolveEntityOnTop(this, ent);
+ }
+ };
+ if (this->subAction > 2) {
+ this->spriteSettings.draw = 0;
+ }
+}
void sub_080676D8(Entity* this) {
this->subAction += 1;
}
-ASM_FUNC("asm/non_matching/castorWildsStatue/sub_080676E0.inc",
- void sub_080676E0(Entity* this, ScriptExecutionContext* context))
+void sub_080676E0(Entity* this, ScriptExecutionContext* context) {
+ switch (context->unk_18) {
+ case 0: {
+ context->unk_18 = 1;
+ context->unk_19 = 0x20;
+ break;
+ }
+ case 1: {
+ this->z.HALF.HI = (context->unk_19 >> 1) - 0x10;
+ if (--context->unk_19 == 0) {
+ context->unk_18 = 2;
+ context->unk_19 = 0x24;
+ }
+
+ break;
+ }
+ case 2: {
+ if (--context->unk_19 == 0) {
+ context->unk_18 = 3;
+ }
+ break;
+ }
+ default: {
+ if (GravityUpdate(this, 0x1800) == 0) {
+ return;
+ }
+ break;
+ }
+ }
+
+ gActiveScriptInfo.commandSize = 0;
+}
void CastorWildsStatue_Fusion(Entity* this) {
if (this->action == 0) {