#ifndef GUARD_FOLLOWER_NPC_H #define GUARD_FOLLOWER_NPC_H #include "constants/follower_npc.h" // #define MOVEMENT_INVALID 0xFE // struct FollowerNPCSpriteGraphics // { // u16 normalId; // u16 machBikeId; // u16 acroBikeId; // u16 surfId; // u16 underwaterId; // }; // enum FollowerNPCDataTypes // { // FNPC_DATA_IN_PROGRESS, // FNPC_DATA_WARP_END, // FNPC_DATA_SURF_BLOB, // FNPC_DATA_COME_OUT_DOOR, // FNPC_DATA_OBJ_ID, // FNPC_DATA_CURRENT_SPRITE, // FNPC_DATA_DELAYED_STATE, // FNPC_DATA_MAP_ID, // FNPC_DATA_MAP_NUM, // FNPC_DATA_MAP_GROUP, // FNPC_DATA_EVENT_FLAG, // FNPC_DATA_GFX_ID, // FNPC_DATA_FOLLOWER_FLAGS, // FNPC_DATA_BATTLE_PARTNER // }; // enum FollowerNPCSpriteTypes // { // FOLLOWER_NPC_SPRITE_INDEX_NORMAL, // FOLLOWER_NPC_SPRITE_INDEX_MACH_BIKE, // FOLLOWER_NPC_SPRITE_INDEX_ACRO_BIKE, // FOLLOWER_NPC_SPRITE_INDEX_SURF, // FOLLOWER_NPC_SPRITE_INDEX_UNDERWATER, // }; // enum FollowerNPCDoorStairsStates // { // FNPC_DOOR_NONE, // FNPC_DOOR_NEEDS_TO_EXIT // }; // enum FollowerNPCWarpEndStates // { // FNPC_WARP_NONE, // FNPC_WARP_REAPPEAR // }; // enum FollowerNPCSurfBlobStates // { // FNPC_SURF_BLOB_NONE, // FNPC_SURF_BLOB_NEW, // FNPC_SURF_BLOB_RECREATE, // FNPC_SURF_BLOB_DESTROY // }; // enum FollowerNPCOutOfDoorTaskStates{ // OPEN_DOOR, // NPC_WALK_OUT, // CLOSE_DOOR, // UNFREEZE_OBJECTS, // REALLOW_MOVEMENT // }; // enum FollowerNPCHandleEscalatorFinishTaskStates{ // MOVE_TO_PLAYER_POS, // WAIT_FOR_PLAYER_MOVE, // SHOW_FOLLOWER_DOWN, // MOVE_FOLLOWER_DOWN, // SHOW_FOLLOWER_UP, // MOVE_FOLLOWER_UP, // MOVEMENT_FINISH // }; // void SetFollowerNPCData(enum FollowerNPCDataTypes type, u32 value); // const u8 *GetFollowerNPCScriptPointer(void); // u32 GetFollowerNPCData(enum FollowerNPCDataTypes type); // void ClearFollowerNPCData(void); // u32 DetermineFollowerNPCState(struct ObjectEvent *follower, u32 state, u32 direction); // void SetFollowerNPCSprite(u32 spriteIndex); // bool32 PlayerHasFollowerNPC(void); // void NPCFollow(struct ObjectEvent *npc, u32 state, bool32 ignoreScriptActive); // void CreateFollowerNPCAvatar(void); // void FollowerNPC_HandleSprite(void); // u32 DetermineFollowerNPCDirection(struct ObjectEvent *player, struct ObjectEvent *follower); // u32 GetFollowerNPCObjectId(void); // bool32 CheckFollowerNPCFlag(u32 flag); // bool32 FollowerNPC_IsCollisionExempt(struct ObjectEvent *obstacle, struct ObjectEvent *collider); // void HideNPCFollower(void); // void FollowerNPC_WarpSetEnd(void); // bool32 FollowerNPCCanBike(void); // void FollowerNPC_HandleBike(void); // void FollowerNPC_FollowerToWater(void); // void FollowerNPC_SetIndicatorToRecreateSurfBlob(void); // void FollowerNPC_BindToSurfBlobOnReloadScreen(void); // void PrepareFollowerNPCDismountSurf(void); // bool32 FollowerNPCComingThroughDoor(void); // void FollowerNPC_SetIndicatorToComeOutDoor(void); // void EscalatorMoveFollowerNPC(u32 movementType); // void EscalatorMoveFollowerNPCFinish(void); // void FollowerNPCWalkIntoPlayerForLeaveMap(void); // void FollowerNPCHideForLeaveMap(struct ObjectEvent *follower); // void FollowerNPCReappearAfterLeaveMap(struct ObjectEvent *follower, struct ObjectEvent *player); // void FollowerNPCFaceAfterLeaveMap(void); // bool32 FollowerNPCIsBattlePartner(void); // bool32 IsNPCFollowerWildBattle(void); // void PrepareForFollowerNPCBattle(void); // void RestorePartyAfterFollowerNPCBattle(void); // void FollowerNPC_TryRemoveFollowerOnWhiteOut(void); // void Task_MoveNPCFollowerAfterForcedMovement(u8 taskId); // void Task_HideNPCFollowerAfterMovementFinish(u8 taskId); #endif // GUARD_FOLLOWER_NPC_H