From 18077762d738178795c99d38010052b95cb1cef5 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Mon, 11 Jul 2011 20:37:37 +1000 Subject: CGE: Standardised Sprite::seq on always allocating/freeing data --- engines/cge/vga13h.cpp | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'engines/cge/vga13h.cpp') 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; -- cgit v1.2.3