[Scummvm-cvs-logs] scummvm master -> 3d5dee897ef785e3f0c48ae3d857181f314700d1

sev- sev at scummvm.org
Mon Apr 28 19:53:43 CEST 2014


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

Summary:
579c343d13 DRACI: Saving improvements (item in hand and hero position).
4128595360 DRACI: Fading out improvements.
43e3a58c2c DRACI: Hero postion in first new room after loading.
3d5dee897e Merge pull request #445 from lukaslw/second_branch


Commit: 579c343d1361801c936eedae50d956018a7d83f4
    https://github.com/scummvm/scummvm/commit/579c343d1361801c936eedae50d956018a7d83f4
Author: lukaslw (lukaslw at gmail.com)
Date: 2014-03-08T16:21:57+01:00

Commit Message:
DRACI: Saving improvements (item in hand and hero position).

Changed paths:
    engines/draci/game.cpp
    engines/draci/game.h
    engines/draci/saveload.cpp
    engines/draci/saveload.h
    engines/draci/script.cpp



diff --git a/engines/draci/game.cpp b/engines/draci/game.cpp
index e5ff1f0..98777a7 100644
--- a/engines/draci/game.cpp
+++ b/engines/draci/game.cpp
@@ -926,10 +926,12 @@ void Game::inventoryDraw() {
 void Game::inventoryReload() {
 	// Make sure all items are loaded into memory (e.g., after loading a
 	// savegame) by re-putting them on the same spot in the inventory.
+	GameItem *tempItem = _currentItem;
 	for (uint i = 0; i < kInventorySlots; ++i) {
 		putItem(_inventory[i], i);
 	}
 	setPreviousItemPosition(0);
+	_currentItem = tempItem;
 }
 
 void Game::inventorySwitch(int keycode) {
@@ -1572,7 +1574,7 @@ Game::~Game() {
 	delete[] _items;
 }
 
-void Game::DoSync(Common::Serializer &s) {
+void Game::DoSync(Common::Serializer &s, uint8 saveVersion) {
 	s.syncAsUint16LE(_currentRoom._roomNum);
 
 	for (uint i = 0; i < _info._numObjects; ++i) {
@@ -1603,6 +1605,25 @@ void Game::DoSync(Common::Serializer &s) {
 		s.syncAsSint16LE(_dialogueVars[i]);
 	}
 
+	if(saveVersion >= 2) {
+		setPositionLoaded(true);
+		if (s.isSaving()) {
+			s.syncAsSint16LE(_hero.x);
+			s.syncAsSint16LE(_hero.y);
+
+			int handItemID = _currentItem ? _currentItem->_absNum : -1;
+			s.syncAsSint16LE(handItemID);
+		} else {
+			s.syncAsSint16LE(_heroLoading.x);
+			s.syncAsSint16LE(_heroLoading.y);
+
+			int handItemID = -1;
+			s.syncAsSint16LE(handItemID);
+			_currentItem = getItem(handItemID);
+		}
+	} else {
+		_currentItem = 0;
+	}
 }
 
 static double real_to_double(byte real[6]) {
diff --git a/engines/draci/game.h b/engines/draci/game.h
index 4a8f3de..d3ae36e 100644
--- a/engines/draci/game.h
+++ b/engines/draci/game.h
@@ -215,6 +215,7 @@ public:
 	void walkHero(int x, int y, SightDirection dir);	// start walking and leave callback as is
 	void setHeroPosition(const Common::Point &p);
 	const Common::Point &getHeroPosition() const { return _hero; }
+	const Common::Point &getHeroLoadingPosition() const { return _heroLoading; }
 	void positionAnimAsHero(Animation *anim);
 	void positionHeroAsAnim(Animation *anim);
 
@@ -290,6 +291,8 @@ public:
 	void setExitLoop(bool exit) { _shouldExitLoop = exit; }
 	bool isReloaded() const { return _isReloaded; }
 	void setIsReloaded(bool value) { _isReloaded = value; }
+	bool isPositionLoaded() { return _isPositionLoaded; }
+	void setPositionLoaded(bool value) { _isPositionLoaded = value; }
 
 	void setSpeechTiming(uint tick, uint duration);
 	void shiftSpeechAndFadeTick(int delta);
@@ -327,7 +330,7 @@ public:
 	void setEnableSpeedText(bool value) { _enableSpeedText = value; }
 	bool getEnableSpeedText() const { return _enableSpeedText; }
 
-	void DoSync(Common::Serializer &s);
+	void DoSync(Common::Serializer &s, uint8 saveVersion);
 
 private:
 	void updateOrdinaryCursor();
@@ -352,6 +355,7 @@ private:
 	GameInfo _info;
 
 	Common::Point _hero;
+	Common::Point _heroLoading;
 
 	int *_variables;
 	Person *_persons;
@@ -395,6 +399,7 @@ private:
 	bool _shouldQuit;
 	bool _shouldExitLoop;
 	bool _isReloaded;
+	bool _isPositionLoaded;
 
 	uint _speechTick;
 	uint _speechDuration;
diff --git a/engines/draci/saveload.cpp b/engines/draci/saveload.cpp
index 31ac63b..3e7f865 100644
--- a/engines/draci/saveload.cpp
+++ b/engines/draci/saveload.cpp
@@ -45,7 +45,8 @@ bool readSavegameHeader(Common::InSaveFile *in, DraciSavegameHeader &header) {
 		return false;
 
 	header.version = in->readByte();
-	if (header.version != DRACI_SAVEGAME_VERSION)
+	// Version 1 is compatible with Version 2
+	if (header.version > DRACI_SAVEGAME_VERSION)
 		return false;
 
 	// Read in the string
@@ -106,7 +107,7 @@ Common::Error saveSavegameData(int saveGameIdx, const Common::String &saveName,
 	} else {
 		// Create the remainder of the savegame
 		Common::Serializer s(NULL, f);
-		vm._game->DoSync(s);
+		vm._game->DoSync(s, header.version);
 
 		f->finalize();
 		delete f;
@@ -140,7 +141,7 @@ Common::Error loadSavegameData(int saveGameIdx, DraciEngine *vm) {
 
 	// Synchronise the remaining data of the savegame
 	Common::Serializer s(f, NULL);
-	vm->_game->DoSync(s);
+	vm->_game->DoSync(s, header.version);
 	delete f;
 
 	// Post-processing
diff --git a/engines/draci/saveload.h b/engines/draci/saveload.h
index 8b38ccb..6f951a3 100644
--- a/engines/draci/saveload.h
+++ b/engines/draci/saveload.h
@@ -29,7 +29,7 @@
 
 namespace Draci {
 
-#define DRACI_SAVEGAME_VERSION 1
+#define DRACI_SAVEGAME_VERSION 2
 
 struct DraciSavegameHeader {
 	uint8 version;
diff --git a/engines/draci/script.cpp b/engines/draci/script.cpp
index 97dde39..1149cdf 100644
--- a/engines/draci/script.cpp
+++ b/engines/draci/script.cpp
@@ -634,8 +634,16 @@ void Script::stayOn(const Common::Array<int> &params) {
 		return;
 	}
 
-	int x = params[0];
-	int y = params[1];
+	int x, y;
+	Common::Point afterLoadingPos = _vm->_game->getHeroLoadingPosition();
+	if(_vm->_game->isPositionLoaded() == true) {
+		x = afterLoadingPos.x;
+		y = afterLoadingPos.y;
+	}
+	else {
+		x = params[0];
+		y = params[1];
+	}
 	SightDirection dir = static_cast<SightDirection> (params[2]);
 
 	// Jumps into the given position regardless of the walking map.
@@ -670,6 +678,11 @@ void Script::walkOnPlay(const Common::Array<int> &params) {
 		return;
 	}
 
+	if(_vm->_game->isPositionLoaded() == true) {
+		_vm->_game->setPositionLoaded(false);
+		return;
+	}
+
 	int x = params[0];
 	int y = params[1];
 	SightDirection dir = static_cast<SightDirection> (params[2]);


Commit: 41285953605c0bc7a42988eff3b6f6de1038cda2
    https://github.com/scummvm/scummvm/commit/41285953605c0bc7a42988eff3b6f6de1038cda2
Author: lukaslw (lukaslw at gmail.com)
Date: 2014-03-08T16:24:17+01:00

Commit Message:
DRACI: Fading out improvements.

Changed paths:
    engines/draci/game.cpp
    engines/draci/game.h



diff --git a/engines/draci/game.cpp b/engines/draci/game.cpp
index 98777a7..3a335f2 100644
--- a/engines/draci/game.cpp
+++ b/engines/draci/game.cpp
@@ -72,6 +72,7 @@ Game::Game(DraciEngine *vm) : _vm(vm), _walkingState(vm) {
 	_fadePhases = 0;
 	_fadePhase = 0;
 	_fadeTick = 0;
+	_isFadeOut = 1;
 	_mouseChangeTick = 0;
 	_enableQuickHero = 0;
 	_wantQuickHero = 0;
@@ -216,6 +217,7 @@ void Game::start() {
 			// init scripts.  This flag was turned on to skip the rest of
 			// those programs.  Don't call loop(), because the
 			// location may have changed.
+			fadePalette(true);
 			continue;
 		}
 
@@ -478,6 +480,7 @@ void Game::handleDialogueLoop() {
 }
 
 void Game::fadePalette(bool fading_out) {
+	_isFadeOut = fading_out;
 	const byte *startPal = NULL;
 	const byte *endPal = _currentRoom._palette >= 0
 		? _vm->_paletteArchive->getFile(_currentRoom._palette)->_data
@@ -551,6 +554,19 @@ void Game::advanceAnimationsAndTestLoopExit() {
 	_vm->_anims->drawScene(_vm->_screen->getSurface());
 	_vm->_screen->copyToScreen();
 	_vm->_system->delayMillis(kTimeUnit);
+	if(_isFadeOut) {
+		fadePalette(false);
+		// Set cursor state
+		// Need to do this after we set the palette since the cursors use it
+		if (_currentRoom._mouseOn) {
+			debugC(6, kDraciLogicDebugLevel, "Mouse: ON");
+			_vm->_mouse->cursorOn();
+			_vm->_mouse->setCursorType(kNormalCursor);
+		} else {
+			debugC(6, kDraciLogicDebugLevel, "Mouse: OFF");
+			_vm->_mouse->cursorOff();
+		}
+	}
 
 	// If the hero has arrived at his destination, after even the last
 	// phase was correctly animated, run the callback.
@@ -598,6 +614,8 @@ void Game::loop(LoopSubstatus substatus, bool shouldExit) {
 			break;
 		}
 
+		advanceAnimationsAndTestLoopExit();
+
 		if (_vm->_mouse->isCursorOn()) {
 			// Find animation under cursor and the game object
 			// corresponding to it
@@ -629,8 +647,6 @@ void Game::loop(LoopSubstatus substatus, bool shouldExit) {
 			}
 		}
 
-		advanceAnimationsAndTestLoopExit();
-
 	} while (!shouldExitLoop());
 
 	setLoopSubstatus(kOuterLoop);
@@ -1435,7 +1451,6 @@ void Game::enterNewRoom() {
 	_vm->_screen->setPalette(NULL, 0, kNumColors);
 	_vm->_anims->drawScene(_vm->_screen->getSurface());
 	_vm->_screen->copyToScreen();
-	fadePalette(false);
 
 	// Run the program for the gate the dragon came through
 	debugC(6, kDraciLogicDebugLevel, "Running program for gate %d", _newGate);
@@ -1448,17 +1463,6 @@ void Game::enterNewRoom() {
 	// Don't immediately switch to the map or inventory even if the mouse
 	// position tell us to.
 	_mouseChangeTick = kMouseDoNotSwitch;
-
-	// Set cursor state
-	// Need to do this after we set the palette since the cursors use it
-	if (_currentRoom._mouseOn) {
-		debugC(6, kDraciLogicDebugLevel, "Mouse: ON");
-		_vm->_mouse->cursorOn();
-		_vm->_mouse->setCursorType(kNormalCursor);
-	} else {
-		debugC(6, kDraciLogicDebugLevel, "Mouse: OFF");
-		_vm->_mouse->cursorOff();
-	}
 }
 
 void Game::positionAnimAsHero(Animation *anim) {
diff --git a/engines/draci/game.h b/engines/draci/game.h
index d3ae36e..638c979 100644
--- a/engines/draci/game.h
+++ b/engines/draci/game.h
@@ -413,6 +413,7 @@ private:
 	int _fadePhases;
 	int _fadePhase;
 	uint _fadeTick;
+	bool _isFadeOut;
 	int _mouseChangeTick;
 
 	bool _enableQuickHero;


Commit: 43e3a58c2cdba50e30a0eb8e758e1baa90b890c3
    https://github.com/scummvm/scummvm/commit/43e3a58c2cdba50e30a0eb8e758e1baa90b890c3
Author: lukaslw (lukaslw at gmail.com)
Date: 2014-03-11T16:42:53+01:00

Commit Message:
DRACI: Hero postion in first new room after loading.

Changed paths:
    engines/draci/script.cpp



diff --git a/engines/draci/script.cpp b/engines/draci/script.cpp
index 1149cdf..09c74f5 100644
--- a/engines/draci/script.cpp
+++ b/engines/draci/script.cpp
@@ -700,6 +700,10 @@ void Script::newRoom(const Common::Array<int> &params) {
 		return;
 	}
 
+	if(_vm->_game->isPositionLoaded() == true) {
+		_vm->_game->setPositionLoaded(false);
+	}
+
 	int room = params[0] - 1;
 	int gate = params[1] - 1;
 


Commit: 3d5dee897ef785e3f0c48ae3d857181f314700d1
    https://github.com/scummvm/scummvm/commit/3d5dee897ef785e3f0c48ae3d857181f314700d1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2014-04-28T20:53:13+03:00

Commit Message:
Merge pull request #445 from lukaslw/second_branch

DRACI: Saving and fading out improvments.

Changed paths:
    engines/draci/game.cpp
    engines/draci/game.h
    engines/draci/saveload.cpp
    engines/draci/saveload.h
    engines/draci/script.cpp









More information about the Scummvm-git-logs mailing list