Programming

Alpha Feedback & Awards


Wheatley_prizes_2

I've been doing some alpha testing of my game The Z-Machine Matter while I continue to work on it on weekends.  It's maybe 25% complete at this point with 56,000 lines of Inform7 code, 44 rooms and 174 objects.  Progress is slow, but when I get feedback from my testers, that gives me the encouragement to keep at it.  Thanks to all my Alpha testers who have taken the time to give me comments.  Special thanks to Colin from Munich who sent me several detailed SCRIPT transcriptions and also wrote:

First of all, let me say that I really dig what you're working on there. I just played through the first couple of rooms, but that film noir/Marlowe atmosphere is right there and I'm really excited to be able to help in producing such a nice and elaborate game. That manual and the "box shots" are really awesome. I started the game up after reading the manual and was immediately inside the game, taking notes, examining everything. 

As a first time author working alone, feedback like this makes it all worthwhile!  Colin also provided details on commands that didn't work and some suggestions to improve the pacing.  Keep it coming, guys!

In order to properly reward my valiant alpha testers, I've managed to pick up a few 1970s facsimile reprints of the Dennis Wheatley Crime Dossier books (which inspired the packaging for Infocom's Deadline game, as well as everything that followed).  I'll be giving those away as prizes for best Alpha feedback.  And for anyone who wants to do a bit of an Inform7 code review, I'm going to up the ante by donating a couple of original 1930s first editions of Dennis Wheatley's "Murder off Miami" (also published in the US as "File on Bolitho Blane."  But if you're too busy working on your own IF, no problem.  I'll continue to donate some Dennis Wheatly Crime Dossiers to SpringThing, IF Comp etc.

My goal is to keep working on The Z-Machine Matter and enter it into IntroComp in June and then finish it sometime in the fall. So if anyone else wants to test The Z-Machine Matter before then, let me know.  You can reach me by clicking on the About link in the upper right hand corner of the blog, post a comment with your email address below or send me email ZUrlocker via hotmail etc.

And kudos to Colin as well as the Alpha testers from the San Francisco IF meetup group.


iPad Frotz 1.5.1 with Improved Glulx Support

Z-machine-ipad

Craig Smith has updated iPad Frotz 1.5.1 incorporating several new fixes in the support of Glulx games.  While Glulx support is still beta, it works much better now, enabling the use of Aaron Reed's keyword interface in its full glory.  (The prior version would occasionally cause normal text to occasionally be displayed in keyword colors.)

Great work Craig!  Much appreciated.  Best of all, Frotz is free on the iPad, iPhone and many other platforms.  You can download it from iTunes.

Now if only someone would create a Glulx or even a Z-code interpreter for the Kindle.  That would be cool!  Heck if someone wants to do a kickstarter there, I would gladly kick in money.  (again)


Insights from Blue Lacuna

Bluelacuna

Somehow, I must have missed this paper by Aaron Reed about the design and development of his award-winning game Blue Lacuna.  If you're not familiar with this game, is by most accounts, the largest Interactive Fiction (IF) game ever written.  Not only is it "novel length" but Reed also went out of his way to break down some of the traditional boundaries in IF by making the parser much more sophisticated and beginner friendly.  

Reed has published several essays on this topic they provide an excellent summary of his work.  "Lessons Learned Writing the World's Longest Interactive Fiction" (PDF). There's also "Aspects of an Interactive Novel" (PDF), and "12 Lessons Learned by Aaron Reed" published by SPAG.

I've incorporated Reed's Keyword Interface, Smarter Parser, Poor Man's Mistype into the Z-Machine Matter game and I think they're a great improvement over the standard Inform7 experience.  This is the type of functionality that I'd just never get around to coding on my own, so its great that Reed has made these truly reusable.  According to Reed, using these extensions can more than double the parser's success rate in understanding the intensions of new IF players.  If you're new to Inform7 I also highly recommend his book Creating Interactive Fiction with Inform 7

Reed is studying towards an MFA at UC Santa Cruz, but in the IF community, he's already an honorary PhD.  And if you use some of his Inform7 extensions, you can reap the rewards of his brilliant work. 


Upgrade to Inform7 6G60

Screen shot 2011-02-21 at 10.11.56 AM

Just in time for the New Year, the good chaps working on Inform7 issued an upgrade to version 6G60 with much improved mapping.  I'm always wary of compiler upgrades on any programming project; you sometimes find that language or libraries have changed ever-so-slightly and what should have been an easy recompile now becomes several hours of unanticipated work.  And then there's the likelihood that the IDE menus and dialogs have been "improved" to be better, but in reality are just different.  

In this case, this upgrade literally took 5 minutes --including the download time.  Everything worked exactly as it should and I resumed working on my project with no changes.  No changes, except for the improvements in the mapping and a good many bug fixes.  Congrats to the Inform7 team for such a smooth upgrade process!  

As a result of the improved mapping, I was able to find and fix a couple of problems that were lying in waiting.  While the mapping is not perfect, it is substantially better than it was previously.  (You can click on the graphic above to see a larger version of the game map.)

For those who are curious, the latest Alpha version of my game The Z-Machine Matter now clocks in at 49,362 words, 166 pages, 145 things, 37 rooms, 50 hints, 20 clues, 11 extensions, 5 NPCs and 1 dead body.  I've blown through the limits of the Z8 file format, so the game now requires a Glulx interpreter to run.  This is about 3x larger than the game was back in early December when I did my initial Alpha testing.  (And I hope, much improved, based on suggestions from testers!)

I reckon the game is somewhere around 25% complete at this stage, but it's hard to know.  I still have a couple more NPCs as well as more rooms, objects and clues to implement.  That said, I'm eager to get more input from Alpha testers in advance of IntroComp.


The IntroComp Dilemma

At this point, I'm guessing I'm about 25% through the implementation of my game "The Z-Machine Matter."  I've tested it out with about 10 people and it appears to have been well received.  I have the game mapped out, but there's a lot of work still to be done in implementing the outline, characters and plot twists that I've written.  Alas, my time to work on the game is very limited and I expect progress is going to be slow.

In order to keep things going, I am considering entering an unfinished version in IntroComp in June.  I should be able to make more progress in the coming months and then finish the game in the months after IntroComp.  Or at least that's my goal.  

One minor sticking point with IntroComp: most IF competitions don't let you enter a game that has been previously entered into IntroComp.  Although to be fair, this is really more of an issue with the other major competitions, SpringThing and IFComp rather than IntroComp per se.

As stated in the IntroComp FAQ:

WHEN I FINISH WRITING MY GAME, CAN I SUBMIT IT TO IFCOMP? 
No go, my friend. It would run afoul of the spirit of IFComp's "no prior release" rule. You may be allowed to enter it in other minicomps, though - ask your local minicomp dealer. 

In other words, you can enter the introductory scene or scenes of your game into IntroComp as a way to gauge interest and get feedback, but in so doing, you're effectively ruled out of the major comps.

While I have great respect for the organizers of these competitions, their reasoning seems pretty bizarre.  SpringThing has considered making their competition open to games that were previously entered in IntroComp, but IFComp doesn't seem open to this idea at all.  The thinking is that by being strict about not letting any previously released games into IFComp that this will encourage more people to write games.  I don't see how that makes any sense.  It seems to me encouraging IntroComp authors to finish their games by letting them enter IFComp would better accomplish the stated goal.  

But I'm just a newbie in the IF world and I don't think my input or views on this were particularly welcome. Or maybe I wasn't clear enough in my presentation to the IFComp organizers.  But it looks like I'll have to decide whether I should enter IntroComp and give up the ability to enter the completed game elsewhere or not. 

What do you think?  Does the "no prior release" rule of IFComp make sense?  Should there be an exception to allow authors of IntroComp games to enter their completed works?  Should I bother with IntroComp?  Let me know what you think.  I still think the full-blown comps are great and will continue to donate prizes, help fund kickstarter projects in the IF Community etc. But I still can't get my head around this.


A Few Inform 7 Tips

I'm still a newcomer to Inform 7, the language I'm using to write a murder mystery story.  For those who haven't tried it out, Inform 7 is a fantastically rich environment for developing Interactive Fiction (IF).  But, much like IF itself, there's often an element of "guess the verb" in trying to figure out how to do something.  So here are a few simple discoveries I've made.  I've not broken any new ground here, these are all documented somewhere.  But sometimes the question is where.

  • You want to have scoring, but omit the automatic score messages 
    When play begins: silently try switching score notification off.  
       
  • You'd like to have some introductory text before the game banner
    When play begins: say "From Hollywood, it's time now for..." 
       
  • You'd like some text after the game banner, before the first room
    After printing the banner text when not requesting the story file version : say "...Yours truly, Johnny Dollar."  
      
  • You want to display exits in the status line
    Include Exit Lister by Eric Eve. 
       
  • You want the status line to display time of day and score
    When play begins: change the right hand status line to "[score] / [time of day]".
    When play begins: now the time of day is 9:41 pm.   
  • You want to give the player some help when they make mistakes
    There's a command called Understand as a mistake which is a great way to give the player some help without having to code a whole lot.  Here are some examples pulled right from the commands Alpha testers tried.
    Understand "consult [something]" as a mistake ("Try CONSULT notebook ABOUT something."). 
    Understand "pour [someone] [text]" as a mistake ("Try POUR liquid INTO glass.").
    Understand "pour a drink" as a mistake ("Try POUR liquid INTO glass.").
    Understand "leave lobby" as a mistake ("You can go EAST or WEST or you can wait for Sgt Duffy.").
    Understand "read notebook about [text]" as a mistake ("Try CONSULT notebook ABOUT something.").
    Understand "talk to [Monica Robner]" as a mistake ("'Johnny, what do you want to ask me or tell me about?'").   
  • At rules shouldn't be used in a condition 
    At rules will always fire, even if they are placed inside a condition.  So if necessary, place the condition inside the At rule.  e.g. 

    [ Message will be displayed at 10:30 regardless. ]
     if the player is not in the Lobby:
        At 10:30 pm: say "Maybe you should go to the Lobby."

    [ This works properly.]
    At 10:30 pm: 
        if the player is not in the Lobby:
           say "Maybe you should go to the Lobby." 
  • Ask / Tell dialog rules don't work the way you think they do 
    It's relatively easy to create simple conversations with Ask / Tell rules like:
    > Ask Monica about Cabeza Plana
    > Tell Monica about accident 

    Unfortunately, Ask / Tell rules only work with generic text "topics" and not with strings that happen to be objects in your game, which is probably what you want most of the time.  Additionally, the text has to match exactly.  So asking about "accident" is different from asking about "the accident". 

    Luckily Jim Aikin in his work The Inform7 Handbook covers all of this.  You need to write an Understand rule to make different terms synonymous.  Aikin also shows how to write new rules called Quizzing and Informing that act like Ask and Tell for objects in the game.  
        

Admittedly, these are not the most complicated code snippets, but when you're stumped you're stumped.  I found these by searching the Intfiction forum, the rec.arts.int-fiction forum, the Inform 7 manual and Jim Aiken's and Aaron Reed's excellent books on Inform 7.  If you're just getting started in Inform, I hope these tips will save you some time.


Alpha Testing the Z-Machine Matter

Z-Machine-screenshot_small

I've managed to complete a working prototype of "The Z-Machine Matter," a murder mystery I'm working on.  This is not a complete game, just the opening scene.  I wanted to see how far I could get programming in Inform7 evenings and weekends and determine whether the concept of the game has merit before going all in.

Nonetheless, I have set my sights at doing a thorough job on this; there's a manual, cover art, built-in hints, help text.  I've also included several extensions that improve the usability: Eric Eve's Exit Lister, Emily Short's Menus, Aaron Reed's Keyword Interface, Extended Grammar, Small Kindnesses.  While the game is still small and really only has one puzzle to it, there are multiple solutions, there's a dialog system and two non-player characters (NPCs), and several important clues for later stages of the game.

The Inform7 compiler tells me the game is currently about 14,000 words (or 2,400 lines), with 9 rooms and 51 things in it.  The source file is just over 100k resulting in a compiled 500k .Zblorb file including cover art. A lot of that is help text or ASK/TELL text, rather than complex programming, but there were a few things I struggled with.  Luckily I got help over at the intfiction forum.

The feedback from friends and family alpha testers as well as a SF Bay Area IF Meetup group has been very helpful.  There are lots of commands people have entered that I hadn't thought about.  Some of these are just variations on something that should work but doesn't, so I've implemented some fairly simple Understand as a Mistake handling to give the user a hint as to what should work.  Others are going to require much more sophisticated programming to do it right.

Still, I feel like I'm staring deep into an abyss as I consider taking this project further.  I have about 20 pages of details on the plot, characters, evidence and clues written out for the rest of the story.  But I suspect that the prototype is perhaps only 10% of what's required to complete the game.  And the code will only get more complicated from here. 

Part of the reason I was able to code the opening scene was that it was limited in scope. Because it was self-contained I didn't have to worry too much about the rest of the game when doing the opening scene. 

Next step: I'll start adding additional room locations for the middlegame and a couple more of the NPC characters who are suspects in the game.  But I'm going to take it one piece at a time and not worry about the end game and all of the details of accusing, arresting and analyzing evidence just yet.


Inform7 Code

If you haven't programmed in Inform, you might wonder what a game looks like from the author's perspective.  If you're not a programmer I would say Inform7 is pretty accessible.  It's got a natural language feel to it in that the syntax is quite readable and looks a lot like English.  However, it is still a bit finicky about some things. Sometimes you'll write some code and the compiler will complain because it's not exactly in the syntax it wants.  Below is an excerpt of some code from the game I'm working on (no spoilers!) that shows some fairly simple things.

Sample_i7_code

The good news with Inform7, is that it's quite easy to get started and there are lots of good examples.  The bad news is if you're an experienced programmer, there's a lot of stuff going on under the hood that is a bit of a black box.  So when you try to do something more complex it can be hard to figure out exactly how to do it.  But there are lots of people who have figured out Inform's quirks and so there is a body of expertise in the IF community.  And it's not that the advanced things are hard to do (once you know how) it's just that figuring out how to do them is difficult because there's no definitive language reference manual.


Programming in Inform7

Z-Machine-IDE

Lately, I've been carving out some time evening and weekends to do some programming in Inform7, a language and Integrated Development Environment (IDE) that is designed specifically for the creation of Interactive Fiction.  Inform compiles down to Z-Machine byte-code, so games written with Inform are portable to any system which has a Z-Machine interpreter including Mac, Windows, iPhone, iPad, Android, Linux, Unix and probably just about every system known to man.  

The Inform IDE is pretty cool.  It's got color syntax highlighting so you can easily distinguish between Inform keywords, text strings, comments etc.  It also makes it easy to run the game from within the IDE or separately compile it into a standalone file that can be run on any platform.  In the screenshot above, the source code is in the left hand pane and the running game is on the right.  You can click on the image to make it larger.

All of the documentation for Inform is accessible within the IDE which is great, but I still long for a standalone reference manual on the language and libraries.  And it would be nice to be able to easily view multiple windows or multiple views into the source code.  The Inform IDE is available for Mac, Windows and Linux.

If you're at all interested in creating Interactive Fiction, it's a very nice environment for trying your hand at things. And it's fun and slightly addictive to be programming again!  In another post, I'll show some sample code.  If you want to dive into Inform, I highly recommend Aaron Reed's book Creating Interactive Fiction with Inform 7.


IF Design Document

Shadow cathedral

I happened to run across a great document by David Cornelson of TextFyre called "Writing for the Interactive Fiction Medium."  The first 10 pages covers a lot of the basics of how to think about the creation of rooms, objects and interactions.  But what's was really eye-opening for me was the next part which was a high-level design document describing TextFyre's game The Shadow in the Cathedral.  

Although it covers only the opening scene of the game, Cornelson provided a much clearer illustration of how to think about and plan IF better than just about anything else I've read.  The style of the design document is a pseudo code that is even higher level than Inform7; so it is very readable and yet also close enough to the implementation language as to still be useful.  Cornelson wonderfully describes the scene, objects, commands, characters and events that kick of the story. The design document illustrates the power and the challenges of programming IF while reinforcing the importance of the story.  I found it very inspiring.

You can download the document here: Cornelson - IF Writing Guide