This commit is contained in:
theo3
2020-07-16 21:03:49 -07:00
parent 2527f9c188
commit 29fd48cc22
8 changed files with 136 additions and 252 deletions
+101
View File
@@ -38,3 +38,104 @@ void (*const gItemFunctions[])(ItemBehavior*, u32) = {
JarEmpty,
JarEmpty,
};
extern void sub_08077E78(ItemBehavior*, u32);
extern void PlaySFX(u32);
extern void sub_08078F60(void);
extern void sub_08077D38(ItemBehavior*, u32);
extern void sub_0805E544(void);
extern void UpdateItemAnim(ItemBehavior*);
extern void CreateBird(void);
extern void UnfreezeTime(void);
extern void sub_0806F948(Entity*);
extern void sub_08077BB8(ItemBehavior*);
extern void CreatePlayerBomb(ItemBehavior*, u32);
extern u32 sub_08077EFC();
extern void (*const gUnk_0811BDE0[])(ItemBehavior* beh, u32);
extern void (*const gUnk_0811BDE8[])(ItemBehavior* beh, u32);
extern void (*const gOcarinaStates[4])(ItemBehavior*, u32);
extern u8 gUnk_02034490;
#if 0
void Ocarina(ItemBehavior* beh, u32 inputFlags) {
gOcarinaStates[beh->stateID](beh, inputFlags);
gLinkEntity.field_0x7a++;
}
void OcarinaUse(ItemBehavior *beh, u32 arg1)
{
u32 bVar1;
if (gLinkState.linkAction == 0x18) {
LinkChangeState(beh, arg1);
}
else {
beh->field_0x5[4] = beh->field_0x5[4] | 0xf;
gLinkEntity.animationState = 4;
gLinkEntity.spriteSettings.b.flipX = 0;
gLinkEntity.flags &= 0x7f;
gLinkEntity.field_0x7a = 2;
gLinkState.flags.all |= 0x10000000;
gLinkState.field_0x27[0] = 0xff;
gUnk_02034490 = 1;
bVar1 = (8 >> arg1);
gLinkState.field_0xa |= bVar1;
gLinkState.keepFacing |= bVar1;
sub_08078F60();
sub_08077D38(beh, arg1);
PlaySFX(0x216);
sub_0805E544();
}
}
#endif
void PacciCane(ItemBehavior* beh, u32 arg1) {
gUnk_0811BDE0[beh->stateID](beh, arg1);
}
void sub_08076C98(ItemBehavior* beh, u32 arg1) {
beh->field_0x5[4] |= 0xf;
sub_08077D38(beh, arg1);
sub_0806F948(&gLinkEntity);
sub_08077BB8(beh);
}
void sub_08076CBC(ItemBehavior* beh, u32 arg1) {
if ((beh->field_0x5[9] & 0x80) != 0) {
sub_08077E78(beh, arg1);
} else {
if ((beh->field_0x5[9] & 0x40) != 0) {
CreatePlayerBomb(beh, 0x12);
}
UpdateItemAnim(beh);
}
}
void Shield(ItemBehavior* beh, u32 arg1) {
gUnk_0811BDE8[beh->stateID](beh, arg1);
}
void sub_08076D04(ItemBehavior* beh, u32 arg1) {
gLinkState.field_0x3[0] = 0x81;
beh->field_0x5[4] = 2;
sub_0806F948(&gLinkEntity);
sub_08077D38(beh, arg1);
sub_08077BB8(beh);
}
void sub_08076D34(ItemBehavior* beh, u32 arg1) {
if (sub_08077EFC() != 0) {
gLinkState.field_0x3[0] |= 1;
UpdateItemAnim(beh);
if (beh->field_0x5[9] != 0) {
beh->stateID++;
beh->field_0xf = 0;
gLinkState.field_0xa &= ~(u8)(8 >> arg1);
PlaySFX(0x15d);
}
} else {
gLinkState.field_0x3[0] = 0;
sub_08077E78(beh, arg1);
}
}
+3 -3
View File
@@ -183,7 +183,7 @@ void sub_080691E0(Entity* ent) {
}
// Show dialogue
void sub_080691F8(Entity* ent) {
void Cow_ShowDialogue(Entity* ent) {
u32 var0 = ent->entityType.form;
u32* var1 = gUnk_08111938 + (var0 * 2);
ShowNPCDialogue(ent, var1);
@@ -215,10 +215,10 @@ void sub_0806924C(Entity* ent) {
ent->action = 4;
sub_0806F118(ent);
} else {
sub_080691F8(ent);
Cow_ShowDialogue(ent);
}
} else {
sub_080691F8(ent);
Cow_ShowDialogue(ent);
sub_080791D0();
}
PlaySFX(212);
+30 -41
View File
@@ -4,6 +4,19 @@
#include "screen.h"
#include "greatFairy.h"
enum {
BEHAVIORS,
WINGS,
WAKE,
MINI,
MINIAFFINE,
DROPLET,
RIPPLE,
BIGRIPPLE,
FORM8,
FORM9,
};
// Main
void GreatFairy(Entity* this) {
u8 bVar1;
@@ -36,7 +49,6 @@ void GreatFairy_Init(Entity* this) {
this->cutsceneBeh.HWORD = 290;
}
// TODO: turn this into a switch statement
void GreatFairy_DormantUpdate(Entity* this) {
u16* pFrame; // r1@2
s32 frame; // r1@4
@@ -48,47 +60,24 @@ void GreatFairy_DormantUpdate(Entity* this) {
if (*pFrame != 0) {
--*pFrame;
}
frame = *pFrame;
if (frame == 0x96) {
goto LABEL_16;
}
if (frame < 0x97) {
if (frame != 0) {
if (frame == 0x82) {
goto LABEL_16;
} else {
return;
}
}
goto LABEL_17;
} else {
if (frame == 0xd2) {
goto LABEL_16;
}
if (frame < 0xd3) {
if (frame == 0xaa) {
goto LABEL_16;
} else
return;
}
if (frame == 289) {
goto LABEL_16;
} else {
return;
}
}
LABEL_17:
this->action = 2;
return;
LABEL_16:
ripple = GreatFairy_CreateForm(this, RIPPLE, 0);
if (ripple) {
PositionRelative(this, ripple, (s32)GreatFairy_RippleOffsets[this->actionDelay] << 16,
switch (*pFrame) {
case 0x96:
case 0x82:
goto e;
case 0x0:
this->action = 2;
break;
e:
case 0xd2:
case 0xaa:
case 0x121:
ripple = GreatFairy_CreateForm(this, RIPPLE, 0);
if (ripple) {
PositionRelative(this, ripple, (s32)GreatFairy_RippleOffsets[this->actionDelay] << 16,
(s32)GreatFairy_RippleOffsets[this->actionDelay + 1] << 16);
this->actionDelay += 2;
this->actionDelay += 2;
break;
}
}
}
-55
View File
@@ -1,55 +0,0 @@
#include "global.h"
#include "item.h"
#include "entity.h"
#include "link.h"
extern void _call_via_r2();
extern void sub_08077E78(ItemBehavior*, u32);
extern void PlaySFX(u32);
extern void sub_08078F60(void);
extern void sub_08077D38(ItemBehavior*, u32);
extern void sub_0805E544(void);
extern void UpdateItemAnim(ItemBehavior*);
extern void CreateBird(void);
extern void UnfreezeTime(void);
extern Entity gLinkEntity;
extern LinkState gLinkState;
extern void (*gOcarinaStates[4])(ItemBehavior*, u32);
extern u8 gUnk_02034490;
void Ocarina(ItemBehavior* pItemBeh, u32 inputFlags)
{
// u32 *ocarinaStates = &gOcarinaStates;
//_call_via_r2(pItemBeh, inputFlags,(ocarinaStates)[pItemBeh->stateID]);
gOcarinaStates[pItemBeh->stateID](pItemBeh, inputFlags);
gLinkEntity.field_0x7a = gLinkEntity.field_0x7a + 1;
}
void OcarinaUse(ItemBehavior* itemBeh, s32 inputFlags) {
u32 bVar1;
u32 var;
if (gLinkState.linkAction == 24) {
sub_08077E78(itemBeh, inputFlags);
} else {
itemBeh->field_0x5[4] |= 15;
gLinkEntity.animationState = 4;
var = gLinkEntity.spriteSettings.raw & ~0x40;
gLinkEntity.spriteSettings.raw &= var;
gLinkEntity.flags &= 127;
gLinkEntity.field_0x7a = 2;
gLinkState.flags.all |= 0x10000000;
gLinkState.field_0x27[0] = 255;
gUnk_02034490 = 1;
bVar1 = (8 >> inputFlags);
gLinkState.field_0xa |= bVar1;
gLinkState.keepFacing |= bVar1;
sub_08078F60();
sub_08077D38(itemBeh, inputFlags);
PlaySFX(534);
sub_0805E544();
}
}