<?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>Undo Restart Restore &#187; Craft</title>
	<atom:link href="http://nitku.net/blog/category/craft/feed/" rel="self" type="application/rss+xml" />
	<link>http://nitku.net/blog</link>
	<description>Interactive Fiction theory and design</description>
	<lastBuildDate>Tue, 10 Jan 2012 17:48:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Starborn: the Vorple edition</title>
		<link>http://nitku.net/blog/2012/01/starborn-the-vorple-edition/</link>
		<comments>http://nitku.net/blog/2012/01/starborn-the-vorple-edition/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 17:45:43 +0000</pubDate>
		<dc:creator>Juhana</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Undum]]></category>
		<category><![CDATA[Vorple]]></category>
		<category><![CDATA[starborn]]></category>

		<guid isPermaLink="false">http://nitku.net/blog/?p=601</guid>
		<description><![CDATA[Almost one year ago to the date I released Starborn, a short keyword-based scifi story made with Inform 7. Now I&#8217;m proud to present an Undum-based version, enhanced with Vorple, of course. The content is essentially the same. Instead of typing the keywords you click on hyperlinks that are highlighted in the text and shown [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://transcripts.game-testing.org/undum/starborn/"><img src="http://nitku.net/blog/blogcontent/uploads/2012/01/Starborn-300x173.jpg" alt="A screenshot of the story, showing the story text, the map and the keyword list" title="Starborn Vorple edition screenshot" width="300" height="173" class="alignright size-medium wp-image-602" /></a>Almost one year ago to the date I released <a href="http://ifdb.tads.org/viewgame?id=xxzy1f49yw1n6ghj">Starborn</a>, a short keyword-based scifi story made with <a href="http://inform7.com">Inform 7</a>. Now I&#8217;m proud to present an <a href="http://undum.com">Undum</a>-based version, enhanced with <a href="http://vorple-if.com">Vorple</a>, of course.</p>
<p>The content is essentially the same. Instead of typing the keywords you click on hyperlinks that are highlighted in the text and shown in a separate list next to the story. A clickable, dynamic map of locations is displayed on the opposite side. There&#8217;s background music, but sound support is still a bit shaky in some browsers. Internet Explorer 7 or earlier will not work.</p>
<p>It uses the yet-unpublished version 1.2 of Vorple and demonstrates the use of the <a href="http://vorple-if.com/outgribe/2011/buttons/">button interface</a> in the map and in the keyword list, and tooltips that are displayed as brief instructions and as labels for the map. Under the hood it uses <a href="http://vorple-if.com/outgribe/2011/more-undum-link-types/">disposable links</a> and other similar features. It&#8217;s also using the <a href="https://github.com/juhana/if-recorder">IF Recorder</a> plugin, probably the first time for an Undum story.</p>
<ul>
<li><a href="http://transcripts.game-testing.org/undum/starborn/"><strong>Play online</strong></a></li>
<li><a href="https://github.com/juhana/starborn">Source code</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nitku.net/blog/2012/01/starborn-the-vorple-edition/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>IF Recorder version 3</title>
		<link>http://nitku.net/blog/2011/11/if-recorder-version-3/</link>
		<comments>http://nitku.net/blog/2011/11/if-recorder-version-3/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 21:14:57 +0000</pubDate>
		<dc:creator>Juhana</dc:creator>
				<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Inform 7]]></category>
		<category><![CDATA[Undum]]></category>

		<guid isPermaLink="false">http://nitku.net/blog/?p=593</guid>
		<description><![CDATA[The tool formerly known as &#8220;Transcript recording plugin for Parchment&#8221; has been successfully used as a betatester transcript recorder with at least one game, and even in the currently running IFComp. Thanks to liberal version numbering scheme it has now reached version 3 and has been renamed IF Recorder. Here are the major new features: [...]]]></description>
			<content:encoded><![CDATA[<p>The tool formerly known as &#8220;<a href="http://nitku.net/blog/2011/05/transcript-recording-plugin-for-parchment-released/">Transcript recording plugin for Parchment</a>&#8221; has been successfully used as a betatester transcript recorder with at least one game, and even in the currently running IFComp. Thanks to liberal version numbering scheme it has now reached version 3 and has been renamed <em>IF Recorder</em>.</p>
<p>Here are the major new features:</p>
<ul>
<li><strong>Works with <a href="http://undum.com">Undum</a>.</strong> Now someone might wonder why anyone would want to record hypertext fiction stories, but even if there&#8217;s less need to check what kind of input readers give, other reasons still apply: you might want to get statistical data on which choices the readers make, or see if the readers give up at some certain point in the story, or even find out if some of the choices just don&#8217;t work as they should.
</li>
<li><strong>Web interpreter template for Inform 7.</strong> There&#8217;s a ready-made Inform 7 template to use with the <a href="http://inform7.com/learn/man/doc394.html">&#8220;Release along with an interpreter&#8221;</a> option. This makes it easier to start using the recorder although you still have to set up the database and the server scripts.
</li>
</ul>
<p>The project&#8217;s new headquarters are at <a href="https://github.com/juhana/if-recorder">Github</a> along with the <a href="https://github.com/juhana/if-recorder/wiki/Installation">instructions</a> and <a href="https://github.com/juhana/if-recorder/downloads">downloads</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nitku.net/blog/2011/11/if-recorder-version-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Undum Cloak of Darkness</title>
		<link>http://nitku.net/blog/2011/05/undum-cloak-of-darkness/</link>
		<comments>http://nitku.net/blog/2011/05/undum-cloak-of-darkness/#comments</comments>
		<pubDate>Mon, 23 May 2011 16:56:25 +0000</pubDate>
		<dc:creator>Juhana</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Undum]]></category>

		<guid isPermaLink="false">http://nitku.net/blog/?p=576</guid>
		<description><![CDATA[I&#8217;ve made an Undum port of Cloak of Darkness. A literal translation of a parser IF game into hypertext fiction doesn&#8217;t really turn out to be the best game design there is, but it does demonstrate most of Undum&#8217;s core concepts pretty nicely. Play the game here Annotated source code: zipped package or the JavaScript [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve made an <a href="http://undum.com">Undum</a> port of <a href="http://www.firthworks.com/roger/cloak/">Cloak of Darkness</a>. A literal translation of a parser IF game into hypertext fiction doesn&#8217;t really turn out to be the best game design there is, but it does demonstrate most of Undum&#8217;s core concepts pretty nicely.</p>
<ul>
<li><a href="http://nitku.net/if/cloak/cloak.en.html">Play the game here</a></li>
<li>Annotated source code: <a href="http://nitku.net/if/cloak/cloak.zip">zipped package</a> or the <a href="http://nitku.net/if/cloak/cloak.game.en.js">JavaScript file</a> and the <a href="http://nitku.net/if/cloak/cloak.en.html">HTML</a> page (&#8220;View source&#8221; in your browser)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nitku.net/blog/2011/05/undum-cloak-of-darkness/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Transcript recording plugin for Parchment released</title>
		<link>http://nitku.net/blog/2011/05/transcript-recording-plugin-for-parchment-released/</link>
		<comments>http://nitku.net/blog/2011/05/transcript-recording-plugin-for-parchment-released/#comments</comments>
		<pubDate>Sat, 14 May 2011 19:15:13 +0000</pubDate>
		<dc:creator>Juhana</dc:creator>
				<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Statistics]]></category>

		<guid isPermaLink="false">http://nitku.net/blog/?p=569</guid>
		<description><![CDATA[As promised, the transcript recording plugin for Parchment has now been published. As the player is playing the game, the plugin sends the transcript to the server where it&#8217;s saved to a database. The author can then later view the saved transcripts or use the information in the database to calculate statistics. The plugin saves [...]]]></description>
			<content:encoded><![CDATA[<p>As promised, the transcript recording plugin for Parchment has now been published. As the player is playing the game, the plugin sends the transcript to the server where it&#8217;s saved to a database. The author can then later view the saved transcripts or use the information in the database to calculate <a href="http://nitku.net/blog/2011/01/starborn-play-statistics/">statistics</a>.</p>
<p>The plugin saves more than just plain text: it preserves text formatting and saves status lines as well, so the transcripts look (almost) the same as the actual game. (See <a href="http://transcripts.game-testing.org/test/tools/viewer/transcript.php?session=1305221845371128&#038;statusline=inline">this example of Bronze</a> with status lines, colors and text formatting. Note that Parchment uses small caps in place of bold text.) The saved transcripts can be viewed with or without the status lines. In addition when the game waits for a single keypress, non-alphabet characters like enter, space and arrow keys are marked in the transcript.</p>
<p>There&#8217;s a <a href="http://transcripts.game-testing.org/test/">live demo</a> with a <a href="http://transcripts.game-testing.org/test/tools/viewer/">transcript viewer</a> available. Games played in the demo installation can be seen in the viewer. </p>
<p>The plugin and accompanying tools can be downloaded from <a href="http://code.google.com/p/parchment-transcript/downloads/list">Google Code</a> where you&#8217;ll also find <a href="http://code.google.com/p/parchment-transcript/wiki/Installation">installation instructions</a>. Only Z-machine is supported at the moment, Glulx support will be added later.</p>
]]></content:encoded>
			<wfw:commentRss>http://nitku.net/blog/2011/05/transcript-recording-plugin-for-parchment-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Starborn statistics follow-up</title>
		<link>http://nitku.net/blog/2011/05/starborn-statistics-follow-up/</link>
		<comments>http://nitku.net/blog/2011/05/starborn-statistics-follow-up/#comments</comments>
		<pubDate>Fri, 06 May 2011 16:07:51 +0000</pubDate>
		<dc:creator>Juhana</dc:creator>
				<category><![CDATA[Statistics]]></category>
		<category><![CDATA[starborn]]></category>

		<guid isPermaLink="false">http://nitku.net/blog/?p=549</guid>
		<description><![CDATA[Earlier I posted some statistics from transcripts collected from online plays of Starborn. Based on those statistics I released a new version at the end of January, mainly adding synonyms based on the most common typos players had made. Looking at the data from before and after the update, here&#8217;s what happened to the total [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier I posted <a href="http://nitku.net/blog/2011/01/starborn-play-statistics/">some statistics</a> from transcripts collected from online plays of <em><a href="http://code.google.com/p/starborn/">Starborn</a></em>. Based on those statistics I released a new version at the end of January, mainly adding synonyms based on the most common typos players had made.</p>
<p>Looking at the data from before and after the update, here&#8217;s what happened to the total amount of invalid commands:</p>
<p><span id="more-549"></span></p>
<table class="stats">
<caption>Valid commands</caption>
<tr>
<th></th>
<th colspan="2">Before update</th>
<th colspan="2">After update</th>
</tr>
<tr>
<th></th>
<th>Amount</th>
<th>% of all commands</th>
<th>Amount</th>
<th>% of all commands</th>
</tr>
<tr>
<td>Valid commands</td>
<td>22208</td>
<td>93%</td>
<td>7545</td>
<td>98%</td>
</tr>
<tr>
<td>Invalid commands</td>
<td>1688</td>
<td>7%</td>
<td>146</td>
<td>2%</td>
</tr>
<tr>
<th>total</th>
<th>23896</th>
<th></th>
<th>7691</th>
<th></th>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/05/valid-commands.png" alt="Pie graphs showing 7% of invalid commands before update and 2% after update." title="Valid commands before and after update" width="453" height="289" class="aligncenter size-full wp-image-550" /></p>
<p>In addition to new synonyms the update includes a new class of error message. The earlier version responded with &#8220;That is not a keyword the story recognizes&#8221; to all invalid input. The update shows the same message when the player gives only one word as input, but if the player had given more than one word the error message is ”Please type a single keyword to advance the story” followed by a list of available keywords.</p>
<p>This was inspired by the different ways people had given invalid input: some gave traditional IF commands, some typed more than one keyword at the same time. In addition to the new error message giving more accurate instructions on how to interact with the story, it also explicitly lists the input it accepts, leaving no room for confusion. I looked at how this affected &#8220;ragequitting&#8221; after giving invalid multiword input during the first turn: </p>
<table class="stats">
<caption>Quitting after receiving an error message to input with more than two words during the first turn</caption>
<tr>
<th></th>
<th colspan="2">&#8220;That is not a keyword the story recognizes.&#8221;</th>
<th colspan="2">”Please type a single keyword to advance the story. Available keywords: &#8230;”</th>
</tr>
<tr>
<td>Quit immediately</td>
<td>10</td>
<td>9%</td>
<td>0</td>
<td>0%</td>
</tr>
<tr>
<td>Kept playing</td>
<td>96</td>
<td>91%</td>
<td>16</td>
<td>100%</td>
</tr>
<tr>
<th>total</th>
<th>106</th>
<th></th>
<th>16</th>
<th></th>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/05/error-message-types.png" alt="Two pie charts showing how before the update 9% quit after getting an error message from two-word commands, after update no-one quit immediately." title="Player perseverance by error message types" width="516" height="506" class="aligncenter size-full wp-image-556" /></p>
<p>(The sample set is so small that the results fit well within error margins, but they are still nice numbers to look at.)</p>
<p>In addition to reducing the total number of invalid input, the amount of error messages per game dropped as well. In the previous version about half of the players didn&#8217;t encounter any error messages while playing, but more than a quarter bumped into them more than once, 10 percent more than three times. In the latest release the no errors group jumped up to two thirds and those who saw more than one error message dropped to less than 10 percent. </p>
<table class="stats">
<caption>Number of invalid input per game</caption>
<tr>
<th></th>
<th colspan="2">Before update</th>
<th colspan="2">After update</th>
</tr>
<tr>
<td>No errors during game</td>
<td>671</td>
<td>48%</td>
<td>250</td>
<td>69%</td>
</tr>
<tr>
<td>One error</td>
<td>339</td>
<td>24%</td>
<td>80</td>
<td>22%</td>
</tr>
<tr>
<td>Two errors</td>
<td>140</td>
<td>10%</td>
<td>24</td>
<td>7%</td>
</tr>
<tr>
<td>Three errors</td>
<td>93</td>
<td>7%</td>
<td>6</td>
<td>2%</td>
</tr>
<tr>
<td>More than three errors</td>
<td>144</td>
<td>10%</td>
<td>0</td>
<td>0%</td>
</tr>
<tr>
<th>total</th>
<th>1387</th>
<th></th>
<th>360</th>
<th></th>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/05/errors-per-game.png" alt="Two pie graphs, errors during game before and after update. Before update 48% of players had no errors during the story, after update 69%." title="Errors per game" width="471" height="322" class="aligncenter size-full wp-image-560" /></p>
<p>It was expected that by making the parser more error tolerant and helpful the percentage of people who played the story to completion would go up, as well as time spent with the game, measured here with the average number of turns per game (not counting those who quit without typing a single command). </p>
<table class="stats">
<caption>Game completion</caption>
<tr>
<th></th>
<th colspan="2">Before update</th>
<th colspan="2">After update</th>
</tr>
<tr>
<td>Loaded the story, didn’t play</td>
<td>170</td>
<td>11%</td>
<td>53</td>
<td>13%</td>
</tr>
<tr>
<td>Quit after first turn</td>
<td>177</td>
<td>11%</td>
<td>34</td>
<td>8%</td>
</tr>
<tr>
<td>Played more than one turn, not to completion</td>
<td>805</td>
<td>52%</td>
<td>183</td>
<td>44%</td>
</tr>
<tr>
<td>Played to completion</td>
<td>405</td>
<td>26%</td>
<td>143</td>
<td>35%</td>
</tr>
<tr>
<th>total</th>
<th>1557</th>
<th></th>
<th>413</th>
<th></th>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/05/completion.png" alt="Two pie graphs showing that 35% of players finished the game after update as opposed to 26% before the update." title="Games played to completion before and after update" width="487" height="327" class="aligncenter size-full wp-image-554" /></p>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/05/turn-average.png" alt="Bar graphs showing an average of 17.2 turns per game before update and 21.4 turns per game after update" title="Average number of turns per game" width="340" height="178" class="aligncenter size-full wp-image-562" /></p>
<p>As the graphs show, the percentage of people who quit after one turn or right after the intro doesn&#8217;t show any significant change. There are people who don&#8217;t find this kind of medium their thing and there&#8217;s not much that can be done to make them keep playing. in the other end of the scale are the hardcore IF fans who play anything they can get their hands on. Most players fall somewhere in between and to keep them engaged requires both a good story and smooth gameplay. </p>
<p>Betatesting can do a lot, but analysis of real life transcripts can reveal surprising things that have a significant effect on how players enjoy the game. Who would&#8217;ve thought that invalid one-word and multiword input should have different error messages? What would a similar stack of transcripts from games with full parsers reveal?</p>
<p>The good news is that I&#8217;ve almost finished with making the transcript recording functionality an actual Parchment plugin. It&#8217;ll be released soon, first with Z-machine support and later with Glulx support, and even later with statistical tools to make all kinds of graphs like the ones presented here.</p>
]]></content:encoded>
			<wfw:commentRss>http://nitku.net/blog/2011/05/starborn-statistics-follow-up/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Starborn: play statistics</title>
		<link>http://nitku.net/blog/2011/01/starborn-play-statistics/</link>
		<comments>http://nitku.net/blog/2011/01/starborn-play-statistics/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 11:18:16 +0000</pubDate>
		<dc:creator>Juhana</dc:creator>
				<category><![CDATA[Statistics]]></category>
		<category><![CDATA[starborn]]></category>

		<guid isPermaLink="false">http://nitku.net/blog/?p=442</guid>
		<description><![CDATA[<em><a href="http://code.google.com/p/starborn/">Starborn</a></em> is a short interactive sci-fi story that uses a simple keyword interface instead of a standard IF parser. It was made as a speed-if for this year's New Year's Speed-if event on ifMUD. It was released to the public about a week ago and at first gained the usual amount of interest: the logs show 7 online plays on the release day and less on the next two days.

Last Wednesday however <a href="http://ifwiki.org/index.php/C.E.J._Pacian">C.E.J. Pacian</a> wrote a <a href="http://gamesforcrows.blogspot.com/2011/01/starborn.html">blog post</a> about it which was picked up by the <a href="http://www.indiegames.com/blog/2011/01/browser_game_pick_starborn_cej.html">IndieGames.com blog</a>. From <em>there</em> a couple of people tweeted about it and suddenly the play count jumped to about 600 plays per day. <a href="http://code.google.com/p/parchment/">The main Parchment site</a> reported similar amounts of traffic.

I'm running the online version of the story on a <a href="http://nitku.net/blog/2010/06/collecting-real-life-gameplay-data-with-parchment/">modified version of Parchment</a> that saves the transcripts to the server. I now have 1557 transcripts consisting of 23&#160;896 turns (and counting, but the traffic is slowing down considerably). To my knowledge this is more play data collected than for any other single IF game so far.

So here's a random bunch of analysis from those transcripts. There are no spoilers other than keywords used throughout the game, but if you haven't played yet the data would probably make more sense if you at least checked out a couple of turns just to see what the parser looks like. <a href="http://parchment.game-testing.org/play/parchment.full.html?story=http://starborn.googlecode.com/svn/trunk/Starborn.z8">Online version</a> and <a href="http://code.google.com/p/starborn/">downloads</a> are available.]]></description>
			<content:encoded><![CDATA[<p><em><a href="http://code.google.com/p/starborn/">Starborn</a></em> is a short interactive sci-fi story that uses a simple keyword interface instead of a standard IF parser. It was made as a speed-if for this year&#8217;s New Year&#8217;s Speed-if event on ifMUD. It was released to the public about a week ago and at first gained the usual amount of interest: the logs show 7 online plays on the release day and less on the next two days.</p>
<p>Last Wednesday however <a href="http://ifwiki.org/index.php/C.E.J._Pacian">C.E.J. Pacian</a> wrote a <a href="http://gamesforcrows.blogspot.com/2011/01/starborn.html">blog post</a> about it which was picked up by the <a href="http://www.indiegames.com/blog/2011/01/browser_game_pick_starborn_cej.html">IndieGames.com blog</a>. From <em>there</em> a couple of people tweeted about it and suddenly the play count jumped to about 600 plays per day. <a href="http://code.google.com/p/parchment/">The main Parchment site</a> reported similar amounts of traffic.</p>
<p>I&#8217;m running the online version of the story on a <a href="http://nitku.net/blog/2010/06/collecting-real-life-gameplay-data-with-parchment/">modified version of Parchment</a> that saves the transcripts to the server. I now have 1557 transcripts consisting of 23&nbsp;896 turns (and counting, but the traffic is slowing down considerably). To my knowledge this is more play data collected than for any other single IF game so far.</p>
<p>So here&#8217;s a random bunch of analysis from those transcripts. There are no spoilers other than keywords used throughout the game, but if you haven&#8217;t played yet the data would probably make more sense if you at least checked out a couple of turns just to see what the parser looks like. <a href="http://parchment.game-testing.org/play/parchment.full.html?story=http://starborn.googlecode.com/svn/trunk/Starborn.z8">Online version</a> and <a href="http://code.google.com/p/starborn/">downloads</a> are available.</p>
<p><span id="more-442"></span></p>
<h2>Parser errors</h2>
<p>Since the gameplay is just typing single keywords given by the story, the amount of understood input was substantially high (93%). Most of the errors were typos (53.3% of all invalid input).<br />
<img src="http://nitku.net/blog/blogcontent/uploads/2011/01/validity.png" alt="A pie chart showing that 93% of all commands were understood by the parser" title="Command validity" width="374" height="241" class="aligncenter size-full wp-image-444" /></p>
<table>
<caption>Types of invalid commands</caption>
<tr>
<th>Type</th>
<th>Amount</th>
<th>% of all commands</th>
<th>% of invalid input</th>
</tr>
<tr>
<td>Typo</td>
<td>899</td>
<td>3.8%</td>
<td>53.3%</td>
</tr>
<tr>
<td>IF command</td>
<td>491</td>
<td>2.1%</td>
<td>29.1%</td>
</tr>
<tr>
<td>Sign of confusion</td>
<td>79</td>
<td>0.3%</td>
<td>4.7%</td>
</tr>
<tr>
<td>Poke</td>
<td>73</td>
<td>0.3%</td>
<td>4.3%</td>
</tr>
<tr>
<td>Gibberish</td>
<td>69</td>
<td>0.3%</td>
<td>4.1%</td>
</tr>
<tr>
<td>Non-keyword</td>
<td>45</td>
<td>0.2%</td>
<td>2.7%</td>
</tr>
<tr>
<td>Swear word</td>
<td>32</td>
<td>0.1%</td>
<td>1.9%</td>
</tr>
<tr>
<th>total</th>
<th>1688</th>
<th></th>
<th></th>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/01/unrecognized-type.png" alt="Bar chart for unrecognized commands by type" title="Unrecognized commands by type" width="428" height="283" class="aligncenter size-full wp-image-480" /></p>
<p>Standard IF commands were disabled so they count as unrecognized commands. The &#8220;sign of confusion&#8221; category contains commands like HUH, ?, WHERE, or verb commands that don&#8217;t follow the standard IF convention (I GO OUT). A &#8220;poke&#8221; is the player testing the limits of the parser by trying to communicate with it (HELLO, BYE, OH NO) or trying to do things out of character, mostly involving trying to kill poor Kevin (DIE, KILL COUSIN), and even trying if the prompt recognizes Unix commands (<a href="http://en.wikipedia.org/wiki/Ls">LS</a>, <a href="http://en.wikipedia.org/wiki/Cd_%28command%29">CD ..</a>). &#8220;Gibberish&#8221; is a random string of letters or arbitrary words that don&#8217;t appear anywhere in the story text (WALRUS, AWESOME). Non-keywords are words that appear in the story text but aren&#8217;t keywords that you can choose (MOM, HOME).</p>
<table class="stats">
<caption>Most common commands not understood by the parser</caption>
<tr>
<th>command</td>
<th>#</td>
<th>% of errors</td>
<th>% of all commands</td>
</tr>
<tr>
<td>look</td>
<td>109</td>
<td>6.5%</td>
<td>0.46%</td>
</tr>
<tr>
<td>foucalt</td>
<td>50</td>
<td>3.0%</td>
<td>0.21%</td>
</tr>
<tr>
<td>exit</td>
<td>42</td>
<td>2.5%</td>
<td>0.18%</td>
</tr>
<tr>
<td>something</td>
<td>36</td>
<td>2.1%</td>
<td>0.15%</td>
</tr>
<tr>
<td>excercise room</td>
<td>31</td>
<td>1.8%</td>
<td>0.13%</td>
</tr>
<tr>
<td>docking bay</td>
<td>20</td>
<td>1.2%</td>
<td>0.08%</td>
</tr>
<tr>
<td>starborn</td>
<td>18</td>
<td>1.1%</td>
<td>0.08%</td>
</tr>
<tr>
<td>go</td>
<td>18</td>
<td>1.1%</td>
<td>0.08%</td>
</tr>
<tr>
<td>?</td>
<td>18</td>
<td>1.1%</td>
<td>0.08%</td>
</tr>
<tr>
<td>dr.strepke</td>
<td>15</td>
<td>0.9%</td>
<td>0.06%</td>
</tr>
<tr>
<td>turn on music</td>
<td>14</td>
<td>0.8%</td>
<td>0.06%</td>
</tr>
<tr>
<td>shuttleport</td>
<td>14</td>
<td>0.8%</td>
<td>0.06%</td>
</tr>
<tr>
<td>leave</td>
<td>13</td>
<td>0.8%</td>
<td>0.05%</td>
</tr>
<tr>
<td>megellan</td>
<td>13</td>
<td>0.8%</td>
<td>0.05%</td>
</tr>
<tr>
<td>open door</td>
<td>13</td>
<td>0.8%</td>
<td>0.05%</td>
</tr>
<tr>
<td>walk</td>
<td>12</td>
<td>0.7%</td>
<td>0.05%</td>
</tr>
<tr>
<td>m</td>
<td>12</td>
<td>0.7%</td>
<td>0.05%</td>
</tr>
<tr>
<td>open</td>
<td>11</td>
<td>0.7%</td>
<td>0.05%</td>
</tr>
<tr>
<td>cousins</td>
<td>11</td>
<td>0.7%</td>
<td>0.05%</td>
</tr>
<tr>
<td>dock</td>
<td>11</td>
<td>0.7%</td>
<td>0.05%</td>
</tr>
<tr>
<td>weighlessness</td>
<td>11</td>
<td>0.7%</td>
<td>0.05%</td>
</tr>
<tr>
<td>turn music on</td>
<td>10</td>
<td>0.6%</td>
<td>0.04%</td>
</tr>
<tr>
<td>back</td>
<td>10</td>
<td>0.6%</td>
<td>0.04%</td>
</tr>
<tr>
<td>excercise equipment</td>
<td>10</td>
<td>0.6%</td>
<td>0.04%</td>
</tr>
</table>
<h2>Sticking with it to the end</h2>
<p>About 11% of players quit without typing a single command, the same amount after the first command and a quarter kept playing until the game&#8217;s conclusion. </p>
<table class="stats">
<caption>Game completion</caption>
<tr>
<td>Loaded the story, didn’t play</td>
<td>170</td>
<td>11%</td>
</tr>
<tr>
<td>Quit after first turn</td>
<td>177</td>
<td>11%</td>
</tr>
<tr>
<td>Played more than one turn, not to completion</td>
<td>805</td>
<td>52%</td>
</tr>
<tr>
<td>Played to completion</td>
<td>405</td>
<td>26%</td>
</tr>
<tr>
<th>total</th>
<th>1557</th>
<th></th>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/01/playstats.png" alt="Pie chart showing how many players started the game, quit after first turn, played but not to completion, and played to completion" title="Player behavior" width="528" height="211" class="aligncenter size-full wp-image-463" /></p>
<p>What happens when the story tells the player that the input wasn&#8217;t understood? In this case the game tells up front what kind of input it accepts. The parser can complain about the input only if the player disregards or misunderstands the instructions, makes a typo, or if the game has a bug that doesn&#8217;t parse valid input correctly. There is a bug in <em>Starborn</em> where commanding MAGELLAN in one room gives a frustrating &#8220;Which do you mean, Magellan or the Magellan?&#8221; disambiguation question, but other than that the keyword system is immune to implementation issues where input consistent with the game&#8217;s rules is disregarded because the author didn&#8217;t implement a correct response.</p>
<p>Player made errors like typos can affect the player&#8217;s experience just as much as the game&#8217;s shortcomings. If you aren&#8217;t able to make progress in the game, no matter the reason, you&#8217;re likely to become frustrated and quit. I took a look at what happened when the player gave invalid input at the first turn. I expected that those players would be more likely to quit immediately than those who gave a valid command, but it turned out that there was no significant difference in that regard. They were still more likely to stop playing later on before reaching the end.</p>
<table class="stats">
<caption>Game completion by valid or invalid input on first turn</caption>
<tr>
<th></th>
<th colspan="2">Parser error on turn&nbsp;1</th>
<th colspan="2">Valid command on turn&nbsp;1</th>
</tr>
<tr>
<td>Quit immediately</td>
<td>24</td>
<td>10.7%</td>
<td>153</td>
<td>13.2%</td>
</tr>
<tr>
<td>Kept playing, but not to completion</td>
<td>158</td>
<td>70.5%</td>
<td>647</td>
<td>55.6%</td>
</tr>
<tr>
<td>Kept playing and finished the game</td>
<td>42</td>
<td>18.8%</td>
<td>363</td>
<td>31.2%</td>
</tr>
<tr>
<th>total</th>
<th>224</th>
<th></th>
<th>1163</th>
<th></th>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/01/turn1.png" alt="Two pie charts showing how people who gave an invalid command on turn one didn&#039;t finish the game as often as others" title="Game completion after turn one" width="470" height="310" class="aligncenter size-full wp-image-459" /></p>
<p>The reason for this might be that people who are prone to making typos are more likely to become frustrated when the story keeps stalling. This theory is supported by the fact that people who didn&#8217;t complete the story gave almost twice as much invalid commands than people who completed the story (proportionate to the total amount of input; transcripts with less than 10 moves not counted).</p>
<table class="stats">
<caption>Invalid input from total</caption>
<tr>
<td>Game completed</td>
<td>5.3%</td>
</tr>
<tr>
<td>Game unfinished (at least 10 turns)</td>
<td>10.1%</td>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/01/fromtotal.png" alt="Graph showing the amount of invalid input for people who completed and who didn&#039;t complete the story" title="Invalid input from total" width="366" height="214" class="aligncenter size-full wp-image-456" /></p>
<h2>The first turn</h2>
<p>The story starts with short instructions on how to play.</p>
<div class="transcript">
<p>
The story you are about to play uses a keyword interface. Whenever you see a word in upper case you can type it on the command prompt to advance the story. If you prefer a different way of showing the keywords, command SETUP to change the settings.
</p>
<p>
Whenever you wish to see the list of currently available keywords, type L or just press enter.
</p>
<p>
Please press SPACE to continue.
</p>
</div>
<p>After pressing space the screen is cleared and the game starts.</p>
<div class="transcript">
<p><center>                    <strong>STARBORN</strong><br />
               by Juhana Leinonen</center></p>
<p>It&#8217;s quiet, as always. I&#8217;ve turned the MUSIC off so that it doesn&#8217;t bother my COUSIN&#8217;s sleep. A long day of travel and WEIGHTLESSNESS has exhausted him.</p>
<p>The door leads out to the HALLWAY.</p>
<div class="transcript-command">&gt;</div>
</div>
<p>At this point the player has four keywords to choose from. It was expected that as the first command the first keyword was picked the most often and the last keyword the second most often and the transcripts show that the assumption was correct.</p>
<table class="stats">
<caption>Commands during the first turn</caption>
<tr>
<th></th>
<th>#</th>
<th>% of commands</th>
</tr>
<tr>
<td>MUSIC</td>
<td>551</td>
<td>40%</td>
</tr>
<tr>
<td>COUSIN</td>
<td>112</td>
<td>8%</td>
</tr>
<tr>
<td>WEIGHTLESSNESS</td>
<td>109</td>
<td>8%</td>
</tr>
<tr>
<td>HALLWAY</td>
<td>184</td>
<td>13%</td>
</tr>
<tr>
<td>L or enter</td>
<td>140</td>
<td>10%</td>
</tr>
<tr>
<td>IF command</td>
<td>130</td>
<td>9%</td>
</tr>
<tr>
<td>SETUP</td>
<td>49</td>
<td>4%</td>
</tr>
<tr>
<td>gibberish</td>
<td>25</td>
<td>1.8%</td>
</tr>
<tr>
<td>typo</td>
<td>22</td>
<td>1.6%</td>
</tr>
<tr>
<td>multiple keywords</td>
<td>20</td>
<td>1.4%</td>
</tr>
<tr>
<td>ABOUT, HELP, CREDITS</td>
<td>12</td>
<td>0.9%</td>
</tr>
<tr>
<td>other</td>
<td>33</td>
<td>2.4%</td>
</tr>
<tr>
<th>total</th>
<th>1387</th>
<th></th>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/01/firstturn1.png" alt="Bar chart showing the distribution of commands regarding the available keywords during the first turn" title="Commands given on the first turn" width="585" height="257" class="aligncenter size-full wp-image-471" /></p>
<p>What wasn&#8217;t as expected was that some people (20 out of the total, that&#8217;s more than one percent) typed every available keyword <em>at the same time</em> (&#8220;MUSIC COUSIN WEIGHTLESSNESS HALLWAY&#8221;). Other typical mistakes were typos and assuming that the keyword in &#8220;&#8230;my COUSIN&#8217;s sleep&#8221; is &#8220;COUSIN&#8217;S&#8221; including the apostrophe and the &#8220;s&#8221;. Presumably out of habit the players would also try the usual IF commands (X ME, TURN MUSIC ON).</p>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/01/firstturn2.png" alt="A bar chart of type of commands entered during the first turn" title="Commands other than available keywords entered during the first turn" width="610" height="375" class="aligncenter size-full wp-image-472" /></p>
<p>Category &#8220;other&#8221; includes, among others, choosing words from the text that weren&#8217;t keywords, swearing, and trying to communicate with the parser (HI, OK, LOL).</p>
<h2>Leading the player</h2>
<p>I assumed that if choosing a keyword leads to a description that contains exactly one new keyword, the player is likely to pick that keyword instead of any of the previous yet unexplored ones. For example, if the player chooses the keyword MUSIC in the intro, the description will be:</p>
<div class="transcript">
<p>The computer has a comprehensive library of movies, music, books and games. They have been just about the only available entertainment on the MAGELLAN.</p>
<div class="transcript-command">&gt;</div>
</div>
<p>The transcripts reveal that the most common command was indeed MAGELLAN, although I expected the figure to be much higher.</p>
<table class="stats">
<caption>Commands after MUSIC</caption>
<tr>
<td>MAGELLAN</td>
<td>344</td>
<td>69 %</td>
</tr>
<tr>
<td>previous keyword</td>
<td>140</td>
<td>28 %</td>
</tr>
<tr>
<td>other</td>
<td>18</td>
<td>4 %</td>
</tr>
<tr>
<th>total</th>
<th>502</th>
<th></th>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/01/after-music.png" alt="Pie chart showing that 69% of players chose MAGELLAN as their next command after choosing MUSIC" title="Command after MUSIC" width="377" height="239" class="aligncenter size-full wp-image-496" /></p>
<p>By default the story shows available keywords in the story text in upper case, so about one sixth of the players typed them in upper case as well.</p>
<table class="stats">
<caption>Upper/lower case commands</caption>
<tr>
<td>All lower case</td>
<td>17652</td>
<td>74%</td>
</tr>
<tr>
<td>All upper case</td>
<td>4150</td>
<td>17%</td>
</tr>
<tr>
<td>Mixed case</td>
<td>672</td>
<td>3%</td>
</tr>
<tr>
<td>Other</td>
<td>1422</td>
<td>6%</td>
</tr>
<tr>
<th>total</th>
<th>23896</th>
<th></th>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/01/upper-lower1.png" alt="Pie chart showing the percentages of upper, lower and mixed case commands" title="Upper case and lower case commands" width="430" height="308" class="aligncenter size-full wp-image-521" /></p>
<p>(&#8220;Other&#8221; includes empty input, numbers, and other input where there are no characters.)</p>
<p>As the game never instructs the player that they can type only one of the words in a two-word keyword, it wasn&#8217;t surprising that the players were generally inclined to type the entire name of the keyword.</p>
<table class="stats">
<caption>Two-word keywords</p>
<tr>
<th>Keyword</th>
<th>Both words written</th>
<th>One word written</th>
<th>% of one word input</th>
</tr>
<tr>
<td>SICK BAY</td>
<td>669</td>
<td>15</td>
<td>2%</td>
</tr>
<tr>
<td>DOCKING STATION</td>
<td>1533</td>
<td>134</td>
<td>8%</td>
</tr>
<tr>
<td>TICKET MACHINE</td>
<td>517</td>
<td>47</td>
<td>8%</td>
</tr>
</table>
<p><img src="http://nitku.net/blog/blogcontent/uploads/2011/01/compound-words.png" alt="Three pie charts showing how players were inclined to write both words of two-part keywords" title="Compound words" width="495" height="699" class="aligncenter size-full wp-image-488" /></p>
<h2>Typos</h2>
<p>How many ways can you write WEIGHTLESSNESS? At least 20 different ways:</p>
<table class="stats">
<tr>
<td>weghtlessness</td>
<td>weifhtlessness</td>
<td>weighlessneess</td>
<td>weighlessness</td>
</tr>
<tr>
<td>weightessness</td>
<td>weightkessness</td>
<td>weightlesness</td>
<td>weightless</td>
</tr>
<tr>
<td>weightlessneess</td>
<td>weightlessnes</td>
<td>weightlessness</td>
<td>weightlesssness</td>
</tr>
<tr>
<td>weightltssness</td>
<td>weigtlessness</td>
<td>weitghlessness</td>
<td>wheightlessness</td>
</tr>
<tr>
<td>wieghtlessness</td>
<td>wiehgtlessness</td>
<td>wightlessness</td>
<td>wwightlessness</td>
</tr>
</table>
<p>Because you can never take into account every possible way a word could be typoed, it&#8217;d be great if the parser could just go through the available vocabulary and choose the closest match to the player&#8217;s input. You could then have the parser understand the most outrageous misspellings the players could come up with. This game is an exception of sorts because all available keywords (and therefore all acceptable commands) are at all times visible to the player so there&#8217;s no need to be wary of the parser choosing a word that the player hasn&#8217;t encountered yet, but even in a traditional IF game you could have the parser go through only the words that have been previously shown to the player.</p>
<h2>Further steps</h2>
<p>Just by fixing the 30 most common unrecognized commands fixes one third of all unrecognized input. The cases where the player types more than one keyword at a time or tries to use a standard IF command can be handled with a better error message, something like <em>&#8220;Please type keywords only, one at a time. Currently available keywords are &#8230;&#8221;</em></p>
<p>Analyzing the transcripts is great for finding out which unimplemented commands need attention or what synonyms to add, but it&#8217;s by no means a replacement for traditional testing: the transcripts don&#8217;t tell you how good the story is, do the puzzles work, is the pacing correct, are there spelling errors in the text&#8230; The benefit of data collection from a live release is that the data represents the actual audience. The beta testers are probably on average more experienced players than people playing the game after its release.</p>
<p>It&#8217;d be great to have similar volume of data from a traditional parser IF game so that the results would be more generally applicable. Even a couple of transcripts from a lot of different games would probably show interesting results.</p>
<p><em>(<strong>Updates:</strong> <a href="http://nitku.net/blog/2011/05/starborn-statistics-follow-up/">follow-up after an update</a>; <a href="http://nitku.net/blog/2011/05/transcript-recording-plugin-for-parchment-released/">the recording plugin for Parchment released</a>)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://nitku.net/blog/2011/01/starborn-play-statistics/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Are puzzles an integral part of IF?</title>
		<link>http://nitku.net/blog/2010/08/are-puzzles-an-integral-part-of-if/</link>
		<comments>http://nitku.net/blog/2010/08/are-puzzles-an-integral-part-of-if/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 13:20:43 +0000</pubDate>
		<dc:creator>Juhana</dc:creator>
				<category><![CDATA[Puzzles]]></category>

		<guid isPermaLink="false">http://nitku.net/blog/?p=393</guid>
		<description><![CDATA[Sometimes it strikes me how deep the puzzle-centered thinking is infused into the medium. I have played, and been annoyed by, many games that tell a great story and then break the flow by haphazardly cramming in a couple of puzzles, presumably because "IF must have puzzles."]]></description>
			<content:encoded><![CDATA[<p>Sometimes it strikes me how deep the puzzle-centered thinking is infused into the medium. I have played, and been annoyed by, many games that tell a great story and then break the flow by haphazardly cramming in a couple of puzzles, presumably because &#8220;IF must have puzzles.&#8221;</p>
<p>There&#8217;s one integral, defining aspect to IF and it&#8217;s the world model. The author creates a virtual world and a story that takes place in it. So far this is only a simulation; to make it a game the author adds <em>game mechanics</em> and they are, more often than not, puzzles. But are puzzles the only option? <strong>Is there really nothing else we could do with a virtual world?</strong></p>
<p>What about puzzleless IF, I hear you ask. There are a lot of those, right? Sure, but most of them are just puzzle games without puzzles, or with trivially easy puzzles. Removing puzzles and adding nothing in their place does not improve the situation. Without any game mechanics IF turns into hypertext fiction.</p>
<p><a href="http://ifdb.tads.org/viewgame?id=urxrv27t7qtu52lb">Galatea</a> and its descendants are good examples of non-linear stories with strong non-puzzle game mechanics, in this case conversation. If I may take a look into the crystal ball, I suspect that in the future the puzzle aspects will diminish or at least they have changed considerably. Just like mazes and hunger puzzles have made room for better puzzles, the puzzles we write today will make room for even better design. More importantly puzzles will not be considered the only or even the primary option for IF game mechanics.</p>
<p>The key is to realize that puzzles are just one option for IF game mechanics and they are prevalent (I suspect) mostly because of tradition starting from the very first Adventure. &#8220;An adventure game is a crossword at war with a narrative,&#8221; the famous quote by Graham Nelson from 1995, has been the guideline for IF design. I&#8217;m afraid we&#8217;re stuck with conventions that have grown to define the medium and are now preventing us from seeing more options. It&#8217;s time to look farther and create something new instead of just improving what we have.</p>
]]></content:encoded>
			<wfw:commentRss>http://nitku.net/blog/2010/08/are-puzzles-an-integral-part-of-if/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Players don&#8217;t really read</title>
		<link>http://nitku.net/blog/2010/07/players-dont-really-read/</link>
		<comments>http://nitku.net/blog/2010/07/players-dont-really-read/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 20:42:31 +0000</pubDate>
		<dc:creator>Juhana</dc:creator>
				<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://nitku.net/blog/?p=349</guid>
		<description><![CDATA[I've had to learn this lesson several times. Here's a couple of examples.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had to learn this lesson several times. Here&#8217;s a couple of examples.<br />
<span id="more-349"></span><br />
In <a href="http://nitku.net/if/escapade">Escapade!</a> there&#8217;s no limit to how many small items you can carry, but if you take a large item you automatically drop any other things you have to make room. In the initial design stages this mechanism was needed for a puzzle to work, but the puzzle was later removed. Since it&#8217;s a one-room game and the game implicitly picks up any items before you use them and it lists everything on the floor when you take inventory, there was no need to remove the mechanism that was already implemented, right?</p>
<p>Wrong. Players would play for some while, then LOOK and go &#8220;Didn&#8217;t I pick that up already?&#8221; or INVENTORY and &#8220;* BUG: I never dropped those items&#8221;. They hadn&#8217;t noticed or didn&#8217;t remember anymore that the game had said &#8220;(first dropping X, Y and Z to make room)&#8221; when they had picked up something big earlier.</p>
<div id="EscapadeIntro" class="post">
<p>Another in the same vein: One of the puzzles is <a href="#" onclick="document.getElementById('EscapadeSpoiler').style.display = 'block'; document.getElementById('EscapadeIntro').style.display = 'none';return false;"><em>&lt;click to show spoiler&gt;</em></a></p>
</div>
<div id="EscapadeSpoiler" style="display:none" class="post">
<p>Another in the same vein: One of the puzzles is to find out that there&#8217;s a hole that you can pick up and use elsewhere. I thought it&#8217;d be really clever to crack a little joke when the player typed TAKE ALL:</p>
<div class="transcript">
<div class="transcript-command">&gt;TAKE ALL</div>
<p>Item: Taken.<br />
Thing: Taken.<br />
Toilet hole: Taken. Wait, what?
</div>
<p>You guessed it: nobody noticed. Not only did they not notice the joke, they didn&#8217;t even register that they had picked up the hole! They would later take a look at their inventory and be totally confused to find it there.</p></div>
<div id="YomommaIntro"  class="post">
<p>Similarly in <a href="http://nitku.net/if/yomomma">Yo Momma</a> there&#8217;s a puzzle that involves <a href="#" onclick="document.getElementById('YomommaSpoiler').style.display = 'block'; document.getElementById('YomommaIntro').style.display = 'none';return false;"><em>&lt;click to show spoiler&gt;</em></a></p>
</div>
<div id="YomommaSpoiler" style="display:none"  class="post">
<p>
Similarly in <a href="http://nitku.net/if/yomomma">Yo Momma</a> there&#8217;s a puzzle that involves finding a source of light. Personally I thought of this as a real non-puzzle: there&#8217;s only 9 rooms and one of them&#8217;s description is pretty much nothing but what you need:</p>
<div class="transcript">
<div class="transcript-roomname">Dark corner (SE corner)</div>
<div>The sharp spotlights in this corner of the club create dark and gloomy shadows around the tables.</div>
</div>
<p>Imagine my surprise when almost without exception the testers found it was one of the biggest stumbling blocks in the game. This was the puzzle that forced many to go for the walkthrough for the first time. Even the hive mind of <a href="http://www.allthingsjacq.com/intfic_clubfloyd_20100102.html">ClubFloyd</a> was stuck with this for a long time.</div>
<p>Lessons learned:</p>
<ul>
<li>Don&#8217;t put relevant information to places where the players don&#8217;t expect to find information. Players don&#8217;t expect command clarifications to contain anything other than notifications of implicit actions, and they expect TAKE ALL to just list items and &#8220;taken&#8221;, so they don&#8217;t pay them any more attention than that.</li>
<li>Don&#8217;t expect the players to read room descriptions anymore after the first time. If a room&#8217;s description changes during the game and that change contains important information, make sure the players know they should re-read the description or convey the information to them also in some other way.</li>
<li>Don&#8217;t expect the players to remember what they have read after a few turns.</li>
</ul>
<p>It&#8217;d be interesting to hook a couple of players with different levels of playing experience into an eye tracker and study what parts they tend to skip or skim when playing.</p>
]]></content:encoded>
			<wfw:commentRss>http://nitku.net/blog/2010/07/players-dont-really-read/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Collecting real life gameplay data with Parchment</title>
		<link>http://nitku.net/blog/2010/06/collecting-real-life-gameplay-data-with-parchment/</link>
		<comments>http://nitku.net/blog/2010/06/collecting-real-life-gameplay-data-with-parchment/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 18:49:37 +0000</pubDate>
		<dc:creator>Juhana</dc:creator>
				<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Statistics]]></category>

		<guid isPermaLink="false">http://nitku.net/blog/?p=332</guid>
		<description><![CDATA[There was a lot of talk during PAX East and elsewhere about collecting real life data from people playing IF. I&#8217;m proud to announce that I&#8217;ve hacked the Parchment web interpreter to do just this: it saves transcripts to the server every time a game is played. Try it out yourself: Click here to start [...]]]></description>
			<content:encoded><![CDATA[<p>There was a lot of talk during <a href="http://nitku.net/blog/2010/04/pax-east-vibes/">PAX East</a> and elsewhere about collecting real life data from people playing IF. I&#8217;m proud to announce that I&#8217;ve hacked the <a href="http://code.google.com/p/parchment/">Parchment</a> web interpreter to do just this: it saves transcripts to the server every time a game is played.</p>
<p>Try it out yourself: <a href="http://parchment.game-testing.org/demo/parchment.full.html?story=stories/yomomma.z8">Click here to start a game</a> and then open <a href="http://parchment.game-testing.org/demo/html/live.php">this page</a> to a new browser window. Enter a command in the game and see how the transcript in the live feed updates. (If you don&#8217;t see your game in the live feed page, reload it. It shows the three latest games being played at the time the feed page was loaded.) </p>
<p>And then there&#8217;s the beef: I&#8217;ve made a rudimentary <a href="http://parchment.game-testing.org/demo/html/stats.php">statistics page</a> that shows some interesting information using the collected data, including most used commands and average turn count and playtime.</p>
<p><span id="more-332"></span></p>
<p>The obvious use for this is of course collecting information on how people play the game and using that information to make improvements for the next release. You could also use this for closed beta-testing &#8212; give the web address to your testers and Parchment saves the transcripts automatically. The testers don&#8217;t have to remember to start the transcript or send it to the author.</p>
<h3>Statistics from other games</h3>
<p>First I want to stress that at the moment this is just a demo of a hack. It can and will behave strangely especially if the game bypasses the standard parser and takes input directly (menus etc.) That said, if you want to try other games than the sample game, you can use either http://parchment.game-testing.org/demo/parchment.full.html?story=xxx or http://parchment.game-testing.org/play/parchment.full.html?story=xxx (replace xxx with the full url of the game you want to play.) The difference is that the latter doesn&#8217;t have the live transcript feed and only has the <a href="http://parchment.game-testing.org/play/html/stats.php">statistics page</a> (note a different address than what the demo site uses). You can&#8217;t single out individual players from the statistics so there&#8217;s no disclaimer notifying the player of the data collection (which might unnecessarily scare off some players.)</p>
<p>The statistics page collects information and displays the urls of all games played this way, so don&#8217;t use this for trying out something you don&#8217;t want the whole world to see.</p>
<h3>How it works</h3>
<p>I&#8217;ve added <a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">AJAX</a> calls inside Parchment&#8217;s UI code at appropriate places where it sends the player&#8217;s command and the game&#8217;s response to the server. On the server a PHP script receives the data and saves it into the database. This is all done behind the curtain so for the player the gameplay experience is exactly the same as with unmodified Parchment.</p>
<p>The statistics page collects some extra information about Inform 7&#8242;s internal error message and library message codes. This requires some modifications to the game file itself. The Raising the Flag on Mount Yo Momma game used as the example has been modified to include this:</p>
<div class="inform">
<p>
Before printing a parser error:
<div class="inform-indent">
	say <span class="inform-string">&#8220;#ERROR:[parser error code]#&#8221;</span>.
</div>
</p>
<p>
To decide which number is parser error code:
<div class="inform-indent"> (- etype -);</div>
</p>
<p>
When play begins:</p>
<div class="inform-indent">change the command prompt to <span class="inform-string">&#8220;#LIBMSG:[library message number]#>[clear libmsgnumber]&#8220;</span>.</div>
</p>
<p>
To say clear libmsgnumber: change the library message number to 0.
</p>
<p>
When play begins:
<div class="inform-indent">say <span class="inform-string">&#8220;#PARCHMENTWARNING: This is a special story file designed to work with a modified Parchment interpreter. Seeing this message means that you are using some other interpreter or a wrong version of Parchment to play this game. It&#8217;s advisable that you download another version of this game, or you might see between normal text some control strings that are not supposed to be shown to the player.#&#8221;</span>.</div>
</p>
</div>
<p>That code shows the error codes and the library message ids after every turn in the prompt, for example #LIBMSG:40#>. When the modified Parchment sees these strings it saves the information in them and removes them from the output so that the player doesn&#8217;t see them. Played on any other interpreter the game would of course display these, so the last line of code warns the player that they shouldn&#8217;t be using this game file if they can see the control codes.</p>
<p>Unfortunately the error codes and library message codes aren&#8217;t very reliable; some parser errors don&#8217;t seem to have an error code and some library messages don&#8217;t have an id. Most noticeably the &#8220;unknown verb&#8221; error doesn&#8217;t have either, so it doesn&#8217;t show in the statistics. I don&#8217;t actually know what the codes really do, I just noticed they&#8217;re there and used them; future development would include using custom codes for different situations in the game.</p>
<h3>Future plans</h3>
<ul>
<li>Test it more and fix bugs so that it could actually be reliably used.</li>
<li>Clean up and comment the code so that it could be packaged for people to install on their own servers. </li>
<li>Create a service where people could have saved transcripts and command statistics behind a password so that they could improve the game for later builds or use Parchment to save beta-testing transcripts.</li>
<li>Add more information and charts to the statistics page (suggestions welcome.)</li>
<li>Try to convince Parchment developers to include this functionality into the main build or provide hooks so that this could be added as a plugin. Right now I&#8217;m just modifying Parchment&#8217;s code directly, so whenever Parchment is updated the files have to be edited by hand again. </li>
</ul>
<p>What would you like to see done with this?</p>
]]></content:encoded>
			<wfw:commentRss>http://nitku.net/blog/2010/06/collecting-real-life-gameplay-data-with-parchment/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Invisiclues page</title>
		<link>http://nitku.net/blog/2010/06/invisiclues-page/</link>
		<comments>http://nitku.net/blog/2010/06/invisiclues-page/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 12:16:49 +0000</pubDate>
		<dc:creator>Juhana</dc:creator>
				<category><![CDATA[Clues]]></category>

		<guid isPermaLink="false">http://nitku.net/blog/?p=324</guid>
		<description><![CDATA[I made an Invisiclues-style HTML hints page for a friend of mine and decided to share it with the rest of the world. The page is here with instructions to use included. Feel free to use it for any purpose.]]></description>
			<content:encoded><![CDATA[<p>I made an Invisiclues-style HTML hints page for a friend of mine and decided to share it with the rest of the world. <a href="http://nitku.net/if/clues.html">The page is here</a> with instructions to use included. Feel free to use it for any purpose.</p>
]]></content:encoded>
			<wfw:commentRss>http://nitku.net/blog/2010/06/invisiclues-page/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

