[Scummvm-cvs-logs] SF.net SVN: scummvm: [28325] scummvm/trunk/engines/saga

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Mon Jul 30 16:22:53 CEST 2007


Revision: 28325
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28325&view=rev
Author:   thebluegr
Date:     2007-07-30 07:22:53 -0700 (Mon, 30 Jul 2007)

Log Message:
-----------
It's now possible to exit from the psychic profile screen in IHNM

Modified Paths:
--------------
    scummvm/trunk/engines/saga/interface.cpp
    scummvm/trunk/engines/saga/scene.cpp
    scummvm/trunk/engines/saga/scene.h
    scummvm/trunk/engines/saga/script.h
    scummvm/trunk/engines/saga/sfuncs.cpp

Modified: scummvm/trunk/engines/saga/interface.cpp
===================================================================
--- scummvm/trunk/engines/saga/interface.cpp	2007-07-30 13:19:46 UTC (rev 28324)
+++ scummvm/trunk/engines/saga/interface.cpp	2007-07-30 14:22:53 UTC (rev 28325)
@@ -652,6 +652,12 @@
 				_protectHash = (_protectHash << 1) + toupper(*p);
 		}
 		break;
+	case kPanelPlacard:
+		if (_vm->getGameType() == GType_IHNM) {
+			// Any keypress here returns the user back to the game
+			_vm->_scene->clearPsychicProfile();
+		}
+		break;
 	}
 	return false;
 }
@@ -1548,7 +1554,10 @@
 		_vm->_actor->abortSpeech();
 
 	if (_vm->_scene->isInIntro() || _fadeMode == kFadeOut || !_active) {
-		return;
+		// When opening the psychic profile, the interface is locked (_active is false)
+		// Don't return if the psychic profile is up, so that mouse clicks can be processed
+		if (!(_vm->getGameType() == GType_IHNM && _panelMode == kPanelPlacard))
+			return;
 	}
 
 	if (_statusTextInput) {
@@ -1694,6 +1703,13 @@
 		// No mouse interaction
 		break;
 
+	case kPanelPlacard:
+		if (_vm->getGameType() == GType_IHNM) {
+			// Any mouse click here returns the user back to the game
+			if (updateFlag & UPDATE_MOUSECLICK)
+				_vm->_scene->clearPsychicProfile();
+		}
+		break;
 	}
 
 	_lastMousePoint = mousePoint;

Modified: scummvm/trunk/engines/saga/scene.cpp
===================================================================
--- scummvm/trunk/engines/saga/scene.cpp	2007-07-30 13:19:46 UTC (rev 28324)
+++ scummvm/trunk/engines/saga/scene.cpp	2007-07-30 14:22:53 UTC (rev 28325)
@@ -1284,4 +1284,71 @@
 	}
 }
 
+void Scene::clearPlacard() {
+	static PalEntry cur_pal[PAL_ENTRIES];
+	PalEntry *pal;
+	Event event;
+	Event *q_event;
+
+	_vm->_interface->restoreMode();
+
+	_vm->_gfx->getCurrentPal(cur_pal);
+
+	event.type = kEvTImmediate;
+	event.code = kPalEvent;
+	event.op = kEventPalToBlack;
+	event.time = 0;
+	event.duration = kNormalFadeDuration;
+	event.data = cur_pal;
+
+	q_event = _vm->_events->queue(&event);
+
+	event.type = kEvTOneshot;
+	event.code = kGraphicsEvent;
+	event.op = kEventClearFlag;
+	event.param = RF_PLACARD;
+
+	q_event = _vm->_events->chain(q_event, &event);
+
+	event.type = kEvTOneshot;
+	event.code = kTextEvent;
+	event.op = kEventRemove;
+	event.data = _vm->_script->getPlacardTextEntry();
+
+	q_event = _vm->_events->chain(q_event, &event);
+
+	_vm->_scene->getBGPal(pal);
+
+	event.type = kEvTImmediate;
+	event.code = kPalEvent;
+	event.op = kEventBlackToPal;
+	event.time = 0;
+	event.duration = kNormalFadeDuration;
+	event.data = pal;
+
+	q_event = _vm->_events->chain(q_event, &event);
+
+	event.type = kEvTOneshot;
+	event.code = kCursorEvent;
+	event.op = kEventShow;
+
+	q_event = _vm->_events->chain(q_event, &event);
+
+	event.type = kEvTOneshot;
+	event.code = kScriptEvent;
+	event.op = kEventThreadWake;
+	event.param = kWaitTypePlacard;
+
+	q_event = _vm->_events->chain(q_event, &event);
+}
+
+void Scene::clearPsychicProfile() {
+	_vm->_scene->clearPlacard();
+	_vm->_actor->showActors(false);
+	_vm->_gfx->restorePalette();
+	_vm->_scene->restoreScene();
+	_vm->_interface->setMode(kPanelMain);
+	_vm->_interface->activate();
+}
+
 } // End of namespace Saga

Modified: scummvm/trunk/engines/saga/scene.h
===================================================================
--- scummvm/trunk/engines/saga/scene.h	2007-07-30 13:19:46 UTC (rev 28324)
+++ scummvm/trunk/engines/saga/scene.h	2007-07-30 14:22:53 UTC (rev 28325)
@@ -340,6 +340,9 @@
 			return _vm->getDisplayInfo().sceneHeight;
 	}
 
+	void clearPlacard();
+	void clearPsychicProfile();
+
  private:
 	void loadScene(LoadSceneParams *loadSceneParams);
 	void loadSceneDescriptor(uint32 resourceId);

Modified: scummvm/trunk/engines/saga/script.h
===================================================================
--- scummvm/trunk/engines/saga/script.h	2007-07-30 13:19:46 UTC (rev 28324)
+++ scummvm/trunk/engines/saga/script.h	2007-07-30 14:22:53 UTC (rev 28325)
@@ -380,6 +380,7 @@
 		setPointerVerb();
 	}
 	int getVerbType(VerbTypes verbType);
+	TextListEntry *getPlacardTextEntry() { return _placardTextEntry; }
 
 private:
 	// When reading or writing data to the common buffer, we have to use a

Modified: scummvm/trunk/engines/saga/sfuncs.cpp
===================================================================
--- scummvm/trunk/engines/saga/sfuncs.cpp	2007-07-30 13:19:46 UTC (rev 28324)
+++ scummvm/trunk/engines/saga/sfuncs.cpp	2007-07-30 14:22:53 UTC (rev 28325)
@@ -1315,11 +1315,6 @@
 	Event event;
 	Event *q_event;
 
-	if (_vm->getGameType() == GType_IHNM) {
-		warning("Psychic profile is not implemented");
-		return;
-	}
-
 	thread->wait(kWaitTypePlacard);
 
 	_vm->_interface->rememberMode();
@@ -1416,64 +1411,9 @@
 
 // Script function #49 (0x31)
 void Script::sfPlacardOff(SCRIPTFUNC_PARAMS) {
-	static PalEntry cur_pal[PAL_ENTRIES];
-	PalEntry *pal;
-	Event event;
-	Event *q_event;
-
 	thread->wait(kWaitTypePlacard);
 
-	_vm->_interface->restoreMode();
-
-	_vm->_gfx->getCurrentPal(cur_pal);
-
-	event.type = kEvTImmediate;
-	event.code = kPalEvent;
-	event.op = kEventPalToBlack;
-	event.time = 0;
-	event.duration = kNormalFadeDuration;
-	event.data = cur_pal;
-
-	q_event = _vm->_events->queue(&event);
-
-	event.type = kEvTOneshot;
-	event.code = kGraphicsEvent;
-	event.op = kEventClearFlag;
-	event.param = RF_PLACARD;
-
-	q_event = _vm->_events->chain(q_event, &event);
-
-	event.type = kEvTOneshot;
-	event.code = kTextEvent;
-	event.op = kEventRemove;
-	event.data = _placardTextEntry;
-
-	q_event = _vm->_events->chain(q_event, &event);
-
-	_vm->_scene->getBGPal(pal);
-
-	event.type = kEvTImmediate;
-	event.code = kPalEvent;
-	event.op = kEventBlackToPal;
-	event.time = 0;
-	event.duration = kNormalFadeDuration;
-	event.data = pal;
-
-	q_event = _vm->_events->chain(q_event, &event);
-
-	event.type = kEvTOneshot;
-	event.code = kCursorEvent;
-	event.op = kEventShow;
-
-	q_event = _vm->_events->chain(q_event, &event);
-
-	event.type = kEvTOneshot;
-	event.code = kScriptEvent;
-	event.op = kEventThreadWake;
-	event.param = kWaitTypePlacard;
-
-	q_event = _vm->_events->chain(q_event, &event);
-
+	_vm->_scene->clearPlacard();
 }
 
 void Script::sfPsychicProfile(SCRIPTFUNC_PARAMS) {
@@ -1490,6 +1430,7 @@
 
 	_vm->_interface->rememberMode();
 	_vm->_interface->setMode(kPanelPlacard);
+	_vm->_gfx->savePalette();
 
 	stringId = thread->pop();
 
@@ -1576,7 +1517,9 @@
 }
 
 void Script::sfPsychicProfileOff(SCRIPTFUNC_PARAMS) {
-	SF_stub("sfPsychicProfileOff", thread, nArgs);
+	thread->wait(kWaitTypePlacard);
+
+	_vm->_scene->clearPsychicProfile();
 }
 
 // Script function #50 (0x32)


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list