diff options
| -rw-r--r-- | engines/lab/anim.cpp | 64 | ||||
| -rw-r--r-- | engines/lab/anim.h | 32 | ||||
| -rw-r--r-- | engines/lab/graphics.cpp | 30 | ||||
| -rw-r--r-- | engines/lab/graphics.h | 5 | ||||
| -rw-r--r-- | engines/lab/special.cpp | 1 | ||||
| -rw-r--r-- | engines/lab/tilepuzzle.cpp | 2 | 
6 files changed, 62 insertions, 72 deletions
diff --git a/engines/lab/anim.cpp b/engines/lab/anim.cpp index 7d2d171ae7..ee636604e8 100644 --- a/engines/lab/anim.cpp +++ b/engines/lab/anim.cpp @@ -33,9 +33,7 @@  namespace Lab { -extern BitMap *DrawBitMap;  extern byte **startoffile; -extern BitMap *DispBitMap;  Anim::Anim(LabEngine *vm) : _vm(vm) {  	_header = 0; @@ -71,12 +69,11 @@ Anim::Anim(LabEngine *vm) : _vm(vm) {  	_doBlack = false;  	_diffWidth = 0;  	_diffHeight = 0; -	_stopSound = false;  	_dataBytesPerRow = 0; +	DrawBitMap = &bit2;  	for (int i = 0; i < 3 * 256; i++)  		_diffPalette[i] = 0; -  }  /*------------------------ unDiff Horizontal Memory -------------------------*/ @@ -85,7 +82,7 @@ Anim::Anim(LabEngine *vm) : _vm(vm) {  /* Undiffs a piece of memory when header size is a byte, and copy/skip size  */  /* is also a byte.                                                           */  /*****************************************************************************/ -void Anim::unDIFFByteByte(byte *dest, byte *diff) { +void Anim::unDiffByteByte(byte *dest, byte *diff) {  	uint16 skip, copy;  	while (1) { @@ -115,7 +112,7 @@ void Anim::unDIFFByteByte(byte *dest, byte *diff) {  /* Undiffs a piece of memory when header size is a byte, and copy/skip size  */  /* is a word.                                                                */  /*****************************************************************************/ -void Anim::unDIFFByteWord(uint16 *dest, uint16 *diff) { +void Anim::unDiffByteWord(uint16 *dest, uint16 *diff) {  	uint16 skip, copy;  	while (1) { @@ -168,13 +165,13 @@ void Anim::unDIFFByteWord(uint16 *dest, uint16 *diff) {  /*****************************************************************************/  /* UnDiffs a coded DIFF string onto an already initialized piece of memory.  */  /*****************************************************************************/ -bool Anim::unDIFFMemory(byte *dest, byte *diff, uint16 headerSize, uint16 copySize) { +bool Anim::unDiffMemory(byte *dest, byte *diff, uint16 headerSize, uint16 copySize) {  	if (headerSize == 1) {  		if (copySize == 1) -			unDIFFByteByte(dest, diff); +			unDiffByteByte(dest, diff);  		else if (copySize == 2) -			unDIFFByteWord((uint16 *)dest, (uint16 *)diff); +			unDiffByteWord((uint16 *)dest, (uint16 *)diff);  		else  			return false; @@ -190,7 +187,7 @@ bool Anim::unDIFFMemory(byte *dest, byte *diff, uint16 headerSize, uint16 copySi  /* Undiffs a piece of memory when header size is a byte, and copy/skip size  */  /* is a byte.                                                                */  /*****************************************************************************/ -void Anim::VUnDIFFByteByte(byte *dest, byte *diff, uint16 bytesPerRow) { +void Anim::VUnDiffByteByte(byte *dest, byte *diff, uint16 bytesPerRow) {  	byte *curPtr;  	uint16 skip, copy;  	uint16 counter = 0; @@ -228,7 +225,7 @@ void Anim::VUnDIFFByteByte(byte *dest, byte *diff, uint16 bytesPerRow) {  /* Undiffs a piece of memory when header size is a byte, and copy/skip size  */  /* is a word.                                                                */  /*****************************************************************************/ -void Anim::VUnDIFFByteWord(uint16 *dest, uint16 *diff, uint16 bytesPerRow) { +void Anim::VUnDiffByteWord(uint16 *dest, uint16 *diff, uint16 bytesPerRow) {  	uint16 *curPtr;  	uint16 skip, copy;  	uint16 counter = 0; @@ -268,7 +265,7 @@ void Anim::VUnDIFFByteWord(uint16 *dest, uint16 *diff, uint16 bytesPerRow) {  /* Undiffs a piece of memory when header size is a byte, and copy/skip size  */  /* is a long.                                                                */  /*****************************************************************************/ -void Anim::VUnDIFFByteLong(uint32 *dest, uint32 *diff, uint16 bytesPerRow) { +void Anim::VUnDiffByteLong(uint32 *dest, uint32 *diff, uint16 bytesPerRow) {  	uint32 *_curPtr;  	uint16 skip, copy; @@ -310,14 +307,14 @@ void Anim::VUnDIFFByteLong(uint32 *dest, uint32 *diff, uint16 bytesPerRow) {  /*****************************************************************************/  /* UnDiffs a coded DIFF string onto an already initialized piece of memory.  */  /*****************************************************************************/ -bool Anim::VUnDIFFMemory(byte *dest, byte *diff, uint16 headerSize, uint16 copySize, uint16 bytesPerRow) { +bool Anim::VUnDiffMemory(byte *dest, byte *diff, uint16 headerSize, uint16 copySize, uint16 bytesPerRow) {  	if (headerSize == 1) {  		if (copySize == 1) -			VUnDIFFByteByte(dest, diff, bytesPerRow); +			VUnDiffByteByte(dest, diff, bytesPerRow);  		else if (copySize == 2) -			VUnDIFFByteWord((uint16 *)dest, (uint16 *)diff, bytesPerRow); +			VUnDiffByteWord((uint16 *)dest, (uint16 *)diff, bytesPerRow);  		else if (copySize == 4) -			VUnDIFFByteLong((uint32 *)dest, (uint32 *)diff, bytesPerRow); +			VUnDiffByteLong((uint32 *)dest, (uint32 *)diff, bytesPerRow);  		else  			return false;  	} else @@ -407,9 +404,9 @@ void Anim::unDiff(byte *newBuf, byte *oldBuf, byte *diffData, uint16 bytesPerRow  	diffData++;  	if (isV) -		VUnDIFFMemory(newBuf, diffData, 1, bufType + 1, bytesPerRow); +		VUnDiffMemory(newBuf, diffData, 1, bufType + 1, bytesPerRow);  	else -		unDIFFMemory(newBuf, diffData, 1, bufType + 1); +		unDiffMemory(newBuf, diffData, 1, bufType + 1);  }  void Anim::readBlock(void *Buffer, uint32 Size, byte **File) { @@ -421,12 +418,12 @@ void Anim::diffNextFrame() {  	if (_header == 65535)  /* Already done. */  		return; -	if (DispBitMap->_flags & BITMAPF_VIDEO) { -		DispBitMap->_planes[0] = _vm->_graphics->getCurrentDrawingBuffer(); -		DispBitMap->_planes[1] = DispBitMap->_planes[0] + 0x10000; -		DispBitMap->_planes[2] = DispBitMap->_planes[1] + 0x10000; -		DispBitMap->_planes[3] = DispBitMap->_planes[2] + 0x10000; -		DispBitMap->_planes[4] = DispBitMap->_planes[3] + 0x10000; +	if (_vm->_graphics->_dispBitMap->_flags & BITMAPF_VIDEO) { +		_vm->_graphics->_dispBitMap->_planes[0] = _vm->_graphics->getCurrentDrawingBuffer(); +		_vm->_graphics->_dispBitMap->_planes[1] = _vm->_graphics->_dispBitMap->_planes[0] + 0x10000; +		_vm->_graphics->_dispBitMap->_planes[2] = _vm->_graphics->_dispBitMap->_planes[1] + 0x10000; +		_vm->_graphics->_dispBitMap->_planes[3] = _vm->_graphics->_dispBitMap->_planes[2] + 0x10000; +		_vm->_graphics->_dispBitMap->_planes[4] = _vm->_graphics->_dispBitMap->_planes[3] + 0x10000;  	}  	_vm->_event->mouseHide(); @@ -464,7 +461,7 @@ void Anim::diffNextFrame() {  			_isAnim = (_frameNum >= 3) && (!_playOnce);  			_curBit = 0; -			if (DispBitMap->_flags & BITMAPF_VIDEO) +			if (_vm->_graphics->_dispBitMap->_flags & BITMAPF_VIDEO)  				_vm->_graphics->screenUpdate();  			return; /* done with the next frame. */ @@ -510,13 +507,13 @@ void Anim::diffNextFrame() {  			break;  		case 20L: -			unDiff(DrawBitMap->_planes[_curBit], DispBitMap->_planes[_curBit], _diffFile, DrawBitMap->_bytesPerRow, false); +			unDiff(DrawBitMap->_planes[_curBit], _vm->_graphics->_dispBitMap->_planes[_curBit], _diffFile, DrawBitMap->_bytesPerRow, false);  			_curBit++;  			_diffFile += _size;  			break;  		case 21L: -			unDiff(DrawBitMap->_planes[_curBit], DispBitMap->_planes[_curBit], _diffFile, DrawBitMap->_bytesPerRow, true); +			unDiff(DrawBitMap->_planes[_curBit], _vm->_graphics->_dispBitMap->_planes[_curBit], _diffFile, DrawBitMap->_bytesPerRow, true);  			_curBit++;  			_diffFile += _size;  			break; @@ -550,15 +547,15 @@ void Anim::diffNextFrame() {  			break;  		case 65535L:  			if ((_frameNum == 1) || _playOnce || _stopPlayingEnd) { -				int didTOF = 0; +				bool didTOF = false;  				if (_waitForEffect) {  					while (_vm->_music->isSoundEffectActive()) {  						_vm->_music->updateMusic();  						_vm->waitTOF(); -						if (DispBitMap->_flags & BITMAPF_VIDEO) -							didTOF = 1; +						if (_vm->_graphics->_dispBitMap->_flags & BITMAPF_VIDEO) +							didTOF = true;  					}  				} @@ -692,13 +689,6 @@ void Anim::stopDiffEnd() {  }  /*****************************************************************************/ -/* Stops the continuous sound from playing.                                  */ -/*****************************************************************************/ -void Anim::stopSound() { -	_stopSound = true; -} - -/*****************************************************************************/  /* Reads in a DIFF file.                                                     */  /*****************************************************************************/  bool Anim::readDiff(byte *buffer, bool playOnce) { diff --git a/engines/lab/anim.h b/engines/lab/anim.h index f799ae42a7..54efa4fcfa 100644 --- a/engines/lab/anim.h +++ b/engines/lab/anim.h @@ -83,15 +83,25 @@ private:  	uint16 _sampleSpeed;  	uint32 _diffWidth;  	uint32 _diffHeight; -	bool _stopSound;  	uint16 _dataBytesPerRow; +	BitMap bit2; +	BitMap *DrawBitMap; -	void unDIFFByteByte(byte *dest, byte *diff); -	void unDIFFByteWord(uint16 *dest, uint16 *diff); -	void VUnDIFFByteByte(byte *Dest, byte *diff, uint16 bytesperrow); -	void VUnDIFFByteWord(uint16 *Dest, uint16 *diff, uint16 bytesperrow); -	void VUnDIFFByteLong(uint32 *Dest, uint32 *diff, uint16 bytesperrow); +	bool unDiffMemory(byte *dest,           /* Where to Un-DIFF */ +		byte *diff,           /* The DIFFed code. */ +		uint16 headerSize,    /* Size of header (1, 2 or 4 bytes) (only supports 1 currently */ +		uint16 copySize);     /* Size of minimum copy or skip. (1, 2 or 4 bytes) */ + +	void runLengthDecode(byte *dest, byte *source); +	void VRunLengthDecode(byte *dest, byte *source, uint16 bytesPerRow); +	void unDiffByteByte(byte *dest, byte *diff); +	void unDiffByteWord(uint16 *dest, uint16 *diff); +	bool VUnDiffMemory(byte *dest, byte *diff, uint16 headerSize, uint16 copySize, uint16 bytesPerRow); +	void VUnDiffByteByte(byte *Dest, byte *diff, uint16 bytesperrow); +	void VUnDiffByteWord(uint16 *Dest, uint16 *diff, uint16 bytesperrow); +	void VUnDiffByteLong(uint32 *Dest, uint32 *diff, uint16 bytesperrow);  	void readBlock(void *Buffer, uint32 Size, byte **File); +	void playDiff(byte *buffer);  public:  	Anim(LabEngine *vm); @@ -105,21 +115,11 @@ public:  	BitMap _rawDiffBM;  	void unDiff(byte *newBuf, byte *oldBuf, byte *diffData, uint16 bytesperrow, bool isV); -	bool unDIFFMemory(byte *dest,           /* Where to Un-DIFF */ -					  byte *diff,           /* The DIFFed code. */ -					  uint16 headerSize,    /* Size of header (1, 2 or 4 bytes) (only supports 1 currently */ -					  uint16 copySize);     /* Size of minimum copy or skip. (1, 2 or 4 bytes) */ - -	bool VUnDIFFMemory(byte *dest, byte *diff, uint16 headerSize, uint16 copySize, uint16 bytesPerRow); -	void runLengthDecode(byte *dest, byte *source); -	void VRunLengthDecode(byte *dest, byte *source, uint16 bytesPerRow);  	bool readDiff(byte *buffer, bool playOnce); -	void playDiff(byte *buffer);  	void diffNextFrame();  	void readSound(bool waitTillFinished, Common::File *file);  	void stopDiff();  	void stopDiffEnd(); -	void stopSound();  };  } // End of namespace Lab diff --git a/engines/lab/graphics.cpp b/engines/lab/graphics.cpp index 857c25291d..5147ac3654 100644 --- a/engines/lab/graphics.cpp +++ b/engines/lab/graphics.cpp @@ -39,8 +39,6 @@  namespace Lab { -BitMap bit1, bit2, *DispBitMap = &bit1, *DrawBitMap = &bit1; -  DisplayMan::DisplayMan(LabEngine *vm) : _vm(vm) {  	_longWinInFront = false;  	_lastMessageLong = false; @@ -57,6 +55,8 @@ DisplayMan::DisplayMan(LabEngine *vm) : _vm(vm) {  	_screenWidth = 0;  	_screenHeight = 0; +	_dispBitMap = &bit1; +  	for (int i = 0; i < 256 * 3; i++)  		_curvgapal[i] = 0;  } @@ -129,7 +129,7 @@ void DisplayMan::loadPict(const char *filename) {  /*****************************************************************************/  /* Reads in a picture into the dest bitmap.                                  */  /*****************************************************************************/ -bool DisplayMan::readPict(const char *filename, bool playOnce) { +void DisplayMan::readPict(const char *filename, bool playOnce) {  	_vm->_anim->stopDiff();  	loadPict(filename); @@ -139,13 +139,11 @@ bool DisplayMan::readPict(const char *filename, bool playOnce) {  	if (!_vm->_music->_doNotFilestopSoundEffect)  		_vm->_music->stopSoundEffect(); -	DispBitMap->_bytesPerRow = _screenWidth; -	DispBitMap->_rows        = _screenHeight; -	DispBitMap->_flags       = BITMAPF_VIDEO; +	_dispBitMap->_bytesPerRow = _screenWidth; +	_dispBitMap->_rows        = _screenHeight; +	_dispBitMap->_flags       = BITMAPF_VIDEO;  	_vm->_anim->readDiff(_curBitmap, playOnce); - -	return true;  }  /*****************************************************************************/ @@ -161,14 +159,14 @@ byte *DisplayMan::readPictToMem(const char *filename, uint16 x, uint16 y) {  	if (!_vm->_music->_doNotFilestopSoundEffect)  		_vm->_music->stopSoundEffect(); -	DispBitMap->_bytesPerRow = x; -	DispBitMap->_rows = y; -	DispBitMap->_flags = BITMAPF_NONE; -	DispBitMap->_planes[0] = _curBitmap; -	DispBitMap->_planes[1] = DispBitMap->_planes[0] + 0x10000; -	DispBitMap->_planes[2] = DispBitMap->_planes[1] + 0x10000; -	DispBitMap->_planes[3] = DispBitMap->_planes[2] + 0x10000; -	DispBitMap->_planes[4] = DispBitMap->_planes[3] + 0x10000; +	_dispBitMap->_bytesPerRow = x; +	_dispBitMap->_rows = y; +	_dispBitMap->_flags = BITMAPF_NONE; +	_dispBitMap->_planes[0] = _curBitmap; +	_dispBitMap->_planes[1] = _dispBitMap->_planes[0] + 0x10000; +	_dispBitMap->_planes[2] = _dispBitMap->_planes[1] + 0x10000; +	_dispBitMap->_planes[3] = _dispBitMap->_planes[2] + 0x10000; +	_dispBitMap->_planes[4] = _dispBitMap->_planes[3] + 0x10000;  	_vm->_anim->readDiff(_curBitmap, true); diff --git a/engines/lab/graphics.h b/engines/lab/graphics.h index 5d97507c19..8e67cd2366 100644 --- a/engines/lab/graphics.h +++ b/engines/lab/graphics.h @@ -32,6 +32,7 @@  #define LAB_GRAPHICS_H  #include "graphics/palette.h" +#include "lab/anim.h"  namespace Lab { @@ -67,7 +68,7 @@ public:  	int16 VGAScaleY(int16 y);  	uint16 SVGACord(uint16 cord);  	void loadPict(const char *filename); -	bool readPict(const char *filename, bool playOnce); +	void readPict(const char *filename, bool playOnce);  	void freePict();  	byte *readPictToMem(const char *filename, uint16 x, uint16 y);  	void doScrollBlack(); @@ -152,6 +153,8 @@ public:  	byte *_currentDisplayBuffer;  	bool _doNotDrawMessage;  	uint16 *FadePalette; +	BitMap bit1; +	BitMap *_dispBitMap;  };  } // End of namespace Lab diff --git a/engines/lab/special.cpp b/engines/lab/special.cpp index 6642865cda..e49119634a 100644 --- a/engines/lab/special.cpp +++ b/engines/lab/special.cpp @@ -59,7 +59,6 @@ static uint16 monitorPage;  static const char *TextFileName;  Image *MonButton; -extern BitMap *DispBitMap, *DrawBitMap;  #define INCL(BITSET,BIT) ((BITSET) |= (BIT))  #define SETBIT(BITSET,BITNUM)   INCL(BITSET, (1 << (BITNUM))) diff --git a/engines/lab/tilepuzzle.cpp b/engines/lab/tilepuzzle.cpp index 5ab0454086..0d050cc6bc 100644 --- a/engines/lab/tilepuzzle.cpp +++ b/engines/lab/tilepuzzle.cpp @@ -163,7 +163,7 @@ void LabEngine::changeTile(uint16 col, uint16 row) {  		if (check) {  			_conditions->inclElement(BRICKOPEN);  /* unlocked combination */  			_anim->_doBlack = true; -			check = _graphics->readPict("p:Up/BDOpen", true); +			_graphics->readPict("p:Up/BDOpen", true);  		}  	}  }  | 
