mirror of
https://github.com/scummvm/scummvm.git
synced 2025-04-02 10:52:32 -04:00
1476 lines
31 KiB
C++
1476 lines
31 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
#include "darkseed/cutscene.h"
|
|
#include "darkseed/darkseed.h"
|
|
#include "darkseed/langtext.h"
|
|
#include "kidpic.h"
|
|
|
|
namespace Darkseed {
|
|
|
|
Cutscene::~Cutscene() {
|
|
delete _titleFont;
|
|
delete _zhFont;
|
|
}
|
|
|
|
void Cutscene::play(char cutsceneId) {
|
|
_cutsceneId = cutsceneId;
|
|
_movieStep = 1;
|
|
g_engine->waitForSpeech();
|
|
g_engine->_cursor.showCursor(false);
|
|
g_engine->fadeOut();
|
|
}
|
|
|
|
|
|
void Cutscene::update() {
|
|
switch (_cutsceneId) {
|
|
case 'B' :
|
|
nightmare2Scene();
|
|
break;
|
|
case 'C' :
|
|
nightmare3Scene();
|
|
break;
|
|
case 'D' :
|
|
babyDollScene();
|
|
break;
|
|
case 'E' :
|
|
shipLaunchScene();
|
|
break;
|
|
case 'G' :
|
|
bookScene();
|
|
break;
|
|
case 'I' :
|
|
introScene();
|
|
break;
|
|
case 'J' :
|
|
embryoInsertedScene();
|
|
break;
|
|
case 'Y' :
|
|
alienBornScene();
|
|
break;
|
|
case 'H' :
|
|
case 'Z' :
|
|
if (!g_engine->fadeStep()) {
|
|
_movieStep = 9999;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (_movieStep == 9999) {
|
|
g_engine->_sound->stopMusic();
|
|
|
|
if (_cutsceneId == 'E') {
|
|
g_engine->_previousRoomNumber = 38;
|
|
g_engine->changeToRoom(7);
|
|
g_engine->_cursor.showCursor(true);
|
|
} else if (_cutsceneId == 'Z') {
|
|
if (g_engine->isDosDemo()) {
|
|
g_engine->quitGame();
|
|
} else {
|
|
g_engine->restartGame();
|
|
}
|
|
} else if (_cutsceneId == 'I') {
|
|
play('J');
|
|
} else if (_cutsceneId == 'J') {
|
|
delete _titleFont;
|
|
_titleFont = nullptr;
|
|
delete _zhFont;
|
|
_zhFont = nullptr;
|
|
g_engine->newGame();
|
|
} else if (_cutsceneId == 'Y') {
|
|
play('I');
|
|
} else if (_cutsceneId == 'B' || _cutsceneId == 'C') {
|
|
g_engine->_room->restorePalette();
|
|
g_engine->_frame.draw();
|
|
g_engine->doCircles();
|
|
|
|
if (g_engine->_currentDay == 2) {
|
|
g_engine->_console->printTosText(12);
|
|
} else if (g_engine->_currentDay == 3) {
|
|
g_engine->_console->printTosText(14);
|
|
}
|
|
g_engine->_console->draw();
|
|
g_engine->_screen->update();
|
|
|
|
g_engine->waitForSpeech();
|
|
g_engine->_systemTimerCounter = 4;
|
|
g_engine->_cursor.showCursor(true);
|
|
g_engine->_room->loadRoomMusic();
|
|
} else if (_cutsceneId == 'D' || _cutsceneId == 'G') {
|
|
g_engine->_room->restorePalette();
|
|
g_engine->_frame.draw();
|
|
g_engine->_cursor.showCursor(true);
|
|
}
|
|
}
|
|
}
|
|
|
|
static constexpr int CREDITS_DELAY = 25;
|
|
|
|
bool Cutscene::introScene() {
|
|
auto lang = g_engine->getLanguage();
|
|
switch (_movieStep) {
|
|
case 1: {
|
|
if (lang == Common::KO_KOR) {
|
|
g_engine->_screen->clear();
|
|
KidPic kidPic;
|
|
kidPic.draw();
|
|
g_engine->_screen->makeAllDirty();
|
|
registTime();
|
|
} else {
|
|
g_engine->fadeOut();
|
|
}
|
|
break;
|
|
}
|
|
case 2:
|
|
if (lang == Common::KO_KOR) {
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
} else {
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
}
|
|
break;
|
|
case 3: {
|
|
g_engine->_screen->clear();
|
|
_palette.load("art/house.pal");
|
|
if (_titleFont == nullptr) {
|
|
_titleFont = new TitleFont();
|
|
}
|
|
if (_zhFont == nullptr && lang == Common::ZH_ANY) {
|
|
_zhFont = new ZhMenuFont("zh_start_font.dat", ZhLargeFontType::Titles);
|
|
}
|
|
if (lang == Common::FR_FRA || lang == Common::DE_DEU) {
|
|
displayTitleText({
|
|
{0, 0, ""},
|
|
{0, 0, ""},
|
|
{41, 145, "DEVELOPPE DE NOUVELLES METHODE"},
|
|
{68, 145, "DIE ENTWICKLUNG NEUER, SIE IN"},
|
|
{0, 0, ""},
|
|
{0, 0, ""}
|
|
});
|
|
displayTitleText({
|
|
{0, 0, ""},
|
|
{0, 0, ""},
|
|
{142, 175, "POUR VOUS SURPRENDRE"},
|
|
{60, 175, "ERSTAUNEN VERSETZENDER WEGE..."},
|
|
{0, 0, ""},
|
|
{0, 0, ""}
|
|
});
|
|
} else {
|
|
displayTitleText({
|
|
{68, 160, "DEVELOPING NEW WAYS TO AMAZE"},
|
|
{0, 160, "CREANDO NUEVAS FORMAS DE DIVERTIRSE"},
|
|
{0, 0, ""},
|
|
{0, 0, ""},
|
|
{68, 160, "DEVELOPING NEW WAYS TO AMAZE"},
|
|
{0, 160, "\xb3\xd0\xb3\x79\xc5\xe5\xb7\x58\xb9\x43\xc0\xb8\xb7\x73\xad\xb7\xae\xe6\xaa\xba"}
|
|
});
|
|
}
|
|
g_engine->fadeIn(_palette);
|
|
}
|
|
break;
|
|
case 4:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 5:
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 6:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 7:
|
|
g_engine->_screen->clear();
|
|
if (lang == Common::ZH_ANY) {
|
|
displayZhString("\xb6\xeb\xac\x66\xab\x54\x28\x43\x59\x42\x45\x52\x44\x52\x45\x41\x4d\x53\x29\xb3\x5d\xad\x70\xa4\xbd\xa5\x71", 160);
|
|
} else {
|
|
_titleFont->displayString(222, 160, "CYBERDREAMS");
|
|
}
|
|
g_engine->fadeIn(_palette);
|
|
break;
|
|
case 8:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 9:
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 10:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 11:
|
|
g_engine->_screen->clear();
|
|
displayTitleText({
|
|
{250, 160, "PRESENTS"},
|
|
{250, 160, "PRESENTA"},
|
|
{250, 160, "PRESENTE"},
|
|
{232, 160, "PRAESENTIERT"},
|
|
{250, 160, "PRESENTS"},
|
|
{0, 160, "\xb3\x5d\xad\x70\xa5\x58\xab\x7e"}
|
|
});
|
|
g_engine->fadeIn(_palette);
|
|
break;
|
|
case 12:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 13:
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 14:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 15:
|
|
if (lang == Common::ZH_ANY) {
|
|
g_engine->_screen->clear();
|
|
displayZhString("\xa8\xc8\xac\x77\xb9\x71\xb8\xa3\xa5\xf0\xb6\xa2\xb3\x6e\xc5\xe9\xb6\x7d\xb5\x6f\xb6\xb0\xb9\xce", 100);
|
|
displayZhString("\xb9\x71\xb8\xa3\xa5\xf0\xb6\xa2\xa5\x40\xac\xc9\xc5\xb8\xe5\xa5\xb1\xc0\xa5\x58", 140);
|
|
displayZhString("\xb5\x7b\x20\xa6\xa1\x20\xa7\xef\x20\xbd\x73\x3a\xa5\xdb\x20\xc5\xe9\x20\xb7\xbd", 176);
|
|
g_engine->fadeIn(_palette);
|
|
}
|
|
break;
|
|
case 16:
|
|
if (lang == Common::ZH_ANY) {
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
}
|
|
break;
|
|
case 17:
|
|
if (lang == Common::ZH_ANY) {
|
|
g_engine->fadeOut();
|
|
}
|
|
break;
|
|
case 18:
|
|
if (lang == Common::ZH_ANY) {
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
}
|
|
break;
|
|
case 19: {
|
|
g_engine->_sound->playMusic(StartMusicId::kCredits);
|
|
g_engine->_screen->clear();
|
|
g_engine->_screen->clearPalette();
|
|
g_engine->_screen->makeAllDirty();
|
|
_palette.load("art/ship.pal", false);
|
|
Img left00Img;
|
|
left00Img.load("art/left00.img");
|
|
left00Img.draw();
|
|
Img left01Img;
|
|
left01Img.load("art/left01.img");
|
|
left01Img.draw();
|
|
Img i001Img;
|
|
i001Img.load("art/i001.img");
|
|
i001Img.draw(1);
|
|
break;
|
|
}
|
|
case 20:
|
|
g_engine->fadeIn(_palette);
|
|
break;
|
|
case 21:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 22:
|
|
_animation.load("art/shipin.anm");
|
|
_animIdx = 0;
|
|
_animCount = 47;
|
|
runAnim();
|
|
break;
|
|
case 23:
|
|
if (stepAnim()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 24:
|
|
_animIdx = 47;
|
|
_animCount = 29;
|
|
runAnim();
|
|
break;
|
|
case 25:
|
|
if (stepAnim()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 26:
|
|
if (lang == Common::KO_KOR) {
|
|
_animation.load("art/ht2.anm");
|
|
_animCount = 45;
|
|
} else {
|
|
_animation.load("art/t2.anm");
|
|
_animCount = 50;
|
|
}
|
|
_animIdx = 0;
|
|
runAnim();
|
|
break;
|
|
case 27:
|
|
if (stepAnim()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 28: {
|
|
g_engine->_screen->clear();
|
|
g_engine->_screen->makeAllDirty();
|
|
_palette.load("art/house.pal");
|
|
Img tmImg;
|
|
tmImg.load("art/tm.img");
|
|
tmImg.draw();
|
|
Img versionImg;
|
|
versionImg.load("art/version.img");
|
|
versionImg.draw();
|
|
putHouse();
|
|
Img titleImg;
|
|
titleImg.load(lang == Common::KO_KOR ? "art/htitle.img" : "art/title.img");
|
|
titleImg.draw(1);
|
|
versionImg.load("art/version.img");
|
|
versionImg.draw();
|
|
registTime();
|
|
break;
|
|
}
|
|
case 29:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 30:
|
|
putHouse();
|
|
registTime();
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 31:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 32:
|
|
putHouse();
|
|
registTime();
|
|
if (lang == Common::DE_DEU) {
|
|
_titleFont->displayString(185, 80, "VERANTWORTLICHE");
|
|
_titleFont->displayString(218, 110, "PRODUZENTEN");
|
|
|
|
_titleFont->displayString(200, 150, "PATRICK KETCHUM");
|
|
_titleFont->displayString(236, 180, "ROLF KLUG");
|
|
_titleFont->displayString(236, 210, "JEAN KLUG");
|
|
} else {
|
|
displayTitleText({
|
|
{155, 90, "EXECUTIVE PRODUCERS"},
|
|
{137, 90, "PRODUCTORES EJECUTIVOS"},
|
|
{119, 90, "DIRECTEURS DE PRODUCTION"},
|
|
{0, 0, ""},
|
|
{155, 90, "EXECUTIVE PRODUCERS"},
|
|
{0, 90, "\xb0\xf5\x20\xa6\xe6\x20\xbb\x73\x20\xa7\x40\x20\xc1\x60\x20\xba\xca"}
|
|
});
|
|
|
|
_titleFont->displayString(200, 130, "PATRICK KETCHUM");
|
|
_titleFont->displayString(236, 160, "ROLF KLUG");
|
|
_titleFont->displayString(236, 190, "JEAN KLUG");
|
|
}
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 33:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 34:
|
|
putHouse();
|
|
registTime();
|
|
displayTitleText({
|
|
{236, 95, "PRODUCERS"},
|
|
{218, 95, "PRODUCTORES"},
|
|
{218, 95, "PRODUCTEURS"},
|
|
{218, 95, "PRODUZENTEN"},
|
|
{236, 95, "PRODUCERS"},
|
|
{0, 95, "\xbb\x73\x20\x20\x20\x20\x20\x20\xa7\x40"}
|
|
});
|
|
_titleFont->displayString(200, 135, "HARALD SEELEY");
|
|
_titleFont->displayString(218, 165, "MIKE DAWSON");
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 35:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 36:
|
|
putHouse();
|
|
registTime();
|
|
displayTitleText({
|
|
{245, 95, "DESIGNERS"},
|
|
{227, 95, "DISENADORES"},
|
|
{218, 95, "DESSINATEURS"},
|
|
{254, 95, "DESIGNER"},
|
|
{245, 95, "DESIGNERS"},
|
|
{0, 95, "\xb3\x5d\x20\x20\xad\x70\x20\x20\xb8\x73"}
|
|
});
|
|
_titleFont->displayString(209, 135, "MIKE CRANFORD");
|
|
_titleFont->displayString(227, 165, "MIKE DAWSON");
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 37:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 38:
|
|
putHouse();
|
|
registTime();
|
|
displayTitleText({
|
|
{227, 95, "PROGRAMMERS"},
|
|
{203, 95, "PROGRAMADORES"},
|
|
{218, 95, "PROGRAMMEURS"},
|
|
{206, 95, "PROGRAMMIERER"},
|
|
{227, 95, "PROGRAMMERS"},
|
|
{0, 95, "\xb5\x7b\xa6\xa1\xb3\x5d\xad\x70\xb2\xd5"}
|
|
});
|
|
_titleFont->displayString(164, 135, "LENNARD FEDDERSEN");
|
|
_titleFont->displayString(227, 165, "JOHN KRAUSE");
|
|
_titleFont->displayString(245, 195, "GARY VICK");
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 39:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 40:
|
|
putHouse();
|
|
registTime();
|
|
displayTitleText({
|
|
{200, 100, "MUSICAL SCORE"},
|
|
{206, 100, "BANDA SONORA"},
|
|
{200, 100, "THEME MUSICAL"},
|
|
{214, 100, "MUSIKSTUECKE"},
|
|
{200, 100, "MUSICAL SCORE"},
|
|
{0, 100, "\xad\xb5\xbc\xd6\xb3\x5d\xad\x70\xb8\x73"}
|
|
});
|
|
_titleFont->displayString(200, 140, "GREGORY ALPER");
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 41:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 42:
|
|
putHouse();
|
|
registTime();
|
|
displayTitleText({
|
|
{119, 100, "MUSIC AND SOUND EFFECTS"},
|
|
{89, 100, "MUSICA Y EFECTOS DE SONIDO"},
|
|
{92, 100, "MUSIQUE ET EFFETS SONORES"},
|
|
{128, 100, "MUSIK-UND SOUNDEFFEKTE"},
|
|
{119, 100, "MUSIC AND SOUND EFFECTS"},
|
|
{0, 100, "\xad\xb5\xbc\xd6\xbb\x50\xad\xb5\xae\xc4\xa4\x75\xa7\x40\xb2\xd5"}
|
|
});
|
|
_titleFont->displayString(200, 140, "DAVID A. BEAN");
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 43:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 44:
|
|
putHouse();
|
|
registTime();
|
|
if (lang == Common::DE_DEU) {
|
|
_titleFont->displayString(239, 100, "KUNST-UND");
|
|
_titleFont->displayString(167, 130, "ASSISTENZ DER KUNST-UND");
|
|
_titleFont->displayString(236, 170, "BRUMMBAER");
|
|
} else {
|
|
displayTitleText({
|
|
{218, 100, "ART DIRECTOR"},
|
|
{176, 100, "DIRECTOR ARTISTICO"},
|
|
{146, 100, "DIRECTEUR ARTISTIQUE"},
|
|
{0, 100, ""},
|
|
{218, 100, "ART DIRECTOR"},
|
|
{0, 100, "\xc3\xc0\xb3\x4e\xab\xfc\xbe\xc9\xc1\x60\xba\xca"}
|
|
});
|
|
_titleFont->displayString(236, 140, "BRUMMBAER");
|
|
}
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 45:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 46:
|
|
putHouse();
|
|
registTime();
|
|
if (lang == Common::EN_ANY || lang == Common::KO_KOR || lang == Common::ZH_ANY) {
|
|
if (lang == Common::ZH_ANY) {
|
|
displayZhString("\xc3\xc0\xb3\x4e\xa7\x55\xb2\x7a\xab\xfc\xbe\xc9", 100);
|
|
} else {
|
|
_titleFont->displayString(164, 100, "ASST. ART DIRECTOR");
|
|
}
|
|
_titleFont->displayString(191, 140, "PAUL DRZEWIECKI");
|
|
} else {
|
|
displayTitleText({
|
|
{0, 0, ""},
|
|
{206, 100, "AYUDANTE DEL"},
|
|
{218, 100, "ASSISTANT DU"},
|
|
{119, 100, "ASSISTENZ DER KUNST-UND"},
|
|
{0, 0, ""},
|
|
{0, 0, ""}
|
|
});
|
|
displayTitleText({
|
|
{0, 0, ""},
|
|
{176, 130, "DIRECTOR ARTISTICO"},
|
|
{150, 130, "DIRECTEUR ARTISTIQUE"},
|
|
{167, 130, "ANIMATIONSDIREKTION"},
|
|
{0, 0, ""},
|
|
{0, 0, ""}
|
|
});
|
|
_titleFont->displayString(191, 170, "PAUL DRZEWIECKI");
|
|
}
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 47:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 48:
|
|
putHouse();
|
|
registTime();
|
|
displayTitleText({
|
|
{200, 100, "DARK WORLD ART"},
|
|
{104, 100, "GRAFICOS DEL MUNDO OSCURO"},
|
|
{137, 100, "L'ART DU MONDE OBSCUR"},
|
|
{188, 100, "DARK-WORLD-KUNST"},
|
|
{200, 100, "DARK WORLD ART"},
|
|
{0, 100, "\xb6\xc2\xb7\x74\xa5\x40\xac\xc9\xc3\xc0\xb3\x4e"}
|
|
});
|
|
_titleFont->displayString(245, 140, "H.R. GIGER");
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 49:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 50:
|
|
putHouse();
|
|
registTime();
|
|
if (lang == Common::FR_FRA) {
|
|
_titleFont->displayString(182, 75, "LES ARTISTES SUR");
|
|
_titleFont->displayString(236, 105, "ORDINATEUR");
|
|
|
|
_titleFont->displayString(227, 145, "JULIA ULANO");
|
|
_titleFont->displayString(191, 175, "JOBY ROME-OTERO");
|
|
_titleFont->displayString(236, 205, "PAUL RYAN");
|
|
} else {
|
|
displayTitleText({
|
|
{182, 90, "COMPUTER ARTISTS"},
|
|
{242, 90, "GRAFISTAS"},
|
|
{0, 0, ""},
|
|
{107, 90, "COMPUTERGRAFIK-KUENSTLER"},
|
|
{182, 90, "COMPUTER ARTISTS"},
|
|
{0, 90, "\xb9\x71\xb8\xa3\xac\xfc\xa4\x75\xc3\xc0\xb3\x4e"}
|
|
});
|
|
_titleFont->displayString(227, 130, "JULIA ULANO");
|
|
_titleFont->displayString(191, 160, "JOBY ROME-OTERO");
|
|
_titleFont->displayString(236, 190, "PAUL RYAN");
|
|
}
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 51:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 52:
|
|
putHouse();
|
|
registTime();
|
|
displayTitleText({
|
|
{236, 100, "GAME TEXT"},
|
|
{194, 100, "TEXTO DEL JUEGO"},
|
|
{173, 100, "LE TEXTE DU JEUX"},
|
|
{281, 100, "TEXTE"},
|
|
{236, 100, "GAME TEXT"},
|
|
{0, 100, "\xb9\x43\xc0\xb8\xa4\xe5\xa6\x72\xb9\xef\xa5\xd5"}
|
|
});
|
|
_titleFont->displayString(209, 140, "MICHEL HORVAT");
|
|
g_engine->_screen->makeAllDirty();
|
|
break;
|
|
case 53:
|
|
if (waitTime(CREDITS_DELAY)) {
|
|
return true;
|
|
}
|
|
if (lang == Common::KO_KOR) {
|
|
putHouse();
|
|
Img distrib;
|
|
distrib.load("art/distrib.img");
|
|
distrib.draw(1);
|
|
g_engine->_screen->makeAllDirty();
|
|
registTime();
|
|
} else if (lang == Common::ZH_ANY) {
|
|
putHouse();
|
|
registTime();
|
|
displayZhString("\xa8\xc8\xac\x77\xb9\x71\xb8\xa3\xa5\xf0\xb6\xa2\xb3\x6e\xc5\xe9\xb6\x7d\xb5\x6f\xb6\xb0\xb9\xce", 100);
|
|
displayZhString("\xb9\x71\xb8\xa3\xa5\xf0\xb6\xa2\xa5\x40\xac\xc9\xc5\xb8\xe5\xa5\xb1\xc0\xa5\x58", 140);
|
|
displayZhString("\xb5\x7b\x20\xa6\xa1\x20\xa7\xef\x20\xbd\x73\x3a\xa5\xdb\x20\xc5\xe9\x20\xb7\xbd", 176);
|
|
g_engine->_screen->makeAllDirty();
|
|
}
|
|
break;
|
|
case 54:
|
|
if (lang == Common::KO_KOR || lang == Common::ZH_ANY) {
|
|
if (waitTime(CREDITS_DELAY * 2)) {
|
|
return true;
|
|
}
|
|
}
|
|
if (g_engine->_sound->isPlayingMusic()) {
|
|
if (g_engine->_isLeftMouseClicked || g_engine->_isRightMouseClicked) {
|
|
g_engine->zeroMouseButtons();
|
|
_movieStep = 55;
|
|
}
|
|
return true;
|
|
}
|
|
break;
|
|
case 55:
|
|
if (g_engine->_sound->isPlayingMusic())
|
|
g_engine->_sound->startFadeOut();
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 56:
|
|
if (g_engine->fadeStep() || g_engine->_sound->isFading()) {
|
|
return true;
|
|
}
|
|
break;
|
|
default:
|
|
_movieStep = 9999;
|
|
return false;
|
|
}
|
|
_movieStep++;
|
|
if (g_engine->_isLeftMouseClicked || g_engine->_isRightMouseClicked) {
|
|
g_engine->zeroMouseButtons();
|
|
if (_movieStep < 55) {
|
|
_movieStep = 55;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool Cutscene::embryoInsertedScene() {
|
|
switch (_movieStep) {
|
|
case 1:
|
|
case 2:
|
|
break;
|
|
case 3:
|
|
g_engine->_screen->clear();
|
|
g_engine->_screen->makeAllDirty();
|
|
_palette.load("art/ship.pal");
|
|
_animation.load("art/nm1.anm");
|
|
g_engine->_screen->clearPalette();
|
|
break;
|
|
case 4: {
|
|
Img tmImg;
|
|
tmImg.load("art/nmf0.img");
|
|
tmImg.draw();
|
|
Img nmf1Img;
|
|
nmf1Img.load("art/nmf1.img");
|
|
nmf1Img.draw();
|
|
break;
|
|
}
|
|
case 5: {
|
|
Img tmImg;
|
|
tmImg.load("art/nm101.img");
|
|
tmImg.draw(1);
|
|
break;
|
|
}
|
|
case 6:
|
|
g_engine->_sound->playMusic(StartMusicId::kImplant);
|
|
registTime();
|
|
g_engine->fadeIn(_palette);
|
|
break;
|
|
case 7:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 8:
|
|
_animIdx = 0;
|
|
_animCount = 39;
|
|
runAnim();
|
|
break;
|
|
case 9:
|
|
if (stepAnim()) {
|
|
if (g_engine->_isLeftMouseClicked || g_engine->_isRightMouseClicked) {
|
|
g_engine->zeroMouseButtons();
|
|
if (_movieStep < 16) {
|
|
_movieStep = 16;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 10:
|
|
if (waitTime(30)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 11:
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 12:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 13: {
|
|
g_engine->_screen->clear();
|
|
_palette.load("art/house.pal");
|
|
if (_titleFont == nullptr) {
|
|
_titleFont = new TitleFont();
|
|
}
|
|
switch (g_engine->getLanguage()) {
|
|
case Common::ES_ESP :
|
|
_titleFont->displayString(80, 130, "TRAS UNA HORRIBLE PESADILLA");
|
|
_titleFont->displayString(80, 170, "MIKE DAWSON SE DESPIERTA EL");
|
|
_titleFont->displayString(80, 210, "PRIMER DIA EN SU NUEVA CASA...");
|
|
break;
|
|
case Common::FR_FRA :
|
|
_titleFont->displayString(0, 110, "APRES UN CAUCHEMAAR EPOUVANTABLE");
|
|
_titleFont->displayString(0, 150, "MIKE DAWSON SE REVEILLE POUR SA");
|
|
_titleFont->displayString(0, 190, "PREMIERE JOURNEE DANS LA NOUVELLE");
|
|
_titleFont->displayString(0, 230, "MAISON...");
|
|
break;
|
|
case Common::DE_DEU :
|
|
_titleFont->displayString(44, 130, "NACH EINEM SCHRECKENERREGENDEN");
|
|
_titleFont->displayString(44, 170, "ALPTRAUM MIKE DAWSON ERWACHT AM");
|
|
_titleFont->displayString(44, 210, "ERSTEM TAG IN SEINEN NEUEM HAUS...");
|
|
break;
|
|
case Common::KO_KOR : {
|
|
Img wakes0Img;
|
|
wakes0Img.load("art/wakes0.img");
|
|
wakes0Img.draw();
|
|
Img wakes1Img;
|
|
wakes1Img.load("art/wakes1.img");
|
|
wakes1Img.draw() ;
|
|
break;
|
|
}
|
|
case Common::ZH_ANY :
|
|
displayZhString("\xa4\xa3\xad\x6e\x21\xa4\xa3\xad\x6e\xb1\x4e\xa8\xba\xad\xd3\xb2\xa7\xa7\xce\xad\x46\xad\x4c\xb6\xeb\xa8\xec\xa7\xda\xaa\xba\xb8\xa3\xa4\x6c\xb8\xcc", 130);
|
|
displayZhString("\xb1\xcf\xa9\x52\xa7\x72\x21\xa4\xd1\xa5\x44\xbc\x65\xae\xa4\xa7\xda\xa7\x61\x21", 170);
|
|
displayZhString("\xa6\x62\xb3\xc1\xa7\x4a\xb9\x44\xb4\xcb\xaa\xba\xa6\x79\xa5\x73\xc1\x6e\xa4\xa4\x2c\xac\x47\xa8\xc6\xa5\xd1\xa6\xb9\xb6\x7d\xa9\x6c\x2e\x2e\x2e", 210);
|
|
break;
|
|
default :
|
|
_titleFont->displayString(80, 130, "AFTER A HORRIFYING NIGHTMARE");
|
|
_titleFont->displayString(80, 170, "MIKE DAWSON AWAKENS TO THE");
|
|
_titleFont->displayString(80, 210, "FIRST DAY IN HIS NEW HOUSE...");
|
|
break;
|
|
}
|
|
g_engine->fadeIn(_palette);
|
|
break;
|
|
}
|
|
case 14:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 15:
|
|
if (waitTime(30)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 16:
|
|
if (g_engine->_sound->isPlayingMusic())
|
|
g_engine->_sound->startFadeOut();
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 17:
|
|
if (g_engine->fadeStep() || g_engine->_sound->isFading()) {
|
|
return true;
|
|
}
|
|
break;
|
|
default:
|
|
_movieStep = 9999;
|
|
return false;
|
|
}
|
|
_movieStep++;
|
|
if (g_engine->_isLeftMouseClicked || g_engine->_isRightMouseClicked) {
|
|
g_engine->zeroMouseButtons();
|
|
if (_movieStep < 16) {
|
|
_movieStep = 16;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool Cutscene::shipLaunchScene() {
|
|
switch (_movieStep) {
|
|
case 1: {
|
|
_palette.load("art/ship.pal");
|
|
_animation.load("art/left.anm");
|
|
Img left00Img;
|
|
left00Img.load("art/left00.img");
|
|
left00Img.draw();
|
|
Img left01Img;
|
|
left01Img.load("art/left01.img");
|
|
left01Img.draw();
|
|
g_engine->_screen->clearPalette();
|
|
break;
|
|
}
|
|
case 2:
|
|
g_engine->fadeIn(_palette);
|
|
break;
|
|
case 3:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 4:
|
|
g_engine->_sound->playMusic(StartMusicId::kLaunch);
|
|
_animIdx = 2;
|
|
_animCount = 49;
|
|
runAnim();
|
|
break;
|
|
case 5:
|
|
if (stepAnim(1)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 6:
|
|
_animation.load("art/shipin.anm");
|
|
_animIdx = 75;
|
|
_animCount = 29;
|
|
runAnim(-1);
|
|
break;
|
|
case 7:
|
|
if (stepAnim()) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 8:
|
|
if (waitTime(20)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 9:
|
|
_animIdx = 46;
|
|
_animCount = 47;
|
|
runAnim(-1);
|
|
break;
|
|
case 10:
|
|
if (stepAnim()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 11:
|
|
_animation.load("art/left2.anm");
|
|
_animIdx = 0;
|
|
_animCount = 23;
|
|
runAnim();
|
|
break;
|
|
case 12:
|
|
if (stepAnim()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 13:
|
|
if (g_engine->_sound->isPlayingMusic())
|
|
g_engine->_sound->startFadeOut();
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 14:
|
|
if (g_engine->fadeStep() || g_engine->_sound->isFading()) {
|
|
return true;
|
|
}
|
|
break;
|
|
default:
|
|
_movieStep = 9999;
|
|
return false;
|
|
}
|
|
_movieStep++;
|
|
return true;
|
|
}
|
|
|
|
bool Cutscene::alienBornScene() {
|
|
switch (_movieStep) {
|
|
case 1: {
|
|
_palette.load("art/ship.pal");
|
|
Img left00Img;
|
|
left00Img.load("art/nmf0.img");
|
|
left00Img.draw();
|
|
Img left01Img;
|
|
left01Img.load("art/nmf1.img");
|
|
left01Img.draw();
|
|
Img born1Img;
|
|
born1Img.load("art/born01.img");
|
|
born1Img.draw(1);
|
|
g_engine->_screen->clearPalette();
|
|
break;
|
|
}
|
|
case 2:
|
|
_animation.load("art/born.anm");
|
|
g_engine->_sound->playMusic(StartMusicId::kAlien);
|
|
g_engine->fadeIn(_palette);
|
|
break;
|
|
case 3:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 4:
|
|
_animIdx = 0;
|
|
_animCount = 31;
|
|
// TODO speed = 2
|
|
runAnim();
|
|
break;
|
|
case 5:
|
|
if (stepAnim()) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 6:
|
|
if (waitTime(30)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 7:
|
|
if (g_engine->_sound->isPlayingMusic())
|
|
g_engine->_sound->startFadeOut();
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 8:
|
|
if (g_engine->fadeStep() || g_engine->_sound->isFading()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 9:
|
|
// TODO some logic here. stopSequence.
|
|
break;
|
|
default:
|
|
_movieStep = 9999;
|
|
return false;
|
|
}
|
|
_movieStep++;
|
|
return true;
|
|
}
|
|
|
|
bool Cutscene::babyDollScene() {
|
|
switch (_movieStep) {
|
|
case 1: {
|
|
freeMorph();
|
|
_morph = new Morph({73, 46, 472, 240});
|
|
_palette.load("art/norm.pal");
|
|
Img left00Img;
|
|
left00Img.load("art/bdoll0.img");
|
|
left00Img.draw();
|
|
Img left01Img;
|
|
left01Img.load("art/bdoll1.img");
|
|
left01Img.draw();
|
|
_morph->loadSrcFromScreen();
|
|
|
|
Img born1Img;
|
|
born1Img.load("art/embryo.img");
|
|
born1Img.draw(1);
|
|
_morph->loadDestFromScreen();
|
|
|
|
g_engine->_screen->clear();
|
|
left00Img.draw();
|
|
left01Img.draw();
|
|
g_engine->_screen->clearPalette();
|
|
break;
|
|
}
|
|
case 2:
|
|
break;
|
|
case 3:
|
|
g_engine->_sound->playMusic(StartMusicId::kDoll);
|
|
g_engine->fadeIn(_palette);
|
|
break;
|
|
case 4:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 5:
|
|
_morph->start(MorphDirection::Forward);
|
|
registTime();
|
|
break;
|
|
case 6:
|
|
if (waitTime(50)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 7: {
|
|
if (_morph->morphStep()) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
}
|
|
case 8:
|
|
if (waitTime(40)) {
|
|
return true;
|
|
}
|
|
_morph->start(MorphDirection::Backward);
|
|
break;
|
|
case 9:
|
|
if (_morph->morphStep()) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 10:
|
|
if (waitTime(30)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 11:
|
|
if (g_engine->_sound->isPlayingMusic())
|
|
g_engine->_sound->startFadeOut();
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 12:
|
|
if (g_engine->fadeStep() || g_engine->_sound->isFading()) {
|
|
return true;
|
|
}
|
|
freeMorph();
|
|
break;
|
|
default:
|
|
_movieStep = 9999;
|
|
return false;
|
|
}
|
|
_movieStep++;
|
|
return true;
|
|
}
|
|
|
|
bool Cutscene::bookScene() {
|
|
switch (_movieStep) {
|
|
case 1:
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 2:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 3: {
|
|
freeMorph();
|
|
_morph = new Morph({136, 41, 423, 239});
|
|
_palette.load("art/norm.pal");
|
|
Img left00Img;
|
|
left00Img.load("art/bdoll0.img");
|
|
left00Img.draw();
|
|
Img left01Img;
|
|
left01Img.load("art/bdoll1.img");
|
|
left01Img.draw();
|
|
Img book1Img;
|
|
book1Img.load("art/book1.img");
|
|
book1Img.draw(1);
|
|
_morph->loadSrcFromScreen();
|
|
|
|
Img book2Img;
|
|
book2Img.load("art/book2.img");
|
|
book2Img.draw(1);
|
|
_morph->loadDestFromScreen();
|
|
|
|
g_engine->_screen->clear();
|
|
left00Img.draw();
|
|
left01Img.draw();
|
|
book1Img.draw(1);
|
|
g_engine->_screen->clearPalette();
|
|
break;
|
|
}
|
|
case 4:
|
|
break;
|
|
case 5:
|
|
g_engine->fadeIn(_palette);
|
|
break;
|
|
case 6:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 7:
|
|
g_engine->_sound->playMusic(StartMusicId::kBook);
|
|
registTime();
|
|
break;
|
|
case 8:
|
|
if (waitTime(70)) {
|
|
return true;
|
|
}
|
|
_morph->start(MorphDirection::Forward);
|
|
break;
|
|
case 9:
|
|
if (_morph->morphStep()) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 10:
|
|
if (waitTime(70)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 11:
|
|
registTime();
|
|
_morph->start(MorphDirection::Backward);
|
|
break;
|
|
case 12:
|
|
if (_morph->morphStep()) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 13:
|
|
if (waitTime(40)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 14:
|
|
freeMorph();
|
|
if (g_engine->_sound->isPlayingMusic())
|
|
g_engine->_sound->startFadeOut();
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 15:
|
|
if (g_engine->fadeStep() || g_engine->_sound->isFading()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 16:
|
|
g_engine->_sound->killAllSound();
|
|
break;
|
|
default:
|
|
_movieStep = 9999;
|
|
return false;
|
|
}
|
|
_movieStep++;
|
|
return true;
|
|
}
|
|
|
|
bool Cutscene::nightmare2Scene() {
|
|
switch (_movieStep) {
|
|
case 1: {
|
|
freeMorph();
|
|
_morph = new Morph({264, 85, 515, 267});
|
|
_palette.load("art/ship.pal");
|
|
Img left00Img;
|
|
left00Img.load("art/nmf0.img");
|
|
left00Img.draw();
|
|
Img left01Img;
|
|
left01Img.load("art/nmf1.img");
|
|
left01Img.draw();
|
|
_morph->loadSrcFromScreen();
|
|
|
|
Img book2Img;
|
|
book2Img.load("art/dmik.img");
|
|
book2Img.draw(1);
|
|
_morph->loadDestFromScreen();
|
|
|
|
g_engine->_screen->clear();
|
|
left00Img.draw();
|
|
left01Img.draw();
|
|
g_engine->_screen->clearPalette();
|
|
break;
|
|
}
|
|
case 2:
|
|
break;
|
|
case 3:
|
|
g_engine->_sound->playMusic(StartMusicId::kNight2);
|
|
break;
|
|
case 4:
|
|
g_engine->fadeIn(_palette);
|
|
break;
|
|
case 5:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 6:
|
|
registTime();
|
|
break;
|
|
case 7:
|
|
if (waitTime(20)) {
|
|
return true;
|
|
}
|
|
_morph->start(MorphDirection::Forward);
|
|
break;
|
|
case 8:
|
|
if (_morph->morphStep()) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 9:
|
|
if (waitTime(10)) {
|
|
return true;
|
|
}
|
|
_morph->start(MorphDirection::Backward);
|
|
break;
|
|
case 10:
|
|
if (_morph->morphStep()) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 11:
|
|
if (waitTime(40)) {
|
|
return true;
|
|
}
|
|
_morph->start(MorphDirection::Forward);
|
|
break;
|
|
case 12:
|
|
if (_morph->morphStep()) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 13:
|
|
if (waitTime(10)) {
|
|
return true;
|
|
}
|
|
_morph->start(MorphDirection::Backward);
|
|
break;
|
|
case 14:
|
|
if (_morph->morphStep()) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 15:
|
|
if (waitTime(40)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 16:
|
|
freeMorph();
|
|
if (g_engine->_sound->isPlayingMusic())
|
|
g_engine->_sound->startFadeOut();
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 17:
|
|
if (g_engine->fadeStep() || g_engine->_sound->isFading()) {
|
|
return true;
|
|
}
|
|
break;
|
|
default:
|
|
_movieStep = 9999;
|
|
return false;
|
|
}
|
|
_movieStep++;
|
|
return true;
|
|
}
|
|
|
|
bool Cutscene::nightmare3Scene() {
|
|
switch (_movieStep) {
|
|
case 1: {
|
|
_palette.load("art/ship.pal");
|
|
Img left00Img;
|
|
left00Img.load("art/nmf0.img");
|
|
left00Img.draw();
|
|
Img left01Img;
|
|
left01Img.load("art/nmf1.img");
|
|
left01Img.draw();
|
|
|
|
Img book2Img;
|
|
book2Img.load("art/nm3a.img");
|
|
book2Img.draw(1);
|
|
|
|
g_engine->_screen->clearPalette();
|
|
break;
|
|
}
|
|
case 2: {
|
|
_animation.load("art/valves.anm", -9340);
|
|
g_engine->_sound->playMusic(StartMusicId::kNight3);
|
|
g_engine->fadeIn(_palette);
|
|
break;
|
|
}
|
|
case 3:
|
|
if (g_engine->fadeStep()) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 4:
|
|
_animIdx = 0;
|
|
_animCount = 24;
|
|
runAnim();
|
|
break;
|
|
case 5:
|
|
if (stepValveAnim(false)) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 6:
|
|
_faceIdx = 0;
|
|
_animCount = 34;
|
|
break;
|
|
case 7:
|
|
if (stepValveAnim(true)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 8:
|
|
_animCount = 34;
|
|
break;
|
|
case 9:
|
|
if (stepValveAnim(false)) {
|
|
return true;
|
|
}
|
|
registTime();
|
|
break;
|
|
case 10:
|
|
if (waitTime(10)) {
|
|
return true;
|
|
}
|
|
break;
|
|
case 11:
|
|
if (g_engine->_sound->isPlayingMusic())
|
|
g_engine->_sound->startFadeOut();
|
|
g_engine->fadeOut();
|
|
break;
|
|
case 12:
|
|
if (g_engine->fadeStep() || g_engine->_sound->isFading()) {
|
|
return true;
|
|
}
|
|
break;
|
|
default:
|
|
_movieStep = 9999;
|
|
return false;
|
|
}
|
|
_movieStep++;
|
|
return true;
|
|
}
|
|
|
|
bool Cutscene::stepAnim(int drawMode) {
|
|
if (_animDelayCount == 0) {
|
|
Img animFrame;
|
|
_animation.getImg(_animIdx, animFrame);
|
|
animFrame.draw(drawMode);
|
|
_animIdx += _animDirection;
|
|
_animCount--;
|
|
}
|
|
|
|
_animDelayCount++;
|
|
if (_animDelayCount == 6) {
|
|
_animDelayCount = 0;
|
|
}
|
|
|
|
if (_animCount > 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool Cutscene::stepValveAnim(bool doFaceAnim) {
|
|
if (_animDelayCount == 0) {
|
|
Img animLeftFrame;
|
|
_animation.getImg(_valvesIdx, animLeftFrame);
|
|
animLeftFrame.draw(1);
|
|
|
|
Img animRightFrame;
|
|
_animation.getImg(_valvesIdx + 6, animRightFrame);
|
|
animRightFrame.draw(1);
|
|
|
|
if (doFaceAnim && (_animCount % 2) == 0) {
|
|
Img faceFrame;
|
|
Common::Path facePath = Common::Path("art").join(Common::String::format("f%02d.img", _faceIdx + 2));
|
|
faceFrame.load(facePath);
|
|
faceFrame.draw(0, faceFrame.getWidth() - 6);
|
|
_faceIdx++;
|
|
}
|
|
|
|
_valvesIdx++;
|
|
if (_valvesIdx > 5) {
|
|
_valvesIdx = 0;
|
|
}
|
|
_animCount--;
|
|
}
|
|
|
|
_animDelayCount++;
|
|
if (_animDelayCount == 12) {
|
|
_animDelayCount = 0;
|
|
}
|
|
|
|
return _animCount > 0;
|
|
}
|
|
|
|
void Cutscene::putHouse() {
|
|
Img dollImg;
|
|
dollImg.load("art/bdoll0.img");
|
|
dollImg.draw();
|
|
Img doll1Img;
|
|
doll1Img.load("art/bdoll1.img");
|
|
doll1Img.draw();
|
|
Img houseFrameImg;
|
|
houseFrameImg.load("art/house.img");
|
|
houseFrameImg.draw(1);
|
|
}
|
|
|
|
void Cutscene::registTime() {
|
|
_startTime = g_system->getMillis();
|
|
}
|
|
|
|
bool Cutscene::waitTime(int16 duration) const {
|
|
return g_system->getMillis() < _startTime + (duration * 100);
|
|
}
|
|
|
|
void Cutscene::runAnim(int direction) {
|
|
_animDelayCount = 0;
|
|
_animDirection = direction;
|
|
}
|
|
|
|
void Cutscene::freeMorph() {
|
|
delete _morph;
|
|
_morph = nullptr;
|
|
}
|
|
|
|
void Cutscene::displayTitleText(const I18NTextWithPosition &text) {
|
|
const TextWithPosition &textWithPosition = getI18NTextWithPosition(text);
|
|
if (g_engine->getLanguage() == Common::ZH_ANY && _zhFont) {
|
|
displayZhString(textWithPosition.text, textWithPosition.y);
|
|
} else {
|
|
_titleFont->displayString(textWithPosition.x, textWithPosition.y, textWithPosition.text);
|
|
}
|
|
}
|
|
|
|
void Cutscene::displayZhString(const char *text, int y) {
|
|
auto str = convertToU32String(text, Common::ZH_ANY);
|
|
int rawStringSize = strlen(text) * 12;
|
|
int x = (640 - ((rawStringSize / 24) * 24 + (rawStringSize % 24) - 4)) / 2;
|
|
_zhFont->drawString(g_engine->_screen, str, x, y, 640, 14);
|
|
}
|
|
} // End of namespace Darkseed
|