Showing posts with label I7 extensions. Show all posts
Showing posts with label I7 extensions. Show all posts

Monday, 2 July 2018

Time Warp extension rejigged, CC licence added

Thanks to a suggestion by Robert Patten, I've put a proper Creative Commons licence in my Time Warp Inform extension's documentation. This way, anyone who wants to add it to their project knows where they stand. I'm using the most accommodating licence that exists, the Attribution 4.0 International (CC BY 4.0) licence:

"Summarily this licence allows users to distribute, remix and build upon a work, and create Derivative Works – even for commercial use – provided they credit the original creator/s (and any other nominated parties)." (full details in the extension docs)

I also polished the extension itself, and the demo project, so I'm calling them both version 2.

Time Warp runs in Glulx projects and Z8 projects, and has been tested in all Informs from 6G60 to 6M62 (which is the current one as I type this). The code is simple so I expect it to not break easily, to be easy to fix if it does in future, and also that it might work in older versions of Inform 7, though I offer no guarantees.

If you don't know what I'm talking about because you missed my Time Warp plug post, click here to go to it. Basically, Time Warp could be an easter egg in your game! And it requires almost zilch effort to add it in. The demo project shows you how and the extension itself explains how. Click here to try or download Time Warp / the demo project / the extension.

Time Warp's thrilling title screen. There are still more intrigues here than in the court of the Medicis.

Thursday, 14 June 2018

Plug 2 of 2 - Time Warp

Back in 2014, I put an easter egg inside Leadlight Gamma (By the way, don't buy that game right now, it'll be on sale in about a week). The easter egg consisted of a second game: Time Warp, a CYOA I programmed on the Apple II when I was eleven or twelve. I included it verbatim, complete with spelling mistakes and in its original all caps presentation:

Time Warp's thrilling title screen. There are more intrigues here than in the court of the Medicis.

Time Warp is a self-contained Inform 7 extension. That means you can hook it into it any other Inform game with almost no effort, and without affecting the code of that game. Going into Time Warp, staying there for any duration of play, and then leaving it, takes a single Inform turn. Or no turns if you know how to suppress the advance of time using the Variable Time Control extension or its ilk.

As far as I know, Time Warp is the only technically non-intrusive whole-game-in-one-extension out there so far.

Therefore my very serious proposal is this: If it suits you to do so, why not put Time Warp in YOUR next Inform 7 game?

Whether Time Warp turns out to be an actual feature of your game, appearing on a playable computer, console, arcade cabinet or tablet of the glowing future, or whether you bury access to it in some ridiculous nook or cranny, or whether you make its appearance conditional on the use of an especially unpopular command phrase – it's a whole game! And you could do much worse.

Let's face it, easter-egging XYZZY is pretty old hat these days, and you can't put Zork in your game without breaking a bunch of copyright laws. Plus it's probably really hard to put Zork inside your own game, just from a technical standpoint.

Personally I think it'd be great if Time Warp could become the Wilhelm Scream of Inform games.

If I can't convince you to brandish Time Warp, how about you make your own easter egg game, bottle it in an extension, and increase the inventory of this particular app space to two? That would be neat. In the meantime, consider Time Warp. After all, it considers you.

Where are the links to Time Warp, you ask? In the spirit of easter eggdom, I've made it so that to get to the Time Warp page from this one, you have to find the easter egg entity in this post and click on it.

Tuesday, 24 May 2016

Loitering with the Joneses of technology

– I've reviewed mystery adventure The Black Lily, from IFComp 2014, on IFDB.

– I participated in an IF podcast last week, but I don't know when it will be around.

– My Inform CYOA extension is pretty far along. I hope to release it sooner rather than later so that it can ward off the ravages of age. Tools are particularly susceptible to those ravages. Some of them get ravaged before they even get out the door. I reckon the important thing is not to dawdle in the doorway. Whether due to feature creep, or to the high and impatient current speeds of all of modern citizens, technology and history, you can be left palely loitering in the doorway with your outmoded tool.

This happened to me in 2012 with a GameSalad project. That this was only four years ago surprises me; it feels like much longer. Such time collapses are illustrative of the point.

I spent months using GameSalad to build the engine for an overhead viewed point-and-click adventure game with a dash of action. But not difficult action. The iDevice touch interface wasn't going to be slick enough for tight control. I was building this engine for a ghostly horror type game I was going to call Hedra.

GameSalad was in development heat at the time. Every time it got updated, I had to redo more stuff in my game. Plus Apple's Retina technology was coming in. Suddenly it came to GameSalad. Then everyone had to figure how to trade in double resolution graphics as well. As a one-man band, I was having a hard enough time tuning the engine per se to keep up with the Joneses of technology, and eventually I gave up on the whole thing. My demo no longer runs properly on my current Mac. It needs an old version of GameSalad on an old Mac or a bunch of updating, and even if I did update it, I'm no longer in the headspace or flush of interest to make that game.

I think this all makes Hedra the only computer game in my gamemaking history that I invested solid time in but which didn't get off the ground. I've got a decent number of incomplete games behind me, especially back on the Apple II, but I consider those to have gotten off the ground because they reached the point where they had either a bit or a lot of game content going before I stopped working on them. Hedra doesn't exist except in my head; all I've got is part of an engine that was intended to turn into it later.

Having only abandoned one project late in the fundamental development stage strikes me as a fortunately low stat. I think the rate has probably been helped a lot by most of my projects having been all me. The moment you become part of a development team, you can face exponentially more complex completion factors, but technology affects all projects.

Friday, 1 April 2016

Choice of choices

Since I'm programming a choice-creating / CYOA extension for Inform 7, I have not been able to help but notice the large number of other choicey tools that are either out there already, or that people are making or releasing right now. For authors, this means they have a growing choice of choices. For me, I know it motivates me to some kind of competitive freshness in my own extension.

This particular post isn't an exhaustive list of choice engines. I'm not doing any research here or being super-helpful. I'm just typing in what I'm aware of to show which ones are on my mind:

– inklewriter from inkle
Ink from inkle
Raconteur, a spinoff of Undum which creator Bruno Dias describes as 'Undum with batteries included'
Salet, a spinoff of Raconteur which is a spinoff of Undum, of which creator Oreolek says: 'It’s actually Undum refactored and rewritten in CoffeeScript with some bits of Raconteur sprinkled in.'

(Homer Simpson: "I just hope we put in enough steampunk, whatever that is.")

To demonstrate the value of competitive motivation, I'll tell you the story of Oreolek's promotional post about Salet. There was one line which said just you wait until I finish the inventory management (those words were italicised in the post).

My first reaction was, 'Oh geez, I haven't programmed my own deeper inventory management system yet.' And my second was, 'Oh yeah? Well how about YOU wait until I finish MY inventory management system?!'

I don't know if the second reaction was a question, or a challenge yelled at people not even listening to me or in the room at the time or who should even have to tolerate such nonsense, so to cover both contingencies I have put both a ? and ! at the end of it.

I then ran off and created an inventory management demo and game for my extension. To make it interesting for myself, I included a glass basket, a transparent container. Then I had an infinite recursion problem –

'The apple (in the glass basket (containing an apple (in the glass basket (containing an apple)...'

– and then I got rid of the infinite recursion problem.

I'm continuing to develop examples and mini-games for my extension. This is turning out to be quite fun, and makes me wonder why I don't place the idea of deeper implementation on a bonfire and just make more games like these ones. I suppose it's because of the split between the things I enjoy playing versus what I would like to make myself. I have enjoyed a huge range of IF, but if I mobilise to make one, I feel like I want to go to a lot of trouble in certain directions. The extension examples are excused for their simplicity, in my own mind, by being examples.

Here is some source from a simple moment in one of the games:

A node rule (this is the bridge-crossing rule):
if cyoa-node stage is prose:
print "The bridge creaks as you place your foot on it. The whole length of it wavers, all the way out over the abyss.[paragraph break]Do you feel brave enough to continue?[paragraph break]";
if cyoa-node stage is choices:
link 1 to "No";
link 1 to "Maybe";
link 2 to "Yes";
if cyoa-node stage is react:
if cyoa-choice is 1:
say "Then you'd best not until you feel bolder. The faint of heart are likely to fall.";
switch to the parser;
if cyoa-choice is 2:
say "You place your other foot on the bridge. The structure is so long and mist-clouded that you can't see the far end. There'll be no escape if it collapses. All you can do is proceed carefully. ";
create a continue moment;
say ".[line break].[line break].[line break]";
switch to the parser in room Over the bridge;

Like at least two similar examples people have pasted from similar choice tools lately, it's pretty clear what this one does and easy to follow even if you don't consider yourself a programmer. It comes from an example demonstrating how to stud a parser game with CYOA moments and conversation.

Friday, 26 February 2016 rebuilt and Time Warp extension for Inform 7

I just completed a new look renovation of my website and added an interactive fiction page while I was at it. The IF page is a simple hub of my games, tools, sites and blogs.

If you've not had a look over my creative projects before, I'd welcome your visit to my new site:

Time Warp

In IF-dom, I am making available an Inform 7 extension called Time Warp. What it does: It puts a whole CYOA game I wrote on the Apple II+ when I was 12 or 13 into your game. Time Warp has lots of great endings like – 'YOU'VE GOT A LIFE-TIME AHEAD OF YOU...IN GAOL!' – all in the CYOA / Fighting Fantasy / Be An Interplanetary Spy vein.

It's all caps because the text was retrieved verbatim from the Apple II+ game, where all the text was all caps. Not a word, typo, punctuation or 40-character line justification has been revised.

Why would you want Time Warp in your game? Well, if it fits the aesthetic, why not? This would be a move in the tradition of Call of Duty: Black Ops, which had the whole of Zork in it as an easter egg, introduced by you interacting with an old computer in the game world. So in that case, your character was playing Zork.

I ported Time Warp to Inform 7 so I could make it an easter egg in Leadlight Gamma. I put an unlockable Apple II+ in the game's school.

Time Warp won't interfere with your game code. Just include the extension, then, at the point you want Time Warp to start, use the phrase 'run time warp'. I've put a demo online showing how you could embed it in an in-game computer prop:

That site also has the link to the extension. You can right-click it and save as Time Warp.i7x

I'd enjoy seeing Time Warp show up as a diversion in an I7 game, or as a diversion in a bunch of games. In any case, this extension may just give you the idea for writing your own self-contained, reusable extension game. Or, if you want to write a really simple keypress CYOA by somewhat hacky means, look at the Time Warp code.

(You might be aware that I will be releasing a full-featured and non-hacky CYOA extension for Inform 7 in the not-too-distant future. The Time Warp way of doing things isn't suitable for anything robust or complex.)

Monday, 8 February 2016

I7 CYOA Framework update and overview

I've started writing the documentation for my CYOA extension for Inform 7. Two secret testers enjoyed the first example game and their excitement is getting me more excited.

The extension itself needs more examples and more testing, but having written the intro and overview, I want to share them now so that folks get a comprehensive sense of how this thing works and what it can do.

As for a shipping date – when it's ready!


CYOA Framework for Glulx enables authors to create choice-based games or hypertexts using Inform 7. A world model switch allows projects to be integrated with Inform's world model features (rooms, objects, people, etc.) or to explicitly ignore those features if they're not needed. You can use this extension to do any of the following:

  • Create a project consisting entirely of prose, choices and links (no parser) with or without a world model underneath
  • Create choice-based interludes of any kind (conversations and puzzles are typical candidates) to include in a parser-driven game
  • Create hybrid projects in which the player can switch between the parser and CYOA mode at will (tricky, but doable!)

The extension handles the drudge work of automatically attaching keypresses and/or hyperlinks to choices depending on the player's interface preferences. The resulting CYOA projects are user-friendly and portable across a wide range of devices and input methods (keyboard, virtual keyboard, mouseclick, finger tap). Users can toggle a screen reader mode to further customise the interface.

The 'CYOA' of the extension's title stands for 'Choose Your Own Adventure', referring to the popular series of late twentieth century books and their mechanic of narrative progression via discrete choices. I named the extension 'CYOA Framework...' rather than 'Choice-Based Framework...' for two reasons:

1. The extension code is already crammed with incidences of the word 'choice'. Naming its choice-based mode 'CYOA mode' and being able to use the prefix 'cyoa' made everything easier.

2. It's a more spirited name.

Throughout this documentation, 'CYOA Framework for Glulx' will be referred to as CF, and the terms 'user' and 'player' are interchangeable, as are the terms 'game' and 'project'.


A master switch (cyoa-active) determines whether a project is running in CYOA mode or parser mode at any given time. An entirely choice-based game will never leave CYOA mode. As an author, you can toggle the game mode as required and direct where the player goes during transitions. You can also give the player the power to toggle modes at will.

The base unit of the CF project is the node.

A node generally consists of some prose describing the current situation or location, followed by a list of choices. Choices can also appear in the prose section of the node. (Graphics can be used as choices, too.)

In Inform terms, each node takes the form of a single node rule (e.g. 'This is the bedroom rule'). A node has four optional stages which run in a set order - setup, prose, choices, react. Having all the material for a particular node in one rule makes it easy to read and maintain.

CF offers four modes for automatically labelling choices with keypresses: numerals (1-9), letters (A-Z), particular (arbitrary key sequence defined by you) and smart (CF will use the first letter of the choice text, or a letter within each text flagged by you). You can change modes throughout your project as required.

When hyperlinks are on, all choices are automatically presented as clickable/tappable hyperlinks as well. Only the hyperlinks in the active node will function. Old hyperlinks are rendered inoperable every turn (with one exception discussed in the Advanced Concepts section further down.)

Having read the node prose, a user picks a choice by pressing the listed key or clicking on the hyperlinked choice. If the choice links to another node, the user will activate, or 'move to', the new node. An author can also link individual choices to Inform actions (e.g. 'opening the window'), to special 'continue' prompts, to custom programming, or to any combination of the above.

The extension supplies a world support switch (cyoa-support world) which lets you specify whether or not you want your project to be integrated with Inform's world model concepts: locations arranged in a map, manipulable objects in those locations, other characters who may or may not move around every turn, and the like.

If you set world support OFF, your CF project will behave a lot like a Twine project. There will be no rooms, objects or people to program or worry about. You will just be writing nodes of text connected to each other by choices. You can still avail yourself of any programming you need, but world model entities are rendered invisible in terms of the game's text output.

If you set world support ON, you need to assign every room in your game a base node. When the player moves to a new room in CYOA mode, that room's base node is activated, and while a player is 'in' a base node, they will perceive all relevant output from the world model. That's to say that objects and people in the room will be listed as usual.

If the player activates a non-base node (a node not specifically attached to a room) they are considered to be going 'off-node', during which time they will not see the world model-generated descriptions of objects and people in the current room. If they did, the intermingled texts could read confusingly.

Separate from the choices attached to particular nodes, CF includes a dedicated system of hotkey actions and a complementary options menu.

Hotkey actions are actions the player can invoke during any turn in CYOA mode by pressing the key(s) permanently dedicated to them (or clicking on their links if the player turns key input off). CF comes with a base set of 10 actions you can include:

  1. undoing
  2. mode-switching
  3. menu-visiting
  4. game-saving
  5. game-loading
  6. credits-reading
  7. interface-changing
  8. transcript-toggling
  9. game-restarting
  10. game-quitting

Hotkey actions are highly customisable. You can decide which ones are active, when they're active, what keys call them and which ones appear in the options menu. You can also create new ones.

The options menu (openable by a hotkey) makes hotkey actions selectable via CF's regular choice-listing format. Placing hotkey actions in the menu only can help free up more keys for use during regular play, declutter your status bar and move commands you believe users will need less frequently one step out of the way.

If the player can reach some kind of ending in your game, you can activate the CYOA menu equivalent of Inform's traditional 'final question' section. You can also customise the options that appear in the menu.


1. General actions

A general action calls its own node-independant block of code whenever a choice links to it, therefore it can be considered to be free of the context of any particular node. An obviously good, simple candidate to be a general action in a world model game is the inventory command, since the player's location and the state of the game have no bearing on it.

Choices that link to general actions are also the only choices in the game allowed to be made 'eternal', a concept mostly relevant if you force your players to use hyperlinks. If you switch cyoa-eternal general actions ON, all general action hyperlinks in the scrollback will continue to be useable until the screen is cleared. To make a project in which no hyperlink ever ceases to work, it must be built entirely out of general actions.

2. Dynamic/automatic choice generation

Making the appearance of a choice in a particular node conditional on the state of variables or the game is easy, but CF also allows you to generate choices – or kinds of choices – dynamically across a project. Here are a couple of basic examples: You could write a 'create gets' routine that scans rooms for objects and automatically creates 'Get (object)' choices for them. You could place an 'inventory' choice at the bottom of the choice list presented every turn.

For such purposes, CF includes four new rulebooks which run at specific moments as the extension processes and prints out the contents of a node -

  1. before preparing
  2. after preparing
  3. before choices
  4. after choices

By placing dynamic choice generation rules into the appropriate rulebooks, you can control when in the process any automatically created options will appear.

3. Limitations

The main thing CF can't do that some authors are likely to want to do is print choices or hyperlinks outside the main window, or in the status bar. Unified Glulx Input, the foundation of CF, doesn't support such things yet, so CF doesn't support them.

Graphics support in CF is of the most basic kind. If you use a graphic as a link, the graphic appears in the game window at its original size and flush against the left edge of the window. Nor can successive graphics be placed beside each other. But on the plus side, CF offers better support for graphics alt-text than ships with Inform.

Wednesday, 27 January 2016

Menus 5 and Basic Help Menu 4 for Inform 7, and Robot Retrievers

After I learned that my Menus 4 extension had an accidental extra colon in it which prevented it working straight away in Inform 7 6M62 (6M62 got more rigorous about stuff like that) I took the opportunity to get to work on the next version.

I've just released Menus version 5, which requires Inform 6M62 and is now the public library version. In response to suggestions by Alice Grove, it sports a couple of small but fundamental changes that make it more user-friendly and flexible.

Before I get to those, do you want to see what you can do with this extension? Or, are you one of those weirdos who enjoys interacting with game elements for games that don't actually exist? If you thought 'yes!' to either of these questions, then play the extension's example project Robot Retrievers of the Year 3000 online at my website. It's all help and no game:

And now to describe the changes wrought in Menus version 5:

  • The primary change is that the top level menu table no longer has to use the hardcoded name 'the table of help contents'. You can call it anything you want and point the extension to it by setting the mn_master_table variable. This adds naming flexibility and also location flexibility; some people like to build the primary table in their source, some like to edit the extension itself. (To make a pre-Menus 5 Menus project work with the new system, only a single line needs to be added to your code – the instructions are in the extension docs.)
  • The other significant change is that the vanilla extension now compiles straight out of the box. If you just 'Include Menus by Wade Clarke', your project compiles even if you haven't built or edited any menus yet. Previously you had to create at least the top level menu or compilation would be blocked, which was inconvenient and potentially confusing.

To go with Menus 5, I've also released Basic Help Menu version 4. The content's the same as before, just compatibility-tweaked up to the 6M62/Menus 5 pairing.

Get one or both extensions from the public library:
  • If you're using Mac OS X, the extensions are available from the public library section in the Inform 7 application. With your internet turned on, click the Extensions tab at the lower right of your window, then the Public Library tab in the top right corner. The extensions are in section 11.2 - 'Out of World Actions and Effects' - 'Helping and Hinting'.)

Sunday, 27 December 2015

Dreaming of a white fish Inform XMAS

It was Jean Baudrillard who postulated that we'd all end up speaking in ironic quotes in the hyperreality he also postulated. I think he also coined the phrase 'hyperirony', but Google isn't confirming that point right now, and the ace essay I wrote about this during my degree is both twenty years old and not located in the house in which I'm typing this post on an iPad+bluetooth keyboard combo.

I'm weary in life of being spoken to in ironic quotes I don't understand, but of course when I do it to others (minus the 'not understanding' part) I expect I'm doing it well. I choose source material judiciously, not from obscure hipster cartoons screening on pay TV in another country, for instance.

Often I choose to quote The Simpsons, as they have covered almost everything, and usually done it better and funnier than others. So, my general XMAS message is:

"Have a – nice Christmas!
Have a – nice Christmas!
Have a – nice Christmas!
Non-Christian friend"

PS I am irreligious.


In Inform-dom, we have been gifted a new version of Inform. It's 6M62:

I like these letters, 6M62. They look bold and ground-touching. Not like my least favourite letters of late, '6L02', who looked veritably frail and consumptive.


In my own Inform-dom, I am well advanced in progress on my CYOA extension. There's still lots to do, though. More coding, making examples, some testing. But the work goes on. This is no vaporware.

Occasionally I speculate on the 'you need an interpreter' paradigm of most parser-based games that grew out of the modern community. Sometimes it feels like it just shifted the obligation to update software so that it keeps working from one group of people to another. That's a simplistic summation, but in the current situation, I don't think I ever worked out if anyone has a particular idea about where the emphases of compatibility should be. The core idea that the games are just words and that users should be able to control the appearance of the words is a good one, except for the million exceptions including graphics, sounds, and various UIs that authors want to use. And being an author and not being able to control stuff can be maddening. So even when the onus is left on the interpreter to be kept up to date (and not your game), from an author's perspective, you may end up with multiple versions of your game where one thing is broken in each one depending on where/how the user plays it, or where it never looks the way you'd really like it to.

That sounds a bit dispiriting, an effect enhanced by me writing it in a dispiriting fashion. But it's not like this is a new situation. Plus, this is XMAS! So get confident, stupid! The reason I vexed on these points a little here is as a prelude to pointing out how I'm going in almost the opposite direction of my traditional design impulses (which are author-biased and pro specificsim) in my choice-based extension. It harkens back to the 'the game is just the words' idea. The author links the word(s) to a choice or, uh, link, but the player can receive these any way they want. If you (THE PLAYER) want hyperlinks for your touch device or for clicking on with a mouse, you can have them. If you want letters of keys you could press, you can have them. You can also have both. So the approach is intended as a bit fire-and-forget for the author. Stop programming interfaces and just put your content in, and expect it to work on desktops, mobiles and in screen readers.

Now, one of the eternal vetters of ideas at, Peter Piers, said 'What if the author wants to override something? eg block hyperlinks, or keypresses, or whatever.' Certainly it remains that there are ways to do this, but as work on this extension has continued, I've realised which basket it's throwing its eggs into more forcefully, and that is the 'let the player control the interface' basket. The controls are simple and plugged into the game by the extension, so it's an extremely far cry from having to hack Gargoyle's template to force it to print in your particular favoured shade of ectoplasm green :(

So! This extension has a design emphasis about how it's going to do things. I think it's a good one for this project.

Saturday, 5 December 2015

Inform 7 news: Wade Clarke's new Menus and Basic Help Menu now available in the public library

After much file-wrangling by the Inform extensions file-wrangler, Mark Musante, for which I am grateful, two new versions of extensions of mine have debuted in the Inform 7 public library this week. They are Menus version 4 and Basic Help Menu version 3.

  • If you're using Mac OS X, the extensions are available from the public library section in the Inform 7 application. With your internet turned on, click the Extensions tab at the lower right of your window, then the Public Library tab in the top right corner. The extensions are in section 11.2 - 'Out of World Actions and Effects' - 'Helping and Hinting'.)

About Menus 4

As previously advertised, my Menus is a significant update of Emily Short's old/classic Menus with a lot of additional features which make it more modern and flexible. I consider the most important of these to be:

  1. Single keypress operation – no need to scroll a cursor about, and
  2. Has a screen reader mode for screen reader-compatibility

These features alone make a menu system powered by this extension far more accessible to anyone playing on a mobile device or using a screen reader. In this light, I strongly recommend that folks wanting to add menus to any new Inform 6L38 project build it with my Menus extension rather than the old Menus.

By the way, I should point out I'm not obliviously shaving skin off Emily Short's nose. I discussed the state of the menus extensions with both her and Inform code maestro Dannii Willis, and we've all been looking at ways forward. My Menus extension doesn't have exactly the same API (Application-Programming Interface) as Emily's, so it's for the sake of compatibility with old projects that the old Menus remains in the public library rather than being replaced by mine. Also, Dannii has plans to revamp Emily's extension in such a way that it will have some of the features of mine but will also retain Emily's API for backwards compatibility. If that comes about, that may be the extension which replaces Emily's in the library.

Basically, my extension is ready to go now, addresses some accessibility issues, has some cool and powerful extra features and has already been through three iterations of polishing and bug-removal.

If you're wondering why I changed the API in my extension, I had to to support some more of its advanced features, like the book mode with automatic pagination.

About Basic Help Menu 3

This extension is the equivalent of Emily's old Basic Help Menu, just recoded for compatibility with my own Menus and with the help information updated to reflect the times in which we live. It adds a Basic Help Menu to your project which contains some how-to-play parser IF info.

Monday, 19 October 2015

Work in progress: CYOA Framework for Glulx

I've broken off my IFComp game-reviewing streak to take advantage of time and motivation opportunities to work on a new extension for Inform 7. It's called 'CYOA Framework for Glulx' and its goal is to help folks produce hyperlink/keypress-driven CYOAs in Inform. I want the results to be author and player-friendly, flexible and easy to publish online.

By coming off the back of Inform the extension also supports a lot of cool things that aren't always handled well by other CYOA producing systems: Proper UNDO, transcripting, game-saving (by named files with a save dialogue, or by a single-keypress quicksave slot; the author can decide which) and, if you want it, the full world model. But I'm also putting in a switch so you can turn the world model OFF. This way you can just connect nodes of prose to each other with choices if that's what you need.

With previously available tools, it's been difficult to stop Inform 7 running everything through its 'press RETURN' parser. As an author, that's exactly the thing I don't want it doing when I'm trying to collect and react to discrete keypresses or clicked choices. My way to get around this in the past worked okay, but was super-hacky, and certainly couldn't support the world model, genuine UNDOs, genuine time management or non-manually managed game saves. I should point out I have nothing against super-hackiness per se if it gets the job done for an individual, but if you're making a tool for other people to use, super-hackiness is neither portable nor user-friendly.

The background on why I'm making this extension now:

Before knuckling down to work on my planned big parser game set in the Andromeda universe (click this for my blog post about that) I felt I wanted to get another smaller IF out. I decided it would be a CYOA, because even a small parser IF takes me ages.

As I discussed my super-hack approach to making an Inform 7 CYOA over on, Andrew Plotkin mentioned that he'd made an experimental extension called 'Unified Glulx Input' which might be able to help with this project. I tried it and it really did. Then climbingstars chimed in with some extra UNDO help I needed.

After programming away at my extension for the past week, I've just shared a minor tech demo of the work in progress on intfiction. I have a thread open to get feedback on it (the first post has links to the demo). I'll report back on future progress with the extension in this blog.

* I've only released one thing with my previous super-hacky method, an Apple II CYOA game I ported to Inform 7 and put inside Leadlight Gamma as an easter egg. What's interesting about that one is that it also fakes some BASIC line numbers. Each node is identified by its original BASIC program line number from Applesoft.

Saturday, 6 June 2015

Inform 7: Menus version 3

In 2014 I wrote an updated version of Emily Short's venerable Menus extension. Right after I completed it, the huge upgrade of Inform (6L02) came out and the extension broke.

Kind people posted a supposedly fixed version of my Menus to Github, but it wasn't really fixed – don't use that one, which is version 2. Then the project was in limbo for ages because I didn't want to touch the new Inform until after I'd finished Leadlight Gamma.

Yesterday I finally got around to working out what broke in my extension (indexed text substitutions) and fixed it. So today I present Menus version 3, which is good for 6L38 and should be good for 6L02:

Download the from my dropbox

In the zip you will find the files Menus.i7x and Basic Help Menu.i7x

(There is a degree of chaos in the I7 extensions management world at the moment. I just want to say that if you're one of those people helpfully filing stuff in Github or whatever, please feel free to file these appropriately. Thanks.)

Here's the summary of the extension from the docs, then I'll give a bit more detail:

Lets you include a menu system of help, hints and/or other information in your Glulx or Z-Code project. This is an upgrade of Emily Short's Menus extension featuring user-friendly single keypress controls and a more sophisticated UI. It also has configurable options, a book mode with automatic pagination, isolated message content to make translation to other languages easier and a Screen Reader mode. Old Menus format tables can be upgraded for use with this extension with a little work.

So first, there is no more moving a cursor around with arrow keys to choose things. Every option is activated by an automatically assigned keypress.

There is no more of the repeated transcript clutter that used to happen with the original Menus.

You don't have to back out of all menus to get back to the game. You can exit straight to the game with a keypress (your position is bookmarked for your return). You can also jump to the topmost menu at anytime while in the menus.

You can still use the hint-dispensing mode familiar from the original Menus.

You can toggle screen reader compatibility at any time.

The extension no longer relies on the ESC key, so it's compatible with virtual devices which don't offer one.

The extension always shows contextually-sensitive instructions in the status window, or in the main window if you're using a screen reader.

All content is automatically paginated for a book mode (move through all content with left and right arrow keys). You can let the player switch between menu and book mode as they please, or you can force one or the other. In book mode, hints can be gathered at the back of the book, with warnings about their location. Or you can just block them from book mode.

If you're having trouble compiling your menu system, there's a debug mode which shows everything that's happening during the startup scan of your content. The extension can diagnose a few common errors itself.

The 'you can't choose option H' bug from previous versions is gone. (Thanks Hanon Ondricek)

Finally, if you happen to want ye olde Basic Help Menu, I've also made a compatible version of that.

... So if you're in the market for a menus extension for your brand new Inform game, I encourage you to use this one. It's modern, extensively documented and accessibility-friendly.

Also, in the selfish reasons department, I don't want to move a cursor around with arrow keys in your game anymore. Sorry, but in these shiny times, that's too angrifying.