aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruruk2014-07-15 22:15:06 +0200
committeruruk2014-07-15 22:15:06 +0200
commit0b0f998aacb1d8804e8cdf2679df69966a643c41 (patch)
tree6060cc1e487d7b9f55acef42e52ff0fdf80201e4
parentfbd8f2c390af8f73a138110450e4f2b98adffd49 (diff)
downloadscummvm-rg350-0b0f998aacb1d8804e8cdf2679df69966a643c41.tar.gz
scummvm-rg350-0b0f998aacb1d8804e8cdf2679df69966a643c41.tar.bz2
scummvm-rg350-0b0f998aacb1d8804e8cdf2679df69966a643c41.zip
CGE2: Try a different approach regarding _dim.
Now it doesn't crash the hospital scene, but I am not entirely sure it's totally leak-free...
-rw-r--r--engines/cge2/hero.cpp23
-rw-r--r--engines/cge2/hero.h1
2 files changed, 15 insertions, 9 deletions
diff --git a/engines/cge2/hero.cpp b/engines/cge2/hero.cpp
index 677811885e..0a72178fe7 100644
--- a/engines/cge2/hero.cpp
+++ b/engines/cge2/hero.cpp
@@ -33,7 +33,11 @@ namespace CGE2 {
Hero::Hero(CGE2Engine *vm)
: Sprite(vm), _contact(nullptr), _dir(kNoDir),
- _curDim(0), _tracePtr(-1), _ignoreMap(false), _isDimLoaded(false) {
+ _curDim(0), _tracePtr(-1), _ignoreMap(false) {
+
+ for (int i = 0; i < kDimMax; i++) {
+ _dim[i] = nullptr;
+ }
}
Sprite *Hero::expand() { // It's very similar to Sprite's expand, but doesn't bother with "labels" for example. TODO: Try to unify the two later!
@@ -57,15 +61,18 @@ Sprite *Hero::expand() { // It's very similar to Sprite's expand, but doesn't bo
int cnt[kActions];
Seq *seq;
int section = kIdPhase;
-
- if (!_isDimLoaded) {
- for (int i = 0; i < kDimMax; i++) {
- _dim[i] = new Bitmap[_shpCnt];
- for (int j = 0; j < _shpCnt; j++)
- _dim[i][j].setVM(_vm);
+
+ for (int i = 0; i < kDimMax; i++) {
+ if (_dim[i] != nullptr) {
+ delete[] _dim[i];
+ _dim[i] = nullptr;
}
+ }
- _isDimLoaded = true;
+ for (int i = 0; i < kDimMax; i++) {
+ _dim[i] = new Bitmap[_shpCnt];
+ for (int j = 0; j < _shpCnt; j++)
+ _dim[i][j].setVM(_vm);
}
if (_seqCnt) {
diff --git a/engines/cge2/hero.h b/engines/cge2/hero.h
index f45a65211b..e8cce711f4 100644
--- a/engines/cge2/hero.h
+++ b/engines/cge2/hero.h
@@ -62,7 +62,6 @@ struct HeroTab {
};
class Hero : public Sprite {
- bool _isDimLoaded;
int _hig[kDimMax];
Sprite *_contact;
public: