<?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>Breaking Eggs And Making Omelettes &#187; Nintendo</title>
	<atom:link href="http://multimedia.cx/eggs/category/nintendo/feed/" rel="self" type="application/rss+xml" />
	<link>http://multimedia.cx/eggs</link>
	<description>Topics On Multimedia Technology and Reverse Engineering</description>
	<lastBuildDate>Sun, 29 Apr 2012 05:01:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Shortcut To The Treasure</title>
		<link>http://multimedia.cx/eggs/shortcut-to-the-treasure/</link>
		<comments>http://multimedia.cx/eggs/shortcut-to-the-treasure/#comments</comments>
		<pubDate>Sat, 17 Nov 2007 19:46:47 +0000</pubDate>
		<dc:creator>Multimedia Mike</dc:creator>
				<category><![CDATA[Game Hacking]]></category>
		<category><![CDATA[Nintendo]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[nes]]></category>

		<guid isPermaLink="false">http://multimedia.cx/eggs/shortcut-to-the-treasure/</guid>
		<description><![CDATA[Reverse engineering opportunity with incredible payoff...]]></description>
			<content:encoded><![CDATA[<p><strong>Followup:</strong> Some Reddit readers tackled this challenge and conquered it. <a href="http://multimedia.cx/eggs/reddit-on-treasure-master/">Read up on it here.</a></p>
<p><center><br />
<a href="http://www.mobygames.com/game/nes/treasure-master"><img src="/eggs/images/treasure-master-nes-cart.jpg" alt="Treasure Master (NES) cartridge" border="0" /></a><br />
</center></p>
<p>Back in the glory days of the old <a href="http://www.nintendo.com/systemsclassic?type=nes">8-bit Nintendo Entertainment System</a>, I used to read my <a href="http://www.nintendo.com/nintendopower">Nintendo Power</a> magazine issues religiously. One issue that stood out to me, and that I never forgot about, is one that briefly mentioned <em><a href="http://www.mobygames.com/game/nes/treasure-master">Treasure Master</a></em> (volume 26, July 1991, <em><a href="http://www.mobygames.com/game/nes/robin-hood-prince-of-thieves">Robin Hood: Prince of Thieves</a></em> issue).</p>
<blockquote><p>
This will be the first NES game where you can actually win prizes by playing it to the finish! The Game Pak will be released in the fall, and everyone will have time to master it. When you finish the game, you&#8217;ll reach a point where you can enter a speical password. In February of 1992, American Softworks will reveal the password that will allow you to play a secret portion of the game. The first person to finish the secret level and call in will win a $25,000 bond. Many of those who finish later will still be eligible for prizes&#8211; the sooner you finish, the better the prize. As you can imagine, the code is top secret, and <strong>the password system has been proven uncrackable by MIT and the CIA</strong>. (emphasis added)
</p></blockquote>
<p><center></p>
<table>
<tr>
<td>
<img src="/eggs/images/nintendo-power-robin-hood-cover-small.jpg" alt="Nintendo Power -- Robin Hood cover" />
</td>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td align="center">
<a href="/eggs/images/treasure-master-coming-soon.jpg"><img src="/eggs/images/treasure-master-coming-soon-small.jpg" alt="Treasure Master (NES) -- Nintendo Power "coming soon" blurb" /><br />
<em>click for larger image</em></a>
</td>
</tr>
</table>
<p></center></p>
<p>So the gimmick for this substandard, side-scrolling, run &#038; jump game was that players would buy it, play it, and build up skill in a few months. Then, after everyone has had a chance to get really good at the game, the company would release a password that would unlock a secret stage. Play through this stage and you could win big prizes.</p>
<p><center><br />
<img src="/eggs/images/treasure-master-0-title.png" alt="Treasure Master (NES) -- Title screen" /><br />
</center></p>
<p>Naturally, the part about the <strong>uncrackable</strong> code caught my attention. I didn&#8217;t even realize the CIA provided such a vetting service. Anyway, I didn&#8217;t hear anything else about the game again. Many years passed and I saw the game in a used video game shop. I figured it was time to revisit the uncrackable code issue since I know a little more about computers and codes now. And I also know better than to accept an uncrackable code claim at face value.</p>
<p>How uncrackable is the code? The introductory blurb from Nintendo Power raises some questions, many of which can be answered by the <a href="http://www.atarihq.com/tsr/manuals/treasmas.txt">Treasure Master instruction manual</a>. The full details of the contest are provided. Apparently, the password was to be announced on MTV on April 11, 1992, probably during a commercial. Players would enter the password, along with their game cartridge&#8217;s unique serial number, in order to unlock the special levels of the game. Upon completion of the levels, the game would return a special winning number that the player could give to the operator on the other end of a 1-900 phone number to try to win a prize.</p>
<p>To be fair, the official manual doesn&#8217;t mention the uncrackable code nonsense. The James Bond material highlighted in the Nintendo Power preview can probably be attributed to some Marketing/PR flunkie at American Softworks working more closely with the magazine than their own engineering department.</p>
<p>Also, Nintendo really wants you to know that they have nothing to do with the contest:</p>
<p><center><br />
<img src="/eggs/images/treasure-master-4-info.png" alt="Treasure Master (NES) -- Disclaimers" /><br />
</center></p>
<p><strong>Threat Model</strong><br />
<span id="more-27"></span><br />
What does the game need to protect against? Presumably, the game needs to prevent a determined party from playing the levels before the appointed time, and it certainly needs to keep the prize-winning code secret. A determined attacker would need to have the tools and knowledge to dump out all of the ROM data, analyze it, and perhaps modify it and run the changes. This wasn&#8217;t exactly common knowledge back in 1991, but it certainly could have been done.</p>
<p><center><br />
<img src="/eggs/images/treasure-master-1-action.png" alt="Treasure Master (NES) -- Game play" /><br />
</center></p>
<p>One idea I had was that the unlock code to be released would be a symmetric cipher key that would decrypt the level data. However, that would only be plausible if <em>Treasure Master</em> were the type of NES cartridge in which all of the game&#8217;s graphic (CHR) data was stored in the code (PRG) space and shuttled the graphical data to CHR RAM on demand. According to the FCE Ultra emulator, these are the characteristics of the cartridge hardware:</p>
<pre>
 PRG ROM:    8 x 16KiB
 CHR ROM:   16 x  8KiB
 Mapper:  1
 Mirroring: Horizontal
</pre>
<p>The important point here is that the game had CHR ROMs. Still, it&#8217;s possible that the key could be used to decrypt some data from the PRG side in the NES&#8217; 2K of work RAM, data that is necessary to present the final level. This data includes tiling information for the background layout and sprite arrangement.</p>
<p><strong>Password Strength</strong></p>
<p><center><br />
<img src="/eggs/images/treasure-master-5-password.png" alt="Treasure Master (NES) -- Password screen" /><br />
</center></p>
<p>So there are 2 inputs when playing for the grand prize: A serial number and a password. The serial number is 8 digits long and can include 0-9. The password is 24 characters long and can include 32 different characters, including 0-9, exclamation point (!), and any of the 21 English language consonants. Since each character represents 5 bits of information (2<sup>5</sup> = 32), 24 * 5 = 120 bit password. That should have easily been a long enough key length to thwart even the most determined Nintendo nerd from brute forcing the password space, at least by the standards of 1991&#8242;s consumer computing strength.</p>
<p><strong>Other Threats</strong></p>
<p>The game&#8217;s manual warns against using game-altering devices as it might cause the game to output a bad number. The #1 game-altering device for the NES was the <a href="http://en.wikipedia.org/wiki/Game_genie">Galoob Game Genie</a>.</p>
<p>The password entry screen also warns gravely that a misentered code can result in disqualification. I took this to mean that the game might have a battery backup and only allows players to try a certain number of codes, perhaps in a certain time frame. This could lead to all kinds of thorny technical and usability issues, which don&#8217;t arise because the game doesn&#8217;t have a battery.</p>
<p><strong>Best Guess</strong></p>
<p>My hypothesis is that the secret password is the public half of a public/private key pair. One application for this key could be to decrypt a block of data needed for displaying the final level, a block of data that was encrypted with the analogous secret key. When the end of the secret level is reached, the game uses the public key to encrypt the serial number and displays the resulting ciphertext to the user (encoded at 5 bits/character, just like the original password). This ciphertext is telephoned into the 1-900 winners&#8217; hotline where the operator has a computer application that was built to decrypt the ciphertext with the private key. This yields the game&#8217;s serial number. This is then checked against the official database since participants were required to register their serial numbers in order to be eligible for the contest.</p>
<p>The secret password is known to be 3HDJL9DNQV2WYTV4S91RXR86. <a href="http://en.wikipedia.org/wiki/Treasure_Master">Wikipedia has a record</a> of what the prizes were but does not discuss any other outcome from the contest. Not just any serial number will suffice, unfortunately, so there must be a validity pattern for the serial number, sort of like credit card numbers. I don&#8217;t know of any valid serial numbers, and it seems likely that the only way to find one would be to reverse engineer the game.</p>
<p><center><br />
<img src="/eggs/images/treasure-master-2-underwater.png" alt="Treasure Master (NES) -- Underwater action" /><br />
</center></p>
<p>Using the model above would not prove completely uncrackable, per the game&#8217;s constraints. If an attacker figured out the model and knew that the serial number was just going to be encrypted using the secret key as a password run through, e.g., the <a href="http://en.wikipedia.org/wiki/RSA">RSA algorithm</a>, he could write a program that just simulated that behavior as soon as the public key was announced. However, perhaps the game could have a secret hash algorithm that was encrypted along with the secret data which would hash the serial number and then encrypt it. Actually, at that point, the encryption with the public key might be superfluous; just call the winning phone number and tell them your game serial number along with the special number (serial number computed with secret hash algorithm) and the operator&#8217;s program could verify the number based on that information alone.</p>
<p>And now that I put it like that, I realize that the public key idea probably isn&#8217;t necessary. Protect the secret game data on the cartridge with a symmetric key algorithm. Many such algorithms would be much faster and lighter-weight than a public key algorithm.</p>
<p>Thanks for reading through all of that. I have actually been sitting on this article for many years, waiting for an opportunity to flesh it out, though I am not sure if I will ever have time to get down to reverse engineering the game&#8217;s program.</p>
]]></content:encoded>
			<wfw:commentRss>http://multimedia.cx/eggs/shortcut-to-the-treasure/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Wii Motion JPEG</title>
		<link>http://multimedia.cx/eggs/wii-motion-jpeg/</link>
		<comments>http://multimedia.cx/eggs/wii-motion-jpeg/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 14:01:55 +0000</pubDate>
		<dc:creator>Multimedia Mike</dc:creator>
				<category><![CDATA[Nintendo]]></category>
		<category><![CDATA[motion jpeg]]></category>
		<category><![CDATA[nintendo wii]]></category>

		<guid isPermaLink="false">http://multimedia.cx/eggs/wii-motion-jpeg/</guid>
		<description><![CDATA[Did you know that the Nintendo Wii can play user videos? I didn&#8217;t, but the Wii can apparently play videos through a user&#8217;s SD card. I also didn&#8217;t know what format they have to be converted into in order to be played back &#8212; Motion JPEG. There is a Windows program based on &#8212; what [...]]]></description>
			<content:encoded><![CDATA[<p>Did you know that the <a href="http://en.wikipedia.org/wiki/Wii#Features">Nintendo Wii</a> can play user videos? I didn&#8217;t, but the Wii can apparently play videos through a user&#8217;s SD card. I also didn&#8217;t know what format they have to be converted into in order to be played back &#8212; <a href="http://wiki.multimedia.cx/index.php?title=Motion_JPEG">Motion JPEG</a>.</p>
<p><center><br />
<a href="http://en.wikipedia.org/wiki/Wii"><img src="/eggs/images/nintendo-wii.jpg" alt="Nintendo Wii" border="0" /></a><br />
</center></p>
<p>There is a Windows program based on &#8212; what else? &#8212; <a href="http://ffmpeg.org/">FFmpeg</a> called <a href="http://www.redkawa.com/videoconverters/wiivideo9/">Wii Video 9</a> that handily converts anything into the accepted multimedia format. From the Sony PlayStation 3 and PSP to the Apple iPod and now the Nintendo Wii, the trend is for consumer electronics devices to be able to play user videos. But they usually support more advanced formats like MPEG-4 and H.264. I&#8217;m guessing that part of the Wii&#8217;s comparably low price is directly attributable to lower multimedia technology licensing costs.</p>
<p>I don&#8217;t know why I find it so humorous to read the <a href="http://www.redkawa.com/forums/forumdisplay.php?f=16">Wii Video 9 forum</a> posts, such as <a href="http://www.redkawa.com/forums/showthread.php?t=351">&#8220;Why are the converted files so HUGE?&#8221;</a> I think we all need to respect that the deeper aspects of multimedia technology are not second nature to the general populace. One day, this stuff may truly be transparent and ubiquitous. Until then, Monsieur Scandragon has a point when he rants, &#8220;It doesn&#8217;t matter how bad it is at playing compressed video.. 10 seconds at BAD quality should NEVER be 25MB!!&#8221;</p>
<p>I have been too lazy to try the program myself. I wonder if it&#8217;s normal MJPEG data, or if it is unescaped data like that seen in the <a href="http://wiki.multimedia.cx/index.php?title=THP">THP format</a> common on the Nintendo GameCube. I also wonder about the audio format. Presumably, if they were too cheap to license MPEG-4 or H.264 video codecs, they&#8217;re not going to license MP3 or AAC either. I am guessing either straight PCM or their own custom ADPCM format.</p>
]]></content:encoded>
			<wfw:commentRss>http://multimedia.cx/eggs/wii-motion-jpeg/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>GameCube Multimedia Review</title>
		<link>http://multimedia.cx/eggs/gamecube-multimedia-review/</link>
		<comments>http://multimedia.cx/eggs/gamecube-multimedia-review/#comments</comments>
		<pubDate>Sat, 07 Oct 2006 02:56:30 +0000</pubDate>
		<dc:creator>Multimedia Mike</dc:creator>
				<category><![CDATA[Game Hacking]]></category>
		<category><![CDATA[Nintendo]]></category>

		<guid isPermaLink="false">http://multimedia.cx/eggs/gamecube-multimedia-review/</guid>
		<description><![CDATA[Poking around on a number of Nintendo GameCube games, I have found a pretty consistent mix of FMV formats. In due time, these will need to be entered into the MultimediaWiki: THP files seem to be the most prevalent H4M files have the markings of a hierarchical vector quantizer (like the letters &#8216;HVQ&#8217;); HVQ is [...]]]></description>
			<content:encoded><![CDATA[<p>Poking around on a number of Nintendo GameCube games, I have found a pretty consistent mix of FMV formats. In due time, these will need to be entered into the <a href="http://wiki.multimedia.cx/">MultimediaWiki</a>:</p>
<ul>
<li><a href="http://wiki.multimedia.cx/index.php?title=THP">THP files</a> seem to be the most prevalent</li>
<li>H4M files have the markings of a hierarchical vector quantizer (like the letters &#8216;HVQ&#8217;); HVQ is also used in Sorenson Video 1 and LucasArts video</li>
<li>Electronic Arts games have a VID format which has similar markings as a number of their other evolved game multimedia formats</li>
<li>One game has 11,500+ <a href="http://wiki.multimedia.cx/index.php?title=Ogg">Ogg</a> <a href="http://wiki.multimedia.cx/index.php?title=Vorbis">Vorbis</a> files; some of them appear to correspond via base filename to files with the extension .cib; I tend to think that these are corresponding video files</li>
<li><a href="http://wiki.multimedia.cx/index.php?title=Sofdec">Sofdec files</a>, as commonly seen on Sega Dreamcast games</li>
<li>DSP files, often paired as L and R files for stereo effect</li>
<li>occasional <a href="http://wiki.multimedia.cx/index.php?title=Bink_Container">BIK files</a></li>
</ul>
<p>Plus, there are a number of other audio files, probably encoded with a custom ADPCM format common on GameCube games.</p>
]]></content:encoded>
			<wfw:commentRss>http://multimedia.cx/eggs/gamecube-multimedia-review/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Caimans Video Codec</title>
		<link>http://multimedia.cx/eggs/caimans-video-codec/</link>
		<comments>http://multimedia.cx/eggs/caimans-video-codec/#comments</comments>
		<pubDate>Fri, 06 Oct 2006 03:40:28 +0000</pubDate>
		<dc:creator>Multimedia Mike</dc:creator>
				<category><![CDATA[Nintendo]]></category>

		<guid isPermaLink="false">http://multimedia.cx/eggs/caimans-video-codec/</guid>
		<description><![CDATA[Going back through some old posts, I decided to follow up on a codec named Caiman&#8217;s Video Codec For Gameboy Advance (new MultimediaWiki page). The official site has a number of movie trailers and anime clips encoded with some custom video and audio codecs. The interesting thing is that the samples are encoded as .gba [...]]]></description>
			<content:encoded><![CDATA[<p>Going back through some old posts, I decided to follow up on a codec named <a href="http://www.caimans.net/gbavideo/">Caiman&#8217;s Video Codec For Gameboy Advance</a> (<a href="http://wiki.multimedia.cx/index.php?title=Caimans_Video_Codec_For_GBA">new MultimediaWiki page</a>). The official site has a number of movie trailers and anime clips encoded with some custom video and audio codecs. The interesting thing is that the samples are encoded as .gba files which are apparently ROM images that are able to be played in an emulator such as <a href="http://vba.ngemu.com/">VisualBoyAdvance</a>. Therefore, there are no clean multimedia container files (e.g., AVI) for study.</p>
<p><center><br />
<a href="http://www.caimans.net/gbavideo/"><img src="/eggs/images/caimans-gba.png" alt="Caiman's Video in VisualBoyAdvance" /></a><br />
</center></p>
<p>Unsurprisingly, very few technical details are available. The <a href="http://www.caimans.net/gbavideo/tech.shtml">technology page</a> brags about how tweakable the parameters are, but mentions nothing about coding algorithms. Still, it&#8217;s interesting that these A/V codecs were designed and optimized for the Gameboy Advance.</p>
<p>Related Post:</p>
<ul>
<li><a href="http://multimedia.cx/eggs/survey-of-gba-coding-methods/">Survey Of GBA Coding Methods</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://multimedia.cx/eggs/caimans-video-codec/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My Very Own Search Engine</title>
		<link>http://multimedia.cx/eggs/my-very-own-search-engine/</link>
		<comments>http://multimedia.cx/eggs/my-very-own-search-engine/#comments</comments>
		<pubDate>Thu, 05 Oct 2006 03:48:27 +0000</pubDate>
		<dc:creator>Multimedia Mike</dc:creator>
				<category><![CDATA[Nintendo]]></category>

		<guid isPermaLink="false">http://multimedia.cx/eggs/my-very-own-search-engine/</guid>
		<description><![CDATA[Back in 1998, I started a web project called the Internet NES Database to catalog information about games for the greatest video game console system of all time, the Nintendo Entertainment System. I reasoned that a web database needed to be searchable but I couldn&#8217;t find any literature on exactly how to create a search [...]]]></description>
			<content:encoded><![CDATA[<p>Back in 1998, I started a web project called the Internet NES Database to catalog information about games for the greatest video game console system of all time, the <a href="http://en.wikipedia.org/wiki/Nintendo_Entertainment_System">Nintendo Entertainment System</a>. I reasoned that a web database needed to be searchable but I couldn&#8217;t find any literature on exactly how to create a search engine. So I sat down and thought about it and came up with a solution. I eventually refined the idea and later wrote this article about the design decisions I made but never got around to publishing it anywhere. I came across the article on my hard drive recently and figured I may as well publish it in case someone, somewhere might find it interesting.</p>
<p><center><br />
<a href="http://en.wikipedia.org/wiki/Nintendo_Entertainment_System"><img src="/eggs/images/8bitnes.jpg" alt="8-bit NES" /></a><br />
</center></p>
<p>It&#8217;s weird to think that I was building an elaborate search mechanism to index approximately 760 items (the total number of games in the database), though I had hoped to expand the database into something <a href="http://www.mobygames.com/">MobyGames</a>-like in due time. Keep in mind that at the outset, while the data was managed in a MySQL database, the data was exposed online through a series of static HTML pages; this was 1998 and it was a little difficult and expensive to get database hosting on the internet. Thus, I could not directly query a database, and I had limited CGI scripting facilities.</p>
<h3>Introduction</h3>
<p>I present the approach that I took in developing a simple search engine for the Internet NES Database as well as the thinking and reasoning behind the design decisions. It&#8217;s not highly sophisticated, but if you don&#8217;t know anything about search engine operation, this should give you a starting point.</p>
<p>When I started developing my video game database in early 1998 I knew that it would be much more usable if it featured a search engine. I had no idea how to write a search engine. Web searches on topics such as &#8220;search engine theory&#8221; turned up thousands of pages claiming to reveal the secrets of getting high ranks in popular search engines. I realized that I was on my own. So I sat down and thought really hard about how to write a search engine.</p>
<p><span id="more-337"></span></p>
<h3>Analysis</h3>
<p>The first thing I did was identify exactly what it was that I expected my search engine to do. In other words, I needed to anticipate how my site&#8217;s visitors would be using my search engine. I anticipated that they would first think to input the title of their favorite NES game, such as &#8220;The Legend of Zelda&#8221;. Therefore, if a user inputs &#8220;The Legend of Zelda&#8221; into the search engine, it needs to be able to find the page with that game.</p>
<p>Of course, if the user had to input the exact string &#8220;The Legend of Zelda&#8221; with all of the spacing and capitalization shown, the search engine would be of very limited use. A user might forgo capital letters and input &#8220;the legend of zelda&#8221;. He might omit &#8220;the&#8221; and simply input &#8220;legend of zelda&#8221;. He may be in a big hurry and also not know where the CAPS LOCK key is and input &#8220;ZELDA&#8221;. The search engine still needs to be able to associate those search strings with the title &#8220;The Legend of Zelda&#8221;.</p>
<p>It became immediately obvious that the search operation needed to be case-insensitive so that &#8220;zelda&#8221; and &#8220;ZELDA&#8221; are treated the same. I also needed to associate a lot of title permutations with the title. As shown in the above example, &#8220;zelda&#8221;, &#8220;legend of zelda&#8221;, and &#8220;the legend of zelda&#8221; all needed to be associated with &#8220;The Legend of Zelda&#8221;. I decided to take this idea to its logical extreme and associate all of these strings with the title:</p>
<ul>
<li>the
  </li>
<li>legend
  </li>
<li>of
  </li>
<li>zelda
  </li>
<li>the legend
  </li>
<li>legend of
  </li>
<li>of zelda
  </li>
<li>the legend of
  </li>
<li>legend of zelda
  </li>
<li>the legend of zelda
  </li>
</ul>
<p>Do you see the pattern? Many years after creating the search engine, I learned that this is called a powerset. If you have a set of four symbols, { a, b, c, d } then the powerset is:</p>
<ul>
<li>a
  </li>
<li>b
  </li>
<li>c
  </li>
<li>d
  </li>
<li>ab
  </li>
<li>bc
  </li>
<li>cd
  </li>
<li>abc
  </li>
<li>bcd
  </li>
<li>abcd
  </li>
</ul>
<p>If I had known that I was computing something called a powerset I might have been able to find an algorithm to do it. As it was, I spent a long time getting it right.</p>
<p>Examination of the powerset for &#8220;The Legend of Zelda&#8221; reveals that some of the strings, like &#8220;the&#8221; and &#8220;of&#8221;, are pretty useless and can be eliminated. The remaining strings need to be associated with &#8220;The Legend of Zelda&#8221;. How do we do this? The verb &#8220;associated&#8221; indicates that this would be a good job for associative arrays, a.k.a. hash arrays, hash tables, database hashes, hashes, etc. We&#8217;ll call them hashes in this document.</p>
<p>A hash is a collection of associated key/value pairs. For example, we could have a hash that maps (associates) fruits with their usual colors. An abstract representation would look like this:</p>
<table CELLPADDING="3">
<tr>
<th>key</th>
<th></th>
<th>value</th>
</tr>
<tr>
<td>apple</td>
<td>=></td>
<td>red</td>
</tr>
<tr>
<td>pear</td>
<td>=></td>
<td>green</td>
</tr>
<tr>
<td>grape</td>
<td>=></td>
<td>purple</td>
</tr>
<tr>
<td>banana</td>
<td>=></td>
<td>yellow</td>
</tr>
<tr>
<td>orange</td>
<td>=></td>
<td>orange</td>
</tr>
<tr>
<td>lemon</td>
<td>=></td>
<td>yellow</td>
</tr>
<tr>
<td>lime</td>
<td>=></td>
<td>green</td>
</tr>
</table>
<p>If you query this FruitColor hash with the key &#8220;banana&#8221;, you will get the value &#8220;yellow&#8221;. If you query with the key &#8220;grape&#8221;, you will get the value &#8220;purple&#8221;, and so on.</p>
<p>Now let&#8217;s apply the hash concept to the search engine. We&#8217;ll map each string in the title powerset (minus words like &#8220;the&#8221; and &#8220;of&#8221;) to the title:</p>
<table CELLPADDING="3">
<tr>
<th>key</th>
<th></th>
<th>value</th>
</tr>
<tr>
<td>legend</td>
<td>=></td>
<td>The Legend of Zelda</td>
</tr>
<tr>
<td>zelda</td>
<td>=></td>
<td>The Legend of Zelda</td>
</tr>
<tr>
<td>the legend</td>
<td>=></td>
<td>The Legend of Zelda</td>
</tr>
<tr>
<td>legend of</td>
<td>=></td>
<td>The Legend of Zelda</td>
</tr>
<tr>
<td>of zelda</td>
<td>=></td>
<td>The Legend of Zelda</td>
</tr>
<tr>
<td>the legend of</td>
<td>=></td>
<td>The Legend of Zelda</td>
</tr>
<tr>
<td>legend of zelda</td>
<td>=></td>
<td>The Legend of Zelda</td>
</tr>
<tr>
<td>the legend of zelda</td>
<td>=></td>
<td>The Legend of Zelda</td>
</tr>
</table>
<p>If you query this hash with the key &#8220;legend of zelda&#8221; or just &#8220;zelda&#8221;, you will get the value &#8220;The Legend of Zelda&#8221;.</p>
<p>So far, so good. I decided to try another title, such as &#8220;Zelda II: The Adventure of Link&#8221;. I didn&#8217;t like the look of that colon character in there. I decided that in addition to not dealing with uppercase characters, the search engine would also not deal with anything except lowercase characters and numbers. Therefore, the colon character will be stripped out.</p>
<p>Now we lowercase the title, strip out non-alphanumeric characters (including spaces), compute the powerset and map the powerset strings to the title using a hash. The result looks like this:</p>
<table CELLPADDING="3">
<tr>
<th>key</th>
<th></th>
<th>value</th>
</tr>
<tr>
<td>zelda</td>
<td>=></td>
<td>Zelda II: The Adventure of Link</td>
</tr>
<tr>
<td>ii</td>
<td>=></td>
<td>Zelda II: The Adventure of Link</td>
</tr>
<tr>
<td>adventure</td>
<td>=></td>
<td>Zelda II: The Adventure of Link</td>
</tr>
<tr>
<td>link</td>
<td>=></td>
<td>Zelda II: The Adventure of Link</td>
</tr>
<tr>
<td>zeldaii</td>
<td>=></td>
<td>Zelda II: The Adventure of Link</td>
</tr>
<tr>
<td>iithe</td>
<td>=></td>
<td>Zelda II: The Adventure of Link</td>
</tr>
<tr>
<td>theadventure</td>
<td>=></td>
<td>Zelda II: The Adventure of Link</td>
</tr>
<tr>
<td>adventureof</td>
<td>=></td>
<td>Zelda II: The Adventure of Link</td>
</tr>
<tr>
<td>oflink</td>
<td>=></td>
<td>Zelda II: The Adventure of Link</td>
</tr>
<tr>
<td>&#8230;</td>
<td>=></td>
<td>Zelda II: The Adventure of Link</td>
</tr>
</table>
<p>You get the idea and I don&#8217;t feel like typing out the rest of the permutations. That&#8217;s a computer&#8217;s job. Notice that &#8220;zelda&#8221; occurs again. It occurred when we were operating on &#8220;The Legend of Zelda&#8221;. Therefore, the string &#8220;zelda&#8221; needs to map onto both of the titles, &#8220;The Legend of Zelda&#8221; and &#8220;Zelda II: The Adventure of Link&#8221;:</p>
<table>
<tr>
<th>key</th>
<th></th>
<th>value</th>
</tr>
<tr>
<td>zelda</td>
<td>=></td>
<td>The Legend of Zelda,Zelda II: The Adventure of Link</td>
</tr>
</table>
<h3>Implementation</h3>
<p>Then I moved on to the actual implementation. There is a variety of standards and libraries for database hash files on UNIX platforms. I don&#8217;t know much about the differences/advantages/disadvantages of one compared to another. Currently, I&#8217;m using GNU gdbm. I wrote a Perl script which interfaced to the MySQL database and collected all of the titles and game IDs. I used the IDs because the games are referenced in the database by their IDs rather than their actual titles. For each title string, the Perl script lowercases the string, strips out the non-alphanumeric characters, computes the powerset and maps the significant resulting strings (tosses out &#8220;the&#8221;, &#8220;a&#8221;, &#8220;and&#8221;, &#8220;of&#8221;, etc.) to the game ID.</p>
<p>The original search.cgi script, which was the basis for the original database search engine, was written in Perl. It simply took the user&#8217;s input string, lowercased the string, stripped out non-alphanumeric characters and used it as a key in the database hash file. If the key wasn&#8217;t mapped to any values, the search script reported that the search was unsuccessful. If the key was mapped to one game ID, the CGI script used an HTTP &#8220;Location:&#8221; header to redirect the web browser directly to the relevant game page. Finally, if the key returned multiple game IDs, the IDs were used as keys into another database hash file which mapped game IDs to game titles. Then the search engine would list the titles returned from the search.</p>
<h3>Refinements</h3>
<p>The search.cgi script also included a facility to log all of the search queries, as well as their success rates, to a file. This was done so I could analyze search queries that database users were actually attempting and identify weaknesses in the search scheme. </p>
<p>One problem that I noticed right away was the number of variations of the word &#8216;and&#8217; used in game titles. The word could be represented as an ampersand (&#038;) or the letter &#8216;n&#8217;, possibly with an apostrophe before, after, or before and after. For example:</p>
<ul>
<li>Crash &#8216;n&#8217; The Boys Street Challenge
  </li>
<li>A Boy &#038; His Blob
  </li>
<li>Tombs And Treasure
  </li>
<li>Disney&#8217;s Chip &#8216;n Dale Rescue Rangers
  </li>
<li>Fire N Ice
  </li>
</ul>
<p>In the original search scheme, a query of &#8220;crash and the boys&#8221; would return no results because the search engine database hash contained the string &#8220;crash<b>n</b>theboys&#8221;, but not &#8220;crash<b>and</b>theboys&#8221;. I needed a standard &#8220;and&#8221;. Therefore, before stripping out non-alphanumeric characters, the Perl script that builds the hash file first replaces occurrences of &#8221; &#038; &#8220;, &#8221; n &#8220;, &#8221; &#8216;n &#8220;, &#8221; n&#8217; &#8220;, and &#8221; &#8216;n&#8217; &#8221; with the string &#8221; and &#8221; (note that the spaces before and after those strings are important). Similarly, when the search.cgi script prepares a user&#8217;s query for the hash, it performs the same replacement.</p>
<p>Examining the log of search queries revealed a huge problem regarding sequel games where the sequel number is denoted as a Roman numeral, e.g., Castlevania II: Simon&#8217;s Quest and Castlevania III: Dracula&#8217;s Curse. Users would enter the search string &#8220;Castlevania 3&#8243;. The search engine hash database didn&#8217;t contain a string &#8220;castlevania3&#8243;; it does contain the string &#8220;castlevaniaiii&#8221;. Therefore, the search engine reported that there were no search results. I felt this was very poor search engine behavior since it&#8217;s very unambiguous (from a human perspective) what the user was looking for. I solved this problem by converting all numbers to Roman numerals in both the hash database and the search queries. Therefore, Super Mario Bros. 3 is represented in the hash file as &#8220;supermariobrosiii&#8221;. The game &#8220;1942&#8243; is not internally represented as &#8220;1942&#8243;, but as the Roman numeral &#8220;mcmxlii&#8221;. When a user inputs the search query &#8220;Castlevania 3&#8243;, the search engine converts the string into &#8220;castlevaniaiii&#8221; and queries the hash. The proper page could now be fetched.</p>
<p>Finally, it became clear that although the strict searching mechanism was effective, the search engine needed to have a looser searching mechanism as well. I came to refer to these concepts as the primary and secondary searches. The primary search takes a user&#8217;s search query, lowercases it, converts numbers to Roman numerals, strips out all non-lowercase alphabetic characters and uses the resulting string to query for game IDs in the hash file. If that returns 0 or more than 1 results, the search engine attempts a secondary search which consists of lowercasing the search query, converting numbers to Roman numerals and stripping out all non-lowercase alphabetic and non-space characters. Then, the search engine splits the query up by the spaces and queries the hash for each individual word. Then it returns a list of unique results (if there were any). As an example, a confused visitor might query for &#8220;Mega Ninja Gaiden&#8221; which would fail the primary search. However, the secondary search would return all of the games with &#8220;mega&#8221; in the title, as well as games with &#8220;ninja&#8221;, and games with &#8220;gaiden&#8221;. As a more realistic example, it wouldn&#8217;t be uncommon for a visitor to search for &#8220;super mario 3&#8243; which is a common conversational way of abbreviating Super Mario Bros. 3. Again, even though it&#8217;s clear from a human&#8217;s perspective what the user is looking for, the primary search would fail miserably. But the secondary search would find the right title (and a number of other titles) if it queried the hash for &#8220;super&#8221;, then &#8220;mario&#8221;, then &#8220;iii&#8221; (remember that &#8220;3&#8243; will be converted to a Roman numeral).</p>
<h3>The Current Search Engine</h3>
<p>The latest iteration of the database, online as of January, 2001, contains the capability to search through game keywords and creators as well as titles. There are two hashes for each category: The first hash maps permuted strings of the mangled powerset to IDs and the second maps IDs back to full names or titles. A Perl script named makedb.pl periodically generates all of the database hash files from the MySQL database. The search engine consists of a PHP script named search.php.</p>
<h3>Conclusions</h3>
<p>I realize that this is not the best search engine design. I haven&#8217;t studied the specifics of other search techniques (mostly because when I started my own search engine, there were no examples to study). However, it&#8217;s important to recognize that this search scheme works for me and my meager database and I haven&#8217;t yet needed to come up with a better scheme. I analyzed the specific problem that I had and developed an adequate solution. Maybe a similar solution will work for you too.</p>
]]></content:encoded>
			<wfw:commentRss>http://multimedia.cx/eggs/my-very-own-search-engine/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zelda Quests On</title>
		<link>http://multimedia.cx/eggs/zelda-quests-on/</link>
		<comments>http://multimedia.cx/eggs/zelda-quests-on/#comments</comments>
		<pubDate>Mon, 11 Sep 2006 04:19:03 +0000</pubDate>
		<dc:creator>Multimedia Mike</dc:creator>
				<category><![CDATA[Nintendo]]></category>
		<category><![CDATA[ZeldaClassic]]></category>

		<guid isPermaLink="false">http://multimedia.cx/eggs/zelda-quests-on/</guid>
		<description><![CDATA[I do hope to one day follow up on more ZeldaClassic hacking. Meanwhile, John Berry/Ulf Magnet is beginning with some of my research and putting together his own Python utilities to work with the game&#8217;s data files. Related posts: The Data of Zelda The Format of Zelda]]></description>
			<content:encoded><![CDATA[<p>I do hope to one day follow up on more <a href="http://zeldaclassic.com/">ZeldaClassic</a> hacking. Meanwhile, <a href="http://www.ulfmagnet.com/2006/09/10/adventures-in-obscurity-zc-reader-a-reader-for-zeldaclassic-quest-files/">John Berry/Ulf Magnet</a> is beginning with some of my research and putting together his own Python utilities to work with the game&#8217;s data files.</p>
<p>Related posts:</p>
<ul>
<li><a href="http://multimedia.cx/eggs/the-data-of-zelda/">The Data of Zelda</a></li>
<li><a href="http://multimedia.cx/eggs/the-format-of-zelda/">The Format of Zelda</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://multimedia.cx/eggs/zelda-quests-on/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GameCube CVS</title>
		<link>http://multimedia.cx/eggs/gamecube-cvs/</link>
		<comments>http://multimedia.cx/eggs/gamecube-cvs/#comments</comments>
		<pubDate>Thu, 31 Aug 2006 03:53:44 +0000</pubDate>
		<dc:creator>Multimedia Mike</dc:creator>
				<category><![CDATA[Game Hacking]]></category>
		<category><![CDATA[Nintendo]]></category>

		<guid isPermaLink="false">http://multimedia.cx/eggs/gamecube-cvs/</guid>
		<description><![CDATA[When I started mounting GameCube disc images with my gcfuse utility, perhaps the strangest thing I found (apart from 11,500+ Ogg Vorbis files on one title) was intact CVS directory structures on a number of discs. Of course, CVS directories don&#8217;t give away much interesting detail; it&#8217;s not like there&#8217;s leaked source code living inside. [...]]]></description>
			<content:encoded><![CDATA[<p>When I started mounting GameCube disc images with my <a href="http://multimedia.cx/gcfuse/">gcfuse</a> utility, perhaps the strangest thing I found (apart from 11,500+ Ogg Vorbis files on one title) was intact CVS directory structures on a number of discs. Of course, CVS directories don&#8217;t give away much interesting detail; it&#8217;s not like there&#8217;s leaked source code living inside. Perhaps the most interesting thing is comparing the CVSROOT strings to information found in the <a href="http://www.mobygames.com/">MobyGames</a> database. So, <a href="http://www.mobygames.com/developer/sheet/view/developerId,78045/">Yasunari Soejima</a>, <a href="http://www.mobygames.com/developer/sheet/view/developerId,55559/">Hiroki Sotoike</a>, and <a href="http://www.mobygames.com/developer/sheet/view/developerId,125868/">Fumihisa Sato</a>: I just wanted to helpfully point out that you neglected to delete the CVS directories before creating the final disc images for certain GameCube games.</p>
<p><center><br />
<img src="/eggs/images/Nuvola_apps_xmag.png" alt="Magnifying glass" /><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://multimedia.cx/eggs/gamecube-cvs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>gcfuse, With Executable Support</title>
		<link>http://multimedia.cx/eggs/gcfuse-exe/</link>
		<comments>http://multimedia.cx/eggs/gcfuse-exe/#comments</comments>
		<pubDate>Sun, 27 Aug 2006 05:18:21 +0000</pubDate>
		<dc:creator>Multimedia Mike</dc:creator>
				<category><![CDATA[Game Hacking]]></category>
		<category><![CDATA[Nintendo]]></category>
		<category><![CDATA[Open Source Multimedia]]></category>

		<guid isPermaLink="false">http://multimedia.cx/eggs/gcfuse-exe/</guid>
		<description><![CDATA[I upgraded my gcfuse utility tonight. The main change was to expose the primary game executable file when browsing a GameCube filesystem. The primary executable is stored as an implicit part of the filesystem, separate from the directory structure. Being able to easily read this file is a useful feature if, for example, someone wishes [...]]]></description>
			<content:encoded><![CDATA[<p>I upgraded my <a href="http://multimedia.cx/gcfuse/">gcfuse utility</a> tonight. The main change was to expose the primary game executable file when browsing a GameCube filesystem. The primary executable is stored as an implicit part of the filesystem, separate from the directory structure. Being able to easily read this file is a useful feature if, for example, someone wishes to get at these executables for the purpose of disassembly.</p>
<p>For example, when mounting the first disc image of one of my few GC games that I have actually completed, <a href="http://www.mobygames.com/game/gamecube/metal-gear-solid-the-twin-snakes">Metal Gear Solid</a>:</p>
<pre>
$ ls -al mount/
total 1
dr-xr-xr-x 4 melanson users         0 Jul 15  2005 .
drwxr-xr-x 7 melanson users       760 Aug 26 21:48 ..
-r--r--r-- 1 melanson users        95 Jul 15  2005 .metadata
dr-xr-xr-x 4 melanson users         0 Jul 15  2005 audio
-r--r--r-- 1 melanson users 426387456 Jul 15  2005 demo.dat
-r--r--r-- 1 melanson users   1988128 Jul 15  2005 metal-gear-solid-the-twin-snakes-exe.dol
-r--r--r-- 1 melanson users      6496 Jul 15  2005 opening.bnr
dr-xr-xr-x 3 melanson users         0 Jul 15  2005 shared
-r--r--r-- 1 melanson users 198715392 Jul 15  2005 stage.dat
</pre>
<p>The executable file is metal-gear-solid-the-twin-snakes-exe.dol. The filename is a little long, which can happen since it is derived from the game title in the disc metadata, which can be nearly 1000 characters long. The GC executable format is known as DOL, probably short for Dolphin which was the codename of the GameCube during development.</p>
<p>I recognize that I&#8217;m likely the only person on the planet who cares about this utility but, hey, it&#8217;s my blog and what are blogs for if not to tell the world about the tedious minutiae of an individual&#8217;s life?</p>
<p>Related post:</p>
<ul>
<li><a href="http://multimedia.cx/eggs/gcfuse/">gcfuse</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://multimedia.cx/eggs/gcfuse-exe/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>gcfuse</title>
		<link>http://multimedia.cx/eggs/gcfuse/</link>
		<comments>http://multimedia.cx/eggs/gcfuse/#comments</comments>
		<pubDate>Tue, 18 Jul 2006 04:16:36 +0000</pubDate>
		<dc:creator>Multimedia Mike</dc:creator>
				<category><![CDATA[Game Hacking]]></category>
		<category><![CDATA[Nintendo]]></category>
		<category><![CDATA[Open Source Multimedia]]></category>

		<guid isPermaLink="false">http://multimedia.cx/eggs/?p=294</guid>
		<description><![CDATA[Mount GameCube filesystems...]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m taking useless academic exercises to new heights. I wrote <a href="http://multimedia.cx/gcfuse/">a utility called gcfuse</a> that allows you to mount filesystems replicated, one way or another, from <a href="http://en.wikipedia.org/wiki/Gamecube">Nintendo GameCube</a> DVDs.</p>
<p><center><br />
<a href="http://en.wikipedia.org/wiki/Gamecube"><img src="/eggs/images/200px-NGC_Gamecube.jpg" alt="Nintendo GameCube" /></a><br />
</center></p>
<p>What on earth for? I&#8217;ve heard tales of strange and wonderful FMV formats on those petite GameCube DVDs and I just had to know for myself. One game I&#8217;m playing right now is <em><a href="http://www.mobygames.com/game/gamecube/metroid-prime">Metroid Prime</a></em>, which has visuals that certainly appear to be pre-rendered multimedia files. Let&#8217;s find out:</p>
<pre>
$ gcfs metroidprime.gcm gcm/

$ ls gcm/
Audio         Metroid4.pak  NESemu.rel    SlideShow.PAK   metroid5.pak
AudioGrp.pak  Metroid6.pak  NESemuD.rel   TestAnim.Pak    opening.bnr
GGuiSys.pak   Metroid7.pak  NESemuP.rel   Tweaks.Pak
Metroid1.pak  Metroid8.pak  NoARAM.pak    Video
Metroid2.pak  MidiData.pak  SamGunFx.pak  client_pad.bin
Metroid3.pak  MiscData.pak  SamusGun.pak  default.dol

$ ls gcm/Video/
00_first_start.thp            08_GBA_fileselect.thp  attract9.thp
01_startloop.thp              AfterCredits.thp       creditBG.thp
[...]
</pre>
<p>Right away, a new multimedia format&#8211; <a href="http://wiki.multimedia.cx/index.php?title=THP">THP</a>. The <a href="http://www.gc-linux.org/">GC-Linux</a> project already has documentation about this <a href="http://www.gc-linux.org/docs/yagcd/chap15.html#sec15.34">MJPEG-like format</a>. Samples, of course, are <a href="http://samples.mplayerhq.hu/game-formats/thp/">available for your inspection</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://multimedia.cx/eggs/gcfuse/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>More NES Password Madness</title>
		<link>http://multimedia.cx/eggs/more-nes-password-madness/</link>
		<comments>http://multimedia.cx/eggs/more-nes-password-madness/#comments</comments>
		<pubDate>Sun, 11 Jun 2006 06:09:47 +0000</pubDate>
		<dc:creator>Multimedia Mike</dc:creator>
				<category><![CDATA[Nintendo]]></category>
		<category><![CDATA[Outlandish Brainstorms]]></category>

		<guid isPermaLink="false">http://multimedia.cx/eggs/?p=277</guid>
		<description><![CDATA[It's a sign...]]></description>
			<content:encoded><![CDATA[<p>I was perusing my old <a href="http://nintendopower.com/">Nintendo Power</a> issues today, as I am wont to do for no good reason, and I stumbled upon a forgotten bonus that the magazine shipped to its subscribers once upon a time&#8211; <em>Top Secret Passwords</em>:</p>
<p><center><br />
<a href="/eggs/images/top-secret-password-guide-large.jpg"><img src="/eggs/images/top-secret-password-guide-small.jpg" alt="Top Secret Password Guide cover" /></a><br />
<em>Click for a larger image, and to guess which game is covered by the level 8 password on the sticky note</em><br />
</center></p>
<p><em>Now I&#8217;m playing with power.</em> They put a tremendous amount of work into that cover. Passports for not only the Principality of NES but also the Republic of SNES. I guess in the early 1990s, nothing said &#8220;top secret&#8221; quite like a portable phone. Luckily, the book features passwords for Solar Jetman, the present object of my password infatuation. I wonder if the official password validator accepts the secret password comprised of all &#8216;Q&#8217;s, or if that&#8217;s handled by a special case.</p>
<p>Not only is Solar Jetman covered in the book but when I opened the book a carefully folded piece of paper slid out. It contained a number of very neatly written passwords, including ones for every world in Solar Jetman! It doesn&#8217;t look like my handwriting, plus the paper includes passwords for games that I never would have been caught dead playing. What a mystery. It&#8217;s almost like someone meant for me to find these clues and take up the cause of researching these ancient Nintendo password systems.</p>
<p>The password book contains passwords for a number of games where the only information carried in the password is what level the player was on. For a number of such games, I did a quick string check through the respective ROM data for the passwords. It looks like no coders bothered to use straight string comparison techniques for password validation.</p>
<p>One can only guess what sort of international espionage thrillers influenced the book&#8217;s artists, but their conceptualization of incognito (and airplane markings) involved a lot of pink:</p>
<p><center><br />
<a href="/eggs/images/pink-passwords-large.jpg"><img src="/eggs/images/pink-passwords-small.jpg" alt="Codename: Pink" /></a><br />
<em>Click for larger image of Codename: Pink Gamer</em><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://multimedia.cx/eggs/more-nes-password-madness/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

