/* Copyright (C) 1994-2003 Revolution Software Ltd * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * $Header$ */ //============================================================================= // // Filename : driver96.h // Created : 6th August 1996 // By : P.R.Porter // // Summary : This include file defines all interfaces to the Revolution // driver96 system. All game code which requires driver // functions should simlply include this file. // // Version Date By Description // ------- --------- --- ----------------------------------------------- // 1.0 12-Sep-96 PRP Initial drivers include file - with utypes.h! // // 1.1 17-Sep-96 PRP screenWide and screenDeep made available to the // game engine. // // 1.2 18-Sep-96 PRP Mouse functions added. The _mouseEvent struct // is made visible to the game engine, and the // function prototype for getting a mouse event // from the queue has been added. Also, filename // in macro for driver error reporting is fixed. // // 1.3 19-Sep-96 PRP Interface to keyboard functions added. Also, // removed references to bool which is not // allowed by the cpp compiler. // // 1.4 19-Sep-96 PRP Fix definition of MouseEvent() and make the // rderror variable static. // // 1.5 20-Sep-96 PRP Added interface to console functions. // // 1.6 23-Sep-96 PRP Removed console functions from drivers! // // 1.7 25-Sep-96 PRP Added interface to sprite drawing functions. // RenderScreen changed so that the drawing offset // is not passed in. This is now calculated from // SetScrollTarget, and the number of frames we // are going to render in the next game cycle. // // 1.8 26-Sep-96 PRP Moved the screen drawing and scrolling code // to render.c for clarity. Changed the mouse // coordinates to be relative to the top left // corner of the game screen and removed the mouse // position from the log. // // 1.9 09-Oct-96 PRP Defined SOFTWARE_SCREEN_BUFFER in here so that // all of the drivers can use it, and the game // engine will know what's going on! // // 1.10 28-Oct-96 PRP DrawSprite has changed. There are now flags to // describe whether the sprite is compressed, // transparent or displayed from the top left // corner of the screen as opposed to the top left // corner of the background. // // 1.11 29-Oct-96 PRP Naming of RDSPR_DISPLAYALIGN fixed in header! // // 1.12 01-Nov-96 PRP Added compression type, RDSPR_SPRITECOMPRESSION, // and increased the size of the parameter passed // to DrawSprite so up to eight compression types // can be defined. // Added functions to mouse.c for animating mouse // pointers. Interface to functions put in here.. // // 1.13 07-Nov-96 PRP Added RDERR_GOFULLSCREEN as a return error for // creating the primary surface on a screen // which is not in 8bpp mode. Also, made it so // sprite drawing is passed a structure with // all of the sprite parameters in, rather than // the individual values passed. // When setting up the screen display/resolution // you should now specify whether you want the // game to run in full screen mode or in a window. // // 1.14 15-Nov-96 PRP Added menubar code into drivers. // // 1.15 21-Nov-96 PRP Changed the interface to the DrawLine function. // // 1.16 25-Nov-96 PRP Added a function to set the Luggage animation. // // 1.17 25-Nov-96 PRP Added functions to palette.c which create // match tables, and match rgb values to palette // indeces - and new error messages // // 1.18 26-Nov-96 PRP Added error - RDERR_INVALIDSCALING which will // be used when sprites are drawn with a scaling // value outside of the range 0 .. s .. 512 // // 1.19 29-Nov-96 PRP Added timing information to be referenced by // the game engine. Also implemented palette // fading with new functions added! // // 1.20 03-Dec-96 PRP Sound driver functions added. It is now // possible to play speech. // // 1.21 05-Dec-96 PRP BS2_SetPalette changed so that the palette can // be realized immediately or later when fading // is called. // // 1.22 05-Dec-96 PRP Added sound driver functions for dealing with // sound fx. // // 1.23 09-Dec-96 PRP Changed the UpdatePaletteMatchTable to take // a pointer rather than a filename. // // 1.24 19-Dec-96 PRP Changed the sound system functions to add // volume and pan position. Also, added a flag // to the fx player for looping. // // 1.25 27-Jan-97 PRP Changed the call to render parallax, to define // which layer is to be rendered. Also, added // the RDBLTFX_ equates for how the rendering // engine works. There are new functions to // initialise and close the background layers // which need to be called at the start and end // of a room. // // 1.26 10-Feb-97 PRP Changed the direct draw error reporting calls, // and added new return error codes. // // 1.27 11-Feb-97 PRP Added the blending value into the spriteInfo // structure. // // 1.28 12-Feb-97 PRP Added set and clear blt effects functions. // // 1.29 06-Mar-97 PRP Added error return code RDERR_LOCKFAILED for // failing to lock the front buffer when trying // to write a screen shot. Also, added definition // of _pcxHeader. // // 1.30 17-Mar-97 PRP Added RDFADE_BLACK as a return value for the // GetPaletteStatus() function. // // 1.31 18-Mar-97 PRP Added InitialiseRenderCycle() to be called // before the rendering loop is entered. This // resets the timers. // // 1.32 20-Mar-97 PRP Added reference to ResetRenderEngine() to be // called upon entry to the control panel. // // 1.33 24-Mar-97 PRP Added sprite drawing functions for hardware // utilisation. // // 1.34 24-Mar-97 PRP Added return code RDERR_SURFACELOST // // 1.35 01-Apr-97 PRP Added new sprite type RDSPR_RLE256FAST // // 1.36 04-Apr-97 PRP Changed the prototype for InitialiseWindow. // // 1.37 07-Apr-97 PRP Added function prototypes and error values // for the switching between the hardware and // software renderers. // // 1.38 07-Apr-97 PRP Added function prototypes and error values // for the shadow masking engine. // // 1.39 08-Apr-97 PRP Added reference to PlaySmacker() // // 1.40 09-Apr-97 PRP Added references to the functions which play music // streaming it from the CD. // // 1.41 10-Apr-97 PRP Added defines for mouse flashing or not. Also // changed function call to SetMouseAnim to // include this parameter. // // 1.42 11-Apr-97 PRP EraseSoftwareScreenBuffer added. // // 1.43 11-Apr-97 JEL In render.c changed EraseSoftwareRenderBuffer to EraseSoftwareScreenBuffer // // 1.44 11-Apr-97 CJR Added palCopy definition for use in game engine. // // 1.45 22-Apr-97 PRP Added decompression error return value. // // 1.46 28-Apr-97 PSJ Added members to _wavHeader structure. // // 1.47 21-May-97 PRP Added the _movieTextObject data structure. This will // be used in the call to PlaySmacker to define if there is any // text to be displayed and when. // // 1.48 21-May-97 PRP Fixed the pointer to the text sprite within the movie // text object structure. // // 1.49 22-May-97 JEL Fixed PlaySmacker for a movieTextObject parameter of NULL // // 1.50 29-May-97 PSJ Added the _drvStatus data structure. This will allow the // state of all the drivers globals to be passed between dlls, // exectuables and threads. // // 1.51 29-May-97 PSJ Added the _drvSoundStatus data structure and move _drvStatus to _drvDrawStatus. // This will allow the state of the drivers drawing globals and audio globals to // be passed between dlls, exectuables and threads. // Also included ddraw.h dsound.h and mmsystem.h in this file. // // 1.52 29-May-97 PRP Added reference to the DisableQuitKey function, // which removes the ability to press control-Q to quit // the game. // // 1.53 04-Jun-97 PRP Changed the funtion call to PlaySmacker. Now includes // a wav to lead out at the end of the smack file. // // 1.55 06-Jun-97 PSJ Added GetFxVolume and SetFxVolume for fx master volume control. // Added GetSpeechVolume and SetSpeechVolume for speech master volume. // // 1.56 09-Jun-97 PSJ Added GetMusicVolume and SetMusicVolume. // // 1.57 10-Jun-97 PSJ Added MuteMusic, MuteFx, MuteSpeech, IsMusicMute, IsFxMute and Is SpeechMute // // 1.58 12-Jun-97 PSJ Added PlayCompSpeech to load and play a compressed wave. // // 1.59 12-Jun-97 PSJ Added GetRenderType to return the type of rendering // currently being used. // // 1.60 13-Jun-97 PRP Added functions to set and clear shadow mask status. // // 1.61 26-Jun-97 PSJ Added AmISpeaking to check for lip syncing spots in the speech. // Also added RDSE_QUIET and RDSE_SPEAKING as return values. // // 1.62 26-Jun-97 PSJ Added PauseSpeech and UnpauseSpeech. // // 1.63 26-Jun-97 PRP Added DimPalette. // // 1.64 27-Jun-97 PRP Moved definition of GrabScreenShot in from // d_draw.h // // 1.65 15-Jul-97 PRP Added functions to pause and unpause speech. // // 1.66 16-Jul-97 PRP Added a speech pointer to the movieTextObject structure. // // 1.67 16-Jul-97 PSJ Added GetCompSpeechSize and PreFetchSpeech // // 1.68 21-Jul-97 PRP Added new FX type for sequence lead in and new function // to pause sound effects apart from the lead in music. // // 1.73 22-Jul-97 PRP Added define to ensure DirectX 3.0 functionality used // under DirectX 5.0 drivers :) // // 1.74 23-Jul-97 JEL Added CheckForMouseEvents() to return no. of events outstanding // // 1.75 30-Jul-97 PSJ Added MusicTimeRemaining() to return time left for current tune. // // 1.77 06-Aug-97 PSJ Updated Get and Set scroll SoundStatus. // // 1.78 07-Aug-97 PSJ Added SetWindowName to set the name of the window. // // 1.79 12-Aug-97 PSJ Added ReverseStereo. // // 1.80 13-Aug-97 PRP Added CloseMenuImmediately. // // 1.81 13-Aug-97 PSJ Added GetKeyStatus // // 1.82 13-Aug-97 PRP Added IsFxOpen. // // 1.83 15-Aug-97 PRP SetFxVolumePan added to update a sample on the fly. // // 1.84 15-Aug-97 PRP SetFxIdVolume added. // // 1.85 22-Aug-97 PSJ Added type RDSE_LEADOUT // // Functions // --------- // // --------------------------------------------------------------------------- // ------------------------------- d_draw.c ---------------------------------- // --------------------------------------------------------------------------- // // int32 InitialiseDisplay(int32 width, int32 height, int32 colourDepth, int32 windowType) // // Initialises the directDraw display with the sizes and colour depths passed // in. The windowType is either RD_FULLSCREEN or RD_WINDOWED depending upon // whether the app is to run in a window or not. If RD_WINDOWED is selected, // the runction may returnRDERR_GOFULLSCREEN which implies that the window // size and colour depth requested is not compatible with the current // settings. // If the required display cannot be set up, then an error code is // returned, otherwise zero. // // --------------------------------------------------------------------------- // // int32 ResetDisplay(void) // // Closes down the directDraw sub-system and resets the display back to it's // original size. Returns an RD code. // // --------------------------------------------------------------------------- // // int32 EraseBackBuffer(void) // // Fills the back buffer with palette colour zero. Returns an RD code. // // --------------------------------------------------------------------------- // // void InterpretDirectDrawError(int32 error) // // This function is passed the pointer to a direct draw error code, and // translates this into a revolution driver error code. It also reports the // error. // // --------------------------------------------------------------------------- // // int32 SetBltFx(void) // // Sets the edge blend and arithmetic stretching effects. // // --------------------------------------------------------------------------- // // int32 ClearBltFx(void) // // Clears the edge blend and arithmetic stretching effects. // // --------------------------------------------------------------------------- // // int32 RenderHard(void); // // Turns on the hardware renderer. Returns an error if the // hardware is not capable of rendering. // // --------------------------------------------------------------------------- // // int32 RenderSoft(void); // // Turns on the software renderer. Returns an error if it // is already on. // // --------------------------------------------------------------------------- // // int32 GetRenderType(void) // // Returns the type of rendering currently being used. // 0 = H/W rendering, 1 = S/W Rendering + BltFxOFF, 2 = S/W Rendering + BltFxON // // --------------------------------------------------------------------------- // // int32 PlaySmacker(char *filename) // // Plays the smacker file, filename. // // --------------------------- rdwin.c --------------------------------------- // --------------------------------------------------------------------------- // // int32 ServiceWindows(void) // // This function should be called at a high rate ( > 20 per second) to service // windows and the interfaces it provides. // // --------------------------------------------------------------------------- // // int32 CloseAppWindow(void) // // Removes all windows hooks from the application. // // --------------------------------------------------------------------------- // // void SetWindowName(const char *windowName) // // Set the window name to windowName and stores this name in gameName for future // use. // // --------------------------------------------------------------------------- // --------------------------------- language.c ------------------------------ // --------------------------------------------------------------------------- // // int32 GetLanguageVersion(uint8 *version) // // This function modifies the 'version' passed in to be the current language. // The first time this function is called, it gets the language from the // version.inf file distributed on the game CD. It returns an RD error code // if this file cannot be opened, or the version cannot be obtained from it. // // --------------------------------------------------------------------------- // // int32 SetLanguageVersion(uint8 version) // // This function is useful for debugging. It sets the version to the one // passed in. // // --------------------------------------------------------------------------- // // int32 GetGameName(uint8 *name); // // Fills the string pointed to by name with the title of the game, depending // upon what the current language version is. // // -------------------------------------------------------------------------- // ------------------------------- palette.c -------------------------------- // -------------------------------------------------------------------------- // // void BS2_SetPalette(int32 startEntry, int32 noEntries, uint8 *colourTable, uint8 setNow) // // Sets the palette from position startEntry for noEntries, to the data // pointed to by colourTable. To set the palette immediately pass // RDPAL_INSTANT. If you want to fade later, pass RDPAL_FADE. // // -------------------------------------------------------------------------- // // int32 UpdatePaletteMatchTable(uint8 *data) // // Uses the current palCopy to create a table of palette indeces which will // be searched later for a quick palette match - only if NULL is passed in // as the data. If a pointer to valid data is passed in, the palette match // table is copied from that data. // // -------------------------------------------------------------------------- // // uint8 QuickMatch(uint8 r, uint8 g, uint8 b) // // Returns the palette index of the closest matching colour in the palette // to these RGB values. // // -------------------------------------------------------------------------- // // int32 FadeUp(float time) // // Fades the palette up from black to the current palette in time. // // -------------------------------------------------------------------------- // // int32 FadeDown(float time) // // Fades the palette down to black from the current palette in time. // // -------------------------------------------------------------------------- // // uint8 GetFadeStatus(void) // // Returns the fade status which can be one of RDFADE_UP, RDFADE_DOWN or // RDFADE_NONE. // // // -------------------------------------------------------------------------- // -------------------------------- mouse.c --------------------------------- // -------------------------------------------------------------------------- // // _mouseEvent *MouseEvent(void) // // If there is a mouse event in the queue, a valid pointer is returned. // Otherwise, NULL. // // -------------------------------------------------------------------------- // // int32 SetMouseAnim(uint8 *ma, int32 size, int32 mouseFlash) // // A pointer to a valid mouse animation is passed in, along with the size of // the header plus sprite data. Remember to check that the function has // successfully completed, as memory allocation is required. When the mouse // animation has been set, the mouse sprite does not need to be kept in the // memory manager. // Pass NULL in to clear the mouse sprite. // mouseFlash should be either RDMOUSE_FLASH or RDMOUSE_NOFLASH // defining whether to pulse the mouse or not. // // -------------------------------------------------------------------------- // // int32 SetLuggageAnim(uint8 *la, int32 size) // // A pointer to a valid luggage animation is passed in, along with the size of // the header plus sprite data. Remember to check that the function has // successfully completed, as memory allocation is required. // Pass NULL in to clear the luggage sprite. Luggage sprites are of the same // format as mouse sprites. // // -------------------------------------------------------------------------- // // int32 AnimateMouse(void) // // This function animates the current mouse pointer. If no pointer is // currently defined, an error code is returned. // // // -------------------------------------------------------------------------- // ------------------------------ keyboard.c -------------------------------- // -------------------------------------------------------------------------- // // BOOL KeyWaiting(void) // // This function returns TRUE if there is an unprocessed key waiting in the // queue, FALSE otherwise. // // -------------------------------------------------------------------------- // // int32 ReadKey(_keyboardEvent *key) // // Sets the value of key passed in to the current waiting key. If there is // no key waiting, an error code is returned. // // // -------------------------------------------------------------------------- // ------------------------------- sprite.c --------------------------------- // -------------------------------------------------------------------------- // // int32 DrawSprite(_spriteInfo *s) // // Draws a sprite onto the screen of the type defined in the _spriteInfo // structure. The _spriteInfo structure consists of the following elements: // // int16 x; // coords for top-left of sprite // int16 y; // uint16 w; // dimensions of sprite (before scaling) // uint16 h; // uint16 scale; // scale at which to draw, given in 256ths // ['0' or '256' MEANS DON'T SCALE] // uint16 scaledWidth; // new dimensions // uint16 scaledHeight; // // uint16 blend // blending value. // uint16 type; // combination of the bits below // uint8 *data; // pointer to the sprite data // uint8 *colourTable; // pointer to 16-byte colour table - only // applicable to 16-col compression type // // WARNING: Sprites will only be drawn onto the background. Sprites will not // appear over the menubar areas. The mouse and menu drawing is treated // as a special case. // // The type of the sprite can be any of the following: // // if (RDSPR_TRANS) // The sprite has a transparent colour zero // if (RDSPR_NOCOMPRESSION) // The sprite data must not be compressed (slow to draw) // The RDSPR_DISPLAYALIGN bit may be set to draw the sprite // at coordinates relative to the top left corner of the // monitor. // else // Compression must be set as one of the following: // RDSPR_RLE16 // RDSPR_RLE256 // RDSPR_LAYERCOMPRESSION // else // The sprite has an opaque colour zero // RDSPR_NOCOMPRESSION must be set! // RDSPR_DISPLAYALIGN may be set to align the coordinates of the sprite // to the top left corner of the monitor. // // --------------------------------------------------------------------------- // // int32 CreateSurface(_spriteInfo *s, uint32 *surface) // // Creates a sprite surface in video memory (if possible) and returns it's // handle in surface. // // --------------------------------------------------------------------------- // // void DrawSurface(_spriteInfo *s, uint32 surface, ScummVM::Rect *clipRect) // // Draws the sprite surface created earlier. // // --------------------------------------------------------------------------- // // void DeleteSurface(uint32 surface) // // Deletes a surface from video memory. // // --------------------------------------------------------------------------- // // int32 OpenLightMask(_spriteInfo *s) // // Opens the light masking sprite for a room. // // --------------------------------------------------------------------------- // // int32 CloseLightMask(void) // // Closes the light masking sprite for a room. // // -------------------------------------------------------------------------- // ------------------------------- render.c --------------------------------- // -------------------------------------------------------------------------- // // int32 RenderParallax(_parallax *p) // // Draws a parallax layer at the current position determined by the scroll. // A parallax can be either foreground, background or the main screen. // // --------------------------------------------------------------------------- // // int32 CopyScreenBuffer(void) // // Copies the screen buffer to screen memory. This function should be called // when the drawing should be done to the back buffer. It only does this // when we are using a software screen buffer. // // --------------------------------------------------------------------------- // // int32 SetScrollTarget(int16 sx, int16 sy) // // Sets the scroll target position for the end of the game cycle. The drivers // will then automatically scroll as many times as it can to reach this // position in the allotted time. // // -------------------------------------------------------------------------- // // int32 InitialiseRenderCycle(void) // // Initialises the timers before the render loop is entered. // // -------------------------------------------------------------------------- // // int32 StartRenderCycle(void) // // This function should be called when the game engine is ready to start // the render cycle. // // -------------------------------------------------------------------------- // // int32 EndRenderCycle(BOOL *end) // // This function should be called at the end of the render cycle. If the // render cycle is to be terminated, the function sets *end to 1. Otherwise, // the render cycle should continue. // // -------------------------------------------------------------------------- // // int32 SetLocationMetrics(uint16 w, uint16 h) // // This function tells the drivers the size of the background screen for the // current location. // // -------------------------------------------------------------------------- // // int32 PlotPoint(uint16 x, uint16 y, uint8 colour) // // Plots the point x,y in relation to the top left corner of the background. // // -------------------------------------------------------------------------- // // int32 DrawLine(int16 x1, int16 y1, int16 x2, int16 y2, uint8 colour) // // Draws a line from the point x1,y1 to x2,y2 of the specified colour. // // -------------------------------------------------------------------------- // // int32 InitialiseBackgroundLayer(_parallax *p) // // This function should be called five times with either the parallax layer // or a NULL pointer in order of background parallax to foreground parallax. // // -------------------------------------------------------------------------- // // int32 CloseBackgroundLayer(void) // // Should be called once after leaving a room to free up video memory. // // -------------------------------------------------------------------------- // // int32 PlotDots(int16 x, int16 y, int16 count) // // Plots 'count' dots at the position x,y. // // -------------------------------------------------------------------------- // ---------------------------- menu.c -------------------------------------- // -------------------------------------------------------------------------- // // int32 ProcessMenu(void) // // This function should be called regularly to process the menuber system. // The rate at which this function is called will dictate how smooth the menu // system is. The menu cannot be drawn at a higher rate than the system // vbl rate. // // -------------------------------------------------------------------------- // // int32 ShowMenu(uint8 menu) // // This function brings the menu in to view. The choice of top or bottom menu // is defined by the parameter menu being either RDMENU_TOP or RDMENU_BOTTOM. // An error code is returned if the menu is already shown. // // -------------------------------------------------------------------------- // // int32 HideMenu(uint8 menu) // // This function hides the menu defined by the parameter menu. If the menu is // already hidden, an error code is returned. // // -------------------------------------------------------------------------- // // int32 SetMenuIcon(uint8 menu, uint8 pocket, uint8 *icon) // // This function sets a menubar icon to that passed in. If icon is NULL, the // pocket is cleared, otherwise, that icon is placed into pocket. The menu is // either RDMENU_TOP or RDMENU_BOTTOM. Valid error codes include // RDERR_INVALIDPOCKET if the pocket number does not exist. Initially, there // are 15 pockets. // // -------------------------------------------------------------------------- // // uint8 GetMenuStatus(uint8 menu) // // This function returns the status of the menu passed in menu. Return values // are RDMENU_OPENING, RDMENU_CLOSING, RDMENU_HIDDEN and RDMENU_SHOWN. // // // // -------------------------------------------------------------------------- // --------------------------- d_sound.c ------------------------------------ // -------------------------------------------------------------------------- // // int32 PreFetchCompSpeech(const char *filename, uint32 speechid, uint8 *wave) // // This function loads and decompresses speech sample 'speechid' from the // cluster 'filename' into 'wave'. 'wave' should contain the address of // preallocated memory large enough for speech to fit into // (see GetCompSpeechSize). // // -------------------------------------------------------------------------- // // int32 GetCompSpeechSize(const char *filename, uint32 speechid); // // This function returns the size that speech sample 'speechid' from cluster // 'filename' will be after it has been decompressed and had a wav header // added. Returns 0 for any error. // // -------------------------------------------------------------------------- // // int32 PlayCompSpeech(const char *filename, uint32 id, uint8 vol, int8 pan) // // This function loads, decompresses and plays the wav 'id' from the cluster // 'filename'. An error occurs if speech is already playing, or directSound // comes accross problems. 'volume' can be from 0 to 16. 'pan' can be from // -16 (full left) to 16 (full right). // id is the text line id used to reference the speech within the speech // cluster. // // -------------------------------------------------------------------------- // // int32 StopSpeechSword2(void) // // Stops the speech from playing. // // -------------------------------------------------------------------------- // // int32 GetSpeechStatus(void) // // Returns either RDSE_SAMPLEPLAYING or RDSE_SAMPLEFINISHED // // -------------------------------------------------------------------------- // // int32 AmISpeaking(void) // // Returns either RDSE_QUIET or RDSE_SPEAKING // // -------------------------------------------------------------------------- // // int32 PauseSpeech(void) // // Stops the speech dead in it's tracks. // // -------------------------------------------------------------------------- // // int32 UnpauseSpeech(void) // // Re-starts the speech from where it was stopped. // // -------------------------------------------------------------------------- // // int32 OpenFx(int32 id, uint8 *data) // // This function opens a sound effect ready for playing. A unique id should // be passed in so that each effect can be referenced individually. // // WARNING: Zero is not a valid ID. // // -------------------------------------------------------------------------- // // int32 PlayFx(int32 id, uint8 *data, uint8 vol, int8 pan, uint8 type) // // This function plays a sound effect. If the effect has already been opened // then *data should be NULL, and the sound effect will simply be obtained // from the id passed in. If the effect has not been opened, then the wav // data should be passed in data. The sound effect will be closed when it // has finished playing. // volume can be from 0 to 16. // pan can be from -16 (full left) to 16 (full right). // type is either RDSE_FXSPOT or RDSE_FXLOOP // // WARNING: Zero is not a valid ID // // -------------------------------------------------------------------------- // // int32 CloseFx(int32 id) // // This function closes a sound effect which has been previously opened for // playing. Sound effects must be closed when they are finished with, // otherwise you will run out of sound effect buffers. // // -------------------------------------------------------------------------- // // int32 ClearAllFx(void) // // This function clears all of the sound effects which are currently open or // playing, irrespective of type. // // -------------------------------------------------------------------------- // // int32 StreamMusic(uint8 *filename, int32 loopFlag) // // Streams music from the file defined by filename. The loopFlag should // be set to RDSE_FXLOOP if the music is to loop back to the start. // Otherwise, it should be RDSE_FXSPOT. // The return value must be checked for any problems. // // -------------------------------------------------------------------------- // // int32 StreamCompMusic(uint8 *filename, uint32 id, int32 loopFlag) // // Streams music 'id' from the cluster file 'filename'. The loopFlag should // be set to RDSE_FXLOOP if the music is to loop back to the start. // Otherwise, it should be RDSE_FXSPOT. // The return value must be checked for any problems. // // StreamCompMusic should not be used inconjunction with StreamMusic. // // -------------------------------------------------------------------------- // // void StopMusic(void) // // Fades out and stops the music. // // -------------------------------------------------------------------------- // // int32 PauseMusic(void) // // Stops the music dead in it's tracks. // // -------------------------------------------------------------------------- // // int32 UnpauseMusic(void) // // Re-starts the music from where it was stopped. // // --------------------------------------------------------------------------- // // void SetMusicVolume(uint8 vol) // // Set the volume of any future as well as playing (but not fading) music to // vol. vol is in the range of 0 to 16 with 0 being silent. // // --------------------------------------------------------------------------- // // uint8 GetMusicVolume(void) // // Returns the volume setting for music. // // --------------------------------------------------------------------------- // // void SetFxVolume(uint8 vol) // // Set the master volume of all fx' to vol. The fx' still have there own // volume setting as well as the master volume. vol is in the range 0 to 14 // with 0 being silent. // // --------------------------------------------------------------------------- // // uint8 GetFxVolume(void) // // Returns the master volume setting for fx'. // // --------------------------------------------------------------------------- // // void SetSpeechVolume(uint8 vol) // // Set the volume of any future as well as playing speech samples to vol. // vol is in the range of 0 to 14 with 0 being silent. // // --------------------------------------------------------------------------- // // uint8 GetSpeechVolume(void) // // Returns the volume setting for speech. // // --------------------------------------------------------------------------- // // void MuteMusic(uint8 mute) // // If mute is 0, the music volume is restored to the last set master level. // otherwise the music is muted (volume 0). // // --------------------------------------------------------------------------- // // void MuteFx(uint8 mute) // // See MuteMusic(uint8). // // --------------------------------------------------------------------------- // // void MuteSpeech(uint8 mute) // // See MuteMusic(uint8). // // --------------------------------------------------------------------------- // // uint8 IsMusicMute(void) // // Returns the music's mute state, 1 if mute, 0 if not mute. // // --------------------------------------------------------------------------- // // uint8 IsFxMute(void) // // See IsMusicMute(). // // --------------------------------------------------------------------------- // // uint8 IsMusicMute(void) // // See IsMusicMute(). // // --------------------------------------------------------------------------- // // int32 MusicTimeRemaining(void) // // Returns the time left for the current tune. // // --------------------------------------------------------------------------- // // int32 ReverseStereo(void) // // Returns the time left for the current tune. // // --------------------------------------------------------------------------- // // int32 SetFxVolumePan(int32 id, uint8 vol, uint8 pan) // // Sets the volume and pan of the sample which is currently playing (id) // //============================================================================= #ifndef DRIVER96_H #define DRIVER96_H #include #include #include #include "common/scummsys.h" #include "base/engine.h" // for warning() #include "common/system.h" #include "common/rect.h" #ifdef __cplusplus extern "C" { #endif // // Defines // ------- // // defines specific to windows headers... #ifndef WIN32 #define SEM_FAILCRITICALERRORS 1 #define FILE_ATTRIBUTE_NORMAL 0x80 #define _MAX_PATH 260 #endif //Generic error codes #define RD_OK 0x00000000 #define RDERR_UNKNOWN 0x00000001 #define RDERR_INVALIDPOINTER 0x00000002 #define RDERR_OUTOFMEMORY 0x00000003 #define RDERR_INVALIDFILENAME 0x00000004 #define RDERR_READERROR 0x00000005 #define RDERR_WRITEERROR 0x00000006 #define RDERR_NOEMULATION 0x00000007 #define RDERR_LOCKFAILED 0x00000008 //Drawing error codes #define RDERR_VIDEOMODE 0x00010000 #define RDERR_COLOURDEPTH 0x00010001 #define RDERR_CANNOTFLIP 0x00010002 #define RDERR_RESTORELAYERS 0x00010003 #define RDERR_DDRAWNOEMULATION 0X00010004 #define RDERR_NOHARDWARE 0x00010005 #define RDERR_ALREADYON 0x00010006 #define RDERR_DECOMPRESSION 0x00010007 //Operating system error codes #define RDERR_CREATEWINDOW 0x00020000 #define RDERR_APPCLOSED 0x00020001 #define RDERR_GOFULLSCREEN 0x00020002 //Language and version error codes #define RDERR_OPENVERSIONFILE 0x00030000 #define RDERR_INVALIDVERSION 0x00030001 //Keyboard error codes #define RDERR_NOKEYWAITING 0x00040000 //Sprite drawing error codes #define RDERR_NOCLIPPING 0x00050000 #define RDERR_NOTIMPLEMENTED 0x00050001 #define RDERR_UNKNOWNTYPE 0x00050002 #define RDERR_INVALIDSCALING 0x00050003 #define RDERR_SURFACELOST 0x00050004 #define RDERR_NOTCLOSED 0x00050005 #define RDERR_NOTOPEN 0x00050006 #define RDERR_ALREADYCLOSED 0x00050007 // added for _console.cpp by khalek //Menubar error codes #define RDERR_INVALIDMENU 0x00060000 #define RDERR_INVALIDPOCKET 0x00060001 #define RDERR_INVALIDCOMMAND 0x00060002 //Palette fading error codes #define RDERR_FADEINCOMPLETE 0x00070000 //Sound engine error codes #define RDERR_DSOUNDCREATE 0x00080000 #define RDERR_DSOUNDCOOPERATE 0x00080001 #define RDERR_DSOUNDPBUFFER 0x00080002 #define RDERR_PRIMARYFORMAT 0x00080003 #define RDERR_SPEECHPLAYING 0x00080004 #define RDERR_SPEECHNOTPLAYING 0x00080005 #define RDERR_INVALIDWAV 0x00080006 #define RDERR_CREATESOUNDBUFFER 0x00080007 #define RDERR_LOCKSPEECHBUFFER 0x00080008 #define RDERR_FXALREADYOPEN 0x00080009 #define RDERR_NOFREEBUFFERS 0x0008000A #define RDERR_FXNOTOPEN 0x0008000B #define RDERR_FXFUCKED 0x0008000C #define RDERR_INVALIDID 0x0008000D // Language codes #define ENGLISH 0x00 #define AMERICAN 0x01 #define GERMAN 0x02 #define FRENCH 0x03 #define SPANISH 0x04 #define ITIALIAN 0x05 #define JAPANESE 0x06 #define SLOVAK 0x07 // Key codes #define RDKEY_ESCAPE 27 // Mouse button defines #define RD_LEFTBUTTONDOWN 0x01 #define RD_LEFTBUTTONUP 0x02 #define RD_RIGHTBUTTONDOWN 0x04 #define RD_RIGHTBUTTONUP 0x08 //Sprite defines #define RDSPR_TRANS 0x0001 #define RDSPR_BLEND 0x0004 #define RDSPR_FLIP 0x0008 #define RDSPR_SHADOW 0x0010 #define RDSPR_DISPLAYALIGN 0x0020 #define RDSPR_NOCOMPRESSION 0x0040 #define RDSPR_EDGEBLEND 0x0080 //This is the high byte part of the sprite type which defines what type of // compression is used, as long as RDSPR_NOCOMPRESSION is not defined. #define RDSPR_RLE16 0x0000 #define RDSPR_RLE256 0x0100 #define RDSPR_RLE256FAST 0x0200 //Rendering defines #define RD_SOFTWARESCREENBUFFER 0x01 //Windows defines #define RD_FULLSCREEN 0x01000000 #define RD_WINDOWED 0x01000001 //Fading defines #define RDFADE_NONE 0x00 #define RDFADE_UP 0x01 #define RDFADE_DOWN 0x02 #define RDFADE_BLACK 0x03 //Mouse defines #define RDMOUSE_NOFLASH 0x00 #define RDMOUSE_FLASH 0x01 //Menubar defines. #define RDMENU_TOP 0x00 #define RDMENU_BOTTOM 0x01 #define RDMENU_HIDDEN 0x00 #define RDMENU_SHOWN 0x01 #define RDMENU_OPENING 0x02 #define RDMENU_CLOSING 0x03 #define RDMENU_ICONWIDE 35 #define RDMENU_ICONDEEP 30 #define RDMENU_ICONSTART 24 #define RDMENU_ICONSPACING 5 #define RDMENU_MAXPOCKETS 15 #define RDMENU_MENUDEEP 40 #define RDSE_SAMPLEFINISHED 0 #define RDSE_SAMPLEPLAYING 1 #define RDSE_FXTOCLEAR 0 #define RDSE_FXCACHED 1 #define RDSE_FXSPOT 0 #define RDSE_FXLOOP 1 #define RDSE_FXLEADIN 2 #define RDSE_FXLEADOUT 3 #define RDSE_QUIET 1 #define RDSE_SPEAKING 0 #define RDPAL_FADE 0 #define RDPAL_INSTANT 1 //Blitting FX defines #define RDBLTFX_MOUSEBLT 0x01 #define RDBLTFX_FGPARALLAX 0x02 #define RDBLTFX_ARITHMETICSTRETCH 0x04 #define RDBLTFX_EDGEBLEND 0x08 #define RDBLTFX_SHADOWBLEND 0x10 #define RDBLTFX_FLATALPHA 0x20 #define RDBLTFX_GRADEDALPHA 0x40 #define RDBLTFX_ALLHARDWARE 0x80 // Max number of sound fx #define MAXFX 16 #define MAXMUS 2 // Key buffer size #define MAX_KEY_BUFFER 32 typedef int BOOL; #define TRUE 1 #define FALSE 0 // // Structure definitions // --------------------- // typedef struct { uint16 buttons; } _mouseEvent; typedef struct { uint16 ascii; int keycode; int modifiers; } _keyboardEvent; #if !defined(__GNUC__) #pragma START_PACK_STRUCTS #endif typedef struct { uint16 w; uint16 h; uint32 offset[2]; // 2 is arbitrary } GCC_PACK _parallax; #if !defined(__GNUC__) #pragma END_PACK_STRUCTS #endif // The _spriteInfo structure is used to tell the driver96 code what attributes // are linked to a sprite for drawing. These include position, scaling and // compression. typedef struct { int16 x; // coords for top-left of sprite int16 y; uint16 w; // dimensions of sprite (before scaling) uint16 h; uint16 scale; // scale at which to draw, given in 256ths ['0' or '256' MEANS DON'T SCALE] uint16 scaledWidth; // new dimensions (we calc these for the mouse area, so may as well pass to you to save time) uint16 scaledHeight; // uint16 type; // mask containing 'RDSPR_' bits specifying compression type, flip, transparency, etc uint16 blend; // holds the blending values. uint8 *data; // pointer to the sprite data uint8 *colourTable; // pointer to 16-byte colour table, only applicable to 16-col compression type } _spriteInfo; // This is the format of a .WAV file. Somewhere after this header is the string // 'DATA' followed by an int32 size which is the size of the data. Following // the size of the data is the data itself. typedef struct { uint32 riff; uint32 fileLength; uint32 wavID; uint32 format; uint32 formatLen; uint16 formatTag; uint16 channels; uint16 samplesPerSec; uint16 avgBytesPerSec; uint16 blockAlign; uint16 unknown1; uint16 unknown2; uint16 bitsPerSample; } _wavHeader; // This is the structure which is passed to the sequence player. // It includes the smack to play, and any text lines which are // to be displayed over the top of the sequence. typedef struct { uint16 startFrame; uint16 endFrame; _spriteInfo *textSprite; uint32 speechBufferSize; uint16 *speech; } _movieTextObject; typedef struct { uint8 manufacturer; uint8 version; uint8 encoding; uint8 bitsPerPixel; int16 xmin,ymin; int16 xmax,ymax; int16 hres; int16 vres; char palette[48]; char reserved; uint8 colourPlanes; int16 bytesPerLine; int16 paletteType; char filler[58]; } _pcxHeader; // // Function Prototypes // ------------------- // //----------------------------------------------------------------------------- // Display functions - from d_draw.c //----------------------------------------------------------------------------- extern int32 InitialiseDisplay(int16 width, int16 height, int16 colourDepth, int32 windowType); extern int32 EraseBackBuffer(void); extern void SetTransFx(void); extern void ClearTransFx(void); extern void SetBltFx(void); extern void ClearBltFx(void); extern void ClearShadowFx(void); extern void SetShadowFx(void); extern int32 GetRenderType(void); extern int32 PlaySmacker(char *filename, _movieTextObject *textObjects[], uint8 *musicOut); //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Windows OS functions - from rdwin.c //----------------------------------------------------------------------------- extern int32 CloseAppWindow(void); extern int32 ServiceWindows(void); extern void SetWindowName(const char *windowName); //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Language functions - from language.c //----------------------------------------------------------------------------- extern int32 GetLanguageVersion(uint8 *version); extern int32 SetLanguageVersion(uint8 version); extern int32 GetGameName(uint8 *name); //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Palette functions - from palette.c //----------------------------------------------------------------------------- extern int32 BS2_SetPalette(int16 startEntry, int16 noEntries, uint8 *palette, uint8 setNow); extern int32 UpdatePaletteMatchTable(uint8 *data); extern uint8 QuickMatch(uint8 r, uint8 g, uint8 b); extern int32 FadeUp(float time); extern int32 FadeDown(float time); extern uint8 GetFadeStatus(void); extern int32 DimPalette(void); extern void WaitForFade(void); //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Mouse functions - from mouse.c //----------------------------------------------------------------------------- extern _mouseEvent *MouseEvent(void); extern int32 SetMouseAnim(uint8 *ma, int32 size, int32 mouseFlash); extern int32 SetLuggageAnim(uint8 *la, int32 size); extern int32 AnimateMouse(void); uint8 CheckForMouseEvents(void); // (James23july97) extern void ResetRenderEngine(void); //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Keyboard functions - from keyboard.c //----------------------------------------------------------------------------- extern BOOL KeyWaiting(void); extern int32 ReadKey(_keyboardEvent *ke); //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Sprite functions - from sprite.c //----------------------------------------------------------------------------- extern int32 DrawSprite(_spriteInfo *s); extern int32 CreateSurface(_spriteInfo *s, uint8 **surface); extern void DrawSurface(_spriteInfo *s, uint8 *surface, ScummVM::Rect *clipRect = NULL); extern void DeleteSurface(uint8 *surface); extern int32 OpenLightMask(_spriteInfo *s); extern int32 CloseLightMask(void); //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Screen drawing and scrolling function - from render.c //----------------------------------------------------------------------------- extern int32 SetScrollTarget(int16 sx, int16 sy); extern int32 InitialiseRenderCycle(void); extern int32 StartRenderCycle(void); extern int32 EndRenderCycle(BOOL *end); extern int32 RenderParallax(_parallax *p, int16 layer); extern int32 SetLocationMetrics(uint16 w, uint16 h); extern int32 CopyScreenBuffer(void); extern int32 PlotPoint(uint16 x, uint16 y, uint8 colour); extern int32 DrawLine(int16 x1, int16 y1, int16 x2, int16 y2, uint8 colour); extern int32 InitialiseBackgroundLayer(_parallax *p); extern int32 CloseBackgroundLayer(void); extern int32 PlotDots(int16 x, int16 y, int16 count); //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Menubar control and drawing functions - from menu.c //----------------------------------------------------------------------------- extern int32 ProcessMenu(void); extern int32 ShowMenu(uint8 menu); extern int32 HideMenu(uint8 menu); extern int32 SetMenuIcon(uint8 menu, uint8 pocket, uint8 *icon); extern uint8 GetMenuStatus(uint8 menu); extern int32 CloseMenuImmediately(void); //----------------------------------------------------------------------------- // Misc functions - from misc.cpp //----------------------------------------------------------------------------- extern uint32 SVM_timeGetTime(void); extern void SVM_SetFileAttributes(char *file, uint32 atrib); extern void SVM_DeleteFile(char *file); extern int32 SVM_GetVolumeInformation(char *cdPath, char *sCDName, uint32 maxPath, uint8 *, uint32 *dwMaxCompLength, uint32 *dwFSFlags, uint8 *, uint32 a); extern void scumm_mkdir(const char *pathname); extern void SVM_GetModuleFileName(void *module, char *destStr, uint32 maxLen); //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- extern int16 screenWide; // Width of the screen display extern int16 screenDeep; // Height of the screen display extern int16 mousex; // Mouse screen x coordinate extern int16 mousey; // Mouse screen y coordinate extern int32 renderCaps; // Flags which determine how to render the scene. extern uint8 palCopy[256][4]; // Current palette. //----------------------------------------------------------------------------- extern long int myTimers[10][2]; #ifdef __cplusplus } #endif #endif