Merge pull request #12 from gamestabled/talon

talon OK
This commit is contained in:
notyouraveragehooman 2020-06-15 00:08:08 -07:00 committed by GitHub
commit 5ce91f97bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 484 additions and 742 deletions

View File

@ -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}

View File

@ -4,107 +4,107 @@
#include "global.h" #include "global.h"
#include "entity.h" #include "entity.h"
extern void Octorok(Entity*); extern void Octorok(Entity*);
extern void Chuchu(Entity*); extern void Chuchu(Entity*);
extern void Leever(Entity*); extern void Leever(Entity*);
extern void Peahat(Entity*); extern void Peahat(Entity*);
extern void Rollobite(Entity*); extern void Rollobite(Entity*);
extern void DarkNut(Entity*); extern void DarkNut(Entity*);
extern void HangingSeed(Entity*); extern void HangingSeed(Entity*);
extern void Beetle(Entity*); extern void Beetle(Entity*);
extern void Keese(Entity*); extern void Keese(Entity*);
extern void DoorMimic(Entity*); extern void DoorMimic(Entity*);
extern void RockChuchu(Entity*); extern void RockChuchu(Entity*);
extern void SpinyChuchu(Entity*); extern void SpinyChuchu(Entity*);
extern void CuccoChickAggr(Entity*); extern void CuccoChickAggr(Entity*);
extern void Moldorm(Entity*); extern void Moldorm(Entity*);
extern void EnemyE(Entity*); extern void EnemyE(Entity*);
extern void Moldworm(Entity*); extern void Moldworm(Entity*);
extern void Sluggula(Entity*); extern void Sluggula(Entity*);
extern void Pesto(Entity*); extern void Pesto(Entity*);
extern void Puffstool(Entity*); extern void Puffstool(Entity*);
extern void ChuchuBoss(Entity*); extern void ChuchuBoss(Entity*);
extern void LikeLike(Entity*); extern void LikeLike(Entity*);
extern void SpearMoblin(Entity*); extern void SpearMoblin(Entity*);
extern void BusinessScrub(Entity*); extern void BusinessScrub(Entity*);
extern void RupeeLike(Entity*); extern void RupeeLike(Entity*);
extern void Madderpillar(Entity*); extern void Madderpillar(Entity*);
extern void WaterDrop(Entity*); extern void WaterDrop(Entity*);
extern void WallMaster(Entity*); extern void WallMaster(Entity*);
extern void BombPeahat(Entity*); extern void BombPeahat(Entity*);
extern void Spark(Entity*); extern void Spark(Entity*);
extern void Chaser(Entity*); extern void Chaser(Entity*);
extern void SpikedBeetle(Entity*); extern void SpikedBeetle(Entity*);
extern void SensorBladeTrap(Entity*); extern void SensorBladeTrap(Entity*);
extern void Helmasaur(Entity*); extern void Helmasaur(Entity*);
extern void FallingBoulder(Entity*); extern void FallingBoulder(Entity*);
extern void Bobomb(Entity*); extern void Bobomb(Entity*);
extern void WallMaster2(Entity*); extern void WallMaster2(Entity*);
extern void Gleerok(Entity*); extern void Gleerok(Entity*);
extern void VaatiEyesMacro(Entity*); extern void VaatiEyesMacro(Entity*);
extern void Tektite(Entity*); extern void Tektite(Entity*);
extern void WizzrobeWind(Entity*); extern void WizzrobeWind(Entity*);
extern void WizzrobeFire(Entity*); extern void WizzrobeFire(Entity*);
extern void WizzrobeIce(Entity*); extern void WizzrobeIce(Entity*);
extern void Armos(Entity*); extern void Armos(Entity*);
extern void Eyegore(Entity*); extern void Eyegore(Entity*);
extern void Rope(Entity*); extern void Rope(Entity*);
extern void SmallPesto(Entity*); extern void SmallPesto(Entity*);
extern void AcroBandit(Entity*); extern void AcroBandit(Entity*);
extern void BladeTrap(Entity*); extern void BladeTrap(Entity*);
extern void Keaton(Entity*); extern void Keaton(Entity*);
extern void Crow(Entity*); extern void Crow(Entity*);
extern void Mulldozer(Entity*); extern void Mulldozer(Entity*);
extern void Bombarossa(Entity*); extern void Bombarossa(Entity*);
extern void Wisp(Entity*); extern void Wisp(Entity*);
extern void SpinyBeetle(Entity*); extern void SpinyBeetle(Entity*);
extern void MazaalHead(Entity*); extern void MazaalHead(Entity*);
extern void MazaalMacro(Entity*); extern void MazaalMacro(Entity*);
extern void MazaalHand(Entity*); extern void MazaalHand(Entity*);
extern void OctorokBoss(Entity*); extern void OctorokBoss(Entity*);
extern void FlyingPot(Entity*); extern void FlyingPot(Entity*);
extern void Gibdo(Entity*); extern void Gibdo(Entity*);
extern void OctorokGolden(Entity*); extern void OctorokGolden(Entity*);
extern void TektiteGolden(Entity*); extern void TektiteGolden(Entity*);
extern void RopeGolden(Entity*); extern void RopeGolden(Entity*);
extern void CloudPiranha(Entity*); extern void CloudPiranha(Entity*);
extern void ScissorsBeetle(Entity*); extern void ScissorsBeetle(Entity*);
extern void CuccoAggr(Entity*); extern void CuccoAggr(Entity*);
extern void Stalfos(Entity*); extern void Stalfos(Entity*);
extern void FlyingSkull(Entity*); extern void FlyingSkull(Entity*);
extern void MazaalBracelet(Entity*); extern void MazaalBracelet(Entity*);
extern void Takkuri(Entity*); extern void Takkuri(Entity*);
extern void BowMoblin(Entity*); extern void BowMoblin(Entity*);
extern void Lakitu(Entity*); extern void Lakitu(Entity*);
extern void LakituCloud(Entity*); extern void LakituCloud(Entity*);
extern void Enemy49(Entity*); extern void Enemy49(Entity*);
extern void VaatiRebornEnemy(Entity*); extern void VaatiRebornEnemy(Entity*);
extern void VaatiProjectile(Entity*); extern void VaatiProjectile(Entity*);
extern void BallChainSoldier(Entity*); extern void BallChainSoldier(Entity*);
extern void Enemy4D(Entity*); extern void Enemy4D(Entity*);
extern void Ghini(Entity*); extern void Ghini(Entity*);
extern void VaatiTransfigured(Entity*); extern void VaatiTransfigured(Entity*);
extern void Enemy50(Entity*); extern void Enemy50(Entity*);
extern void VaatiWrath(Entity*); extern void VaatiWrath(Entity*);
extern void VaatiArm(Entity*); extern void VaatiArm(Entity*);
extern void Dust(Entity*); extern void Dust(Entity*);
extern void VaatiBall(Entity*); extern void VaatiBall(Entity*);
extern void Octorok(Entity*); extern void Octorok(Entity*);
extern void Slime(Entity*); extern void Slime(Entity*);
extern void MiniSlime(Entity*); extern void MiniSlime(Entity*);
extern void FireballGuy(Entity*); extern void FireballGuy(Entity*);
extern void MiniFireballGuy(Entity*); extern void MiniFireballGuy(Entity*);
extern void Enemy5A(Entity*); extern void Enemy5A(Entity*);
extern void BusinessScrubPrologue(Entity*); extern void BusinessScrubPrologue(Entity*);
extern void GyorgFemale(Entity*); extern void GyorgFemale(Entity*);
extern void GyorgMale(Entity*); extern void GyorgMale(Entity*);
extern void Curtain(Entity*); extern void Curtain(Entity*);
extern void Enemy5F(Entity*); extern void Enemy5F(Entity*);
extern void GyorgChild(Entity*); extern void GyorgChild(Entity*);
extern void GyorgFemaleEye(Entity*); extern void GyorgFemaleEye(Entity*);
extern void Enemy62(Entity*); extern void Enemy62(Entity*);
extern void GyorgFemaleMouth(Entity*); extern void GyorgFemaleMouth(Entity*);
extern void Enemy64(Entity*); extern void Enemy64(Entity*);
extern void TreeItem(Entity*); extern void TreeItem(Entity*);
extern void Enemy66(Entity*); extern void Enemy66(Entity*);
#endif #endif

View File

@ -28,7 +28,7 @@ union SplitHWord {
struct { struct {
u8 LO, HI; u8 LO, HI;
} PACKED HALF; } PACKED HALF;
}; } PACKED;
typedef struct Entity { typedef struct Entity {
u32* field_0x0; u32* field_0x0;
@ -130,7 +130,7 @@ typedef struct Entity {
u32* otherEntity; u32* otherEntity;
u8 field_0x68; u8 field_0x68;
u8 field_0x69; u8 field_0x69;
u16 field_0x6a; union SplitHWord field_0x6a;
u8 field_0x6c; u8 field_0x6c;
u8 field_0x6d; u8 field_0x6d;
u8 filler4[6]; u8 filler4[6];

View File

@ -19,6 +19,7 @@ extern void DeleteEntity(Entity*);
extern u32 __modsi3(u32, u32); extern u32 __modsi3(u32, u32);
extern void DoFade(u32, u32); extern void DoFade(u32, u32);
extern void UpdateAnimationSingleFrame(Entity*); extern void UpdateAnimationSingleFrame(Entity*);
extern u32 GetInventoryValue(u32);
// Unidentified // Unidentified
extern void sub_0806ED78(Entity*); extern void sub_0806ED78(Entity*);
@ -52,15 +53,10 @@ extern void sub_0807DD50(Entity*);
extern void sub_0807DD94(Entity*, u32); extern void sub_0807DD94(Entity*, u32);
extern Entity* sub_0805EB00(u32, u32, u32); extern Entity* sub_0805EB00(u32, u32, u32);
extern Entity* sub_0805EB2C(u32, u32, u32, u32, u32); extern Entity* sub_0805EB2C(u32, u32, u32, u32, u32);
extern u32 sub_0806FDEC(Entity*, u32*);
extern u32 sub_080045C4(Entity*, Entity*); extern s32 sub_0806ED9C(Entity*, u32, u32);
extern u32 sub_0801E99C(Entity*); extern s32* sub_0807DAD0(Entity*, u8*);
extern void sub_0805E3A0(Entity*, u32); extern void sub_0806FF60(Entity*, u32, u32);
extern Entity* sub_0805EB00(u32, u32, u32); extern void sub_0806FF88(Entity*, u32, u32);
extern u32 sub_0806F5A4(u32); extern void sub_0807000C(Entity*);
extern void sub_08078778(Entity*);
extern void sub_08078784(Entity*, u32);
extern void sub_0807DD50(Entity*);
extern void sub_0807DD94(Entity*, u32);
#endif #endif

View File

@ -18,4 +18,6 @@ typedef struct {
extern TextBox gTextBox; extern TextBox gTextBox;
void TextboxNoOverlap(u32 index, Entity* ent);
#endif #endif

View File

@ -489,7 +489,7 @@ SECTIONS {
asm/sturgeon.o(.text); asm/sturgeon.o(.text);
asm/tingleSiblings.o(.text); asm/tingleSiblings.o(.text);
asm/stockwell.o(.text); asm/stockwell.o(.text);
asm/talon.o(.text); src/talon.o(.text);
asm/malon.o(.text); asm/malon.o(.text);
src/epona.o(.text); src/epona.o(.text);
src/milkCart.o(.text); src/milkCart.o(.text);

View File

@ -33,123 +33,110 @@ extern struct_030010A0 gUnk_030010A0;
extern u16 gUnk_081115DC[]; extern u16 gUnk_081115DC[];
extern Entity gLinkEntity; extern Entity gLinkEntity;
void sub_080689C0(Entity *this) 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) if ((this->flags & 2) != 0) {
{ gUnk_081115D0[this->action](this);
u8 bVar1; } else {
int offset; gUnk_081115C0[this->action](this);
sub_0806ED78(this);
(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;
} }
else { if ((this->frames.all & 1) != 0) {
this->field_0xf--; this->frames.all &= 0xfe;
uVar1 = (u32)this->field_0x58; 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) void sub_08068A1C(Entity* this) {
{ u8 bVar1;
u8 bVar1; int offset;
this->action = 1; (this->entityType).parameter2 = (this->entityType).parameter1;
if (this->entityType.parameter1 != 0) { if (gUnk_030010A0.unk != 0) {
this->entityType.parameter2++; offset = 6;
this->entityType.parameter2 &= 7; bVar1 = 3;
if (this->entityType.parameter2 == 0) {
this->entityType.parameter2 += 1; } 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) void sub_08068A4C(Entity* this) {
{ s32 uVar1;
if (gUnk_030010A0.unk == 2) { s32 iVar2;
sub_08004274(this);
} uVar1 = sub_0806ED9C(this, 0x28, 0x28);
sub_0806FD3C(this); 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) void sub_08068AA4(Entity* this) {
{ u8 bVar1;
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; 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;
}
} }

View File

@ -46,12 +46,12 @@ void sub_08068FC0(Entity* ent) {
*(u16*)&ent->field_0x68 = x; *(u16*)&ent->field_0x68 = x;
y = ent->y.HALF.HI; y = ent->y.HALF.HI;
ent->field_0x6a = y; ent->field_0x6a.HWORD = y;
} else { } else {
u32 var1 = r2 >> 16; u32 var1 = r2 >> 16;
// 0x68+0x69 probably a SplitWord // 0x68+0x69 probably a SplitWord
*(u16*)&ent->field_0x68 = var1; *(u16*)&ent->field_0x68 = var1;
ent->field_0x6a = r2; ent->field_0x6a.HWORD = r2;
} }
ent->field_0x6c = sub_0801E99C(ent); ent->field_0x6c = sub_0801E99C(ent);
@ -116,7 +116,7 @@ void sub_08069068(Entity* ent) {
} }
{ {
s32 y = ent->y.HALF.HI; s32 y = ent->y.HALF.HI;
s16* y2 = &ent->field_0x6a; s16* y2 = &ent->field_0x6a.HWORD;
y -= *y2; y -= *y2;
if (y > 16) { if (y > 16) {
ent->y.HALF.HI = *y2 + 16; ent->y.HALF.HI = *y2 + 16;

View File

@ -2,108 +2,106 @@
#include "entity.h" #include "entity.h"
#include "enemy.h" #include "enemy.h"
void (*const gEnemyFunctions[])(Entity* ent) = { void (*const gEnemyFunctions[])(Entity* ent) = { Octorok,
Octorok, Chuchu,
Chuchu, Leever,
Leever, Peahat,
Peahat, Rollobite,
Rollobite, DarkNut,
DarkNut, HangingSeed,
HangingSeed, Beetle,
Beetle, Keese,
Keese, DoorMimic,
DoorMimic, RockChuchu,
RockChuchu, SpinyChuchu,
SpinyChuchu, CuccoChickAggr,
CuccoChickAggr, Moldorm,
Moldorm, EnemyE,
EnemyE, Moldworm,
Moldworm, Sluggula,
Sluggula, Pesto,
Pesto, Puffstool,
Puffstool, ChuchuBoss,
ChuchuBoss, LikeLike,
LikeLike, SpearMoblin,
SpearMoblin, BusinessScrub,
BusinessScrub, RupeeLike,
RupeeLike, Madderpillar,
Madderpillar, WaterDrop,
WaterDrop, WallMaster,
WallMaster, BombPeahat,
BombPeahat, Spark,
Spark, Chaser,
Chaser, SpikedBeetle,
SpikedBeetle, SensorBladeTrap,
SensorBladeTrap, Helmasaur,
Helmasaur, FallingBoulder,
FallingBoulder, Bobomb,
Bobomb, WallMaster2,
WallMaster2, Gleerok,
Gleerok, VaatiEyesMacro,
VaatiEyesMacro, Tektite,
Tektite, WizzrobeWind,
WizzrobeWind, WizzrobeFire,
WizzrobeFire, WizzrobeIce,
WizzrobeIce, Armos,
Armos, Eyegore,
Eyegore, Rope,
Rope, SmallPesto,
SmallPesto, AcroBandit,
AcroBandit, BladeTrap,
BladeTrap, Keaton,
Keaton, Crow,
Crow, Mulldozer,
Mulldozer, Bombarossa,
Bombarossa, Wisp,
Wisp, SpinyBeetle,
SpinyBeetle, MazaalHead,
MazaalHead, MazaalMacro,
MazaalMacro, MazaalHand,
MazaalHand, OctorokBoss,
OctorokBoss, FlyingPot,
FlyingPot, Gibdo,
Gibdo, OctorokGolden,
OctorokGolden, TektiteGolden,
TektiteGolden, RopeGolden,
RopeGolden, CloudPiranha,
CloudPiranha, ScissorsBeetle,
ScissorsBeetle, CuccoAggr,
CuccoAggr, Stalfos,
Stalfos, FlyingSkull,
FlyingSkull, MazaalBracelet,
MazaalBracelet, Takkuri,
Takkuri, BowMoblin,
BowMoblin, Lakitu,
Lakitu, LakituCloud,
LakituCloud, Enemy49,
Enemy49, VaatiRebornEnemy,
VaatiRebornEnemy, VaatiProjectile,
VaatiProjectile, BallChainSoldier,
BallChainSoldier, Enemy4D,
Enemy4D, Ghini,
Ghini, VaatiTransfigured,
VaatiTransfigured, Enemy50,
Enemy50, VaatiWrath,
VaatiWrath, VaatiArm,
VaatiArm, Dust,
Dust, VaatiBall,
VaatiBall, Octorok,
Octorok, Slime,
Slime, MiniSlime,
MiniSlime, FireballGuy,
FireballGuy, MiniFireballGuy,
MiniFireballGuy, Enemy5A,
Enemy5A, BusinessScrubPrologue,
BusinessScrubPrologue, GyorgFemale,
GyorgFemale, GyorgMale,
GyorgMale, Curtain,
Curtain, Enemy5F,
Enemy5F, GyorgChild,
GyorgChild, GyorgFemaleEye,
GyorgFemaleEye, Enemy62,
Enemy62, GyorgFemaleMouth,
GyorgFemaleMouth, Enemy64,
Enemy64, TreeItem,
TreeItem, Enemy66 };
Enemy66
};

View File

@ -18,14 +18,12 @@ void sub_080631E8(Entity* this) {
} }
} }
void sub_08063210(Entity* this) void sub_08063210(Entity* this) {
{
this->action = 1; this->action = 1;
InitAnimationForceUpdate(this, 0); InitAnimationForceUpdate(this, 0);
} }
void sub_08063220(Entity* this) void sub_08063220(Entity* this) {
{
u8 bVar1; u8 bVar1;
if (this->interactType != 0) { 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); sub_08063280(this, unused);
if ((this->frames.all & 0x80) != 0) { if ((this->frames.all & 0x80) != 0) {
this->action = 3; 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); sub_08063280(this, unused);
} }
void sub_08063280(Entity* this, u32 unused) void sub_08063280(Entity* this, u32 unused) {
{
Entity* e; // r4@1 Entity* e; // r4@1
u8 var; // r2@1 u8 var; // r2@1

View File

@ -197,4 +197,4 @@ void (*const gObjectFunctions[])(Entity*) = {
ObjectBF, ObjectBF,
EnemyItem, EnemyItem,
ObjectC1, ObjectC1,
}; };

163
src/talon.c Normal file
View File

@ -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);
}
}

View File

@ -3,7 +3,6 @@
#include "entity.h" #include "entity.h"
#include "textbox.h" #include "textbox.h"
void TextboxNoOverlap(u32 index, Entity* ent);
void sub_0801D630(); void sub_0801D630();
void ShowTextbox(); void ShowTextbox();
void TextboxAtPosition(); void TextboxAtPosition();