/********************************************************************************
	player.h: Ultra 64 MARIO Brothers include file

	Copyright (c) 1996 Nintendo co., ltd.  All rights reserved

	May 11, 1996
 ********************************************************************************/

#ifndef PLAYER_H
#define	PLAYER_H

#include "playerstat.h"

#define	DLOG_DONE				0
#define	DLOG_LOOKFRONT			1
#define	DLOG_LOOKUP				2
#define	DLOG_LOOKDOWN			3

#define	DLOG_RESULT_BUSY		0
#define	DLOG_RESULT_START		1
#define	DLOG_RESULT_READY		2

#define	CONDOR_STEAL_HAT		1
#define	MONKEY_STEAL_HAT		2

#define	VOICE_JMP		0x00000000
#define	VOICE_NON		0xffffffff


#define	PL_FLAG_REDCAP		0x00000001
#define	PL_FLAG_GHOSTCAP	0x00000002
#define	PL_FLAG_METALCAP	0x00000004
#define	PL_FLAG_WINGCAP		0x00000008
#define	PL_FLAG_HAVECAP		0x0000000F

#define	PL_FLAG_HEADCAP		0x00000010
#define	PL_FLAG_HANDCAP		0x00000020
#define	PL_FLAG_FLASHING	0x00000040
#define	PL_FLAG_FADING		0x00000080

#define	PL_FLAG_JMPCANCEL	0x00000100
#define	PL_FLAG_GETSTAR		0x00000200

#define	PL_FLAG_SOUNDTRIG	0x00010000
#define	PL_FLAG_VOICETRIG	0x00020000
#define	PL_FLAG_VOICEDOWN	0x00040000

#define	PL_FLAG_PUNCH		0x00100000
#define	PL_FLAG_PWKICK		0x00200000
#define	PL_FLAG_SQKICK		0x00400000

#define	PL_FLAG_TRAMPOLINE	0x01000000
#define	PL_FLAG_SETPOSINFO	0x02000000
#define	PL_FLAG_JUMPBOUND	0x40000000
#define	PL_FLAG_PUSHWALL	0x80000000

#define	PL_WATER_WALK		100
#define	PL_WATER_SWIM		 80


#define	PL_INFO_ENTRANT		0x00010000

/********************************************************************************/
/*																				*/
/*	Player status	(16bits value)												*/
/*																				*/
/********************************************************************************/

/* mask pattern */

#define	PA_MOVEREQ			0x0003
#define	PA_MOTIONS			0x000F
#define	PA_EVENTS			0xA41F


/* action bits */

#define	PA_WALKREQ			0x0001
#define	PA_JUMPREQ			0x0002
#define	PA_SWIMREQ			0x0002
#define	PA_LANDREQ			0x0004
#define	PA_SLIPREQ			0x0008
#define	PA_VIEWREQ			0x0010
#define	PA_WAITREQ			0x0020
#define	PA_PRESREQ			0x0040
#define	PA_JUMPBTN			0x0080
#define	PA_SWIMBTN			0x0080

#define	PA_GASSY			0x0100
#define	PA_PUDDLE			0x0200
#define	PA_QUAKING			0x0400
#define	PA_TAKEREQ			0x0800

#define	PA_ATKREACT			0x1000
#define	PA_ACTTRIG			0x2000
#define	PA_BAKSTAT			0x4000
#define	PA_BAKTRIG			0x8000



/********************************************************************************/
/*																				*/
/*	Player hit status	(32bits value)											*/
/*																				*/
/********************************************************************************/

#define	PH_HIPDROP			0x000001
#define	PH_PUNCH			0x000002
#define	PH_POWERKICK		0x000004
#define	PH_SQUATKICK		0x000008
#define	PH_SLIDEKICK		0x000010
#define	PH_SLIDING			0x000020
#define	PH_TRAMPLE			0x000040
#define	PH_HEADATK			0x000080

#define	PH_PUNCHKICK		0x000006
#define	PH_KICK				0x00000C
#define	PH_ATTACK			0x00007F
#define	PH_ATTACKALL		0x0000FF


/********************************************************************************/
/*																				*/
/*	Player status	(32bits value)												*/
/*																				*/
/********************************************************************************/

/* player process type flag */

#define	PS_CODE_MASK		0x000001FF
#define	PS_PROC_MASK		0x000001C0
#define	PS_PROC_WAIT		0x00000000
#define	PS_PROC_MOVE		0x00000040
#define	PS_PROC_JUMP		0x00000080
#define	PS_PROC_SWIM		0x000000C0
#define	PS_PROC_DEMO		0x00000100
#define	PS_PROC_SPEC		0x00000140
#define	PS_PROC_ACTN		0x00000180


/* player status type flag */

#define	PS_TYPE_WAIT		0x00000200		/* wait				*/
#define	PS_TYPE_MOVE		0x00000400		/* move				*/
#define	PS_TYPE_JUMP		0x00000800		/* jump				*/

#define	PS_TYPE_DEMO		0x00001000		/* demonstration	*/
#define	PS_TYPE_SWIM		0x00002000		/* swimming			*/
#define	PS_TYPE_SINK		0x00004000		/* sinking			*/
#define	PS_TYPE_SQRT		0x00008000		/* squating			*/
#define	PS_TYPE_SKTE		0x00010000		/* skating			*/
#define	PS_TYPE_DOWN		0x00020000		/* downing			*/
#define	PS_TYPE_SLIP		0x00040000		/* slipping		-	*/
#define	PS_TYPE_DIVE		0x00080000		/* diving			*/
#define	PS_TYPE_POLE		0x00100000		/* hanging pole		*/
#define	PS_TYPE_ROOF		0x00200000		/* hanging roof		*/
#define	PS_TYPE_READ		0x00400000		/* read billboard	*/
#define	PS_TYPE_ATCK		0x00800000		/* attacking		*/
#define	PS_TYPE_WIND		0x01000000		/* wind jump ok		*/
#define	PS_TYPE_JPCN		0x02000000		/* jump cancel		*/

#define	PS_TYPE_VIEW		0x04000000		/* view mode ok		*/
#define	PS_TYPE_QUIT		0x08000000		/* pause quit ok	*/

#define	PS_TYPE_HAND		0x10000000		/* hand animation	*/
#define	PS_TYPE_HEAD		0x20000000		/* head animation	*/
#define	PS_TYPE_BODY		0x40000000		/* body animation	*/
#define	PS_TYPE_THRW		0x80000000		/* throwing flag	*/


#define	PS_TYPE_WALL		0x00000000		/* hanging wall	-	*/

#define	PS_TYPE_BAR			PS_TYPE_POLE


/* player waiting status code */

#define	PS_INACTIVE			( 0x00 )

#define	PS_WAITING			( 0x01 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ )
#define	PS_SLEEPILY			( 0x02 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ )
#define	PS_SLEEPING			( 0x03 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_WAKEUP			( 0x04 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT )

#define	PS_WAITTIRED		( 0x05 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ )
#define	PS_HOLDTIRED		( 0x06 + PS_TYPE_WAIT 				 + PS_TYPE_QUIT )
#define	PS_HOLDING			( 0x07 + PS_TYPE_WAIT				 + PS_TYPE_QUIT )
#define	PS_SHOULDER			( 0x08 + PS_TYPE_WAIT				 + PS_TYPE_QUIT )
#define	PS_WALLWAIT			( 0x09 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ )
#define	PS_GASWAIT			( 0x0A + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ )
#define	PS_COLDWAIT			( 0x0B + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT + PS_TYPE_READ )
#define	PS_OSHINWAIT		( 0x0C + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_SANDWAIT			( 0x0D + PS_TYPE_WAIT + PS_TYPE_DOWN				)
#define	PS_ELECWAIT			( 0x0E + PS_TYPE_WAIT + PS_TYPE_DOWN				)


#define	PS_SQUATING			( 0x20 + PS_TYPE_WAIT + PS_TYPE_SQRT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_SQSTART			( 0x21 + PS_TYPE_WAIT + PS_TYPE_SQRT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_SQSTAND			( 0x22 + PS_TYPE_WAIT + PS_TYPE_SQRT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_SQWALKST			( 0x23 + PS_TYPE_WAIT + PS_TYPE_SQRT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_SQWALKED			( 0x24 + PS_TYPE_WAIT + PS_TYPE_SQRT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_SLIDEKEND		( 0x25 + PS_TYPE_WAIT								+ PS_TYPE_QUIT )

#define	PS_QUAKING			( 0x26 + PS_TYPE_WAIT + PS_TYPE_DOWN )
#define	PS_VIEWING			( 0x27 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT )

#define	PS_BACKJEND			( 0x2F + PS_TYPE_WAIT				 + PS_TYPE_QUIT )
#define	PS_JUMPEND			( 0x30 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_SECJPEND			( 0x31 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_LANDEND			( 0x32 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_TURNJUMPE		( 0x33 + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_HOLDJUMPE		( 0x34 + PS_TYPE_WAIT				 + PS_TYPE_QUIT )
#define	PS_HOLDLANDE		( 0x35 + PS_TYPE_WAIT				 + PS_TYPE_QUIT )
#define	PS_JMPETHROW		( 0x36 + PS_TYPE_WAIT + PS_TYPE_JUMP + PS_TYPE_THRW )
#define	PS_SPINJEND			( 0x38 + PS_TYPE_WAIT + PS_TYPE_ATCK + PS_TYPE_HAND + PS_TYPE_QUIT )
#define	PS_FIREJUMPE		( 0x39 + PS_TYPE_WAIT				 + PS_TYPE_QUIT )
#define	PS_ULTRAJEND		( 0x3A + PS_TYPE_WAIT				 + PS_TYPE_QUIT )
#define	PS_BROADJEND		( 0x3B + PS_TYPE_WAIT				 + PS_TYPE_QUIT )
#define	PS_HIPATKEND		( 0x3C + PS_TYPE_WAIT + PS_TYPE_ATCK				)

#define	PS_BRAKEND			( 0x3D + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_SLIPEND			( 0x3E + PS_TYPE_WAIT + PS_TYPE_VIEW + PS_TYPE_QUIT )
#define	PS_HOLDSLIPE		( 0x3F + PS_TYPE_MOVE				 + PS_TYPE_QUIT )



/* player running status code */

#define	PS_RUNNING			( 0x40 + PS_TYPE_MOVE + PS_TYPE_VIEW )
#define	PS_CARRYING			( 0x42 + PS_TYPE_MOVE )
#define	PS_TURNING			( 0x43 + PS_TYPE_MOVE )
#define	PS_TURNEND			( 0x44 + PS_TYPE_MOVE )
#define	PS_BRAKING			( 0x45 + PS_TYPE_MOVE + PS_TYPE_VIEW )
#define	PS_SKATING			( 0x46 + PS_TYPE_MOVE + PS_TYPE_ATCK + PS_TYPE_SKTE + PS_TYPE_HEAD )
#define	PS_TRANSFER			( 0x47 + PS_TYPE_MOVE )
#define	PS_SQWALKING		( 0x48 + PS_TYPE_MOVE + PS_TYPE_SQRT + PS_TYPE_VIEW )
#define	PS_FIREDASH			( 0x49 + PS_TYPE_MOVE + PS_TYPE_DOWN )
#define	PS_WALKEND			( 0x4A + PS_TYPE_MOVE + PS_TYPE_VIEW )
#define	PS_CARRYEND			( 0x4B + PS_TYPE_MOVE )


#define	PS_SLIPPING			( 0x50 )
#define	PS_HOLDSLIPN		( 0x51 )
#define	PS_SLIPFORE			( 0x52 + PS_TYPE_MOVE + PS_TYPE_SLIP + PS_TYPE_ATCK				   )
#define	PS_SLIPBACK			( 0x53 + PS_TYPE_MOVE + PS_TYPE_SLIP + PS_TYPE_ATCK + PS_TYPE_DIVE )
#define	PS_HOLDSLIPF		( 0x54 + PS_TYPE_MOVE + PS_TYPE_SLIP + PS_TYPE_ATCK				   )
#define	PS_HOLDSLIPB		( 0x55 + PS_TYPE_MOVE + PS_TYPE_SLIP + PS_TYPE_ATCK + PS_TYPE_DIVE )
#define	PS_CATCHING			( 0x56 + PS_TYPE_MOVE				 + PS_TYPE_ATCK	+ PS_TYPE_DIVE )
#define	PS_RUNATTACK		( 0x57 + PS_TYPE_MOVE				 + PS_TYPE_ATCK				   )
#define	PS_SQUATSLIP		( 0x59 + PS_TYPE_MOVE + PS_TYPE_SQRT + PS_TYPE_ATCK + PS_TYPE_VIEW )
#define	PS_SLIDEKICK		( 0x5A + PS_TYPE_MOVE + PS_TYPE_ATCK )

#define	PS_BACKDOWN			( 0x60 + PS_TYPE_MOVE + PS_TYPE_DOWN )
#define	PS_FOREDOWN			( 0x61 + PS_TYPE_MOVE + PS_TYPE_DOWN )
#define	PS_SBACKDOWN		( 0x62 + PS_TYPE_MOVE + PS_TYPE_DOWN )
#define	PS_SFOREDOWN		( 0x63 + PS_TYPE_MOVE + PS_TYPE_DOWN )
#define	PS_SAFEBDOWN		( 0x64 + PS_TYPE_MOVE + PS_TYPE_DOWN )
#define	PS_SAFEFDOWN		( 0x65 + PS_TYPE_MOVE + PS_TYPE_DOWN )
#define	PS_CATCHDOWN		( 0x66 + PS_TYPE_MOVE + PS_TYPE_DOWN )
#define	PS_LOSERDOWN		( 0x67 + PS_TYPE_MOVE + PS_TYPE_DOWN )

#define	PS_JUMPSLIP			( 0x70 + PS_TYPE_MOVE + PS_TYPE_VIEW )
#define	PS_LANDSLIP			( 0x71 + PS_TYPE_MOVE + PS_TYPE_VIEW )
#define	PS_SECJPSLIP		( 0x72 + PS_TYPE_MOVE + PS_TYPE_VIEW )
#define	PS_TURNJUMPS		( 0x73 + PS_TYPE_MOVE + PS_TYPE_VIEW )
#define	PS_HOLDJUMPS		( 0x74 + PS_TYPE_MOVE )
#define	PS_HOLDLANDS		( 0x75 + PS_TYPE_MOVE )

#define	PS_SANDJUMP			( 0x76 + PS_TYPE_MOVE				 )
#define	PS_SANDHJUMP		( 0x77 + PS_TYPE_MOVE				 )
#define	PS_ULTRAJMPS		( 0x78 + PS_TYPE_MOVE + PS_TYPE_VIEW )
#define	PS_BROADSLIP		( 0x79 + PS_TYPE_MOVE )
#define	PS_BACKJMPS			( 0x7A + PS_TYPE_MOVE + PS_TYPE_VIEW )



/* player jumping status code */

	/* pole and bird */
#define	PS_JUMPING			( 0x80 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND )
#define	PS_SECJUMP			( 0x81 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND )
#define	PS_ULTRAJUMP		( 0x82 + PS_TYPE_JUMP				 + PS_TYPE_WIND )
#define	PS_BACKJUMP			( 0x83 + PS_TYPE_JUMP				 + PS_TYPE_WIND )
#define	PS_WINGJUMP			( 0x94 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND )
#define	PS_MISSJUMP			( 0x85 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND )
#define	PS_JUMPWALL			( 0x86 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND )
#define	PS_TURNJUMPN		( 0x87 + PS_TYPE_JUMP				 + PS_TYPE_WIND )
#define	PS_BROADJUMP		( 0x88 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND )
#define	PS_WATERNJMP		( 0x89 + PS_TYPE_JUMP				 + PS_TYPE_WIND )
#define	PS_JMPCATCH			( 0x8A + PS_TYPE_JUMP + PS_TYPE_DIVE + PS_TYPE_WIND + PS_TYPE_ATCK )
#define	PS_TRAMPOLIN		( 0x8B + PS_TYPE_JUMP + PS_TYPE_JPCN )
#define	PS_LANDING			( 0x8C + PS_TYPE_JUMP				 + PS_TYPE_WIND )
#define	PS_BARLAND			( 0x8D + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND )
#define	PS_SLIPFALL			( 0x8E + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND )

	/* pole  */
#define	PS_CANNJUMP			( 0x98 + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_DIVE )
#define	PS_FLIGHT			( 0x99 + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_DIVE + PS_TYPE_HAND )
#define	PS_BOARDJUMP		( 0x9A + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_SKTE + PS_TYPE_JPCN )
#define	PS_BOARDLAND		( 0x9B + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_SKTE )
#define	PS_WINDFLY			( 0x9C + PS_TYPE_JUMP + PS_TYPE_DIVE + PS_TYPE_HAND )


#define	PS_HOLDJUMPN		( 0xA0 + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND )
#define	PS_HOLDLANDN		( 0xA1 + PS_TYPE_JUMP				 + PS_TYPE_WIND )
#define	PS_HSLPFALL			( 0xA2 + PS_TYPE_JUMP				 + PS_TYPE_WIND )
#define	PS_WATERCJMP		( 0xA3 + PS_TYPE_JUMP				 + PS_TYPE_WIND )

#define	PS_SPINJUMP			( 0xA4 + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_HAND )
#define	PS_CATCHSTOP		( 0xA6 + PS_TYPE_JUMP				 + PS_TYPE_WIND )
#define	PS_STAYWALL			( 0xA7 + PS_TYPE_JUMP )
#define	PS_FLYBIRD			( 0xA8 + PS_TYPE_MOVE )
#define	PS_HIPATTACK		( 0xA9 + PS_TYPE_JUMP + PS_TYPE_ATCK )
#define	PS_JUMPKICK			( 0xAA + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_WIND )
#define	PS_JMPNTHROW		( 0xAB + PS_TYPE_JUMP + PS_TYPE_THRW + PS_TYPE_WIND + PS_TYPE_JPCN )
#define	PS_JPPOWKICK		( 0xAC + PS_TYPE_JUMP + PS_TYPE_ATCK + PS_TYPE_WIND )
#define	PS_BSLIPSTOP		( 0xAD + PS_TYPE_JUMP				 + PS_TYPE_WIND )
#define	PS_HOPPERJMP		( 0xAE + PS_TYPE_JUMP )
#define	PS_SPECIALJP		( 0xAF + PS_TYPE_JUMP + PS_TYPE_JPCN + PS_TYPE_WIND )

#define	PS_JMPSBDOWN		( 0xB0 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND )
#define	PS_JMPSFDOWN		( 0xB1 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND )
#define	PS_JFOREDOWN		( 0xB2 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND )
#define	PS_JBACKDOWN		( 0xB3 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND )
#define	PS_FIREJUMP			( 0xB4 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND )
#define	PS_FIRELAND			( 0xB5 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND ) 
#define	PS_LANDDOWN			( 0xB6 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND )
#define	PS_FIREDOWN			( 0xB7 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND )
#define	PS_WINDDOWN			( 0xB8 + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND )

#define	PS_THROWNFOR		( 0xBD + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND )
#define	PS_THROWNBAK		( 0xBE + PS_TYPE_JUMP + PS_TYPE_DOWN + PS_TYPE_WIND )


/* player swimming status code */

#define	PS_SWIMNWAIT		( 0xC0 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_QUIT + PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMCWAIT		( 0xC1 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_QUIT + PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMNSTOP		( 0xC2 + PS_TYPE_WAIT + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMCSTOP		( 0xC3 + PS_TYPE_WAIT + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMDOWN			( 0xC4 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DEMO + PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMBDOWN		( 0xC5 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DOWN + PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMFDOWN		( 0xC6 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DOWN + PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMDOWNE		( 0xC7 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DEMO + PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMELEC			( 0xC8 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DOWN + PS_TYPE_HEAD + PS_TYPE_HAND )


#define	PS_SWIMMING1		( 0xD0 + PS_TYPE_MOVE + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMMING2		( 0xD1 + PS_TYPE_MOVE + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMMING3		( 0xD2 + PS_TYPE_MOVE + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMCARY1		( 0xD3 + PS_TYPE_MOVE + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMCARY2		( 0xD4 + PS_TYPE_MOVE + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMCARY3		( 0xD5 + PS_TYPE_MOVE + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_KAMESWIM			( 0xD6 + PS_TYPE_MOVE + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )

#define	PS_SWIMTHROW		( 0xE0 + PS_TYPE_MOVE + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_SWIMTAKE			( 0xE1 + PS_TYPE_MOVE + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_DIVING			( 0xE2 + PS_TYPE_WAIT + PS_TYPE_SWIM				+ PS_TYPE_HEAD + PS_TYPE_HAND )
#define	PS_DRAINPIPE		( 0xE3 + PS_TYPE_WAIT + PS_TYPE_SWIM + PS_TYPE_DOWN + PS_TYPE_HEAD + PS_TYPE_HAND )

#define	PS_WATRNWAIT		( 0xF0 + PS_TYPE_WAIT + PS_TYPE_SINK + PS_TYPE_QUIT )
#define	PS_WATRCWAIT		( 0xF1 + PS_TYPE_WAIT + PS_TYPE_SINK + PS_TYPE_QUIT )
#define	PS_WATRNWALK		( 0xF2 + PS_TYPE_MOVE + PS_TYPE_SINK )
#define	PS_WATRCWALK		( 0xF3 + PS_TYPE_MOVE + PS_TYPE_SINK )
#define	PS_WATRNLAND		( 0xF4 + PS_TYPE_WAIT + PS_TYPE_SINK )
#define	PS_WATRCLAND		( 0xF5 + PS_TYPE_WAIT + PS_TYPE_SINK )
#define	PS_WATRNLNDE		( 0xF6 + PS_TYPE_WAIT + PS_TYPE_SINK )
#define	PS_WATRCLNDE		( 0xF7 + PS_TYPE_WAIT + PS_TYPE_SINK )
#define	PS_WATRNJUMP		( 0xF8 + PS_TYPE_MOVE + PS_TYPE_SINK )
#define	PS_WATRCJUMP		( 0xF9 + PS_TYPE_MOVE + PS_TYPE_SINK )
#define	PS_WATRNJMPE		( 0xFA + PS_TYPE_MOVE + PS_TYPE_SINK )
#define	PS_WATRCJMPE		( 0xFB + PS_TYPE_MOVE + PS_TYPE_SINK )



/* player auto demonstration status code */

#define	PS_FREEZE			( 0x100 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_CAMDEMO			( 0x101 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_VIEW )
#define	PS_WINDEMO			( 0x102 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_WINSWIM			( 0x103 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_WINLAND			( 0x104 + PS_TYPE_JUMP + PS_TYPE_DEMO ) 
#define	PS_DODIALOG			( 0x105 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_HEAD ) 
#define	PS_DLOGMODE			( 0x106 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_HEAD ) 
#define	PS_WINDEMO2			( 0x107 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_READBOARD		( 0x108 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_WINFLIGHT		( 0x109 + PS_TYPE_JUMP + PS_TYPE_DEMO )
#define	PS_WAITDLOG			( 0x10A + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_FREEMOVE			( 0x10F + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_WINDEMOA			PS_WINDEMO


#define	PS_GIDDYDOWN		( 0x111 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN )
#define	PS_SANDDOWN			( 0x112 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN )
#define	PS_ELECDOWN			( 0x113 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN )
#define	PS_GASDOWN			( 0x114 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN )
#define	PS_FOREDOWNE		( 0x115 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN )
#define	PS_BACKDOWNE		( 0x116 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN )
#define	PS_EATEN			( 0x117 + PS_TYPE_WAIT + PS_TYPE_DEMO + PS_TYPE_DOWN )

#define	PS_ENTENDING		( 0x118 + PS_TYPE_JUMP + PS_TYPE_DEMO )
#define	PS_STAFFROLL		( 0x119 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_FINGAME			( 0x11A + PS_TYPE_WAIT + PS_TYPE_DEMO )


#define	PS_OPENDOOR1		( 0x120 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_OPENDOOR2		( 0x121 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_TRIPDOOR			( 0x122 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_CHIMNEY			( 0x123 + PS_TYPE_JUMP + PS_TYPE_DEMO )
#define	PS_ROLLJUMP			( 0x124 + PS_TYPE_JUMP + PS_TYPE_DEMO )
#define	PS_ROLLEND			( 0x125 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_ENTWINNER		( 0x126 + PS_TYPE_JUMP + PS_TYPE_DEMO ) 
#define	PS_ENTWINEND		( 0x127 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_ENTLOSER			( 0x128 + PS_TYPE_JUMP + PS_TYPE_DEMO )
#define	PS_LANDLOSER		( 0x129 + PS_TYPE_JUMP + PS_TYPE_DEMO )
#define	PS_DOWNLOSER		( 0x12A + PS_TYPE_JUMP + PS_TYPE_DEMO )
#define	PS_PUSHOUT			( 0x12B + PS_TYPE_JUMP + PS_TYPE_DEMO )
#define	PS_PUSHDOWN			( 0x12C + PS_TYPE_JUMP + PS_TYPE_DEMO )
#define	PS_LNDWINNER		( 0x12D + PS_TYPE_JUMP + PS_TYPE_DEMO ) 
#define	PS_OPENKDOOR		( 0x12E + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_STARDOOR			( 0x12F + PS_TYPE_WAIT + PS_TYPE_DEMO )

// #define	PS_WALKDOOR			( 0x130 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_AUTODOOR			( 0x131 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_LANDENTER		( 0x132 + PS_TYPE_JUMP + PS_TYPE_DEMO )
#define	PS_LANDENEND		( 0x133 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_JPBASKET			( 0x134 + PS_TYPE_JUMP + PS_TYPE_DEMO )
#define	PS_INBASKET			( 0x135 + PS_TYPE_MOVE + PS_TYPE_DEMO )
#define	PS_WARPIN			( 0x136 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_WARPOUT			( 0x137 + PS_TYPE_WAIT + PS_TYPE_DEMO )

#define	PS_ELECDMGE			( 0x138 + PS_TYPE_WAIT + PS_TYPE_DOWN )
#define	PS_VCOMPRESS		( 0x139 + PS_TYPE_WAIT + PS_TYPE_DOWN )
#define	PS_HEADDOWN			( 0x13A + PS_TYPE_WAIT + PS_TYPE_DOWN )
#define	PS_HIPDOWN			( 0x13B + PS_TYPE_WAIT + PS_TYPE_DOWN )
#define	PS_FOOTDOWN			( 0x13C + PS_TYPE_WAIT + PS_TYPE_DOWN )
#define	PS_PUTONHAT			( 0x13D + PS_TYPE_WAIT + PS_TYPE_DEMO )



/* player special status code */

#define	PS_BARWAIT			( 0x140 + PS_TYPE_WAIT + PS_TYPE_POLE + PS_TYPE_QUIT )
#define	PS_BARHANG			( 0x141 + PS_TYPE_WAIT + PS_TYPE_POLE )
#define	PS_BARJUMP			( 0x142 + PS_TYPE_WAIT + PS_TYPE_POLE )
#define	PS_BARCLIMB			( 0x143 + PS_TYPE_WAIT + PS_TYPE_POLE )
#define	PS_BARSTAND			( 0x144 + PS_TYPE_WAIT + PS_TYPE_POLE )
#define	PS_BARSWAIT			( 0x145 + PS_TYPE_WAIT + PS_TYPE_POLE )

#define	PS_HANGROOF			( 0x148 + PS_TYPE_WAIT + PS_TYPE_ROOF + PS_TYPE_QUIT )
#define	PS_WAITROOF			( 0x149 + PS_TYPE_WAIT + PS_TYPE_ROOF )
#define	PS_MOVEROOF			( 0x14A + PS_TYPE_MOVE + PS_TYPE_ROOF )

#define	PS_HANGING			( 0x14B + PS_TYPE_WAIT + PS_TYPE_WALL + PS_TYPE_QUIT )
#define	PS_ASCEND1			( 0x14C + PS_TYPE_MOVE + PS_TYPE_WALL )
#define	PS_ASCEND2			( 0x14D + PS_TYPE_MOVE + PS_TYPE_WALL )
#define	PS_DESCEND			( 0x14E + PS_TYPE_MOVE + PS_TYPE_WALL )
#define	PS_HANGJUMP			( 0x14F + PS_TYPE_MOVE + PS_TYPE_WALL )

#define	PS_TAKEN			( 0x170 + PS_TYPE_WAIT + PS_TYPE_DOWN )
#define	PS_INCANNON			( 0x171 + PS_TYPE_WAIT + PS_TYPE_DEMO )
#define	PS_TORNEDO			( 0x172 + PS_TYPE_WAIT + PS_TYPE_DOWN + PS_TYPE_HAND )



/* player action status code */

#define	PS_ATTACK			( 0x180 + PS_TYPE_WAIT + PS_TYPE_ATCK )

#define	PS_TAKING			( 0x183 + PS_TYPE_WAIT )
#define	PS_CATCHEND			( 0x185 + PS_TYPE_WAIT )
#define	PS_CATCHLOST		( 0x186 + PS_TYPE_WAIT )

#define	PS_PUTTING			( 0x187 + PS_TYPE_WAIT )
#define	PS_PITCHING			( 0x188 + PS_TYPE_MOVE + PS_TYPE_THRW )
#define	PS_THROWING			( 0x189 + PS_TYPE_MOVE + PS_TYPE_THRW )

#define	PS_BRANDSTAT		( 0x190 + PS_TYPE_WAIT )
#define	PS_BRANDISH			( 0x191 + PS_TYPE_WAIT )
#define	PS_BRANDEND			( 0x192 + PS_TYPE_WAIT )


/********************************************************************************/
/*																				*/
/*	Player control record														*/
/*																				*/
/********************************************************************************/

typedef struct {
	ushort			number;				/* player ID number						*/
	ushort			action;				/* player action						*/
	ulong			flags;				/* player flags							*/
	ulong			result;				/* player result						*/
	ulong			status;				/* player status						*/
	ulong			oldstatus;			/* player status at the previous frame	*/
	ulong			surface;			/* ground surface condition for sound	*/

	ushort			process;			/* allpurpose process number			*/
	ushort			counter;			/* allpurpose counter					*/
	ulong			auxinfo;			/* auxiliary status information			*/

	float			powLevel;			/* motion power level (temp)			*/
	short			powAngle;			/* motion power angle (temp)			*/

	short			invincible;			/* invincible counter					*/
	uchar			jmpTrgcnt;			/* jump button trigger counter			*/
	uchar			actTrgcnt;			/* action button triger counter			*/
	uchar			walljump;			/* wall jump							*/
	uchar			tripjump;			/* triple jump							*/


	SVector			angle;				/* player angle							*/
	SVector			angvelo;			/* angle velocity for swimming			*/
	short			slideAng;			/* player slide angle					*/
	short			spinAngle;			/* spin jumping angle					*/

	FVector			position;			/* player position						*/
	FVector			speed;				/* player speed (vector)				*/
	float			velocity;			/* player velocity						*/
	float			slidex;				/* player slide speed x					*/
	float			slidez;				/* player slide speed z					*/


	BGCheckData	   *wlPlane;			/* pointer to the wall plane record		*/
	BGCheckData	   *rfPlane;			/* pointer to the roof plane record		*/
	BGCheckData	   *grPlane;			/* pointer to the ground plane record	*/
	float			rfLevel;			/* roof level							*/
	float			grLevel;			/* ground level							*/
	short			grAngle;			/* ground angle y						*/
	short			water;				/* water level							*/

	StrategyPtr		collide;			/* pointer to the collided object		*/ 
	StrategyPtr		taking;				/* pointer to the taken object			*/
	StrategyPtr		couple;				/* pointer to the coupling object		*/
	StrategyPtr		skateboard;			/* pointer to the skate board			*/

	StrategyPtr		strategy;			/* pointer to the strategy record		*/
	ActorPtr		actorinf;			/* pointer to the actor information		*/
	ScenePtr		sceneinf;			/* pointer to the scene information		*/
	CamPLInfoPtr	playerinf;			/* pointer to the player information	*/
	PLShapeCtrl	   *shapeCtrl;			/* pointer to the player shape control	*/
	Controller	   *control;			/* pointer to the controller			*/
	PartialPtr		partial;

	ulong			hitnames;			/* hit enemy names						*/
	short			ncoins;				/* number of the coins					*/
	short			nstars;				/* number of the stars					*/
	char			nkeys;				/* number of the keys					*/
	char			nlifes;				/* number of the lifes					*/
	short			npowers;			/* number of the powers					*/

	short			animbase;			/* skeleton animation base height		*/
	uchar			damage;				/* player power down					*/
	uchar			recover;			/* player power recover					*/
	uchar			compress;			/* player shape vertical compress value	*/ 
	uchar			alpha;				/* player shape alpha value				*/
	ushort			special;			/* special mario counter				*/
	short			starmsg;			/* number of stars for star message		*/
	ushort			reserved2;
	float			fallpos;			/* player falled from this height		*/
	float			sinking;			/* player sink depth					*/
	float			gravity;			/* player jumping gravity				*/

} PlayerRecord, *PlayerPtr;


/********************************************************************************/
/*																				*/
/*	Meter control record														*/
/*																				*/
/********************************************************************************/

#define	METER_LIFE		0x0001
#define	METER_COIN		0x0002
#define	METER_STAR		0x0004
#define	METER_POWER		0x0008
#define	METER_KEY		0x0010
#define	METER_MAP		0x0020
#define	METER_TIMER		0x0040
#define	METER_ALL		0x007F

#define	METER_DAMAGE	0x8000

typedef struct {
	short	life;						/* number of Mario's life				*/
	short	coin;						/* number of the coins					*/
	short	star;						/* number of the stars					*/
	short	power;						/* number of the powers					*/
	short	key;						/* number of the keys					*/
	short	flags;						/* meter switch							*/
	ushort	timer;						/* timer								*/
} MeterRecord, *MeterPtr;


/********************************************************************************/
/*																				*/
/*	External variables															*/
/*																				*/
/********************************************************************************/

extern PlayerRecord playerWorks[1];			/* player control works				*/
extern PlayerRecord *marioWorks;			/* pointer to the mario works		*/
extern MeterRecord	playerMeter;			/* player meter record				*/

extern char			mesgCastle;

/********************************************************************************/
/*																				*/
/*	Audio macros																*/
/*																				*/
/********************************************************************************/

#define	PL_StartSound(player,code)				PL_StartSoundEffect(player,code,PL_FLAG_SOUNDTRIG)
#define	PL_StartVoice(player,code)				PL_StartSoundEffect(player,code,PL_FLAG_VOICETRIG)
#define	PL_StartMarioPant(player)				Na_MarioPant(&(player)->strategy->map.viewCoord[0])


/********************************************************************************/
/*																				*/
/*	Macros																		*/
/*																				*/
/********************************************************************************/

#define	PL_IsGhostMario(player)				((player)->flags & PL_FLAG_GHOSTCAP)
#define	PL_IsMetalMario(player)				((player)->flags & PL_FLAG_METALCAP)
#define	PL_IsWingMario(player)				((player)->flags & PL_FLAG_WINGCAP)


#define	PL_AnimeFrame(player)			((player)->strategy->map.skelanim.frame)
#define	PL_IsAnimeFrame(player,n)		((player)->strategy->map.skelanim.frame==(n))
#define	PL_GetAnimeID(player)			((player)->strategy->map.skelanim.animeID)
#define	PL_ResetAnimation(player)		((player)->strategy->map.skelanim.animeID = -1)

#define	PL_GetEnvironment(player)		((player)->sceneinf->environment&ENV_CODEMASK)
#define	PL_CheckEnvironment(player,env)	(((player)->sceneinf->environment&ENV_CODEMASK)==(env))

#define	PL_ClearViewCamera()			(gameCameraControl &= ~CAM_FLAG_VIEWMODE)
#define	PL_GameOverRequest(n)			(gameOverRequest = (n))

#define	PL_SetPlayerCap(player,n)		((player)->shapeCtrl->ctrlCap =(n))
#define	PL_SetPlayerEye(player,n)		((player)->shapeCtrl->ctrlEye =(n))
#define	PL_SetPlayerHand(player,n)		((player)->shapeCtrl->ctrlHand=(n))
#define	PL_SetPlayerSkin(player,n)		((player)->shapeCtrl->ctrlSkin=(n))

#define	PL_SetOriginalCameraMode(player)	\
				ChangeGameCamera((player)->sceneinf->camera, (player)->sceneinf->camera->orgmode, 1)


#define	RecoverMarioPower(n)			(playerWorks[0].recover+=(n)*4)


/********************************************************************************/
/*																				*/
/*	Ending routines.															*/
/*																				*/
/********************************************************************************/

extern void
DrawStaffRoll(void);

extern void
DoPeachProcess(void);

extern void
DoKinopioProcess(void);

extern ulong
CtrlPeachFace(int code, MapNode *node, void *data);

/********************************************************************************/
/*																				*/
/*	Player animation suport routines.											*/
/*																				*/
/********************************************************************************/

extern int
PL_IsLast1AnimeFrame(PlayerPtr player);

extern int
PL_IsLast2AnimeFrame(PlayerPtr player);

extern int
PL_SetAnimation(PlayerPtr player, int anime_id);

extern int
PL_SetVariableAnime(PlayerPtr player, int anime_id, long speed);

extern void
PL_SetAnimeFrame(PlayerPtr player, short frame);

extern int
PL_CheckAnimeFrame(PlayerPtr player, short frame);

extern int
PL_PresetWaistAnime(PlayerPtr player);

extern short
PL_GetWaistAnimeY(PlayerPtr player);

extern short
PL_GetWaistTranslation(StrategyPtr stratp, short angle, SVector position);

/********************************************************************************/
/*																				*/
/*	Change player status routines.												*/
/*																				*/
/********************************************************************************/

extern int
PL_ChangePlayerTriJump(PlayerPtr player);

extern int
PL_ChangePlayerJumping(PlayerPtr player, ulong status, ulong param);

extern int
PL_ChangePlayerTaking(PlayerPtr player, ulong status, ulong param);

extern int
PL_ChangePlayerDropping(PlayerPtr player, ulong status, ulong param);

extern int
PL_ChangePlayerDamage(PlayerPtr player, ulong status, ulong param, short damage);

extern int
PL_CheckAllMotions(PlayerPtr player);

extern int
PL_CheckAllHoldMotions(PlayerPtr player);

extern int
PL_ChangeFieldMode(PlayerPtr player);

extern int
PL_ChangeWaterMode(PlayerPtr player);

extern int
PL_ChangePlayerStatus(PlayerPtr player, ulong status, ulong auxinfo);


/********************************************************************************/
/*																				*/
/*		Player control utility routines.										*/
/*																				*/
/********************************************************************************/

extern void
PL_StartSoundEffect(PlayerPtr player, ulong code, ulong type);

extern void
PL_StartJumpVoice(PlayerPtr player);

extern void
PL_SetSpeedVolum(PlayerPtr player);

extern void
PL_SpecialEffect(PlayerPtr player, ulong sound, int jumpsink);

extern void
PL_TrigSpecialEffect(PlayerPtr player, ulong sound, int jumpsink);

extern void
PL_StartLandingEffect(PlayerPtr player, ulong sound);

extern void
PL_TrigStartLandingEffect(PlayerPtr player, ulong sound);

extern void
PL_StartDowningEffect(PlayerPtr player, ulong sound);

extern void
PL_TrigStartDowningEffect(PlayerPtr player, ulong sound);

extern void
PL_StartJumpingEffect(PlayerPtr player, ulong sound, ulong voice);



extern void
PL_SetPlayerVelocity(PlayerPtr player, float speed);

extern int
PL_GetSlipCode(PlayerPtr player);

extern ulong
PL_CheckGroundSurface(PlayerPtr player);

extern BGCheckData *
PL_CheckWallPlane(FVector position, float offset, float radius);

extern float
PL_CheckRoofPlane(FVector position, float ground, BGCheckData **plane);

extern int
PL_IsFrontSlip(PlayerPtr player, int backflag);

extern int
PL_IsSlipStart(PlayerPtr player);

extern int
PL_IsSlipLimit(PlayerPtr player);

extern int
PL_IsJumpMiss(PlayerPtr player);

extern float
PL_CheckPlayerAround(PlayerPtr player, short angle, float dist);

extern short
PL_GroundGradient(PlayerPtr player, short offset);

extern void
PL_ResetSpecialCameraMode(PlayerPtr player);

extern int
PL_AttackProcess(PlayerPtr player);

extern int
CheckPlayerDialog(void);

extern int
CtrlPlayerDialog(int type);

extern short
PL_PlayerRunningSound(PlayerPtr player, short frame1, short frame2);

/********************************************************************************/
/*																				*/
/*	Player main routines.														*/
/*																				*/
/********************************************************************************/

extern int
PL_PlayerWaitMain(PlayerPtr player);

extern int
PL_PlayerMoveMain(PlayerPtr player);

extern int
PL_PlayerJumpMain(PlayerPtr player);

extern int
PL_PlayerSwimMain(PlayerPtr player);

extern int
PL_PlayerDemoMain(PlayerPtr player);

extern int
PL_PlayerSpecMain(PlayerPtr player);

extern int
PL_PlayerActnMain(PlayerPtr player);

extern ulong
PlayerControl(StrategyPtr strategy);

extern void
InitPlayer(void);

extern void
InitPlayerWorks(void);


/********************************************************************************/
/*																				*/
/*	Include files.																*/
/*																				*/
/********************************************************************************/

#include "physics.h"
#include "collision.h"
#include "game.h"

#endif
