#ifndef POKEPLATINUM_UNK_020655F4_H
#define POKEPLATINUM_UNK_020655F4_H

#include "generated/movement_actions.h"

#include "struct_decls/struct_02061AB4_decl.h"

#include "overlay005/map_object_anim_cmd.h"

#include "sys_task_manager.h"

BOOL LocalMapObj_IsAnimationSet(const MapObject *mapObj);
void LocalMapObj_SetAnimationCode(MapObject *mapObj, enum MovementAction movementAction);
void sub_02065668(MapObject *mapObj, enum MovementAction movementAction);
BOOL LocalMapObj_CheckAnimationFinished(const MapObject *mapObj);
BOOL sub_020656AC(MapObject *mapObj);
void sub_020656DC(MapObject *mapObj);
SysTask *MapObject_StartAnimation(MapObject *mapObj, const MapObjectAnimCmd *animCmd);
BOOL MapObject_HasAnimationEnded(SysTask *task);
void MapObject_FinishAnimation(SysTask *task);
enum MovementAction MovementAction_TurnActionTowardsDir(int targetDir, enum MovementAction movementAction);
int MovementAction_GetDirFromAction(enum MovementAction movementAction);
void MapObject_DoMovementAction(MapObject *mapObj);
BOOL sub_020658DC(MapObject *mapObj);

extern BOOL (*const gMovementActionFuncs_FaceNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_FaceSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_FaceWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_FaceEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlowerNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlowerSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlowerWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlowerEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlowNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlowSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlowWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlowEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkNormalNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkNormalSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkNormalWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkNormalEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFastNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFastSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFastWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFastEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFasterNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFasterSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFasterWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFasterEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFastestNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFastestSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFastestWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkFastestEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_RunNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_RunSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_RunWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_RunEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotSlowerNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotSlowerSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotSlowerWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotSlowerEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotSlowNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotSlowSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotSlowWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotSlowEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotNormalNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotNormalSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotNormalWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotNormalEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotFastNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotFastSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotFastWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotFastEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotFasterNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotFasterSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotFasterWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkOnSpotFasterEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpOnSpotSlowNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpOnSpotSlowSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpOnSpotSlowWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpOnSpotSlowEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpOnSpotFastNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpOnSpotFastSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpOnSpotFastWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpOnSpotFastEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpNearFastNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpNearFastSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpNearFastWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpNearFastEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpFarNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpFarSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpFarWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpFarEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpNearSlowWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpNearSlowEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpFartherWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_JumpFartherEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_117[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_118[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_119[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_120[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_Delay1[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_Delay2[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_Delay4[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_Delay8[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_Delay15[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_Delay16[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_Delay32[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WarpOut[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WarpIn[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_SetInvisible[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_SetVisible[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_LockDir[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_UnlockDir[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_PauseAnimation[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_ResumeAnimation[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_EmoteExclamationMark[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_EmoteQuestionMark[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlightlyFastNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlightlyFastSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlightlyFastWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlightlyFastEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlightlyFasterNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlightlyFasterSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlightlyFasterWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkSlightlyFasterEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkEverSoSlightlyFastNorth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkEverSoSlightlyFastSouth[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkEverSoSlightlyFastWest[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_WalkEverSoSlightlyFastEast[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_NurseJoyBow[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_RevealTrainer[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_PlayerGive[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_PlayerReceive[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_105[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_106[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_107[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_108[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_109[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_110[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_111[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_112[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_113[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_114[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_115[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_116[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_145[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_146[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_147[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_148[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_149[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_150[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_151[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_152[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_121[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_122[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_123[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_124[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_125[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_126[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_127[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_128[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_129[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_130[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_131[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_132[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_133[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_134[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_135[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_136[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_137[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_138[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_139[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_140[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_141[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_142[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_143[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_144[])(MapObject *);
extern BOOL (*const gMovementActionFuncs_153[])(MapObject *);

#endif // POKEPLATINUM_UNK_020655F4_H
