[Scummvm-cvs-logs] SF.net SVN: scummvm:[46987] tools/trunk/engines/scumm
fingolfin at users.sourceforge.net
fingolfin at users.sourceforge.net
Mon Jan 4 21:55:36 CET 2010
Revision: 46987
http://scummvm.svn.sourceforge.net/scummvm/?rev=46987&view=rev
Author: fingolfin
Date: 2010-01-04 20:55:36 +0000 (Mon, 04 Jan 2010)
Log Message:
-----------
TOOLS: Restore some descumm changes that were lost when the GUI tools branch replaced trunk
Modified Paths:
--------------
tools/trunk/engines/scumm/descumm.cpp
tools/trunk/engines/scumm/descumm6.cpp
Modified: tools/trunk/engines/scumm/descumm.cpp
===================================================================
--- tools/trunk/engines/scumm/descumm.cpp 2010-01-04 20:52:25 UTC (rev 46986)
+++ tools/trunk/engines/scumm/descumm.cpp 2010-01-04 20:55:36 UTC (rev 46987)
@@ -99,9 +99,10 @@
#define ANOFIRSTPAREN (1<<29)
#define ASTARTCOMMA (1<<28)
#define AVARSTORE (1<<27)
+#define ANOENDSEMICOLON (1<<26)
+#define ATOWITHLASTPAREN (1<<25)
-
void emit_if(char *buf, char *condition);
@@ -569,11 +570,17 @@
char *putascii(char *buf, int i) {
if (i > 31 && i < 128) {
+ // non-printable chars are escaped by backslashes as so: "\x00"
+ // backslashes and quote marks are escaped like so: "\\" "\""
+ if (i == '\\' || i == '"') {
+ buf[0] = '\\';
+ buf++;
+ }
buf[0] = i;
buf[1] = 0;
return buf + 1;
}
- return buf + sprintf(buf, "^%d", i);
+ return buf + sprintf(buf, "\\x%.2X", i);
}
char *get_ascii(char *buf) {
@@ -666,11 +673,19 @@
if (args & ATO) {
char tmp[256];
+ if (args & ATOWITHLASTPAREN) {
+ buf = strecpy(buf, ")");
+ }
strcpy(tmp, buforg);
emit_if(buforg, tmp);
- } else if (!(args & ANOLASTPAREN)) {
+ } else {
+ if (!(args & ANOLASTPAREN)) {
buf = strecpy(buf, ")");
}
+ if (!(args & ANOENDSEMICOLON) && buf[(strlen(buf) - 1)] != ';') {
+ buf = strecpy(buf, ";");
+ }
+ }
return strchr(buf, 0);
}
@@ -684,11 +699,14 @@
c &= 0x7f;
if (c < 8) {
- buf += sprintf(buf, "^%d", (int)c);
+ buf += sprintf(buf, "\\x%.2X", (int)c);
if (c > 3) {
- buf += sprintf(buf, "^%d", (int)get_byte());
+ buf += sprintf(buf, "\\x%.2X", (int)get_byte());
}
- } else
+ } else {
+ if (c == '\\' || c == '"') // backslash is the escape character
+ *buf++ = '\\';
+ }
*buf++ = c;
if (flag)
*buf++ = ' ';
@@ -716,7 +734,7 @@
buf += sprintf(buf, "Color(%d, %s)", get_byte(), arg);
break;
case 3:
- buf = do_tok(buf, "Name", A1ASCII);
+ buf = do_tok(buf, "Name", A1ASCII | ANOENDSEMICOLON);
break;
case 4:
buf += sprintf(buf, "Costume(%s)", arg);
@@ -736,7 +754,7 @@
char first = 1;
- buf = do_tok(buf, "ActorOps", ((opcode & 0x80) ? A1V : A1B) | ANOLASTPAREN);
+ buf = do_tok(buf, "ActorOps", ((opcode & 0x80) ? A1V : A1B) | ANOLASTPAREN | ANOENDSEMICOLON);
buf = strecpy(buf, ",[");
@@ -754,81 +772,81 @@
switch (opcode & 0x1F) {
case 0x00:
- buf = do_tok(buf, "Unknown", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "Unknown", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
case 0x01:
- buf = do_tok(buf, "Costume", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "Costume", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
case 0x02:
- buf = do_tok(buf, "WalkSpeed", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
+ buf = do_tok(buf, "WalkSpeed", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) | ANOENDSEMICOLON);
break;
case 0x03:
- buf = do_tok(buf, "Sound", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "Sound", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
case 0x04:
- buf = do_tok(buf, "WalkAnimNr", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "WalkAnimNr", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
case 0x05:
buf =
- do_tok(buf, "TalkAnimNr", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
+ do_tok(buf, "TalkAnimNr", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) | ANOENDSEMICOLON);
break;
case 0x06:
- buf = do_tok(buf, "StandAnimNr", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "StandAnimNr", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
case 0x07:
buf =
do_tok(buf, "Nothing",
((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) |
- ((opcode & 0x20) ? A3V : A3B));
+ ((opcode & 0x20) ? A3V : A3B) | ANOENDSEMICOLON);
break;
case 0x08:
- buf = do_tok(buf, "Init", 0);
+ buf = do_tok(buf, "Init", ANOENDSEMICOLON);
break;
case 0x09:
- buf = do_tok(buf, "Elevation", ((opcode & 0x80) ? A1V : A1W));
+ buf = do_tok(buf, "Elevation", ((opcode & 0x80) ? A1V : A1W) | ANOENDSEMICOLON);
break;
case 0x0A:
- buf = do_tok(buf, "DefaultAnims", 0);
+ buf = do_tok(buf, "DefaultAnims", ANOENDSEMICOLON);
break;
case 0x0B:
- buf = do_tok(buf, "Palette", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
+ buf = do_tok(buf, "Palette", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) | ANOENDSEMICOLON);
break;
case 0x0C:
- buf = do_tok(buf, "TalkColor", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "TalkColor", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
case 0x0D:
- buf = do_tok(buf, "Name", A1ASCII);
+ buf = do_tok(buf, "Name", A1ASCII | ANOENDSEMICOLON);
break;
case 0x0E:
- buf = do_tok(buf, "InitAnimNr", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "InitAnimNr", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
// case 0x0F: buf=do_tok(buf, "PaletteList", A1LIST); break;
case 0x10:
- buf = do_tok(buf, "Width", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "Width", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
case 0x11:
if (g_options.scriptVersion == 5)
- buf = do_tok(buf, "Scale", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
+ buf = do_tok(buf, "Scale", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) | ANOENDSEMICOLON);
else
- buf = do_tok(buf, "Scale", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "Scale", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
case 0x12:
- buf = do_tok(buf, "NeverZClip", 0);
+ buf = do_tok(buf, "NeverZClip", ANOENDSEMICOLON);
break;
case 0x13:
- buf = do_tok(buf, "SetZClip", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "SetZClip", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
case 0x14:
- buf = do_tok(buf, "IgnoreBoxes", 0);
+ buf = do_tok(buf, "IgnoreBoxes", ANOENDSEMICOLON);
break;
case 0x15:
- buf = do_tok(buf, "FollowBoxes", 0);
+ buf = do_tok(buf, "FollowBoxes", ANOENDSEMICOLON);
break;
case 0x16:
- buf = do_tok(buf, "AnimSpeed", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "AnimSpeed", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
case 0x17:
- buf=do_tok(buf, "ShadowMode", ((opcode & 0x80) ? A1V : A1B));
+ buf=do_tok(buf, "ShadowMode", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
default:
buf += sprintf(buf, "Unknown%.2X()", opcode);
@@ -1048,7 +1066,7 @@
break;
case 0x22 + 1:
- do_tok(buf, "setCDVolume?", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
+ do_tok(buf, "setCDVolume", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
break;
case 0x23 + 1:
do_tok(buf, "setSoundLoudness", ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) | A3B);
@@ -1081,7 +1099,7 @@
buf = strecpy(buf, ",IG");
} while (1);
- strcpy(buf, ")");
+ strcpy(buf, ");");
}
void do_room_ops(char *buf) {
@@ -1103,7 +1121,7 @@
buf =
do_tok(buf, "SetPalColor",
((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W) |
- ((opcode & 0x20) ? A3V : A3W) | ANOLASTPAREN);
+ ((opcode & 0x20) ? A3V : A3W) | ANOLASTPAREN | ANOENDSEMICOLON);
opcode = get_byte();
buf = do_tok(buf, NULL, ASTARTCOMMA | ANOFIRSTPAREN | ((opcode & 0x80) ? A1V : A1B));
break;
@@ -1114,7 +1132,19 @@
do_tok(buf, "ShakeOff", 0);
break;
case 0x07:
- do_tok(buf, "Unused", 0);
+ // Possibly unused, but changed to match ScummVM anyway
+ //do_tok(buf, "Unused", 0);
+ buf = do_tok(buf, "SetRoomScale",
+ ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) |
+ ANOLASTPAREN | ANOENDSEMICOLON);
+ opcode = get_byte();
+ buf = do_tok(buf, NULL,
+ ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B) |
+ ASTARTCOMMA | ANOFIRSTPAREN | ANOLASTPAREN | ANOENDSEMICOLON);
+ opcode = get_byte();
+ buf = do_tok(buf, NULL,
+ ((opcode & 0x40) ? A2V : A2B) | // apparently it uses the param 2 bit
+ ASTARTCOMMA | ANOFIRSTPAREN);
break;
case 0x08:
buf =
@@ -1131,7 +1161,7 @@
case 0x0B:
buf =
do_tok(buf, "setRGBRoomIntensity",
- ANOLASTPAREN | ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ?
+ ANOLASTPAREN | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ?
A2V : A2W) |
((opcode & 0x20) ? A3V : A3W));
opcode = get_byte();
@@ -1144,7 +1174,7 @@
case 0x0C:
buf =
do_tok(buf, "setRoomShadow",
- ANOLASTPAREN | ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ?
+ ANOLASTPAREN | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ?
A2V : A2W) |
((opcode & 0x20) ? A3V : A3W));
opcode = get_byte();
@@ -1162,11 +1192,11 @@
break;
case 0x0F:
- buf = do_tok(buf, "palManipulate", ANOLASTPAREN | ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "palManipulate", ANOLASTPAREN | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1B));
opcode = get_byte();
buf =
do_tok(buf, NULL,
- ASTARTCOMMA | ANOFIRSTPAREN | ANOLASTPAREN | ((opcode & 0x80) ?
+ ASTARTCOMMA | ANOFIRSTPAREN | ANOLASTPAREN | ANOENDSEMICOLON | ((opcode & 0x80) ?
A1V : A1B) |
((opcode & 0x40) ? A2V : A2B));
opcode = get_byte();
@@ -1180,8 +1210,6 @@
default:
strcpy(buf, "Unknown??");
}
-
- strcat(buf, ")");
}
void do_room_ops_old(char *buf, byte opcode) {
@@ -1311,25 +1339,25 @@
void do_verbops_v2(char *buf, byte opcode) {
int subop = get_byte();
- buf = do_tok(buf, "VerbOps", ANOLASTPAREN);
+ buf = do_tok(buf, "VerbOps", ANOLASTPAREN | ANOENDSEMICOLON);
switch (subop) {
case 0:
- buf = do_tok(buf, "Delete", (opcode & 0x80) ? A1V : A1B);
+ buf = do_tok(buf, "Delete", (opcode & 0x80) ? A1V : A1B | ANOENDSEMICOLON);
break;
case 0xFF:
- buf = do_tok(buf, "State", A1B | A2B);
+ buf = do_tok(buf, "State", A1B | A2B | ANOENDSEMICOLON);
break;
default:
buf += sprintf(buf, "New-%d", subop);
- buf = do_tok(buf, "", A1B | A2B | ((opcode & 0x80) ? A3V : A3B) | A4B | A5ASCII);
+ buf = do_tok(buf, "", A1B | A2B | ((opcode & 0x80) ? A3V : A3B) | A4B | A5ASCII | ANOENDSEMICOLON);
}
- strecpy(buf, ")");
+ strecpy(buf, ");");
}
void do_verbops(char *buf, byte opcode) {
char first = 1;
- buf = do_tok(buf, "VerbOps", ((opcode & 0x80) ? A1V : A1B) | ANOLASTPAREN);
+ buf = do_tok(buf, "VerbOps", ((opcode & 0x80) ? A1V : A1B) | ANOLASTPAREN | ANOENDSEMICOLON);
buf = strecpy(buf, ",[");
do {
@@ -1341,60 +1369,60 @@
first = 0;
switch (opcode & 0x1F) {
case 0x1:
- buf = do_tok(buf, "Image", (opcode & 0x80) ? A1V : A1W);
+ buf = do_tok(buf, "Image", (opcode & 0x80) ? A1V : A1W | ANOENDSEMICOLON);
break;
case 0x2:
- buf = do_tok(buf, "Text", A1ASCII);
+ buf = do_tok(buf, "Text", A1ASCII | ANOENDSEMICOLON);
break;
case 0x3:
- buf = do_tok(buf, "Color", (opcode & 0x80) ? A1V : A1B);
+ buf = do_tok(buf, "Color", (opcode & 0x80) ? A1V : A1B | ANOENDSEMICOLON);
break;
case 0x4:
- buf = do_tok(buf, "HiColor", (opcode & 0x80) ? A1V : A1B);
+ buf = do_tok(buf, "HiColor", (opcode & 0x80) ? A1V : A1B | ANOENDSEMICOLON);
break;
case 0x5:
- buf = do_tok(buf, "SetXY", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W));
+ buf = do_tok(buf, "SetXY", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W) | ANOENDSEMICOLON);
break;
case 0x6:
- buf = do_tok(buf, "On", 0);
+ buf = do_tok(buf, "On", ANOENDSEMICOLON);
break;
case 0x7:
- buf = do_tok(buf, "Off", 0);
+ buf = do_tok(buf, "Off", ANOENDSEMICOLON);
break;
case 0x8:
- buf = do_tok(buf, "Delete", 0);
+ buf = do_tok(buf, "Delete", ANOENDSEMICOLON);
break;
case 0x9:
- buf = do_tok(buf, "New", 0);
+ buf = do_tok(buf, "New", ANOENDSEMICOLON);
break;
case 0x10:
- buf = do_tok(buf, "DimColor", (opcode & 0x80) ? A1V : A1B);
+ buf = do_tok(buf, "DimColor", (opcode & 0x80) ? A1V : A1B | ANOENDSEMICOLON);
break;
case 0x11:
- buf = do_tok(buf, "Dim", 0);
+ buf = do_tok(buf, "Dim", ANOENDSEMICOLON);
break;
case 0x12:
- buf = do_tok(buf, "Key", (opcode & 0x80) ? A1V : A1B);
+ buf = do_tok(buf, "Key", (opcode & 0x80) ? A1V : A1B | ANOENDSEMICOLON);
break;
case 0x13:
- buf = do_tok(buf, "Center", 0);
+ buf = do_tok(buf, "Center", ANOENDSEMICOLON);
break;
case 0x14:
- buf = do_tok(buf, "SetToString", (opcode & 0x80) ? A1V : A1W);
+ buf = do_tok(buf, "SetToString", (opcode & 0x80) ? A1V : A1W | ANOENDSEMICOLON);
break;
case 0x16:
buf =
- do_tok(buf, "SetToObject", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B));
+ do_tok(buf, "SetToObject", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ANOENDSEMICOLON);
break;
case 0x17:
- buf = do_tok(buf, "BackColor", (opcode & 0x80) ? A1V : A1B);
+ buf = do_tok(buf, "BackColor", (opcode & 0x80) ? A1V : A1B | ANOENDSEMICOLON);
break;
default:
buf += sprintf(buf, "Invalid%.2X()", opcode);
}
} while (1);
- strecpy(buf, "])");
+ strecpy(buf, "]);");
}
void do_print_ego(char *buf, byte opcode) {
@@ -1403,7 +1431,7 @@
if (opcode == 0xD8) {
buf = strecpy(buf, "printEgo([");
} else {
- buf = do_tok(buf, "print", ((opcode & 0x80) ? A1V : A1B) | ANOLASTPAREN);
+ buf = do_tok(buf, "print", ((opcode & 0x80) ? A1V : A1B) | ANOLASTPAREN | ANOENDSEMICOLON);
buf = strecpy(buf, ",[");
}
@@ -1418,31 +1446,31 @@
switch (opcode & 0x1f) {
case 0x0:
- buf = do_tok(buf, "Pos", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W));
+ buf = do_tok(buf, "Pos", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W) | ANOENDSEMICOLON);
break;
case 0x1:
- buf = do_tok(buf, "Color", ((opcode & 0x80) ? A1V : A1B));
+ buf = do_tok(buf, "Color", ((opcode & 0x80) ? A1V : A1B) | ANOENDSEMICOLON);
break;
case 0x2:
- buf = do_tok(buf, "Clipped", ((opcode & 0x80) ? A1V : A1W));
+ buf = do_tok(buf, "Clipped", ((opcode & 0x80) ? A1V : A1W) | ANOENDSEMICOLON);
break;
case 0x3:
- buf = do_tok(buf, "RestoreBG", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W));
+ buf = do_tok(buf, "RestoreBG", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W) | ANOENDSEMICOLON);
break;
case 0x4:
- buf = do_tok(buf, "Center", 0);
+ buf = do_tok(buf, "Center", ANOENDSEMICOLON);
break;
case 0x6:
if (g_options.GF_UNBLOCKED)
- buf = do_tok(buf, "Height", ((opcode & 0x80) ? A1V: A1W));
+ buf = do_tok(buf, "Height", ((opcode & 0x80) ? A1V: A1W) | ANOENDSEMICOLON);
else
- buf = do_tok(buf, "Left", 0);
+ buf = do_tok(buf, "Left", ANOENDSEMICOLON);
break;
case 0x7:
- buf = do_tok(buf, "Overhead", 0);
+ buf = do_tok(buf, "Overhead", ANOENDSEMICOLON);
break;
case 0x8:
- buf = do_tok(buf, "PlayCDTrack", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W));
+ buf = do_tok(buf, "PlayCDTrack", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W) | ANOENDSEMICOLON);
break;
case 0xF:{
buf = strecpy(buf, "Text(");
@@ -1784,7 +1812,7 @@
do_tok(buf, "createBoxMatrix", 0);
break;
default:
- sprintf(buf, "SetBoxUnknown%.2X", opcode);
+ sprintf(buf, "SetBoxUnknown%.2X;", opcode);
}
}
@@ -1859,18 +1887,18 @@
if (opcode & 0x80) {
char tmp[256];
get_var(tmp);
- buf += sprintf(buf, "cursorCommand(Hi(%s), Lo(%s))", tmp, tmp);
+ buf += sprintf(buf, "cursorCommand(Hi(%s), Lo(%s));", tmp, tmp);
} else {
int val = get_word();
- buf += sprintf(buf, "cursorCommand(%d, %d)", (val >> 8) & 0xFF, val & 0xFF);
+ buf += sprintf(buf, "cursorCommand(%d, %d);", (val >> 8) & 0xFF, val & 0xFF);
}
break;
case 0x40:
- sprintf(buf, "cutscene");
+ sprintf(buf, "cutscene();");
break;
case 0xC0:
- sprintf(buf, "endCutscene");
+ sprintf(buf, "endCutscene();");
break;
case 0x46:
@@ -1885,7 +1913,7 @@
d |= get_byte() << 8;
d |= get_byte() << 16;
d = 0xFFFFFF - d;
- sprintf(buf, "delay(%d)", d);
+ sprintf(buf, "delay(%d);", d);
break;
}
@@ -1942,7 +1970,7 @@
case 0xEB:
case 0xEE:
//dummy
- sprintf(buf, "dummy(%.2X)", opcode);
+ sprintf(buf, "dummy(%.2X);", opcode);
break;
@@ -1957,7 +1985,7 @@
case 0xB5:
case 0xF5:
do_tok(buf, "findObject",
- AVARSTORE | ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W));
+ AVARSTORE | ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
break;
case 0x71:
case 0xF1:
@@ -2035,7 +2063,7 @@
case 0x9D:
case 0xDD:
//ifClassOfIs
- do_tok(buf, "classOfIs", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ATO);
+ do_tok(buf, "classOfIs", ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ATO | ATOWITHLASTPAREN);
break;
case 0x3F:
@@ -2119,7 +2147,7 @@
//loadRoomWithEgo
buf =
do_tok(buf, "loadRoomWithEgo",
- ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ANOLASTPAREN);
+ ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ANOLASTPAREN | ANOENDSEMICOLON);
do_tok(buf, NULL, A1B | A2B | ANOFIRSTPAREN | ASTARTCOMMA);
break;
@@ -2145,13 +2173,13 @@
buf = get_var_or_byte(buf, (opcode & 0x80));
buf += sprintf(buf, ",\"");
do_decodeparsestring_v2(buf, opcode);
- strcat(buf, "\")");
+ strcat(buf, "\");");
break;
case 0xD8:
//printEgo
buf += sprintf(buf, "printEgo(\"");
do_decodeparsestring_v2(buf, opcode);
- strcat(buf, "\")");
+ strcat(buf, "\");");
break;
case 0xCC:
@@ -2560,7 +2588,7 @@
d |= get_byte() << 8;
d |= get_byte() << 16;
d = 0xFFFFFF - d;
- sprintf(buf, "delay(%d)", d);
+ sprintf(buf, "delay(%d);", d);
break;
}
@@ -2577,13 +2605,13 @@
buf = get_var_or_byte(buf, (opcode & 0x80));
buf += sprintf(buf, ",\"");
do_decodeparsestring_v2(buf, opcode);
- strcat(buf, "\")");
+ strcat(buf, "\");");
break;
case 0x75:
//printEgo
buf += sprintf(buf, "printEgo(\"");
do_decodeparsestring_v2(buf, opcode);
- strcat(buf, "\")");
+ strcat(buf, "\");");
break;
case 0x2E:
case 0xAE:
@@ -2592,13 +2620,13 @@
buf = get_var_or_byte(buf, (opcode & 0x80));
buf += sprintf(buf, ",\"");
do_decodeparsestring_v2(buf, opcode);
- strcat(buf, "\")");
+ strcat(buf, "\");");
break;
case 0x0D:
//printEgo_c64
buf += sprintf(buf, "printEgo_c64(\"");
do_decodeparsestring_v2(buf, opcode);
- strcat(buf, "\")");
+ strcat(buf, "\");");
break;
case 0x2D:
@@ -2613,7 +2641,7 @@
case 0x6E:
case 0xEE:
//dummy
- sprintf(buf, "dummy%.2X()", opcode);
+ sprintf(buf, "dummy%.2X();", opcode);
break;
case 0x86:
@@ -2969,19 +2997,19 @@
case 0x85:
case 0xC5:
if (g_options.scriptVersion == 5) {
- buf = do_tok(buf, "drawObject", ((opcode & 0x80) ? A1V : A1W) | ANOLASTPAREN);
+ buf = do_tok(buf, "drawObject", ((opcode & 0x80) ? A1V : A1W) | ANOLASTPAREN | ANOENDSEMICOLON);
opcode = get_byte();
switch (opcode & 0x1F) {
case 1:
- do_tok(buf, ", setXY(",
- ANOLASTPAREN | ANOFIRSTPAREN | ((opcode & 0x80) ? A1V : A1W) |
+ do_tok(buf, "setXY",
+ ASTARTCOMMA | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1W) |
((opcode & 0x40) ? A2V : A2W));
break;
case 2:
- do_tok(buf, ", setImage(", ANOLASTPAREN | ANOFIRSTPAREN | ((opcode & 0x80) ? A1V : A1W));
+ do_tok(buf, "setImage", ASTARTCOMMA | ANOENDSEMICOLON | ((opcode & 0x80) ? A1V : A1W));
break;
}
- strcat(buf, "));");
+ strcat(buf, ");");
} else {
buf = do_tok(buf, "drawObject",
@@ -3032,10 +3060,16 @@
case 0xCA:
case 0x6A:
case 0xEA:
- do_tok(buf, "startScript", ((opcode & 0x80) ? A1V : A1B) | A2LIST);
+ buf = do_tok(buf, "startScript", ((opcode & 0x80) ? A1V : A1B) | A2LIST | ANOLASTPAREN | ANOENDSEMICOLON);
+ if (opcode & 0x20) { // freeze resistant
+ buf += sprintf(buf, ",F");
+ }
+ if (opcode & 0x40) { // recursive
+ buf += sprintf(buf, ",R");
+ }
+ buf += sprintf(buf, ");");
break;
-
case 0x0B:
case 0x4B:
case 0x8B:
@@ -3109,7 +3143,7 @@
case 0x1D:
case 0x9D:
- do_tok(buf, "classOfIs", ((opcode & 0x80) ? A1V : A1W) | A2LIST | ATO);
+ do_tok(buf, "classOfIs", ((opcode & 0x80) ? A1V : A1W) | A2LIST | ATO | ATOWITHLASTPAREN);
break; /* arg1=object; vararg=classes to test; arg3=jumpoffs */
case 0x1E:
@@ -3131,7 +3165,7 @@
case 0xE4:
buf =
do_tok(buf, "loadRoomWithEgo",
- ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ANOLASTPAREN);
+ ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2B) | ANOLASTPAREN | ANOENDSEMICOLON);
do_tok(buf, NULL, A1W | A2W | ANOFIRSTPAREN | ASTARTCOMMA);
break;
@@ -3370,7 +3404,7 @@
d = get_byte();
d |= get_byte() << 8;
d |= get_byte() << 16;
- sprintf(buf, "delay(%d)", d);
+ sprintf(buf, "delay(%d);", d);
break;
}
@@ -3390,9 +3424,9 @@
int d;
d = get_byte();
if (d != 0)
- sprintf(buf, "beginOverride");
+ sprintf(buf, "beginOverride();");
else
- sprintf(buf, "endOverride");
+ sprintf(buf, "endOverride();");
break;
}
@@ -3465,7 +3499,7 @@
case 0xB5:
case 0xF5:
do_tok(buf, "findObject",
- AVARSTORE | ((opcode & 0x80) ? A1V : A1W) | ((opcode & 0x40) ? A2V : A2W));
+ AVARSTORE | ((opcode & 0x80) ? A1V : A1B) | ((opcode & 0x40) ? A2V : A2B));
break;
case 0x26:
@@ -3610,7 +3644,7 @@
case 0xA7:
if (g_options.scriptVersion == 5) {
- sprintf(buf, "dummy(%.2X)", opcode);
+ sprintf(buf, "dummy(%.2X);", opcode);
} else {
int d = get_byte();
buf += sprintf(buf, "saveLoadVars(");
@@ -3648,7 +3682,7 @@
return;
}
}
- buf += sprintf(buf, ")");
+ buf += sprintf(buf, ");");
}
break;
@@ -3658,7 +3692,7 @@
break;
case 0x6B:
- do_tok(buf, "debug?", ((opcode & 0x80) ? A1V : A1W));
+ do_tok(buf, "debug", ((opcode & 0x80) ? A1V : A1W));
break;
default:
Modified: tools/trunk/engines/scumm/descumm6.cpp
===================================================================
--- tools/trunk/engines/scumm/descumm6.cpp 2010-01-04 20:52:25 UTC (rev 46986)
+++ tools/trunk/engines/scumm/descumm6.cpp 2010-01-04 20:55:36 UTC (rev 46987)
@@ -444,10 +444,10 @@
NULL,
"VAR_REDRAW_ALL_ACTORS",
/* 96 */
+ "VAR_TIMER_1",
+ "VAR_TIMER_2",
NULL,
NULL,
- NULL,
- NULL,
/* 100 */
NULL,
NULL,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list