aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruruk2014-05-18 14:18:45 +0200
committeruruk2014-05-18 14:18:45 +0200
commit122db4053023ab18ef957585fa31361a0dec8922 (patch)
tree4b8d7a1d2564aefa583b87d221b8e6312fef647a
parent47e55f16646403a1dea870231e4f294c0858b9a7 (diff)
downloadscummvm-rg350-122db4053023ab18ef957585fa31361a0dec8922.tar.gz
scummvm-rg350-122db4053023ab18ef957585fa31361a0dec8922.tar.bz2
scummvm-rg350-122db4053023ab18ef957585fa31361a0dec8922.zip
CGE2: Implement Sprite::contract():
-rw-r--r--engines/cge2/vga13h.cpp51
1 files changed, 33 insertions, 18 deletions
diff --git a/engines/cge2/vga13h.cpp b/engines/cge2/vga13h.cpp
index 51a8c107ef..57c84e020e 100644
--- a/engines/cge2/vga13h.cpp
+++ b/engines/cge2/vga13h.cpp
@@ -297,26 +297,41 @@ Sprite *Sprite::expand() {
}
Sprite *Sprite::contract() {
- //SprExt *e = _ext;
- //if (!e)
- // return this;
-
- //if (e->_name)
- // delete[] e->_name;
- //if (_flags._bDel && e->_shpList) {
- // for (int i = 0; e->_shpList[i]; i++)
- // delete e->_shpList[i];
- // delete[] e->_shpList;
- //}
+ SprExt *e = _ext;
+ if (!e)
+ return this;
- //free(e->_seq);
- //free(e->_near);
- //free(e->_take);
+ if (_file[2] == '~') { // FLY-type sprite
+ Seq *seq = _ext->_seq;
+ // return to middle
+ gotoxyz(_pos3D - V3D(seq->_dx, seq->_dy, seq->_dz));
+ seq->_dx = seq->_dy = seq->_dz = 0;
+ }
- //delete e;
- //_ext = NULL;
+ if (notify)
+ notify();
- warning("STUB: Sprite::contract()");
+ if (e->_name)
+ delete[] e->_name;
+
+ if (e->_shpList) {
+ for (int i = 0; i < _shpCnt; i++)
+ e->_shpList[i]->release();
+ delete[] e->_shpList;
+ }
+
+ if (e->_seq) {
+ if (e->_seq == _stdSeq8)
+ _seqCnt = 0;
+ else
+ delete[] e->_seq;
+ }
+
+ for (int i = 0; i < kActions; i++)
+ if (e->_actions[i])
+ delete[] e->_actions[i];
+
+ _ext = nullptr;
return this;
}
@@ -379,7 +394,7 @@ void Sprite::gotoxyz(V2D pos) {
rem = (rem * V2D::trunc(_vm->_eye->_z) / (V2D::trunc(_vm->_eye->_z) - z));
ctr = (ctr * 3) / 4;
rem = (rem * 3) / 4;
- }
+ }
if (pos.x - ctr < 0) {
pos.x = ctr;