#ifndef  CLIB_GAMES_PROTOS_H
#define  CLIB_GAMES_PROTOS_H

/*
**   $VER: games_protos.h 0.4 (04.11.96)
**   Includes Release xx.xx
**
**   C prototypes.
**
**   (C) Copyright 1996 DreamWorld Productions.
**       All Rights Reserved
*/

#ifndef  GAMES_GMS_H
#include <games/games.h>
#endif

#ifndef  EXEC_TYPES_H
#include <exec/types.h>
#endif

#ifndef  EXEC_TASKS_H
#include <exec/tasks.h>
#endif

/* Standard functions */

ULONG Init_GPI(UWORD GPI_ID);
ULONG Remove_GPI(UWORD GPI_ID);

void  InitJoyPorts(void);
ULONG Read_Mouse(UWORD PortName);
ULONG Read_JoyPort(UWORD Portname, UWORD ReturnType);
ULONG Read_JoyStick(UWORD PortName);
ULONG Read_JoyPad(UWORD PortName);
ULONG Read_SegaPad(UWORD PortName);
ULONG Read_Analog(UWORD PortName);
ULONG Read_Key(struct KeyStruct *);

ULONG FastRandom(UWORD Range);
ULONG SlowRandom(UWORD Range);
void  Wait_LMB(void);
void  Wait_Fire(UWORD PortName);
void  Wait_Time(UWORD MicroSeconds);

void  Add_InputHandler(void);
void  Rem_InputHandler(void);
void  Add_Interrupt(APTR Interrupt, UWORD IntNum, UWORD IntPri);
void  Rem_Interrupt(APTR IntBase);

APTR  SmartLoad(char *FileName, APTR Destination, ULONG Password,
	ULONG MemType);
APTR  QuickLoad(char *FileName, APTR Destination, ULONG MemType);
APTR  SmartUnpack(APTR Source, APTR Destination, ULONG Password,
	ULONG MemType);
ULONG SmartSave(char *FileName, APTR Source, APTR SrcLength);
void  SetUserPrefs(char *PrefsName);
ULONG UnpackPic(APTR Source, struct Picture *);
ULONG LoadPic(struct Picture *);
APTR  GetPicInfo(struct Picture *);
APTR  AllocMemBlock(ULONG Size, ULONG MemType);
void  FreeMemBlock(APTR MemBlock);
void  FreePic(struct Picture *);

/* Screens.GPI functions */

ULONG Add_Screen(APTR GameScreen);
ULONG Add_ScreenTags(ULONG, ULONG, ULONG, ...);

void  Delete_Screen(struct GameScreen *);
void  Show_Screen(struct GameScreen *);
APTR  Hide_Screen(void);
void  ReturnToOS(void);
void  AutoOSReturn(void);
void  SwapBuffers(struct GameScreen *);
void  Wait_VBL(void);
void  Wait_OSVBL(void);
void  Wait_ORVBL(void);
void  Wait_RastLine(WORD LinePosition);
void  Refresh_Screen(struct GameScreen *);
void  Remake_Screen(struct GameScreen *);
void  Move_Picture(struct GameScreen *);
void  Reset_Picture(struct GameScreen *);

/* Palette alteration functions */

UWORD Update_Palette(struct GameScreen *);
UWORD ColourMorph(struct GameScreen *, UWORD FadeState, UWORD Speed,
	ULONG StartColour, ULONG AmtColours, ULONG SrcColour,
	ULONG DestColour);
UWORD ColourToPalette(struct GameScreen *, UWORD FadeState, UWORD Speed,
	ULONG StartColour, ULONG AmtColours, APTR Palette, ULONG RRGGBB);
UWORD PaletteMorph(struct GameScreen *, UWORD FadeState, UWORD Speed,
	ULONG StartColour, ULONG AmtColours, APTR SrcPalette,
	APTR DestPalette);
UWORD PaletteToColour(struct GameScreen *, UWORD FadeState, UWORD Speed,
	ULONG StartColour, ULONG AmtColours, APTR Palette, ULONG RRGGBB);
void  Change_Colours(struct GameScreen *, UWORD FadeState, APTR Colours,
	UWORD StartColour, UWORD AmtColours);
void  Blank_Colours(struct GameScreen *);
void  UpdateRGB12(struct GameScreen *, UWORD Colour, UWORD RGB);
void  UpdateRGB24(struct GameScreen *, ULONG Colour, ULONG RRGGBB);

/* Rasterlist functions */

ULONG Init_RasterList(struct GameScreen *);
void  Update_RasterList(struct GameScreen *);
void  Update_RasterCommand(struct GameScreen *, APTR Command);
void  Update_RasterCommands(struct GameScreen *, APTR Command, UWORD Amount);
void  Update_RasterLines(struct GameScreen *);
void  Remove_RasterList(struct GameScreen *);
void  Hide_RasterList(struct GameScreen *);
void  Show_RasterList(struct GameScreen *);

/* Sprite functions */

ULONG Init_Sprite(struct GameScreen *, struct Sprite *);
void  Update_Sprite(struct GameScreen *, struct Sprite *);
void  Move_Sprite(struct GameScreen *, struct Sprite *);
void  Hide_Sprite(struct GameScreen *, UWORD SpriteNum);
void  Update_SpriteList(APTR SpriteList);
void  Hide_SpriteList(APTR SpriteList);
void  Remove_AllSprites(void);
void  Return_AllSprites(void);
void  Free_Sprite(struct Sprite *);

/* Blitter.GPI functions */

ULONG AllocBlitter(void);
void  FreeBlitter(void);
ULONG Init_BOB(struct GameScreen *, struct BOB *);
void  Free_BOB(struct BOB *);
void  Draw_BOB(struct GameScreen *, struct BOB *);
void  Draw_BOBList(struct GameScreen *, LONG *BOBList[]);
void  Draw_Line(struct GameScreen *, UWORD Buffer, UWORD StartX,
	UWORD StartY, UWORD EndX, UWORD EndY, ULONG Colour);
void  Draw_Pixel(struct GameScreen *, UWORD Buffer, UWORD XCoord,
	UWORD YCoord, ULONG Colour);
void  Draw_PixelList(struct GameScreen *, UWORD Buffer, WORD *PixelList[]);
void  Clear_BOB(struct GameScreen *, struct BOB *);
void  CopyBuffer(struct GameScreen *, UWORD SrcBuffer, UWORD DestBuffer);
void  ClrScreen(struct GameScreen *, UWORD Buffer);
void  ClrArea(struct GameScreen *, UWORD StartX, UWORD StartY, UWORD EndX,
	UWORD EndY);

APTR  Init_RestoreList(UWORD AmtBuffers, UWORD Entries);
void  Free_RestoreList(struct RestoreList *);
void  Reset_RestoreList(struct RestoreList *);
void  Restore_List(struct GameScreen *, struct RestoreList *);
void  CleanUp_RestoreList(struct GameScreen *, struct RestoreList *);

ULONG Init_Map(struct GameScreen *, struct Map *);
void  Draw_Map(struct GameScreen *, struct Map *);
void  Draw_MapArea(struct GameScreen *, struct Map *);
void  Draw_MapEdge(struct GameScreen *, struct Map *);
void  Free_Map(struct Map *);

/* Sound.GPI functions */

ULONG AllocAudio(void);
void  FreeAudio(void);
ULONG InitSound(struct Sound *);
void  FreeSound(struct Sound *);
UWORD CheckChannel(UWORD ChannelName);

void  PlaySound(struct Sound *);
void  PlaySoundDAC1(struct Sound *);
void  PlaySoundDAC2(struct Sound *);
void  PlaySoundDAC3(struct Sound *);
void  PlaySoundDAC4(struct Sound *);
void  PlaySoundPri(struct Sound *);
void  PlaySoundPriDAC1(struct Sound *);
void  PlaySoundPriDAC2(struct Sound *);
void  PlaySoundPriDAC3(struct Sound *);
void  PlaySoundPriDAC4(struct Sound *);

void  SetVolume(UWORD Channel, UWORD Volume);
void  FadeVolume(UWORD Channel);
void  StopSound(struct Sound *);
void  StopChannel(UWORD Channel);

#endif /* CLIB_GAMES_PROTOS_H */
