<?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>Axe Software Blog &#187; Quest</title>
	<atom:link href="http://www.axeuk.com/blog/category/quest/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.axeuk.com/blog</link>
	<description>Quest updates, tips and information, plus news about the wider interactive fiction world</description>
	<lastBuildDate>Sat, 27 Mar 2010 20:40:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Quest in other languages</title>
		<link>http://www.axeuk.com/blog/2010/03/01/quest-in-other-languages/</link>
		<comments>http://www.axeuk.com/blog/2010/03/01/quest-in-other-languages/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 19:36:11 +0000</pubDate>
		<dc:creator>Alex Warren</dc:creator>
				<category><![CDATA[Quest]]></category>

		<guid isPermaLink="false">http://www.axeuk.com/blog/?p=135</guid>
		<description><![CDATA[Quest 4.1 supports languages other than English by creating an LDF file. I have now added a Quest Translations page to the website containing LDF files contributed by users. Currently we have translations of Quest into German and Spanish. If you&#8217;ve created an LDF file for Quest, I&#8217;d love to hear about it! Please email me [...]]]></description>
			<content:encoded><![CDATA[<p>Quest 4.1 supports languages other than English by creating an LDF file.</p>
<p>I have now added a <a href="http://www.axeuk.com/quest/developer/translations.htm">Quest Translations</a> page to the website containing LDF files contributed by users. Currently we have translations of Quest into German and Spanish.</p>
<p>If you&#8217;ve created an LDF file for Quest, I&#8217;d love to hear about it! Please email me at <a href="mailto:alex@axeuk.com">alex@axeuk.com</a> if you would like to submit an LDF file to the site.</p>
<p><strong>Games in Spanish</strong></p>
<p>I came across this page of Quest games in Spanish:<br />
<a href="http://wiki.caad.es/Categor%C3%ADa:Aventuras_Quest">http://wiki.caad.es/Categoría:Aventuras_Quest</a></p>
<p>If you know of any other pages of foreign language games (or indeed any other websites to do with Quest), please let me know and I&#8217;ll add a link from this site.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.axeuk.com/blog/2010/03/01/quest-in-other-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The HTML interface in Quest 5.0</title>
		<link>http://www.axeuk.com/blog/2010/02/19/the-html-interface-in-quest-5-0/</link>
		<comments>http://www.axeuk.com/blog/2010/02/19/the-html-interface-in-quest-5-0/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 09:00:28 +0000</pubDate>
		<dc:creator>Alex Warren</dc:creator>
				<category><![CDATA[Quest]]></category>

		<guid isPermaLink="false">http://www.axeuk.com/blog/?p=118</guid>
		<description><![CDATA[Previous versions of Quest used a &#8220;rich text&#8221; control to display text. This is quite an old Windows control, which is fine for basic formatting but ultimately lacks flexibility. Quest 5.0 replaces this with an embedded web browser, which opens up a lot of new capabilities. At a basic level, it makes it very easy [...]]]></description>
			<content:encoded><![CDATA[<p>Previous versions of Quest used a &#8220;rich text&#8221; control to display text. This is quite an old Windows control, which is fine for basic formatting but ultimately lacks flexibility. Quest 5.0 replaces this with an embedded web browser, which opens up a lot of new capabilities.</p>
<p>At a basic level, it makes it very easy to add something I have wanted to add to Quest for a long time &#8211; hyperlinks:</p>
<blockquote><p>
<img src="/blog/images/htmlinterface.png" />
</p></blockquote>
<p>By default, objects and exits in a room description are hyperlinked, so the player can look at objects and move around the game by clicking the game text. I may add the option to display a short menu of verbs instead, so that the hyperlinks could potentially be used as a complete replacement for the object panes.</p>
<p>Of course, some game authors may not like this, just as some authors don&#8217;t like Quest&#8217;s default panes &#8211; but you will be able to turn these off. The links are put there as part of the room description code in Core.aslx, so you can override it, and there will be an option to turn it off.</p>
<p><b>Two-way interaction with JavaScript</b></p>
<p>The most exciting thing about using HTML for the interface is that you can completely customise it to look exactly as you want. You can specify your own HTML file for the interface by including an interface tag in your ASLX file. Within that HTML file you can call JavaScript just as in any standard webpage, and that JavaScript can interact with your ASLX file.</p>
<p>To call JavaScript from your game code, we can use a particular call to the <kbd>request</kbd> command. The <kbd>request</kbd> command&#8217;s first parameter is the request type, and a request type of &#8220;RunScript&#8221; lets you call any JavaScript function defined in your game interface.</p>
<p>You can see an example of this in the YouTube example included with the <a href="http://quest5.net/downloads/samples.zip">Quest 5.0 samples</a>. In the example we use the following code:</p>
<pre>
request (RunScript, "AddYouTube; ZXZWepU7zC8")
</pre>
<p>This calls the AddYouTube function defined in YouTube.js, and passes in the parameter &#8220;ZXZWepU7zC8&#8243; which is just the YouTube id of <a href="http://www.youtube.com/watch?v=ZXZWepU7zC8">a particular video</a>.</p>
<p>The AddYouTube function simply creates the relevant HTML to embed the video and adds it to document.body.innerHTML. The video then appears in the Quest window.</p>
<p>You can also go the other way, making a JavaScript function call a function in your ASLX file. This way, we might get rid of the hard-coded panes altogether and have a purely HTML and JavaScript solution which can be customised however you want. It also opens up the possibility of support for &#8220;point and click&#8221; games in the style of Monkey Island, because you could trigger game behaviour when the user clicks on something in the HTML interface such as part of an image.</p>
<p>To trigger a Quest function from JavaScript, you can call the ASLEvent function defined in WebFunctions.js. This is included in the standard HTML interface (PlayerDefault.htm, which is the default interface used by Core.aslx), and takes two parameters &#8211; the name of the function, and one parameter. You can call any Quest function that takes one string parameter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.axeuk.com/blog/2010/02/19/the-html-interface-in-quest-5-0/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Types in Quest 5.0</title>
		<link>http://www.axeuk.com/blog/2010/02/18/types-in-quest-5-0/</link>
		<comments>http://www.axeuk.com/blog/2010/02/18/types-in-quest-5-0/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 09:00:52 +0000</pubDate>
		<dc:creator>Alex Warren</dc:creator>
				<category><![CDATA[Quest]]></category>

		<guid isPermaLink="false">http://www.axeuk.com/blog/?p=112</guid>
		<description><![CDATA[&#8220;Types&#8221; let you share sets of properties between objects. They work in the same way as Quest 4.x, except slightly more efficiently in that instead of copying the properties to the object, the object just references the underlying the type if it doesn&#8217;t have its own override for a property. You can view all the [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Types&#8221; let you share sets of properties between objects. They work in the same way as Quest 4.x, except slightly more efficiently in that instead of copying the properties to the object, the object just references the underlying the type if it doesn&#8217;t have its own override for a property.</p>
<p>You can view all the properties of an object using the Debugger, which is accessed via the Tools menu. Properties from an inherited type are shown in grey.</p>
<p><img src="/blog/images/debugger.png"></p>
<p>Types are defined using a &lt;type&gt; element, and properties are defined in the same way as for an object. Objects and types can both inherit from other types using an &lt;inherit&gt; tag.</p>
<pre>
  &lt;type name="food"&gt;
    &lt;health type="int"&gt;0&lt;/health&gt;
    &lt;eat&gt;It looks tasty, but you're not hungry right now.&lt;/eat&gt;
  &lt;/type&gt;

  &lt;type name="fruit"&gt;
    &lt;inherit name="food"/&gt;
    &lt;health&gt;10&lt;/health&gt;
  &lt;/type&gt;
</pre>
<p><b>Default behaviour</b></p>
<p>If the ASLX defines a type called &#8220;default&#8221;, then it is applied to all objects &#8211; there is no need to specifically inherit from this type. Core.aslx uses this to define the default behaviour for objects:</p>
<ul>
<li>The displayverbs and inventoryverbs properties are defaulted to give the standard buttons on the panes on the right-hand side of the Quest screen (&#8220;Look at&#8221;, &#8220;Take&#8221; and &#8220;Speak to&#8221; for the objects list, and &#8220;Look at&#8221;, &#8220;Use&#8221; and &#8220;Drop&#8221; for the inventory list)</li>
<li>All objects are droppable by default</li>
<li>The neutral gender and article (&#8220;it&#8221;) are set</li>
<li>Default container properties are set &#8211; by default the object is not a container, cannot be opened or closed, etc. This is just for convenience really &#8211; if we didn&#8217;t set these in the default type, then properties such as &#8220;isopen&#8221; would default to <i>null</i> instead of <i>false</i>, which would make the container logic messier. (An enhancement might be to add special logic so that in an expression &#8220;null=false&#8221; would be true, but I&#8217;m not sure how good an idea this would be &#8211; I&#8217;m open to feedback on this)</li>
]]></content:encoded>
			<wfw:commentRss>http://www.axeuk.com/blog/2010/02/18/types-in-quest-5-0/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>&#8220;Undo&#8221; support in Quest 5.0</title>
		<link>http://www.axeuk.com/blog/2010/02/17/undo-support-in-quest-5-0/</link>
		<comments>http://www.axeuk.com/blog/2010/02/17/undo-support-in-quest-5-0/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 09:00:18 +0000</pubDate>
		<dc:creator>Alex Warren</dc:creator>
				<category><![CDATA[Quest]]></category>

		<guid isPermaLink="false">http://www.axeuk.com/blog/?p=104</guid>
		<description><![CDATA[Over the years one of the most commonly requested features for Quest has been the ability for the player to be able to type &#8220;undo&#8221;. This would have been difficult to add to previous versions of Quest, as the game state was stored in a number of different ways, but in Quest 5.0 the entire [...]]]></description>
			<content:encoded><![CDATA[<p>Over the years one of the most commonly requested features for Quest has been the ability for the player to be able to type &#8220;undo&#8221;. This would have been difficult to add to previous versions of Quest, as the game state was stored in a number of different ways, but in Quest 5.0 the entire game state is stored within object properties. The location of objects is a property, global variables are properties, and so on. This makes it much easier to enable support for &#8220;undo&#8221;, and from the start Quest 5.0 has been written with this feature in mind.</p>
<p>Every change to a property is internally logged, which makes it easy to go backwards and undo changes on a turn-by-turn basis.</p>
<p>Core.aslx defines the &#8220;undo&#8221; command, which simply calls the script command &#8220;undo&#8221;. This gives the player unlimited access to the &#8220;undo&#8221; command, but you could override this in your own games to set certain conditions for undoing. Perhaps you would disable undo in certain locations by setting a certain property in the player&#8217;s parent room, or maybe you would set a limit on the number of times the command can be called. Any of this is easily achievable by creating the appropriate script around the &#8220;undo&#8221; command.</p>
<p><b>Monitoring changes to properties</b></p>
<p>If you want some script to be triggered whenever the value of property<br />
&#8220;X&#8221; changes, you can add a &#8220;changedX&#8221; script property.</p>
<p>For example, when the player moves, the value of their &#8220;parent&#8221; property changes. This means you can call some script when this happens by setting a &#8220;changedparent&#8221; script property for the player. This is what Core.aslx uses to trigger the printing of the room description:</p>
<pre>
  &lt;object name="player"&gt;
    &lt;changedparent type="script"&gt;OnEnterRoom&lt;/changedparent&gt;
  &lt;/object&gt;
</pre>
<p>This calls the &#8220;OnEnterRoom&#8221; function every time the player moves into a different room.</p>
<p>Another way this might be useful would be if you had a &#8220;health&#8221; property for the player &#8211; you could create a &#8220;changedhealth&#8221; script which would finish the game if the health value reached zero, and maybe also set a maximum value.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.axeuk.com/blog/2010/02/17/undo-support-in-quest-5-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expressions in Quest 5.0</title>
		<link>http://www.axeuk.com/blog/2010/02/16/expressions-in-quest-5-0/</link>
		<comments>http://www.axeuk.com/blog/2010/02/16/expressions-in-quest-5-0/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 09:00:47 +0000</pubDate>
		<dc:creator>Alex Warren</dc:creator>
				<category><![CDATA[Quest]]></category>

		<guid isPermaLink="false">http://www.axeuk.com/blog/?p=91</guid>
		<description><![CDATA[Quest 5.0 handles expressions throughout all script commands. Whereas in previous versions, things like string variables had to be denoted using special characters, in Quest 5.0 you can use expressions everywhere, just as you can in ordinary programming languages. Of course, many games will only ever need very simple expressions, and the visual editor will [...]]]></description>
			<content:encoded><![CDATA[<p>Quest 5.0 handles expressions throughout all script commands. Whereas in previous versions, things like string variables had to be denoted using special characters, in Quest 5.0 you can use expressions everywhere, just as you can in ordinary programming languages.</p>
<p>Of course, many games will only ever need very simple expressions, and the visual editor will mean that many game authors may never need to write one directly. But, with Quest 5.0, the full power of expressions is available everywhere if you need it.</p>
<p>This means no more special characters are required to denote variables and functions, and also the &#8220;if&#8221; command gets the full power of expressions &#8211; you can use nested expressions with &#8220;and&#8221; and &#8220;or&#8221;, and compare expressions directly.</p>
<p>Here are some example script commands containing expressions:</p>
<pre>
foreach (obj, GetObjectsInScope("Visible")) {
  msg ("You can see: " + obj.name)
}

if ((a and b) or (c and d) or (somenumber * 3 > somethingelse)) { .... }

foreach (obj, somelist + anotherlist + SomeFunctionReturningAList(blah)) {
  ....
}

MyCustomFunction(a, b, c+d)

player.parent = GetRandomRoom(GetNearbyRooms(player.parent))

someobject.take => {
  msg ("Blah blah")
  someobject.counter = someobject.counter + someotherobject.someproperty
}
</pre>
<p>Quest 5.0 also supports local variables. This means you can reuse the same simple variable name inside different functions, if you don&#8217;t need to access that value outside the function. You don&#8217;t need to declare variables in advance &#8211; you can just use them by setting them.</p>
<p>Global variables are now just properties of the &#8220;game&#8221; object, which means the entire state of the game is always defined entirely by object properties.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.axeuk.com/blog/2010/02/16/expressions-in-quest-5-0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quest 5.0 Technical Preview now available</title>
		<link>http://www.axeuk.com/blog/2010/02/13/quest-technical-preview-now-available/</link>
		<comments>http://www.axeuk.com/blog/2010/02/13/quest-technical-preview-now-available/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 14:29:11 +0000</pubDate>
		<dc:creator>Alex Warren</dc:creator>
				<category><![CDATA[Quest]]></category>

		<guid isPermaLink="false">http://www.axeuk.com/blog/?p=93</guid>
		<description><![CDATA[The first Quest 5.0 Technical Preview version is now available. This is a very early release. Most importantly, it&#8217;s limited to hand-coding games (there&#8217;s no visual editor yet), and there&#8217;s no support for games for earlier versions of Quest. These features will be added over the coming months/years (it&#8217;s going to be quite a while [...]]]></description>
			<content:encoded><![CDATA[<p>The first Quest 5.0 Technical Preview version is now available.</p>
<p>This is a <b>very early release</b>. Most importantly, it&#8217;s limited to hand-coding games (there&#8217;s no visual editor yet), and there&#8217;s no support for games for earlier versions of Quest. These features will be added over the coming months/years (it&#8217;s going to be quite a while even before the first proper beta versions).</p>
<p>You can download it from the new Quest 5.0 wiki at <a href="http://quest5.net"><b>quest5.net</b></a></p>
<p>If you have any feedback or questions, please drop me an email or <a href="http://www.axeuk.com/phpBB3/viewforum.php?f=10">see the forums</a>.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.axeuk.com/blog/2010/02/13/quest-technical-preview-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Verbs, Commands and Templates in Quest 5.0</title>
		<link>http://www.axeuk.com/blog/2010/02/03/verbs-commands-and-templates-in-quest-5-0/</link>
		<comments>http://www.axeuk.com/blog/2010/02/03/verbs-commands-and-templates-in-quest-5-0/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 09:00:49 +0000</pubDate>
		<dc:creator>Alex Warren</dc:creator>
				<category><![CDATA[Quest]]></category>

		<guid isPermaLink="false">http://www.axeuk.com/blog/?p=64</guid>
		<description><![CDATA[Note: this information is now out of date. Please see the updated article on the Quest 5 wiki Quest 5.0 currently follows relatively similar principles to previous versions when it comes to processing player input. I say &#8220;currently&#8221; as this may change over the course of the technical previews and beta versions, and I say [...]]]></description>
			<content:encoded><![CDATA[<p><b>Note: this information is now out of date. Please see <a href="http://quest5.net/index.php?title=Verbs,_commands_and_templates">the updated article on the Quest 5 wiki</a></b></p>
<p>Quest 5.0 currently follows relatively similar principles to previous versions when it comes to processing player input. I say &#8220;currently&#8221; as this may change over the course of the technical previews and beta versions, and I say &#8220;relatively&#8221; as although based on the &#8220;old&#8221; system, there is a lot more flexibility and power in the new way of doing things. In a nutshell, we retain the concepts of <strong>verbs</strong> and <strong>commands</strong>.</p>
<p>Here is a simple command:</p>
<pre>&lt;command command="test"&gt;
  msg ("Hello")
&lt;/command&gt;</pre>
<p>This allows the user to type &#8220;test&#8221;, and in response prints &#8220;Hello&#8221;. So far, very similar to Quest 4.</p>
<p>Verbs let you add &#8220;doing&#8221; words, to let players interact with objects. For example:</p>
<pre>&lt;verb command="eat"&gt;You cannot eat that.&lt;/verb&gt;

&lt;object name="crisps"&gt;
  &lt;eat type="script"&gt;
    msg ("Yum yum yum")
    crisps.parent = stomach
    player.health = player.health + 5
  &lt;/eat&gt;
&lt;/object&gt;</pre>
<p>This would let the player type &#8220;eat crisps&#8221;, and provide a sensible response for when the player tries to eat other objects in the game.</p>
<p><strong>Templates</strong></p>
<p>Core.aslx defines the behaviour for standard verbs such as &#8220;look at&#8221;, &#8220;speak to&#8221; and so on, but the actual text for the verbs themselves comes from the language library (English.aslx). To have the behaviour in one place but the verb itself in another, we have templates, which look like this in English.aslx:</p>
<pre>&lt;template name="eat"&gt;eat&lt;/template&gt;
&lt;template name="cannot_eat"&gt;You cannot eat that.&lt;/template&gt;</pre>
<p>A French version might look like:</p>
<pre>&lt;template name="eat"&gt;mangez&lt;/template&gt;
&lt;template name="cannot_eat"&gt;Vous ne pouvez pas manger ça.&lt;/template&gt;</pre>
<p>We use square brackets in Core.aslx to dynamically replace text with the template. So Core.aslx might have a line like this to define the verb, which will behave in exactly the same way as the verb in the above example:</p>
<pre>&lt;verb command="[eat]"&gt;[cannot_eat]&lt;/verb&gt;</pre>
<p>As well as using square brackets, for &lt;command&gt; tags you can use command templates. These let you specify multiple ways of expressing the same command, which each resolve to the same template. For example, English.aslx might define an &#8220;inventory&#8221; command like this:</p>
<pre>&lt;commandtemplate name="inventory"&gt;i&lt;/commandtemplate&gt;
&lt;commandtemplate name="inventory"&gt;inv&lt;/commandtemplate&gt;
&lt;commandtemplate name="inventory"&gt;inventory&lt;/commandtemplate&gt;</pre>
<p>That way, &#8220;i&#8221;, &#8220;inv&#8221; and &#8220;inventory&#8221; all resolve to the same template &#8220;inventory&#8221;, and Core.aslx can define the behaviour of the command like this:</p>
<pre>&lt;command template="inventory"&gt; ...</pre>
<p><strong>Matching objects in commands</strong></p>
<p>For more complicated commands, such as &#8220;put apple on table&#8221;, you can match objects within a command. Quest 5 lets you use regular expressions for this:</p>
<pre>&lt;commandtemplate name="put"&gt;&lt;![CDATA[
  put (?&lt;object1&gt;.*) (on|in) (?&lt;object2&gt;.*)
]]&gt;&lt;/commandtemplate&gt;</pre>
<p>This may look slightly frightening at first glance, but it&#8217;s pretty simple underneath the scary syntax. The &#8220;&lt;![CDATA[&#8221; section is there because we need to use &#8220;&lt;&#8221; and &#8220;&gt;&#8221; characters for the named groups in the regular expression, but we will have an invalid XML file if we don&#8217;t use a CDATA section.</p>
<p>For any named group with a name starting with &#8220;object&#8221;, Quest tries to match it to an object in the current visible scope (e.g. the objects in the current room, plus the objects in the inventory &#8211; I&#8217;ll be discussing scopes in more detail in a future post). You can also have named groups starting with &#8220;exit&#8221; to match available exits.</p>
<p>When the script for the command runs, local variables &#8220;object1&#8243; and &#8220;object2&#8243; are set to the objects specified in the command, so you can access their properties directly using &#8220;object1.parent&#8221; etc.</p>
<p>It may be the case that this mechanism is refined as we go through the development process, as regular expressions are probably overkill. It might be nice to simplify the named group syntax so that you can write &#8220;put #object1# (on|in) #object2#&#8221; in a similar way to Quest 4.x.</p>
<p><strong>Dynamic Templates</strong></p>
<p>Templates are used for all the standard output from Core.aslx. This includes the standard error messages, such as &#8220;I don&#8217;t understand your command&#8221;.</p>
<p>A <em>dynamic</em> template is a template that can call functions and read properties. This is useful for dynamic responses such as when the player tries to take an untakeable object. Usually, a response of &#8220;You can&#8217;t take it&#8221; is sufficient, but what if the object is a female character? Dynamic templates to the rescue &#8211; they are essentially functions that return a string value, for example:</p>
<pre>&lt;dynamictemplate name="TakeUnsuccessful"&gt;
  "You can't take " + object.article + "."
&lt;/dynamictemplate&gt;</pre>
<p>A female character should have their &#8220;article&#8221; property set to &#8220;her&#8221;, so this will print &#8220;You can&#8217;t take her.&#8221;</p>
<p>To print this from a script, call the DynamicTemplate function, which takes two parameters:</p>
<pre>msg (DynamicTemplate("TakeUnsuccessful", object))</pre>
<p><b>Note: this information is now out of date. Please see <a href="http://quest5.net/index.php?title=Verbs,_commands_and_templates">the updated article on the Quest 5 wiki</a></b></p>
]]></content:encoded>
			<wfw:commentRss>http://www.axeuk.com/blog/2010/02/03/verbs-commands-and-templates-in-quest-5-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Quest 5.0 .aslx game file</title>
		<link>http://www.axeuk.com/blog/2010/02/01/the-quest-5-0-aslx-game-file/</link>
		<comments>http://www.axeuk.com/blog/2010/02/01/the-quest-5-0-aslx-game-file/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 09:00:11 +0000</pubDate>
		<dc:creator>Alex Warren</dc:creator>
				<category><![CDATA[Quest]]></category>

		<guid isPermaLink="false">http://www.axeuk.com/blog/?p=44</guid>
		<description><![CDATA[Quest 5.0 uses a new XML-based file format, and files have an .aslx extension. Here is a simple example: &#60;asl version="500"&#62; &#60;include ref="English.aslx"/&#62; &#60;include ref="Core.aslx"/&#62; &#60;game name="Test ASLX Game"/&#62; &#60;object name="lounge"&#62; &#60;start/&#62; &#60;object name="sofa"&#62; &#60;prefix&#62;a&#60;/prefix&#62; &#60;look&#62;Just a sofa.&#60;/look&#62; &#60;take type="script"&#62; msg ("Example script property") &#60;/take&#62; &#60;/object&#62; &#60;exit name="east" to="hall"/&#62; &#60;/object&#62; &#60;object name="hall"&#62; &#60;exit name="east" to="kitchen"/&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Quest 5.0 uses a new XML-based file format, and files have an .aslx extension.</p>
<p>Here is a simple example:</p>
<pre>
&lt;asl version="500"&gt;
  &lt;include ref="English.aslx"/&gt;
  &lt;include ref="Core.aslx"/&gt;

  &lt;game name="Test ASLX Game"/&gt;

  &lt;object name="lounge"&gt;
    &lt;start/&gt;
    &lt;object name="sofa"&gt;
      &lt;prefix&gt;a&lt;/prefix&gt;
      &lt;look&gt;Just a sofa.&lt;/look&gt;
      &lt;take type="script"&gt;
         msg ("Example script property")
      &lt;/take&gt;
    &lt;/object&gt;

    &lt;exit name="east" to="hall"/&gt;
  &lt;/object&gt;

  &lt;object name="hall"&gt;
    &lt;exit name="east" to="kitchen"/&gt;
    &lt;exit name="west" to="lounge"/&gt;
  &lt;/object&gt;

  &lt;object name="kitchen"&gt;
    &lt;object name="sink"&gt;
      &lt;look&gt;Just an ordinary sink&lt;/look&gt;
    &lt;/object&gt;

    &lt;exit name="west" to="hall"/&gt;
  &lt;/object&gt;

&lt;/asl&gt;
</pre>
<p>This example defines what in previous versions of Quest would have been three rooms &#8211; a lounge, a hall and a kitchen. In Quest 5.0 these are just objects, and they themselves contain the objects &#8220;sofa&#8221; and &#8220;sink&#8221;. By nesting &lt;object&gt; elements, you can define further objects inside objects.</p>
<p><strong>Libraries</strong></p>
<p>There are two libraries included in this example:</p>
<ul>
<li><b>Core.aslx</b> provides the default Quest functionality, including: showing room descriptions, implementing default verbs such as &#8220;take&#8221;, &#8220;drop&#8221; and &#8220;use&#8221;, opening and closing containers, and deciding which objects are currently available to the player.</li>
<li><b>English.aslx</b> provides the English text for the built-in default responses, and the names of the verbs whose behaviour is defined in Core.aslx. This means Core.aslx is language-neutral &#8211; if you wanted to make a game in German or Spanish, just translate English.aslx and plug it in to your game.</li>
</ul>
<p><strong>Properties</strong></p>
<p>Each object&#8217;s properties are defined in the XML. In previous versions of Quest, there were only two data types &#8211; &#8220;properties&#8221; were strings, and &#8220;actions&#8221; were scripts. To make things more confusing, the properties and actions for an object were separate from the tags specified in the ASL file, so you couldn&#8217;t always read all the information about an object from a script.</p>
<p>In Quest 5.0, everything has been unified into properties, and there are more data types available, with the XML &#8220;type&#8221; attribute used to specify the type. If no type is specified, the string type is assumed, as with the sink&#8217;s &#8220;look&#8221; property in the above example. An exception is if there is no data in the XML tag, in which case a boolean &#8220;true&#8221; is assumed instead &#8211; as in the &#8220;start&#8221; property for the lounge.</p>
<p>The available types are currently:</p>
<ul>
<li>string</li>
<li>double</li>
<li>int</li>
<li>boolean</li>
<li>script</li>
<li>list (of strings)</li>
<li>list (of objects)</li>
<li>object</li>
<li>exit</li>
<li>null</li>
</ul>
<p>The type of a property can determine the behaviour of an object. In the above example, the sofa&#8217;s &#8220;take&#8221; property is a script, so that will run when the player types &#8220;take sofa&#8221;. If the &#8220;take&#8221; property is a string, the object will be taken and the string will be printed. This behaviour is defined in Core.aslx.</p>
<p>Properties can change type while the game is running, by simply setting them to a new value.</p>
<p><b>Additional properties</b></p>
<p>When Quest loads the game, it will set the following additional properties on objects:</p>
<ul>
<li><b>name</b> &#8211; string, from the &#8220;name&#8221; attribute specified for the &lt;object&gt; tag</li>
<li><b>parent</b> &#8211; reference to the containing object, or null if the object has no parent</li>
</ul>
<p><b>The player object</b></p>
<p>The player is itself an object in Quest 5.0. Here, the lounge has the property &#8220;start&#8221;. Core.aslx defines the player object, and when the game starts it will move the player into the start room by setting the player&#8217;s &#8220;parent&#8221; property to the first object that has a &#8220;start&#8221; property set to &#8220;true&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.axeuk.com/blog/2010/02/01/the-quest-5-0-aslx-game-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An overview of Quest 5.0</title>
		<link>http://www.axeuk.com/blog/2010/01/30/an-overview-of-quest-5-0/</link>
		<comments>http://www.axeuk.com/blog/2010/01/30/an-overview-of-quest-5-0/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 14:28:30 +0000</pubDate>
		<dc:creator>Alex Warren</dc:creator>
				<category><![CDATA[Quest]]></category>

		<guid isPermaLink="false">http://www.axeuk.com/blog/?p=39</guid>
		<description><![CDATA[Quest 5.0 is under development, and is substantially improved from previous versions. Although it is still a long way from being released, I thought it would be a good idea to write a series of blog posts discussing how the new system works, and the new capabilities this will bring to the system. Limitations of [...]]]></description>
			<content:encoded><![CDATA[<p>Quest 5.0 is under development, and is substantially improved from previous versions. Although it is still a long way from being released, I thought it would be a good idea to write a series of blog posts discussing how the new system works, and the new capabilities this will bring to the system.</p>
<p><b>Limitations of Quest 4.x</b></p>
<p>Quest has grown over the years, from the very limited and somewhat quirky Quest 1.0 back in 1998, to the much more powerful system that it is today. However, it is still based on those foundations laid over a decade ago, and this means that it would be hard to implement some frequently requested features without a fundamental rewrite. This is the reason for taking Quest “back to the drawing board” – Quest 5.0 is a brand new text adventure game system, but taking many cues from the current design of Quest.
<p><b>Doing more with less</b></p>
<p>The main idea behind the new version of Quest is that most of its features should be implemented in Quest itself. This is a fundamental change from the way previous versions have worked – in Quest 4.x, there is code for handling the ASL (the Adventure Scripting Language, which is how games define their own logic), and there is also separate code for providing the default behaviour for games, such as what happens when a player takes an object, how to print room descriptions, etc.</p>
<p>By contrast, Quest 5.0 is designed to handle as little default game behaviour as possible. Instead, all this code is written in ASL itself, and defined in a core library. This means that as a game author, you can see exactly how the system works at quite a deep level – and more importantly, you can override this and specify your own behaviour instead.</p>
<p>Many concepts which were separate in previous versions have now been unified. For example, Quest 4.x has separate ideas about rooms and objects, and the player itself is something different again. In Quest 5.0, these are all just objects. An object can contain other objects, and they can contain objects themselves, and so on. So when the player enters a kitchen, the player object moves inside the kitchen object. The kitchen then contains the player, in exactly the same way that a fridge defined in the game might contain a bottle of milk.</p>
<p><b>Eating one’s own dog food</b></p>
<p>In writing the fundamental behaviour of Quest in ASL, I have had beef up the power of the language. By “<a href="http://en.wikipedia.org/wiki/Eating_one's_own_dog_food">eating my own dog food</a>”, I have had to design ASL to handle many things that previous versions simply couldn’t cope with, with the result that it is now a much more powerful and capable language. Expressions are now fundamental to the way ASL works, for example, and there is built-in support for handling lists.</p>
<p><b>Technical Preview</b></p>
<p>I’m very excited by the potential of the new system, and I’m keen to release an early version as soon as possible so I can get your feedback. This will be a very rough “technical preview” version, with plenty of functionality missing – there will be no visual editor and no ability to load Quest 4.x games – though of course these will arrive later. I expect to release this preview version in the next month or two.</p>
<p>Stay tuned this blog for updates, and if you have any questions or ideas then please post to the new <a href="http://www.axeuk.com/phpBB3/viewforum.php?f=10">Quest 5.0 forum</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.axeuk.com/blog/2010/01/30/an-overview-of-quest-5-0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quest 4.1.2 is now available</title>
		<link>http://www.axeuk.com/blog/2010/01/17/quest-4-1-2-is-now-available/</link>
		<comments>http://www.axeuk.com/blog/2010/01/17/quest-4-1-2-is-now-available/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 18:01:36 +0000</pubDate>
		<dc:creator>Alex Warren</dc:creator>
				<category><![CDATA[Quest]]></category>

		<guid isPermaLink="false">http://www.axeuk.com/blog/?p=31</guid>
		<description><![CDATA[Quest 4.1.2 is now available. This release improves the performance of large games. It also fixes the following bugs: A run-time error could occur when typing &#8220;put on&#8221; if that command did not exist. Locked exits weren&#8217;t working in packaged games. Some container-related messages were not present in the LDF file. If the JAWS screen-reader [...]]]></description>
			<content:encoded><![CDATA[<p>Quest 4.1.2 is now available.</p>
<p>This release improves the performance of large games.</p>
<p>It also fixes the following bugs:</p>
<ul>
<li>A run-time error could occur when typing &#8220;put on&#8221; if that command did not exist.</li>
<li>Locked exits weren&#8217;t working in packaged games.</li>
<li>Some container-related messages were not present in the LDF file.</li>
</ul>
<p>If the JAWS screen-reader is running, QDK now shows the old-style menus and toolbars as these are easier for the screen-reader to work with. In addition there is a new &#8220;Go To&#8221; menu for JAWS users which makes it easier to select items from the Treeview.</p>
<p>Quest Pro users can download the update from <a href="http://www.axeuk.com/mydownloads">http://www.axeuk.com/mydownloads</a></p>
<p>Non-Pro users can download the update from <a href="http://www.axeuk.com/quest/quest412.exe">http://www.axeuk.com/quest/quest412.exe</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.axeuk.com/blog/2010/01/17/quest-4-1-2-is-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
