aboutsummaryrefslogtreecommitdiff
path: root/engines/supernova/supernova.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/supernova/supernova.cpp')
-rw-r--r--engines/supernova/supernova.cpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp
index 3386c653b5..c64755e4af 100644
--- a/engines/supernova/supernova.cpp
+++ b/engines/supernova/supernova.cpp
@@ -434,6 +434,83 @@ void SupernovaEngine::showHelpScreen() {
_gm->animationOn();
}
+Common::Error SupernovaEngine::showTextReader(const char *filename) {
+ Common::File file;
+
+ if (!file.open(filename)) {
+ GUIErrorMessageFormat(_("Unable to find '%s' in game folder."), filename);
+ return Common::kReadingFailed;
+ }
+ Common::SeekableReadStream *stream = file.readStream(file.size());
+ int linesInFile = 0;
+ while (!stream->eos()) {
+ stream->readLine();
+ ++linesInFile;
+ }
+ --linesInFile;
+ stream->seek(0);
+ stream->clearErr();
+
+ if (_screen->isMessageShown())
+ _screen->removeMessage();
+ _gm->animationOff();
+ _gm->saveTime();
+ paletteFadeOut();
+ g_system->fillScreen(kColorWhite35);
+ for (int y = 6; y < (200 - kFontHeight); y += (kFontHeight + 2)) {
+ Common::String line = stream->readLine();
+ if (stream->eos())
+ break;
+ _screen->renderText(line, 6, y, kColorWhite99);
+ }
+ paletteFadeIn();
+
+ const int linesPerPage = 19;
+ int lineNumber = 0;
+ bool exitReader = false;
+ do {
+ stream->seek(0);
+ stream->clearErr();
+ for (int i = 0; i < lineNumber; ++i)
+ stream->readLine();
+ g_system->fillScreen(kColorWhite35);
+ for (int y = 6; y < (_screen->getScreenHeight() - kFontHeight); y += (kFontHeight + 2)) {
+ Common::String line = stream->readLine();
+ if (stream->eos())
+ break;
+ _screen->renderText(line, 6, y, kColorWhite99);
+ }
+ _gm->getKeyInput();
+ switch (_gm->_key.keycode) {
+ case Common::KEYCODE_ESCAPE:
+ exitReader = true;
+ break;
+ case Common::KEYCODE_UP:
+ lineNumber = lineNumber > 0 ? lineNumber - 1 : 0;
+ break;
+ case Common::KEYCODE_DOWN:
+ lineNumber = lineNumber < linesInFile - (linesPerPage + 1) ? lineNumber + 1
+ : linesInFile - linesPerPage;
+ break;
+ case Common::KEYCODE_PAGEUP:
+ lineNumber = lineNumber > linesPerPage ? lineNumber - linesPerPage : 0;
+ break;
+ case Common::KEYCODE_PAGEDOWN:
+ lineNumber = lineNumber < linesInFile - (linesPerPage * 2) ? lineNumber + linesPerPage
+ : linesInFile - linesPerPage;
+ break;
+ default:
+ break;
+ }
+ } while (!exitReader && !shouldQuit());
+
+ paletteFadeOut();
+ _gm->loadTime();
+ _gm->animationOn();
+
+ return Common::kNoError;
+}
+
bool SupernovaEngine::quitGameDialog() {
bool quit = false;