From 710c9051a380ae69fb31d6afae7b38357f13b1a8 Mon Sep 17 00:00:00 2001 From: Ludvig Strigeus Date: Mon, 29 Oct 2001 23:07:24 +0000 Subject: [PATCH] better MI1 compatibility svn-id: r3449 --- gfx.cpp | 19 ++++++++++++++++--- scumm.h | 4 ++++ scummvm.cpp | 20 ++++++++++++++++++-- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/gfx.cpp b/gfx.cpp index 9e5617c3c85..3aafdc4ba0c 100644 --- a/gfx.cpp +++ b/gfx.cpp @@ -17,6 +17,9 @@ * * Change Log: * $Log$ + * Revision 1.10 2001/10/29 23:07:24 strigeus + * better MI1 compatibility + * * Revision 1.9 2001/10/26 17:34:50 strigeus * bug fixes, code cleanup * @@ -1556,13 +1559,23 @@ void Scumm::panCameraTo(int x) { } void Scumm::actorFollowCamera(int act) { - int old = camera._follows; + int old; + CameraData *cd = &camera; + /* mi1 compatibilty */ + if (act==0) { + cd->_mode = 1; + cd->_follows = 0; + cd->_movingToActor = 0; + return; + } + + old = cd->_follows; setCameraFollows(derefActorSafe(act, "actorFollowCamera")); - if (camera._follows != old) + if (cd->_follows != old) runHook(0); - camera._movingToActor = 0; + cd->_movingToActor = 0; } void Scumm::setCameraAtEx(int at) { diff --git a/scumm.h b/scumm.h index 88e44657655..71c5fe2e592 100644 --- a/scumm.h +++ b/scumm.h @@ -17,6 +17,9 @@ * * Change Log: * $Log$ + * Revision 1.15 2001/10/29 23:07:24 strigeus + * better MI1 compatibility + * * Revision 1.14 2001/10/26 17:34:50 strigeus * bug fixes, code cleanup * @@ -326,6 +329,7 @@ enum ScummVars { VAR_VERSION = 75, VAR_V5_DRAWFLAGS = 9, + VAR_MI1_TIMER = 14, VAR_V5_OBJECT_LO = 15, VAR_V5_OBJECT_HI = 16, VAR_V5_TALK_STRING_Y = 54, diff --git a/scummvm.cpp b/scummvm.cpp index 34f31b2ce8f..8600d0f654c 100644 --- a/scummvm.cpp +++ b/scummvm.cpp @@ -17,6 +17,9 @@ * * Change Log: * $Log$ + * Revision 1.14 2001/10/29 23:07:24 strigeus + * better MI1 compatibility + * * Revision 1.13 2001/10/26 17:34:50 strigeus * bug fixes, code cleanup * @@ -265,7 +268,7 @@ void Scumm::scummMain(int argc, char **argv) { if (_gameId==GID_INDY4 && _bootParam==0) { _bootParam = -7873; } - + initGraphics(this); if (_majorScummVersion==6) @@ -278,6 +281,11 @@ void Scumm::scummMain(int argc, char **argv) { _vars[VAR_VERSION] = 21; _vars[VAR_DEBUGMODE] = _debugMode; + if (_gameId==GID_MONKEY) { + _vars[74] = 1225; + } + + runScript(1,0,0,&_bootParam); _scummTimer = 0; @@ -326,6 +334,9 @@ void Scumm::scummMain(int argc, char **argv) { _vars[VAR_MOUSE_Y] = mouse.y; _vars[VAR_DEBUGMODE] = _debugMode; + if (_gameId==GID_MONKEY) + _vars[VAR_MI1_TIMER]+=40; + if (_saveLoadFlag) { char buf[256]; @@ -923,7 +934,12 @@ void NORETURN CDECL error(const char *s, ...) { va_end(va); if (scumm._currentScript != 0xFF) { - fprintf(stderr, "Error(%d): %s!\nPress a key to quit.\n", scumm.vm.slot[scumm._currentScript].number, buf); + ScriptSlot *ss = &scumm.vm.slot[scumm._currentScript]; + fprintf(stderr, "Error(%d:%d:0x%X): %s!\nPress a key to quit.\n", + scumm._roomResource, + ss->number, + scumm._scriptPointer - scumm._scriptOrgPointer, + buf); } else { fprintf(stderr, "Error: %s!\nPress a key to quit.\n", buf); }