From f2aeda134dbfce82ced4d91d86f7db0b62e4af28 Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 16 Aug 2020 15:39:30 -0700 Subject: [PATCH 1/2] tektiteGolden.c OK --- asm/tektiteGolden.s | 189 ------------------------------- include/functions.h | 4 + linker.ld | 1 - src/enemy/tektiteGolden.c | 226 ++++++++++++++++++++++++-------------- 4 files changed, 147 insertions(+), 273 deletions(-) delete mode 100644 asm/tektiteGolden.s 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 From 793350e55147a4e2224344ece0e83f2cd24759ca Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 16 Aug 2020 17:32:21 -0700 Subject: [PATCH 2/2] tektite.c OK --- asm/tektite.s | 483 -------------------------------------- include/functions.h | 2 +- linker.ld | 2 +- src/enemy/tektite.c | 195 +++++++++++++++ src/enemy/tektiteGolden.c | 5 +- 5 files changed, 199 insertions(+), 488 deletions(-) delete mode 100644 asm/tektite.s create mode 100644 src/enemy/tektite.c diff --git a/asm/tektite.s b/asm/tektite.s deleted file mode 100644 index f0b0aed9..00000000 --- a/asm/tektite.s +++ /dev/null @@ -1,483 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Tektite -Tektite: @ 0x0802F118 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0802F134 @ =gUnk_080CDED0 - bl EnemyFunctionHandler - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, pc} - .align 2, 0 -_0802F134: .4byte gUnk_080CDED0 - - thumb_func_start sub_0802F138 -sub_0802F138: @ 0x0802F138 - push {lr} - ldr r2, _0802F14C @ =gUnk_080CDEE8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802F14C: .4byte gUnk_080CDEE8 - - thumb_func_start sub_0802F150 -sub_0802F150: @ 0x0802F150 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _0802F164 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_0802F164: - ldr r1, _0802F18C @ =gUnk_080CDED0 - adds r0, r4, #0 - bl sub_0804AA30 - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802F1E8 - movs r0, #0x3f - ands r0, r1 - cmp r0, #0x14 - beq _0802F196 - cmp r0, #0x14 - bgt _0802F190 - cmp r0, #0xe - beq _0802F1E0 - b _0802F1E8 - .align 2, 0 -_0802F18C: .4byte gUnk_080CDED0 -_0802F190: - cmp r0, #0x15 - beq _0802F1E0 - b _0802F1E8 -_0802F196: - movs r0, #0 - movs r1, #1 - strb r1, [r4, #0xc] - strb r0, [r4, #0xd] - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _0802F1A8 - movs r0, #0xc0 - b _0802F1B6 -_0802F1A8: - bl Random - ldr r2, _0802F1DC @ =gUnk_080CDEF8 - movs r1, #3 - ands r1, r0 - adds r1, r1, r2 - ldrb r0, [r1] -_0802F1B6: - strb r0, [r4, #0xe] - movs r1, #0 - strb r1, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x7c - strb r1, [r0] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _0802F1CE - ldr r0, [r4, #0x20] - asrs r0, r0, #2 -_0802F1CE: - str r0, [r4, #0x20] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - b _0802F1E8 - .align 2, 0 -_0802F1DC: .4byte gUnk_080CDEF8 -_0802F1E0: - adds r1, r4, #0 - adds r1, #0x45 - movs r0, #0 - strb r0, [r1] -_0802F1E8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start nullsub_16 -nullsub_16: @ 0x0802F1EC - bx lr - .align 2, 0 - - thumb_func_start sub_0802F1F0 -sub_0802F1F0: @ 0x0802F1F0 - push {r4, lr} - adds r4, r0, #0 - bl sub_08001242 - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _0802F20C - adds r0, r4, #0 - adds r0, #0x80 - ldrh r1, [r0] - adds r0, r4, #0 - bl sub_08003FC4 -_0802F20C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802F210 -sub_0802F210: @ 0x0802F210 - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_0804A720 - movs r4, #0 - movs r0, #1 - strb r0, [r5, #0xc] - strb r4, [r5, #0xd] - bl Random - ldr r2, _0802F280 @ =gUnk_080CDEF8 - movs r1, #3 - ands r1, r0 - adds r1, r1, r2 - ldrb r0, [r1] - strb r0, [r5, #0xe] - bl Random - movs r1, #0x1f - ands r0, r1 - ldrb r1, [r5, #0xe] - adds r0, r0, r1 - strb r0, [r5, #0xe] - strb r4, [r5, #0xf] - adds r0, r5, #0 - adds r0, #0x7c - strb r4, [r0] - ldrb r0, [r5, #0xa] - movs r2, #0xa0 - lsls r2, r2, #6 - adds r1, r2, #0 - cmp r0, #0 - bne _0802F258 - movs r0, #0xc0 - lsls r0, r0, #5 - adds r1, r0, #0 -_0802F258: - adds r0, r5, #0 - adds r0, #0x80 - strh r1, [r0] - ldrb r0, [r5, #0xa] - movs r2, #0xc0 - lsls r2, r2, #6 - adds r1, r2, #0 - cmp r0, #0 - bne _0802F270 - movs r0, #0xa0 - lsls r0, r0, #6 - adds r1, r0, #0 -_0802F270: - adds r0, r5, #0 - adds r0, #0x82 - strh r1, [r0] - adds r0, r5, #0 - movs r1, #0 - bl InitializeAnimation - pop {r4, r5, pc} - .align 2, 0 -_0802F280: .4byte gUnk_080CDEF8 - - thumb_func_start sub_0802F284 -sub_0802F284: @ 0x0802F284 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0x60 - bls _0802F298 - adds r0, r4, #0 - movs r1, #2 - bl UpdateAnimationVariableFrames - b _0802F29E -_0802F298: - adds r0, r4, #0 - bl GetNextFrame -_0802F29E: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0802F2AA - subs r0, #1 - strb r0, [r4, #0xe] - b _0802F2FE -_0802F2AA: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0802F2E4 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802F2FE - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x10 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xa] - strb r0, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x82 - ldrh r0, [r0] - lsls r0, r0, #4 - str r0, [r4, #0x20] - adds r0, r4, #0 - bl sub_0802F45C - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - b _0802F2FE -_0802F2E4: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802F2FE - movs r0, #0x40 - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation -_0802F2FE: - pop {r4, pc} - - thumb_func_start sub_0802F300 -sub_0802F300: @ 0x0802F300 - push {r4, r5, r6, lr} - adds r4, r0, #0 - bl GetNextFrame - 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 - adds r0, r4, #0 - adds r0, #0x80 - ldrh r1, [r0] - adds r0, r4, #0 - bl sub_080044EC - cmp r0, #1 - bne _0802F364 - movs r0, #0 - movs r2, #3 - strb r2, [r4, #0xc] - strb r0, [r4, #0xd] - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _0802F33C - movs r5, #0 -_0802F33C: - cmp r5, #0 - bne _0802F344 - movs r0, #0xc0 - b _0802F350 -_0802F344: - ldr r0, _0802F360 @ =gUnk_080CDEF8 - adds r1, r5, #0 - ands r1, r2 - adds r1, r1, r0 - ldrb r0, [r1] - adds r0, r0, r5 -_0802F350: - strb r0, [r4, #0xe] - movs r0, #0 - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation - b _0802F3F0 - .align 2, 0 -_0802F360: .4byte gUnk_080CDEF8 -_0802F364: - ldrh r0, [r4, #0x2a] - cmp r0, #0 - beq _0802F374 - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_0800417E - b _0802F38C -_0802F374: - adds r0, r4, #0 - bl sub_080002B8 - movs r1, #0xf0 - ands r1, r0 - cmp r1, #0x50 - bne _0802F38C - ldrb r0, [r4, #0x15] - adds r0, #0x10 - movs r1, #0x1f - ands r0, r1 - strb r0, [r4, #0x15] -_0802F38C: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802F3AC - movs r0, #0x10 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0802F3AC - subs r0, #1 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl sub_0802F45C -_0802F3AC: - ldrb r0, [r4, #0xd] - cmp r0, #0 - bne _0802F3C6 - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r6, r0 - bge _0802F3C6 - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation - movs r0, #1 - strb r0, [r4, #0xd] -_0802F3C6: - movs r0, #0xc - rsbs r0, r0, #0 - cmp r6, r0 - bge _0802F3DA - ldrb r2, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x40 - b _0802F3E4 -_0802F3DA: - ldrb r2, [r4, #0x19] - movs r1, #0x3f - adds r0, r1, #0 - ands r0, r2 - movs r2, #0x80 -_0802F3E4: - orrs r0, r2 - strb r0, [r4, #0x19] - ldrb r0, [r4, #0x1b] - ands r1, r0 - orrs r1, r2 - strb r1, [r4, #0x1b] -_0802F3F0: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0802F3F4 -sub_0802F3F4: @ 0x0802F3F4 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802F45A - adds r0, r4, #0 - adds r0, #0x7c - ldrb r1, [r0] - adds r2, r0, #0 - cmp r1, #1 - bhi _0802F44C - ldrb r0, [r4, #0xa] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - beq _0802F44C - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x10 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xa] - strb r0, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x82 - ldrh r0, [r0] - lsls r0, r0, #4 - str r0, [r4, #0x20] - ldrb r0, [r2] - adds r0, #1 - strb r0, [r2] - adds r0, r4, #0 - bl sub_0802F45C - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - b _0802F45A -_0802F44C: - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r2] - adds r0, r4, #0 - bl InitializeAnimation -_0802F45A: - pop {r4, pc} - - thumb_func_start sub_0802F45C -sub_0802F45C: @ 0x0802F45C - push {r4, lr} - adds r4, r0, #0 - bl sub_08049FA0 - cmp r0, #0 - bne _0802F472 - adds r0, r4, #0 - bl sub_08049EE4 - strb r0, [r4, #0x15] - b _0802F49E -_0802F472: - adds r0, r4, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0802F48A - adds r0, r4, #0 - movs r1, #1 - bl sub_08049F84 - strb r0, [r4, #0x15] - b _0802F49E -_0802F48A: - 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] -_0802F49E: - pop {r4, pc} diff --git a/include/functions.h b/include/functions.h index 5739c880..6c944546 100644 --- a/include/functions.h +++ b/include/functions.h @@ -254,5 +254,5 @@ extern int sub_0807CF28(u32, SaveFile*); extern u32 sub_080044EC(Entity*, u32); extern u32 sub_080002B8(Entity*); extern u32 sub_08049F84(Entity*, u32); - +extern void sub_0802F45C(Entity*); #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index e9a89f97..56aabb33 100644 --- a/linker.ld +++ b/linker.ld @@ -366,7 +366,7 @@ SECTIONS { asm/wallMaster2.o(.text); asm/gleerok.o(.text); asm/vaatiEyesMacro.o(.text); - asm/tektite.o(.text); + src/enemy/tektite.o(.text); asm/wizzrobeWind.o(.text); asm/wizzrobeFire.o(.text); asm/wizzrobeIce.o(.text); diff --git a/src/enemy/tektite.c b/src/enemy/tektite.c new file mode 100644 index 00000000..0cea604e --- /dev/null +++ b/src/enemy/tektite.c @@ -0,0 +1,195 @@ +#include "global.h" +#include "entity.h" +#include "enemy.h" +#include "functions.h" + +extern void (*const gUnk_080CDED0[])(Entity*); +extern void (*const gUnk_080CDEE8[])(Entity*); + +void Tektite(Entity* this) { + EnemyFunctionHandler(this, gUnk_080CDED0); + SetChildOffset(this, 0, 1, -0x10); +} + +void sub_0802F138(Entity* this) { + gUnk_080CDEE8[this->action](this); +} + +extern u8 gUnk_080CDEF8[]; + +void sub_0802F150(Entity* this) { + u32 bVar1; + u32 uVar2; + + if (this->field_0x43 != 0) { + sub_0804A9FC(this, 0x1c); + } + sub_0804AA30(this, gUnk_080CDED0); + if ((this->bitfield & 0x80) != 0) { + switch (this->bitfield & 0x3f) { + case 0x14: + this->action = 1; + this->previousActionFlag = 0; + if ((this->entityType).form != 0) { + this->actionDelay = 0xc0; + } else { + this->actionDelay = gUnk_080CDEF8[Random() & 3]; + } + this->field_0xf = 0; + *(u8*)&this->field_0x7c = 0; + if (this->height.HALF.HI != 0) { + this->field_0x20 >>= 2; + } else { + this->field_0x20 = 0; + } + InitializeAnimation(this, 0); + break; + case 0xe: + case 0x15: + this->currentHealth = 0; + break; + } + } +} + +void nullsub_16(Entity* this) { +} + +void sub_0802F1F0(Entity* this) { + sub_08001242(); + if (this->height.HALF.HI != 0) { + sub_08003FC4(this, this->field_0x80.HWORD); + } +} + +extern u8 gUnk_080CDEF8[]; + +void sub_0802F210(Entity* this) { + u32 temp; + u32 temp2; + + sub_0804A720(this); + this->action = 1; + this->previousActionFlag = 0; + this->actionDelay = gUnk_080CDEF8[Random() & 3]; + this->actionDelay = (Random() & 0x1f) + this->actionDelay; + this->field_0xf = 0; + *(u8*)&this->field_0x7c = 0; + + this->field_0x80.HWORD = this->entityType.form == 0 ? 0x1800 : 0x2800; + + this->field_0x82.HWORD = this->entityType.form == 0 ? 0x2800 : 0x3000; + + InitializeAnimation(this, 0); +} + +void sub_0802F284(Entity* this) { + if (this->actionDelay > 0x60) { + UpdateAnimationVariableFrames(this, 2); + } else { + GetNextFrame(this); + } + if (this->actionDelay != 0) { + this->actionDelay--; + } else if (this->field_0xf != 0) { + if ((this->frames.b.f3) != 0) { + this->action = 2; + this->actionDelay = 0x10; + this->field_0xf = this->entityType.form; + this->field_0x20 = this->field_0x82.HWORD << 4; + sub_0802F45C(this); + InitializeAnimation(this, 2); + } + } else if ((this->frames.b.f3) != 0) { + this->field_0xf = 0x40; + InitializeAnimation(this, 1); + } +} + +extern u8 gUnk_080CDEF8[]; + +void sub_0802F300(Entity* this) { + s32 temp; + u32 rand; + + GetNextFrame(this); + sub_080AEF88(this); + temp = this->height.HALF.HI; + rand = Random() & 0xf; + + if (sub_080044EC(this, this->field_0x80.HWORD) == 1) { + this->action = 3; + this->previousActionFlag = 0; + if (this->entityType.form != 0) { + rand = 0; + } + + if (rand == 0) { + this->actionDelay = 0xc0; + } else { + this->actionDelay = gUnk_080CDEF8[rand & 3] + rand; + } + this->field_0xf = 0; + 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 = 0x10; + if (this->field_0xf != 0) { + this->field_0xf--; + sub_0802F45C(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_0802F3F4(Entity* this) { + + GetNextFrame(this); + + if ((this->frames.b.f3) != 0) { + if ((*(u8*)&this->field_0x7c.HALF.LO < 2) && ((this->entityType.form % 2) != 0)) { + this->action = 2; + this->actionDelay = 0x10; + this->field_0xf = this->entityType.form; + this->field_0x20 = this->field_0x82.HWORD << 4; + (*(u8*)&this->field_0x7c.HALF.LO)++; + sub_0802F45C(this); + InitializeAnimation(this, 2); + } else { + this->action = 1; + *(u8*)&this->field_0x7c.HALF.LO = 0; + InitializeAnimation(this, 0); + } + } +} + +void sub_0802F45C(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 diff --git a/src/enemy/tektiteGolden.c b/src/enemy/tektiteGolden.c index 221732eb..32c3ba40 100644 --- a/src/enemy/tektiteGolden.c +++ b/src/enemy/tektiteGolden.c @@ -31,11 +31,10 @@ void sub_08037F00(Entity* this) { this->actionDelay = 0x14; this->field_0xf = 0; this->field_0x80.HALF.LO = 0; - uVar1 = this->height.HALF.HI; - if (uVar1 != 0) { + if (this->height.HALF.HI != 0) { this->field_0x20 >>= 2; } else { - this->field_0x20 = uVar1; + this->field_0x20 = 0; } InitializeAnimation(this, 0);