laurence dougal myers

DRO Trimmer v3 r2
┄ 2012-05-05 ┄

DRO Trimmer v3 r2 has been released.

  • Add ability to play DRO songs within DRO Trimmer
  • Add command-line executable "dro_player" to play songs
  • Audio setup is read from an external "drotrim.ini" file
  • Change "Line" column to "Pos."
  • Different register search range - only up to 0xFF (will find usage in both low and high banks)
  • For V2 files, display high/low bank status in the register (e.g. "0x105" for register 5 in the high bank)
  • Validate V2 codemap does not exceed 128 entries

Note that the DRO Player functionality is totally optional if you're running the Python files directly; DRO Trimmer will degrade gracefully if you are missing the PyOPL or PyAudio libraries, so you can still edit files as normal, you just won't be able to play them within DRO Trimmer.

The command-line "dro_player" tool can be used to play an DRO song, handy if you're on a PC without a different DRO player (like Winamp + AdPlug).

You need to have the Microsoft Visual C++ 2008 runtimes installed in order to run the Windows executable for DRO Trimmer v3 r2. This is due to switching to Python 2.7.

Thanks to Adam Nielsen (Malvineous) for documenting the DRO v2 format, writing PyOPL and updating it to add support for Dual OPL-2 and OPL-3, and answering my questions!

Python Source (26.24 KB)

Win32 Executable (5.46 MB)

EDIT 2012-05-05: download links fixed.

How to compile Python 2.x extensions in Windows with MinGW
┄ 2012-04-23 ┄

I recently tried to make use of the PyOPL library, which makes use of C++ extensions for Python. Getting the code compiling in Windows using MinGW was a bit of a chore, as it's expecting to use Microsoft Visual Studio's C++ compiler. Getting MinGW working required a few extra steps.

  • Download and install MinGW (including both the C and C++ GNU compilers)
  • Add mingw32's "bin" directory to your PATH environment variable; e.g. append PATH with "c:\MinGW\bin;"
  • Create (or edit) a "distutils.cfg" file in "C:\Python27\Lib\distutils\distutils.cfg" (alter the path to match your Python installation)
  • In "distutils.cfg", add this text:
    [build]
    compiler=mingw32
  • Edit "C:\Python27\Lib\distutils\cygwinccompiler.py", do a find & replace to remove all references to " -mno-cygwin" (this option was removed from GCC)
That should be all you need to get up and running.

DRO Trimmer v3 r1
┄ 2012-04-22 ┄

DRO Trimmer v3 r1 has been released.

  • Adds support for DRO v2 file format (used from DOSBox 0.72 onwards).
  • Unhandled exceptions are now displayed in the GUI.
  • License changed from LGPL to the MIT license.
Python Source (20.85 KB)

Win32 Executable (4.74 MB)

SCUMM Image Encoder v2 r2
┄ 2012-02-12 ┄

SCUMM Image Encoder v2 r2 has been released.

  • Add support for encoding/decoding V2 graphics.
  • Add experimental support for encoding/decoding V1 graphics.
  • Big code restructure.
  • Add tests & example images/resources.
V2 graphics only support EGA.

Note that V1 graphics have considerable restrictions on the image data, due to being designed to work for the Commodore 64. Please view the "Readme.txt" file for more information.

Python Source (358.02 KB)

Win32 Executable (1.88 MB)

ScummSpeaks v3 r5
┄ 2012-02-12 ┄

ScummSpeaks v3 r5 has bee nreleased.

  • Add (hacky) suport for Curse of Monkey Island (CoMI) - note that you should only use the exported BUN file, and ignore the TAB file (because the sound files are split across two BUN files, and while you can load the one LANGUAGE.TAB file which contains mappings for both BUN files, you can only load one BUN file at a time into ScummSpeaks).
  • Import/Export Sync and Marker metadata as list of bytes for V7+ resources (.BUN).
  • Fix default value for LipSynch metadata in older resources (<= V6, MONSTER.SOU)
I've been sitting on this release for a while so I'm not sure how stale it is, let me know if there's any problems.

Python Source (62.87 KB)

Win32 Executable (5.07 MB)

jestarjokin.net - Website Updated
┄ 2012-02-12 ┄

I've updated the website, the software information is now dynamically generated from a backend database. This should make it easier for me to update, and makes the user experience more consistent. I've also increased the overall font size and jostled around some of the areas.

I've also gone through my archives and updated all the source & binaries links for old release, and added release dates for every release.

Setting up a LAMPStack Virtual Machine for Development
┄ 2012-01-22 ┄

EDIT 2012/04/23: This post was originally going to be the first in a series describing how to convert a static website into one that makes use of dynamic (server-side) technologies. However, I got embarressed with my PHP code and worried about security, so I've removed most of the post, but I have kept the instructions on setting up LAMPStack in a Virtual Machine.

Continue Reading →

Scummbler v2 r15
┄ 2011-07-12 ┄

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.
Binary:

/apps/scummbler/bin/2/15

Source:

/apps/scummbler/src/2/15

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.

MusicSort - a small script for renaming and sorting music folders
┄ 2011-06-19 ┄

I have a reasonable collection of music in a variety of compressed formats. I like to arrange my music in a tree structure on the filesystem, sorted by genre. I also like to name the album directories in a particular format. I had acquired a backlog of albums to rename & sort, so, one day when I was procrastinating, I wrote a music sorting script.

Win32 Binaries

/sw/musicsort_bin_20110619.zip

Python Source

/sw/musicsort_src_20110619.zip

This script (and the binaries) is license under the MIT License.

An explanation follows.

Continue Reading →

New mailing list for support issues, feature requests, and general chat
┄ 2011-06-19 ┄

I've decided to set up a dedicated mailing list, which can be used for any support issues for my tools, or feature requests, or just general game hacking discussions. Mostly because I need to show evidence of an "active community" in order to qualify for a free license for PyCharm, and it doesn't look like private e-mails will suffice. Feel free to use the mailing list to contact me; I reserve the right to forward to the mailing list any mail e-mailed directly to me, if I feel it is worth sharing with others.

The mailing list address:

support@lists.jestarjokin.net

You can set up subscriptions and other info here:

http://lists.jestarjokin.net/listinfo.cgi/support-jestarjokin.net

The archives will be located here:

http://lists.jestarjokin.net/private.cgi/support-jestarjokin.net