diff options
Diffstat (limited to 'engines/hopkins/hopkins.cpp')
-rw-r--r-- | engines/hopkins/hopkins.cpp | 194 |
1 files changed, 109 insertions, 85 deletions
diff --git a/engines/hopkins/hopkins.cpp b/engines/hopkins/hopkins.cpp index bf9509c0d4..0d40f69e8f 100644 --- a/engines/hopkins/hopkins.cpp +++ b/engines/hopkins/hopkins.cpp @@ -39,6 +39,7 @@ HopkinsEngine *g_vm; HopkinsEngine::HopkinsEngine(OSystem *syst, const HopkinsGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc), _randomSource("Hopkins") { + DebugMan.addDebugChannel(kDebugPath, "Path", "Pathfinding debug level"); g_vm = this; _animMan = new AnimationManager(this); _computer = new ComputerManager(this); @@ -172,7 +173,7 @@ bool HopkinsEngine::runWin95Demo() { _globals->_characterSpriteBuf = _fileIO->loadFile("PERSO.SPR"); } - _globals->_characterType = 0; + _globals->_characterType = CHARACTER_HOPKINS; _objectsMan->_mapCarPosX = _objectsMan->_mapCarPosY = 0; memset(_globals->_saveData, 0, 2000); _globals->_exitId = 0; @@ -230,9 +231,9 @@ bool HopkinsEngine::runWin95Demo() { _graphicsMan->clearScreen(); _graphicsMan->clearPalette(); if (!_globals->_censorshipFl) - _animMan->playAnim("BANQUE.ANM", 200, 28, 200); + _animMan->playAnim("BANQUE.ANM", "BANKUK.ANM", 200, 28, 200); else - _animMan->playAnim("BANKUK.ANM", 200, 28, 200); + _animMan->playAnim("BANQUE.ANM", "BANKUK.ANM", 200, 28, 200); _soundMan->_specialSoundNum = 0; _soundMan->removeSample(1); _soundMan->removeSample(2); @@ -394,7 +395,7 @@ bool HopkinsEngine::runWin95Demo() { _globals->_eventMode = EVENTMODE_ALT; // CHECKME! _graphicsMan->clearScreen(); _graphicsMan->clearPalette(); - _animMan->playAnim("JOUR1A.anm", 12, 12, 2000); + _animMan->playAnim("JOUR1A.ANM", "JOUR1A.ANM", 12, 12, 2000); _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_exitId = 300; break; @@ -417,7 +418,7 @@ bool HopkinsEngine::runWin95Demo() { _globals->_eventMode = EVENTMODE_ALT; // CHECKME! _graphicsMan->clearScreen(); _graphicsMan->clearPalette(); - _animMan->playAnim("JOUR4A.anm", 12, 12, 2000); + _animMan->playAnim("JOUR4A.ANM", "JOUR4A.ANM", 12, 12, 2000); _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_exitId = 300; break; @@ -453,7 +454,7 @@ bool HopkinsEngine::runLinuxDemo() { _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_characterSpriteBuf = _fileIO->loadFile("PERSO.SPR"); - _globals->_characterType = 0; + _globals->_characterType = CHARACTER_HOPKINS; _objectsMan->_mapCarPosX = _objectsMan->_mapCarPosY = 0; memset(_globals->_saveData, 0, 2000); _globals->_exitId = 0; @@ -529,9 +530,9 @@ bool HopkinsEngine::runLinuxDemo() { _graphicsMan->_fadingFl = true; if (!_globals->_censorshipFl) - _animMan->playAnim("BANQUE.ANM", 200, 28, 200); + _animMan->playAnim("BANQUE.ANM", "BANKUK.ANM", 200, 28, 200); else - _animMan->playAnim("BANKUK.ANM", 200, 28, 200); + _animMan->playAnim("BANKUK.ANM", "BANQUE.ANM", 200, 28, 200); _soundMan->_specialSoundNum = 0; _soundMan->removeSample(1); _soundMan->removeSample(2); @@ -705,7 +706,7 @@ bool HopkinsEngine::runLinuxDemo() { _graphicsMan->clearScreen(); _graphicsMan->clearPalette(); _graphicsMan->_fadingFl = true; - _animMan->playAnim("JOUR1A.anm", 12, 12, 2000); + _animMan->playAnim("JOUR1A.ANM", "JOUR1A.ANM", 12, 12, 2000); _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_exitId = 300; break; @@ -717,7 +718,7 @@ bool HopkinsEngine::runLinuxDemo() { _graphicsMan->clearScreen(); _graphicsMan->clearPalette(); _graphicsMan->_fadingFl = true; - _animMan->playAnim("JOUR3A.anm", 12, 12, 2000); + _animMan->playAnim("JOUR3A.ANM", "JOUR3A.ANM", 12, 12, 2000); _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_exitId = 300; break; @@ -729,7 +730,7 @@ bool HopkinsEngine::runLinuxDemo() { _graphicsMan->clearScreen(); _graphicsMan->clearPalette(); _graphicsMan->_fadingFl = true; - _animMan->playAnim("JOUR4A.anm", 12, 12, 2000); + _animMan->playAnim("JOUR4A.ANM", "JOUR4A.ANM", 12, 12, 2000); _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_exitId = 300; break; @@ -790,18 +791,21 @@ bool HopkinsEngine::runFull() { _globals->_speed = 2; _globals->_eventMode = EVENTMODE_IGNORE; _graphicsMan->_fadingFl = true; - _animMan->playAnim("MP.ANM", 10, 16, 200); + _animMan->playAnim("MP.ANM", "MP.ANM", 10, 16, 200); } else { - _animMan->playAnim("MP.ANM", 10, 16, 200); + _animMan->playAnim("MP.ANM", "MP.ANM", 10, 16, 200); _graphicsMan->fadeOutLong(); } } + _events->mouseOff(); + if (!_events->_escKeyFl && _startGameSlot == -1) { playIntro(); if (shouldQuit()) return false; } + if (getPlatform() != Common::kPlatformLinux && _startGameSlot == -1) { _graphicsMan->fadeOutShort(); _graphicsMan->loadImage("H2"); @@ -811,14 +815,17 @@ bool HopkinsEngine::runFull() { } _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_characterSpriteBuf = _fileIO->loadFile("PERSO.SPR"); - _globals->_characterType = 0; + _globals->_characterType = CHARACTER_HOPKINS; _objectsMan->_mapCarPosX = _objectsMan->_mapCarPosY = 0; memset(_globals->_saveData, 0, 2000); _globals->_exitId = 0; - if (_startGameSlot != -1) + + if (_startGameSlot != -1) { + _soundMan->playSound(28); _saveLoad->loadGame(_startGameSlot); + } for (;;) { if (_globals->_exitId == 300) @@ -870,11 +877,11 @@ bool HopkinsEngine::runFull() { _graphicsMan->_fadingFl = true; if (!_globals->_censorshipFl) - _animMan->playAnim("BANQUE.ANM", 200, 28, 200); + _animMan->playAnim("BANQUE.ANM", "BANKUK.ANM", 200, 28, 200); else - _animMan->playAnim("BANKUK.ANM", 200, 28, 200); + _animMan->playAnim("BANKUK.ANM", "BANQUE.ANM", 200, 28, 200); } else { - _animMan->playAnim("BANQUE.ANM", 200, 28, 200); + _animMan->playAnim("BANQUE.ANM", "BANKUK.ANM", 200, 28, 200); } _soundMan->_specialSoundNum = 0; @@ -1002,14 +1009,14 @@ bool HopkinsEngine::runFull() { if (getPlatform() == Common::kPlatformLinux) { _soundMan->playSound(29); _graphicsMan->_fadingFl = true; - _animMan->playAnim("PURG1A.ANM", 12, 18, 50); + _animMan->playAnim("PURG1A.ANM", "PURG1.ANM", 12, 18, 50); } else if (getPlatform() == Common::kPlatformWindows) { _soundMan->playSound(29); - _animMan->playAnim("PURG1A.ANM", 12, 18, 50); + _animMan->playAnim("PURG1A.ANM", "PURG1.ANM", 12, 18, 50); _graphicsMan->fadeOutShort(); } else { _soundMan->playSound(6); - _animMan->playAnim("PURG1A.ANM", 12, 18, 50); + _animMan->playAnim("PURG1A.ANM", "PURG1.ANM", 12, 18, 50); _graphicsMan->fadeOutShort(); } _globals->_eventMode = EVENTMODE_DEFAULT; @@ -1046,7 +1053,7 @@ bool HopkinsEngine::runFull() { _soundMan->playSound(6); if (getPlatform() == Common::kPlatformLinux) _graphicsMan->_fadingFl = true; - _animMan->playAnim("PURG2A.ANM", 12, 18, 50); + _animMan->playAnim("PURG2A.ANM", "PURG2.ANM", 12, 18, 50); if (getPlatform() != Common::kPlatformLinux) _graphicsMan->fadeOutShort(); _globals->_eventMode = EVENTMODE_DEFAULT; @@ -1408,7 +1415,7 @@ bool HopkinsEngine::runFull() { _graphicsMan->clearScreen(); _graphicsMan->clearPalette(); _soundMan->playSound(6); - _animMan->playAnim("PURG1A.ANM", 12, 18, 50); + _animMan->playAnim("PURG1A.ANM", "PURG1.ANM", 12, 18, 50); _graphicsMan->fadeOutShort(); _globals->_eventMode = EVENTMODE_DEFAULT; } @@ -1480,7 +1487,7 @@ bool HopkinsEngine::runFull() { _graphicsMan->clearPalette(); if (getPlatform() == Common::kPlatformLinux) _graphicsMan->_fadingFl = true; - _animMan->playAnim("JOUR1A.ANM", 12, 12, 2000); + _animMan->playAnim("JOUR1A.ANM", "JOUR1A.ANM", 12, 12, 2000); _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_exitId = 300; break; @@ -1492,7 +1499,7 @@ bool HopkinsEngine::runFull() { _graphicsMan->clearPalette(); if (getPlatform() == Common::kPlatformLinux) _graphicsMan->_fadingFl = true; - _animMan->playAnim("JOUR3A.ANM", 12, 12, 2000); + _animMan->playAnim("JOUR3A.ANM", "JOUR3A.ANM", 12, 12, 2000); _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_exitId = 300; break; @@ -1504,7 +1511,7 @@ bool HopkinsEngine::runFull() { _graphicsMan->clearPalette(); if (getPlatform() == Common::kPlatformLinux) _graphicsMan->_fadingFl = true; - _animMan->playAnim("JOUR4A.ANM", 12, 12, 2000); + _animMan->playAnim("JOUR4A.ANM", "JOUR4A.ANM", 12, 12, 2000); _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_exitId = 300; break; @@ -1523,7 +1530,7 @@ bool HopkinsEngine::runFull() { //_globals->_exitId = WBASE(); // Handles the 3D Doom level (Windows) _soundMan->stopSound(); _globals->_characterSpriteBuf = _fileIO->loadFile("PERSO.SPR"); - _globals->_characterType = 0; + _globals->_characterType = CHARACTER_HOPKINS; _globals->_eventMode = EVENTMODE_DEFAULT; _graphicsMan->_lineNbr = SCREEN_WIDTH; break; @@ -1534,10 +1541,6 @@ bool HopkinsEngine::runFull() { return true; } -bool HopkinsEngine::shouldQuit() const { - return g_system->getEventManager()->shouldQuit(); -} - int HopkinsEngine::getRandomNumber(int maxNumber) { return _randomSource.getRandomNumber(maxNumber); } @@ -1599,22 +1602,25 @@ void HopkinsEngine::playIntro() { _events->refreshScreenAndEvents(); _soundMan->playSound(16); _animMan->setClearAnimFlag(); - _animMan->playAnim("J1.anm", 12, 12, 50); + + _animMan->playAnim("J1.ANM", "J1.ANM", 12, 12, 50); if (shouldQuit() || _events->_escKeyFl) return; - + _events->mouseOff(); _soundMan->mixVoice(1, 3); - _animMan->playAnim("J2.anm", 12, 12, 50); + _animMan->playAnim("J2.ANM", "J2.ANM", 12, 12, 50); if (shouldQuit() || _events->_escKeyFl) return; + _events->mouseOff(); _soundMan->mixVoice(2, 3); - _animMan->playAnim("J3.anm", 12, 12, 50); + _animMan->playAnim("J3.ANM", "J3.ANM", 12, 12, 50); if (shouldQuit() || _events->_escKeyFl) return; + _events->mouseOff(); _soundMan->mixVoice(3, 3); _graphicsMan->clearScreen(); _graphicsMan->clearPalette(); @@ -1694,7 +1700,7 @@ void HopkinsEngine::playIntro() { _soundMan->_specialSoundNum = 5; _graphicsMan->_fadingFl = true; - _animMan->playAnim("ELEC.ANM", 10, 26, 200); + _animMan->playAnim("ELEC.ANM", "ELEC.ANM", 10, 26, 200); _soundMan->_specialSoundNum = 0; if (shouldQuit() || _events->_escKeyFl) @@ -1781,22 +1787,22 @@ void HopkinsEngine::playIntro() { _soundMan->playSound(3); _soundMan->_specialSoundNum = 1; _animMan->setClearAnimFlag(); - _animMan->playAnim("INTRO1.anm", 10, 24, 18); + _animMan->playAnim("INTRO1.ANM", "INTRO1.ANM", 10, 24, 18); _soundMan->_specialSoundNum = 0; if (shouldQuit() || _events->_escKeyFl) return; - _animMan->playAnim("INTRO2.anm", 10, 24, 18); + _animMan->playAnim("INTRO2.ANM", "INTRO2.ANM", 10, 24, 18); if (shouldQuit() || _events->_escKeyFl) return; - _animMan->playAnim("INTRO3.anm", 10, 24, 200); + _animMan->playAnim("INTRO3.ANM", "INTRO3.ANM", 10, 24, 200); if (shouldQuit() || _events->_escKeyFl) return; _graphicsMan->_fadingFl = true; _animMan->unsetClearAnimFlag(); - _animMan->playAnim("J4.anm", 12, 12, 1000); + _animMan->playAnim("J4.ANM", "J4.ANM", 12, 12, 1000); break; } } @@ -1855,7 +1861,7 @@ void HopkinsEngine::bombExplosion() { _globals->_eventMode = EVENTMODE_IGNORE; _soundMan->_specialSoundNum = 199; _graphicsMan->_fadingFl = true; - _animMan->playAnim("BOMBE2A.ANM", 50, 14, 500); + _animMan->playAnim("BOMBE2A.ANM", "BOMBE2.ANM", 50, 14, 500); _soundMan->_specialSoundNum = 0; _graphicsMan->loadImage("IM15"); _animMan->loadAnim("ANIM15"); @@ -1889,7 +1895,10 @@ void HopkinsEngine::bombExplosion() { } void HopkinsEngine::restoreSystem() { - quitGame(); + // If the game isn't alerady trying to quit, flag that quitting is needed + if (!shouldQuit()) + quitGame(); + _events->refreshEvents(); } @@ -1962,31 +1971,31 @@ void HopkinsEngine::playSubmarineCutscene() { _graphicsMan->clearPalette(); _soundMan->playSound(25); _animMan->setClearAnimFlag(); - _animMan->playAnim("base00a.anm", 10, 18, 18); + _animMan->playAnim("BASE00A.ANM", "BASE00.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("base05a.anm", 10, 18, 18); + _animMan->playAnim("BASE05A.ANM", "BASE05.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("base10a.anm", 10, 18, 18); + _animMan->playAnim("BASE10A.ANM", "BASE10.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("base20a.anm", 10, 18, 18); + _animMan->playAnim("BASE20A.ANM", "BASE20.ANM", 10, 18, 18); // CHECKME: The original code was doing the opposite test, which was a bug. if (!_events->_escKeyFl) - _animMan->playAnim("base30a.anm", 10, 18, 18); + _animMan->playAnim("BASE30A.ANM", "BASE30.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("base40a.anm", 10, 18, 18); + _animMan->playAnim("BASE40A.ANM", "BASE40.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("base50a.anm", 10, 18, 18); + _animMan->playAnim("BASE50A.ANM", "BASE50.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("OC00a.anm", 10, 18, 18); + _animMan->playAnim("OC00A.ANM", "OC00.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("OC05a.anm", 10, 18, 18); + _animMan->playAnim("OC05A.ANM", "OC05.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("OC10a.anm", 10, 18, 18); + _animMan->playAnim("OC10A.ANM", "OC10.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("OC20a.anm", 10, 18, 18); + _animMan->playAnim("OC20A.ANM", "OC20.ANM", 10, 18, 18); if (!_events->_escKeyFl) { _graphicsMan->_fadingFl = true; - _animMan->playAnim("OC30a.anm", 10, 18, 18); + _animMan->playAnim("OC30A.ANM", "OC30.ANM", 10, 18, 18); } _events->_escKeyFl = false; @@ -2108,7 +2117,7 @@ void HopkinsEngine::playEnding() { _soundMan->_specialSoundNum = 200; _soundMan->_skipRefreshFl = true; _graphicsMan->_fadingFl = true; - _animMan->playAnim("BERM.ANM", 100, 24, 300); + _animMan->playAnim("BERM.ANM", "BERM.ANM", 100, 24, 300); _graphicsMan->endDisplayBob(); _soundMan->removeSample(1); _graphicsMan->loadImage("PLAN3"); @@ -2125,15 +2134,16 @@ void HopkinsEngine::playEnding() { _globals->_eventMode = EVENTMODE_IGNORE; _soundMan->_specialSoundNum = 0; _graphicsMan->_fadingFl = true; - _animMan->playAnim("JOUR2A.anm", 12, 12, 1000); + _animMan->playAnim("JOUR2A.anm", "JOUR2A.anm", 12, 12, 1000); _soundMan->playSound(11); _graphicsMan->clearScreen(); _graphicsMan->clearPalette(); - _animMan->playAnim("FF1a.anm", 18, 18, 9); - _animMan->playAnim("FF1a.anm", 9, 18, 9); - _animMan->playAnim("FF1a.anm", 9, 18, 18); - _animMan->playAnim("FF1a.anm", 9, 18, 9); - _animMan->playAnim("FF2a.anm", 24, 24, 100); + _animMan->playAnim("FF1a.anm", "FF1.anm", 18, 18, 9); + _animMan->playAnim("FF1a.anm", "FF1.anm", 9, 18, 9); + _animMan->playAnim("FF1a.anm", "FF1.anm", 9, 18, 18); + _animMan->playAnim("FF1a.anm", "FF1.anm", 9, 18, 9); + _animMan->playAnim("FF2a.anm", "FF2.anm", 24, 24, 100); + _events->mouseOff(); displayCredits(); _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_exitId = 300; @@ -2142,7 +2152,7 @@ void HopkinsEngine::playEnding() { } else { _soundMan->_specialSoundNum = 200; _soundMan->_skipRefreshFl = true; - _animMan->playAnim2("BERM.ANM", 100, 24, 300); + _animMan->playAnim2("BERM.ANM", "BERM.ANM", 100, 24, 300); _objectsMan->stopBobAnimation(7); _objectsMan->setBobAnimation(8); _globals->_introSpeechOffFl = true; @@ -2167,12 +2177,12 @@ void HopkinsEngine::playEnding() { _soundMan->_specialSoundNum = 0; _dialog->enableInvent(); _globals->_disableInventFl = false; - _animMan->playAnim("JOUR4A.anm", 12, 12, 1000); + _animMan->playAnim("JOUR4A.ANM", "JOUR4A.ANM", 12, 12, 1000); _globals->_eventMode = EVENTMODE_DEFAULT; _globals->_exitId = 300; } _globals->_characterSpriteBuf = _fileIO->loadFile("PERSO.SPR"); - _globals->_characterType = 0; + _globals->_characterType = CHARACTER_HOPKINS; _globals->_eventMode = EVENTMODE_DEFAULT; } @@ -2183,36 +2193,36 @@ void HopkinsEngine::playPlaneCutscene() { _graphicsMan->clearPalette(); _animMan->unsetClearAnimFlag(); - _animMan->playAnim("aerop00a.anm", 10, 18, 18); + _animMan->playAnim("AEROP00A.ANM", "AEROP00.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("serop10a.anm", 10, 18, 18); + _animMan->playAnim("SEROP10A.ANM", "SEROP10A.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("aerop20a.anm", 10, 18, 18); + _animMan->playAnim("AEROP20A.ANM", "AEROP20.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("aerop30a.anm", 10, 18, 18); + _animMan->playAnim("AEROP30A.ANM", "AEROP30.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("aerop40a.anm", 10, 18, 18); + _animMan->playAnim("AEROP40A.ANM", "AEROP40.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("aerop50a.anm", 10, 18, 18); + _animMan->playAnim("AEROP50A.ANM", "AEROP50.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("aerop60a.anm", 10, 18, 18); + _animMan->playAnim("AEROP60A.ANM", "AEROP60.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("aerop70a.anm", 10, 18, 18); + _animMan->playAnim("AEROP70A.ANM", "AEROP70.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("trans00a.anm", 10, 18, 18); + _animMan->playAnim("TRANS00A.ANM", "TRANS00.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("trans10a.anm", 10, 18, 18); + _animMan->playAnim("TRANS10A.ANM", "TRANS10.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("trans15a.anm", 10, 18, 18); + _animMan->playAnim("TRANS15A.ANM", "TRANS15.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("trans20a.anm", 10, 18, 18); + _animMan->playAnim("TRANS20A.ANM", "TRANS20.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("trans30a.anm", 10, 18, 18); + _animMan->playAnim("TRANS30A.ANM", "TRANS30.ANM", 10, 18, 18); if (!_events->_escKeyFl) - _animMan->playAnim("trans40a.anm", 10, 18, 18); + _animMan->playAnim("TRANS40A.ANM", "TRANS40.ANM", 10, 18, 18); if (!_events->_escKeyFl) { _graphicsMan->_fadingFl = true; - _animMan->playAnim("PARA00a.anm", 9, 9, 9); + _animMan->playAnim("PARA00A.ANM", "PARA00.ANM", 9, 9, 9); } _events->_escKeyFl = false; @@ -2353,21 +2363,34 @@ void HopkinsEngine::loadCredits() { _globals->_creditsPosY = 440; _globals->_creditsStep = 45; byte *bufPtr; + Common::String filename; switch (_globals->_language) { case LANG_EN: - bufPtr = _fileIO->loadFile("CREAN.TXT"); + filename = "CREAN.TXT"; break; case LANG_FR: - bufPtr = _fileIO->loadFile("CREFR.TXT"); + filename = "CREFR.TXT"; break; case LANG_SP: - bufPtr = _fileIO->loadFile("CREES.TXT"); + filename = "CREES.TXT"; break; default: error("Unhandled language"); break; } + if (!_fileIO->fileExists(filename)) { + _globals->_creditsLineNumb = 1; + _globals->_creditsItem[0]._color = '1'; + _globals->_creditsItem[0]._actvFl = true; + _globals->_creditsItem[0]._linePosY = _globals->_creditsPosY; + strcpy((char *)_globals->_creditsItem[0]._line, "The End"); + _globals->_creditsItem[0]._lineSize = 7; + return; + } + + bufPtr = _fileIO->loadFile(filename); + byte *curPtr = bufPtr; int idxLines = 0; bool loopCond = false; @@ -2441,13 +2464,14 @@ void HopkinsEngine::displayCredits() { _globals->_eventMode = EVENTMODE_CREDITS; _globals->_creditsStartX = _globals->_creditsEndX = _globals->_creditsStartY = _globals->_creditsEndY = -1; int soundId = 28; + do { for (int i = 0; i < _globals->_creditsLineNumb; ++i) { if (_globals->_creditsItem[i]._actvFl) { int nextY = _globals->_creditsPosY + i * _globals->_creditsStep; _globals->_creditsItem[i]._linePosY = nextY; - if ((nextY - 21 >= 0) && (nextY - 21 <= 418)) { + if ((nextY >= 51) && (nextY <= 460)) { int col = 0; switch (_globals->_creditsItem[i]._color) { case '1': @@ -2472,7 +2496,7 @@ void HopkinsEngine::displayCredits() { --_globals->_creditsPosY; if (_globals->_creditsStartX != -1 || _globals->_creditsEndX != -1 || _globals->_creditsStartY != -1 || _globals->_creditsEndY != -1) { _events->refreshScreenAndEvents(); - _graphicsMan->copySurface(_graphicsMan->_backBuffer, 60, 50, 520, 380, _graphicsMan->_frontBuffer, 60, 50); + _graphicsMan->copySurface(_graphicsMan->_backBuffer, 60, 50, 520, 430, _graphicsMan->_frontBuffer, 60, 50); } else { _events->refreshScreenAndEvents(); } @@ -2800,7 +2824,7 @@ void HopkinsEngine::handleOceanMaze(int16 curExitId, Common::String backgroundFi _objectsMan->removeSprite(0); _objectsMan->clearScreen(); _globals->_characterSpriteBuf = _fileIO->loadFile("PERSO.SPR"); - _globals->_characterType = 0; + _globals->_characterType = CHARACTER_HOPKINS; } void HopkinsEngine::syncSoundSettings() { |