tmc/src/npc/goronMerchant.c

143 lines
2.6 KiB
C

#include "global.h"
#include "entity.h"
#include "functions.h"
#include "structures.h"
#include "textbox.h"
#include "room.h"
#include "flags.h"
extern u32 sub_080696BC(Entity*);
extern void (*const gUnk_08111B88[])(Entity*);
extern void (*const gUnk_08111B98[])(Entity*);
extern u16 gUnk_08111BA0[];
void GoronMerchant(Entity *this)
{
if ((this->flags & 2) != 0) {
gUnk_08111B98[this->action](this);
}
else {
gUnk_08111B88[this->action](this);
sub_0806ED78(this);
}
}
void sub_08069584(Entity *this)
{
if (gScreenTransition.field_0x24[8] != 0) {
this->action = 3;
}
else {
this->action = 1;
}
InitAnimationForceUpdate(this, 2);
}
void sub_080695AC(Entity *this)
{
s32 iVar2;
if (++this->field_0xf > 0x10) {
this->field_0xf = 0;
iVar2 = sub_0806ED9C(this, 0x28, 0x28);
if (iVar2 > -1) {
this->animationState = iVar2;
}
}
if (this->animIndex != this->animationState) {
InitAnimationForceUpdate(this, this->animationState);
}
}
void sub_080695E8(Entity *this)
{
UpdateAnimationSingleFrame(this);
if ((gTextBox.doTextBox & 0x7f) == 0) {
this->action = 1;
this->interactType = gTextBox.doTextBox & 0x7f;
sub_0805E584(this);
InitAnimationForceUpdate(this, this->animationState);
}
}
void sub_0806961C(Entity *this)
{
if (gScreenTransition.field_0x24[8] == 2) {
UpdateAnimationSingleFrame(this);
}
sub_0806FD3C(this);
}
void sub_0806963C(Entity *this)
{
this->action = 1;
this->spriteSettings.b.draw = TRUE;
sub_0807DD50(this);
}
void sub_08069654(Entity* this) {
sub_0807DD94(this, 0);
}
void sub_08069660(Entity *this)
{
u32 uVar1;
TextboxNoOverlap(0x2c1c, this);
gTextBox.field_0x10 = (u16)sub_080696BC(this);
}
void sub_08069684(void)
{
Entity *mgr;
if (FindEntityInListBySubtype(9, 0x31, 8) == NULL) {
mgr = GetEmptyManager();
if (mgr != NULL) {
mgr->entityType.type = 9;
mgr->entityType.subtype = 0x31;
AppendEntityToList(mgr, 8);
}
}
}
void sub_080696B0(void)
{
gRoomVars.itemForSaleIndex = 0;
}
u32 sub_080696BC(Entity* this)
{
u32 uVar1;
u32 temp;
u32 iVar3;
s32 temp2;
temp2 = gRoomVars.field_0x7;
if (temp2 > 0x70) {
iVar3 = 1;
}
else {
iVar3 = 0;
}
if (temp2 > 0x72) {
iVar3 = 2;
}
temp = CheckGlobalFlag(0x3e);
uVar1 = (-temp | temp) >> 0x1f;
if (CheckGlobalFlag(0x3f)) {
uVar1 = 2;
}
if (CheckGlobalFlag(0x40)) {
uVar1 = 3;
}
if (CheckGlobalFlag(0x41)) {
uVar1 = 4;
}
return gUnk_08111BA0[uVar1 * 3 + iVar3];
}