Inform 7 6L38 Third Party Extension Compatibility List

I replaced the call for library messages (L__M) in the extension with appropriate print statements, and the game compiles.


Conversation Builder (the companion extension to Threaded Conversation) should now be fully functional in 6L02.

I tried the “test me” command of the examples included in this extension. According to the results, this extension does not work. Does it happen only to me?

[rant]Motive and Method
An Interactive Fiction
Release 1 / Serial number 140608 / Inform 7 build 6L02 (I6/v6.33 lib 6/12N) SD

You can see Bob and a microwave (closed) (in which is a potato) here.

test me

[1] bob, take the potato
“Just a sec.”

[2] a
That’s not a verb I recognise.

[3] wait
Time passes.

[4] why did you attack the microwave
That’s not a verb I recognise.

[5] what are you doing
That’s not a verb I recognise.

[6] how will you take the potato
That’s not a verb I recognise.[/rant]

Hm. I haven’t tested (or updated iirc) the examples, other than the first. I’ll look into that. In the meantime, replace “a” with “agenda” in the testing command, and change any “when hindered by the … rule” rules to “when hindered by the … rule requirement” (it’s a workaround for an Inform bug).

The Flexible Windows extension (both stored under Jon Ingold and Dannii Willis) seems to store the incorrect color scheme for the status window. It just uses the same as the main window (white background with black letters). I quick-fixed it by replacing the following segment

Include (- [ ConstructGWindow win parentwin method size type rock; win = parameter_value; ! Fill in parentwin, method and size only if the window is not the main window if ( win ~= (+ main window +) ) { parentwin = parent( win ).(+ ref number +); if ( win.(+ scale method +) == (+ g-proportional +) ) { method = winmethod_Proportional; } else { method = winmethod_Fixed; } method = method + win.(+ position +) - 2; if ( win.(+ scale method +) == (+ g-using-minimum +) ) { size = win.(+ minimum size +); } else { size = win.(+ measurement +); } } type = win.(+ type +) + 2; rock = win.(+ rock +); win.(+ ref number +) = glk_window_open( parentwin, method, size, type, rock ); ]; -).

with this:

Include (- [ ConstructGWindow win parentwin method size type rock sty; win = parameter_value; ! Fill in parentwin, method and size only if the window is not the main window if (win ~= (+ main window +)) { parentwin = parent( win ).(+ ref number +); if ( win.(+ scale method +) == (+ g-proportional +) ) { method = winmethod_Proportional; } else { method = winmethod_Fixed; } method = method + win.(+ position +) - 2; if ( win.(+ scale method +) == (+ g-using-minimum +) ) { size = win.(+ minimum size +); } else { size = win.(+ measurement +); } } type = win.(+ type +) + 2; rock = win.(+ rock +); if ( win ~= (+ status window +)) { win.(+ ref number +) = glk_window_open( parentwin, method, size, type, rock ); } else { for (sty=0: sty<style_NUMSTYLES: sty++) glk_stylehint_set(wintype_TextGrid, sty, stylehint_ReverseColor, 1); win.(+ ref number +) = glk_window_open(gg_mainwin, winmethod_Fixed + winmethod_Above, statuswin_cursize, wintype_TextGrid, GG_STATUSWIN_ROCK); } ]; -).

But maybe there is a better solution to this?

There will be! I will be adding the styling to FW soon. I’ve been busy with exams so haven’t had time to work on it recently sorry. FW currently is very incomplete. You can open windows but not close them.

hi everyone,

complete newb here (just joined!) and i was trying to figure out the compass rose tutorial that makes use of glimmr and flexible windows and kept running into crashes even when i start a new project and type:

Include Flexible Windows by Jon Ingold.

Hello World is room.


i just wanted to confirm that this thread is still accurate and that flexible windows is currently incompatible with I7.

no biggie… i’m just experimenting with implementing the game i have in my head for now but i’ll put off the windows arrangements and compass rose type stuff until later if these extensions are broken.


actually, as a newb, i’ve found that the inform 7 website and documentation is really complete and helpful but it would have saved me a LOT of time if incompatibility was noted on the EXTENSIONS page. alas, IF is a bit of a subculture and it took me a little while googling to find this place.

anyhoo, thanks much.

I believe Erik has stated that he’s not planning to update Glimmr for the new version of Inform, so even after Flexible Windows is fixed that’s going to be a bigger problem.

We (or just me) will eventually update Glimmr for Kerkerkruip, though only the ones it uses to start with.

Okay, I found the problem. The actions were not being compared correctly.

This also revealed a larger bug that I hadn’t noticed: in Ron’s original code, a new object is created for each attempt. This ensures that they’ll always be in order when they’re sorted by object number. But in my version, to avoid problems with dynamic objects and indexed text (as well as to improve performance in longer games) I made it so that attempts would be recycled when they were no longer needed. This works, but the order is effectively random.

I’m working on a fix for this now, after which the example as written should work properly again.

Procedural Randomness by Aaron Reed compiles as-is. The tests don’t yield exactly the same results in 6G60 and 6L02, but there’s no particular reason to expect they should. I don’t know if there’s a good way to test if it’s behaving exactly as it ought. UPDATE: This is probably a difference between z-machine and Glulx rather than between 6G60 and 6L02.

Reactable Quips by Michael Martin does not compile, but there appears to be a simple fix. However, the response messages are not adaptive.

In fact, Reactable Quips and Quip-Based Conversation by Michael Martin have been fully updated for 6L02, here. (I haven’t tested them myself.)

Forgive my ignorance, but isn’t there a checkbox in the Settings to lock the random seed generation thingy whatsit so that a repeatable playthrough wields the same results, though randomly generated?


(If the question is “Doesn’t this make Procedural Randomness redundant?” the answer is no, because that checkbox only affects testing versions, not release versions. Also Procedural Randomness gives you much more flexibility in how to lock the seed.)

I meant “Doesn’t this make it possible to check whether the test would yield exactly the same results?”.

Which is probably not that important at all, because you don’t feel it is and you’re much more familiar with the extension and its use than I am. I just thought I’d ask.

EDIT - My two brain cells got together, had a puny “eureka” moment, and have grounded the rest of my brain until it decides to function properly. My fingers are similarly to be grounded until further notice after this post, for being far too quick to type silly questions for their own good. Never mind.

Randomness in Inform (and in most computing) works by having a mathematical equation that produces a pseudorandom sequence of numbers based on a “seed” number. The sequence is only seemingly random because it’s always the same if you use the same seed number, but there’s no immediately visible pattern and it’s practically as good as true randomness for most purposes.

For example, if you think of the pseudorandom number generator as a dice thrower, a seed of 8729 might produce results 4, 2, 6, 1, 2, 2, 5, … and so on, always in this order. Inform’s debugging option sets the seed to some fixed value which is always the same for each playthrough, so the sequence of randomness results is always the same. If the option is not used the seed itself is randomized at the start (I don’t know the exact details) so that the randomness sequence itself is unpredictable.

The important part here is that Inform uses the same sequence for all randomness checks. It means that if you have two dice in the game, a red die and a blue die, their randomness isn’t locked separately. If you have Inform lock randomness and throw first the red die twice and then the blue die twice, the red die’s results are 4 and 2, then the blue die’s results are 6 and 1. If you restart and throw the blue die first, it shows a 4 (and then a 2 and so on). So the random results are picked from the same sequence and the next die roll’s result is set regardless of which die you choose to throw.

With Aaron’s extension you can lock randomness in two ways: you can make it so that a die’s throws are random but predictable independent of other random events in the story. In other words, you can guarantee that the red die always shows 4, 2, 6, 1, … in this order regardless of how many times you’ve thrown the blue die. The other is a special case of the first one: by always resetting the seed, you can at any point lock the die so that it always throws a 4 until you “release” the lock and it starts to act randomly again.

I hope that’s more helpful than confusing.

Thanks, I’d already thoroughly kicked myself. :slight_smile:

If it’s not overloading the kicks, the way the example I was running works is that there’s a bunch of telephone numbers (from 1 to 9999 I think), and when you dial one Procedural Randomness seeds the generator with the phone number itself and randomly generates a name and answering machine message. Which means that it can guarantee you get the same name and message every time you dial 2452 (since it’s the result of seeding the generator with 2452) without storing 9999 names and messages.

Checking the box doesn’t make a difference here, because the checkbox keeps the game’s own random number seed constant every time you run it, but the test example is already throwing out that seed (or rather, reserving it for random numbers rather than procedurally random ones) and replacing it with the telephone number you dialed.

What I meant when I said that the tests don’t yield the same results is that “dial 2452” doesn’t give the same name and message in 6L02 as it did in 6G60. Which means that something probably happened to the inner workings of the random number generator in between builds. But it does yield the same result every time in 6L02, which is what’s supposed to happen.

Are you sure you had both set to the same VM? Glulx and Z-machine give different results because of their different integer range.