diff options
author | Filippos Karapetis | 2007-08-02 01:04:44 +0000 |
---|---|---|
committer | Filippos Karapetis | 2007-08-02 01:04:44 +0000 |
commit | 63f3d5b253fb38e810480d786369eeb1bed5f49e (patch) | |
tree | 7ef8b0245f381e4558c191985428b8489ee47990 /engines/saga/scene.cpp | |
parent | 6a82a3fbfcfda201655b55aea5fec13762e3cd95 (diff) | |
download | scummvm-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.cpp | 93 |
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(); |