/*************************************************************************
 *
 * main.h
 *
 *************************************************************************
 *
 * global structures and variables from main.c
 *
 *************************************************************************/

#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED

/*
 * includes
 */

#include "ult_64.h"
#include <PR/sched.h>
#include <PR/ramrom.h>
#include "defs.h"

/*
 * defines
 */

#define PROCESS_DEAD		0
#define PROCESS_RUNNING	1
#define PROCESS_FREEING	2

#define VIDMODE_INTRO 0
#define VIDMODE_SHELL 1
#define VIDMODE_GAME  2

#define projection project[0]
#define BallProject project[1]
#define ProjectLeft project[0]
#define ProjectRight project[1]


/*
 * typedefs
 */

/*
 * structures
 */

typedef struct _dyn
{
	Mtx		identity;
	Mtx		project[2];
	Mtx		viewing;
	Mtx		lamps;
	Mtx		starMats[4];
	Mtx		recvMat;
	Mtx		FreeThrowNet;
	Mtx		shadowMats[10];
	Mtx		PostMats[4];
	Mtx		ballMats[4];
	Mtx		cameraRotationMat;
	Mtx		rowMats[16];

		Mtx	PointMats[32];			// Temporary for Mike's point indicators - Phil.

		Mtx	TgtMats[10];	// NJS: Temp mats for plotting the player target locations

	Mtx		shellOrtho;
	Mtx		shellFlip;
	Mtx		shellLines[4];
	Mtx		trophyMat;

	Gfx		*ShellList;
	Gfx		glist[GLIST_LEN];
} dyn;

typedef struct _process
{
	void	(*Open)(void *parms);
	void	(*AI)(signed int *ctrl);
	void	(*Render)(dyn *d,int draw_buffer,Gfx **gl);
	void	(*Close)(void *parms);
	int	status;
	s8
		GameProc,
		VideoMode;
	s16
		ScreenX,
		ScreenY;
	s8
		StepMode,
		SwapScrs;
	int	freeDelay;
} process;

/*
 * globals
 */

extern process		*currentProcess;

extern int		frame;
extern int		freshScreen;

extern u16		*cfb[2];
extern u16		*dfb;

extern int		dbuf;
extern dyn		*dynamicp;

extern u32
	SfxVolume;

extern volatile s32
	PreNMI;


extern s8
	DumpGfxLoaded;

void LoadDumpGfx();
void FreeDumpGfx();


/*
 * function prototypes
 */


#endif
