[Scummvm-cvs-logs] CVS: scummvm/bs2/driver _mouse.cpp,1.19,1.20 d_draw.cpp,1.27,1.28 d_sound.cpp,1.64,1.65 d_sound.h,1.20,1.21 driver96.h,1.46,1.47 keyboard.cpp,1.8,1.9 language.cpp,1.5,1.6 menu.cpp,1.13,1.14 palette.cpp,1.17,1.18 rdwin.cpp,1.27,1.28 render.cpp,1.28,1.29 sprite.cpp,1.20,1.21

Torbj?rn Andersson eriktorbjorn at users.sourceforge.net
Sun Sep 28 07:32:07 CEST 2003


Update of /cvsroot/scummvm/scummvm/bs2/driver
In directory sc8-pr-cvs1:/tmp/cvs-serv17024/driver

Modified Files:
	_mouse.cpp d_draw.cpp d_sound.cpp d_sound.h driver96.h 
	keyboard.cpp language.cpp menu.cpp palette.cpp rdwin.cpp 
	render.cpp sprite.cpp 
Log Message:
More cleanup, plus support for cutscene leadout music. For now, we only
play that music for cutscenes that have subtitles.


Index: _mouse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/_mouse.cpp,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- _mouse.cpp	27 Sep 2003 11:02:57 -0000	1.19
+++ _mouse.cpp	28 Sep 2003 14:13:57 -0000	1.20
@@ -17,53 +17,6 @@
  * $Header$
  */
 
-//=============================================================================
-//
-//	Filename	:	mouse.c
-//	Created		:	17th September 1996
-//	By			:	P.R.Porter
-//
-//	Summary		:	This module holds the interface to the mouse..
-//
-//	Functions
-//	---------
-//
-//	--------------------------------------------------------------------------
-//
-//  _mouseEvent *MouseEvent(void)
-//
-//	The address of a _mouseEvent pointer is passed in.  If there is a mouse 
-//	event in the queue, a the value of the mouse event pointer is set to the
-//	address of the event, otherwise, the mouse event pointer is set to NULL.
-//
-//	--------------------------------------------------------------------------
-//
-//	int32 SetMouseAnim(uint8 *ma, int32 size)
-//
-//	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.
-//	Pass NULL in to clear the mouse sprite.
-//
-//	--------------------------------------------------------------------------
-//
-//	int32 SetLuggageAnim(uint8 *ma, 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.
-//
-//=============================================================================
-
 #include "stdafx.h"
 #include "driver96.h"
 #include "d_draw.h"
@@ -239,6 +192,11 @@
 	g_system->set_mouse_cursor(_mouseData, mouse_width, mouse_height, hotspot_x, hotspot_y);
 }
 
+/**
+ * Get the next pending mouse event.
+ * @return a pointer to the mouse event, or NULL of there is none
+ */
+
 _mouseEvent *MouseEvent(void) {
 	_mouseEvent *me;
 
@@ -258,6 +216,10 @@
 	return mouseBacklog;	// return the number of mouse events waiting
 }
 
+/**
+ * Animates the current mouse pointer
+ */
+
 int32 AnimateMouse(void) {
 	uint8 prevMouseFrame = mouseFrame;
 
@@ -275,6 +237,14 @@
 	return RD_OK;
 }
 
+/**
+ * Sets the mouse cursor animation.
+ * @param ma a pointer to the animation data, or NULL to clear the current one
+ * @param size the size of the mouse animation data
+ * @param mouseFlash RDMOUSE_FLASH or RDMOUSE_NOFLASH, depending on whether
+ * or not there is a lead-in animation
+ */
+
 int32 SetMouseAnim(uint8 *ma, int32 size, int32 mouseFlash) {
 	if (mouseAnim) {
 		free(mouseAnim);
@@ -307,6 +277,13 @@
 
 	return RD_OK;
 }
+
+/**
+ * Sets the "luggage" animation to accompany the mouse animation. Luggage
+ * sprites are of the same format as mouse sprites.
+ * @param ma a pointer to the animation data, or NULL to clear the current one
+ * @param size the size of the animation data
+ */
 
 int32 SetLuggageAnim(uint8 *ma, int32 size) {
 	if (luggageAnim) {

Index: d_draw.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/d_draw.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- d_draw.cpp	27 Sep 2003 17:41:02 -0000	1.27
+++ d_draw.cpp	28 Sep 2003 14:13:57 -0000	1.28
@@ -92,12 +92,22 @@
 
 }
 
-int32 InitialiseDisplay(int16 width, int16 height, int16 colourDepth, int32 windowType) {
+/**
+ * Initialise the display with the sizes passed in.
+ * @return RD_OK, or an error code if the display cannot be set up.
+ */
+
+int32 InitialiseDisplay(int16 width, int16 height) {
+	g_system->init_size(width, height);
+
 	screenWide = width;
 	screenDeep = height;
 
 	lpBackBuffer = (byte *) malloc(screenWide * screenDeep);
-	return(RD_OK);
+	if (!lpBackBuffer)
+		return RDERR_OUTOFMEMORY;
+
+	return RD_OK;
 }
 
 // FIXME: Clean up this mess. I don't want to add any new flags, but some of
@@ -115,10 +125,18 @@
 	renderCaps |= RDBLTFX_ALLHARDWARE;
 }
 
+/**
+ * Sets the edge blend and arithmetic stretching effects.
+ */
+
 void SetBltFx(void) {
 	renderCaps |= (RDBLTFX_EDGEBLEND | RDBLTFX_ARITHMETICSTRETCH);
 }
 
+/**
+ * Clears the edge blend and arithmetic stretching effects.
+ */
+
 void ClearBltFx(void) { 
 	renderCaps &= ~(RDBLTFX_EDGEBLEND | RDBLTFX_ARITHMETICSTRETCH);
 }
@@ -131,26 +149,26 @@
 	renderCaps &= ~RDBLTFX_SHADOWBLEND;
 }
 
-int32 GetRenderType(void)
-{
+/**
+ * @return the graphics detail setting
+ */
+
+int32 GetRenderType(void) {
 	if (renderCaps & RDBLTFX_ALLHARDWARE)
-	{
-		return (0);
-	}
-	else
-	{
-		if (renderCaps & (RDBLTFX_EDGEBLEND + RDBLTFX_ARITHMETICSTRETCH))
-			return (3);
-		else
-		{
-			if (renderCaps & RDBLTFX_SHADOWBLEND)
-				return(2);
-			else
-				return (1);
-		}
-	}
+		return 0;
+
+	if (renderCaps & (RDBLTFX_EDGEBLEND | RDBLTFX_ARITHMETICSTRETCH))
+		return 3;
+
+	if (renderCaps & RDBLTFX_SHADOWBLEND)
+		return 2;
+
+	return 1;
 }
 
+/**
+ * Fill the screen buffer with palette colour zero.
+ */
 
 int32 EraseBackBuffer( void ) {
 	memset(lpBackBuffer + MENUDEEP * screenWide, 0, screenWide * RENDERDEEP);
@@ -160,7 +178,7 @@
 
 int32 NextSmackerFrame(void) {
 	warning("stub NextSmackerFrame");
-	return(RD_OK);
+	return RD_OK;
 }
 
 
@@ -183,16 +201,19 @@
 		DrawSurface(obj->textSprite, textSurface);
 }
 
+/**
+ * Plays an animated cutscene.
+ * @param filename the file name of the cutscene file
+ * @param text the subtitles and voiceovers for the cutscene
+ * @param musicOut lead-out music
+ */
+
 int32 PlaySmacker(char *filename, _movieTextObject *text[], uint8 *musicOut) {
 	warning("semi-stub PlaySmacker %s", filename);
 
 	// WORKAROUND: For now, we just do the voice-over parts of the
 	// movies, since they're separate from the actual smacker files.
 
-	// Do we really need to pre-cache the text sprites and speech data
-	// like this? It'd be simpler to just store the text id and construct
-	// the data as we go along.
-
 	if (text) {
 		uint8 oldPal[1024];
 		uint8 tmpPal[1024];
@@ -246,6 +267,8 @@
 
 		PlayingSoundHandle handle = 0;
 
+		bool skipCutscene = false;
+
 		while (1) {
 			if (!text[textCounter])
 				break;
@@ -273,12 +296,14 @@
 
 			if (ReadKey(&ke) == RD_OK && ke.keycode == 27) {
 				g_sword2->_mixer->stopHandle(handle);
+				skipCutscene = true;
 				break;
 			}
 
 			// Simulate ~12 frames per second. I don't know what
 			// frame rate the original movies had, or even if it
 			// was constant, but this seems to work reasonably.
+
 			g_system->delay_msecs(80);
 		}
 
@@ -294,6 +319,12 @@
 		r.right = screenWide;
 		r.bottom = MENUDEEP;
 		UploadRect(&r);
+
+		// FIXME: For now, only play the lead-out music for cutscenes
+		// that have subtitles.
+
+		if (!skipCutscene)
+			g_sound->playLeadOut(musicOut);
 	}
 
 	return RD_OK;

Index: d_sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/d_sound.cpp,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -d -r1.64 -r1.65
--- d_sound.cpp	27 Sep 2003 17:00:14 -0000	1.64
+++ d_sound.cpp	28 Sep 2003 14:13:57 -0000	1.65
@@ -234,6 +234,29 @@
 	music[restoreStream]._lastSample = music[2]._lastSample;
 }
 
+void Sword2Sound::playLeadOut(uint8 *leadOut) {
+	int i;
+
+	if (!leadOut)
+		return;
+
+	PlayFx(0, leadOut, 0, 0, RDSE_FXLEADOUT);
+
+	i = GetFxIndex(-1);
+
+	if (i == MAXFX) {
+		warning("playLeadOut: Can't find lead-out sound handle");
+		return;
+	}
+
+	while (fx[i]._handle) {
+		ServiceWindows();
+		g_system->delay_msecs(30);
+	}
+
+	CloseFx(-2);
+}
+
 // --------------------------------------------------------------------------
 // This function returns the index of the sound effect with the ID passed in.
 // --------------------------------------------------------------------------
@@ -281,7 +304,7 @@
 
 	if (fxPaused) {
 		for (i = 0; i < MAXFX; i++) {
-			if ((fx[i]._id == (int32) 0xfffffffe) || (fx[i]._id == (int32) 0xffffffff)) {
+			if ((fx[i]._id == -1) || (fx[i]._id == -2)) {
 				if (!fx[i]._handle) {
 					fx[i]._id = 0;
 					if (fx[i]._buf != NULL) {
@@ -681,47 +704,35 @@
 
 	if (soundOn) {
 		if (data == NULL) {
-			if (type == RDSE_FXLEADOUT) {
-				id = (int32) 0xffffffff;
-				i = GetFxIndex(id);
-				if (i == MAXFX) {
-					warning("PlayFx(%d, %d, %d, %d) - Not open", id, vol, pan, type);
-					return RDERR_FXNOTOPEN;
-				}
+			i = GetFxIndex(id);
+			if (i == MAXFX) {
+				warning("PlayFx(%d, %d, %d, %d) - Not open", id, vol, pan, type);
+				return RDERR_FXNOTOPEN;
+			}
+			if (loop == 1)
+				fx[i]._flags |= SoundMixer::FLAG_LOOP;
+			else 
 				fx[i]._flags &= ~SoundMixer::FLAG_LOOP;
-
-				// Start the sound effect playing
-
-				byte volume = musicMuted ? 0 : musicVolTable[musicVol];
-
-				g_engine->_mixer->playRaw(&fx[i]._handle, fx[i]._buf, fx[i]._bufSize, fx[i]._rate, fx[i]._flags, -1, volume, 0);
-			} else {
-				i = GetFxIndex(id);
-				if (i == MAXFX) {
-					warning("PlayFx(%d, %d, %d, %d) - Not open", id, vol, pan, type);
-					return RDERR_FXNOTOPEN;
-				}
-				if (loop == 1)
-					fx[i]._flags |= SoundMixer::FLAG_LOOP;
-				else 
-					fx[i]._flags &= ~SoundMixer::FLAG_LOOP;
 				 
-				fx[i]._volume = vol;
+			fx[i]._volume = vol;
 
-				// Start the sound effect playing
+			// Start the sound effect playing
 
-				byte volume = fxMuted ? 0 : vol * fxVol;
-				int8 p = panTable[pan + 16];
+			byte volume = fxMuted ? 0 : vol * fxVol;
+			int8 p = panTable[pan + 16];
 
-				g_engine->_mixer->playRaw(&fx[i]._handle, fx[i]._buf, fx[i]._bufSize, fx[i]._rate, fx[i]._flags, -1, volume, p);
-			}
+			g_engine->_mixer->playRaw(&fx[i]._handle, fx[i]._buf, fx[i]._bufSize, fx[i]._rate, fx[i]._flags, -1, volume, p);
 		} else {
-			if (type == RDSE_FXLEADIN) {
-				id = (int32) 0xfffffffe;
+			if (type == RDSE_FXLEADIN || type == RDSE_FXLEADOUT) {
+				if (type == RDSE_FXLEADIN)
+					id = -2;
+				else
+					id = -1;
+
 				hr = OpenFx(id, data);
-				if (hr != RD_OK) {
+				if (hr != RD_OK)
 					return hr;
-				}
+
 				i = GetFxIndex(id);
 				if (i == MAXFX) {
 					warning("PlayFx(%d, %d, %d, %d) - Not found", id, vol, pan, type);
@@ -804,7 +815,7 @@
 		return(RD_OK);
 
 	for (int i = 0; i < MAXFX; i++) {
-		if (fx[i]._id && fx[i]._id != (int32) 0xfffffffe && fx[i]._id != (int32) 0xffffffff) {
+		if (fx[i]._id && fx[i]._id != -1 && fx[i]._id != -2) {
 			g_engine->_mixer->stopHandle(fx[i]._handle);
 			fx[i]._id = 0;
 			fx[i]._paused = false;
@@ -867,7 +878,7 @@
 int32 Sword2Sound::PauseFxForSequence(void) {
 	if (!fxPaused) {
 		for (int i = 0; i < MAXFX; i++) {
-			if (fx[i]._id && fx[i]._id != (int32) 0xfffffffe) {
+			if (fx[i]._id && fx[i]._id != -2) {
 				g_engine->_mixer->pauseHandle(fx[i]._handle, true);
 				fx[i]._paused = true;
 			} else {

Index: d_sound.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/d_sound.h,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- d_sound.h	27 Sep 2003 16:10:43 -0000	1.20
+++ d_sound.h	28 Sep 2003 14:13:57 -0000	1.21
@@ -102,6 +102,7 @@
 		int32 StreamCompMusic(const char *filename, uint32 musicId, bool looping);
 		void saveMusicState();
 		void restoreMusicState();
+		void playLeadOut(uint8 *leadOut);
 		int32 MusicTimeRemaining();
 		int32 ReverseStereo(void);
 		uint8 GetFxVolume(void);

Index: driver96.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/driver96.h,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -d -r1.46 -r1.47
--- driver96.h	27 Sep 2003 17:00:15 -0000	1.46
+++ driver96.h	28 Sep 2003 14:13:57 -0000	1.47
@@ -17,442 +17,6 @@
  * $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.
-//
-//	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 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.
-//
-//=============================================================================
-
 #ifndef DRIVER96_H
 #define DRIVER96_H
 
@@ -745,7 +309,7 @@
 //-----------------------------------------------------------------------------
 //  Display functions - from d_draw.c
 //-----------------------------------------------------------------------------
-extern int32 InitialiseDisplay(int16 width, int16 height, int16 colourDepth, int32 windowType);
+extern int32 InitialiseDisplay(int16 width, int16 height);
 extern int32 EraseBackBuffer(void);
 extern void SetTransFx(void);
 extern void ClearTransFx(void);

Index: keyboard.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/keyboard.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- keyboard.cpp	24 Sep 2003 06:40:23 -0000	1.8
+++ keyboard.cpp	28 Sep 2003 14:13:57 -0000	1.9
@@ -17,40 +17,6 @@
  * $Header$
  */
 
-//=============================================================================
-//
-//	Filename	:	keyboard.c
-//	Created		:	19th September 1996
-//	By			:	P.R.Porter
-//
-//	Summary		:	This module holds the interface to the keyboard
-//
-//	Functions
-//	---------
-//
-//	--------------------------------------------------------------------------
-//
-//  BOOL KeyWaiting(void)
-//
-//	This function returns TRUE if there is an unprocessed key waiting in the
-//	queue, FALSE otherwise.
-//
-//	--------------------------------------------------------------------------
-//
-//	int32 ReadKey(char *key)
-//
-//	Sets the value of key passed in to the current waiting key.  If there is
-//	no key waiting, an error code is returned.
-//	
-//	--------------------------------------------------------------------------
-//
-//	void GetKeyStatus(_drvKeyStatus *s)
-//
-//	Retrieves the status of the keyboard handler.
-//	
-//=============================================================================
-
-
 #include "stdafx.h"
 #include "driver96.h"
 
@@ -70,9 +36,18 @@
 	}
 }
 
+/**
+ * @return true if there is an unprocessed key waiting in the queue
+ */
+
 bool KeyWaiting(void) {
 	return keyBacklog != 0;
 }
+
+/**
+ * Sets the value of the keyboard event passed in to the current waiting key.
+ * @return RD_OK, or an error code to indicate there is no key waiting.
+ */
 
 int32 ReadKey(_keyboardEvent *ev) {
 	if (!keyBacklog)

Index: language.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/language.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- language.cpp	24 Sep 2003 06:40:23 -0000	1.5
+++ language.cpp	28 Sep 2003 14:13:57 -0000	1.6
@@ -17,43 +17,6 @@
  * $Header$
  */
 
-//=============================================================================
-//
-//	Filename	:	language.c
-//	Created		:	20th August 1996
-//	By			:	P.R.Porter
-//
-//	Summary		:	This module holds the functions which govern which language
-//					version is current.
-//
-//	Functions
-//	---------
-//
-//	--------------------------------------------------------------------------
-//
-//	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.
-//
-//=============================================================================
-
 #include "stdafx.h"
 #include "driver96.h"
 
@@ -61,6 +24,15 @@
 
 static uint8 versionFromFile = 0;
 
+/**
+ * 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.
+ * @param version a pointer to the variable to store language information in
+ * @return an RD error code if version.inf cannot be opened, or the version
+ * cannot be obtained from it
+ */
+
 int32 GetLanguageVersion(uint8 *version) {
 	if (versionFromFile) {
 		*version = languageVersion;
@@ -72,11 +44,22 @@
 	return RD_OK;
 }
 
+/**
+ * This function is useful for debugging. It sets the version to the one passed
+ * in.
+ */
+
 int32 SetLanguageVersion(uint8 version) {
 	languageVersion = version;
 	return RD_OK;
 }
 
+/**
+ * Fills the string pointed to by 'name' with the title of the game, depending
+ * upon what the current language version is.
+ * @param name buffer to store the title of the game in
+ */
+
 int32 GetGameName(uint8 *name) {
 	uint8 version;
 	int32 rv;
@@ -94,7 +77,7 @@
 		strcpy((char *) name, "Baphomet's Fluch II");
 		break;
 	default:
-		strcpy((char *)name, "Some game or other, part 86");
+		strcpy((char *) name, "Some game or other, part 86");
 		return RDERR_INVALIDVERSION;
 	}
 

Index: menu.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/menu.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -d -r1.13 -r1.14
--- menu.cpp	23 Sep 2003 16:53:25 -0000	1.13
+++ menu.cpp	28 Sep 2003 14:13:57 -0000	1.14
@@ -17,61 +17,6 @@
  * $Header$
  */
 
-//=============================================================================
-//
-//	Filename	:	menu.c
-//	Created		:	14th November 1996
-//	By			:	P.R.Porter
-//
-//	Summary		:	This module holds the code for the driver96 menu system.
-//
-//	Functions
-//	---------
-//
-//	--------------------------------------------------------------------------
-//
-//	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.
-//
-//=============================================================================
-
-
 #include "stdafx.h"
 #include "driver96.h"
 #include "menu.h"
@@ -115,6 +60,12 @@
 	}
 }
 
+/**
+ * This function should be called regularly to process the menubar system. The
+ * rate at which this function is called will dictate how smooth the menu
+ * system is.
+ */
+
 int32 ProcessMenu(void) {
 	byte *src, *dst;
 	uint8 menu;
@@ -258,6 +209,12 @@
 	return RD_OK;
 }
 
+/**
+ * This function brings a specified menu into view. 
+ * @param menu RDMENU_TOP or RDMENU_BOTTOM, depending on which menu to show
+ * @return RD_OK, or an error code
+ */
+
 int32 ShowMenu(uint8 menu) {
 	// Check for invalid menu parameter
 	if (menu > RDMENU_BOTTOM)
@@ -272,6 +229,12 @@
 	return RD_OK;
 }
 
+/**
+ * This function hides a specified menu.
+ * @param menu RDMENU_TOP or RDMENU_BOTTOM depending on which menu to hide
+ * @return RD_OK, or an error code
+ */
+
 int32 HideMenu(uint8 menu) {
 	// Check for invalid menu parameter
 	if (menu > RDMENU_BOTTOM)
@@ -286,6 +249,10 @@
 	return RD_OK;
 }
 
+/**
+ * This function hides both menus immediately.
+ */
+
 int32 CloseMenuImmediately(void) {
 	ScummVM::Rect r;
 	int i;
@@ -308,6 +275,14 @@
 	return RD_OK;
 }
 
+/**
+ * This function sets a menubar icon.
+ * @param menu RDMENU_TOP or RDMENU_BOTTOM, depending on which menu to change
+ * @param pocket the menu pocket to change
+ * @param icon icon data, or NULL to clear the icon
+ * @return RD_OK, or an error code
+ */
+
 int32 SetMenuIcon(uint8 menu, uint8 pocket, uint8 *icon) {
 	ScummVM::Rect r;
 
@@ -340,6 +315,10 @@
 	}
 	return RD_OK;
 }
+
+/**
+ * @return The status of the menu
+ */
 
 uint8 GetMenuStatus(uint8 menu) {
 	if (menu > RDMENU_BOTTOM)

Index: palette.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/palette.cpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- palette.cpp	27 Sep 2003 15:30:17 -0000	1.17
+++ palette.cpp	28 Sep 2003 14:13:57 -0000	1.18
@@ -17,61 +17,6 @@
  * $Header$
  */
 
-//=============================================================================
-//
-//	Filename	:	palette.c
-//	Created		:	22nd August 1996
-//	By			:	P.R.Porter
-//
-//	Summary		:	This module holds the palette functions and the interface
-//					to the directDraw palette.
-//
-//	Functions
-//	---------
-//
-//	--------------------------------------------------------------------------
-//
-//	void BS2_SetPalette(int32 startEntry, int32 noEntries, uint8 *colourTable)
-//
-//	Sets the palette from position startEntry for noEntries, to the data 
-//	pointed to by colourTable.
-//
-//	--------------------------------------------------------------------------
-//
-//	void UpdatePaletteMatchTable(uint8 *data)
-//
-//	Uses the current palCopy to create a table of palette indeces which will
-//	be searched later for a quick palette match, if data is NULL.  Otherwise
-//	it uses the table passed in.
-//
-//	--------------------------------------------------------------------------
-//
-//	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.
-//
-//=============================================================================
-
 #include "stdafx.h"
 #include <stdio.h>
 
@@ -141,6 +86,13 @@
 	return minIndex;
 }
 
+/**
+ * Sets or creates a table of palette indices which will be searched later for
+ * a quick palette match.
+ * @param data either the palette match table, or NULL to create a new table
+ * from the current palCopy
+ */
+
 int32 UpdatePaletteMatchTable(uint8 *data) {
 	if (!data) {
 		int16 red, green, blue;
@@ -166,6 +118,14 @@
 	return RD_OK;
 }
 
+/**
+ * Matches a colour triplet to a palette index.
+ * @param r red colour component
+ * @param g green colour component
+ * @param b blue colour component
+ * @return the palette index of the closest matching colour in the palette
+ */
+
 // FIXME: This used to be inlined - probably a good idea - but the
 // linker complained when I tried to use it in sprite.cpp.
 
@@ -173,6 +133,13 @@
 	return paletteMatch[((int32) (r >> 2) << 12) + ((int32) (g >> 2) << 6) + (b >> 2)];
 }
 
+/**
+ * Sets the palette.
+ * @param startEntry the first colour entry to set
+ * @param noEntries the number of colour entries to set
+ * @param colourTable the new colour entries
+ */
+
 int32 BS2_SetPalette(int16 startEntry, int16 noEntries, uint8 *colourTable, uint8 fadeNow) {
 	if (noEntries == 0) {
 		RestorePalette();
@@ -196,6 +163,11 @@
 	return RD_OK;
 }
 
+/**
+ * Fades the palette up from black to the current palette.
+ * @param time the time it will take the palette to fade up
+ */
+
 int32 FadeUp(float time) {
 	if (fadeStatus != RDFADE_BLACK && fadeStatus != RDFADE_NONE)
 		return RDERR_FADEINCOMPLETE;
@@ -207,6 +179,11 @@
 	return RD_OK;
 }
 
+/**
+ * Fades the palette down to black from the current palette.
+ * @param time the time it will take the palette to fade down
+ */
+
 int32 FadeDown(float time) {
 	if (fadeStatus != RDFADE_BLACK && fadeStatus != RDFADE_NONE)
 		return RDERR_FADEINCOMPLETE;
@@ -217,6 +194,12 @@
 
 	return RD_OK;
 }
+
+/**
+ * Get the current fade status
+ * @return RDFADE_UP (fading up), RDFADE_DOWN (fading down), RDFADE_NONE
+ * (not faded), or RDFADE_BLACK (completely faded down)
+ */
 
 uint8 GetFadeStatus(void) {
 	return fadeStatus;

Index: rdwin.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/rdwin.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- rdwin.cpp	27 Sep 2003 15:20:15 -0000	1.27
+++ rdwin.cpp	28 Sep 2003 14:13:57 -0000	1.28
@@ -73,6 +73,10 @@
 	}
 }
 
+/**
+ * Quit the game.
+ */
+
 int32 CloseAppWindow(void) {
 	warning("stub CloseAppWindow");
 /*
@@ -89,6 +93,11 @@
 	_needRedraw = true;
 }
 
+/**
+ * This function should be called at a high rate (> 20 per second) to service
+ * windows and the interface it provides.
+ */
+
 int32 ServiceWindows(void) {
 	g_sword2->parseEvents();
 	FadeServer();
@@ -106,6 +115,11 @@
 
 	return RD_OK;
 }
+
+/**
+ * Set the window name to windowName and stores this name in gameName for
+ * future use.
+ */
 
 void SetWindowName(const char *windowName) {
 	warning("stub SetWindowName( %s )", windowName);

Index: render.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/render.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -d -r1.28 -r1.29
--- render.cpp	28 Sep 2003 14:08:20 -0000	1.28
+++ render.cpp	28 Sep 2003 14:13:57 -0000	1.29
@@ -17,89 +17,6 @@
  * $Header$
  */
 
-//=============================================================================
-//
-//	Filename	:	render.c
-//	Created		:	26th September 1996
-//	By			:	P.R.Porter
-//
-//	Summary		:	This module holds the functions which deal with rendering
-//					the background and parallax layers, and controlling the
-//					speed of the scroll (number of frames)
-//
-//	Functions
-//	---------
-//
-//	---------------------------------------------------------------------------
-//	
-//	int32 RenderParallax(_parallax *p, int16 layer)
-//
-//	Draws a parallax layer at the current position determined by the scroll.
-//	A parallax can be either foreground, background or the main screen.
-//
-//	---------------------------------------------------------------------------
-//
-//	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 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.
-//
-//=============================================================================
-
 #include "stdafx.h"
 #include "driver96.h"
 #include "d_draw.h"
@@ -479,6 +396,14 @@
 	return RD_OK;
 }
 
+/**
+ * Plots a point relative to the top left corner of the screen. This is only
+ * used for debugging.
+ * @param x x-coordinate of the point
+ * @param y y-coordinate of the point
+ * @param colour colour of the point
+ */
+
 int32 PlotPoint(uint16 x, uint16 y, uint8 colour) {
 	warning("stub PlotPoint( %d, %d, %d )", x, y, colour);
 /*
@@ -517,6 +442,15 @@
 
 }
 
+/**
+ * Draws a line from one point to another. This is only used for debugging.
+ * @param x0 x-coordinate of the start point
+ * @param y0 y-coordinate of the start point
+ * @param x1 x-coordinate of the end point
+ * @param y1 y-coordinate of the end point
+ * @param colour colour of the line
+ */
+
 // Uses Bressnham's incremental algorithm!
 int32 DrawLine(int16 x0, int16 y0, int16 x1, int16 y1, uint8 colour) {
 	warning("stub DrawLine( %d, %d, %d, %d, %d )", x0, y0, x1, y1, colour);
@@ -752,6 +686,13 @@
 	return RD_OK;
 }
 
+/**
+ * This function tells the driver the size of the background screen for the
+ * current location.
+ * @param w width of the current location
+ * @param h height of the current location
+ */
+
 int32 SetLocationMetrics(uint16 w, uint16 h) {
 	locationWide = w;
 	locationDeep = h;
@@ -759,6 +700,11 @@
 	return RD_OK;
 }
 
+/**
+ * Draws a parallax layer at the current position determined by the scroll. A
+ * parallax can be either foreground, background or the main screen.
+ */
+
 int32 RenderParallax(_parallax *p, int16 l) {
 	int16 x, y;
 	int16 i, j;
@@ -804,12 +750,21 @@
 // Uncomment this when benchmarking the drawing routines.
 #define LIMIT_FRAME_RATE
 
+/**
+ * Initialises the timers before the render loop is entered.
+ */
+
 int32 InitialiseRenderCycle(void) {
 	initialTime = SVM_timeGetTime();
 	totalTime = initialTime + MILLISECSPERCYCLE;
 	return RD_OK;
 }
 
+/**
+ * This function should be called when the game engine is ready to start the
+ * render cycle.
+ */
+
 int32 StartRenderCycle(void) {
 	scrollxOld = scrollx;
 	scrollyOld = scrolly;
@@ -844,6 +799,12 @@
 	}
 }
 
+/**
+ * This function should be called at the end of the render cycle.
+ * @param end the function sets this to true if the render cycle is to be
+ * terminated, or false if it should continue
+ */
+
 int32 EndRenderCycle(bool *end) {
 	int32 time;
 
@@ -892,6 +853,12 @@
 	return RD_OK;
 }
 
+/**
+ * Sets the scroll target position for the end of the game cycle. The driver
+ * will then automatically scroll as many times as it can to reach this
+ * position in the allotted time.
+ */
+
 int32 SetScrollTarget(int16 sx, int16 sy) {
 	scrollxTarget = sx;
 	scrollyTarget = sy;
@@ -899,6 +866,11 @@
 	return RD_OK;
 }
 
+/**
+ * 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 InitialiseBackgroundLayer(_parallax *p) {
 	uint8 *memchunk;
 	uint8 zeros;
@@ -1021,6 +993,10 @@
 	return RD_OK;
 
 }
+
+/**
+ * Should be called once after leaving the room to free up memory.
+ */
 
 int32 CloseBackgroundLayer(void) {
 	debug(2, "CloseBackgroundLayer");

Index: sprite.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/bs2/driver/sprite.cpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- sprite.cpp	23 Sep 2003 17:24:45 -0000	1.20
+++ sprite.cpp	28 Sep 2003 14:13:57 -0000	1.21
@@ -17,46 +17,6 @@
  * $Header$
  */
 
-//=============================================================================
-//
-//	Filename	:	sprite.c
-//	Created		:	23rd September 1996
-//	By			:	P.R.Porter
-//
-//	Summary		:	This module holds the sprite drawing functions.
-//
-//	Functions
-//	---------
-//
-//	--------------------------------------------------------------------------
-//
-//	int32 CreateSurface(_spriteInfo *s, uint32 *surface)
-//
-//	Creates a sprite surface in video memory (if possible) and returns it's
-//	handle in surface.
-//
-//	---------------------------------------------------------------------------
-//
-//	int32 DrawSurface(_spriteInfo *s, uint32 surface, ScummVM::Rect *clipRect)
-//
-//	Draws the sprite surface created earlier.  If the surface has been lost,
-//	it is recreated.
-//
-//	---------------------------------------------------------------------------
-//
-//	int32 DeleteSurface(uint32 surface)
-//
-//	Deletes a surface from video memory.
-//
-//	--------------------------------------------------------------------------
-//
-//	int32 DrawSprite(_spriteInfo *s)
-//
-//	Draws a sprite onto the screen.  The _spriteInfo structure holds all of
-//	the information needed to draw the sprite - see driver96.h for details
-//
-//=============================================================================
-
 #include "stdafx.h"
 #include "driver96.h"
 #include "d_draw.h"
@@ -68,14 +28,13 @@
 char shitColourTable[1024];
 static uint8 *lightMask = 0;
 
-// --------------------------------------------------------------------------
-//
-// int32 MirrorSprite(uint8 *dst, uint8 *src, int16 w, int16 h)
-//
-// This function takes the sprite pointed to by src and creates a mirror
-// image of it in dst.
-//
-// --------------------------------------------------------------------------
+/**
+ * This function takes a sprite and creates a mirror image of it.
+ * @param dst destination buffer
+ * @param src source buffer
+ * @param w width of the sprite
+ * @param h height of the sprite
+ */
 
 int32 MirrorSprite(uint8 *dst, uint8 *src, int16 w, int16 h) {
 	int16 x, y;
@@ -90,16 +49,13 @@
 	return RD_OK;
 }
 
-// --------------------------------------------------------------------------
-//
-// int32 DecompressRLE256(uint8 *dest, uint8 *source, int32 decompSize)
-//
-// This function takes a compressed frame of a sprite (with up to 256 colours)
-// and decompresses it into the area of memory marked by the destination
-// pointer.  The decompSize is used to measure when the decompression process
-// has completed.
-//
-// --------------------------------------------------------------------------
+/**
+ * This function takes a compressed frame of a sprite with up to 256 colours
+ * and decompresses it.
+ * @param dest destination buffer
+ * @param source source buffer
+ * @param decompSize the expected size of the decompressed sprite
+ */
 
 int32 DecompressRLE256(uint8 *dest, uint8 *source, int32 decompSize) {
 	// PARAMETERS:
@@ -177,12 +133,9 @@
 	return rv;
 }
 
-// --------------------------------------------------------------------------
-//
-// void UnwindRaw16(uint8 *dest, uint8 *source, uint8 blockSize, uint8 *colTable)
-//
-// This function unwinds a run of colour 16 data into 256 colour palette data.
-// --------------------------------------------------------------------------
+/**
+ * Unwinds a run of 16-colour data into 256-colour palette data.
+ */
 
 void UnwindRaw16(uint8 *dest, uint8 *source, uint8 blockSize, uint8 *colTable) {
 	// for each pair of pixels
@@ -210,27 +163,16 @@
 	}
 }
 
-// --------------------------------------------------------------------------
-//
-// int32 DecompressRLE16(uint8 *dest, uint8 *source, int32 decompSize, uint8 *colTable)
-//
-// This function takes a compressed frame of a sprite (with up to 16 colours)
-// and decompresses it into the area of memory marked by the destination
-// pointer.  The decompSize is used to measure when the decompression process
-// has completed.  The colour table which maps the 16 encoded colours to the 
-// current palette is passed in to colTable.
-//
-// --------------------------------------------------------------------------
+/**
+ * This function takes a compressed frame of a sprite (with up to 16 colours)
+ * and decompresses it.
+ * @param dest destination buffer
+ * @param source source buffer
+ * @param decompSize the expected size of the uncompressed sprite
+ * @param colTable mapping from the 16 encoded colours to the current palette
+ */
 
 int32 DecompressRLE16(uint8 *dest, uint8 *source, int32 decompSize, uint8 *colTable) {
-	// PARAMETERS:
-	// source	points to the start of the sprite data for input
-	// decompSize	gives size of decompressed data in bytes
-	// dest		points to start of destination buffer for decompressed
-	//		data
-	// colTable	points to a 16-byte table of colours used to encode
-	//		the RAW pixels into 4-bits each
-
 	uint8 headerByte;			// block header byte
 	uint8 *endDest = dest + decompSize;	// pointer to byte after end of decomp buffer
 	int32 rv;
@@ -301,9 +243,14 @@
 	return rv;
 }
 
-// The surface functions are used by the in-game dialogs and for displaying
-// cutscene subtitles. Everything that isn't needed for those cases (blending,
-// scaling, etc.) has been removed.
+/**
+ * Creates a sprite surface. Sprite surfaces are used by the in-game dialogs
+ * and for displaying cutscene subtitles, which makes them much easier to draw
+ * than standard sprites.
+ * @param s information about how to decode the sprite
+ * @param sprite the buffer that will be created to store the surface
+ * @return RD_OK, or an error code
+ */
 
 int32 CreateSurface(_spriteInfo *s, uint8 **sprite) {
 	uint8 *newSprite;
@@ -342,6 +289,13 @@
 	return RD_OK;
 }
 
+/**
+ * Draws the sprite surface created earlier.
+ * @param s information about how to place the sprite
+ * @param surface pointer to the surface created earlier
+ * @param clipRect the clipping rectangle
+ */
+
 void DrawSurface(_spriteInfo *s, uint8 *surface, ScummVM::Rect *clipRect) {
 	ScummVM::Rect rd, rs;
 	uint16 x, y, srcPitch;
@@ -406,6 +360,10 @@
 	SetNeedRedraw();
 }
 
+/**
+ * Destroys a surface.
+ */
+
 void DeleteSurface(uint8 *surface) {
 	free(surface);
 }
@@ -416,6 +374,24 @@
 uint16 xScale[SCALE_MAXWIDTH];
 uint16 yScale[SCALE_MAXHEIGHT];
 
+/**
+ * Draws a sprite onto the screen. The type of the sprite can be a combination
+ * of the following flags, some of which are mutually exclusive:
+ * RDSPR_DISPLAYALIGN	The sprite is drawn relative to the top left corner
+ *			of the screen
+ * RDSPR_FLIP		The sprite is mirrored
+ * RDSPR_TRANS		The sprite has a transparent colour zero
+ * RDSPR_BLEND		The sprite is translucent
+ * RDSPR_SHADOW		The sprite is affected by the light mask. (Scaled
+ *			sprites always are.)
+ * RDSPR_NOCOMPRESSION	The sprite data is not compressed
+ * RDSPR_RLE16		The sprite data is a 16-colour compressed sprite
+ * RDSPR_RLE256		The sprite data is a 256-colour compressed sprite
+ * @param s all the information needed to draw the sprite
+ * @warning Sprites will only be drawn onto the background, not over menubar
+ * areas.
+ */
+
 // FIXME: I'm sure this could be optimized. There's plenty of data copying and
 // mallocing here.
 
@@ -709,6 +685,10 @@
 	return RD_OK;
 }
 
+/**
+ * Opens the light masking sprite for a room.
+ */
+
 int32 OpenLightMask(_spriteInfo *s) {
 	// FIXME: The light mask is only needed on higher graphics detail
 	// settings, so to save memory we could simply ignore it on lower
@@ -727,6 +707,10 @@
 
 	return RD_OK;
 }
+
+/**
+ * Closes the light masking sprite for a room.
+ */
 
 int32 CloseLightMask(void) {
 	if (!lightMask)





More information about the Scummvm-git-logs mailing list