<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Lachnummers Spielereien</title>
	<atom:link href="http://spielchen.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://spielchen.wordpress.com</link>
	<description>PC-Spiele und drumherum</description>
	<lastBuildDate>Mon, 28 Dec 2009 18:01:32 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='spielchen.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Lachnummers Spielereien</title>
		<link>http://spielchen.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://spielchen.wordpress.com/osd.xml" title="Lachnummers Spielereien" />
	<atom:link rel='hub' href='http://spielchen.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Grim Fandango &#8211; Manny halb transparent &#8211; DirectDraw temporär deaktivieren</title>
		<link>http://spielchen.wordpress.com/2009/12/28/grim-fandango-manny-halb-transparent-directdraw-temporar-deaktivieren/</link>
		<comments>http://spielchen.wordpress.com/2009/12/28/grim-fandango-manny-halb-transparent-directdraw-temporar-deaktivieren/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 17:52:54 +0000</pubDate>
		<dc:creator>Lachnummer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Computerspiel]]></category>
		<category><![CDATA[DirectDraw]]></category>
		<category><![CDATA[Grim Fandango]]></category>
		<category><![CDATA[Lucas Arts]]></category>
		<category><![CDATA[Manny transparent]]></category>
		<category><![CDATA[video game]]></category>
		<category><![CDATA[Windows XP]]></category>

		<guid isPermaLink="false">http://spielchen.wordpress.com/?p=37</guid>
		<description><![CDATA[Gekauft irgendwann 2008-0x bei Kaufhof für 10 EUR. Probleme: * Stürzt sofort nach dem Intro ab. Lösung: Das Problem ist irgendwann von selbst verschwunden, oder ich habe vergessen, wie ich es gelöst habe. Vielleicht habe ich Patch 1.01 installiert? * CD muss immer eingelegt werden. Lösung: Nodisc. * Mit Windows XP, Nvidia-Graka, Forceware 195.62: Manny [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=spielchen.wordpress.com&amp;blog=10941063&amp;post=37&amp;subd=spielchen&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Gekauft irgendwann 2008-0x bei Kaufhof für 10 EUR.</p>
<p>Probleme:<br />
* Stürzt sofort nach dem Intro ab.  Lösung: Das Problem ist irgendwann von selbst verschwunden, oder ich habe vergessen, wie ich es gelöst habe.  Vielleicht habe ich Patch 1.01 installiert?  </p>
<p>* CD muss immer eingelegt werden. Lösung: Nodisc.</p>
<p>* Mit Windows XP, Nvidia-Graka, Forceware 195.62: Manny erscheint halb durchsichtig, und es gibt streifenförmige Bildfehler.  Bei im Spiel eingeschalteter Hardware-Beschleunigung ist Manny sogar unsichtbar.  </p>
<p>Lösung: DirectDraw deaktivieren bzw. die Beschleunigung dafür.  Das geht zum Beispiel mittels DxDiag.<br />
Ein Skript kann dabei helfen, nicht zu vergessen, DirectDraw nach dem Spielen wieder zu aktivieren.  Das Skript deaktiviert erst DirectDraw, dann startet es &#8222;GrimFandango.exe&#8220;, und danach aktiviert es DirectDraw wieder.</p>
<p>Eine Internet-Suche nach &#8222;disable direct draw command line&#8220; führte mich zu folgendem Foreneintrag, der zeigt, wie man DirectDraw mittels eines Skripts deaktiviert:<br />
<a href="http://www.techsupportforum.com/microsoft-support/windows-xp-support/437584-shortcut-batch-file-code-disable-direct-draw-acceleration.html">http://www.techsupportforum.com/microsoft-support/windows-xp-support/437584-shortcut-batch-file-code-disable-direct-draw-acceleration.html</a></p>
<p>Hier das Grim-Fandango-Skript, abgespeichert als &#8222;grim.bat&#8220;:</p>
<pre>
Reg Add HKLM\SOFTWARE\Microsoft\DirectDraw /V EmulationOnly /T REG_DWORD /D 1 /F
Reg Add HKLM\SOFTWARE\Microsoft\Direct3D\Drivers /V SoftwareOnly /T REG_DWORD /D 1 /F
GRIMFANDANGO.EXE
Reg Add HKLM\SOFTWARE\Microsoft\DirectDraw /V EmulationOnly /T REG_DWORD /D 0 /F
Reg Add HKLM\SOFTWARE\Microsoft\Direct3D\Drivers /V SoftwareOnly /T REG_DWORD /D 0 /F
</pre>
<p>Den Shortcut im Startmenü habe ich auf die Batch-Datei umgesetzt.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/spielchen.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/spielchen.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/spielchen.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/spielchen.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/spielchen.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/spielchen.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/spielchen.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/spielchen.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/spielchen.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/spielchen.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/spielchen.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/spielchen.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/spielchen.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/spielchen.wordpress.com/37/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=spielchen.wordpress.com&amp;blog=10941063&amp;post=37&amp;subd=spielchen&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://spielchen.wordpress.com/2009/12/28/grim-fandango-manny-halb-transparent-directdraw-temporar-deaktivieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b3ff69c70b4d6bb0166074e11d9dc95f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Lachnummer</media:title>
		</media:content>
	</item>
		<item>
		<title>Just Cause music archive file format</title>
		<link>http://spielchen.wordpress.com/2009/12/25/just-cause-music-archive-file-format/</link>
		<comments>http://spielchen.wordpress.com/2009/12/25/just-cause-music-archive-file-format/#comments</comments>
		<pubDate>Fri, 25 Dec 2009 17:43:56 +0000</pubDate>
		<dc:creator>Lachnummer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[archive]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[CSW2]]></category>
		<category><![CDATA[CTF2]]></category>
		<category><![CDATA[file format]]></category>
		<category><![CDATA[Just Cause]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[sab]]></category>
		<category><![CDATA[sob]]></category>
		<category><![CDATA[soundtrack]]></category>

		<guid isPermaLink="false">http://spielchen.wordpress.com/?p=15</guid>
		<description><![CDATA[Just Cause has its delightful music stored in a file named &#8222;MUSIC.sab&#8222;. There is only one file, which apparently contains all of the music pieces, making the file a combination of an archive and a container. Unfortunately, none of the programs that I know of knows how to handle archives of this format or with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=spielchen.wordpress.com&amp;blog=10941063&amp;post=15&amp;subd=spielchen&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Just Cause has its delightful music stored in a file named &#8222;<code>MUSIC.sab</code>&#8222;.  There is only one file, which apparently contains all of the music pieces, making the file a combination of an <a href="http://en.wikipedia.org/wiki/Archive_format">archive</a> and a <a href="http://en.wikipedia.org/wiki/Container_format_(digital)">container</a>.</p>
<p>Unfortunately, none of the programs that I know of knows how to handle archives of this <a href="http://en.wikipedia.org/wiki/Audio_file_format">format</a> or with the <a href="http://en.wikipedia.org/wiki/Filename_extension">extension</a> &#8222;<code>.sab</code>&#8222;.  The only <a href="http://www.file-extensions.org/sab-file-extension-alsong-album-file">music-related use of the .sab extension</a> that I could find states that it is used for &#8222;ALSong album files&#8220;.  However, when I tried to open &#8222;<code>MUSIC.sab</code>&#8220; with &#8222;ALSong&#8220;, nothing happened. Looks like ALSong does recognize the file type, at least it does not play the file.</p>
<p><strong>Audio encoding</strong></p>
<p>In an <a href="http://en.wikipedia.org/wiki/Digital_audio_editor">audio editing program</a> such as <a href="http://en.wikipedia.org/wiki/Audacity">Audacity</a>, using trial and error, the archive <a href="http://forum.xentax.com/viewtopic.php?t=2550">can be opened as</a> signed 16-bit <a href="http://en.wikipedia.org/wiki/PCM">PCM</a>, little-endian, 2-channel (Stereo), with zero offset (for the initial try) and 22050 Hz sample rate.  For example, in Audacity, this can be achieved using &#8222;Project -&gt; Import Raw Data -&gt; enter the .sab file name -&gt; OK -&gt; select parameter values given above. The music can then be played.  The fact that the music sounds right when imported this way shows that the music itself is encoded in the fomat that was used to import the archive.</p>
<p>When imported this way, all of the contained music pieces are stringed together in a single piece of 2:05:33 length.</p>
<p><strong>Archive header</strong></p>
<p>When looking at the file using a hex editor such as <a href="http://frhed.sourceforge.net/">Frhed</a>, it is apparent that the archive file starts with a <a href="http://en.wikipedia.org/wiki/Header_(computing)">header</a>, followed by the contained audio files.<br />
Let&#8217;s see if we can find out what information the header contains.</p>
<p>The header <a href="http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files">starts with bytes</a> that in <a href="http://en.wikipedia.org/wiki/ASCII">ASCII</a> encode the string &#8222;<code>CSW2</code>&#8222;.</p>
<p>When looking at the header in the hex editor, it is visually apparent that there is a regular structure.<br />
Using Frhed&#8217;s ability to adjust the line width, we resize the window so that the structure repeats every line.<br />
This happens at a line width of 28 bytes.<br />
Apparently the header contains a number of entries with similar structure.</p>
<p>There are two &#8222;columns&#8220; with &#8222;irregular&#8220; bytes.  The first entry has a zero in the &#8222;second irregular&#8220; column.<br />
In that column, the second entry has the same bytes that the first entry has in the &#8222;first irregular&#8220; column.  Could these be the length and offset of music pieces?</p>
<p>The fixed non-null bytes in each entry, when read as little-endian 32 bit integers, represent the value 22050.  Aha, the sampling frequency.<br />
Each entry apparently refers to one of the audio files contained in the archive.  The format of the entries is, where each value is represented as a little-endian 32 bit integer:</p>
<blockquote><p>2, samples_per_second, length_bytes, zero, zero, begin_byte, zero.</p></blockquote>
<p>The following perl program can print the sampling frequency, start, length and end of the music pieces, in hh:mm:ss.sss format:</p>
<pre>use strict;
sub main {
    my $chunk;
    my $s= 28;
    while (my $rc= read(STDIN, $chunk, $s)) {
        #print("$rc $chunk", "\n");
        my @x= unpack("V*", $chunk);
        #print("@x", "\n");
        my ($two, $samples_per_second, $length_bytes, undef, undef, $begin_byte) = @x;
        if (0 == $samples_per_second) { next; }
        if (0 == $length_bytes) { next; }
        if ($samples_per_second &gt; 800000) { next; }

        my $bytes_per_second= $samples_per_second * 4.0;
        my $end_byte= $begin_byte + $length_bytes;

        my $length_seconds_total= $length_bytes / $bytes_per_second;
        my  $begin_seconds_total=  $begin_byte  / $bytes_per_second;
        my    $end_seconds_total=    $end_byte  / $bytes_per_second;

        my $length_minutes_total= int($length_seconds_total / 60);
        my  $begin_minutes_total= int( $begin_seconds_total / 60);
        my    $end_minutes_total= int(   $end_seconds_total / 60);

        my $length_hours= int($length_minutes_total / 60);
        my  $begin_hours= int( $begin_minutes_total / 60);
        my    $end_hours= int(   $end_minutes_total / 60);

        my $length_minutes= $length_minutes_total - 60 * $length_hours;
        my  $begin_minutes=  $begin_minutes_total - 60 *  $begin_hours;
        my    $end_minutes=    $end_minutes_total - 60 *    $end_hours;

        my $length_seconds= $length_seconds_total - 3600 * $length_hours - 60 * $length_minutes;
        my  $begin_seconds=  $begin_seconds_total - 3600 *  $begin_hours - 60 *  $begin_minutes;
        my    $end_seconds=    $end_seconds_total - 3600 *    $end_hours - 60 *    $end_minutes;

        #printf("%5d Hz, length:%10.3f, begin:%10.3f, past end:%10.3f\n",
        #       $samples_per_second,
        #       $length_seconds, $begin_seconds, $end_seconds);
        printf("%5d Hz, length: %2d:%06.3f, begin: %2d:%02d:%06.3f, past end: %2d:%02d:%06.3f\n",
               $samples_per_second,
               #$length_hours,
               $length_minutes, $length_seconds,
               $begin_hours,  $begin_minutes,  $begin_seconds,
                 $end_hours,    $end_minutes,    $end_seconds);
    }
}
main();
</pre>
<p>This is what the program prints out:</p>
<pre>22050 Hz, length:  4:06.857, begin:  0:00:00.000, past end:  0:04:06.857
22050 Hz, length:  4:03.692, begin:  0:04:06.857, past end:  0:08:10.549
22050 Hz, length:  3:04.320, begin:  0:08:10.549, past end:  0:11:14.869
22050 Hz, length:  2:57.778, begin:  0:11:14.869, past end:  0:14:12.647
22050 Hz, length:  4:06.154, begin:  0:14:12.647, past end:  0:18:18.801
22050 Hz, length:  4:34.245, begin:  0:18:18.801, past end:  0:22:53.047
22050 Hz, length:  1:21.107, begin:  0:22:53.047, past end:  0:24:14.154
22050 Hz, length:  2:57.778, begin:  0:24:14.154, past end:  0:27:11.932
22050 Hz, length:  2:59.104, begin:  0:27:11.932, past end:  0:30:11.036
22050 Hz, length:  3:25.714, begin:  0:30:11.036, past end:  0:33:36.751
22050 Hz, length:  2:57.231, begin:  0:33:36.751, past end:  0:36:33.981
22050 Hz, length:  3:04.320, begin:  0:36:33.982, past end:  0:39:38.302
22050 Hz, length:  4:03.692, begin:  0:39:38.302, past end:  0:43:41.994
22050 Hz, length:  1:12.911, begin:  0:43:41.994, past end:  0:44:54.905
22050 Hz, length:  4:06.154, begin:  0:44:54.905, past end:  0:49:01.059
22050 Hz, length:  3:04.320, begin:  0:49:01.059, past end:  0:52:05.379
22050 Hz, length:  3:25.714, begin:  0:52:05.379, past end:  0:55:31.093
22050 Hz, length:  1:25.714, begin:  0:55:31.093, past end:  0:56:56.807
22050 Hz, length:  1:56.982, begin:  0:56:56.807, past end:  0:58:53.789
22050 Hz, length:  2:50.667, begin:  0:58:53.789, past end:  1:01:44.456
22050 Hz, length:  2:50.667, begin:  1:01:44.456, past end:  1:04:35.123
22050 Hz, length:  3:04.889, begin:  1:04:35.123, past end:  1:07:40.012
22050 Hz, length:  1:03.837, begin:  1:07:40.012, past end:  1:08:43.848
22050 Hz, length:  0:23.777, begin:  1:08:43.849, past end:  1:09:07.626
22050 Hz, length:  0:07.097, begin:  1:09:07.626, past end:  1:09:14.722
22050 Hz, length:  3:12.000, begin:  1:09:14.723, past end:  1:12:26.723
22050 Hz, length:  3:12.000, begin:  1:12:26.723, past end:  1:15:38.723
22050 Hz, length:  1:12.911, begin:  1:15:38.723, past end:  1:16:51.633
22050 Hz, length:  0:03.001, begin:  1:16:51.633, past end:  1:16:54.634
22050 Hz, length:  0:06.391, begin:  1:16:54.634, past end:  1:17:01.025
22050 Hz, length:  4:06.154, begin:  1:17:01.025, past end:  1:21:07.179
22050 Hz, length:  3:04.320, begin:  1:21:07.179, past end:  1:24:11.499
22050 Hz, length:  4:03.692, begin:  1:24:11.499, past end:  1:28:15.192
22050 Hz, length:  4:34.245, begin:  1:28:15.192, past end:  1:32:49.437
22050 Hz, length:  0:11.998, begin:  1:32:49.437, past end:  1:33:01.435
22050 Hz, length:  0:12.102, begin:  1:33:01.435, past end:  1:33:13.538
22050 Hz, length:  1:00.697, begin:  1:33:13.538, past end:  1:34:14.235
22050 Hz, length:  0:02.484, begin:  1:34:14.235, past end:  1:34:16.719
22050 Hz, length:  1:41.146, begin:  1:34:16.719, past end:  1:35:57.865
22050 Hz, length:  3:06.000, begin:  1:35:57.865, past end:  1:39:03.865
22050 Hz, length:  3:00.000, begin:  1:39:03.865, past end:  1:42:03.865
22050 Hz, length:  3:06.000, begin:  1:42:03.865, past end:  1:45:09.865
22050 Hz, length:  2:19.636, begin:  1:45:09.866, past end:  1:47:29.502
22050 Hz, length:  2:33.600, begin:  1:47:29.502, past end:  1:50:03.102
22050 Hz, length:  2:17.588, begin:  1:50:03.102, past end:  1:52:20.690
22050 Hz, length:  2:57.231, begin:  1:52:20.690, past end:  1:55:17.921
22050 Hz, length:  2:57.231, begin:  1:55:17.921, past end:  1:58:15.152
22050 Hz, length:  3:04.889, begin:  1:58:15.152, past end:  2:01:20.041
22050 Hz, length:  3:58.701, begin:  2:01:20.041, past end:  2:05:18.742
22050 Hz, length:  0:14.259, begin:  2:05:18.742, past end:  2:05:33.001
</pre>
<p>Now I need a way to automatically copy the pieces from the archive file.<br />
One way would be to write a program that does that.</p>
<p><strong>Titles</strong></p>
<p>It would be nice if the program applied the right names to the pieces.<br />
Looking at the file &#8222;<code>MUSIC.sob</code>&#8220; in a text editor, it is obvious that it contains music piece names.</p>
<p>Simply applying the &#8222;strings&#8220; program to the file already yields the names, although in all titles from &#8222;MUSIC_OBJECTIVE_01&#8243; onwards, the title is suffixed with a garbage character.</p>
<p>These are the titles as output by &#8222;string&#8220;, minus the trailing garbage and minus the leading &#8222;CTF2&#8243;.</p>
<pre>
MUSIC_ACTION_HIGH_01
MUSIC_ACTION_HIGH_02
MUSIC_ACTION_HIGH_03
MUSIC_ACTION_HIGH_04
MUSIC_ACTION_HIGH_05
MUSIC_ACTION_HIGH_06
MUSIC_ACTION_HIGH_07
MUSIC_ACTION_HIGH_08
MUSIC_ACTION_LOW_01
MUSIC_ACTION_LOW_02
MUSIC_ACTION_LOW_03
MUSIC_ACTION_LOW_04
MUSIC_ACTION_LOW_05
MUSIC_BLACKHAND_01
MUSIC_CARAMICAS_SPEECH
MUSIC_CARDRIVE_01
MUSIC_CARDRIVE_02
MUSIC_CARDRIVE_03
MUSIC_CARTEL_01
MUSIC_CIA_01
MUSIC_FLYING_01
MUSIC_FLYING_02
MUSIC_FLYING_03
MUSIC_LIBERATE_SETTLEMENT_01
MUSIC_LIBERATE_SETTLEMENT_02
MUSIC_LIBERATE_SETTLEMENT_03
MUSIC_LIGHT_01
MUSIC_LIGHT_02
MUSIC_MENU_01
MUSIC_MISSION_COMPLETE_01
MUSIC_MISSION_FAILED_01
MUSIC_OBJECTIVE_01
MUSIC_OBJECTIVE_02
MUSIC_OBJECTIVE_03
MUSIC_OBJECTIVE_04
MUSIC_RADIO_01
MUSIC_RADIO_02
MUSIC_REBEL_01
MUSIC_RICO_DEAD_01
MUSIC_ROMANCE_01
MUSIC_SAFEHOUSE_AGENCY_01
MUSIC_SAFEHOUSE_CARTEL_01
MUSIC_SAFEHOUSE_REBEL_01
MUSIC_SEXY_01
MUSIC_SEXY_02
MUSIC_SKYDIVE_01
MUSIC_SPEEDBOAT_01
MUSIC_SPEEDBOAT_02
MUSIC_SPEEDBOAT_03
MUSIC_STEALTH_01
MUSIC_STEALTH_02
MUSIC_COUNTDOWN_M1
</pre>
<p>Whether the last file is named &#8222;MUSIC_COUNTDOWN_M16&#8243; or &#8222;MUSIC_COUNTDOWN_M1&#8243;, I do not know.  I assume that it refers to the missile countdown at the end of mission 12, &#8222;Love is in the Air&#8220;.</p>
<p>Curiously, the number of names is 52, while the number of music pieces in MUSIC.sab is only 50.<br />
In the Music directory on my system, there is a second .sab file, &#8222;MUSIC_ENG.sab&#8220;, apparently of the same format as &#8222;MUSIC.sab&#8220;, which contains only two audio pieces: Caramicas&#8217; speech and the missile countdown.  Since 50 + 2 = 52, so probably the titles file (.sob) defines the titles of music pieces in both .sab files.</p>
<p>My first guess was that the titles appear in the same order as the music pieces appear in the .sab files.<br />
However, &#8222;MUSIC_CARAMICAS_SPEECH&#8220; and &#8222;MUSIC_COUNTDOWN_M1[6]&#8222;, which reside in the same .sab file, do not appear next to each other in the title list.<br />
My next guess was that the titles are sorted alphabetically.  &#8222;MUSIC_CARAMICAS_SPEECH&#8220; appears in the alphabetically correct place, but &#8222;MUSIC_COUNTDOWN_M1[6]&#8220; appears at the end of the list.</p>
<p>Looking at &#8222;<code>MUSIC.sob</code>&#8220; in the hex editor, we can see that it contains two main parts.  </p>
<p>The file starts with magic bytes that in ASCII encode &#8222;CTF2&#8243;.<br />
The first part has a regular structure.  Zooming out and adjusting the line width shows that it consists of entries of 18 times 4 bytes length, equaling 72 bytes per entry.</p>
<p>The second part contains the music piece names or titles. These entries have no fixed length, as is visually apparent in the hex editor.</p>
<p>Let&#8217;s first cut the pieces, then try to match them to the titles&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/spielchen.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/spielchen.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/spielchen.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/spielchen.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/spielchen.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/spielchen.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/spielchen.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/spielchen.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/spielchen.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/spielchen.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/spielchen.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/spielchen.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/spielchen.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/spielchen.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=spielchen.wordpress.com&amp;blog=10941063&amp;post=15&amp;subd=spielchen&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://spielchen.wordpress.com/2009/12/25/just-cause-music-archive-file-format/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b3ff69c70b4d6bb0166074e11d9dc95f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Lachnummer</media:title>
		</media:content>
	</item>
		<item>
		<title>Fahrenheit alias Indigo Prophecy</title>
		<link>http://spielchen.wordpress.com/2009/12/13/fahrenheit-alias-indigo-prophecy/</link>
		<comments>http://spielchen.wordpress.com/2009/12/13/fahrenheit-alias-indigo-prophecy/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 22:58:05 +0000</pubDate>
		<dc:creator>Lachnummer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Abenteuer]]></category>
		<category><![CDATA[Action]]></category>
		<category><![CDATA[Atari]]></category>
		<category><![CDATA[Bürogebäude]]></category>
		<category><![CDATA[Clan]]></category>
		<category><![CDATA[Diner]]></category>
		<category><![CDATA[dritte Person]]></category>
		<category><![CDATA[Dschungel]]></category>
		<category><![CDATA[durchgespielt]]></category>
		<category><![CDATA[Erotik]]></category>
		<category><![CDATA[Horror]]></category>
		<category><![CDATA[Keller]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[Militärlager]]></category>
		<category><![CDATA[Orakel]]></category>
		<category><![CDATA[Quantic Dream]]></category>
		<category><![CDATA[Raben]]></category>
		<category><![CDATA[schöner Soundtrack]]></category>
		<category><![CDATA[Stadt]]></category>
		<category><![CDATA[Toilette]]></category>
		<category><![CDATA[variable Kamera]]></category>
		<category><![CDATA[Wanzen]]></category>
		<category><![CDATA[Winter]]></category>
		<category><![CDATA[Wohnung]]></category>
		<category><![CDATA[Zeit:heute]]></category>

		<guid isPermaLink="false">http://spielchen.wordpress.com/?p=8</guid>
		<description><![CDATA[Entwickelt von Quantic Dream, vertrieben von Atari, gekauft 2009-11-17 als Zeitschriftenbeilage für 5 EUR. Positiv: Schöne Atmosphäre, spannend, schön detallierte Gesichter, die auch Gefühle zeigen. Schöne Musik, schöne Queer-Beet-Mischung, mit coolen Funk- und Soul-Stücken, Grunge, Easy-Listening, Jazz, Blues, Bossa. Man kann auch selbst Gitarre spielen. Schönes Bonusmaterial, kann mit Punkten erkauft werden. Leider kauft man [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=spielchen.wordpress.com&amp;blog=10941063&amp;post=8&amp;subd=spielchen&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Entwickelt von Quantic Dream, vertrieben von Atari, gekauft 2009-11-17 als Zeitschriftenbeilage für 5 EUR.</p>
<p>Positiv:</p>
<ul>
<li> Schöne Atmosphäre, spannend, schön detallierte Gesichter, die auch Gefühle zeigen.</li>
<li> Schöne Musik, schöne Queer-Beet-Mischung, mit coolen Funk- und Soul-Stücken, Grunge, Easy-Listening, Jazz, Blues, Bossa. Man kann auch selbst Gitarre spielen.</li>
<li> Schönes Bonusmaterial, kann mit Punkten erkauft werden. Leider kauft man meist die Katze im Sack &#8211; der Spieler weiss also vor dem Kauf nicht, welches Bonusmaterial er kauft.</li>
<li> Die Spielsprache ist während und auch nach der Installation auswählbar, zum Beispiel Englisch.</li>
<li> Romantik, Erotik</li>
<li> Halbwegs abgeschlossene Geschichte, wenn auch etwas sehr phantasievoll.</li>
<li> Viele unterschiedliche Perspektiven: Lucas, Marcus, Carla, Tyler, Lucas als Kind, Marcus als Kind, Das Orakel, Crash-Test-Dummy.</li>
<li> Viele Minispiele, teilweise liebevoll gestaltet, besonders die Sporteinlagen:
<ul>
<li> Farbspiel (Boxtraining, Basketball, Gedanken lesen, Kämpfe, Actionsequenzen),</li>
<li> Ausdauerspiel (Schwimmen, Aufwärmübungen, gegen Sturm angehen, Kämpfe, Actionsequenzen),</li>
<li> Klettern,</li>
<li> richtig Atmen (Keller, Irrenhaus),</li>
<li> Balancieren,</li>
<li> Schießtraining</li>
</ul>
</li>
<li> Der Spieler schießt nicht auf Lebewesen.</li>
</ul>
<p>Probleme:</p>
<p>Die Steuerung ist extrem schwer:</p>
<ul>
<li> Das Spiel hat viele Pluspunkte, schafft es aber schon im Tutorial, selbst Tombraider-erfahrenen Spielern auf die Nerven zu gehen.  Die voreingestellte Tastenbelegung ist so unkonventionell, dass in anderen Spielen gelerntes, zum Beispiel &#8222;WSAD&#8220;, nicht genutzt wird.<br />
Lösung für mich: Tasten so umbelegen, dass linkes &#8222;PAM&#8220; auf &#8222;WSAD&#8220; liegt, und das rechte auf den Pfeiltasten.<br />
Weitere Tasten um WSAD herum gelegt, also Q, E, F, TAB.</li>
<li> Die Kamera ist im Wesentlichen in der dritten Person. Nur durch Tastendruck bzw. Maustaste kann temporär in die erste Person gewechselt werden, solange die Taste gedrückt gehalten wird.</li>
<li> Solange ist jedoch keine Bewegung möglich. Das macht es störend schwer, sich umzusehen, und den gewünschten Weg zu gehen. Das wiegt besonders schwer während der Szenen, in denen der Spieler unter Zeitdruck steht, oder glaubt, unter Zeitdruck zu stehen.<br />
Lösung laut Internet: Gamepad nutzen &#8211; nicht probiert.</li>
<li> Schlechte Kamerasteuerung.  Teilweise zeigt die Kamera auch beim Bewegen der Spielfigur die Figur von vorn, so dass der Spieler nicht sehen kann, was vor der Figur liegt, zum Beispiel bei der nächtlichen Schleicheinlage der Kinder in der Militärbasis.</li>
<li> Für die Auswahl der Dialoge ist oft so wenig Zeit, dass ich nicht mal alle Möglichkeiten lesen kann, geschweige denn bewusst eine auswählen kann.  Dadurch habe ich oft eine zufällige Möglichkeit ausgewählt.</li>
<li> Es ist sehr schwer, die Information zu kriegen, die Agatha hinterlassen hat.  Schlüssel im Vogelfutter, Zeitungsausschnitt im Käfig.  Es ist kaum Zeit, den Text zu lesen.  Und es scheint keine Rolle zu spielen, ob man dies geschafft hat, oder nicht.</li>
<li> Der Kampf auf dem Dach des Waisenhauses dauert zu lange bzw. ist zu schwer.<br />
Lösung: Üben, üben, üben. Wenn Lucal nur ein Leben hat, und &#8222;stirbt&#8220;, hat er beim nächsten Versuch, &#8222;vom letzten Speicherpunkt an weiterzumachen&#8220;, zwei Leben.  Das hat mir dann gereicht.</li>
<li> Actionsequenzen erzwingen ständige Bedienung.  Dadurch werde ich von der gezeigten Szene so abgelenkt, dass ich sie nicht richtig mitbekomme. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </li>
</ul>
<p>Die Geschichte wird ungenügend erklärt:</p>
<ul>
<li>An mindestens Zwei Stellen stellt Carla Fragen zu Dingen, die sie nach dem Wissen des Spielers noch gar nicht kennt.  Es entsteht der Eindruck, dass das Spiel unvollständig ist.</li>
<li> Was bedeutet der Rabe, bzw. die Raben?  Wie kommt es, dass er von Anfang an auftaucht? Folgt er dem Orakel? Steckt jemand im Raben?  Zum Beispiel der Purple Clan, bzw. die KI/AI?  Gehört er zu Agatha?  War Agatha von Anfang an von den KI besessen? Warum führt der Rabe Lucas zur Achterbahn?</li>
<li> Was bedeuten die Wanzen?  Wieso tauchen sie auf?  Sollen es verkörperte &#8222;Computer-Bugs&#8220; sein?</li>
<li> Wer schickte die Email zum Kirstin-Fall?</li>
<li> Für zwei der drei Enden wird nicht erklärt, ob oder wie Lucas vom Mordvorwurf entlastet wird.</li>
<li> Was passiert mit Jade zum Schluss?  Anscheinend stirbt sie, aber eindeutig ist das nicht.  Vor allem ist es unmotiviert. Und ausserdem traurig.</li>
<li> Der Horror müsste nicht so ausgeprägt sein.</li>
</ul>
<p>Sonstiges</p>
<ul>
<li> Manuelles Speichern ist nicht möglich. Die automatische Speicherung kann zwar abgeschaltet werden, aber mein Eindruck ist, dass dann eben gar nicht gespeichert wird.</li>
<li> Das Spiel bleibt manchmal beim Laden des nächsten Abschnitts hängen.<br />
Lösung: Prozess beenden, Spiel neu starten, fortfahren.<br />
Zum Glück war der jeweils vorangegegangene Speicherpunkt richtig gespeichert.</li>
<li> Nervige Startfilmchen. Lösung: Entsprechende Dateien umbenennen und durch leere Dateien gleichen Namens ersetzen. Oder einfach immer Klicken.</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/spielchen.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/spielchen.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/spielchen.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/spielchen.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/spielchen.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/spielchen.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/spielchen.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/spielchen.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/spielchen.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/spielchen.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/spielchen.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/spielchen.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/spielchen.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/spielchen.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=spielchen.wordpress.com&amp;blog=10941063&amp;post=8&amp;subd=spielchen&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://spielchen.wordpress.com/2009/12/13/fahrenheit-alias-indigo-prophecy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b3ff69c70b4d6bb0166074e11d9dc95f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Lachnummer</media:title>
		</media:content>
	</item>
		<item>
		<title>Wunschzettel</title>
		<link>http://spielchen.wordpress.com/2009/12/13/hello-world/</link>
		<comments>http://spielchen.wordpress.com/2009/12/13/hello-world/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 21:24:33 +0000</pubDate>
		<dc:creator>Lachnummer</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Vielleicht(!) auch eine Liste der Dinge, über die ich mal schreiben könnte. Weniger Gewalt in Spielen &#8211; Gewalt ist für mich meist ein lästiger Nebenaspekt beim Spielen.  Wenn man seinen Eltern begeistert mal ein ansonsten beeindruckendes Spiel bzw. eine schöne Spielwelt vorführen möchte, und dann sagen muss &#8222;und jetzt müssen wir die da umlegen, sonst [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=spielchen.wordpress.com&amp;blog=10941063&amp;post=1&amp;subd=spielchen&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Vielleicht(!) auch eine Liste der Dinge, über die ich mal schreiben könnte.</p>
<p>Weniger Gewalt in Spielen &#8211; Gewalt ist für mich meist ein lästiger Nebenaspekt beim Spielen.  Wenn man seinen Eltern begeistert mal ein ansonsten beeindruckendes Spiel bzw. eine schöne Spielwelt vorführen möchte, und dann sagen muss &#8222;und jetzt müssen wir die da umlegen, sonst geht&#8217;s nicht weiter&#8220; &#8211; da merkt man so richtig, wie peinlich die Gewalt in Spielen oft ist.  Leider sind die technisch besten Spiele meist mit die gewaltbetontesten.</p>
<p>Simulation der ganzen Welt &#8211; Mit der simulieren Spiele immer mehr Aspekte der Welt, und immer größere Bereiche.  Beispiele sind:</p>
<ul>
<li>Frontier, das eine Galaxie simuliert</li>
</ul>
<ul>
<li>Nomad Soul, das es dem Spieler erlaubt, in einer (kleinen) Stadt frei herumzulaufen, und dabei jedes Gebäude zu betreten.</li>
<li>Morrowind simuliert ein relativ grosses Gebiet, einschliesslich Gebäudeinnerem</li>
<li>Just Cause, in dem man zwar kein Gebäude betreten kann, aber dafür eine recht große Insel frei bereisen kann, und das auch in der dritten Dimension.</li>
<li>Fallout 3 simuliert ein Gebiet besonders realistisch</li>
<li>Infinity soll ganze Galaxien und Planeten halbwegs realistisch simulieren</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/spielchen.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/spielchen.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/spielchen.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/spielchen.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/spielchen.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/spielchen.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/spielchen.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/spielchen.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/spielchen.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/spielchen.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/spielchen.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/spielchen.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/spielchen.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/spielchen.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=spielchen.wordpress.com&amp;blog=10941063&amp;post=1&amp;subd=spielchen&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://spielchen.wordpress.com/2009/12/13/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/b3ff69c70b4d6bb0166074e11d9dc95f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Lachnummer</media:title>
		</media:content>
	</item>
	</channel>
</rss>
