Monday 21 December 2009

Awakener on a Mac

As I'm not nearly rich enough to own an Apple Mac myself, I've not yet been able to test XAGE at all on that platform. This morning I was sent some screenshots of the latest Awakener Silverlight build running on an Intel-based Mac:

awakener mac xage

I was worried that there'd be some unforeseen complications so I'm pleased that it works (incidentally, Ben has released his latest AGS game, which has an agreeably silly ending).

I've almost finished a series of structural improvements mentioned earlier. Previous versions of XAGE had different action types depending on whether you wanted to set a variable (say, PLAYER's X position) to a specific value (100) or to another variable's value (Enemy's X position). This worked but was inflexible.

Now these action types have been combined into a single action, where the variable itself can be set to a value or variable via a checkbox:

Photobucket

Photobucket

As variables are now all loosely typed, we are also able to do more things complex things, like use a variables for a line of dialogue rather than explicit text. That way we can make a character shout out his X Position, for instance.

Photobucket

Likewise, the IF Value/Variable actions have been combined, and can now have multiple conditions. Additionally there's a new WHILE loop structure and new standard variable, Transparency, that is mostly redundant but helps us sidestep the ColourAlpha issues detailed in a previous post.

All these improvements mean that, Awakener's introduction and menu now work more or less as expected, with zero manual changes. Conversely, the improvements utterly break the existing scripts for The Fourth Wall, so at some point I'll have to make some sort of update process.

Tuesday 15 December 2009

New XAGE Website

At long last there's a proper home for all things XAGE. I looked at a handful of ASP.NET based Content Management Systems (DotNetNuke, Umbraco) but they seemed like overkill for what I actually needed. A few days ago I came across the WebFoundations CMS which ticked all three boxes - nice, simple and .net based.


I'd like to say that the site a prime example of functional design, but that's just a roundabout way of saying that it is currently devoid of content. I'll be tweaking the layout and adding bits and pieces on the road to beta release.

As I quite like using blogspot for updates, the website consumes this rss feed for use on the main page (and after a little jiggery pokery, this now includes comments). That way nothing has to be migrated across and I can continue to use blogspot.

Any glaring mistakes, bugs or omissions, let me know.

Wednesday 9 December 2009

Abortive XBLIG Ideas

Every developer has ideas that are discarded on the basis that they are unfeasible, under-developed or rubbish. Here are some of my ideas for the Xbox Live Indie Games channel, now yours, for free!:

1) "Things I'd do for 80 MS points"

With the addition of video support in the Xna 3.0 framework, it is now trivial to include clips in your game, or in this case, showboating application. Think of it as Jackass-Lite - film a series of short videos, each beginning with someone saying "For 80 MS Points, I'd ..." before they do something silly, embarrassing or mildly painful. Have two videos available in the trial version and a further ten or so unlock when the 'game' is purchased. The whole thing would be entirely transparent and shameless, and would be a financial cash-cow. Probably.

2) Remake "Star Warrior"

Photobucket

A sinclair spectrum game I remember fondly, that was ostensibly a Galaxians rip-off with an unusual twist. The gameplay was split into three sections, the first being the standard Space Invaders fare and the second a slightly unusual section where you had to avoid multi-coloured asteroids while descending onto a planet. The third part was the most interesting, a tense standoff between our hero (a magenta figure eight pixels big who would furiously dance on the spot) and the Psychotic Cyborg (a small white ball with a menacing black pixel, which I took to be an eye). The hero would have to enter a yellow maze to get to a blue diamond, protected by the cyborg who would semi-randomly twitch and jerk its way around the maze. As a six year old, I remember that making a dash for the diamond was a truly exhilarating affair, as the Cyborg would make a terrifying 8-bit screechy sound as it moved, and would mercilessly hunt and shoot your frantic, dancing hero on sight.

Modern gaming, replete with autosaves and checkpoints, can be quite lacking in tension and atmosphere. Remake the above, along with some intricate form of permadeath, and you have a genuinely stressful game with an intensely rewarding payoff.

3) "The Race Card"

Pick a card game, any card game. Play as normal until one player pulls out the Race Card. Upon playing the Race Card, their opponent must turn off their console, feeling slightly ashamed and confused.

4) Indie Band

Approach one of the many unsigned bands flouting their wares on Myspace and the ilk. Create a short application that displays photos, images, band-motifs and lyrics along to their music. Release their album or EP for 400 points and split the profits. It's limited in that the music is non-transferable and only playable on the Xbox itself, but you may get some media coverage for the unorthodox route to market (the band being interested in publicity, you in sales). I'd much rather this flood the market than massage apps.

5) Be the bad guys

Some games have attempted to let you play as the bad guy (e.g. Dungeon Keeper, KotOR) but usually in a way that doesn't have an especially meaningful impact on the gameplay. You still play the game as normal, be it shooter, RPG or Strategy, except you have evil ends to evil aims instead of good.

One departure from this would be to make a game where you truly get to be an typical Bond-Villain. It could be a bit like a tower defense game except not as dull, where you command dozens of inept, incompetent henchmen against an impossibly overpowered and good-looking AI controlled hero character (perhaps modeled on the Commando unit from the C&C games). Only through sheer attrition or blind luck are you able to take him down - perhaps he gets stuck on a bit of geometry and starts to swear. Or perhaps it's fairly easy to take him down, except the AI can restore the game from previous save points and you succeed by frustrating him to the point of exasperation, at which point he exits the game abruptly and you are returned to the dashboard, triumphant.

6) NXE 2

Make a game based on the Xbox (New Xbox Experience) dashboard itself. You essentially have a series of mini-games that are 'launched' as separate apps within the service, parodying existing games. The soundtrack could be "I made a game with 'I MAED A GAM3 W1TH Z0MB1ES!!!1' in it, innit?".

7) Motherhood

Point and Click Adventuring offers an opportunity to explore interesting and exciting areas with characters and storylines. Unfortunately the majority of titles, especially freeware games, instead prefer to explore safer and more traditional territory (You play Jacob Mackenzie, a Private Investigator with a murky past and a point to prove!). This may lend itself to traditional inventory-based puzzle-solving, but often doesn't do much in the way of providing actual entertainment.

As with film and music, I like to encounter things that I haven't experienced before. There are so many interesting topics to be covered, which first got me thinking about having a game where you play as a pregnant woman, where you navigate all the social pitfalls of dealing with a pregnancy that only you want. The player character would noticeable change over time, growing in size and a decreasing walk speed. How many times have you seen a woman giving birth on tv compared to in a game? How many games deal with the relationship and bond between a mother and her newborn child? Maybe the mechanics of such a game would turn out to be tedious, but I'd like to see it tried. It's not all about saving the world and blowing things up.

--

It should hopefully be easy to spot which of the above are rather tongue-in-cheek. Don't be fooled; very occasionally I do actually have some half-decent ideas. I'm just keeping those closer to my chest.

Edit: Star Warrior - that's the one. Added screenshot. Thanks, David.

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.

Tuesday 15 September 2009

XAGE on the iPhone?

The ZuneHD has been released in America. As it directly supports XNA there's a reasonably good chance XAGE will eventually target this. Portable XAGE gaming would be a terrific novelty, for me if no-one else.

That said, what is an even more tantalising prospect is that of iPhone support, due to the large, affluent user base and the recent success of the Monkey Island re-release. However, given XAGE is built using C#/XNA and iPhone uses Objective-C, there was never any real hope of the iPhone being supported.

Until now. The open-source XnaTouch project aims to help port Zune (XNA) games to the iPhone. They have a short video up showing an XNA game running on the iPhone simulator here. Of course, this is all miles away at the moment and would require an investment of several thousand pounds of new hardware, but it's yet another potential direction for the engine. I'll have to keep a close eye on XnaTouch to see just how feasible it is, but potentially there's the possibility of some ridiculously convoluted porting fun, e.g:

AGS game -> XAGE -> Publish to ZuneHD -> Port to iPhone (via Mac)

In the meantime I really ought to get the GUI customisation finished. Finally releasing The Fourth Wall to XBLIG will be a tremendous relief - conclusive proof that XAGE is not vapourware.

Thursday 10 September 2009

AGS to XAGE: Pixel Hunt

There aren't many open source AGS games, but I discovered that by hacking away at the code I've been able to get Andrew 'SSH' MacCormack's Pixel Hunt updated to the current version of AGS (most likely breaking a whole bunch of things in the process - I'm no AGS expert). An up to date source code meant that it became the third AGS game to get the XAGE conversion treatment. Running under AGS vs XAGE:

Photobucket

As you can see above, I've finally started making some progress rewriting XAGE's GUI system as I want this completed before realeasing T4w. The AGS GUI Buttons are more or less displaying correctly on the screen, though they don't do much else at the moment. Notable differences:
  • Dynamic Cursor not yet implemented (top).
  • VerbCoint not yet implemented (sitting happily in the top left hand corner).
  • Pixel Car missing (centre, most likely a scripting inconsistency).
  • GUI Labels not yet implemented (bottom left, 'SSH Productions' etc).
  • New inventory system not yet implemented (bottom middle, white gfx card).
  • GUI Button Text not using correct colours (bottom right - not yet sure where to find this in AGS Editor) .
Disclaimer: There's the tiniest sliver of nepotism in this post as SSH runs the AGS Blog and occasionally says some rather nice things about the XAGE project. There was also a very positive plug on xnPlay a few weeks back. All PR help is appreciated! Likewise, any developers with AGS source code they don't mind sharing - please get in touch. The more I get my hands on the more the conversion process improves.

Tuesday 8 September 2009

XAGE Flow

As requested, here's a brief overview of how everything currently fits together in XAGE land:

xage

The game code is all stored as xml. Unlike AGS, which compiles the scripts and slaps them onto the exe, the XAGE game code is never compiled. The XAGE executable loads them it merely deserializes (loads) the xml. The only variation to that is for a finished, published XAGE game, where the xml (along with all graphics, audio etc.) is zipped up to reduce filesize. Further size savings could have been made if I'd allowed for binary serialization, but there was some good reason I've not done this (probably unsupported in Silverlight - most things are).

Friday 4 September 2009

Criticism of XBLIG

I should qualify this post by saying that XNA is a fantastic framework and Microsoft is a darling for colluding with the Indie/Homebrew development scene. Now, with that out of the way ...

1) There are way too many non-games on the service
As a consumer and a developer, the pointless screensavers and massage applications irritate me. They clog up the service and, in all honesty, have no place on a digitial distribution channel that has "games" in the title. Conversely, as a greedy developer with bills to pay, I've had a few half-decent ideas for non-games (some of which that, amazingly, don't involve making the controllers vibrate) that could potentially make a few pounds for very little effort. As a matter of principle I've not yet gone down that path, though principles do have a habit of dissolving when unemployment pokes you with his bony finger.

2) The ones that are games have dreadful names
Biology Battle, Zoomaroom, Revenge of the Ball, Memorania, Neon Paddles. Without wishing to pick on these in particular, they do all sound awfully dull, like a game you get after painstakingly spending twenty minutes copytyping code from a 'Learn Spectrum Basic' book circa 1985.

Many XBLIGs have quite utilitarian names. Tank Strike, for instance, is admirably concise and conjures up a fairly accurate representation of the gameplay. Unfortunately this also can enforce rather low expectations for the game itself, as all curiosity and mystique are swept away the instant you read the title. It's possible to take three random words and end up with a better name for a game than most titles already on the service. Look, I'll do it now: Kaiser Raul's Fishbowl. See? I'd buy that game in a second.

3) The Box Art is even worse
A similar proportion of existing XBLIGs are cursed with generic, boring, lazy boxart. Some are downright dreadful; a garish mess of unreadable text and primary colours. The box art is where you set out your stall for the majority of your customers, so to get this so spectacularly wrong is shameful.

4) And they're all the same, aren't they?
Of every ten games, I might download the trial for one or two. For my tastes, there are far too many generic puzzlers and platformers. They may have some minor innovation in their main gameplay mechanic, but I've yet to play one that has compelled me enough to purchase it (partly because I'm a miser but also because of the lack of achievements. In many ways the 360 has ruined playing games in that I now feel I need an arbitrary little number to justify the time spent - enjoyment alone is no longer enough). With a few notable exceptions there is very little focus on storytelling or character development. Hopefully XAGE will go some way to addressing this.

Postscript: Yes, The Fourth Wall isn't a fantastic name and the box art is deliberately rubbish, so it is conveniently exempt from 2 and 3.

Friday 7 August 2009

AGS Conversion Progress

Yesterday was a welcome break from T4W (how long does it take for an acronym to be established?). I spent some time rewriting how XAGE converts AGS scripts. Previously it was a bit flaky in how it dealt with carriage returns and didn't always provide the most reliable results.

Each AGS script is now tokenised, splitting everything up into functions, statements, if, brackets etc. The tokenised script is then converted into XAGE scripts. This two stage process is a lot cleaner and easier to extend. Using OpenQuest as my AGS source, here's a cherrypicked example of where the conversion is currently at. Consider the following AGS code:

function character2_a() {
// script for Character 2 (Lifeform): Interact character

if (sInteractionVerb == sTalkTo)
{
hideGUI();
// have we already met the cleaner? If so, use a different greeting
if (GetGlobalInt(8) == 1)
{
player.Say("Greetings Carol");
cCleaner.Say("You again?");
}
else
{
player.Say("Speak lifeform!");
Wait(40);
player.Say("Is this translation matrix working?");
cCleaner.Say("You're that guy from accounts right?");
}
dCleaner.Start();
}
else if (sInteractionVerb == sSmell)
{
player.Say("This creature has an overwhelming pungent smell");
}
else if (sInteractionVerb == sMove)
{
player.Say("The lifeform is surprisingly sturdy, I don't believe I can use force");
}
else
{
triggerUnhandledEvent();
}
}

The above function now converts automatically to an XAGE script as follows:

Photobucket

The two provide the equivalent 1-1 functionality save for two things:
  1. XAGE doesn't know what 'sInteractionVerb' is (#defined in OpenQuest as Game.GlobalStrings[11]. Whereas XAGE would link each event with its own script, AGS (or AGS developers?) tend to bunch certain events to the same function, which seems unnecessarily complicated - perhaps a throwback to earlier AGS versions).
  2. The conversion process doesn't yet handle AGS functions calling each other (requires an XAGE object running a new XAGE script).
In the future I see a juggling act; trying to keep XAGE's design as clean as possible and yet trying to map as much AGS functionality as possible, some of it outdated and deprecated. It's gratifying nonetheless to watch the OpenQuest opening cutscene running in XAGE, albeit in a slightly clunky, stunted way.

Wednesday 5 August 2009

"The Fourth Wall"

Today I submitted my DreamBuildPlay competition entry, "The Fourth Wall". As the deadline loomed I've had to cut a lot of corners, and there's no chance it will win, but I'm reasonably pleased with how it has turned out.

It's a silly, short game (or rather, anti-game). Here's a trailer that has absolutely nothing to do with the game itself:



I'm waiting on a few library fixes but there should be a Silverlight demo soon. In a few weeks you should also be able to part with 80 Microsoft Points and enjoy it on your Xbox360.

XAGE's first commercial product. Huzzah.

Sunday 26 July 2009

The 8 Minute Trial Test #2

As a continuation of the previous 8 minute trial test, five more point and click adventures get the treatment.

Colour Key: Green = pre v1.0 functionality, Orange = post v1.0, Red = unlikely to be implemented.

1) Emerald City Confidential

Photobucket

The Good: Polished, HD graphics, excellent audio. Single-click interface is very user-friendly. Lots of hand-holding to ease in casual players. Parallax scrolling intro.
The Bad: Slidy-walk animation. Playfirst DRM (didn't actually seem too intrusive). Objectives were clearly laid out but there was no real explanation as to why - not a lot of real plot exposition within the first 8 minutes.
Not yet possible in XAGE: GUI customisation, Speech, Various GUI effects.

Photobucket

The Good: Fun concept, well introduced and setup. Impressive dual view technique on tutorial. Swearing in binary.
The Bad: Some minor clipping issues. 'Groovy Greg' seems to suffer from a mild form of Parkinsons.
Not yet possible in XAGE: Text input, Y axis scrolling, GUI customisation.

3) Time Gentlemen, Please

Photobucket

The Good: Finely crafted, plenty of attention to detail. Entertaining and colourful introduction. Irreverent humour. Plenty of witty banter between protagonists.
The Bad: Some very minor flickering as walking & scrolling not synched.
Not yet possible in XAGE: GUI Customisation.

4) Heed

Photobucket

The Good: Very distinctive art & audio, along with extremely simple user interface. Smooth, clean animation. Intriguing room-by-room development. Existentialist musings.
The Bad: No narrator with a tophat. The fly is a little slow.
Not yet possible in XAGE: GUI customisation.

5) Five Days a Stranger

Photobucket

The Good: Player character is a criminal.
The Bad: Visually has not aged especially well. Interface is particularly clunky and old-school.
Not yet possible in XAGE: GUI customisation.

Friday 24 July 2009

XBLIG price changes

Microsoft have shifted down the three price points developers can choose for their indie games (from 800, 400 and 200 to 400, 240 and 80). I'm in two minds about this.

Cons: With 800 points (about $10) no longer offered, more professional outfits are likely to be turned away if the most they can charge is about $5. The race-to-the-bottom pricing is likely to make XBLIG much more like Apple's App Store. It is already quite cluttered with largely pointless apps and massage games (the dashboard update to introduce users ratings should mitigate this somewhat). In my opinion, the areas in which Indie Games differs to the App Store are its strengths, so it is unfortunate to see them being eroded further.

Pros: I had no plans to monetize my DBP09 entry, given that it will provide little more than 15-20 minutes of play. But with a price point of 75p, why not? I'll reassess this closer to completion. It also opens the door for various small AGS games, for which a 75p cost is justifiable.

Sunday 19 July 2009

OpenQuest

To distract from the fact I've not been able to get anything done in the last fortnight, here's a picture of OpenQuest running on XAGE:

OpenQuest on XAGE

It's a bit glitchy (not sure what happened to the Cleaner on the left) and has the same limitations as Demo Quest, but it works. Between the two I have a reasonable amount of source material with which to improve the AGS conversion process.

Silverlight v3.0 has now been released, so Bill Reiss is continuing his excellent work to bring SilverSprite up to speed. This means that any browser based XAGE adventuring should soon become a much more robust & enjoyable experience.

Wednesday 8 July 2009

Twitsqueak

As I'm practically providing 24 hour care at the moment, I have very little time for anything, let alone coding. This means I am spending a lot more time thinking about all things XAGE than actually doing anything productive.

As you can only mull over algorithms and design for so long, I've started to devote more time thinking about the eventual ramping up of the PR machine. I've been collecting a number of decent articles on publicising independant games, though it has become obvious that this is the part of XAGE's lifecycle that I'm looking forward to least. It's cold and calculating but a necessary evil.

Increasingly people have mentioned that twitter is good for (ugh) networking, (ick) public relations and (hurray!) stalking celebrities. To this end I've created an XAGE twitter account. I generally avoid sending text messages and have a distate for anything that encourages netspeak, but having used it for a few days I can see its merits (besides following the ravings of Charlie Brooker). Updates may be few and far between for the time being.

All being said, all the publicity in the world is next to useless if you don't have a decent product. One day I'll get around to fixing those damnable dynamic object boxes.

Thursday 2 July 2009

Feedback = Features

I've had a few pieces of genuinely useful feedback so far. One suggestion was to allow developers to enable or disable each individual action as and when they're needed (much like commenting out code), which hadn't even occurred to me previously.

After adding this functionality, I then realised it would be handy to be able to annotate scripts with developer comments, so added that too. To add an extra layer of flexibility I decided to finally implement Nested IFs, meaning it's now possible to create more complex conditional logic:

Photobucket

So, XAGE scripts looks more and more like real code, but it's still verbose and simple enough for anyone with eyes and half a brain to understand. The only typing required is for the dialogue and occasional object value.

Another improvement has been to add WalkLines, which are similar to WalkBoxes but only have two points rather than four. This was already achievable, simply by making two points the same, but having this additional construct should make it more immediately obvious to developers about their use. There are now also more visual cues when placing any walkable areas, so you can more easily detect horizontal or vertical alignment and connections.

I'm still a few months away from ramping up the PR machine as we get closer to v1.0. One thing lacking so far is bug reports - I've only ever received two. I'd love to believe that XAGE and XAGE Editor are watertight applications but that simply isn't the case. If anyone encounters any fatal exceptions, please let me know (there's a big friendly button that does it automatically!).

Finally, I've pestered Ben304 into letting me use some of his artwork for my DBP entry. He's a well-known man about AGS-town, so if you haven't taken a look at his short games Annie Android or Shifter's Box, do so.

Thursday 25 June 2009

XAGE Publc Alpha v0.4 - Download

I'm not sure of the exact date, but it's been more or less a year since I began working on XAGE, and it's a relief to finally have something to publicly show for it. You can now download it at the following link:

www.clarvalon.com/XAGE/Release/xage v0.4.zip (2.8mb, mirror)

This includes:
  • XAGE Editor (with embedded Default Game)
  • Skeleton Visual Studio Projects for Xbox360 and Silverlight (included for the people who have expressed an interest in trying them out).
It has to be pointed out that this release is more than a bit rushed as I'm completely swamped. There are quite a lot of known issues and unfinished sections, but as a whole product it's the most feature-complete version yet. It's fair to say that the included game is a little underwhelming compared to previous ones, due to lack of fancy Lucasarts graphics and varied scripting, but it should serve as a pointer on how to achieve the absolute basic effects.

As usual, XAGE is hungry for feedback and bug reports, both of which can be submitted in seconds via the built-in menu options. Likewise it would be interesting to hear the experiences of anyone attempting to use either of the VS projects or the AGS conversion tool.

Sunday 14 June 2009

'Avatars may leave innocents or bystanders slightly injured, but not dead'

Precautionary swine flu quarantine aside, the weekend has provided some much needed relief. Easily the biggest thorn in XAGE's development has been dealing with all portability issues. I was pleased with the heavy-duty Rjindael encryption but unfortunately it was not compatible with either Silverlight or the Xbox. After scouring the web I was able to find three different, working ports of SharpZipLib, meaning I could begin work on the ...

Unified File Access:

All assets are now zipped up for published games, reducing the size and number of files. With regards to file formats, it's not even a case of working with the lowest common denominator, as there is no way of freely (i.e. without licensing issues, either by using mp3 or commercial libraries) using any two formats on all three target platforms. After a lot of trial and error and about half a dozen open source audio components, I've finally implemented a solution that satisfies all the requirements for the new integrated publishing system:
  • XAGE can now play one piece of background music at a time, and any number of sound effects.
  • Music is initially stored as Mp3s and sounds as Wav files. These are used when debugging on Windows (via SdlDotNet).
  • For published windows games, the user is given the option of swapping the Mp3s for Ogg tracks to bypass any licensing issues. The Wav files are untouched.
  • For Xbox games, the Wav files are automatically converted to Xnb via MSBUILD. The Mp3s are converted into Wma.
  • As Silverlight cannot natively play Wav files, they are coverted into Wma and Mp3s are left untouched, covered by Silverlight/MS.
  • All three platforms are capable of loading assets from the pre-prepared zip files (with the exception of the Xbox Music as it cannot stream a compressed Wma file).
Just thinking about it is exhausting, but it all works as expected. Publishing an XAGE game is designed to be as simple as possible (K.I.S.S applies to UIs too), so the user will be oblivious to most of the above. The Xbox and Silverlight platforms are a little more involved, and require a free installation Visual Studio 2008, but even then it's mostly just a case of hitting the big green 'Start debugging' button.

What does this all mean? Well, after debugging a game via XAGE Editor it's possible to play the same game on the 360 and a Web Browser in a matter of seconds (minutes if you've made changes to the graphics or audio):

Photobucket

Xbox Live Indie Games:

Community Games has been rebranded by Microsoft to 'Indie Games', which seems like a sensible move. This coincides with the release of the Xna 3.1 framework, which from XAGE's point of view doesn't yet provide a compelling reason to update. The inclusion of Avatar support is a nice touch, though there are some strange guidelines regarding their use in games.

As DBP09 closes in August, I've taken the decision to wrap up any loose ends, release v0.4 and then see if I'm able to complete my game within the competition deadline. I'd essentially be submitting a demo (not that there is any chance of me winning anything), but it will be a good exercise in finally putting the engine through its paces and will give ideas on areas of improvement. The resulting 4 month Creator's Club access will be handy too, giving me time to take a proper stab at it before releasing to XBLIG.

Sunday 7 June 2009

AGS's 'Demo Quest' on Silverlight

I'm currently rewriting how content is handled, in order to make it trivial to publish XAGE games on various platforms (more about this later). Part of this is targeting the Silverlight platform, so I've rebuilt Demo Quest (as per the xbox video) and temporarily uploaded it to play in your web browser here. It's playable but VERY sketchy, as most of the optimisations and memory issues won't be sorted until Silverlight v3.

Monday 25 May 2009

AGS's 'Demo Quest' on Xbox360

The bulk of the conversation system is now in place, and there will be further refinements when I tackle the last major component (GUI customisation). Here's a new video detailing the following:
  • New Editor appearance (themes).
  • New Script Action creation method (popups).
  • XAGE again converting and running AGS's sample game, Demo Quest (demonstrating a short conversation between Cris and Beman).


This time we don't cover exporting the graphics from AGS, but you can see that the conversion process is mostly painless. The only changes necessary here are to place the Player character, Cris, in the same room as Beman, to whom we scale up and add an onTalkTo script to initiate the conversation. A side-by-side comparison of AGS and XAGE:

Photobucket

From the video and picture above, the following is evidently missing or incorrect:
  • GUI (Reason: Not yet implemented in XAGE).
  • The character scaling is off (Reason: Room XML required - cannot access walkable areas to automatically determine correct scaling).
  • Wall Panel missing (Reason: Room XML required - cannot access information on room objects).
  • Cris is darker in AGS (Reason: Not sure. Either there's some filtering applied by AGS that I'm not aware of, or the room's palette is affecting the sprite).
Also, the Cris character has no animation for walking up (away from the screen). AGS is happy with this and just substitutes with an appropriate left/right walking animation, whereas XAGE currently expects the animation to be there, hence the odd sliding effect in the video. This will be dealt with at some point.

So far all of the conversion work is based around what is required for Demo Quest, so it would be very interesting to hear about other people's experiences. Once XAGE v0.4 is released I'll see about placing some sort of official feature request with AGS/Chris Jones for AGS Room XML export functionality, providing there's demand for it.

Edit: Ags Forum thread here.

Friday 8 May 2009

Dull Technical Post

Real life events have again made it difficult to contribute time to XAGE, but there has been some small progress in the last few weeks.

I remember now why I put off implementing the conversation system for so long - there are a lot of design ramfications of doing so. The basic structure is in place and its now possible to initiate and select various conversation options in a similar way to a LucasArts game.

The reason it is incomplete is a long one. I've found that the more time I've spent on XAGE, the more inclined I am to want to do things right, rather than use any cheap or ugly hacks. One such case is that the dialogue system requires new Action Types in order to initiate conversations, amend option visibility etc. Rather than plumb these in as before, I wanted to completely rewrite how the Actions are organised both internally and externally.

Internally: At the moment, actions are simply stored as a type and a string of associated content, which is delimited by the tilde character. This is simple to implement but is quite brittle. After discovering Nick Gravelyn's post about serialization, I realised that it was actually possible to put Action types in their own class and still serialize them. This is a much cleaner and correct OOP way of doing things.

Externally: The original Action editor relies mostly on combo boxes. Given that the number of action types was swelling to thirty and beyond, it was becoming obvious that this list would become daunting to any unfamiliar users. It's also quite a backwards thing to select the action type before the item it is being performed on. By selecting the item first, you automatically narrow down the number of possible actions you can perform. Its also more intuitive:

(old) Walk -> (Character, ToXY, Direction, Pause)
(new) Character -> Walk -> (ToXY, Direction, Pause)

Its not especially easy to illustrate using text alone, but the benefits should become obvious after a few minutes of use. The above also means I can wrap up each piece of information into a seperate class and re-use as necessary for each Action (e.g. Pause after action is used in various). Certain items are now selected via popup buttons rather than combo boxes, as this is more visual and easier to understand.

All of these changes require quite a large rewrite. One problem is that, previously, I've completely seperated the codebase of XAGE and the Editor itself, as they only shared a dozen or so classes. As the number of classes has grown massively due to the new Action structure, it has become obvious that I need to wrap all the shared classes into a Global project, and expand any functionality in XAGE or the Editor via partial classes.

None of these required changes are particularly exciting in any way, and will take some time to complete. The end result will be a cleaner, more flexible XAGE v0.4, which should be the first wholly public alpha.

Wednesday 22 April 2009

Editor Appearance

One of my gripes with the XAGE Editor was that the toolstrip looked bad on Vista - a sickly pale colour as opposed to XP's vibrant blue. It seems to be a recurring problem for Winforms developers.

When looking for solutions for this I came across a useful, free component framework, Krypton Toolkit, which is a lot more lightweight than the likes of DevExpress but looks good and seems to perform pretty well. I've spent the last few evenings making the Editor play nicely with it - there are a few workarounds due to various limitations, but I'm now at the stage where I'm satisfied it has been worth the effort:



I like it. It has a smooth WPF-esque feel about it whilst still being plain old Winforms. The new Editor Appearance preference allows the end user to choose between a number of presets. If I get the time I'll add a few custom ones - for novelty value alone I'm interested to see how it looks in an eye-watering pink.

Saturday 18 April 2009

Refactor, Bugfix, Itch

The overall response to the AGS converter, despite its infancy, has been pretty positive so it's something I'll continue to work on. It's probably worth reiterating that my little engine is not an official port of AGS, or in any way affiliated or endorsed by it; they are two seperate engines that share some general goals & functionality. Also, the conversion only ever takes place at the developer's project level, not with the compiled AGS game as this would be unethical (and also really hard).

I've taken a closer look at AGS's file structure and it is in fact possible to glean quite a bit more information than I originally thought. I've started a component that picks out all the dialogue options and then parses the associated dialogue script for the associated behavious, which map quite nicely to XAGE's Actions.

This cannot be ported over just yet as there's no equivalent functionality in XAGE - as much as I'm itching to dive in and start work on the Conversation system, there's a whole bunch of bugfixing and refactoring to do first. Walkboxes are now (fingers crossed) feature complete, and the graphics control in the Editor is more user friendly with mousewheel zooming and right-click scrolling. It also better illustrates which pixel you're selecting and a few other handy things like showing WalkBox connectivity. Here's a mini-changelog:
  • FIXED: Character Panel slow due to obsolete links
  • FIXED: Anim Frames getting width & height out by one pixel
  • FIXED: Removed clumsy indexing for Anims, CustomAnimSteps & Actions
  • ADDED: New IF Actions (Variables & Objects)
  • ADDED: Graphic control - change get pixel depending on what we're getting (with new icons)
  • ADDED: Graphic control - drag image via right mouse button
  • ADDED: Graphic control - zooming controllable by mousewheel & cursor position
  • ADDED: Graphic control - zoom buttons no longer originate around 0,0
  • ADDED: Graphic control - show when walkboxes are connected
  • ADDED: Basic in-game debug window
  • ADDED: Active flag for WalkBoxes, amendable in scripting, resets WalkBoxMatrix
  • ADDED: onEnter event for Walkboxes - script to run when Player enters
  • ADDED: Basic AGS -> XAGE conversion

Tuesday 14 April 2009

AGS -> XAGE Conversion

Over Easter weekend I finally got around to taking a proper look at Adventure Game Studio. The first thing I discovered was that the main container for an AGS Project (*.agf) is in XML format.

More as a proof of concept than anything, I've added an option to convert AGS projects to XAGE. The process so far only takes a few minutes - here's a quick video of Demo Quest 3-1 being converted to and running in XAGE:



As above, the sprites and room images need to be exported first (the player character is currently bald as AGS seems to export to 32bit bitmaps instead of 8bit). XAGE gathers up the exported sprites into a single texture for each character and creates the animation frames automatically.

It's a nice start, but there are quite a few limitations:

  • As AGS and XAGE are both engines for the same genre, there's inevitably a great many similarities. There are also, however, a number of crucial structural differences. For this reason there will never be a 1 to 1 perfect automatic conversion.

  • Unfortunately the individual room data (objects, walkable areas etc) is not wrapped up into XML but some other format (.crm?), so I'm not currently able to convert any of the scripts over - the real meat of the game.
At the very least, the conversion process removes some of the donkey work for anyone who may want to port their finished AGS game to the Xbox360.

Friday 10 April 2009

Scripting example - Clouds

Here's a real world example of scripting in XAGE. One of the locations in my game is on top of a mountain and some moving clouds would help bring the room to life.

Photobucket

Let's break this problem down into managable steps:
  • There must be several different clouds
  • They must be obscured by the mountain and all other objects
  • They must start in randomised locations
  • They must slowly scroll to the left & reappear at the right of the screen
Ok, so now we can tackle these steps one at a time.

1) There must be several different clouds: Using the editor we add five new objects to the MountainTop room. So we can identify them within the editor, lets give them IDs cloud to cloud5. We don't need to give them a name as we don't want the user to be able to interact with them in any way. For each cloud we need to create a single AnimFrame. For consistency, lets tag them all as show, and set each cloud's current frame to the show frame.

Photobucket

2) They must be obscured by the mountain and all other objects: In order for the clouds to pass behind the mountain, we create a new object called mountainCover which has an animframe of the mountain itself. We then set the y position and hotspot of mountainCover so that it perfectly overlays the actual room background image. Because of the hotspot, this object will not obscure any other objects (our player character, for instance) but will obscure the clouds, as we'll ensure these always have a lower Y position.

3) They must start in randomised locations: Every time we enter the room, we should set the positions of the five clouds to random locations. We then set each cloud to run its own move script.

Photobucket

4) They must slowly scroll to left: Each cloud's move script checks whether the cloud has scrolled offscreen (i.e. the xPosition is more than 200 pixels beyond the left side of the display). If so, the cloud is repositioned at a random position to the right of the screen so it can scroll back on. At each iteration, the scripts pauses, moves the cloud one pixel left, and then repeats the whole process.

Photobucket

Now if we repeat this for cloud2 to cloud5, we get the following:



Excluding the artwork, the above takes only a few minutes to achieve but really helps to add an organic feel to the location, without a single line of code being written.

There is an obvious improvement in that I could implement script paramaterisation and use the one script for all five clouds, passing each cloud object as a paramater. I'm not sure yet whether I'm going to want to implement this, as you can pretty much achieve the same affect using Global Variables.

Tuesday 7 April 2009

Update Clickety DBP

Time's been short recently, but here's the most recent changes:
  • REMOVED: zPos - object occlusion now works purely by Yposition & hotspots.
  • FIXED: WalkBoxMatrix not always generating correctly.
  • FIXED: Characters getting stuck when three walkboxes interesect.
  • ADDED: Reporting Tools now use progress bar (can be cancelled).
  • ADDED: Character WalkSpeed customisable and affected by walkBoxscale.
  • ADDED: Visible (True/False) character/object option (removed 'Invisible' option from inRoom).
  • ADDED: "Make Player" button on Character Edit panel & scripting.
  • ADDED: Changeable Walking Speed (handy for mapviews etc.)
I cocked up with ClickOnce insofar that I hadn't realised that, whilst the XAGE Editor installation works fine, the bootstrapper (setup.exe) was being blocked by my hosting, and they are unable to change this for the time being. This means that everyone who already had the XNA 3.0 redistributable installed already had no problems, and anyone without it ran into bother.

As a workaround, any future alpha requests will get a zipped up version of the ClickOnce package to ensure that the requirements are definitely met. I'm debating whether to switch off the auto-update feature too, as various changes for v0.4 break the scripting for previous versions (at one point fatally so, as enumerations break the xml serialisation, so I reverted back to the previous system). This isn't so much of a problem at the moment, but will be in the future if people are regularly having to regression test their games to make sure new features don't make them fall over. I'll have to have a think about it.

Finally, anyone hoping to release their XAGE game to the Xbox360 might want to register for the Dream Build Play competition, which entitles you to a free 12 month creators club membership. This means you'll be able to deploy & test your game on the console itself to your heart's content, though you'll still have to cough up for a paid membership when it comes to XBLCG peer review.

Sunday 5 April 2009

The 8 Minute Trial Test

It seems that there's a mixed reaction over the revenue generated by the indie developers on Xbox Live Community Games. Generally the bedroom coders are happy about making a few thousand dollars from their hobby, whereas the teams behind the larger projects seem more disappointed with the returns so far. There are a number of reasons offered - lack of marketing, lack of visibility, lack of quality, lack of achievements & leaderboards. All seem pretty valid.

There has been some discussion on the XNA forums about the impact of the 8 minute trial on actual game sales. Some of the problems facing small puzzle games aren't really applicable to the point and click genre, but that has its own set of issues.

As I'm in the process of fleshing out plot ideas for my own game, it seemed like a good time to get some pointers over what works and what doesn't. To help in this, I've downloaded five games built with AGS and treated them as if they were targeting XBLCG.

Colour Key: Green = pre v1.0 functionality, Orange = post v1.0, Red = unlikely to be implemented.

Disclaimer: The following are not reviews, just an analysis of their introduction and suitability for Xbox Live & XAGE. Granted, it's a slightly unfair critique as none of these games were designed with a time limit in mind. A few I've played before, the rest are new to me. XAGE capability of each title excludes GUI Customisation and Conversations.

1) Murder In a Wheel

Photobucket

The Good: Interesting Day of the Tentacle-esque art style. The murder occurs within the first 8 minutes. The player gets a few minutes of playing the game.
The Bad: Characters slide as they walk (more a matter of personal preference).
Not yet possible in XAGE: Nothing I'm aware of.

2) A Second Face - The Eye of Geltz is watching Us

Photobucket

The Good: Higher resolution than most Adventure Games. Very good use of audio.
The Bad: Slow pace of the intro is a bit of a killer. Art direction a bit wonky. Pronunciation of "Realm". Suitability.
Not yet possible in XAGE: Talking heads, Text Parser.

3) A Tale of Two Kingdoms

Photobucket

The Good: Comes across very much as a labour of love. Interesting zoom technique in the preamble.
The Bad: There is a LOT of dialogue, with barely a few seconds of play in the first 8 minutes unless you skip a lot of scenes. This is likely to appeal to a certain type of player and alienate the rest. Possible size limit issues.
Not yet possible in XAGE: Talking heads, Autonomy.

4) Annie Android

Photobucket

The Good: Low colour palette makes for a very striking, NES-esque, retro art style. A bit kitsch. Nice, simple GUI & polished animations.
The Bad: Length.
Not yet possible in XAGE: Nothing I'm aware of.

5) Blackwell Legacy

Photobucket

The Good: The art style and general presentation is strong. The story is intriguing. The player gets an early chance to see the game's play mechanic (Rosangela's apartment).
The Bad: The central plot revelation is not exposed within the first 8 minutes (unless the player skips through much of the dialogue).
Not yet possible in XAGE: Character transparency, Speech, Talking Heads

Conclusion: It's important for the player to get a clear idea of the plot, characters and game mechanic within the first few minutes, which isn't as easy as it sounds. The player needs to get sucked into the gameworld sufficiently to part with a few hundred microsoft points. Also a trial detection needs to be scripted into the game itself, to prevent users from repeatedly skipping cutscenes on multiple playthrough. Loading & Saving must be disabled.

Sunday 29 March 2009

XAGE: Coming to Mac/Linux/Smartphone?

A couple of posts ago I was drawing together a few ideas for future XAGE directions, one being a port to Silverlight. This turns out not to be necessary as I've discovered a technically impressive little library called SilverSprite which allows you to play XNA games in your browser via Silverlight (essentially Microsoft's version of Flash). It only took about half a day or so for me to get the MI sample game up and running in Internet Explorer:



There are a few things missing, and you might notice that Guybrush walks backwards (sprite flipping is not yet supported), but the library can only mature. Performance isn't stellar but with some optimisations in both XAGE and SilverSprite, I can really see it being comparible to the original formats.

The best part is that Silverlight is not specific to Windows, and there will be no dependancy on the XNA runtimes. This means that there is the possibility that XAGE could offer broad multi-platform support, something I've seen developers of commercial AGS games bemoan. The list of platforms are as follows:

Executable:
  • Windows PC (XP/Vista/7)
  • Xbox 360
Browser-based (via Silverlight/Moonlight)
  • Mac OS X
  • Linux
  • Windows Mobile 6
  • Symbian (Nokia)
Thanks to everyone who's downloaded the latest Alpha so far. I've already fixed a few bugs, specifically with the generation of the WalkBoxMatrix (characters would sometimes get stuck where three boxes intersect). You should find that XAGE Editor will automatically update itself every few weeks or so.

EDIT: I've just read up on Silverlight v3 which is currently in Beta. Apparently there will be options for developers to allow users to store the SL apps offline and be run outside of a browser. This is all very good news - essentially as good as native support for these platforms but with minimal effort. It will be interesting to see how this all pans out and how well XAGE can exploit these features.

Friday 27 March 2009

XAGE Private Alpha v0.3 - Download

Being a terrible insomniac is not good for your health, but at least you get more things done - XAGE Version 0.3 is ready for download. I can't be bothered listing all the changes as there's far too many and the major ones have been covered here already. I'm a lot happier with how the XAGE Editor looks and feels and, as this blog has been a little dry recently, here's something to give you an indication of the new layout and features:



Photobucket
Photobucket

The actions now have an actual textual description which makes deciphering scripts pretty painless. A simple but useful change:

Photobucket

As usual, if you'd like to have a play around with it, email clarvalon@live.co.uk and I'll give you the download link. This is the last time you'll have to do this as the XAGE Editor now automatically updates.

Wednesday 25 March 2009

Misc. Gumf

Last update before release:
  • Added Copy/Import/Export mechanism - no more hacking through xml to copy items from room to room, or game to game.
  • Added integrated bug reporting, feedback and optional exception logging (all via Web Services) - hopefully this will only improve the quantity of feedback.
  • Added Font preview in FontManager - required quite a bit of work to import the XNA model into the Editor, but it works fine.
  • Tidied up field positions.
Finally I've implemented Asset Protection. What's this? Well, the Editor now has a Publish button which lets you select an empty folder to publish a completed game to. This isn't just a simple copy however - all of the game content is encrypted using a randomly generated key. This enables you to distribute your XAGE game without worrying about others cannibalising your textures, music and game code. Nothing's hackproof of course, but it does provide a certain degree of security.

Implementing this has taken quite a bit of work, and comes with one small sacrifice: Mp3 support. The reason for this is that I had originally been using the Windows Media Player library for PC audio playing but this component would only play the audio from a file rather than a stream, which is required for the encryption. The only way I could get around this was to save the the decrypted audio to a temporary file in order to play it, which of course defeats the whole purpose of the encryption.

Eventually I decided to rip the Media Player component out altogether and have now replaced it with SDL.net's audio, which supports loading audio via streams and therefore encryption. XAGE now supports the .ogg format for PC songs and, whilst it no longer directly supports mp3, it's easy enough to convert audio formats manually, plus there is the added bonus of future support for Midi and Mod files. Swings and roundabouts.

XBLCG Sales:

Whilst no concrete sales figures have been released, it appears that there's a reasonable amount of money to be made from the Xbox Live Community Games channel. At GDC Microsoft have announced that 'Several Community Games top sellers will be taking home more income from four months of sales than the average U.S. citizen earns in a full year'. Granted that's for the more popular games, but its not bad going - about $50k in 4 months?

The Blackwell Legacy:

For someone who would normally be described as a gamer, I don't get to play a lot of games. Almost all my free time is spent working on XAGE. In the last six months I've rattled through a couple of hours of Left 4 Dead and Mirror's Edge, and that's about it.

Last night, after reading Uhfgood's review. I finally got around to trying The Blackwell Legacy demo. It's a nice looking game, polished and well put together. From what I saw there's nothing in it that XAGE wouldn't be able to recreate - there'd need to be a few UI additions and implementing speech is an interesting challenge, but ultimately there's nothing that I'm yet aware of that would stop a title of Blackwell's quality being released on xbox live using XAGE.