mirror of https://github.com/zeldaret/tmc.git
138 lines
3.4 KiB
C
138 lines
3.4 KiB
C
#include "global.h"
|
|
#include "entity.h"
|
|
#include "functions.h"
|
|
#include "message.h"
|
|
#include "effects.h"
|
|
#include "npc.h"
|
|
|
|
extern void (*gUnk_08111A80[])(Entity*);
|
|
extern void (*gUnk_08111A8C[])(Entity*);
|
|
extern Dialog gUnk_08111A94[];
|
|
|
|
void Goron(Entity* this) {
|
|
if (this->flags & 2) {
|
|
gUnk_08111A8C[this->action](this);
|
|
} else {
|
|
gUnk_08111A80[this->action](this);
|
|
sub_0806ED78(this);
|
|
}
|
|
}
|
|
|
|
void sub_08069310(Entity* this) {
|
|
sub_08078778(this);
|
|
this->action = 1;
|
|
InitAnimationForceUpdate(this, 2);
|
|
}
|
|
|
|
void sub_08069328(Entity* this) {
|
|
if (((u32)(++this->field_0xf << 24) >> 24) > 16) {
|
|
int action;
|
|
|
|
this->field_0xf = 0;
|
|
action = sub_0806ED9C(this, 40, 40);
|
|
if (action >= 0) {
|
|
this->animationState = action;
|
|
}
|
|
}
|
|
if (this->animIndex != this->animationState) {
|
|
InitAnimationForceUpdate(this, this->animationState);
|
|
}
|
|
if (this->interactType != 0) {
|
|
this->action = 2;
|
|
RequestPriority(this);
|
|
InitAnimationForceUpdate(this, 8);
|
|
MessageFromTarget(this->actionDelay + (0x90 << 5));
|
|
}
|
|
}
|
|
|
|
void sub_08069390(Entity* this) {
|
|
UpdateAnimationSingleFrame(this);
|
|
if ((gMessage.doTextBox & 0x7F) == 0) {
|
|
this->action = 1;
|
|
this->interactType = 0;
|
|
RevokePriority(this);
|
|
InitAnimationForceUpdate(this, this->animationState);
|
|
}
|
|
}
|
|
|
|
void sub_080693C4(Entity* this) {
|
|
this->action = 1;
|
|
sub_0807DD50(this);
|
|
}
|
|
|
|
void sub_08069428(Entity* this, s32 offsetX, bool32 createFx65);
|
|
|
|
void sub_080693D0(Entity* this) {
|
|
sub_0807DD94(this, NULL);
|
|
if (this->animIndex == 8) {
|
|
u32 var0 = this->field_0x82.HWORD & 0xF;
|
|
bool32 createFx65 = BOOLCAST(var0); // = !var0
|
|
|
|
if (this->frame == 1) {
|
|
this->frame = 0;
|
|
sub_08069428(this, 0xFFF80000, createFx65);
|
|
}
|
|
if (this->frame == 2) {
|
|
this->frame = 0;
|
|
sub_08069428(this, 0x80 << 12, createFx65);
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_08069428(Entity* this, s32 offsetX, bool32 createFx65) {
|
|
Entity* fx = CreateFx(this, FX_ROCK, 0);
|
|
if (fx) {
|
|
PositionRelative(this, fx, offsetX, 0xFFF00000);
|
|
ResolveEntityOnTop(this, fx);
|
|
}
|
|
if (createFx65 != 0) {
|
|
fx = CreateFx(this, FX_REFLECT4, 0);
|
|
if (fx) {
|
|
PositionRelative(this, fx, offsetX, 0xFFF00000);
|
|
ResolveEntityOnTop(this, fx);
|
|
}
|
|
}
|
|
}
|
|
|
|
u32 sub_08069480(Entity* this) {
|
|
return (sub_0801E99C(this) << 24) >> 24;
|
|
}
|
|
|
|
void sub_0806948C(Entity* this, ScriptExecutionContext* context) {
|
|
context->condition = CheckKinstoneFused((sub_08069480(this) << 24) >> 24);
|
|
gActiveScriptInfo.flags |= 1;
|
|
}
|
|
|
|
void sub_080694B0(Entity* this) {
|
|
u32 kinstone = (sub_08069480(this) << 24) >> 24;
|
|
if (CheckKinstoneFused(kinstone)) {
|
|
sub_08078778(this);
|
|
} else {
|
|
sub_08078784(this, kinstone);
|
|
}
|
|
}
|
|
|
|
void sub_080694D8(Entity* this) {
|
|
ShowNPCDialogue(this, &gUnk_08111A94[this->type]);
|
|
}
|
|
|
|
void sub_080694EC(Entity* this) {
|
|
u32 anim;
|
|
this->animationState = 4;
|
|
anim = 2;
|
|
if (!CheckKinstoneFused(47))
|
|
anim = 8;
|
|
InitAnimationForceUpdate(this, anim);
|
|
this->field_0x80.HWORD = anim;
|
|
}
|
|
|
|
void Goron_Fusion(Entity* this) {
|
|
if (this->action == 0) {
|
|
this->action++;
|
|
this->spriteSettings.draw = 1;
|
|
InitAnimationForceUpdate(this, 2);
|
|
} else {
|
|
UpdateAnimationSingleFrame(this);
|
|
}
|
|
}
|