diff options
-rw-r--r-- | actor.cpp | 11 | ||||
-rw-r--r-- | costume.cpp | 27 | ||||
-rw-r--r-- | debug.cpp | 143 | ||||
-rw-r--r-- | gfx.cpp | 19 | ||||
-rw-r--r-- | object.cpp | 92 | ||||
-rw-r--r-- | resource.cpp | 64 | ||||
-rw-r--r-- | script.cpp | 40 | ||||
-rw-r--r-- | script_v1.cpp | 797 | ||||
-rw-r--r-- | script_v2.cpp | 883 | ||||
-rw-r--r-- | scumm.h | 609 | ||||
-rw-r--r-- | scummsys.h | 8 | ||||
-rw-r--r-- | scummvm.cpp | 135 | ||||
-rw-r--r-- | scummvm.dsp | 11 | ||||
-rw-r--r-- | sdl.cpp | 17 | ||||
-rw-r--r-- | string.cpp | 63 | ||||
-rw-r--r-- | windows.cpp | 11 |
16 files changed, 1547 insertions, 1383 deletions
@@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.6 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.5 2001/10/16 10:01:44 strigeus * preliminary DOTT support * @@ -54,10 +58,8 @@ void Scumm::initActor(Actor *a, int mode) { a->elevation = 0; a->width = 0x18; a->talkColor = 0xF; -#if defined(DOTT) a->new_2 = 0; a->new_1 = -80; -#endif a->scaley = a->scalex = 0xFF; a->charset = 0; a->sound[0] = 0; @@ -75,9 +77,7 @@ void Scumm::initActor(Actor *a, int mode) { a->ignoreBoxes = 0; a->neverZClip = 0; -#if defined(DOTT) a->new_3 = 0; -#endif a->initFrame = 1; a->walkFrame = 2; a->standFrame = 3; @@ -636,7 +636,7 @@ void Scumm::walkActors() { } } -#if !defined(DOTT) +/* Used in Scumm v5 only. Play sounds associated with actors */ void Scumm::playActorSounds() { int i; Actor *a; @@ -654,7 +654,6 @@ void Scumm::playActorSounds() { } } } -#endif void Scumm::walkActor(Actor *a) { int j; diff --git a/costume.cpp b/costume.cpp index 6ccde531f0..9aef48ab36 100644 --- a/costume.cpp +++ b/costume.cpp @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.5 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.4 2001/10/16 20:31:27 strigeus * misc fixes * @@ -112,7 +116,6 @@ byte CostumeRenderer::mainRoutine(Actor *a, int slot, int frame) { _ymove -= (int16)READ_LE_UINT16(_srcptr+10); _srcptr += 12; -#if defined(DOTT) switch(_ptr[7]&0x7F) { case 0x60: case 0x61: ex1 = _srcptr[0]; @@ -123,7 +126,6 @@ byte CostumeRenderer::mainRoutine(Actor *a, int slot, int frame) { _srcptr = _ptr + READ_LE_UINT16(_ptr + ex1 + ex2*2) + 14; } } -#endif _xpos = _actorX; _ypos = _actorY; @@ -686,12 +688,15 @@ StartPos:; } void CostumeRenderer::loadCostume(int id) { - _ptr = _vm->getResourceAddress(3, id) -#if defined(DOTT) - + 8; -#else - + 2; -#endif + + _ptr = _vm->getResourceAddress(3, id); + + if (_vm->_majorScummVersion == 6) { + _ptr += 8; + } else { + _ptr += 2; + } + switch(_ptr[7]&0x7F) { case 0x58: _numColors = 16; @@ -699,14 +704,12 @@ void CostumeRenderer::loadCostume(int id) { case 0x59: _numColors = 32; break; -#if defined(DOTT) - case 0x60: + case 0x60: /* New since version 6 */ _numColors = 16; break; - case 0x61: + case 0x61: /* New since version 6 */ _numColors = 32; break; -#endif default: error("Costume %d is invalid", id); } diff --git a/debug.cpp b/debug.cpp new file mode 100644 index 0000000000..d42a75e704 --- /dev/null +++ b/debug.cpp @@ -0,0 +1,143 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001 Ludvig Strigeus + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * Change Log: + * $Log$ + * Revision 1.1 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * + * + */ + +#include "stdafx.h" +#include "scumm.h" + + +enum { + CMD_INVALID, + CMD_HELP, + CMD_QUIT, + CMD_GO, +}; + +void ScummDebugger::attach(Scumm *s) { + if (_s) + deattach(); + + _welcome = true; + _s = s; + s->_debugger = this; + + _go_amount = 1; +} + +bool ScummDebugger::do_command() { + int cmd; + + switch(get_command()) { + case CMD_HELP: + printf("Debugger commands:\n" + "help -> display this help text\n" + "quit -> quit the debugger\n" + "step -> increase one frame\n" + ); + return true; + + case CMD_QUIT: + detach(); + return false; + + case CMD_GO: + if (!_parameters[0]) + _go_amount = 1; + else + _go_amount = atoi(_parameters); + return false; + + } +} + +void ScummDebugger::enter() { + if (_welcome) { + _welcome = false; + printf("Debugging Mode entered!, please switch to this console for input.\n" + "Enter h to list all the debug commands\n"); + } + while(do_command()) {} +} + + +void ScummDebugger::on_frame() { + if (_go_amount==0) + return; + if (!--_go_amount) + enter(); +} + + +void ScummDebugger::detach() { + _s->_debugger = NULL; + _s = NULL; +} + +struct DebuggerCommands { + char text[8]; + byte len; + byte id; +}; + +static const DebuggerCommands debugger_commands[] = { + { "h", 1, CMD_HELP }, + { "q", 1, CMD_QUIT }, + { "g", 1, CMD_GO }, + { 0, 0, 0 }, +}; + +int ScummDebugger::get_command() { + const DebuggerCommands *dc; + char *s; + int i; + + do { + printf("debug> "); + if (!fgets(_cmd_buffer, sizeof(_cmd_buffer), stdin)) + return CMD_QUIT; + + i = strlen(_cmd_buffer); + while (i>0 && _cmd_buffer[i-1]==10) + _cmd_buffer[--i] = 0; + + if (i==0) + continue; + + dc = debugger_commands; + do { + if (!strncmp(_cmd_buffer, dc->text, dc->len)) { + for(s=_cmd_buffer;*s;s++) { + if (*s==32) { s++; break; } + } + _parameters = s; + return _command = dc->id; + } + } while ((++dc)->text[0]); + + for(s=_cmd_buffer;*s;s++) + if (*s==32) { *s=0; break; } + printf("Invalid command '%s'. Type 'help' for a list of available commands.\n", _cmd_buffer); + } while (1); +}
\ No newline at end of file @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.8 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.7 2001/10/17 10:07:39 strigeus * fixed verbs not saved in non dott games, * implemented a screen effect @@ -788,20 +792,20 @@ void Scumm::decompressBitmap() { GDI_UnkDecode3(); break; -#if defined(DOTT) + /* New since version 6 */ case 104: case 105: case 106: case 107: case 108: gdi.decomp_shr = code - 100; gdi.decomp_mask = decompress_table[code - 100]; GDI_UnkDecode1(); break; - + + /* New since version 6 */ case 124: case 125: case 126: case 127: case 128: dseg_4E3B = 1; gdi.decomp_shr = code - 120; gdi.decomp_mask = decompress_table[code - 120]; GDI_UnkDecode3(); break; -#endif default: error("decompressBitmap: default case %d", code); @@ -965,7 +969,6 @@ void Scumm::redrawBGStrip(int start, int num) { #define READ_BIT (cl--,bit = bits&1, bits>>=1,bit) #define FILL_BITS if (cl <= 8) { bits |= (*src++ << cl); cl += 8;} -#if defined(DOTT) void Scumm::GDI_UnkDecode1() { byte *src = gdi.smap_ptr; byte *dst = gdi.where_to_draw_ptr; @@ -1017,7 +1020,8 @@ againPos:; dst += 312; } while (--gdi.tempNumLines); } -#else + +#if 0 void Scumm::GDI_UnkDecode1() { byte *src = gdi.smap_ptr; byte *dst = gdi.where_to_draw_ptr; @@ -1086,7 +1090,6 @@ void Scumm::GDI_UnkDecode2() { } while (--gdi.tempNumLines); } -#if defined(DOTT) void Scumm::GDI_UnkDecode3() { byte *src = gdi.smap_ptr; byte *dst = gdi.where_to_draw_ptr; @@ -1153,7 +1156,7 @@ againPos:; } while (--gdi.tempNumLines); } -#else +#if 0 void Scumm::GDI_UnkDecode3() { byte *src = gdi.smap_ptr; byte *dst = gdi.where_to_draw_ptr; @@ -1318,10 +1321,8 @@ void Scumm::restoreCharsetBg() { restoreBG(string[0].mask_left, string[0].mask_top, string[0].mask_right, string[0].mask_bottom); charset._hasMask = false; string[0].mask_left = -1; -#if defined(DOTT) charset._strLeft = -1; charset._left = -1; -#endif } string[0].xpos2 = string[0].xpos; diff --git a/object.cpp b/object.cpp index a3e936e524..e48abf6ed4 100644 --- a/object.cpp +++ b/object.cpp @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.6 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.5 2001/10/17 12:37:50 strigeus * fixed big endian bug * @@ -133,7 +137,6 @@ int Scumm::getObjectOrActorXY(int object) { return 0; } -#if defined(DOTT) void Scumm::getObjectXYPos(int object) { ObjectData *od = &_objs[getObjectIndex(object)]; int state; @@ -142,37 +145,32 @@ void Scumm::getObjectXYPos(int object) { int x,y; AdjustBoxResult abr; - state = getState(object)-1; - if (state<0) - state = 0; + if (_majorScummVersion==6) { + state = getState(object)-1; + if (state<0) + state = 0; - if (od->fl_object_index) { - ptr = getResourceAddress(0xD, od->fl_object_index); - ptr = findResource(MKID('OBIM'), ptr); + if (od->fl_object_index) { + ptr = getResourceAddress(0xD, od->fl_object_index); + ptr = findResource(MKID('OBIM'), ptr); + } else { + ptr = getResourceAddress(1, _roomResource); + ptr += od->offs_obim_to_room; + } + + imhd = (ImageHeader*)findResource2(MKID('IMHD'), ptr); + x = od->x_pos*8 + (int16)READ_LE_UINT16(&imhd->hotspot[state].x); + y = od->y_pos*8 + (int16)READ_LE_UINT16(&imhd->hotspot[state].y); } else { - ptr = getResourceAddress(1, _roomResource); - ptr += od->offs_obim_to_room; + x = od->cdhd_10; + y = od->cdhd_12; } - imhd = (ImageHeader*)findResource2(MKID('IMHD'), ptr); - x = od->x_pos*8 + (int16)READ_LE_UINT16(&imhd->hotspot[state].x); - y = od->y_pos*8 + (int16)READ_LE_UINT16(&imhd->hotspot[state].y); - abr = adjustXYToBeInBox(0, x, y); _xPos = abr.x; _yPos = abr.y; _dir = od->actordir&3; } -#else -void Scumm::getObjectXYPos(int object) { - ObjectData *od = &_objs[getObjectIndex(object)]; - AdjustBoxResult abr; - abr = adjustXYToBeInBox(0, od->cdhd_10, od->cdhd_12); - _xPos = abr.x; - _yPos = abr.y; - _dir = od->actordir&3; -} -#endif int Scumm::getObjActToObjActDist(int a, int b) { int x,y; @@ -406,28 +404,33 @@ void Scumm::loadRoomObjects() { cdhd = (CodeHeader*)findResource2(MKID('CDHD'), ptr); _objs[i].obj_nr = READ_LE_UINT16(&cdhd->obj_id); -#if defined(DOTT) - _objs[i].numstrips = READ_LE_UINT16(&cdhd->w)>>3; - _objs[i].height = READ_LE_UINT16(&cdhd->h)>>3; - _objs[i].x_pos = ((int16)READ_LE_UINT16(&cdhd->x))>>3; - _objs[i].y_pos = ((int16)READ_LE_UINT16(&cdhd->y))>>3; -#else - _objs[i].numstrips = cdhd->w; - _objs[i].height = cdhd->h; - _objs[i].x_pos = cdhd->x; - _objs[i].y_pos = cdhd->y; -#endif - if (cdhd->flags == 0x80) { - _objs[i].parentstate = 1<<4; + if (_majorScummVersion == 6) { + _objs[i].numstrips = READ_LE_UINT16(&cdhd->v6.w)>>3; + _objs[i].height = READ_LE_UINT16(&cdhd->v6.h)>>3; + _objs[i].x_pos = ((int16)READ_LE_UINT16(&cdhd->v6.x))>>3; + _objs[i].y_pos = ((int16)READ_LE_UINT16(&cdhd->v6.y))>>3; + if (cdhd->v6.flags == 0x80) { + _objs[i].parentstate = 1<<4; + } else { + _objs[i].parentstate = (cdhd->v6.flags&0xF)<<4; + } + _objs[i].parent = cdhd->v6.parent; + _objs[i].actordir = cdhd->v6.actordir; } else { - _objs[i].parentstate = (cdhd->flags&0xF)<<4; + _objs[i].numstrips = cdhd->v5.w; + _objs[i].height = cdhd->v5.h; + _objs[i].x_pos = cdhd->v5.x; + _objs[i].y_pos = cdhd->v5.y; + if (cdhd->v5.flags == 0x80) { + _objs[i].parentstate = 1<<4; + } else { + _objs[i].parentstate = (cdhd->v5.flags&0xF)<<4; + } + _objs[i].parent = cdhd->v5.parent; + _objs[i].cdhd_10 = READ_LE_UINT16(&cdhd->v5.unk2); + _objs[i].cdhd_12 = READ_LE_UINT16(&cdhd->v5.unk3); + _objs[i].actordir = cdhd->v5.actordir; } - _objs[i].parent = cdhd->parent; -#if !defined(DOTT) - _objs[i].cdhd_10 = READ_LE_UINT16(&cdhd->unk2); - _objs[i].cdhd_12 = READ_LE_UINT16(&cdhd->unk3); -#endif - _objs[i].actordir = cdhd->actordir; _objs[i].fl_object_index = 0; } @@ -705,7 +708,6 @@ int Scumm::getInventoryCount(int owner) { return count; } -#if defined(DOTT) void Scumm::setObjectState(int obj, int state, int x, int y) { int i; @@ -730,7 +732,6 @@ static int getDist(int x, int y, int x2, int y2) { return b; } - int Scumm::getDistanceBetween(bool is_obj_1, int b, int c, bool is_obj_2, int e, int f) { int i,j; int x,y; @@ -764,4 +765,3 @@ int Scumm::getDistanceBetween(bool is_obj_1, int b, int c, bool is_obj_2, int e, return getDist(x,y,x2,y2) * 0xFF / ((i + j)>>1); } -#endif diff --git a/resource.cpp b/resource.cpp index f0efc07ee7..bb7db92c04 100644 --- a/resource.cpp +++ b/resource.cpp @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.5 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.4 2001/10/16 12:20:20 strigeus * made files compile on unix * @@ -91,7 +95,7 @@ void Scumm::openRoom(int room) { error("Room %d not in %s", room, buf); return; } - askForDisk(); + askForDisk(buf); } do { @@ -99,7 +103,7 @@ void Scumm::openRoom(int room) { _encbyte = 0; if (openResourceFile(buf)) break; - askForDisk(); + askForDisk(buf); } while(1); deleteRoomOffsets(); @@ -165,14 +169,11 @@ bool Scumm::openResourceFile(const char *filename) { return _fileHandle != NULL; } -void Scumm::askForDisk() { - /* TODO: Not yet implemented */ - error("askForDisk: not yet implemented"); +void Scumm::askForDisk(const char *filename) { + error("Cannot find '%s'", filename); } -#if !defined(DOTT) - -void Scumm::readIndexFile(int mode) { +void Scumm::readIndexFileV5(int mode) { uint32 blocktype,itemsize; int numblock = 0; #if defined(SCUMM_BIG_ENDIAN) @@ -263,10 +264,8 @@ void Scumm::readIndexFile(int mode) { _numGlobalScripts = _maxScripts; _dynamicRoomOffsets = true; } -#else - -void Scumm::readIndexFile() { +void Scumm::readIndexFileV6() { uint32 blocktype,itemsize; int numblock = 0; int num, i; @@ -342,10 +341,8 @@ void Scumm::readIndexFile() { openRoom(-1); } -#endif -#if defined(DOTT) void Scumm::readArrayFromIndexFile() { int num; int a,b,c; @@ -361,31 +358,6 @@ void Scumm::readArrayFromIndexFile() { } } -#endif - -#if defined(DOTT) - -void Scumm::readResTypeList(int id, uint32 tag, const char *name) { - int num,i; - - debug(9, "readResTypeList(%d,%x,%s)",id,FROM_LE_32(tag),name); - - num = fileReadWordLE(); - assert(num == res.num[id]); - - fileRead(_fileHandle, res.roomno[id], num*sizeof(uint8)); - fileRead(_fileHandle, res.roomoffs[id], num*sizeof(uint32)); -#if defined(SCUMM_BIG_ENDIAN) - for (i=0; i<num; i++) - res.roomoffs[id][i] = FROM_LE_32(res.roomoffs[id][i]); -#endif - -} - - - -#else - void Scumm::readResTypeList(int id, uint32 tag, const char *name) { int num; int i; @@ -394,11 +366,16 @@ void Scumm::readResTypeList(int id, uint32 tag, const char *name) { num = fileReadWordLE(); - if (num>=0xFF) { - error("Too many %ss (%d) in directory", name, num); + if (_majorScummVersion == 6) { + if (num != res.num[id]) { + error("Invalid number of %ss (%d) in directory", name, num); + } + } else { + if (num>=0xFF) { + error("Too many %ss (%d) in directory", name, num); + } + allocResTypeData(id, tag, num, name, 1); } - - allocResTypeData(id, tag, num, name, 1); fileRead(_fileHandle, res.roomno[id], num*sizeof(uint8)); fileRead(_fileHandle, res.roomoffs[id], num*sizeof(uint32)); @@ -409,7 +386,6 @@ void Scumm::readResTypeList(int id, uint32 tag, const char *name) { #endif } -#endif void Scumm::allocResTypeData(int id, uint32 tag, int num, const char *name, int mode) { debug(9, "allocResTypeData(%d,%x,%d,%s,%d)",id,FROM_LE_32(tag),num,name,mode); @@ -774,7 +750,6 @@ void Scumm::unkResProc(int a, int b) { } -#if defined(DOTT) void Scumm::readMAXS() { _numVariables = fileReadWordLE(); fileReadWordLE(); @@ -821,6 +796,5 @@ void Scumm::readMAXS() { _numGlobalScripts = 200; _dynamicRoomOffsets = 1; } -#endif diff --git a/script.cpp b/script.cpp index fbad851263..e7bedff06f 100644 --- a/script.cpp +++ b/script.cpp @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.4 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.3 2001/10/16 10:01:47 strigeus * preliminary DOTT support * @@ -314,32 +318,6 @@ void Scumm::ignoreScriptByte() { } -#if defined(DOTT) -int Scumm::readVar(uint var) { - int a; - - if (!(var&0xF000)) { - checkRange(_numVariables-1, 0, var, "Variable %d out of range(r)"); - return _vars[var]; - } - - if (var&0x8000) { - var &= 0x7FFF; - checkRange(_numBitVariables-1, 0, var, "Bit variable %d out of range(r)"); - return (_bitVars[var>>3] & (1<<(var&7))) ? 1 : 0; - } - - if (var&0x4000) { - var &= 0xFFF; - checkRange(0x10, 0, var, "Local variable %d out of range(r)"); - return vm.localvar[_currentScript * 17 + var]; - } - - error("Illegal varbits (r)"); -} - -#else - int Scumm::readVar(uint var) { int a; #ifdef BYPASS_COPY_PROT @@ -351,7 +329,7 @@ int Scumm::readVar(uint var) { return _vars[var]; } - if (var&0x2000) { + if (var&0x2000 && _majorScummVersion==5) { a = fetchScriptWord(); if (a&0x2000) var = (var+readVar(a&~0x2000))&~0x2000; @@ -373,7 +351,7 @@ int Scumm::readVar(uint var) { checkRange(0x10, 0, var, "Local variable %d out of range(r)"); #ifdef BYPASS_COPY_PROT - if (!copyprotbypassed && _currentScript==1) { + if (!copyprotbypassed && _currentScript==1 && _gameId==GID_MONKEY2) { copyprotbypassed=1; return 1; } @@ -384,8 +362,6 @@ int Scumm::readVar(uint var) { error("Illegal varbits (r)"); } -#endif - void Scumm::writeVar(uint var, int value) { int a; @@ -714,9 +690,7 @@ void Scumm::runVerbCode(int object, int entry, int a, int b, int16 *vars) { vm.slot[slot].unk1 = a; vm.slot[slot].unk2 = b; vm.slot[slot].freezeCount = 0; -#if defined(DOTT) vm.slot[slot].newfield = 0; -#endif if (!vars) { for(i=0; i<16; i++) @@ -906,7 +880,6 @@ void Scumm::endOverride() { } -#if defined(DOTT) int Scumm::defineArray(int array, int type, int dim2, int dim1) { int id; int size; @@ -975,7 +948,6 @@ void Scumm::copyString(byte *dst, byte *src, int len) { *dst++ = *src++; } } -#endif int Scumm::getStringLen(byte *ptr) { int len; diff --git a/script_v1.cpp b/script_v1.cpp index 8d5bac2f86..24b055eca0 100644 --- a/script_v1.cpp +++ b/script_v1.cpp @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.3 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.2 2001/10/16 20:31:27 strigeus * misc fixes * @@ -29,340 +33,338 @@ #include "stdafx.h" #include "scumm.h" -#if !defined(DOTT) - void Scumm::setupOpcodes() { static const OpcodeProc opcode_list[] = { /* 00 */ - &Scumm::o_stopObjectCode, - &Scumm::o_putActor, - &Scumm::o_startMusic, - &Scumm::o_getActorRoom, + &Scumm::o5_stopObjectCode, + &Scumm::o5_putActor, + &Scumm::o5_startMusic, + &Scumm::o5_getActorRoom, /* 04 */ - &Scumm::o_isGreaterEqual, - &Scumm::o_drawObject, - &Scumm::o_getActorElevation, - &Scumm::o_setState, + &Scumm::o5_isGreaterEqual, + &Scumm::o5_drawObject, + &Scumm::o5_getActorElevation, + &Scumm::o5_setState, /* 08 */ - &Scumm::o_isNotEqual, - &Scumm::o_faceActor, - &Scumm::o_startScript, - &Scumm::o_getVerbEntrypoint, + &Scumm::o5_isNotEqual, + &Scumm::o5_faceActor, + &Scumm::o5_startScript, + &Scumm::o5_getVerbEntrypoint, /* 0C */ - &Scumm::o_resourceRoutines, - &Scumm::o_walkActorToActor, - &Scumm::o_putActorAtObject, - &Scumm::o_getObjectState, + &Scumm::o5_resourceRoutines, + &Scumm::o5_walkActorToActor, + &Scumm::o5_putActorAtObject, + &Scumm::o5_getObjectState, /* 10 */ - &Scumm::o_getObjectOwner, - &Scumm::o_animateActor, - &Scumm::o_panCameraTo, - &Scumm::o_actorSet, + &Scumm::o5_getObjectOwner, + &Scumm::o5_animateActor, + &Scumm::o5_panCameraTo, + &Scumm::o5_actorSet, /* 14 */ - &Scumm::o_print, - &Scumm::o_actorFromPos, - &Scumm::o_getRandomNr, - &Scumm::o_and, + &Scumm::o5_print, + &Scumm::o5_actorFromPos, + &Scumm::o5_getRandomNr, + &Scumm::o5_and, /* 18 */ - &Scumm::o_jumpRelative, - &Scumm::o_doSentence, - &Scumm::o_move, - &Scumm::o_multiply, + &Scumm::o5_jumpRelative, + &Scumm::o5_doSentence, + &Scumm::o5_move, + &Scumm::o5_multiply, /* 1C */ - &Scumm::o_startSound, - &Scumm::o_ifClassOfIs, - &Scumm::o_walkActorTo, - &Scumm::o_isActorInBox, + &Scumm::o5_startSound, + &Scumm::o5_ifClassOfIs, + &Scumm::o5_walkActorTo, + &Scumm::o5_isActorInBox, /* 20 */ - &Scumm::o_stopMusic, - &Scumm::o_putActor, - &Scumm::o_getAnimCounter, - &Scumm::o_getActorY, + &Scumm::o5_stopMusic, + &Scumm::o5_putActor, + &Scumm::o5_getAnimCounter, + &Scumm::o5_getActorY, /* 24 */ - &Scumm::o_loadRoomWithEgo, - &Scumm::o_pickupObject, - &Scumm::o_setVarRange, - &Scumm::o_stringOps, + &Scumm::o5_loadRoomWithEgo, + &Scumm::o5_pickupObject, + &Scumm::o5_setVarRange, + &Scumm::o5_stringOps, /* 28 */ - &Scumm::o_equalZero, - &Scumm::o_setOwnerOf, - &Scumm::o_startScript, - &Scumm::o_delayVariable, + &Scumm::o5_equalZero, + &Scumm::o5_setOwnerOf, + &Scumm::o5_startScript, + &Scumm::o5_delayVariable, /* 2C */ - &Scumm::o_cursorCommand, - &Scumm::o_putActorInRoom, - &Scumm::o_delay, - &Scumm::o_badOpcode, + &Scumm::o5_cursorCommand, + &Scumm::o5_putActorInRoom, + &Scumm::o5_delay, + &Scumm::o5_badOpcode, /* 30 */ - &Scumm::o_matrixOps, - &Scumm::o_getInventoryCount, - &Scumm::o_setCameraAt, - &Scumm::o_roomOps, + &Scumm::o5_matrixOps, + &Scumm::o5_getInventoryCount, + &Scumm::o5_setCameraAt, + &Scumm::o5_roomOps, /* 34 */ - &Scumm::o_getDist, - &Scumm::o_findObject, - &Scumm::o_walkActorToObject, - &Scumm::o_startObject, + &Scumm::o5_getDist, + &Scumm::o5_findObject, + &Scumm::o5_walkActorToObject, + &Scumm::o5_startObject, /* 38 */ - &Scumm::o_lessOrEqual, - &Scumm::o_doSentence, - &Scumm::o_subtract, - &Scumm::o_getActorScale, + &Scumm::o5_lessOrEqual, + &Scumm::o5_doSentence, + &Scumm::o5_subtract, + &Scumm::o5_getActorScale, /* 3C */ - &Scumm::o_stopSound, - &Scumm::o_findInventory, - &Scumm::o_walkActorTo, - &Scumm::o_drawBox, + &Scumm::o5_stopSound, + &Scumm::o5_findInventory, + &Scumm::o5_walkActorTo, + &Scumm::o5_drawBox, /* 40 */ - &Scumm::o_cutscene, - &Scumm::o_putActor, - &Scumm::o_chainScript, - &Scumm::o_getActorX, + &Scumm::o5_cutscene, + &Scumm::o5_putActor, + &Scumm::o5_chainScript, + &Scumm::o5_getActorX, /* 44 */ - &Scumm::o_isLess, - &Scumm::o_badOpcode, - &Scumm::o_increment, - &Scumm::o_setState, + &Scumm::o5_isLess, + &Scumm::o5_badOpcode, + &Scumm::o5_increment, + &Scumm::o5_setState, /* 48 */ - &Scumm::o_isEqual, - &Scumm::o_faceActor, - &Scumm::o_startScript, - &Scumm::o_getVerbEntrypoint, + &Scumm::o5_isEqual, + &Scumm::o5_faceActor, + &Scumm::o5_startScript, + &Scumm::o5_getVerbEntrypoint, /* 4C */ - &Scumm::o_soundKludge, - &Scumm::o_walkActorToActor, - &Scumm::o_putActorAtObject, - &Scumm::o_badOpcode, + &Scumm::o5_soundKludge, + &Scumm::o5_walkActorToActor, + &Scumm::o5_putActorAtObject, + &Scumm::o5_badOpcode, /* 50 */ - &Scumm::o_badOpcode, - &Scumm::o_animateActor, - &Scumm::o_actorFollowCamera, - &Scumm::o_actorSet, + &Scumm::o5_badOpcode, + &Scumm::o5_animateActor, + &Scumm::o5_actorFollowCamera, + &Scumm::o5_actorSet, /* 54 */ - &Scumm::o_setObjectName, - &Scumm::o_actorFromPos, - &Scumm::o_getActorMoving, - &Scumm::o_or, + &Scumm::o5_setObjectName, + &Scumm::o5_actorFromPos, + &Scumm::o5_getActorMoving, + &Scumm::o5_or, /* 58 */ - &Scumm::o_overRide, - &Scumm::o_doSentence, - &Scumm::o_add, - &Scumm::o_divide, + &Scumm::o5_overRide, + &Scumm::o5_doSentence, + &Scumm::o5_add, + &Scumm::o5_divide, /* 5C */ - &Scumm::o_badOpcode, - &Scumm::o_actorSetClass, - &Scumm::o_walkActorTo, - &Scumm::o_isActorInBox, + &Scumm::o5_badOpcode, + &Scumm::o5_actorSetClass, + &Scumm::o5_walkActorTo, + &Scumm::o5_isActorInBox, /* 60 */ - &Scumm::o_freezeScripts, - &Scumm::o_putActor, - &Scumm::o_stopScript, - &Scumm::o_getActorFacing, + &Scumm::o5_freezeScripts, + &Scumm::o5_putActor, + &Scumm::o5_stopScript, + &Scumm::o5_getActorFacing, /* 64 */ - &Scumm::o_loadRoomWithEgo, - &Scumm::o_pickupObject, - &Scumm::o_getClosestObjActor, - &Scumm::o_dummy, + &Scumm::o5_loadRoomWithEgo, + &Scumm::o5_pickupObject, + &Scumm::o5_getClosestObjActor, + &Scumm::o5_dummy, /* 68 */ - &Scumm::o_getScriptRunning, - &Scumm::o_setOwnerOf, - &Scumm::o_startScript, - &Scumm::o_debug, + &Scumm::o5_getScriptRunning, + &Scumm::o5_setOwnerOf, + &Scumm::o5_startScript, + &Scumm::o5_debug, /* 6C */ - &Scumm::o_getActorWidth, - &Scumm::o_putActorInRoom, - &Scumm::o_stopObjectScript, - &Scumm::o_badOpcode, + &Scumm::o5_getActorWidth, + &Scumm::o5_putActorInRoom, + &Scumm::o5_stopObjectScript, + &Scumm::o5_badOpcode, /* 70 */ - &Scumm::o_lights, - &Scumm::o_getActorCostume, - &Scumm::o_loadRoom, - &Scumm::o_roomOps, + &Scumm::o5_lights, + &Scumm::o5_getActorCostume, + &Scumm::o5_loadRoom, + &Scumm::o5_roomOps, /* 74 */ - &Scumm::o_getDist, - &Scumm::o_findObject, - &Scumm::o_walkActorToObject, - &Scumm::o_startObject, + &Scumm::o5_getDist, + &Scumm::o5_findObject, + &Scumm::o5_walkActorToObject, + &Scumm::o5_startObject, /* 78 */ - &Scumm::o_isGreater, /* less? */ - &Scumm::o_doSentence, - &Scumm::o_verbOps, - &Scumm::o_getActorWalkBox, + &Scumm::o5_isGreater, /* less? */ + &Scumm::o5_doSentence, + &Scumm::o5_verbOps, + &Scumm::o5_getActorWalkBox, /* 7C */ - &Scumm::o_isSoundRunning, - &Scumm::o_findInventory, - &Scumm::o_walkActorTo, - &Scumm::o_drawBox, + &Scumm::o5_isSoundRunning, + &Scumm::o5_findInventory, + &Scumm::o5_walkActorTo, + &Scumm::o5_drawBox, /* 80 */ - &Scumm::o_breakHere, - &Scumm::o_putActor, - &Scumm::o_startMusic, - &Scumm::o_getActorRoom, + &Scumm::o5_breakHere, + &Scumm::o5_putActor, + &Scumm::o5_startMusic, + &Scumm::o5_getActorRoom, /* 84 */ - &Scumm::o_isGreaterEqual, /* less equal? */ - &Scumm::o_drawObject, - &Scumm::o_getActorElevation, - &Scumm::o_setState, + &Scumm::o5_isGreaterEqual, /* less equal? */ + &Scumm::o5_drawObject, + &Scumm::o5_getActorElevation, + &Scumm::o5_setState, /* 88 */ - &Scumm::o_isNotEqual, - &Scumm::o_faceActor, - &Scumm::o_startScript, - &Scumm::o_getVerbEntrypoint, + &Scumm::o5_isNotEqual, + &Scumm::o5_faceActor, + &Scumm::o5_startScript, + &Scumm::o5_getVerbEntrypoint, /* 8C */ - &Scumm::o_resourceRoutines, - &Scumm::o_walkActorToActor, - &Scumm::o_putActorAtObject, - &Scumm::o_getObjectState, + &Scumm::o5_resourceRoutines, + &Scumm::o5_walkActorToActor, + &Scumm::o5_putActorAtObject, + &Scumm::o5_getObjectState, /* 90 */ - &Scumm::o_getObjectOwner, - &Scumm::o_animateActor, - &Scumm::o_panCameraTo, - &Scumm::o_actorSet, + &Scumm::o5_getObjectOwner, + &Scumm::o5_animateActor, + &Scumm::o5_panCameraTo, + &Scumm::o5_actorSet, /* 94 */ - &Scumm::o_print, - &Scumm::o_actorFromPos, - &Scumm::o_getRandomNr, - &Scumm::o_and, + &Scumm::o5_print, + &Scumm::o5_actorFromPos, + &Scumm::o5_getRandomNr, + &Scumm::o5_and, /* 98 */ - &Scumm::o_quitPauseRestart, - &Scumm::o_doSentence, - &Scumm::o_move, - &Scumm::o_multiply, + &Scumm::o5_quitPauseRestart, + &Scumm::o5_doSentence, + &Scumm::o5_move, + &Scumm::o5_multiply, /* 9C */ - &Scumm::o_startSound, - &Scumm::o_ifClassOfIs, - &Scumm::o_walkActorTo, - &Scumm::o_isActorInBox, + &Scumm::o5_startSound, + &Scumm::o5_ifClassOfIs, + &Scumm::o5_walkActorTo, + &Scumm::o5_isActorInBox, /* A0 */ - &Scumm::o_stopObjectCode, - &Scumm::o_putActor, - &Scumm::o_getAnimCounter, - &Scumm::o_getActorY, + &Scumm::o5_stopObjectCode, + &Scumm::o5_putActor, + &Scumm::o5_getAnimCounter, + &Scumm::o5_getActorY, /* A4 */ - &Scumm::o_loadRoomWithEgo, - &Scumm::o_pickupObject, - &Scumm::o_setVarRange, - &Scumm::o_dummy, + &Scumm::o5_loadRoomWithEgo, + &Scumm::o5_pickupObject, + &Scumm::o5_setVarRange, + &Scumm::o5_dummy, /* A8 */ - &Scumm::o_notEqualZero, - &Scumm::o_setOwnerOf, - &Scumm::o_startScript, - &Scumm::o_saveRestoreVerbs, + &Scumm::o5_notEqualZero, + &Scumm::o5_setOwnerOf, + &Scumm::o5_startScript, + &Scumm::o5_saveRestoreVerbs, /* AC */ - &Scumm::o_expression, - &Scumm::o_putActorInRoom, - &Scumm::o_wait, - &Scumm::o_badOpcode, + &Scumm::o5_expression, + &Scumm::o5_putActorInRoom, + &Scumm::o5_wait, + &Scumm::o5_badOpcode, /* B0 */ - &Scumm::o_matrixOps, - &Scumm::o_getInventoryCount, - &Scumm::o_setCameraAt, - &Scumm::o_roomOps, + &Scumm::o5_matrixOps, + &Scumm::o5_getInventoryCount, + &Scumm::o5_setCameraAt, + &Scumm::o5_roomOps, /* B4 */ - &Scumm::o_getDist, - &Scumm::o_findObject, - &Scumm::o_walkActorToObject, - &Scumm::o_startObject, + &Scumm::o5_getDist, + &Scumm::o5_findObject, + &Scumm::o5_walkActorToObject, + &Scumm::o5_startObject, /* B8 */ - &Scumm::o_lessOrEqual, - &Scumm::o_doSentence, - &Scumm::o_subtract, - &Scumm::o_getActorScale, + &Scumm::o5_lessOrEqual, + &Scumm::o5_doSentence, + &Scumm::o5_subtract, + &Scumm::o5_getActorScale, /* BC */ - &Scumm::o_stopSound, - &Scumm::o_findInventory, - &Scumm::o_walkActorTo, - &Scumm::o_drawBox, + &Scumm::o5_stopSound, + &Scumm::o5_findInventory, + &Scumm::o5_walkActorTo, + &Scumm::o5_drawBox, /* C0 */ - &Scumm::o_endCutscene, - &Scumm::o_putActor, - &Scumm::o_chainScript, - &Scumm::o_getActorX, + &Scumm::o5_endCutscene, + &Scumm::o5_putActor, + &Scumm::o5_chainScript, + &Scumm::o5_getActorX, /* C4 */ - &Scumm::o_isLess, - &Scumm::o_badOpcode, - &Scumm::o_decrement, - &Scumm::o_setState, + &Scumm::o5_isLess, + &Scumm::o5_badOpcode, + &Scumm::o5_decrement, + &Scumm::o5_setState, /* C8 */ - &Scumm::o_isEqual, - &Scumm::o_faceActor, - &Scumm::o_startScript, - &Scumm::o_getVerbEntrypoint, + &Scumm::o5_isEqual, + &Scumm::o5_faceActor, + &Scumm::o5_startScript, + &Scumm::o5_getVerbEntrypoint, /* CC */ - &Scumm::o_pseudoRoom, - &Scumm::o_walkActorToActor, - &Scumm::o_putActorAtObject, - &Scumm::o_badOpcode, + &Scumm::o5_pseudoRoom, + &Scumm::o5_walkActorToActor, + &Scumm::o5_putActorAtObject, + &Scumm::o5_badOpcode, /* D0 */ - &Scumm::o_badOpcode, - &Scumm::o_animateActor, - &Scumm::o_actorFollowCamera, - &Scumm::o_actorSet, + &Scumm::o5_badOpcode, + &Scumm::o5_animateActor, + &Scumm::o5_actorFollowCamera, + &Scumm::o5_actorSet, /* D4 */ - &Scumm::o_setObjectName, - &Scumm::o_actorFromPos, - &Scumm::o_getActorMoving, - &Scumm::o_or, + &Scumm::o5_setObjectName, + &Scumm::o5_actorFromPos, + &Scumm::o5_getActorMoving, + &Scumm::o5_or, /* D8 */ - &Scumm::o_printEgo, - &Scumm::o_doSentence, - &Scumm::o_add, - &Scumm::o_divide, + &Scumm::o5_printEgo, + &Scumm::o5_doSentence, + &Scumm::o5_add, + &Scumm::o5_divide, /* DC */ - &Scumm::o_badOpcode, - &Scumm::o_actorSetClass, - &Scumm::o_walkActorTo, - &Scumm::o_isActorInBox, + &Scumm::o5_badOpcode, + &Scumm::o5_actorSetClass, + &Scumm::o5_walkActorTo, + &Scumm::o5_isActorInBox, /* E0 */ - &Scumm::o_freezeScripts, - &Scumm::o_putActor, - &Scumm::o_stopScript, - &Scumm::o_getActorFacing, + &Scumm::o5_freezeScripts, + &Scumm::o5_putActor, + &Scumm::o5_stopScript, + &Scumm::o5_getActorFacing, /* E4 */ - &Scumm::o_loadRoomWithEgo, - &Scumm::o_pickupObject, - &Scumm::o_getClosestObjActor, - &Scumm::o_dummy, + &Scumm::o5_loadRoomWithEgo, + &Scumm::o5_pickupObject, + &Scumm::o5_getClosestObjActor, + &Scumm::o5_dummy, /* E8 */ - &Scumm::o_getScriptRunning, - &Scumm::o_setOwnerOf, - &Scumm::o_startScript, - &Scumm::o_debug, + &Scumm::o5_getScriptRunning, + &Scumm::o5_setOwnerOf, + &Scumm::o5_startScript, + &Scumm::o5_debug, /* EC */ - &Scumm::o_getActorWidth, - &Scumm::o_putActorInRoom, - &Scumm::o_stopObjectScript, - &Scumm::o_badOpcode, + &Scumm::o5_getActorWidth, + &Scumm::o5_putActorInRoom, + &Scumm::o5_stopObjectScript, + &Scumm::o5_badOpcode, /* F0 */ - &Scumm::o_lights, - &Scumm::o_getActorCostume, - &Scumm::o_loadRoom, - &Scumm::o_roomOps, + &Scumm::o5_lights, + &Scumm::o5_getActorCostume, + &Scumm::o5_loadRoom, + &Scumm::o5_roomOps, /* F4 */ - &Scumm::o_getDist, - &Scumm::o_findObject, - &Scumm::o_walkActorToObject, - &Scumm::o_startObject, + &Scumm::o5_getDist, + &Scumm::o5_findObject, + &Scumm::o5_walkActorToObject, + &Scumm::o5_startObject, /* F8 */ - &Scumm::o_isGreater, - &Scumm::o_doSentence, - &Scumm::o_verbOps, - &Scumm::o_getActorWalkBox, + &Scumm::o5_isGreater, + &Scumm::o5_doSentence, + &Scumm::o5_verbOps, + &Scumm::o5_getActorWalkBox, /* FC */ - &Scumm::o_isSoundRunning, - &Scumm::o_findInventory, - &Scumm::o_walkActorTo, - &Scumm::o_drawBox + &Scumm::o5_isSoundRunning, + &Scumm::o5_findInventory, + &Scumm::o5_walkActorTo, + &Scumm::o5_drawBox }; _opcodes = opcode_list; } -void Scumm::o_actorFollowCamera() { +void Scumm::o5_actorFollowCamera() { actorFollowCamera(getVarOrDirectByte(0x80)); } -void Scumm::o_actorFromPos() { +void Scumm::o5_actorFromPos() { int x,y; getResultPos(); x = getVarOrDirectWord(0x80); @@ -370,7 +372,7 @@ void Scumm::o_actorFromPos() { setResult(getActorFromPos(x,y)); } -void Scumm::o_actorSet() { +void Scumm::o5_actorSet() { int act = getVarOrDirectByte(0x80); Actor *a = derefActorSafe(act, "actorSet"); int i,j; @@ -435,7 +437,7 @@ void Scumm::o_actorSet() { a->initFrame = getVarOrDirectByte(0x80); break; case 15: /* unk */ - error("o_actorset:unk not implemented"); + error("o5_actorset:unk not implemented"); break; case 16: /* width */ a->width = getVarOrDirectByte(0x80); @@ -472,12 +474,12 @@ FixRoom: a->data8 = getVarOrDirectByte(0x80); /* unused */ break; default: - error("o_actorSet: default case"); + error("o5_actorSet: default case"); } } } -void Scumm::o_actorSetClass() { +void Scumm::o5_actorSetClass() { int act = getVarOrDirectWord(0x80); int i; @@ -494,21 +496,21 @@ void Scumm::o_actorSetClass() { } } -void Scumm::o_add() { +void Scumm::o5_add() { int a; getResultPos(); a = getVarOrDirectWord(0x80); setResult(readVar(_resultVarNumber) + a); } -void Scumm::o_and() { +void Scumm::o5_and() { int a; getResultPos(); a = getVarOrDirectWord(0x80); setResult(readVar(_resultVarNumber) & a); } -void Scumm::o_animateActor() { +void Scumm::o5_animateActor() { int act, anim; act = getVarOrDirectByte(0x80); @@ -516,16 +518,16 @@ void Scumm::o_animateActor() { animateActor(act,anim); } -void Scumm::o_badOpcode() { +void Scumm::o5_badOpcode() { error("Scumm opcode %d illegal", _opcode); } -void Scumm::o_breakHere() { +void Scumm::o5_breakHere() { updateScriptPtr(); _currentScript = 0xFF; } -void Scumm::o_chainScript() { +void Scumm::o5_chainScript() { int16 vars[16]; int data; int cur; @@ -547,7 +549,7 @@ void Scumm::o_chainScript() { runScript(data, vm.slot[cur].unk1, vm.slot[cur].unk2, vars); } -void Scumm::o_cursorCommand() { +void Scumm::o5_cursorCommand() { int i,j,k; int16 table[16]; @@ -612,41 +614,41 @@ void Scumm::o_cursorCommand() { _vars[VAR_USERPUT] = _userPut; } -void Scumm::o_cutscene() { +void Scumm::o5_cutscene() { int16 args[16]; getWordVararg(args); cutscene(args); } -void Scumm::o_endCutscene() { +void Scumm::o5_endCutscene() { endCutscene(); } -void Scumm::o_debug() { +void Scumm::o5_debug() { getVarOrDirectWord(0x80); } -void Scumm::o_decrement() { +void Scumm::o5_decrement() { getResultPos(); setResult(readVar(_resultVarNumber)-1); } -void Scumm::o_delay() { +void Scumm::o5_delay() { int delay = fetchScriptByte(); delay |= fetchScriptByte()<<8; delay |= fetchScriptByte()<<16; vm.slot[_currentScript].delay = delay; vm.slot[_currentScript].status = 1; - o_breakHere(); + o5_breakHere(); } -void Scumm::o_delayVariable() { +void Scumm::o5_delayVariable() { vm.slot[_currentScript].delay = readVar(fetchScriptWord()); vm.slot[_currentScript].status = 1; - o_breakHere(); + o5_breakHere(); } -void Scumm::o_divide() { +void Scumm::o5_divide() { int a; getResultPos(); a = getVarOrDirectWord(0x80); @@ -657,7 +659,7 @@ void Scumm::o_divide() { setResult(readVar(_resultVarNumber) / a); } -void Scumm::o_doSentence() { +void Scumm::o5_doSentence() { int a,b; SentenceTab *st; @@ -684,7 +686,7 @@ void Scumm::o_doSentence() { st->unk = 0; } -void Scumm::o_drawBox() { +void Scumm::o5_drawBox() { int x,y,x2,y2,color; x = getVarOrDirectWord(0x80); @@ -698,7 +700,7 @@ void Scumm::o_drawBox() { drawBox(x, y, x2, y2, color); } -void Scumm::o_drawObject() { +void Scumm::o5_drawObject() { int state,obj,index,i; ObjectData *od; byte x,y,w,h; @@ -718,7 +720,7 @@ void Scumm::o_drawObject() { case 0x1F: /* neither */ break; default: - error("o_drawObject: default case"); + error("o5_drawObject: default case"); } index = getObjectIndex(obj); if (index==-1) @@ -747,12 +749,12 @@ void Scumm::o_drawObject() { putState(obj, state); } -void Scumm::o_dummy() { +void Scumm::o5_dummy() { /* nothing */ } -void Scumm::o_expression() { +void Scumm::o5_expression() { int dst, i; _scummStackPos = 0; @@ -794,28 +796,28 @@ void Scumm::o_expression() { setResult(pop()); } -void Scumm::o_faceActor() { +void Scumm::o5_faceActor() { int act, obj; act = getVarOrDirectByte(0x80); obj = getVarOrDirectWord(0x40); faceActorToObj(act, obj); } -void Scumm::o_findInventory() { +void Scumm::o5_findInventory() { int t; getResultPos(); t = getVarOrDirectByte(0x80); setResult(findInventory(t,getVarOrDirectByte(0x40))); } -void Scumm::o_findObject() { +void Scumm::o5_findObject() { int t; getResultPos(); t = getVarOrDirectWord(0x80); setResult(findObject(t, getVarOrDirectWord(0x40))); } -void Scumm::o_freezeScripts() { +void Scumm::o5_freezeScripts() { int scr = getVarOrDirectByte(0x80); if (scr!=0) @@ -824,62 +826,62 @@ void Scumm::o_freezeScripts() { unfreezeScripts(); } -void Scumm::o_getActorCostume() { +void Scumm::o5_getActorCostume() { getResultPos(); - setResult(derefActorSafe(getVarOrDirectByte(0x80),"o_getActorCostume")->costume); + setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorCostume")->costume); } -void Scumm::o_getActorElevation() { +void Scumm::o5_getActorElevation() { getResultPos(); - setResult(derefActorSafe(getVarOrDirectByte(0x80),"o_getActorElevation")->elevation); + setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorElevation")->elevation); } -void Scumm::o_getActorFacing() { +void Scumm::o5_getActorFacing() { getResultPos(); - setResult(derefActorSafe(getVarOrDirectByte(0x80),"o_getActorFacing")->facing); + setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorFacing")->facing); } -void Scumm::o_getActorMoving() { +void Scumm::o5_getActorMoving() { getResultPos(); - setResult(derefActorSafe(getVarOrDirectByte(0x80),"o_getActorMoving")->moving); + setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorMoving")->moving); } -void Scumm::o_getActorRoom() { +void Scumm::o5_getActorRoom() { getResultPos(); - setResult(derefActorSafe(getVarOrDirectByte(0x80),"o_getActorRoom")->room); + setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorRoom")->room); } -void Scumm::o_getActorScale() { +void Scumm::o5_getActorScale() { getResultPos(); - setResult(derefActorSafe(getVarOrDirectByte(0x80),"o_getActorScale")->scalex); + setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorScale")->scalex); } -void Scumm::o_getActorWalkBox() { +void Scumm::o5_getActorWalkBox() { getResultPos(); - setResult(derefActorSafe(getVarOrDirectByte(0x80),"o_getActorWalkbox")->walkbox); + setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorWalkbox")->walkbox); } -void Scumm::o_getActorWidth() { +void Scumm::o5_getActorWidth() { getResultPos(); - setResult(derefActorSafe(getVarOrDirectByte(0x80),"o_getActorWidth")->width); + setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorWidth")->width); } -void Scumm::o_getActorX() { +void Scumm::o5_getActorX() { getResultPos(); setResult(getObjX(getVarOrDirectWord(0x80))); } -void Scumm::o_getActorY() { +void Scumm::o5_getActorY() { getResultPos(); setResult(getObjY(getVarOrDirectWord(0x80))); } -void Scumm::o_getAnimCounter() { +void Scumm::o5_getAnimCounter() { getResultPos(); - setResult(derefActorSafe(getVarOrDirectByte(0x80),"o_getActorAnimCounter")->cost.animCounter1); + setResult(derefActorSafe(getVarOrDirectByte(0x80),"o5_getActorAnimCounter")->cost.animCounter1); } -void Scumm::o_getClosestObjActor() { +void Scumm::o5_getClosestObjActor() { int obj; int act; int closobj=-1, closnum=-1; @@ -901,7 +903,7 @@ void Scumm::o_getClosestObjActor() { setResult(closnum); } -void Scumm::o_getDist() { +void Scumm::o5_getDist() { int o1,o2; getResultPos(); o1 = getVarOrDirectWord(0x80); @@ -909,32 +911,32 @@ void Scumm::o_getDist() { setResult(getObjActToObjActDist(o1,o2)); } -void Scumm::o_getInventoryCount() { +void Scumm::o5_getInventoryCount() { getResultPos(); setResult(getInventoryCount(getVarOrDirectByte(0x80))); } -void Scumm::o_getObjectOwner() { +void Scumm::o5_getObjectOwner() { getResultPos(); setResult(getOwner(getVarOrDirectWord(0x80))); } -void Scumm::o_getObjectState() { +void Scumm::o5_getObjectState() { getResultPos(); setResult(getState(getVarOrDirectWord(0x80))); } -void Scumm::o_getRandomNr() { +void Scumm::o5_getRandomNr() { getResultPos(); setResult(getRandomNumber(getVarOrDirectByte(0x80)+1)); } -void Scumm::o_getScriptRunning() { +void Scumm::o5_getScriptRunning() { getResultPos(); setResult(getScriptRunning(getVarOrDirectByte(0x80))); } -void Scumm::o_getVerbEntrypoint() { +void Scumm::o5_getVerbEntrypoint() { int a,b; getResultPos(); a = getVarOrDirectWord(0x80); @@ -942,7 +944,7 @@ void Scumm::o_getVerbEntrypoint() { setResult(getVerbEntrypoint(a, b)); } -void Scumm::o_ifClassOfIs() { +void Scumm::o5_ifClassOfIs() { int act,cls; bool cond = true, b; @@ -957,83 +959,83 @@ void Scumm::o_ifClassOfIs() { if (cond) ignoreScriptWord(); else - o_jumpRelative(); + o5_jumpRelative(); } -void Scumm::o_increment() { +void Scumm::o5_increment() { getResultPos(); setResult(readVar(_resultVarNumber)+1); } -void Scumm::o_isActorInBox() { +void Scumm::o5_isActorInBox() { int box; Actor *a; - a = derefActorSafe(getVarOrDirectByte(0x80), "o_isActorInBox"); + a = derefActorSafe(getVarOrDirectByte(0x80), "o5_isActorInBox"); box = getVarOrDirectByte(0x40); if (!checkXYInBoxBounds(box, a->x, a->y)) - o_jumpRelative(); + o5_jumpRelative(); else ignoreScriptWord(); } -void Scumm::o_isEqual() { +void Scumm::o5_isEqual() { int16 a = readVar(fetchScriptWord()); int16 b = getVarOrDirectWord(0x80); if (b == a) ignoreScriptWord(); - else o_jumpRelative(); + else o5_jumpRelative(); } -void Scumm::o_isGreater() { +void Scumm::o5_isGreater() { int16 a = readVar(fetchScriptWord()); int16 b = getVarOrDirectWord(0x80); if (b > a) ignoreScriptWord(); - else o_jumpRelative(); + else o5_jumpRelative(); } -void Scumm::o_isGreaterEqual() { +void Scumm::o5_isGreaterEqual() { int16 a = readVar(fetchScriptWord()); int16 b = getVarOrDirectWord(0x80); if (b >= a) ignoreScriptWord(); - else o_jumpRelative(); + else o5_jumpRelative(); } -void Scumm::o_isLess() { +void Scumm::o5_isLess() { int16 a = readVar(fetchScriptWord()); int16 b = getVarOrDirectWord(0x80); if (b < a) ignoreScriptWord(); - else o_jumpRelative(); + else o5_jumpRelative(); } -void Scumm::o_lessOrEqual() { +void Scumm::o5_lessOrEqual() { int16 a = readVar(fetchScriptWord()); int16 b = getVarOrDirectWord(0x80); if (b <= a) ignoreScriptWord(); - else o_jumpRelative(); + else o5_jumpRelative(); } -void Scumm::o_isNotEqual() { +void Scumm::o5_isNotEqual() { int16 a = readVar(fetchScriptWord()); int16 b = getVarOrDirectWord(0x80); if (b != a) ignoreScriptWord(); - else o_jumpRelative(); + else o5_jumpRelative(); } -void Scumm::o_notEqualZero() { +void Scumm::o5_notEqualZero() { int a = readVar(fetchScriptWord()); if (a != 0) ignoreScriptWord(); - else o_jumpRelative(); + else o5_jumpRelative(); } -void Scumm::o_equalZero() { +void Scumm::o5_equalZero() { int a = readVar(fetchScriptWord()); if (a == 0) ignoreScriptWord(); - else o_jumpRelative(); + else o5_jumpRelative(); } -void Scumm::o_isSoundRunning() { +void Scumm::o5_isSoundRunning() { int snd; getResultPos(); snd = getVarOrDirectByte(0x80); @@ -1042,11 +1044,11 @@ void Scumm::o_isSoundRunning() { setResult(snd); } -void Scumm::o_jumpRelative() { +void Scumm::o5_jumpRelative() { _scriptPointer += (int16)fetchScriptWord(); } -void Scumm::o_lights() { +void Scumm::o5_lights() { int a,b,c; a = getVarOrDirectByte(0x80); @@ -1061,21 +1063,21 @@ void Scumm::o_lights() { _fullRedraw=1; } -void Scumm::o_loadRoom() { +void Scumm::o5_loadRoom() { int room = getVarOrDirectByte(0x80); debug(1,"Loading room %d", room); startScene(room, 0, 0); _fullRedraw = 1; } -void Scumm::o_loadRoomWithEgo() { +void Scumm::o5_loadRoomWithEgo() { int obj, room, x,y; Actor *a; obj = getVarOrDirectWord(0x80); room = getVarOrDirectByte(0x40); - a = derefActorSafe(_vars[VAR_UNK_ACTOR], "o_loadRoomWithEgo"); + a = derefActorSafe(_vars[VAR_UNK_ACTOR], "o5_loadRoomWithEgo"); /* Warning: uses _xPos, _yPos from a previous update of those */ putActor(a, _xPos, _yPos, room); @@ -1099,7 +1101,7 @@ void Scumm::o_loadRoomWithEgo() { } } -void Scumm::o_matrixOps() { +void Scumm::o5_matrixOps() { int a,b; _opcode = fetchScriptByte(); @@ -1125,12 +1127,12 @@ void Scumm::o_matrixOps() { } } -void Scumm::o_move() { +void Scumm::o5_move() { getResultPos(); setResult(getVarOrDirectWord(0x80)); } -void Scumm::o_multiply() { +void Scumm::o5_multiply() { int a; getResultPos(); a = getVarOrDirectWord(0x80); @@ -1138,25 +1140,25 @@ void Scumm::o_multiply() { } -void Scumm::o_or() { +void Scumm::o5_or() { int a; getResultPos(); a = getVarOrDirectWord(0x80); setResult(readVar(_resultVarNumber) | a); } -void Scumm::o_overRide() { +void Scumm::o5_overRide() { if(fetchScriptByte()!=0) beginOverride(); else endOverride(); } -void Scumm::o_panCameraTo() { +void Scumm::o5_panCameraTo() { panCameraTo(getVarOrDirectWord(0x80)); } -void Scumm::o_pickupObject() { +void Scumm::o5_pickupObject() { int obj, room; obj = getVarOrDirectWord(0x80); @@ -1172,17 +1174,17 @@ void Scumm::o_pickupObject() { runHook(1); } -void Scumm::o_print() { +void Scumm::o5_print() { _actorToPrintStrFor = getVarOrDirectByte(0x80); decodeParseString(); } -void Scumm::o_printEgo() { +void Scumm::o5_printEgo() { _actorToPrintStrFor = _vars[VAR_UNK_ACTOR]; decodeParseString(); } -void Scumm::o_pseudoRoom() { +void Scumm::o5_pseudoRoom() { int i = fetchScriptByte(), j; while ((j = fetchScriptByte()) != 0) { if (j >= 0x80) { @@ -1191,11 +1193,11 @@ void Scumm::o_pseudoRoom() { } } -void Scumm::o_putActor() { +void Scumm::o5_putActor() { int x,y; Actor *a; - a = derefActorSafe(getVarOrDirectByte(0x80), "o_putActor"); + a = derefActorSafe(getVarOrDirectByte(0x80), "o5_putActor"); x = getVarOrDirectWord(0x40); y = getVarOrDirectWord(0x20); @@ -1203,11 +1205,11 @@ void Scumm::o_putActor() { } -void Scumm::o_putActorAtObject() { +void Scumm::o5_putActorAtObject() { int obj; Actor *a; - a = derefActorSafe(getVarOrDirectByte(0x80), "o_putActorAtObject"); + a = derefActorSafe(getVarOrDirectByte(0x80), "o5_putActorAtObject"); obj = getVarOrDirectWord(0x40); if (whereIsObject(obj)!=-1) getObjectXYPos(obj); @@ -1218,11 +1220,11 @@ void Scumm::o_putActorAtObject() { putActor(a, _xPos, _yPos, a->room); } -void Scumm::o_putActorInRoom() { +void Scumm::o5_putActorInRoom() { int room; Actor *a; - a = derefActorSafe(getVarOrDirectByte(0x80), "o_putActorInRoom"); + a = derefActorSafe(getVarOrDirectByte(0x80), "o5_putActorInRoom"); room = getVarOrDirectByte(0x40); if (a->visible && _currentRoom!=room && _vars[VAR_TALK_ACTOR]==a->number) { clearMsgQueue(); @@ -1232,7 +1234,7 @@ void Scumm::o_putActorInRoom() { putActor(a, 0, 0, 0); } -void Scumm::o_quitPauseRestart() { +void Scumm::o5_quitPauseRestart() { switch(fetchScriptByte()) { case 1: pauseGame(0); @@ -1243,7 +1245,7 @@ void Scumm::o_quitPauseRestart() { } } -void Scumm::o_resourceRoutines() { +void Scumm::o5_resourceRoutines() { int res; _opcode = fetchScriptByte(); @@ -1322,7 +1324,7 @@ void Scumm::o_resourceRoutines() { } } -void Scumm::o_roomOps() { +void Scumm::o5_roomOps() { int a,b,c,d,e; _opcode = fetchScriptByte(); @@ -1436,7 +1438,7 @@ void Scumm::o_roomOps() { } } -void Scumm::o_saveRestoreVerbs() { +void Scumm::o5_saveRestoreVerbs() { int a,b,c,slot, slot2; _opcode = fetchScriptByte(); @@ -1481,15 +1483,15 @@ void Scumm::o_saveRestoreVerbs() { } break; default: - error("o_saveRestoreVerbs: invalid opcode"); + error("o5_saveRestoreVerbs: invalid opcode"); } } -void Scumm::o_setCameraAt() { +void Scumm::o5_setCameraAt() { setCameraAtEx(getVarOrDirectWord(0x80)); } -void Scumm::o_setObjectName() { +void Scumm::o5_setObjectName() { int act = getVarOrDirectWord(0x80); int size; int a; @@ -1521,7 +1523,7 @@ void Scumm::o_setObjectName() { runHook(0); } -void Scumm::o_setOwnerOf() { +void Scumm::o5_setOwnerOf() { int obj, owner; obj = getVarOrDirectWord(0x80); @@ -1530,7 +1532,7 @@ void Scumm::o_setOwnerOf() { setOwnerOf(obj, owner); } -void Scumm::o_setState() { +void Scumm::o5_setState() { int obj, state; obj = getVarOrDirectWord(0x80); state = getVarOrDirectByte(0x40); @@ -1540,7 +1542,7 @@ void Scumm::o_setState() { clearDrawObjectQueue(); } -void Scumm::o_setVarRange() { +void Scumm::o5_setVarRange() { int a,b; getResultPos(); @@ -1556,7 +1558,7 @@ void Scumm::o_setVarRange() { } while (--a); } -void Scumm::o_soundKludge() { +void Scumm::o5_soundKludge() { int16 items[15]; int i; @@ -1569,11 +1571,11 @@ void Scumm::o_soundKludge() { } -void Scumm::o_startMusic() { +void Scumm::o5_startMusic() { addSoundToQueue(getVarOrDirectByte(0x80)); } -void Scumm::o_startObject() { +void Scumm::o5_startObject() { int obj, script; int16 data[16]; @@ -1584,7 +1586,7 @@ void Scumm::o_startObject() { runVerbCode(obj, script, 0, 0, data); } -void Scumm::o_startScript() { +void Scumm::o5_startScript() { int op,script; int16 data[16]; int a,b; @@ -1601,24 +1603,24 @@ void Scumm::o_startScript() { runScript(script, a, b, data); } -void Scumm::o_startSound() { +void Scumm::o5_startSound() { addSoundToQueue(getVarOrDirectByte(0x80)); } -void Scumm::o_stopMusic() { +void Scumm::o5_stopMusic() { /* TODO: not implemented */ - warning("o_stopMusic: not implemented"); + warning("o5_stopMusic: not implemented"); } -void Scumm::o_stopObjectCode() { +void Scumm::o5_stopObjectCode() { stopObjectCode(); } -void Scumm::o_stopObjectScript() { +void Scumm::o5_stopObjectScript() { stopObjectScript(getVarOrDirectWord(0x80)); } -void Scumm::o_stopScript() { +void Scumm::o5_stopScript() { int script; script = getVarOrDirectByte(0x80); @@ -1628,11 +1630,11 @@ void Scumm::o_stopScript() { stopScriptNr(script); } -void Scumm::o_stopSound() { +void Scumm::o5_stopSound() { unkSoundProc1(getVarOrDirectByte(0x80)); } -void Scumm::o_stringOps() { +void Scumm::o5_stringOps() { int a,b,c,i; byte *ptr; @@ -1681,14 +1683,14 @@ void Scumm::o_stringOps() { } } -void Scumm::o_subtract() { +void Scumm::o5_subtract() { int a; getResultPos(); a = getVarOrDirectWord(0x80); setResult(readVar(_resultVarNumber) - a); } -void Scumm::o_verbOps() { +void Scumm::o5_verbOps() { int verb,slot; VerbSlot *vs; int a,b; @@ -1803,7 +1805,7 @@ void Scumm::o_verbOps() { verbMouseOver(0); } -void Scumm::o_wait() { +void Scumm::o5_wait() { byte *oldaddr; oldaddr = _scriptPointer - 1; @@ -1811,7 +1813,7 @@ void Scumm::o_wait() { _opcode = fetchScriptByte(); switch(_opcode&0x1F) { case 1: /* wait for actor */ - if (derefActorSafe(getVarOrDirectByte(0x80), "o_wait")->moving) + if (derefActorSafe(getVarOrDirectByte(0x80), "o5_wait")->moving) break; return; case 2: /* wait for message */ @@ -1833,35 +1835,35 @@ void Scumm::o_wait() { return; break; default: - error("o_wait: default case"); + error("o5_wait: default case"); return; } _scriptPointer = oldaddr; - o_breakHere(); + o5_breakHere(); } -void Scumm::o_walkActorTo() { +void Scumm::o5_walkActorTo() { int x, y; Actor *a; - a = derefActorSafe(getVarOrDirectByte(0x80), "o_walkActorTo"); + a = derefActorSafe(getVarOrDirectByte(0x80), "o5_walkActorTo"); x = getVarOrDirectWord(0x40); y = getVarOrDirectWord(0x20); startWalkActor(a, x, y, 0xFF); } -void Scumm::o_walkActorToActor() { +void Scumm::o5_walkActorToActor() { int b,x,y; Actor *a, *a2; - a = derefActorSafe(getVarOrDirectByte(0x80), "o_walkActorToActor"); + a = derefActorSafe(getVarOrDirectByte(0x80), "o5_walkActorToActor"); if (a->room != _currentRoom) { getVarOrDirectByte(0x40); fetchScriptByte(); return; } - a2 = derefActorSafe(getVarOrDirectByte(0x40), "o_walkActorToActor(2)"); + a2 = derefActorSafe(getVarOrDirectByte(0x40), "o5_walkActorToActor(2)"); if (a2->room != _currentRoom) { fetchScriptByte(); return; @@ -1881,11 +1883,11 @@ void Scumm::o_walkActorToActor() { startWalkActor(a, x, y, 0xFF); } -void Scumm::o_walkActorToObject() { +void Scumm::o5_walkActorToObject() { int obj; Actor *a; - a = derefActorSafe(getVarOrDirectByte(0x80), "o_walkActorToObject"); + a = derefActorSafe(getVarOrDirectByte(0x80), "o5_walkActorToObject"); obj = getVarOrDirectWord(0x40); if (whereIsObject(obj)!=-1) { getObjectXYPos(obj); @@ -1995,4 +1997,3 @@ void Scumm::decodeParseString() { } -#endif
\ No newline at end of file diff --git a/script_v2.cpp b/script_v2.cpp index d27bfd2507..3687b6d9ee 100644 --- a/script_v2.cpp +++ b/script_v2.cpp @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.2 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.1 2001/10/16 10:01:47 strigeus * preliminary DOTT support * @@ -26,330 +30,328 @@ #include "stdafx.h" #include "scumm.h" -#if defined(DOTT) - void Scumm::setupOpcodes2() { static const OpcodeProc opcode_list[256] = { /* 00 */ - &Scumm::o2_pushByte, - &Scumm::o2_pushWord, - &Scumm::o2_pushByteVar, - &Scumm::o2_pushWordVar, + &Scumm::o6_pushByte, + &Scumm::o6_pushWord, + &Scumm::o6_pushByteVar, + &Scumm::o6_pushWordVar, /* 04 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_byteArrayRead, - &Scumm::o2_wordArrayRead, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_byteArrayRead, + &Scumm::o6_wordArrayRead, /* 08 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_byteArrayIndexedRead, - &Scumm::o2_wordArrayIndexedRead, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_byteArrayIndexedRead, + &Scumm::o6_wordArrayIndexedRead, /* 0C */ - &Scumm::o2_dup, - &Scumm::o2_zero, - &Scumm::o2_eq, - &Scumm::o2_neq, + &Scumm::o6_dup, + &Scumm::o6_zero, + &Scumm::o6_eq, + &Scumm::o6_neq, /* 10 */ - &Scumm::o2_gt, - &Scumm::o2_lt, - &Scumm::o2_le, - &Scumm::o2_ge, + &Scumm::o6_gt, + &Scumm::o6_lt, + &Scumm::o6_le, + &Scumm::o6_ge, /* 14 */ - &Scumm::o2_add, - &Scumm::o2_sub, - &Scumm::o2_mul, - &Scumm::o2_div, + &Scumm::o6_add, + &Scumm::o6_sub, + &Scumm::o6_mul, + &Scumm::o6_div, /* 18 */ - &Scumm::o2_land, - &Scumm::o2_lor, - &Scumm::o2_kill, - &Scumm::o2_invalid, + &Scumm::o6_land, + &Scumm::o6_lor, + &Scumm::o6_kill, + &Scumm::o6_invalid, /* 1C */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* 20 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* 24 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* 28 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* 2C */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* 30 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* 34 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* 38 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* 3C */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* 40 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_writeByteVar, - &Scumm::o2_writeWordVar, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_writeByteVar, + &Scumm::o6_writeWordVar, /* 44 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_byteArrayWrite, - &Scumm::o2_wordArrayWrite, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_byteArrayWrite, + &Scumm::o6_wordArrayWrite, /* 48 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_byteArrayIndexedWrite, - &Scumm::o2_wordArrayIndexedWrite, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_byteArrayIndexedWrite, + &Scumm::o6_wordArrayIndexedWrite, /* 4C */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_byteVarInc, - &Scumm::o2_wordVarInc, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_byteVarInc, + &Scumm::o6_wordVarInc, /* 50 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_byteArrayInc, - &Scumm::o2_wordArrayInc, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_byteArrayInc, + &Scumm::o6_wordArrayInc, /* 54 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_byteVarDec, - &Scumm::o2_wordVarDec, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_byteVarDec, + &Scumm::o6_wordVarDec, /* 58 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_byteArrayDec, - &Scumm::o2_wordArrayDec, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_byteArrayDec, + &Scumm::o6_wordArrayDec, /* 5C */ - &Scumm::o2_jumpTrue, - &Scumm::o2_jumpFalse, - &Scumm::o2_startScriptEx, - &Scumm::o2_startScript, + &Scumm::o6_jumpTrue, + &Scumm::o6_jumpFalse, + &Scumm::o6_startScriptEx, + &Scumm::o6_startScript, /* 60 */ - &Scumm::o2_startObject, - &Scumm::o2_setObjectState, - &Scumm::o2_setObjectXY, - &Scumm::o2_invalid, + &Scumm::o6_startObject, + &Scumm::o6_setObjectState, + &Scumm::o6_setObjectXY, + &Scumm::o6_invalid, /* 64 */ - &Scumm::o2_invalid, - &Scumm::o2_stopObjectCode, - &Scumm::o2_stopObjectCode, - &Scumm::o2_endCutscene, + &Scumm::o6_invalid, + &Scumm::o6_stopObjectCode, + &Scumm::o6_stopObjectCode, + &Scumm::o6_endCutscene, /* 68 */ - &Scumm::o2_cutScene, - &Scumm::o2_stopMusic, - &Scumm::o2_freezeUnfreeze, - &Scumm::o2_cursorCommand, + &Scumm::o6_cutScene, + &Scumm::o6_stopMusic, + &Scumm::o6_freezeUnfreeze, + &Scumm::o6_cursorCommand, /* 6C */ - &Scumm::o2_breakHere, - &Scumm::o2_ifClassOfIs, - &Scumm::o2_setClass, - &Scumm::o2_getState, + &Scumm::o6_breakHere, + &Scumm::o6_ifClassOfIs, + &Scumm::o6_setClass, + &Scumm::o6_getState, /* 70 */ - &Scumm::o2_setState, - &Scumm::o2_setOwner, - &Scumm::o2_getOwner, - &Scumm::o2_jump, + &Scumm::o6_setState, + &Scumm::o6_setOwner, + &Scumm::o6_getOwner, + &Scumm::o6_jump, /* 74 */ - &Scumm::o2_startSound, - &Scumm::o2_stopSound, - &Scumm::o2_startMusic, - &Scumm::o2_stopObjectScript, + &Scumm::o6_startSound, + &Scumm::o6_stopSound, + &Scumm::o6_startMusic, + &Scumm::o6_stopObjectScript, /* 78 */ - &Scumm::o2_panCameraTo, - &Scumm::o2_actorFollowCamera, - &Scumm::o2_setCameraAt, - &Scumm::o2_loadRoom, + &Scumm::o6_panCameraTo, + &Scumm::o6_actorFollowCamera, + &Scumm::o6_setCameraAt, + &Scumm::o6_loadRoom, /* 7C */ - &Scumm::o2_stopScript, - &Scumm::o2_walkActorToObj, - &Scumm::o2_walkActorTo, - &Scumm::o2_putActorInRoom, + &Scumm::o6_stopScript, + &Scumm::o6_walkActorToObj, + &Scumm::o6_walkActorTo, + &Scumm::o6_putActorInRoom, /* 80 */ - &Scumm::o2_putActorAtObject, - &Scumm::o2_faceActor, - &Scumm::o2_animateActor, - &Scumm::o2_doSentence, + &Scumm::o6_putActorAtObject, + &Scumm::o6_faceActor, + &Scumm::o6_animateActor, + &Scumm::o6_doSentence, /* 84 */ - &Scumm::o2_pickupObject, - &Scumm::o2_loadRoomWithEgo, - &Scumm::o2_invalid, - &Scumm::o2_getRandomNumber, + &Scumm::o6_pickupObject, + &Scumm::o6_loadRoomWithEgo, + &Scumm::o6_invalid, + &Scumm::o6_getRandomNumber, /* 88 */ - &Scumm::o2_getRandomNumberRange, - &Scumm::o2_invalid, - &Scumm::o2_getActorMoving, - &Scumm::o2_getScriptRunning, + &Scumm::o6_getRandomNumberRange, + &Scumm::o6_invalid, + &Scumm::o6_getActorMoving, + &Scumm::o6_getScriptRunning, /* 8C */ - &Scumm::o2_getActorRoom, - &Scumm::o2_getObjectX, - &Scumm::o2_getObjectY, - &Scumm::o2_getObjectDir, + &Scumm::o6_getActorRoom, + &Scumm::o6_getObjectX, + &Scumm::o6_getObjectY, + &Scumm::o6_getObjectDir, /* 90 */ - &Scumm::o2_getActorWalkBox, - &Scumm::o2_getActorCostume, - &Scumm::o2_findInventory, - &Scumm::o2_getInventoryCount, + &Scumm::o6_getActorWalkBox, + &Scumm::o6_getActorCostume, + &Scumm::o6_findInventory, + &Scumm::o6_getInventoryCount, /* 94 */ - &Scumm::o2_getVerbFromXY, - &Scumm::o2_beginOverride, - &Scumm::o2_endOverride, - &Scumm::o2_setObjectName, + &Scumm::o6_getVerbFromXY, + &Scumm::o6_beginOverride, + &Scumm::o6_endOverride, + &Scumm::o6_setObjectName, /* 98 */ - &Scumm::o2_isSoundRunning, - &Scumm::o2_setBoxFlags, - &Scumm::o2_createBoxMatrix, - &Scumm::o2_resourceRoutines, + &Scumm::o6_isSoundRunning, + &Scumm::o6_setBoxFlags, + &Scumm::o6_createBoxMatrix, + &Scumm::o6_resourceRoutines, /* 9C */ - &Scumm::o2_roomOps, - &Scumm::o2_actorSet, - &Scumm::o2_verbOps, - &Scumm::o2_getActorFromXY, + &Scumm::o6_roomOps, + &Scumm::o6_actorSet, + &Scumm::o6_verbOps, + &Scumm::o6_getActorFromXY, /* A0 */ - &Scumm::o2_findObject, - &Scumm::o2_pseudoRoom, - &Scumm::o2_getActorElevation, - &Scumm::o2_getVerbEntrypoint, + &Scumm::o6_findObject, + &Scumm::o6_pseudoRoom, + &Scumm::o6_getActorElevation, + &Scumm::o6_getVerbEntrypoint, /* A4 */ - &Scumm::o2_arrayOps, - &Scumm::o2_saveRestoreVerbs, - &Scumm::o2_drawBox, - &Scumm::o2_invalid, + &Scumm::o6_arrayOps, + &Scumm::o6_saveRestoreVerbs, + &Scumm::o6_drawBox, + &Scumm::o6_invalid, /* A8 */ - &Scumm::o2_getActorWidth, - &Scumm::o2_wait, - &Scumm::o2_getActorScaleX, - &Scumm::o2_getActorAnimCounter1, + &Scumm::o6_getActorWidth, + &Scumm::o6_wait, + &Scumm::o6_getActorScaleX, + &Scumm::o6_getActorAnimCounter1, /* AC */ - &Scumm::o2_soundKludge, - &Scumm::o2_isAnyOf, - &Scumm::o2_quitPauseRestart, - &Scumm::o2_isActorInBox, + &Scumm::o6_soundKludge, + &Scumm::o6_isAnyOf, + &Scumm::o6_quitPauseRestart, + &Scumm::o6_isActorInBox, /* B0 */ - &Scumm::o2_delay, - &Scumm::o2_delayLonger, - &Scumm::o2_delayVeryLong, - &Scumm::o2_stopSentence, + &Scumm::o6_delay, + &Scumm::o6_delayLonger, + &Scumm::o6_delayVeryLong, + &Scumm::o6_stopSentence, /* B4 */ - &Scumm::o2_print_0, - &Scumm::o2_print_1, - &Scumm::o2_print_2, - &Scumm::o2_print_3, + &Scumm::o6_print_0, + &Scumm::o6_print_1, + &Scumm::o6_print_2, + &Scumm::o6_print_3, /* B8 */ - &Scumm::o2_printActor, - &Scumm::o2_printEgo, - &Scumm::o2_talkActor, - &Scumm::o2_talkEgo, + &Scumm::o6_printActor, + &Scumm::o6_printEgo, + &Scumm::o6_talkActor, + &Scumm::o6_talkEgo, /* BC */ - &Scumm::o2_dim, - &Scumm::o2_invalid, - &Scumm::o2_runVerbCodeQuick, - &Scumm::o2_runScriptQuick, + &Scumm::o6_dim, + &Scumm::o6_invalid, + &Scumm::o6_runVerbCodeQuick, + &Scumm::o6_runScriptQuick, /* C0 */ - &Scumm::o2_dim2, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_dim2, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* C4 */ - &Scumm::o2_abs, - &Scumm::o2_distObjectObject, - &Scumm::o2_distObjectPt, - &Scumm::o2_distPtPt, + &Scumm::o6_abs, + &Scumm::o6_distObjectObject, + &Scumm::o6_distObjectPt, + &Scumm::o6_distPtPt, /* C8 */ - &Scumm::o2_invalid, - &Scumm::o2_miscOps, - &Scumm::o2_breakMaybe, - &Scumm::o2_pickOneOf, + &Scumm::o6_invalid, + &Scumm::o6_miscOps, + &Scumm::o6_breakMaybe, + &Scumm::o6_pickOneOf, /* CC */ - &Scumm::o2_pickOneOfDefault, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_pickOneOfDefault, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* D0 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* D4 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* D8 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* DC */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* E0 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* E4 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* E8 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* EC */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* F0 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* F4 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* F8 */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, /* FC */ - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, - &Scumm::o2_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, + &Scumm::o6_invalid, }; _opcodes = opcode_list; @@ -404,215 +406,215 @@ int Scumm::getStackList(int16 *args, uint maxnum) { return num; } -void Scumm::o2_pushByte() { +void Scumm::o6_pushByte() { push(fetchScriptByte()); } -void Scumm::o2_pushWord() { +void Scumm::o6_pushWord() { push((int16)fetchScriptWord()); } -void Scumm::o2_pushByteVar() { +void Scumm::o6_pushByteVar() { push(readVar(fetchScriptByte())); } -void Scumm::o2_pushWordVar() { +void Scumm::o6_pushWordVar() { push(readVar(fetchScriptWord())); } -void Scumm::o2_invalid() { +void Scumm::o6_invalid() { error("Invalid opcode '%x' at %x", _opcode, _scriptPointer - _scriptOrgPointer); } -void Scumm::o2_byteArrayRead() { +void Scumm::o6_byteArrayRead() { int base = pop(); push(readArray(fetchScriptByte(), 0, base)); } -void Scumm::o2_wordArrayRead() { +void Scumm::o6_wordArrayRead() { int base = pop(); push(readArray(fetchScriptWord(), 0, base)); } -void Scumm::o2_byteArrayIndexedRead() { +void Scumm::o6_byteArrayIndexedRead() { int base = pop(); int index = pop(); push(readArray(fetchScriptByte(), index, base)); } -void Scumm::o2_wordArrayIndexedRead() { +void Scumm::o6_wordArrayIndexedRead() { int base = pop(); int index = pop(); push(readArray(fetchScriptWord(), index, base)); } -void Scumm::o2_dup() { +void Scumm::o6_dup() { int a = pop(); push(a); push(a); } -void Scumm::o2_zero() { +void Scumm::o6_zero() { push( pop() == 0 ); } -void Scumm::o2_eq() { +void Scumm::o6_eq() { push( pop() == pop() ); } -void Scumm::o2_neq() { +void Scumm::o6_neq() { push( pop() != pop() ); } -void Scumm::o2_gt() { +void Scumm::o6_gt() { int a = pop(); push( pop() > a ); } -void Scumm::o2_lt() { +void Scumm::o6_lt() { int a = pop(); push( pop() < a ); } -void Scumm::o2_le() { +void Scumm::o6_le() { int a = pop(); push( pop() <= a ); } -void Scumm::o2_ge() { +void Scumm::o6_ge() { int a = pop(); push( pop() >= a ); } -void Scumm::o2_add() { +void Scumm::o6_add() { int a = pop(); push( pop() + a ); } -void Scumm::o2_sub() { +void Scumm::o6_sub() { int a = pop(); push( pop() - a ); } -void Scumm::o2_mul() { +void Scumm::o6_mul() { int a = pop(); push( pop() * a ); } -void Scumm::o2_div() { +void Scumm::o6_div() { int a = pop(); if (a==0) error("division by zero"); push( pop() / a ); } -void Scumm::o2_land() { +void Scumm::o6_land() { int a = pop(); push( pop() && a ); } -void Scumm::o2_lor() { +void Scumm::o6_lor() { int a = pop(); push( pop() || a ); } -void Scumm::o2_kill() { +void Scumm::o6_kill() { pop(); } -void Scumm::o2_writeByteVar() { +void Scumm::o6_writeByteVar() { writeVar(fetchScriptByte(), pop()); } -void Scumm::o2_writeWordVar() { +void Scumm::o6_writeWordVar() { writeVar(fetchScriptWord(), pop()); } -void Scumm::o2_byteArrayWrite() { +void Scumm::o6_byteArrayWrite() { int a = pop(); writeArray(fetchScriptByte(), 0, pop(), a); } -void Scumm::o2_wordArrayWrite() { +void Scumm::o6_wordArrayWrite() { int a = pop(); writeArray(fetchScriptWord(), 0, pop(), a); } -void Scumm::o2_byteArrayIndexedWrite() { +void Scumm::o6_byteArrayIndexedWrite() { int val = pop(); int base = pop(); writeArray(fetchScriptByte(), pop(), base, val); } -void Scumm::o2_wordArrayIndexedWrite() { +void Scumm::o6_wordArrayIndexedWrite() { int val = pop(); int base = pop(); writeArray(fetchScriptWord(), pop(), base, val); } -void Scumm::o2_byteVarInc() { +void Scumm::o6_byteVarInc() { int var = fetchScriptByte(); writeVar(var,readVar(var)+1); } -void Scumm::o2_wordVarInc() { +void Scumm::o6_wordVarInc() { int var = fetchScriptWord(); writeVar(var,readVar(var)+1); } -void Scumm::o2_byteArrayInc() { +void Scumm::o6_byteArrayInc() { int var = fetchScriptByte(); int base = pop(); writeArray(var, 0, base, readArray(var, 0, base) + 1); } -void Scumm::o2_wordArrayInc() { +void Scumm::o6_wordArrayInc() { int var = fetchScriptWord(); int base = pop(); writeArray(var, 0, base, readArray(var, 0, base) + 1); } -void Scumm::o2_byteVarDec() { +void Scumm::o6_byteVarDec() { int var = fetchScriptByte(); writeVar(var,readVar(var)-1); } -void Scumm::o2_wordVarDec() { +void Scumm::o6_wordVarDec() { int var = fetchScriptWord(); writeVar(var,readVar(var)-1); } -void Scumm::o2_byteArrayDec() { +void Scumm::o6_byteArrayDec() { int var = fetchScriptByte(); int base = pop(); writeArray(var, 0, base, readArray(var, 0, base) - 1); } -void Scumm::o2_wordArrayDec() { +void Scumm::o6_wordArrayDec() { int var = fetchScriptWord(); int base = pop(); writeArray(var, 0, base, readArray(var, 0, base) - 1); } -void Scumm::o2_jumpTrue() { +void Scumm::o6_jumpTrue() { if (pop()) - o2_jump(); + o6_jump(); else fetchScriptWord(); } -void Scumm::o2_jumpFalse() { +void Scumm::o6_jumpFalse() { if (!pop()) - o2_jump(); + o6_jump(); else fetchScriptWord(); } -void Scumm::o2_jump() { +void Scumm::o6_jump() { _scriptPointer += (int16)fetchScriptWord(); } -void Scumm::o2_startScriptEx() { +void Scumm::o6_startScriptEx() { int16 args[16]; int script,flags; @@ -622,7 +624,7 @@ void Scumm::o2_startScriptEx() { runScript(script, flags&1, flags&2, args); } -void Scumm::o2_startScript() { +void Scumm::o6_startScript() { int16 args[16]; int script; getStackList(args,sizeof(args)/sizeof(args[0])); @@ -630,7 +632,7 @@ void Scumm::o2_startScript() { runScript(script, 0, 0, args); } -void Scumm::o2_startObject() { +void Scumm::o6_startObject() { int16 args[16]; int script,entryp; int flags; @@ -641,37 +643,37 @@ void Scumm::o2_startObject() { runVerbCode(script, entryp, flags&1, flags&2, args); } -void Scumm::o2_setObjectState() { +void Scumm::o6_setObjectState() { int a = pop(); if (a==0) a=1; setObjectState(pop(), a, -1, -1); } -void Scumm::o2_setObjectXY() { +void Scumm::o6_setObjectXY() { int y = pop(); int x = pop(); setObjectState(pop(), 1, x, y); } -void Scumm::o2_stopObjectCode() { +void Scumm::o6_stopObjectCode() { stopObjectCode(); } -void Scumm::o2_endCutscene() { +void Scumm::o6_endCutscene() { endCutscene(); } -void Scumm::o2_cutScene() { +void Scumm::o6_cutScene() { int16 args[16]; getStackList(args,sizeof(args)/sizeof(args[0])); cutscene(args); } -void Scumm::o2_stopMusic() { - warning("o2_stopMusic: not implemented"); +void Scumm::o6_stopMusic() { + warning("o6_stopMusic: not implemented"); } -void Scumm::o2_freezeUnfreeze() { +void Scumm::o6_freezeUnfreeze() { int a = pop(); if (a) freezeScripts(a); @@ -679,7 +681,7 @@ void Scumm::o2_freezeUnfreeze() { unfreezeScripts(); } -void Scumm::o2_cursorCommand() { +void Scumm::o6_cursorCommand() { int a,num,i; int16 args[16]; @@ -739,12 +741,12 @@ void Scumm::o2_cursorCommand() { _vars[VAR_USERPUT] = _userPut; } -void Scumm::o2_breakHere() { +void Scumm::o6_breakHere() { updateScriptPtr(); _currentScript = 0xFF; } -void Scumm::o2_ifClassOfIs() { +void Scumm::o6_ifClassOfIs() { int16 args[16]; int num,obj,cls; bool b; @@ -762,7 +764,7 @@ void Scumm::o2_ifClassOfIs() { push(cond); } -void Scumm::o2_setClass() { +void Scumm::o6_setClass() { int16 args[16]; int num,obj,cls; @@ -780,11 +782,11 @@ void Scumm::o2_setClass() { } } -void Scumm::o2_getState() { +void Scumm::o6_getState() { push(getState(pop())); } -void Scumm::o2_setState() { +void Scumm::o6_setState() { int state = pop(); int obj = pop(); @@ -794,53 +796,53 @@ void Scumm::o2_setState() { clearDrawObjectQueue(); } -void Scumm::o2_setOwner() { +void Scumm::o6_setOwner() { int owner = pop(); int obj = pop(); setOwnerOf(obj, owner); } -void Scumm::o2_getOwner() { +void Scumm::o6_getOwner() { push(getOwner(pop())); } -void Scumm::o2_startSound() { +void Scumm::o6_startSound() { addSoundToQueue(pop()); } -void Scumm::o2_stopSound() { +void Scumm::o6_stopSound() { unkSoundProc1(pop()); } -void Scumm::o2_startMusic() { +void Scumm::o6_startMusic() { addSoundToQueue(pop()); } -void Scumm::o2_stopObjectScript() { +void Scumm::o6_stopObjectScript() { stopObjectScript(pop()); } -void Scumm::o2_panCameraTo() { +void Scumm::o6_panCameraTo() { panCameraTo(pop()); } -void Scumm::o2_actorFollowCamera() { +void Scumm::o6_actorFollowCamera() { actorFollowCamera(pop()); } -void Scumm::o2_setCameraAt() { +void Scumm::o6_setCameraAt() { setCameraAtEx(pop()); } -void Scumm::o2_loadRoom() { +void Scumm::o6_loadRoom() { int room = pop(); debug(1,"Loading room %d", room); startScene(room, 0, 0); _fullRedraw = 1; } -void Scumm::o2_stopScript() { +void Scumm::o6_stopScript() { int script = pop(); if (script==0) stopObjectCode(); @@ -848,14 +850,14 @@ void Scumm::o2_stopScript() { stopScriptNr(script); } -void Scumm::o2_walkActorToObj() { +void Scumm::o6_walkActorToObj() { int obj,dist; Actor *a, *a2; int x; dist = pop(); obj = pop(); - a = derefActorSafe(pop(), "o2_walkActorToObj"); + a = derefActorSafe(pop(), "o6_walkActorToObj"); if (obj >= 17) { if (whereIsObject(obj)==-1) @@ -863,7 +865,7 @@ void Scumm::o2_walkActorToObj() { getObjectXYPos(obj); startWalkActor(a, _xPos, _yPos, _dir); } else { - a2 = derefActorSafe(obj, "o2_walkActorToObj(2)"); + a2 = derefActorSafe(obj, "o6_walkActorToObj(2)"); if (a2->room != _currentRoom || a->room != _currentRoom) return; @@ -880,21 +882,21 @@ void Scumm::o2_walkActorToObj() { } } -void Scumm::o2_walkActorTo() { +void Scumm::o6_walkActorTo() { int x,y; y = pop(); x = pop(); - startWalkActor(derefActorSafe(pop(), "o2_walkActorTo"), x, y, 0xFF); + startWalkActor(derefActorSafe(pop(), "o6_walkActorTo"), x, y, 0xFF); } -void Scumm::o2_putActorInRoom() { +void Scumm::o6_putActorInRoom() { int room, x, y; Actor *a; room = pop(); y = pop(); x = pop(); - a = derefActorSafe(pop(), "o2_putActorInRoom"); + a = derefActorSafe(pop(), "o6_putActorInRoom"); if (room==0xFF) { room = a->room; } else { @@ -907,14 +909,14 @@ void Scumm::o2_putActorInRoom() { putActor(a, x, y, room); } -void Scumm::o2_putActorAtObject() { +void Scumm::o6_putActorAtObject() { int room,obj,x,y; Actor *a; room = pop(); obj = pop(); - a = derefActorSafe(pop(), "o2_putActorAtObject"); + a = derefActorSafe(pop(), "o6_putActorAtObject"); if (whereIsObject(obj)!=-1) { getObjectXYPos(obj); x = _xPos; @@ -928,20 +930,20 @@ void Scumm::o2_putActorAtObject() { putActor(a, x, y, room); } -void Scumm::o2_faceActor() { +void Scumm::o6_faceActor() { int act,obj; obj = pop(); act = pop(); faceActorToObj(act, obj); } -void Scumm::o2_animateActor() { +void Scumm::o6_animateActor() { int anim = pop(); int act = pop(); animateActor(act, anim); } -void Scumm::o2_doSentence() { +void Scumm::o6_doSentence() { int a,b,c; SentenceTab *st; @@ -964,7 +966,7 @@ void Scumm::o2_doSentence() { st->unk = 0; } -void Scumm::o2_pickupObject() { +void Scumm::o6_pickupObject() { int obj, room; room = pop(); @@ -981,7 +983,7 @@ void Scumm::o2_pickupObject() { runHook(obj); /* Difference */ } -void Scumm::o2_loadRoomWithEgo() { +void Scumm::o6_loadRoomWithEgo() { Actor *a; int room,obj,x,y; @@ -1007,64 +1009,64 @@ void Scumm::o2_loadRoomWithEgo() { } } -void Scumm::o2_getRandomNumber() { +void Scumm::o6_getRandomNumber() { int rnd; rnd = getRandomNumber(pop()+1); - _vars[VAR_RANDOM_NR] = rnd; + _vars[VAR_V6_RANDOM_NR] = rnd; push(rnd); } -void Scumm::o2_getRandomNumberRange() { +void Scumm::o6_getRandomNumberRange() { int max = pop(); int min = pop(); int rnd = getRandomNumber(max-min+1) + min; - _vars[VAR_RANDOM_NR] = rnd; + _vars[VAR_V6_RANDOM_NR] = rnd; push(rnd); } -void Scumm::o2_getActorMoving() { - push(derefActorSafe(pop(),"o2_getActorMoving")->moving); +void Scumm::o6_getActorMoving() { + push(derefActorSafe(pop(),"o6_getActorMoving")->moving); } -void Scumm::o2_getScriptRunning() { +void Scumm::o6_getScriptRunning() { push(getScriptRunning(pop())); } -void Scumm::o2_getActorRoom() { - push(derefActorSafe(pop(),"o2_getActorRoom")->room); +void Scumm::o6_getActorRoom() { + push(derefActorSafe(pop(),"o6_getActorRoom")->room); } -void Scumm::o2_getObjectX() { +void Scumm::o6_getObjectX() { push(getObjX(pop())); } -void Scumm::o2_getObjectY() { +void Scumm::o6_getObjectY() { push(getObjY(pop())); } -void Scumm::o2_getObjectDir() { +void Scumm::o6_getObjectDir() { push(getObjDir(pop())); } -void Scumm::o2_getActorWalkBox() { - push(derefActorSafe(pop(),"o2_getActorWalkBox")->walkbox); +void Scumm::o6_getActorWalkBox() { + push(derefActorSafe(pop(),"o6_getActorWalkBox")->walkbox); } -void Scumm::o2_getActorCostume() { - push(derefActorSafe(pop(),"o2_getActorCostume")->costume); +void Scumm::o6_getActorCostume() { + push(derefActorSafe(pop(),"o6_getActorCostume")->costume); } -void Scumm::o2_findInventory() { +void Scumm::o6_findInventory() { int index = pop(); int owner = pop(); push(findInventory(owner,index)); } -void Scumm::o2_getInventoryCount() { +void Scumm::o6_getInventoryCount() { push(getInventoryCount(pop())); } -void Scumm::o2_getVerbFromXY() { +void Scumm::o6_getVerbFromXY() { int y = pop(); int x = pop(); int over = checkMouseOver(x,y); @@ -1073,15 +1075,15 @@ void Scumm::o2_getVerbFromXY() { push(over); } -void Scumm::o2_beginOverride() { +void Scumm::o6_beginOverride() { beginOverride(); } -void Scumm::o2_endOverride() { +void Scumm::o6_endOverride() { endOverride(); } -void Scumm::o2_setObjectName() { +void Scumm::o6_setObjectName() { int obj = pop(); int i; @@ -1111,14 +1113,14 @@ void Scumm::o2_setObjectName() { error("New name of %d overflows name table (max = %d)", obj, 50); } -void Scumm::o2_isSoundRunning() { +void Scumm::o6_isSoundRunning() { int snd = pop(); if (snd) snd = unkSoundProc23(snd); push(snd); } -void Scumm::o2_setBoxFlags() { +void Scumm::o6_setBoxFlags() { int16 table[65]; int num,value; @@ -1130,11 +1132,11 @@ void Scumm::o2_setBoxFlags() { } } -void Scumm::o2_createBoxMatrix() { +void Scumm::o6_createBoxMatrix() { createBoxMatrix(); } -void Scumm::o2_resourceRoutines() { +void Scumm::o6_resourceRoutines() { int res; switch(fetchScriptByte()) { @@ -1228,11 +1230,11 @@ void Scumm::o2_resourceRoutines() { unkResProc(pop(), res); break; default: - error("o2_resourceRoutines: default case"); + error("o6_resourceRoutines: default case"); } } -void Scumm::o2_roomOps() { +void Scumm::o6_roomOps() { int a,b,c,d,e; switch(fetchScriptByte()) { @@ -1279,7 +1281,7 @@ void Scumm::o2_roomOps() { case 180: _saveLoadData = pop(); _saveLoadFlag = pop(); - warning("o2_roomops:180: partially unimplemented"); + warning("o6_roomops:180: partially unimplemented"); break; case 181: @@ -1340,11 +1342,11 @@ void Scumm::o2_roomOps() { break; default: - error("o2_roomOps: default case"); + error("o6_roomOps: default case"); } } -void Scumm::o2_actorSet() { +void Scumm::o6_actorSet() { Actor *a; int i,j,k; int16 args[8]; @@ -1356,7 +1358,7 @@ void Scumm::o2_actorSet() { return; } - a = derefActorSafe(_curActor, "o2_actorSet"); + a = derefActorSafe(_curActor, "o6_actorSet"); switch(b) { case 76: /* actor-costume */ @@ -1464,11 +1466,11 @@ FixRooms:; initActor(a, 2); break; default: - error("o2_actorset: default case"); + error("o6_actorset: default case"); } } -void Scumm::o2_verbOps() { +void Scumm::o6_verbOps() { int slot,a,b; VerbSlot *vs; byte *ptr, op; @@ -1578,24 +1580,24 @@ void Scumm::o2_verbOps() { verbMouseOver(0); break; default: - error("o2_verbops: default case"); + error("o6_verbops: default case"); } } -void Scumm::o2_getActorFromXY() { +void Scumm::o6_getActorFromXY() { int y = pop(); int x = pop(); push(getActorFromPos(x,y)); } -void Scumm::o2_findObject() { +void Scumm::o6_findObject() { int y = pop(); int x = pop(); int r = findObject(x,y); push(r); } -void Scumm::o2_pseudoRoom() { +void Scumm::o6_pseudoRoom() { int16 list[100]; int num,a,value; @@ -1609,17 +1611,17 @@ void Scumm::o2_pseudoRoom() { } } -void Scumm::o2_getActorElevation() { - push(derefActorSafe(pop(),"o2_getActorElevation")->elevation); +void Scumm::o6_getActorElevation() { + push(derefActorSafe(pop(),"o6_getActorElevation")->elevation); } -void Scumm::o2_getVerbEntrypoint() { +void Scumm::o6_getVerbEntrypoint() { int e = pop(); int v = pop(); push(getVerbEntrypoint(v,e)); } -void Scumm::o2_arrayOps() { +void Scumm::o6_arrayOps() { int a,b,c,d,num; int16 list[128]; @@ -1654,11 +1656,11 @@ void Scumm::o2_arrayOps() { } break; default: - error("o2_arrayOps: default case"); + error("o6_arrayOps: default case"); } } -void Scumm::o2_saveRestoreVerbs() { +void Scumm::o6_saveRestoreVerbs() { int a,b,c; int slot,slot2; @@ -1702,11 +1704,11 @@ void Scumm::o2_saveRestoreVerbs() { } break; default: - error("o2_saveRestoreVerbs: default case"); + error("o6_saveRestoreVerbs: default case"); } } -void Scumm::o2_drawBox() { +void Scumm::o6_drawBox() { int x,y,x2,y2,color; color = pop(); y2 = pop(); @@ -1716,18 +1718,18 @@ void Scumm::o2_drawBox() { drawBox(x, y, x2, y2, color); } -void Scumm::o2_getActorWidth() { - push(derefActorSafe(pop(),"o2_getActorWidth")->width); +void Scumm::o6_getActorWidth() { + push(derefActorSafe(pop(),"o6_getActorWidth")->width); } -void Scumm::o2_wait() { +void Scumm::o6_wait() { byte oldaddr; switch(fetchScriptByte()) { case 168: - if (derefActorSafe(pop(), "o2_wait")->moving) { + if (derefActorSafe(pop(), "o6_wait")->moving) { _scriptPointer += (int16)fetchScriptWord(); - o2_breakHere(); + o6_breakHere(); } else { fetchScriptWord(); } @@ -1751,28 +1753,28 @@ void Scumm::o2_wait() { return; break; default: - error("o2_wait: default case"); + error("o6_wait: default case"); } _scriptPointer -= 2; - o2_breakHere(); + o6_breakHere(); } -void Scumm::o2_getActorScaleX() { - push(derefActorSafe(pop(),"o2_getActorScale")->scalex); +void Scumm::o6_getActorScaleX() { + push(derefActorSafe(pop(),"o6_getActorScale")->scalex); } -void Scumm::o2_getActorAnimCounter1() { - push(derefActorSafe(pop(),"o2_getActorAnimCounter")->cost.animCounter1); +void Scumm::o6_getActorAnimCounter1() { + push(derefActorSafe(pop(),"o6_getActorAnimCounter")->cost.animCounter1); } -void Scumm::o2_soundKludge() { +void Scumm::o6_soundKludge() { int16 list[8]; getStackList(list,sizeof(list)/sizeof(list[0])); soundKludge(list); } -void Scumm::o2_isAnyOf() { +void Scumm::o6_isAnyOf() { int16 list[100]; int num; int16 val; @@ -1790,7 +1792,7 @@ void Scumm::o2_isAnyOf() { return; } -void Scumm::o2_quitPauseRestart() { +void Scumm::o6_quitPauseRestart() { switch(fetchScriptByte()) { case 158: pauseGame(0); @@ -1799,70 +1801,70 @@ void Scumm::o2_quitPauseRestart() { shutDown(0); break; default: - error("o2_quitPauseRestart: invalid case"); + error("o6_quitPauseRestart: invalid case"); } } -void Scumm::o2_isActorInBox() { +void Scumm::o6_isActorInBox() { int box = pop(); - Actor *a = derefActorSafe(pop(), "o2_isActorInBox"); + Actor *a = derefActorSafe(pop(), "o6_isActorInBox"); push(checkXYInBoxBounds(box, a->x, a->y)); } -void Scumm::o2_delay() { +void Scumm::o6_delay() { uint32 delay = (uint16)pop(); vm.slot[_currentScript].delay = delay; vm.slot[_currentScript].status = 1; - o2_breakHere(); + o6_breakHere(); } -void Scumm::o2_delayLonger() { +void Scumm::o6_delayLonger() { uint32 delay = (uint16)pop() * 60; vm.slot[_currentScript].delay = delay; vm.slot[_currentScript].status = 1; - o2_breakHere(); + o6_breakHere(); } -void Scumm::o2_delayVeryLong() { +void Scumm::o6_delayVeryLong() { uint32 delay = (uint16)pop() * 3600; vm.slot[_currentScript].delay = delay; vm.slot[_currentScript].status = 1; - o2_breakHere(); + o6_breakHere(); } -void Scumm::o2_stopSentence() { +void Scumm::o6_stopSentence() { _sentenceIndex = 0xFF; stopScriptNr(_vars[VAR_SENTENCE_SCRIPT]); clearClickedStatus(); } -void Scumm::o2_print_0() { +void Scumm::o6_print_0() { _actorToPrintStrFor = 0xFF; decodeParseString2(0,0); } -void Scumm::o2_print_1() { +void Scumm::o6_print_1() { decodeParseString2(1,0); } -void Scumm::o2_print_2() { +void Scumm::o6_print_2() { decodeParseString2(2,0); } -void Scumm::o2_print_3() { +void Scumm::o6_print_3() { decodeParseString2(3,0); } -void Scumm::o2_printActor() { +void Scumm::o6_printActor() { decodeParseString2(0,1); } -void Scumm::o2_printEgo() { +void Scumm::o6_printEgo() { push(_vars[VAR_UNK_ACTOR]); decodeParseString2(0,1); } -void Scumm::o2_talkActor() { +void Scumm::o6_talkActor() { _actorToPrintStrFor = pop(); _messagePtr = _scriptPointer; setStringVars(0); @@ -1870,7 +1872,7 @@ void Scumm::o2_talkActor() { _scriptPointer = _messagePtr; } -void Scumm::o2_talkEgo() { +void Scumm::o6_talkEgo() { _actorToPrintStrFor = _vars[VAR_UNK_ACTOR]; _messagePtr = _scriptPointer; setStringVars(0); @@ -1878,7 +1880,7 @@ void Scumm::o2_talkEgo() { _scriptPointer = _messagePtr; } -void Scumm::o2_dim() { +void Scumm::o6_dim() { byte b; int data; @@ -1902,13 +1904,13 @@ void Scumm::o2_dim() { nukeArray(fetchScriptWord()); return; default: - error("o2_dim: default case"); + error("o6_dim: default case"); } defineArray(fetchScriptWord(), data, 0, pop()); } -void Scumm::o2_runVerbCodeQuick() { +void Scumm::o6_runVerbCodeQuick() { int16 args[16]; int script,entryp; getStackList(args,sizeof(args)/sizeof(args[0])); @@ -1917,7 +1919,7 @@ void Scumm::o2_runVerbCodeQuick() { runVerbCode(script, entryp, 0, 1, args); } -void Scumm::o2_runScriptQuick() { +void Scumm::o6_runScriptQuick() { int16 args[16]; int script; getStackList(args,sizeof(args)/sizeof(args[0])); @@ -1925,7 +1927,7 @@ void Scumm::o2_runScriptQuick() { runScript(script, 0, 1, args); } -void Scumm::o2_dim2() { +void Scumm::o6_dim2() { int a,b,data; switch(fetchScriptByte()) { case 199: @@ -1944,7 +1946,7 @@ void Scumm::o2_dim2() { data = 4; break; default: - error("o2_dim2: default case"); + error("o6_dim2: default case"); } b = pop(); @@ -1952,19 +1954,19 @@ void Scumm::o2_dim2() { defineArray(fetchScriptWord(), data, a, b); } -void Scumm::o2_abs() { +void Scumm::o6_abs() { push(abs(pop())); } -void Scumm::o2_distObjectObject() { +void Scumm::o6_distObjectObject() { int a,b; b = pop(); a = pop(); push(getDistanceBetween(true, a, 0, true, b, 0)); } -void Scumm::o2_distObjectPt() { +void Scumm::o6_distObjectPt() { int a,b,c; c = pop(); b = pop(); @@ -1972,7 +1974,7 @@ void Scumm::o2_distObjectPt() { push(getDistanceBetween(true, a, 0, false, b, c)); } -void Scumm::o2_distPtPt() { +void Scumm::o6_distPtPt() { int a,b,c,d; d = pop(); c = pop(); @@ -1981,18 +1983,18 @@ void Scumm::o2_distPtPt() { push(getDistanceBetween(false, a, b, false, c, d)); } -void Scumm::o2_dummy_stacklist() { - error("opcode o2_dummy_stacklist invalid"); +void Scumm::o6_dummy_stacklist() { + error("opcode o6_dummy_stacklist invalid"); } -void Scumm::o2_miscOps() { +void Scumm::o6_miscOps() { int16 args[30]; int i; getStackList(args,sizeof(args)/sizeof(args[0])); switch(args[0]) { case 3: - warning("o2_miscOps: nothing in 3"); + warning("o6_miscOps: nothing in 3"); break; case 4: unkMiscOp4(args[1], args[2], args[3], args[4]); @@ -2017,7 +2019,7 @@ void Scumm::o2_miscOps() { } } -void Scumm::o2_breakMaybe() { +void Scumm::o6_breakMaybe() { ScriptSlot *ss = &vm.slot[_currentScript]; if (ss->newfield == 0) { ss->newfield = pop(); @@ -2026,22 +2028,22 @@ void Scumm::o2_breakMaybe() { } if (ss->newfield) { _scriptPointer--; - o2_breakHere(); + o6_breakHere(); } } -void Scumm::o2_pickOneOf() { +void Scumm::o6_pickOneOf() { int16 args[100]; int i,num; num = getStackList(args,sizeof(args)/sizeof(args[0])); i = pop(); if (i<0 || i>=num) - error("o2_pickOneOf: out of range"); + error("o6_pickOneOf: out of range"); push(args[i]); } -void Scumm::o2_pickOneOfDefault() { +void Scumm::o6_pickOneOfDefault() { int16 args[100]; int i,num,def; @@ -2121,4 +2123,3 @@ void Scumm::decodeParseString2(int m, int n) { } } -#endif
\ No newline at end of file @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.12 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.11 2001/10/17 10:07:40 strigeus * fixed verbs not saved in non dott games, * implemented a screen effect @@ -160,7 +164,6 @@ struct ResHeader { uint32 size; }; -#if defined(DOTT) class ObjectData { public: uint32 offs_obim_to_room; @@ -178,25 +181,6 @@ public: byte fl_object_index; byte unk_3; }; -#else -class ObjectData { -public: - uint32 offs_obim_to_room; - uint32 offs_obcd_to_room; - uint16 cdhd_10, cdhd_12; - uint16 obj_nr; - byte x_pos; - byte y_pos; - uint16 numstrips; - uint16 height; - byte actordir; - byte parent; - byte parentstate; - byte ownerstate; - byte fl_object_index; - byte unk_3; -}; -#endif struct RoomHeader { uint32 tag, size; @@ -204,31 +188,31 @@ struct RoomHeader { uint16 numObjects; }; -#if !defined(DOTT) -struct CodeHeader { /* file format */ - uint32 id; - uint32 size; - uint16 obj_id; - byte x,y,w,h; - byte flags; - byte parent; - uint16 unk2; - uint16 unk3; - byte actordir; -}; -#else -struct CodeHeader { /* file format */ +struct CodeHeader { uint32 id; uint32 size; uint16 obj_id; - int16 x, y; - uint16 w,h; - byte flags, parent; - uint16 unk2; - uint16 unk3; - byte actordir; + + union { + struct { + byte x,y,w,h; + byte flags; + byte parent; + uint16 unk2; + uint16 unk3; + byte actordir; + } v5; + + struct { + int16 x, y; + uint16 w,h; + byte flags, parent; + uint16 unk2; + uint16 unk3; + byte actordir; + } v6; + }; }; -#endif struct ImageHeader { /* file format */ uint32 id; @@ -344,9 +328,7 @@ enum ScummVars { VAR_TALKSTOP_KEY = 57, VAR_SAVELOADDIALOG_KEY = 50, -#if defined(DOTT) - VAR_RANDOM_NR = 118, -#endif + VAR_V6_RANDOM_NR = 118, }; #define _maxRooms res.num[1] @@ -534,7 +516,25 @@ struct StringTab { int16 mask_top, mask_bottom, mask_right, mask_left; }; +enum GameId { + GID_TENTACLE = 1, + GID_MONKEY2 = 2, + GID_INDY4 = 3, + GID_MONKEY = 4, +}; + +struct ScummDebugger; + + struct Scumm { + const char *_gameText; + byte _gameId; + byte _majorScummVersion; + byte _middleScummVersion; + byte _minorScummVersion; + + ScummDebugger *_debugger; + int _lastLoadedRoom; int _roomResource; byte _encbyte; @@ -889,7 +889,7 @@ struct Scumm { void openRoom(int room); void deleteRoomOffsets(); void readRoomsOffsets(); - void askForDisk(); + void askForDisk(const char *filename); bool openResourceFile(const char *filename); @@ -917,7 +917,8 @@ struct Scumm { void readResTypeList(int id, uint32 tag, const char *name); void allocResTypeData(int id, uint32 tag, int num, const char *name, int mode); - void initThings(); + void initThingsV5(); + void initThingsV6(); void initRandSeeds(); @@ -1020,249 +1021,249 @@ struct Scumm { int getObjectIndex(int object); - void o_actorFollowCamera(); - void o_actorFromPos(); - void o_actorSet(); - void o_actorSetClass(); - void o_add(); - void o_and(); - void o_animateActor(); - void o_badOpcode(); - void o_breakHere(); - void o_chainScript(); - void o_cursorCommand(); - void o_cutscene(); - void o_debug(); - void o_decrement(); - void o_delay(); - void o_delayVariable(); - void o_divide(); - void o_doSentence(); - void o_drawBox(); - void o_drawObject(); - void o_dummy(); - void o_endCutscene(); - void o_equalZero(); - void o_expression(); - void o_faceActor(); - void o_findInventory(); - void o_findObject(); - void o_freezeScripts(); - void o_getActorCostume(); - void o_getActorElevation(); - void o_getActorFacing(); - void o_getActorMoving(); - void o_getActorRoom(); - void o_getActorScale(); - void o_getActorWalkBox(); - void o_getActorWidth(); - void o_getActorX(); - void o_getActorY(); - void o_getAnimCounter(); - void o_getClosestObjActor(); - void o_getDist(); - void o_getInventoryCount(); - void o_getObjectOwner(); - void o_getObjectState(); - void o_getRandomNr(); - void o_getScriptRunning(); - void o_getVerbEntrypoint(); - void o_ifClassOfIs(); - void o_increment(); - void o_isActorInBox(); - void o_isEqual(); - void o_isGreater(); - void o_isGreaterEqual(); - void o_isLess(); - void o_isNotEqual(); - void o_isSoundRunning(); - void o_jumpRelative(); - void o_lessOrEqual(); - void o_lights(); - void o_loadRoom(); - void o_loadRoomWithEgo(); - void o_matrixOps(); - void o_move(); - void o_multiply(); - void o_notEqualZero(); - void o_or(); - void o_overRide(); - void o_panCameraTo(); - void o_pickupObject(); - void o_print(); - void o_printEgo(); - void o_pseudoRoom(); - void o_putActor(); - void o_putActorAtObject(); - void o_putActorInRoom(); - void o_quitPauseRestart(); - void o_resourceRoutines(); - void o_roomOps(); - void o_saveRestoreVerbs(); - void o_setCameraAt(); - void o_setObjectName(); - void o_setOwnerOf(); - void o_setState(); - void o_setVarRange(); - void o_soundKludge(); - void o_startMusic(); - void o_startObject(); - void o_startScript(); - void o_startSound(); - void o_stopMusic(); - void o_stopObjectCode(); - void o_stopObjectScript(); - void o_stopScript(); - void o_stopSound(); - void o_stringOps(); - void o_subtract(); - void o_verbOps(); - void o_wait(); - void o_walkActorTo(); - void o_walkActorToActor(); - void o_walkActorToObject(); - - void o2_pushByte(); - void o2_pushWord(); - void o2_pushByteVar(); - void o2_pushWordVar(); - void o2_invalid(); - void o2_byteArrayRead(); - void o2_wordArrayRead(); - void o2_byteArrayIndexedRead(); - void o2_wordArrayIndexedRead(); - void o2_dup(); - void o2_zero(); - void o2_eq(); - void o2_neq(); - void o2_gt(); - void o2_lt(); - void o2_le(); - void o2_ge(); - void o2_add(); - void o2_sub(); - void o2_mul(); - void o2_div(); - void o2_land(); - void o2_lor(); - void o2_kill(); - void o2_writeByteVar(); - void o2_writeWordVar(); - void o2_byteArrayWrite(); - void o2_wordArrayWrite(); - void o2_byteArrayIndexedWrite(); - void o2_wordArrayIndexedWrite(); - void o2_byteVarInc(); - void o2_wordVarInc(); - void o2_byteArrayInc(); - void o2_wordArrayInc(); - void o2_byteVarDec(); - void o2_wordVarDec(); - void o2_byteArrayDec(); - void o2_wordArrayDec(); - void o2_jumpTrue(); - void o2_jumpFalse(); - void o2_jump(); - void o2_startScriptEx(); - void o2_startScript(); - void o2_startObject(); - void o2_setObjectState(); - void o2_setObjectXY(); - void o2_stopObjectCode(); - void o2_endCutscene(); - void o2_cutScene(); - void o2_stopMusic(); - void o2_freezeUnfreeze(); - void o2_cursorCommand(); - void o2_breakHere(); - void o2_ifClassOfIs(); - void o2_setClass(); - void o2_getState(); - void o2_setState(); - void o2_setOwner(); - void o2_getOwner(); - void o2_startSound(); - void o2_stopSound(); - void o2_startMusic(); - void o2_stopObjectScript(); - void o2_panCameraTo(); - void o2_actorFollowCamera(); - void o2_setCameraAt(); - void o2_loadRoom(); - void o2_stopScript(); - void o2_walkActorToObj(); - void o2_walkActorTo(); - void o2_putActorInRoom(); - void o2_putActorAtObject(); - void o2_faceActor(); - void o2_animateActor(); - void o2_doSentence(); - void o2_pickupObject(); - void o2_loadRoomWithEgo(); - void o2_getRandomNumber(); - void o2_getRandomNumberRange(); - void o2_getActorMoving(); - void o2_getScriptRunning(); - void o2_getActorRoom(); - void o2_getObjectX(); - void o2_getObjectY(); - void o2_getObjectDir(); - void o2_getActorWalkBox(); - void o2_getActorCostume(); - void o2_findInventory(); - void o2_getInventoryCount(); - void o2_getVerbFromXY(); - void o2_beginOverride(); - void o2_endOverride(); - void o2_setObjectName(); - void o2_isSoundRunning(); - void o2_setBoxFlags(); - void o2_createBoxMatrix(); - void o2_resourceRoutines(); - void o2_roomOps(); - void o2_actorSet(); - void o2_verbOps(); - void o2_getActorFromXY(); - void o2_findObject(); - void o2_pseudoRoom(); - void o2_getActorElevation(); - void o2_getVerbEntrypoint(); - void o2_arrayOps(); - void o2_saveRestoreVerbs(); - void o2_drawBox(); - void o2_getActorWidth(); - void o2_wait(); - void o2_getActorScaleX(); - void o2_getActorAnimCounter1(); - void o2_soundKludge(); - void o2_isAnyOf(); - void o2_quitPauseRestart(); - void o2_isActorInBox(); - void o2_delay(); - void o2_delayLonger(); - void o2_delayVeryLong(); - void o2_stopSentence(); - void o2_print_0(); - void o2_print_1(); - void o2_print_2(); - void o2_print_3(); - void o2_printActor(); - void o2_printEgo(); - void o2_talkActor(); - void o2_talkEgo(); - void o2_dim(); - void o2_runVerbCodeQuick(); - void o2_runScriptQuick(); - void o2_dim2(); - void o2_abs(); - void o2_distObjectObject(); - void o2_distObjectPt(); - void o2_distPtPt(); - void o2_dummy_stacklist(); - void o2_miscOps(); - void o2_breakMaybe(); - void o2_pickOneOf(); - void o2_pickOneOfDefault(); + void o5_actorFollowCamera(); + void o5_actorFromPos(); + void o5_actorSet(); + void o5_actorSetClass(); + void o5_add(); + void o5_and(); + void o5_animateActor(); + void o5_badOpcode(); + void o5_breakHere(); + void o5_chainScript(); + void o5_cursorCommand(); + void o5_cutscene(); + void o5_debug(); + void o5_decrement(); + void o5_delay(); + void o5_delayVariable(); + void o5_divide(); + void o5_doSentence(); + void o5_drawBox(); + void o5_drawObject(); + void o5_dummy(); + void o5_endCutscene(); + void o5_equalZero(); + void o5_expression(); + void o5_faceActor(); + void o5_findInventory(); + void o5_findObject(); + void o5_freezeScripts(); + void o5_getActorCostume(); + void o5_getActorElevation(); + void o5_getActorFacing(); + void o5_getActorMoving(); + void o5_getActorRoom(); + void o5_getActorScale(); + void o5_getActorWalkBox(); + void o5_getActorWidth(); + void o5_getActorX(); + void o5_getActorY(); + void o5_getAnimCounter(); + void o5_getClosestObjActor(); + void o5_getDist(); + void o5_getInventoryCount(); + void o5_getObjectOwner(); + void o5_getObjectState(); + void o5_getRandomNr(); + void o5_getScriptRunning(); + void o5_getVerbEntrypoint(); + void o5_ifClassOfIs(); + void o5_increment(); + void o5_isActorInBox(); + void o5_isEqual(); + void o5_isGreater(); + void o5_isGreaterEqual(); + void o5_isLess(); + void o5_isNotEqual(); + void o5_isSoundRunning(); + void o5_jumpRelative(); + void o5_lessOrEqual(); + void o5_lights(); + void o5_loadRoom(); + void o5_loadRoomWithEgo(); + void o5_matrixOps(); + void o5_move(); + void o5_multiply(); + void o5_notEqualZero(); + void o5_or(); + void o5_overRide(); + void o5_panCameraTo(); + void o5_pickupObject(); + void o5_print(); + void o5_printEgo(); + void o5_pseudoRoom(); + void o5_putActor(); + void o5_putActorAtObject(); + void o5_putActorInRoom(); + void o5_quitPauseRestart(); + void o5_resourceRoutines(); + void o5_roomOps(); + void o5_saveRestoreVerbs(); + void o5_setCameraAt(); + void o5_setObjectName(); + void o5_setOwnerOf(); + void o5_setState(); + void o5_setVarRange(); + void o5_soundKludge(); + void o5_startMusic(); + void o5_startObject(); + void o5_startScript(); + void o5_startSound(); + void o5_stopMusic(); + void o5_stopObjectCode(); + void o5_stopObjectScript(); + void o5_stopScript(); + void o5_stopSound(); + void o5_stringOps(); + void o5_subtract(); + void o5_verbOps(); + void o5_wait(); + void o5_walkActorTo(); + void o5_walkActorToActor(); + void o5_walkActorToObject(); + + void o6_pushByte(); + void o6_pushWord(); + void o6_pushByteVar(); + void o6_pushWordVar(); + void o6_invalid(); + void o6_byteArrayRead(); + void o6_wordArrayRead(); + void o6_byteArrayIndexedRead(); + void o6_wordArrayIndexedRead(); + void o6_dup(); + void o6_zero(); + void o6_eq(); + void o6_neq(); + void o6_gt(); + void o6_lt(); + void o6_le(); + void o6_ge(); + void o6_add(); + void o6_sub(); + void o6_mul(); + void o6_div(); + void o6_land(); + void o6_lor(); + void o6_kill(); + void o6_writeByteVar(); + void o6_writeWordVar(); + void o6_byteArrayWrite(); + void o6_wordArrayWrite(); + void o6_byteArrayIndexedWrite(); + void o6_wordArrayIndexedWrite(); + void o6_byteVarInc(); + void o6_wordVarInc(); + void o6_byteArrayInc(); + void o6_wordArrayInc(); + void o6_byteVarDec(); + void o6_wordVarDec(); + void o6_byteArrayDec(); + void o6_wordArrayDec(); + void o6_jumpTrue(); + void o6_jumpFalse(); + void o6_jump(); + void o6_startScriptEx(); + void o6_startScript(); + void o6_startObject(); + void o6_setObjectState(); + void o6_setObjectXY(); + void o6_stopObjectCode(); + void o6_endCutscene(); + void o6_cutScene(); + void o6_stopMusic(); + void o6_freezeUnfreeze(); + void o6_cursorCommand(); + void o6_breakHere(); + void o6_ifClassOfIs(); + void o6_setClass(); + void o6_getState(); + void o6_setState(); + void o6_setOwner(); + void o6_getOwner(); + void o6_startSound(); + void o6_stopSound(); + void o6_startMusic(); + void o6_stopObjectScript(); + void o6_panCameraTo(); + void o6_actorFollowCamera(); + void o6_setCameraAt(); + void o6_loadRoom(); + void o6_stopScript(); + void o6_walkActorToObj(); + void o6_walkActorTo(); + void o6_putActorInRoom(); + void o6_putActorAtObject(); + void o6_faceActor(); + void o6_animateActor(); + void o6_doSentence(); + void o6_pickupObject(); + void o6_loadRoomWithEgo(); + void o6_getRandomNumber(); + void o6_getRandomNumberRange(); + void o6_getActorMoving(); + void o6_getScriptRunning(); + void o6_getActorRoom(); + void o6_getObjectX(); + void o6_getObjectY(); + void o6_getObjectDir(); + void o6_getActorWalkBox(); + void o6_getActorCostume(); + void o6_findInventory(); + void o6_getInventoryCount(); + void o6_getVerbFromXY(); + void o6_beginOverride(); + void o6_endOverride(); + void o6_setObjectName(); + void o6_isSoundRunning(); + void o6_setBoxFlags(); + void o6_createBoxMatrix(); + void o6_resourceRoutines(); + void o6_roomOps(); + void o6_actorSet(); + void o6_verbOps(); + void o6_getActorFromXY(); + void o6_findObject(); + void o6_pseudoRoom(); + void o6_getActorElevation(); + void o6_getVerbEntrypoint(); + void o6_arrayOps(); + void o6_saveRestoreVerbs(); + void o6_drawBox(); + void o6_getActorWidth(); + void o6_wait(); + void o6_getActorScaleX(); + void o6_getActorAnimCounter1(); + void o6_soundKludge(); + void o6_isAnyOf(); + void o6_quitPauseRestart(); + void o6_isActorInBox(); + void o6_delay(); + void o6_delayLonger(); + void o6_delayVeryLong(); + void o6_stopSentence(); + void o6_print_0(); + void o6_print_1(); + void o6_print_2(); + void o6_print_3(); + void o6_printActor(); + void o6_printEgo(); + void o6_talkActor(); + void o6_talkEgo(); + void o6_dim(); + void o6_runVerbCodeQuick(); + void o6_runScriptQuick(); + void o6_dim2(); + void o6_abs(); + void o6_distObjectObject(); + void o6_distObjectPt(); + void o6_distPtPt(); + void o6_dummy_stacklist(); + void o6_miscOps(); + void o6_breakMaybe(); + void o6_pickOneOf(); + void o6_pickOneOfDefault(); void soundKludge(int16 *list); @@ -1522,6 +1523,7 @@ struct Scumm { void showHelpAndExit(); char *getGameName(); + bool detectGame(); void setupOpcodes(); void setupOpcodes2(); @@ -1555,10 +1557,9 @@ struct Scumm { int getStringLen(byte *ptr); -#if defined(DOTT) void readArrayFromIndexFile(); void readMAXS(); - void readIndexFile(); + void readIndexFileV6(); int readArray(int array, int index, int base); void writeArray(int array, int index, int base, int value); @@ -1580,11 +1581,31 @@ struct Scumm { void unkMiscOp4(int a, int b, int c, int d); void unkMiscOp9(); void startManiac(); -#else - void readIndexFile(int i); -#endif + + void readIndexFileV5(int i); }; +struct ScummDebugger { + Scumm *_s; + byte _command; + char *_parameters; + + bool _welcome; + + int _go_amount; + + char _cmd_buffer[256]; + + void on_frame(); + bool do_command(); + void enter(); + int get_command(); + void attach(Scumm *s); + void detach(); +}; + + + void waitForTimer(Scumm *s); void outputdisplay2(Scumm *s, int disp); extern const byte revBitMask[8]; diff --git a/scummsys.h b/scummsys.h index 301622f134..40fba9567a 100644 --- a/scummsys.h +++ b/scummsys.h @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.5 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.4 2001/10/16 10:01:47 strigeus * preliminary DOTT support * @@ -38,6 +42,8 @@ #pragma warning (disable: 4244) #pragma warning (disable: 4101) +#define scumm_stricmp stricmp + #if defined(CHECK_HEAP) #undef CHECK_HEAP @@ -65,6 +71,8 @@ typedef signed long int32; #elif defined(UNIX) +#define scumm_stricmp strcasecmp + #define CHECK_HEAP /* need this for the SDL_BYTEORDER define */ diff --git a/scummvm.cpp b/scummvm.cpp index d7af3f0a40..473aa0de7d 100644 --- a/scummvm.cpp +++ b/scummvm.cpp @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.11 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.10 2001/10/17 10:07:40 strigeus * fixed verbs not saved in non dott games, * implemented a screen effect @@ -57,9 +61,8 @@ #include "stdafx.h" #include "scumm.h" -#if !defined(DOTT) -void Scumm::initThings() { - readIndexFile(1); +void Scumm::initThingsV5() { + readIndexFileV5(1); _numVariables = 800; _numBitVariables = 2048; @@ -81,20 +84,17 @@ void Scumm::initThings() { allocResTypeData(7, MKID('NONE'),0x32,"string", 0); allocResTypeData(13, MKID('NONE'),0x32,"flobject", 0); allocResTypeData(14, MKID('NONE'),10,"boxes", 0); - readIndexFile(2); + readIndexFileV5(2); initRandSeeds(); setupOpcodes(); } -#else -void Scumm::initThings() { +void Scumm::initThingsV6() { setupOpcodes2(); - readIndexFile(); + readIndexFileV6(); } -#endif - void Scumm::initRandSeeds() { _randSeed1 = 0xA943DE35; _randSeed2 = 0x37A9ED27; @@ -242,18 +242,29 @@ void Scumm::scummMain(int argc, char **argv) { _fileHandle = NULL; -#if defined(INDY4) - _bootParam = -7873; -#else - _bootParam = 0; -#endif _debugMode = 1; - - parseCommandLine(argc, argv); + parseCommandLine(argc, argv); + + if (_exe_name==NULL) + error("Specify the name of the game to start on the command line"); + + if (!detectGame()) { + warning("Game detection failed. Using default settings"); + _majorScummVersion = 5; + } + + if (_gameId==GID_INDY4 && _bootParam==0) { + _bootParam = -7873; + } + initGraphics(this); - initThings(); + if (_majorScummVersion==6) + initThingsV6(); + else + initThingsV5(); + scummInit(); _vars[VAR_VERSION] = 21; @@ -271,6 +282,9 @@ void Scumm::scummMain(int argc, char **argv) { CHECK_HEAP updateScreen(this); + if (_debugger) + _debugger->on_frame(); + _vars[VAR_TIMER] = _scummTimer >> 2; do { waitForTimer(this); @@ -372,9 +386,9 @@ void Scumm::scummMain(int argc, char **argv) { unkVirtScreen2(); -#if !defined(DOTT) - playActorSounds(); -#endif + if (_majorScummVersion==5) + playActorSounds(); + unkSoundProc22(); camera._lastPos = camera._curPos; } while (1); @@ -396,47 +410,68 @@ void Scumm::parseCommandLine(int argc, char **argv) { _bootParam = atoi(s+1); goto NextArg; default: - goto ShowHelpAndExit; +ShowHelpAndExit:; + printf( + "ScummVM - Scumm Interpreter\n" + "Syntax:\n" + "\tscummvm [-b<num>] game\n" + "Flags:\n" + "\tb<num> - start in that room\n"); + exit(1); } s++; } NextArg:; } else { -ShowHelpAndExit:; - printf( - "ScummVM - Scumm Interpreter\n" - "Syntax:\n" - "\tscummvm [-b<num>]\n" - "Flags:\n" - "\tb<num> - start in that room\n"); - exit(1); + if (_exe_name) goto ShowHelpAndExit; + _exe_name = s; } } + } -struct GameNameList { + +struct VersionSettings { char *filename; char *gamename; + byte id,major,minor,middle; }; -static const GameNameList game_list[] = { - {"monkey1", "Monkey Island 1"}, - {"monkey2", "Monkey Island 2: LeChuck's revenge"}, - {"atlantis", "Indiana Jones 4 and the Fate of Atlantis"}, - {"fate", "Indiana Jones 4 and the Fate of Atlantis (Demo)"}, - {"tentacle", "Day Of The Tenctacle"}, +static const VersionSettings version_settings[] = { + {"monkey", "Monkey Island 1", GID_MONKEY, 5, 2, 2}, + {"monkey2", "Monkey Island 2: LeChuck's revenge", GID_MONKEY2, 5, 2, 2}, + {"atlantis", "Indiana Jones 4 and the Fate of Atlantis", GID_INDY4, 5, 5, 0}, + {"fate", "Indiana Jones 4 and the Fate of Atlantis (Demo)", GID_INDY4, 5, 5, 0}, + {"tentacle", "Day Of The Tenctacle", GID_TENTACLE, 6, 4, 2}, {NULL,NULL} }; -char *Scumm::getGameName() { - const GameNameList *gnl = game_list; - char buf[256]; +bool Scumm::detectGame() { + const VersionSettings *gnl = version_settings; + + _gameId = 0; + _gameText = NULL; do { - if (!strcmp(_exe_name, gnl->filename)) - return strdup(gnl->gamename); + if (!scumm_stricmp(_exe_name, gnl->filename)) { + _gameId = gnl->id; + _majorScummVersion = gnl->major; + _middleScummVersion = gnl->middle; + _minorScummVersion = gnl->minor; + _gameText = gnl->gamename; + return true; + } } while ((++gnl)->filename); - sprintf(buf, "Unknown game: \"%s\"", _exe_name); - return strdup(buf); + + return true; +} + +char *Scumm::getGameName() { + if (_gameText==NULL) { + char buf[256]; + sprintf(buf, "Unknown game: \"%s\"", _exe_name); + return strdup(buf); + } + return strdup(_gameText); } void Scumm::startScene(int room, Actor *a, int objectNr) { @@ -645,13 +680,13 @@ void Scumm::initRoomSubBlocks() { setPaletteFromRes(); } -#if defined(DOTT) - ptr = findResource(MKID('PALS'), roomptr); - if (ptr) { - _PALS_offs = ptr - roomptr; - setPalette(0); + if (_majorScummVersion==6) { + ptr = findResource(MKID('PALS'), roomptr); + if (ptr) { + _PALS_offs = ptr - roomptr; + setPalette(0); + } } -#endif initCycl(findResource(MKID('CYCL'), roomptr) + 8); @@ -884,7 +919,6 @@ Actor *Scumm::derefActorSafe(int id, const char *errmsg) { return derefActor(id); } -#if defined(DOTT) void Scumm::new_unk_1(int a) { error("stub new_unk_1(%d)", a); } @@ -927,7 +961,6 @@ void Scumm::startManiac() { warning("stub startManiac()"); } -#endif extern Scumm scumm; diff --git a/scummvm.dsp b/scummvm.dsp index 1a8ed466f2..60d7f79525 100644 --- a/scummvm.dsp +++ b/scummvm.dsp @@ -66,7 +66,8 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "CHECK_HEAP" /D "DUMP_SCRIPTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "CHECK_HEAP" /Yu"stdafx.h" /FD /GZ /c
+# SUBTRACT CPP /Fr
# ADD BASE RSC /l 0x41d /d "_DEBUG"
# ADD RSC /l 0x41d /d "_DEBUG"
BSC32=bscmake.exe
@@ -99,6 +100,10 @@ SOURCE=.\costume.cpp # End Source File
# Begin Source File
+SOURCE=.\debug.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\gfx.cpp
# End Source File
# Begin Source File
@@ -131,6 +136,10 @@ SOURCE=.\scummvm.cpp # End Source File
# Begin Source File
+SOURCE=.\sdl.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\sound.cpp
# End Source File
# Begin Source File
@@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.11 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.10 2001/10/17 11:30:19 strigeus * *** empty log message *** * @@ -58,6 +62,7 @@ #define SCALEUP_2x2 Scumm scumm; +ScummDebugger debugger; static SDL_Surface *screen; @@ -104,6 +109,9 @@ void waitForTimer(Scumm *s) { if (event.key.keysym.sym=='f' && event.key.keysym.mod&KMOD_CTRL) { s->_fastMode ^= 1; } + if (event.key.keysym.sym=='d' && event.key.keysym.mod&KMOD_CTRL) { + debugger.attach(s); + } break; case SDL_MOUSEMOTION: { @@ -345,19 +353,10 @@ void initGraphics(Scumm *s) { sizeof(ImageHeader), sizeof(Scumm) ); - - } #undef main int main(int argc, char* argv[]) { -#if defined(DOTT) - scumm._exe_name = "tentacle"; -#elif defined(INDY4) - scumm._exe_name = "atlantis"; -#else - scumm._exe_name = "monkey2"; -#endif scumm._videoMode = 0x13; scumm.scummMain(argc, argv); return 0; diff --git a/string.cpp b/string.cpp index df22980174..8ef0dce496 100644 --- a/string.cpp +++ b/string.cpp @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.3 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.2 2001/10/16 10:01:48 strigeus * preliminary DOTT support * @@ -182,39 +186,38 @@ void Scumm::CHARSET_1() { if (_vars[VAR_TALK_ACTOR] != 0xFF) a = derefActorSafe(_vars[VAR_TALK_ACTOR], "CHARSET_1"); -#if !defined(DOTT) if (a && string[0].overhead!=0) { - string[0].xpos = a->x - camera._curPos + 160; + if (_majorScummVersion==5) { + string[0].xpos = a->x - camera._curPos + 160; - if (_vars[VAR_TALK_STRING_Y] < 0) { - s = (a->scaley * (int)_vars[VAR_TALK_STRING_Y]) / 0xFF; - string[0].ypos = ((_vars[VAR_TALK_STRING_Y]-s)>>1) + s - a->elevation + a->y; + if (_vars[VAR_TALK_STRING_Y] < 0) { + s = (a->scaley * (int)_vars[VAR_TALK_STRING_Y]) / 0xFF; + string[0].ypos = ((_vars[VAR_TALK_STRING_Y]-s)>>1) + s - a->elevation + a->y; + } else { + string[0].ypos = _vars[VAR_TALK_STRING_Y]; + } + if (string[0].ypos < 1) + string[0].ypos = 1; + + if (string[0].xpos < 80) + string[0].xpos = 80; + if (string[0].xpos > 240) + string[0].xpos = 240; } else { - string[0].ypos = _vars[VAR_TALK_STRING_Y]; + s = a->scaley * a->new_1 / 0xFF; + string[0].ypos = ((a->new_1 - s)>>1) + s - a->elevation + a->y; + if (string[0].ypos<1) + string[0].ypos = 1; + + s = a->scalex * a->new_2 / 0xFF; + string[0].xpos = ((a->new_2 - s)>>1) + s + a->x - camera._curPos + 160; + if (string[0].xpos < 80) + string[0].xpos = 80; + if (string[0].xpos > 240) + string[0].xpos = 240; } - if (string[0].ypos < 1) - string[0].ypos = 1; - - if (string[0].xpos < 80) - string[0].xpos = 80; - if (string[0].xpos > 240) - string[0].xpos = 240; } -#else - if (a && string[0].overhead!=0) { - s = a->scaley * a->new_1 / 0xFF; - string[0].ypos = ((a->new_1 - s)>>1) + s - a->elevation + a->y; - if (string[0].ypos<1) - string[0].ypos = 1; - - s = a->scalex * a->new_2 / 0xFF; - string[0].xpos = ((a->new_2 - s)>>1) + s + a->x - camera._curPos + 160; - if (string[0].xpos < 80) - string[0].xpos = 80; - if (string[0].xpos > 240) - string[0].xpos = 240; - } -#endif + charset._top = string[0].ypos; charset._left = string[0].xpos; charset._left2 = string[0].xpos; @@ -489,9 +492,9 @@ byte *Scumm::addMessageToStack(byte *msg) { num+=2; break; case 9: -#if defined(DOTT) +//#if defined(DOTT) case 10: case 12: case 13: case 14: -#endif +//#endif *_msgPtrToAdd++ = 0xFF; *_msgPtrToAdd++ = chr; *_msgPtrToAdd++ = ptr[num++]; diff --git a/windows.cpp b/windows.cpp index 517db52424..3090665887 100644 --- a/windows.cpp +++ b/windows.cpp @@ -17,6 +17,10 @@ * * Change Log: * $Log$ + * Revision 1.7 2001/10/23 19:51:50 strigeus + * recompile not needed when switching games + * debugger skeleton implemented + * * Revision 1.6 2001/10/16 20:31:27 strigeus * misc fixes * @@ -828,13 +832,6 @@ void drawMouse(Scumm *s, int, int, int, byte*, bool) { int main(int argc, char* argv[]) { scumm._videoMode = 0x13; -#if defined(DOTT) - scumm._exe_name = "tentacle"; -#elif defined(INDY4) - scumm._exe_name = "atlantis"; -#else - scumm._exe_name = "monkey2"; -#endif wm->init(); wm->_vgabuf = (byte*)calloc(320,200); |