The Dreamhold for iOS

It is up on the App Store! Go take a look.

(If you have an iPhone or iPad or whatever, I mean. If you don't, you can still play Dreamhold on my web site or however you like. For old time's sake.)

(The Dreamhold cover art is based on a photograph by Trey Ratcliff: The Festival of Lights in Lyon (CC by-nc-sa).)

I know most of you have already played Dreamhold -- it's a 2004 game, after all -- but it's been a fun game to revisit. This iOS release has a nifty map and some nifty (if cliche'd) trophy achievements, so maybe that will spark some competitive spirit or speedrun hijinks out there in Internet-land.

Unfortunately, I managed to ship the thing with a crashy bug. Several players have reported "Fizmo fatal error: Caught signal 11" messages. It isn't happening to everybody, and some people have gotten past it simply by quitting and restarting several times. (The problem seems to be showing up only on iPhone 4 and 4S, so far.)

I apologize for the bug, of course, and I hope to hunt it down this weekend. (EDIT-ADD: I have submitted a bug fix, as of May 27th. It is awaiting App Store review.) (June 4th: Bug fix is available; grab the 1.0.1 update.)

Bugs aside, what does this mean for the greater world of interactive fiction?

First, this Z-code interpreter (an iOS port of Fizmo) is available on GitHub now. Do you have a Z-code game that you want to put in the App Store? Now you can. (I mean, when the bug is squashed.) Free or for money, it shouldn't be a problem either way.

(You'll have to be a registered iOS developer, though. Also, I haven't documented the build process in any useful way -- sorry. This will improve over time. For the present, just install the project and its submodules from GitHub, replace Game.z5, and fire up Xcode.)

Some answers for the IF author contemplating an App Store release:

  • Can I customize the display style?

Yes. I put in hooks for game-specific fonts and color schemes.

  • What about that awesome map?

The map is Dreamhold-specific, so it's not included in the interpreter release. The same goes for the Game Center achievements. I think I'm going to keep those as private extensions. (I'm pretending to do this for a living, so I have to have some kind of, whaddayacall, "value add".)

If you're good at iOS coding, you are of course free to write your own interpreter customizations. The source is under a BSD-style license.

  • Is this a fully functional Z-code interpreter?

Urm, mostly. It only handles V5 and V8 at this time. (The V3 status line code might work, but is untested.) Timed input works, but the color opcodes do not. There are undoubtedly some bugs -- I know the status line height can go wonky at startup in some games. (Fortunately not Dreamhold! I know what's going on with this bug, I just haven't gotten around to it yet.)

  • What about Glulx? (Hadean Lands will be a Glulx game, after all.)

I have most of the Glulx interpreter working (see iosglulxe), but it's missing one key feature -- the ability to launch the game where you left off. This is critical for iOS, obviously. Follow my GitHub progress to see when that's ready.

  • Can anybody use this? What if someone goes and posts all of your IF on the App Store?

The App Store has a lot of cloning and shovelware floating by. This is a sad fact of the app world. It is possible that somebody could take this opportunity to flood the world with games using my name -- or, for that matter, start uploading the entire IF Archive.

I hope that doesn't happen, though. I would like to build up a small selection of Zarf IF games on the App Store, both free and for-money, with nice game-specific bonus features. That would be good for the Zarfhome label.

(I have nothing against iOS Frotz, which is awesome -- it's not an app that features particular games. Flooding the App Store search results with a bunch of cloned IF is entirely different.)

(Note: if you are this sort of shovelware bozo, and you're posting other people's games from the Archive for free, you're a bozo. If you do it for money, or put ads on, you're a bozo who is probably violating a bunch of software licenses. All my games say "Do not distribute commercially without permission," for example. Don't go there.)

Well, we'll see what happens, right? Enough of that mess.

  • And Hadean Lands?

I turned Dreamhold over to the App Store review queue a week ago. Since then, I've been chewing through the pile of HL design documents that have been accumulating for the past oh-so-many months.

I now have a complete picture of the puzzle structure -- every ritual and special action, major and minor. It's... somewhat terrifying. Remember I said "53 major puzzles"? It's up to 72 now. There are 98 distinct spell components on the list.

Inform's parser isn't really optimized for carrying around 98 objects. I mean, you can't actually carry all 98 at once, because some of them are made from each other. But it's still way too many. Inform allows it, but I suspect the parsing will bog down on slower machines -- like phones.

But then, why should the player have to do all that inventory management at all? Expect a lot of attention to shortcuts and automatic object-fetching. "You run over to Herbarium and pick some rosemary..."

Anyhow, the next step will be typing all of these puzzles and components into PlotEx, to make sure I haven't completely broken the plot. (I'm sure the first thing I'll discover is that PlotEx isn't optimized for 98 objects either, and then there will be some more optimization. Whee!)

After that? My usual IF implementation strategy is "start with the first room, work forward until done." That is absolutely not going to work here. What will I do instead? Stay tuned...

A couple of other IF-related links from the past month:

The Bundle in a Box charity promotion is offering seven Windows adventure games in a pay-what-you-choose bundle. This includes six graphical adventures (by Jonas Kyratzes, Wadjet Eye Games, and Size Five Games) and one text game: Peter Nepstad's 1893: A World's Fair Mystery. Proceeds support indie developers and charitable causes.

Is it time for a text game revival? (Gamasutra article by Leigh Alexander.) Runs through several sorts of text-based games, from Infocom's heyday to modern e-literature, the Kickstarter revival of many old fan favorites, Emily Short's new project at Linden Labs, and so on. Includes the splash banner for Hadean Lands, so I'm in favor.

Interactive Fiction Communities: From Preservation through Promotion and Beyond (Article by Nick Montfort and Emily Short.) Introduction to IF (which I'm sure you don't need) but also a history of the genre and the community, in some detail. Worth reading if you haven't been immersed in the stuff for the past few decades.

This entry was posted in Zarfplan  and tagged  , , , , , . Bookmark the permalink.

5 Responses to The Dreamhold for iOS

  1. Found the bug! Will submit fix tomorrow.

  2. Alan De Smet says:

    98 components makes me think it might be better to move them out of the inventory and into their own tracking system. The inventory object might just be "components satchel", and instead of tracking the components as objects, you track them as 98 counters.

  3. That would work for some games. However, I am aiming for a system where all the components are tangible and interactable with the usual verbs. (This is supposed to be a hands-on sort of magical system.) So they have to be in scope.

    Really, the way it's going to work, I can stash things in cabinets and boxes and containers all over the map. Toting around every object all the time will be unnecessary *and* slightly tedious, which should be sufficient discouragement.

  4. Alan De Smet says:

    Having now played The Dreamhold on my iPad a bit, I have two suggestions:

    - When I use a narrower column of text, I can't use the whitespace to the left and right to scroll; I have to reach into the middle of the screen and drag the text itself. Since the whitespace isn't being used anyway, it would be convenient to be able to scroll there.

    - The on screen keyboard is more annoying than I expected. It works, but I'd like to avoid using it as much as possible. I find myself missing a feature from CellarDoor (http://cellardoor.sourceforge.net/): the ability to click on a word and be presented with various text entries for that word. For example, if you click on Rito, it looks something like: http://cellardoor.sourceforge.net/img/interpverb.png . Some of the commands are automatic ("Take Rito" will run immediately) while others simply append the text to whatever is on the command line and wait for more ("Rito" and "Ask Rito about"). This dramatically cut the amount of writing I had to do on my little Palm. On the down side, precision targeting on iOS devices is hard, so you may need to add a targeting system; something like the magnifying glass used elsewhere in iOS.

  5. Thanks for your input!

    I see what you mean about the side margins. They *are* used in a subtle way: if you try a sideways swipe in the text, it can get interpreted as a scroll drag, but if you swipe starting from the margin, it can't be. So the margins provide more reliable tab-switching. I agree that full-width scrollability would be better, though.

    (There are details that make this a moderate pain in the butt, but I'll spare you...)

    I like the idea of the pop-up fill-in menu. My only concern is that the gesture space is pretty full already. I'm using single-tap to pop the keyboard up and down, double-tap to copy a single word to the input line, and tap-hold to begin text selection.

    If I used a magnifying glass for tap-and-hold, I could probably add a menu option to the "copy" menu thingy. This wouldn't be a one-tap gesture like you describe, though -- it would be tap-and-hold, wait, hit menu option, select command.

    Alternatively, I could repurpose double-tap to bring up this menu, which would be faster for some cases but slower for others.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>