tmc/src/code_08077DF4.c

120 lines
2.8 KiB
C

#include "global.h"
#include "entity.h"
#include "player.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;
}
gPlayerEntity.spriteIndex = (short)(arg1 >> 8);
InitAnimationForceUpdate(&gPlayerEntity, (u8)arg1);
sub_08077E54(ent);
}
void UpdateItemAnim(Entity* ent) {
UpdateAnimationSingleFrame(&gPlayerEntity);
sub_08077E54(ent);
}
void sub_08077E3C(Entity* ent, u32 idx) {
sub_080042BA(&gPlayerEntity, idx);
sub_08077E54(ent);
}
void sub_08077E54(Entity* ent) {
ent->action = gPlayerEntity.animIndex;
*(u8*)&ent->spriteIndex = gPlayerEntity.frameIndex;
ent->previousActionFlag = gPlayerEntity.frameDuration;
ent->actionDelay = gPlayerEntity.frames.all;
}
void sub_08077E78(void* arg0, u32 bits) {
u8* pbVar1;
u32 not ;
if (bits == 0) {
if (gPlayerState.field_0x2c != NULL) {
((Unk_bitfield*)gPlayerState.field_0x2c)[0x11].b0 = 6;
gPlayerState.field_0x2c = (u8*)bits;
} else {
gPlayerState.field_0x2c = (u8*)bits;
}
}
not = (8 >> bits);
gPlayerState.field_0x3[1] &= ~((u8)((8 >> bits) << 4) | not );
not = ~not ;
gPlayerState.field_0xa &= not ;
gPlayerState.keepFacing &= not ;
_DmaZero(arg0, 0x1c);
}
u32 sub_08077EC8(Unk_struct* arg0) {
if ((gPlayerState.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)gPlayerState.field_0x90.HALF.LO);
}
void sub_08077F10(ItemBehavior* arg0) {
sub_08077F24(arg0, (u16)gPlayerState.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 (gPlayerState.heldObject == 0) {
sub_08077F50(arg0, unk);
temp = 0;
} else {
temp = 1;
}
return temp;
}
void sub_08077F84(void) {
Entity* obj;
if (((gPlayerEntity.collisionLayer & 2) == 0) &&
GetTileTypeByPos(gPlayerEntity.x.HALF.HI, gPlayerEntity.y.HALF.HI - 0xc, 2) - 0x343U < 4) {
sub_0807AA80(&gPlayerEntity);
gPlayerState.jumpStatus |= 8;
obj = CreateObject(0x44, 0, 0);
if (obj != NULL) {
obj->x = gPlayerEntity.x;
obj->y.HALF.HI = gPlayerEntity.y.HALF.HI - 0xc;
gPlayerEntity.y.HALF.HI -= 0xc;
}
}
}