diff options
| author | Paul Gilbert | 2011-07-11 20:37:37 +1000 | 
|---|---|---|
| committer | Paul Gilbert | 2011-07-11 20:37:37 +1000 | 
| commit | 18077762d738178795c99d38010052b95cb1cef5 (patch) | |
| tree | 621ad180dfb152a6cda08b53b32bbba79f7f7e49 | |
| parent | 10ca53a00c3ae13c520dbf871bb7f6ec65318706 (diff) | |
| download | scummvm-rg350-18077762d738178795c99d38010052b95cb1cef5.tar.gz scummvm-rg350-18077762d738178795c99d38010052b95cb1cef5.tar.bz2 scummvm-rg350-18077762d738178795c99d38010052b95cb1cef5.zip | |
CGE: Standardised Sprite::seq on always allocating/freeing data
| -rw-r--r-- | engines/cge/cge_main.cpp | 5 | ||||
| -rw-r--r-- | engines/cge/events.cpp | 14 | ||||
| -rw-r--r-- | engines/cge/talk.cpp | 7 | ||||
| -rw-r--r-- | engines/cge/vga13h.cpp | 29 | ||||
| -rw-r--r-- | engines/cge/vga13h.h | 2 | 
5 files changed, 42 insertions, 15 deletions
| diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index 4c20f31cac..76d1b7dbcd 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -1587,7 +1587,10 @@ void CGEEngine::runGame() {  		{ 1, 6, 0, 0,  4 },  		{ 0, 1, 0, 0, 16 },  	}; -	_pocLight->setSeq(pocSeq); +	Seq *seq = (Seq *)malloc(7 * sizeof(Seq)); +	Common::copy(&pocSeq[0], &pocSeq[7], seq); +	_pocLight->setSeq(seq); +  	_pocLight->_flags._tran = true;  	_pocLight->_time = 1;  	_pocLight->_z = 120; diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp index 433f7c6db9..0bf5191530 100644 --- a/engines/cge/events.cpp +++ b/engines/cge/events.cpp @@ -142,11 +142,6 @@ void Keyboard::newKeyboard(Common::Event &event) {  /*----------------- MOUSE interface -----------------*/  Mouse::Mouse(CGEEngine *vm) : Sprite(vm, NULL), _busy(NULL), _hold(NULL), _hx(0), _vm(vm) { -	static Seq ms[] = { -		{ 0, 0, 0, 0, 1 }, -		{ 1, 1, 0, 0, 1 } -	}; -  	_hold = NULL;  	_hx = 0;   	_hy = 0; @@ -155,7 +150,14 @@ Mouse::Mouse(CGEEngine *vm) : Sprite(vm, NULL), _busy(NULL), _hold(NULL), _hx(0)  	_busy = NULL;  	_active = false;  	_flags._kill = false; -	setSeq(ms); + +	static Seq ms[] = { +		{ 0, 0, 0, 0, 1 }, +		{ 1, 1, 0, 0, 1 } +	}; +	Seq *seq = (Seq *)malloc(2 * sizeof(Seq)); +	Common::copy(&ms[0], &ms[2], seq); +	setSeq(seq);  	BMP_PTR *MC = new BMP_PTR[3];  	MC[0] = new Bitmap("MOUSE", true); diff --git a/engines/cge/talk.cpp b/engines/cge/talk.cpp index 146c720667..152f4a7123 100644 --- a/engines/cge/talk.cpp +++ b/engines/cge/talk.cpp @@ -310,7 +310,12 @@ void InfoLine::update(const char *tx) {  		// clear whole rectangle  		memset(v + 2, TEXT_BG, dsiz);                   // data bytes -		memmove(v + lsiz, v, psiz - lsiz); +		 +		for (byte *pDest = v + lsiz; pDest < (v + psiz); pDest += lsiz) +			*pDest = 0; +//			Common::set_to(pDest, pDest + lsiz, 0); +			//Common::copy(v, v + lsiz, pDest); +  		*(uint16 *)(v + psiz - 2) = EOI;               // plane trailer uint16  		memmove(v + psiz, v, 3 * psiz); diff --git a/engines/cge/vga13h.cpp b/engines/cge/vga13h.cpp index d92b9e97f0..ff21f5cce8 100644 --- a/engines/cge/vga13h.cpp +++ b/engines/cge/vga13h.cpp @@ -60,8 +60,6 @@ static  VgaRegBlk VideoMode[] = {  };  bool SpeedTest   = false; -Seq _seq1[] = { { 0, 0, 0, 0, 0 } }; -Seq _seq2[] = { { 0, 1, 0, 0, 0 }, { 1, 0, 0, 0, 0 } };  extern "C"  void    SNDMIDIPlay(); @@ -383,6 +381,23 @@ BMP_PTR Sprite::shp() {  	return NULL;  } +Seq *Sprite::getConstantSeq(bool seqFlag) { +	Seq seq1[] = { { 0, 0, 0, 0, 0 } }; +	Seq seq2[] = { { 0, 1, 0, 0, 0 }, { 1, 0, 0, 0, 0 } }; + +	// Make a copy of the given seq list and return it +	Seq *seq; +	if (seqFlag) { +		 seq = (Seq *)malloc(sizeof(Seq)); +		seq[0] = seq1[0]; +	} else { +		seq = (Seq *)malloc(2 * sizeof(Seq)); +		seq[0] = seq2[0]; +		seq[1] = seq2[1]; +	} + +	return seq; +}  BMP_PTR *Sprite::setShapeList(BMP_PTR *shpP) {  	BMP_PTR *r = (_ext) ? _ext->_shpList : NULL; @@ -405,7 +420,7 @@ BMP_PTR *Sprite::setShapeList(BMP_PTR *shpP) {  		_ext->_shpList = shpP;  		_flags._bDel = true;  		if (!_ext->_seq) -			setSeq((_shpCnt < 2) ? _seq1 : _seq2); +			setSeq(getConstantSeq(_shpCnt < 2));  	}  	return r;  } @@ -590,7 +605,7 @@ Sprite *Sprite::expand() {  					error("Bad JUMP in SEQ [%s]", fname);  				setSeq(seq);  			} else -				setSeq((_shpCnt == 1) ? _seq1 : _seq2); +				setSeq(getConstantSeq(_shpCnt == 1));  			//disable();  // disable interupt  			setShapeList(shplist); @@ -621,8 +636,8 @@ Sprite *Sprite::contract() {  				delete e->_shpList[i];  			delete[] e->_shpList;  		} -		if (memType(e->_seq) == NEAR_MEM) -			free(e->_seq); +		free(e->_seq); +  		if (e->_near)  			free(e->_near);  		if (e->_take) @@ -1384,7 +1399,7 @@ CavLight::CavLight(CGEEngine *vm): Sprite(vm, NULL) {  Spike::Spike(CGEEngine *vm): Sprite(vm, NULL) {  	// Set the sprite list -	BMP_PTR *SP = new BMP_PTR[2]; +	BMP_PTR *SP = new BMP_PTR[3];  	SP[0] = new Bitmap("SPK_L", true);  	SP[1] = new Bitmap("SPK_R", true);  	SP[2] = NULL; diff --git a/engines/cge/vga13h.h b/engines/cge/vga13h.h index 003be7c800..177165689e 100644 --- a/engines/cge/vga13h.h +++ b/engines/cge/vga13h.h @@ -166,6 +166,8 @@ public:  class Sprite { +private: +	Seq *getConstantSeq(bool seqFlag);  protected:  	SprExt *_ext;  public: | 
