<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>a fool&#039;s deeds &#187; Softwarius</title>
	<atom:link href="http://www.jestarjokin.net/blog/category/softwarius/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jestarjokin.net/blog</link>
	<description>the journal of a tinker</description>
	<lastBuildDate>Sun, 22 Jan 2012 04:35:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Scummbler v2 r11</title>
		<link>http://www.jestarjokin.net/blog/2009/10/scummbler-v2-r11/</link>
		<comments>http://www.jestarjokin.net/blog/2009/10/scummbler-v2-r11/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 07:54:33 +0000</pubDate>
		<dc:creator>jestar_jokin</dc:creator>
				<category><![CDATA[Softwarius]]></category>
		<category><![CDATA[SCUMM]]></category>

		<guid isPermaLink="false">http://www.jestarjokin.net/blog/?p=36</guid>
		<description><![CDATA[Scummbler v2 r11 now returns error codes when the program exits. It also fixes an issue with the &#8220;cursorCommand&#8221; instruction not being parsed at all. Here are the error codes: 0 =no problems 1 = error in the arguments passed into Scummbler 2 = known error parsing the script(s) 3 = unknown error parsing the [...]]]></description>
			<content:encoded><![CDATA[<div>
<p><strong>Scummbler v2 r11</strong> now returns error codes when the program exits. It also fixes an issue with the &#8220;cursorCommand&#8221; instruction not being parsed at all.</p>
<p>Here are the error codes:</p>
<ul>
<li> 0 =no problems</li>
<li> 1 = error in the arguments passed into Scummbler</li>
<li> 2 = known error parsing the script(s)</li>
<li> 3 = unknown error parsing the script(s)</li>
</ul>
<p><strong>Source/Python Script</strong></p>
<p><a href="../../sw/scummbler_src_20091007.zip">http://www.jestarjokin.net/sw/scummbler_src_20091028.zip</a></p>
<p><strong>Win32 Binaries</strong></p>
<p><a href="../../sw/scummbler_bin_20091007.zip">http://www.jestarjokin.net/sw/scummbler_bin_20091028.zip</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.jestarjokin.net/blog/2009/10/scummbler-v2-r11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Win32 Binaries for SCUMM utils</title>
		<link>http://www.jestarjokin.net/blog/2009/09/win32-binaries-for-scumm-utils/</link>
		<comments>http://www.jestarjokin.net/blog/2009/09/win32-binaries-for-scumm-utils/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 12:05:04 +0000</pubDate>
		<dc:creator>jestar_jokin</dc:creator>
				<category><![CDATA[SCUMM]]></category>
		<category><![CDATA[Softwarius]]></category>

		<guid isPermaLink="false">http://www.jestarjokin.net/blog/?p=27</guid>
		<description><![CDATA[My butt pushed me off itself and forced me to make some Win32 binaries for the current revisions of ScummPacker, Scummbler, ScummSpeaks, and SCUMM Image Encoder (mi2img). They&#8217;re available on the main page, or after the break. Scummbler http://www.jestarjokin.net/sw/scummbler_bin_20090921.zip ScummPacker http://www.jestarjokin.net/sw/scummpacker_bin_20090921.zip ScummSpeaks http://www.jestarjokin.net/sw/scummspeaks_bin_20090921.zip SCUMM Image Encoder (mi2img) http://www.jestarjokin.net/sw/mi2img_bin_20090921.zip]]></description>
			<content:encoded><![CDATA[<p>My butt pushed me off itself and forced me to make some Win32 binaries for the current revisions of ScummPacker, Scummbler, ScummSpeaks, and SCUMM Image Encoder (mi2img). They&#8217;re available on the <a href="http://www.jestarjokin.net">main page</a>, or after the break.</p>
<p><span id="more-27"></span></p>
<p><strong>Scummbler</strong><br />
<a href="http://www.jestarjokin.net/sw/scummbler_bin_20090921.zip">http://www.jestarjokin.net/sw/scummbler_bin_20090921.zip</a></p>
<p><strong>ScummPacker</strong><br />
<a href="http://www.jestarjokin.net/sw/scummpacker_bin_20090921.zip">http://www.jestarjokin.net/sw/scummpacker_bin_20090921.zip</a></p>
<p><strong>ScummSpeaks</strong><br />
<a href="http://www.jestarjokin.net/sw/scummspeaks_bin_20090921.zip">http://www.jestarjokin.net/sw/scummspeaks_bin_20090921.zip</a></p>
<p><strong>SCUMM Image Encoder (mi2img)<br />
</strong><a href="http://www.jestarjokin.net/sw/mi2img_bin_20090921.zip">http://www.jestarjokin.net/sw/mi2img_bin_20090921.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jestarjokin.net/blog/2009/09/win32-binaries-for-scumm-utils/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scummbler v2 r6 (EDIT: r7)</title>
		<link>http://www.jestarjokin.net/blog/2009/07/scummbler-v2-r6/</link>
		<comments>http://www.jestarjokin.net/blog/2009/07/scummbler-v2-r6/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 11:39:38 +0000</pubDate>
		<dc:creator>jestar_jokin</dc:creator>
				<category><![CDATA[Softwarius]]></category>
		<category><![CDATA[goof]]></category>
		<category><![CDATA[SCUMM]]></category>

		<guid isPermaLink="false">http://www.jestarjokin.net/blog/2009/07/scummbler-v2-r6/</guid>
		<description><![CDATA[I MAY have uploaded the latest version of Scummbler without actually testing that it worked, and I MAY not have finished writing the code before I uploaded it. Then again, the moon landing MAY have been faked; we just can&#8217;t be sure about these things, can we? Anyway, new version of Scummbler that actually works [...]]]></description>
			<content:encoded><![CDATA[<p>I MAY have uploaded the latest version of Scummbler without actually testing that it worked, and I MAY not have finished writing the code before I uploaded it. Then again, the moon landing MAY have been faked; we just can&#8217;t be sure about these things, can we?</p>
<p>Anyway, new version of Scummbler that actually works is mysteriously available on the main page.</p>
<p>EDIT: Fixed a few more problems with a couple of instructions in r7.</p>
<p><a href="http://www.jestarjokin.net/sw/scummbler_src_20090723.zip">http://www.jestarjokin.net/sw/scummbler_src_20090725.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jestarjokin.net/blog/2009/07/scummbler-v2-r6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Robin Hood &#8211; Reversing a Microcosm</title>
		<link>http://www.jestarjokin.net/blog/2009/07/robin-hood/</link>
		<comments>http://www.jestarjokin.net/blog/2009/07/robin-hood/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 11:05:21 +0000</pubDate>
		<dc:creator>jestar_jokin</dc:creator>
				<category><![CDATA[Softwarius]]></category>
		<category><![CDATA[DOS]]></category>
		<category><![CDATA[reverse engineering]]></category>

		<guid isPermaLink="false">http://www.jestarjokin.net/blog/?p=5</guid>
		<description><![CDATA[The Adventures of Robin Hood is a game released in 1992, developed by Millenium. It was programmed by Steve Grand, who later went on to create the popular Creatures sim series. Robin Hood could be considered one of the first world sims, populated by independent characters, one of which you have some control over (Robin [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">The Adventures of Robin Hood is a game released in 1992, developed by Millenium. It was programmed by Steve Grand, who later went on to create the popular Creatures sim series.</p>
<p style="text-align: left;">
<div id="attachment_15" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.jestarjokin.net/blog/wp-content/uploads/2009/07/isovga_000.png"><img class="size-full wp-image-15" title="Robin Hood screenshot" src="http://www.jestarjokin.net/blog/wp-content/uploads/2009/07/isovga_000.png" alt="Robin Hood screenshot" width="320" height="200" /></a><p class="wp-caption-text">A scene from the introduction sequence of The Adventures of Robin Hood</p></div>
<p style="text-align: left;">Robin Hood could be considered one of the first world sims, populated by independent characters, one of which you have some control over (Robin Hood, of course). The gameplay is entirely non-linear, with multiple paths to completion.</p>
<p style="text-align: left;">I am investigating how to write a modern engine or interpreter for Robin Hood and its successor, Rome: Pathway to Power (aka Rome: AD92), with a path to creating new adventures.</p>
<p style="text-align: left;"><span id="more-5"></span></p>
<p style="text-align: left;">Robin Hood is based on a rules engine/interpreter called Microcosm, which Steve Grand originally created for some educational titles many years earlier. <a href="http://stevegrand.wordpress.com/2009/01/17/blast-from-the-past/#comment-304" target="_blank">I asked Steve on his blog</a> if he had any source code available, and unfortunately it seemed unlikely, but he did describe  Microcosm&#8217;s non-linear behaviour as follows:</p>
<blockquote style="text-align: left;"><p>&#8230; in Microcosm that simply translates into producing a DATABASE of IF/THEN statements, instead of the tree structure that would occur in normal code (normal code looks like: “IF A THEN (IF B THEN (…)) ELSE IF C…” – lots of brackets, creating a tree). So a Microcosm rulebase is a long list of completely independent IF/THEN statements, ALL of which are tested every tick of the system clock. Say one of the rules is “If A and B and C and D are true, then do E and F and G”. And say that doing G changes the external or internal environment of a character in some way. Now a different rule (which could be anywhere in the rulebase) might get triggered next tick. It doesn’t matter how the game got to that point.</p></blockquote>
<p style="text-align: left;">Interesting stuff! It would probably be a lot easier to write it from scratch, but since we&#8217;re trying to support the existing games it&#8217;s going to tricky.</p>
<p style="text-align: left;">
<p style="text-align: left;">
<div class="mceTemp">
<dl id="attachment_16" class="wp-caption alignleft" style="width: 26px;">
<dt class="wp-caption-dt"><a href="http://www.jestarjokin.net/blog/wp-content/uploads/2009/07/spritesample.png"><img class="size-full wp-image-16" title="Robin Hood Sprites" src="http://www.jestarjokin.net/blog/wp-content/uploads/2009/07/spritesample.png" alt="Robin Hood Sprites" width="16" height="80" /></a></dt>
</dl>
</div>
<p>Well, I&#8217;ve made a start at reverse engineering Robin Hood, starting with something a bit simpler. I&#8217;ve written a small decoder for the .VGA and .GFX files, which contain sprites and font characters. These files use a simple variation of Run Length Encoding (RLE). The image to the left shows the first five frames contained within MEN.VGA.</p>
<p style="text-align: left;">There are some quirks, of course. Some of the image data is hardcoded in the game&#8217;s executeable, such as a &#8220;default&#8221; palette, and the expected file sizes for each image. Most .GFX files store the image&#8217;s palette at the start of the file, except for CUBES0.GFX to CUBES3.GFX, which use the default palette. All .VGA files use the default palette.</p>
<p style="text-align: left;">The compressed images do not seem to contain all the pixels in the uncompressed image; all backgrounds come up one pixel short, and the sprite sheets are missing a few more pixels. I have assumed that the game just fills in missing pixels with 0&#215;00, which seems to match the observed output (check the first screenshot &#8211; the very bottom right pixel is black, when the surrounding pixels are dark green).</p>
<p style="text-align: left;">
<div class="mceTemp">
<dl id="attachment_17" class="wp-caption alignright" style="width: 42px;">
<dt class="wp-caption-dt"><a href="http://www.jestarjokin.net/blog/wp-content/uploads/2009/07/isosample.png"><img class="size-full wp-image-17" title="Robin Hood Isometric Tiles" src="http://www.jestarjokin.net/blog/wp-content/uploads/2009/07/isosample.png" alt="Robin Hood Isometric Tiles" width="32" height="192" /></a></dt>
</dl>
</div>
<p style="text-align: left;">Here&#8217;s some boring information about the image files:</p>
<ul>
<li>MEN.VGA and MEN2.VGA are 16 pixels wide, 3840 pixels tall. These files contain the character sprites.</li>
<li>IDEOGRAM.VGA is 16 pixels wide, 1600 pixels tall. This contains the action icons and UI elements.</li>
<li>ISOCHARS.VGA is 4 pixels wide, 1024 pixels tall. This contains the font used for in-game dialogue.</li>
<li>CUBES0.GFX to CUBES3.GFX are all 32 pixels wide, 1920 pixels tall, and contain the isometric tiles (cubes) for each season in the game.</li>
<li>All other .GFX files are 320&#215;240, and are background images.</li>
</ul>
<p style="text-align: left;">Here is my simple decoder script. It works for all Robin Hood images, and from a quick test it can decode at least the backgrounds from Rome. I have included the hardcoded &#8220;default&#8221; palette, in both VGA and RGB formats.</p>
<p><a href="http://www.jestarjokin.net/blog/wp-content/uploads/2009/07/rhvgadec_20090712.zip"></a><a href="http://www.jestarjokin.net/blog/wp-content/uploads/2009/07/vgadec_20090722.zip">Robin Hood Image Decoder (Python Script) (2009-07-22)</a></p>
<p>Next task&#8230; RULES.PRG!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jestarjokin.net/blog/2009/07/robin-hood/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

