diff options
-rw-r--r-- | engines/kyra/kyra2.cpp | 129 | ||||
-rw-r--r-- | engines/kyra/kyra2.h | 123 | ||||
-rw-r--r-- | engines/kyra/kyra3.cpp | 705 | ||||
-rw-r--r-- | engines/kyra/kyra3.h | 146 | ||||
-rw-r--r-- | engines/kyra/module.mk | 4 | ||||
-rw-r--r-- | engines/kyra/plugin.cpp | 10 | ||||
-rw-r--r-- | engines/kyra/sequences_v2.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/staticres.cpp | 4 | ||||
-rw-r--r-- | engines/kyra/wsamovie.cpp | 1 |
9 files changed, 11 insertions, 1113 deletions
diff --git a/engines/kyra/kyra2.cpp b/engines/kyra/kyra2.cpp deleted file mode 100644 index 11b2e562c7..0000000000 --- a/engines/kyra/kyra2.cpp +++ /dev/null @@ -1,129 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2006 The ScummVM project - * - * 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "kyra/kyra.h" -#include "kyra/kyra2.h" -#include "kyra/screen.h" -#include "kyra/resource.h" -#include "kyra/wsamovie.h" -#include "kyra/sound.h" - -#include "common/system.h" - -namespace Kyra { - -KyraEngine_v2::KyraEngine_v2(OSystem *system, const GameFlags &flags) : KyraEngine(system, flags) { - memset(_gameShapes, 0, sizeof(_gameShapes)); - _mouseSHPBuf = 0; -} - -KyraEngine_v2::~KyraEngine_v2() { - delete [] _mouseSHPBuf; -} - -int KyraEngine_v2::init() { - KyraEngine::init(); - - if (_res->getFileSize("6.FNT")) { - _screen->loadFont(Screen::FID_6_FNT, "6.FNT"); - } - if (_res->getFileSize("8FAT.FNT")) { - _screen->loadFont(Screen::FID_8_FNT, "8FAT.FNT"); - } - _screen->loadFont(Screen::FID_GOLDFONT_FNT, "GOLDFONT.FNT"); - _screen->setAnimBlockPtr(3500); - _screen->setScreenDim(0); - - assert(_introStringsSize == 21); - for (int i = 0; i < 21; i++) { - _introStringsDuration[i] = strlen(_introStrings[i]) * 8; - } - - // No mouse display in demo - if (_flags.isDemo) - return 0; - - _mouseSHPBuf = _res->fileData("PWGMOUSE.SHP", 0); - assert(_mouseSHPBuf); - - for (int i = 0; i < 2; i++) { - _gameShapes[i] = _screen->getPtrToShape(_mouseSHPBuf, i); - assert(_gameShapes[i]); - } - - _screen->setMouseCursor(0, 0, _gameShapes[0]); - return 0; -} - -int KyraEngine_v2::go() { - if (_flags.isDemo) { - static const char *soundFileList[] = { - "K2_DEMO", - "LOLSYSEX" - }; - _sound->setSoundFileList(soundFileList, 2); - } else { - // TODO: move this to proper place - static const char *soundFileList[] = { - "K2INTRO" - }; - _sound->setSoundFileList(soundFileList, 1); - } - _sound->loadSoundFile(0); - - // Temporary measure to work around the fact that there's - // several WSA files with identical names in different PAK files. - _res->unloadPakFile("OUTFARM.PAK"); - _res->unloadPakFile("FLYTRAP.PAK"); - - seq_playSequences(kSequenceVirgin, kSequenceWestwood); - mainMenu(); - - return 0; -} - -void KyraEngine_v2::mainMenu() { - bool running = true; - - while (running && !_quitFlag) { - seq_playSequences(kSequenceTitle); - _screen->showMouse(); - - switch (gui_handleMainMenu()) { - case 0: - break; - case 1: - seq_playSequences(kSequenceOverview, kSequenceLibrary); - break; - case 2: - break; - case 3: - running = false; - break; - default: - break; - } - _screen->hideMouse(); - } -} - -} // end of namespace Kyra diff --git a/engines/kyra/kyra2.h b/engines/kyra/kyra2.h deleted file mode 100644 index ef07df41ed..0000000000 --- a/engines/kyra/kyra2.h +++ /dev/null @@ -1,123 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2006 The ScummVM project - * - * 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef KYRA2_H -#define KYRA2_H - -namespace Kyra { - -enum kSequences { - kSequenceVirgin = 0, - kSequenceWestwood = 1, - kSequenceTitle = 2, - kSequenceOverview = 3, - kSequenceLibrary = 4, - kSequenceHand = 5 -}; - -class WSAMovieV2; -class KyraEngine_v2; - -struct SequenceControl { - int8 frameIndex; - int8 frameDelay; -}; - -struct ActiveWSA { - WSAMovieV2 *movie; - uint16 currentFrame; - uint16 endFrame; - uint16 frameDelay; - uint32 nextFrame; - void (KyraEngine_v2::*callback)(int); - const SequenceControl *control; -}; - -struct ActiveChat { - uint16 strIndex; - uint16 x; - uint16 y; - int duration; - uint16 field_8; - uint16 startTime; - uint16 field_E; -}; - -struct Sequence { - uint8 type; - const char *filename; - int (KyraEngine_v2::*callback)(int); - uint8 frameDelay; - uint16 duration; - uint8 numFrames; - bool timeOut; - bool fadeOut; -}; - -class KyraEngine_v2 : public KyraEngine { -public: - KyraEngine_v2(OSystem *system, const GameFlags &flags); - ~KyraEngine_v2(); - - int go(); - -private: - void seq_playSequences(int startSeq, int endSeq = -1); - int seq_introWestwood(int seqNum); - int seq_introTitle(int seqNum); - int seq_introOverview(int seqNum); - int seq_introLibrary(int seqNum); - int seq_introHand(int seqNum); - - void seq_introOverviewOver1(int currentFrame); - void seq_introOverviewForest(int currentFrame); - void seq_introOverviewDragon(int currentFrame); - void seq_loadWSA(int wsaNum, const char *filename, int frameDelay, void (KyraEngine_v2::*callback)(int) = 0, - const SequenceControl *control = 0 ); - void seq_unloadWSA(int wsaNum); - void seq_playWSAs(); - void seq_showChats(); - void seq_playIntroChat(uint8 chatNum); - void seq_resetAllChatEntries(); - void seq_waitForChatsToFinish(); - void seq_setChatEntry(uint16 strIndex, uint16 posX, uint16 posY, int duration, uint16 unk1); - - void mainMenu(); - int init(); - - ActiveWSA *_activeWSA; - ActiveChat *_activeChat; - uint8 *_gameShapes[50]; - uint8 *_mouseSHPBuf; - - static const char *_introSoundList[]; - static const int _introSoundListSize; - static const char *_introStrings[]; - static const int _introStringsSize; - - int _introStringsDuration[21]; - -}; - -} // end of namespace Kyra - -#endif diff --git a/engines/kyra/kyra3.cpp b/engines/kyra/kyra3.cpp deleted file mode 100644 index d17a2b72c3..0000000000 --- a/engines/kyra/kyra3.cpp +++ /dev/null @@ -1,705 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2006 The ScummVM project - * - * 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "kyra/kyra.h" -#include "kyra/kyra3.h" -#include "kyra/screen.h" -#include "kyra/wsamovie.h" -#include "kyra/sound.h" -#include "kyra/text.h" -#include "kyra/vqa.h" - -#include "common/system.h" -#include "common/config-manager.h" - -// TODO: Temporary, to get the mouse cursor mock-up working -#include "graphics/cursorman.h" - -namespace Kyra { -KyraEngine_v3::KyraEngine_v3(OSystem *system, const GameFlags &flags) : KyraEngine(system, flags) { - _soundDigital = 0; - _musicSoundChannel = -1; - _menuAudioFile = "TITLE1.AUD"; - _curMusicTrack = -1; - _unkPage1 = _unkPage2 = 0; - _interfaceCPS1 = _interfaceCPS2 = 0; - memset(_gameShapes, 0, sizeof(_gameShapes)); - _shapePoolBuffer = 0; - _itemBuffer1 = _itemBuffer2 = 0; - _mouseSHPBuf = 0; - _tableBuffer1 = _tableBuffer2 = 0; - _unkBuffer5 = _unkBuffer6 = _unkBuffer7 = _unkBuffer9 = 0; - _costpalData = 0; - _unkWSAPtr = 0; - memset(_unkShapeTable, 0, sizeof(_unkShapeTable)); - _scoreFile = 0; - _cCodeFile = 0; - _scenesList = 0; -} - -KyraEngine_v3::~KyraEngine_v3() { - delete _soundDigital; - - delete [] _unkPage1; - delete [] _unkPage2; - delete [] _interfaceCPS1; - delete [] _interfaceCPS2; - - delete [] _itemBuffer1; - delete [] _itemBuffer2; - - delete [] _shapePoolBuffer; - - delete [] _mouseSHPBuf; - - delete [] _unkBuffer5; - delete [] _unkBuffer6; - delete [] _unkBuffer7; - delete [] _unkBuffer9; - - delete [] _costpalData; - delete [] _unkWSAPtr; - - delete [] _scoreFile; - delete [] _cCodeFile; - delete [] _scenesList; -} - -Movie *KyraEngine_v3::createWSAMovie() { - return new WSAMovieV2(this); -} - -int KyraEngine_v3::init() { - KyraEngine::init(); - - gui_initMainMenu(); - - _soundDigital = new SoundDigital(this, _mixer); - assert(_soundDigital); - if (!_soundDigital->init()) - error("_soundDigital->init() failed"); - - _screen->loadFont(Screen::FID_6_FNT, "6.FNT"); - _screen->loadFont(Screen::FID_8_FNT, "8FAT.FNT"); - _screen->loadFont(Screen::FID_BOOKFONT_FNT, "BOOKFONT.FNT"); - _screen->setAnimBlockPtr(3500); - _screen->setScreenDim(0); - - _shapePoolBuffer = new uint8[300000]; - assert(_shapePoolBuffer); - memset(_shapePoolBuffer, 0, 300000); - - initTableBuffer(_shapePoolBuffer, 300000); - - _itemBuffer1 = new uint8[72]; - _itemBuffer2 = new uint8[144]; - assert(_itemBuffer1 && _itemBuffer2); - - _mouseSHPBuf = _res->fileData("MOUSE.SHP", 0); - assert(_mouseSHPBuf); - - for (int i = 0; i <= 6; ++i) { - _gameShapes[i] = _screen->getPtrToShape(_mouseSHPBuf, i); - } - - initItems(); - - _screen->setMouseCursor(0, 0, *_gameShapes); - - return 0; -} - -int KyraEngine_v3::go() { - uint8 *pal = _screen->getPalette(1); - assert(pal); - - _mainMenuLogo = createWSAMovie(); - assert(_mainMenuLogo); - _mainMenuLogo->open("REVENGE.WSA", 1, pal); - assert(_mainMenuLogo->opened()); - - bool running = true; - while (running && !_quitFlag) { - _screen->_curPage = 0; - _screen->clearPage(0); - - pal[0] = pal[1] = pal[2] = 0; - - _screen->setScreenPalette(pal); - - // XXX - playMenuAudioFile(); - - _mainMenuLogo->setX(0); _mainMenuLogo->setY(0); - _mainMenuLogo->setDrawPage(0); - - for (int i = 0; i < 64 && !_quitFlag; ++i) { - uint32 nextRun = _system->getMillis() + 3 * _tickLength; - _mainMenuLogo->displayFrame(i); - _screen->updateScreen(); - delayUntil(nextRun); - } - - for (int i = 64; i > 29 && !_quitFlag; --i) { - uint32 nextRun = _system->getMillis() + 3 * _tickLength; - _mainMenuLogo->displayFrame(i); - _screen->updateScreen(); - delayUntil(nextRun); - } - - switch (gui_handleMainMenu()) { - case 0: - delete _mainMenuLogo; - _mainMenuLogo = 0; - preinit(); - realInit(); - // XXX - running = false; - break; - - case 1: - playVQA("K3INTRO"); - break; - - case 2: - //delete _mainMenuLogo; - //_mainMenuLogo = 0; - //show load dialog - //running = false; - break; - - case 3: - _soundDigital->beginFadeOut(_musicSoundChannel); - _screen->fadeToBlack(); - _soundDigital->stopSound(_musicSoundChannel); - _musicSoundChannel = -1; - running = false; - break; - - default: - break; - } - } - delete _mainMenuLogo; - - return 0; -} - -void KyraEngine_v3::playVQA(const char *name) { - debugC(9, kDebugLevelMain, "KyraEngine::playVQA('%s')", name); - VQAMovie vqa(this, _system); - - char filename[20]; - int size = 0; // TODO: Movie size is 0, 1 or 2. - - snprintf(filename, sizeof(filename), "%s%d.VQA", name, size); - - if (vqa.open(filename)) { - uint8 pal[768]; - memcpy(pal, _screen->getPalette(0), sizeof(pal)); - if (_screen->_curPage == 0) - _screen->copyRegion(0, 0, 0, 0, 320, 200, 0, 3); - - _screen->hideMouse(); - _soundDigital->beginFadeOut(_musicSoundChannel); - _musicSoundChannel = -1; - _screen->fadeToBlack(); - vqa.setDrawPage(0); - vqa.play(); - vqa.close(); - _screen->showMouse(); - - if (_screen->_curPage == 0) - _screen->copyRegion(0, 0, 0, 0, 320, 200, 3, 0); - _screen->setScreenPalette(pal); - } -} - -#pragma mark - - -void KyraEngine_v3::playMenuAudioFile() { - debugC(9, kDebugLevelMain, "KyraEngine::playMenuAudioFile()"); - if (_soundDigital->isPlaying(_musicSoundChannel)) - return; - - Common::File *handle = new Common::File(); - uint32 temp = 0; - _res->getFileHandle(_menuAudioFile, &temp, *handle); - if (handle->isOpen()) { - _musicSoundChannel = _soundDigital->playSound(handle, true); - } else { - delete handle; - } -} - -void KyraEngine_v3::playMusicTrack(int track, int force) { - debugC(9, kDebugLevelMain, "KyraEngine::playMusicTrack(%d, %d)", track, force); - - // XXX byte_2C87C compare - - if (_musicSoundChannel != -1 && !_soundDigital->isPlaying(_musicSoundChannel)) { - force = 1; - } else if (_musicSoundChannel == -1) { - force = 1; - } - - if (track == _curMusicTrack && !force) - return; - - stopMusicTrack(); - - if (_musicSoundChannel == -1) { - assert(track < _soundListSize && track >= 0); - - Common::File *handle = new Common::File(); - uint32 temp = 0; - _res->getFileHandle(_soundList[track], &temp, *handle); - if (handle->isOpen()) { - _musicSoundChannel = _soundDigital->playSound(handle); - } else { - delete handle; - } - } - - _musicSoundChannel = track; -} - -void KyraEngine_v3::stopMusicTrack() { - if (_musicSoundChannel != -1 && _soundDigital->isPlaying(_musicSoundChannel)) { - _soundDigital->stopSound(_musicSoundChannel); - } - - _curMusicTrack = -1; - _musicSoundChannel = -1; -} - -int KyraEngine_v3::musicUpdate(int forceRestart) { - debugC(9, kDebugLevelMain, "KyraEngine::unkUpdate(%d)", forceRestart); - - static uint32 timer = 0; - static uint16 lock = 0; - - if (ABS<int>(_system->getMillis() - timer) > (int)(0x0F * _tickLength)) { - timer = _system->getMillis(); - } - - if (_system->getMillis() < timer && !forceRestart) { - return 1; - } - - if (!lock) { - lock = 1; - if (_musicSoundChannel >= 0) { - // XXX sub_1C262 (sound specific. it seems to close some sound resource files in special cases) - if (!_soundDigital->isPlaying(_musicSoundChannel)) { - if (_curMusicTrack != -1) - playMusicTrack(_curMusicTrack, 1); - } - } - lock = 0; - timer = _system->getMillis() + 0x0F * _tickLength; - } - - return 1; -} - -#pragma mark - - -void KyraEngine_v3::gui_initMainMenu() { - KyraEngine::gui_initMainMenu(); - _mainMenuFrame = 29; - _mainMenuFrameAdd = 1; -} - -void KyraEngine_v3::gui_updateMainMenuAnimation() { - uint32 nextRun = 0; - - uint32 now = _system->getMillis(); - if (now < nextRun) - return; - - // yes 2 * _tickLength here not 3 * like in the first draw - nextRun = now + 2 * _tickLength; - - _mainMenuLogo->displayFrame(_mainMenuFrame); - _screen->updateScreen(); - - _mainMenuFrame += _mainMenuFrameAdd; - if (_mainMenuFrame < 29) { - _mainMenuFrame = 29; - _mainMenuFrameAdd = 1; - } else if (_mainMenuFrame > 63) { - _mainMenuFrame = 64; - _mainMenuFrameAdd = -1; - } - - // XXX -} - -#pragma mark - - -void KyraEngine_v3::preinit() { - debugC(9, kDebugLevelMain, "KyraEngine::preinit()"); - - musicUpdate(0); - - // XXX snd_allocateSoundBuffer? - memset(_flagsTable, 0, sizeof(_flagsTable)); - - // XXX - setGameFlag(0x216); - - _unkPage1 = new uint8[64000]; - assert(_unkPage1); - - musicUpdate(0); - musicUpdate(0); - - _interfaceCPS1 = new uint8[17920]; - _interfaceCPS2 = new uint8[3840]; - assert(_interfaceCPS1 && _interfaceCPS2); - - _screen->setFont(Screen::FID_6_FNT); -} - -void KyraEngine_v3::realInit() { - debugC(9, kDebugLevelMain, "KyraEngine::realInit()"); - - // XXX sound specific stuff - - _unkBuffer5 = new uint8[500]; - _unkBuffer6 = new uint8[200]; - _unkBuffer7 = new uint8[600]; - _costpalData = new uint8[864]; - _unkBuffer9 = new uint8[3618]; - _unkWSAPtr = new uint8[624]; - - musicUpdate(0); - - _unkPage2 = new uint8[64000]; - - musicUpdate(0); - musicUpdate(0); - - if (!loadLanguageFile("ITEMS.", _itemList)) - error("couldn't load ITEMS"); - if (!loadLanguageFile("C_CODE.", _cCodeFile)) - error("couldn't load C_CODE"); - if (!loadLanguageFile("SCENES.", _scenesList)) - error("couldn't load SCENES"); - - assert(_unkBuffer5 && _unkBuffer6 && _unkBuffer7 && _costpalData && _unkBuffer9 && - _unkWSAPtr && _unkPage2 && _itemList && _cCodeFile && _scenesList); - - musicUpdate(0); -} - -#pragma mark - - -int KyraEngine_v3::initTableBuffer(uint8 *buf, int size) { - debugC(9, kDebugLevelMain, "KyraEngine::initTableBuffer(%p, %d)", (void *)buf, size); - - if (!buf || size < 6320) - return 0; - - if (_tableBuffer2 != _tableBuffer1 && _tableBuffer2 && _tableBuffer1) { - // no idea if this *should* be called - memmove(_tableBuffer2, _tableBuffer1, 6320); - } - - _tableBuffer1 = buf; - size -= 6320; - - *((uint16*)(_tableBuffer1)) = 0; - *((uint16*)(_tableBuffer1 + 2)) = 1; - *((uint16*)(_tableBuffer1 + 4)) = 1; - *((uint32*)(_tableBuffer1 + 6)) = size >> 4; - *((uint16*)(_tableBuffer1 + 10)) = 1; - *((uint32*)(_tableBuffer1 + 16)) = 6320; - *((uint32*)(_tableBuffer1 + 22)) = size >> 4; - - _tableBuffer2 = buf; - - return 1; -} - -void KyraEngine_v3::updateTableBuffer(uint8 *buf) { - debugC(9, kDebugLevelMain, "KyraEngine::updateTableBuffer(%p)", (void *)buf); - - if (_tableBuffer2 == buf) - return; - - if (_tableBuffer1 != _tableBuffer2) - memmove(_tableBuffer2, _tableBuffer1, 6320); - - _tableBuffer2 = _tableBuffer1 = buf; -} - -int KyraEngine_v3::addShapeToTable(const uint8 *buf, int id, int shapeNum) { - debugC(9, kDebugLevelMain, "KyraEngine::addShapeToTable(%p, %d, %d)", (const void *)buf, id, shapeNum); - - if (!buf) - return 0; - - const uint8 *shapePtr = _screen->getPtrToShape(buf, shapeNum); - if (!shapePtr) - return 0; - - int shapeSize = _screen->getShapeSize(shapePtr); - - if (getTableSize(_shapePoolBuffer) < shapeSize) { - // XXX - error("[1] unimplemented table handling"); - } - - uint8 *ptr = allocTableSpace(_shapePoolBuffer, shapeSize, id); - - if (!ptr) { - // XXX - error("[2] unimplemented table handling"); - } - - if (!ptr) { - warning("adding shape %d to _shapePoolBuffer not possible, not enough space left\n", id); - return shapeSize; - } - - memcpy(ptr, shapePtr, shapeSize); - return shapeSize; -} - -int KyraEngine_v3::getTableSize(uint8 *buf) { - debugC(9, kDebugLevelMain, "KyraEngine::getTableSize(%p)", (void *)buf); - updateTableBuffer(buf); - - if (*((uint16*)(_tableBuffer1 + 4)) >= 450) - return 0; - - return (*((uint32*)(_tableBuffer1 + 6)) << 4); -} - -uint8 *KyraEngine_v3::allocTableSpace(uint8 *buf, int size, int id) { - debugC(9, kDebugLevelMain, "KyraEngine::allocTableSpace(%p, %d, %d)", (void *)buf, size, id); - - if (!buf || !size) - return 0; - - updateTableBuffer(buf); - - int entries = *(uint16*)(_tableBuffer1 + 4); - - if (entries >= 450) - return 0; - - size += 0xF; - size &= 0xFFFFFFF0; - - uint size2 = size >> 4; - - if (*(uint32*)(_tableBuffer1 + 6) < size2) - return 0; - - int unk1 = *(uint16*)(_tableBuffer1); - int usedEntry = unk1; - int ok = 0; - - for (; usedEntry < entries; ++usedEntry) { - if (size2 <= *(uint32*)(_tableBuffer1 + usedEntry * 14 + 22)) { - ok = 1; - break; - } - } - - if (!ok) - return 0; - - ok = 0; - int unk3 = unk1 - 1; - while (ok <= unk3) { - int temp = (ok + unk3) >> 1; - - if (*(uint32*)(_tableBuffer1 + temp * 14 + 12) >= (uint)id) { - if (*(uint32*)(_tableBuffer1 + temp * 14 + 12) <= (uint)id) { - return 0; - } else { - unk3 = temp - 1; - continue; - } - } - - ok = temp + 1; - } - - uint8 *buf2 = _tableBuffer1 + usedEntry * 14; - - uint unkValue1 = *(uint32*)(buf2 + 16); - uint unkValue2 = *(uint32*)(buf2 + 22); - - if (size2 < unkValue2) { - *(uint32*)(buf2 + 22) = unkValue2 - size2; - *(uint32*)(buf2 + 16) = unkValue1 + size; - memcpy(_tableBuffer1 + entries * 14 + 12, _tableBuffer1 + unk1 * 14 + 12, 14); - } else { - if (usedEntry > unk1) { - memcpy(buf2 + 12, _tableBuffer1 + unk1 * 14 + 12, 14); - } - int temp = *(uint16*)(_tableBuffer1 + 2) - 1; - *(uint16*)(_tableBuffer1 + 2) = temp; - temp = *(uint16*)(_tableBuffer1 + 4) - 1; - *(uint16*)(_tableBuffer1 + 4) = temp; - } - - for (int i = unk1; i > ok; --i) { - memcpy(_tableBuffer1 + i * 14 + 12, _tableBuffer1 + (i-1) * 14 + 12, 14); - } - - buf2 = _tableBuffer1 + ok * 14; - - *(uint32*)(buf2 + 12) = id; - *(uint32*)(buf2 + 16) = unkValue1; - *(uint32*)(buf2 + 20) = (_system->getMillis() / 60) >> 4; - *(uint32*)(buf2 + 22) = size2; - - int temp = *(uint16*)(_tableBuffer1) + 1; - *(uint16*)(_tableBuffer1) = temp; - temp = *(uint16*)(_tableBuffer1 + 4) + 1; - *(uint16*)(_tableBuffer1 + 4) = temp; - - if (temp > *(uint16*)(_tableBuffer1 + 10)) { - *(uint16*)(_tableBuffer1 + 10) = temp; - if (temp > _unkTableValue) - _unkTableValue = temp; - } - - temp = *(uint32*)(_tableBuffer1 + 6) - size2; - *(uint32*)(_tableBuffer1 + 6) = temp; - - return _tableBuffer2 + unkValue1; -} - -namespace { -int tableIdCompare(const void *l, const void *r) { - int lV = *(const uint32*)(l); - int rV = *(const uint32*)(r); - - return CLIP(lV - rV, -1, 1); -} -} - -uint8 *KyraEngine_v3::findIdInTable(uint8 *buf, int id) { - debugC(9, kDebugLevelMain, "KyraEngine::findIdInTable(%p, %d)", (void *)buf, id); - - updateTableBuffer(buf); - - uint32 idVal = id; - uint8 *ptr = (uint8*)bsearch(&idVal, _tableBuffer1 + 12, *(uint16*)(_tableBuffer1), 14, &tableIdCompare); - - if (!ptr) { - return 0; - } - - return _tableBuffer2 + *(uint32*)(ptr + 4); -} - -uint8 *KyraEngine_v3::findShapeInTable(int id) { - debugC(9, kDebugLevelMain, "KyraEngine::findShapeInTable(%d)", id); - - return findIdInTable(_shapePoolBuffer, id); -} - -#pragma mark - items - -void KyraEngine_v3::initItems() { - debugC(9, kDebugLevelMain, "KyraEngine::initItems()"); - - _screen->loadBitmap("ITEMS.CSH", 3, 3, 0); - - for (int i = 248; i <= 319; ++i) { - addShapeToTable(_screen->getCPagePtr(3), i, i-248); - } - - _screen->loadBitmap("ITEMS2.CSH", 3, 3, 0); - - for (int i = 320; i <= 397; ++i) { - addShapeToTable(_screen->getCPagePtr(3), i, i-320); - } - - uint32 size = 0; - uint8 *itemsDat = _res->fileData("_ITEMS.DAT", &size); - - assert(size >= 72+144); - - memcpy(_itemBuffer1, itemsDat , 72); - memcpy(_itemBuffer2, itemsDat+72, 144); - - delete [] itemsDat; - - _screen->_curPage = 0; -} - -#pragma mark - - -int KyraEngine_v3::getMaxFileSize(const char *file) { - debugC(9, kDebugLevelMain, "KyraEngine::getMaxFileSize(%s)", file); - int size = 0; - - char buffer[32]; - - for (int i = 0; i < _languageExtensionSize; ++i) { - strncpy(buffer, file, 32); - size = MAX<uint32>(size, _res->getFileSize(appendLanguage(buffer, i, sizeof(buffer)))); - } - - return size + 20; -} - -char *KyraEngine_v3::appendLanguage(char *buf, int lang, int bufSize) { - debugC(9, kDebugLevelMain, "KyraEngine::appendLanguage([%p|'%s'], %d, %d)", (const void*)buf, buf, lang, bufSize); - assert(lang < _languageExtensionSize); - - int size = strlen(buf) + strlen(_languageExtension[lang]); - - if (size > bufSize) { - warning("buffer too small to append language extension"); - return 0; - } - - char *temp = buf + strlen(buf); - bufSize -= strlen(buf); - - strncat(temp, _languageExtension[lang], bufSize); - - return buf; -} - -bool KyraEngine_v3::loadLanguageFile(const char *file, uint8 *&buffer) { - debugC(9, kDebugLevelMain, "KyraEngine::loadLanguageFile('%s', %p)", file, (const void*)buffer); - - uint32 size = 0; - char nBuf[32]; - strncpy(nBuf, file, 32); - buffer = _res->fileData(appendLanguage(nBuf, _lang, sizeof(nBuf)), &size); - - return size != 0 && buffer != 0; -} - -} // end of namespace Kyra diff --git a/engines/kyra/kyra3.h b/engines/kyra/kyra3.h deleted file mode 100644 index 17d69dcaae..0000000000 --- a/engines/kyra/kyra3.h +++ /dev/null @@ -1,146 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2006 The ScummVM project - * - * 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 2 - * 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, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef KYRA3_H -#define KYRA3_H - -#include "kyra/kyra.h" - -namespace Kyra { - -// maybe subclass KyraEngine_v2 later -class WSAMovieV2; - -class KyraEngine_v3 : public KyraEngine { -public: - KyraEngine_v3(OSystem *system, const GameFlags &flags); - ~KyraEngine_v3(); - - Movie *createWSAMovie(); - - SoundDigital *soundDigital() { return _soundDigital; } - - int go(); - - void playVQA(const char *name); -private: - int init(); - - void preinit(); - void realInit(); - - SoundDigital *_soundDigital; - - // sound specific -private: - void playMenuAudioFile(); - - int _musicSoundChannel; - const char *_menuAudioFile; - - static const char *_soundList[]; - static const int _soundListSize; - - int _curMusicTrack; - - void playMusicTrack(int track, int force); - void stopMusicTrack(); - - int musicUpdate(int forceRestart); - - virtual void gui_initMainMenu(); - virtual void gui_updateMainMenuAnimation(); - - // unknown -private: - uint8 *_unkPage1; - uint8 *_unkPage2; - - uint8 *_unkBuffer5; - uint8 *_unkBuffer6; - uint8 *_unkBuffer7; - uint8 *_unkBuffer9; - - uint8 *_costpalData; - - uint8 *_unkWSAPtr; - - uint8 *_unkShapeTable[20]; - - // main menu - Movie *_mainMenuLogo; - int _mainMenuFrame; - int _mainMenuFrameAdd; - - // translation stuff - uint8 *_scoreFile; - uint8 *_cCodeFile; - uint8 *_scenesList; - - // interface? - uint8 *_interfaceCPS1; - uint8 *_interfaceCPS2; - - // shapes - uint8 *_gameShapes[50]; - uint8 *_shapePoolBuffer; - - uint8 *_mouseSHPBuf; - - // items - uint8 *_itemBuffer1; - uint8 *_itemBuffer2; - - uint8 *_itemList; - - void initItems(); - - // used for CSH loading and some sound stuff (maybe voice files?) -private: - uint8 *_tableBuffer1; - uint8 *_tableBuffer2; - int _unkTableValue; - - // do not think of thouching the code belonging to these functions - int initTableBuffer(uint8 *buf, int size); - void updateTableBuffer(uint8 *buf); - int getTableSize(uint8 *buf); - uint8 *allocTableSpace(uint8 *buf, int size, int id); - uint8 *findIdInTable(uint8 *buf, int id); - - int addShapeToTable(const uint8 *buf, int id, int shapeNum); - uint8 *findShapeInTable(int id); - - // resource specific -private: - static const char *_languageExtension[]; - static const int _languageExtensionSize; - - int getMaxFileSize(const char *file); - char *appendLanguage(char *buf, int lang, int bufSize); - - bool loadLanguageFile(const char *file, uint8 *&buffer); -}; - -} // end of namespace Kyra - -#endif diff --git a/engines/kyra/module.mk b/engines/kyra/module.mk index f8159dd78b..f570dfa5a4 100644 --- a/engines/kyra/module.mk +++ b/engines/kyra/module.mk @@ -6,8 +6,8 @@ MODULE_OBJS := \ gui.o \ items.o \ kyra.o \ - kyra2.o \ - kyra3.o \ + kyra_v2.o \ + kyra_v3.o \ plugin.o \ resource.o \ saveload.o \ diff --git a/engines/kyra/plugin.cpp b/engines/kyra/plugin.cpp index 0cd959a51a..905b0f8911 100644 --- a/engines/kyra/plugin.cpp +++ b/engines/kyra/plugin.cpp @@ -20,8 +20,8 @@ */ #include "kyra/kyra.h" -#include "kyra/kyra2.h" -#include "kyra/kyra3.h" +#include "kyra/kyra_v2.h" +#include "kyra/kyra_v3.h" #include "common/config-manager.h" #include "common/advancedDetector.h" @@ -71,9 +71,11 @@ const KYRAGameDescription adGameDescs[] = { { { "kyra1", "Demo", AD_ENTRY1("DEMO1.WSA", "fb722947d94897512b13b50cc84fd648"), Common::EN_ANY, Common::kPlatformPC, Common::ADGF_DEMO }, KYRA1_DEMO_FLAGS }, - { { "kyra2", 0, AD_ENTRY1("FATE.PAK", "28cbad1c5bf06b2d3825ae57d760d032"), Common::UNK_LANG, Common::kPlatformPC, Common::ADGF_NO_FLAGS }, KYRA2_CD_FLAGS }, // CD version + { { "kyra2", 0, AD_ENTRY1("FATE.PAK", "28cbad1c5bf06b2d3825ae57d760d032"), Common::EN_ANY, Common::kPlatformPC, Common::ADGF_NO_FLAGS }, KYRA2_CD_FLAGS }, // CD version + { { "kyra2", 0, AD_ENTRY1("FATE.PAK", "28cbad1c5bf06b2d3825ae57d760d032"), Common::DE_DEU, Common::kPlatformPC, Common::ADGF_NO_FLAGS }, KYRA2_CD_FLAGS }, // CD version + { { "kyra2", 0, AD_ENTRY1("FATE.PAK", "28cbad1c5bf06b2d3825ae57d760d032"), Common::FR_FRA, Common::kPlatformPC, Common::ADGF_NO_FLAGS }, KYRA2_CD_FLAGS }, // CD version - { { "kyra2", "Demo", AD_ENTRY1("GENERAL.PAK", "35825783e5b60755fd520360079f9c15"), Common::UNK_LANG, Common::kPlatformPC, Common::ADGF_DEMO }, KYRA2_DEMO_FLAGS }, + { { "kyra2", "Demo", AD_ENTRY1("GENERAL.PAK", "35825783e5b60755fd520360079f9c15"), Common::EN_ANY, Common::kPlatformPC, Common::ADGF_DEMO }, KYRA2_DEMO_FLAGS }, { { "kyra3", 0, AD_ENTRY1("ONETIME.PAK", "3833ff312757b8e6147f464cca0a6587"), Common::EN_ANY, Common::kPlatformPC, Common::ADGF_NO_FLAGS }, KYRA3_CD_FLAGS }, { { "kyra3", 0, AD_ENTRY1("ONETIME.PAK", "3833ff312757b8e6147f464cca0a6587"), Common::DE_DEU, Common::kPlatformPC, Common::ADGF_NO_FLAGS }, KYRA3_CD_FLAGS }, diff --git a/engines/kyra/sequences_v2.cpp b/engines/kyra/sequences_v2.cpp index c396ac0567..710c773bfb 100644 --- a/engines/kyra/sequences_v2.cpp +++ b/engines/kyra/sequences_v2.cpp @@ -21,7 +21,7 @@ */ #include "kyra/kyra.h" -#include "kyra/kyra2.h" +#include "kyra/kyra_v2.h" #include "kyra/screen.h" #include "kyra/wsamovie.h" #include "kyra/sound.h" diff --git a/engines/kyra/staticres.cpp b/engines/kyra/staticres.cpp index 14dc5041d7..88c972ea46 100644 --- a/engines/kyra/staticres.cpp +++ b/engines/kyra/staticres.cpp @@ -24,8 +24,8 @@ #include "common/endian.h" #include "common/md5.h" #include "kyra/kyra.h" -#include "kyra/kyra2.h" -#include "kyra/kyra3.h" +#include "kyra/kyra_v2.h" +#include "kyra/kyra_v3.h" #include "kyra/screen.h" #include "kyra/resource.h" diff --git a/engines/kyra/wsamovie.cpp b/engines/kyra/wsamovie.cpp index e0a6817d82..c682f4dc57 100644 --- a/engines/kyra/wsamovie.cpp +++ b/engines/kyra/wsamovie.cpp @@ -25,7 +25,6 @@ #include "common/system.h" #include "kyra/kyra.h" -#include "kyra/kyra3.h" #include "kyra/screen.h" #include "kyra/wsamovie.h" |