diff --git a/asm/tektiteGolden.s b/asm/tektiteGolden.s deleted file mode 100644 index d51c9728..00000000 --- a/asm/tektiteGolden.s +++ /dev/null @@ -1,189 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08038048 -sub_08038048: @ 0x08038048 - push {r4, r5, r6, lr} - adds r4, r0, #0 - movs r1, #2 - bl UpdateAnimationVariableFrames - adds r0, r4, #0 - bl sub_080AEF88 - movs r0, #0x36 - ldrsh r6, [r4, r0] - bl Random - adds r5, r0, #0 - movs r0, #0xf - ands r5, r0 - movs r1, #0xc0 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_080044EC - cmp r0, #1 - bne _08038088 - movs r0, #0 - movs r1, #3 - strb r1, [r4, #0xc] - strb r0, [r4, #0xd] - movs r0, #0x14 - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl InitializeAnimation - b _0803810C -_08038088: - ldrh r0, [r4, #0x2a] - cmp r0, #0 - beq _08038098 - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_0800417E - b _080380B0 -_08038098: - adds r0, r4, #0 - bl sub_080002B8 - movs r1, #0xf0 - ands r1, r0 - cmp r1, #0x50 - bne _080380B0 - ldrb r0, [r4, #0x15] - adds r0, #0x10 - movs r1, #0x1f - ands r0, r1 - strb r0, [r4, #0x15] -_080380B0: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080380C8 - adds r0, r5, #0 - adds r0, #0x10 - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl sub_08038168 -_080380C8: - ldrb r0, [r4, #0xd] - cmp r0, #0 - bne _080380E2 - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r6, r0 - bge _080380E2 - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation - movs r0, #1 - strb r0, [r4, #0xd] -_080380E2: - movs r0, #0xc - rsbs r0, r0, #0 - cmp r6, r0 - bge _080380F6 - ldrb r2, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x40 - b _08038100 -_080380F6: - ldrb r2, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x80 -_08038100: - orrs r0, r2 - strb r0, [r4, #0x19] - ldrb r0, [r4, #0x1b] - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x1b] -_0803810C: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08038110 -sub_08038110: @ 0x08038110 - push {r4, lr} - adds r4, r0, #0 - movs r1, #2 - bl UpdateAnimationVariableFrames - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08038164 - adds r2, r4, #0 - adds r2, #0x80 - ldrb r0, [r2] - cmp r0, #4 - bhi _08038150 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #8 - strb r0, [r4, #0xe] - movs r0, #0xe0 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - adds r0, r4, #0 - bl sub_08038168 - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - b _08038164 -_08038150: - movs r0, #0 - movs r1, #1 - strb r1, [r4, #0xc] - strb r0, [r2] - movs r0, #0xc0 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation -_08038164: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08038168 -sub_08038168: @ 0x08038168 - push {r4, lr} - adds r4, r0, #0 - bl sub_08049FA0 - cmp r0, #0 - bne _0803817E - adds r0, r4, #0 - bl sub_08049EE4 - strb r0, [r4, #0x15] - b _080381AA -_0803817E: - adds r0, r4, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _08038196 - adds r0, r4, #0 - movs r1, #1 - bl sub_08049F84 - strb r0, [r4, #0x15] - b _080381AA -_08038196: - bl Random - movs r1, #0xf - ands r1, r0 - adds r1, #0x18 - ldrb r0, [r4, #0x15] - adds r1, r1, r0 - movs r0, #0x1f - ands r1, r0 - strb r1, [r4, #0x15] -_080381AA: - pop {r4, pc} diff --git a/include/functions.h b/include/functions.h index 45837388..5739c880 100644 --- a/include/functions.h +++ b/include/functions.h @@ -251,4 +251,8 @@ extern u32 sub_08079F8C(void); extern void sub_080787CC(Entity*); extern void sub_080526F8(s32); extern int sub_0807CF28(u32, SaveFile*); +extern u32 sub_080044EC(Entity*, u32); +extern u32 sub_080002B8(Entity*); +extern u32 sub_08049F84(Entity*, u32); + #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index fda209e8..e9a89f97 100644 --- a/linker.ld +++ b/linker.ld @@ -391,7 +391,6 @@ SECTIONS { asm/gibdo.o(.text); asm/octorokGolden.o(.text); src/enemy/tektiteGolden.o(.text); - asm/tektiteGolden.o(.text); asm/ropeGolden.o(.text); asm/cloudPiranha.o(.text); asm/scissorsBeetle.o(.text); diff --git a/src/enemy/tektiteGolden.c b/src/enemy/tektiteGolden.c index 90483b71..221732eb 100644 --- a/src/enemy/tektiteGolden.c +++ b/src/enemy/tektiteGolden.c @@ -9,100 +9,160 @@ extern void sub_08038168(Entity*); extern void (*const gUnk_080CF4A0)(Entity*); extern void (*const gUnk_080CF4B8[])(Entity*); -void TektiteGolden(Entity *this) -{ - EnemyFunctionHandler(this, &gUnk_080CF4A0); - SetChildOffset(this, 0, 1, -0x10); +void TektiteGolden(Entity* this) { + EnemyFunctionHandler(this, &gUnk_080CF4A0); + SetChildOffset(this, 0, 1, -0x10); } -void sub_08037EE8(Entity* this) -{ - gUnk_080CF4B8[this->action](this); +void sub_08037EE8(Entity* this) { + gUnk_080CF4B8[this->action](this); } -void sub_08037F00(Entity *this) -{ - u32 uVar1; - - if (this->field_0x43 != 0) { - sub_0804A9FC(this,0x1c); - } - sub_0804AA30(this, &gUnk_080CF4A0); - if (this->bitfield == 0x94) { +void sub_08037F00(Entity* this) { + u32 uVar1; + + if (this->field_0x43 != 0) { + sub_0804A9FC(this, 0x1c); + } + sub_0804AA30(this, &gUnk_080CF4A0); + if (this->bitfield == 0x94) { + this->action = 1; + this->previousActionFlag = 0; + this->actionDelay = 0x14; + this->field_0xf = 0; + this->field_0x80.HALF.LO = 0; + uVar1 = this->height.HALF.HI; + if (uVar1 != 0) { + this->field_0x20 >>= 2; + } else { + this->field_0x20 = uVar1; + } + + InitializeAnimation(this, 0); + } +} + +void sub_08037F58(Entity* this) { + u32 uVar1; + + if ((this->field_0x3a & 2) == 0) { + SetGlobalFlag(this->entityType.parameter); + } + if ((this->entityType).form != 0) { + uVar1 = 0x59; + } else { + uVar1 = 0x58; + } + CreateDeathFx(this, 0xff, uVar1); +} + +void sub_08037F84(Entity* this) { + sub_08001242(); + if (this->height.HALF.HI != 0) { + sub_08003FC4(this, 0x3000); + } +} + +void sub_08037FA0(Entity* this) { + + if (CheckGlobalFlag(this->entityType.parameter)) { + DeleteThisEntity(); + } + sub_0804A720(this); this->action = 1; this->previousActionFlag = 0; - this->actionDelay = 0x14; + this->actionDelay = (Random() & 0x1f) + 0x20; this->field_0xf = 0; this->field_0x80.HALF.LO = 0; - uVar1 = this->height.HALF.HI; - if (uVar1 != 0) { - this->field_0x20 >>= 2; - } - else { - this->field_0x20 = uVar1; - } - - InitializeAnimation(this,0); - } + InitializeAnimation(this, 0); } -void sub_08037F58(Entity *this) -{ - u32 uVar1; - - if ((this->field_0x3a & 2) == 0) { - SetGlobalFlag(this->entityType.parameter); - } - if ((this->entityType).form != 0) { - uVar1 = 0x59; - } - else { - uVar1 = 0x58; - } - CreateDeathFx(this, 0xff, uVar1); -} - -void sub_08037F84(Entity *this) -{ - sub_08001242(); - if (this->height.HALF.HI != 0) { - sub_08003FC4(this, 0x3000); - } -} - -void sub_08037FA0(Entity *this) -{ - - if (CheckGlobalFlag(this->entityType.parameter)) { - DeleteThisEntity(); - } - sub_0804A720(this); - this->action = 1; - this->previousActionFlag = 0; - this->actionDelay = (Random() & 0x1f) + 0x20; - this->field_0xf = 0; - this->field_0x80.HALF.LO = 0; - InitializeAnimation(this,0); -} - -void sub_08037Fe0(Entity *this) -{ - UpdateAnimationVariableFrames(this, 2); - if (this->actionDelay != 0) { - this->actionDelay--; - } - else if (this->field_0xf != 0) { - if ((this->frames.b.f3) != 0) { - this->action = 2; - this->actionDelay = 6; - this->field_0xf = 0; - this->field_0x20 = 0x38000; - sub_08038168(this); - InitializeAnimation(this, 2); - } - } - else if ((this->frames.b.f3) != 0) { +void sub_08037Fe0(Entity* this) { + UpdateAnimationVariableFrames(this, 2); + if (this->actionDelay != 0) { + this->actionDelay--; + } else if (this->field_0xf != 0) { + if ((this->frames.b.f3) != 0) { + this->action = 2; + this->actionDelay = 6; + this->field_0xf = 0; + this->field_0x20 = 0x38000; + sub_08038168(this); + InitializeAnimation(this, 2); + } + } else if ((this->frames.b.f3) != 0) { this->field_0xf = 0x40; InitializeAnimation(this, 1); } +} + +void sub_08038048(Entity* this) { + s32 temp; + u32 rand; + + UpdateAnimationVariableFrames(this, 2); + sub_080AEF88(this); + temp = this->height.HALF.HI; + rand = Random() & 0xf; + + if (sub_080044EC(this, 0x3000) == 1) { + this->action = 3; + this->previousActionFlag = 0; + this->actionDelay = 0x14; + InitializeAnimation(this, 3); + return; + } else if (this->collisions != 0) { + sub_0800417E(this, this->collisions); + } else if ((sub_080002B8(this) & 0xf0) == 0x50) { + this->direction = (this->direction + 0x10) & 0x1f; + } + + if (--this->actionDelay == 0) { + this->actionDelay = rand + 0x10; + sub_08038168(this); + } + + if ((this->previousActionFlag == 0) && (temp < this->height.HALF.HI)) { + InitializeAnimation(this, 4); + this->previousActionFlag = 1; + } + + if (temp < -0xc) { + this->spriteRendering.b3 = 1; + this->spriteOrientation.flipY = 1; + } else { + this->spriteRendering.b3 = 2; + this->spriteOrientation.flipY = 2; + } +} + +void sub_08038110(Entity* this) { + UpdateAnimationVariableFrames(this, 2); + if ((this->frames.b.f3) != 0) { + if (this->field_0x80.HALF.LO < 5) { + this->action = 2; + this->actionDelay = 8; + this->field_0x20 = 0x38000; + sub_08038168(this); + InitializeAnimation(this, 2); + } else { + this->action = 1; + this->field_0x80.HALF.LO = 0; + this->actionDelay = 0xc0; + InitializeAnimation(this, 0); + } + } +} + +void sub_08038168(Entity* this) { + u32 temp; + + if (sub_08049FA0(this) == 0) { + this->direction = sub_08049EE4(this); + } else if (sub_08049FDC(this, 1) != 0) { + this->direction = sub_08049F84(this, 1); + } else { + temp = (Random() & 0xf) + 0x18; + this->direction = (temp + this->direction) & 0x1f; + } } \ No newline at end of file