diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/agos/agos.cpp | 49 | ||||
-rw-r--r-- | engines/agos/agos.h | 2 | ||||
-rw-r--r-- | engines/agos/script.cpp | 8 |
3 files changed, 44 insertions, 15 deletions
diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp index 532e2cb699..9ba0de5caf 100644 --- a/engines/agos/agos.cpp +++ b/engines/agos/agos.cpp @@ -34,6 +34,7 @@ #include "agos/vga.h" #include "sound/mididrv.h" +#include "sound/mod.h" #ifdef PALMOS_68K #include "globals.h" @@ -1352,13 +1353,9 @@ startOver: for (;;) { if (getGameType() != GType_FF && getGameType() != GType_PP && _keyPressed == 35) displayBoxStars(); - if (getGameType() == GType_PP) { - if (processSpecialKeys() != 0) { - _needHitAreaRecalc++; - return; - } - } else { - processSpecialKeys(); + if (processSpecialKeys() != 0) { + _needHitAreaRecalc++; + return; } if (_lastHitArea3 == (HitArea *) -1) goto startOver; @@ -2075,18 +2072,26 @@ bool AGOSEngine::processSpecialKeys() { case 17: // Up if (getGameType() == GType_PP) _verbHitArea = 302; + else if (getGameType() == GType_WW) + _verbHitArea = 239; break; case 18: // Down if (getGameType() == GType_PP) _verbHitArea = 304; + else if (getGameType() == GType_WW) + _verbHitArea = 241; break; case 19: // Right if (getGameType() == GType_PP) _verbHitArea = 303; + else if (getGameType() == GType_WW) + _verbHitArea = 240; break; case 20: // Left if (getGameType() == GType_PP) _verbHitArea = 301; + else if (getGameType() == GType_WW) + _verbHitArea = 242; break; case 27: // escape _exitCutscene = true; @@ -2430,18 +2435,40 @@ void AGOSEngine::loadMusic(uint music) { if (getPlatform() == Common::kPlatformAtariST) { // TODO: Add support for music format used by Elvira 2 } else if (getPlatform() == Common::kPlatformAmiga) { - // TODO: Add Protracker mod support for Amiga versions + Audio::AudioStream *modStream; char filename[15]; + File f; if (getGameType() == GType_ELVIRA1 && getFeatures() & GF_DEMO) sprintf(filename, "elvira2"); else sprintf(filename, "%dtune", music); - if (getFeatures() & GF_CRUNCHED) { - debug(5,"loadMusic - Decrunch %s attempt", filename); + f.open(filename); + if (f.isOpen() == false) { + error("loadMusic: Can't load music from '%s'", filename); } - debug(5,"playMusic - Play %s attempt", filename); + + if (!(getGameType() == GType_ELVIRA1 && getFeatures() & GF_DEMO) && + getFeatures() & GF_CRUNCHED) { + uint srcSize = f.size(); + byte *srcBuf = (byte *)malloc(srcSize); + if (f.read(srcBuf, srcSize) != srcSize) + error("loadMusic: Read failed"); + + uint dstSize = READ_BE_UINT32(srcBuf + srcSize - 4); + byte *dstBuf = (byte *)malloc(dstSize); + decrunchFile(srcBuf, dstBuf, srcSize); + free(srcBuf); + + Common::MemoryReadStream stream(dstBuf, dstSize); + modStream = Audio::makeMODStream(&stream); + } else { + modStream = Audio::makeMODStream(&f); + } + + _mixer->stopAll(); + _mixer->playInputStream(Audio::Mixer::kSFXSoundType, NULL, modStream); } else if (getGameType() == GType_SIMON2) { midi.stop(); _gameFile->seek(_gameOffsetsPtr[_musicIndexBase + music - 1], SEEK_SET); diff --git a/engines/agos/agos.h b/engines/agos/agos.h index 831d860b91..7ac04fd569 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -1098,7 +1098,7 @@ public: void oe1_moveDirn(); void oe1_score(); void oe1_doClass(); - void oe1_pobj(); + void oe1_pObj(); void oe1_pName(); void oe1_pcName(); void oe1_cFlag(); diff --git a/engines/agos/script.cpp b/engines/agos/script.cpp index a553658e7c..eb2b970c88 100644 --- a/engines/agos/script.cpp +++ b/engines/agos/script.cpp @@ -250,6 +250,8 @@ void AGOSEngine::setupElvira1Opcodes(OpcodeProc *op) { op[105] = &AGOSEngine::o_process; op[106] = &AGOSEngine::oe1_doClass; + op[112] = &AGOSEngine::oe1_pObj; + op[114] = &AGOSEngine::oe1_pName; op[115] = &AGOSEngine::oe1_pcName; @@ -355,7 +357,7 @@ void AGOSEngine::setupElvira2Opcodes(OpcodeProc *op) { op[35] = &AGOSEngine::oe1_copyfo; op[37] = &AGOSEngine::oe1_whatO; op[54] = &AGOSEngine::oe2_moveDirn; - op[73] = &AGOSEngine::oe1_pobj; + op[73] = &AGOSEngine::oe1_pObj; op[74] = &AGOSEngine::oe1_pName; op[75] = &AGOSEngine::oe1_pcName; op[83] = &AGOSEngine::o1_rescan; @@ -419,7 +421,7 @@ void AGOSEngine::setupWaxworksOpcodes(OpcodeProc *op) { op[54] = &AGOSEngine::oww_moveDirn; op[55] = &AGOSEngine::oww_goto; op[70] = &AGOSEngine::o1_printLongText; - op[73] = &AGOSEngine::oe1_pobj; + op[73] = &AGOSEngine::oe1_pObj; op[74] = &AGOSEngine::oe1_pName; op[75] = &AGOSEngine::oe1_pcName; op[83] = &AGOSEngine::o1_rescan; @@ -1938,7 +1940,7 @@ void AGOSEngine::oe1_doClass() { } } -void AGOSEngine::oe1_pobj() { +void AGOSEngine::oe1_pObj() { // 112: print object SubObject *subObject = (SubObject *)findChildOfType(getNextItemPtr(), 2); getVarOrWord(); |