aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/scene.cpp
diff options
context:
space:
mode:
authorFilippos Karapetis2007-08-02 01:04:44 +0000
committerFilippos Karapetis2007-08-02 01:04:44 +0000
commit63f3d5b253fb38e810480d786369eeb1bed5f49e (patch)
tree7ef8b0245f381e4558c191985428b8489ee47990 /engines/saga/scene.cpp
parent6a82a3fbfcfda201655b55aea5fec13762e3cd95 (diff)
downloadscummvm-rg350-63f3d5b253fb38e810480d786369eeb1bed5f49e.tar.gz
scummvm-rg350-63f3d5b253fb38e810480d786369eeb1bed5f49e.tar.bz2
scummvm-rg350-63f3d5b253fb38e810480d786369eeb1bed5f49e.zip
Partially implemented opcodes 87, 88 and 89, used in the help system of the IHNM demo. It's still buggy, though
svn-id: r28398
Diffstat (limited to 'engines/saga/scene.cpp')
-rw-r--r--engines/saga/scene.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/engines/saga/scene.cpp b/engines/saga/scene.cpp
index 3c98421361..4510bcc24c 100644
--- a/engines/saga/scene.cpp
+++ b/engines/saga/scene.cpp
@@ -1360,6 +1360,99 @@ void Scene::clearPlacard() {
q_event = _vm->_events->chain(q_event, &event);
}
+void Scene::showPsychicProfile(const char *text) {
+ int textHeight;
+ static PalEntry cur_pal[PAL_ENTRIES];
+ PalEntry *pal;
+ TextListEntry textEntry;
+ Event event;
+ Event *q_event;
+
+ if (_vm->_interface->getMode() == kPanelPlacard)
+ return;
+
+ _vm->_interface->rememberMode();
+ _vm->_interface->setMode(kPanelPlacard);
+ _vm->_gfx->savePalette();
+
+ event.type = kEvTOneshot;
+ event.code = kCursorEvent;
+ event.op = kEventHide;
+
+ q_event = _vm->_events->queue(&event);
+
+ _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->chain(q_event, &event);
+
+ event.type = kEvTOneshot;
+ event.code = kInterfaceEvent;
+ event.op = kEventClearStatus;
+
+ q_event = _vm->_events->chain(q_event, &event);
+
+ event.type = kEvTOneshot;
+ event.code = kGraphicsEvent;
+ event.op = kEventSetFlag;
+ event.param = RF_PLACARD;
+
+ q_event = _vm->_events->chain(q_event, &event);
+
+ // Set the background and palette for the psychic profile
+ event.type = kEvTOneshot;
+ event.code = kPsychicProfileBgEvent;
+
+ q_event = _vm->_events->chain(q_event, &event);
+
+ if (text != NULL) {
+ textHeight = _vm->_font->getHeight(kKnownFontVerb, text, 226, kFontCentered);
+
+ textEntry.knownColor = kKnownColorBlack;
+ textEntry.useRect = true;
+ textEntry.rect.left = 245;
+ textEntry.rect.setHeight(210 + 76);
+ textEntry.rect.setWidth(226);
+ textEntry.rect.top = 210 - textHeight;
+ textEntry.font = kKnownFontVerb;
+ textEntry.flags = (FontEffectFlags)(kFontCentered);
+ textEntry.text = text;
+
+ TextListEntry *_psychicProfileTextEntry = _vm->_scene->_textList.addEntry(textEntry);
+
+ event.type = kEvTOneshot;
+ event.code = kTextEvent;
+ event.op = kEventDisplay;
+ event.data = _psychicProfileTextEntry;
+
+ 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 = kScriptEvent;
+ event.op = kEventThreadWake;
+ event.param = kWaitTypePlacard;
+
+ q_event = _vm->_events->chain(q_event, &event);
+}
+
void Scene::clearPsychicProfile() {
if (_vm->_interface->getMode() == kPanelPlacard) {
_vm->_scene->clearPlacard();