diff options
| author | Paul Gilbert | 2017-07-02 22:02:24 -0400 | 
|---|---|---|
| committer | Paul Gilbert | 2017-07-02 22:02:24 -0400 | 
| commit | fbb4cb9b319e2fecc483fe579f2a38c86aeb65f7 (patch) | |
| tree | f31ab72ff82c2de33c3378d714e66952d775e633 | |
| parent | d5ebd9ae9249be09c0afb948394019bb5fc29796 (diff) | |
| download | scummvm-rg350-fbb4cb9b319e2fecc483fe579f2a38c86aeb65f7.tar.gz scummvm-rg350-fbb4cb9b319e2fecc483fe579f2a38c86aeb65f7.tar.bz2 scummvm-rg350-fbb4cb9b319e2fecc483fe579f2a38c86aeb65f7.zip | |
TITANIC: Don't allow saving during the Doorbot prologue
This works around a bug in the original where if you saved immediately
after getting the PET, the savegame would put in in an invalid state
| -rw-r--r-- | engines/titanic/core/game_object.cpp | 12 | ||||
| -rw-r--r-- | engines/titanic/core/game_object.h | 10 | ||||
| -rw-r--r-- | engines/titanic/npcs/doorbot.cpp | 2 | ||||
| -rw-r--r-- | engines/titanic/titanic.cpp | 5 | 
4 files changed, 27 insertions, 2 deletions
| diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp index 3286a6c7ee..3d9fede6c1 100644 --- a/engines/titanic/core/game_object.cpp +++ b/engines/titanic/core/game_object.cpp @@ -589,6 +589,18 @@ void CGameObject::petHide() {  	}  } +void CGameObject::petIncAreaLocks() { +	CPetControl *pet = getPetControl(); +	if (pet) +		pet->incAreaLocks(); +} + +void CGameObject::petDecAreaLocks() { +	CPetControl *pet = getPetControl(); +	if (pet) +		pet->decAreaLocks(); +} +  void CGameObject::petSetRemoteTarget() {  	CPetControl *pet = getPetControl();  	if (pet) diff --git a/engines/titanic/core/game_object.h b/engines/titanic/core/game_object.h index d4befa8fc8..0c946623ac 100644 --- a/engines/titanic/core/game_object.h +++ b/engines/titanic/core/game_object.h @@ -934,6 +934,16 @@ public:  	void petShow();  	/** +	 * Increment the number of PET area (tab) locks +	 */ +	void petIncAreaLocks(); + +	/** +	 * Decrement the number of PET area (tab) locks +	 */ +	void petDecAreaLocks(); + +	/**  	 * Shows the text cursor in the current section, if applicable  	 */  	void petShowCursor(); diff --git a/engines/titanic/npcs/doorbot.cpp b/engines/titanic/npcs/doorbot.cpp index a1534fa673..58e11b05ef 100644 --- a/engines/titanic/npcs/doorbot.cpp +++ b/engines/titanic/npcs/doorbot.cpp @@ -95,6 +95,7 @@ bool CDoorbot::MovieEndMsg(CMovieEndMsg *msg) {  		case 6:  			if (clipExistsByEnd("Cloak On", msg->_endFrame)) {  				petShow(); +				petDecAreaLocks();  				stateSetSoundMakerAllowed(true);  				changeView("ServiceElevator.Node 1.S");  				changeView("ServiceElevator.Node 1.N"); @@ -444,6 +445,7 @@ bool CDoorbot::TrueTalkNotifySpeechEndedMsg(CTrueTalkNotifySpeechEndedMsg *msg)  		case 10560:  			petShow();  			petSetArea(PET_CONVERSATION); +			petIncAreaLocks();  			stopAnimTimer(_timerId);  			_timerId = addTimer(1, 1000, 0);  			break; diff --git a/engines/titanic/titanic.cpp b/engines/titanic/titanic.cpp index ab3c96104b..1494a6a6a2 100644 --- a/engines/titanic/titanic.cpp +++ b/engines/titanic/titanic.cpp @@ -176,9 +176,10 @@ void TitanicEngine::setRoomNames() {  }  bool TitanicEngine::canLoadGameStateCurrently() { -	if (!_window->_inputAllowed) +	CGameManager *gameManager = _window->_gameManager; +	if (!_window->_inputAllowed || !gameManager->_gameState._petActive)  		return false; -	CProjectItem *project = _window->_gameManager->_project; +	CProjectItem *project = gameManager->_project;  	if (project) {  		CPetControl *pet = project->getPetControl();  		if (pet && !pet->isAreaUnlocked()) | 
