[Scummvm-cvs-logs] scummvm master -> 3583c949f253330dbf4c53a66b74e764de9ea156

Strangerke Strangerke at scummvm.org
Sat Sep 17 17:23:27 CEST 2011


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
3583c949f2 CGE: Move some more globals to CGEEngine


Commit: 3583c949f253330dbf4c53a66b74e764de9ea156
    https://github.com/scummvm/scummvm/commit/3583c949f253330dbf4c53a66b74e764de9ea156
Author: Strangerke (strangerke at scummvm.org)
Date: 2011-09-17T08:17:22-07:00

Commit Message:
CGE: Move some more globals to CGEEngine

Changed paths:
    engines/cge/bitmap.cpp
    engines/cge/bitmap.h
    engines/cge/cge.cpp
    engines/cge/cge.h
    engines/cge/cge_main.cpp
    engines/cge/snail.cpp
    engines/cge/walk.cpp
    engines/cge/walk.h



diff --git a/engines/cge/bitmap.cpp b/engines/cge/bitmap.cpp
index 27ab577..39bafc5 100644
--- a/engines/cge/bitmap.cpp
+++ b/engines/cge/bitmap.cpp
@@ -34,15 +34,6 @@
 
 namespace CGE {
 
-Dac *Bitmap::_pal = NULL;
-
-void Bitmap::init() {
-	_pal = NULL;
-}
-
-void Bitmap::deinit() {
-}
-
 Bitmap::Bitmap(CGEEngine *vm, const char *fname) : _m(NULL), _v(NULL), _map(0), _vm(vm) {
 	debugC(1, kCGEDebugBitmap, "Bitmap::Bitmap(%s)", fname);
 
@@ -373,16 +364,16 @@ bool Bitmap::loadVBM(EncryptedStream *f) {
 
 	if (!f->err()) {
 		if (p) {
-			if (_pal) {
+			if (_vm->_bitmapPalette) {
 				// Read in the palette
 				byte palData[kPalSize];
 				f->read(palData, kPalSize);
 				
 				const byte *srcP = palData;
 				for (int idx = 0; idx < kPalCount; idx++, srcP += 3) {
-					_pal[idx]._r = *srcP;
-					_pal[idx]._g = *(srcP + 1);
-					_pal[idx]._b = *(srcP + 2);
+					_vm->_bitmapPalette[idx]._r = *srcP;
+					_vm->_bitmapPalette[idx]._g = *(srcP + 1);
+					_vm->_bitmapPalette[idx]._b = *(srcP + 2);
 				}
 			} else
 				f->seek(f->pos() + kPalSize);
diff --git a/engines/cge/bitmap.h b/engines/cge/bitmap.h
index bb935e7..aa62827 100644
--- a/engines/cge/bitmap.h
+++ b/engines/cge/bitmap.h
@@ -58,7 +58,6 @@ class Bitmap {
 	char *forceExt(char *buf, const char *name, const char *ext);
 	bool loadVBM(EncryptedStream *f);
 public:
-	static Dac *_pal;
 	uint16 _w;
 	uint16 _h;
 	uint8 *_m;
@@ -72,8 +71,6 @@ public:
 	Bitmap(CGEEngine *vm, const Bitmap &bmp);
 	~Bitmap();
 
-	static void init();
-	static void deinit();
 	Bitmap *code();
 	Bitmap &operator=(const Bitmap &bmp);
 	void hide(int16 x, int16 y);
diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp
index 68b07c8..f1b69a0 100644
--- a/engines/cge/cge.cpp
+++ b/engines/cge/cge.cpp
@@ -52,6 +52,9 @@ CGEEngine::CGEEngine(OSystem *syst, const ADGameDescription *gameDescription)
 	_demoText    = kDemo;
 	_oldLev      = 0;
 	_pocPtr      = 0;
+	_bitmapPalette = NULL;
+
+
 
 }
 
@@ -84,10 +87,6 @@ void CGEEngine::init() {
 	// Create debugger console
 	_console = new CGEConsole(this);
 
-	// Initialise classes that have static members
-	Bitmap::init();
-	Cluster::init(this);
-
 	// Initialise engine objects
 	_font = new Font(this, "CGE");
 	_text = new Text(this, "CGE");
@@ -140,10 +139,6 @@ void CGEEngine::init() {
 }
 
 void CGEEngine::deinit() {
-	// Call classes with static members to clear them up
-	Bitmap::deinit();
-	Cluster::init(this);
-
 	// Remove all of our debug levels here
 	DebugMan.clearAllDebugChannels();
 
diff --git a/engines/cge/cge.h b/engines/cge/cge.h
index 5bf6e27..1d7ad69 100644
--- a/engines/cge/cge.h
+++ b/engines/cge/cge.h
@@ -51,6 +51,7 @@ class SceneLight;
 class Snail;
 class EventManager;
 class ResourceManager;
+class Walk;
 
 #define kSavegameVersion 2
 #define kSavegameStrSize 11
@@ -70,7 +71,8 @@ class ResourceManager;
 #define kPathMax    128
 #define kCryptSeed  0xA5
 #define kMaxFile    128
-
+#define kMapXCnt       40
+#define kMapZCnt       20
 
 // our engine debug channels
 enum {
@@ -156,6 +158,8 @@ public:
 	int    _soundOk;
 	int    _gameCase2Cpt;
 	int    _offUseCount;
+	Dac   *_bitmapPalette;
+	uint8 _clusterMap[kMapZCnt][kMapXCnt];
 
 	Sprite *_sprTv;
 	Sprite *_sprK1;
@@ -184,6 +188,7 @@ public:
 	Sound *_sound;
 	ResourceManager *_resman;
 	Sprite *_pocket[kPocketNX];
+	Walk *_hero;
 
 	Common::RandomSource _randomSource;
 	MusicPlayer *_midiPlayer;
diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp
index de35118..4666181 100644
--- a/engines/cge/cge_main.cpp
+++ b/engines/cge/cge_main.cpp
@@ -497,7 +497,7 @@ void CGEEngine::loadMapping() {
 			
 			// Read in the data
 			for (int z = 0; z < kMapZCnt; ++z) {
-				cf.read(&Cluster::_map[z][0], kMapXCnt);
+				cf.read(&_clusterMap[z][0], kMapXCnt);
 			}
 		}
 	}
@@ -529,7 +529,7 @@ void CGEEngine::setMapBrick(int x, int z) {
 		char n[6];
 		s->gotoxy(x * kMapGridX, kMapTop + z * kMapGridZ);
 		sprintf(n, "%02d:%02d", x, z);
-		Cluster::_map[z][x] = 1;
+		_clusterMap[z][x] = 1;
 		s->setName(n);
 		_vga->_showQ->insert(s, _vga->_showQ->first());
 	}
@@ -596,9 +596,9 @@ void CGEEngine::showBak(int ref) {
 	if (!spr)
 		return;
 
-	Bitmap::_pal = _vga->_sysPal;
+	_bitmapPalette = _vga->_sysPal;
 	spr->expand();
-	Bitmap::_pal = NULL;
+	_bitmapPalette = NULL;
 	spr->show(2);
 	_vga->copyPage(1, 2);
 	_sys->setPal();
@@ -802,7 +802,7 @@ void System::touch(uint16 mask, int x, int y) {
 		_vm->postMiniStep(selectedScene - 1);
 
 		if (mask & kMouseLeftUp) {
-			if (selectedScene && _vm->_snail->idle() && _hero->_tracePtr < 0)
+			if (selectedScene && _vm->_snail->idle() && _vm->_hero->_tracePtr < 0)
 				_vm->switchScene(selectedScene);
 
 			if (_vm->_horzLine && !_vm->_horzLine->_flags._hide) {
@@ -810,13 +810,13 @@ void System::touch(uint16 mask, int x, int y) {
 					Cluster tmpCluster = _vm->XZ(x, y);
 					int16 x1 = tmpCluster._pt.x;
 					int16 z1 = tmpCluster._pt.y;
-					Cluster::_map[z1][x1] = 1;
+					_vm->_clusterMap[z1][x1] = 1;
 					_vm->setMapBrick(x1, z1);
 				}
 			} else {
-				if (!_talk && _vm->_snail->idle() && _hero
+				if (!_talk && _vm->_snail->idle() && _vm->_hero
 				        && y >= kMapTop && y < kMapTop + kMapHig && !_vm->_game) {
-					_hero->findWay(_vm->XZ(x, y));
+					_vm->_hero->findWay(_vm->XZ(x, y));
 				}
 			}
 		}
@@ -833,7 +833,7 @@ void System::tick() {
 				else { // CHECKME: Before, was: if (Startup::_core >= CORE_MID) {
 					int n = _vm->newRandom(100);
 					if (n > 96)
-						_vm->heroCover(6 + (_hero->_x + _hero->_w / 2 < kScrWidth / 2));
+						_vm->heroCover(6 + (_vm->_hero->_x + _vm->_hero->_w / 2 < kScrWidth / 2));
 					else if (n > 90)
 						_vm->heroCover(5);
 					else if (n > 60)
@@ -880,7 +880,7 @@ void CGEEngine::switchMapping() {
 	if (_horzLine && _horzLine->_flags._hide) {
 		for (int i = 0; i < kMapZCnt; i++) {
 			for (int j = 0; j < kMapXCnt; j++) {
-				if (Cluster::_map[i][j])
+				if (_clusterMap[i][j])
 					setMapBrick(j, i);
 			}
 		}
@@ -949,7 +949,7 @@ void Sprite::touch(uint16 mask, int x, int y) {
 	if ((mask & kMouseRightUp) && _vm->_snail->idle()) {
 		Sprite *ps = (_vm->_pocLight->_seqPtr) ? _vm->_pocket[_vm->_pocPtr] : NULL;
 		if (ps) {
-			if (_flags._kept || _hero->distance(this) < kDistMax) {
+			if (_flags._kept || _vm->_hero->distance(this) < kDistMax) {
 				if (works(ps)) {
 					_vm->feedSnail(ps, kTake);
 				} else
@@ -961,7 +961,7 @@ void Sprite::touch(uint16 mask, int x, int y) {
 			if (_flags._kept) {
 				mask |= kMouseLeftUp;
 			} else {
-				if (_hero->distance(this) < kDistMax) {
+				if (_vm->_hero->distance(this) < kDistMax) {
 					if (_flags._port) {
 						if (_vm->findPocket(NULL) < 0) {
 							_vm->pocFul();
@@ -1222,7 +1222,7 @@ Cluster CGEEngine::XZ(int16 x, int16 y) {
 	if (y > kMapTop + kMapHig - kMapGridZ)
 		y = kMapTop + kMapHig - kMapGridZ;
 
-	return Cluster(x / kMapGridX, (y - kMapTop) / kMapGridZ);
+	return Cluster(this, x / kMapGridX, (y - kMapTop) / kMapGridZ);
 }
 
 void CGEEngine::killText() {
@@ -1447,11 +1447,11 @@ bool CGEEngine::showTitle(const char *name) {
 	if (_eventManager->_quitFlag)
 		return false;
 
-	Bitmap::_pal = _vga->_sysPal;
+	_bitmapPalette = _vga->_sysPal;
 	BitmapPtr *LB = new BitmapPtr[2];
 	LB[0] = new Bitmap(this, name);
 	LB[1] = NULL;
-	Bitmap::_pal = NULL;
+	_bitmapPalette = NULL;
 
 	Sprite D(this, LB);
 	D._flags._kill = true;
diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp
index 148307d..3c85f4a 100644
--- a/engines/cge/snail.cpp
+++ b/engines/cge/snail.cpp
@@ -565,12 +565,12 @@ void CGEEngine::snSend(Sprite *spr, int val) {
 			spr->_flags._slav = false;
 		} else {
 			if (spr->_ref % 1000 == 0)
-				Bitmap::_pal = _vga->_sysPal;
+				_bitmapPalette = _vga->_sysPal;
 			if (spr->_flags._back)
 				spr->backShow(true);
 			else
 				expandSprite(spr);
-			Bitmap::_pal = NULL;
+			_bitmapPalette = NULL;
 		}
 	}
 }
@@ -976,7 +976,7 @@ void Snail::runCom() {
 		case kSnWait:
 			if (spr) {
 				if (spr->seqTest(snc->_val) &&
-					(snc->_val >= 0 || spr != _hero || _hero->_tracePtr < 0)) {
+					(snc->_val >= 0 || spr != _vm->_hero || _vm->_hero->_tracePtr < 0)) {
 					_timerExpiry = g_system->getMillis() + spr->_time * kSnailFrameDelay;
 				} else {
 					_busy = false;
@@ -992,7 +992,7 @@ void Snail::runCom() {
 			break;
 		case kSnSay:
 			if (spr && _talkEnable) {
-				if (spr == _hero && spr->seqTest(-1))
+				if (spr == _vm->_hero && spr->seqTest(-1))
 					spr->step(kSeqHTalk);
 				_text->say(_text->getText(snc->_val), spr);
 				_vm->_sys->_funDel = kHeroFun0;
@@ -1006,7 +1006,7 @@ void Snail::runCom() {
 			break;
 		case kSnTime:
 			if (spr && _talkEnable) {
-				if (spr == _hero && spr->seqTest(-1))
+				if (spr == _vm->_hero && spr->seqTest(-1))
 					spr->step(kSeqHTalk);
 				_text->sayTime(spr);
 			}
diff --git a/engines/cge/walk.cpp b/engines/cge/walk.cpp
index 314d592..04c85a4 100644
--- a/engines/cge/walk.cpp
+++ b/engines/cge/walk.cpp
@@ -30,17 +30,16 @@
 
 namespace CGE {
 
-Walk *_hero;
-
-uint8 Cluster::_map[kMapZCnt][kMapXCnt];
-CGEEngine *Cluster::_vm;
+Cluster::Cluster(CGEEngine *vm, int16 a, int16 b) : _vm(vm) {
+	_pt = Common::Point(a, b);
+}
 
-void Cluster::init(CGEEngine *vm) {
-	_vm = vm;
+Cluster::Cluster(CGEEngine *vm) : _vm(vm) {
+	_pt = Common::Point(-1, -1);
 }
 
 uint8 &Cluster::cell() {
-	return _map[_pt.y][_pt.x];
+	return _vm->_clusterMap[_pt.y][_pt.x];
 }
 
 bool Cluster::isValid() const {
@@ -48,7 +47,16 @@ bool Cluster::isValid() const {
 }
 
 Walk::Walk(CGEEngine *vm, BitmapPtr *shpl)
-	: Sprite(vm, shpl), _dir(kDirNone), _tracePtr(-1), _level(0), _target(-1, -1), _findLevel(-1), _vm(vm) {
+	: Sprite(vm, shpl), _dir(kDirNone), _tracePtr(-1), _level(0), _target(-1, -1), _findLevel(-1), _here(vm), _vm(vm) {
+	for (int i = 0; i < kMaxFindLevel; i++) {
+		Cluster *tmpClust = new Cluster(_vm);
+		_trace.push_back(tmpClust);
+	}
+}
+
+Walk::~Walk() {
+	for (uint idx = 0; idx < _trace.size(); ++idx)
+		delete _trace[idx];
 }
 
 void Walk::tick() {
@@ -74,11 +82,11 @@ void Walk::tick() {
 	if (_flags._hold || _tracePtr < 0) {
 		park();
 	} else {
-		if (_here._pt == _trace[_tracePtr]._pt) {
+		if (_here._pt == _trace[_tracePtr]->_pt) {
 			if (--_tracePtr < 0)
 				park();
 		} else {
-			Common::Point tmpPoint = _trace[_tracePtr]._pt - _here._pt;
+			Common::Point tmpPoint = _trace[_tracePtr]->_pt - _here._pt;
 			int16 dx = tmpPoint.x;
 			int16 dz = tmpPoint.y;
 			Dir d = (dx) ? ((dx > 0) ? kDirEast : kDirWest) : ((dz > 0) ? kDirSouth : kDirNorth);
@@ -147,7 +155,7 @@ void Walk::findWay(Cluster c) {
 		int16 x = c._pt.x;
 		int16 z = c._pt.y;
 
-		if (find1Way(Cluster(x, z)))
+		if (find1Way(Cluster(_vm, x, z)))
 			break;
 	}
 
@@ -168,7 +176,7 @@ void Walk::findWay(Sprite *spr) {
 	else
 		x -= _w / 2 - kWalkSide;
 
-	findWay(Cluster((x / kMapGridX),
+	findWay(Cluster(_vm, (x / kMapGridX),
 	                ((z < kMapZCnt - kDistMax) ? (z + 1)
 	                 : (z - 1))));
 }
@@ -179,7 +187,7 @@ bool Walk::lower(Sprite *spr) {
 
 void Walk::reach(Sprite *spr, int mode) {
 	if (spr) {
-		_hero->findWay(spr);
+		_vm->_hero->findWay(spr);
 		if (mode < 0) {
 			mode = spr->_flags._east;
 			if (lower(spr))
@@ -190,7 +198,7 @@ void Walk::reach(Sprite *spr, int mode) {
 	_vm->_snail->insCom(kSnPause, -1, 64, NULL);
 	_vm->_snail->insCom(kSnSeq, -1, kTSeq + mode, this);
 	if (spr) {
-		_vm->_snail->insCom(kSnWait, -1, -1, _hero);
+		_vm->_snail->insCom(kSnWait, -1, -1, _vm->_hero);
 		//SNINSERT(SNWALK, -1, -1, spr);
 	}
 	// sequence is not finished,
@@ -207,7 +215,7 @@ bool Cluster::chkBar() const {
 }
 
 bool Walk::find1Way(Cluster c) {
-	const Cluster tab[4] = { Cluster(-1, 0), Cluster(1, 0), Cluster(0, -1), Cluster(0, 1)};
+	const Cluster tab[4] = { Cluster(_vm, -1, 0), Cluster(_vm, 1, 0), Cluster(_vm, 0, -1), Cluster(_vm, 0, 1)};
 	const int tabLen = 4;
 
 	if (c._pt == _target)
@@ -247,7 +255,7 @@ bool Walk::find1Way(Cluster c) {
 
 			if (foundPath) {
 				// Set route point
-				_trace[_level] = start;
+				_trace[_level]->_pt = start._pt;
 				return true;
 			}
 		} while (!c.chkBar() && !c.cell());
diff --git a/engines/cge/walk.h b/engines/cge/walk.h
index 2224ae8..99dc362 100644
--- a/engines/cge/walk.h
+++ b/engines/cge/walk.h
@@ -34,8 +34,6 @@
 
 namespace CGE {
 
-#define kMapXCnt       40
-#define kMapZCnt       20
 #define kMapArrSize    (kMapZCnt * kMapXCnt)
 #define kMapTop        80
 #define kMapHig        80
@@ -47,15 +45,12 @@ enum Dir { kDirNone = -1, kDirNorth, kDirEast, kDirSouth, kDirWest };
 
 class Cluster {
 public:
-	static uint8 _map[kMapZCnt][kMapXCnt];
-	static CGEEngine *_vm;
+	CGEEngine *_vm;
 	Common::Point _pt;
-
-	static void init(CGEEngine *vm);
 public:
 	uint8 &cell();
-	Cluster(int16 a, int16 b) { _pt = Common::Point(a, b); }
-	Cluster() { _pt = Common::Point(-1, -1); }
+	Cluster(CGEEngine *vm, int16 a, int16 b);
+	Cluster(CGEEngine *vm);
 	bool chkBar() const;
 	bool isValid() const;
 };
@@ -69,10 +64,11 @@ public:
 	int _level;
 	int _findLevel;
 	Common::Point _target;
-	Cluster _trace[kMaxFindLevel];
+	Common::Array<Cluster *> _trace;
 
 	Dir _dir;
 	Walk(CGEEngine *vm, BitmapPtr *shpl);
+	~Walk();
 	void tick();
 	void findWay(Cluster c);
 	void findWay(Sprite *spr);
@@ -86,8 +82,6 @@ public:
 	bool find1Way(Cluster c);
 };
 
-extern Walk *_hero;
-
 } // End of namespace CGE
 
 #endif






More information about the Scummvm-git-logs mailing list