Friday, 20 November 2009

Silverlight Progress

Whilst the Windows PC and Xbox builds remain XAGE's priority, the Silverlight version is the route to greater platform compatibility. Bill Reiss has continued his sterling work on the SilverSprite library with a new release supporting Xna's RenderTargets. This inclusion allows us to utilise scaling of games within a web browser.

As part of SilverSprite there are now two rendering methods - the old Silverlight Canvas style and the new Bitmap-based rendering. They both have their pros and cons, so I've hacked in a quick toggle to change renderer mid-game. This is how Awakener looks playing in Google Chrome at x2 scale using both styles:

AwakenerScaling

Canvas Rendering:
  • Pros:
  1. Quicker - runs at 100% on my atom netbook.
  • Cons:
  1. Ugly aliasing, makes text harder to read.
  2. Visual glitches (transparency especially).
  3. Outstanding memory leak when using bitmap fonts(?).
Bitmap Rendering:
  • Pros:
  1. No aliasing or visual glitches, looks practically identical to xbox and native pc.
  • Cons:
  1. Much more processor-intensive - choppy performance on my netbook but runs at 100% on a fairly low-spec dual core pc.
Bitmap rendering adds (at the moment) a higher hardware requirement than I'd like, but it's really helping push XAGE's cross-platform viability. Again, it's likely that there are further optimisations to be made in both SilverSprite and XAGE, and perhaps the recently announced Silverlight v4 will offer further performance improvements.

Edit: There exists a third option that hadn't occurred to me - using bitmap rendering for the backbuffer and canvas rendering for the rendertarget. This provides a happy medium - a few visual glitches but looks better than pure canvas and runs faster than pure bitmap. This translates to three Silverlight visual quality options - Low (canvas), Medium (canvas/bitmap) and High (bitmap).

Thursday, 12 November 2009

AGS Conversions: Manual amendment example

The process of identifying what needs fixing or improving in the Awakener conversion is mostly done by comparing the original AGS version alongside the XAGE version. Usually a problem corresponds with an unhandled scripting error, of which there are currently 163.

For example, the Awakener intro screen fades some textual images in and out before presenting the player with the menu. This doesn't currently work in XAGE. Examining the scripts reveals that AGS relies on a While Loop to fade the objects in and out.

So at first glance it looks like a simple case of implementing the While Do Loop structure into XAGE (essentially a specialised IF). However, the While condition also uses a local variable "trans". Local script variables are not currently supported in XAGE, so that has to be added too. Plus the While structure is to be based on IFs, which itself need to be updated to be able to handle multiple conditions (i.e. if flag== true && count > 5). Which also reminds me that I should probably merge the IF_OO and IF_OV Action Types for greater flexibility going forward.

All of which is a lot of work, just to make a few objects fade in and out. Sometimes working on the conversion feels like running down a rabbit hole of missing functionality and outstanding features, but the effort will eventually be worth it.

The above is also a good example of where manual amendments are required. AGS uses a Transparency property, where 0 is opaque and 100 is fully transparent. XAGE uses the Alpha channel, similar to drawing applications, where 0 is fully transparent and 255 is opaque.

For a line of AGS code where the transparency is set explicitly, e.g. cFadi.Transparency = 0, it is trivial for the converter to map this properly in XAGE as setting cFadi's Alpha Channel to 255. However, when the Transparency is set using a variable, as in the above example, XAGE has no simple number to convert. It's safe to say that the converter will neve be sophisticated enough to identify all possible values for the variable that stage and amend their values accordingly (which itself could introduce other bugs). The best it can do is alert the user that the value has been amended by a variable and needs to be checked that it's within the correct paramaters.

This complication leads me to believe it would be useful to have a mechanism for identifying certain scripts that are not to be updated if the conversion is run again. That means a user could manually fix various scripts in XAGE and not have them reset should the conversion be run a second or nth time (certainly useful for development and perhaps useful to anyone else who is developing their AGS game concurrently). More work. This is why it's unlikely there'll be any interesting updates for a while.

Thursday, 5 November 2009

A Short History

It's coming up to 18 months since I started work on XAGE. During that time the focus of development has shifted so much, it seems like a good time to recap how XAGE began, where it currently is and where it is going.

The Past:

The original project started as an effort to get my own adventure game on the Xbox Live Indie Games channel (then 'Community Games'). After a few months work the engine was in a playable state and, using Monkey Island 2 placeholder artwork, I was able to hardcode a small demo room. It was obvious that I needed to develop a tool to enable me to quickly create all the game content from scratch, whilst the engine itself essentially operated as an interpreter (similar to SCUMM).

Soon after the original Editor had been created, it struck me that other people may be interested in the tools I was creating. Posting in a handful of forums prompted a positive response, and I started to receive emails with comments, suggestions and general feedback - all of which has been incredibly useful and a good source of motivation. And thus, the Xna Adventure Game Engine was born.

From that point on, focus shifted from the engine to the editor itself. Numerous revisions and improvements have meant that the editor is fairly straightforward and easy to use. I took a look at the competition - AGS, Wintermute and later Visionaire2D, all of which have their strengths and weaknesses. I found myself most drawn to AGS, of which I already had a passing familiarity, as it had a lot of similarities and it seemed to have the most active and friendliest community.

As development progressed I began to think more long term about possible game projects. As I'm a slow and clumsy pixel artist, I felt that it may be a better use of my time to instead think about converting existing games to XAGE for release to the Xbox. I contacted the author of a short AGS game tentatively asking what he thought of the idea, and again the response was favourable. I have since spoken to two others, and been contacted by about a dozen or so more developers, some indie, some commercial. It is pleasing that through only a few forum posts, blogs and youtube videos XAGE has caught the attention of the handful of people I had hoped it might. I have a good idea of who I'd be interested in working with in the future and there are no end of interesting games to port.

Along the way I discovered the open source Silversprite project, and in an afternoon had XAGE up and running in a web browser. This has added a complication insofar that all new functionality has to be supported across all three target platforms - Windows PC, Xbox and Silverlight. On the other hand, it broadens the scope of compatibility to otherwise C# unfriendly platforms such as Linux and Macs.

Eager to put the maturing Editor through it's paces, I spent four or five weeks making my own short game, The Fourth Wall, for Microsoft's DreamBuildPlay competition. It was a useful exercise, leading to a lot of bugfixes, as well as proving (to me and the four or five people who played it) the viability of the engine.

The next shift in development focus came when I discovered that it was possible to automate a large part of the work when converting an AGS game to XAGE, drastically reducing the work required for the end user. Numerous improvements later and I am now tweaking and altering a few outstanding aspects of XAGE's design in order to aid the AGS conversions. This has only been possible by using the few Open Source AGS games available, and more recently Awakener.

The Present:

I'm working on getting Awakener to convert as accurately and simply as possible. I'm having to plumb in new functionality to support this, such as local script variables, script paramaters, GUI customisation etc. This is a lot of work, but the end result will be worth it, vastly improving the feasibility of running complete AGS games on the Xbox.

The Future:

The roadmap on this blog is periodically juggled and amended. Once the work on Awakener is complete, I'll look at other AGS games to help finalise the XAGE GUI design. ETA for this is 8-12 weeks depending on how much time I get to spend.

Following that there will be three main milestones:
  • Rework The Fourth Wall to work with the latest version & release to XBLIG.
  • Release XAGE v0.5 (or whichever version is current) as Beta on a swanky new, dedicated website (i.e. begin the PR).
  • Identify & negotiate rights to the first AGS game to be released on the Xbox360.
So ... there you have it. I'd like to thank everyone who has shown an interest in XAGE so far - your support and encouragement has always been appreciated. To that end, XAGE will always remain completely free for non-commercial use.

Thursday, 22 October 2009

Animation Redesign

The way animations are handled in XAGE has been redesigned to provide more flexibility and aid with AGS conversions.

XAGE previously allowed standards to be created in a fairly quick and easy manner but also lacked some flexibility. The order of the animation frames was important, as they needed to be tagged with various preset labels, "BodyWalkDown_Start" etc. There was also a duality with there being two animation mechanisms - the inbuilt tagging and custom animations (already much like AGS sprite loops). The preset tags have now been removed and now all standard animations (walking, talking etc.) are handled by user-built custom anims. This provides a little more flexibility and efficiency at the expense of time, as it takes a few seconds to set up the standard animations manually and link them to a character.

XAGE still doesn't implement Views in the way AGS does. I can definitely now see the benefit of them, as it enables the user to easily change the character's outward appearance, though there are a few (in my opinion) archaic design decisions that are slightly unintuitive, such as having the standing still frame as the first frame of a walking animation. Likewise I like having the animations frames tied to the character, even if this is inefficient. It seems cleaner and more intuitive, in the same way each conversation in XAGE is tied to a character as opposed to one big Dialogue pool.

The Editor has had a few overdue improvements too, including the ability to preview custom animations without having to run the game (a particularly large timesink when developing The Fourth Wall):

Photobucket

I'll be happy if I can get Awakener's scripting errors post-conversion down to less than 100.

Thursday, 15 October 2009

Awakener Update

Armed with the new ability to extract room information, the progress has been faster than I'd expected. The AGS plugin enables me to pull out everything I need, including the mask information for hotspots, walkbehinds, regions and walkable areas.

The first two have slotted nicely into XAGE with a few minor changes. AGS Hotspots convert over as XAGE room objects, albeit ones with a single, invisible anim frame. AGS Walkbehinds convert as XAGE room objects that are unselectable, static objects with a fixed zPosition as the baseline (The zPos has been reinstated - making the The Fourth Wall confirmed that there are some occasions where you just need to override an object's yPos for the drawing order). Also, standard AGS room objects now convert in a straightforward manner.

AGS Regions and walkable areas are trickier. As XAGE uses geometric walkboxes for character movement, there is no easy way to automatically convert one to the other. I may attempt to tackle this algorithmically, but chances are it will turn into an overcomplicated mess. Another solution may be to store the walkable areas as a single mask and overlay this over the room background within the XAGE Editor, in order to aid the user in manually recreating the walkboxes as quickly as possible (taking about ten minutes or so per room, not including testing).

A third option would be to offer a parallel room traversal system that involves a mask (or to drop the geometric walkboxes completely). It would be quite a lot of work and it would make the conversions more complete, however I'm concerned about unwittingly turning XAGE into AGS-lite, or an unofficial port, and thus want to preserve its position as a legitimate, stand-alone engine.

Working on the conversion is now my main priority, so I'm adding new functionality to help recreate the exact look and feel of the original. Such improvements include a new option over how the cursor highlights characters and room objects. Previously everything was wrapped up in a bounding box, similar to how the original SCUMM games operated. Now each item can have a manual or dynamic bounding box, or a per-pixel detection. The latter option is in keeping with AGS.

Besides a few things (fonts, cursor and some GUI stuff), Awakener running in XAGE is now visually a pixel-perfect recreation of the original AGS version:

Awakener Comparison

I should stress the word visually, as there remains a whole lot of work to do on converting the scripts.

EDIT: The script conversion now counts all unhandled lines of AGS code. Now that I've added this metric it's possible to gauge the progress being made at a glance. The number of script errors that occur when converting Awakener currently numbers 294. It is likely to be a few weeks/months before the number starts to get anywhere near zero.

Friday, 9 October 2009

AGS to XAGE: Awakener

Ben Chandler was kind enough to send me a copy of the source code for his latest game, the excellent and rather sweet Awakener. Here's a short clip of it running on the Xbox360 under XAGE:



Discussion thread in the AGS Technical Forum. To anyone interested in converting their AGS games to the Xbox360 or to their internet browser - please lend your support to the feature request. It would make a monumental difference, and potentially save you hours and hours (and hours) of tedious legwork with your own future game conversions. Thanks!

EDIT: Denzil Quixode on the AGS forums has very quickly knocked up an AGS Editor Plugin that does exactly what I need. Cheers, Denzil!

EDIT2: I've expanded on the code and now built my first AGS Editor Plugin - Export to XAGE. It is largely useless to anyone else at the moment as XAGE Editor v0.5 has not yet been released, but it succeeds in simplifying, speeding up and improving the scope of the conversion process.

Wednesday, 30 September 2009

Three Games

Ben Chandler's new short AGS game has been released: Awakener. As expected, it's a highly polished affair, with a pleasingly unusual ending. Well worth a look. I may have something XAGE-related to post on this in the near-future, so watch this space.

Another AGS game I (and a lot of other people) have been keeping an eye on is VinceTwelve's Resonance. Interestingly, he's used KickStarter in order to fund its entry to the IGF competition. So positive has been the response that he's actually been pledged over ten times the required amount.

As Resonance is being keenly followed by a lot of adventure game adificionados, this is entirely understandable. The XAGE project is still rather low-key, and will remain so until v1.0 and T4W hopefully begin to raise its profile. Seeing that people have pledged both $250 and $500 in order to be included as a character in Resonance only confirms that not only are people very excited about this game but they are also willing to part with large sums of money in order to feel involved in its construction.

My idea: A KickStarter project to allow a single individual to pay a reasonable sum (say, $500 to $1000) to have a short XAGE game created for or about them. Just as some people are crazy for adventure games, a whole lot more are crazy for their Xbox, investing a huge amount of time and money in their hobby. It's not beyond the realms of possibility that someone would be interested in funding some such ego project in order to see their idea or character come to life on their console of choice. It would also tie in nicely with an idea I have for an episodic adventure game on XBLIG, where with each release the episode's financial backer stars as the antagonist.

Finally, Pixel Man was released to XBLIG recently - something about it appeals to me on a very basic level. The tiny graphics, 8bit sounds, rainbow menus and absolutely minimalist gameplay stir some childhood yearning for the Sinclair Spectrum. I'd love to have a crack at making something similar. Maybe when things aren't so busy.