laurence dougal myers

New version of Scummbler (v2 r15). Changes:

  • Fix "drawObject" in V3-4 (was missing 3rd argument and outputting the wrong opcode).
  • Fix "getState" instruction's syntax (was originally defined as "if (getState(Local[0] == 0))", should have been "if (getState(Local[0]) == 0)").
  • "debug?" instruction renamed to "debug".
  • "PutCodeInString" - add support for a missing 2nd argument (as output by descumm).
  • Restructure code path structure, separate out some tests.
  • Added some tests based on my attempt to parse MI1 global scripts.
  • Change license to MIT license.
  • Update build scripts.
  • Update to the manual - change info for "getState", add support e-mail to contact list.




I've discovered there are some bugs in descumm's output (introduced by yours truly). I discovered these after trying to parse all the global scripts from Monkey Island 1 VGA floppy.

Script 82 and 83 - missing 2nd argument for PutCodeInString

[0000] (27) PutCodeInString(24, );
When the string is empty, descumm outputs nothing for the second argument. It should output this:
[0000] (27) PutCodeInString(24, "");
Scummbler now supports either scenario.


Script 135 - unknown string function

Global script 135 contains this line:
[049C] (FA) VerbOps(Var[100],[SetXY(0,Var[228]),Text("How to deal with  frustration, disappointment, " + unknown8(8224) + " and irritating  cynicism."),On(),Key(Var[229]);]);
The "unknown8" instruction is incorrect, and can't be parsed by Scummbler. You must manually change the text like so:
[049C] (FA) VerbOps(Var[100],[SetXY(0,Var[228]),Text("How to deal with  frustration, disappointment,\xFE\x08  and irritating  cynicism."),On(),Key(Var[229]);]);
Also, there shouldn't be a semi-colon after the "Key()" instruction, but Scummbler handles this anyway.


Script 152 - not joining string functions

[00BF] (14) print(255,[Color(Local[8]),Center(),Text(getString(VAR_HEAPSPACE)keepText())]);
This line should read:
[00BF] (14) print(255,[Color(Local[8]),Center(),Text(getString(VAR_HEAPSPACE) + keepText())]);
Again, you'll have to manually alter the script.