[Scummvm-cvs-logs] scummvm master -> a607247262a7dcb5698d601da9529a856aa7a411

DrMcCoy drmccoy at drmccoy.de
Thu Sep 15 21:30:07 CEST 2011


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

Summary:
3fe3a49283 GOB: Make sure that the evil fish don't drift up/down
79f2bb52b6 GOB: Randomize evil fish positions
a607247262 GOB: Randomize when the evil fishes enter and leave


Commit: 3fe3a4928349c67b36c05ab15be70c582b516a88
    https://github.com/scummvm/scummvm/commit/3fe3a4928349c67b36c05ab15be70c582b516a88
Author: Sven Hesse (drmccoy at users.sourceforge.net)
Date: 2011-09-15T12:24:08-07:00

Commit Message:
GOB: Make sure that the evil fish don't drift up/down

Changed paths:
    engines/gob/minigames/geisha/evilfish.cpp



diff --git a/engines/gob/minigames/geisha/evilfish.cpp b/engines/gob/minigames/geisha/evilfish.cpp
index 592e84a..e9503f4 100644
--- a/engines/gob/minigames/geisha/evilfish.cpp
+++ b/engines/gob/minigames/geisha/evilfish.cpp
@@ -94,6 +94,9 @@ void EvilFish::advance() {
 
 	bool wasLastFrame = lastFrame();
 
+	int16 oldX, oldY;
+	getPosition(oldX, oldY);
+
 	ANIObject::advance();
 
 	int16 x, y, width, height;
@@ -107,7 +110,7 @@ void EvilFish::advance() {
 	case kStateSwimLeft:
 		if (!_shouldLeave && (x >= _screenWidth - width)) {
 			setAnimation(_animTurnRight);
-			setPosition(x, y);
+			setPosition(x, oldY);
 			_state = kStateTurnRight;
 		}
 
@@ -122,7 +125,7 @@ void EvilFish::advance() {
 	case kStateSwimRight:
 		if (!_shouldLeave && (x <= 0)) {
 			setAnimation(_animTurnLeft);
-			setPosition(x, y);
+			setPosition(x, oldY);
 			_state = kStateTurnLeft;
 		}
 


Commit: 79f2bb52b655e73badef5155b7c772c705ae44e9
    https://github.com/scummvm/scummvm/commit/79f2bb52b655e73badef5155b7c772c705ae44e9
Author: Sven Hesse (drmccoy at users.sourceforge.net)
Date: 2011-09-15T12:24:08-07:00

Commit Message:
GOB: Randomize evil fish positions

Changed paths:
    engines/gob/minigames/geisha/diving.cpp



diff --git a/engines/gob/minigames/geisha/diving.cpp b/engines/gob/minigames/geisha/diving.cpp
index 38a62cc..45bbdb1 100644
--- a/engines/gob/minigames/geisha/diving.cpp
+++ b/engines/gob/minigames/geisha/diving.cpp
@@ -246,7 +246,8 @@ void Diving::evilFishEnter() {
 		            kEvilFishTypes[fishType][2], kEvilFishTypes[fishType][3],
 		            kEvilFishTypes[fishType][4]);
 
-		fish.enter((EvilFish::Direction)_vm->_util->getRandom(2), 90 + i * 20);
+		fish.enter((EvilFish::Direction)_vm->_util->getRandom(2),
+		           36 + _vm->_util->getRandom(3) * 40);
 	}
 }
 


Commit: a607247262a7dcb5698d601da9529a856aa7a411
    https://github.com/scummvm/scummvm/commit/a607247262a7dcb5698d601da9529a856aa7a411
Author: Sven Hesse (drmccoy at users.sourceforge.net)
Date: 2011-09-15T12:24:08-07:00

Commit Message:
GOB: Randomize when the evil fishes enter and leave

Changed paths:
    engines/gob/minigames/geisha/diving.cpp
    engines/gob/minigames/geisha/diving.h



diff --git a/engines/gob/minigames/geisha/diving.cpp b/engines/gob/minigames/geisha/diving.cpp
index 45bbdb1..3cb2e00 100644
--- a/engines/gob/minigames/geisha/diving.cpp
+++ b/engines/gob/minigames/geisha/diving.cpp
@@ -69,10 +69,8 @@ bool Diving::play(uint16 playerCount, bool hasPearlLocation) {
 	_vm->_video->retrace();
 
 	while (!_vm->shouldQuit()) {
-		evilFishEnter();
-
 		checkShots();
-
+		updateEvilFish();
 		updateAnims();
 
 		_vm->_draw->animateCursor(1);
@@ -124,8 +122,12 @@ void Diving::init() {
 	_heart->setVisible(true);
 	_heart->setPause(true);
 
-	for (uint i = 0; i < kEvilFishCount; i++)
-		_evilFish[i] = new EvilFish(*_objects, 320, 0, 0, 0, 0, 0);
+	for (uint i = 0; i < kEvilFishCount; i++) {
+		_evilFish[i].enterAt = 0;
+		_evilFish[i].leaveAt = 0;
+
+		_evilFish[i].evilFish = new EvilFish(*_objects, 320, 0, 0, 0, 0, 0);
+	}
 
 	for (uint i = 0; i < kMaxShotCount; i++) {
 		_shot[i] = new ANIObject(*_objects);
@@ -148,7 +150,7 @@ void Diving::init() {
 	for (uint i = 0; i < kMaxShotCount; i++)
 		_anims.push_back(_shot[i]);
 	for (uint i = 0; i < kEvilFishCount; i++)
-		_anims.push_back(_evilFish[i]);
+		_anims.push_back(_evilFish[i].evilFish);
 	_anims.push_back(_lungs);
 	_anims.push_back(_heart);
 
@@ -178,9 +180,9 @@ void Diving::deinit() {
 	}
 
 	for (uint i = 0; i < kEvilFishCount; i++) {
-		delete _evilFish[i];
+		delete _evilFish[i].evilFish;
 
-		_evilFish[i] = 0;
+		_evilFish[i].evilFish = 0;
 	}
 
 	delete _heart;
@@ -234,20 +236,39 @@ void Diving::initCursor() {
 	_vm->_draw->_cursorHotspotY = 8;
 }
 
-void Diving::evilFishEnter() {
+void Diving::updateEvilFish() {
 	for (uint i = 0; i < kEvilFishCount; i++) {
-		EvilFish &fish = *_evilFish[i];
+		ManagedEvilFish &fish = _evilFish[i];
+
+		if (fish.evilFish->isVisible()) {
+			// Evil fishes leave on their own after 30s - 40s
 
-		if (fish.isVisible())
-			continue;
+			fish.enterAt = 0;
 
-		int fishType = _vm->_util->getRandom(kEvilFishTypeCount);
-		fish.mutate(kEvilFishTypes[fishType][0], kEvilFishTypes[fishType][1],
-		            kEvilFishTypes[fishType][2], kEvilFishTypes[fishType][3],
-		            kEvilFishTypes[fishType][4]);
+			if (fish.leaveAt == 0)
+				fish.leaveAt = _vm->_util->getTimeKey() + 30000 + _vm->_util->getRandom(10000);
 
-		fish.enter((EvilFish::Direction)_vm->_util->getRandom(2),
-		           36 + _vm->_util->getRandom(3) * 40);
+			if (_vm->_util->getTimeKey() >= fish.leaveAt)
+				fish.evilFish->leave();
+
+		} else {
+			// Evil fishes enter the screen in 2s - 10s
+
+			fish.leaveAt = 0;
+
+			if (fish.enterAt == 0)
+				fish.enterAt = _vm->_util->getTimeKey() + 2000 + _vm->_util->getRandom(8000);
+
+			if (_vm->_util->getTimeKey() >= fish.enterAt) {
+				int fishType = _vm->_util->getRandom(kEvilFishTypeCount);
+				fish.evilFish->mutate(kEvilFishTypes[fishType][0], kEvilFishTypes[fishType][1],
+				                      kEvilFishTypes[fishType][2], kEvilFishTypes[fishType][3],
+				                      kEvilFishTypes[fishType][4]);
+
+				fish.evilFish->enter((EvilFish::Direction)_vm->_util->getRandom(2),
+				                     36 + _vm->_util->getRandom(3) * 40);
+			}
+		}
 	}
 }
 
@@ -337,7 +358,7 @@ void Diving::checkShots() {
 			shot.getPosition(x, y);
 
 			for (uint i = 0; i < kEvilFishCount; i++) {
-				EvilFish &evilFish = *_evilFish[i];
+				EvilFish &evilFish = *_evilFish[i].evilFish;
 
 				if (evilFish.isIn(x + 8, y + 8)) {
 					evilFish.die();
diff --git a/engines/gob/minigames/geisha/diving.h b/engines/gob/minigames/geisha/diving.h
index e2f5dd4..cb1abd8 100644
--- a/engines/gob/minigames/geisha/diving.h
+++ b/engines/gob/minigames/geisha/diving.h
@@ -53,6 +53,13 @@ private:
 	static const uint kEvilFishCount =  3;
 	static const uint kMaxShotCount  = 10;
 
+	struct ManagedEvilFish {
+		EvilFish *evilFish;
+
+		uint32 enterAt;
+		uint32 leaveAt;
+	};
+
 	GobEngine *_vm;
 
 	DECFile *_background;
@@ -64,7 +71,7 @@ private:
 	ANIObject *_lungs;
 	ANIObject *_heart;
 
-	EvilFish *_evilFish[kEvilFishCount];
+	ManagedEvilFish _evilFish[kEvilFishCount];
 
 	ANIObject *_shot[kMaxShotCount];
 
@@ -91,11 +98,10 @@ private:
 	void initScreen();
 	void initCursor();
 
-	void evilFishEnter();
-
 	void foundBlackPearl();
 	void foundWhitePearl();
 
+	void updateEvilFish();
 	void updateAnims();
 
 	int16 checkInput(int16 &mouseX, int16 &mouseY, MouseButtons &mouseButtons);






More information about the Scummvm-git-logs mailing list