diff options
author | athrxx | 2019-04-13 23:26:47 +0200 |
---|---|---|
committer | athrxx | 2019-04-13 23:26:47 +0200 |
commit | 80e7401d9941455781194ab2079423784a56dd26 (patch) | |
tree | b9fabd6444761ffb842c34c6606db109f0bcd6d1 /engines/kyra/sequence | |
parent | 087444b6981606369bc93b19993d6acd6dbf6354 (diff) | |
download | scummvm-rg350-80e7401d9941455781194ab2079423784a56dd26.tar.gz scummvm-rg350-80e7401d9941455781194ab2079423784a56dd26.tar.bz2 scummvm-rg350-80e7401d9941455781194ab2079423784a56dd26.zip |
KYRA: (EOB) - try to fix PSP and OpenPandora
This is guesswork. I really don't understand the actual problem (internal compiler error: in get_addr_dereference_operands, at tree-ssa-operands.c:1698)
Diffstat (limited to 'engines/kyra/sequence')
-rw-r--r-- | engines/kyra/sequence/sequences_darkmoon.cpp | 305 |
1 files changed, 155 insertions, 150 deletions
diff --git a/engines/kyra/sequence/sequences_darkmoon.cpp b/engines/kyra/sequence/sequences_darkmoon.cpp index b68bbfd939..76c8dfcd08 100644 --- a/engines/kyra/sequence/sequences_darkmoon.cpp +++ b/engines/kyra/sequence/sequences_darkmoon.cpp @@ -65,6 +65,7 @@ public: void updateAmigaSound(); private: + void init(Mode mode); void setPaletteWithoutTextColor(int index); OSystem *_system; @@ -1121,156 +1122,7 @@ void DarkMoonEngine::seq_playCredits(DarkmoonSequenceHelper *sq, const uint8 *da } DarkmoonSequenceHelper::DarkmoonSequenceHelper(OSystem *system, DarkMoonEngine *vm, Screen_EoB *screen, Mode mode) : _system(system), _vm(vm), _screen(screen) { - assert(mode == kIntro || mode == kFinale); - - static const uint16 soundMarkersFMTowns[2][8] = { - { 229, 447, 670, 1380, 2037, 3000, 4475, 4825 }, - { 475, 2030, 2200, 2752, 3475, 0, 0, 0 } - }; - - int size = 0; - _platformAnimOffset = 0; - _sndNextTrack = 1; - _sndNextTrackMarker = 0; - _sndMarkersFMTowns = soundMarkersFMTowns[mode]; - - if (mode == kIntro) { - _config = new Config( - _vm->staticres()->loadStrings(kEoB2IntroStrings, size), - _vm->staticres()->loadStrings(kEoB2IntroCPSFiles, size), - new const uint8*[16], - _vm->_flags.platform == Common::kPlatformAmiga ? 0 : (_vm->_configRenderMode == Common::kRenderEGA ? _palFilesIntroEGA : _palFilesIntroVGA), - new const DarkMoonShapeDef*[16], - new const DarkMoonAnimCommand *[44], - false, - false, - true, - true, - _vm->_flags.platform == Common::kPlatformAmiga ? 1 : 0, - 0, - false, - 2 - ); - - for (int i = 0; i < 44; i++) - _config->animData[i] = _vm->staticres()->loadEoB2SeqData(kEoB2IntroAnimData00 + i, size); - - for (int i = 0; i < 16; i++) - _config->cpsData[i] = _vm->staticres()->loadRawData(kEoB2IntroCpsDataStreet1 + i, size); - - memset(_config->shapeDefs, 0, 16 * sizeof(DarkMoonShapeDef*)); - _config->shapeDefs[0] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes00, size); - _config->shapeDefs[1] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes01, size); - _config->shapeDefs[4] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes04, size); - _config->shapeDefs[7] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes07, size); - _config->shapeDefs[13] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes13, size); - _config->shapeDefs[14] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes14, size); - _config->shapeDefs[15] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes15, size); - - } else { - _config = new Config( - _vm->staticres()->loadStrings(kEoB2FinaleStrings, size), - _vm->staticres()->loadStrings(kEoB2FinaleCPSFiles, size), - new const uint8*[13], - _vm->_flags.platform == Common::kPlatformAmiga ? _palFilesFinaleAmiga : (_vm->_configRenderMode == Common::kRenderEGA ? _palFilesFinaleEGA : _palFilesFinaleVGA), - new const DarkMoonShapeDef*[13], - new const DarkMoonAnimCommand *[21], - true, - true, - false, - false, - _vm->_flags.platform == Common::kPlatformAmiga ? 2 : 1, - 18, - true, - 6 - ); - - for (int i = 0; i < 21; i++) - _config->animData[i] = _vm->staticres()->loadEoB2SeqData(kEoB2FinaleAnimData00 + i, size); - - for (int i = 0; i < 13; i++) - _config->cpsData[i] = _vm->staticres()->loadRawData(kEoB2FinaleCpsDataDragon1 + i, size); - - memset(_config->shapeDefs, 0, 13 * sizeof(DarkMoonShapeDef*)); - _config->shapeDefs[0] = _vm->staticres()->loadEoB2ShapeData(kEoB2FinaleShapes00, size); - _config->shapeDefs[3] = _vm->staticres()->loadEoB2ShapeData(kEoB2FinaleShapes03, size); - _config->shapeDefs[7] = _vm->staticres()->loadEoB2ShapeData(kEoB2FinaleShapes07, size); - _config->shapeDefs[9] = _vm->staticres()->loadEoB2ShapeData(kEoB2FinaleShapes09, size); - _config->shapeDefs[10] = _vm->staticres()->loadEoB2ShapeData(kEoB2FinaleShapes10, size); - } - - _screen->enableHiColorMode(false); - _screen->disableDualPalettesSplitScreen(); - int numColors = 256; - - if (_vm->_flags.platform == Common::kPlatformAmiga) { - static const int8 palIndex[13] = { -1, -1, 3, 2, 4, 5, 6, 7, -1, -1, -1, -1, -1 }; - for (int i = 0; i < 13; ++i) - _palettes[i] = &_screen->getPalette(i); - Common::SeekableReadStream *s = _config->palFiles ? _vm->resource()->createReadStream(_config->palFiles[0]) : 0; - numColors = 32; - for (int i = 0; i < 13; ++i) { - if (s && palIndex[i] != -1) - _palettes[palIndex[i]]->loadAmigaPalette(*s, 0, 32); - } - delete s; - } else { - for (int i = 0; _config->palFiles[i]; i++) { - if (i < 4) - _palettes[i] = &_screen->getPalette(i); - else - _palettes[i] = new Palette(256); - _screen->loadPalette(_config->palFiles[i], *_palettes[i]); - } - - for (int i = 9; i < 13; ++i) - _palettes[i] = new Palette(256); - } - - _palettes[9]->fill(0, numColors, 0); - _palettes[10]->fill(0, numColors, 63); - _palettes[11]->fill(0, numColors, 0); - - - if (_vm->gameFlags().platform == Common::kPlatformFMTowns) - _screen->loadPalette("PALETTE.COL", *_palettes[12]); - - for (int i = 0; i < 7; i++) - _fadingTables[i] = 0; - - uint8 *fadeData = (_vm->_configRenderMode != Common::kRenderCGA && _vm->_configRenderMode != Common::kRenderEGA) ? _vm->resource()->fileData("FADING.DAT", 0) : 0; - - if (fadeData) { - for (int i = 0; i < 7; i++) { - _fadingTables[i] = new uint8[256]; - memcpy(_fadingTables[i], fadeData + (i << 8), 256); - } - } else { - if (_vm->_flags.platform != Common::kPlatformAmiga && _vm->_configRenderMode != Common::kRenderCGA && _vm->_configRenderMode != Common::kRenderEGA) { - uint8 *pal = _vm->resource()->fileData("PALETTE1.PAL", 0); - for (int i = 0; i < 7; i++) - _screen->createFadeTable(pal, _fadingTables[i], 18, (i + 1) * 36); - delete[] pal; - } - } - - delete[] fadeData; - - _shapes = new const uint8*[54]; - memset(_shapes, 0, 54 * sizeof(uint8 *)); - - _fadePalTimer = 0; - _fadePalRate = 0; - - memset(_textColor, 0, 3); - - _screen->setScreenPalette(*_palettes[0]); - _prevFont = _screen->setFont(_vm->gameFlags().platform == Common::kPlatformFMTowns ? Screen::FID_SJIS_LARGE_FNT : Screen::FID_8_FNT); - _screen->hideMouse(); - - _vm->delay(150); - _vm->_eventList.clear(); - _vm->_allowSkip = true; + init(mode); } DarkmoonSequenceHelper::~DarkmoonSequenceHelper() { @@ -1625,6 +1477,159 @@ void DarkmoonSequenceHelper::update(int srcPage) { _screen->updateScreen(); } +void DarkmoonSequenceHelper::init(Mode mode) { + assert(mode == kIntro || mode == kFinale); + + static const uint16 soundMarkersFMTowns[2][8] = { + { 229, 447, 670, 1380, 2037, 3000, 4475, 4825 }, + { 475, 2030, 2200, 2752, 3475, 0, 0, 0 } + }; + + int size = 0; + _platformAnimOffset = 0; + _sndNextTrack = 1; + _sndNextTrackMarker = 0; + _sndMarkersFMTowns = soundMarkersFMTowns[mode]; + + if (mode == kIntro) { + _config = new Config( + _vm->staticres()->loadStrings(kEoB2IntroStrings, size), + _vm->staticres()->loadStrings(kEoB2IntroCPSFiles, size), + new const uint8*[16], + _vm->_flags.platform == Common::kPlatformAmiga ? 0 : (_vm->_configRenderMode == Common::kRenderEGA ? _palFilesIntroEGA : _palFilesIntroVGA), + new const DarkMoonShapeDef*[16], + new const DarkMoonAnimCommand *[44], + false, + false, + true, + true, + _vm->_flags.platform == Common::kPlatformAmiga ? 1 : 0, + 0, + false, + 2 + ); + + for (int i = 0; i < 44; i++) + _config->animData[i] = _vm->staticres()->loadEoB2SeqData(kEoB2IntroAnimData00 + i, size); + + for (int i = 0; i < 16; i++) + _config->cpsData[i] = _vm->staticres()->loadRawData(kEoB2IntroCpsDataStreet1 + i, size); + + memset(_config->shapeDefs, 0, 16 * sizeof(DarkMoonShapeDef*)); + _config->shapeDefs[0] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes00, size); + _config->shapeDefs[1] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes01, size); + _config->shapeDefs[4] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes04, size); + _config->shapeDefs[7] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes07, size); + _config->shapeDefs[13] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes13, size); + _config->shapeDefs[14] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes14, size); + _config->shapeDefs[15] = _vm->staticres()->loadEoB2ShapeData(kEoB2IntroShapes15, size); + + } else { + _config = new Config( + _vm->staticres()->loadStrings(kEoB2FinaleStrings, size), + _vm->staticres()->loadStrings(kEoB2FinaleCPSFiles, size), + new const uint8*[13], + _vm->_flags.platform == Common::kPlatformAmiga ? _palFilesFinaleAmiga : (_vm->_configRenderMode == Common::kRenderEGA ? _palFilesFinaleEGA : _palFilesFinaleVGA), + new const DarkMoonShapeDef*[13], + new const DarkMoonAnimCommand *[21], + true, + true, + false, + false, + _vm->_flags.platform == Common::kPlatformAmiga ? 2 : 1, + 18, + true, + 6 + ); + + for (int i = 0; i < 21; i++) + _config->animData[i] = _vm->staticres()->loadEoB2SeqData(kEoB2FinaleAnimData00 + i, size); + + for (int i = 0; i < 13; i++) + _config->cpsData[i] = _vm->staticres()->loadRawData(kEoB2FinaleCpsDataDragon1 + i, size); + + memset(_config->shapeDefs, 0, 13 * sizeof(DarkMoonShapeDef*)); + _config->shapeDefs[0] = _vm->staticres()->loadEoB2ShapeData(kEoB2FinaleShapes00, size); + _config->shapeDefs[3] = _vm->staticres()->loadEoB2ShapeData(kEoB2FinaleShapes03, size); + _config->shapeDefs[7] = _vm->staticres()->loadEoB2ShapeData(kEoB2FinaleShapes07, size); + _config->shapeDefs[9] = _vm->staticres()->loadEoB2ShapeData(kEoB2FinaleShapes09, size); + _config->shapeDefs[10] = _vm->staticres()->loadEoB2ShapeData(kEoB2FinaleShapes10, size); + } + + _screen->enableHiColorMode(false); + _screen->disableDualPalettesSplitScreen(); + int numColors = 256; + + if (_vm->_flags.platform == Common::kPlatformAmiga) { + static const int8 palIndex[13] = { -1, -1, 3, 2, 4, 5, 6, 7, -1, -1, -1, -1, -1 }; + for (int i = 0; i < 13; ++i) + _palettes[i] = &_screen->getPalette(i); + Common::SeekableReadStream *s = _config->palFiles ? _vm->resource()->createReadStream(_config->palFiles[0]) : 0; + numColors = 32; + for (int i = 0; i < 13; ++i) { + if (s && palIndex[i] != -1) + _palettes[palIndex[i]]->loadAmigaPalette(*s, 0, 32); + } + delete s; + } else { + for (int i = 0; _config->palFiles[i]; i++) { + if (i < 4) + _palettes[i] = &_screen->getPalette(i); + else + _palettes[i] = new Palette(256); + _screen->loadPalette(_config->palFiles[i], *_palettes[i]); + } + + for (int i = 9; i < 13; ++i) + _palettes[i] = new Palette(256); + } + + _palettes[9]->fill(0, numColors, 0); + _palettes[10]->fill(0, numColors, 63); + _palettes[11]->fill(0, numColors, 0); + + + if (_vm->gameFlags().platform == Common::kPlatformFMTowns) + _screen->loadPalette("PALETTE.COL", *_palettes[12]); + + for (int i = 0; i < 7; i++) + _fadingTables[i] = 0; + + uint8 *fadeData = (_vm->_configRenderMode != Common::kRenderCGA && _vm->_configRenderMode != Common::kRenderEGA) ? _vm->resource()->fileData("FADING.DAT", 0) : 0; + + if (fadeData) { + for (int i = 0; i < 7; i++) { + _fadingTables[i] = new uint8[256]; + memcpy(_fadingTables[i], fadeData + (i << 8), 256); + } + } else { + if (_vm->_flags.platform != Common::kPlatformAmiga && _vm->_configRenderMode != Common::kRenderCGA && _vm->_configRenderMode != Common::kRenderEGA) { + uint8 *pal = _vm->resource()->fileData("PALETTE1.PAL", 0); + for (int i = 0; i < 7; i++) + _screen->createFadeTable(pal, _fadingTables[i], 18, (i + 1) * 36); + delete[] pal; + } + } + + delete[] fadeData; + + _shapes = new const uint8*[54]; + memset(_shapes, 0, 54 * sizeof(uint8 *)); + + _fadePalTimer = 0; + _fadePalRate = 0; + + memset(_textColor, 0, 3); + + _screen->setScreenPalette(*_palettes[0]); + _prevFont = _screen->setFont(_vm->gameFlags().platform == Common::kPlatformFMTowns ? Screen::FID_SJIS_LARGE_FNT : Screen::FID_8_FNT); + _screen->hideMouse(); + + _vm->delay(150); + _vm->_eventList.clear(); + _vm->_allowSkip = true; +} + void DarkmoonSequenceHelper::setPaletteWithoutTextColor(int index) { if (_vm->_configRenderMode == Common::kRenderEGA || _vm->skipFlag() || _vm->shouldQuit()) return; |