From c21e9da1b6c46f145f8061ca77dd5b9b9627e782 Mon Sep 17 00:00:00 2001 From: Vincent Hamm Date: Tue, 5 Mar 2002 23:41:41 +0000 Subject: [PATCH] Next episode in V7 reimplementation. Nearly working svn-id: r3658 --- gfx.cpp | 167 ++++++++++++++++++++++----------------------- object.cpp | 14 ++-- saveload.cpp | 14 +--- script.cpp | 182 ++++++++++++++++++++++++-------------------------- script_v1.cpp | 2 - scummvm.cpp | 44 ++++++------ 6 files changed, 201 insertions(+), 222 deletions(-) diff --git a/gfx.cpp b/gfx.cpp index 8cc886675ae..38761c2d784 100644 --- a/gfx.cpp +++ b/gfx.cpp @@ -552,10 +552,9 @@ void Scumm::redrawBGAreas() { CameraData *cd = &camera; int diff; // Full throttle hack -#if !defined(FULL_THROTTLE) - if (cd->_cur.x!=cd->_last.x && charset._hasMask) - stopTalk(); -#endif + if (!(_features & GF_AFTER_V7)) + if (cd->_cur.x!=cd->_last.x && charset._hasMask) + stopTalk(); val = 0; @@ -567,33 +566,32 @@ void Scumm::redrawBGAreas() { } } -#if defined(FULL_THROTTLE) - diff = (cd->_cur.x>>3) - (cd->_last.x>>3); - if (_fullRedraw==0 && diff==1) { - val = 2; - redrawBGStrip(39, 1); - } else if (_fullRedraw==0 && diff==-1) { - val = 1; - redrawBGStrip(0, 1); - } else if (_fullRedraw!=0 || diff!=0) { - _BgNeedsRedraw = false; - _fullRedraw = false; - redrawBGStrip(0, 40); + if(_features & GF_AFTER_V7) { + diff = (cd->_cur.x>>3) - (cd->_last.x>>3); + if (_fullRedraw==0 && diff==1) { + val = 2; + redrawBGStrip(39, 1); + } else if (_fullRedraw==0 && diff==-1) { + val = 1; + redrawBGStrip(0, 1); + } else if (_fullRedraw!=0 || diff!=0) { + _BgNeedsRedraw = false; + _fullRedraw = false; + redrawBGStrip(0, 40); + } + } else { + if (_fullRedraw==0 && cd->_cur.x - cd->_last.x == 8) { + val = 2; + redrawBGStrip(39, 1); + } else if (_fullRedraw==0 && cd->_cur.x - cd->_last.x == -8) { + val = 1; + redrawBGStrip(0, 1); + } else if (_fullRedraw!=0 || cd->_cur.x != cd->_last.x) { + _BgNeedsRedraw = false; + redrawBGStrip(0, 40); + } } -#else - if (_fullRedraw==0 && cd->_cur.x - cd->_last.x == 8) { - val = 2; - redrawBGStrip(39, 1); - } else if (_fullRedraw==0 && cd->_cur.x - cd->_last.x == -8) { - val = 1; - redrawBGStrip(0, 1); - } else if (_fullRedraw!=0 || cd->_cur.x != cd->_last.x) { - _BgNeedsRedraw = false; - redrawBGStrip(0, 40); - } -#endif - drawRoomObjects(val); _BgNeedsRedraw = false; } @@ -1815,84 +1813,79 @@ void Scumm::moveCamera() { } } -#if defined(FULL_THROTTLE) void Scumm::cameraMoved() { - CameraData *cd = &camera; + if(_features & GF_AFTER_V7) { + CameraData *cd = &camera; - assert(cd->_cur.x>=160 && cd->_cur.y>=100); - - _screenStartStrip = (cd->_cur.x-160) >> 3; - _screenEndStrip = _screenStartStrip + 39; - virtscr[0].xstart = _screenStartStrip << 3; + assert(cd->_cur.x>=160 && cd->_cur.y>=100); - _screenLeft = cd->_cur.x - 160; - _screenTop = cd->_cur.y - 100; -} + _screenStartStrip = (cd->_cur.x-160) >> 3; + _screenEndStrip = _screenStartStrip + 39; + virtscr[0].xstart = _screenStartStrip << 3; + + _screenLeft = cd->_cur.x - 160; + _screenTop = cd->_cur.y - 100; + } else { + CameraData *cd = &camera; -#else -void Scumm::cameraMoved() { - CameraData *cd = &camera; + if (cd->_cur.x < 160) { + cd->_cur.x = 160; + } else if (cd->_cur.x + 160 >= _scrWidth) { + cd->_cur.x = _scrWidth-160; + } - if (cd->_cur.x < 160) { - cd->_cur.x = 160; - } else if (cd->_cur.x + 160 >= _scrWidth) { - cd->_cur.x = _scrWidth-160; + _screenStartStrip = (cd->_cur.x >> 3) - 20; + _screenEndStrip = _screenStartStrip + 39; + virtscr[0].xstart = _screenStartStrip << 3; } - - _screenStartStrip = (cd->_cur.x >> 3) - 20; - _screenEndStrip = _screenStartStrip + 39; - virtscr[0].xstart = _screenStartStrip << 3; } -#endif -#if defined(FULL_THROTTLE) void Scumm::panCameraTo(int x, int y) { - CameraData *cd = &camera; - cd->_follows = 0; - cd->_dest.x = x; - cd->_dest.y = y; -} + if(_features & GF_AFTER_V7) { + CameraData *cd = &camera; + cd->_follows = 0; + cd->_dest.x = x; + cd->_dest.y = y; + } else { -#else -void Scumm::panCameraTo(int x, int y) { - CameraData *cd = &camera; - cd->_dest.x = x; - cd->_mode = CM_PANNING; - cd->_movingToActor = 0; + CameraData *cd = &camera; + cd->_dest.x = x; + cd->_mode = CM_PANNING; + cd->_movingToActor = 0; + } } -#endif void Scumm::actorFollowCamera(int act) { -#if !defined(FULL_THROTTLE) - int old; - CameraData *cd = &camera; + if(!(_features & GF_AFTER_V7)) { + int old; + CameraData *cd = &camera; - /* mi1 compatibilty */ - if (act==0) { - cd->_mode = CM_NORMAL; - cd->_follows = 0; - cd->_movingToActor = 0; - return; - } + /* mi1 compatibilty */ + if (act==0) { + cd->_mode = CM_NORMAL; + cd->_follows = 0; + cd->_movingToActor = 0; + return; + } - old = cd->_follows; - setCameraFollows(derefActorSafe(act, "actorFollowCamera")); - if (cd->_follows != old) - runHook(0); + old = cd->_follows; + setCameraFollows(derefActorSafe(act, "actorFollowCamera")); + if (cd->_follows != old) + runHook(0); - cd->_movingToActor = 0; -#endif + cd->_movingToActor = 0; + } } void Scumm::setCameraAtEx(int at) { -#if !defined(FULL_THROTTLE) - CameraData *cd = &camera; - cd->_mode = CM_NORMAL; - cd->_cur.x = at; - setCameraAt(at, 0); - cd->_movingToActor = 0; -#endif + if(!(_features & GF_AFTER_V7)) { + CameraData *cd = &camera; + cd->_mode = CM_NORMAL; + cd->_cur.x = at; + setCameraAt(at, 0); + cd->_movingToActor = 0; + } } void Scumm::palManipulate() { diff --git a/object.cpp b/object.cpp index cbbbc71d072..efb7602fa83 100644 --- a/object.cpp +++ b/object.cpp @@ -1045,13 +1045,13 @@ void Scumm::setCursorImg(uint img, uint room, uint imgindex) { READ_LE_UINT16(&foir.imhd->old.hotspot[0].y)); -#if !defined(FULL_THROTTLE) - w = READ_LE_UINT16(&foir.cdhd->v6.w)>>3; - h = READ_LE_UINT16(&foir.cdhd->v6.h)>>3; -#else - w = READ_LE_UINT16(&foir.imhd->v7.width)>>3; - h = READ_LE_UINT16(&foir.imhd->v7.height)>>3; -#endif + if(!(_features & GF_AFTER_V7)) { + w = READ_LE_UINT16(&foir.cdhd->v6.w)>>3; + h = READ_LE_UINT16(&foir.cdhd->v6.h)>>3; + } else { + w = READ_LE_UINT16(&foir.imhd->v7.width)>>3; + h = READ_LE_UINT16(&foir.imhd->v7.height)>>3; + } dataptr = findResource(IMxx_tags[imgindex],foir.obim); if (dataptr==NULL) diff --git a/saveload.cpp b/saveload.cpp index 15dddae3d90..aa96b129fe6 100644 --- a/saveload.cpp +++ b/saveload.cpp @@ -128,9 +128,8 @@ bool Scumm::loadState(int slot, bool compat) { _drawObjectQueNr = 0; _verbMouseOver = 0; -#if defined(FULL_THROTTLE) - cameraMoved(); -#endif + if(_features & GF_AFTER_V7) + cameraMoved(); initBGBuffers(); @@ -324,7 +323,6 @@ void Scumm::saveOrLoad(Serializer *s) { MKARRAY(Scumm,_charsetData[0][0],sleByte,10*16), MKLINE(Scumm,_curExecScript,sleUint16), -#if defined(FULL_THROTTLE) MKLINE(Scumm,camera._dest.x,sleInt16), MKLINE(Scumm,camera._dest.y,sleInt16), MKLINE(Scumm,camera._cur.x,sleInt16), @@ -333,12 +331,6 @@ void Scumm::saveOrLoad(Serializer *s) { MKLINE(Scumm,camera._last.y,sleInt16), MKLINE(Scumm,camera._accel.x,sleInt16), MKLINE(Scumm,camera._accel.y,sleInt16), - MKLINE(Scumm,camera._follows,sleByte), - MKLINE(Scumm,camera._movingToActor,sleUint16), -#else - MKLINE(Scumm,camera._dest.x,sleInt16), - MKLINE(Scumm,camera._cur.x,sleInt16), - MKLINE(Scumm,camera._last.x,sleInt16), MKLINE(Scumm,_screenStartStrip,sleInt16), MKLINE(Scumm,_screenEndStrip,sleInt16), MKLINE(Scumm,camera._mode,sleByte), @@ -346,7 +338,7 @@ void Scumm::saveOrLoad(Serializer *s) { MKLINE(Scumm,camera._leftTrigger,sleInt16), MKLINE(Scumm,camera._rightTrigger,sleInt16), MKLINE(Scumm,camera._movingToActor,sleUint16), -#endif + MKLINE(Scumm,_actorToPrintStrFor,sleByte), MKLINE(Scumm,_charsetColor,sleByte), /* XXX Convert into word next time format changes */ diff --git a/script.cpp b/script.cpp index 4ea32ece6e1..1a368b21dc4 100644 --- a/script.cpp +++ b/script.cpp @@ -606,11 +606,10 @@ void Scumm::checkAndRunVar33() { _sentenceNum--; -#if !defined(FULL_THROTTLE) - if (sentence[_sentenceNum].unk2 && - sentence[_sentenceNum].unk3==sentence[_sentenceNum].unk4) - return; -#endif + if(!(_features & GF_AFTER_V7)) + if (sentence[_sentenceNum].unk2 && + sentence[_sentenceNum].unk3==sentence[_sentenceNum].unk4) + return; _localParamList[0] = sentence[_sentenceNum].unk5; _localParamList[1] = sentence[_sentenceNum].unk4; @@ -797,64 +796,63 @@ void Scumm::faceActorToObj(int act, int obj) { } void Scumm::animateActor(int act, int anim) { -#if defined(FULL_THROTTLE) - int cmd,dir; - Actor *a; + if(_features & GF_AFTER_V7) { + int cmd,dir; + Actor *a; - a = derefActorSafe(act, "animateActor"); + a = derefActorSafe(act, "animateActor"); - if (anim==0xFF) - anim = 2000; + if (anim==0xFF) + anim = 2000; - cmd = anim / 1000; - dir = anim % 1000; + cmd = anim / 1000; + dir = anim % 1000; - /* temporary code */ -// dir = newDirToOldDir(dir); + /* temporary code */ +// dir = newDirToOldDir(dir); - switch(cmd) { - case 2: - stopActorMoving(a); - startAnimActor(a, a->standFrame); - break; - case 3: - a->moving &= ~4; - fixActorDirection(a, dir); - break; - case 4: - turnToDirection(a, dir); - break; - default: - startAnimActor(a, anim); + switch(cmd) { + case 2: + stopActorMoving(a); + startAnimActor(a, a->standFrame); + break; + case 3: + a->moving &= ~4; + fixActorDirection(a, dir); + break; + case 4: + turnToDirection(a, dir); + break; + default: + startAnimActor(a, anim); + } + + } else { + int dir; + Actor *a; + + a = derefActorSafe(act, "animateActor"); + if (!a) return; + + dir = anim&3; + + switch(anim>>2) { + case 0x3F: + stopActorMoving(a); + startAnimActor(a, a->standFrame); + break; + case 0x3E: + a->moving &= ~4; + fixActorDirection(a, oldDirToNewDir(dir)); + break; + case 0x3D: + turnToDirection(a, oldDirToNewDir(dir)); + break; + default: + startAnimActor(a, anim); + } + } - - -#else - int dir; - Actor *a; - - a = derefActorSafe(act, "animateActor"); - if (!a) return; - - dir = anim&3; - - switch(anim>>2) { - case 0x3F: - stopActorMoving(a); - startAnimActor(a, a->standFrame); - break; - case 0x3E: - a->moving &= ~4; - fixActorDirection(a, oldDirToNewDir(dir)); - break; - case 0x3D: - turnToDirection(a, oldDirToNewDir(dir)); - break; - default: - startAnimActor(a, anim); - } - -#endif } bool Scumm::isScriptRunning(int script) { @@ -862,7 +860,7 @@ bool Scumm::isScriptRunning(int script) { ScriptSlot *ss = vm.slot; for (i=0; inumber==script && (ss->where==WIO_GLOBAL || - ss->where==WIO_LOCAL) && ss->status) + ss->where==WIO_LOCAL) && ss->status) return true; return false; } @@ -1018,46 +1016,44 @@ void Scumm::exitCutscene() { vm.cutScenePtr[vm.cutSceneStackPointer] = 0; } } -#if defined(FULL_THROTTLE) void Scumm::doSentence(int c, int b, int a) { - SentenceTab *st; + if(_features & GF_AFTER_V7) { + SentenceTab *st; - if (b==a) - return; - - st = &sentence[_sentenceNum-1]; - - if (_sentenceNum && - st->unk5 == c && st->unk4==b && st->unk3==a) + if (b==a) return; - _sentenceNum++; - st++; + st = &sentence[_sentenceNum-1]; - st->unk5 = c; - st->unk4 = b; - st->unk3 = a; - st->unk = 0; + if (_sentenceNum && + st->unk5 == c && st->unk4==b && st->unk3==a) + return; + + _sentenceNum++; + st++; + + st->unk5 = c; + st->unk4 = b; + st->unk3 = a; + st->unk = 0; - warning("dosentence(%d,%d,%d)", c, b, a); + warning("dosentence(%d,%d,%d)", c, b, a); + } else { + + SentenceTab *st; + + st = &sentence[_sentenceNum++]; + + st->unk5 = c; + st->unk4 = b; + st->unk3 = a; + + if (!(st->unk3&0xFF00)) + st->unk2 = 0; + else + st->unk2 = 1; + + st->unk = 0; + } } - -#else -void Scumm::doSentence(int c, int b, int a) { - SentenceTab *st; - - st = &sentence[_sentenceNum++]; - - st->unk5 = c; - st->unk4 = b; - st->unk3 = a; - - if (!(st->unk3&0xFF00)) - st->unk2 = 0; - else - st->unk2 = 1; - - st->unk = 0; -} -#endif diff --git a/script_v1.cpp b/script_v1.cpp index c0c6eb4628a..5ccf707a73f 100644 --- a/script_v1.cpp +++ b/script_v1.cpp @@ -1468,10 +1468,8 @@ void Scumm::o5_loadRoomWithEgo() { startScene(a->room, a, obj); _vars[VAR_WALKTO_OBJ] = 0; -#if !defined(FULL_THROTTLE) camera._dest.x = camera._cur.x = a->x; setCameraFollows(a); -#endif _fullRedraw=1; diff --git a/scummvm.cpp b/scummvm.cpp index 0852dc7c57f..94566f16c1d 100644 --- a/scummvm.cpp +++ b/scummvm.cpp @@ -88,19 +88,19 @@ void Scumm::scummInit() { _verbs[i].key = 0; } -#if !defined(FULL_THROTTLE) - camera._leftTrigger = 10; - camera._rightTrigger = 30; - camera._mode = 0; -#endif + if(!(_features & GF_AFTER_V7)) { + camera._leftTrigger = 10; + camera._rightTrigger = 30; + camera._mode = 0; + } camera._follows = 0; virtscr[0].xstart = 0; -#if !defined(FULL_THROTTLE) - _vars[VAR_V5_DRAWFLAGS] = 11; - _vars[VAR_59] = 3; -#endif + if(!(_features & GF_AFTER_V7)) { + _vars[VAR_V5_DRAWFLAGS] = 11; + _vars[VAR_59] = 3; + } mouse.x = 104; mouse.y = 56; @@ -162,19 +162,19 @@ void Scumm::scummInit() { void Scumm::initScummVars() { -#if !defined(FULL_THROTTLE) - _vars[VAR_CURRENTDRIVE] = _currentDrive; - _vars[VAR_FIXEDDISK] = checkFixedDisk(); - _vars[VAR_SOUNDCARD] = _soundCardType; - _vars[VAR_VIDEOMODE] = 0x13; - _vars[VAR_HEAPSPACE] = 630; - _vars[VAR_MOUSEPRESENT] = _mousePresent; - _vars[VAR_SOUNDPARAM] = _soundParam; - _vars[VAR_SOUNDPARAM2] = _soundParam2; - _vars[VAR_SOUNDPARAM3] = _soundParam3; - if (_features&GF_AFTER_V6) - _vars[VAR_V6_EMSSPACE] = 10000; -#endif + if(!(_features & GF_AFTER_V7)) { + _vars[VAR_CURRENTDRIVE] = _currentDrive; + _vars[VAR_FIXEDDISK] = checkFixedDisk(); + _vars[VAR_SOUNDCARD] = _soundCardType; + _vars[VAR_VIDEOMODE] = 0x13; + _vars[VAR_HEAPSPACE] = 630; + _vars[VAR_MOUSEPRESENT] = _mousePresent; + _vars[VAR_SOUNDPARAM] = _soundParam; + _vars[VAR_SOUNDPARAM2] = _soundParam2; + _vars[VAR_SOUNDPARAM3] = _soundParam3; + if (_features&GF_AFTER_V6) + _vars[VAR_V6_EMSSPACE] = 10000; + } } void Scumm::checkRange(int max, int min, int no, const char *str) {