code_08077B98

This commit is contained in:
theo3
2020-07-14 22:09:07 -07:00
parent fc0727243d
commit 882aef9fdc
19 changed files with 6828 additions and 7065 deletions
+140
View File
@@ -0,0 +1,140 @@
#include "global.h"
#include "entity.h"
#include "link.h"
#include "functions.h"
typedef struct {
u8 unk[12];
} struct_0811BE48;
typedef struct {
u8 field_0x0;
u8 field_0x1;
} UnkItemStruct;
Entity* sub_08077C94(ItemBehavior*, u32);
void* sub_08077C54(UnkItemStruct* unk);
Entity* CreatePlayerBomb(ItemBehavior*, u32);
extern Entity* sub_0805E744();
extern void sub_0805EA2C(Entity*, u32);
extern struct_0811BE48 gUnk_0811BE48[];
void sub_08077B98(UnkItemStruct* unk)
{
if ((gLinkState.field_0x2c == NULL) || (gLinkState.field_0x2c[9] != 1)) {
gLinkState.field_0x2c = sub_08077C54(unk);
}
}
void sub_08077BB8(UnkItemStruct* unk)
{
u8* temp = sub_08077C54(unk);
if (temp != NULL) {
temp[0x10] = 0x20;
}
gLinkState.field_0x2c = temp;
}
Entity* sub_08077BD4(ItemBehavior *beh)
{
if (sub_08077C94(beh, gUnk_0811BE48[beh->behaviorID].unk[3]) != 0) {
return NULL;
}
else {
return CreatePlayerBomb(beh, gUnk_0811BE48[beh->behaviorID].unk[3]);
}
}
Entity * sub_08077C0C(ItemBehavior *beh, u32 arg1)
{
u8 bVar1;
Entity *pEVar3;
bVar1 = gUnk_0811BE48[arg1].unk[3];
if (sub_08077C94(beh, bVar1) != 0) {
return NULL;
}
else {
return CreatePlayerBomb(beh, bVar1);
}
}
Entity * CreatePlayerBomb(ItemBehavior *beh, u32 subtype)
{
Entity *pEVar1;
pEVar1 = CreatePlayerItem(subtype, 0, 0, beh->behaviorID);
if (pEVar1 != NULL) {
*(ItemBehavior **)&pEVar1->parent = beh;
}
return pEVar1;
}
void* sub_08077C54(UnkItemStruct* unk)
{
Entity *item;
item = sub_0805E744();
if (item != NULL) {
item->entityType.subtype = gUnk_0811BE48[unk->field_0x1].unk[3];
item->entityType.type = 8;
item->flags = 0xa0;
item->parent = (Entity*)unk;
item->field_0x68 = unk->field_0x1;
sub_0805EA2C(item, 2);
}
return item;
}
Entity* sub_08077C94(ItemBehavior* arg0, u32 arg1)
{
Entity* iVar1;
iVar1 = sub_0805EB00(8, gUnk_0811BE48[arg1].unk[3], 2);
if (iVar1 == NULL) {
return NULL;
}
return iVar1;
}
Entity * CreatePlayerItem(u32 subtype, u32 form, u32 parameter, u32 unk)
{
Entity *ent;
ent = GetEmptyEntity();
if (ent != NULL) {
ent->flags = 0x80;
(ent->entityType).type = 8;
(ent->entityType).subtype = subtype;
(ent->entityType).form = form;
(ent->entityType).parameter = parameter;
ent->field_0x68 = unk;
sub_0805EA2C(ent, 2);
}
return ent;
}
Entity * sub_08077CF8(u32 subtype, u32 form, u32 parameter, u32 unk)
{
Entity *ent;
ent = sub_0805E744();
if (ent != NULL) {
ent->flags = 0x80;
(ent->entityType).type = 8;
(ent->entityType).subtype = subtype;
(ent->entityType).form = form;
(ent->entityType).parameter = parameter;
ent->field_0x68 = unk;
sub_0805EA2C(ent, 2);
}
return ent;
}
NAKED
void sub_08077D38(ItemBehavior *beh, u32 arg1) {
asm(".include \"asm/non_matching/sub_08077D38.inc\"");
}
+133
View File
@@ -0,0 +1,133 @@
#include "global.h"
#include "entity.h"
#include "link.h"
#include "functions.h"
typedef struct {
u8 b0: 4;
u8 b1: 4;
} PACKED Unk_bitfield;
typedef struct {
u8 unk[16];
} Unk_struct;
void sub_08077DF4(Entity *ent, u32 arg1)
{
*(u16 *)&ent->flags = arg1;
if ((arg1 & 0xff) > 0xb8) {
arg1 += (ent->entityType).form >> 1;
}
gLinkEntity.spriteTileSize = (short)(arg1 >> 8);
InitAnimationForceUpdate(&gLinkEntity, (u8)arg1);
sub_08077E54(ent);
}
void UpdateItemAnim(Entity *ent)
{
UpdateAnimationSingleFrame(&gLinkEntity);
sub_08077E54(ent);
}
void sub_08077E3C(Entity *ent)
{
sub_080042BA(&gLinkEntity);
sub_08077E54(ent);
}
void sub_08077E54(Entity *ent)
{
ent->action = gLinkEntity.animIndex;
*(u8 *)&ent->spriteTileSize = gLinkEntity.frameIndex;
ent->previousActionFlag = gLinkEntity.frameDuration;
ent->actionDelay = gLinkEntity.frames.all;
}
void sub_08077E78(void* arg0, u32 bits)
{
u8 *pbVar1;
u32 not;
if (bits == 0) {
if (gLinkState.field_0x2c != NULL) {
((Unk_bitfield *)gLinkState.field_0x2c)[0x11].b0 = 6;
gLinkState.field_0x2c = (u8 *)bits;
}
else {
gLinkState.field_0x2c = (u8 *)bits;
}
}
not = (8 >> bits);
gLinkState.field_0x3[1] &= ~((u8)((8 >> bits) << 4) | not);
not = ~not;
gLinkState.field_0xa &= not;
gLinkState.keepFacing &= not;
sub_0801D630(arg0, 0x1c);
}
u32 sub_08077EC8(Unk_struct* arg0)
{
if ((gLinkState.field_0x1a[1] & 8) != 0) {
sub_08077DF4((Entity *)arg0,0x170);
arg0->unk[7] = 0x28;
arg0->unk[4] = 7;
arg0->unk[15] = 6;
return 1;
}
else {
return 0;
}
}
void sub_08077EFC(ItemBehavior* arg0)
{
sub_08077F24(arg0, (u16)gLinkState.field_0x90.HALF.LO);
}
void sub_08077F10(ItemBehavior* arg0)
{
sub_08077F24(arg0, (u16)gLinkState.field_0x90.HALF.HI);
}
NAKED
void sub_08077F24(ItemBehavior* beh, u32 arg1) {
asm(".include \"asm/non_matching/sub_08077F24.inc\"");
}
void sub_08077F50(ItemBehavior *beh, u32 arg1)
{
sub_08079184();
sub_08077E78(beh, arg1);
}
u32 sub_08077F64(ItemBehavior* arg0, u32 unk)
{
u32 temp;
if (gLinkState.heldObject == 0) {
sub_08077F50(arg0, unk);
temp = 0;
}
else {
temp = 1;
}
return temp;
}
void sub_08077F84(void)
{
Entity *obj;
if (((gLinkEntity.collisionLayer & 2) == 0) &&
GetTileTypeByPos(gLinkEntity.x.HALF.HI, gLinkEntity.y.HALF.HI - 0xc, 2) - 0x343U < 4) {
sub_0807AA80(&gLinkEntity);
gLinkState.jumpStatus |= 8;
obj = CreateObject(0x44, 0, 0);
if (obj != NULL) {
obj->x = gLinkEntity.x;
obj->y.HALF.HI = gLinkEntity.y.HALF.HI - 0xc;
gLinkEntity.y.HALF.HI -= 0xc;
}
}
}
+88
View File
@@ -0,0 +1,88 @@
#include "global.h"
#include "entity.h"
#include "functions.h"
typedef struct {
u8 unk[4];
u32 unk2;
u32 unk4;
} Unk_struct;
extern Unk_struct gUnk_03003DF0[];
void sub_08078778(Entity* ent) {
sub_0807887C(ent, 1, 0);
}
void sub_08078784(Entity* ent, u32 arg1) {
sub_0807887C(ent, 1, arg1);
}
void sub_08078790(Entity* ent, u32 arg1) {
sub_0807887C(ent, 2, arg1);
}
void sub_0807879C(Entity* ent) {
sub_0807887C(ent, 7, 0);
}
void sub_080787A8(Entity* ent, u32 arg1) {
sub_0807887C(ent, 7, arg1);
}
void sub_080787B4(Entity* ent) {
sub_0807887C(ent, 9, 0);
}
void sub_080787C0(Entity* ent) {
sub_0807887C(ent, 10, 0);
}
void sub_080787CC(Entity* ent) {
sub_0807887C(ent, 5, 0);
}
s32 sub_080787D8(Entity *ent)
{
s32 iVar1;
iVar1 = sub_0807887C(ent, 8, 0);
if (iVar1 >= 0) {
gUnk_03003DF0[iVar1].unk[10] = 0xbe;
}
return iVar1;
}
s32 sub_08078800(Entity *ent)
{
s32 iVar1;
iVar1 = sub_0807887C(ent, 6, 0);
if (iVar1 >= 0) {
gUnk_03003DF0[iVar1].unk[10] = 0xbe;
}
return iVar1;
}
s32 sub_08078828(Entity *ent)
{
s32 iVar1;
iVar1 = sub_0807887C(ent, 3, 0);
if (iVar1 >= 0) {
gUnk_03003DF0[iVar1].unk[10] = 0xbe;
}
return iVar1;
}
void sub_08078850(u32 arg0, u32 arg1, u32 arg2, u32 arg3)
{
s32 iVar1;
iVar1 = sub_08078904();
if (iVar1 >= 0) {
gUnk_03003DF0[iVar1].unk[8] = arg1;
gUnk_03003DF0[iVar1].unk[10] = arg2;
*(&gUnk_03003DF0[iVar1].unk4 + 1) = arg3;
}
}
+1 -1
View File
@@ -34,7 +34,7 @@ void OcarinaUse(ItemBehavior* itemBeh, s32 inputFlags) {
if (gLinkState.linkAction == 24) {
sub_08077E78(itemBeh, inputFlags);
} else {
itemBeh->unk4 |= 15;
itemBeh->field_0x5[4] |= 15;
gLinkEntity.animationState = 4;
var = gLinkEntity.spriteSettings.raw & ~0x40;
gLinkEntity.spriteSettings.raw &= var;