aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/teenagent/callbacks.cpp2
-rw-r--r--engines/teenagent/scene.cpp18
-rw-r--r--engines/teenagent/scene.h1
-rw-r--r--engines/teenagent/teenagent.cpp15
-rw-r--r--engines/teenagent/teenagent.h1
5 files changed, 36 insertions, 1 deletions
diff --git a/engines/teenagent/callbacks.cpp b/engines/teenagent/callbacks.cpp
index 20088584f4..38488cfb00 100644
--- a/engines/teenagent/callbacks.cpp
+++ b/engines/teenagent/callbacks.cpp
@@ -3784,7 +3784,7 @@ bool TeenAgentEngine::processCallback(uint16 addr) {
waitAnimation();
playMusic(11);
- //BIG FIXME: show scrolling credits
+ displayCredits();
loadScene(39, 192, 177, 0);
hideActor();
Dialog::showMono(scene, 0x8b4d, 953, 0xe3, 1); //well...
diff --git a/engines/teenagent/scene.cpp b/engines/teenagent/scene.cpp
index c56434b9c1..3851686a44 100644
--- a/engines/teenagent/scene.cpp
+++ b/engines/teenagent/scene.cpp
@@ -491,6 +491,20 @@ bool Scene::render(OSystem *system) {
do {
restart = false;
busy = processEventQueue();
+
+ if (current_event.type == SceneEvent::kCredits) {
+ system->fillScreen(0);
+ ///\todo: optimize me
+ Graphics::Surface *surface = system->lockScreen();
+ res->font7.render(surface, current_event.dst.x, current_event.dst.y--, current_event.message, current_event.color);
+ system->unlockScreen();
+
+ if (current_event.dst.y < -(int)current_event.timer)
+ current_event.clear();
+
+ return true;
+ }
+
if (!message.empty() && message_timer != 0) {
if (--message_timer == 0) {
clearMessage();
@@ -925,6 +939,10 @@ bool Scene::processEventQueue() {
debug(0, "*stub* shaking the screen");
current_event.clear();
break;
+
+ case SceneEvent::kCredits:
+ debug(0, "showing credits");
+ break;
case SceneEvent::kQuit:
debug(0, "quit!");
diff --git a/engines/teenagent/scene.h b/engines/teenagent/scene.h
index 97efea38d2..d9c89e689b 100644
--- a/engines/teenagent/scene.h
+++ b/engines/teenagent/scene.h
@@ -57,6 +57,7 @@ struct SceneEvent {
kWaitForAnimation,
kWaitLanAnimationFrame,
kCreditsMessage, //16
+ kCredits,
kTimer,
kEffect,
kQuit
diff --git a/engines/teenagent/teenagent.cpp b/engines/teenagent/teenagent.cpp
index 68b1fca799..079920b262 100644
--- a/engines/teenagent/teenagent.cpp
+++ b/engines/teenagent/teenagent.cpp
@@ -489,6 +489,21 @@ void TeenAgentEngine::displayCredits(uint16 addr) {
scene->push(event);
}
+void TeenAgentEngine::displayCredits() {
+ SceneEvent event(SceneEvent::kCredits);
+ event.message = parseMessage(0xe488);
+ event.dst.y = 200;
+
+ int lines = 1;
+ for(uint i = 0; i < event.message.size(); ++i)
+ if (event.message[i] == '\n')
+ ++lines;
+ event.dst.x = (320 - Resources::instance()->font7.render(NULL, 0, 0, event.message, 0xd1)) / 2;
+ event.timer = 11 * lines - event.dst.y + 22;
+ //debug(0, "credits = %s", event.message.c_str());
+ scene->push(event);
+}
+
void TeenAgentEngine::displayCutsceneMessage(uint16 addr, uint16 position) {
SceneEvent event(SceneEvent::kCreditsMessage);
diff --git a/engines/teenagent/teenagent.h b/engines/teenagent/teenagent.h
index 24ad2fd58a..dbb510df03 100644
--- a/engines/teenagent/teenagent.h
+++ b/engines/teenagent/teenagent.h
@@ -105,6 +105,7 @@ public:
void waitLanAnimationFrame(byte slot, uint16 frame);
void setTimerCallback(uint16 addr, uint16 frames);
void shakeScreen();
+ void displayCredits();
Common::RandomSource random;