aboutsummaryrefslogtreecommitdiff
path: root/engines/cge/vga13h.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2011-07-11 20:37:37 +1000
committerPaul Gilbert2011-07-11 20:37:37 +1000
commit18077762d738178795c99d38010052b95cb1cef5 (patch)
tree621ad180dfb152a6cda08b53b32bbba79f7f7e49 /engines/cge/vga13h.cpp
parent10ca53a00c3ae13c520dbf871bb7f6ec65318706 (diff)
downloadscummvm-rg350-18077762d738178795c99d38010052b95cb1cef5.tar.gz
scummvm-rg350-18077762d738178795c99d38010052b95cb1cef5.tar.bz2
scummvm-rg350-18077762d738178795c99d38010052b95cb1cef5.zip
CGE: Standardised Sprite::seq on always allocating/freeing data
Diffstat (limited to 'engines/cge/vga13h.cpp')
-rw-r--r--engines/cge/vga13h.cpp29
1 files changed, 22 insertions, 7 deletions
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;