Quest 5.1 Beta

14 December 2011

Quest 5.1 Beta is now available. This is the beta test version of the next release of Quest, which features the following improvements:

  • Enhanced Game Browser. You can now see star ratings, and read reviews and comments, directly within Quest. You also have more control - from the Options window, you can change the download folder, and enable or disable the Sandpit and Adult categories. Also, the Adult category option can be "locked out" with a registry setting - handy if you're rolling out Quest on a school network for example.
  • Simple Mode. Hides Quest's more advanced functionality in the Editor - great for beginners, or for using Quest with younger children. The Editor becomes stripped right down to the basics - only rooms and objects are displayed in the tree, without the distracting "clutter" of functions, walkthroughs and so on. The Script Editor is cut down so only the most important script commands are displayed when adding a command. But full power is only ever a click away - you can toggle Simple Mode on or off at any time from the Tools menu.
  • Walkthrough Enhancements. You can now include walkthroughs in published .quest files, and the new walkthrough assertions feature allows you to create automated tests. Enter "assert:" followed by an expression at any point in a walkthrough, and that expression will be evaluated. The walkthrough will terminate if the expression evaluates to false.
  • Loops. There is a new "while" loop, and a new step parameter for "for".
  • Use/Give. These have been moved to their own tab in the object editor, which is now more flexible. There are now separate lists for "Use (other object) on this" and "Use this on (other object)", so you can set up a "use A on B" relationship from either A or B.
  • Hyperlinks. You can now customise the look of hyperlink menus - change the menu fonts and colours, and turn link underlining on or off. It's now easier to create custom hyperlinks - the new ObjectLink function makes it easier to create an object hyperlink, and the new CommandLink function lets you create a hyperlink that will run any command.
  • Metadata. From the game editor, you can now enter a description and choose a category. There is a new game ID which will be used to uniquely identify a game. This will make it possible to upload a game to textadventures.co.uk without having to re-enter descriptions etc. on the web upload form.
  • Better error reporting. Error messages are now more detailed, so if your game won't load you should have a better idea why. If Quest crashes, you can now submit an error report online.
  • You can now turn off sounds from the Options window.

Download Quest 5.1 Beta


"The Things That Go Bump In The Night" now available for iOS and Android

5 December 2011

The Things That Go Bump In The Night is now available for iOS (iPhone, iPod Touch, iPad) and Android devices.

In this game, written by Tim Hamilton, you are a security guard settling down to a quiet night shift, when things start to go wrong. You must make your way around the compound, solving puzzles and dispatching mysterious beasts.

Available on the App Store

androidmarket

This is the first Quest game to appear for smartphones, and I believe it is the first text adventure to be specifically designed for a pocket-sized touch screen - you can play the entire game without typing, instead using the hyperlinks and tabs to navigate and interact with the game world.

bump-300x194

You can find out more about how the game was made in my earlier blog post. The game is fairly difficult - if you get stuck, check out the comments on the original textadventures.co.uk game page for some tips! Also check out the Twitter hashtag #ttgbitn.

More games will be released soon. Maybe you’d like to write one? Any game written for Quest 5 can now be converted into an app, so if you’re interested, please get in touch!


Redesigning text adventures for iPhone and Android

5 December 2011

"The Things That Go Bump In The Night" is the first text adventure game specifically designed for smartphones, and is now available in both the App Store for iOS and the Android Market.

It's the first app that has been created from a game written for the Quest text adventure system, which I have been developing for a number of years now. The game was written by Tim Hamilton, and in it you play a security guard settling down to a quiet night shift, when things start to go wrong. You must make your way around the compound, solving puzzles and dispatching mysterious beasts.

I believe it is the first text adventure to be specifically designed for a pocket-sized touch screen - unlike old text adventure games which rely heavily on keyboard input, you can play this game entirely without typing. Instead, you use hyperlinks and tabs to navigate and interact with the game world.

I've written here before about the time being right to bring back text adventures by making them easier to play and embedding them on websites, so the obvious next step was to bring them to smartphones too. I think this kind of game can work well as a casual game, as you can just pull a text adventure out of your pocket and play for as long as you like, and you don't need sharp reflexes or great co-ordination - great for playing on public transport!

The way the app works is by using a tool which I've built to convert Quest games into pure Javascript. Using Phonegap, this HTML/JS is then wrapped into a cross-platform app. On iPhone, the NativeControls plugin is used to display native tabs at the bottom of the screen, and to bring up native menus. On Android, it was simple to code a "tab" switcher via the Menu button, and game menus themselves are displayed using a jQuery UI dialog.

Two Conversions
The first step in bringing the game to smartphones was to convert Tim's original game to the latest version of Quest. Tim Hamilton originally wrote "The Things That Go Bump In The Night" using Quest 4, which is effectively a completely different system to Quest 5, as that was a total rewrite (although it does share some of the same design ideas). So the first thing to do was convert a Quest 4 game into a Quest 5 game. I wrote a converter application which converts most of a game correctly, although there were still a few manual tweaks to do - even some Quest 4 bugs to emulate! What really helped was to have a complete walkthrough for the game - Quest 4 has a "transcript" feature which is similar to Quest 5's walkthrough feature. This meant I could have Quest 4 and 5 automatically play the game through to completion, and compare the output, fixing things as I went along.

I then sent Tim the converted Quest 5 game, and he made a few more tweaks and corrections. He also adapted the game to make better use of hyperlinks. Tim's enhancements made it possible to play the game through in its entirety, without the player having to type anything.

Re-engineering Quest
The next step was to convert Tim's enhanced Quest 5 version of the game to Javascript, using a converter which I had started developing a few months ago. I'd thought the converter was 90% done, but as is the case with so much in the software world, the last 10% took far longer than the first 90%. The main difficulty has been threading. Javascript is single-threaded, which means you can't pause a running thread while you wait for some user input. This meant I needed to re-work all of Quest's functions for displaying menus, waiting for keypresses, asking questions etc., and as a result had to refactor some fairly fundamental code such as the parser. Eventually I had a pure HTML/JS version of the game which could be played in any web browser. I implemented the walkthrough feature to verify the game was working correctly, and again I sent it to Tim so he could check for any "off-walkthrough" problems.

Performance
Now the game was working in HTML/JS, it was straightforward to wrap it in Phonegap and create a functioning app. Even here there were unexpected problems - although the app ran at a respectable speed on my iPhone 4, when I ran it on my old iPhone 3G I was horrified to find that it would sometimes take 10 seconds to respond to a command. The fix was again some re-engineering to improve performance.

Saving
The desktop/web version of Quest 5 saves games by writing out the entire game state. The JS app version takes a different approach, saving a delta instead - only changed attributes are saved to local storage. This is quicker, requires much less local storage, and also means that the app can be safely updated without breaking existing games. The delta is automatically saved after each turn. Again I found some performance issues here, so it took a bit of time to get this right. With a Phonegap app on the iPhone, you get no warning if your app is going to be terminated, so I had to make saving robust enough that it wouldn't break things horribly if the game started saving but never finished (instead, there are effectively two save slots that are used alternately, so the worst that can happen is you lose one turn).

Android
By now I had the game working pretty well on iOS, and sent it to a few beta testers using TestFlight, which I highly recommend as it takes much of the pain out of ad-hoc distribution on the iPhone. I thought it would be a good idea to get it working on Android too, and I was pretty pleased when only two days after I took delivery of the cheap but surprisingly capable Samsung Galaxy Ace, I had a version that worked on that too.

I was pleased with the overall Android development experience - it seems so much more developer-friendly than iOS. The documentation is laid out in a way that a mortal can understand, and it's so much easier to send a build to beta testers - just email an APK file. Much more pleasant than dealing with certificates and distribution profiles on iOS.

Available Now
It took about a week for my app to be reviewed by Apple, so today finally the game is released on the App Store and is also now available on the Android Market.

Feedback from the beta testers has been pretty positive - but it is a pretty difficult game, so should keep you occupied for a while!


"Play Online" now supports saving

2 December 2011

Playing Quest games online is far more popular than downloading for offline play - it doesn’t require any downloads, and it works on all platforms. But the offline player (requiring a download of the Windows-only Quest software) provides a better experience in a number of ways - most notably, until now it has been the only way of saving your progress in a game so you can come back to it later.

Well, I’ve now updated “Play Online” (a.k.a WebPlayer) so that you can save your game, if you’re logged in. When playing, there is a new “Save” button in the top right of the page.

To restore your saved game later, log in and then go back to the game page. You’ll see two “play online” links:

So, now you can play games on any device, save them and come back later - even on a different device. Play at work during your lunch hour, then finish the game when you get home.

Please let me know if you have any questions or feedback about the new feature.


"The Things That Go Bump In The Night" coming to iPhone and Android

29 November 2011

The first Quest-powered smartphone app will be released soon. It is an updated version of Tim Hamilton’s The Things That Go Bump In The Night, currently one of the top-rated games on textadventures.co.uk, and will be available for both iPhone/iPod Touch and Android devices.

bump-300x194

This is the first time that a Quest game has been converted into a native application. As I’ve explained in a previous blog post, the way it works is by using a tool which I’ve built to convert Quest games into pure Javascript. Using Phonegap, this HTML/JS is then wrapped into a cross-platform app.

That’s the theory, but it has taken a bit longer than I initially expected to get this first app ready for release, for reasons which I’ll go into below. The good news is that subsequent conversions should now be much quicker and easier.

Two Conversions

The first step was actually a pre-conversion - the app converter works with games written for Quest 5, but Tim’s game was written for Quest 4, which is effectively a completely different system (although sharing some of the same design). So the first thing to do was convert a Quest 4 game into a Quest 5 game.

I wrote a converter application which converts most of a game correctly, although there were still a few manual tweaks to do - even some Quest 4 bugs to emulate! What really helped was to have a complete walkthrough for the game - Quest 4 has a “transcript” feature which is similar to Quest 5’s walkthrough feature. This meant I could have Quest 4 and 5 automatically play the game through to completion, and compare the output, fixing things as I went along.

I then sent Tim the converted Quest 5 game, and he made a few more tweaks and corrections. He also adapted the game to make better use of hyperlinks - something which is really important for the smartphone version of the game. Tim’s enhancements mean it is possible to play the game through in its entirety, without having to type anything.

By the way, now that I have an internal Quest 4 to Quest 5 conversion tool, please get in touch if you have an old game you’d like to convert. The conversion isn’t perfect (which is why this won’t become part of Quest itself), but it can get you most of the way.

Re-engineering Quest

The next step was to convert Tim’s enhanced Q5 version of the game to Javascript, using the converter which I announced back in September. I’d thought the converter was 90% done, but as is the case with so much in the software world, the last 10% took far longer than the first 90%.

The main difficulty has been threading. Javascript is single-threaded, which means you can’t pause a running thread while you wait for some user input. This meant I needed to re-work all of Quest’s functions for displaying menus, waiting for keypresses, asking questions etc. The result of this is new asynchronous versions of various functions, which are implemented in Quest 5.1 and used by the Core Library, as the old synchronous versions of the functions cannot be converted to Javascript.

Being unable to block the thread to display a menu meant that I had to rewrite the parser, as this often needs to display menus to resolve the typed-in object names. I drew myself the diagram below and almost descended into insanity in the process:

So, that was annoying, but it’s actually a better design for the future (especially when playing a game via the web, as the server will no longer need to keep a thread hanging around if it’s waiting for the user to respond to a menu).

Eventually I had a pure HTML/JS version of the game which could be played in any web browser. I implemented the walkthrough feature to verify the game was working correctly, and again I sent it to Tim so he could check for any “off-walkthrough” problems.

Performance

Now the game was working in HTML/JS, it was straightforward to wrap it in Phonegap and create a functioning app. Even here there were unexpected problems - although the app ran at a respectable speed on my iPhone 4, when I ran it on my old iPhone 3G I was horrified to find that it would sometimes take 10 seconds to respond to a command. The fix was again some re-engineering of Quest 5 and the Core Library, this time adding the ability to cache regular expressions, and improving the performance of the scope functions.

Saving

The desktop/web version of Quest 5 saves games by writing out the entire game state. The JS app version takes a different approach, saving a delta instead - only changed attributes are saved to local storage. This is quicker, requires much less local storage, and also means that the app can be safely updated without breaking existing games. The delta is automatically saved after each turn. Again I found some performance issues here, so it took a bit of time to get this right. With a Phonegap app on the iPhone, you get no warning if your app is going to be terminated, so I had to make saving robust enough that it wouldn’t break things horribly if the game started saving but never finished (instead, there are effectively two save slots that are used alternately, so the worst that can happen is you lose one turn).

Android

By now I had the game working pretty well on iOS, and sent it to a few beta testers using TestFlight, which I highly recommend as it takes much of the pain out of ad-hoc distribution on the iPhone. I thought it would be a good idea to get it working on Android too, and I was pretty pleased when only two days after I took delivery of the cheap but surprisingly capable Samsung Galaxy Ace, I had a version that worked on that too.

The Android version looks pretty similar to the iOS version. There is no NativeControls plugin for Android, and Android doesn’t “do” iOS-style tabs at the bottom of the screen anyway, but it didn’t take long to create a native menu which can be used to switch between screens instead. When tapping an object link, I had to create a Javascript menu to display the verbs, but that was only a small amount of work too, made relatively easily using a jQuery UI dialog.

I was pleased with the overall Android development experience - it seems so much more developer-friendly than iOS. The documentation is laid out in a way that a mortal can understand, and it’s so much easier to send a build to beta testers - just email an APK file. Much more pleasant than dealing with certificates and distribution profiles on iOS.

Ready

So it is now ready - the first Quest-powered iOS and Android app, which is also my own first app for these platforms. The iOS version has been submitted to Apple, and I’ll submit the Android version as soon as it’s approved, so both versions will be available on the same day - watch this space!


All Posts