mirror of https://github.com/zeldaret/tmc.git
item.c
This commit is contained in:
parent
2527f9c188
commit
29fd48cc22
|
@ -6,145 +6,6 @@
|
|||
|
||||
.text
|
||||
|
||||
thumb_func_start PacciCane
|
||||
PacciCane: @ 0x08076C80
|
||||
push {lr}
|
||||
ldr r3, _08076C94 @ =gUnk_0811BDE0
|
||||
ldrb r2, [r0, #4]
|
||||
lsls r2, r2, #2
|
||||
adds r2, r2, r3
|
||||
ldr r2, [r2]
|
||||
bl _call_via_r2
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08076C94: .4byte gUnk_0811BDE0
|
||||
|
||||
thumb_func_start sub_08076C98
|
||||
sub_08076C98: @ 0x08076C98
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r2, [r4, #9]
|
||||
movs r0, #0xf
|
||||
orrs r0, r2
|
||||
strb r0, [r4, #9]
|
||||
adds r0, r4, #0
|
||||
bl sub_08077D38
|
||||
ldr r0, _08076CB8 @ =gLinkEntity
|
||||
bl sub_0806F948
|
||||
adds r0, r4, #0
|
||||
bl sub_08077BB8
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_08076CB8: .4byte gLinkEntity
|
||||
|
||||
thumb_func_start sub_08076CBC
|
||||
sub_08076CBC: @ 0x08076CBC
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r2, [r4, #0xe]
|
||||
movs r0, #0x80
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
beq _08076CD2
|
||||
adds r0, r4, #0
|
||||
bl sub_08077E78
|
||||
b _08076CE8
|
||||
_08076CD2:
|
||||
movs r0, #0x40
|
||||
ands r0, r2
|
||||
cmp r0, #0
|
||||
beq _08076CE2
|
||||
adds r0, r4, #0
|
||||
movs r1, #0x12
|
||||
bl CreatePlayerBomb
|
||||
_08076CE2:
|
||||
adds r0, r4, #0
|
||||
bl UpdateItemAnim
|
||||
_08076CE8:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start Shield
|
||||
Shield: @ 0x08076CEC
|
||||
push {lr}
|
||||
ldr r3, _08076D00 @ =gUnk_0811BDE8
|
||||
ldrb r2, [r0, #4]
|
||||
lsls r2, r2, #2
|
||||
adds r2, r2, r3
|
||||
ldr r2, [r2]
|
||||
bl _call_via_r2
|
||||
pop {pc}
|
||||
.align 2, 0
|
||||
_08076D00: .4byte gUnk_0811BDE8
|
||||
|
||||
thumb_func_start sub_08076D04
|
||||
sub_08076D04: @ 0x08076D04
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
adds r5, r1, #0
|
||||
ldr r1, _08076D2C @ =gLinkState
|
||||
movs r0, #0x81
|
||||
strb r0, [r1, #3]
|
||||
movs r0, #2
|
||||
strb r0, [r4, #9]
|
||||
ldr r0, _08076D30 @ =gLinkEntity
|
||||
bl sub_0806F948
|
||||
adds r0, r4, #0
|
||||
adds r1, r5, #0
|
||||
bl sub_08077D38
|
||||
adds r0, r4, #0
|
||||
bl sub_08077BB8
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
_08076D2C: .4byte gLinkState
|
||||
_08076D30: .4byte gLinkEntity
|
||||
|
||||
thumb_func_start sub_08076D34
|
||||
sub_08076D34: @ 0x08076D34
|
||||
push {r4, r5, r6, lr}
|
||||
adds r4, r0, #0
|
||||
adds r6, r1, #0
|
||||
bl sub_08077EFC
|
||||
adds r1, r0, #0
|
||||
cmp r1, #0
|
||||
beq _08076D80
|
||||
ldr r5, _08076D78 @ =gLinkState
|
||||
ldrb r0, [r5, #3]
|
||||
movs r1, #1
|
||||
orrs r1, r0
|
||||
strb r1, [r5, #3]
|
||||
adds r0, r4, #0
|
||||
bl UpdateItemAnim
|
||||
ldrb r0, [r4, #0xe]
|
||||
cmp r0, #0
|
||||
beq _08076D8C
|
||||
ldrb r0, [r4, #4]
|
||||
adds r0, #1
|
||||
strb r0, [r4, #4]
|
||||
movs r0, #0
|
||||
strb r0, [r4, #0xf]
|
||||
movs r1, #8
|
||||
asrs r1, r6
|
||||
ldrb r0, [r5, #0xa]
|
||||
bics r0, r1
|
||||
strb r0, [r5, #0xa]
|
||||
ldr r0, _08076D7C @ =0x0000015D
|
||||
bl PlaySFX
|
||||
b _08076D8C
|
||||
.align 2, 0
|
||||
_08076D78: .4byte gLinkState
|
||||
_08076D7C: .4byte 0x0000015D
|
||||
_08076D80:
|
||||
ldr r0, _08076D90 @ =gLinkState
|
||||
strb r1, [r0, #3]
|
||||
adds r0, r4, #0
|
||||
adds r1, r6, #0
|
||||
bl sub_08077E78
|
||||
_08076D8C:
|
||||
pop {r4, r5, r6, pc}
|
||||
.align 2, 0
|
||||
_08076D90: .4byte gLinkState
|
||||
|
||||
thumb_func_start sub_08076D94
|
||||
sub_08076D94: @ 0x08076D94
|
||||
push {r4, r5, lr}
|
||||
|
|
|
@ -19,20 +19,6 @@ extern void sub_080045D4();
|
|||
extern void sub_0806F69C();
|
||||
extern u32 Random();
|
||||
|
||||
|
||||
enum {
|
||||
BEHAVIORS,
|
||||
WINGS,
|
||||
WAKE,
|
||||
MINI,
|
||||
MINIAFFINE,
|
||||
DROPLET,
|
||||
RIPPLE,
|
||||
BIGRIPPLE,
|
||||
FORM8,
|
||||
FORM9,
|
||||
};
|
||||
|
||||
extern void (*const GreatFairy_Main[])(Entity*);
|
||||
extern void (*const GreatFairy_Behaviors[])(Entity*);
|
||||
extern void (*const GreatFairy_WingsBehaviors[])(Entity*);
|
||||
|
|
|
@ -82,6 +82,7 @@ typedef struct {
|
|||
/*0x2*/ u8 field_0x2[2];
|
||||
/*0x4*/ u8 stateID;
|
||||
/*0x5*/ u8 field_0x5[10];
|
||||
/*0xf*/ u8 field_0xf;
|
||||
} ItemBehavior;
|
||||
|
||||
extern u8 gBombBagSizes[];
|
||||
|
|
|
@ -641,6 +641,7 @@ SECTIONS {
|
|||
asm/stairsInteract.o(.text);
|
||||
asm/code_080732D0.o(.text);
|
||||
asm/ocarina.o(.text);
|
||||
src/item.o(.text);
|
||||
asm/code_08076C80.o(.text);
|
||||
asm/respawnLink.o(.text);
|
||||
src/code_08077B98.o(.text);
|
||||
|
|
101
src/item.c
101
src/item.c
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue