aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/saga/events.cpp34
-rw-r--r--engines/saga/events.h3
-rw-r--r--engines/saga/sfuncs.cpp39
3 files changed, 45 insertions, 31 deletions
diff --git a/engines/saga/events.cpp b/engines/saga/events.cpp
index 73a603bf5c..5bdcf671d3 100644
--- a/engines/saga/events.cpp
+++ b/engines/saga/events.cpp
@@ -35,6 +35,7 @@
#include "saga/palanim.h"
#include "saga/render.h"
#include "saga/sndres.h"
+#include "saga/rscfile.h"
#include "saga/music.h"
#include "saga/actor.h"
@@ -344,6 +345,39 @@ int Events::handleOneShot(Event *event) {
_vm->_actor->showActors(true);
}
break;
+ case kPsychicProfileBgEvent:
+ {
+ ResourceContext *context = _vm->_resource->getContext(GAME_RESOURCEFILE);
+
+ byte *resourceData;
+ size_t resourceDataLength;
+
+ _vm->_resource->loadResource(context, _vm->getResourceDescription()->psychicProfileResourceId, resourceData, resourceDataLength);
+
+ byte *buf;
+ size_t buflen;
+ int width;
+ int height;
+
+ _vm->decodeBGImage(resourceData, resourceDataLength, &buf, &buflen, &width, &height);
+
+ const PalEntry *palette = (const PalEntry *)_vm->getImagePal(resourceData, resourceDataLength);
+
+ Surface *bgSurface = _vm->_render->getBackGroundSurface();
+ const Rect rect(width, height);
+
+ bgSurface->blit(rect, buf);
+ _vm->_frameCount++;
+
+ _vm->_gfx->setPalette(palette);
+
+ free(buf);
+ free(resourceData);
+
+ // Draw the scene. It won't be drawn by Render::drawScene(), as the RF_PLACARD is set
+ _vm->_scene->draw();
+ }
+ break;
case kAnimEvent:
switch (event->op) {
case kEventPlay:
diff --git a/engines/saga/events.h b/engines/saga/events.h
index d0af1fe916..2486525751 100644
--- a/engines/saga/events.h
+++ b/engines/saga/events.h
@@ -60,7 +60,8 @@ enum EventCodes {
kScriptEvent,
kCursorEvent,
kGraphicsEvent,
- kCutawayEvent
+ kCutawayEvent,
+ kPsychicProfileBgEvent
};
enum EventOps {
diff --git a/engines/saga/sfuncs.cpp b/engines/saga/sfuncs.cpp
index 74ff8e88dc..5bbe5d3c5b 100644
--- a/engines/saga/sfuncs.cpp
+++ b/engines/saga/sfuncs.cpp
@@ -1484,8 +1484,7 @@ void Script::sfPsychicProfile(SCRIPTFUNC_PARAMS) {
Event event;
Event *q_event;
- // FIXME: This still needs work: the actors are shown while the psychic
- // profile is shown and the text placement and color are incorrect
+ // FIXME: This still needs work: the text placement is incorrect
thread->wait(kWaitTypePlacard);
@@ -1525,32 +1524,10 @@ void Script::sfPsychicProfile(SCRIPTFUNC_PARAMS) {
q_event = _vm->_events->chain(q_event, &event);
// Set the background and palette for the psychic profile
- ResourceContext *context = _vm->_resource->getContext(GAME_RESOURCEFILE);
-
- byte *resourceData;
- size_t resourceDataLength;
-
- _vm->_resource->loadResource(context, _vm->getResourceDescription()->psychicProfileResourceId, resourceData, resourceDataLength);
-
- byte *buf;
- size_t buflen;
- int width;
- int height;
-
- _vm->decodeBGImage(resourceData, resourceDataLength, &buf, &buflen, &width, &height);
-
- const PalEntry *palette = (const PalEntry *)_vm->getImagePal(resourceData, resourceDataLength);
-
- Surface *bgSurface = _vm->_render->getBackGroundSurface();
- const Rect rect(width, height);
-
- bgSurface->blit(rect, buf);
- _vm->_frameCount++;
-
- _vm->_gfx->setPalette(palette);
+ event.type = kEvTOneshot;
+ event.code = kPsychicProfileBgEvent;
- free(buf);
- free(resourceData);
+ q_event = _vm->_events->chain(q_event, &event);
// Put the text in the center of the viewport, assuming it will fit on
// one line. If we cannot make that assumption we'll need to extend
@@ -1558,14 +1535,16 @@ void Script::sfPsychicProfile(SCRIPTFUNC_PARAMS) {
// It doesn't end up in exactly the same spot as the original did it,
// but it's close enough for now at least.
+ // FIXME: This assumption is wrong for the psychic profile, the text
+ // placement is incorrect
+
TextListEntry textEntry;
- textEntry.knownColor = kKnownColorTransparent;
- textEntry.effectKnownColor = kKnownColorBrightWhite;
+ textEntry.knownColor = kKnownColorBlack;
textEntry.point.x = _vm->getDisplayWidth() / 2;
textEntry.point.y = (_vm->_scene->getHeight() - _vm->_font->getHeight(kKnownFontMedium)) / 2;
textEntry.font = kKnownFontVerb;
- textEntry.flags = (FontEffectFlags)(kFontOutline | kFontCentered);
+ textEntry.flags = (FontEffectFlags)(kFontCentered);
textEntry.text = thread->_strings->getString(stringId);
_placardTextEntry = _vm->_scene->_textList.addEntry(textEntry);