Let's Play: Cragne Manor

Ha, that’s awesome – glad you enjoyed the thread, and glad to be able to pay things forward a little bit since there are a bunch of blogs and Lets Plays that got me through my son’s bouts of teething.

And thanks for sharing the Meretzky idea – I have to say, titling your brainstorm, which you know your coworkers are skeptical of, “THE VIABLE IDEA”, is an especially funny bit of attempted social engineering.

That’s good to hear! On the evidence of the finished product, I can definitely see how you and Ryan laid generous, yet clear, guidelines for folks’ contributions, but possibly an additional factor is that you both exercised a lot of humility when it comes to your rooms – like, I was kind of expecting those two room to be a little more canonical and at least hint at a definitive plot. But no, while your room gives critical tools to the player, and Ryan’s wraps up a climactic puzzle, they’re put on a very egalitarian footing with what everyone else wrote.

5 Likes

I guess such projects can go either way, but you never know until you actually try it out. :slight_smile:
But you two did a great job of keeping all of this together and pulling through! For me Cragne Manor is my favorite “coherent mess”, so to say, and I am still impressed by the sheer size of it.

By the way, one more quote I found for “THE VIABLE IDEA”, this one by Dave Lebling (founder of Infocom and writer of “The Lurking Horror”):

“0 out of 10 for that idea. 1/5 of a game takes more than 1/5 the time to do. When are 5 imps ever free? This never works all that well in literature.”

4 Likes

Infocom was very invested in its “auteur” ethos. While this was limiting in some ways (they would never do something like the “viable idea”), it did make them unusually committed to authorial vision. I don’t think A Mind Forever Voyaging looked very promising as a commercial product, but the company never tried to discourage Steve Meretzky from making it AFAIK. In fact, Infocom promoted it vigorously as a literary work (new ground for them) that they were proud of. Who other than Infocom would have let their (arguably) top-selling active developer—or anyone, for that matter—spend unprofitable hours making a game like A Mind Forever Voyaging? That development culture was not conducive to collaborative efforts, but I don’t think we would have gotten as many great Infocom games as we have without their authorial philosophy.

So far as 1985 goes: Brian Moriarty had been patiently waiting for a chance to make Trinity (it was his dream even before hiring on at Infocom) and probably wasn’t looking for something else to get involved with. It would be released the following year, in 1986.

Communities are just better at some things than companies. In the case of Cragne Manor, it brought together a bunch of highly capable, motivated people, drawing from a larger talent pool than Infocom could have mustered at any point in their history. Infocom could never have made CM, even if they had wanted to. I think Mike has done a fantastic job documenting the humor, horror, and wild inventiveness of CM!

8 Likes

Seconding what Jenni said. Much of this was because we all began working in isolation and the initial secrecy made us all ramp up our own strategies so as to not appear to be slacking in comparison in all of our own special ways. It was “Big Comp Energy” but we were all working on the same project - the harder we worked, the higher the quality would be. We had a few side brags, like “largest individual room word count” but that was more for us to compare scope before we knew what everyone else was doing.

I am sure we all felt this was a very important project and we had no idea how good the other rooms would be, and because we received incredible coaching and positive feedback and assistance from Jenni and Ryan we all did our best work. Probably anyone could finish a game successfully with that amount of support and that’s how it was set up. Nobody got more than they could handle. We were allowed to go full out if we wanted; some people needed more help but others did not and could help others, and we were also allowed to not stress too much and make it a simple project at our individual discretions.

After a couple weeks, we were also finally able to test other people’s rooms and see what was going on elsewhere in Backwater and the Manor, and that likely motivated a good degree of polish in many rooms. The Slack channel was extremely active with tech support and chatter and jokes and assistance, so everyone’s knowledge and “egos” worked together in the best possible way.

TL;DR: We weren’t “competing” with each other per se, but everyone knew who we were working with and what we wanted to accomplish and the high-water level raised all boats.

6 Likes

Ha, thanks for providing that context on Moriarty’s comments, which maybe provides a counterpoint to Jenni’s point about a lack of competition for resources in the case of CM!

It’s funny, I tend to see the IF community as also having a fairly strong auteur ethos too in how games are produced and received (much of my commentary on individual rooms in this thread follow that approach, I think), but per Hanon’s post directly below yours, if anything that helped make the process here more collaborative. I suspect the fact that a community by definition requires non-hierarchical collaboration as well as the absence of the resource-competition dynamic ID’d above account for some of the differences.

5 Likes

To be fair, AMFV was way more promising as a commercial product than Cragne Manor ever conceived to be. :)

Everybody went into Cragne with the attitude “This is going to be a complete cthlusterf*ck and that will be hilarious”. It’s not really something Infocom could have come up with.

6 Likes

The tech is important, too. There wouldn’t be a lot of room for individual vision for five authors in a 256K story file, let alone 128K

3 Likes

That’s a huge part of its appeal. The viable idea would have been radically different philosophically and practically

3 Likes

I see what you did there

6 Likes

Dang, if Cragne Manor wasn’t already the title… :rofl:

That is very true. If Cragne Manor were on floppies how many would there be and how cursed would it be to disk swap!

7 Likes

That gave me a laugh. I expect you’d boot the game, read the first room description, type S, and then the drive would chug and it would say ‘Please insert disk 2.’

I was thinking of offering something like this as an IFComp prize – I would reverse engineer the first room of your game (or more if it was doable) to the Apple II using BASIC. I decided not to because I’m trying to stay industrious with my time on Andromeda Acolytes.

-Wade

7 Likes

Ever wondered why there’s so little interaction between the rooms? The real reason is to ensure each room can be put on its own floppy, and only the inventory needs to be saved in RAM.

8 Likes

This is a good lesson from watching Cragne coalesce. There are things that go from “impossible” to “unlikely and difficult but doable” if all of the people involved making a thing actually want to be involved and want to see the thing finished, like Hanon mentions.

And also that Jenni is an incredible cat wrangler and project manager.

9 Likes

Oh yeah, I just re-read this: looks like there’s another, much larger Humongous Fungus, under the Malheur Forest in Oregon, which dwarfs that puny Michigan one, and is not merely older than Jesus (and Nitocris), but four times older.

7 Likes

Thanks for this. Really, thanks.

4 Likes

Bonus Update the Second, Part I – Underneath Backwater, VT

[Blows dust off the thread] Is this thing still on?

So it’s been a couple months since last we visited stately Cragne Manor, cleaning up the commentary and magic-word responses of all the rooms. I’ve been busy in the meantime with IFComp, but now it’s time to return and wrap up the thread. You may remember we’ve got two orders of business remaining: source-diving and speedrunning. Between Zarf’s repository and the Christabel/Carol GitHub repository we turned up, a solid 40% of the rooms have source available, including many of the biggest set-piece rooms.

So this tour isn’t going to be a one and done – I think it’ll take three and a half instalments to get through the archive (yes, the two ladies are getting a mini-update all their own) – and I won’t be annotating the code in exhaustive detail. Instead I’ll be pulling out neat interactions I missed in the playthrough, highlighting neat bits of implementation, and aiming more for a high-level overview of what’s on offer. If you’re an Inform coder, I definitely recommend taking a gander yourself; beyond the hidden gems I’ll try to bring to light, I find it’s really helpful to see how others write their code.

Okay, with that throat-clearing out of the way, let’s get started! This update will take us through Backwater and environs (update two will cover the main floors of the Manor, including its grounds, while the last will get the basement, the attic, and the endgame).

Exterior of Train Station (Emily Short with Graham Nelson, RRS5)

We’ve got a fun one to start out with! We explored the location way back in the first update; beyond a small puzzle involving scaring off a strange lady who, having our best interests at heart, tried to keep us out of Backwater, the major point of interest was the creepy two-headed doll that noticed and commented on stuff wherever we went. I’m eager to see how the magic was done!

One thing to note first of all is the room code, “RRS5” – “RRS”, unsurprisingly, is a region, probably being the railroad station and environs.

Instead of examining the player when the location is RRS5:
say “[if ES-weather is ES-pouring]The salient fact is that you are drenched. No other state information is nearly as important right now[else if ES-weather is ES-raining]You are soaking wet, aching, gooey[else]Your journey — fifteen hours on a humid train — has left you achey and a bit sticky. Nothing that a hot shower and a change of clothes couldn’t solve, though[end if].”

Here’s the description of the player – two things jump out at me. First, there’s a state change which I don’t think I noticed, depending on how strong the rain is coming down (it toggles between raining and pouring). Second, this is implemented as an instead rule, rather than setting the description of the player which feels to me like a more natural way you’d do this sort of thing in Inform. But for a collaborative project, rather than having a million different rules altering the player’s description firing when they leave or enter different locations – with all the attendant difficulties of things like the mass transit system or the kidnapping in the jail that move the player around in a custom way – actually the Instead rule approach seems the way to go, since it allows you to clearly cabin things.

(I’m posting some code using the quote tag rather than the code tool, since I find the way it requires using a horizontal scrollbar kind of annoying – if some other approach would make things more readable, please weigh in!)

Description of RRS5 is “To the north is the [Table of ES cyclopean word] windowless bulk of the train station. [if the number of visited rooms is greater than 10]Perhaps that is unsurprising, given the rest of the town. [end if]The town itself is downhill, on the other side of a ravine[if RRS6 is unvisited]. Somewhere down there, you can get a bath and a meal[end if].”.

Some neat reactivity in the room description here – “Table of ES cyclopean word” highlights one of this location’s major mechanics, which is reading off a random word from various themed tables. Here’s the mechanics of that:

To decide what text is (T - a table-name) word:
     choose a random row in T;
     decide on ES-word entry.

That leads to some nice straightforward syntax, as we see in the description, and then it’s just down to the tables; here’s that “cyclopean” one:

Table of ES Cyclopean
ES-word

“cyclopean”
“vast”
“massive”
“monumental”
“immense”
“gigantic”
“gargantuan”

Not a bad list, though “monstrous”, “titanic”, and/or “Brobdignagian” would have been nice additions.

The other cool thing about the description is that it updates with some world-weary familiarity after the player’s seen more of the world – of course, given the way the map is constructed I think we wound up seeing more than ten locations before even setting foot in Backwater proper!

One other detail we didn’t notice in our playthrough:

Instead of smelling yourself when the location is RRS5:
say “Your [Table of ES Stench word] is earthy and intense. You were on that train way too long.”

This is just getting personal (also, given the events of the rest of the game it’s distressing to realize this counts as the high-water mark of cleanliness!)

Speaking of smelling, here’s the trash can:

The description of ES-trash-can is “It is [if ES-trash-can is closed]a closed[else]an open[end if] metal can from which issues [es aan Table of ES Inscrutable word] [Table of ES Stench word].”

Instead of smelling the ES-trash-can: say “You have not yet learned to hate yourself to that degree.”

Procgen text is all well and good, but honestly “inscrutable stench” is hard to better.

(The coffeemancy manual isn’t in the can here yet, as Jenni mentioned upthread).

The town is dimly visible from this lookout point, and the synonyms block here discloses something interesting:

Understand “town” or “city” or “anchorhead” or “downhill” or “skyline” as ES-town when the location is RRS5

Is this a minor slip-up, or was there a point in time when the game was actually set in Anchorhead, I wonder?

Remember how I mentioned there’s a state change tied to the weather? There’s something clever in the implementation of that:

Every turn when the location is RRS5:

if a random chance of 1 in 5 succeeds:

say “[one of]The sky is oppressively [Table of ES Darkness word][or]The sky above is [es aan Table of ES Unnaturals word] [Table of ES Greenish word] [Table of ES Shade Words word][or]The clouds [one of]fly[or]move[or]scud[at random] [Table of ES Quickly word] across the sky[or]The clouds continue to race across the sky, lower than before[or]Fat, [Table of ES Dirty word] raindrops begin to fall[ES-start-raining][or]It is raining harder now, and the street is already slick[or][es-start-raining]Rain falls as it did in Noah’s day[or]The downpour continues, drenching everything[or]Heaven vomits forth streams and rivers and lakes[or]Look up with a smile on your face and you will immediately drown[or]The sky hates you[stopping].”

So each turn there’s a 20% chance some ambient text about the weather fires, and since this uses the one of… stopping construction, the player sees each little phrase in turn. But see the two “es-start-raining” things in brackets I bolded? Here’s where the cleverness comes in:

To say es-start-raining:
   if ES-weather is ES-raining:
       now ES-weather is ES-pouring;
   else:
       now ES-weather is ES-raining.
 

This is a cute way to get any amount of code you want to fire in the middle of a description, which can be quite handy – I think I remember seeing @mathbrush mention this as a favorite trick of his, too? Anyway I always forget about it and wind up with kludgy workarounds, so hopefully this time it’ll actually stick.

Moving on now to the lady who blocks your way into the town until you scare her with the insect(s) in a jar, there’s this declaration which must have been just for testing purposes:

ES-blocker has a thing called the ES-feared-object. ES-feared-object of ES-blocker is the ES-town.

That’s weird – as you’d expect, the “feared object” is the thing you show to the lady to get her to freak out and leave. But here, she’s freaked out by the town, which is is scenery and since the show action in Inform requires picking up the item first, I don’t think you can successfully scare her with it. At some point it must get set to that squicky insect jar we found.

The lady’s a charming conversationalist – here’s the table of topics she responds to:

Table of ES Conversation Topics
ES-item    ES-response
ES-doll    "It has been sent to warn us"
ES-town    "[one of]The town is [Table of ES Accursed word][or]Surely even you can see its nature[at random]"
ES-train-station-exterior    "The train station has been here a long time, in many different guises"
ES-bridge    "I have not the power to destroy it, or I certainly would"
ES-trash-can    "It is deeper than it looks"
ES-blocker    "[one of]I was summoned here to protect you, and those like you[or]I am nothing but an expression of the will of my summoners[or]I was nothing before I was summoned here, and when I depart I will be nothing again[stopping]"
yourself    "You [es-epithet]"

She has a little more to add about the doll:

After showing the ES-doll to ES-blocker:
say “[The ES-blocker] points out a small sigil on the doll’s back just below the pull-string. ‘It has a sign of Knowledge[es-comma]’ she remarks.” instead.

So yes, we’re on to the main event, the doll! So the implementation of the doll is simple enough, it has an either/or property allowing it to be “es-inane” or “es-grim”, with the description changing accordingly and the property flipping when the player turns it. The action comes when the player pulls it, as we saw. Buckle up:

Instead of pulling ES-doll:
    let item be random es-doll-safe seen thing;
    if an es-doll-safe seen thing (called better item) is carried by the player:
           now item is better item;
     let temp be substituted form of "[the item]";
     let temp-2 be substituted form of "[item] [description of item]";
     let max be the number of words in temp-2;
     if max > 15:
          now max is 15;
     let interpretations be a list of texts;
     let signifiers be a list of texts;
    repeat with index running from 1 to max:
       let new be word number index in temp-2;
        now new is new in lower case;
        unless new is "the" or new is "a" or new is "an" or new is "of":
            let chosen table be Table of ES Interpretations;
            let index character be character number 1 in new;
            repeat through Table of Lookups:
                if index character is key entry:
                   now chosen table is lookup entry;
           if new is a key listed in chosen table:
                add "[explanation entry]" to interpretations, if absent;
               add "[key entry]" to signifiers, if absent;
     if ES-doll is ES-inane:
         let signification be "";
         if the number of entries in signifiers is greater than 0:
            sort signifiers in random order;
           now signification is "[entry 1 in signifiers]! ";
        say "The doll chirps, 'I like [temp]! [signification in sentence case]Yay!'[paragraph break]There is a tinny sound of applause." instead;
   let interpretation be "";
   if the number of entries in interpretations is greater than 0:
      sort interpretations in random order;
     now interpretation is the substituted form of " [regarding the item][entry 1 in interpretations]!";
     if a random chance of 1 in 2 succeeds and the number of entries in interpretations is greater than 1:
         now interpretation is the substituted form of "[regarding the item][interpretation] [entry 2 in interpretations]!";
  say "[one of]A voice comes from within the doll's body, [Table of ES Lowness word] and gravelly[or]The doll intones[stopping]: '[Table of ES Beware Words word][if a random chance of 1 in 2 succeeds] the [Table of ES Threat Words word] of[end if] [temp]![no line break][interpretation]'";
if ES-blocker is in the location:
   now ES-feared-object of ES-blocker is item;
if item is in the location:
   say "[paragraph break][The ES-blocker] eyes [the item] in concern." instead;
else:
   say "[paragraph break][The ES-blocker] looks alarmed." instead;
if someone (called onlooker) who is not the player is in the location:
    say "[paragraph break][The onlooker] shows no sign of hearing the doll's sinister pronouncement.";
else:
   say paragraph break.

This is a lot! (Also, the copy and pasting stripped out the tabs so I attempted to manually put them back in; apologies if I fluffed them up). As best I can tell, what happens is that the code picks a random “safe” object (which just checks if it’s you, the doll, or the lady or anything the lady is wearing) from any that are around and seen (which cuts out objects in closed opaque containers and that sort of thing), then runs the item name and the first bit of its description through a series of tables that list a bunch of Lovecraftian vocabulary to see if it gets a hit; the word itself is the “key” entry, while the tables also have a short sentence that’s the “explanation” entry; the inane doll just shouts out the key, while the grim doll adds the explanation (if there are multiple hits, one gets chosen at random).

It’s worth browsing the full word list for a giggle, but here are some highlights:

“accordion” “An accordion [es-indicates] some saddening and depressing matter”
“accountant” “An accountant audits what we would prefer to keep hidden”
“acupuncture” “Acupuncture [es-indicates] need of healing”
“algae” “Algae indicates that you need to leave your emotions out of some matter”
“antediluvian” “What came before the flood is best not known”
“appendaged” “Most appendages are a bad idea”
“armpit” “An armpit [es-indicates] your social connections and your relationships to others”
“atrocious” “As horrible as the cattus atrox”

This is an in-jokey reference to the eponymous game, I believe.

“blood” “BLOOD BLOOD BLOOD”
“blue” “Blue does not exist! The color is a lie”
“broccoli” “Broccoli suggests that you are in need of spiritual nourishment”
“calamari” “Calamari indicates that you are feeling battered or beaten”
“christmas” “There is no Christmas here”
“cyclopean” “Here is a thing that has been here since before humans walked the earth”
“dog” “Dogs are evil”

Fake news.

“freckles” “Freckles are drops from the devil’s paintbrush”
“fungoid” “Fungus grows in unsavory ways”
“fungous” “Fungus grows in unsavory ways”
“fungus” “Fungus grows in unsavory ways”

Yup.

“gambrel” “No one knows what gambrel [es-indicates]”
“yellow” “Yellow is the temperamental [Table of ES Shade Words word] of Carcosa”

The other fun thing here is in the last bit of the pulling rule – if you notice, whatever the grim doll calls out becomes the lady’s feared object. Does that mean we didn’t need the weird insect jar after all?

Finally, I’ll just note that I think there must have been something added to the code later when the game was assembled, because as you may remember we came across a lot of times when the doll would say something like “flee the thing that isn’t here”, which I assume must be due to some objects getting marked as off-limits for naming/interpretation but still getting chosen as random entries. But I don’t see code here that would actually do that, unless I’m being dense (a live possibility!)

…one room down and this is already pretty long, so let’s post this and then pick up with some shorter locations.

(to be continued)

5 Likes

(continued)

Railroad Tracks (Caleb Wilson, RRS6)

We visited the tracks at the top of the second update; it’s a memorable location not just because it was our introduction to the Variegated Court, but more importantly it played host to the awesome Tubthumping easter egg!

One thing we quickly learn is that the whole rigmarole where lying down on the altar either reveals the hidden vault, or, if you’re not wearing the mask, leads to an awful death, is managed through a scene. There’s also a second scene in this location, though:

ccw-scene is a recurring scene. ccw-scene begins when the location is RRS6. ccw-scene ends when the location is not RRS6.

[A generic scene taking place when the player enters my room. I don’t think it does anything right now but I’m a little afraid to take it out right before submitting this code in case I forgot about something important it does. Yeah, I think I’ll leave it for now.]

This is highly a relatable coding practice! (It sure looks to me like it doesn’t do anything, but better safe than sorry).

This is a fun chapter:

Chapter 5 - Pointless Actions (But We Love Them)

Beyond the singing that links up with the Chumbawamba stuff, there are also the following little grace notes (I’m omitting the action definitions because they’re all set up as you’d think):

Instead of jumping when the location is RRS6: say “You jump up, trying to see above the banks of earth and bramble, but they’re too high.”

Instead of sleeping when the location is RRS6: say “You are worn out, but the thought of taking a nap in this secluded, gloomy spot gives you the creeps.”

Carry out ccw-dancing: say “It’s not a dance so much as a full-body shiver.”

Here’s some of the code for the athame you can use to slice off the tendril and end the song:

 Cutting it with is an action applying to one touchable thing and one carried thing.

 ...

Check the player cutting something with something:
   if the second noun is not ccw-athame: 
        say "That won't work." instead;
   else:
        say "[The noun] doesn't need to be cut." instead;

Oooh, that’s the kind of thing that could cause problems, because the action’s not limited to just this location, and it could prevent any other CUT X WITH Y action from working. Simple enough for the organizers to have fixed, I’m sure, but there had to have been a hundred little things like this that needed to be caught before they wreaked havoc.

This, on the other hand, is a location-limited rule that would have been more fun if it applied across the game:

Instead of trying smelling something when the ccw-leaf is worn and the location is RRS6:
say “All you can smell is bitter milkweed sap.”

Would have been nice to have some disincentive to always be dressed like a weirdo!

(And in the game)

Chapter 13 - The Shack (Not The Best-selling Inspirational Novel)

I appreciate putting little in-jokes in the source code, I gotta say – I do this and I find it a surprisingly impactful way of keeping things fun even when bugs are making life frustrating.

Nice detail that we missed:

The ccw-angles are part of the ccw-shack. They are plural-named. The printed name is “angles”. Understand “wood/frame/angle/angles” as the ccw-angles. The description is "The wood frame of the shack has subsided in a curious way. The angle formed by the shack and the ground at the bottom right should be acute, but looking closely it seems as though it is actually obtuse. The angle of the shack’s wall and roof at the upper right should be obtuse, but appears acute.

Maybe it’s just that you have a migraine coming on."

OK but all that was throat-clearing, we all know what we’re really here for:

Chapter 15 - The Mutating Chumbawamba Lyrics Earworm

[This happened a lot in 1998.]

As someone who was in high school in 1998, all I can say is FACTS.

I mean less so the part where it got stuck in your head due to a literal alien mindworm and the lyrics slowly slid towards R’lyehese, but close enough.

So how’s the trick done? The mechanism leads with a to-say statement:

To say ccw-earworm-progress:

say “[italic type][one of][ccw-knockeddown][or][ccw-drink in sentence case][or][ccw-singsthesongs in sentence case][or][ccw-earworm-progress2][stopping]![roman type][ccw-stillstuck].”;

Those first three bits are just the lines of the song, broken up into three chunks (“I get knocked down…”, then “he drinks a whiskey drink…”, lastly “he sings the songs…”; “stopping” means that each time you check out the earworm, you get the next bit of the song, except instead of cycling when you finish the song, instead you fetch up on “ccw-earworm-progress2”. Here’s that:

To say ccw-earworm-progress2:
   if ccw-chumbadecay is 0:
   replace the word "I" in ccw-knockeddown with "Iä";
   replace the word "me" in ccw-knockeddown with "Mi-Go";
   replace the word "whiskey" in ccw-drink with "Wgah";
   replace the word "vodka" in ccw-drink with "Ph'nglui";
   replace the word "lager" in ccw-drink with "Fhtagn";
   replace the word "cider" in ccw-drink with "Cthulhu";
   replace the word "good" in ccw-singsthesongs with "R'lyeh";
   replace the word "better" in ccw-singsthesongs with "Leng";
   let ccw-chumbadecay be 1;
   say "[italic type][one of][ccw-knockeddown in sentence case][or][ccw-drink in sentence case][or][ccw-singsthesongs in sentence case][or][ccw-earworm-progress3][stopping]";

Ah, so it makes some manual text-substitutions (I’m interested to learn that Leng is better than R’lyeh), then runs through the three lines of the song again, then kicks things into ccw-earworm-progress3, which is where things get really fun:

To say ccw-earworm-progress3:
   let ccw-random-row be a random number between 1 and the number of rows in the table of ccw-jargon;
   let ccw-knock-decay be a random number between 1 and the number of words in ccw-knockeddown;
   let ccw-drink-decay be a random number between 1 and the number of words in ccw-drink;
   let ccw-sings-decay be a random number between 1 and the number of words in ccw-singsthesongs;
   if unpunctuated word number ccw-knock-decay in ccw-knockeddown is not "/":
        replace unpunctuated word number ccw-knock-decay in ccw-knockeddown with the jargon in row ccw-random-row of the table of ccw-jargon;
   if unpunctuated word number ccw-drink-decay in ccw-drink is not "/":
        replace unpunctuated word number ccw-drink-decay in ccw-drink with the jargon in row ccw-random-row of the table of ccw-jargon;
   if unpunctuated word number ccw-sings-decay in ccw-singsthesongs is not "/":
        replace unpunctuated word number ccw-sings-decay in ccw-singsthesongs with the jargon in row ccw-random-row of the table of ccw-jargon;
   say "[italic type][one of][ccw-knockeddown in sentence case][or][ccw-drink in sentence case][or][ccw-singsthesongs in sentence case][cycling]";

ccw-jargon is, of course, a table with a bunch of R’lyehish nonsense – zlees and nfahs and all that – so once you’re in this third section, each time you listen to the song it’s replacing a random word in each of the three segments with a randomly-chosen bit of the Cthulhu argle-bargle (well, not each time, since it sensibly checks to make sure it’s not replacing the line-punctuating "/"s), and this time cycles through the lines so it keeps going and going… it did work out nicely, I thought!

Almost done here, I just chuckled at this note before the code creating Aunt Phyllis’s diary:

[I’m breaking up the three sections of the diary to make the code more readable, just like the original authors of the Necronomicon did.]

Abdul Alhazred might have been mad, but he was thoughtful.

The Churchyard (David Jose, WOO1)

We’re on to a new region now, WOO, which must be woods. The Churchyard is another location we visited in Chapter 2, notable for the weird aviator goggles that popped up on us when we entered (and vanished when we left).

I like the description of the church:

The description of WOO1 church is "Stark and imposing, this church might have been a thing of beauty once upon a time.  Dark, nearly black timbers huddle together conspiratorially, hiding beneath ranks of rain-slick slate rooves.  Telltale signs of some long ago fire can be seen along the tops of several of the windows.
[one of][paragraph break]High above, the light of a single candle burns in what you assume must be the bell tower.
[or][paragraph break]You could have sworn that you saw a light up there before.
[or]
[or][paragraph break]Something moves in the shadows of the bell tower.
[or][paragraph break]You watch for several moments, but see nothing out of the ordinary.  Your  imagination is getting the best of you.
[or][stopping]"

Having the sequence of “did you see something?” events progress to an empty line (with “[or][stopping]”) isn’t a technique I’d seen before, but it’s a nice way to terminate some ambient text without drawing attention to the fact that you’re out of little random lines to display.

The puzzle here involved wresting a cast-iron spike off the fence and using it to pry open the mausoleum door. There’s a note in the comments here:

[!!! If people have added crowbars or other crowbar like items, feel free to let players use them to open the door as well.]

This is a nice idea, though given how much else the organizers had on their plate I’d be surprised if this got implemented (the rules also aren’t written in an especially extensible way depending on a “pry-capable” property or anything like that, it’s just hard-coded to work with the spike so implementing alternate solutions would have been work).

Here are the goggles:

[ — RANDOM SCENERY — ]
WOO1 aviator goggles are wearable. The WOO1 aviator goggles are worn by player. The description of the WOO1 aviator goggles is “A pair of tinted, leather wrapped aviator goggles. A thin scratch mars the left lens.”

[These are meant to automatically appear on the character as soon as they wander into this room. Not sure if that’s considered unwanted behavior in the grand scheme of things.]

The printed name of the WOO1 aviator goggles is “aviator goggles”.

…and that’s all there is. The mystery remains!

A Stelzer flashlight is in WOO1.
The printed name of the Stelzer flashlight is “waterproof flashlight”.
Understand “flashlight” and “flash” and “torch” and “waterproof” and “water proof” and “light” as Stelzer flashlight.

The initial appearance of the Stelzer flashlight is “A discarded flashlight sits amidst the weeds behind an overturned gravestone.”

And here’s the item needed to get through the bridge! I’m guessing @draconis wrote this first paragraph defining the object, since it matches the naming convention of his room, and then this room’s author came up with the initial appearance to place it in the scene. At least in what I’ve seen so far, there aren’t too many examples in the code samples of authors working in each others’ stuff, so cool to see it playing out.

Middle of Woods (Jacqueline Ashwell, WOO3)

Another cool room, this is the one with the awesome kraken! We got here in Chapter 3.

First up is the implementation of the stone-skipping action:

Jacq-Skipping is an action applying to one thing. Understand “skip [something]” or “toss [something]” or “skim [something]” as Jacq-Skipping.

Instead of Jacq-Skipping the Jacq-Rock, try dropping the Jacq-Rock.

This confused me for a second, then I remembered that Inform translates THROW X to DROP.

Speaking of skipping, there’s some variation in how that can go:

say “You weigh the flat stone in the palm of your hand for a moment or two, then decide to see if you can make it skip across the pond: you wind your arm back and fling the rock at an angle near-parallel to the water. It [one of]unfortuantely hits the surface at an imperfect angle, makes a sad plop sound, and disappears from view. You sigh[or]skips once… twice… three times… then silently disappears. Not bad[or]skips once… twice… three… four five six seven times, then disappears from view. You enjoy a brief feeling of accomplishment[at random].”;

We got the sad plop one; in fairness, unlike most alternate Naomis, Nitocris probably did not grow up skipping stones.

You may remember that once we skipped the stone, the kraken woke up, grabbed us, and gave us the locket. This is all accomplished simply enough:

Before doing something when Jacq-Drenching is happening:
say [snipped long text for the events, done with one of… stopping];
stop the action.

There is one thing you can do, though, managed via an instead rule that preempts the preemption:

Jacq-Screaming is an action applying to nothing. Understand "scream" or "yell" or "shout" as Jacq-Screaming. Instead of Jacq-Screaming when the player is in WOO3:
   if Jacq-Drenching is not happening:
      say "You feel no need.";
   otherwise:
      say "If only that could save you.".

(Jacq-Drenching is the scene that governs the event, of course – it’s just set on a manual timer so it starts when you skip the stone and ends five turns later).

There’s some good scenery here, and I’m not sure I examined all of it (omitting everything except the item descriptions):

The description of the Jacq-Insects is “They scootch.”

The description of the Jacq-Scum is “Scummy, as stagnant pools of sinister water so often are.”

The description of the Jacq-Branches is “You gaze up. Were it not for the pond, you get the feeling these branches would weave themselves together to plunge these woods into near-total darkness.”

The description of the Jacq-Sky is “The moody sky provides some light, but is occasionally darkened by grey clouds.”

Lastly there’s this:

Instead of going down when the player is in WOO3, say “Go where? Into the pond? You consider the ominously inky water, and, considering yourself sane, decide against entering the pond voluntarily.”

I feel like “considering yourself sane” is doing a lot of heavy lifting there.

Outside the Library (Gavin Inglis, SPO2)

Another new region, but this one I’m having a harder time decoding – this appears to be West Backwater, like the town center, library, and environs, so not sure what would start with “spo”.

Anyway we got to this small, interstitial room in Chapter 4. It’s all pretty much as you’d imagine – the bulletin board is the most interesting thing, with its series of flyers and collection of winning kid’s stories. There’s one that’s in the code but won’t ever show up on the board, oddly:

To say inglis-story-xxxx: say “‘My dog is called Bud. He has a chip in his ear so we can find him if he gets lost. Sometimes the chip flashes blue and Bud looks around the room and chases things. Mom says Bud is not allowed to sleep in my bed but sometimes I smuggle him in. He has not bitten anybody since Grandma.’”

There’s also this maybe-ominous bit of scenery that we missed:

The inglis-columns are in SPO2. The inglis-columns are scenery. Printed name of the inglis-columns is “columns flanking the entrance”. Understand “columns” and “pillars” and “column” and “pillar” as the inglis-columns. Description of the inglis-columns is “Definitely neoclassical. Somebody has scribbled I AM BACKWATER in black permanent marker on the rear of the base.”

Wonder who wrote that?

(Still lots more to come!)

6 Likes

I defined the object, but actually didn’t write the rest of that. There’s a separate Understand line in our code:

The printed name of the Stelzer flashlight is “waterproof flashlight”. Understand “lamp” or “waterproof” or “water proof” or “light” or “flashlight” or “torch” [for the Brits] as the Stelzer flashlight.

I sent the very basics to David—the name of the item and enough of a description to write an initial appearance—and the rest was all him.

3 Likes

You mean you didn’t know that?

2 Likes

(continued)

Public Library (Cark Muckenhoupt, SPO4)

Another big 'un; the library of course plays host to the big book-returning puzzle as well as the portal-opening grimoire that’s the ultimate reward, plus the creepy librarian-impersonating monster. We first visited in Chapter 4, then popped in regularly to drop off books before finally completing the quest in Chapter 22; we noticed the “librarian’s” disappearance in the first bonus update.

We start off with a couple of fun easter eggs:

Instead of buying a book when the location is SPO4, say “It’s a public library. You can read the books here for free.”

Instead of sleeping when the location is SPO4: say “[one of]In your current state, sneaking a nap [if the player is not on baf-chairs]on one of those chairs [end if]seems like a good idea. You drift off…[paragraph break]…and wake up maybe an hour later, still tired and now with a crick in your neck.[or]No thanks. Not again.[stopping]”.

Instead of jumping when the location is SPO4:
   say "The floor creaks and squeaks as you bounce up and down.";
   if baf-librarian is in SPO4:
     try baf getting shushed for the player.

“baf getting shushed” is of course the routine for the librarian reacting to the player being noisy. Here’s the relevant text:

say “[one of]With whip-like speed, [if the noun is baf-librarian]she[otherwise]the librarian[end if] raises a finger to her lips and shushes you vigorously, then points at a sign on the counter.[paragraph break]You glance around. There’s no one around who you could possibly be disturbing[or][if the noun is baf-librarian]She[otherwise]The librarian[end if] shushes you again and taps on the sign with a fingernail, then points at you and then at the bookshelves in the middle of the room[or][if the noun is baf-librarian]She[otherwise]The librarian[end if] shushes you again, sharply. It’s a little strange how she doesn’t purse her lips when she does that. She basically just holds a finger to her mouth and blows around it[or][if the noun is baf-librarian]She[otherwise]The librarian[end if] shushes you[stopping].”

That penultimate bit about how her lips don’t move is a nice bit of foreshadowing. Here’s one other fun bit:

[Turnabout is fair play]

Baf shushing is an action applying to one thing. Understand “shush [something]” as baf shushing when the location is SPO4.

Carry out baf shushing:
say “[The noun] doesn’t react.”

Instead of baf shushing baf-librarian:
say “[one of]She immediately shushes you back, longer and more energetically. Good lord she’s got a good set of lungs[or]You’re not challenging her to another shush fight. There’s only so much humiliation you can take[stopping].”

You may recall that there are a bunch of different (useless) books that can be pulled off the shelves; there’s a bit of code to prevent those repeating too quickly that goes several steps beyond Inform’s built in “at random” function (which I think just makes sure you don’t get the same result twice in a row). The Table of Baf Disappointments is the list of different books, then there’s this code:

To say baf book description:
    Let n be a random number between 1 and the number of rows in table of baf library disappointments;
    while n is listed in baf booklog:
       now n is a random number between 1 and the number of rows in table of baf library disappointments;
    truncate baf booklog to the last 5 entries;
    add n to baf booklog;
   choose row n in table of baf library disappointments;
   say "[description entry]".

(The full list of disappointments is worth checking out, since I don’t think we saw all of them).

There are some optional deaths here that we missed:

Instead of climbing or entering baf-shelves:
say “You clamber up the shelf like it’s a creaky, rickety ladder. Then, with a groan, it falls backward onto you.”;
end the story saying “You have been crushed.”

Instead of pushing or pulling or turning or taking baf-shelves:
say “Grabbing the shelf awkwardly, you give it a mighty heave. It rocks briefly, then teeters back onto you.”;
end the story saying “You have been crushed.”

Death is an appropriate punishment for getting up to this kind of monkey business in a library, of course!

I won’t go into detail on how the book list is done – it’s relatively straightforward – but these comments provide a look at the thought process:

[I was thinking of making this preserve the book list as it was when you first get the note, but it struck me that a dynamically-shrinking list would be useful to the player, and is well within the parameters of cosmic horror.

Also, I was thinking of getting the same player-helping aspect by making it preserve the whole book list and making the player automatically cross them out or put X’s by them as you go. But that would have been more work, and would have produced annoying cases like “what if you return a book while the book list is in another room”.

As an added bonus, a mysteriously-changing list will provide a built-in excuse for any books whose printed names change over the course of play.]

There’s a response if you try to break the glass case instead of faffing about returning books:

Instead of attacking or cutting baf-case:
say “A hollow ‘SMAT!’ sound echoes around the room, but the case isn’t even scratched.”;

“SMAT” is a new onomatopoetic sound effect on me.

Speaking of the grimoire, here’s what happens when you try to read it:

Passage of baf-grimoire is “[if baf-grimoire is in baf-case][jj grimoire in the case][otherwise][jj grimoire free]”.

The “jj” is Joey Jones, who wrote the observatory room – so this suggests that both the in-case and out-of-case blurbs were written by him. Another fun look at the coordination process!

More clues about the librarian:

Instead of smelling baf-librarian, say “A gingerly sniff reveals an unexpected unpleasant smell, like expired turmeric, partly masked by flowery perfume.”

Instead of listening to baf-librarian, say “She’s absolutely silent. You can’t even hear her breathing.”

Using the adverb “gingerly” in a sentence that mentions turmeric is a nice bit of writing.

One more:

Instead of baf pointing something lit when baf-librarian is in SPO4:
say “[regarding the noun]The librarian gazes into [their] light without blinking.”

(“baf pointing something” is the action to show something to the librarian, so you can indicate the case to her so she unlocks it once you’ve cleared your book-debt).

And one more death:

Instead of attacking or cutting or burning baf-librarian:
say “You try. She moves incredibly fast for someone of her apparent age, flash-stepping up to you, grabbing your wrists, and squeezing hard. Looking down, you notice that she isn’t using her hands. Her arms are wrapped around yours like a pair of snakes. You wonder if you’re hallucinating as you pass out from the pain…”;
end the story saying “You have died”.

Not great!

We tested out XYZZY in here, and got a null result through a bug that I can’t diagnose in the code as written, but actually there’s a lot of magic-word functionality in here. You obviously just get shushed if the librarian is still around, then if you’re not carrying the grimoire it emits a flash of light. If you are carrying the grimoire, XYZZY, AZBAN, and VAADIGNEPHOD all give their own responses. Here’s XYZZY:

say “[one of]A glowing apparition bearing a blue sword materializes before you, towering over the shelves. ‘I am the great warrior Xyzzy, ancient foe of all cosmic horrors! How may I serve you, exalted one?’[paragraph break]Before you can reply, it turns as if distracted. ‘Hold on, there’s another adventurer calling on me. It never ends, does it? I’ll be back in a jiffy.’ With that, it vanishes.[if baf-librarian is in SPO4][paragraph break]The librarian doesn’t seem to have noticed anything.[end if][or]You hear a dial tone.[stopping]”;

(Since you can’t XYZZY while the librarian is in the library, this last bit will never get displayed I don’t think).

Here’s AZBAN (I’d forgotten, but the plaque on the case reveals that the author of the grimoire sometimes wrote under “Azban” as a pseudonym, which was also the name of an Abenaki trickster spirit that takes the shape of a racoon):

say “[one of]You hear a soft chuckle from the shelves.[or]There it is again. A sort of chittering, high-pitched laugh. You cautiously peer between the shelves but don’t see anything.[or]You intone the magic word and immediately peek between the shelves. The biggest, fattest raccoon you’ve ever seen is standing there, busily pulling books out and stuffing them into a sack on its back. A moment later, it notices you, startles, and scurries out of sight.[or]Nothing happens.[stopping]”;

And here’s the big V:

say "You feel a presence at your back, somehow close and unimaginably distant at the same time. Nonverbal thoughts force themselves on your mind: ";

if the player is wearing baf-dress and the player is wearing baf-wig and the player is wearing baf-mask:

say “a sense of welcome return, and of a pomise of reward for a duty fulfilled. The presence leads you irresistably through hidden ways, until your sense of self drops away like a chrysalis.”;

end the story saying “You have ceased to be as you were”;

otherwise:

say “a sense of surprise, a curiosity about your motivations in performing such a summoning. But this curiosity is brief, and soon overwhelmed by hunger.”;

end the story saying “You were not prepared”;

Well there’s our answer as to the librarian-creature’s allegiances - though since it both blocked us from getting the grimoire at first, but then handed it over in the end, it provides only an equivocal clue to whether Nitocris was always just a pawn in old Vaady’s schemes.

Speaking of library books, next up is the water fountain, which of course plays host to our favorite NPC!

Drinking Fountain (Lucian Smith, SPO8)

We first came to the fountain in Chapter Four, and finally found enough books to complete the puzzle here in Chapter Eighteen.

First off, there’s a nice custom message for anyone dumb enough to try destroying a book:

Instead of cutting or attacking or burning a library book in SPO8:
say “The horrors of this world have not yet driven you to such madness as to seriously consider defacing a library book.”

There’s also a fun toggle when trying to drink from the fountain that depends on whether or not Emmett’s been exorcised yet:

Instead of pushing or switching on or switching off the lp-button:
   If lp-ghost6 is happening:
      say "You take a drink from the fountain.  The water is cold, clear, and satisfying.";
      rule succeeds;
   else:
      say "You take a drink from the fountain.  The water is lukewarm and vaguely brackish.";
      rule succeeds;

He’s definitely a nice fellow to have around!

That “lp-ghost6” is part of the scheme used to track the progression of the ghost’s manifestations; this is done via six different scenes that fire when you’ve seen at least 1 library book, then 3, then 6, then 9; at that point the endgame of this puzzle is triggered and Emmett leaves you and heads to the fountain. There are two more scenes after that based on smashing the hole in the fountain, and then lastly having read all the books.

Notably, there are different Understand statements providing synonyms for Emmett depending on which stage he’s in:

Understand “chill”, “faint chill” as Emmett while lp-ghost1 is happening.
Understand “spark”, “chalk”, “snap”, “ice cracking”, “hovering”, “chill” as Emmett while lp-ghost2 is happening.
Understand “ghost”, “chill”, “spark”, “chalk”, “snap”, “hovering”, “well-dressed”, “African-American”, “black”, “outline”, “man”, “suit”, “tie” as Emmett while lp-ghost3 is happening.
Understand “ghost”, “chill”, “spark”, “well-dressed”, “African-American”, “black”, “outline”, “man”, “suit”, “tie” as Emmett while lp-ghost4 is happening.
Understand “ghost”, “well-dressed”, “African-American”, “black”, “outline”, “man”, “suit”, “tie” as Emmett while lp-ghost5 is happening.
Understand “Emmett”, “Josey”, “Emmet”, “Emett”, “cold”, “spot”, “collarbone”, “collar”, “shoulder”, “your collarbone”, “my collarbone”, “ghost”, “well-dressed”, “African-American”, “black”, “man” as Emmett while lp-ghost6 is happening.

The bit of code involving the sledgehammer has this apposite title:

Section Violence Is The Answer To This One

Turns out the ghostly sledgehammer has a Mjolnir-like feature:

Instead of throwing the lp-ghostly-sledgehammer at something:
say “The sledgehammer mists to nothing as it leaves your hand, then rematerializes in your arms.”

Handy!

There are a bunch of actions implemented if you try messing with Emmett when he’s in cold-spot-on-your-shoulder mode:

Instead of pulling or pushing or turning or opening or switching on or switching off or entering or closing or taking or cutting Emmett during lp-ghost6:
say “You can’t do that to a cold spot on your own shoulder, even if it is the tangible manifestation of an African-American ghost.”

Instead of taking off Emmett during lp-ghost6:
say “The cold spot seems to be part of you now.”

Instead of kissing Emmett during lp-ghost6:
say “Craning your neck, you manage to kiss the cold spot on your collarbone. It warms briefly before the cold returns.”

Instead of showing or giving something to Emmett during lp-ghost6:
say “Feeling foolish, you turn your shoulder towards [the noun], but get no response.”

Points for completeness but I am very curious which tester, if any, tried to kiss the ghost-spot.

I don’t think we did much conversing with Emmett, what with him being dead and all, but he actually does know some topics:

Table of Emmett Reactions
em_object reply
yourself “You hear a soft voice breathe, ‘Thank you,’ inside your head.”
book1 “You hear a voice echo in your head. ‘Ah, yes, book1. An amazing treatise on what it truly means to be a water buffalo. It was continually checked out from 1902-1922.’”
lp-library-book “A sigh echoes in your head. ‘Didn’t really think I needed an entry in that, but I couldn’t really complain. Jess was so up-beat about the whole thing. The entry about me is…’ Another sigh. ‘She… meant well.’”
lp-article “A voice echoes faintly in your head. ‘That’s how it ended. I just… I just was done. It was too much.’ A regretful sigh. ‘At least I got his hand. Bastard.’”
lp-fountain “‘Back in its original state. Well, mostly. Nothing’s ever exactly as it was, I suppose.’”
lp-fountain2 “‘They knew it was wrong, but they just let the ivy cover it up.’ A disgusted noise. ‘Better that it’s gone. Thank you.’”
library insignia “‘That’s been the insignia of the library since well before my time. It bothered me at first, but eventually, I came to see it as… protective. As if, through knowledge, one could rise above the madness and conquer it.’”

(book1 is one of several placeholder library books implemented for testing purposes – I doubt that bit of dialogue survives into the completed game).

One more big one coming up to close off the SPO region:

Bridge (Daniel Stelzer and Jemma Briggeman, SPO7)

We came to the bridge in Chapter 6, and if you remember that you’ll not be surprised that there’s lots to take in here. Let’s start out simple:

Instead of examining the player when the location is SPO7:
say “You’re having a hell of a day, but you’re determined to keep moving forward. Despite the burning in your limbs and the fact that you could really do with a drink right now, you’re still (miraculously) in one piece[if Stelzer-wet is true]. Your hair falls in damp straggles around your ears, occasionally dripping water into your eyes. Your clothes are weighted down with water and every breeze steals a little bit more heat from your freezing skin[end if].”

Cool, not sure we noticed the alternate description when wet!

We also noticed some procedural text that would spit up a random Lovecraftian adjective here and there – this is how the trick is done:

To say Stelzer adjective: say “[one of]hideous[or]faint[or]nameless[or]singular[or]maddening[or]abnormal[or]blasphemous[or]accursed[or]loathsome[or]eldritch[or]indescribable[or]aberrant[or]abominable[or]absurd[or]abysmal[or]alien[or]ambiguous[or]amorphous[or]anarchic[or]ancient[or]anomalous[or]appalling[or]atrocious[or]cancerous[or]cellular[or]changeable[or]confusing[or]congealed[or]corrupted[or]decomposing[or]deformed[or]degenerated[or]degraded[or]delirious[or]detestable[or]diabolical[or]diseased[or]disgusting[or]distorted[or]dreadful[or]effervescent[or]festering[or]fetid[or]fiendish[or]piscatorial[or]fluctuating[or]fluid[or]foaming[or]gangrenous[or]ghastly[or]glutinous[or]greenish[or]grim[or]grisly[or]hateful[or]hellish[or]ichorous[or]infernal[or]infested[or]inhuman[or]insipid[or]irregular[or]malevolent[or]malicious[or]malignant[or]membranous[or]menacing[or]mesmerizing[or]monstrous[or]morbid[or]mottled[or]moldering[or]nauseating[or]nebulous[or]necromantic[or]noxious[or]obscene[or]odious[or]odorous[or]oily[or]ominous[or]oozing[or]organic[or]pale[or]pallid[or]peculiar[or]perfidious[or]perverse[or]phlegmatic[or]poisonous[or]profane[or]protoplasmic[or]pseudopodal[or]pulsating[or]chthonic[or]quiescent[or]repellent[or]reprehensible[or]reptilian[or]repugnant[or]repulsive[or]resplendent[or]sacrilegious[or]sallow[or]sanguine[or]sordid[or]tenebrous[or]turbid[or]unclean[or]uncouth[or]unspeakable[or]unutterable[or]vague[or]vaporous[or]vile[or]viscous[or]warped[or]wet[or]damp[or]wretched[or]zymotic[or]infectious[or]putrescent[or]daemoniac[or]fetid[or]fungoid[or]lurking[or]non-Euclidean[or]squamous[or]ululating[at random]”.

Fairly comprehensive! I enjoy how this is almost-but-not-quite alphabetized; fits the vibe.

The main business here is of course the multiple locations wheeze. It’s actually deceptively simple! First there’s a key variable to track where the player actually is:

The Stelzer position is a number that varies. [0 = on the bridge, 1 = under the bridge, 2 = in the water, 3 = in the skeleton]

Then the scenery – and any miscellaneous items – are whisked on or off-stage whenever the position changes:

To adjust the Stelzer position to (N - a number): [Set up scenery here]
   repeat with the item running through unhandled Stelzer-vanishing things: [First remove everything]
       remove the item from play;
   if N is 0: [Then restore the things we want]
       now the Stelzer gap is in SPO7;
       now the Stelzer bridge is in SPO7;
       now the Stelzer protrusion is in SPO7; 
   else if N is 1:
       now the Stelzer weed is in SPO7;
       now the Stelzer bridge is in SPO7;
       now the Stelzer bat is in SPO7;
       now the Stelzer bat is perching;
       now the Stelzer skeleton is nowhere; [Have to handle this one specially because the player can end up inside it]
   else if N is 2:
       now the Stelzer skeleton is in SPO7;
       now Stelzer-wet is true;
   else if N is 3:
       if the Stelzer bones are unhandled, now the Stelzer bones are in SPO7;
    now the Stelzer position is N;
    try looking.

(Stelzer-vanishing is just a simple property; things are usually not Stelzer-vanishing)

Then there are a bunch of Instead of going up or down rules that perform the requisite checks, give the appropriate feedback, and call the position-adjusting code. For example, here’s the bit about going down into the water:

else if the Stelzer powder is uneaten:
    say "Without some way of breathing, you could never stay down there for long enough to make it worth the threat of hypothermia.";
else unless we are Stelzer-ready: [This checks if we have the lamp properly assembled]
   if the player encloses the Stelzer flakes:
        say "The moss is glowing gently, providing light, but will probably drift away if you go underwater, leaving you in the dark.";
   else if the player encloses a lit thing:
        say "[The list of lit things enclosed by the player] [are] likely to go out without anything to protect [them] from the water.";
   else:
        say "You have no source of light. The water is awfully dark and who knows what could be lurking down there...";
else:
   say "You lower yourself down, through the ceiling of crashing water, until you're beneath the surface. It is so cold you can feel your chest constricting and have to remind yourself to breathe. And surprisingly, down here, you can.";
   adjust the Stelzer position to 2;

How do we know if we’re Stelzer-ready?

To decide whether we are Stelzer-ready:
  if the Stelzer flakes are not lit, no;
  if the Stelzer flashlight is open, no;
  if the player encloses the Stelzer flashlight, yes;
  if the Stelzer rope is sunken and the Stelzer anchor encloses the Stelzer flashlight, yes;
  no.

There’s one other curious bit to the movement code:

After going to SPO7 [when SPO7 is unvisited]:
   say "[long intro text omitted]"

I forget whether I mentioned that there was always a long bit of text that displayed before entering the bridge; the commented-out bit would have made it so that only fired once, which I’d have thought would have made more sense. Not sure why that was removed!

The flashlight is complex but works mostly as you’d expect: it’s a transparent openable container that can accumulate a bunch of properties, including “oily” for when you get the weird liquid in it, at which point putting the flakes in makes them lit. There’s one slightly non-intuitive interaction accounted for:

Instead of tasting or eating the Stelzer bulb: say “You’ve heard it said, that if you manage to get a lightbulb all the way into your mouth without breaking it, the mechanism of the human jaw will never allow you to open your mouth wide enough to remove it again. The only way to get it out is to smash the glass. You have no intention of eating broken glass today.”.

I have not heard that, but it can’t possibly be true. Can it?

There’s also a surprisingly-robust rule accounting for what happens if you try to rub/clean the flashlight:

Instead of rubbing the wet Stelzer flashlight:
   if the Stelzer flashlight is open:
        say "You rub away the water.";
        now the Stelzer flashlight is dry;
    otherwise:
        say "You rub the water off the outside, but there's some inside it as well.";
    say "[paragraph break][bracket]If you wanted to shine the flashlight at something, just use EXAMINE and the game will understand.[close bracket][paragraph break]".

There are similar rules if the flashlight is oily or dry. The otherwise-mysterious parenthetical at the end made sense once I checked the standard rules and realized that “shine” is interpreted as the rubbing action – since it’s often used for cleaning. Not sure how many players would have stumbled across that, but it’s a thoughtful bit of design.

I don’t think we appreciated all the various ways the river could be described:

The description of the Stelzer water is “The river crashes through the cavern, its [Stelzer adjective] call echoing upon itself in cacophony. You are [one of]horrified[or]entranced[or]disgusted[or]strangely enamored[at random] by its [one of]sickly, putrid green color[or]voidish blackness that seems to absorb all light[or]crashing white froth, hissing and spitting up at you[or]swirling inky purple[or]peculiar illusion: it seems to swell with the shadows of ghosts[at random].”.

I don’t think we ever tried this, but you can try to swing on the rope, with the most interesting result when you do it right under the bridge:

say “You gather enough momentum to swing back and forth, getting close enough to see a variety of fish bones caught in the fronds around where the bat [if the Stelzer bat is perching]clings[else]was clinging[end if]. An aquatic bat? How strange. You wonder how it can manage to hold its breath that long.”;

A good clue there if you hit upon this experiment (I guess the player would probably be trying to swing over to the bat to investigate its amphibious habits).

The code for actually fixing the bridge involves a delightful definition that keeps the player from having to specify exactly which piece of the bridge they’re trying to put the slats onto:

Definition: something is Stelzer-bridgey if it is the Stelzer bridge or it is part of the Stelzer bridge.

Can’t argue with that.

Speaking of parts of the bridge, we never investigated the cords that held up the bridge:

The description of the Stelzer cords is “As you look closer, the puce strands that make up the plait seem to move. Whether some optical illusion caused by their intricate braiding or something altogether more organic, you couldn’t say. You look away quickly.”

Kinda gross.

Instead of eating or tasting the Stelzer cords: say “The [Stelzer adjective] braids slither under your tongue. What a horrible sensation!”

Even grosser!

While we’re on the subject of eating inappropriate objects, there’s also this sand that we likewise didn’t check out:

The description of the Stelzer sand is “The sand is strangely desiccated. No slime or glint of liquid, no reflection of light at all—just arid blackness, like dry charcoal from a dead fire. Upon closer inspection, it appears to consist of the crushed shells of some [Stelzer adjective] insect carapaces and tiny fragments of blackened bone.”

Instead of eating or tasting the Stelzer sand: say “The sand is sharp on your tongue like tiny shards of glass. It tastes bitter and acrid and when you spit it out, there’s a red tinge on your lips and the metallic taste of blood in your mouth.”

Ick.

Actually, I just noticed that the sand, and some pillars as well, are Stelzer vanishing scenery that goes away after you first go under the bridge, then never comes back from nowhere. I guess that’s because they’re only mentioned in that introductory text that fires when you enter the room, which you were maybe only meant to see once and represented the trip to the bridge which is skipped in subsequent turns?

Now that I look at the code, another weird niggle is that items you drop on top of the bridge don’t get whisked offscreen when you climb under the bridge, so they’re still available to mess with – anything you drop while on the rope falls into the water, though, and needs to be retrieved once you’re all the way on the sea bed. Wait, does that mean that you can drop the flashlight here and make the game unwinnable?

Bridge (hanging underneath) (Daniel Stelzer and Jemma Briggeman)

> drop flashlight
The waterproof flashlight sinks out of sight into the water.

Ruh roh. And I checked, if you eat the weed, TAKE BACK doesn’t magic you back to before you dropped the flashlight. In fairness, you’d need to be a pretty big doofus to try this so this isn’t exactly a major issue!

(One more piece of this update to come!)

5 Likes