#Inform7
If you've ever automated interacting with an #Inform7 game, you may have done it by opening pipes to a process running an interpreter built with CheapGlk. That works, but you get just plain text with no metadata or formatting, and no statusbar.
It seems like a lot of people don't know about a much more flexible alternative: RemGlk.
I'm in the midst of revising my #Inform7 documentation remix.
https://zedlopez.github.io/i7doc
It'll eventually even have a better domain name.
If anyone out there uses it, is there something different you'd like to see?
Any thoughts on other useful ways the information might be presented or cross-referenced?
#Inform7 doesn't offer phrases to simply start and stop scenes; one must assert, e.g., The Chase begins when the player carries the idol. But often we *want* the equivalent of just saying `now start the Chase`, and, so we end up creating a global, like...
chase-on is initially false.
The Chase begins when chase-on is true.
[... in some rule or phrase ...]
now chase-on is true.
I'm going to go all in on two playable characters next time.
hard to believe i started writing my first #InteractiveFiction this time last year and it was not popular. however, this hasn't phased me. i made it mostly for me and to learn the art form. it's written in #Inform7 and is very, very ugly. one year later and several ones written, mostly unreleased, and after watching countless narrascope and movie script writing videos, i think i have a formula down. we'll see if Buttered Toast 5: Billy Davis Island Adventure will be worth the extra effort. i suspect that it will be!
Really interesting writeup about learning #Inform7 (the #textAdventure #programming language I use), from one of this year's Best In Show winners from the #SpringThing #interactiveFiction competition. https://golmac.org/about-the-time-i-wrote-an-inform-7-game/ #GameDev #IndieGames #CreativeWriting
I've written a post about learning Inform 7, among other things. I share my messy code in hopes of encouraging non-programmers to try Inform 7 if it interests them.
#Inform7 deliberately favors common-sense, colloquial meanings over what a programmer might expect when those diverge... for instance, making animals a subkind of people rather than the other way around, or counting from 1 instead of 0.
An instance of this that I personally find to be more idiosyncratic than useful is that 3:59 AM is after 4:00 AM.
I've made an adaptation of the #Inform7 10.1 Project Index for a minimal "Lab is a room." project. https://zedlopez.github.io/i7doc/Contents.html
It has some issues; I'm reworking my web docs remix and I'll be fixing the Index's issues and integrating it better, but it seemed useful enough as-is to share.
My previous effort for 9.3/6M62 is still available:
"Repeat the Ending" is the "critical edition" of a forgotten 1996 Inform 5 game about loss, mental illness, and the second law of thermodynamics. It won a "best in show" ribbon in the 2023 Spring Thing festival.
A post-festival release of the game, along with several digital feelies, is now available. Everything is linked at IFDB, which also has a "play online" feature.
Thanks for your interest!
A feature of #Inform7 v10 about which I'm not enthusiastic:
now that extension filenames are arbitrary (beyond requiring the .i7x suffix), if you screw up "Brilliant Extension.i7x" so much that it can't be parsed, you don't get a message that you have a problem with Brilliant Extension, you get told Brilliant Extension not found.

If you've done a bunch of #Inform7 programming, you've probably wished you could do something like
let l be the things that are enclosed by the player and also wanted by Bob.
But you can't compound relative clauses that way. Maybe you can make do with an adjective, but definitions only take one parameter so you'd have to hard code the other, e.g.,
let l be the player-carried things that are wanted by Bob.
I have several #interactiveFiction #parser #textAdventure #games works in progress, that I'm in various stages of developing. Suddenly had great idea last night for one of them, reframing the opening and overall structure. Making frantic notes now before I totally forget it all. Typing into comments in my #Inform7 source code. Feeling invigorated. Hoping that my #neuro #illness allows me enough good time to complete this #game and the others satisfactorily. #IndieGames #GameDev #creativeWriting
#Inform7's WI 12.3 tells us "an action can be carried out by anybody – by any instance of the "person" kind, that is, which includes all the men, women and animals in the story, and not only the player."
But I'm going to make you believe a compass can fly.
--
Bounce House is a room.
To actions on: (- ActionsOnSub(); -).
when play begins:
actions on;
let the compass be the holder of north;
try the compass jumping
--
It's not even a game object: it's none of room, direction, region, thing.
has anyone built the ni compiler of #inform7 for #riscv? #finallyfreesoftware
I just noticed an unheralded change in the current development version of #Inform7: used to be that I7 supported Unicode characters up to 0xFFFF. That's been quietly doubled to 0x1FFFF.
This opens up a bunch of fun blocks.
Happy birthday to open source #Inform7: 10.1 was initially released on April 28 last year.
https://intfiction.org/t/inform-7-v10-1-0-is-now-open-source/55674
1993-04-28 is the build date of the first publicly released version of Curses, which, along with the original version of Inform, was announced on rec.arts.int-fiction a few days later.
https://groups.google.com/g/rec.arts.int-fiction/c/CqsdYXYI1Ss/m/ff321YSrIqwJ
@ArneBab Sort of, yes! I'll be writing it using #Inform7, though, which is specifically designed for parser games and makes them pretty easy. https://ganelson.github.io/inform-website/
I'll certainly try to put out updates with relevant hashtags. I often work in quite short bursts, though: generally that means there'll be quite a jump in progress between each one.
Directions *aren't* in scope when modified by `all` in #Inform7, hence:
>take north
You must name something more substantial.
>take all north
You can't see any such thing.
A thing that trips up nearly everyone using these is that what's being counted is *attempts* at the action: it doesn't matter whether the action succeeded or failed.
"turns" as opposed to "times" counts for how many consecutive turns that thing was tried (not counting out-of-world actions). And though there's a sense in which if you've done something 3 consecutive turns, it's also true that you've done it 2 consecutive turns... that's not the sense #Inform7 uses.
Continuing our tour of #Inform7 action pattern clauses, we have "when". ("when" and "while" are interchangeable in action patterns. And when qualifying "rule does nothing" or "rule substitutes for", you can use "when" or "if" interchangeably. But you can't use "when" instead of "if" or "while" in if-phrases or while-phrases. got it?)
Ok, now to backfill explanations of what those #Inform7 action pattern clauses are:
`in the presence of <description of objects>` is described by WI 7.12
❝this applies when the action takes place in the same location as the person named: and of course that person can also be described more vaguely ("… in the presence of a woman", say), and can just as easily be an inanimate thing ("… in the presence of the radio set").❞
If you're a creator, player, archivist or fan of #interactivefiction we welcome you to join the discussion at intfiction.org!
#if #textadventures #inform7 #twine #parser #CYOA #xyzzy #adventuregame #infocom #zork
I did a short Q&A with Amanda Walker about my I7 game "Repeat the Ending" over at intfic. Very happy/flattered that she asked. Link below. Interested in playing Spring Thing games or nominating them for ribbons? Follow the links in the reply. 🧵
https://intfiction.org/t/amandas-springy-thingy-reviews/61523/60?u=kamineko
Did I mention that I was writing an Inform 7 game? Well, it's loose in the world! It's weird, self-referential, and a little ridiculous.
Blurb:
"Explore the critical edition of a forgotten 1996 Inform 5 game about loss, mental illness, and the second law of thermodynamics."
Featuring artwork by Callie Smith.
That's not all! There are a ton of cool Spring Thing games you can play right now.
#Inform7 digression:
It's a little tricky to answer the question of whether two objects are of the same kind. We can say:
to decide if (v1 - a value of kind K) is the same kind as (v2 - a value of kind L):
decide on whether or not v1 is a L.
but, then, given `c is a container`, and `d is a device` and `t is a thing`, c won't be the same kind as d, and t won't be the same kind as c or d... but either of c or d will be the same kind as t, because containers and devices are things.
Where was I? Oh, yeah, #Inform7 action patterns. There are several other possible clauses that can be added and it's order sensitive and I *think* the way it goes is (I'm now going to refer to a bunch of stuff I haven't talked about yet rather than spend two weeks talking about things without telling you about the order-sensitivity):
More #Inform7 #SourceCodeAmnestyDay :
Marco Innocenti released the source for Andromeda Apocalypse - Extended edition.
https://www.andromedalegacy.com/andromeda-legacy/AA-Source/source.html
https://ifdb.org/viewgame?id=qtr168k4p9depk3l
It's part of the Andromeda series:
https://ifdb.org/search?searchfor=series:the+Andromeda+Series
which Wade Clarke's forthcoming Andromeda Acolytes will continue.
Lurking in #Inform7 is a function to calculate Easter's date:
🙶 The date of Easter depends on who and where you are. Inform's notional home is England. Following League of Nations advice in 1926, Easter is legally celebrated in England on the Sunday after the second Saturday in April, unless the Church requests otherwise. Since the Church has made this request every year since 1926 and shows no sign of coming around, we instead have to turn to church law, which is where it becomes complicated.
@HanonO released the source code for Transparent. If you're interested in a multimedia #Inform7 game, you might like to check it out as an example of handling a soundtrack and graphics.
https://pyramidif.itch.io/transparent
https://pyramidif.itch.io/transparent/devlog/511459/transparent-source-source-code-amnesty-day
More of the #SourceCodeAmnestyDay #Inform7 bounty:
@vivdunstan released the source for Border Reivers, which includes an original conversation implementation.
https://ifdb.org/viewgame?id=trk9d7oqmfhkn359
and Napier's Cache
A milestone!
I have FINISHED writing the game.
It’s not ready for launch. I have to polish some rough edges. And there’s some stuff I want to add but has to wait.
But it’s DONE. Shitty first draft achieved!
I'm going to take a break from Action Patterns this week to highlight some of the #Inform7 largesse from #SourceCodeAmnestyDay.
https://intfiction.org/t/april-1-is-source-code-amnesty-day-it-happened/61025/
I already boosted @zarfeblong 's toot about Hadean Lands (about which I'm especially excited – I was kicking myself just recently about how I should have backed at the tier that got one a bound copy of the source).
but there's lots more.
Doing my part for IF Source Code Amnesty day: I've uploaded the source code for my games Flight of the Hummingbird (2010) and Atrocitron (2016) to the archive. They haven't made it to their final spots in the archive yet, but in the meantime I wrote an article about some of the sillier things I did while writing them.
In the meantime, they're at https://ifarchive.org/indexes/if-archive/unprocessed/ but that link won't stay valid for long.
The source code for _The Gateway of the Ferrets_ is now available:
The source code for _Timeout in the Wasteland_ is now available.
I figured talking about clumping actions in #Inform7 would just be a quick rehash of WI 7.8, 7.9, and 7.15. I've realized it's a rabbit hole. For starters, what is it we talk about when we talk about an "action"? Even that much is much more complicated than it sounds.
When you say
Shaking is an action applying to one thing.
you have created a value of kind *action name* that could thereafter be referred to as the "shaking action".
This much is easy.
In the Definition case, #Inform7's (called the <name>) syntax, discussed yesterday, is vanishingly similar to parameter passing, but To-phrases (including to-say and to-decide-if) have a different syntax. And the possibilities for describing the type of a To-phrase parameter includes some surprising things.
Uploading the #Inform7 #SourceCode for my 2 released #parser #TextAdventure #InteractiveFiction #games prompted me to look at the code again. Still wowed by that language. I know some traditional programmers find it too strange. But as a former #C and declarative language #Prolog programmer I find it magical. And the Inform 7 #IDE is like playing an #adventure game as you write. Ridiculous fun. And now I want to write and release more Inform 7 games. https://ganelson.github.io/inform-website/ #GameDev #Programming
The #Inform7 #sourceCode for my two released #parser #TextAdventure / #InteractiveFiction games (Border Reivers and Napier's Cache) is now in the #IFArchive, in the games/source/inform directory. This is part of a move this year to release more IF game source code publicly. http://www.ifarchive.org/indexes/if-archive/games/source/inform/ #ComputerGames #Adventure #HistoricalGames #ScottishGames #Code #GameDev
In #Inform7 you'll frequently see in the declarations of definitions or rules a parenthetical like `(called the wossname)` to give the description of some indefinite value a name by which the value (at runtime, now some definite value) can be referred in the associated code block.
There are two other constructions that use it.
It's easy to miss, but it can be used in conditionals, not just in while loops, but in if or unless:
https://zedlopez.github.io/i7doc/WI_11.html#section_9
Tomorrow: the final one.
I've never done a series this long, so I'm going to give myself a break before going on to clumping #Inform7 actions.
So here's a bit of nonsense I posted to the IntFiction forums over the weekend. As I introduced it there:
❝A common class of bug comes from the author implementing something like the moon as a backdrop, but forgetting to do anything to make it out of reach, and then testers get to go “tee-hee” as they trigger an implicit take while trying to put the moon in their pocket.
Streaming schedule for this week! All CET. Only two and then some time off as I am away.
20/03 - 5pm: Creating extensions for the #elgato Stream Deck
21/03 - 4pm: Writing interactive fiction with #Inform7
Watch live or later on YouTube.
April 1 is IF #SourceCode Amnesty Day. I plan to join in on this, sharing my #Inform7 source code for my Scottish historical #parser #InteractiveFiction #games Border Reivers and Napier's Cache. http://blog.zarfhome.com/2023/03/april-1-is-if-source-code-amnesty-day.html #OpenSource #ScottishHistory #HistoricalGames #TextAdventures #GameDev #Inform #Coding #Programming #ComputerGames
Besides having values or objects to relate, what determines what relative clauses we can make in #Inform7 are what relations and associated verbs exist. So here's where I'll remind you that you can create pseudo-relations just to take advantage of all of that verby goodness.
One of the most obvious sorts of "for which it's the case that" clauses you might want to have is something testing properties. and #Inform7 *does* offer a way to create a relevant relative phrase. I mentioned this just last month, but it deserves another mention in the context of clumping.
And sometimes, you don't really need an adjective: often, a relative clause is plenty #Inform7's Formal syntax of sentences "example" explains that one can add "who" or "which" (also "that", though it doesn't say that) plus a verb phrase to a "descriptive phrase" and it remains a syntactically valid descriptive phrase.
https://zedlopez.github.io/i7doc/examples/formal_syntax_of_sentences.html
I really didn't expect to spend a whole 'nother on properties, but at last we come to the final member of the #Inform7 adjective triumvirate: Definitions.
Definitions are the most general and flexible, because they can do... *anything* in terms of clumping kinds of value (within the limits of feasible computation, at least).
With all this talk about non-object kinds of value having properties in #Inform7, it's time for more gotcha-warnings. I've noted previously that you can test if an object has any given either/or property without a run-time error, *independent of whether it provides that property.* So this code:
lab is a room.
when play begins:
if the lab does not provide the property enterable, say "Rooms aren't enterable!";
if the lab is not enterable, say "How did we get here?"
outputs both those lines.
Before I leave the subject of either/or properties and conditions, I feel obliged to remind everything that their utility extends beyond objects! In #Inform7, *most* kinds of value can have properties, including some you might not expect... like enumerated kinds of value.
A condiment is a kind of value.
The condiments are mustard, ketchup.
A condiment can be red.
Ketchup is red.
me: I'm done, absolutely done, with new features until Spring Thing is over.
also me: of course, but why not customize the status line first? It's so dull as it is.
me: good point! I could do something fiddly with the scoring system.
four hours later: oh god whyyyyy
OK, back to the theme, which was clumping if you've forgotten. I talked a lot about #Inform7 "conditions" – anonymous enumerated kind of value properties – recently. To review, the possible values of a condition are automatically adjectives. So if you'd said:
A pixel is a kind of thing.
A pixel can be red, green, or blue.
You could use `red pixels` as a description of objects.
I've gone on a bunch about the meanings of things in action specifications in #Inform7, like touchable thing or carried thing. But there's a sense in which what I've said has never been true.
AD_REQUIREMENTS is an 8-bit bitmap in ActionData, the record that stores the action specification details for an action name.
The names are clear, if one knows the options.
TOUCH_NOUN_ABIT
TOUCH_SECOND_ABIT
LIGHT_ABIT
NEED_NOUN_ABIT
NEED_SECOND_ABIT
OUT_OF_WORLD_ABIT
CARRY_NOUN_ABIT
CARRY_SECOND_ABIT
#HexDescribe is basically #Inform7
I'm having perhaps too much fun writing responses to parser commands that nobody is very likely to try out. #interactivefiction #Inform7
@mcoorlim You inspired me. I actually have an Inform 7 project that is all about exploration and needs a lot of rooms, so this seems a pretty cool way of making steady progress. I won't be trying to catch up with the first ten days; I'm simply starting now. 😃 #dungeon23 #interactivefiction #inform7
The game is essentially finished! I saved a bunch of time by not writing elaborate descriptions of every location and item. Now I have to…do all of that.
It’s turned out to be a very small game world. I cut some locations that didn’t have a clear purpose and some items that were just participation trophies. Probably playable in an hour, start to finish.
#Dungeon23 day 5. I'm building an #interactiveFiction game, one room at a time. Can't decide whether to go with #Inform7 or #TADS3 - back to Inform today. Hope to decide soon because I don't really want to build two complete games!
Thinking about shifting my #Dungeon23 project from #Inform7 to #TADS - quickly re-implemented the handful of rooms I've done so far; seems to be working just as well, though I don't like the typeface. I think there's a way to change it. #interactiveFiction
#Dungeon23 day 3! An actual room with things to investigate and interact with. This is an #interactiveFiction game, one room per day, one themed "level" per month.
Currently #inform7, though I may end up pivoting to TADS.
Thinking of pivoting my #dungeon23 project from #Inform7 to #TADS... TADS hasn't been updated in what, a decade? But it makes more programmatic sense to me.
For #Dungeon23 I'm making a parser text adventure game in #Inform7. Here's day 1's room, into which the player is dumped with little explanation and no memory.
The #dungeon23 inspired Interactive Fiction game I'm working on - in which I make a single room every day this year - is going to get a little meta, and I'm not sure it'll work conceptually.
The point is, however, the experience of doing it, rather than the game's meaning or purpose. One room a day!
Every month's "level" will be more properly a contextual shift for the player.
Finally figured out that I can write a routine that teleports the player and any objects needed to test a puzzle to the proper location when the game begins, saving me the trouble of retracing the 120 steps needed to get a particular key for a particular door.
A problem arises: in this medium, readers expect to interact with things mentioned by the text. We can't just say there's an oven and leave it at that. Although it has problems, we can head that kind of thing off altogether:
*Instead of doing anything other than examining when the current action involves the oven, say "Your dentist appointment is in twenty minutes! There's no time to prepare breakfast."
continued...
One of the nice things about Inform 7 is that you can do a lot of things without knowing a lot. You can have a room (code is preceded by an asterisk *):
*The kitchen is a room.
You can put an oven there:
*The oven is in the kitchen.
Describe it:
*The description of the oven is "This electric oven was likely built in the late 70s. It is covered in chipped, white paint."
You can stop the player from carrying it off:
*The oven is fixed in place.
(continued)
Not much of a spoiler, half of these items/locations have been removed or changed significantly in the version I’m making. Also: I was 14 and trying to create my own Zork, so this dungeon makes ZERO sense and I’m keeping it that way. 👾
Found the scans I made of my notes from 1984 (I had forgotten I’d uploaded them to Flickr!). By this time I’d figured out that I could make lists of numbers that represented rooms, objects, and states. Atari BASIC only had numeric arrays so I had to put each object description in its own GOSUB statement and map each object code to a line number. Madness.
Hoping to have my lil’ text adventure project playable by then, or at least play-testable.
Seeing the map I drew as teenager inside the official Inform IDE is giving me strange feels.
My 11yo expressed interest in #TextAdventures/#InteractiveFiction. I wrote stuff in #Inform years ago but I don’t think that would be his jam (and as beautiful as #Inform7 is I don’t think he’d be able to learn it quickly enough to avoid losing interest).
Does anyone know of good tutorials for #Twine that might be accessible to a bright 11 year old? I’d be happy to help him but I’d love to have something he could also read himself while I’m at work. Thank you!
tbh I find the verbose documentation maddening af. You can’t just scan for what you’re looking for. Variables aren’t called “variables” but “values that vary.” Increment/decrement operations aren’t in the math section. Some sections are dedicated to specific syntax but have sample code that doesn’t use that syntax.
That said, I’m glad this isn’t ECMA-like in the least. It’s super cool and fun. I just wish I could find what I need when I need it!
Only spent a half-hour today but now the cat walks from room to room in a predictable pattern and that was enough to power me through the rest of today. 💪
I've stepped back from coding/writing my #inform7 project to research games with "close" narration released between 1993 and 2012. I got some great recommendations on the IF community forum, and thought I'd do a thread about them as I play them.
The forum thread is here:
https://intfiction.org/t/looking-for-intimate-personal-games-written-between-1993-and-2012/59157
🧵
Tools I'm fond of: #godotEngine, #ink, Asperite, Sublime Text, #scrivener, Hacknplan, Articy Draft, #audacity, WikiPad, OBS Studio, Pomodoro, #Twine (largely for prototyping), #Inform7, Google Reader (RIP too soon)
I suppose an #introduction is in order. But a bunch of hashtags is what you're getting.
#ttrpg #a11y #typography #FountainPens #SpeculativeFiction #InteractiveFiction #Inform7 #CatPerson #COVIDisolator #Clarion #Writing #Comics #Linux #RecumbentBikes #TalkBizarre #Ruby #Emacs #MechanicalKeyboards #BoardGames #Puzzles #Environmentalism #SocialJustice #ADHD #EastBay #logophilia
Thought I'd move my pinned #games thread over here from the bird site. I am a hobbyist game designer, mostly working in #textgames :blobcatreading:. Here are the ones I've made so far (they are all free to play):
🕵♀️ The Mysterious Affair of the Harrowgate Literary Society (a detective game - #Ink ) https://lulamorashi.itch.io/mysterious-affair
⚓ The Captain's Cabin (an escape room - #Ink ) https://lulamorashi.itch.io/the-captains-cabin
🥃 The Midnight Club (an escape room - #Ink ) https://lulamorashi.itch.io/the-midnight-club
🛍 The Mall is Dead (an escape room - #Inform7 ) https://lulamorashi.itch.io/the-mall-is-dead
🎭 Five Minute Call (a stage manager simulator - #bitsy ) https://lulamorashi.itch.io/five-minute-call
⛵ A Long Voyage (an interactive fiction experiment - #Twine )
https://lulamorashi.itch.io/a-long-voyage
I'm also writing some words for @soundasleep 's game 🚀Adaptory, which is currently in alpha: https://soundasleepful.itch.io/adaptory?fbclid=IwAR3Xem1henkLD0JYgs9_Q6yFOZioDqFSRn56nRO0P1r66pVaJA8iFla7Kuk