Showing posts with label roguelike. Show all posts
Showing posts with label roguelike. Show all posts

Tuesday, June 19, 2012

Roguelikes for mobile - IRDC 2012


Introduction

The content of this post was originally intended to be presented during the International Roguelike Developers Conference 2012 in London. Due to me finishing the talk in the evening after the first day and the second day of IRDC being primarily focused on a roguelike showcase I never got a chance to present this. So here it is in a version suitable for a blog post, my thoughts on roguelikes for mobile.

The mobile use-case

I’m gonna start all this by introducing the mobile use-case. It seems to me that everywhere I look people have phones in their hands. Be it on the train, bus or god forbid in the car. I see them in the hands of people in cafes, restaurants and in the park. In the local grocery store and in the waiting room at the dentist. I also read somewhere that 75% of American mobile phone users admit to using their phones while on the toilet. And according to this ad we even bring our phones when we take a bath:



People seem to find many opportunities each day to use their phones, although often in short sessions, in-between doing other things.

Everyone has a smart phone

In 2011 there was an estimated 1.08 billion smart phones in use and if you include feature phones you triple that number. According to Google an astounding 700 000 Android devices are activated every day. That is a mind boggling number. Now, it’s not as if the active number of smart phones increase at a rate of 700 000 devices per day. People swap out their old phones regularly, some even do it several times a year. And we use our phones in so many different ways that we almost forget that they can be used to do regular voice calls as well.

We e-mail and send text and picture messages. We browse the web and at the current rate mobile web browsing will overtake desktop traffic in 2014. In many developing countries where access to internet via fiber or ADSL is very limited peoples first encounter with the internet is via mobile phones and not computers. One third of smartphone users use social networks on their phones. We also consume music and video content with YouTube having 200 million views per day made from mobile phones.

On top of all of the above we also use a whole lot of apps and play games, but not a lot of roguelikes. Why is that and what can we do about it?

Why are there so few roguelikes for mobile?

This is an interesting question. We’ve clearly seen that people take every opportunity they’re given to whip up their phone and start using apps or internet services. My personal opinion is that traditional roguelikes aren’t suited for mobile. Here’s why:

The space shuttle manual

Most traditional roguelikes have a manual several pages long and a list of commands more suited for controlling a space shuttle. Angband and Crawl have more than a hundred commands listed in their manuals. A hundred! Try to get that to work on a devices that doesn’t even have a proper keyboard...

Long game sessions vs coffee break roguelikes

Game sessions in traditional roguelikes are often very long, measured in days and weeks, not minutes or hours. Another related property of most traditional roguelikes is that they require a lot of concentration with even the smallest mistake being punished by death. Neither of these properties work well with the “in-between” use-case. We should look more to what is often referred to as “coffee break roguelikes” when we think of how to design a roguelike for mobile. Games that are quick to pick up and play and last for not much longer than a few hours.

Roguelikes for non-roguelike players

Relating a bit to the accessibility of coffee break roguelikes is the whole discussion about how to design a roguelike for players who have never heard of the term roguelike. Mobile phones are mass market devices and in many ways even more so than computers. People who did not own a computer or maybe wasn’t even born when roguelikes were the most popular now have devices in their pockets that outperform what people used to play roguelikes on 15 to 20 years ago. Put these people in front of a roguelike when they are used to playing Angry Birds, Diablo or Modern Warfare... Darren Grey recently posted a very interesting write-up of his thoughts on how to design roguelikes for non-roguelikers. It’s a very interesting read and it really puts forward a lot of good arguments for how to make roguelikes more accessible for players new to the whole genre. Coincidentally a lot of the stuff makes playing roguelikes on mobile devices a lot more bearable as well.

Programming languages and cross platform complexity

Finally there’s another limiting factor in that the choice of programming languages differ a bit from what roguelike developers usually prefer. On iPhone you use Objective-C, on Android you use Java and on Windows Phone you use C#. A lot of roguelike projects still use C/C++ and some kind of terminal/curses/libTCOD output and that doesn’t make them particularly easy to port to mobile. Now you could target mobile only or write in a language that offers cross platform functionality from the start (more on that later), but you would still be forced to deal with the complexity of writing cross-platform games. This leads us to the final impediment for writing apps and games for mobile, namely device fragmentation.

Device fragmentation

Device fragmentation is a bit of a buzzword and something that Apple fans usually like to throw as fuel on the fire when they discuss iPhone versus Android. For me device fragmentation is “the ability to write once and run anywhere” and it’s caused by both software and hardware diversity.

Hardware diversity

If we look at hardware diversity we find that:

  • Screen resolutions on mobile devices range from 320x240 pixels to 1980x1080
  • Input options vary from a numeric keypad to a full QWERTY keypad with different variants of virtual keyboards in between as well as proper gamepads
  • CPU performance vary from single core CPUs running at a couple of hundred Mhz to quad core CPUs running at gigahertz speed
  • Graphics performance vary from basic 2D graphics to PS2 3D quality or better
  • Available memory range from around 300kb to 2Gb


Software diversity

When it comes to software diversity you have the obvious phone OS diversity with Android and iOS being the most common and several others such as Windows Phone, Blackberry, J2ME, Symbian and WebOS.

To make matters worse each OS comes in many flavors and there are many versions in use at any time. Writing for Android forces you to take into account at least a handful OS versions to cover the most common ones in use today. iOS also comes in several versions but it’s a less daunting task to write for iOS since the hardware diversity is much smaller compared to Android.

Fragmentation visualized

If you want a good visualization of exactly how diverse the Android landscape is then have a look at the OpenSignalMaps survey. During a 6 month period they gathered statistics from around 700.000 devices and found almost 4000 unique Android devices with a wide variety of Android OS versions and screen resolutions.

Ok, ok, I get it. The mobile landscape is fragmented. What can I do about it?

There are several languages and tools that have a “write once, run anywhere” offer. Here are some of the more well known:

  • Adobe Flash (Actionscript targeting Desktop, Android and iOS)
  • Haxe/NME (haxe targeting Desktop, Android, iOS, webOS and Blackberry)
  • Google PlayN (Java targeting Desktop, Android, iOS and HTML5)
  • PhoneGap (JavaScript targeting Android, iOS, Windows Phone, Blackberry, Symbian and many more)
  • Appcelerator (JavaScript targeting Android, iOS and HTML5)
  • MoSync (C/C++ targeting Android, iOS, Windows Phone, J2ME, Symbian and more)


Doing it on your own

If you don’t want to use one of the languages and platforms listed above you can do a lot of the work by hand. If you separate your engine from the platform specific stuff like drawing to the screen, doing file I/O and handling input and if provide a layer of abstraction for these things it becomes a matter of rewriting the platform specific stuff while reusing the engine. This is what I do in Dweller, but it has its disadvantages. First of all you need to pick a language that is available on all platforms. I chose Java a long time ago and this does prevent me from porting to some platforms. C would have been a better choice, as Jeff Lait did with POWDER. At IRDC 2012 Jeff gave a very interesting talk on how he goes about porting POWDER. Jeff talks about the concept of bedrock programming and finding the right level of abstraction to make porting as simple as possible.

Designing a touch friendly UI

A finger is not a mouse pointer

The first thing you need to accept when you’re designing a touch UI is that a finger is not a mouse pointer. Don’t ever expect the same kind of accuracy from a touch and a click. What this means is that you can’t clutter your UI with tiny buttons as the user most likely will misclick a lot. What you also need to do is to make sure that the physical size of UI elements is the same regardless of screen resolution or screen size. Don’t ever set buttons and other UI elements to absolute pixel sizes. Android has a concept of “density independent pixels” mapped to the “dp” unit. If you specify a button to be 50dp high it will be of more or less the same physical size on all Android devices, it doesn’t matter if it’s a 3.3” or 4.7” or 10” display with a resolution of 320x240, 800x640 or 1980x1080 pixels. You should use the same kind of scaling of UI elements in your roguelike.

Adaptive user interface

You should create a user interface that adapts to the users screen size and orientation. Rearranging UI elements when the device goes from portrait to landscape mode and vice versa is a good idea. On low res screens you should also consider hiding UI elements that aren’t critical or possibly have UI elements change how they are rendered depending on screen resolution.

One handed design

In my opinion you shouldn’t expect players of mobile games to have both hands available. They may be standing on the bus or train and need the other hand free to either hold on or carry a bag. A lot of mobile games aren’t playable with one hand and with the current trend of screen sizes of 4.3 inch or more it’s also becoming physically difficult to reach everywhere on the screen with only one hand. Still, I think it’s a good ambition to aim for.

Streamline interaction design

Minimize amount of UI interaction needed

You should try to reduce the number of interactions needed to reach important or often used functions within your game. A touch interaction is a lot more expensive for the user compared to a mouse click.

Automatic actions

It might also be a good idea to automate some things to remove the need for user interaction. Darren Grey suggests that the use of stairs is an automatic action. This is a good idea, but it requires stairs to be put out of the field of play, typically in walls, especially if you have stairs in one cell wide corridors. Automatic pickup of some/all items should also be considered.

Automating equip and possibly also getting rid of the inventory completely as Ido Yehieli and Ruari O’ Sullivan are doing with Cardinal Quest II is yet another way of streamlining the interaction design.

Another thing that can be automated is targeting when using missile weapons and spells. If the player doesn’t have a previous target it makes sense to automatically target the closest enemy.

Optimize your mobile application

Even if some of the high end devices out there are capable of some really amazing stuff graphics and performance wise there really is not other way around it than to optimize and be smart about what you do and when if you want to offer a good experience for all your users, even the ones with a phone two or three years old.

With this in mind you shouldn’t redraw everything every frame. Use bitmap caching to speed up drawing of rarely modified but complex graphical elements.

You should also beware of object creation as it is costly in many languages. This should of course be a best practice everywhere, not only on mobile, but its effects become more obvious on low end mobile devices. Roguelikes usually have extensive use of textual information with verbose message logs, inventory, character screens and so on. Building these strings can be costly as it often involve a lot of string concatenation. On low end devices, especially J2ME, this can be devastating to performance and memory use.

Test on device!

I’m going to end this rather lengthy post with a few words of wisdom regarding testing. First of all, test on device as much as possible! Emulators only take you halfway as they rarely emulate actual device behavior and performance accurately. It is my experience that things like file I/O speeds are often way slower on device than in an emulator. Rendering performance is another place where an actual device often is much slower than an emulator. The Android emulator is probably the one closest to a real device, but even then tests on device should be preferred.

Also keep in mind that testing a touch UI using a mouse is not the same as with your finger!

Monday, May 21, 2012

Roguelike Radio #35

Roguelike Radio #35 is out. In this episode Darren Grey, Ido Yehieli, Andrew Doull and Keith Burgun discuss Diablo and Diablo like games and how they relate to roguelikes. It's a really interesting episode and there's some really good discussions in the comments section.

Monday, March 19, 2012

2012 7DRL competition summary

The 7DRL competition of 2012 officially finished yesterday (18th of March). There was a record number of announced roguelikes this year. Here's the full list (let me know if I missed any):

Successful 7DRLs (63)
2149RL by Adam Piskel
AppRogue by vwood
Ascension of the Drillworms by Sebastian Steinhauer
Ascent Into the Depths of Beyond by Jaldhar
AsylumRL by scootah
Beyond the Light (formerly Daybreak) by Joe M
Bone Builder by Goblinz (TE4 mod)
Cave Chop by Martin Read
Cogmind by Josh Ge
Dark Valhalla by Legend
Das Schurke Boot by John Maag
Dead Night Forest Chapter 2: The Lost Caravan by Edwin DeNicholas
Drakefire Chasm by Tanthie
DuneRL by Draconis
Emet by jab
Equal in Death (blood-arbiter) by yufra (TE4 mod)
Escape from the Vault by eggmceye
Fictional Roguelike by Tritax
Fragile Wrath by Konstantin Stupnik
Fuel (formerly Space Miner) by Ido Yehieli
GatewayRL by kipar
Hellmouth by Eronarn
Hope by slashie
HunterRL by Mosenzov
HyperRogue II by Z
I rule, you rule, we all rule old-school Hyrule by Trystan Spangler
Infiniverse by Tapio
JaggedRL by Michael Curran
Jelly by sheep
Kaiju Roguelike by Jason Pickering
Kitchen Masters by Sammage
Life of Sir Pointsalot by Geeze
LinLem's Vague Adventure Roguelike by Mike "LinLem" W
Locks by zurn
Me Against the Mutants by Team Rat King
Mont Asall by OceansDream
Mujahid by pat
Mutant Aliens by srd
Nightfall by numeron
phage by Pawel Kowalczyk (TE4 mod)
Porta Lucis by Chris Whitman
Professional Sword Tester the Roguelike by Oohara Yuuma
Revenge on a Toy Factory by Derrick Creamer
Roadlike by Sos Sowoski
RoboCaptain by heroicfisticuffs
Ruins of Kal Raman by tndwolf
Shadow Rogue by Orkus Malorkus
Smooth Rogue by peous
Steel Knights by psy_womvats
SUN CRUSHER!!! by JO
Swamp Monster by Craig Turner
Sword in Hand by Jeff Lait
The Adventurer's Guild by nolithius
The Challenge! by XLambda
The Death of Juga t'Dy (formerly TurnRL) by ivanah
The Well of Enchantments by IBOL
Top Dog by kbmonkey
TrapRL by RedMike
Turambar by Legend of Angband
Waaghammer by corremn
Warden by magikmw
Wyrm by deej
Zaga-33 by Michael "Brog" Brough

Failed (21)
Antigen by John Leffingwell
Chosen by Will Robinson
Cyber Prison Escape by Dominic Millar
DescentRL by Jan Pobrislo
Dungeon of Disease by Lunaritian
Forgerl by Thomas Larsen
Gods of Catan by steev
Great Mystery by George Oliver
InfestoRL by magmacrab
Knighthood by Joshua Sigona
Lakhnauti by Joshua Day
MarioRL by NeedsFoodBadly
MechRL by Kevin Mees
Pit of Hate by Walter Landry
Restless by dock
Roguery by zzajin (will be a 14DRL)
Rogue Rage by Darren Grey
Rogues Wanted by Horse Guy
Star Rogue by Arannis
TLOK2 by Miikka Kilkkilä and Simo Rinne
YASR by korri

Unaccounted for (2)
Backwoods by William Fehling
Bullet Hell RL - Daniel Miller

Tuesday, March 13, 2012

Dilluting the term roguelike

I think the term roguelike has been dilluted these last few years. The roguelike genre is more popular than ever with several commercial roguelikes making a lot of noise in the indie community. In my opinion it is because of this recent success that the term roguelike has become almost like a buzzword and games that would never ever have been considered a roguelike three or four years now proudly claim roguelike heritage.

Take TowerClimb for instance. TowerClimb is marketed as a roguelike platformer and in the announcement on r.g.r.a the developer says "While not a conventional turn based roguelike, it features many things which make roguelikes fun, like permadeath, important decision making, random events etc." and in the Youtube video "A roguelike platformer". In my opinion this is not a roguelike, conventional or otherwise. The game looks fun, but I would have better understood what the game was all about if it was called "a procedural platformer with perma death".

Monday, February 13, 2012

Roguelike Radio is getting better and better!

The Roguelike Radio team has outdone themselves these last few episodes and they've been a joy to listen to. The most recent episode with an interview with David Ploog (one of the designers behind the last few years of releases of Crawl) was great with a lot of excellent anecdotes and behind the scenes insights into one of the best roguelikes still in development.

The Infra Arcana and Procedural Generation episodes have also been outstanding. Well done guys!

Wednesday, February 1, 2012

Please use the Dweller blog for Dweller related issues!

I am cross posting all Dweller related posts to this blog but I would like to encourage anyone interested in Dweller to visit the Dweller site and blog for more info. Thanks!

Tuesday, January 31, 2012

Dweller 1.16.0

Dweller 1.16.0 has been released! The new version features support for French and Russian. Once again, a big thanks to Dannot, Jordan, Antoine, Florian, Krikunoff, John "Dosman" S and John B for their work on the translation. You will also be able to encounter a few new artifacts, designed by the translators and some recent doners. Another important thing with the new release is the new "Send Save game" option accessible from the main menu. If you come across a bug please use this function to send your save game to me for analysis. It will greatly help me to track down bugs, especially those that aren't 100% reproducible.

Download here.

NEW FEATURES
  • Monsters will flow around obstacles a bit better than before
  • Send save game
  • French and Russian
  • Several new artifacts
CHANGES
  • Poison should now be more efficient
  • Removed "(Compared to Wand X)" when wands actually aren't possible to compare
  • Actions are now performed on key up if playing using a keyboard
  • Mapping spell doesn't map huge chunks of stone walls. Only room and corridor outlines are mapped
BUG FIXES
  • The effect of Healing potions didn't vary as much as expected between Weak and Strong ones
  • #35 Potion of change shows incorrect message
  • #36 Cleanse at the healer shows "nothing happens"
  • #32 Gaining multiple levels only give one stat increase
  • #1 Unable to disarm trap doors
  • #12 Incorrect amount shown when inspecting a pile of gold
  • #3 Spell cast animations aren't synced

Monday, January 30, 2012

New Dweller release soon

My initial plan was to release a new version of Dweller yesterday, but I ran into some problems when I was building the release. I will need a day or two to fix the problems. The new version will contain some bug fixes, a complete French and Russian translation (thanks Dannot, Jordan, Antoine, Florian, Krikunoff, John "Dosman" S and John B!), a bunch of new artifacts attributed to my great translators and doners, some improvements to the monster AI and a new in-game bug report feature that will send the entire save game to me for inspection.

Tuesday, January 24, 2012

Hack, Slash, Loot released!

I blogged about HSL a while back, and now it's finally released. If you like old school dungeon crawling you're sure to enjoy this! It's currently on sale for $10, on par with Cardinal Quest but below the sales price of The Binding of Isaac and Dungeons of Dredmore. $10 ain't much for a nice little game like Hack, Slash, Loot, but I get the feeling that buyers of indie games are getting spoiled by constant sales discounts on Steam and in game bundles such as The Humble Indie Bundle. 

Monday, January 23, 2012

Roguelike Radio - Interview with DarkGod

In episode 19 of Roguelike Radio Darren and Ido get a chance to chat with Nicolas 'DarkGod' Casalini, the author of the very popular ToME 4, or Tales of Maj'Eyal. DarkGod has really impressed me by his extreme productivity with loads of releases and huge change lists. I really enjoyed listening to his thought on roguelike development and on how to make a popular game with a very active community.

Tuesday, January 17, 2012

Roguelike Radio episode 16 - 18

The guys over at Roguelike Radio have been hard at work in December and beginning of January releasing three great episodes:

Episode 16: History and Future of Roguelikes
Very nice walkthrough of where it all started and how roguelikes have developed over the years. The discussion on how roguelikes have influenced the indie community was really good.

Episode 17: Roguelike of the Year 2011
A good discussion on the controversial choices of this years voting (eg "Is Binding of Isaac really a roguelike?"). Also the panellist pick their favorites and argue why their specific choice should be the winner.

Episode 18: ToME4
This episodes takes you through the history of ToME4, all the way back in it's infancy where it was known as PernBand.

Sunday, January 15, 2012

Online translation tools and Dweller

Quite a while back I added support for localization of Dweller and added Swedish as a proof of concept that it actually works. What I didn't do was to make it easy for external translators to help out. Until now the translations have been kept in an XML file and parsed build time into a binary file format. It would quickly become unmanageable to pass around XML files and keep them up to date for all languages.

At work we've more or less always worked with multi-lingual games and apps and we have with great success used online translation tools developed in-house to take care of the hassle of maintaining multiple languages. I could probably use the tools we have at work, but for Dweller I think it's better to find a similar solution available for free on the net. To my surprise there were quite a few tools with similar feature set as the one we use at work.

After a bit of evaluation I decided to go for myGengo String. myGengo offer professional translation services to a multitude of languages at a reasonable price and they also have a very nice free to use (at least for public projects) translation tool where you can define what languages your project should support (and which language should be the master language), add strings to translate, invite translator, see the status of the translations and finally export them to a number of different file formats. If you want to help out with the translation of Dweller please send me an e-mail!

Thursday, January 12, 2012

Finding the right issue tracker

I'm receiving more and more feedback via e-mail from players (both bugs and feature requests) and I've come to realize that I need to find a tool that can help me keep track of things. During the last couple of days I've tested a multitude of different bug and issue tracking systems and it's damn hard to find something that gets the job done without too much hassle. These are my requirements:

  • It must be a web based tool
  • It must be a hosted tool. I do not wish to install the tool on a web server of my own.
  • It shouldn't have a ton of settings and configuration options. It should be sleek and ready to go in minutes.
  • It should offer a free account (although I would possibly be willing to pay a small amount per month)
  • It should provide anonymous users with read only access to bugs
  • It is a bonus if anonymous users can add new bugs
  • It is a bonus if the tool allows login using Open ID, Facebook or Google
The ones that I've tried that are still on my shortlist are LighthouseApp, FogBugz, YouTrack, Trakr and possibly also PivotalTracker. Does anyone else have a suggestion for an issue tracker?

Wednesday, January 11, 2012

Dweller 1.15.0

It's time for the second Dweller release of the year. Most of the issues reported since the last release should now be solved. I've also had time to add a second level to the maze.

The game is available from all the usual sources: Android MarketJ2ME and J2SE. Enjoy!

NEW FEATURES
  • The Healer now offers to cleanse Slowing effects
  • Added a second level to the maze
  • The healer now offer different strengths on the heals
CHANGES
  • The merchant will stock up on basic inventory faster
  • Extinguished braziers can be lit again by bumping in to them
  • Removed the double (and triple) healing message when using items that provide healing
BUG FIXES
  • Wraith slowing triggered the purple spell animation on each move
  • Graphical glitch when using a Wand of Mapping in the forest
  • There was a problem with magic resistance not working as it should

Monday, January 2, 2012

Dweller 1.14.0 - Happy New Year!

Wow, is it 2012 already? Where did 2011 go?

So what's in store for Dweller in 2012? I intend to make 2012 the year when Dweller will be "finished". Looking back at old versions of Dweller it is obvious that the game has come a long way since it's first release several years ago. There's still some way to go, but I believe I'll get there this year.

I wish to thank all the dedicated Dweller players out there. The game wouldn't be what it is today without all the encouraging e-mails I receive. Thank you! (PS Don't forget that you can donate if you really enjoy Dweller)

I decided to start off the new year with a fresh release of Dweller. The new release contains a side branch of the main dungeon with a mini-boss and a unique drop. I hope to add a lot more content to the dungeons from now. I've played the game quite a bit lately and it is obvious that the game needs more variation, both in terms of monsters and items, but more importantly in the way the dungeon feels when you explore it. There has to be more surprises in there for the player to discover. Stay tuned for more dungeon content!

The game is available from all the usual sources: Android MarketJ2ME and J2SE. Enjoy!

NEW FEATURES
  • Side branch with a mini-boss
  • Different stair variants depending on where they lead
  • Pushable stones will disappear if pushed onto an open trapdoor or stairs down

CHANGES
  • Trap doors will not be generated on the level above the halls of the goblin king
  • Doors are more likely to be generated

BUGFIXES
  • Scrolls of recall incorrectly required a target.

Wednesday, December 28, 2011

Dweller 1.13.3

Dweller is back again after a disastrous release right before Christmas. I've learnt a lesson and I will try to avoid rushing a release again.

The game is available from all the usual sources: Android MarketJ2ME and J2SE. Enjoy!

Monday, December 26, 2011

Dweller temporarily pulled from the Android market

There's a game breaking issue with pushable stones in the most recent version of Dweller which has forced me to temporarily pull it from the Android Market. I'm away on vacation two more days and I won't be able to upload a fix until then. I'm sorry for the inconvenience.

Thursday, December 22, 2011

Dweller 1.13.2

This is a bugfix release that addresses some recently introduced bugs. I have also experimented with buttons/triggers on the floor that activate nearby traps such as a dart trap. It needs a bit more testing before I can release it, but I think it will be a good trap addition.

CHANGES
  • The quickslot help message will not be shown if you have switched of help messages in the settings
  • Menu item height increased on touchscreen devices to reduce risk of misclicks 
BUG FIXES
  • Double item descriptions when browsing merchant goods
  • Pushable stones could be pushed on top of stairs and swap position with the stairs and cause a crash when the stairs were used
  • It is now possible to wrap around in menues again
The game is available from all the usual sources: Android MarketJ2ME and J2SE. Enjoy!

Eight2Empire

Eight2Empire is the blog of graphics artist Thomas Whetnall. Thomas has been working on  a very nice 8x8 tileset suitable for roguelikes and CRPGs. The first version of the tileset was made available a few days ago. Visit his blog to download the tileset and follow the progress.


Wednesday, December 21, 2011

Vote for roguelike of the year

It's that time of the year again. Santa is busy preparing for x-mas and roguelike gamers are busy voting for the roguelike of the year. If you want to cast your vote head over to Andrew Doull's Ascii dreams.