[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