mirror of
https://github.com/zeldaret/tmc
synced 2026-08-12 20:02:55 -04:00
item.c
This commit is contained in:
+101
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user