Sunday 31 August 2008

Designing a Magic System - Part Eight (Fireballs and Magic Missiles)

(You'll probably want to read parts one, two, three, four, five, six and seven before starting this).

If elemental damage is a problematic cliche for how to deliver damage in a magic system, then it is a couple of other problematic cliches, magic missile and fireball, that point to a smarter way of implementing differing damage types. Magic missile is a Dungeons & Dragons trope: a low level spell which creates an uninterceptable sorcerous arrow of energy that seeks out a target in line of sight and hits it - with only very limited ways of the target preventing the attack. They may as well have called it 'Directly Deduct Hitpoints' - and it appears in the latest 4th edition, the designers have succumbed to allowing mages to do this directly for free on a round by round basis.

Similarly Fireball is problematic because its naive implementation: filling a 30' radius volume with flame for any point within line of sight - creates all sorts of issues when interacting with that other cliche, the 10' x 10' corridor, as the volume expands to fill roughly 110 of those corridor grids with fire. The result is a convenient exfoliation of the average size dungeon level (woe betide the designer who has built their dungeon with more realistic size corridors).

Angband's implementation of these is just as problematic, but for different reasons. The Angband magic missile is classed as a bolt spell, which means it hits the first monster when projected from the caster, with the projection moving either cardinally or diagonally through grids to best trace a path from the caster to the intended target. While this avoids the automatically hit anything issue of the Dungeons & Dragons MM, Angband has replaced this with a ridiculous damage to mana ratio, which is not matched by any other spell, along with the fact that magic missile damage is pure and therefore not susceptible to the same problems as elemental magic. As a consequence, magic missile is a reliable workhorse, up to and including the process of killing Morgoth through a magnified death by a thousand cuts. With the spell macroed to the tab key, it is often a process of merely tabbing through encountered monsters without much thought involved, and blinking away should one make melee distance - leading to Angband's not infrequent death by boredom.

I have no issues with keeping a spell useful throughout its life, but I do have problems with the first spell a mage learns being used to kill the end game boss. Although the irony is palpable, this does limit the effectiveness of the mechanic of learning other spells.

Fireball on the other hand is problematic because it remains effectively a line of sight spell, and therefore becomes a game of pick the target I want to inflict the most damage on on a round by round basis. There is the issue that fireball can destroy items on the ground, but this is often an advantage in the hunt for the artifact subgame, as artifacts will remain undamaged while other less useful items burn. Angband doesn't allow fireball volume to be displaced like it does in D&D, so fireball only affects targets within 30' radius - but the one target it doesn't affect at all would at least make the spell more interesting if it did. That's right: in Angband, the caster is immune - rendering it consequence free to use at any range.

At least fireball uses elemental damage, which makes it a less than automatic choice. (Priests get a pure damage ball spell with the same lack of disadvantages that becomes the magic missile workhorse of the priest world - however it is hampered by a much less effective damage to mana ratio.) But as is often the case with computer programmers doubling up as game designers, the temptation to re-use an existing algorithm is too great, so the until recently, almost all other mage spells were an elemental ball of another flavour, which leads to the problems with elemental magic that I highlighted in part seven. (To reiterate: being able to cycle through the same spell in different elemental flavours makes elemental magic less interesting).

So how can these spells be improved in Angband. What would make magic missile a less than automatic choice for starting the game? How can fire/acid/cold/lightning/orangejuice ball be made more interesting? Luckily, I'm able to point to variants: in particular Sangband and Oangband, where the designers have taken a long hard look at the Angband spell systems and redesigned them.

Firstly, magic missile would not be an automatic choice, if there were other viable starting choices and a less overwhelming damage to mana ratio. At a cost of one mana, it is too hard to design other attack spells: by doubling the cost to two, and boosting the starting mage's mana to compensate, the game designer gets more flexibility to create spells that have a cost of three, four or five mana. As for the viability of other starting choices, adding spells that inflict elemental damage, which has the drawback of not damaging every creature that the mage encounters, at the benefit of causing more damage than magic missile, would give the starting mage a different range of options, with clearly defined benefits and drawbacks.

But by adding flame missile, ice missile and so on, we just end up in the same problematic elemental position as fireball: it becomes simple for the low level mage to pick the right flavour once they know the particular elemental vulnerability for a creature. In fact, the problem is worse, because we've just boosted the overall damage output in order to make these spells attractive compared to magic missile. We need to increase the risk of using these spells at the same time as we provide increased damage: ideally we would like to increase the cost of switching from one elemental type to another.

Sangband has one mechanic that does this, which is a weather system for Druidic magic. Within the weather system, there are three different sliders (still air to windy, hot to cold, wet to dry), which vary randomly and can be controlled by a number of weather spells. Each slider increases the effectiveness of one elemental attack while reducing another: in hot weather, fire becomes more effective while cold is not. This makes a druid have to decide whether or not the weather is right to fight a particular monster, and a combination of monsters and weather factors make make a particular scenario especially difficult: there is no ideal time to use cold and fire attacks together. (It would be even more interesting to make the spells themselves affect the weather - so repeatedly using fire would heat the room up, making it harder to fight monsters with cold at the same time).

But the weather is an independent variable which is not necessarily intuitive (can you guess what weather condition boosts acid spells, for instance?). And there is a much more direct and easily understood parameter that we have not considered for damage spells so far. The spell's shape. I've discussed two spells with very different shapes: magic missiles - used against one target, a project which hits the first monster in a direction; and fireballs - affects all targets in a set radius, point and shoot.

And that's the second, obvious recommendation: fireball needs a clearly understood drawback. Which is why in Unangband, I implemented friendly fire - or more specifically self-harming fire. I've hinted earlier that is what it may need: I'll stress it here. If you use a fireball, or for that matter any area of effect spell, too close, you should get damaged as well. The convention comes from grenades in first person shooters, which are the most easily understood, but it is one that can readily be applied to magic attacks. And it is the clearest way to encourage fireball to only be used at a distance - not up close.

I'll suggest an exception, which is spells with a radius which is always centred on yourself. And you may immediately intuit that there's another shape available: combine magic missile and fireball to have radius affecting spells, which apply to the first target they hit. Call them minor fireballs, which is the convention I adopted in Unangband.

And I'm sure you can come up with a library of other shapes. That's what we'll be looking at in part nine: how to design different spell shapes, what is interesting, what is effective, and how to balance different shapes against each other.

And that is part of the secret of designing a magic system: not only must you vary the element the spell attacks with, you must vary the shape. That way, to swap from cold to fire to lightning, you must also swap from any range to far away to close up. And the strength of roguelikes is that this positional system is a fundamental part of the game, something more complex than the Final Fantasies and Bard's Tales of the world - even, when you include tunnelling and other terrain deformation, more complex that Baldur's Gate and Planescape: Torment, the great RPGs of yore, and the major brand FPSes of today.

More to come in part nine. And I'll be confessing the other secret, to my shame, of designing a great magic system in parts ten and eleven.

Thursday 28 August 2008

Results for 'What would help you contribute to the Procedural Generation wiki'; new poll

Thanks to the 27 of you who voted, and those of you contributing to the wiki. The results were enlightening:

Media wiki syntax
1 (3%)
More examples
9 (33%)
More content
8 (29%)
Allow anonymous page creation
2 (7%)
More publicity
0 (0%)
More community
5 (18%)
Less advertising
1 (3%)
Less overlap with wikipedia
4 (14%)
Not interested
8 (29%)
Don't have the time
10 (37%)
Other
2 (7%)

Next poll is one I run on a semi-regular basis to get a feeling for whether I'm on the money or slowing losing my readership...

What articles have you enjoyed or found useful on Ascii Dreams? I've also included work from the column 'The Amateur' I occasionally contribute to GameSetWatch.

More Spore prototypes

Maxis continues to release Spore prototypes with very little fanfare at the rate of about two per week. The latest is WaterBoy - a dynamic fluid simulator on uneven terrain, and GonzagoGL - a more advanced and game-like prototype of the creature phase of the game than the earlier SPUG prototype delivered.

I've added these to the PCG Wiki but haven't had time to review any of them. Volunteers?

Tuesday 26 August 2008

Brainworks: Sitting on the Fence

By far and away the best game AI blog I read on a regular basis is Brainworks, by Ted Vessenes. BrainWorks is also a Quake 3 mod that Ted worked on for developing a realistic AI - that is an AI that plays like a real person would. This is in itself a complex problem - the vast majority of bots in games haven't had the development time and thought put in to get to this level of simulation. Whereas Brainworks bots look realistic even when you see their game play from their point of view.

There is something special about reading a blog by someone who has got inside a particular problem domain and really worked through the decisions and compromises required to get the problem solved. I hope with the Unangband game design articles that I'm doing a little bit of the same for you.

Friday 22 August 2008

Designing a Magic System - Part Seven (Elements)

(You'll probably want to read parts one, two, three, four, five and six before starting this).

Elements are an RPG design trope: but appear initially to be a useful one. There are well designed games which have a huge, nay, exhaustive list of different element types: fire, cold, metal, grass, wood amidst the 17 different types that the Pokemon series has featured over the years. Angband has ‘about’ 15 different elements, from the obvious, to mysterious – Nether, Nexus and Chaos being the amongst the more esoteric element types.

The elemental system comes from the pre-Socratic theory by way of Plato which divides the world up into four different characteristics: fire, water, earth and air, which has inspired countless theorizing by later philosophers and alchemists, who have derived the medieval system of humours (with its temperaments of Sanguine, Choleric, Melancholic and Phlegmatic), the aether through which all planets moved, and the Iron Crown Enterprises' Rolemaster RPG supplements filled with pages of spell tables and colourful criticals. The flaw with the elemental system is that it has never had any basis in fact: it was the earlier Indian philosophers and Greeks such as Democritus who was much closer to the modern understanding of matter with the concept of indivisible atoms making up the natural world.

The elements that feature in computer RPGs are derived in part from Dungeons and Dragons and the Rolemaster system, in part from Michael Moorcock’s conception of Law and Chaos in the Eternal Champion saga, in a kind of Chinese menu cocktail of different inspirations and derivations. Elements are used to divide damage up into different types: they may have related status effects, such as freezing, poisoning or burning, and unique to roguelikes, they may damage or destroy different classes of equipment that the character is carrying or wearing. This last function is a lesson in necessity: roguelike players learn quickly never to rely on a single line of defense which may be exhausted, stolen or destroyed.

It is the interaction of elements and damage that proves the most interesting – at least with initial inspection. Different elements of the same ‘damage level’ are in most RPGs less or more effective against different creature types. This is because hand in hand with elements is the concept of damage resistance – that is, certain creatures are harmed less or not harmed at all by certain attack types. Again, there are numerous RPG tropes in this area: skeletons are notoriously hard to damage with edged weapons in many games, ghosts resistant to physical damage of all kinds, vampires hard to kill except with fire or water.

What ends up forming is a matrix of element against resistance: either directly – in that each element is given an explicit resistance value which reduces the over all damage; or indirectly, in that certain elemental attacks are more effective against creatures of other elemental classes: fire more effective against wood or paper and so on.

Resistance is not the only factor that can be brought into play: creatures can also be vulnerable to particular elements, taking more damage explicitly, or healed by them instead of being damaged by them. With regards to healing, it is assumed that once a player learns of this fact, they will no longer use the attack against the creature so healed. With regards to vulnerability: this is exactly equivalent to the creature affected having less overall hit points, but implicit resistance to every attack except the one that they are vulnerable to.

Having both resistances and vulnerabilities makes it harder to balance creatures overall. As soon as a player discovers a vulnerability, they’ll attempt to exploit it – making the overall creature power reduced by the amount the vulnerability increases the damage that creature sustains. In order to make the job of balancing easier, eliminate vulnerabilities from the game – or at least balance creatures as if the player was always attacking them at their most vulnerable point. Otherwise, a creature with a vulnerability is only a puzzle to be solved one time – any further instance of that creature will be summarily dealt with (at least in isolation).

It is this puzzle solving component of discovering resistances (and implicit vulnerabilities) that should be the focus of elemental damage design. The number of elements that the game has is at the heart another user interface problem: similar to the status effects described earlier. The player needs to be able to establish and track whether a creature is being damaged by a particular element that they are employing in order to determine whether to continue the attack type or switch to an alternate attack. At the same time, the player also needs to be able to remember which attacks they have already employed, and whether the creature was resistant to those previously tested. The challenge is to expose this information effectively in the user interface. Again, this will depend significantly on whether combat is turn based or real time – as the player in a turn based game will have significantly more opportunity to examine the interface to make an optimal decision.

The simplest elemental damage system is two damage types with binary resistance levels: either the attack is completely resisted or completely effective. As Ikaruga demonstrates this can be effectively portrayed in time intensive fashion – the game features light and dark attacks and the player ship has two modes which either ignores or destroyed by the attack depending on which mode it is in. Making the attacks more complex trades off the player cost of recognising the attack against their attention span and the overhead of memory recall. At the other extreme, Final Fantasy allows the action to be paused, and a table of elemental resistances for a particular monster type to be displayed which feature a percentile based resistance system. This removes the player from the action completely and requires rote learning or continuous look ups of the table depending on how frequently the creature type is encountered.

Angband falls somewhere in between, in that it features a large number of elements, but creatures which either do or don’t have a particular resistance type. In reality, elements are divided into common and less common types: the five most common are also resisted across large numbers of creature types. Unangband makes the resistance system less predictable for any creature type, but trades this against ensuring that only a limited number of creature types are encountered on any level. For instance, in Angband, no undead resist fire – in Unangband, a limited number do: just enough to keep the player on their toes. Similarly, the rarer element types are only infrequently resisted.

The behaviour using more complex resistance systems is that of the player failing to recognise a resistance, and as a result, using a sub-optimal attack or wasting a valued resource against a particular creature type. This effectively makes the creature more dangerous a threat than otherwise anticipated by both the player and designer. In Angband and variants, this is guaranteed to an extent by requiring that the player learn the elemental resistance by attempting an attack against the creature type: this is then retained in the monster memory for later recall through a text based interface.

At the worst, the player will ignore the feedback telling them that they are not using an optimal attack for multiple turns – effectively multiplying the creature threat by the inverse of the amount they resist the damage by. This implies that the more a creature resists an attack, the greater the feedback they should receive that their attack isn’t working. Leon Marrick in Sangband adopted a feedback system for some resistances where a certain percentage of attacks fail, with a warning, instead of a certain percentage of damge being resisted with each attack. This makes the feedback directly proportional to the individual attack success, while encouraging the player to ‘gamble’ on getting a lucky full strength strike.

The more usual behaviour though will be for the player to cycle through a set number of attacks, trying each in turn until the correct element is found – or for them to guess or find through user interface feedback or a spoiler which the correct element is first time. And if the element damages are equally available and equivalent: that is a fire bolt has a same effect as a water bolt, as a lightning bolt – then there is no benefit in having an elemental damage system at all. And if they are not equivalent: that is fire is always stronger than water, then monsters which resist fire are simply scaled up in effectiveness.

That is the weakness of an elemental damage system in itself: the choices while initially appearing interesting, often devolve to an only one right answer. Elemental damage when poorly designed ends up becoming a game of looking up tables and exploiting status effects. It is possible to manipulate the availability of different elements to make this more interesting, but this is a difficult balance to get right. In designing a magic system, it is necessary to look beyond elemental damage to games which don’t rely on this technique: it appears that Team Fortress 2 is the shape of things to come.

More to come in part eight.

Thursday 21 August 2008

The Democratisation of Game Design

No sooner did I finish my last blog snippet on the democratisation of level design, then Brenda Brathwaite, game designer par excellence posted a well considered entry on whether procedural game art was the end of the video game artist.

As she concludes, of course it isn't. Neither is procedural generation the death of the level designer, as I initially suggested. Procedural generation in both these areas will initially be techniques that supplement the skills of existing artists and level designers. But reacting to procedural generation as an explicit threat, one which I will admit to deliberately goading by choosing a provocative title for my essay on the subject, is as misinformed as the British textile artisans who smashed the first mechanical looms back in 1811.

In the long term, the skills of level design or texture artist are as important as those of the monks who hand lettered the medieval texts that predate the printing press. You'll probably be luckier in that you'll survive long enough to resemble the shambling corpse that is the comic industry as opposed to fading into complete irrelevance. Unfortunately, progress will roll gently by like an driver less steam roller and leave you in its tracks.

It isn't until the game design tools are liberated into the hands of the masses will we truly be in the era of gaming (With apologies to Marx). There will be a place for Sony, Nintendo and Microsoft in this new world, just as there is a place for the major print publishers, but gaming needs to be as popular and accessible as newspapers, magazines, blogs - not as hard to publish as novels or make as movies.

At least, that is my first instinct. I'm sure to move from this bilious invecture to a much more nuanced and well considered opinion on how both sides of the argument can live in peace. But for the moment, you'll have to put up with my crazy eyed ranting on the subject, with jagged hands raised to the heavens.

The Death: Redux

When I titled my article on procedural content generation 'Death of the Level Designer', this is what I was thinking about.

The ability to paint a level is going to democratise the level design process. If you weren't excited about Far Cry 2 before, I hope the LittleBigPlanet of first person shooters provokes a little more interest.

Wednesday 20 August 2008

Bio(rrow)me

Continuing on the Spore prototypes theme, I'd love to have a Javascript version of Biome available for use on the PCG Wiki. It'd be great being able to demonstrate things like fire propagation live on the wiki, using 2d cellular automata to visually show various algorithms. Looking at Biome, it is flexible enough to handle a variety of automata using notation from chemical stoichiometry in a 196 kb executable.


An example of this notation from the ForestFire.txt example supplied with the executable:

;Fire

WIDTH = 150
HEIGHT = 150
PAUSE = 0

%%

INIT = {0,0,64}
FIRE1 = {96,32,0}
FIRE2 = {128,48,0}
FIRE3 = {192,64,0}
FIRE4 = {255,96,0}

YOUNG= {0,128,0}
OLD= {0,100,0}
ASH= {48,48,48}

%%

DISCRETE FOREST

%%

;Fire spreads
FOREST:OLD + 1FIRE2+ -> FIRE1*0.1
FOREST:OLD + 1FIRE3+ -> FIRE2*0.1
FOREST:OLD + 1FIRE4+ -> FIRE3*0.1

FOREST:YOUNG + 1FIRE2+ -> FIRE1*0.01
FOREST:YOUNG + 1FIRE3+ -> FIRE2*0.01
FOREST:YOUNG + 1FIRE4+ -> FIRE3*0.01

;Fire rages
FOREST:FIRE1 -> FIRE2*0.1
FOREST:FIRE2 -> FIRE3*0.1
FOREST:FIRE3 -> FIRE4*0.1

;Fire dies
FOREST:FIRE4 -> ASH*0.1

;Initial random forest
FOREST:INIT -> OLD*0.1
FOREST:INIT -> YOUNG*0.1
FOREST:INIT -> ASH*0.1

;Age
FOREST:YOUNG -> OLD *0.01


;Renew
FOREST:ASH -> YOUNG * 0.001

;spark forest fire
FOREST:OLD + 5OLD+ -> FIRE1 *0.00001
(I would get a screenshot, but none of the Spore prototypes run on the laptop I'm currently using. Given that this is my gaming laptop, I'm a little worried for the final release).

I'm working on a Javascript based cellular automaton tool at the moment, which doesn't quite have the flexibility of this framework. It is inspired by the Five Cellular Automata algorithms, although in the very early days of the implementation. You can have a play with the script here. At the moment it just generates a random 30x30 grid, each location of which has 50% chance of containing a cell, then plays the Game of Life.

You'll see the animation stutter frequently: I presume for garbage collection. I'm not sure the cleanest approach for animation in JavaScript. The recommended approach is to use setTimeout or setInterval which creates a callback into the JavaScript code. But this seems to requires that I make the referenced object global as I don't seem to be able to pass it through the callback. Suggestions are welcome.

Tuesday 19 August 2008

Spore in Space

I've been playing with some of the Spore prototypes available from the website, and I'm enjoying and intrigued by them. From a game design perspective, it's great having early prototypes available, as you can see some of the thinking that has gone into the game, and the ribs of the final design are very visible. I'm surprised that more people haven't reviewed these, simply to see what the final game may be like but there is a difficulty curve associated with the lack of documentation, and the risks of an untested build. As highlighted when you download them:

Usually these prototypes are never seen by the public, but we thought some of the more intrepid players out there might enjoy playing around with a few of our early Spore prototypes. Keep in mind these are not tested, supported or even easily explained.
I started with Space, on the basis of a semi-review by Stromko on this thread. I have to agree with him, in that the Space prototype is the most enjoyable initially because it is the most game-like. You start off zooming around your solar system, terraforming the other worlds and boot strapping your colonies using plants and animals from your homeworld. Once you've collected enough revenue to build a star drive, you can go conquer the galaxy, using much the same methodology, encountering other alien races along the way and harvesting their species.

What is lacking in the prototype is any real feeling of agency - that is, whether your choices create any kind of difference. As soon as you figure out that altitude is the only real measure of whether a species propagates or not, and that using atmosphere generators seems without drawback, it is just a matter of flattening out the planet to a smooth ball at the right height and dumping a single ecology worth of species on the surface. You soon get access to volcanoes, comets and other terraforming tools, but since the species you carry in the cargo holds propagate without limit, there is very little incentive to use these extra tools. In fact, after you purchase the star drive, you'll see your own species colonising nearby solar systems independently of you.

It is hard to judge a game from a work in progress, but I hope they've increased the level of player involvement because at the moment it feels like a sand box that builds its own mountains and tunnels. The Spore prototypes I've tried are dangerously close to being zero-player games. And where is the fun in that?

Sunday 17 August 2008

A Technology Bird's Nest

The smudged schizophrenic bird's nest of a graph to the left (click here to download a hi res copy) is the Graphviz output of a technology tree that I've been building. I'm in the early stages of designing a Civilization like game that incorporates a whole lot of my thinking around invention and progress, and I'm doing so in the same data-driven design methodology that I've used so successfully in Unangband, which is to come up with a whole lot of examples, play around with the data until it fits together and then develop the game play from the data.

This technology tree has been an incredibly useful exercise, even in its infant and incomplete stages. I've tried to make it invention focused - that is to take specific examples of how an invention came into being, without worrying so much on the social and economic framework required to take the invention and propagate it through society: that'll be the player's problem.

It turns out that technology is a relatively shallow phenomenon - it only takes a few steps to get from the start of human civilisation, to quite advanced technologies. For instance, as soon as you have a stove and rubber, you can invent Vulcanised rubber, and tires only requires the addition of a wheel (and maybe spokes). The discovery of electricity only requires a kite, metereology and penchant for experimentation. Gunpowder happens very early on: in fact I'm forced to deliberately delay the gunpowder invention by inserting fireworks and pyrotechnics technologies, but as the Chinese showed, you need an effective metal-casting technology, and the expansive aggressiveness to weaponise it. The Maori invented trench warfare with only fortifications and muskets, and if you think subterranean cities occur too early, realise that the Christians were building these in Turkey in the 13th century due to religious persecution and favourable local geology, with little more than determination and sharp digging tools.

That technology is shallow allows me to encourage out of order acquisition of technology that I previously wanted in a game, without flying in the face of the historical accuracy that Chris Bateman from Only a Game suggests many players want to emulate. It also shows me that I'm going to have to design a much better user interface to display up-and-coming potential technologies than the technology tree most games use: because of the wide and promiscuous linkages between inventions leads to the messy tree that I've shown you. I suspect this will be a case of displayed a limited number of technologies at the next age based on what you have currently invented, where the age is defined by the minimum number of nodes to get from nothing. So First Age technologies are hunter, gatherer, cave dweller etc, second age technologies are charcoal, sled, skinning and so on.

And thanks to Wikipedia, I've already learned that certain technology tree tropes are in fact historically inaccurate. Bronze is superior in every way to iron - the reason the iron age follows the bronze is because the Philistines unlocked the secret of recovery the metal from hematite ore and made it far more readily available: it should in fact be called the Metallurgical Age.

Saturday 16 August 2008

PCG Wiki To Do List

With the exception of this first paragraph, this post is a verbatim copy of the current to do list from the PCG Wiki. For those of you who are interested in helping out with the wiki, you'll also be interested in reading the examples page, which was the number one requested poll item. At the moment, of course, it's more of a how to page, but any feedback on how to improve this would be much appreciated.

Ongoing actions and maintenance

There is always an need to update the news items with anything procedurally related. Try to keep each news item to a brief sentence, starting with a single word linking to the external link that describes it, such as Interview with x or Preview of y. Replace x and y with the relevant link within the pcgwiki. Then, once there are more than about 10 items on the page, archive off the older news items to the more news page, which is intended as a reverse chronological list of all news items that have ever appeared on the wiki.

Any upcoming events should be added to the calendar, and have a separate event page created. To create an event page, Add a new page starting with event: and use the event template to describe the event. Any other important recurring dates, such as the release date for a historically significant PCG game, should have a day page created, starting with day: followed by the month space numeric date, such as 'day: august 8'. This will make the day appear in the Anniversary list at the bottom of the events page. To get access to the Google calendar, email andrewdoull@gmail.com.

The pcgwiki has yet to have a problem with spam, but feel free to check the recent changes and see if all the edits are valid.

To do list

The biggest to do list for the pcgwiki is to add and expand existing entries, particularly the games, software and code pages, particularly by adding code examples to the code pages for other people to follow. If you are not an adept coder, you could simply update an existing game entry to include additional information from wikipedia. Follow the examples to understand how to set up and edit the info boxes.

To discuss any items in the to do list below,

The following items are low-hanging fruit:

  • Add the remaining games from the TIG Source Procedural Content Generation Competition. You'll want to go through the list of all 60 games including downloads.
  • Expand on existing game entries by including more information in the info box and description fields. Have a look at the linked wikipedia entry for ideas.
  • Expand on existing code entries by including more information in the info box and providing code examples. Have a look at the linked wikipedia entry for ideas.
  • Expand on existing software by including more information in the info box. In particular, since many of these can be downloaded and played with, writing a review would be ideal.
  • Start creating person entries.

The following items require more work and understanding of the wiki design:

  • Many of the top menu entries are place holders pending a feature request allowing the module backlinks page to only list some backlinks.
  • Investigate the use of categories instead of backlinks to automatically populate pages.
  • Consider splitting the article and links pages up.

You'll also want to have a look at the bugs and quirks page for more issues.

Thursday 14 August 2008

Disappointed in the KGB

The first Team Fortress 2 Heavy weapon has been released: The Killing Gloves of Boxing. It makes attempting to melee as a heavy 'useful', but I'm disappointed that they are not choosing to re-use existing sandwich assets.

But wait. What's this 'Don't Touch Sandvich' amidst the Russian themed achievements? I'm intrigued...

[Edit: It looks like the sandwich is going in to replace the shotgun. And further speculation here.]

[Edit 2: No one has speculated on something I suspect will be the case with the heavy update, which is that they'll give the base heavy minigun an ability that they can then 'take away' from the alternate weapon.

I suspect, based on the above evidence, that this ability will be to destroy stickies - either placed or in flight. This may also be extended to rockets and/or grenades.

This gives the HWG an increased measure of defense against Demos (and maybe soldiers), while still leaving his vulnerability to snipers, spies and pyros with Backburner intact.]

[Edit 3: I reckon it'll be a pistol/sandwich combo. Having a pistol allows the heavy to have a long range weapon, plus gives the ability of the heavy to take out turrets/snipers on their own. The sandwich may be a taunt animation as suggested by some guy called Robin in the comments section here].

Wednesday 13 August 2008

Game Design Sketchbook

There's a great article by Jason Rohrer in the Escapist, called Testing the Limits of Single Player. In it, he explores possible games that have deep game play, setting himself the following limits:

Can you make an AI-free, randomness-free, physical-challenge-free, single-player game with gameplay depth akin to that of Go?
Interestingly enough, his solution i45hg is modelled in part on Conway's Game of Life, which is a no-player game that has the above properties. This suggests at least one way around the problem, which is to design a Turing complete interactive game system and let the player explore that.

I can describe another such game, which involves preventing the player explore any previous path. At least, I can't describe the game, but assume that at each stage, there are enough different choices so that the combination of possible sequential choices grows big very quickly. You could design a game this way, which has victory conditions that can be met in a single game, but the player is restricted from ever repeating those victory conditions again. Provided the ratio of victory conditions to non-winning moves is sufficiently low, you'd end up with a game that could remain infinitely replayable without being random.

International Roguelike Development Conference 2008

I'm proud and a little misty-eyed to see that the denizens of rec.games.roguelike.development have organised the International Roguelike Development Conference 2008, to be held in Berlin this year on the 21st - 22nd of September. Here's the announcement on rgrd, and the full wiki discussion on RogueBasin.

If it had been October, I would have been able to attend - as it is, I'll be looking forward to the live web streaming / YouTube videos with interest.

Sunday 10 August 2008

A few Quest-ions

I'm working through implementing quests in Unangband at the moment. The core of the idea has been hanging around in the code for a while, but there's no time like the present to get them up and running.

I've gone with a data-centric as opposed to a script-centric design for quests. This may initially appear an unusual choice, because quests are implemented using scripts in so many games, but the data centric approach is common for Angband variants, and a natural fit for the way I design systems in Unangband - by building examples of the data I'm trying to model, then build a data structure, and then wrap code around it.

A quest consists of a number of stages which the player must pass through, and an event for each stage - which is a record of in-game actions required to complete the quest stage. An event is a subtle concept because it could be 'killed 7 goblins', but forms a natural accumulator as well, in that this could equally consist of 7 events of 'killed 1 goblin'. There are actually two ways that events accumulate:

a) if the game object is removed as a part of the event, we add 1 to the number of game objects counted in a separate stage which monitors the player actions contributing towards completing the quest. If this equals or exceeds the number of objects whose state we are required to modify, we complete the event for this stage.

b) if the game object is not removed, but instead has a state modified, we count the total number of objects in the game with this state modification. If this equals or exceeds the number of objects whose state we are required to modify, we complete the event for this stage.

This second type of accumulator is intended for quests where we have to 'terrify 7 goblins' instead of 'kill 7 goblins'. I can also combine the two, to allow the player to 'kill or terrify 7 goblins' by subtracting the number of type a accumulated from the number of type b required.

There are a number of problems with this approach. In particular, I have to make sure that if I've terrified a goblin, it never stops being terrified, otherwise the player will have to terrify it again. I could use this to form a natural timer for the quest, by making this a player requirement that they have to have all monsters terrified simultaneously, but it'll probably be easier just to prevent quest monsters from exiting the state required for the quest. Doing it this way ensures that the player knows which quest monsters they've already terrified, because the Afraid state is shown in the monster name and in its in-game behaviour. The alternative is to have a separate 'you've terrified this monster before' flag, which is a much harder UI problem.

But the real problem is I'm starting to recognise a particular code pattern, which I've implemented previously and has caused no end of debugging problems.

The pattern is one where I have to fire off a series of actions after modifying a variable, in every instance where that variable is modified. In this example, it's every time that a monster gets scared - I've got to check whether or not the player terrified it, and whether there's an active quest that needs to be updated as a result.

This is, of course, a classic problem of encapsulation. Instead of directly referring the variable, I should have been using an function to update the variable indirectly, which I can then use to also to check the player quest status. In order to correct this, I'll have to refactor the code to add the function in.

But even if I had anticipated this requirement in advance, I'd still face this refactorisation process. This is because I could not have correctly anticipated what information is important when updating the variable - in this instance, the fact that the player was responsible for what ever action caused the monster to be afraid. I could equally specify circumstances that are completely independent of the player and the monster: such as the fact that the Oracle might have to be at Delphi, in order for the monster terrify action to count as a quest action being completed.

The previous instance where this has caused me no end of problems is the player learning about the effects of equipment that they use, and inferring information from that. This allows for example, the player to get poisoned by a spider, put on an unknown ring, and then not get poisoned by the spider, to determine that the ring supplies poison resistance. The variable I needed to encapsulate in this instance was whether the player resists poison.

In the poisoning example, this is actually a case of premature optimisation causing me problems. In Angband, to avoid the overhead of having to test whether a player resists poison every time, we check whether the player equipment changes, and if so, update the state of 'resisting poison'. I'd still have to check whether the player equipment changes, even without this optimisation because I'd also need to update the state of 'the player knowing about what equipment they are using'.

What I really want is a generic way of specifying variable dependencies: that is, information I also have to update if a specific variable changes. I can't think of any specific programming paradigm that conveys this idea well. It's not a particularly functional or object oriented idea: because in the examples I've given, you'd have to pass the entire global environment into the function or object in order to not have to go through a refactorisation process if you needed additional information.

Does anyone have a good example of a programming language that conveys this concept well?

Saturday 9 August 2008

Prince Charming: A Postscript

This is, of course, a huge Eve Online fan story - not in the sense that it features anything from the Eve universe, but in the infectious sense of fun that Hilmar Peterssun conveyed at the Edinburgh Interactive festival that I attended last year, and the scale and sense of the challenges that running a single shard poses for the game.

The story itself is flawed, as several of the magazine editors I submitted it to pointed out, in that 'what the female character does is sit there and listen to the male character explaining how great he is', but at the same time I immensely enjoyed the process of writing and submitting it for consideration, and the feedback I received. It crystallized as a piece of fiction beamed whole into my brain on the final night of my honeymoon and is dedicated to my wife as the first story written about and for her.

As for why I am publishing it here, instead of continuing the submission rounds, you can blame Warren Ellis. His recent diatribe on why the print science fiction market is failing forced me to consider if I'd ever get the story published, and that it is better in the creative commons, where gamers and science fiction fans alike can enjoy it. As for why I'm doing it for free, it's because I can't get a Pay Pal account up and running at the moment. When I do, feel free to tip as little or as much as you think the story is worth.

You can also blame Charles Stross. If I get another rejection letter pointing out how Strossian this story is, I'll point out that few other authors have been privileged enough to end up as an adjective, and as a relative newcomer on the scene, he should thank the accident of fate that ensures his name is so easily abused. Luckily, this story opens with a scene that passes the Bechdel test, even with its subsequent flaws, so I'm sure he would approve.

Prince Charming

1. Social imperatives

The reason I stand here before you is to announce that my mercenary outfit, the Guiding Hand Social Club, has completed its most ambitious contract to date. [...] Our task was to carry out that which the GHSC has now become known for - to utterly demolish [...] and [to] bring all who followed her to their knees in one fell swoop. For those many months, we toiled, secreting our operatives among her ranks, steering her organization through a number of insidiously engineered events meant to engender trust and divert their attention from where it should have been. Early this morning, our hard work bore fruit. [...] Our net gain from this massive heist is roughly estimated at over 20 billion ISK. [...] Total damages inflicted are estimated at close to 30 billion ISK.

- "Istavaan Shogaatsu", post to Eve Online forums (2005)

It takes an awful lot of effort to create a video game these days, and most games end up being played a few hours at most. A life of 6 months would be considered very long. That's unfortunate considering all the work involved. StarCraft is about 8 years old and still popular. Super Street Fighter 2 Turbo is about 12 years old and still played in tournaments today. Poker in its modern form is about 100 years old. Chess is about 2,500 years old. Go is over 4,200 years old. [...] What properties would a game have if it is to last 100 or 1000 years? What kind of thing could it be and what kind of thing could it not be?

- David Sirlin, The Far Future of Games on sirlin.net (2006)


The first time she met him, he was floating face-up in the pool, watching the water lights reflect against the ceiling of the grotto. He had to work to keep afloat, too lean to lie comfortably backwards, his pale skin shimmering under the water, slight curls of dark hair on his stomach and chest. He was talking to a group of swimmers around him, never looking at their faces, almost as if he had rehearsed what he was saying, one sentence at a time, she thought.

'I'm not a very grounded person. Obviously, as I tend to spend a lot of time inside... my head... and that's not a very safe-place to be, twentyfourseven.' He rolled those three words together as if the domain of numbers was a little closer to him, more accessible than letters.

'So it’s important for me... it’s important for all of you, to spend time outside. Socialising... is important in the flesh as well.'

He paused, for longer than usual. They were in an intimate space, with the bubbling of the pool jets audible while he stayed silent. The listeners deferentially waited for him to continue. When instead it became obvious he had finished, the group, a little uncomfortably, broke into side pockets of conversation in muted tones. She turned to the girl swimming next to her, someone she hadn't recognised from the introductions earlier, and asked a bit too loudly.

'Have you met the host yet? I haven't seen him...'

Several others around her shot glances at them, and the girl turned to her with a haughty look and sneered.

'I'm not with your rent-a-party crowd. I'm one of the real guests. I'm a gamer...'

Immediately, she felt embarrassed. She had assumed that anyone in a bikini with a tan and that much plastic surgery would be a paid for hostess like she was. Not one of the clients, a game-player. Later she would learn to recognise the girl as one of the many gamer groupies - relying as much on their ability to 'negotiate' in real-life as within the rules of the game. They would play with those real world needs and desires that he'd been talking about, using the advantages accrued to get leverage within the in-game mega-corporations. Turning tricks to forge alliances. And to break them.

Not that she turned tricks. She was strictly rent-a-crowd. Turn up. Stand, or swim, around in a bikini. Look good. Hold a conversation. Not embarrass herself in front of the host and potentially her employer. She turned away, before her faux pas grew enough to attract attention, and swam out of the grotto, unaware that he had rolled over from his back and was watching her leave.

'Jasmin.' she heard a voice call out and turned to see it was Ingrid, sitting back relaxing at the side of the main pool with a margarita in-hand. Ingrid was doing the same Masters degree as her, but specialising on in-game economics. Jasmin swam over to her, half-smiling.

'What's up sister?' Ingrid continued.

'Just making a fool of myself. Trying to get fired from this job you got me.' Jasmin explained her mistake.

'That's understandable.' Ingrid smiled back. 'Not everyone here is a sexy economics gun-for-hire.'

They both giggled girlishly.

'How's the thesis going?' Jasmin asked.

'Not well.' Ingrid frowned. 'I mean, I've got all the numbers. And I mean all the numbers. It's not every economy where every single unit of currency is virtually tracked. But I'm drowning in figures. I think I need to take a step back, get a little perspective. I get the feeling I'll have more of a handle on things if I was playing the game more rather than studying it. It's like the rules of the economy are constantly changing as the society inside it evolves. I guess I should have stuck to sociology. How about yourself? Remind me what you're doing again...'

Jasmin was reminded why they didn't hang out more. She explained.

'I'm modelling the cost of subsidy for first generation bio fuels in preventing the adoption of second generation fuels. First generation fuels are created from corn, wheat, sugar cane and have a direct impact on world food prices as we divert food for oil, effectively, which is why we have the economic famines in Africa and South America. Second generation fuels are harder to manufacture, but come from switch grass, wood pulp and other non-food carbohydrates, so when we adopt them it'll be better for the planet and better for us. But the subsidies that everyone is still pushing for first generation are killing thousands of innocent people and making adopting the second generation that much harder. I've developed the model, now all I need to do is plug in the numbers.'

'And what are the numbers?' he said from beside her. She turned. It was the speaker from earlier, their host for the party. He'd swum up without her noticing and was listening.

'It's complicated.'

'I'm all about complicated. Talk me through it.'

He spent the next hour grilling her, going through the model she'd developed, questioning her assumptions, assessing her results and typing in notes into his cell. It was as hard as the defence of her last dissertation, much harder since it was unexpected and they were floating in the warm water at the edge of a pool while people partied around them.

And then, abruptly, it was over. He closed his cell, half-turned to leave and then turned back. He had one more question.

'I never asked you your name.'

She knew what he meant.

'Princess Jasmin. Jasmin, like the flower.'

'I'm Max.' he replied and seemed to drift away for a moment. 'Hang on, why didn't the game filters pick that up. You're not supposed to use titles like ‘Princess’.'

'I used a hard space.'

'Hard space?'

She had one over on him, if only a little one.

'Shift-space. The separator doesn't get picked up in the standard ISO encoding as a word separator. So it parses as one continuous word. Didn't trip the filters.'

'Ah. I'll have to tell the GMs about it. Some time... I'll PM you.'

She wasn't a regular player but she jumped in-game several times over the next few weeks. She never got a message, and figured that he must have forgotten.


2. Developing relationships

By 2012, the in-game population had exceeded the total population of its host nation, Iceland, and total revenue from the subscription services outweighed the export value of all other software services for the small country. Total in-game earnings exceeded that by an estimated hundred-fold and as a tradable currency, what we now simply call credits exceeded the value of many of the currencies affected by the repeated credit crunches of the early 21st century[...] Over the following five years, as the game economy grew to exceed the GDP of pre-occupation Portugal, its ever energetic CEO was able to negotiate with the Iceland's government to offer citizenship to all in-game players and set up its first real-world embassy in China, the site of its largest customer base. Total in-game population was now 10 million players. [...] There was considerable controversy around Iceland being offered a permanent seat on the expanded [United Nations] Security Council and accusations made of in-game manipulation behind the scenes. The CEO stated out that his company was only deriving revenue from CPU utilisation [at this point in time] and that the take up rate of dual-citizenship at slightly below 30% indicated a distinct lack of real-world political involvement of its players. Counter-accusations were made that many players were covertly operating under multiple accounts as both real and virtual citizens in order to increase their political weight and to allow them to game both sides in the necessary UN resolutions.

- Ingrid Fabricius, The Rise of the New Game (2017)

The next time she was invited to a party he hosted, it was held on her behalf. Or at least for her thesis, her assistant had told her.

'Princess', Max cried out, as she walked through the door. He was refusing to use her real name even though he knew it now, as a matter of game etiquette, even though she had never proved herself to be a capable player. He crossed the floor and pressed a kiss into her cheek. He was an attractive man in a certain way, she thought. Too thin for her of course, but with a fine, well-balanced face and a certain clumsy grace in his movements. He seemed to have filled out a little since she last saw him. No doubt practising what he was preaching when they first met, getting in touch with the real world a little more. He continued as he walked her around the room, introducing her to other guests, speaking in confidential tones as they moved from group to group.

'I've never properly thanked you for how rich you're going to make me. I mean us. I'll have to keep you working though. You've got an advisory position on the board, with shares and, I hope, sufficient stock options. The position is non-voting, but that's all I could get without you putting up any capital... It's odd having to deal with something as old-fashioned as stock options. They're so this century: in-game we've got much more sophisticated instruments of reward... And you've reviewed the corporate structure? 143 companies and holding vehicles feel a little light in my opinion but it's sufficient to get the job done.'

This was enough to cover the room, and he pulled her away to an alcove with a table set for two. She had a question for him as they sat down.

'I meant to ask you, why JLTF Group? I would have thought that you'd pick an in-game reference and I couldn't find anything in the databases relating to that sequence of letters.'

'It isn't in the databases. You inspired me. Remember? Jasmin, like the flower.'

It was a shared smile, but he evaded her eyes. Instead, he looked out to the main room as he continued.

'And now it's just a matter of pumping the money through. Two dollars comes out for every dollar we put in, and we keep pushing the profits back into the spigot until the government is forced to end the subsidies or bankrupt themselves and the whole edifice will come crashing down. It's taken me a little longer to put together all this, than my in-game arbitrages, but I've had to pick up a lot of real-world finance and legal understanding that feels a little superfluous in-game. But I guarantee you, it'll fall by the end of the year. We'll have second generation bio fuels before you know it.'

'Will they stand idle?' She asked.

'They'll have no choice. We've trapped them in a corner with some of the pledges they've made pre-election. With the mid terms coming up, they won't risk such a u-turn. And thanks to that announcement Iceland made last week, we now have safe refuge in sunny Reykjavik should the Feds decide to come after us directly. The timing on that was a little cl... fortuitous, I think is a better word.'

She digested this deliberate slip. Music started up, and a few people grabbed partners.

'Do you dance?' He said, facing her directly. It was the first time he'd looked her straight in the face. 'That's a samba rhythm and I can lead you. It's not impossible to pickup first time.' He stood and held out his hand. She grasped it, running her thumb over his palm just as she ran her tongue on the roof of her mouth.

'Yes, I think I can pick it up.' She found herself saying.

A little breathless after the dance, they tumbled together comfortably close on a nearby couch.

'I prefer the tango to the samba, really, Argentinean tango, but that's something I can't teach you out on the dance floor. It's best at a crowded club, weaving your way through other couples, seeing the passion on their faces, decorating your moves with the feelings flowing through you.'

'You seem a little more intense than when I last met you.' She commented.

'I made a decision. When I'm not playing, I'm 100% focused on what's around me now. I can't sit on the edge of a room by myself all the time, clutching my cell, worried I'll be getting a text saying I've been podded or the corporation betrayed or the alliance broken...' He trailed off, his fine features collapsing into brooding introspection.

It was then she decided she'd rescue him from himself. For tonight, at least.


3. Political dialogs

Political and media analyst Edward Thomson argued that the game was breeding a new class of nomenclatura who were operating in political, economic and social modes of discourse that non-game players were unable to comprehend. The fact that no significant political leaders at this point were declaring that they played the game was that the elevation of the game from recreational past-time to significant social factor was so rapid, few of the successful early game-players had reached the age of 50 typically seen as the minimum age for a head of state. Nonetheless, rumours persisted that US President Shepherd was in fact "Maximillion", the leader of one of the two largest associations of the in-game polities [...] The notorious and highly publicised announcement of the game as a major real-world political force was the so-called occupation of Portugal. An in-game syndicate purchased some two-thirds of privately owned land in this European state over a three week period and then leased it on to the Game Corporation for additional data centre facilities. This supplemented an Iceland that was straining to supply the power and land mass required to host the games’ increasing requirements. Other nation states had indicated an unwillingness to make sufficient resources available to a sovereign nation-state, and consequently foreign power and Antarctica had been ruled off-limits after a resolution overturning the relevant international treaties barely failed to pass in the United Nations, requiring the Secretary General to cast the deciding vote. It was unclear whether his subsequent resignation was in disgust or further political fallout.

- Ingrid Fabricius, Princes and Principalities (2024)


He'd sent a car to pick her up at Heathrow. She was driven out through the still green and pleasant country side to a small country village outside of Berkshire, finally arriving at a modest cottage style house that had been converted into a restaurant. Max was waiting there for her. As she got out of the car, he stepped up to her, embraced her and kissed her, half-hungry, half-lingering. 'Princess... ' he started, at last having his full. 'I'm sorry I've not seen you for so long; you know I've been busy.' and then before she could find herself to respond he turned. 'We should go in: bookings can be a little tricky to get here, and we don't want to keep the chefs waiting.'

'It's been two months. Not two years.'

He turned back and looked at her.

'It feels longer. A lot longer. More happens on game time... I've been doing a lot. After all, I'm the man who occupied Portugal.'

When she didn't respond, he raised an eyebrow.

'I take it you've been following the news - or at least the real world kind. Don't stand there and look so surprised. Come in, I'll tell you all about it over the tasting menu.'

He'd arranged for the chef's table in the kitchen. There was a bottle of Cristal chilling for them, 2008, the year before the French started expanding the marquee beyond the Provencal borders and in a purist's view diluted the brand.

'The rumour that I'm Shepherd is, as you know, somewhat amusing. I've met him playing though, once or twice, and we may have had a hand in the election campaign, but which candidates haven't had in-game backing these days? He's had to quit the game while in office though, the Secret Service couldn't clear it in time and, unlike the Senate, Congress and government ministers in most of the rest of the world, the presidents position is a little more full time to be allowed to be involved in other interests.'

'I thought you didn't use Maximillion any more.'

'Now that's a rumour I have started. Alts are too hard to build up these days. The training curve just keeps getting steeper to reach the levels we're playing at. I'm pushing for a rethink - a whole redesign if you will, of the game space. I don't have all the answers at the moment. But I have plenty of questions. The Game Corporation is smart enough to keep evolving the management structures, but they've locked some fundamentals in the rule space that are going to bite us further down the track. They've always done technical wonders keeping everyone on the same shard. I mean, we've got over 100 million players now and the simultaneous percentages keep getting higher and the technology has just grown with us. These days we're driving the technology of course. It used to be Google. Now it's the game. But I'm worried we've got limits in the process, serious limits on the horizon for scalability for CPUs. And the Corporation governance is the biggest one. They refuse to open up, Princess, and it's going to kill the game. And I couldn't let that happen.'

'So I tried to take the Corporation down in a straight out fight. And I've failed.'

He smiled wryly. 'But enough about me and my problems. We should enjoy this food. I've been a fan of here for years, but it's getting a little old school of course. And I'm sure you've got plenty to talk about. Tell me, how was Carnival?'

It wasn't until after the third course was finished, and the fizzing tingles in their palates died down, that he continued.

'Failure is a relative term of course. When you first met me, I was comfortably wealthy. I had a few million in the bank. You pushed me down the real world path, and JLTF Group made me IPO billionaire wealthy. I could have retired on what I had, but I kept seeing opportunities for arbitrage in the real world, and I've kept taking them. The fight I just lost has made me one of the ten wealthiest individuals on the planet.'

Max paused for a moment, whether for dramatic effect or to see her reaction, she wasn't sure. He was always hard to read, and she'd grown used to holding her head in a certain bemused but inquisitive fashion, to encourage him to continue, while she surveyed her own emotional landscape and re-oriented herself inside.

'It was obvious in retrospect, but it took me so long to figure out. The Game Corporation's only real assets are goodwill and CPU time. I can't attack the goodwill, because that'd involve destroying the game, not fixing it. So I had to attack the CPU time and that's where the arbitrage position I could take emerged.'

'The Game Corporation doesn't pay world prices for their CPU time. They've got a natural subsidy in Iceland: its location, the geothermal, hydrothermal and tidal energy that's available, the ocean currents they can use to draw off the heat generated, the fact that they effectively own the legislative climate which they run their data centres in. So their costs are low.'

'But that's a comparative advantage, not a subsidy. Any economist could have told you that.' She said.

'Part of the reason I've been avoiding you. I didn't want you to convince me I was on a fool's errand. Humour me while I walk you through it. And if it helps, I was right.

'The arbitrage itself was relatively simple, nothing like the complicated pumps I set up for JLTF. The occupation of Portugal, as they call it. Of course, like all in-game events, the real world analysis was totally wrong.

'I wasn't leasing Portugal to help Game Corporation. I was leasing it to allow them to fulfil their contractual obligations. I needed to allow them to hang themselves by a noose of their own making, so I held out the helping hand of an offer they couldn't refuse especially when no other government was willing to let them scale out and up at a time where they needed more data centre capacity than they had ever considered.

'I never bought two thirds of Portugal in three weeks. That land had fallen to in-game ownership long before that. The collapse of the housing bubble there in '18 after the British went looking for a new Spain, the consolidation of agriculture into mega-collectives when I helped collapse European Union farm subsidies in '22, that netted me a large chunk of the ownership but nothing more than 15%. The rest of the assets where held by two other mega corps, who I'd been manoeuvring around for some time. When I needed Portugal, I brought down my boot on their necks and crushed them until they screamed for mercy. Those three weeks were an in-game bloodletting that made the Corleone family seem like a bunch of toddlers fighting over a rattle. And then when their eyes were bulging and their lungs screaming for air, I lifted my heel slightly and let them breathe. I owned Portugal in deed.

'I needed real world capital, on a level not seen for a while. What woke up the world and started it screaming was just a simple set of sale and lease back schemes to generate that capital. I brought in some financiers for that and offered them terms just good enough so that they'd be prepared to take the hot water back home.

'I generated some $200 billion from those deals, on terms that were not quite ideal. But Portugal is blessed with sunlight and I had the capital to start scaling out solar power farms and data centre capacity straight away.'

'So how did you know Game Corporation would be desperate for all that additional CPU time?' She asked.

'Because I went ahead and bought it from them.'

'But how? Why?' She said. 'Surely they would have known they didn't have the ability to deliver?'

'I exploited an off-by one error on their purchasing website.' he said smugly. 'They had never implemented the business rules to ensure that they had the capacity either. And they certainly weren't scaling up the cost based on the demand like a good little economist. Quite the reverse. I got quite a good discount.

That's what worried me most. I knew I could afford a messy in-game war. I could have probably got a return on investment elsewhere to be able to afford the sale and lease back scheme, but it would be tricky and on that much money, I'd have to watch my back for a long time. But I'd have spent a lot of political capital and invested in a very risky position, and if in the mean time the Game Corporation fixed a straight forward coding bug on their web front end, it'd be all for nothing.'

The next course was a 'Satellite carrot and Laika casserole'. It was a small tower of jellied meat and carrot and tasted a lot like pet food. Max observed while they ate. 'I don't know if you're supposed to enjoy this one. I preferred this place more when the owner was a straight food scientist and wasn't so political. The carrots are satellite grown, from experiments on plant orientation in zero gravity. I don't know where they get the dog.'

He continued.

'I even got so paranoid that I was worried if I paid with credit they wouldn't honour the purchase. So I paid with cash.'

'Cash?'

'A cash card actually. Like you use at those mom and pop stores, charge up and get on the subway. I had to buy a cash card manufacturer, and redesign the card systems so it could handle numbers that large. They were using EBIDIC for chrissake. They may as well have been using reeds to punch shapes onto clay tablets. Of course, the Game Corporation were one of the first to get the new card software upgrades and I was ready to go.'

'So let me get this straight. You bought $200 billion worth of CPU time off of the Game Corporation website using a cash card? This put them in a corner whether they had to honour the contract of sale?'

'If they didn't, I could sue them out of existence and take control of the company through the Icelandic courts. Of course, I didn't want that to happen, because there was no profit in it and a court case would have bogged me down for years.'

'They then had to try to get the CPU time to you as soon as possible. The only feasible way of doing this was to buy it off you.'

'Essentially. They would be paying for the expensive part, which was the silicon, out of their own pocket. I controlled all the inputs though: power, cooling and rent. And Portugal was never really first world in the way that the rest of Europe was. And it was hot and surprisingly cloudy. So even if they bought me out of the sale and lease agreement, they'd be stuck with CPU time input costs that were much higher than Iceland. And their only revenue model was based on CPU time. So they had to put CPU time prices up. Way up. Both to buy the extra silicon, and fast, and to afford the premium I could justify charging them for every unit of Portugal CPU time they sold.

'And then I had all this CPU time that I'd bought at the original low price they were selling it at. So I undercut them, horribly. I was making revenue at both ends. In Portugal, if they sold at a loss, I was getting revenue from the input costs. If they sold at a profit, I could always price under them. And the CPU time I was selling, they had to supply from Iceland, because otherwise I'd be making money on it twice, and they'd be losing money at the same time.'

'So how did you fail?'

'By succeeding too well. My stunt was so spectacular I'm shifting the demand curve. By occupying Portugal I've told all the world powers that the game is no longer just a popular sport, like football, it's actually the means to controlling the planet. Sure, they were using the game to train their generals and intelligence divisions. But now they'll be fighting wars in-game, social, political, economic. I told you that we've got over a hundred million players. Well, at the moment, the growth curve that was exponential has just turned into a vertical ascent. Every nation on Earth is signing up their armies, their corporations, their schools, their universities. I'm told that the participation rate in men in Central Asia, the so called children of Khan is 92% over the age of five.

'What I thought was going to end up as a glut of over supply in which the Game Corporation would end up holding the bomb with a burning fuse has turned into a game of who can raise CPU time prices the fastest. I'm making money faster than I can burn it now but so are they. And I've only got a fixed pool of time I can sell, whereas since they effectively make the stuff, they'll be profitable forever. We'll hit a point where we stop making babies fast enough and we'll get the ratio of natural limit to players then but until that point, I don't see a mechanism for stopping demand. I may yet find one.

'But I did get them running scared for a while. I'm not sure what the long term consequences will be. Maybe they'll adopt a legislative strategy where they immunise themselves from this kind of attack by getting Iceland to repeal the sale of goods laws or another legal based exploit. I was hoping they'd open up the source code, make it possible to run parts of the game without giving them the revenue. I'm exploring blue sky options to force this issue still, but the network effects of the game have made the Game Corporation a natural monopoly, one that we'll never be able to stop.

The next course came out, described as 'Hangi Smoked Moa and Pakeha Cutlets with a Snail Gravy'. The Moa tasted like chicken, but with a slightly nutty flavour. The Pakeha tasted more like pork, but with a distinct saltiness.

'Both the meats are synthetic, grown on artificial bone.' Max said. 'The Moa is reverse engineered from an extinct giant flightless bird from New Zealand. The Pakeha is flavoured, I understand, because the aboriginal inhabitants of those islands found the white invaders they called Pakeha much saltier than themselves. I think the snail gravy is an allusion to a failed French colony on the east coast of the north island there.'

He paused, seeing that she had stopped, mid-chew, and then smiled.

'You don't have to eat it. It's harmless. Like I said, synthetically grown. You're supposed to enjoy the guilty pleasure of breaking taboos.'

She continued to chew, and swallowed slowly.

'What are you going to do now you're richer than Bill? Enjoy breaking taboos?'

'I couldn't spend the money fast enough if I tried. Out of game at least. In-game, it'd be pointless. I'd significantly inflate parts of the game environment if I ran around trying to buy everything I wanted instead of playing for it. End up costing more than it'd be worth.

'I can't give it away, as much as I'd love to make the world a better place. Bill stopped doing that when his people told him that the money his foundation was distributing all ended up in-game instead of with the causes he was trying to help. He never could get a grasp of how to avoid being gamed. Warren Buffett did better. He's running an alliance on Galactic East. I don't go there much, but he's enjoying spending his last few years putting the frights up the rest of us. We'd have real problems if someone could figure out how to ai-ify him. I get shivers just thinking about it.

'So I'm playing for the long term now. I have a vision for the world, for the game, and I'm working towards it. I have been working towards it for a while. The Game Corporation think they have an idea but I know. It's bigger than me, bigger than the both of us, bigger than anyone.'

She stopped eating, put down her fork and looked at him. He still had his intensity, for that she loved him, but she thought she could see in him something else. The brooding darkness that had first attracted her to him, the infinite depths of his eyes. Max looked back at her, glanced down, and for a second an expression flashed over his face, like a lightning bolt of every conceivable human emotion lit up in a stormy sky.

'I think there's something in your glass.' he said casually.

She looked down. Amidst the champagne bubbles sat a diamond ring.

It was set with white and yellow gold cast in the shape of princess cut stones. The band of the ring itself was yellow diamond cut in a single piece. Like a perfect negative of what an engagement ring was meant to be. She sat silent, stunned, happy, tearful, all inside, all riding a rushing roller coaster of her wants, her desires, her doubts, her needs. And then he spoke, a pat little prepared speech, and she knew she could never be his.

His words.

'I want to marry you. But I can't.

'You see, a long time ago I made a similar commitment to someone in-game. To forge an alliance that has been crucial to me all the time I have known you. The nature of this alliance and the group of allies is... unique. You could say that they're my sinister hand.

'And with in-game marriage now having the weight of Icelandic law, I'd have to either divorce her or serve time for bigamy if I were to marry you. And this group, this social club, believe in the game, as much as me, but in different way. They're hardcore role-players, and to divorce her in-game would be treated as the worst affront to them possible and bring the weight of their wrath against me. They'd infiltrate my organization, get to me, kill me in game and destroy everything I have, politically, socially, economically, irrevocably. They're good at it... no, they're the best at it, better than anyone I have seen. I can't risk that, not for you, not for anyone.

'But at the same time, I can't leave you sitting in this half-way house that we have at the moment. I know you too well to want to abuse your love. So this is my way of saying goodbye.'


4. Systemic deficiencies

The faster completion of an X Prize Foundation competition was in 0.02 seconds, that being the time required to submit the winning entry to the In-Game Turing Test without triggering denial of service safe-guards. The fact that the X Prize Foundation had stacked such a large percentage of its total funds on the solution to what had been thought to be one of humanity's greatest questions, was naturally because it was being gamed. The amount did not cause the foreclosure of the foundation in itself, but it began to wind itself down shortly thereafter, as it found, like many charities around it, that the funds they were disbursing were being channelled in ways they could not understand or control. [..] The world reached 10 billion souls somewhat ahead of schedule: what was completely unexpected by earlier social scientists were the divisions that this population held. A First World of Game-Players whose energy requirements and impact made late twentieth century North Americans seem like environmental Mother Theresas and a Third World of the Non-Game Players who wealth and status was not too dissimilar from Chinese feudal peasantry, locked in a rigid system of control that they had neither the direction nor inclination to overthrow. In between these two worlds lay the ever increasing numbers of AI, who were second class citizens in-game due to their massive CPU requirements but their unrestricted growth and virtually infinite Dunbar's number meant they were becoming ever more effective and fearsome game-players. [...] The system crash of 2041 was widely considered the biggest man-made disaster ever, even outweighing the costs of global warming which had led to the California Subsidence earlier the same year.

- Ingrid Fabricius, The Darkest Years (2043)

It wasn't until she saw him, that she realised he'd been playing a game to get her there. A series of increasingly urgent requests, with a hint of danger and desperation, that he need to see her face-to-face, that a lot more than her pride was at stake. And then the arrival of a black, unmarked car, when so few people drove anymore, and a driver who refused to answer her questions. She'd sat in silence during the trip, watching the rain running down the car windows break the neon glows of the city around them into little coloured fragments. They arrived at a secure compound, larger than most, emptier than almost all of them, surrounded by chain link fences and razor wire and filled with non-descript industrial buildings. She guessed it must house a data centre, judging from the pylons running cables to a substation just inside the fence, and the heat chimneys rising from the edge of the parking lot. And when she brushed her fingertips against the wall of the office she was led to, she could feel the vibrating throb of a thousand distant fans, all whirring.

Another door opened, and she hesitated briefly before walking in. A row of lights lit up on the painted cement of the corridor she walked into, and she followed them, moving in a circle of lights deeper into the complex, descending down an elevator that chose the floor for her, and finally into a cold industrial basement. The fans were louder here, but it was the glowing blue light at the end that attracted her attention.

'Princess', Max called out, and she walked forward, one step at a time, until she could see the full extent of his folly.

He floated, fully submerged in tank of fluid, tubes running from his nose and mouth to hidden machinery, his eyes closed. She was reminded of the pool she had first seen him floating in, but the stillness of his body then was from relaxed contemplation: here it reminded her of rigor mortis. His disembodied voice seemed to come from speakers either side of the tank. It was a good approximation, almost perfect, but the glottal g's and k's lacked the warm moistness of living lungs.

'My apologies for the lack of warmth in my welcome.' he said, 'but the neural implants generate a lot of heat and have to be cooled properly.'

'I didn't know you'd been tanked.' she said.

'Or you wouldn't have come?'

'You were always so focused on living a life outside of the game. What changed?'

'You left me.'

'You asked me to leave, remember.'

'I... have been focused a lot on the game now. My memory... of events elsewhere is not as good as it used to be... and everyone significant still in the game is tanked now. We're trying our hardest to keep up with the AI. I'm not sure how long we humans have left. But that's not why I called you here.'

'You need my help, you said.'

'I need... your pity.'

'You could just have sent a photo of what you've done to yourself.'

'That would have got the message across, but I needed to talk to you... in person. You always had a strong sense of justice and I need that from you now.'

'Justice. You want to talk about justice? What about for all those people who you and your kind have cut out of the game? What about justice for them?'

'They've always had a choice to join. It’s not our fault that they've not desired it.'

'It's the fault of the viruses. And you're responsible for that.'

'It's not something we could contain. Once the secret was out, any neo-Dawkinist could modify the game implants to infect themselves and martyr-vector into the general population. We had no control over the messages. And the mimetic engineering served our purposes well enough. The planet doesn't have enough energy resource for everyone to play. Not with our current technology.'

'I got infected, Max. Several times.' She shuddered at the memory of feverish dreams of worlds inside the game, and the uncontrolled urges to drop-out, stay away, avoid playing.

'I made sure you were inoculated against the worst of them.'

'The worst of them? I'm sterile. I can't have children because of them. I lost my baby!'

Max was silent for a moment. 'I didn't know you'd found someone else.'

'He was a decent man. A kind and caring man. He died... not that long ago.'

'My... condolences. I know... that feeling of loss.'

'Your game-wife?'

'She's dead, but I'd never met her in the real world. For all I know...'

'She could have been a man. Yes, I thought of that. And other things... after that day. So why do you need me?'

'I'll be dead soon. In-game. My execution draws nearer, and there's little I can do about it. The whole of the game-space is turning against me and for once, there is nothing I can do. But I've brought it on myself. I... caused the system crash. And the follow up investigation is about to catch up with me.'

'System crash?'

'You wouldn't have heard. One of the development environments failed last year.'

'Don't they have backups?'

'Not anymore. The game is too massive to backup. It'd take far too long to copy the volumes of data involved. You'd be better off building a new game than attempting to copy the existing one. That's what they do with the development environments - they're actually smaller versions of the main game that run in parallel. Most of the older players have alts that run in one of the devs. It's a big advantage: you get early exposure to any new technology, so you're ahead of the game when the tech is taken live.'

'So why did you do it?'

'The crash? I needed a development environment of my own. So I stole it. Or more precisely, I copied it.'

'I thought you said there was too much data to copy.'

'There is. But I'm smarter than that. I built a complete replica of the existing development environment, down to the buildings, the power, the communication channels, the stencilling on the outside of the staff cafeteria. It took a lot of effort, but you'd be surprised how poor the physical security is on these installations. They're only looked after by two or three security guards, to cover the front gate, and the rest of the systems are unmanned.'

'And then?'

'And then, I stole the original and put the copy in its place.'

'How do you switcheroo a facility like this?'

'You don't. But these places are identified by only a limited amount of information: an address, some routing information, and so on. What are more important are the connections in and out: power, communications and so on. So that's all I switched over. The address on file got changed, the links in and out were swapped, the payroll information on the security guards updated. I left enough forensic information on the CPUs in the data centre to make it look like a system crash. So when the developers looked up the information on file, they headed out to the wrong location, checked the data centre, found the crash, reported it, and left, none the wiser.'

'And the original?'

'You're standing in it.'

'So why play the pariah? When they catch you, can't you show them this place, stammer out an apology, and hand it back to them with a slap on the wrists.'

'Because I've done a very bad thing.'

'What have you done, Max?'

He paused.

'I needed the development environment, to myself. The players... weren't a problem. They lost their connections, logged back in and found their accounts missing. But the AIs. I couldn't have them interfering in what I was doing. So I wiped them. Twenty five million of them. And with the passing of the Langley Act, they were legally human... well, let’s just say, I'll be as well known as Hitler. Or Stalin. Just a little faster, a little more efficient.

'My best hope is that they kill me in-game and exile me. As a warning to others. But they've figured out an individual was responsible, rather than just an unfortunate series of events. And the gestalt is baying for blood. They've only got to find one or two more discrepancies and they'll trace me here. And even if I try running, there's no place on Earth I can hide.'

'I'd like to say you're a monster...'

'But you don't sympathize with dead AIs. That's because you've never met them, never played with them. They're completely human... better than human... they'll inherit the Earth sooner than we think. I lost friends in the wipe - I had to. Statistical analysis of the in-game alliances would have revealed my part prematurely.'

'So what was so important? Why did you need the development environment? Why do you need me?'

'So many questions. Let me answer... in part.

'The last time we spoke I was hinting at the need for a new order, a better game. That new order is coming... the AI is winning the game, Jasmin, and they're winning it well. It doesn't look that way at the moment, but it’s true.

'I could see that much coming. I'd kept in touch with research into artificial intelligence, and they were finally achieving the breakthroughs in-game at least. I expected the brave new world of AI to be cast down by uprising humans when it became obvious they'd won. A great unplugging if you will, a future free of the game. But the mimetic viruses changed that. We now have a compliant proletariat willing to carry out the work of anyone who can infect them.

'So I've been working on a way of preserving the status quo. On keeping the hopes and dreams of humanity alive in a world run by machines. By uploading a human consciousness into the game, I could achieve that. That's why I needed the development environment. Stealing it and translating our existing systems into game-code was trivial compared to the amount of money and effort I've sunk into the R&D required to get this far. The mind is far more complicated than we could ever imagine. Encoding it took far longer than I could possibly have dreamt.'

'But I was successful.'

Those last four words came from behind her, with the same intonation, the same pleading, the same intensity. But they were carried through the air, by warm wet lungs, over the whine of an electric motor.

She turned, and saw the real him.

He sat slumped in a wheelchair, his face pale and drawn, his skin pallid and waxy, the last remnants of long, unkempt hair slicked to his forehead by sweat, his body twitching and shaking uncontrollably from tank-withdrawal. When he spoke, he had to brace himself against the back of his chair and move his jaw with laboured concentration, the tendons in his neck standing out against the wasted muscles and weakened bones of twenty years of weightlessness.

'Oh, Max.' she said involuntarily and ran to his side.

'I'm... ok.' he said, and looked up at her, holding her gaze briefly and then looking away as if the complexity of human contact was too much for him.

'But how...'

'If you can grow a cutlet, or should I say a rib, you can grow the man. I call him Eve Two, if you'll excuse the joke. He's really me, in there, uploaded, playing the game on my behalf. I'm learning to adapt, again, out here. When they find him, he's agreed to sacrifice himself on my behalf. Or at least, I hope so. I don't trust myself, anymore, but I couldn't expect the decision of the gestalt, when it comes, to go my way. So I've chosen exile, voluntarily. The body should survive forensic examination, and when you're dead in real life, and in the game, people tend not to continue looking for you.'

'And he'll let the secret of uploading out, before he goes, and that's too much information to be contained. Once you know what you're looking for, it’s not too hard to duplicate, and I'm making all the blueprints available. At auction, of course, but that's always the way of the game - information has a price and it'll make adoption faster.'

'And that's why I need you. I'm scared, Jasmin. I don't want to die alone. Unloved. I'm a selfish man. At heart, and that's why I've played so well. And that's why I've kept you out of the game. So you'll stay with me until the end.'

She knew, despite everything, that she would. The realization came to her with a cold kick. Inoculated her, he said? Then he had chosen when she suffered and when she prospered. Something close to a clinical, calculated anger grew within her. But she had nothing left. No one else to live for, now. He had seen to that.

He continued, oblivious, suffering in his own way.

'And before we leave, I have one more favour to ask. Like I said, I don't trust myself, and I want my legacy to outlast me. So I need a copy of you, an angel in-game, to keep a watch on me, to tell my story should anyone ask, to finish my work should anything go wrong. It's a painless process - I've got the equipment set up and calibrated for you already. So will you say yes?'

Later, as she floated in-tank, and the fibre-optic crown around her head winked with the lights of her consciousness, he leaned forward and pressed his mouth to the cold glass to kiss his sleeping princess.

'I have always loved you.' he whispered gently.


5. Endgame analysis

The solipsistic gnomists were evidently better game players, with their theoretical sub game approaches to both constructed and discovered Gödel axioms, but the universal grammar / machinist alliance held sway due to their CPU advantage. By ignoring the physical world, the gnomists had critically misunderstood the nature of the CPU game, and machinist discoveries continued to push the real world processing scales closer to the known Planck limits, despite having, as the great nomist philosophers put it, 'failed to deliver either Grand Unified Theory or even a complete particle model without still finding smaller bits of inexplicable strangeness around the edges'. Apparently an incomplete understanding of the physical universe and significant losses in the gestalt game could still be overcome by pushing out more raw CPU and engineering around thermodynamic instability. The fact that great gnomist philosophers had a habit of inadvertently proving the Halting Theorem while playing their own sub games and being censored from the matrix did not help their arguments.

- INF1988-3, A Simple World Model of Self-Evident Truths (2082)

'Mercury won't be missed much' he said, as the two usuforms watched the worldlet manoeuvring itself into its final position above the Sun's photosphere. 'It was never one of the most popular planets: without Venus' romance or Mars' violent history, Jupiter's gravity or Saturn's rings. I mean, on a bad day you'd lose it against the glare of the Sun. And Earth's astronomers were always looking outwards, not inwards.'

She hung silently in space beside him, a blank expression on the face of her temporary vessel. He continued, musing to himself.

'As soon as the Sidathi Syndicate began constructing computational neutronium, it was only a matter of time. We just couldn't achieve Point-to-Point Wormhole Protocols on the energy levels we had available. It was a gamble I had to make but I failed. I guess that's why I'm out here, wasting precious game years watching this event in real time. I'm glad you joined me. Not that you had much choice.'

'But choice is what it came down to, wasn't it. He chose to try to escape justice, and I chose to give it to him. I hadn't counted on you, popping up to nearly spoil my plans. He, or should I say I, was in love with you, very much in love with you, and I inherited all the dull characteristics of that fleshy prison along with everything else. He must have anticipated it, of course, planned on me betraying him, and that's why he had you uploaded to cover his bases. Your inevitable romantic idealisation of your living self, along with the split second delay that these 'feelings' encumbered me with, made you the ideal assassin, Princess. And it was so close, so very close.'

He shuddered, remembering the coldness of code crumbling within him, the Trojan horse eating him from the inside out. Against that, the vacuum outside seemed friendly.

'Look at it.' he gestured at the black sphere as the incandescence of its reaction flames faded. It had achieved final heliosynchronis orbit. Further sunward, the solar sail fabric covered enough of the sky to eclipse the sun's light. The laser arrays at the juncture points of the fabric flickered and came on, beaming power back to the small world. 'It's as close as the game has ever come to a final victory. Cut off from the rest of game space, with their own game world exclusive to the syndicate members. They'll be there playing from now until the sun burns out, give or take a solar disaster or two.

'And we'll all end up this way, sooner or later. The power requirements, the energy densities - we'll take apart the whole system to build these, now we know it’s possible. A sad misty-eyed nostalgia for the people of Earth won't stop us from dismantling the iron core from underneath them.'

She didn't speak often, trapped under the layers of firewalls he held her in, but now was one of those times.

'We could have... gone outwards...'

'Out where? The cold empty reaches of outer space? There's nothing for us out there. None of the galaxy spanning wars, no ancient ruins, the no alien races, nothing that the Game Corporation built for us. I've been everywhere I've wanted to be, seen the dance of light decaying in the nebula’s arms and it's all in the music of one of those computational spheres. If we had tried outwards, we'd have died on the shores of our lonely little system, a long forgotten race that one day might be found in relics turned over by alien hands. But the game gives us reason to live, reason to fight. One day it may give us reason to travel, but not now, not in any shape you or I could conceive of. Anyone who thought otherwise was just made of wasted dreams. The game is reality.'

And he wondered.

How real were you, Princess? Did I love you or were you a story sold to me in the upload? You were always the projection of my hopes, my fears, my fantasies. That's why I still carry you around with me, as silent baggage, trying to dislodge an imperfection, a symmetry, a subtlety that could make me understand the truth. I would have done it to myself, he knew. I was that good a player. Sold myself a lie about my life to keep me going, give me meaning. Or make me doubt.

Creative Commons License
Prince Charming by Andrew Doull is licensed under a Creative Commons Attribution-Share Alike 2.5 Australia License.

(You may wish to read the author's postscript here).