/** * @file gina.c * @ingroup NPCs * * @brief Gina NPC */ #include "entity.h" #include "npc.h" #include "player.h" #include "script.h" #include "physics.h" #if defined(USA) || defined(DEMO_USA) #include "flags.h" #endif typedef struct { /*0x00*/ Entity base; /*0x68*/ u8 fusionOffer; } GinaEntity; void Gina(GinaEntity* this) { switch (super->action) { case 0: super->action = 1; super->spriteSettings.draw = 1; this->fusionOffer = GetFusionToOffer(super); AddInteractableWhenBigFuser(super, this->fusionOffer); InitScriptForNPC(super); break; case 1: if (super->interactType == INTERACTION_FUSE) { super->action = 2; super->interactType = INTERACTION_NONE; InitAnimationForceUpdate( super, GetAnimationStateForDirection4(GetFacingDirection(super, &gPlayerEntity.base))); InitializeNPCFusion(super); } else { ExecuteScriptAndHandleAnimation(super, NULL); } break; case 2: if (UpdateFuseInteraction(super) != 0) { super->action = 1; #if defined(USA) || defined(DEMO_USA) SetLocalFlag(KS_B15); #endif } break; } } void Gina_Fusion(Entity* this) { if (this->action == 0) { this->action++; this->spriteSettings.draw = 1; InitAnimationForceUpdate(this, 2); } else { UpdateAnimationSingleFrame(this); } }