diff options
author | Paul Gilbert | 2013-11-30 20:44:23 -0500 |
---|---|---|
committer | Paul Gilbert | 2013-11-30 20:44:23 -0500 |
commit | ede418b67a0f14e4f17a2b03f5362741badd5532 (patch) | |
tree | 07de039fac5c303f1b9fce372afe5fa19854f547 /engines/kyra | |
parent | 66d1f7a8de2ff5a21ad013f45924c406f4833e9a (diff) | |
parent | 3e859768770a0b385e21c4528cd546b33ed9a55d (diff) | |
download | scummvm-rg350-ede418b67a0f14e4f17a2b03f5362741badd5532.tar.gz scummvm-rg350-ede418b67a0f14e4f17a2b03f5362741badd5532.tar.bz2 scummvm-rg350-ede418b67a0f14e4f17a2b03f5362741badd5532.zip |
VOYEUR: Merge of upstream
Diffstat (limited to 'engines/kyra')
-rw-r--r-- | engines/kyra/POTFILES | 3 | ||||
-rw-r--r-- | engines/kyra/animator_lok.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/chargen.cpp | 4 | ||||
-rw-r--r-- | engines/kyra/configure.engine | 5 | ||||
-rw-r--r-- | engines/kyra/gui_mr.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/kyra_rpg.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/resource.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/scene_mr.cpp | 1 | ||||
-rw-r--r-- | engines/kyra/screen.cpp | 11 | ||||
-rw-r--r-- | engines/kyra/screen_v2.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/sequences_lok.cpp | 3 | ||||
-rw-r--r-- | engines/kyra/sound_towns.cpp | 1 | ||||
-rw-r--r-- | engines/kyra/text_rpg.cpp | 2 |
13 files changed, 35 insertions, 11 deletions
diff --git a/engines/kyra/POTFILES b/engines/kyra/POTFILES new file mode 100644 index 0000000000..16888e2c5a --- /dev/null +++ b/engines/kyra/POTFILES @@ -0,0 +1,3 @@ +engines/kyra/detection.cpp +engines/kyra/lol.cpp +engines/kyra/sound_midi.cpp diff --git a/engines/kyra/animator_lok.cpp b/engines/kyra/animator_lok.cpp index c246eebd46..945a51a4ec 100644 --- a/engines/kyra/animator_lok.cpp +++ b/engines/kyra/animator_lok.cpp @@ -491,7 +491,7 @@ Animator_LoK::AnimObject *Animator_LoK::objectAddHead(AnimObject *queue, AnimObj } Animator_LoK::AnimObject *Animator_LoK::objectQueue(AnimObject *queue, AnimObject *add) { - if (add->drawY <= queue->drawY || !queue) { + if (!queue || add->drawY <= queue->drawY) { add->nextAnimObject = queue; return add; } diff --git a/engines/kyra/chargen.cpp b/engines/kyra/chargen.cpp index 80a95da047..80ff42e2c5 100644 --- a/engines/kyra/chargen.cpp +++ b/engines/kyra/chargen.cpp @@ -155,8 +155,10 @@ CharacterGenerator::~CharacterGenerator() { } bool CharacterGenerator::start(EoBCharacter *characters, uint8 ***faceShapes) { - if (!characters && !faceShapes) + if (!characters || !faceShapes) { + warning("CharacterGenerator::start: Called without character data"); return true; + } _characters = characters; _faceShapes = *faceShapes; diff --git a/engines/kyra/configure.engine b/engines/kyra/configure.engine new file mode 100644 index 0000000000..b7d6334fcc --- /dev/null +++ b/engines/kyra/configure.engine @@ -0,0 +1,5 @@ +# This file is included from the main "configure" script +# add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps] +add_engine kyra "Kyra" yes "lol eob" "Legend of Kyrandia 1-3" +add_engine lol "Lands of Lore" yes +add_engine eob "Eye of the Beholder" yes diff --git a/engines/kyra/gui_mr.cpp b/engines/kyra/gui_mr.cpp index bcbfe27b69..ee0303c8c3 100644 --- a/engines/kyra/gui_mr.cpp +++ b/engines/kyra/gui_mr.cpp @@ -737,7 +737,7 @@ void KyraEngine_MR::loadAlbumPageWSA() { if (_album.curPage != 14) { filename = Common::String::format("PAGE%x.WSA", _album.curPage+1); _album.rightPage.wsa->open(filename.c_str(), 1, 0); - _album.rightPage.maxFrame = _album.leftPage.wsa->frames()-1; + _album.rightPage.maxFrame = _album.rightPage.wsa->frames()-1; } } diff --git a/engines/kyra/kyra_rpg.cpp b/engines/kyra/kyra_rpg.cpp index f8eb7d00cd..4f7adcc6e5 100644 --- a/engines/kyra/kyra_rpg.cpp +++ b/engines/kyra/kyra_rpg.cpp @@ -213,7 +213,7 @@ void KyraRpgEngine::drawDialogueButtons() { screen()->printText(_dialogueButtonString[i], (x + 37 - (screen()->getTextWidth(_dialogueButtonString[i])) / 2) & ~3, ((_dialogueButtonYoffs + _dialogueButtonPosY[i]) + 2) & ~7, _dialogueHighlightedButton == i ? 0xC1 : 0xE1, 0); } else { - int sjisYOffset = (_flags.lang == Common::JA_JPN && _dialogueButtonString[i][0] < 0) ? 2 : 0; + int sjisYOffset = (_flags.lang == Common::JA_JPN && (_dialogueButtonString[i][0] & 0x80)) ? 2 : 0; gui_drawBox(x, (_dialogueButtonYoffs + _dialogueButtonPosY[i]), _dialogueButtonWidth, guiSettings()->buttons.height, guiSettings()->colors.frame1, guiSettings()->colors.frame2, guiSettings()->colors.fill); screen()->printText(_dialogueButtonString[i], x + (_dialogueButtonWidth >> 1) - (screen()->getTextWidth(_dialogueButtonString[i])) / 2, (_dialogueButtonYoffs + _dialogueButtonPosY[i]) + 2 - sjisYOffset, _dialogueHighlightedButton == i ? _dialogueButtonLabelColor1 : _dialogueButtonLabelColor2, 0); diff --git a/engines/kyra/resource.cpp b/engines/kyra/resource.cpp index c350c81742..7a1abe8dd9 100644 --- a/engines/kyra/resource.cpp +++ b/engines/kyra/resource.cpp @@ -74,10 +74,14 @@ bool Resource::reset() { loadProtectedFiles(list); } else { + // We only search in the game path to avoid any invalid PAK or + // APK files from being picked up. This might happen, for example, + // when the user has an Android package file in the CWD. + Common::FSDirectory gameDir(dir); Common::ArchiveMemberList files; - _files.listMatchingMembers(files, "*.PAK"); - _files.listMatchingMembers(files, "*.APK"); + gameDir.listMatchingMembers(files, "*.PAK"); + gameDir.listMatchingMembers(files, "*.APK"); for (Common::ArchiveMemberList::const_iterator i = files.begin(); i != files.end(); ++i) { Common::String name = (*i)->getName(); diff --git a/engines/kyra/scene_mr.cpp b/engines/kyra/scene_mr.cpp index c9486d9c45..d2b4907b6a 100644 --- a/engines/kyra/scene_mr.cpp +++ b/engines/kyra/scene_mr.cpp @@ -577,6 +577,7 @@ void KyraEngine_MR::initSceneScreen(int unk1) { } updateCharPal(0); + _screen->updateScreen(); if (!_menuDirectlyToLoad) { _emc->start(&_sceneScriptState, 3); diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp index 419b630714..8c97e46a8f 100644 --- a/engines/kyra/screen.cpp +++ b/engines/kyra/screen.cpp @@ -718,6 +718,13 @@ void Screen::fadePalette(const Palette &pal, int delay, const UpdateFunctor *upF _vm->delay((delayAcc >> 8) * 1000 / 60); delayAcc &= 0xFF; } + + // In case we should quit we setup the final palette here. This avoids + // ugly palette glitches when quitting while fading. This can for example + // be noticed when quitting while viewing the family album in Kyra3. + if (_vm->shouldQuit()) { + setScreenPalette(pal); + } } void Screen::getFadeParams(const Palette &pal, int delay, int &delayInc, int &diff) { @@ -1256,7 +1263,7 @@ int Screen::getTextWidth(const char *str) { while (1) { if (_sjisMixedFontMode) - setFont(*str < 0 ? FID_SJIS_FNT : curFont); + setFont((*str & 0x80) ? FID_SJIS_FNT : curFont); uint c = fetchChar(str); @@ -1296,7 +1303,7 @@ void Screen::printText(const char *str, int x, int y, uint8 color1, uint8 color2 while (1) { if (_sjisMixedFontMode) - setFont(*str < 0 ? FID_SJIS_FNT : curFont); + setFont((*str & 0x80) ? FID_SJIS_FNT : curFont); uint8 charHeightFnt = getFontHeight(); diff --git a/engines/kyra/screen_v2.cpp b/engines/kyra/screen_v2.cpp index cc7d526ffe..23eb94cb53 100644 --- a/engines/kyra/screen_v2.cpp +++ b/engines/kyra/screen_v2.cpp @@ -280,7 +280,7 @@ void Screen_v2::setTextColorMap(const uint8 *cmap) { void Screen_v2::wsaFrameAnimationStep(int x1, int y1, int x2, int y2, int w1, int h1, int w2, int h2, int srcPage, int dstPage, int dim) { - if (!(w1 || h1 || w2 || h2)) + if (!w1 || !h1 || !w2 || !h2) return; ScreenDim cdm = *getScreenDim(dim); diff --git a/engines/kyra/sequences_lok.cpp b/engines/kyra/sequences_lok.cpp index 2a2f9a5493..51f1ea51cf 100644 --- a/engines/kyra/sequences_lok.cpp +++ b/engines/kyra/sequences_lok.cpp @@ -1722,9 +1722,10 @@ int KyraEngine_LoK::handleBeadState() { _screen->addBitBlitRect(_beadState1.x, _beadState1.y, _beadState1.width2, _beadState1.height); ++_beadState1.tableIndex; - if (_beadState1.tableIndex > 24) + if (_beadState1.tableIndex > 24) { _beadState1.tableIndex = 0; _unkEndSeqVar4 = 1; + } if (_system->getMillis() > _beadStateTimer2 && _malcolmFlag == 7 && !_unkAmuletVar && !_text->printed()) { snd_playSoundEffect(0x0B); if (_currentCharacter->x1 > 233 && _currentCharacter->x1 < 305 && _currentCharacter->y1 > 85 && _currentCharacter->y1 < 105 && diff --git a/engines/kyra/sound_towns.cpp b/engines/kyra/sound_towns.cpp index af741a1ebe..e4752f33de 100644 --- a/engines/kyra/sound_towns.cpp +++ b/engines/kyra/sound_towns.cpp @@ -225,6 +225,7 @@ void SoundTowns::playSoundEffect(uint8 track, uint8) { _driver->chanPanPos(_sfxChannel, 0x40); _driver->chanPitch(_sfxChannel, 0); _driver->playSoundEffect(_sfxChannel, note, 127, sfxPlaybackBuffer); + delete[] sfxPlaybackBuffer; } void SoundTowns::updateVolumeSettings() { diff --git a/engines/kyra/text_rpg.cpp b/engines/kyra/text_rpg.cpp index a19d678e35..24c523c856 100644 --- a/engines/kyra/text_rpg.cpp +++ b/engines/kyra/text_rpg.cpp @@ -129,7 +129,7 @@ void TextDisplayer_rpg::displayText(char *str, ...) { uint16 charsPerLine = (sd->w << 3) / (_screen->getFontWidth() + _screen->_charWidth); while (c) { - char a = tolower(_ctrl[1]); + char a = tolower((unsigned char)_ctrl[1]); if (!_tempString2 && c == '%') { if (a == 'd') { |