summaryrefslogtreecommitdiff
path: root/src/code_08077DF4.c
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2020-07-14 22:09:07 -0700
committertheo3 <arisstephenson2@gmail.com>2020-07-14 22:09:07 -0700
commit882aef9fdcf3b9688285a7a574cb691193e15abe (patch)
treef051e0a2fc28acbc4800e88212155f94453727ac /src/code_08077DF4.c
parentfc0727243d21238f018d2ec317a590547521d18e (diff)
code_08077B98
Diffstat (limited to 'src/code_08077DF4.c')
-rw-r--r--src/code_08077DF4.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/code_08077DF4.c b/src/code_08077DF4.c
new file mode 100644
index 00000000..467cbe35
--- /dev/null
+++ b/src/code_08077DF4.c
@@ -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;
+ }
+ }
+}