aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actor.cpp11
-rw-r--r--costume.cpp27
-rw-r--r--debug.cpp143
-rw-r--r--gfx.cpp19
-rw-r--r--object.cpp92
-rw-r--r--resource.cpp64
-rw-r--r--script.cpp40
-rw-r--r--script_v1.cpp797
-rw-r--r--script_v2.cpp883
-rw-r--r--scumm.h609
-rw-r--r--scummsys.h8
-rw-r--r--scummvm.cpp135
-rw-r--r--scummvm.dsp11
-rw-r--r--sdl.cpp17
-rw-r--r--string.cpp63
-rw-r--r--windows.cpp11
16 files changed, 1547 insertions, 1383 deletions
diff --git a/actor.cpp b/actor.cpp
index 1f090c7c06..731dba22e7 100644
--- a/actor.cpp
+++ b/actor.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/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
diff --git a/gfx.cpp b/gfx.cpp
index f5540a723f..166ce6b1d0 100644
--- a/gfx.cpp
+++ b/gfx.cpp
@@ -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
diff --git a/scumm.h b/scumm.h
index 365a3d546e..15649a8586 100644
--- a/scumm.h
+++ b/scumm.h
@@ -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
diff --git a/sdl.cpp b/sdl.cpp
index c449bd692d..6e07776f20 100644
--- a/sdl.cpp
+++ b/sdl.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 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);