diff --git a/asm/talon.s b/asm/talon.s deleted file mode 100644 index 0eb7d667..00000000 --- a/asm/talon.s +++ /dev/null @@ -1,398 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start sub_08065534 -sub_08065534: @ 0x08065534 - push {lr} - adds r2, r0, #0 - ldrb r1, [r2, #0x10] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08065558 - ldr r0, _08065554 @ =gUnk_0810FEC4 - ldrb r1, [r2, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r2, #0 - bl _call_via_r1 - b _08065568 - .align 2, 0 -_08065554: .4byte gUnk_0810FEC4 -_08065558: - ldr r0, _0806556C @ =gUnk_0810FEBC - ldrb r1, [r2, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r2, #0 - bl _call_via_r1 -_08065568: - pop {pc} - .align 2, 0 -_0806556C: .4byte gUnk_0810FEBC - - thumb_func_start sub_08065570 -sub_08065570: @ 0x08065570 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08065598 @ =gUnk_0810FEB0 - bl sub_0806FDEC - cmp r0, #0 - beq _08065596 - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_08078778 - movs r0, #1 - strb r0, [r4, #0xc] - strb r0, [r4, #0xf] - movs r0, #2 - strb r0, [r4, #0x14] -_08065596: - pop {r4, pc} - .align 2, 0 -_08065598: .4byte gUnk_0810FEB0 - - thumb_func_start sub_0806559C -sub_0806559C: @ 0x0806559C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #8 - bls _080655D0 - movs r0, #0 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0x20 - movs r2, #0x20 - bl sub_0806ED9C - cmp r0, #0 - bge _080655C6 - ldrb r0, [r4, #0x14] - adds r1, r0, #4 - b _080655CA -_080655C6: - strb r0, [r4, #0x14] - adds r1, r0, #0 -_080655CA: - adds r0, r4, #0 - adds r0, #0x58 - b _080655D6 -_080655D0: - adds r0, r4, #0 - adds r0, #0x58 - ldrb r1, [r0] -_080655D6: - ldrb r0, [r0] - cmp r0, r1 - beq _080655E4 - adds r0, r4, #0 - bl InitializeAnimation - b _080655EA -_080655E4: - adds r0, r4, #0 - bl sub_08004274 -_080655EA: - adds r0, r4, #0 - bl sub_0806ED78 - adds r1, r4, #0 - adds r1, #0x39 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _08065604 - movs r0, #0 - strb r0, [r1] - bl sub_080791D0 -_08065604: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08065608 -sub_08065608: @ 0x08065608 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08065644 @ =gUnk_0810FEB0 - bl sub_0806FDEC - cmp r0, #0 - beq _08065640 - movs r2, #1 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - adds r0, r4, #0 - bl sub_0801E99C - adds r1, r4, #0 - adds r1, #0x68 - strb r0, [r1] - ldrb r1, [r1] - adds r0, r4, #0 - bl sub_08078784 - adds r0, r4, #0 - bl sub_0807DD50 -_08065640: - pop {r4, pc} - .align 2, 0 -_08065644: .4byte gUnk_0810FEB0 - - thumb_func_start sub_08065648 -sub_08065648: @ 0x08065648 - push {lr} - adds r2, r0, #0 - movs r0, #0x39 - adds r0, r0, r2 - mov ip, r0 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #2 - bne _08065676 - ldrb r0, [r2, #0xc] - adds r3, r2, #0 - adds r3, #0x69 - movs r1, #0 - strb r0, [r3] - movs r0, #4 - strb r0, [r2, #0xc] - mov r0, ip - strb r1, [r0] - adds r0, r2, #0 - bl sub_0806F118 - b _0806567E -_08065676: - adds r0, r2, #0 - movs r1, #0 - bl sub_0807DD94 -_0806567E: - pop {pc} - - thumb_func_start sub_08065680 -sub_08065680: @ 0x08065680 - push {r4, lr} - adds r4, r0, #0 - bl UpdateFuseInteraction - cmp r0, #0 - beq _080656A0 - adds r0, r4, #0 - adds r0, #0x69 - ldrb r0, [r0] - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x6a - ldrb r1, [r0] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_080656A0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080656A4 -sub_080656A4: @ 0x080656A4 - push {r4, lr} - adds r4, r0, #0 - ldr r0, _080656D0 @ =gTextBox - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _080656C8 - adds r0, r4, #0 - adds r0, #0x69 - ldrb r0, [r0] - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x6a - ldrb r1, [r0] - adds r0, r4, #0 - bl InitAnimationForceUpdate -_080656C8: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - .align 2, 0 -_080656D0: .4byte gTextBox - - thumb_func_start sub_080656D4 -sub_080656D4: @ 0x080656D4 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x39 - movs r0, #0 - ldrsb r0, [r5, r0] - cmp r0, #2 - bne _080656FC - ldrb r0, [r4, #0xc] - adds r2, r4, #0 - adds r2, #0x69 - movs r1, #0 - strb r0, [r2] - movs r0, #4 - strb r0, [r4, #0xc] - strb r1, [r5] - adds r0, r4, #0 - bl sub_0806F118 - b _08065738 -_080656FC: - cmp r0, #0 - beq _08065740 - movs r0, #0x37 - bl GetInventoryValue - adds r2, r0, #0 - cmp r2, #0 - beq _0806571C - ldr r1, _08065718 @ =gUnk_0800B41C - adds r0, r4, #0 - bl sub_0807DAD0 - b _08065740 - .align 2, 0 -_08065718: .4byte gUnk_0800B41C -_0806571C: - ldrb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x69 - strb r0, [r1] - movs r0, #3 - strb r0, [r4, #0xc] - strb r2, [r5] - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - ldr r0, [r0, #4] - adds r1, r4, #0 - bl TextboxNoOverlap -_08065738: - adds r0, r4, #0 - bl sub_0806574C - b _08065748 -_08065740: - adds r0, r4, #0 - movs r1, #0 - bl sub_0807DD94 -_08065748: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0806574C -sub_0806574C: @ 0x0806574C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _0806577C @ =gLinkEntity - bl sub_080045C4 - bl sub_0806F5A4 - adds r5, r4, #0 - adds r5, #0x58 - ldrb r2, [r5] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r2 - adds r1, r1, r0 - cmp r2, r1 - beq _08065772 - adds r0, r4, #0 - bl InitAnimationForceUpdate -_08065772: - ldrb r1, [r5] - adds r0, r4, #0 - adds r0, #0x6a - strb r1, [r0] - pop {r4, r5, pc} - .align 2, 0 -_0806577C: .4byte gLinkEntity - - thumb_func_start sub_08065780 -sub_08065780: @ 0x08065780 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - bl Random - movs r2, #6 - adds r1, r0, #0 - ands r1, r2 - strb r1, [r4, #0x14] - ldr r2, _080657A4 @ =gUnk_0810FED8 - lsrs r0, r0, #8 - movs r1, #7 - ands r0, r1 - adds r0, r0, r2 - ldrb r0, [r0] - strh r0, [r5, #0x10] - pop {r4, r5, pc} - .align 2, 0 -_080657A4: .4byte gUnk_0810FED8 - - thumb_func_start sub_080657A8 -sub_080657A8: @ 0x080657A8 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x5a - ldrb r0, [r0] - movs r2, #7 - ands r2, r0 - adds r2, #0xb - adds r0, r4, #0 - movs r1, #0 - bl sub_0806FF60 - ldrb r2, [r4, #0x1e] - adds r0, r4, #0 - movs r1, #1 - bl sub_0806FF60 - adds r0, r4, #0 - movs r1, #1 - movs r2, #0 - bl sub_0806FF88 - adds r0, r4, #0 - bl sub_0807000C - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080657DC -sub_080657DC: @ 0x080657DC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08065814 - ldr r1, _08065810 @ =gUnk_0810FEB0 - adds r0, r4, #0 - bl sub_0806FDEC - cmp r0, #0 - beq _0806581A - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #6 - bl InitializeAnimation - b _0806581A - .align 2, 0 -_08065810: .4byte gUnk_0810FEB0 -_08065814: - adds r0, r4, #0 - bl sub_08004274 -_0806581A: - pop {r4, pc} diff --git a/include/enemy.h b/include/enemy.h index a7d01603..25cc5529 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -4,107 +4,107 @@ #include "global.h" #include "entity.h" -extern void Octorok(Entity*); -extern void Chuchu(Entity*); -extern void Leever(Entity*); -extern void Peahat(Entity*); -extern void Rollobite(Entity*); -extern void DarkNut(Entity*); -extern void HangingSeed(Entity*); -extern void Beetle(Entity*); -extern void Keese(Entity*); -extern void DoorMimic(Entity*); -extern void RockChuchu(Entity*); -extern void SpinyChuchu(Entity*); -extern void CuccoChickAggr(Entity*); -extern void Moldorm(Entity*); -extern void EnemyE(Entity*); -extern void Moldworm(Entity*); -extern void Sluggula(Entity*); -extern void Pesto(Entity*); -extern void Puffstool(Entity*); -extern void ChuchuBoss(Entity*); -extern void LikeLike(Entity*); -extern void SpearMoblin(Entity*); -extern void BusinessScrub(Entity*); -extern void RupeeLike(Entity*); -extern void Madderpillar(Entity*); -extern void WaterDrop(Entity*); -extern void WallMaster(Entity*); -extern void BombPeahat(Entity*); -extern void Spark(Entity*); -extern void Chaser(Entity*); -extern void SpikedBeetle(Entity*); -extern void SensorBladeTrap(Entity*); -extern void Helmasaur(Entity*); -extern void FallingBoulder(Entity*); -extern void Bobomb(Entity*); -extern void WallMaster2(Entity*); -extern void Gleerok(Entity*); -extern void VaatiEyesMacro(Entity*); -extern void Tektite(Entity*); -extern void WizzrobeWind(Entity*); -extern void WizzrobeFire(Entity*); -extern void WizzrobeIce(Entity*); -extern void Armos(Entity*); -extern void Eyegore(Entity*); -extern void Rope(Entity*); -extern void SmallPesto(Entity*); -extern void AcroBandit(Entity*); -extern void BladeTrap(Entity*); -extern void Keaton(Entity*); -extern void Crow(Entity*); -extern void Mulldozer(Entity*); -extern void Bombarossa(Entity*); -extern void Wisp(Entity*); -extern void SpinyBeetle(Entity*); -extern void MazaalHead(Entity*); -extern void MazaalMacro(Entity*); -extern void MazaalHand(Entity*); -extern void OctorokBoss(Entity*); -extern void FlyingPot(Entity*); -extern void Gibdo(Entity*); -extern void OctorokGolden(Entity*); -extern void TektiteGolden(Entity*); -extern void RopeGolden(Entity*); -extern void CloudPiranha(Entity*); -extern void ScissorsBeetle(Entity*); -extern void CuccoAggr(Entity*); -extern void Stalfos(Entity*); -extern void FlyingSkull(Entity*); -extern void MazaalBracelet(Entity*); -extern void Takkuri(Entity*); -extern void BowMoblin(Entity*); -extern void Lakitu(Entity*); -extern void LakituCloud(Entity*); -extern void Enemy49(Entity*); -extern void VaatiRebornEnemy(Entity*); -extern void VaatiProjectile(Entity*); -extern void BallChainSoldier(Entity*); -extern void Enemy4D(Entity*); -extern void Ghini(Entity*); -extern void VaatiTransfigured(Entity*); -extern void Enemy50(Entity*); -extern void VaatiWrath(Entity*); -extern void VaatiArm(Entity*); -extern void Dust(Entity*); -extern void VaatiBall(Entity*); -extern void Octorok(Entity*); -extern void Slime(Entity*); -extern void MiniSlime(Entity*); -extern void FireballGuy(Entity*); -extern void MiniFireballGuy(Entity*); -extern void Enemy5A(Entity*); -extern void BusinessScrubPrologue(Entity*); -extern void GyorgFemale(Entity*); -extern void GyorgMale(Entity*); -extern void Curtain(Entity*); -extern void Enemy5F(Entity*); -extern void GyorgChild(Entity*); -extern void GyorgFemaleEye(Entity*); -extern void Enemy62(Entity*); -extern void GyorgFemaleMouth(Entity*); -extern void Enemy64(Entity*); -extern void TreeItem(Entity*); -extern void Enemy66(Entity*); +extern void Octorok(Entity*); +extern void Chuchu(Entity*); +extern void Leever(Entity*); +extern void Peahat(Entity*); +extern void Rollobite(Entity*); +extern void DarkNut(Entity*); +extern void HangingSeed(Entity*); +extern void Beetle(Entity*); +extern void Keese(Entity*); +extern void DoorMimic(Entity*); +extern void RockChuchu(Entity*); +extern void SpinyChuchu(Entity*); +extern void CuccoChickAggr(Entity*); +extern void Moldorm(Entity*); +extern void EnemyE(Entity*); +extern void Moldworm(Entity*); +extern void Sluggula(Entity*); +extern void Pesto(Entity*); +extern void Puffstool(Entity*); +extern void ChuchuBoss(Entity*); +extern void LikeLike(Entity*); +extern void SpearMoblin(Entity*); +extern void BusinessScrub(Entity*); +extern void RupeeLike(Entity*); +extern void Madderpillar(Entity*); +extern void WaterDrop(Entity*); +extern void WallMaster(Entity*); +extern void BombPeahat(Entity*); +extern void Spark(Entity*); +extern void Chaser(Entity*); +extern void SpikedBeetle(Entity*); +extern void SensorBladeTrap(Entity*); +extern void Helmasaur(Entity*); +extern void FallingBoulder(Entity*); +extern void Bobomb(Entity*); +extern void WallMaster2(Entity*); +extern void Gleerok(Entity*); +extern void VaatiEyesMacro(Entity*); +extern void Tektite(Entity*); +extern void WizzrobeWind(Entity*); +extern void WizzrobeFire(Entity*); +extern void WizzrobeIce(Entity*); +extern void Armos(Entity*); +extern void Eyegore(Entity*); +extern void Rope(Entity*); +extern void SmallPesto(Entity*); +extern void AcroBandit(Entity*); +extern void BladeTrap(Entity*); +extern void Keaton(Entity*); +extern void Crow(Entity*); +extern void Mulldozer(Entity*); +extern void Bombarossa(Entity*); +extern void Wisp(Entity*); +extern void SpinyBeetle(Entity*); +extern void MazaalHead(Entity*); +extern void MazaalMacro(Entity*); +extern void MazaalHand(Entity*); +extern void OctorokBoss(Entity*); +extern void FlyingPot(Entity*); +extern void Gibdo(Entity*); +extern void OctorokGolden(Entity*); +extern void TektiteGolden(Entity*); +extern void RopeGolden(Entity*); +extern void CloudPiranha(Entity*); +extern void ScissorsBeetle(Entity*); +extern void CuccoAggr(Entity*); +extern void Stalfos(Entity*); +extern void FlyingSkull(Entity*); +extern void MazaalBracelet(Entity*); +extern void Takkuri(Entity*); +extern void BowMoblin(Entity*); +extern void Lakitu(Entity*); +extern void LakituCloud(Entity*); +extern void Enemy49(Entity*); +extern void VaatiRebornEnemy(Entity*); +extern void VaatiProjectile(Entity*); +extern void BallChainSoldier(Entity*); +extern void Enemy4D(Entity*); +extern void Ghini(Entity*); +extern void VaatiTransfigured(Entity*); +extern void Enemy50(Entity*); +extern void VaatiWrath(Entity*); +extern void VaatiArm(Entity*); +extern void Dust(Entity*); +extern void VaatiBall(Entity*); +extern void Octorok(Entity*); +extern void Slime(Entity*); +extern void MiniSlime(Entity*); +extern void FireballGuy(Entity*); +extern void MiniFireballGuy(Entity*); +extern void Enemy5A(Entity*); +extern void BusinessScrubPrologue(Entity*); +extern void GyorgFemale(Entity*); +extern void GyorgMale(Entity*); +extern void Curtain(Entity*); +extern void Enemy5F(Entity*); +extern void GyorgChild(Entity*); +extern void GyorgFemaleEye(Entity*); +extern void Enemy62(Entity*); +extern void GyorgFemaleMouth(Entity*); +extern void Enemy64(Entity*); +extern void TreeItem(Entity*); +extern void Enemy66(Entity*); #endif \ No newline at end of file diff --git a/include/entity.h b/include/entity.h index 7a6618e2..0edf7fa0 100644 --- a/include/entity.h +++ b/include/entity.h @@ -28,7 +28,7 @@ union SplitHWord { struct { u8 LO, HI; } PACKED HALF; -}; +} PACKED; typedef struct Entity { u32* field_0x0; @@ -130,7 +130,7 @@ typedef struct Entity { u32* otherEntity; u8 field_0x68; u8 field_0x69; - u16 field_0x6a; + union SplitHWord field_0x6a; u8 field_0x6c; u8 field_0x6d; u8 filler4[6]; diff --git a/include/functions.h b/include/functions.h index 79464b11..b1932d28 100644 --- a/include/functions.h +++ b/include/functions.h @@ -19,6 +19,7 @@ extern void DeleteEntity(Entity*); extern u32 __modsi3(u32, u32); extern void DoFade(u32, u32); extern void UpdateAnimationSingleFrame(Entity*); +extern u32 GetInventoryValue(u32); // Unidentified extern void sub_0806ED78(Entity*); @@ -52,15 +53,10 @@ extern void sub_0807DD50(Entity*); extern void sub_0807DD94(Entity*, u32); extern Entity* sub_0805EB00(u32, u32, u32); extern Entity* sub_0805EB2C(u32, u32, u32, u32, u32); - -extern u32 sub_080045C4(Entity*, Entity*); -extern u32 sub_0801E99C(Entity*); -extern void sub_0805E3A0(Entity*, u32); -extern Entity* sub_0805EB00(u32, u32, u32); -extern u32 sub_0806F5A4(u32); -extern void sub_08078778(Entity*); -extern void sub_08078784(Entity*, u32); -extern void sub_0807DD50(Entity*); -extern void sub_0807DD94(Entity*, u32); - +extern u32 sub_0806FDEC(Entity*, u32*); +extern s32 sub_0806ED9C(Entity*, u32, u32); +extern s32* sub_0807DAD0(Entity*, u8*); +extern void sub_0806FF60(Entity*, u32, u32); +extern void sub_0806FF88(Entity*, u32, u32); +extern void sub_0807000C(Entity*); #endif \ No newline at end of file diff --git a/include/textbox.h b/include/textbox.h index a25e0723..a15867b6 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -18,4 +18,6 @@ typedef struct { extern TextBox gTextBox; +void TextboxNoOverlap(u32 index, Entity* ent); + #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index 59d907ed..4272fe14 100644 --- a/linker.ld +++ b/linker.ld @@ -489,7 +489,7 @@ SECTIONS { asm/sturgeon.o(.text); asm/tingleSiblings.o(.text); asm/stockwell.o(.text); - asm/talon.o(.text); + src/talon.o(.text); asm/malon.o(.text); src/epona.o(.text); src/milkCart.o(.text); diff --git a/src/bladeBrothers.c b/src/bladeBrothers.c index f2f01a18..db07d9b1 100644 --- a/src/bladeBrothers.c +++ b/src/bladeBrothers.c @@ -33,123 +33,110 @@ extern struct_030010A0 gUnk_030010A0; extern u16 gUnk_081115DC[]; extern Entity gLinkEntity; -void sub_080689C0(Entity *this) -{ - - if ((this->flags & 2) != 0) { - gUnk_081115D0[this->action](this); - } - else { - gUnk_081115C0[this->action](this); - sub_0806ED78(this); - } - if ((this->frames.all & 1) != 0) { - this->frames.all &= 0xfe; - sub_08068BEC(this, 0); - } -} +void sub_080689C0(Entity* this) { -void sub_08068A1C(Entity *this) -{ - u8 bVar1; - int offset; - - (this->entityType).parameter2 = (this->entityType).parameter1; - if (gUnk_030010A0.unk != 0) { - offset = 6; - bVar1 = 3; - - } - else { - sub_08078778(this); - offset = 2; - bVar1 = 1; - } - this->action = bVar1; - InitializeAnimation(this, offset); -} - -void sub_08068A4C(Entity *this) -{ - s32 uVar1; - s32 iVar2; - - uVar1 = sub_0806ED9C(this, 0x28, 0x28); - if (uVar1 < 0) { - uVar1 = 2; - } - else { - if (this->field_0xf == 0) { - this->field_0xf = 0x10; + if ((this->flags & 2) != 0) { + gUnk_081115D0[this->action](this); + } else { + gUnk_081115C0[this->action](this); + sub_0806ED78(this); } - else { - this->field_0xf--; - uVar1 = (u32)this->field_0x58; + if ((this->frames.all & 1) != 0) { + this->frames.all &= 0xfe; + sub_08068BEC(this, 0); } - } - iVar2 = sub_0806F078(this,uVar1); - if (iVar2 == 0) { - sub_08004274(this); - } - if (this->interactType != 0) { - this->interactType = 0; - this->action = 2; - TextboxNoOverlapFollow(0); - } } -void sub_08068AA4(Entity *this) -{ - u8 bVar1; - - this->action = 1; - if (this->entityType.parameter1 != 0) { - this->entityType.parameter2++; - this->entityType.parameter2 &= 7; - if (this->entityType.parameter2 == 0) { - this->entityType.parameter2 += 1; +void sub_08068A1C(Entity* this) { + u8 bVar1; + int offset; + + (this->entityType).parameter2 = (this->entityType).parameter1; + if (gUnk_030010A0.unk != 0) { + offset = 6; + bVar1 = 3; + + } else { + sub_08078778(this); + offset = 2; + bVar1 = 1; } - sub_0801D2B4(this, gUnk_081115DC[this->entityType.parameter2]); - } + this->action = bVar1; + InitializeAnimation(this, offset); } -void sub_08068ADC(Entity *this) -{ - if (gUnk_030010A0.unk == 2) { - sub_08004274(this); - } - sub_0806FD3C(this); +void sub_08068A4C(Entity* this) { + s32 uVar1; + s32 iVar2; + + uVar1 = sub_0806ED9C(this, 0x28, 0x28); + if (uVar1 < 0) { + uVar1 = 2; + } else { + if (this->field_0xf == 0) { + this->field_0xf = 0x10; + } else { + this->field_0xf--; + uVar1 = (u32)this->field_0x58; + } + } + iVar2 = sub_0806F078(this, uVar1); + if (iVar2 == 0) { + sub_08004274(this); + } + if (this->interactType != 0) { + this->interactType = 0; + this->action = 2; + TextboxNoOverlapFollow(0); + } } -void sub_08068AFC(Entity *this) -{ - this->action = 1; - this->spriteSettings.b.ss0 = 1; - *(u8*)&this->field_0x68 = sub_0801E99C(this); - sub_08078784(this, *(u8*)&this->field_0x68); - sub_0807DD50(this); -} +void sub_08068AA4(Entity* this) { + u8 bVar1; -void FUN_08068b2c(Entity *this) -{ - u32 uVar1; - - if (this->interactType == '\x02') { - this->action = 2; - this->interactType = '\0'; - sub_080045C4(this,&gLinkEntity); - uVar1 = sub_0806F5A4(); - InitAnimationForceUpdate(this, uVar1); - sub_0806F118(this); - } - else { - sub_0807DD94(this, 0); - } -} - -void sub_08068B70(Entity *this) -{ - if (UpdateFuseInteraction()) { this->action = 1; - } + if (this->entityType.parameter1 != 0) { + this->entityType.parameter2++; + this->entityType.parameter2 &= 7; + if (this->entityType.parameter2 == 0) { + this->entityType.parameter2 += 1; + } + sub_0801D2B4(this, gUnk_081115DC[this->entityType.parameter2]); + } +} + +void sub_08068ADC(Entity* this) { + if (gUnk_030010A0.unk == 2) { + sub_08004274(this); + } + sub_0806FD3C(this); +} + +void sub_08068AFC(Entity* this) { + this->action = 1; + this->spriteSettings.b.ss0 = 1; + *(u8*)&this->field_0x68 = sub_0801E99C(this); + sub_08078784(this, *(u8*)&this->field_0x68); + sub_0807DD50(this); +} + +void FUN_08068b2c(Entity* this) { + u32 uVar1; + + if (this->interactType == '\x02') { + this->action = 2; + this->interactType = '\0'; + sub_080045C4(this, &gLinkEntity); + uVar1 = sub_0806F5A4(); + InitAnimationForceUpdate(this, uVar1); + sub_0806F118(this); + } else { + sub_0807DD94(this, 0); + } +} + +void sub_08068B70(Entity* this) { + if (UpdateFuseInteraction()) { + this->action = 1; + } } diff --git a/src/cow.c b/src/cow.c index 80a44ddd..c78f69e0 100644 --- a/src/cow.c +++ b/src/cow.c @@ -46,12 +46,12 @@ void sub_08068FC0(Entity* ent) { *(u16*)&ent->field_0x68 = x; y = ent->y.HALF.HI; - ent->field_0x6a = y; + ent->field_0x6a.HWORD = y; } else { u32 var1 = r2 >> 16; // 0x68+0x69 probably a SplitWord *(u16*)&ent->field_0x68 = var1; - ent->field_0x6a = r2; + ent->field_0x6a.HWORD = r2; } ent->field_0x6c = sub_0801E99C(ent); @@ -116,7 +116,7 @@ void sub_08069068(Entity* ent) { } { s32 y = ent->y.HALF.HI; - s16* y2 = &ent->field_0x6a; + s16* y2 = &ent->field_0x6a.HWORD; y -= *y2; if (y > 16) { ent->y.HALF.HI = *y2 + 16; diff --git a/src/enemy.c b/src/enemy.c index 90ca8912..5bf4fb8e 100644 --- a/src/enemy.c +++ b/src/enemy.c @@ -2,108 +2,106 @@ #include "entity.h" #include "enemy.h" -void (*const gEnemyFunctions[])(Entity* ent) = { - Octorok, - Chuchu, - Leever, - Peahat, - Rollobite, - DarkNut, - HangingSeed, - Beetle, - Keese, - DoorMimic, - RockChuchu, - SpinyChuchu, - CuccoChickAggr, - Moldorm, - EnemyE, - Moldworm, - Sluggula, - Pesto, - Puffstool, - ChuchuBoss, - LikeLike, - SpearMoblin, - BusinessScrub, - RupeeLike, - Madderpillar, - WaterDrop, - WallMaster, - BombPeahat, - Spark, - Chaser, - SpikedBeetle, - SensorBladeTrap, - Helmasaur, - FallingBoulder, - Bobomb, - WallMaster2, - Gleerok, - VaatiEyesMacro, - Tektite, - WizzrobeWind, - WizzrobeFire, - WizzrobeIce, - Armos, - Eyegore, - Rope, - SmallPesto, - AcroBandit, - BladeTrap, - Keaton, - Crow, - Mulldozer, - Bombarossa, - Wisp, - SpinyBeetle, - MazaalHead, - MazaalMacro, - MazaalHand, - OctorokBoss, - FlyingPot, - Gibdo, - OctorokGolden, - TektiteGolden, - RopeGolden, - CloudPiranha, - ScissorsBeetle, - CuccoAggr, - Stalfos, - FlyingSkull, - MazaalBracelet, - Takkuri, - BowMoblin, - Lakitu, - LakituCloud, - Enemy49, - VaatiRebornEnemy, - VaatiProjectile, - BallChainSoldier, - Enemy4D, - Ghini, - VaatiTransfigured, - Enemy50, - VaatiWrath, - VaatiArm, - Dust, - VaatiBall, - Octorok, - Slime, - MiniSlime, - FireballGuy, - MiniFireballGuy, - Enemy5A, - BusinessScrubPrologue, - GyorgFemale, - GyorgMale, - Curtain, - Enemy5F, - GyorgChild, - GyorgFemaleEye, - Enemy62, - GyorgFemaleMouth, - Enemy64, - TreeItem, - Enemy66 -}; +void (*const gEnemyFunctions[])(Entity* ent) = { Octorok, + Chuchu, + Leever, + Peahat, + Rollobite, + DarkNut, + HangingSeed, + Beetle, + Keese, + DoorMimic, + RockChuchu, + SpinyChuchu, + CuccoChickAggr, + Moldorm, + EnemyE, + Moldworm, + Sluggula, + Pesto, + Puffstool, + ChuchuBoss, + LikeLike, + SpearMoblin, + BusinessScrub, + RupeeLike, + Madderpillar, + WaterDrop, + WallMaster, + BombPeahat, + Spark, + Chaser, + SpikedBeetle, + SensorBladeTrap, + Helmasaur, + FallingBoulder, + Bobomb, + WallMaster2, + Gleerok, + VaatiEyesMacro, + Tektite, + WizzrobeWind, + WizzrobeFire, + WizzrobeIce, + Armos, + Eyegore, + Rope, + SmallPesto, + AcroBandit, + BladeTrap, + Keaton, + Crow, + Mulldozer, + Bombarossa, + Wisp, + SpinyBeetle, + MazaalHead, + MazaalMacro, + MazaalHand, + OctorokBoss, + FlyingPot, + Gibdo, + OctorokGolden, + TektiteGolden, + RopeGolden, + CloudPiranha, + ScissorsBeetle, + CuccoAggr, + Stalfos, + FlyingSkull, + MazaalBracelet, + Takkuri, + BowMoblin, + Lakitu, + LakituCloud, + Enemy49, + VaatiRebornEnemy, + VaatiProjectile, + BallChainSoldier, + Enemy4D, + Ghini, + VaatiTransfigured, + Enemy50, + VaatiWrath, + VaatiArm, + Dust, + VaatiBall, + Octorok, + Slime, + MiniSlime, + FireballGuy, + MiniFireballGuy, + Enemy5A, + BusinessScrubPrologue, + GyorgFemale, + GyorgMale, + Curtain, + Enemy5F, + GyorgChild, + GyorgFemaleEye, + Enemy62, + GyorgFemaleMouth, + Enemy64, + TreeItem, + Enemy66 }; diff --git a/src/mailbox.c b/src/mailbox.c index 53864436..0a200d30 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -18,14 +18,12 @@ void sub_080631E8(Entity* this) { } } -void sub_08063210(Entity* this) -{ +void sub_08063210(Entity* this) { this->action = 1; InitAnimationForceUpdate(this, 0); } -void sub_08063220(Entity* this) -{ +void sub_08063220(Entity* this) { u8 bVar1; if (this->interactType != 0) { @@ -42,8 +40,7 @@ void sub_08063220(Entity* this) } } -void sub_08063254(Entity* this, u32 unused) -{ +void sub_08063254(Entity* this, u32 unused) { sub_08063280(this, unused); if ((this->frames.all & 0x80) != 0) { this->action = 3; @@ -51,13 +48,11 @@ void sub_08063254(Entity* this, u32 unused) } } -void sub_08063278(Entity* this, u32 unused) -{ +void sub_08063278(Entity* this, u32 unused) { sub_08063280(this, unused); } -void sub_08063280(Entity* this, u32 unused) -{ +void sub_08063280(Entity* this, u32 unused) { Entity* e; // r4@1 u8 var; // r2@1 diff --git a/src/object.c b/src/object.c index 36a3db2c..8bf04b80 100644 --- a/src/object.c +++ b/src/object.c @@ -197,4 +197,4 @@ void (*const gObjectFunctions[])(Entity*) = { ObjectBF, EnemyItem, ObjectC1, -}; \ No newline at end of file +}; diff --git a/src/talon.c b/src/talon.c new file mode 100644 index 00000000..2262d66d --- /dev/null +++ b/src/talon.c @@ -0,0 +1,163 @@ +#include "global.h" +#include "entity.h" +#include "textbox.h" +#include "functions.h" +#include "link.h" + +extern Entity gLinkEntity; + +extern void (*gUnk_0810FEC4[])(Entity* this); +extern void (*gUnk_0810FEBC[])(Entity* this); +extern u32 gUnk_0810FEB0; +extern u8 gUnk_0800B41C; +extern u8 gUnk_0810FED8[]; + +void sub_0806574C(Entity* this); + +void sub_08065534(Entity* this) { + if (this->flags & 2) { + gUnk_0810FEC4[this->action](this); + } else { + gUnk_0810FEBC[this->action](this); + } +} + +void sub_08065570(Entity* this) { + if (sub_0806FDEC(this, &gUnk_0810FEB0) != 0) { + InitializeAnimation(this, 0); + sub_08078778(this); + this->action = 1; + this->field_0xf = 1; + this->animationState = 2; + } +} + +void sub_0806559C(Entity* this) { + s32 offset; + s32 result; + + this->parameter3++; + if (this->parameter3 >= 9) { + this->parameter3 = 0; + result = sub_0806ED9C(this, 0x20, 0x20); + if (result < 0) { + offset = this->animationState + 4; + } else { + this->animationState = result; + offset = result; + } + } else { + offset = this->field_0x58; + } + + if (this->field_0x58 != offset) { + InitializeAnimation(this, offset); + } else { + sub_08004274(this); + } + sub_0806ED78(this); + if (this->interactType != 0) { + this->interactType = 0; + sub_080791D0(); + } +} + +void sub_08065608(Entity* this) { + if (sub_0806FDEC(this, &gUnk_0810FEB0) != 0) { + this->action = 1; + this->spriteSettings.b.ss0 = 1; + this->field_0x68 = sub_0801E99C(this); + sub_08078784(this, this->field_0x68); + sub_0807DD50(this); + } +} + +void sub_08065648(Entity* this) { + if (this->interactType == 2) { + this->field_0x69 = this->action; + this->action = 4; + this->interactType = 0; + sub_0806F118(this); + } else { + sub_0807DD94(this, 0); + } +} + +void sub_08065680(Entity* this) { + if (UpdateFuseInteraction() != 0) { + this->action = this->field_0x69; + InitAnimationForceUpdate(this, this->field_0x6a.HALF.LO); + } +} + +void sub_080656A4(Entity* this) { + if ((gTextBox.doTextBox & 0x7F) == 0) { + this->action = this->field_0x69; + InitAnimationForceUpdate(this, this->field_0x6a.HALF.LO); + } + UpdateAnimationSingleFrame(this); +} + +void sub_080656D4(Entity* this) { + if (this->interactType == 2) { + this->field_0x69 = this->action; + this->action = 4; + this->interactType = 0; + sub_0806F118(this); + goto label; + } else { + if (this->interactType != 0) { + if (GetInventoryValue(0x37) != 0) { // keyLonLon + sub_0807DAD0(this, &gUnk_0800B41C); + goto label2; + } else { + this->field_0x69 = this->action; + this->action = 3; + this->interactType = 0; + TextboxNoOverlap(*(u32*)(*(u32*)&this->cutsceneBeh.HWORD + 4), this); + label: + sub_0806574C(this); + } + } else { + label2: + sub_0807DD94(this, 0); + } + } +} + +void sub_0806574C(Entity* this) { + u32 j; + + j = (this->field_0x58 & ~3) + sub_0806F5A4(sub_080045C4(this, &gLinkEntity)); + if (this->field_0x58 != j) { + InitAnimationForceUpdate(this, j); + } + this->field_0x6a.HALF.LO = this->field_0x58; +} + +void sub_08065780(Entity* this, u16* param_2) { + u32 rand; + + rand = Random(); + this->animationState = rand & 6; + param_2[8] = gUnk_0810FED8[rand >> 8 & 7]; +} + +void sub_080657A8(Entity* this) { + sub_0806FF60(this, 0, ((this->frames.all & 7) + 0xB)); + sub_0806FF60(this, 1, this->animationList); + sub_0806FF88(this, 1, 0); + sub_0807000C(this); +} + +void sub_080657DC(Entity* this) { + if (this->action == 0) { + if (sub_0806FDEC(this, &gUnk_0810FEB0) != 0) { + this->action++; + this->spriteSettings.b.ss0 = 1; + InitializeAnimation(this, 6); + } + } else { + sub_08004274(this); + } +} diff --git a/src/textbox.c b/src/textbox.c index 5e557d01..1ec017d8 100644 --- a/src/textbox.c +++ b/src/textbox.c @@ -3,7 +3,6 @@ #include "entity.h" #include "textbox.h" -void TextboxNoOverlap(u32 index, Entity* ent); void sub_0801D630(); void ShowTextbox(); void TextboxAtPosition();