aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schickel2009-08-12 18:05:41 +0000
committerJohannes Schickel2009-08-12 18:05:41 +0000
commit06657efc15fa73abe41002694ae1673b3c7f6ba5 (patch)
tree2aa5f5678892cd342e1f8b84cdb0ade79b73cf23
parent20577c15749deb517396931460d7545c665776a8 (diff)
downloadscummvm-rg350-06657efc15fa73abe41002694ae1673b3c7f6ba5.tar.gz
scummvm-rg350-06657efc15fa73abe41002694ae1673b3c7f6ba5.tar.bz2
scummvm-rg350-06657efc15fa73abe41002694ae1673b3c7f6ba5.zip
Further cleaning up credits player code for Kyra1.
svn-id: r43323
-rw-r--r--engines/kyra/sequences_lok.cpp84
1 files changed, 49 insertions, 35 deletions
diff --git a/engines/kyra/sequences_lok.cpp b/engines/kyra/sequences_lok.cpp
index 0c09a56586..742f96e5e2 100644
--- a/engines/kyra/sequences_lok.cpp
+++ b/engines/kyra/sequences_lok.cpp
@@ -36,6 +36,7 @@
#include "common/system.h"
#include "common/savefile.h"
+#include "common/list.h"
namespace Kyra {
@@ -1136,20 +1137,20 @@ void KyraEngine_LoK::seq_playEnding() {
seq_playCredits();
}
+namespace {
+struct CreditsLine {
+ int16 x, y;
+ Screen::FontId font;
+ uint8 *str;
+};
+} // end of anonymous namespace
+
void KyraEngine_LoK::seq_playCredits() {
static const uint8 colorMap[] = { 0, 0, 0xC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
static const char stringTerms[] = { 0x5, 0xd, 0x0};
- static const int numStrings = 250;
-
- struct {
- int16 x, y;
- uint8 code;
- uint8 unk1;
- Screen::FontId font;
- uint8 *str;
- } strings[numStrings];
- memset(strings, 0, sizeof(strings));
+ typedef Common::List<CreditsLine> CreditsLineList;
+ CreditsLineList lines;
_screen->enableInterfacePalette(false);
@@ -1157,6 +1158,8 @@ void KyraEngine_LoK::seq_playCredits() {
if (!_flags.isTalkie && _flags.platform != Common::kPlatformAmiga) {
_screen->loadFont(Screen::FID_CRED6_FNT, "CREDIT6.FNT");
_screen->loadFont(Screen::FID_CRED8_FNT, "CREDIT8.FNT");
+
+ _screen->setFont(Screen::FID_CRED8_FNT);
} else
_screen->setFont(Screen::FID_8_FNT);
@@ -1192,27 +1195,28 @@ void KyraEngine_LoK::seq_playCredits() {
uint8 *currentString = buffer;
int currentY = 200;
- for (int i = 0; i < numStrings; i++) {
- if (*nextString == 0)
- break;
-
+ do {
currentString = nextString;
nextString = (uint8 *)strpbrk((const char *)currentString, stringTerms);
if (!nextString)
nextString = (uint8 *)strchr((const char *)currentString, 0);
- strings[i].code = nextString[0];
+ CreditsLine line;
+
+ int lineEndCode = nextString[0];
*nextString = 0;
- if (strings[i].code != 0)
+ if (lineEndCode != 0)
nextString++;
+ int alignment = 0;
if (*currentString == 3 || *currentString == 4) {
- strings[i].unk1 = *currentString;
+ alignment = *currentString;
currentString++;
}
if (*currentString == 1) {
currentString++;
+
if (!_flags.isTalkie && _flags.platform != Common::kPlatformAmiga)
_screen->setFont(Screen::FID_CRED6_FNT);
} else if (*currentString == 2) {
@@ -1222,21 +1226,23 @@ void KyraEngine_LoK::seq_playCredits() {
_screen->setFont(Screen::FID_CRED8_FNT);
}
- strings[i].font = _screen->_currentFont;
+ line.font = _screen->_currentFont;
- if (strings[i].unk1 == 3)
- strings[i].x = 157 - _screen->getTextWidth((const char *)currentString);
- else if (strings[i].unk1 == 4)
- strings[i].x = 161;
+ if (alignment == 3)
+ line.x = 157 - _screen->getTextWidth((const char *)currentString);
+ else if (alignment == 4)
+ line.x = 161;
else
- strings[i].x = (320 - _screen->getTextWidth((const char *)currentString)) / 2 + 1;
+ line.x = (320 - _screen->getTextWidth((const char *)currentString)) / 2 + 1;
- strings[i].y = currentY;
- if (strings[i].code != 5)
+ line.y = currentY;
+ if (lineEndCode != 5)
currentY += 10;
- strings[i].str = currentString;
- }
+ line.str = currentString;
+
+ lines.push_back(line);
+ } while (*nextString);
_screen->setCurPage(2);
@@ -1257,16 +1263,24 @@ void KyraEngine_LoK::seq_playCredits() {
_screen->copyRegion(8, 32, 8, 32, 312, 128, 4, 2, Screen::CR_NO_P_CHECK);
bottom = 0;
- for (int i = 0; i < numStrings; i++) {
- if (strings[i].y < 200 && strings[i].y > 0) {
- if (strings[i].font != _screen->_currentFont)
- _screen->setFont(strings[i].font);
- _screen->printText((const char *)strings[i].str, strings[i].x, strings[i].y, 15, 0);
+ for (CreditsLineList::iterator it = lines.begin(); it != lines.end(); ++it) {
+ if (it->y < 0) {
+ it = lines.erase(it);
+ continue;
}
- strings[i].y--;
- if (strings[i].y > bottom)
- bottom = strings[i].y;
+
+ if (it->y < 200) {
+ if (it->font != _screen->_currentFont)
+ _screen->setFont(it->font);
+
+ _screen->printText((const char *)it->str, it->x, it->y, 15, 0);
+ }
+
+ it->y--;
+ if (it->y > bottom)
+ bottom = it->y;
}
+
_screen->copyRegion(8, 32, 8, 32, 312, 128, 2, 0, Screen::CR_NO_P_CHECK);
_screen->updateScreen();
}