aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaromir Wysoglad2019-05-29 13:31:56 +0200
committerThierry Crozat2019-07-28 15:09:14 +0100
commita86a397b261eceb2830a15f030e0aa5f50651343 (patch)
tree9aff096fe82149d06d7293ba66aee80e06e632af
parente99dc80446f5ef5f9e6f6ef2460161c4a1e40f07 (diff)
downloadscummvm-rg350-a86a397b261eceb2830a15f030e0aa5f50651343.tar.gz
scummvm-rg350-a86a397b261eceb2830a15f030e0aa5f50651343.tar.bz2
scummvm-rg350-a86a397b261eceb2830a15f030e0aa5f50651343.zip
SUPERNOVA2: Programm intro title screen
-rw-r--r--engines/supernova2/ms2_def.h2
-rw-r--r--engines/supernova2/rooms.cpp50
-rw-r--r--engines/supernova2/screen.cpp6
-rw-r--r--engines/supernova2/screen.h1
-rw-r--r--engines/supernova2/state.cpp9
-rw-r--r--engines/supernova2/state.h1
6 files changed, 65 insertions, 4 deletions
diff --git a/engines/supernova2/ms2_def.h b/engines/supernova2/ms2_def.h
index bbb2b7c55d..005f44cebe 100644
--- a/engines/supernova2/ms2_def.h
+++ b/engines/supernova2/ms2_def.h
@@ -135,7 +135,7 @@ kString25, kString26, kString27, kStringTextSpeed, kString29,
kString30, kString31, kString32, kString33, kString34,
kString35, kString36, kString37, kString38, kString39,
kString40, kString41, kString42, kString43, kString44,
-kString45, kString46, kString47, kString48, kString49,
+kStringIntro1, kStringIntro2, kStringIntro3, kStringIntro4, kStringIntro5,
kString50, kString51, kString52, kString53, kString54,
kString55, kString56, kString57, kString58, kString59,
kString60, kString61, kString62, kString63, kString64,
diff --git a/engines/supernova2/rooms.cpp b/engines/supernova2/rooms.cpp
index 77b4429d57..ea06d0cead 100644
--- a/engines/supernova2/rooms.cpp
+++ b/engines/supernova2/rooms.cpp
@@ -186,6 +186,20 @@ Intro::Intro(Supernova2Engine *vm, GameManager *gm) {
_fileNumber = -1;
_id = INTRO;
+ _introText =
+ _vm->getGameString(kStringIntro1) + '\0' +
+ _vm->getGameString(kStringIntro2) + '\0' +
+ _vm->getGameString(kStringIntro3) + '\0' +
+ _vm->getGameString(kStringIntro4) + '\0' +
+ _vm->getGameString(kStringIntro5) + '\0' +
+ "^Matthias Neef#" + '\0' +
+ "^Sascha Otterbach#" + '\0' +
+ "^Thomas Mazzoni#" + '\0' +
+ "^Matthias Klein#" + '\0' +
+ "^Gerrit Rothmaier#" + '\0' +
+ "^Thomas Hassler#" + '\0' +
+ "^Rene Kach#" + '\0' +
+ '\233' + '\0';
}
void Intro::onEntrance() {
@@ -196,6 +210,7 @@ void Intro::onEntrance() {
}
void Intro::titleScreen() {
+ CursorMan.showMouse(false);
_vm->_system->fillScreen(kColorBlack);
_vm->_screen->setViewportBrightness(0);
_vm->_screen->setGuiBrightness(0);
@@ -203,10 +218,45 @@ void Intro::titleScreen() {
_vm->setCurrentImage(1);
_vm->renderImage(0);
_vm->paletteFadeIn();
+ _gm->wait(15);
+ //titleFadeIn();
+ _vm->renderImage(1);
+ _gm->wait(15);
+ _vm->renderImage(2);
+ const Common::String title1 = "V1.02";
+ _vm->_screen->renderText(title1, 295, 190, 3);
+
+ Marquee marquee(_vm->_screen, Marquee::kMarqueeIntro, _introText.c_str());
+ while (!_vm->shouldQuit()) {
+ _gm->updateEvents();
+ marquee.renderCharacter();
+ if (_gm->_mouseClicked || _gm->_keyPressed)
+ break;
+ g_system->updateScreen();
+ g_system->delayMillis(_vm->_delay);
+ }
+
+ _gm->wait(1);
_gm->getInput();
}
void Intro::titleFadeIn() {
+ byte titlePaletteColor[] = {0xfe, 0xeb};
+ byte titleNewColor[2][3] = {{255, 255, 255}, {199, 21, 21}};
+ byte newColors[2][3];
+
+ for (int brightness = 1; brightness <= 40; ++brightness) {
+ for (int colorIndex = 0; colorIndex < 2; ++colorIndex) {
+ for (int i = 0; i < 3; ++i) {
+ newColors[colorIndex][i] = (titleNewColor[colorIndex][i] * brightness) / 40;
+ }
+ }
+
+ _vm->_system->getPaletteManager()->setPalette(newColors[0], titlePaletteColor[0], 1);
+ _vm->_system->getPaletteManager()->setPalette(newColors[1], titlePaletteColor[1], 1);
+ _vm->_system->updateScreen();
+ _vm->_system->delayMillis(_vm->_delay);
+ }
}
bool Intro::animate(int section1, int section2, int duration) {
diff --git a/engines/supernova2/screen.cpp b/engines/supernova2/screen.cpp
index 24efe91094..af9b2b94f9 100644
--- a/engines/supernova2/screen.cpp
+++ b/engines/supernova2/screen.cpp
@@ -105,7 +105,7 @@ Marquee::Marquee(Screen *screen, MarqueeId id, const char *text)
: _text(text)
, _textBegin(text)
, _delay(0)
- , _color(kColorLightBlue)
+ , _color(kColorPurple)
, _loop(false)
, _screen(screen) {
if (id == kMarqueeIntro) {
@@ -149,8 +149,8 @@ void Marquee::renderCharacter() {
_textWidth = Screen::textWidth(_text);
_x = kScreenWidth / 2 - _textWidth / 2;
_screen->_textCursorX = _x;
- _color = kColorLightBlue;
- _screen->_textColor = _color;
+ _color = kColorBlue;
+ _screen->_textColor = kColorPurple;
break;
case '^':
_color = kColorLightYellow;
diff --git a/engines/supernova2/screen.h b/engines/supernova2/screen.h
index 104874c754..dbfeb42634 100644
--- a/engines/supernova2/screen.h
+++ b/engines/supernova2/screen.h
@@ -62,6 +62,7 @@ enum Color {
kColorLightGreen = 13,
kColorLightYellow = 14,
kColorLightRed = 15,
+ kColorPurple = 35,
kColorCursorTransparent = kColorWhite25
};
diff --git a/engines/supernova2/state.cpp b/engines/supernova2/state.cpp
index 44553f2cd5..24b86895d9 100644
--- a/engines/supernova2/state.cpp
+++ b/engines/supernova2/state.cpp
@@ -158,6 +158,15 @@ void GameManager::getInput() {
}
}
+void GameManager::wait(int ticks) {
+ uint32 end = g_system->getMillis() + ticksToMsec(ticks);
+ do {
+ g_system->delayMillis(_vm->_delay);
+ updateEvents();
+ g_system->updateScreen();
+ } while (g_system->getMillis() < end && !_vm->shouldQuit());
+}
+
void GameManager::changeRoom(RoomId id) {
_currentRoom = _rooms[id];
_newRoom = true;
diff --git a/engines/supernova2/state.h b/engines/supernova2/state.h
index c6d357fc43..8672a41a57 100644
--- a/engines/supernova2/state.h
+++ b/engines/supernova2/state.h
@@ -76,6 +76,7 @@ public:
void initRooms();
void getInput();
void changeRoom(RoomId id);
+ void wait(int ticks);
void resetInputState();
private: