summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyouraveragehooman <65437533+notyouraveragehooman@users.noreply.github.com>2020-06-15 00:08:08 -0700
committerGitHub <noreply@github.com>2020-06-15 00:08:08 -0700
commit5ce91f97bcd9e9e1a6cfc92bdc3ca1aec72f05c2 (patch)
tree6fc6ee51def8babd88ec81313265ba5a8aed98d1
parent4d8721d19a34794eec31aaa36bce8582e64695d7 (diff)
parenta9ef27fa23c8fde7373eb73cc901a08369007a18 (diff)
Merge pull request #12 from gamestabled/talon
talon OK
-rw-r--r--asm/talon.s398
-rw-r--r--include/enemy.h206
-rw-r--r--include/entity.h4
-rw-r--r--include/functions.h18
-rw-r--r--include/textbox.h2
-rw-r--r--linker.ld2
-rw-r--r--src/bladeBrothers.c191
-rw-r--r--src/cow.c6
-rw-r--r--src/enemy.c208
-rw-r--r--src/mailbox.c15
-rw-r--r--src/object.c2
-rw-r--r--src/talon.c163
-rw-r--r--src/textbox.c1
13 files changed, 479 insertions, 737 deletions
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) {
+
+ 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_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_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;
+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);
}
- else {
- this->field_0xf--;
- uVar1 = (u32)this->field_0x58;
+ if (this->interactType != 0) {
+ this->interactType = 0;
+ this->action = 2;
+ TextboxNoOverlapFollow(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_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;
+ }
+ sub_0801D2B4(this, gUnk_081115DC[this->entityType.parameter2]);
}
- 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_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 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 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;
- }
+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();