//FREE.h - [2020-06-22 11:41:46]
#ifndef _FREE_H_
#define _FREE_H_

#include "CPlayer.h"
#include "CAnimLib.h"
#include "CFTTMatrix32.h"
#include "CFTTXmlReaderNode.h"
#include "CGFXFX.h"
#include "CTeam.h"
#include "CFTTModel.h"
#include "TFreeControl.h"

/*
001D2758 FREE_GetLevelFilename(char *,int,char *,bool &)
001D27EC FREE_GetWorldRot(TPoint,TPoint)
001D281C FREE_CalcKickAngle(TPoint3D *,TPoint3D,TPoint3D,int,int,int *)
001D2A98 FREE_PassCheckPath(CPlayer *,TPoint,TPoint)
001D2BC0 FREE_ResolveEndPoint(TPoint3D *,TPoint3D *,TPoint *,int *,bool)
001D30B8 FREE_GetKickPower(EAnimID,int *,int *)
001D30FC FREE_ProcessControls(bool)
001D3EC8 FREE_CalcKickTargetTime(int)
001D3EEC FREE_ResetControls()
001D3F24 FREE_PassIsLowKick(TFreeControl *,TPoint3D *,TPoint3D *,int)
001D3FA8 FREE_ControlGetKickLimits(CPlayer *,int *,int *,int *)
001D4120 FREE_Init()
001D4160 FREE_Shutdown()
001D41B0 FREE_InitGoal(int,bool,bool,bool)
001D4318 FREE_SetupDifficulty()
001D4424 FREE_Initialise()
001D49C0 FREE_UpdateCamera(bool)
001D56CC FREE_ClipPathBounds(TPoint3D *,TPoint3D *,int,int,int,int)
001D5718 FREE_GameLoop()
001D58B4 FREE_StoreRewindState()
001D5A3E FREE_UpdateRewindState()
001D5A40 FREE_RestoreRewindState()
001D5AE4 FREE_BeginRewind()
001D5B30 FREE_RewindFrame()
001D5C0C FREE_ClipPathBounds(TPoint *,TPoint *,int,int,int,int)
001D656C FREE_IdleProcess()
001D66F0 FREE_SetupKick(TFreeControl *,TPoint3D *)
001D6778 FREE_LogicProcess()
001D67E8 FREE_GetPassTargetPlayer(CPlayer *,int *)
001D6918 FREE_ProcessShotAnim(CPlayer *)
001D6CD8 FREE_ProcessUserTeam()
001D7D74 FREE_ProcessOppoTeam()
001D848C FREE_ProcessFree()
001D86C4 FREE_ProcessFail()
001D8884 FREE_PlayCommentaryClearance()
001D8944 FREE_PlayCommentaryInterception()
001D8998 FREE_SetupKickAction(TPoint3D,int,int)
001D8AD0 FREE_CheckGKHandPos(CPlayer *,int)
001D8B9C FREE_SetupPhaseTransition(bool)
001D8DB4 FREE_PlayerGetUrgency(CPlayer *,int)
001D8E68 FREE_ProcessInProgressCore()
001D956C FREE_UpdateSuccess()
001D96E4 FREE_ProcessLogic()
001DA0A8 FREE_PlayCommentaryPassReceive()
001DA208 FREE_PlayCommentaryKick()
001DA484 FREE_SetComplete()
001DA5C0 FREE_PlayersUpset(int)
001DA620 FREE_PlayersCelebrate()
001DA670 FREE_CheckCollision()
001DA674 FREE_InitProps()
001DA730 FREE_UpdateProps()
001DA764 FREE_ShutdownProps()
001DA7A4 FREE_RenderPropShadow(EFreePropType,CFTTMatrix32 *)
001DA7BC FREE_RenderProp(EFreePropType,CFTTMatrix32 *)
001DA7D4 FREE_RenderPropShadows()
001DA8C0 FREE_RenderProps()
001DA9AC FREE_ProcessPropCollision(TFreeProp *)
001DA9AE FREE_ProcessPropCollisions()
001DA9B0 FREE_RenderInitOnce()
001DA9E0 FREE_RenderShutdownOnce()
001DAA00 FREE_RenderInit()
001DAAAC FREE_RenderShutdown()
001DAAF4 FREE_RenderListBegin(char const*,bool,bool)
001DAB84 FREE_RenderListEnd()
001DABD4 FREE_RenderAddVert(TFVF_PFLOAT_CINT_TFLOAT *,CFTTMatrix32 *)
001DAC40 FREE_RenderStar(TPoint3D,float,float)
001DACE4 FREE_RenderTarget(TPoint3D,int,uint,bool)
001DAEEC FREE_RenderDottedArc(TPoint3D,int,int,int,int,int,uint)
001DB0BC FREE_RenderRangeCone()
001DB3CC FREE_RenderDottedLine(TPoint3D,TPoint3D,int,uint,uint)
001DB5C0 FREE_RenderTutorialLine(TPoint3D const&,TPoint3D const&,int)
001DB9C8 FREE_RenderEditPlayerLine(TPoint3D const&,TPoint3D const&)
001DBBCC FREE_Render3DOpaque()
001DBBF0 FREE_RenderHeroPlayer(bool)
001DBEEC FREE_Render3DDecal()
001DBFC4 FREE_RenderPreSelectedPlayer()
001DC0E0 FREE_RenderProcess()
001DC0E4 FREE_AddVisualFeedback(int,EVFEffect,int)
001DC290 FREE_AddVisualFeedback_Pass()
001DC354 FREE_AddVisualFeedback_Goal()
001DC440 FREE_AddVisualFeedback_Fail()
001DC494 FREE_AddVisualFeedback_Offside()
001DC4C8 FREE_SortPlayers(TFreeGoal *)
001DC664 FREE_SortPlayersDistance(TFreeGoal *)
001DC848 FREE_ReadXML(TFreeGoal *,int)
001DC888 FREE_ReadXML(TFreeGoal *,char *)
001DCA14 FREE_ReadXMLLevel(TFreeGoal *,CFTTXmlReaderNode)

0047DFB0 FREE_tInfo:.ds.b 1

.text:0012FF08   MOVW            R4, #0x181C
.text:0012FF14   MOVW            R2, #0x1828

0047FCD0 FREE_tGoal:.ds.b 1

memset(FREE_tInfo, 0, 0x1D20u);
memset(&FREE_tGoal, 0, 0x7634u);
*/

extern TFreeInfo FREE_tInfo;
extern int FREE_iTeam;              //00487304

enum EFreePropType {
  EFreePropType_0,
  EFreePropType_1,
  EFreePropType_2,
  EFreePropType_3,
  EFreePropType_4,
  EFreePropType_5,
};

enum EVFEffect {
  EVFEffect_0,
  EVFEffect_1,
  EVFEffect_2,
  EVFEffect_3,
  EVFEffect_4,
  EVFEffect_5,
};

int  FREE_GetLevelFilename(char *, int, char *, bool &);                   //001D2758
void FREE_GetWorldRot(TPoint, TPoint);                                     //001D27EC
void FREE_CalcKickAngle(TPoint3D *, TPoint3D, TPoint3D, int, int, int *);  //001D281C
int FREE_PassCheckPath(CPlayer *, TPoint, TPoint);                         //001D2A98
void FREE_ResolveEndPoint(TPoint3D *, TPoint3D *, TPoint *, int *, bool);  //001D2BC0
void FREE_GetKickPower(EAnimID, int *, int *);                             //001D30B8
void FREE_ProcessControls(bool);                                           //001D30FC
int FREE_CalcKickTargetTime(int);                                         //001D3EC8
void FREE_ResetControls();                                                 //001D3EEC
int  FREE_PassIsLowKick(TFreeControl *, TPoint3D *, TPoint3D *, int);      //001D3F24
void FREE_ControlGetKickLimits(CPlayer *, int *, int *, int *);            //001D3FA8
void FREE_Init();                                                          //001D4120
void FREE_Shutdown();                                                      //001D4160
void FREE_InitGoal(int, bool, bool, bool);                                 //001D41B0
void FREE_SetupDifficulty();                                               //001D4318
void FREE_Initialise();                                                    //001D4424
void FREE_UpdateCamera(bool);                                              //001D49C0
void FREE_ClipPathBounds(TPoint3D *, TPoint3D *, int, int, int, int);      //001D56CC
void FREE_GameLoop();                                                      //001D5718
void FREE_StoreRewindState();                                              //001D58B4
void FREE_UpdateRewindState();                                             //001D5A3E
void FREE_RestoreRewindState();                                            //001D5A40
void FREE_BeginRewind();                                                   //001D5AE4
int  FREE_RewindFrame();                                                   //001D5B30
void FREE_ClipPathBounds(TPoint *, TPoint *, int, int, int, int);          //001D5C0C
void FREE_IdleProcess();                                                   //001D656C
void FREE_SetupKick(TFreeControl *, TPoint3D *);                           //001D66F0
void FREE_LogicProcess();                                                  //001D6778
int FREE_GetPassTargetPlayer(CPlayer *, int *);                           //001D67E8
void FREE_ProcessShotAnim(CPlayer *);                                      //001D6918
void FREE_ProcessUserTeam();                                               //001D6CD8
void FREE_ProcessOppoTeam();                                               //001D7D74
void FREE_ProcessFree();                                                   //001D848C
void FREE_ProcessFail();                                                   //001D86C4
void FREE_PlayCommentaryClearance();                                       //001D8884
void FREE_PlayCommentaryInterception();                                    //001D8944
void FREE_SetupKickAction(TPoint3D, int, int);                             //001D8998
void FREE_CheckGKHandPos(CPlayer *, int);                                  //001D8AD0
int FREE_SetupPhaseTransition(bool);                                      //001D8B9C
int FREE_PlayerGetUrgency(CPlayer *, int);                                //001D8DB4
void FREE_ProcessInProgressCore();                                         //001D8E68
void FREE_UpdateSuccess();                                                 //001D956C
int FREE_ProcessLogic();                                                  //001D96E4
void FREE_PlayCommentaryPassReceive();                                     //001DA0A8
void FREE_PlayCommentaryKick();                                            //001DA208
void FREE_SetComplete();                                                   //001DA484
void FREE_PlayersUpset(int);                                               //001DA5C0
void FREE_PlayersCelebrate();                                              //001DA620
void FREE_CheckCollision();                                                //001DA670
void FREE_InitProps();                                                     //001DA674
void FREE_UpdateProps();                                                   //001DA730
void FREE_ShutdownProps();                                                 //001DA764
void FREE_RenderPropShadow(EFreePropType, CFTTMatrix32 *);                 //001DA7A4
void FREE_RenderProp(EFreePropType, CFTTMatrix32 *);                       //001DA7BC
void FREE_RenderPropShadows();                                             //001DA7D4
void FREE_RenderProps();                                                   //001DA8C0
void FREE_ProcessPropCollision(TFreeProp *);                               //001DA9AC
void FREE_ProcessPropCollisions();                                         //001DA9AE
void FREE_RenderInitOnce();                                                //001DA9B0
void FREE_RenderShutdownOnce();                                            //001DA9E0
void FREE_RenderInit();                                                    //001DAA00
void FREE_RenderShutdown();                                                //001DAAAC
void FREE_RenderListBegin(char const *, bool, bool);                       //001DAAF4
void FREE_RenderListEnd();                                                 //001DAB84
void FREE_RenderAddVert(TFVF_PFLOAT_CINT_TFLOAT *, CFTTMatrix32 *);        //001DABD4
void FREE_RenderStar(TPoint3D, float, float);                              //001DAC40
void FREE_RenderTarget(TPoint3D, int, uint, bool);                         //001DACE4
void FREE_RenderDottedArc(TPoint3D, int, int, int, int, int, uint);        //001DAEEC
void FREE_RenderRangeCone();                                               //001DB0BC
void FREE_RenderDottedLine(TPoint3D, TPoint3D, int, uint, uint);           //001DB3CC
void FREE_RenderTutorialLine(TPoint3D const &, TPoint3D const &, int);     //001DB5C0
void FREE_RenderEditPlayerLine(TPoint3D const &, TPoint3D const &);        //001DB9C8
void FREE_Render3DOpaque();                                                //001DBBCC
void FREE_RenderHeroPlayer(bool);                                          //001DBBF0
void FREE_Render3DDecal();                                                 //001DBEEC
void FREE_RenderPreSelectedPlayer();                                       //001DBFC4
void FREE_RenderProcess();                                                 //001DC0E0
void FREE_AddVisualFeedback(int, EVFEffect, int);                          //001DC0E4
void FREE_AddVisualFeedback_Pass();                                        //001DC290
void FREE_AddVisualFeedback_Goal();                                        //001DC354
void FREE_AddVisualFeedback_Fail();                                        //001DC440
void FREE_AddVisualFeedback_Offside();                                     //001DC494
void FREE_SortPlayers(TFreeGoal *);                                        //001DC4C8
void FREE_SortPlayersDistance(TFreeGoal *);                                //001DC664
int FREE_ReadXML(TFreeGoal *, int);                                       //001DC848
bool FREE_ReadXML(TFreeGoal *, char *);                                    //001DC888
void FREE_ReadXMLLevel(TFreeGoal *, CFTTXmlReaderNode);                    //001DCA14

#endif  //_FREE_H_
