Files
tmc/src/npc/carpenter.c
T
2021-03-15 22:56:23 +01:00

66 lines
2.1 KiB
C

#include "global.h"
#include "entity.h"
#include "sprite.h"
#include "player.h"
#include "npc.h"
#include "functions.h"
#include "script.h"
extern SpriteLoadData gUnk_08110CA8[];
void Carpenter(Entity* this) {
if (*(u32*)&this->cutsceneBeh == 0) {
DeleteThisEntity();
}
switch (this->action) {
case 0:
if (!LoadExtraSpriteData(this, gUnk_08110CA8 + this->type * 4))
break;
this->action = 1;
this->field_0x68.HALF.HI = 0;
sub_0805E3A0(this, 2);
sub_0807DD64(this);
case 1:
if (this->interactType == 2) {
this->action = 2;
this->interactType = 0;
this->field_0x68.HALF.HI = this->animIndex;
InitializeAnimation(this,
sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)) + 4 + (this->type * 8));
sub_0806F118(this);
} else {
ExecuteScriptForEntity(this, 0);
HandleEntity0x82Actions(this);
GetNextFrame(this);
}
break;
case 2:
if (!UpdateFuseInteraction(this))
break;
this->action = 1;
InitializeAnimation(this, this->field_0x68.HALF.HI);
break;
}
}
void Carpenter_Head(Entity* this) {
if (this->type < 2) {
SetExtraSpriteFrame(this, 0, this->frames.all & 0xffffff7f);
SetExtraSpriteFrame(this, 1, this->frameIndex);
SetExtraSpriteFrame(this, 2, this->frameSpriteSettings & 0x3f);
SetSpriteSubEntryOffsetData1(this, 1, 0);
SetSpriteSubEntryOffsetData2(this, 1, 2);
sub_0807000C(this);
} else {
SetExtraSpriteFrame(this, 0, this->frames.all & 0xffffff7f);
SetExtraSpriteFrame(this, 1, this->frameIndex);
SetSpriteSubEntryOffsetData1(this, 1, 0);
sub_0807000C(this);
}
}
void sub_080672B0(Entity* this, ScriptExecutionContext* context) {
InitializeAnimation(this, context->intVariable + (this->animationState >> 1) + this->type * 8);
}