/*************************************************************************
 *
 * render.h
 *
 *************************************************************************
 *
 * scene rendering code
 *
 *************************************************************************/

#ifndef RENDER_H_INCLUDED
#define RENDER_H_INCLUDED

/*
 * includes
 */

#include "ult_64.h"
#include "defs.h"
#include "main.h"
#include "resman.h"
#include "n64res.h"

/*
 * defines
 */

#define CROWD_START_LOOP		1
#define CROWD_STOP_LOOP			2
#define CROWD_FRAME_DELAY		3


#define NEAR_Z			50.0
#define FAR_Z			16384.0

#define LINE_RENDER_MODE	G_RM_AA_OPA_SURF
#define LINE_RENDER_MODE2	G_RM_AA_OPA_SURF2
#define FLOOR_RENDER_MODE	G_RM_OPA_SURF
#define FLOOR_RENDER_MODE2	G_RM_OPA_SURF2
#define STAR_RENDER_MODE	G_RM_AA_XLU_SURF
#define STAR_RENDER_MODE2	G_RM_AA_XLU_SURF2
#define LIGHT_RENDER_MODE	G_RM_XLU_SURF
#define LIGHT_RENDER_MODE2	G_RM_XLU_SURF2
#define CROWD_RENDER_MODE	G_RM_OPA_SURF
#define CROWD_RENDER_MODE2	G_RM_OPA_SURF2
#define WALL_RENDER_MODE	G_RM_AA_OPA_SURF
#define WALL_RENDER_MODE2	G_RM_AA_OPA_SURF2

#define NUM_RENDER_BITS		8
#define RENDER_FLAGS_LINES	(1<<0)
#define RENDER_FLAGS_CROWD	(1<<1)
#define RENDER_FLAGS_PLAYERS	(1<<2)
#define RENDER_FLAGS_WALLS	(1<<3)
#define RENDER_FLAGS_FLOOR	(1<<4)
#define RENDER_FLAGS_BOARDS	(1<<5)
#define RENDER_FLAGS_BIGSCISSOR	(1<<6)
#define RENDER_FLAGS_NUMS	(1<<7)
#define RENDER_FLAGS_DISCO	(1<<8)

/*
 * typedefs
 */

/*
 * structures
 */

/*
 * globals
 */

extern unsigned short *worldPal;

extern unsigned long		renderFlags;

extern float			theta;
extern float			theta2;
extern float			camPosX,camPosY,camPosZ;
extern float			camDirX,camDirY,camDirZ;
extern float			currentD;
extern long			camMat[9];
extern int			crowdFlags;

/*
 * function prototypes
 */

extern void RenderScene(dyn *d,int draw_buffer,Gfx **gl);
extern void RenderInit(struct openSet *);
extern void RenderClose(void);
extern int VertexProject(int x,int y,int z,int *xx,int *yy,int *zz);
extern int VertexProject2(int x,int y,int z,int *xx,int *yy,int *zz,dyn *d);
extern void GammaPalette(unsigned short *p);
extern int FindClosestColour(unsigned short *p,int r,int g,int b,int minI,int maxI);

extern void FilterTexture(unsigned char *org,unsigned short *pal,
                          unsigned char *newtex,int sx,int sy,int minI,int maxI);
extern void ResampleBitmap(unsigned char *src,int sx,int sy,
                           unsigned char *dest,int dx,int dy,
			   unsigned short *pal);

extern void CrowdAnimate(void);
extern void CrowdStartCheer(int ticks);
extern void CrowdAnimate(void);

extern void LogoStartScroll(void);
extern void LogoProcess(void);

#endif
