Sunday, 31 January 2010

Review: Bioshock








TF2 bug filed with Valve

The Scottish Resistance is too boring a weapon on many maps - placing the stickies and sitting around waiting is unnecessarily dull, especially when compared to the Eyelander.

The stickes should nag the Demoman in a wee high pitched voice - as if they were married to him, and Irish.

Friday, 29 January 2010

A kinder, gentler Unangband

The final release of Unangband 0.6.4 will be a much kinder game. This is due to the generous contribution of bigalphillips, fixing a bug that caused spell damage to be grossly over the intended amounts.

I was referencing the wrong field in the monster_race structure when computing the actual spell damage inflicted.

As Al puts it:

Apprentice mages used to use a power of 9 instead of the spell_power of 1 for their spells, causing the major damage.

This makes many dungeon guardians much easier eg. The Dunlending Agent has a power of 28 but a spell_power of only 8, so he'll do about ~third less damage now. :(

I also want to thank Big Al for picking up and fixing so many bugs this week...

[Edit: For those concerned, damage from breath weapons is unaffected].

Tuesday, 26 January 2010

245 open bugs

What happens at this point in the Unangband release cycle, is I force myself to stop adding new features and start working on the bugs list. At some point while working my way through this list, I will be crying tears of blood, swearing never again to work on the game and then I will release 0.6.4 final and take some time off.

Adding new features results in writing hundreds of lines of code, juggling complex and interesting ideas in your head and coding in an enjoyable fashion. Whereas bug fixing requires that you desparately try to remember old and crufty code you haven't looked at in a while, juggle even more of the code base in your head, and wander through the procedural landscape until you find the exact circumstance the bug occurs under, and then get killed off by a passing monster while you're trying to replicate the fault over and over. And the fix is frequently a one-line or even one character change so you don't feel like you're doing much work.

The irony is that I probably fix bugs at the same rate when I'm adding new features* as when I'm bugfixing. But I can't guarantee which bugs I'll fix when adding new features. Whereas every bug raised by someone is an issue that I need to address to keep the players happy. So I have to go through this process.

To get a feeling of progress, I use the bug tracker in Berlios to mark bugs as fixed in SVN by lowering the priority to one and adding a comment to that effect in the bug. This results in page one of the bug database slowing changing from light red to grey. And consequently, bugs get fixed in batches of 50 or so, because switching to page 2 and seeing the wall of grey I'm building turn to red undermines all the progress that I've made.

(* The difference is I'm creating new bugs at about the same rate as well).

Sunday, 24 January 2010

The Unday Papers





RIP Explorington

It's with a heavy heart that I've read the final Angband - Tales of the Pit. Congratulations on running the series so long and so reliably. I've enjoyed the strip and the wry take on genre.

Why are games difficult?

You may want to start this series with part one, two, three, four or five.

Demon's Souls was lauded as one of the best and most challenging games of 2009, for the difficulty of both the game play and the placement the apostrophe in the title. It is this difficulty that was seen as a breath of fresh air by many jaded critics and game players, who had supposedly grown fat and weak on the Facebook Farmvilles and amusement park ride MMOs, with their watered down game mechanics designed to hook in and succor what Gevlon refers to as morons and socials.

Demon's Souls was criticised as one of the most harsh and unforgiving games of 2009, for the difficulty of both the game play and the placement of the apostrophe in the title. It is this unnecessarily hostile environment that continued the tradition of poor design catering only to hard core critics and game players, who have the obsessive compulsive disorders necessary and basement bedrooms at their parents' place necessary for the multi-hundred hour play times required by treadmill MMOs, with their grindtastic game mechanics designed to hook in and succor those Tobold parodies in the Rise of the Leet King.

Difficulty in game design is something I hold dear to my heart - mostly because I have written a game which is too difficult for me, or many others to ever contemplate completing. Witness the crushed and torn bodies of the many Shadow Fairies that litter the latest Angband competition ladder and the self-evident pride of the masochists posting that they've made level 5 (out of 50 - and level 50 is much, much more challenging again). As Konijn puts it:

Anyway, I think at this point, I give up. You cannot win with this character, there's instakill from a number of sources even while playing very carefully. I number my savegame tries, this is number 22, so you cant say I didnt try ;)
and then keeps playing...

The current shining exemplar of the roguelike genre, Dwarf Fortress, has a motto 'failing is fun', but roguelikes have always been notoriously difficult...

Let's start at the beginning. Tobold poses the question succinctly in a follow up post to the Leet King letter:
When you say World of Warcraft is too easy, how exactly should a good, hard game differ from that?
(An aside: the only literary technique more misplaced than writing a humorous opening to a serious question on the Internet - the mistake Tobold admits to - is posing a rhetorical question. It works in the context of the original post, but as soon as you're quoted elsewhere, people just assume you're stupid and answer the question, rather than following the link and finding out you've already got some answers. So only an idiot someone trying to be difficult would title an article with a rhetorical question. So if you're going to link to this, please call it 'The Seventeen Ways Games can be Difficult' - or something like that).

He misses a trick: the question shouldn't be how can we make games harder? It should be why are games difficult at all? And it's this, more fundamental question, that I'll be attempting to answer here.

Why are games difficult? We have conquered the world as a species, we are better off than every previous generation, we are - you especially - inherently bad-ass. As Neal Stephenson points out, provided you accept evolution as a theory, you are currently expressing more badassedness than any creature that has ever lived and died ever, by definition. And yet we can be challenged and beaten by something as a simple as a game - some lines on a ground, and some differing coloured pebbles.

We can be beaten because of random factors. As soon as you introduce the possibility of randomness in a game, there exists the possibility of events outside of your direct control. Something as simple as a dice, or a spinner, or something less biased like entropic heat exchange, can be used to simulate externalities: the environment around you, other competitors - either because you don't have the players available to represent them directly, or to represent conflicts for which it would be inconvenient or dangerous to play out in reality - the want of a nail for the shoe of a horse. Reality is more outrageous and unbelievable than the most fantastical fiction, and randomness is a fair arbiter of unlikely consequences.

Even when you are able to directly resolve events without a random number generator, stochastic forces ensure that the outcome is not pre-determined. In fact, many games require that. You may immediately think of games of chance, gambling, horse racing, boxing, but the continuum of indeterminacy extends to all sporting events. If the outcome of any sprint is that Usain Bolt is the winner, then no one will sprint against him - unless there is sufficient incentive to change the race to be 'by how much is Usain Bolt the winner' or 'by what amount will the world record held by Usain Bolt be reduced by this week'. Even pursuits as sedentary as chess can be influenced by illness, distraction, the mindset and level of preparation of the competitors.

Other players are the next reason games can be difficult. Multi-player suddenly increases the variability of the challenge enormously, both in directly competitive games, and cooperative games (PvE). Should I choose the optimal strategy, which requires that my opponent or my partner is also playing to this optimal strategy? If there are suboptimal strategies with reduced risk of loss, which one of these is predictable, which one less so? The skill set required to directly read the mind of the opponent, or yomi, and the complexities and strategies of game theory can be expressed in games as simple as rock, paper, scissors, or as complex as the stock market.

Implicit with competition is the notion of different outcomes. Games can be difficult because we don't necessarily have a binary notion of risk vs. reward in all games. And even games which are differentiated by simple winning and losing, the consequences of the strategy employed can vary widely depending on whether we anticipate repeat play with the same opponent, or if we carry resources (star players, information about the opponent's preferred strategy or risk aversion, preponderance of particularly strategies in the environment of possible players) from one game to the next. Whether you should be a hawk or a dove depends on who you flock with, in the prisoner's dilemma, your choice matters more on whether you'll meet your potential betrayer as a cellmate.

Reward or risk over time is another important factor. Unlike the perfect world of game theory, we are finite beings with immediate wants and needs, and long term goals. Over a sufficiently long term, everyone is a loser - dead, as well. There is evidence to suggest a negative correlation between time spent (computer) gaming, and income - does the time you devote to winning this hundred hour RPG meaning you're losing out on the bigger game of life? Even in the game, if there is a strategy that earns you 50G per hour, why are you employing a tactic that only earns you 25G in the same time.

But that's unfair - I hear you say, complaining on the forums and asking Blizzard to reach for the nerf bat. What I want to do in the game should be just as rewarding as the actions those people who bothered to go out and do the research are doing? Strategy X is clearly cheating, because I can't or won't do it, or don't enjoy doing it. Welcome to the world, scrub. You're not playing the game if you're not playing to win. You're playing some weird made up in your own head game that no one else on the server is actually playing. Feel free to keep doing it, but get out of the way of the real players.

But sometimes you just don't have the abilities needed to play at the highest level. Or the twitch reflexes.
Or the Internet connection. Or the money. Or clean water and parasite free food and a source of income able to keep you above the poverty line with a diet rich in enough protein and other essential nutrients to avoid crippling chronic disease. It should be self-evident that life is unfair, from the moment of conception, and it is only the badass inheritance of your genes that keeps you floating atop the cesspool of the real world, fighting over the last scrap of food at the table.

And that's before you sit at the table. When you do, are you playing black or white? Do you move first or second? Are you Protoss against Zerg, or Terran against Terran? Did you spawn in the jungle, next to elephants, or in the hills next to copper? Does your starting planet have enough iron, Quinns? The rules of the game may start out asymmetrical, with a playing field tilted towards or against you.

There is one asymmetry that everyone starts out with when they first play a game - they don't know the rules of play. The process of learning a game can be simple or challenging, but it is clear that we can derive significant enjoyment simply from exploring the possible space set up by starting with simple rules and gradually introducing game play elements with greater complexity. Critically lauded puzzle games like Braid and World of Goo as well as block busters like Half Life 2 rely on this technique to propel narrative and game play forward, and games like Civilisation, Diablo and most MMORPGs dangle the carrot of newer and shinier toys to play with at almost every opportunity. The recent after adventure report of a Solium Infernum game starts out with games journalist Kieron Gillen tripping up on straight forward failing to read the fine manual, through staying awake at night writing angry letters in his head to the designer when an ambiguity in the rules interpretation puts him at a disadvantage, through to him rules lawyering with the best of them via email to try to bring down the front runner in the end game.

And even when you know what rules drive the game forward, and what ones to drive around, you may still not know what is happening in the game. Fog of war, hard to implement in board games, far easier in computer games, will shroud the map, letting you know a little of what is going on, but not enough. Incomplete information is an art lost these days to the single player game and almost entirely the province of multi-player, thanks to the rise of and game assistance tools in MMORPGs. Roguelikes are fighting a rear guard battle here, with randomly generated dungeons, permadeath and identify systems, but even some of the staunchest Angband players now advocate the elimination of identify, and full 'monster spoilers' available to all players. Which is a shame, because as poker and Demon's Souls, with its in game tip sharing, both demonstrate, incomplete information is a powerful and addictive game mechanic when done right.

Related to incomplete information, but important enough that it warrants separate discussion, is incorrect information - exemplified by the difficulty spike. Jeff Vogel argues strongly that you should never bushwhack your players; that is design a section of the game which they cannot complete at the point they reach it. I class this as incorrect information, because players will blithely waltz pasts the signs saying 'certain death here, do not enter!', the skulls, wet with fresh blood, the wall of helpful townsfolk blocking the entrance with prophecies of doom, with a notion in their head based on the difficulty of what the last challenge required, not what the next one will. The continued expenditure of millions on protecting us from the last terrorist threat, not the next one, shows us humans incapable of predicting terribly well, but very good at remembering what just happened. From a game theory point of view, we play using an optimisation strategy based on what we know, and when the strategy ends up depleting resources we had planned to keep for later, we find it difficult to continue.

Incorrect information is the most harmful when inappropriately in the user interface to the game. At some level, almost all computer games are about a user interface strategy. If we can design an AI to play the game perfectly, and simplify the UI to a single button press to start that AI, I would argue we still have a game, but the user interface to that game has been solved. At the other extreme, the complex button sequences and twitch reflexes of FPS or fighting games are a user interface hurdle that proves to be insurmountable for some potential players.

Moving beyond a discussion of simple user interface design, there are more subtle interface disparities between play at an intermediate level and advanced level, or between single player and multiplayer. I've argued elsewhere that Civilisation IV fails as a game on one level, because the elements of the game that it emphasizes in the user interface - a broad spread of technologies, boom or turtle strategies, building lots of interesting units - completely mismatch the strategies required at high level play - forest chopping, rushing strategies, the stack of death. If the optimal strategy is to have horse units built by turn 10, as you lower the difficulty level, you should be getting rushed by the AI with horse units at turn 11, then 12, and so on. Similarly, your single player game should usually be designed to make you better at multi-player, because the high level, interesting play typically only develops in multi-player some months after release. The newly introduced Dungeon Finder in World of Warcraft appears to be revolutionising the game, because it makes the tactics needed for the end game: the trinity of tank, healer, DPS - the easiest and most effective strategy for advancement at prior levels.

But what allows these differing levels of play in the first place? What makes for increasing levels of strategy, plays and counter plays? Even games with perfect information, minimised asymmetry and easily learned rules like Chess and Go, have almost unlimited scope for interesting play, because the rule set allows for a combinatorial explosion of possible game play spaces. These different from tic-tac-toe because there are too many possible combinations of moves for any one player to know the perfect strategy for any situation. Chess and Go differ from Starcraft and Streetfighter because the possible moves that have to been examined for exploits goes beyond the rock, paper, scissor choices of rush, turtle, boom or strike, block, throw.

Closely related to complexity is emergence, where behaviour that could not be predicted by the game designers, but can be discovered by the players appears in the game. This differs from complexity in the way that chess pieces don't change colour or float in the air when the board reaches a particular configuration, but it is possible to scale a building in Deus Ex or Half-Life using some well placed limpet mines. It is the provinces of speed runs and ROM programmers.

Whereas play is the province of mod designers and role players. We can always make a game more difficult, by choosing to make it more difficult, limiting ourselves artificially to a different set of standards, or changing the rules of the game and exploring the results. I'll be the nurse, you be the doctor this time - scrub as strength instead of weakness. Even for a seasoned play to winner like David Sirlin, play provides the opportunity for some well-needed research and development time. If I play as Blanka, can I find some bug or exploit against Guile, my favourite character, that an opponent in an upcoming tournament may try to use against me? What about if I blank on the day? Who should I choose instead if I don't make my crouch low punches reliably?

And finally, we can choose to extend play in the moment, for pleasure's sake. The day is dawning over Africa in Far Cry 2, so I'm going to walk to the next assassination, admiring the god rays filtering through the trees, the mist, the sniper lining up a bead on me... I know I should move on from Aeris, but I'm going to try to rescue her one last time. Yorda and I will sit here a moment, and watch the birds flock, even if it brings the darkness one step closer to taking her from me...

To summarise, games can be difficult because of:

1. Random number generators
2. Indeterminacy of outcomes due to unpredictable external forces
3. Other players
4. Complex risk vs. reward trade offs
5. Finite playing time
6. Self-limiting performance
7. Inequality
8. Asymmetry
9. Learning the rules
10. Incomplete information
11. Incorrect information
12. User interface
13. Disparity between beginning, mid and high level play
14. Complexity
15. Emergence
16. Play
17. Pleasure

So to ask how do we make a game harder, is to ask how we can vary these factors in an interesting way.

There's a whole lot here to take in, and I have skimmed over topic areas that warrant an article in themselves. This has been a diversion from the path we were taking, but an important one, and for part seven, I'll be getting back on track, and making a second attempt to talk about failure.

Friday, 22 January 2010

The Quest for Quests: Part Five (Failure)

You may want to start this series with part one, two, three or four.

Normally I write these article series in situ in the browser, using the java based text editing tool. But the article I was planning to write on failure felt like a more substantial topic, so I ended up creating an .rtf document in Text Edit and starting jotting down notes and thoughts about failure. It has been this document that has sat on my desktop for over two months, terrifyingly incomplete and unformed, since I finished part four of this series. A single word staring at me every time I started my computer.


Think of the fifth part of this article series as an ellipsis, rather than an admission of defeat. Travel forward, a little wiser, a little tender, to part six, where I'll be talking about a topic closely related to failure, and a little dearer to my heart: difficulty.

(Fret not, I intend to return to this at a later date).

Unangband 0.6.4-pre4 released

This is another pre-release of Unangband 0.6.4.

You can download the source code from You can download a precompiled Windows build from, a pre-compiled Mac OS/X build from and a precompiled Linux build from (Thanks to Mike, Th. G. and SaThaRiel - I've ended up using Mike's compile).

Please see the official web site for the full change log.

Thursday, 21 January 2010

Results for 'Should monsters surrender'; new poll

Thanks to everyone who voted (all 111 of you) and those perceptive enough to notice me giving up and putting a poll up was also an act of surrender.

The results were:

Always, instead of dying
2 (1%)
Sometimes, instead of dying
43 (38%)
Always, instead of fleeing
1 (0%)
Sometimes, instead of fleeing
39 (35%)
Always, if unable to flee
4 (3%)
Sometimes, if unable to flee
70 (63%)
Sometimes, if badly hurt and the player heals them
30 (27%)
If the player calls for surrender
47 (42%)
13 (11%)

I'll be putting in the most popular result as a feature before the release of Unangband 0.6.4. Monsters will sometimes surrender if they are unable to flee: this will depend on a saving throw based on your Charisma, and whether you have the birth_evil option enabled or not.

Two other options: sometimes, if badly hurt and the player heals them, and if the player calls for surrender, are available through the existing 'O'ffer code. I'll add the ability to offer nothing, and have badly injured monsters respond in some way as well.

I may allow the option to hold back on delivering a killing blow, by attacking a monster to disarm. Hmm...

The next poll is a chance to tell me what features of 0.6.4 you like the most so I know where to polish things up for the final release. If you haven't had a chance to play, feel free to tell me what sounds interesting.

Sunday, 17 January 2010

Unangband 0.6.4-pre3 released

This is probably the final prerelease before the Unangband 0.6.4 release.

You can download the source code from You can download a precompiled Windows build from or or a precompiled OS/X build from If someone could compile a Linux build for me would be much appreciated.

Please see the official website for further details.

Saturday, 16 January 2010

Using your imagination

One of the oft stated advantages of using ASCII graphics is that they free you up to use your imagination to picture the world around you.

Looking at the latest God of War III screenshots, my imagination feels entirely inadequate...

Friday, 15 January 2010

A note for the Master

=== The torn out bookplate from the front of your first spell book ===

These are words printed sideways and on top of each other in a crumbling
ink that resembles dried blood. You struggle to make them out:

You, who are born to be a true Master, hold the very first of your
great works in your hands. The spells you find herein do not have the
overt flamboyance of fire and lightning, but neither will your hands
and face end up covered in soot, and your hair will remain unfrazzled and
not stand on its ends like it does some idiot wizzards and others. There
are, however, important errors which you can make as a Master, and hence
you should pay attention to the notes I have made:

- Detect evil will find few, if any monsters when you first start out
on your journey. But the most powerful and dangerous monsters you find
will be evil, and should you survive long, it will become an invaluable

- Darkness will allow you to escape monsters which need lite to find
you - the spell will also shutter your lantern and smother your torch -
but you will have to put away your magical staff and any other light
sources in order to benefit from this effect.

- Shadowstep requires you be in darkness, and will only transport
you to similarly dark places. If you are not standing in such a
region, attempting to cast this spell will not cost you time or mana.
Since corridors are usually dark, and rooms are usually lit, this is
a safer method of escape than some alternatives.

- Chill will be your mainstay spell to start with. It takes several
turns to apply its damaging effects so is most effective against those
monsters which are immobile or when there are several moving through
a corridor towards you. Be careful not to walk into the effects of
chill yourself!

- Stinging a target may initially appear less effective than your
Chill spell. But in a situation when you are running low on mana, a
well delivered set of stings will be a much more effecient use of
this resource against a single target.

- Find Familiar will summon a randomly chosen creature of the wild
to be at your side. The familiar will grow in power with you, and
you can dictate the additional powers it gains. Casting the spell
again while your familiar is nearby will detect it for you; after
a while your familiar will leave your service but it is easily
summoned again.

Beware: You will be given only one such gift and should your
familiar die, you will not be able to replace it!

- Saruman the Wise

A note for the Apprentice


There are words printed impossibly finely on the inside of this

The challenge of a druid is looking beyond the sparks of lightning
you find herein echo the mysteries of nature in their subtlety.

monsters most likely to resist lightning are also the most
likely to be constructed of dead things, undetectable to your
magic. So beware!

- A Dryad's Embrace requires you be next to natural things or
running water and will only transport you to similar areas.
this spell will not cost you time or mana.

- Moonlight does no damage to monsters vulnerable to sunlight,
except for the shards of random starlight it casts around you.
It is, however, more effective at lighting natural areas than
wizardly magics, but less useful in lighting the interiors of
buildings and rooms.

nearby. You'll find this useful to assist a number of druidic

damage if the target is standing in water. Cold and frost
attacks are likewise improved, but the potency of acid and fire
attacks are halved in the same situation.

- Stinging a target may initially appear less effective than
your Lightning Sparks. But in a situation when you are running
efficient use of this resource against a single target.

- Warping Wood may initially appear to provide little use beyond
breaking open doors and wooden objects. But a cunning druid will
vulnerable with their ammunition depleted.

You will need to master a reliable path of escape should trouble

- Radagast the Brown

Thursday, 14 January 2010

Wooden you?

In careless disregard of the physical axioms of the universe, I included a Wooden golem in the pre2 release that failed to be, and I quote 'lumbering'.

Since it is required by one of the fundamental forces that all Wooden golems are lumbering, the pre2 release had some subtle but important bugs - one of which manifested itself straight away as being unable to cast the only spell that both competition characters had in common.

So instead of doing another release within 24 hours, I've just silently updated the source and Windows binaries - the OS/X pre2 binary is also now available with these fixes included. Please download again if you've already downloaded the pre2 release. My apologies.

You'll be happy to notice that I've included a section in the character dump which now lists the deepest unique killed.

Unangband Competition 81 & 82: Master vs Apprentice





Wednesday, 13 January 2010

Unangband 0.6.4-pre2 released

This is the second preview release of Unangband 0.6.4



See the official web site for more details.

Do no evil

I have especially fond memories of the fall of the Berlin wall, because I was studying German in high school at the time. The collapse of the Soviet Union that followed was a profound and fundamental change to the lives of many hundreds of millions of people - and a beacon of hope to many millions more who still live in the undemocratic and totalitarian regimes around the world. I have been fortunate to make friends with a number of people from countries that were on the other side of the wall - an impossibility for most of the West in the generation prior to mine.

What has been disheartening since then is the loss of the ability and faith of democratic states, especially the leaders of those states, in the fundamental and profound truth in the strength of democracy and preservation of human rights. This has been felt most keenly in the abrogation of these universal rights for a minority - even as a terrorist or mass murderer, you should still be entitled to a fair trial, and just treatment - a necessity many have forgotten.

The failure of state actors to uphold these necessary rights has meant in many instances, non governmental organisations have stepped in the breach. When we say NGO, we typically think of a volunteer or charitable organisation, but there is nothing prohibiting a for profit business making the same decisions and potentially the same contributions.

I would like to thank the US based executives of Google for their brave decision to take the moral high ground for the rights of the few - a decision, though unlikely, may help lead to another wall falling.

Tuesday, 12 January 2010

Altering permadeath in Unangband

One feature that has crept into Unangband during the 0.6.3 development cycle is making permadeath an optional experience.

This was an entirely unintended side effect. One of my co-developers added an auto-save function before leaving a level because level generation was quite unstable while I was heavily revising the dungeon generation code - it's a lot more stable now. If level generation crashed completely, there is now a save file with a .bkp extension which you can helpfully reload to end up just at the point before you left the level.

Now, if you start exploring a new level and die horribly, it's just like having a save game at the start of the level which you can revert to which places you on the stairs from the previous level. And, conveniently, there's no in-game record of you using this backup file, so Unangband has ended up like many other games and allows you to go back to a predefined check point and try again.

So prior to 0.6.4 final, I'm going to have to do a couple of steps to make this a more 'official' process. The first one is to mark the save file to note how many times you've recovered to the backup - so it is fair on other players who choose not to use this.

The second is I need to consider whether to ensure that if you reload this file, you end up on an entirely newly generated level instead of at the last level - and that level is different every time you recover to the save file - or whether you always end up on the same new level. There's several different issues here, around player expectation and various save scumming behaviour. Is it better to have a different level every time, and leave the game open to abusive practises of reverting to the save file if the new level isn't any good, or let the player play out the same level multiple times and try to improve whether they can survive? I'm leaning towards the repeating the same level because it matches what you expect to happen in this instance.

The third is to make this an official option so that it happens automatically if you choose the birth_no_permadeath option. It won't be a completely smooth user interface because Unangband is currently not re-entrant - you have to quit the game and restart to reload the save file.

The fourth is to allow the player to reload a save file partway through a level without having to die. Rather than just make this a menu option, I'm going to let an in game item do this for you.

Alter Reality is an example of a feature that was developer-led rather than game design-led. It's very easy from a programmer point of view to add - it just involves invoking the level generation code (actually the level leaving code). But from a game design point of view, it's horribly abusive. So I'm incredibly tempted to have Alter Reality load the save file instead, letting you replay the level from the start. It feels thematically stronger, and I'm a big fan of Philip K Dick, if not the movie which is merely above average Hollywood fare.

Monday, 11 January 2010

Unangband 0.6.4-pre released

This is a preview release of Unangband 0.6.4

You can download the source code from You can download a precompiled Windows build from or a precompiled OS/X build from

Please see the official website for more details.

Sunday, 10 January 2010

The Unday Papers

Undays* are for finishing staining the deck of the house, barbecuing some kangaroo steaks for lunch and waiting for an ftp server to come back up so I can do the Unangband 0.6.4 pre-release.

Let's try and avoid mentioning too much more of my personal life and have a look at what's happened on the SVN server this week:

  • We've gone from rev 2747 to 2792 - that's a total of 45 commits. I've been the only developer to contribute this week, which is hardly surprising given the amount of code changes occuring at the moment. Since I've done most of the coding on the train to and from work without roaming Internet, the commits haven't been especially granular either, so it's undoubtedly hard to follow what's going on.
  • The big change for the week has been the attempt to have neutral monsters in the game - monsters which don't necessarily attack the player outright. I've reused the MFLAG_TOWN monster attribute to indicate this since this flag was already doing most of the work already. I've cleaned up the tell_allies_x set of functions to use a single tell_allies_info function with various hook functions - this had been on my to do list for some time. Quite a bit of the AI code has been made more robust as a result, and I've found and fixed few bugs so you'll hear monsters talking a bit more now.
  • At the moment, neutral monsters are only generated in town, but it is possible to convert them elsewhere from hostile to neutral by 'O'ffering them something. The offer command was the initial driver for neutrality - I figured out I needed a command to give items to allied monsters, and it felt like a natural extension to be able to sell items to monsters in town, and bribe monsters in the dungeon. The actual 'O'ffer code has been anything but natural however - it looks ugly, and plays out weirdly, and I spent most of Friday night and Saturday trying to beat it into shape.
  • The reason I needed a command to give items to allied monsters, is that I added commands to take items from allies or order them to drop items. This was incredibly easy - just an some copying and pasting of code in the get_item() function in object1.c, add some new flags to the do_cmd_item_type table in tables.c, and code to the inven_takeoff command in object2.c to handle the case of taking items off another monster instead of yourself. I had initially guessed I'd have to do the reverse - add a command 'O'rder a monster to give you items - but as soon as I made the connection between 't'aking off items from yourself and taking an item off an ally and realised the same code and command could be used for both functions, the solution was obvious.
  • While I was in melee2.c I happened to stare at the monster waking up code in recover_monster() and put in a one liner that meant instead of waking up by x amount if the player was sneaking, monsters instead woke up by a random number from 0 to x-1 instead. Sneaking had already been in the game, but only as a way of specifying that you didn't want your allies to attack sleeping monsters. It was time, with neutral monsters you might want to avoid now in the game, for sneaking to become more useful.
  • I took and break and cleaned the pool and realised while doing getting the gum tree leaves out of the sump, what bad behaviour the above code change would encourage in the players. People would unnecessarily try to min/max whether they were sneaking around the dungeon in general as avoiding waking monsters up as this is such an important part of game play for Angband and variants. So I came back to the code and instead of a random value, I capped the maximum x a monster could wake up by while the player was sneaking, so that it would only have any effect if the player was aware of the monster and it was less than 5 grids away. This is designed specifically to allow a player to sneak up to or past a room full of sleeping monsters, and provide advantages in no other situation.
  • I decided, incorrectly as it turns out, to have sneaking prevent other actions that would create noise, like shooting, casting spells and so on by marking these actions in with a CONDITION_NO_SNEAKING in the do_cmd_item_type table (this table has been a real source of inspiration this week). But the UI was annoying for this - you kept getting told you couldn't do stuff while you sneaked - so I instead just assume that the player doesn't want to sneak if they do something noisy. The trick to this is keep p_ptr->sneaking set if the player is trying to be sneaky in general, and then mark them with p_ptr->not_sneaking if they do an action that isn't sneaky. We then check both p_ptr->sneaking and p_ptr->not_sneaking to see if the player is actually quiet during the monster processing part of the turn, and clear p_ptr->not_sneaking at the start of the player's turn. I've used similar tricks elsewhere with blocking, dodging and charging.
  • Sneaking prevents dodging and charging, for those people looking for the downside to doing it all the time. And since you automatically dodge if you move normally, sneaking makes you more vulnerable to ranged attacks and spells. You can run while you're sneaking to indicate you'd like to dodge instead (Shift-move).
  • The ability to steal from monsters is another consequence both the interacting with monster inventory and sneaking changes. I'm glad I had looked at the wake up code before implementing this, because otherwise the stealing code would be much less clean. Separating out the generation of a monster's inventory - monster_drop() - from the monster_death code makes this a no brainer. The MFLAG_MADE flag - used to prevent the player abusing cloning or breeding monsters to farm them for drops - gets re-used here naturally.
  • I'm going to overload the 's'earch command so you'll be able to 's'teal if you're next to a monster and 's'earch otherwise. I'll have to make it easy to specify to search if you're next to a monster, as the few times you'll want to do this, you'll really want to do this.
  • The other big change this week has been splitting up the mage spell books so that there is a 'low' and 'high' version of each of the dungeon spell books. This is purely a game balance exercise, as there were a huge number of spells in most of these books which made playing a high level mage much less of a challenge than I had intended. You'll now have to carry a lot more books if you want a really wide spell selection. I've also added an extra spell book to each mage school and move the spells around the school books for the same reason.
  • Long standing bugs fixed: Detection spells now refresh the screen correctly when cast. Ohmygod, I hadn't finished implementing the rogue class. Now fixed.
  • New spells this week: Drain Mana. Raise Familiar. Second Sight. New items this week: About 30 new mage spell books added. New monsters this week: None, but the behaviour of town monsters has changed in many subtle ways, so keep alert.
  • There's been lots of other small changes, including UI improvements during character creation, so as always, check the SVN logs for details.
So I can't promise that every week is going to be as interesting as this one, development wise. Or in my personal life. Like the fact my wife might be...



Saturday, 9 January 2010

New poll 'Should monsters surrender?'

I give up. Have your vote.

Is that the extent of your largess? You'd better have more for me, and soon...

I was going to do a pre-release of Unangband 0.6.4 tonight, but I've spent the last few hours writing monster response sentences like the one above in order to ensure bribing monsters doesn't get too repetitive.

Feel free to download from SVN and poke at the obvious mistakes I've missed until I do release... some time this weekend.

(I also need a volunteer to run a good Valgrind on dungeon generation. There's a buffer overrun somewhere which I can't pick up on Windows / Mac OSX. Thanks in advance.).

Friday, 8 January 2010

Hi Kotaku

Feel free to have a look around and if you do go home, say hi to one of my top five games journalists for me...

Moral Ambiguity in Game Design: A Follow Up


There's two fundamental issues with the argument I initially made.















Thursday, 7 January 2010

Moral Ambiguity in Game Design

I recently asked should monsters in Unangband be able to surrender to the player? This was driven primarily by the desire to see whether the act of surrendering itself was an interesting game mechanic - does having a monster throwing it's hands in the air and giving up disrupt the player's enjoyment of the game, or increase it?

But one response in the comments touched on the much more interesting area of the moral choices involved in allowing surrender - that is, if I implement monsters surrendering, I should be careful to include an alignment system that enforces the player's actions towards the resulting prisoners of war. A simple approach would be killing surrendered monsters should tip the player towards evil, and letting them live should tip the player towards good. But the implication is that the player's moral choices should be rewarded and enforced by a game mechanic.

And this, in my opinion, is a serious misstep in understanding how morality in games should work.

By implementing a moral choice as an in game mechanic, you rob the choice of real consequence. The player stops viewing this decision as ambiguous shades of grey that reflect on them as a person, and starts to min max the benefits of the decision according to the game rules. And they'll usually adopt the position either explicitly or implicitly encouraged by the game designer (more correctly: the emergent advantageous position of the rules created by the game designer) regardless of whether that position correlates with their morals, or refutes them.

Take a complex moral choice I've written about before: the choice of delivering a coup de grace to a fallen enemy. In S.T.A.L.K.E.R: Shadow of Chernobyl there is no in game reason to do so: you are free to leave a fallen Stalker lying on the ground cursing and suffering. Whereas in Far Cry 2, the equivalent injured soldiers will always pull out a pistol and start shooting you - forcing you shoot back. Morally, the unpunished greys of S.T.A.L.K.E.R are far more interesting from the player's perspective because there is a real choice involved.

You may argue that if there are no in game consequences, the choices are trivialized. But this misses the opportunity for the player to make a decision that is personally meaningful - that is, to play out the situation in whichever way resonates to them, or maybe creates dissonance. I am thinking of the term role-playing in its original sense - without consequences, you are free to adopt whatever persona makes sense to you at the time, guiding yourself by instinct instead of forethought. It is this specific reason of not wanting to consider consequence in the moment that there is such an emphasis on creating a safe environment when working with improvisation in theatre.

Being rewarded or punished for moral trespass is the kind of slippery slope of justification that people are innately comfortable with - the Stanford Prison experiment being the canonical example - and presenting morality in games should challenge the player's assumptions, not reinforce them. In game consequences weakened the power of Bioshock's Little Sister euthanasia, and the watered down choices of the 'No Russian' level in Modern Warfare 2 where anything outside of the boundaries of 'shoot civilians' and 'don't shoot at all' resulted in immediate game over. The greatest accomplishment of the Grand Theft Auto series of games is creating a sandbox without imposed moral judgement.

You are still free to recognize moral choice within the game - which is why roguelikes have modes like iron man, vows and challenge games - but these are self-imposed rather than built by the game designer, entitling the player to bragging rights and feeling of moral superiority if they succeed while working within these limits. The canonical metagame decision is, of course, difficulty level which does drastically alter the game play in a way that seems to contradict what I have argued moral decisions should do. But again, this is a player initiated decision, which very few games delivery judgement on (the Ninja Dog difficulty level in the later Ninja Gaiden's being one notable exception). Plenty of game players will judge you, on the other hand, but that's the consequence of playing games in the unsafe real world.

Should monsters surrender?

I'm going to be doing a pre-release of Unangband 0.6.4 this weekend*, and I have a quick game play question for you. Should monsters surrender?

I'm going to be implementing some changes to the monster AI to allow monsters to be bribed, which will allow a 'not allied but not trying to kill you either' state for monsters to be in. They'll hang around suspiciously and follow you, they won't target you with spell attacks or try to injure you with melee, and they'll either betray you or leave after some period of time, as well as periodically asking for more money or gifts.

Now this AI could also be used to allow a monster to surrender to you if you have sufficiently injured it. Unfortunately, this is directly contrary to a lot of the design and game play for a roguelike - you basically want to be able to kill stuff - so I'm interested in whether having monsters surrender could ever be an interesting choice. Do you know of any games where the surrender mechanic does work successfully?

Don't worry if you're a hard core roguelike player. I've just added a birth_evil option which, among other things, will switch the surrender mechanic off completely if I do implement it.

* Brief overview for those wondering what will be in the new version: Persistent levels won't be in until at least 0.6.5, but there's lots of fixes to dungeon generation, rebalancing of mage spell books, and some other interesting stuff I've been able to implement.

Tuesday, 5 January 2010

The Torchlight Thread

I took the opportunity over the Christmas break to play Torchlight - and my thoughts on playing it still haven't crystallized into an actual opinion about the game.

That's a little surprising given Torchlight is what might be considered a commercial version of the genre I design in. I suspect I'm still unsure of what I think, because the game really isn't a roguelike. I'm basing this on a much more intuitive feel than the Berlin Interpretation, and as a result, I reserve the right to change that view at a later date.

So instead, I'd like to solicit your opinions. Have you been playing Torchlight, and if so, what do you think? Feel free to comment below and try and influence my unborn non-opinion.

(Please note I'm playing on Very Hard - as I suspect difficulty level will form part of this discussion).

Monday, 4 January 2010

Indie developer Derek Yu is DOOOMED!!!!!!!!

And as a result has designed a tile set that will be used in an upcoming release of DoomRL.

You may also like the Doom fan art currently on his blog.

Puzzle Rogue

I have enormous respect for many roguelike developers' ability to create multiple, complete roguelikes in the time I have yet to finish one, but one developer I hold in particular esteem, because he also works with Angband variants.

Antoine, creator of Guild, Ironband and Quickband has just released a 7ishDRL Puzzle Rogue, based on the idea of creating a puzzle game using the roguelike conventions and features. He announced it following approximately 7 days worth of coding effort - it doesn't qualify as a 'pure' 7DRL because those days were not consecutive - and you can download the Windows binary from here. You can also follow the thread on Puzzle Rogue on rgrd.

I'm interested in the idea of puzzles embedded in a larger roguelike, especially if the puzzles can be procedurally generated. The Sokoban levels in Nethack are one example, and I've been toying with several others in Unangband. Antoine has taken a slightly different direction, and, as he notes, the difficulty with his approach is the overhead of creating the levels.

It's interesting to note that the developer of Eyangband, Eytan Zweig, went on to contribute to DROD (Deadly Rooms of Death), suggesting there's considerable overlap in the design skills required for each genre.

Friday, 1 January 2010

Full Results for Ascii Dreams Roguelike of the Year 2009

I've got 99 roguelikes and a Dwarf ain't one...

For the third year running, there have been more roguelikes being written, played and voted for. Thanks to all 505 of you who voted this year. I am overwhelmed at the breadth and depth of competition, and look forward to a bumper crop again next year.

The full results were:

4 (0%)
1 (0%)
1 (0%)
1 (0%)
24 (4%)
1 (0%)
0 (0%)
Blast Tactics
0 (0%)
8 (1%)
16 (3%)
Caverns of Xaskazien
0 (0%)
1 (0%)
1 (0%)
2 (0%)
2 (0%)
Cypress Tree Manor
0 (0%)
8 (1%)
Dawn of the Dead
1 (0%)
The Dawn of the Dead II
0 (0%)
The Dawn of the Dead III
3 (0%)
Dimension Dungeon
0 (0%)
3 (0%)
227 (44%)
0 (0%)
2 (0%)
Dungeon Crawl Stone Soup
170 (33%)
8 (1%)
5 (0%)
32 (6%)
Epic! Monster Quest: Hyper
0 (0%)
Escape from Lab 42
3 (0%)
Excitable Digger
2 (0%)
1 (0%)
Faerie's Lair
0 (0%)
First Age Angband
15 (2%)
Fortress of the Goblin King
3 (0%)
Fruits of the Forest
3 (0%)
0 (0%)
27 (5%)
1 (0%)
1 (0%)
1 (0%)
3 (0%)
Grendel's Mother
0 (0%)
3 (0%)
0 (0%)
5 (0%)
Invader Tactics
0 (0%)
0 (0%)
Incursion: Halls of the Goblin King
69 (13%)
4 (0%)
3 (0%)
Jacob's Matrix
7 (1%)
15 (2%)
Liberal Crime Squad
12 (2%)
Lords of DarkHall
2 (0%)
Mage Guild
10 (1%)
Martin's Dungeon Bash
2 (0%)
5 (0%)
0 (0%)
Mines of Morgoth
2 (0%)
Minute Dungeon
3 (0%)
6 (1%)
0 (0%)
5 (0%)
1 (0%)
1 (0%)
PBR: Peleron's Briliant Rebirth
5 (0%)
1 (0%)
0 (0%)
Plains of Sedia
2 (0%)
0 (0%)
48 (9%)
Privateer: Ascii Sector
19 (3%)
17 (3%)
9 (1%)
0 (0%)
Rogue Touch
2 (0%)
Sane Roguelike
0 (0%)
6 (1%)
1 (0%)
11 (2%)
2 (0%)
The Tombs of Asciiroth
1 (0%)
Tomb of the Aztecs
0 (0%)
Tomb of Rawdin
0 (0%)
17 (3%)
Tower of Druaga
1 (0%)
Triangle Wizard
18 (3%)
1 (0%)
21 (4%)
2 (0%)
12 (2%)
0 (0%)
Warp Rogue
3 (0%)
8 (1%)
When Zombies Attack!
0 (0%)
1 (0%)
11 (2%)
Zot Defense
11 (2%)