diff --git a/Makefile b/Makefile index dc595217008..91340e3b0fe 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ CC = gcc CFLAGS = -g -Wno-multichar -DEFINES = -DUNIX -DUSE_ADLIB +DEFINES = -DUNIX -DUSE_ADLIB LDFLAGS := INCLUDES:= `sdl-config --cflags` -I./ -I./sound CPPFLAGS= $(DEFINES) $(INCLUDES) diff --git a/gui.cpp b/gui.cpp index 46f0821ec7a..e3e2b3a65d8 100644 --- a/gui.cpp +++ b/gui.cpp @@ -458,16 +458,14 @@ void Gui::addLetter(byte letter) { } byte Gui::getDefaultColor(int color) { -#if defined(FULL_THROTTLE) - return 0; -#else + if(_s->_features & GF_AFTER_V7) + return 0; if (_s->_features&GF_AFTER_V6) { if (color==8) color=1; return _s->readArray(110, 0, color); } else { return _s->getStringAddress(21)[color]; } -#endif } void Gui::init(Scumm *s) { diff --git a/resource.cpp b/resource.cpp index 38e1363474a..d0e3cd900c3 100644 --- a/resource.cpp +++ b/resource.cpp @@ -656,7 +656,7 @@ int Scumm::readSoundResource(int type, int index) { basetag = fileReadDwordLE(); total_size = fileReadDwordBE(); - if (_gameId==GID_SAMNMAX) { + if (_gameId==GID_SAMNMAX || _features & GF_AFTER_V7) { if (basetag == MKID('MIDI')) { fileSeek(_fileHandle, -8, SEEK_CUR); fileRead(_fileHandle,createResource(type, index, total_size+8), total_size+8); diff --git a/script.cpp b/script.cpp index 1a368b21dc4..10bff307e58 100644 --- a/script.cpp +++ b/script.cpp @@ -254,7 +254,7 @@ void Scumm::executeScript() { _opcode = fetchScriptByte(); _scriptPointerStart = _scriptPointer; vm.slot[_currentScript].didexec = 1; - //debug(1, "[%X] %s()", _opcode, _opcodes_lookup[_opcode]); + // debug(1, "[%X] %s()", _opcode, _opcodes_lookup[_opcode]); op = getOpcode(_opcode); (this->*op)(); } diff --git a/script_v2.cpp b/script_v2.cpp index 25ddbf5df2b..9f0f70d295a 100644 --- a/script_v2.cpp +++ b/script_v2.cpp @@ -1189,26 +1189,26 @@ void Scumm::o6_panCameraTo() { } void Scumm::o6_actorFollowCamera() { -#if defined(FULL_THROTTLE) - setCameraFollows(derefActorSafe(pop(), "actorFollowCamera")); -#else - actorFollowCamera(pop()); -#endif + if(_features & GF_AFTER_V7) + setCameraFollows(derefActorSafe(pop(), "actorFollowCamera")); + else + actorFollowCamera(pop()); + } void Scumm::o6_setCameraAt() { -#if defined(FULL_THROTTLE) - int x,y; + if(_features & GF_AFTER_V7) { + int x,y; - camera._follows = 0; + camera._follows = 0; - y = pop(); - x = pop(); - - setCameraAt(x,y); -#else - setCameraAtEx(pop()); -#endif + y = pop(); + x = pop(); + + setCameraAt(x,y); + } else { + setCameraAtEx(pop()); + } } void Scumm::o6_loadRoom() { @@ -1384,10 +1384,11 @@ void Scumm::o6_loadRoomWithEgo() { _vars[VAR_WALKTO_OBJ] = 0; /* startScene maybe modifies VAR_EGO, i hope not */ -#if !defined(FULL_THROTTLE) - camera._dest.x = camera._cur.x = a->x; - setCameraFollows(a); -#endif + + if(!(_features & GF_AFTER_V7)) { + camera._dest.x = camera._cur.x = a->x; + setCameraFollows(a); + } _fullRedraw=1; if (x != -1) { startWalkActor(a, x, y, -1); @@ -1536,10 +1537,9 @@ void Scumm::o6_resourceRoutines() { switch(fetchScriptByte()) { case 100: /* load script */ res = pop(); -#if defined(FULL_THROTTLE) - if (res >= _numGlobalScripts) - break; -#endif + if(_features & GF_AFTER_V7) + if (res >= _numGlobalScripts) + break; ensureResourceLoaded(rtScript, res); break; case 101: /* load sound */ @@ -1556,10 +1556,9 @@ void Scumm::o6_resourceRoutines() { break; case 104: /* nuke script */ res = pop(); -#if defined(FULL_THROTTLE) - if (res >= _numGlobalScripts) - break; -#endif + if(_features & GF_AFTER_V7) + if (res >= _numGlobalScripts) + break; setResourceCounter(rtScript, res, 0x7F); debug(5, "nuke script %d", res); break; @@ -2172,14 +2171,15 @@ void Scumm::o6_wait() { break; return; case 170: -#if !defined(FULL_THROTTLE) - if (camera._cur.x>>3 != camera._dest.x>>3) - break; -#else - if (camera._dest.x != camera._cur.x || - camera._dest.y != camera._cur.y) + if(!(_features & GF_AFTER_V7)) { + if (camera._cur.x>>3 != camera._dest.x>>3) break; -#endif + } else { + if (camera._dest.x != camera._cur.x || + camera._dest.y != camera._cur.y) + break; + } + return; case 171: if (_sentenceNum) { diff --git a/scummvm.cpp b/scummvm.cpp index dc78adc1d73..87483a2af15 100644 --- a/scummvm.cpp +++ b/scummvm.cpp @@ -249,9 +249,8 @@ void Scumm::scummMain(int argc, char **argv) { scummInit(); -#if !defined(FULL_THROTTLE) - _vars[VAR_VERSION] = 21; -#endif + if(!(_features & GF_AFTER_V7)) + _vars[VAR_VERSION] = 21; _vars[VAR_DEBUGMODE] = _debugMode; if (_gameId==GID_MONKEY) { @@ -283,12 +282,12 @@ int Scumm::scummLoop(int delta) { processKbd(); -#if defined(FULL_THROTTLE) - _vars[VAR_CAMERA_POS_X] = camera._cur.x; - _vars[VAR_CAMERA_POS_Y] = camera._cur.y; -#else - _vars[VAR_CAMERA_POS_X] = camera._cur.x; -#endif + if(_features & GF_AFTER_V7) { + _vars[VAR_CAMERA_POS_X] = camera._cur.x; + _vars[VAR_CAMERA_POS_Y] = camera._cur.y; + } else { + _vars[VAR_CAMERA_POS_X] = camera._cur.x; + } _vars[VAR_HAVE_MSG] = _haveMsg; _vars[VAR_VIRT_MOUSE_X] = _virtual_mouse_x; _vars[VAR_VIRT_MOUSE_Y] = _virtual_mouse_y; @@ -343,14 +342,14 @@ int Scumm::scummLoop(int delta) { moveCamera(); fixObjectFlags(); CHARSET_1(); -#if !defined(FULL_THROTTLE) - if (camera._cur.x != camera._last.x || _BgNeedsRedraw || _fullRedraw) { -#else - if (camera._cur.x != camera._last.x || - camera._cur.y != camera._last.y || _BgNeedsRedraw || - _fullRedraw) { -#endif - redrawBGAreas(); + if(!(_features & GF_AFTER_V7)) { + if (camera._cur.x != camera._last.x || _BgNeedsRedraw || _fullRedraw) { + redrawBGAreas(); + } + } else { + if (camera._cur.x != camera._last.x || camera._cur.y != camera._last.y || _BgNeedsRedraw || _fullRedraw) { + redrawBGAreas(); + } } processDrawQue(); setActorRedrawFlags(); @@ -615,26 +614,26 @@ void Scumm::startScene(int room, Actor *a, int objectNr) { else loadRoomObjects(); -#if !defined(FULL_THROTTLE) - camera._mode = CM_NORMAL; - camera._cur.x = camera._dest.x = 160; -#endif + if(!(_features & GF_AFTER_V7)) { + camera._mode = CM_NORMAL; + camera._cur.x = camera._dest.x = 160; + } if (_features&GF_AFTER_V6) { _vars[VAR_V6_SCREEN_WIDTH] = _scrWidth; _vars[VAR_V6_SCREEN_HEIGHT] = _scrHeight; } -#if defined(FULL_THROTTLE) - _vars[VAR_CAMERA_MIN_X] = 160; - _vars[VAR_CAMERA_MAX_X] = _scrWidth - 160; - _vars[VAR_CAMERA_MIN_Y] = 100; - _vars[VAR_CAMERA_MAX_Y] = _scrHeight - 100; - setCameraAt(160, 100); -#else - _vars[VAR_CAMERA_MAX_X] = _scrWidth - 160; - _vars[VAR_CAMERA_MIN_X] = 160; -#endif + if(_features & GF_AFTER_V7) { + _vars[VAR_CAMERA_MIN_X] = 160; + _vars[VAR_CAMERA_MAX_X] = _scrWidth - 160; + _vars[VAR_CAMERA_MIN_Y] = 100; + _vars[VAR_CAMERA_MAX_Y] = _scrHeight - 100; + setCameraAt(160, 100); + } else { + _vars[VAR_CAMERA_MAX_X] = _scrWidth - 160; + _vars[VAR_CAMERA_MIN_X] = 160; + } if (_roomResource == 0) return; @@ -657,18 +656,18 @@ void Scumm::startScene(int room, Actor *a, int objectNr) { _egoPositioned = false; runEntryScript(); -#if !defined(FULL_THROTTLE) - if (a && !_egoPositioned) { - getObjectXYPos(objectNr); - putActor(a, _xPos, _yPos, _currentRoom); - a->moving = 0; + if(!(_features & GF_AFTER_V7)) { + if (a && !_egoPositioned) { + getObjectXYPos(objectNr); + putActor(a, _xPos, _yPos, _currentRoom); + a->moving = 0; + } + } else { + if (camera._follows) { + Actor *a = derefActorSafe(camera._follows, "startScene: follows"); + setCameraAt(a->x, a->y); + } } -#else - if (camera._follows) { - Actor *a = derefActorSafe(camera._follows, "startScene: follows"); - setCameraAt(a->x, a->y); - } -#endif _doEffect = true; @@ -801,14 +800,15 @@ void Scumm::initRoomSubBlocks() { int id; ptr += _resourceHeaderSize; /* skip tag & size */ -#ifdef FULL_THROTTLE - id = READ_LE_UINT16(ptr); - checkRange(2050, 2000, id, "Invalid local script %d"); - _localScriptList[id - _numGlobalScripts] = ptr + 2 - roomptr; -#else - id = ptr[0]; - _localScriptList[id - _numGlobalScripts] = ptr + 1 - roomptr; -#endif + + if(_features & GF_AFTER_V7) { + id = READ_LE_UINT16(ptr); + checkRange(2050, 2000, id, "Invalid local script %d"); + _localScriptList[id - _numGlobalScripts] = ptr + 2 - roomptr; + } else { + id = ptr[0]; + _localScriptList[id - _numGlobalScripts] = ptr + 1 - roomptr; + } #ifdef DUMP_SCRIPTS do { char buf[32]; @@ -1016,12 +1016,12 @@ int Scumm::getKeyInput(int a) { _mouseButStat = MBS_RIGHT_CLICK; } -#if defined(FULL_THROTTLE) -// _vars[VAR_LEFTBTN_DOWN] = (_leftBtnPressed&msClicked) != 0; - _vars[VAR_LEFTBTN_HOLD] = (_leftBtnPressed&msDown) != 0; -// _vars[VAR_RIGHTBTN_DOWN] = (_rightBtnPressed&msClicked) != 0; - _vars[VAR_RIGHTBTN_HOLD] = (_rightBtnPressed&msDown) != 0; -#endif + if(_features & GF_AFTER_V7) { +// _vars[VAR_LEFTBTN_DOWN] = (_leftBtnPressed&msClicked) != 0; + _vars[VAR_LEFTBTN_HOLD] = (_leftBtnPressed&msDown) != 0; +// _vars[VAR_RIGHTBTN_DOWN] = (_rightBtnPressed&msClicked) != 0; + _vars[VAR_RIGHTBTN_HOLD] = (_rightBtnPressed&msDown) != 0; + } _leftBtnPressed &= ~msClicked; _rightBtnPressed &= ~msClicked; diff --git a/sound.cpp b/sound.cpp index 8f3cfa13868..1765d6c7d89 100644 --- a/sound.cpp +++ b/sound.cpp @@ -24,11 +24,11 @@ #include "sound.h" void Scumm::addSoundToQueue(int sound) { -#if !defined(FULL_THROTTLE) - _vars[VAR_LAST_SOUND] = sound; - ensureResourceLoaded(rtSound, sound); - addSoundToQueue2(sound); -#endif + if(!(_features & GF_AFTER_V7)) { + _vars[VAR_LAST_SOUND] = sound; + ensureResourceLoaded(rtSound, sound); + addSoundToQueue2(sound); + } if(_features & GF_AUDIOTRACKS) warning("Requesting audio track: %d",sound); @@ -82,10 +82,11 @@ void Scumm::processSoundQues() { data[7] ); #endif -#if !defined(FULL_THROTTLE) - if (se) - _vars[VAR_SOUNDRESULT] = (short)se->do_command(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]); -#endif + if(!(_features & GF_AFTER_V7)) { + if (se) + _vars[VAR_SOUNDRESULT] = (short)se->do_command(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]); + } + } } _soundQuePos = 0; diff --git a/string.cpp b/string.cpp index c63c4af744a..0f91f9416ed 100644 --- a/string.cpp +++ b/string.cpp @@ -191,14 +191,15 @@ void Scumm::CHARSET_1() { Actor *a; byte *buffer; -#if !defined(FULL_THROTTLE) - if (!_haveMsg || (camera._dest.x>>3) != (camera._cur.x>>3) || - camera._cur.x != camera._last.x - ) return; -#else - if (!_haveMsg) - return; -#endif + if(!(_features & GF_AFTER_V7)) { + if (!_haveMsg || (camera._dest.x>>3) != (camera._cur.x>>3) || + camera._cur.x != camera._last.x + ) return; + } else { + if (!_haveMsg) + return; + } + a = NULL; if (_vars[VAR_TALK_ACTOR] != 0xFF) a = derefActorSafe(_vars[VAR_TALK_ACTOR], "CHARSET_1");