From ec103a8f10d57386eb9329c65af1dd8bfe525337 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 20 Feb 2023 10:04:50 +0100 Subject: [PATCH 001/138] Update change log and readme --- CHANGELOG.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af6707ff..5c4d2832 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change log -## Release 11 (unreleased) +## Release 11 - Some scenes would never progress if initiated close enough to in-game midnight. Getting past the secretary seems to have been particularly vulnerable to this. - Alex's mother could pick up the player or other impossibly heavy items from the futon and place them on the counter. diff --git a/README.md b/README.md index a78cf1ff..dd4a7c78 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ An Inform 7 game by Emily Short A collage with a cat, a crumpled 50 Euro bill, some secret plans and a city map. -Copyright © 2012-2021 by Emily Short and others +Copyright © 2012-2023 by Emily Short and others *Counterfeit Monkey* is licensed under the [Creative Commons Attribution-ShareAlike 4.0 license](http://creativecommons.org/licenses/by-sa/4.0/). From febb1786e89a73e36593e9d38f9e5be3e10af207 Mon Sep 17 00:00:00 2001 From: Lynn Date: Sat, 25 Feb 2023 04:19:01 +0100 Subject: [PATCH 002/138] Add a missing period --- .../Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index e859fb3f..2cb88572 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -1173,7 +1173,7 @@ This is the pre-drawer rule: Section 4 - Crew Cabin -The Crew Cabin is a room. It is nautical and forbidden. It is indoors. The description is "It was meant to be mine, before we turned out to be inseparable It's... Spartan. But I didn't pay for expensive accommodations. Oh, yes, and I can understand that it must be a bother for you to give up the storage space. +The Crew Cabin is a room. It is nautical and forbidden. It is indoors. The description is "It was meant to be mine, before we turned out to be inseparable. It's... Spartan. But I didn't pay for expensive accommodations. Oh, yes, and I can understand that it must be a bother for you to give up the storage space. I'm fascinated to note what shape a bed can be when it's not rectangular. More sort of curved and tapering. Convenient if you're called on to house a mermaid.". From 0d9b3f5d65f6d3ae845ff1467288d8555f53471a Mon Sep 17 00:00:00 2001 From: Lynn Date: Sat, 25 Feb 2023 04:29:57 +0100 Subject: [PATCH 003/138] Make the first aid station fixed in place --- .../Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index e859fb3f..2fac6073 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -433,7 +433,7 @@ The concrete-lining is scenery in the Generator Room. The printed name is "concr The yellow paint lettering is scenery in the Generator Room. The initial appearance is "CAUTION: HIGH ENERGY EQUIPMENT, it says. DO NOT OPERATE WITHOUT TRAINING. There is also a stenciled letter A surrounded by atom-style rings." Understand "stenciled" or "letter" or "letter a" or "atom-style" or "rings" or "ring" or "atom" as the yellow paint lettering. The printed name is "[if looking]Yellow[otherwise]yellow[end if] paint lettering". -The first aid station is in the Generator Room. The initial appearance is "[A first aid station] is built onto the wall[if the first aid station is open] and hangs open[otherwise]. It is closed[end if]." The first aid station is an openable closed container. The description of the first aid station is "It's a large box mounted to the wall, with a red cross painted on the front of it." Understand "large" or "box" or "red" or "cross" as the first aid station. +The first aid station is in the Generator Room. It is fixed in place. The initial appearance is "[A first aid station] is built onto the wall[if the first aid station is open] and hangs open[otherwise]. It is closed[end if]." The first aid station is an openable closed container. The description of the first aid station is "It's a large box mounted to the wall, with a red cross painted on the front of it." Understand "large" or "box" or "red" or "cross" as the first aid station. A ranking rule when the first aid station is mentionable: increase the description-rank of the first aid station by 10. From bab9ee39b256912507a0b1d384ba58a1dec19fdf Mon Sep 17 00:00:00 2001 From: Lynn Date: Sat, 25 Feb 2023 04:38:25 +0100 Subject: [PATCH 004/138] Don't compare to the inlaid desk when it's gone In my case, I had just anagrammed it into some kind ladies. --- .../Animal Actions and Human Conversation.i7x | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 0ea66e9d..daa54b27 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -5872,10 +5872,13 @@ A description-concealing rule: Rule for writing a topic sentence about Atlantida-woman: say "[Atlantida-woman] stands between us and the eastern exit, backlit by sunlight[if the player is gelled and atlantida-woman carries the rifle]. [The rifle] hangs loose in her hand[otherwise if the player is not gelled and the atlantida-woman carries the rifle]. She has [the rifle] trained on our torso[end if]. "; if Atlantida-woman does not carry the restoration-gel rifle: - say "She dwarfs [the inlaid desk] and all the other furnishings in the room. "; - now the inlaid desk is mentioned; - now the stack of files is mentioned; - now the rubber stamp is mentioned. + if the inlaid desk is in the location: + say "She dwarfs [the inlaid desk] and all the other furnishings in the room. "; + now the inlaid desk is mentioned; + now the stack of files is mentioned; + now the rubber stamp is mentioned; + otherwise: + say "She dwarfs all of the furnishings in the room. ". Rule for listing exits while looking in Personal Apartment when atlantida-woman is in the location: do nothing instead. From 85f0c47b754fb2ba9391947eef42cd3e6f4f2bae Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 25 Feb 2023 08:30:30 +0100 Subject: [PATCH 005/138] Special-case shooting ourselves with the anagramming gun. Fixes #208 [their] was somehow adapted into "or". Now the response is (when Andra is dominant): >shoot self with gun There is a momentary splitting sensation as the gun tries to make something interesting out of a, a, a, d, e, l, n, r, and x. You reacoalesce into our original form. --- .../Extensions/Counterfeit Monkey/Tools.i7x | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index f7e7e4da..ffa04685 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -1808,7 +1808,10 @@ Check shooting something with the loaded anagramming gun: add the item to the possibles list; [* We make a list because otherwise, for any set of anagrammed objects in the repository, we will always just swap back and forth between the first two that are implemented and never get to the others.] let max be the number of entries in the possibles list; if max is 0: - say "The gun fires ruggedly into [the noun], but is unable to make anything interesting out of [the initial key]. [The noun] [recoalesce] into [their] original form." instead; + if the noun is the player: + say "There is a momentary splitting sensation as the gun tries to make something interesting out of [the initial key]. [We] reacoalesce into our original form." instead; + otherwise: + say "The gun fires ruggedly into [the noun], but is unable to make anything interesting out of [the initial key]. [The noun] [recoalesce] into [their] original form." instead; otherwise: now detritus is entry max of the possibles list. From df99b2da058f2533d2ed7e39ecd6e6e072591b33 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 20 Apr 2023 22:03:39 +0200 Subject: [PATCH 006/138] Don't try to make rooms seen. Fixes #209 94fbeac did not take waving the letter-remover at rooms into account, or the fact that rooms can not have the seen property. --- .../Extensions/Counterfeit Monkey/Tools.i7x | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index ffa04685..98e7d426 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -257,7 +257,8 @@ Setting action variables for waving the letter-remover device at an object which now letter absence is true; otherwise: let starting text be the printed name of second noun; - now the second noun is seen; + if the second noun is a thing: + now the second noun is seen; now starting text is starting text in lower case; if the second noun is yourself: now starting text is "alexandra"; From 53eebbd8e2cec536018d316b46f758746d96dbda Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 22 Apr 2023 00:32:09 +0200 Subject: [PATCH 007/138] Highlight the horses in the fountain description --- .../Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x index d6bf9881..511754c8 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x @@ -841,7 +841,7 @@ Instead of telling the children about something: [The fountain itself is similar to one in a plaza in Carcassonne. The horses-to-hoses business was a late-game addition, thanks to Jim Munroe trying to amuse the children.] -The marble fountain is a scenery container. It is in Park center. The description of the fountain is "[if horses are part of the marble fountain]It depicts some horses rising out of the waves, with trident-bearing gods on their backs, and some nymphs overseeing the whole operation. Probably 17th-century, to judge by the excessive number of writhing [figures][else if hoses are part of the marble fountain]The nymphs and trident-bearing gods are now aiming hoses out at passers-by[else if hoe is part of the marble fountain]A single bewildered nymph is carrying a hoe, which presumably isn't much use out at sea[else]The former majesty of the fountain has been extensively vandalized[end if]." +The marble fountain is a scenery container. It is in Park center. The description of the fountain is "[if horses are part of the marble fountain]It depicts [end if][if boldening is true and horses are part of the marble fountain][bold type][end if][if horses are part of the marble fountain]some horses[roman type] rising out of the waves, with trident-bearing gods on their backs, and some nymphs overseeing the whole operation. Probably 17th-century, to judge by the excessive number of writhing [figures][else if hoses are part of the marble fountain]The nymphs and trident-bearing gods are now aiming hoses out at passers-by[else if hoe is part of the marble fountain]A single bewildered nymph is carrying a hoe, which presumably isn't much use out at sea[else]The former majesty of the fountain has been extensively vandalized[end if]." The introduction is "The fountain celebrates [--] if that's the right word [--] the conquest of this island by the Dutch in 1607, it having been a Spanish possession for about 140 years before that. In spite of this the fountain bears not a word of any foreign language, the original Latin or vernacular inscriptions having been long since renovated away." From a3dfe96d68e8e964c37de2422583983ca40077d5 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 22 Apr 2023 00:34:39 +0200 Subject: [PATCH 008/138] Highlight the angry signs in the descriptiption of the protesters --- .../Extensions/Counterfeit Monkey/World Model Tweaks.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x index dfc91830..5b7f28ce 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x @@ -1396,7 +1396,7 @@ Instead of going by car when the location is offroad: move protesters backdrop to all roads in Busy Streets; move traffic backdrop to all roads in Busy Streets.] -Some protesters are a backdrop. Understand "student" or "students" as the protesters. The description is "Hundreds of people pack the sidewalk, wearing slogans and carrying angry signs." +Some protesters are a backdrop. Understand "student" or "students" as the protesters. The description is "Hundreds of people pack the sidewalk, wearing slogans and carrying [if boldening is true][bold type][end if]angry signs[roman type]." A description-concealing rule when the location is High Street (this is the hide protesters rule): rapidly set all contents of the protesters not marked for listing. From b5d7f64f5667c42c846a01503d7066211e37d182 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 22 Apr 2023 00:42:36 +0200 Subject: [PATCH 009/138] Highlight the angry signs in a simpler way --- .../Extensions/Counterfeit Monkey/World Model Tweaks.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x index 5b7f28ce..7469ae2f 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x @@ -1396,7 +1396,7 @@ Instead of going by car when the location is offroad: move protesters backdrop to all roads in Busy Streets; move traffic backdrop to all roads in Busy Streets.] -Some protesters are a backdrop. Understand "student" or "students" as the protesters. The description is "Hundreds of people pack the sidewalk, wearing slogans and carrying [if boldening is true][bold type][end if]angry signs[roman type]." +Some protesters are a backdrop. Understand "student" or "students" as the protesters. The description is "Hundreds of people pack the sidewalk, wearing slogans and carrying [angry signs]." A description-concealing rule when the location is High Street (this is the hide protesters rule): rapidly set all contents of the protesters not marked for listing. From 6e1d254e6e449074de7e106a07960a45b045a5ec Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 22 Apr 2023 00:50:03 +0200 Subject: [PATCH 010/138] Highlight the hoses and the hoe as well --- .../Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x index 511754c8..c66e7563 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x @@ -841,7 +841,7 @@ Instead of telling the children about something: [The fountain itself is similar to one in a plaza in Carcassonne. The horses-to-hoses business was a late-game addition, thanks to Jim Munroe trying to amuse the children.] -The marble fountain is a scenery container. It is in Park center. The description of the fountain is "[if horses are part of the marble fountain]It depicts [end if][if boldening is true and horses are part of the marble fountain][bold type][end if][if horses are part of the marble fountain]some horses[roman type] rising out of the waves, with trident-bearing gods on their backs, and some nymphs overseeing the whole operation. Probably 17th-century, to judge by the excessive number of writhing [figures][else if hoses are part of the marble fountain]The nymphs and trident-bearing gods are now aiming hoses out at passers-by[else if hoe is part of the marble fountain]A single bewildered nymph is carrying a hoe, which presumably isn't much use out at sea[else]The former majesty of the fountain has been extensively vandalized[end if]." +The marble fountain is a scenery container. It is in Park center. The description of the fountain is "[if horses are part of the marble fountain]It depicts [end if][if boldening is true and horses are part of the marble fountain][bold type][end if][if horses are part of the marble fountain]some horses[roman type] rising out of the waves, with trident-bearing gods on their backs, and some nymphs overseeing the whole operation. Probably 17th-century, to judge by the excessive number of writhing [figures][else if hoses are part of the marble fountain]The nymphs and trident-bearing gods are now aiming [hoses] out at passers-by[else if hoe is part of the marble fountain]A single bewildered nymph is carrying a [hoe], which presumably isn't much use out at sea[else]The former majesty of the fountain has been extensively vandalized[end if]." The introduction is "The fountain celebrates [--] if that's the right word [--] the conquest of this island by the Dutch in 1607, it having been a Spanish possession for about 140 years before that. In spite of this the fountain bears not a word of any foreign language, the original Latin or vernacular inscriptions having been long since renovated away." From 8537e0261cb5832faae1ef4dd9d8c68a57774537 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 27 Apr 2023 21:05:24 +0200 Subject: [PATCH 011/138] Highlight authenticator and public-service posters As suggested by @eriktorbjorn in issue #210. --- .../Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index aac35ad3..90081397 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -347,7 +347,7 @@ Check waving the letter-remover at the briny rivulets when the current setting o say "The letter-remover has a go, and for a moment the rivulets turn into a single, unified trickle. But the ground is so uneven that soon the liquid has diverged again into multiple rivulets. Some things can only be cleaned up the old-fashioned way, but fortunately this one isn't really our problem." instead -The Authenticator is a woman in Fish Market. Understand "tall" or "stern" or "woman" or "uniform" or "black" or "caped" as the Authenticator. The initial appearance is "A tall, stern woman is standing in the middle of the market. She wears the black caped uniform of an Authenticator, and a monocle just like mine. And I don't think I want her to see us." The description of the Authenticator is "She isn't looking our way yet, but she will be any minute now." +The Authenticator is a woman in Fish Market. Understand "tall" or "stern" or "woman" or "uniform" or "black" or "caped" as the Authenticator. The initial appearance is "A tall, stern [if boldening is true][bold type][end if]woman[roman type] is standing in the middle of the market. She wears the black caped uniform of an Authenticator, and a monocle just like mine. And I don't think I want her to see us." The description of the Authenticator is "She isn't looking our way yet, but she will be any minute now." Section 5 - Outdoor Cafe @@ -611,7 +611,7 @@ Check waving the letter-remover at the boats when the current setting of the let Check waving the letter-remover at the boats when the current setting of the letter-remover is "s": say "Deplural[izing] all the boats would be a fascinating re-enactment of historical events, except that the boats are full of harmless tourists and the letter-remover doesn't have nearly the power required to achieve that goal." -The customs-exterior is a facade in Docks. It fronts east. The initial appearance is "To the east, up a moderate rise from the sea-level docks, is the imposing exterior of the Customs House. The classical look is only a little undermined by the public-service posters along the front." The introduction is "There passports are inspected and cargo passed under authentication, foreign items renamed or confiscated, and suspected smugglers interrogated." +The customs-exterior is a facade in Docks. It fronts east. The initial appearance is "To the east, up a moderate rise from the sea-level docks, is the imposing exterior of the Customs House. The classical look is only a little undermined by the [public-service posters] along the front." The introduction is "There passports are inspected and cargo passed under authentication, foreign items renamed or confiscated, and suspected smugglers interrogated." The description is "The building itself is not especially grand, but you have never been on the good side of the people who work there, and that gives you a perfectly justifiable dislike of the place, and the sense that it's larger than life." Understand "exterior" or "customs" or "house" as the customs-exterior. The printed name is "customs house". From 2db92a271ceb7ae90fbef1195b693d9f0c0e4d98 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Apr 2023 12:04:32 +0200 Subject: [PATCH 012/138] Refer to "odes-book" rather than "odes" Unlike the single "odes-book" (with the printed name "odes"), "ode" is a kind, and the repository contains three generic odes. It is possible that the compiler thought that "odes" was referring to one of them, causing #211. This is yet to be confirmed. --- .../Animal Actions and Human Conversation.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index daa54b27..131da7cd 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -4317,7 +4317,7 @@ task-reminder is an NPC-directed quip. The reply is "[one of]Lena looks from us to [the list of things *in the contraband box]. 'So maybe you could do something with these,' she says, looking at us sidelong. I can tell she's starting to wonder whether we're legitimate[or]'If you need to get some tools or something, I'll still be here,' Lena comments. Honestly I am surprised she's so patient about our slowness on her little test[or]Lena looks us up and down as though trying to reconfigure our face into your face, the one she knows[or]Lena is waiting for us to do something to change [the list of things *in the contraband box].[stopping]." modems-complaint is an NPC-directed quip. - The reply is "[one of][if the odes is seen]'Let's go back to the odes,' Lena suggests.[otherwise if the preamps are marked-visible]'Try doing something with the modems,' Lena suggests.[otherwise]'Now the modems,' says Lena. 'Unless you're too tired.'[end if][or]Lena awaits your attention to the modems.[stopping]". + The reply is "[one of][if the odes-book is seen]'Let's go back to the odes,' Lena suggests.[otherwise if the preamps are marked-visible]'Try doing something with the modems,' Lena suggests.[otherwise]'Now the modems,' says Lena. 'Unless you're too tired.'[end if][or]Lena awaits your attention to the modems.[stopping]". modem-complaint is an NPC-directed quip. The reply is "[one of]Lena regards the solitary modem unsympathetically. 'Well, it's shrunk,' she says. 'But that doesn't make it look like what it isn't.'[or]Lena continues to look at the modem with distaste.[stopping]". From 7b5eb8f19ac193937d9eaf139eb52077dbc6388a Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Apr 2023 12:09:37 +0200 Subject: [PATCH 013/138] Clarify that ode is a kind By consistently using "an ode" instead of "the ode" in the code. --- .../Repository Alphabetic Details.i7x | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index 7839ba7b..0af61f4c 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -1576,18 +1576,18 @@ topic stuff setting Test oboe with "hard mode / y / tutorial off / load gun / look / open station / get balm / shoot balm / put lamb in bucket / x oboe / blow oboe / play oboe / play music on oboe / play chopsticks on oboe" [in the generator room holding the anagramming gun and the bullets.] -The description of the ode is "A short poem, letter-pressed attractively on a sheet of thick paper. It is entitled 'Our Ancestors, The Immortal Spirits of the Pyramids,' a fact which disinclines me to study the rest." Understand "poem" as the ode. The scent-description of the ode is "paper". +The description of an ode is "A short poem, letter-pressed attractively on a sheet of thick paper. It is entitled 'Our Ancestors, The Immortal Spirits of the Pyramids,' a fact which disinclines me to study the rest." Understand "poem" as the ode. The scent-description of the ode is "paper". -Instead of searching the ode: +Instead of searching an ode: say "A quick survey of the first verse reveals two metrical errors and a very dodgy rhyme of 'Ra' and 'car.'" -Instead of listening to the ode: +Instead of listening to an ode: say "It is mercifully silent. I don't think reading it aloud would improve my opinion of the thing." -Instead of frowning at or laughing at the ode: +Instead of frowning at or laughing at an ode: say "Yes, I share your critical sentiments exactly." -Instead of smiling at the ode: +Instead of smiling at an ode: say "[We] smile derisively." The description of the odes-book is "A slender volume of poetry, bound between red covers. It looks completely harmless and is written in English. From b9dc2f104969d57addc86ca8afa3584037405a27 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Apr 2023 12:38:12 +0200 Subject: [PATCH 014/138] Update regtest --- tools/regtest/CM-regtest-tests | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/regtest/CM-regtest-tests b/tools/regtest/CM-regtest-tests index f4503647..ad818204 100644 --- a/tools/regtest/CM-regtest-tests +++ b/tools/regtest/CM-regtest-tests @@ -9101,7 +9101,7 @@ The hundreds of people are carrying angry signs and wearing slogans. We can go north, south to Long Street South, and west from here. -The car is making an unpleasant raspy growl. +The truck is making an unpleasant raspy growl. >go to arbot We drive to Long Street South. There we struggle to find a parking spot. From 1f7b16a2164fd3a1cf08f7d35778ec11561d1083 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Apr 2023 12:43:45 +0200 Subject: [PATCH 015/138] the ode -> an ode --- .../Counterfeit Monkey/Repository Alphabetic Details.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index 0af61f4c..ba9a7ddb 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -1576,7 +1576,7 @@ topic stuff setting Test oboe with "hard mode / y / tutorial off / load gun / look / open station / get balm / shoot balm / put lamb in bucket / x oboe / blow oboe / play oboe / play music on oboe / play chopsticks on oboe" [in the generator room holding the anagramming gun and the bullets.] -The description of an ode is "A short poem, letter-pressed attractively on a sheet of thick paper. It is entitled 'Our Ancestors, The Immortal Spirits of the Pyramids,' a fact which disinclines me to study the rest." Understand "poem" as the ode. The scent-description of the ode is "paper". +The description of an ode is "A short poem, letter-pressed attractively on a sheet of thick paper. It is entitled 'Our Ancestors, The Immortal Spirits of the Pyramids,' a fact which disinclines me to study the rest." Understand "poem" as an ode. The scent-description of an ode is "paper". Instead of searching an ode: say "A quick survey of the first verse reveals two metrical errors and a very dodgy rhyme of 'Ra' and 'car.'" From 7e95cb3451c5b899165c2f838401d557953a41c6 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Apr 2023 19:12:10 +0200 Subject: [PATCH 016/138] Replace some visibility checks with location checks. Fixes #211 Anything mentioned by current quips will be considered visible, which breaks visibility checks. --- .../Animal Actions and Human Conversation.i7x | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 131da7cd..b5806d6d 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -4278,18 +4278,18 @@ A first conversation-reply rule when the current interlocutor is Lena: casually queue nice-paste; if the odes-book is marked-visible and the ream is marked-visible and the ream is disguised and the odes-book is disguised and Lena does not know trust-me: queue that-does-it as immediate obligatory; - if the modem is marked-visible and Lena is not urgently eager-to-speak: + if the modem is enclosed by location and Lena is not urgently eager-to-speak: if Lena does not recollect modem-complaint or a random chance of 1 in 3 succeeds: queue modem-complaint as immediate obligatory; - if an ode is marked-visible and Lena is not urgently eager-to-speak: + if an ode is enclosed by location and Lena is not urgently eager-to-speak: if Lena does not recollect ode-complaint: queue ode-complaint as immediate obligatory; otherwise if Lena does not recollect second-ode-complaint or a random chance of 1 in 3 succeeds: queue second-ode-complaint as immediate obligatory; - if the preamp is marked-visible and Lena is not urgently eager-to-speak: + if the preamp is enclosed by location and Lena is not urgently eager-to-speak: if Lena does not recollect preamp-complaint or a random chance of 1 in 3 succeeds: queue preamp-complaint as immediate obligatory; - if the reams are marked-visible and Lena is not urgently eager-to-speak: + if the reams are enclosed by location and Lena is not urgently eager-to-speak: if Lena does not recollect reams-complaint or a random chance of 1 in 3 succeeds: queue reams-complaint as immediate obligatory; if the reams are marked-visible and the modems are marked-visible and Lena is not urgently eager-to-speak: From 3a5fe585713a62c9c462de2de1310785ab311b1b Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Apr 2023 19:57:41 +0200 Subject: [PATCH 017/138] Replace some more visibility tests These are things that are mentioned by quips. There are plenty more of these, but I think I'll leave those until more bugs are discovered. --- .../Extensions/Counterfeit Monkey/Act III Among Scholars.i7x | 4 ++-- .../Animal Actions and Human Conversation.i7x | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index bac3adbb..59f1bc12 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -823,7 +823,7 @@ Southwest of Samuel Johnson Hall is the seminar door. The seminar door is a clos Southwest of the seminar door is Language Studies Seminar Room. The description of the Language Studies Seminar Room is "They recently redid this room, and whoever picked the decorations had postmodern tastes." The Language Studies Seminar Room is indoors, checkpoint and southern. After looking in the Language Studies Seminar Room when the seminar door is open: - if Professor Higgate is marked-visible: + if Professor Higgate is enclosed by location: continue the action; silently try closing the seminar door; if the seminar door is closed: @@ -1426,7 +1426,7 @@ A description-concealing rule when the location is the Language Studies Departme say "Through the window in Waterstone's door, [we] can see him turning the lock. When he catches us watching he gives a tight, unfriendly smile and goes back to his desk." instead.] Check examining office-door-1 when the subcommand of office-door-1 matches "waterstone": - if Professor Waterstone is marked-visible: + if Professor Waterstone is enclosed by location: try examining Professor Waterstone instead. Instead of searching the special glass window when office-door-1 is closed: diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index b5806d6d..10159dbd 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -4177,7 +4177,7 @@ Instead of saying goodbye to Slango during consulting-Slango: When consulting-Slango ends: say "This gives us something to go on, anyway. We give Slango what I intend as a reassuring nod of solidarity."; record "meeting Slango" as achieved; - if Slango is marked-visible: + if Slango is enclosed by location: if Slango is the current interlocutor: try Slango saying goodbye to the player; say "He heads out towards the docks and quickly disappears from view [--] returning to the yacht to wait for us to arrive with Brock."; @@ -4292,7 +4292,7 @@ A first conversation-reply rule when the current interlocutor is Lena: if the reams are enclosed by location and Lena is not urgently eager-to-speak: if Lena does not recollect reams-complaint or a random chance of 1 in 3 succeeds: queue reams-complaint as immediate obligatory; - if the reams are marked-visible and the modems are marked-visible and Lena is not urgently eager-to-speak: + if the reams are enclosed by location and the modems are marked-visible and Lena is not urgently eager-to-speak: if Lena does not recollect task-reminder or a random chance of 1 in 3 succeeds: queue task-reminder; if the modems are marked-visible and Lena is not urgently eager-to-speak: From cb391b67b50c89fce76396056e974dd27b87e841 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 29 Apr 2023 00:11:02 +0200 Subject: [PATCH 018/138] Revert to visibility check here Professor Waterstone is not enclosed by location, but still in scope. --- .../Extensions/Counterfeit Monkey/Act III Among Scholars.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index 59f1bc12..ccc6a05e 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -1426,7 +1426,7 @@ A description-concealing rule when the location is the Language Studies Departme say "Through the window in Waterstone's door, [we] can see him turning the lock. When he catches us watching he gives a tight, unfriendly smile and goes back to his desk." instead.] Check examining office-door-1 when the subcommand of office-door-1 matches "waterstone": - if Professor Waterstone is enclosed by location: + if Professor Waterstone is marked-visible: try examining Professor Waterstone instead. Instead of searching the special glass window when office-door-1 is closed: From 01324198da11d8688796ebd618079ea8a6fd14ce Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 29 Apr 2023 10:51:14 +0200 Subject: [PATCH 019/138] Make sure there is a newline after Batman remark. Fixes #212 There's still a double newline before the room description, but we can live with that. --- .../Counterfeit Monkey/Act II Among Smugglers.i7x | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index 90081397..77ec95e0 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -1030,14 +1030,15 @@ After going to Roundabout when the protesters are not off-stage and the location increase path description count by 1; say "The whole Roundabout has ground to a halt, with protesters walking in the street and in some places completely filling the road. But this is mostly a nuisance until I notice that there are a couple of teenagers handcuffed to a tree. -I give the wheel a yank and run the car up onto the central traffic circle a little way. Call it a parking job. We need to get those kids out of here before their arrest is processed and they go to storage. I might not have the nerve to do anything by myself, but you're with me, and I'm starting to appreciate that's like being Batman. "; +I give the wheel a yank and run the car up onto the central traffic circle a little way. Call it a parking job. We need to get those kids out of here before their arrest is processed and they go to storage. I might not have the nerve to do anything by myself, but you're with me, and I'm starting to appreciate that's like being Batman."; if the player is in a car (called target): move the target to Traffic Circle; silently try switching off a random ignition which is part of target; - follow the compass-drawing rule instead; otherwise: move the player to Traffic Circle; - follow the compass-drawing rule instead. + follow the compass-drawing rule; + stop the action. + Sanity-check doing something when the location is Traffic Circle and the player is in a car: if the noun is a thing and the noun is not enclosed by a car and the noun is not a car: From 66ea604d0dae2bd060be3f616e47813d52fd5ce5 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 29 Apr 2023 10:54:08 +0200 Subject: [PATCH 020/138] Highlight the discarded octopus --- .../Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index 77ec95e0..fb03524a 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -1148,7 +1148,7 @@ NO MORE 'NON-REFERRABLE PROCEDURES'...[line break] ...ON ECONOMIC POLICY[line break] ...ON HUMAN RIGHTS". -The stuffed octopus is a thing. It is on the giant Atlantida statue. The flexible appearance of the stuffed octopus is "The discarded stuffed octopus lies on the [ground][one of], looking sadly at us[or], googly eyes fixed on the heavens[at random]." +The stuffed octopus is a thing. It is on the giant Atlantida statue. The flexible appearance of the stuffed octopus is "The discarded [stuffed octopus] lies on the [ground][one of], looking sadly at us[or], googly eyes fixed on the heavens[at random]." The description of the stuffed octopus is "Slightly wrong, actually, but I suppose they didn't have a stuffed squid handy. Of the four symbols associated with Atlantis, the squid [--] representing invention and individuality [--] is the one that has greatest resonance for protesters[if the stuffed octopus is on the giant Atlantida statue]. From ba8bb91c1f3a219de1dcb18bda41a31f2b2a2b3f Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 29 Apr 2023 19:21:07 +0200 Subject: [PATCH 021/138] Don't remove location-questioning quips after act I This partly reverts 43bb66e, which removed all quips about asking for directions, such as "ask about airport", at the end of act I. Hopefully it won't slow things down noticeably. --- .../Extensions/Counterfeit Monkey/Schedule and Time.i7x | 3 --- 1 file changed, 3 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Schedule and Time.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Schedule and Time.i7x index 2c8db0e3..c9e2c231 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Schedule and Time.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Schedule and Time.i7x @@ -197,9 +197,6 @@ Seeking transport is a scene. Seeking transport begins when playing to plan ends When seeking transport ends: now the farmer is nowhere; now the farmer's stall is nowhere; [We want to give the sense of change here, and also get the farmer out of the way before he can be transformed into a FAME abstraction.] - repeat with item running through quips in quip-repository: - if item is a location-questioning quip and item is not where there seems arbot: - now item is nowhere; now the current daytime is mid afternoon; assign "Ask people around here if they've seen Slango"; say "...and... Slango is not here. From 65429711e10afb5e4de442a2e51ca66a67e81f20 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 29 Apr 2023 19:30:01 +0200 Subject: [PATCH 022/138] Check if subjects are marked-visible and make them invisible A workaround to make sure that things like #211 does not happen in other places. --- .../Animal Actions and Human Conversation.i7x | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 10159dbd..44b4cb0c 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -6428,4 +6428,12 @@ When Guard-capture ends in capture: abide by the game-ending rule. +Chapter 4 - Subject visibility bug + +[There is a bug where conversation subjects can randomly become marked as visible, causing all kinds of trouble. Until the root cause is found, this counters it.] + +A first every turn rule when geography is marked-visible: + repeat with N running from 1 to subject count: + now subject-number N is marked invisible. + Animal Actions and Human Conversation ends here. From 3ac7ec09526aa865d02283f2b5774e773f0e0813 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 29 Apr 2023 20:27:00 +0200 Subject: [PATCH 023/138] Some subjects should, in fact, be marked visible Such as those that are things present in the current location. --- .../Animal Actions and Human Conversation.i7x | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 44b4cb0c..a4d0ce0d 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -6434,6 +6434,7 @@ Chapter 4 - Subject visibility bug A first every turn rule when geography is marked-visible: repeat with N running from 1 to subject count: - now subject-number N is marked invisible. + unless subject-number N is enclosed by location: + now subject-number N is marked invisible. Animal Actions and Human Conversation ends here. From 920da6cb6c4d1a9f844c96f4a421ba1c8598ba57 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 2 May 2023 21:22:45 +0200 Subject: [PATCH 024/138] Highlight the live branch --- .../Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index fb03524a..13582f77 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -1114,7 +1114,7 @@ To decide what object is home for (item - the live branch): After waving the letter-remover at the olive branch creating the live branch: now the live branch is part of the huge-metal-arm; - say "[one of]It takes a little more care with aim than usual, but we do manage to strike the olive branch, turning it into a live branch. It goes green and healthy at once[or]Confidently we reconvert the olive branch[stopping]. + say "[one of]It takes a little more care with aim than usual, but we do manage to strike the [olive branch], turning it into a [live branch]. It goes green and healthy at once[or]Confidently we reconvert the [olive branch][stopping]. [irritation reaction]."; @@ -1152,7 +1152,7 @@ The stuffed octopus is a thing. It is on the giant Atlantida statue. The flexibl The description of the stuffed octopus is "Slightly wrong, actually, but I suppose they didn't have a stuffed squid handy. Of the four symbols associated with Atlantis, the squid [--] representing invention and individuality [--] is the one that has greatest resonance for protesters[if the stuffed octopus is on the giant Atlantida statue]. -This one has been tied to Atlantida's hand alongside the olive branch she traditionally carries[end if]." +This one has been tied to Atlantida's hand alongside the [end if][if the stuffed octopus is on the giant Atlantida statue and the olive branch is on the huge-metal-arm][olive branch] she traditionally carries[end if][if the stuffed octopus is on the giant Atlantida statue and the live branch is part of the huge-metal-arm][live branch] she untraditionally carries[end if]." Some traffic-island-protesters are a plural-named man. The printed name is "protesters". Understand "protesters" or "crowd" as the traffic-island-protesters. The initial appearance is "Protesters clog the street and sit or stand around the base of the statue." From dfce304f7515e704b5e6ddc6840c0eb7db8363ea Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 2 May 2023 21:23:19 +0200 Subject: [PATCH 025/138] Highlight the signet --- .../Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index 13582f77..70779617 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -1296,7 +1296,7 @@ Instead of the All-Purpose-Officer touching the live branch: gel-convert the live branch. Instead of the All-Purpose-Officer touching the protest-sign: - say "[one of]Once the All-Purpose Officer comes level with [the protest-sign], he shoots it with [the diminutive affixer], turning it into a signet[or]Forced to repeat himself, [the actor] jams the diminutive affixer into the sign a little harder than strictly necessary, with predictable results[or]Stony-faced with fury, [the actor] punches [the protest-sign] again with the diminutive affixer[stopping]. [run paragraph on][signet description][paragraph break]"; + say "[one of]Once the All-Purpose Officer comes level with [the protest-sign], he shoots it with [the diminutive affixer], turning it into a [signet][or]Forced to repeat himself, [the actor] jams the diminutive affixer into the sign a little harder than strictly necessary, with predictable results[or]Stony-faced with fury, [the actor] punches [the protest-sign] again with the diminutive affixer[stopping]. [run paragraph on][signet description][paragraph break]"; diminish the protest-sign. To diminish (item - a thing): From 9f2ed34ae912dd99b1d3f9e1227774a442ff562a Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Wed, 3 May 2023 18:42:04 +0200 Subject: [PATCH 026/138] Fix olive branch-live branch inconsistency The olive branch was on the atatue arm, while live branch was part of the arm. This made the live branch not show up in the description of the arm, and was generally confusing and inconsistent. --- .../Counterfeit Monkey/Act II Among Smugglers.i7x | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index 70779617..9d321bc0 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -1106,14 +1106,8 @@ A description-concealing rule when the location is Traffic Circle: now the olive branch is not marked for listing; now every car is not marked for listing; -To decide what object is home for (item - the olive branch): - decide on huge-metal-arm. - -To decide what object is home for (item - the live branch): - decide on huge-metal-arm. - After waving the letter-remover at the olive branch creating the live branch: - now the live branch is part of the huge-metal-arm; + now the live branch is on the huge-metal-arm; say "[one of]It takes a little more care with aim than usual, but we do manage to strike the [olive branch], turning it into a [live branch]. It goes green and healthy at once[or]Confidently we reconvert the [olive branch][stopping]. [irritation reaction]."; @@ -1152,7 +1146,7 @@ The stuffed octopus is a thing. It is on the giant Atlantida statue. The flexibl The description of the stuffed octopus is "Slightly wrong, actually, but I suppose they didn't have a stuffed squid handy. Of the four symbols associated with Atlantis, the squid [--] representing invention and individuality [--] is the one that has greatest resonance for protesters[if the stuffed octopus is on the giant Atlantida statue]. -This one has been tied to Atlantida's hand alongside the [end if][if the stuffed octopus is on the giant Atlantida statue and the olive branch is on the huge-metal-arm][olive branch] she traditionally carries[end if][if the stuffed octopus is on the giant Atlantida statue and the live branch is part of the huge-metal-arm][live branch] she untraditionally carries[end if]." +This one has been tied to Atlantida's hand alongside the [end if][if the stuffed octopus is on the giant Atlantida statue and the olive branch is on the huge-metal-arm][olive branch] she traditionally carries[end if][if the stuffed octopus is on the giant Atlantida statue and the live branch is on the huge-metal-arm][live branch] she untraditionally carries[end if]." Some traffic-island-protesters are a plural-named man. The printed name is "protesters". Understand "protesters" or "crowd" as the traffic-island-protesters. The initial appearance is "Protesters clog the street and sit or stand around the base of the statue." From 8fbcfb2fdd0a31496e005b30ff85033d1274d9a1 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 4 May 2023 11:01:07 +0200 Subject: [PATCH 027/138] Add "t inserter" as a synonym for the t-inserter I watched a poor streamer getting utterly stuck because he kept typing this. --- .../Extensions/Counterfeit Monkey/Tools.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index 98e7d426..9d9b7876 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -509,7 +509,7 @@ Chapter 3 - The T-inserter The T-inserter machine is a fixed in place enterable container in the Sensitive Equipment Testing Room. The initial appearance is "At the cen[ter] of the room is a gleaming new T-inserter Machine[if the machine is non-empty], currently containing [a random thing in the T-inserter machine][end if][one of]. This is a state of the art device: letter removal has been well understood for decades, but insertion is much more dangerous and difficult, fraught with ambiguity[or][stopping]." The description is "Made of brushed steel, it resembles an industrial espresso machine, with a space in which to insert items. A dozen small nozzles poke into this space, and the grate beneath is ready to drain off any superfluity of T-ness. There is a tiny brass plate near the base of the machine." -Understand "space" and "grate" and "inserter" as the machine. The carrying capacity of the T-inserter Machine is 1. +Understand "space" and "grate" and "inserter" and "t inserter" as the machine. The carrying capacity of the T-inserter Machine is 1. The brass plate is part of the machine. Understand "base" as the brass plate. The description is "DENTAL CONSONANTS LTD [--] ABSOLUTELY NO PALATALS OR LABIALS [--] GUARANTEED". From 3675497f01b586f55b285131162014d80cd95fcd Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 4 May 2023 11:32:44 +0200 Subject: [PATCH 028/138] Add "insert T into X" as a synonym of putting X in the T-inserter --- .../Extensions/Counterfeit Monkey/Tools.i7x | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index 9d9b7876..fe2e923c 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -638,6 +638,14 @@ Report teeing something: set pronouns from the goal-object; abide by the dangerous construction rules for the goal-object instead. +T-inserting is an action applying to one thing. Understand "insert t in/into [thing]" as t-inserting. + +Instead of t-inserting: + if the T-inserter Machine is in location: + try inserting noun into t-inserter; + otherwise: + say "[We] have no obvious way of inserting T into [the noun]." + Test it-construction with "autoupgrade / wave a-remover at pita / wave p-remover at pit / wave t-remover at it / put i in t-inserter / get it / wave t-remover at it / put i in t-inserter" holding the pita in the Sensitive Equipment Testing Room. Chapter 4 - The Synthesizer From 1ffa4feb3ae3ad82bbf014fe7f8712165934798e Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 11 May 2023 23:35:03 +0200 Subject: [PATCH 029/138] Block fast-travel before confrontation with Father. Fixes #213 Right after solving the T-insert puzzle, there was a window where fast-travelling was not blocked. --- .../Animal Actions and Human Conversation.i7x | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index a4d0ce0d..773b2b22 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -5685,6 +5685,9 @@ She's not even visible through the window any longer."; Section 10 - Father +Instead of approaching when location is the Sensitive Equipment Testing Room and cold dilemma has not happened: + try going east. + After going from the Sensitive Equipment Testing Room: now father is marked-visible; set the current interlocutor to father; From 943b9d763e01434d91e1e114fb4c2538456824da Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 12 May 2023 20:58:59 +0200 Subject: [PATCH 030/138] Stop the action when implicit opening of the backpack fails Fixes #214 and similar cases. --- .../Extensions/Counterfeit Monkey/Tools.i7x | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index fe2e923c..3a81e71f 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -131,7 +131,7 @@ A first command-string altering rule (this is the implicitly change letter-remov if the letter-remover is in a closed backpack: silently try opening the backpack; if the backpack is closed: - stop the action; + parsing fails; if the player can touch the letter-remover: unless N matches the regular expression "": say "Only the 26 letters of the English alphabet are available to the letter-remover."; @@ -1252,7 +1252,9 @@ Instead of smelling the player: say "[We] smell of lavender. It's not as bad a reek as it was earlier, though. No one would think it was anything but soap." Sanity-check putting the origin paste on something when the origin paste is in a closed backpack: - try opening the backpack. + try opening the backpack; + if the backpack is closed: + stop the action. Sanity-check putting the origin paste on the restoration gel: try putting the restoration gel on the origin paste instead. @@ -1462,7 +1464,9 @@ Before doing something when the noun is the tube or the second noun is the tube: say "[one of]Unfortunately, there's hardly any gel remaining in the tube.[or]There isn't enough gel remaining in the little tube for use.[at random]" instead. Sanity-check putting the restoration gel on something when the tub is in a closed backpack: - try opening the backpack. + try opening the backpack; + if the backpack is closed: + stop the action. Before inserting something (called the source) into something gel-related (called the target): unless the source is gel-related: [Things like "put gel in tub" are dealt with elsewhere] From 9c5cbe95a6df3764a2e7c956a0cc7c8694b3e9c1 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 23 May 2023 11:36:00 +0200 Subject: [PATCH 031/138] Highlight the bathroom window Yes, in one case we highlight "out" but not "the window". I think that makes more sense than highlighting "out the window". --- .../Counterfeit Monkey/Act III Among Scholars.i7x | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index ccc6a05e..f00c885e 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -458,10 +458,10 @@ Sanity-check locking keylessly the bathroom window: Report opening the bathroom window for the first time: - say "The window slides open with a hideous protesting shriek." instead. + say "The [if boldening is true][bold type][end if]window[roman type] slides open with a hideous protesting shriek." instead. Report closing the bathroom window: - say "[We] slide the window shut[one of]. I feel obscurely better now[or][stopping]." instead. + say "[We] slide the [if boldening is true][bold type][end if]window[roman type] shut[one of]. I feel obscurely better now[or][stopping]." instead. Before: if the noun is the bathroom window or the second noun is the bathroom window, reveal bathroom window. @@ -509,7 +509,7 @@ In-direction of Apartment Bathroom is south. [My apartment] Out-direction of Apartment Bathroom is east. [Palm Square] Rule for listing exits when the location is Apartment Bathroom: - say "[We] could climb back out the window, or [we] could go south into the rest of my apartment." + say "[We] could climb back [if boldening is true][bold type][end if]out[roman type] the window, or [we] could go [south] into the rest of my apartment." A nightstand is a supporter in the apartment bathroom. The initial appearance is "An antique [nightstand] of my mother's, which does not actually fit anywhere near my bed, is jammed into one corner of the bathroom." From d42038eef55440771d72a6938630b5a59562119b Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 18 Jun 2023 09:10:20 +0200 Subject: [PATCH 032/138] Print warning if bad startup data is embedded Prints "ERROR!!! BAD EMBEDDED STARTUP DATA!!!" at the start of the game if there is startup data embedded in the gblorb file, the interpreter supports reading resource streams, but it cannot restore from the data (usually because it comes from a different game version.) This should make #216 less likely to happen in the future. --- .../Dannii Willis/Startup Precomputation.i7x | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Dannii Willis/Startup Precomputation.i7x b/Counterfeit Monkey.materials/Extensions/Dannii Willis/Startup Precomputation.i7x index 5fdb1a5c..ee85d6bd 100644 --- a/Counterfeit Monkey.materials/Extensions/Dannii Willis/Startup Precomputation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Dannii Willis/Startup Precomputation.i7x @@ -20,6 +20,7 @@ Include (- if ( glk_gestalt( gestalt_ResourceStream, 0 ) ) { ! Open the blorb chunk if it exists + SP_embedded_data_exists = true; gg_savestr = glk_stream_open_resource( SP_Blorb_Chunk_Number, GG_SAVESTR_ROCK ); } ! Otherwise check if an external precomputation savefile exists @@ -39,6 +40,10 @@ Include (- if ( gg_savestr ) { @restore gg_savestr res; + if ( res == 1 && SP_embedded_data_exists == true ) + { + SP_bad_embedded_startup_data = true; + } glk_stream_close( gg_savestr, 0 ); gg_savestr = 0; } @@ -73,6 +78,20 @@ Include (- -). + +Include (- + +Global SP_embedded_data_exists = 0; +Global SP_bad_embedded_startup_data = 0; + +-) after "Definitions.i6t". + +Bad embedded precomputation data is a truth state that varies. The bad embedded precomputation data variable translates into I6 as "SP_bad_embedded_startup_data". + +A last when play begins rule (this is the complain if embedded precomputation data is bad rule): + if bad embedded precomputation data is true: + say "ERROR!!! BAD EMBEDDED STARTUP DATA!!!"; + Startup Precomputation ends here. ---- DOCUMENTATION ---- @@ -86,7 +105,7 @@ To embed the precomputation data inside the blorb, compile a release version of python blorbtool.py Story.gblorb import Data 9998 IFZS Story-startup-data.glkdata This extension will by default use a blorb resource number of 9998. If for some reason you need to change it, you can use this command to set another (higher) number: - + Use startup precomputation blorb chunk number of at least 10000. -This extension is released under the Creative Commons Attribution licence. Bug reports, feature requests or questions should be made at . \ No newline at end of file +This extension is released under the Creative Commons Attribution licence. Bug reports, feature requests or questions should be made at . From 4c6638539e21de32b6fdda36a97b0e2a5081e311 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 18 Jun 2023 09:49:19 +0200 Subject: [PATCH 033/138] This does not need to be a global Oops. --- .../Extensions/Dannii Willis/Startup Precomputation.i7x | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Dannii Willis/Startup Precomputation.i7x b/Counterfeit Monkey.materials/Extensions/Dannii Willis/Startup Precomputation.i7x index ee85d6bd..0af163a8 100644 --- a/Counterfeit Monkey.materials/Extensions/Dannii Willis/Startup Precomputation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Dannii Willis/Startup Precomputation.i7x @@ -15,12 +15,13 @@ The finalise startup precomputation rule translates into I6 as "SP_Save". Include (- -[ SP_Attempt_Load fref res; +[ SP_Attempt_Load fref res embedded_data_exists; + embedded_data_exists = false; ! Test if the interpreter supports resource streams if ( glk_gestalt( gestalt_ResourceStream, 0 ) ) { ! Open the blorb chunk if it exists - SP_embedded_data_exists = true; + embedded_data_exists = true; gg_savestr = glk_stream_open_resource( SP_Blorb_Chunk_Number, GG_SAVESTR_ROCK ); } ! Otherwise check if an external precomputation savefile exists @@ -40,7 +41,7 @@ Include (- if ( gg_savestr ) { @restore gg_savestr res; - if ( res == 1 && SP_embedded_data_exists == true ) + if ( res == 1 && embedded_data_exists == true ) { SP_bad_embedded_startup_data = true; } @@ -81,7 +82,6 @@ Include (- Include (- -Global SP_embedded_data_exists = 0; Global SP_bad_embedded_startup_data = 0; -) after "Definitions.i6t". From 69d5016a774680b5521414adc7371d3f385c9f70 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 24 Jun 2023 22:33:20 +0200 Subject: [PATCH 034/138] Open measuring window if closed after reading startup data Fixes a bug where the graphic map would not be shown at the start of the game if the startup precomputation data was made on an interpreter without graphics support. See discussion at #216. --- .../Extensions/Counterfeit Monkey/Multimedia.i7x | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Multimedia.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Multimedia.i7x index 649a4ed4..53a6def4 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Multimedia.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Multimedia.i7x @@ -59,6 +59,9 @@ When identification ends (this is the open the graphics window rule): if glulx graphics is supported: let main-width be the width of the main window; let measure-width be the width of the measuring window; + if measure-width is 0: + open the measuring window; + now measure-width is the width of the measuring window; unless graphics is disabled or main-width is less than 41 or measure-width is less than 405: now current graphics drawing rule is the compass-drawing rule; open the graphics window; From 31111c33b5949e590cec14e4241179e20464f88a Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 24 Jun 2023 22:36:28 +0200 Subject: [PATCH 035/138] Make insert.sh more useful This effectively reverts c431c2e. After 69d5016, it should finally work as intended. --- tools/insert.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tools/insert.sh b/tools/insert.sh index 789e8f2c..328ba0f4 100755 --- a/tools/insert.sh +++ b/tools/insert.sh @@ -1,3 +1,12 @@ #!/bin/bash +path_to_interpreter=./git +testfile="command scripts/test_minimal.txt" + +rm monkeyac.glkdata +rm testing.glkdata +rm "Counterfeit Monkey-startup-data.glkdata" + +$path_to_interpreter "../Counterfeit Monkey.materials/Release/Counterfeit Monkey.gblorb" <"$testfile" > transcript.txt + echo "y" | python2 blorbtool.py "../Counterfeit Monkey.materials/Release/Counterfeit Monkey.gblorb" import Data 9998 IFZS "Counterfeit Monkey-startup-data.glkdata" From c90e61b8439f57341625d86b6c78057fe1f57191 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 29 Jun 2023 12:05:36 +0200 Subject: [PATCH 036/138] Highlight hook and pulley. Fixes #217 --- .../Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index fe3cd099..f5fc7a0f 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -508,7 +508,7 @@ The portcullis is a door. It is east of Tunnel through Chalk and west of Persona The description of the portcullis is "Heavy black metal bars, left from a much earlier state. [portcullis status]." To say portcullis status: - say "It is currently [if the portcullis is open]raised[otherwise]lowered[end if][if the jack wedges the portcullis] a few feet by [a jack][end if][if the pulley is non-empty]. From the pulley above the portcullis hangs [a list of things *in the pulley][otherwise]. There's a pulley and hook arrangement above the portcullis, but the hook is empty[end if]". + say "It is currently [if the portcullis is open]raised[otherwise]lowered[end if][if the jack wedges the portcullis] a few feet by [a jack][end if][if the pulley is non-empty]. From the [pulley] above the portcullis hangs [a list of things *in the pulley][otherwise]. There's a [end if][if the pulley is empty and boldening is true][bold type][end if][if the pulley is empty]pulley and hook[roman type] arrangement above the portcullis, but the hook is empty[end if]". Instead of searching the portcullis: if the player is in Tunnel through Chalk: From 2805963546bcc6c79b0a738107eb41270c15cf7a Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 20 Aug 2023 09:29:31 +0200 Subject: [PATCH 037/138] Fix run-time problem with Numbered Disambiguation Choices There would be an error if the player typed X DIRECTION. Thanks to Dr Peter Bates for the fix. See discussion at https://intfiction.org/t/an-observation-on-directions-and-another-niggle-in-numbered-disambiguation-choices/ --- .../Numbered Disambiguation Choices.i7x | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Aaron Reed/Numbered Disambiguation Choices.i7x b/Counterfeit Monkey.materials/Extensions/Aaron Reed/Numbered Disambiguation Choices.i7x index 60906938..7f98f605 100644 --- a/Counterfeit Monkey.materials/Extensions/Aaron Reed/Numbered Disambiguation Choices.i7x +++ b/Counterfeit Monkey.materials/Extensions/Aaron Reed/Numbered Disambiguation Choices.i7x @@ -120,6 +120,33 @@ Does the player mean doing something when the player's command includes "[number otherwise if the second noun is not nothing and the disambiguation id of the second noun is N: it is very likely; +Chapter - Remove "direction" as a synonym for directions + +[Inform will automatically create the synonym "direction" for all directions, which would make this extension cause a run-time problem when the player types something like EXAMINE DIRECTION (because we do not handle directions, only things and rooms.) As a workaround, we remove this automatic synonym. Thanks to Dr Peter Bates for writing this code.] + +When play begins: + repeat with d running through directions: + depluralise d + +To depluralise (d - a direction): (- RemoveDirectionPlural({d}); -). + +Include (- +[ RemoveDirectionPlural o f p x y a n ; + if (o == 0) rfalse; ! null object + if (~~(o provides name)) rfalse; ! no name property + n = o.#name/WORDSIZE; ! number of names in array + if (n < 2) rfalse; ! 1 or no names in array + p = o.&name; ! address of name array + f = p-->0; ! first name in array + for (x=1:x x; ! read dictionary address of next name in array + if (y == 'direction') { + p-->x = f; ! substitute with first name in array + } + } +]; +-). + Numbered Disambiguation Choices ends here. ---- DOCUMENTATION ---- From 009b3f4d4e2ea4540bcd9765856f7ddf256d9a81 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 20 Aug 2023 09:32:32 +0200 Subject: [PATCH 038/138] Fix bad message caused by 9c5cbe9 Due to how Exit Lister works, we have to do it this way instead. (It would say "we could go south to my apartment into the rest of my apartment.") --- .../Extensions/Counterfeit Monkey/Act III Among Scholars.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index f00c885e..390972ad 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -509,7 +509,7 @@ In-direction of Apartment Bathroom is south. [My apartment] Out-direction of Apartment Bathroom is east. [Palm Square] Rule for listing exits when the location is Apartment Bathroom: - say "[We] could climb back [if boldening is true][bold type][end if]out[roman type] the window, or [we] could go [south] into the rest of my apartment." + say "[We] could climb back [if boldening is true][bold type][end if]out[roman type] the window, or [we] could go [if boldening is true][bold type][end if]south[roman type] into the rest of my apartment." A nightstand is a supporter in the apartment bathroom. The initial appearance is "An antique [nightstand] of my mother's, which does not actually fit anywhere near my bed, is jammed into one corner of the bathroom." From 56ae8886dcd510aa579bb9a2f7e29d448b2ba1ac Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 20 Aug 2023 09:37:02 +0200 Subject: [PATCH 039/138] Minor capitalization fix --- .../Animal Actions and Human Conversation.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 773b2b22..a1f46231 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -5685,7 +5685,7 @@ She's not even visible through the window any longer."; Section 10 - Father -Instead of approaching when location is the Sensitive Equipment Testing Room and cold dilemma has not happened: +Instead of approaching when location is the Sensitive Equipment Testing Room and Cold Dilemma has not happened: try going east. After going from the Sensitive Equipment Testing Room: From 190bf22979953bd3c1012470bd941617aa9a14ef Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 20 Aug 2023 09:38:01 +0200 Subject: [PATCH 040/138] Make "us" adaptive in ark death message --- .../Counterfeit Monkey/Safety Overrides and Disasters.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Safety Overrides and Disasters.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Safety Overrides and Disasters.i7x index 0aa3f122..31f75c27 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Safety Overrides and Disasters.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Safety Overrides and Disasters.i7x @@ -120,7 +120,7 @@ Unfortunately, the lab is more than enough to bury [us] under its bulk."; Check waving the letter-remover at the patron when the current setting of the letter-remover is "m" and the player knows mark-known: say "With a distinct whiff of newly sawn planks, Mark turns into an ark. From here, the width of the bow in cubits is hard to guess. It just looks huge, much too huge for the little space it's crammed into… -Unfortunately, the ark is more than sufficient to bury us under its bulk."; +Unfortunately, the ark is more than sufficient to bury [us] under its bulk."; abide by the game-ending rule. Check waving the letter-remover at the warp when the current setting of the letter-remover is "p": From 597650932097a8359944281730323b7be25a2b59 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 21 Aug 2023 00:17:37 +0200 Subject: [PATCH 041/138] Name this rule --- .../Extensions/Aaron Reed/Numbered Disambiguation Choices.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Aaron Reed/Numbered Disambiguation Choices.i7x b/Counterfeit Monkey.materials/Extensions/Aaron Reed/Numbered Disambiguation Choices.i7x index 7f98f605..7c5e2e3c 100644 --- a/Counterfeit Monkey.materials/Extensions/Aaron Reed/Numbered Disambiguation Choices.i7x +++ b/Counterfeit Monkey.materials/Extensions/Aaron Reed/Numbered Disambiguation Choices.i7x @@ -124,7 +124,7 @@ Chapter - Remove "direction" as a synonym for directions [Inform will automatically create the synonym "direction" for all directions, which would make this extension cause a run-time problem when the player types something like EXAMINE DIRECTION (because we do not handle directions, only things and rooms.) As a workaround, we remove this automatic synonym. Thanks to Dr Peter Bates for writing this code.] -When play begins: +When play begins (this is the depluralise directions rule): repeat with d running through directions: depluralise d From 2ebbbb1aedbd3e48346612b6fb0b118b6a9970b1 Mon Sep 17 00:00:00 2001 From: Vivian Thomas <26861054+Roachbones@users.noreply.github.com> Date: Fri, 25 Aug 2023 21:35:56 -0500 Subject: [PATCH 042/138] Update Act III Among Scholars.i7x Depluralize double spaces --- .../Extensions/Counterfeit Monkey/Act III Among Scholars.i7x | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index 390972ad..6e623381 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -844,7 +844,7 @@ Carry out putting Problem of Adjectives on the LSR Bookcase: The LSR bookcase is a supporter in the Language Studies Seminar Room. The initial appearance is "The bookshelves lining the walls contain the department library." The description is "Built in and sturdily made." The printed name is "bookshelf". Understand "shelf" or "shelves" or "bookshelf" as the LSR bookcase. The big table is a supporter in the Language Studies Seminar Room. "The [big table] at the cen[ter] of the room is an irregular polygon[if the LSR chair is in location and the LSR chair is not handled], with one [LSR chair] pushed up to the shortest side[end if]." - The introduction is "I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach." + The introduction is "I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach." The description is "Crafted from some exotic wood with lots of interesting burl structure. There was a wealthy donor behind the construction of this room." Understand "polygon" as the big table. @@ -996,7 +996,7 @@ Test paper-bug with "tutorial off / shutoffice / wave c-remover at cream / open A draft document is a thing. Understand "pages" or "speech" or "talk" or "asterisks" as the draft document. [Understand "paper" as the draft document when the paper is not visible.] The description is "[homonym-shame-wanted]It's fifteen pages double-spaced, and appears to be the draft of a talk Professor Waterstone is preparing to give at a convention. I immediately notice, however, that several portions of the speech are marked with angry triple asterisks [--] Waterstone's way of marking up parts of text that need serious revision. -The talk concerns 'homonym shame': the anxiety felt in the Victorian era, and still manifested at times in modern culture, about objects that shared the same name as (and therefore theoretically might be converted into) something rude. Methods of disguising the legs of pianos and crotches of trees occupy a good portion of Waterstone's exposition, and there is a page-long aside on methods of making sure that donkeys are known by that name and not by the alternative. +The talk concerns 'homonym shame': the anxiety felt in the Victorian era, and still manifested at times in modern culture, about objects that shared the same name as (and therefore theoretically might be converted into) something rude. Methods of disguising the legs of pianos and crotches of trees occupy a good portion of Waterstone's exposition, and there is a page-long aside on methods of making sure that donkeys are known by that name and not by the alternative. To judge, however, from the angry asterisking, Waterstone is still looking for at least one more example of an object susceptible to double-entendre that has been successfully rendered innocent by some linguistic modification." From 02e02a26f428e16fe73c39ed1d142877acfa20c4 Mon Sep 17 00:00:00 2001 From: Vivian Thomas <26861054+Roachbones@users.noreply.github.com> Date: Fri, 25 Aug 2023 21:37:10 -0500 Subject: [PATCH 043/138] Update Animal Actions and Human Conversation.i7x Omit extra space --- .../Animal Actions and Human Conversation.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index a1f46231..3ca010d6 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -3986,7 +3986,7 @@ whether he believes in god-2 is a questioning quip. The comment is "'Where do you stand on God?' we ask[you-are-religious].". The printed name is "whether he believes in God". The true-name is "whether he believes in god-2". [The mentions-list is {religion}.] - The reply is "'Don't give it much thought,' he says. 'Please don't tell me you're here with a pamphlet . I won't read it.'". + The reply is "'Don't give it much thought,' he says. 'Please don't tell me you're here with a pamphlet. I won't read it.'". It quip-supplies the barman. It is background-information. Understand "parker/barman" or "god" as whether he believes in god-2. From 5b66cd2cb6ab5d87bc140710affbc62153ee479b Mon Sep 17 00:00:00 2001 From: Vivian Thomas <26861054+Roachbones@users.noreply.github.com> Date: Fri, 25 Aug 2023 21:40:29 -0500 Subject: [PATCH 044/138] Update Repository Alphabetic Details.i7x Depluralize double spaces --- .../Counterfeit Monkey/Repository Alphabetic Details.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index ba9a7ddb..beda4bf7 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -2616,7 +2616,7 @@ Carry out an actor connecting something: [There's really no particular point to having the britishizing goggles change the compatibility of the plug. I just couldn't resist.] -[The heft of the massive pug is 10. The massive pug is a neuter animal. The scent-description of the massive pug is "puppies". The description of the massive pug is "With its wrinkly, short-muzzled face, curled tail and fine, glossy coat of fawn fur, it would be adorable if not for the fact that it is large enough to fill the entire room."] +[The heft of the massive pug is 10. The massive pug is a neuter animal. The scent-description of the massive pug is "puppies". The description of the massive pug is "With its wrinkly, short-muzzled face, curled tail and fine, glossy coat of fawn fur, it would be adorable if not for the fact that it is large enough to fill the entire room."] Section 13 - Pr - Pz From 47d11282b057f8fcafa20cd208f5d9e10981d952 Mon Sep 17 00:00:00 2001 From: Vivian Thomas <26861054+Roachbones@users.noreply.github.com> Date: Fri, 25 Aug 2023 21:45:10 -0500 Subject: [PATCH 045/138] Update Repository Alphabetic Details.i7x Revert redundant change --- .../Counterfeit Monkey/Repository Alphabetic Details.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index beda4bf7..ba9a7ddb 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -2616,7 +2616,7 @@ Carry out an actor connecting something: [There's really no particular point to having the britishizing goggles change the compatibility of the plug. I just couldn't resist.] -[The heft of the massive pug is 10. The massive pug is a neuter animal. The scent-description of the massive pug is "puppies". The description of the massive pug is "With its wrinkly, short-muzzled face, curled tail and fine, glossy coat of fawn fur, it would be adorable if not for the fact that it is large enough to fill the entire room."] +[The heft of the massive pug is 10. The massive pug is a neuter animal. The scent-description of the massive pug is "puppies". The description of the massive pug is "With its wrinkly, short-muzzled face, curled tail and fine, glossy coat of fawn fur, it would be adorable if not for the fact that it is large enough to fill the entire room."] Section 13 - Pr - Pz From 91f209c3ddbf422d1685f7a0fdac30c0f2121f24 Mon Sep 17 00:00:00 2001 From: Vivian Thomas <26861054+Roachbones@users.noreply.github.com> Date: Sat, 26 Aug 2023 13:54:05 -0500 Subject: [PATCH 046/138] Update Repository Alphabetic Details.i7x Depluralize "our mouths" to "our mouth" --- .../Counterfeit Monkey/Repository Alphabetic Details.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index ba9a7ddb..514a562c 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -2177,7 +2177,7 @@ The printed name of the pi-tat-inn is "pi tat inn". Understand "pi tat inn" or " The description of the pill is "It is small, round, and blue. There are no brand or generic markings to indicate what it might do." The pill is edible. The heft of the pill is 1. Instead of tasting or eating the pill: - say "[We] toss the pill into our mouths and swallow it dry. + say "[We] toss the pill into our mouth and swallow it dry. There is no immediate reaction, but after a few minutes a cramping pain begins to spread through our stomach, and it becomes difficult to breathe. Yellow and blue spots float in front of our eyes. Our skin begins to itch. Dimly I wonder whether these symptoms correspond to any real medical condition or whether the pill is simply poisonous by invention; but [we] [are] not clear-minded enough to go on thinking these sorts of thoughts for long."; end the story saying "[We] have poisoned ourself" From 94a6281f941b62da30d8bedffa5ea45fe05c1992 Mon Sep 17 00:00:00 2001 From: Vivian Thomas <26861054+Roachbones@users.noreply.github.com> Date: Sun, 27 Aug 2023 17:52:55 -0500 Subject: [PATCH 047/138] Omit double space: "and the" --- .../Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x index c77b6915..0749e519 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x @@ -864,7 +864,7 @@ I want to stop you, but you've got the upper hand now[or][stopping]. 'Yeah, but [regarding the victim][they] [don't] look like a criminal mastermind, does [they]?' -[end if][one of]There's a noise like the firing of a restoration gel rifle and [or]The rifle fires again, followed by[stopping] the sound of [the victim] collapsing into [a list of things which proffer the victim]. 'Nice try,' shouts a voice from outside. 'Next?'"; +[end if][one of]There's a noise like the firing of a restoration gel rifle and[or]The rifle fires again, followed by[stopping] the sound of [the victim] collapsing into [a list of things which proffer the victim]. 'Nice try,' shouts a voice from outside. 'Next?'"; now victim is nowhere; otherwise if the victim is the patsy-woman: now the story viewpoint is second person singular; From 78e8adf17c9efc48610e71f13dbb6b4efda85a18 Mon Sep 17 00:00:00 2001 From: Vivian Thomas <26861054+Roachbones@users.noreply.github.com> Date: Sun, 27 Aug 2023 17:54:14 -0500 Subject: [PATCH 048/138] Remove double space: "and the" --- tools/regtest/CM-regtest | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/regtest/CM-regtest b/tools/regtest/CM-regtest index 343b99fa..9652b5ab 100644 --- a/tools/regtest/CM-regtest +++ b/tools/regtest/CM-regtest @@ -3657,7 +3657,7 @@ I want to stop you, but you've got the upper hand now. The pa backs out the door. -There's a noise like the firing of a restoration gel rifle and the sound of the pa collapsing into a pearl. "Nice try," shouts a voice from outside. "Next?" +There's a noise like the firing of a restoration gel rifle and the sound of the pa collapsing into a pearl. "Nice try," shouts a voice from outside. "Next?" I vote we gel Brock and send him out to my father. No, hear me out. Brock's cover is probably not in great shape anyway. You might be able to rescue him later. And it would be a coup for my father to have a real big arrest to put on the record. @@ -4624,7 +4624,7 @@ I want to stop you, but you've got the upper hand now. The pa backs out the door. -There's a noise like the firing of a restoration gel rifle and the sound of the pa collapsing into a pearl. "Nice try," shouts a voice from outside. "Next?" +There's a noise like the firing of a restoration gel rifle and the sound of the pa collapsing into a pearl. "Nice try," shouts a voice from outside. "Next?" I vote we gel Brock and send him out to my father. No, hear me out. Brock's cover is probably not in great shape anyway. You might be able to rescue him later. And it would be a coup for my father to have a real big arrest to put on the record. From 0a75f000bcb06eb0dd7595852a0296639a38843d Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 29 Aug 2023 03:04:07 +0200 Subject: [PATCH 049/138] Update regtests --- tools/regtest/CM-regtest | 4 ++-- tools/regtest/CM-regtest-hard | 4 ++-- tools/regtest/CM-regtest-tests | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/regtest/CM-regtest b/tools/regtest/CM-regtest index 9652b5ab..10fa51e5 100644 --- a/tools/regtest/CM-regtest +++ b/tools/regtest/CM-regtest @@ -1961,7 +1961,7 @@ The snapping continues. > get draft /We (take|get|pick up|acquire) the draft document. It's fifteen pages double-spaced, and appears to be the draft of a talk Professor Waterstone is preparing to give at a convention. I immediately notice, however, that several portions of the speech are marked with angry triple asterisks — Waterstone's way of marking up parts of text that need serious revision. -The talk concerns "homonym shame": the anxiety felt in the Victorian era, and still manifested at times in modern culture, about objects that shared the same name as (and therefore theoretically might be converted into) something rude. Methods of disguising the legs of pianos and crotches of trees occupy a good portion of Waterstone's exposition, and there is a page-long aside on methods of making sure that donkeys are known by that name and not by the alternative. +The talk concerns "homonym shame": the anxiety felt in the Victorian era, and still manifested at times in modern culture, about objects that shared the same name as (and therefore theoretically might be converted into) something rude. Methods of disguising the legs of pianos and crotches of trees occupy a good portion of Waterstone's exposition, and there is a page-long aside on methods of making sure that donkeys are known by that name and not by the alternative. To judge, however, from the angry asterisking, Waterstone is still looking for at least one more example of an object susceptible to double-entendre that has been successfully rendered innocent by some linguistic modification. @@ -2048,7 +2048,7 @@ They recently redid this room, and whoever picked the decorations had postmodern /A massive plexiglas case takes up one corner of the room. (There is|The plexiglas case contains|In the plexiglas case is) a compact but high-powered late model synthesizer( in the plexiglas case)?. -The big table at the center of the room is an irregular polygon, with one chair pushed up to the shortest side. I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach. +The big table at the center of the room is an irregular polygon, with one chair pushed up to the shortest side. I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach. The snapping continues. diff --git a/tools/regtest/CM-regtest-hard b/tools/regtest/CM-regtest-hard index a0c7024b..e83efc60 100644 --- a/tools/regtest/CM-regtest-hard +++ b/tools/regtest/CM-regtest-hard @@ -1517,7 +1517,7 @@ The printer whirs as though clearing its throat, and then begins to spit pages r > get draft /We (take|get|pick up|acquire) the draft document. It's fifteen pages double-spaced, and appears to be the draft of a talk Professor Waterstone is preparing to give at a convention. I immediately notice, however, that several portions of the speech are marked with angry triple asterisks — Waterstone's way of marking up parts of text that need serious revision. -The talk concerns "homonym shame": the anxiety felt in the Victorian era, and still manifested at times in modern culture, about objects that shared the same name as (and therefore theoretically might be converted into) something rude. Methods of disguising the legs of pianos and crotches of trees occupy a good portion of Waterstone's exposition, and there is a page-long aside on methods of making sure that donkeys are known by that name and not by the alternative. +The talk concerns "homonym shame": the anxiety felt in the Victorian era, and still manifested at times in modern culture, about objects that shared the same name as (and therefore theoretically might be converted into) something rude. Methods of disguising the legs of pianos and crotches of trees occupy a good portion of Waterstone's exposition, and there is a page-long aside on methods of making sure that donkeys are known by that name and not by the alternative. To judge, however, from the angry asterisking, Waterstone is still looking for at least one more example of an object susceptible to double-entendre that has been successfully rendered innocent by some linguistic modification. @@ -1590,7 +1590,7 @@ They recently redid this room, and whoever picked the decorations had postmodern /A massive plexiglas case takes up one corner of the room. (There is|The plexiglas case contains|In the plexiglas case is) a compact but high-powered late model synthesizer( in the plexiglas case)?. -The big table at the center of the room is an irregular polygon, with one red chair pushed up to the shortest side. I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach. +The big table at the center of the room is an irregular polygon, with one red chair pushed up to the shortest side. I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach. /(We could|I'd like to|We want to|I'm inclined to|My response would be to) ask which conlangs she knows. diff --git a/tools/regtest/CM-regtest-tests b/tools/regtest/CM-regtest-tests index ad818204..117ace09 100644 --- a/tools/regtest/CM-regtest-tests +++ b/tools/regtest/CM-regtest-tests @@ -2548,7 +2548,7 @@ The bookshelves lining the walls contain the department library. There are Histo A massive plexiglas case takes up one corner of the room. In the plexiglas case is a compact but high-powered late model synthesizer. -The big table at the center of the room is an irregular polygon, with one chair pushed up to the shortest side. I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach. +The big table at the center of the room is an irregular polygon, with one chair pushed up to the shortest side. I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach. >put problem away We take a moment to find the proper place for the book. @@ -5863,7 +5863,7 @@ We already have that. We already have that. >take the pill -We toss the pill into our mouths and swallow it dry. +We toss the pill into our mouth and swallow it dry. There is no immediate reaction, but after a few minutes a cramping pain begins to spread through our stomach, and it becomes difficult to breathe. Yellow and blue spots float in front of our eyes. Our skin begins to itch. Dimly I wonder whether these symptoms correspond to any real medical condition or whether the pill is simply poisonous by invention; but we are not clear-minded enough to go on thinking these sorts of thoughts for long. @@ -5871,7 +5871,7 @@ That is, that's what would have happened if we had done something so foolish. Sh >yes >take pill -We toss the pill into our mouths and swallow it dry. +We toss the pill into our mouth and swallow it dry. There is no immediate reaction, but after a few minutes a cramping pain begins to spread through our stomach, and it becomes difficult to breathe. Yellow and blue spots float in front of our eyes. Our skin begins to itch. Dimly I wonder whether these symptoms correspond to any real medical condition or whether the pill is simply poisonous by invention; but we are not clear-minded enough to go on thinking these sorts of thoughts for long. @@ -5960,7 +5960,7 @@ The bookshelves lining the walls contain the department library. There are Histo A massive plexiglas case takes up one corner of the room. There is a compact but high-powered late model synthesizer in the plexiglas case. -The big table at the center of the room is an irregular polygon, with one red chair pushed up to the shortest side. I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach. +The big table at the center of the room is an irregular polygon, with one red chair pushed up to the shortest side. I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach. >wave s-remover at screws We reset the device to s. With a distinct whiff of deodorant, the screws turn into some crew. Five (or six? it's extremely hard to count) swarthy sailors. They look buff and burly and have very thick eyebrows. @@ -12207,7 +12207,7 @@ The bookshelves lining the walls contain the department library. On the bookshel A massive plexiglas case takes up one corner of the room. In the plexiglas case is a compact but high-powered late model synthesizer. -The big table at the center of the room is an irregular polygon, with one red chair pushed up to the shortest side. I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach. +The big table at the center of the room is an irregular polygon, with one red chair pushed up to the shortest side. I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach. >x chair It is an ordinary inexpensive variety of chair, made locally and found around the island in great numbers. This one has been painted red. From 71da43f22a83b1ce032c3366debc0ae00e316234 Mon Sep 17 00:00:00 2001 From: Lynn Date: Sat, 2 Sep 2023 02:33:56 +0200 Subject: [PATCH 050/138] Remove more double spaces --- CHANGELOG.md | 4 ++-- .../Act I Among Sightseers.i7x | 2 +- .../Act III Among Scholars.i7x | 2 +- .../Act V Atlantida Herself.i7x | 2 +- tools/regtest/CM-regtest | 8 ++++---- tools/regtest/CM-regtest-hard | 4 ++-- tools/regtest/CM-regtest-tests | 16 ++++++++-------- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c4d2832..27a0de79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,7 +42,7 @@ ### Parsing -- Adds yes and no in Lojban (go'i and go'inai) as synonyms to their English counterparts. These make sense as valid replies when Professor Higgate asks if the player speaks Lojban. +- Adds yes and no in Lojban (go'i and go'inai) as synonyms to their English counterparts. These make sense as valid replies when Professor Higgate asks if the player speaks Lojban. ### Cosmetic output errors @@ -115,7 +115,7 @@ - Adds PASSKEY, another kind of plural PITS, plural PIT TRAPS, and a non-liquid kind of TEAR. - Fixes the broken plural ILLS and plural POTS that were listed in the code but impossible to create. - Creating CAT ARMY, COMPLICIT SHARK, SCREE, SORD, TOMS, RIG, or ROCK BAND no longer ends the game. This makes it possible to create some previously unreachable objects, such as TOMCATS. -- Creating TILLS does end the game, however, saving us from implementing plural TOLLS and TELLS. +- Creating TILLS does end the game, however, saving us from implementing plural TOLLS and TELLS. - The joke responses to attempting to synthesize ROCK and ROLL, KEY-LIME and PI, SILL and CATE, and PAN and EAR now work when using the programmable dais as well as the synthesizer. - The BASINS and derivatives BASIS and BASS are reinstated. These were removed by mistake in release 7. diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x index c66e7563..e10788d6 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x @@ -1639,7 +1639,7 @@ topic reply "university/college/education" "The guidebook praises the many excellent departments and exceptional research work performed at the university. This is all true, naturally." "new church/cathedral" or "church/cathedral" "The guidebook devotes two and a half pages to the splendors of the New Church, located on the western edge of the town square. It particularly admires the clean lines of the architecture, the solidly constructed pews, and the austere decoration; in fact, the more you read, the more the guide seems to be rhapsod[izing] about what the builders left [i]out[/i], instead of what they put in. The guide also recommends a visit to the church gift shop, which apparently supports assorted worthy causes, such as, for instance, buying a new roof for the structure and paying a custodial staff." "food/eating/dining/restaurant/restaurants/eateries/cafe/cafes/café/bistro/cafés/eatery/lunch/dinner/breakfast" "The guidebook lists several places to eat around town: the outdoor café near the docks; a Food Corner sometimes found in the town square; the restaurant attached to the Fleur D'Or hotel." -"lucius" or "quagmire" or "lucius quagmire" or "disturbance of meaning" "A brief and plainly expurgated entry indicates that Lucius Quagmire was a film-maker in the early part of the 20th century who founded the Disturbance of Meaning group with the intention to undermine the Anglophone hegemony. He was convicted of treason." +"lucius" or "quagmire" or "lucius quagmire" or "disturbance of meaning" "A brief and plainly expurgated entry indicates that Lucius Quagmire was a film-maker in the early part of the 20th century who founded the Disturbance of Meaning group with the intention to undermine the Anglophone hegemony. He was convicted of treason." Every turn when the attendant carries a louse: diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index 6e623381..546db7c7 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -1342,7 +1342,7 @@ He locks his door again and goes out. I think he is actually humming something." complete "Speak to Professor Waterstone and get his invitation to see the T-inserter"; say "[line break]>"; custom-wait for any key; - say "[line break]Before we can do anything, Waterstone pops his head back in. 'What you did there [--] not strictly within the rules. But I admire, shall we say, [i]Realpolitik[/i]. You'll go far. Ignore Brown, but you'd probably do that anyway. Never talk to Higgate at all. I will see you later.'[paragraph break]And he pops back out."; + say "[line break]Before we can do anything, Waterstone pops his head back in. 'What you did there [--] not strictly within the rules. But I admire, shall we say, [i]Realpolitik[/i]. You'll go far. Ignore Brown, but you'd probably do that anyway. Never talk to Higgate at all. I will see you later.'[paragraph break]And he pops back out."; rule succeeds. A Water-reaction rule for the passage when the ass does not proffer the passage: diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index f5fc7a0f..68a6177f 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -637,7 +637,7 @@ Chapter 3 - Atlantida's Spaces Section 1 - Personal Apartment -The Personal Apartment is a room. It is indoors, checkpoint and forbidden. The description is "At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. [if the oil-paintings are in the location][Oil-paintings] on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. [end if]An antique bed stands in the cen[ter] of the room." +The Personal Apartment is a room. It is indoors, checkpoint and forbidden. The description is "At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. [if the oil-paintings are in the location][Oil-paintings] on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. [end if]An antique bed stands in the cen[ter] of the room." atlantida-woman is a woman in the Personal Apartment. [She is on the fancy bed.] The printed name of atlantida-woman is "Atlantida". The description of atlantida-woman is "Her face is ageless, her eyes a piercing blue. She looks like Phyllida Shaply, our famous forebear, except that there is something ethereal and heroic about her as well." diff --git a/tools/regtest/CM-regtest b/tools/regtest/CM-regtest index 10fa51e5..e4d0bf1f 100644 --- a/tools/regtest/CM-regtest +++ b/tools/regtest/CM-regtest @@ -4147,7 +4147,7 @@ I open the portcullis. > e Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. The metal portcullis guards the way back. It is currently raised. From the pulley above the portcullis hangs a counterweight. @@ -4288,7 +4288,7 @@ She gets to her feet. /(I |I have a (brief|quick|short) |I make the( brief| quick| short)? |It's a( brief| quick| short)? )(walk|hike). Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. Atlantida stands nearby, urging me to hurry out via the Private Solarium. I think she's enjoying her role as conspiratorial heroine. @@ -5165,7 +5165,7 @@ You open the portcullis. > e Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. The metal portcullis guards the way back. It is currently raised. From the pulley above the portcullis hangs a counterweight. @@ -5308,7 +5308,7 @@ She gets to her feet. /(You |You have a (brief|quick|short) |You make the( brief| quick| short)? |It's a( brief| quick| short)? )(walk|hike). Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. Atlantida stands nearby, urging you to hurry out via the Private Solarium. I think she's enjoying her role as conspiratorial heroine. diff --git a/tools/regtest/CM-regtest-hard b/tools/regtest/CM-regtest-hard index e83efc60..a0fed498 100644 --- a/tools/regtest/CM-regtest-hard +++ b/tools/regtest/CM-regtest-hard @@ -3327,7 +3327,7 @@ You open the portcullis. > e Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. The metal portcullis guards the way back. It is currently raised. From the pulley above the portcullis hangs a counterweight. @@ -3470,7 +3470,7 @@ She gets to her feet. /(You |You have a (brief|quick|short) |You make the( brief| quick| short)? |It's a( brief| quick| short)? )(walk|hike). Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. Atlantida stands nearby, urging you to hurry out via the Private Solarium. I think she's enjoying her role as conspiratorial heroine. diff --git a/tools/regtest/CM-regtest-tests b/tools/regtest/CM-regtest-tests index 117ace09..b6cbf20d 100644 --- a/tools/regtest/CM-regtest-tests +++ b/tools/regtest/CM-regtest-tests @@ -10997,7 +10997,7 @@ We open the portcullis. >e Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. The metal portcullis guards the way back. It is currently raised. From the pulley above the portcullis hangs a counterweight. @@ -11499,7 +11499,7 @@ There's a faint tang of salt air. >e Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. The metal portcullis guards the way back. It is currently raised. From the pulley above the portcullis hangs a counterweight. @@ -11722,7 +11722,7 @@ We open the portcullis. >go through portcullis Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. The metal portcullis guards the way back. It is currently raised. From the pulley above the portcullis hangs a counterweight. @@ -11772,7 +11772,7 @@ My response would be to ask whether the protesters feel the same way. >look Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. Atlantida stands between us and the eastern exit, backlit by sunlight. The restoration gel rifle hangs loose in her hand. @@ -11795,7 +11795,7 @@ The infertile astrologer falls awkwardly to earth and looks around in confusion. >look Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. Atlantida stands between us and the eastern exit, backlit by sunlight. She dwarfs the inlaid desk and all the other furnishings in the room. @@ -11867,7 +11867,7 @@ We open the portcullis. >go through portcullis Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. The metal portcullis guards the way back. It is currently raised. From the pulley above the portcullis hangs a counterweight. @@ -11916,7 +11916,7 @@ My response would be to ask whether the protesters feel the same way. >look Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. Atlantida stands between us and the eastern exit, backlit by sunlight. The restoration gel rifle hangs loose in her hand. @@ -11939,7 +11939,7 @@ The infertile astrologer falls awkwardly to earth and looks around in confusion. >look Personal Apartment -At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. +At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. Oil paintings on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. An antique bed stands in the center of the room. Atlantida stands between us and the eastern exit, backlit by sunlight. She dwarfs the inlaid desk and all the other furnishings in the room. From 8c4e715860fbdb4d71ce4935c965ef9e40cde4d5 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 31 Oct 2023 14:25:55 +0100 Subject: [PATCH 051/138] Fix trying to set a thing variable to a location. Fixes #223 --- .../Extensions/Counterfeit Monkey/Dispensers.i7x | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x index bec2c889..2cf45963 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x @@ -54,7 +54,8 @@ Instead of squeezing something dispenser-like (called dispenser-thing): otherwise: if target is nothing: say "We give the dispenser a squeeze and it deposits [a soap-like] on the floor, the sink having been removed from the area."; - now target is the location; + move the soap-like to the location; + stop the action; otherwise: if target is non-empty: emergency-empty target; From c83273ba25fb21f85893e5bf220f71f1b9106fb9 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Wed, 1 Nov 2023 12:38:41 +0100 Subject: [PATCH 052/138] Nicer fix for #223 Let's change the type of the variable instead. I like this one better. --- .../Extensions/Counterfeit Monkey/Dispensers.i7x | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x index 2cf45963..81a88834 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x @@ -40,7 +40,8 @@ Sanity-check taking the sop-dispenser when the sop is in the sop-dispenser: Instead of squeezing something dispenser-like (called dispenser-thing): let soap-like be a content corresponding to a source of dispenser-thing in the Table of Dispensers; if soap-like is in the dispenser-thing: - let target be a random sink in the location; + let target be an object; + now target is a random sink in the location; if the soap-sap-receptacle-supporter is non-empty: now target is the first thing held by soap-sap-receptacle-supporter; if target is a sink: @@ -54,8 +55,7 @@ Instead of squeezing something dispenser-like (called dispenser-thing): otherwise: if target is nothing: say "We give the dispenser a squeeze and it deposits [a soap-like] on the floor, the sink having been removed from the area."; - move the soap-like to the location; - stop the action; + now target is the location; otherwise: if target is non-empty: emergency-empty target; From 4a844e7dd5db92c03a79043c79da9664a887952a Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 17 Nov 2023 15:36:52 +0100 Subject: [PATCH 053/138] Update Subcommands by Daniel Stelzer Now at version 2/221104. Does not seem to fix any known Counterfeit Monkey bugs, though. --- .../Extensions/Daniel Stelzer/Subcommands.i7x | 892 ++++++++++-------- 1 file changed, 495 insertions(+), 397 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x index dee3400e..b4055667 100644 --- a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x +++ b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x @@ -1,7 +1,11 @@ -Subcommands by Daniel Stelzer begins here. +Version 2/221104 of Subcommands by Daniel Stelzer begins here. "Exposes the snippets referring to each noun." +"incorporating fixes from Vince Laviano" + +Chapter - Globals + An object has a snippet called the subcommand. The subcommand property translates into I6 as "parsed_snippet". Include (- @@ -9,88 +13,140 @@ Property parsed_snippet; Constant EmptySnippet = 100; -) after "Definitions.i6t". -Include (- -[ NounDomain domain1 domain2 context dont_ask - first_word i j k l answer_words marker snip; - #Ifdef DEBUG; - if (parser_trace >= 4) { - print " [NounDomain called at word ", wn, "^"; - print " "; - if (indef_mode) { - print "seeking indefinite object: "; - if (indef_type & OTHER_BIT) print "other "; - if (indef_type & MY_BIT) print "my "; - if (indef_type & THAT_BIT) print "that "; - if (indef_type & PLURAL_BIT) print "plural "; - if (indef_type & LIT_BIT) print "lit "; - if (indef_type & UNLIT_BIT) print "unlit "; - if (indef_owner ~= 0) print "owner:", (name) indef_owner; - new_line; - print " number wanted: "; - if (indef_wanted == INDEF_ALL_WANTED) print "all"; else print indef_wanted; - new_line; - print " most likely GNAs of names: ", indef_cases, "^"; - } - else print "seeking definite object^"; - } - #Endif; ! DEBUG - - match_length = 0; number_matched = 0; match_from = wn; - - SearchScope(domain1, domain2, context); - - #Ifdef DEBUG; - if (parser_trace >= 4) print " [ND made ", number_matched, " matches]^"; - #Endif; ! DEBUG - - wn = match_from+match_length; - ! === NEW === - if (match_length == 0) { - snip = EmptySnippet; - } else { - snip = 100 * match_from + match_length; - } - ! === END === - - ! If nothing worked at all, leave with the word marker skipped past the - ! first unmatched word... - - if (number_matched == 0) { wn++; rfalse; } - - ! Suppose that there really were some words being parsed (i.e., we did - ! not just infer). If so, and if there was only one match, it must be - ! right and we return it... - - if (match_from <= num_words) { - if (number_matched == 1) { - i=match_list-->0; +Chapter - NounDomain + +[In the header of NounDomain, add `snip` as a local variable] + +[In NounDomain (Parser.i6t), after the line wn = match_from+match_length;] +[ + ! === NEW === + if (match_length == 0) { + snip = EmptySnippet; + } else { + snip = 100 * match_from + match_length; + } + ! === END === +] + +[In NounDomain, before the line return i;] +[ + ! === NEW === + i.parsed_snippet = snip; + ! === END === +] + +[In NounDomain, within the loop for (j=0 : jj).parsed_snippet = snip; + ! === END === +] +[After that loop] +[ + ! === NEW === + (match_list-->(number_matched-1)).parsed_snippet = snip; + ! === END === +] + +[Before the line if (dont_infer) return i;] +[ ! === NEW === i.parsed_snippet = snip; ! === END === - return i; - } - - ! ...now suppose that there was more typing to come, i.e. suppose that - ! the user entered something beyond this noun. If nothing ought to follow, - ! then there must be a mistake, (unless what does follow is just a full - ! stop, and or comma) - - if (wn <= num_words) { - i = NextWord(); wn--; - if (i ~= AND1__WD or AND2__WD or AND3__WD or comma_word - or THEN1__WD or THEN2__WD or THEN3__WD - or BUT1__WD or BUT2__WD or BUT3__WD) { - if (lookahead == ENDIT_TOKEN) rfalse; - } - } - } - - ! Now look for a good choice, if there's more than one choice... - - number_of_classes = 0; - - if (number_matched == 1) { - i = match_list-->0; +] + +[Before the line return match_list-->0;] +[ + ! === NEW === + (match_list-->0).parsed_snippet = snip; + ! === END === +] + +Include (- +[ NounDomain domain1 domain2 context dont_ask + first_word i j k l answer_words marker snip; + #Ifdef DEBUG; + if (parser_trace >= 4) { + print " [NounDomain called at word ", wn, "^"; + print " "; + if (indef_mode) { + print "seeking indefinite object: "; + if (indef_type & OTHER_BIT) print "other "; + if (indef_type & MY_BIT) print "my "; + if (indef_type & THAT_BIT) print "that "; + if (indef_type & PLURAL_BIT) print "plural "; + if (indef_type & LIT_BIT) print "lit "; + if (indef_type & UNLIT_BIT) print "unlit "; + if (indef_owner ~= 0) print "owner:", (name) indef_owner; + new_line; + print " number wanted: "; + if (indef_wanted == INDEF_ALL_WANTED) print "all"; else print indef_wanted; + new_line; + print " most likely GNAs of names: ", indef_cases, "^"; + } + else print "seeking definite object^"; + } + #Endif; ! DEBUG + + match_length = 0; number_matched = 0; match_from = wn; + + SearchScope(domain1, domain2, context); + + #Ifdef DEBUG; + if (parser_trace >= 4) print " [ND made ", number_matched, " matches]^"; + #Endif; ! DEBUG + + wn = match_from+match_length; + + ! === NEW === + if (match_length == 0) { + snip = EmptySnippet; + } else { + snip = 100 * match_from + match_length; + } + ! === END === + + ! If nothing worked at all, leave with the word marker skipped past the + ! first unmatched word... + + if (number_matched == 0) { wn++; rfalse; } + + ! Suppose that there really were some words being parsed (i.e., we did + ! not just infer). If so, and if there was only one match, it must be + ! right and we return it... + + if (match_from <= num_words) { + if (number_matched == 1) { + i=match_list-->0; + + ! === NEW === + i.parsed_snippet = snip; + ! === END === + + return i; + } + + ! ...now suppose that there was more typing to come, i.e. suppose that + ! the user entered something beyond this noun. If nothing ought to follow, + ! then there must be a mistake, (unless what does follow is just a full + ! stop, and or comma) + + if (wn <= num_words) { + i = NextWord(); wn--; + if (i ~= AND1__WD or AND2__WD or AND3__WD or comma_word + or THEN1__WD or THEN2__WD or THEN3__WD + or BUT1__WD or BUT2__WD or BUT3__WD) { + if (lookahead == ENDIT_TOKEN) rfalse; + } + } + } + + ! Now look for a good choice, if there's more than one choice... + + number_of_classes = 0; + + if (number_matched == 1) { + i = match_list-->0; if (indef_mode == 1 && indef_type & PLURAL_BIT ~= 0) { if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN or @@ -101,13 +157,14 @@ Include (- EndActivity(DECIDING_WHETHER_ALL_INC_ACT, i); } } - } - if (number_matched > 1) { + } + if (number_matched > 1) { i = true; - if (number_matched > 1) - for (j=0 : j 1){ + for (j=0 : jj, match_list-->(j+1)) == false) i = false; + ! === NEW === (match_list-->j).parsed_snippet = snip; ! === END === @@ -115,58 +172,56 @@ Include (- ! === NEW === (match_list-->(number_matched-1)).parsed_snippet = snip; ! === END === + } if (i) dont_infer = true; - i = Adjudicate(context); - if (i == -1) rfalse; - if (i == 1) rtrue; ! Adjudicate has made a multiple - ! object, and we pass it on - } - - ! If i is non-zero here, one of two things is happening: either - ! (a) an inference has been successfully made that object i is - ! the intended one from the user's specification, or - ! (b) the user finished typing some time ago, but we've decided - ! on i because it's the only possible choice. - ! In either case we have to keep the pattern up to date, - ! note that an inference has been made and return. - ! (Except, we don't note which of a pile of identical objects.) - - if (i ~= 0) { - ! === NEW === + i = Adjudicate(context); + if (i == -1) rfalse; + if (i == 1) rtrue; ! Adjudicate has made a multiple + ! object, and we pass it on + } + + ! If i is non-zero here, one of two things is happening: either + ! (a) an inference has been successfully made that object i is + ! the intended one from the user's specification, or + ! (b) the user finished typing some time ago, but we've decided + ! on i because it's the only possible choice. + ! In either case we have to keep the pattern up to date, + ! note that an inference has been made and return. + ! (Except, we don't note which of a pile of identical objects.) + + if (i ~= 0) { + ! === NEW === i.parsed_snippet = snip; ! === END === - if (dont_infer) return i; - if (inferfrom == 0) inferfrom=pcount; - pattern-->pcount = i; - return i; - } - if (dont_ask) { + if (dont_infer) return i; + if (inferfrom == 0) inferfrom=pcount; + pattern-->pcount = i; + return i; + } + + if (dont_ask){ ! === NEW === - if (match_length == 0) { - (match_list-->0).parsed_snippet = EmptySnippet; - } else { - (match_list-->0).parsed_snippet = 100 * match_from + match_length; - } + (match_list-->0).parsed_snippet = snip; ! === END === return match_list-->0; } - - ! If we get here, there was no obvious choice of object to make. If in - ! fact we've already gone past the end of the player's typing (which - ! means the match list must contain every object in scope, regardless - ! of its name), then it's foolish to give an enormous list to choose - ! from - instead we go and ask a more suitable question... - if (match_from > num_words) jump Incomplete; + ! If we get here, there was no obvious choice of object to make. If in + ! fact we've already gone past the end of the player's typing (which + ! means the match list must contain every object in scope, regardless + ! of its name), then it's foolish to give an enormous list to choose + ! from - instead we go and ask a more suitable question... + + if (match_from > num_words) jump Incomplete; - ! Now we print up the question, using the equivalence classes as worked - ! out by Adjudicate() so as not to repeat ourselves on plural objects... + ! Now we print up the question, using the equivalence classes as worked + ! out by Adjudicate() so as not to repeat ourselves on plural objects... BeginActivity(ASKING_WHICH_DO_YOU_MEAN_ACT); if (ForActivity(ASKING_WHICH_DO_YOU_MEAN_ACT)) jump SkipWhichQuestion; j = 1; marker = 0; - for (i=1 : i<=number_of_classes : i++ ) { + for (i=1 : i<=number_of_classes : i++) { while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; if (match_list-->marker hasnt animate) j = 0; @@ -174,266 +229,282 @@ Include (- if (j) PARSER_CLARIF_INTERNAL_RM('A'); else PARSER_CLARIF_INTERNAL_RM('B'); - j = number_of_classes; marker = 0; - for (i=1 : i<=number_of_classes : i++ ) { - while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; - k = match_list-->marker; + j = number_of_classes; marker = 0; + for (i=1 : i<=number_of_classes : i++) { + while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; + k = match_list-->marker; - if (match_classes-->marker > 0) print (the) k; else print (a) k; + if (match_classes-->marker > 0) print (the) k; else print (a) k; - if (i < j-1) print ", "; - if (i == j-1) { + if (i < j-1) print ", "; + if (i == j-1) { #Ifdef SERIAL_COMMA; if (j ~= 2) print ","; - #Endif; ! SERIAL_COMMA - PARSER_CLARIF_INTERNAL_RM('H'); - } - } - print "?^"; + #Endif; ! SERIAL_COMMA + PARSER_CLARIF_INTERNAL_RM('H'); + } + } + print "?^"; .SkipWhichQuestion; EndActivity(ASKING_WHICH_DO_YOU_MEAN_ACT); - ! ...and get an answer: + ! ...and get an answer: .WhichOne; - #Ifdef TARGET_ZCODE; - for (i=2 : ii = ' '; - #Endif; ! TARGET_ZCODE - answer_words=Keyboard(buffer2, parse2); - - ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. - first_word = (parse2-->1); - - ! Take care of "all", because that does something too clever here to do - ! later on: - - if (first_word == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { - if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { - l = multiple_object-->0; - for (i=0 : ii; - multiple_object-->(i+1+l) = k; - } - multiple_object-->0 = i+l; - rtrue; - } - PARSER_CLARIF_INTERNAL_RM('C'); - jump WhichOne; - } + #Ifdef TARGET_ZCODE; + for (i=2 : ii = ' '; + #Endif; ! TARGET_ZCODE + answer_words=Keyboard(buffer2, parse2); + + ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. + first_word = (parse2-->1); + + ! Take care of "all", because that does something too clever here to do + ! later on: + + if (first_word == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { + if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { + l = multiple_object-->0; + for (i=0 : ii; + multiple_object-->(i+1+l) = k; + } + multiple_object-->0 = i+l; + rtrue; + } + PARSER_CLARIF_INTERNAL_RM('C'); + jump WhichOne; + } ! Look for a comma, and interpret this as a fresh conversation command ! if so: - for (i=1 : i<=answer_words : i++ ) + for (i=1 : i<=answer_words : i++) if (WordFrom(i, parse2) == comma_word) { - VM_CopyBuffer(buffer, buffer2); - jump RECONSTRUCT_INPUT; + VM_CopyBuffer(buffer, buffer2); + jump RECONSTRUCT_INPUT; } - ! If the first word of the reply can be interpreted as a verb, then - ! assume that the player has ignored the question and given a new - ! command altogether. - ! (This is one time when it's convenient that the directions are - ! not themselves verbs - thus, "north" as a reply to "Which, the north - ! or south door" is not treated as a fresh command but as an answer.) - - #Ifdef LanguageIsVerb; - if (first_word == 0) { - j = wn; first_word = LanguageIsVerb(buffer2, parse2, 1); wn = j; - } - #Endif; ! LanguageIsVerb - if (first_word ~= 0) { - j = first_word->#dict_par1; - if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { - VM_CopyBuffer(buffer, buffer2); - jump RECONSTRUCT_INPUT; - } - } - - ! Now we insert the answer into the original typed command, as - ! words additionally describing the same object - ! (eg, > take red button - ! Which one, ... - ! > music - ! becomes "take music red button". The parser will thus have three - ! words to work from next time, not two.) - - #Ifdef TARGET_ZCODE; - k = WordAddress(match_from) - buffer; l=buffer2->1+1; - for (j=buffer + buffer->0 - 1 : j>=buffer+k+l : j-- ) j->0 = 0->(j-l); - for (i=0 : i(k+i) = buffer2->(2+i); - buffer->(k+l-1) = ' '; - buffer->1 = buffer->1 + l; - if (buffer->1 >= (buffer->0 - 1)) buffer->1 = buffer->0; - #Ifnot; ! TARGET_GLULX - k = WordAddress(match_from) - buffer; - l = (buffer2-->0) + 1; - for (j=buffer+INPUT_BUFFER_LEN-1 : j>=buffer+k+l : j-- ) j->0 = j->(-l); - for (i=0 : i(k+i) = buffer2->(WORDSIZE+i); - buffer->(k+l-1) = ' '; - buffer-->0 = buffer-->0 + l; - if (buffer-->0 > (INPUT_BUFFER_LEN-WORDSIZE)) buffer-->0 = (INPUT_BUFFER_LEN-WORDSIZE); - #Endif; ! TARGET_ - - ! Having reconstructed the input, we warn the parser accordingly - ! and get out. + ! If the first word of the reply can be interpreted as a verb, then + ! assume that the player has ignored the question and given a new + ! command altogether. + ! (This is one time when it's convenient that the directions are + ! not themselves verbs - thus, "north" as a reply to "Which, the north + ! or south door" is not treated as a fresh command but as an answer.) + + #Ifdef LanguageIsVerb; + if (first_word == 0) { + j = wn; first_word = LanguageIsVerb(buffer2, parse2, 1); wn = j; + } + #Endif; ! LanguageIsVerb + if (first_word ~= 0) { + j = first_word->#dict_par1; + if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { + VM_CopyBuffer(buffer, buffer2); + jump RECONSTRUCT_INPUT; + } + } + + ! Now we insert the answer into the original typed command, as + ! words additionally describing the same object + ! (eg, > take red button + ! Which one, ... + ! > music + ! becomes "take music red button". The parser will thus have three + ! words to work from next time, not two.) + + #Ifdef TARGET_ZCODE; + k = WordAddress(match_from) - buffer; l=buffer2->1+1; + for (j=buffer + buffer->0 - 1 : j>=buffer+k+l : j-- ) j->0 = 0->(j-l); + for (i=0 : i(k+i) = buffer2->(2+i); + buffer->(k+l-1) = ' '; + buffer->1 = buffer->1 + l; + if (buffer->1 >= (buffer->0 - 1)) buffer->1 = buffer->0; + #Ifnot; ! TARGET_GLULX + k = WordAddress(match_from) - buffer; + l = (buffer2-->0) + 1; + for (j=buffer+INPUT_BUFFER_LEN-1 : j>=buffer+k+l : j-- ) j->0 = j->(-l); + for (i=0 : i(k+i) = buffer2->(WORDSIZE+i); + buffer->(k+l-1) = ' '; + buffer-->0 = buffer-->0 + l; + if (buffer-->0 > (INPUT_BUFFER_LEN-WORDSIZE)) buffer-->0 = (INPUT_BUFFER_LEN-WORDSIZE); + #Endif; ! TARGET_ + + ! Having reconstructed the input, we warn the parser accordingly + ! and get out. .RECONSTRUCT_INPUT; num_words = WordCount(); players_command = 100 + num_words; - wn = 1; - #Ifdef LanguageToInformese; - LanguageToInformese(); - ! Re-tokenise: - VM_Tokenise(buffer,parse); - #Endif; ! LanguageToInformese + wn = 1; + #Ifdef LanguageToInformese; + LanguageToInformese(); + ! Re-tokenise: + VM_Tokenise(buffer,parse); + #Endif; ! LanguageToInformese num_words = WordCount(); players_command = 100 + num_words; - actors_location = ScopeCeiling(player); + actors_location = ScopeCeiling(player); FollowRulebook(Activity_after_rulebooks-->READING_A_COMMAND_ACT); - return REPARSE_CODE; + return REPARSE_CODE; - ! Now we come to the question asked when the input has run out - ! and can't easily be guessed (eg, the player typed "take" and there - ! were plenty of things which might have been meant). + ! Now we come to the question asked when the input has run out + ! and can't easily be guessed (eg, the player typed "take" and there + ! were plenty of things which might have been meant). .Incomplete; - if (context == CREATURE_TOKEN) PARSER_CLARIF_INTERNAL_RM('D', actor); - else PARSER_CLARIF_INTERNAL_RM('E', actor); - new_line; + if (context == CREATURE_TOKEN) PARSER_CLARIF_INTERNAL_RM('D', actor); + else PARSER_CLARIF_INTERNAL_RM('E', actor); + new_line; - #Ifdef TARGET_ZCODE; - for (i=2 : ii=' '; - #Endif; ! TARGET_ZCODE - answer_words = Keyboard(buffer2, parse2); + #Ifdef TARGET_ZCODE; + for (i=2 : ii=' '; + #Endif; ! TARGET_ZCODE + answer_words = Keyboard(buffer2, parse2); ! Look for a comma, and interpret this as a fresh conversation command ! if so: - for (i=1 : i<=answer_words : i++ ) + for (i=1 : i<=answer_words : i++) if (WordFrom(i, parse2) == comma_word) { VM_CopyBuffer(buffer, buffer2); jump RECONSTRUCT_INPUT; } - first_word=(parse2-->1); - #Ifdef LanguageIsVerb; - if (first_word==0) { - j = wn; first_word=LanguageIsVerb(buffer2, parse2, 1); wn = j; - } - #Endif; ! LanguageIsVerb - - ! Once again, if the reply looks like a command, give it to the - ! parser to get on with and forget about the question... - - if (first_word ~= 0) { - j = first_word->#dict_par1; - if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { - VM_CopyBuffer(buffer, buffer2); - jump RECONSTRUCT_INPUT; - } - } - - ! ...but if we have a genuine answer, then: - ! - ! (1) we must glue in text suitable for anything that's been inferred. - - if (inferfrom ~= 0) { - for (j=inferfrom : jj == PATTERN_NULL) continue; - #Ifdef TARGET_ZCODE; - i = 2+buffer->1; (buffer->1)++; buffer->( i++ ) = ' '; - #Ifnot; ! TARGET_GLULX - i = WORDSIZE + buffer-->0; - (buffer-->0)++; buffer->( i++ ) = ' '; - #Endif; ! TARGET_ - - #Ifdef DEBUG; - if (parser_trace >= 5) - print "[Gluing in inference with pattern code ", pattern-->j, "]^"; - #Endif; ! DEBUG - - ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. - - parse2-->1 = 0; - - ! An inferred object. Best we can do is glue in a pronoun. - ! (This is imperfect, but it's very seldom needed anyway.) - - if (pattern-->j >= 2 && pattern-->j < REPARSE_CODE) { - PronounNotice(pattern-->j); - for (k=1 : k<=LanguagePronouns-->0 : k=k+3) - if (pattern-->j == LanguagePronouns-->(k+2)) { - parse2-->1 = LanguagePronouns-->k; - #Ifdef DEBUG; - if (parser_trace >= 5) - print "[Using pronoun '", (address) parse2-->1, "']^"; - #Endif; ! DEBUG - break; - } - } - else { - ! An inferred preposition. - parse2-->1 = VM_NumberToDictionaryAddress(pattern-->j - REPARSE_CODE); - #Ifdef DEBUG; - if (parser_trace >= 5) - print "[Using preposition '", (address) parse2-->1, "']^"; - #Endif; ! DEBUG - } - - ! parse2-->1 now holds the dictionary address of the word to glue in. - - if (parse2-->1 ~= 0) { - k = buffer + i; - #Ifdef TARGET_ZCODE; - @output_stream 3 k; - print (address) parse2-->1; - @output_stream -3; - k = k-->0; - for (l=i : ll = buffer->(l+2); - i = i + k; buffer->1 = i-2; - #Ifnot; ! TARGET_GLULX - k = Glulx_PrintAnyToArray(buffer+i, INPUT_BUFFER_LEN-i, parse2-->1); - i = i + k; buffer-->0 = i - WORDSIZE; - #Endif; ! TARGET_ - } - } - } - - ! (2) we must glue the newly-typed text onto the end. - - #Ifdef TARGET_ZCODE; - i = 2+buffer->1; (buffer->1)++; buffer->( i++ ) = ' '; - for (j=0 : j1 : i++,j++ ) { - buffer->i = buffer2->(j+2); - (buffer->1)++; - if (buffer->1 == INPUT_BUFFER_LEN) break; - } - #Ifnot; ! TARGET_GLULX - i = WORDSIZE + buffer-->0; - (buffer-->0)++; buffer->( i++ ) = ' '; - for (j=0 : j0 : i++,j++ ) { - buffer->i = buffer2->(j+WORDSIZE); - (buffer-->0)++; - if (buffer-->0 == INPUT_BUFFER_LEN) break; - } - #Endif; ! TARGET_ - - ! (3) we fill up the buffer with spaces, which is unnecessary, but may - ! help incorrectly-written interpreters to cope. - - #Ifdef TARGET_ZCODE; - for (: ii = ' '; - #Endif; ! TARGET_ZCODE - - jump RECONSTRUCT_INPUT; + first_word=(parse2-->1); + #Ifdef LanguageIsVerb; + if (first_word==0) { + j = wn; first_word=LanguageIsVerb(buffer2, parse2, 1); wn = j; + } + #Endif; ! LanguageIsVerb + + ! Once again, if the reply looks like a command, give it to the + ! parser to get on with and forget about the question... + + if (first_word ~= 0) { + j = first_word->#dict_par1; + if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { + VM_CopyBuffer(buffer, buffer2); + jump RECONSTRUCT_INPUT; + } + } + + ! ...but if we have a genuine answer, then: + ! + ! (1) we must glue in text suitable for anything that's been inferred. + + if (inferfrom ~= 0) { + for (j=inferfrom : jj == PATTERN_NULL) continue; + #Ifdef TARGET_ZCODE; + i = 2+buffer->1; (buffer->1)++; buffer->(i++) = ' '; + #Ifnot; ! TARGET_GLULX + i = WORDSIZE + buffer-->0; + (buffer-->0)++; buffer->(i++) = ' '; + #Endif; ! TARGET_ + + #Ifdef DEBUG; + if (parser_trace >= 5) + print "[Gluing in inference with pattern code ", pattern-->j, "]^"; + #Endif; ! DEBUG + + ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. + + parse2-->1 = 0; + + ! An inferred object. Best we can do is glue in a pronoun. + ! (This is imperfect, but it's very seldom needed anyway.) + + if (pattern-->j >= 2 && pattern-->j < REPARSE_CODE) { + PronounNotice(pattern-->j); + for (k=1 : k<=LanguagePronouns-->0 : k=k+3) + if (pattern-->j == LanguagePronouns-->(k+2)) { + parse2-->1 = LanguagePronouns-->k; + #Ifdef DEBUG; + if (parser_trace >= 5) + print "[Using pronoun '", (address) parse2-->1, "']^"; + #Endif; ! DEBUG + break; + } + } + else { + ! An inferred preposition. + parse2-->1 = VM_NumberToDictionaryAddress(pattern-->j - REPARSE_CODE); + #Ifdef DEBUG; + if (parser_trace >= 5) + print "[Using preposition '", (address) parse2-->1, "']^"; + #Endif; ! DEBUG + } + + ! parse2-->1 now holds the dictionary address of the word to glue in. + + if (parse2-->1 ~= 0) { + k = buffer + i; + #Ifdef TARGET_ZCODE; + @output_stream 3 k; + print (address) parse2-->1; + @output_stream -3; + k = k-->0; + for (l=i : ll = buffer->(l+2); + i = i + k; buffer->1 = i-2; + #Ifnot; ! TARGET_GLULX + k = Glulx_PrintAnyToArray(buffer+i, INPUT_BUFFER_LEN-i, parse2-->1); + i = i + k; buffer-->0 = i - WORDSIZE; + #Endif; ! TARGET_ + } + } + } + + ! (2) we must glue the newly-typed text onto the end. + + #Ifdef TARGET_ZCODE; + i = 2+buffer->1; (buffer->1)++; buffer->(i++) = ' '; + for (j=0 : j1 : i++,j++) { + buffer->i = buffer2->(j+2); + (buffer->1)++; + if (buffer->1 == INPUT_BUFFER_LEN) break; + } + #Ifnot; ! TARGET_GLULX + i = WORDSIZE + buffer-->0; + (buffer-->0)++; buffer->(i++) = ' '; + for (j=0 : j0 : i++,j++) { + buffer->i = buffer2->(j+WORDSIZE); + (buffer-->0)++; + if (buffer-->0 == INPUT_BUFFER_LEN) break; + } + #Endif; ! TARGET_ + + ! (3) we fill up the buffer with spaces, which is unnecessary, but may + ! help incorrectly-written interpreters to cope. + + #Ifdef TARGET_ZCODE; + for (: ii = ' '; + #Endif; ! TARGET_ZCODE + + jump RECONSTRUCT_INPUT; ]; ! end of NounDomain [ PARSER_CLARIF_INTERNAL_R; ]; -) instead of "Noun Domain" in "Parser.i6t". +Chapter - ActionVariablesNotTypeSafe + +[In ActionVariablesNotTypeSafe (Actions.i6t), at the end of the block that calls SUPPLYING_A_MISSING_NOUN_ACT] +[ + ! === NEW === + noun.parsed_snippet = EmptySnippet; + ! === END === +] + +[In ActionVariablesNotTypeSafe (Actions.i6t), at the end of the block that calls SUPPLYING_A_MISSING_SECOND_ACT] +[ + ! === NEW === + second.parsed_snippet = EmptySnippet; + ! === END === +] + Include (- [ ActionVariablesNotTypeSafe mask noun_kova second_kova at; at = FindAction(-1); if (at == 0) rfalse; ! For any I6-defined actions @@ -448,13 +519,13 @@ Include (- !print "sst = ", second_kova, "^"; if (noun_kova == SNIPPET_TY or UNDERSTANDING_TY) { - if (inp1 ~= 1) { inp2 = inp1; second = noun; } - parsed_number = 100*consult_from + consult_words; - inp1 = 1; noun = nothing; ! noun = parsed_number; + if (inp1 ~= 1) { inp2 = inp1; second = noun; } + parsed_number = 100*consult_from + consult_words; + inp1 = 1; noun = nothing; ! noun = parsed_number; } if (second_kova == SNIPPET_TY or UNDERSTANDING_TY) { - parsed_number = 100*consult_from + consult_words; - inp2 = 1; second = nothing; ! second = parsed_number; + parsed_number = 100*consult_from + consult_words; + inp2 = 1; second = nothing; ! second = parsed_number; } mask = ActionData-->(at+AD_REQUIREMENTS); @@ -462,67 +533,87 @@ Include (- meta = 0; if (inp1 == 1) { - if (noun_kova == OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('B'); new_line; } - rtrue; - } + if (noun_kova == OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('B'); new_line; } + rtrue; + } } else { - if (noun_kova ~= OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('C'); new_line; } - rtrue; - } - if ((mask & NEED_NOUN_ABIT) && (noun == nothing)) { - @push act_requester; act_requester = nothing; - CarryOutActivity(SUPPLYING_A_MISSING_NOUN_ACT); - @pull act_requester; - if (noun == nothing) { - if (say__p) rtrue; - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('D'); new_line; } - rtrue; - } - ! === NEW === - noun.parsed_snippet = EmptySnippet; - ! === END === - } - if (((mask & NEED_NOUN_ABIT) == 0) && (noun ~= nothing)) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('E'); new_line; } - rtrue; - } + if (noun_kova ~= OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('C'); new_line; } + rtrue; + } + if ((mask & NEED_NOUN_ABIT) && (noun == nothing)) { + @push act_requester; act_requester = nothing; + CarryOutActivity(SUPPLYING_A_MISSING_NOUN_ACT); + @pull act_requester; + + ! === NEW === + noun.parsed_snippet = EmptySnippet; + ! === END === + + if (noun == nothing) { + if (say__p) rtrue; + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('D'); new_line; } + rtrue; + } + } + if (((mask & NEED_NOUN_ABIT) == 0) && (noun ~= nothing)) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('E'); new_line; } + rtrue; + } } if (inp2 == 1) { - if (second_kova == OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('F'); new_line; } - rtrue; - } + if (second_kova == OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('F'); new_line; } + rtrue; + } } else { - if (second_kova ~= OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('G'); new_line; } - rtrue; - } - if ((mask & NEED_SECOND_ABIT) && (second == nothing)) { - @push act_requester; act_requester = nothing; - CarryOutActivity(SUPPLYING_A_MISSING_SECOND_ACT); - @pull act_requester; - if (second == nothing) { - if (say__p) rtrue; - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('H'); new_line; } - rtrue; - } - ! === NEW === - second.parsed_snippet = EmptySnippet; - ! === END === - } - if (((mask & NEED_SECOND_ABIT) == 0) && (second ~= nothing)) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('I'); new_line; } - rtrue; - } + if (second_kova ~= OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('G'); new_line; } + rtrue; + } + if ((mask & NEED_SECOND_ABIT) && (second == nothing)) { + @push act_requester; act_requester = nothing; + CarryOutActivity(SUPPLYING_A_MISSING_SECOND_ACT); + @pull act_requester; + + ! === NEW === + second.parsed_snippet = EmptySnippet; + ! === END === + + if (second == nothing) { + if (say__p) rtrue; + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('H'); new_line; } + rtrue; + } + } + if (((mask & NEED_SECOND_ABIT) == 0) && (second ~= nothing)) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('I'); new_line; } + rtrue; + } } rfalse; ]; -) instead of "Type Safety" in "Actions.i6t". +Chapter - VerbSubcommand + +To decide what snippet is the/-- subcommand of the/-- verb: (- VerbSubcommand() -). + +Include (- +[ VerbSubcommand i; + if(verb_wordnum == 0) return EmptySnippet; + for(i=1 : ii) < REPARSE_CODE){ + break; + } + } + return verb_wordnum*100 + i; +]; +-). + Subcommands ends here. ---- DOCUMENTATION ---- @@ -533,16 +624,22 @@ This extension exposes the snippet which refers to each individual object, as it If the player types "take the wand", referring to the black rod with a rusty star on the end, then the subcommand of the rod is "wand". This can be useful in disambiguation, or in adapting a description to use the player's phrasing. +As of version 2, it now also provides the subcommand of the verb: + + the subcommand of the verb -> snippet + +This provides all the literal text at the beginning of the grammar line: in I6 terms, the verb and all following prepositions. + Example: ** Subcommand Laboratory - A simple demonstration of how subcommands affect the parser. -Include Subcommands by Daniel Stelzer. +Include Subcommands 6M62 by Daniel Stelzer. -Before doing anything: +Every turn: + say "Verb subcommand: [the subcommand of the verb]."; if the noun is not nothing: say "Noun subcommand: [the subcommand of the noun]."; if the second noun is not nothing: say "Second noun subcommand: [the subcommand of the second noun]."; - continue the action. The Laboratory is a room. A red apple, a green apple, a red pear, and a green pear are in the Laboratory. A shiny wooden box is a container in the Laboratory. It is closed and locked. The player carries a silver metal key. @@ -552,3 +649,4 @@ Does the player mean taking the green apple when the subcommand of the green app Test fruit with "get red / drop it / get apple / get pear". Test box with "unlock the shiny wooden box with the silver key". +Test verbs with "x me / look at me / throw box at me". From e08ed745f9a68492f6bed7963a500ce6f9e99d8b Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 18 Nov 2023 02:01:25 +0100 Subject: [PATCH 054/138] Allow "demo" as synonym of "demonstration" Part of feature request #222. --- .../Animal Actions and Human Conversation.i7x | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 3ca010d6..0eff0e77 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -2125,7 +2125,7 @@ Carry out Kate discussing which map was sold: now the Slangovia map is in the location. what sort of demonstration is a questioning quip. - Understand "schedule" or "plan" or "plans" as what sort of demonstration. + Understand "schedule" or "plan" or "plans" or "demo" as what sort of demonstration. The comment is "'[if immediately]What sort of demonstration is that[otherwise]You mentioned that your boss and the other gentleman went to a demonstration. What kind of demonstration was it[end if]?'" The reply is "She smiles and shrugs. '[Mr] Arbot used to work for the Bureau before he retired to sell antiques. He still has lots of connections. It could be anything.'" It indirectly-follows whether she hath seen Brock-man. @@ -4939,7 +4939,7 @@ Availability rule for why he doesn't go to the demonstration: why he doesn't go to the demonstration is a questioning quip. The comment is "'I'm surprised you're not at this demonstration,' we say, gesturing towards the invitation on his desk. 'It looks interesting.'". - Understand "professor" or "waterstone" as why he doesn't go to the demonstration. + Understand "professor" or "waterstone" or "demo" as why he doesn't go to the demonstration. [The mentions-list is {invitation}.] The reply is "'Does it?' he asks wearily. 'It sounds like a dead bore to me. Unfortunately, I can be neither at the demonstration nor at home at the moment. I have this blasted presentation to finish[if the player does not know carpets-shampooed], and my wife is having the carpets shampooed[carpets-shampooed] [--] on a holiday! [--] and won't let me work in my own study[otherwise] and thanks to the carpets I can't work in my own study[end if].'". It quip-supplies Professor Waterstone. From 399619c67f587a6672466fdd016b79a5ec08f5f5 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 18 Nov 2023 02:26:06 +0100 Subject: [PATCH 055/138] Expand some common contractions. Fixes #222 The standardize apostrophes rule in the Smarter Parser extension was not working properly, at least not with Threaded Conversation. --- .../Counterfeit Monkey/Character Models.i7x | 2 +- .../Counterfeit Monkey/World Model Tweaks.i7x | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x index 5272a5bb..0f241f37 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x @@ -174,7 +174,7 @@ A first after reading a command rule when how-many-people-here is positive (this replace the regular expression "^(ask|tell) (.*?) to " in N with "\2, "; change the text of the player's command to N. -After reading a command when the current interlocutor is not nothing and player's command includes "ask/tell/a/t" and the player's command does not include "ask/tell/a/t about" (this is the new strip interlocutor from input rule): +After reading a command when the current interlocutor is not nothing and player's command includes "ask/tell/a/t" and the player's command does not include "ask/tell/a/t about" and the player's command does not include "ask/a what" (this is the new strip interlocutor from input rule): if the player's command includes "[someone talk-eligible]": let M be the substituted form of the matched text; unless M is "1" or M is "men": [To avoid conflicts with Numbered Disambiguation Choices and referring to the clientele in the Counterfeit Monkey bar as "men"] diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x index 7469ae2f..5848f72e 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x @@ -75,12 +75,31 @@ The Smarter Parser simplify punctuation rule is not listed in any rulebook. The scandalous standardize swears rule is not listed in any rulebook. +The standardize apostrophes rule is not listed in any rulebook. + +A first after reading a command rule (this is the new standardize apostrophes rule): + if the player's command includes "what's": + replace the matched text with "what is"; + if the player's command includes "he's": + replace the matched text with "he is"; + if the player's command includes "it's": + replace the matched text with "it is"; + if the player's command includes "'m ": + replace the matched text with " am "; + if the player's command includes "'re ": + replace the matched text with " are "; + if the player's command includes "'ll ": + replace the matched text with " will "; + if the player's command includes "'ve ": + replace the matched text with " have "; + When play begins (this is the change smarter parse messages rule): choose row with SP rule of asking unparseable questions rule in the Table of Smarter Parser Messages; now the message entry is "[one of]If you're trying to converse with other characters, the suggestions in the text provide possible phrasings; so if you read 'I might ask about lentils.', you might phrase your command ASK ABOUT LENTILS. Introducing other words or variant phrasings that weren't part of the suggestion may confuse the game. Alternatively, if you just want to take an action in the game world, try giving a direct command, such as EXAMINE THE ASP or WAVE THE P-REMOVER AT THE PHONEY[or]That does not seem to be a topic of conversation at the moment[stopping]." + Section 2 - Additional Parsing Lines for USE [Wherever possible, we want USE THING to fall through to a plausible default behavior, which we do with a bunch of additional grammar lines:] From 3853e9ee442357c1ed8151f7e59e9f7426ab9dc4 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 18 Nov 2023 02:42:45 +0100 Subject: [PATCH 056/138] Fix another run-time problem P39 This time regarding ASK WHY HE'S ... I wonder how many of these are still hiding. --- .../Extensions/Counterfeit Monkey/Character Models.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x index 0f241f37..f7ccaab1 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x @@ -174,7 +174,7 @@ A first after reading a command rule when how-many-people-here is positive (this replace the regular expression "^(ask|tell) (.*?) to " in N with "\2, "; change the text of the player's command to N. -After reading a command when the current interlocutor is not nothing and player's command includes "ask/tell/a/t" and the player's command does not include "ask/tell/a/t about" and the player's command does not include "ask/a what" (this is the new strip interlocutor from input rule): +After reading a command when the current interlocutor is not nothing and player's command includes "ask/tell/a/t" and the player's command does not include "ask/tell/a/t about" and the player's command does not include "ask/a what" and the player's command does not include "ask/a why" (this is the new strip interlocutor from input rule): if the player's command includes "[someone talk-eligible]": let M be the substituted form of the matched text; unless M is "1" or M is "men": [To avoid conflicts with Numbered Disambiguation Choices and referring to the clientele in the Counterfeit Monkey bar as "men"] From a4c7df5284145444aee52a23bda3482ea761fe95 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 18 Nov 2023 02:51:13 +0100 Subject: [PATCH 057/138] Add another synonym to "why he is here" quip To make ASK WHY HE IS THERE and similar work. --- .../Animal Actions and Human Conversation.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 0eff0e77..4f0130d5 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -3309,7 +3309,7 @@ curate-backstory is an NPC-directed quip. why gift shop volunteer seems here is a questioning quip. The printed name is "why he is here". The true-name is "why gift shop volunteer seems here". - Understand "is" or "he" as why gift shop volunteer seems here. + Understand "is" or "he" or "there" as why gift shop volunteer seems here. [The mentions-list is {volunteer, employment}.] The comment is "'If you aren't interested in this place, why do you volunteer here?' we ask[you-are-dangerous].". The reply is "His left eyelid twitches. 'The Rosehip woman,' he says, after a moment. 'She's a looker.' [paragraph break]I'm not sure what's more disturbing: someone expressing attraction to my mother; that person being a good thirty years her senior; or the use of the phrase 'she's a looker', which even this old character probably got from a movie.". From aca3098312114e0b6a44fb21f2fdd09c8512206d Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 18 Nov 2023 05:36:01 +0100 Subject: [PATCH 058/138] Add some more synonyms to "why he is here" quip To understand WHY ARE YOU HERE? --- .../Animal Actions and Human Conversation.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 4f0130d5..22d09c32 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -3309,7 +3309,7 @@ curate-backstory is an NPC-directed quip. why gift shop volunteer seems here is a questioning quip. The printed name is "why he is here". The true-name is "why gift shop volunteer seems here". - Understand "is" or "he" or "there" as why gift shop volunteer seems here. + Understand "is" or "he" or "there" or "are" or "you" as why gift shop volunteer seems here. [The mentions-list is {volunteer, employment}.] The comment is "'If you aren't interested in this place, why do you volunteer here?' we ask[you-are-dangerous].". The reply is "His left eyelid twitches. 'The Rosehip woman,' he says, after a moment. 'She's a looker.' [paragraph break]I'm not sure what's more disturbing: someone expressing attraction to my mother; that person being a good thirty years her senior; or the use of the phrase 'she's a looker', which even this old character probably got from a movie.". From e2d8b1800e76d354f07994a693f00556f99151ae Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 19 Nov 2023 13:48:06 +0100 Subject: [PATCH 059/138] Fix the new strip interlocutor from input rule The root cause of the run-time problems. Thanks to otisdog for the fix! See https://intfiction.org/t/run-time-problem-p39-when-changing-the-number-of-input-words-in-counterfeit-monkey/65734 --- .../Counterfeit Monkey/Character Models.i7x | 86 ++++++++++++++++++- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x index f7ccaab1..2c937033 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x @@ -174,16 +174,94 @@ A first after reading a command rule when how-many-people-here is positive (this replace the regular expression "^(ask|tell) (.*?) to " in N with "\2, "; change the text of the player's command to N. -After reading a command when the current interlocutor is not nothing and player's command includes "ask/tell/a/t" and the player's command does not include "ask/tell/a/t about" and the player's command does not include "ask/a what" and the player's command does not include "ask/a why" (this is the new strip interlocutor from input rule): + +[Fix from otistdog to make "if the player's command includes "[someone talk-eligible]" work as intended. + +See https://intfiction.org/t/run-time-problem-p39-when-changing-the-number-of-input-words-in-counterfeit-monkey/65734] + +Include (- + +! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== +! Text.i6t: Glulx Version +! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== + +#ifnot; ! TARGET_ZCODE +[ TEXT_TY_CastPrimitive to_txt from_snippet from_value + len i stream saved_stream news buffer buffer_size memory_to_free results; + + if (to_txt == 0) BlkValueError("no destination for cast"); + + buffer_size = (TEXT_TY_BufferSize + 2)*WORDSIZE; + + RawBufferSize = TEXT_TY_BufferSize; + buffer = RawBufferAddress + TEXT_TY_CastPrimitiveNesting*buffer_size; + TEXT_TY_CastPrimitiveNesting++; + if (TEXT_TY_CastPrimitiveNesting > TEXT_TY_NoBuffers) { + buffer = VM_AllocateMemory(buffer_size); memory_to_free = buffer; + if (buffer == 0) + FlexError("ran out with too many simultaneous text conversions"); + } + + if (unicode_gestalt_ok) { + SuspendRTP(); + .RetryWithLargerBuffer; + saved_stream = glk_stream_get_current(); + stream = glk_stream_open_memory_uni(buffer, RawBufferSize, filemode_Write, 0); + glk_stream_set_current(stream); + + @push say__p; @push say__pc; + ClearParagraphing(7); + if (from_snippet) print (PrintSnippet) from_value; + else print (PrintI6Text) from_value; + @pull say__pc; @pull say__p; + + results = buffer + buffer_size - 2*WORDSIZE; + glk_stream_close(stream, results); + if (saved_stream) glk_stream_set_current(saved_stream); + ResumeRTP(); + RunTimeProblemShow(); ! ADDED + + len = results-->1; + if (len > RawBufferSize-1) { + ! Glulx had to truncate text output because the buffer ran out: + ! len is the number of characters which it tried to print + news = RawBufferSize; + while (news < len) news=news*2; + i = VM_AllocateMemory(news*WORDSIZE); + if (i ~= 0) { + if (memory_to_free) VM_FreeMemory(memory_to_free); + memory_to_free = i; + buffer = i; + RawBufferSize = news; + buffer_size = (RawBufferSize + 2)*WORDSIZE; + jump RetryWithLargerBuffer; + } + ! Memory allocation refused: all we can do is to truncate the text + len = RawBufferSize-1; + } + buffer-->(len) = 0; + + TEXT_TY_CastPrimitiveNesting--; + BlkValueMassCopyFromArray(to_txt, buffer, 4, len+1); + } else { + RunTimeProblem(RTP_NOGLULXUNICODE); + } + if (memory_to_free) VM_FreeMemory(memory_to_free); +]; +#endif; + +-) instead of "Glulx Version" in "Text.i6t". + + +After reading a command when the current interlocutor is not nothing and player's command includes "ask/tell/a/t" (this is the new strip interlocutor from input rule): if the player's command includes "[someone talk-eligible]": let M be the substituted form of the matched text; unless M is "1" or M is "men": [To avoid conflicts with Numbered Disambiguation Choices and referring to the clientele in the Counterfeit Monkey bar as "men"] - let cmd be "[player's command]"; - replace the regular expression "^(ask|tell|a|t) [M] " in cmd with "\1 "; - change the text of the player's command to cmd. + cut the matched text. The new strip interlocutor from input rule is listed instead of the strip interlocutor from input rule in the After reading a command rules. + The counterfeit monkey-as-subject is a subject. The printed name is "Counterfeit Monkey Bar". Understand "counterfeit" or "monkey" or "bar" as the counterfeit monkey-as-subject. Bureau is a subject. Understand "bureau of orthography" or "orthography" as the bureau. From 9af88b4af387d626d550ab183379ab8f6bfeddcf Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 19 Nov 2023 13:50:03 +0100 Subject: [PATCH 060/138] Resolve punctuated titles Unless the player is wearing the Britishizing goggles, titles such as Mrs. will be punctuated, which wouldn't work in player input. Now it does. --- .../Extensions/Counterfeit Monkey/Presentation Details.i7x | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Presentation Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Presentation Details.i7x index 0c758845..8957610a 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Presentation Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Presentation Details.i7x @@ -37,7 +37,8 @@ Section 2 - Input Editing Include Punctuation Removal by Emily Short. First after reading a command (this is the remove stray punctuation rule): - remove stray punctuation. + remove stray punctuation; + resolve punctuated titles. Section 3 - Styles From 31a54bd8a722929db26c1b361def0f581f874678 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 19 Nov 2023 14:04:15 +0100 Subject: [PATCH 061/138] Typo in comment --- .../Extensions/Counterfeit Monkey/Character Models.i7x | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x index 2c937033..722f4d1b 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x @@ -175,8 +175,7 @@ A first after reading a command rule when how-many-people-here is positive (this change the text of the player's command to N. -[Fix from otistdog to make "if the player's command includes "[someone talk-eligible]" work as intended. - +[Fix from otisdog to make "if the player's command includes "[someone talk-eligible]" work as intended. See https://intfiction.org/t/run-time-problem-p39-when-changing-the-number-of-input-words-in-counterfeit-monkey/65734] Include (- From b368bd00b306a363fc621bbc6cd951c22198226a Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 19 Nov 2023 21:22:34 +0100 Subject: [PATCH 062/138] Adjust fish test command script The complicit shark no longer kills us since its heft was adjusted in ea58886. I can't remember why, but I think it is fine either way. Most real-world sharks are non-enormous, as far as I know. Anyway, the command script is now adjusted to quit properly. --- tools/command scripts/test_fish.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/command scripts/test_fish.txt b/tools/command scripts/test_fish.txt index 5c075696..5cf139e1 100644 --- a/tools/command scripts/test_fish.txt +++ b/tools/command scripts/test_fish.txt @@ -528,5 +528,5 @@ synthesize wave i-remover at carpi shoot rusty nail shoot shrimp cocktail -no -quit \ No newline at end of file +quit +y \ No newline at end of file From f5b6a5ba288ff952a7c28b8d23ef2c2b6c77385a Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 18 Nov 2023 16:26:59 +0100 Subject: [PATCH 063/138] Unused variable --- .../Extensions/Counterfeit Monkey/Conversation Speedups.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Conversation Speedups.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Conversation Speedups.i7x index 9709e55b..07fd5364 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Conversation Speedups.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Conversation Speedups.i7x @@ -141,7 +141,7 @@ Include (- !print "Eliminated duplicate subjects. Current number: ",subject_count,".^"; ]; - [ GetSubject index col; + [ GetSubject index; return ((+ Table of Current Subjects +)-->1)-->(index+COL_HSIZE); ]; From ebaaa258a39787269d8a0b63817ef9b066d0c6a8 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 20 Nov 2023 14:15:41 +0100 Subject: [PATCH 064/138] Better fix for run-time problem P39 Thanks to Dr. Peter Bates. --- .../Counterfeit Monkey/Character Models.i7x | 92 +++++-------------- 1 file changed, 23 insertions(+), 69 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x index 722f4d1b..e4fe1046 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x @@ -175,82 +175,36 @@ A first after reading a command rule when how-many-people-here is positive (this change the text of the player's command to N. -[Fix from otisdog to make "if the player's command includes "[someone talk-eligible]" work as intended. +[Fix from otisdog and Dr Peter Bates to make "if the player's command includes "[someone talk-eligible]" work as intended. See https://intfiction.org/t/run-time-problem-p39-when-changing-the-number-of-input-words-in-counterfeit-monkey/65734] Include (- +Replace SpliceSnippet; +-) after "Definitions.i6t". -! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== -! Text.i6t: Glulx Version -! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== - -#ifnot; ! TARGET_ZCODE -[ TEXT_TY_CastPrimitive to_txt from_snippet from_value - len i stream saved_stream news buffer buffer_size memory_to_free results; - - if (to_txt == 0) BlkValueError("no destination for cast"); - - buffer_size = (TEXT_TY_BufferSize + 2)*WORDSIZE; - - RawBufferSize = TEXT_TY_BufferSize; - buffer = RawBufferAddress + TEXT_TY_CastPrimitiveNesting*buffer_size; - TEXT_TY_CastPrimitiveNesting++; - if (TEXT_TY_CastPrimitiveNesting > TEXT_TY_NoBuffers) { - buffer = VM_AllocateMemory(buffer_size); memory_to_free = buffer; - if (buffer == 0) - FlexError("ran out with too many simultaneous text conversions"); - } - - if (unicode_gestalt_ok) { - SuspendRTP(); - .RetryWithLargerBuffer; - saved_stream = glk_stream_get_current(); - stream = glk_stream_open_memory_uni(buffer, RawBufferSize, filemode_Write, 0); - glk_stream_set_current(stream); - - @push say__p; @push say__pc; - ClearParagraphing(7); - if (from_snippet) print (PrintSnippet) from_value; - else print (PrintI6Text) from_value; - @pull say__pc; @pull say__p; - - results = buffer + buffer_size - 2*WORDSIZE; - glk_stream_close(stream, results); - if (saved_stream) glk_stream_set_current(saved_stream); - ResumeRTP(); - RunTimeProblemShow(); ! ADDED - - len = results-->1; - if (len > RawBufferSize-1) { - ! Glulx had to truncate text output because the buffer ran out: - ! len is the number of characters which it tried to print - news = RawBufferSize; - while (news < len) news=news*2; - i = VM_AllocateMemory(news*WORDSIZE); - if (i ~= 0) { - if (memory_to_free) VM_FreeMemory(memory_to_free); - memory_to_free = i; - buffer = i; - RawBufferSize = news; - buffer_size = (RawBufferSize + 2)*WORDSIZE; - jump RetryWithLargerBuffer; - } - ! Memory allocation refused: all we can do is to truncate the text - len = RawBufferSize-1; - } - buffer-->(len) = 0; - - TEXT_TY_CastPrimitiveNesting--; - BlkValueMassCopyFromArray(to_txt, buffer, 4, len+1); - } else { - RunTimeProblem(RTP_NOGLULXUNICODE); +Include (- +[ SpliceSnippet snip t i w1 w2 nextw at endsnippet newlen; + w1 = snip/100; w2 = w1 + (snip%100) - 1; + if ((w20 = 120; + newlen = VM_PrintToBuffer(buffer2, 120, SpliceSnippet__TextPrinter, t, endsnippet); + for (i=0: (i(at+i) = buffer2->(WORDSIZE+i); + #Ifdef TARGET_ZCODE; buffer->1 = at+i; #ifnot; buffer-->0 = at+i; #endif; + for (:at+i<120:i++) buffer->(at+i) = ' '; + VM_Tokenise(buffer, parse); + num_words = WordCount(); ! #### INSERTED STATEMENT #### + players_command = 100 + WordCount(); + @pull say__pc; @pull say__p; ]; -#endif; - --) instead of "Glulx Version" in "Text.i6t". +-) after "Output.i6t". After reading a command when the current interlocutor is not nothing and player's command includes "ask/tell/a/t" (this is the new strip interlocutor from input rule): if the player's command includes "[someone talk-eligible]": From 0a3fc9bdd7d82b4fec619057809d2ce94100b563 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 20 Nov 2023 15:51:02 +0100 Subject: [PATCH 065/138] Preliminary change log update --- CHANGELOG.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 27a0de79..5066f75c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Change log +## Release 12 + +- The first aid station was not fixed in place and could be picked up, while its description still said it was mounted to the wall. +- There would be a reference to the inlaid desk even if it was not present. +- After shooting ourselves with the anagramming gun, the text would say that we return to "or original form" rather than "our". +- Fixes a run-time problem P10 when trying to remove letters from the current room. +- Many new highlighted words. +- Lena would occasionally ask us to change the modem although it was no longer present. +- There would in some cases be a missing newline after the "Batman remark" at the end of the roundabout scene. +- The live branch was not mentioned in the description of the statue arm +- T INSERTER without a hyphen is now understood as the T-inserter. +- The T-inserter can now be used by typing INSERT T IN (thing). +- The fast travel GO TO command could be used to bypass the confrontation with Alex's father. +- There would sometimes be an extra "I can't see what you're talking about" printed when an attempted use of the letter-remover was prevented. +- The embedded start up data in the Gblorb file was bad in the two previous releases. The game will now print a warning at startup if it detects bad embedded data. +- EXAMINE DIRECTION would cause a run-time error. +- Things like REMIND MAN THAT MRS. ROSEHIP IS MARRIED would be understood as two commands separated by a period. Periods after titles are now stripped. +- DEMO is now understood as DEMONSTRATION. +- Contractions such as WHAT'S, HE'S, and IT'S are now understood. +- Fixes a run-time problem when using the soap dispenser after removing all sinks. +- Fixes many double spaces throughout the output text. +- Adds more synonyms to the "ask why he is here" quip for the gift shop volunteer. WHY ARE YOU HERE and ASK WHY HE IS THERE now work. + ## Release 11 - Some scenes would never progress if initiated close enough to in-game midnight. Getting past the secretary seems to have been particularly vulnerable to this. From 4b2f76e21b4c01c68a3cc097b64c2b2251a7416c Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 21 Nov 2023 18:19:33 +0100 Subject: [PATCH 066/138] Let's revert to this MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The other way would still cause run-time problems with >ASK WHAT’S WORTH SEEING with a curly apostrophe. --- .../Counterfeit Monkey/Character Models.i7x | 115 ++++++++++++++---- 1 file changed, 93 insertions(+), 22 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x index e4fe1046..e04e0324 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x @@ -179,32 +179,103 @@ A first after reading a command rule when how-many-people-here is positive (this See https://intfiction.org/t/run-time-problem-p39-when-changing-the-number-of-input-words-in-counterfeit-monkey/65734] Include (- -Replace SpliceSnippet; --) after "Definitions.i6t". -Include (- -[ SpliceSnippet snip t i w1 w2 nextw at endsnippet newlen; - w1 = snip/100; w2 = w1 + (snip%100) - 1; - if ((w2= 5) print " Trying ", (the) obj, " (", obj, ") at word ", wn, "^"; + #Endif; ! DEBUG + + if (nomatch && obj == 0) return 0; + +! if (nomatch) print "*** TryGivenObject *** on ", (the) obj, " at wn = ", wn, "^"; + + dict_flags_of_noun = 0; + +! If input has run out then always match, with only quality 0 (this saves +! time). + + if (wn > WordCount()) { ! MODIFIED + if (nomatch) return 0; + if (indef_mode ~= 0) + dict_flags_of_noun = $$01110000; ! Reject "plural" bit + MakeMatch(obj,0); + #Ifdef DEBUG; + if (parser_trace >= 5) print " Matched (zero)^"; + #Endif; ! DEBUG + return 1; + } + +! Ask the object to parse itself if necessary, sitting up and taking notice +! if it says the plural was used: + + if (obj.parse_name~=0) { + parser_action = NULL; j=wn; + k = RunRoutines(obj,parse_name); + if (k > 0) { + wn=j+k; + + .MMbyPN; + + if (parser_action == ##PluralFound) + dict_flags_of_noun = dict_flags_of_noun | 4; + + if (dict_flags_of_noun & 4) { + if (~~allow_plurals) k = 0; + else { + if (indef_mode == 0) { + indef_mode = 1; indef_type = 0; indef_wanted = 0; + } + indef_type = indef_type | PLURAL_BIT; + if (indef_wanted == 0) indef_wanted = INDEF_ALL_WANTED; + } + } + + #Ifdef DEBUG; + if (parser_trace >= 5) print " Matched (", k, ")^"; + #Endif; ! DEBUG + if (nomatch == false) MakeMatch(obj,k); + return k; + } + if (k == 0) jump NoWordsMatch; } - @push say__p; @push say__pc; - nextw = w2 + 1; - at = WordAddress(w1) - buffer; - if (nextw <= WordCount()) endsnippet = 100*nextw + (WordCount() - nextw + 1); - buffer2-->0 = 120; - newlen = VM_PrintToBuffer(buffer2, 120, SpliceSnippet__TextPrinter, t, endsnippet); - for (i=0: (i(at+i) = buffer2->(WORDSIZE+i); - #Ifdef TARGET_ZCODE; buffer->1 = at+i; #ifnot; buffer-->0 = at+i; #endif; - for (:at+i<120:i++) buffer->(at+i) = ' '; - VM_Tokenise(buffer, parse); - num_words = WordCount(); ! #### INSERTED STATEMENT #### - players_command = 100 + WordCount(); - @pull say__pc; @pull say__p; + + ! The default algorithm is simply to count up how many words pass the + ! Refers test: + + parser_action = NULL; + + w = NounWord(); + + if (w == 1 && player == obj) { k=1; jump MMbyPN; } + + if (w >= 2 && w < 128 && (LanguagePronouns-->w == obj)) { k = 1; jump MMbyPN; } + + if (Refers(obj, wn-1) == 0) { + .NoWordsMatch; + if (indef_mode ~= 0) { k = 0; parser_action = NULL; jump MMbyPN; } + rfalse; + } + + threshold = 1; + dict_flags_of_noun = (w->#dict_par1) & $$01110100; + w = NextWord(); + while (Refers(obj, wn-1)) { + threshold++; + if (w) + dict_flags_of_noun = dict_flags_of_noun | ((w->#dict_par1) & $$01110100); + w = NextWord(); + } + + k = threshold; + jump MMbyPN; ]; --) after "Output.i6t". +-) instead of "TryGivenObject" in "Parser.i6t". After reading a command when the current interlocutor is not nothing and player's command includes "ask/tell/a/t" (this is the new strip interlocutor from input rule): if the player's command includes "[someone talk-eligible]": From edd7f094dbec44f69b2118ab8ce4d7e510bbec22 Mon Sep 17 00:00:00 2001 From: Vivian <26861054+Roachbones@users.noreply.github.com> Date: Fri, 24 Nov 2023 22:26:37 -0600 Subject: [PATCH 067/138] Prevent entering baths --- .../Extensions/Counterfeit Monkey/World Model Tweaks.i7x | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x index 5848f72e..b8dce46f 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x @@ -1708,6 +1708,9 @@ Sanity-check washing a person who is not the player: say "[The noun] could probably use a wash, but on the whole I don't see the point." instead; say "Bathing people other than myself is kind of over-intimate." instead. +Instead of entering a bath: + try bathing. + A public restroom is a kind of room. A toilet-stall is a kind of container. The printed name of a toilet-stall is always "toilet stall". Rule for printing the plural name of a toilet-stall: say "toilet stalls". Understand "stall" as a toilet-stall. Understand "stalls" as the plural of a toilet-stall. A toilet-stall is always fixed in place and enterable and openable. From c85b2d3944fdb7c6027f3434995eea8a9680f4b9 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 27 Nov 2023 03:05:09 +0100 Subject: [PATCH 068/138] Update change log --- CHANGELOG.md | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5066f75c..d5cc7738 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,26 +1,35 @@ # Change log -## Release 12 +## Unreleased +### Bugs fixed + +- The start up data embedded in the game file was bad in the two previous releases. The game will now print a warning at startup if it detects bad embedded data. +- Run-time problem P10 would occur when trying to remove letters from the current room. +- Lena would occasionally ask the player to change the modem although it was no longer present. +- The fast travel GO TO command could be used to bypass the confrontation with Alex's father. +- Typing EXAMINE DIRECTION and then answering the resulting "Which do you mean" question with a direction would cause run-time problem P10. +- Run-time problem P60 would occur when using the soap dispenser after removing all sinks. +- Turning on the tap while in a shower or bath would cause run-time problem P43 as the game attempted to move the player out of play. It was also possible to drop any objects in the bath or shower, and then remove them from play by turning on the tap. We fix this by simply no longer allowing the player to enter showers or baths, in the hope that nobody will miss this. - The first aid station was not fixed in place and could be picked up, while its description still said it was mounted to the wall. -- There would be a reference to the inlaid desk even if it was not present. + +### Cosmetic output errors + +- The live branch was not mentioned in the description of the statue arm. +- The inlaid desk was still referenced in certain messages after it was gone. - After shooting ourselves with the anagramming gun, the text would say that we return to "or original form" rather than "our". -- Fixes a run-time problem P10 when trying to remove letters from the current room. -- Many new highlighted words. -- Lena would occasionally ask us to change the modem although it was no longer present. +- Many more important things are now highlighted. +- Fixes many unintended double spaces throughout the output text. - There would in some cases be a missing newline after the "Batman remark" at the end of the roundabout scene. -- The live branch was not mentioned in the description of the statue arm +- There would sometimes be an extra "I can't see what you're talking about" message when use of the letter-remover was attempted but disallowed. + +### Parsing + - T INSERTER without a hyphen is now understood as the T-inserter. - The T-inserter can now be used by typing INSERT T IN (thing). -- The fast travel GO TO command could be used to bypass the confrontation with Alex's father. -- There would sometimes be an extra "I can't see what you're talking about" printed when an attempted use of the letter-remover was prevented. -- The embedded start up data in the Gblorb file was bad in the two previous releases. The game will now print a warning at startup if it detects bad embedded data. -- EXAMINE DIRECTION would cause a run-time error. -- Things like REMIND MAN THAT MRS. ROSEHIP IS MARRIED would be understood as two commands separated by a period. Periods after titles are now stripped. +- Things like REMIND MAN THAT MRS. ROSEHIP IS MARRIED would be understood as two different commands separated by a period. Periods after titles are now properly stripped from input. - DEMO is now understood as DEMONSTRATION. -- Contractions such as WHAT'S, HE'S, and IT'S are now understood. -- Fixes a run-time problem when using the soap dispenser after removing all sinks. -- Fixes many double spaces throughout the output text. +- Contractions such as WHAT'S, HE'S, and IT'S are understood. - Adds more synonyms to the "ask why he is here" quip for the gift shop volunteer. WHY ARE YOU HERE and ASK WHY HE IS THERE now work. ## Release 11 From 88d61ed0f385727cc9af4ed4de504413d7bbfc6c Mon Sep 17 00:00:00 2001 From: Vivian <26861054+Roachbones@users.noreply.github.com> Date: Tue, 28 Nov 2023 20:46:45 -0600 Subject: [PATCH 069/138] don't hesitate to try backtracking through the tall window --- .../Animal Actions and Human Conversation.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 22d09c32..e7db0822 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -6181,7 +6181,7 @@ Test attacks with "establish / hit atlantida with sword / hit atlantida with foi Section 13 - Scene Interlude with Guards -Sanity-check going through the tall window when Atlantida-refreshed is off-stage: +Sanity-check going north through the tall window when Atlantida-refreshed is off-stage: if story viewpoint is second person singular: say "[We] could do that. [We] could climb out that window and not look back. It would be faster, easier, unquestionably safer. But what about the people we're leaving behind? What about my father and Professor Higgate? What about the protesters who got arrested today? From d93bb7189d7380ecfd720c90614adf4daba7c6aa Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Wed, 29 Nov 2023 07:13:06 +0100 Subject: [PATCH 070/138] Another attempt to fix going through the tall window It was possible to skip Alex's "guilt trip" comment entirely by typing GO THROUGH WINDOW. Hopefully this works better. --- .../Animal Actions and Human Conversation.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index e7db0822..5328266d 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -6181,7 +6181,7 @@ Test attacks with "establish / hit atlantida with sword / hit atlantida with foi Section 13 - Scene Interlude with Guards -Sanity-check going north through the tall window when Atlantida-refreshed is off-stage: +Sanity-check going through the tall window to Precarious Perch when Atlantida-refreshed is off-stage: if story viewpoint is second person singular: say "[We] could do that. [We] could climb out that window and not look back. It would be faster, easier, unquestionably safer. But what about the people we're leaving behind? What about my father and Professor Higgate? What about the protesters who got arrested today? From 8ff4db5cf7ef038ced07a019b73b902435b66843 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Wed, 29 Nov 2023 17:22:05 +0100 Subject: [PATCH 071/138] Comment typo --- .../Extensions/Counterfeit Monkey/World Model Tweaks.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x index b8dce46f..03012dce 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x @@ -916,7 +916,7 @@ Instead of going nowhere when the noun is not fronted by a facade in the locatio carry out the listing exits activity; now suppress-exit-listing is false. -[The parser would sometimes misinterpret commands such as GO TO CINEMA as FIND CINEMA-EXTERIOR and leave the player in from of the cinema rather than inside it. This gets around this by making sure that we always try to walk through any facade that we are "finding".] +[The parser would sometimes misinterpret commands such as GO TO CINEMA as FIND CINEMA-EXTERIOR and leave the player in front of the cinema rather than inside it. This gets around this by making sure that we always try to walk through any facade that we are "finding".] Instead of finding a facade: let the-direction be a random direction fronted by the noun; From fa8aa11a54ca900374d3473c57a2569ff3e41b56 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Wed, 29 Nov 2023 22:07:16 +0100 Subject: [PATCH 072/138] Make the tall window transparent Otherwise we will automatically open it when trying to look through it. --- .../Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index 68a6177f..fea334f5 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -733,7 +733,7 @@ topic title data "biography" or "phyllida" or "shaply" or "marcus" or "aurelius" or "churchill" or "winston" or "margaret" or "thatcher" or "martin" or "luther" or "king" or "nelson" or "mandela" "biographies" "The collection includes four different biographies of Phyllida Shaply; numerous lives of her contemporaries; and then a bizarrely diverse coverage of saints and villains, ancient and recent figures. Marcus Aurelius appears, as do Winston Churchill and Margaret Thatcher, Martin Luther King and Nelson Mandela." "economy/economics/macroeconomics" "books on the economy" "Several impressive-looking textbooks on macroeconomics are listed, though from the bookmarks it is clear that the owner has not been able to get all the way through them." -The tall window is a door. The initial appearance is "A window in the north wall, cut out through the cliff face, gives a view of [if the current daytime is sunset]the ocean in fading sunlight[otherwise if the current daytime is evening]tranquil sea under a darkening sky[otherwise]brilliant sunlight and the hot sea[end if]." It is north of Private Solarium and south of the Precarious Perch. +The tall window is a transparent door. The initial appearance is "A window in the north wall, cut out through the cliff face, gives a view of [if the current daytime is sunset]the ocean in fading sunlight[otherwise if the current daytime is evening]tranquil sea under a darkening sky[otherwise]brilliant sunlight and the hot sea[end if]." It is north of Private Solarium and south of the Precarious Perch. The description of the tall window is "[if the tall window is open]The window stands open.[else]The window is closed.[end if]". From 97aae65df410d31029536c3044930aed1d9e74f7 Mon Sep 17 00:00:00 2001 From: Vivian <26861054+Roachbones@users.noreply.github.com> Date: Sun, 3 Dec 2023 18:46:28 -0600 Subject: [PATCH 073/138] Make sun distant --- .../Extensions/Counterfeit Monkey/World Model Tweaks.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x index 03012dce..898eafa3 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x @@ -1063,7 +1063,7 @@ Report facing when the location is indoors: say "There's nothing remarkable [noun] there." instead; say "There's no door in that direction." instead. -The sky is a distant backdrop. It screens up. The sun is part of the sky. The description of the sky is "[sky-description]". The description of the sun is "[sun-description]". +The sky is a distant backdrop. It screens up. The sun is a distant part of the sky. The description of the sky is "[sky-description]". The description of the sun is "[sun-description]". [When play begins (this is the move backdrops to the outdoors rule): move the sky backdrop to all outdoors rooms.] From e7fbe282999c2f3d5cb50c7f93129963bdbc4cfe Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Wed, 29 Nov 2023 23:59:48 +0100 Subject: [PATCH 074/138] More Facing adjustments Replace the can't see through closed door rule in the Facing extension in order to remove the automatic opening of closed doors when trying to look through them. Also fix the way adjacent rooms are described from other rooms. We keep the title case capitalization and say computer-gamey things like "We make out the Precarious Perch that way." It would be nice if we could instead use lower case where appropriate, and add the correct article ("a precarious perch" rather than "the precarious perch" until the location is visited and so on), but that would be a lot of work and require new properties to be set for each one of the 100 rooms, so that will have to wait. --- .../Counterfeit Monkey/World Model Tweaks.i7x | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x index 03012dce..5b685452 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x @@ -965,22 +965,20 @@ Include Facing by Emily Short. Instead of examining a direction: try facing the noun. -Rule for distantly describing a proper-named room (called target) (this is the new distant description rule): +Rule for distantly describing a room (called target) (this is the new distant description rule): say "[We] make out [the target] that way." The default distant description rule is not listed in any rulebook. -Rule for distantly describing a room (called target): - let N be the printed name of the target; - unless the target is proper-named: - now N is N in lower case; - say "[We] can make out [N] that way." - Rule for distantly describing a room (called target) which encloses someone when the location is indoors: - let N be the printed name of the target; - unless the target is proper-named: - now N is N in lower case; - say "That way [we] can see [N], in which [is-are a list of people enclosed by the target]." + say "That way [we] can see [the target], in which [is-are a list of people enclosed by the target]." + +Check looking toward a room (this is the new can't see through closed door rule): + now the occluding door is the door direction faced from the location; + if the occluding door is a door and the occluding door is closed and the occluding door is not transparent: + say "[We] can't see that way because [the occluding door] [are] closed." instead. + +The new can't see through closed door rule is listed instead of the can't see through closed door rule in the check looking toward rules. When play begins (this is the nothing-to-see-that-way rule): now nothing-to-see-that-way is "[We] can't see anything interesting in that direction." From 3fdf6c54a65f7381e442c91712eed6d5252ca073 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 4 Dec 2023 03:44:19 +0100 Subject: [PATCH 075/138] Fix articles of rooms An attempt to make the use of the definite article in room names consistent. Most of the time, room names are displayed without an article, but it is used when looking into an adjacent room ("We make out the roundabout that way"), when listing exits ("We can go west to Sigil Street from here"), when asking for disambiguation ("Which do you mean, 1) Higgate's office, or the 2) Graduate Student Office?"), and when reporting fast-travel ("We walk up the steep switchback of Deep Street and through the perilous traffic of the roundabout as far as the Monumental Staircase.") This is currently implemented in a slightly haphazard way, where the rooms are sometimes explicitly given the "proper-named" or the "improper-named" property, but in other cases we rely on the fact that the compiler tries to infer this from whether the room is referred to with an a definite article the first time it is mentioned in the source ("The Hostel is east of Heritage Corner", "West of Long Street North is Fleur d'Or Lobby.") There is an assumption in several places that if a room has the proper-named property, it should be capitalized, so "My Apartment" rather than "my apartment". I considered adding a special flag for rooms that shouldn't have an article but still be lower-case, but that stull wouldn't help with room names such as "Slango's Bunk". --- .../Act I Among Sightseers.i7x | 34 +++++++++---------- .../Act II Among Smugglers.i7x | 6 ++-- .../Act III Among Scholars.i7x | 12 +++---- .../Act IV Among Policemen.i7x | 2 +- .../Repository Alphabetic Details.i7x | 2 +- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x index e10788d6..faea4f62 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x @@ -751,7 +751,7 @@ Chapter 1 - Central Park Area Section 1 - The Park -Park Center is a room. The description of the Park Center is "This is a handsome expanse of [grass], shaped like a rectangle with rounds cut from the corners, bounded by [railings] along the north side. There are no stalls and no barkers here, but [small children] are running around [if the horses are part of the fountain]an impressive[else]a desecrated[end if] [marble fountain][if hoses are part of the marble fountain], currently spewing water in all directions[end if].[one of] +The Park Center is an improper-named room. The description of the Park Center is "This is a handsome expanse of [grass], shaped like a rectangle with rounds cut from the corners, bounded by [railings] along the north side. There are no stalls and no barkers here, but [small children] are running around [if the horses are part of the fountain]an impressive[else]a desecrated[end if] [marble fountain][if hoses are part of the marble fountain], currently spewing water in all directions[end if].[one of] I gather from the direction of your thoughts that you dislike small children, so I'll restrain myself from trying to communicate with them.[or][stopping]". @@ -894,7 +894,7 @@ Some grass is scenery in the Park Center. The description is "Deep green and vel Rule for distantly describing the Fair: say "That way is the fair: a mass of booths and people and games and bright sunlight, too chaotic to get a good look at from here." -The Fair is south of Park Center. It is checkpoint. The description is "[one of]Today is Serial Comma Day, one of the biggest holidays on the island, and a time when half the police force is off duty while the other half is over-extended. The perfect day to make an escape. [or][stopping]The square at the cen[ter] of town is [one of]therefore [or][stopping]crowded with people, and there's an overpowering smell of artificial butter and spun sugar." +The Fair is south of Park Center. It is improper-named and checkpoint. The description is "[one of]Today is Serial Comma Day, one of the biggest holidays on the island, and a time when half the police force is off duty while the other half is over-extended. The perfect day to make an escape. [or][stopping]The square at the cen[ter] of town is [one of]therefore [or][stopping]crowded with people, and there's an overpowering smell of artificial butter and spun sugar." Instead of smelling the Fair: say "It smells like candy and popcorn, with a note of booze and another note of sweaty crowd." @@ -1536,9 +1536,9 @@ The central hillock is scenery in Monumental Staircase. The description is "A sq A little of the original fortification does exist immediately north and curving around to the northwest, but it is in very bad shape here, and the top of the walls cannot be walked on at this point." Understand "city" or "fortified" or "walls" or "great" or "enclave" as the hillock. -The harbor-view is a distant backdrop. The printed name is "harbor". It is in Old Hexagonal Turret, Old City Walls, Crumbling Wall Face, Outdoor Cafe, and Monumental Staircase. It screens east and northeast. Understand "port" or "harbor" or "docks" or "dock" as harbor-view. The description is "A harbor swarming with small and medium-sized tourist boats; most of the major shipping comes in via another route." The introduction is "That is where [we] [are] trying to get to [--] or rather, get through." +The harbor-view is a distant backdrop. The printed name is "harbor". It is in the Old Hexagonal Turret, the Old City Walls, the Crumbling Wall Face, the Outdoor Cafe, and the Monumental Staircase. It screens east and northeast. Understand "port" or "harbor" or "docks" or "dock" as harbor-view. The description is "A harbor swarming with small and medium-sized tourist boats; most of the major shipping comes in via another route." The introduction is "That is where [we] [are] trying to get to [--] or rather, get through." -The fish-market-view is a distant backdrop. The printed name is "fish market". It is in Old Hexagonal Turret, Old City Walls, Crumbling Wall Face, Outdoor Cafe, and Monumental Staircase. Understand "market" or "fish market" as the fish-market-view. The description is "From this angle and distance, all you can see is the open space and a few awnings. It's not the best time of day for this kind of thing anyway." +The fish-market-view is a distant backdrop. The printed name is "fish market". It is in the Old Hexagonal Turret, the Old City Walls, the Crumbling Wall Face, the Outdoor Cafe, and the Monumental Staircase. Understand "market" or "fish market" as the fish-market-view. The description is "From this angle and distance, all you can see is the open space and a few awnings. It's not the best time of day for this kind of thing anyway." Instead of going down in the Staircase, try going east. Instead of going up in the Staircase, try going west. @@ -1874,7 +1874,7 @@ Understand "count [bills]" as a mistake ("[We] thumb quickly through the bills [ Section 4 - The New Church -The New Church is west of the Church Forecourt. It is indoors and proper-named. The description is "Not a Gothic cathedral from the era when the church was wealthy and secure, but a gallant Neo-classical response to the turmoil of the 18th century, when the power of language was just beginning to be evident, and instead of an immutable cosmology, we suddenly had observer-consensus reality. [one of]What is the need or use of God, if it turns out that He gave all the power of creation to Adam when He let him name the animals?[or][stopping]". +The New Church is west of the Church Forecourt. It is indoors and improper-named. The description is "Not a Gothic cathedral from the era when the church was wealthy and secure, but a gallant Neo-classical response to the turmoil of the 18th century, when the power of language was just beginning to be evident, and instead of an immutable cosmology, we suddenly had observer-consensus reality. [one of]What is the need or use of God, if it turns out that He gave all the power of creation to Adam when He let him name the animals?[or][stopping]". The inscription is fixed in place in the New Church. It is distant. The initial appearance is "An [inscription] above [the altar], picked out in gold paint, reads Ἐν ἀρχῇ ἦν ὁ λόγος." Understand "paint" or "gold" as the inscription. The description is "It means, In the Beginning was the Word. @@ -2069,7 +2069,7 @@ Part 3 - Roundabout Access [Instead of going to Old City Walls when the backpack is not handled: say high-street refusal instead. -Instead of approaching Old City Walls when the backpack is not handled: +Instead of approaching the Old City Walls when the backpack is not handled: say high-street refusal instead.] @@ -2198,7 +2198,7 @@ Chapter 1 - City Walls Section 1 - Old City Walls -Old City Walls are north of the Monumental Staircase. Understand "wall" as Old City Walls. The description is "Only portions of the old walls still stand, but you can walk along what remains, as though you were defending the place. They're a me[ter] and a half wide, made of ashlar blocks. On the vertical faces these blocks are still rough, but underfoot they have been worn smooth by the passage of many defenders and (subsequently) tourists. One of the [defaced ashlar block]s in the wall has even been defaced, some old inscription gouged out.[one of] +The Old City Walls are north of the Monumental Staircase. Understand "wall" as Old City Walls. The description is "Only portions of the old walls still stand, but you can walk along what remains, as though you were defending the place. They're a me[ter] and a half wide, made of ashlar blocks. On the vertical faces these blocks are still rough, but underfoot they have been worn smooth by the passage of many defenders and (subsequently) tourists. One of the [defaced ashlar block]s in the wall has even been defaced, some old inscription gouged out.[one of] I used to like to climb around up here when I was a kid. I made believe[--] oh, you'll think it's silly.[or][stopping] @@ -2225,9 +2225,9 @@ Turret-view is a facade in Old City Walls. It fronts east. It is scenery. The pr Section 2 - The Turret -The Old Hexagonal Turret is east of Old City Walls. The description is "Up here [we] stand on the remains of the old fortifications; this turret offers a view out over the docks, the fish market, and the harbor, which it was designed to protect." +The Old Hexagonal Turret is east of Old City Walls. It is improper-named. The description is "Up here [we] stand on the remains of the old fortifications; this turret offers a view out over the docks, the fish market, and the harbor, which it was designed to protect." -Out-direction of Old Hexagonal Turret is west. [Back to old city walls] +Out-direction of the Old Hexagonal Turret is west. [Back to old city walls] The depluralizing cannon is a container in the Old Hexagonal Turret. It is fixed in place. Understand "heavy" or "old" or "barrel" as the depluralizing cannon. The printed name is "deplural[izing] cannon". The initial appearance is "A heavy old [depluralizing cannon] is aimed out to sea." @@ -2265,11 +2265,11 @@ Understand "fire [cannon]" or "load [cannon]" or "aim [cannon]" or "use [cannon] Section 3 - The Walls Crumble -Crumbling Wall Face is north of the Old City Walls. The description is "The wall once continued north from here some distance before curving northwest around the remainder of the city. So much has crumbled away, though, that the walkway is impassable north of this point. To protect citizens, there is a [safety railing] across the [view of jagged wall]. +The Crumbling Wall Face is north of the Old City Walls. The description is "The wall once continued north from here some distance before curving northwest around the remainder of the city. So much has crumbled away, though, that the walkway is impassable north of this point. To protect citizens, there is a [safety railing] across the [view of jagged wall]. A [metal ladder] of four rungs descends the inner face of the wall, allowing pedestrians access to the streets to the west." -Sanity-check going north in Crumbling Wall Face: +Sanity-check going north in the Crumbling Wall Face: say "The wall pretty much falls away into slippery rubble at that point, which is why there's a safety railing in the way." instead. rule for listing exits while looking in Crumbling Wall Face: @@ -2419,9 +2419,9 @@ My parents' home is a facade in Webster Court. The printed name is "my parents[' My childhood bedroom faces northwest, away from the docks, towards the roofs of other villas and the open sea." -The pink door is north of Webster Court and south of Foyer. The pink door is a door. The pink door is scenery. It is lockable and locked. +The pink door is north of Webster Court and south of the Foyer. The pink door is a door. The pink door is scenery. It is lockable and locked. -Foyer is indoors and checkpoint. +The Foyer is indoors and checkpoint and improper-named. Parental appearance is a scene. Parental appearance begins when the location is webster court and Patriotic chard-garden is visited and Private Beach is visited. @@ -2519,7 +2519,7 @@ After going to Webster Court when Private Beach is visited and Patriotic Chard-G otherwise: clear the path-walked for the player; unless final destination is Webster Court: - now approach-destination is Winding Footpath; [Tricks the approaching verb into stopping here even if you're trying to reach someplace really far away.] + now approach-destination is the Winding Footpath; [Tricks the approaching verb into stopping here even if you're trying to reach someplace really far away.] continue the action. Section 3 - Chard-Garden @@ -2624,11 +2624,11 @@ The spinner-gate is north of Roget Close. It is a closed transparent locked doo The description of the spinner-gate is "A gate of wrought iron bars between two sturdy columns[if the spinner-gate is closed and the spinner-gate is locked], too close to climb through and too tall to climb over[else if the spinner-gate is closed], closed but not locked[else if the spinner-gate is open]; at the moment the gate has been pushed conveniently open[end if]. Built into the right-hand column, next to the gate latch, is a curious [if boldening is true][bold type][end if]sculpture[roman type]." -Out-direction of Winding Footpath is south. [Through the spinner gate] +Out-direction of the Winding Footpath is south. [Through the spinner gate] Through spinner-gate is the Winding Footpath. South of Winding Footpath is Roget Close. -Winding Footpath is an outdoors checkpoint room. The description is "The [underfoot-path] winds between the villas, sloping steeply downward. It is narrow, and [bushes] left and right conceal it even from the windows of the people living nearby." Understand "path" as Winding Footpath. +The Winding Footpath is an outdoors checkpoint room. The description is "The [underfoot-path] winds between the villas, sloping steeply downward. It is narrow, and [bushes] left and right conceal it even from the windows of the people living nearby." Understand "path" as Winding Footpath. Instead of going down in Winding Footpath: try going north. @@ -2783,7 +2783,7 @@ Test shrine with "tutorial off / autoupgrade / wave z-remover at kudzu / look be Section 6 - The Beach -Private Beach is north of Winding Footpath. It is checkpoint. The description is "This is little more than a strip of fine yellow [sand], perhaps twenty me[ter]s from side to side, and five from the [hillside] to the waterline[if the sage is in the location and the sage is not handled]. A little [sage] grows on the hillside, escaped from some garden, along with wilder plants[end if]. Above, at the top of that slope, are houses with balconies overlooking the sea, but from this angle it's impossible to see much of them, or for them (you'll have to take my word on this) to see us[if high street is visited and roundabout is not visited]. +The Private Beach is north of Winding Footpath. It is checkpoint. The description is "This is little more than a strip of fine yellow [sand], perhaps twenty me[ter]s from side to side, and five from the [hillside] to the waterline[if the sage is in the location and the sage is not handled]. A little [sage] grows on the hillside, escaped from some garden, along with wilder plants[end if]. Above, at the top of that slope, are houses with balconies overlooking the sea, but from this angle it's impossible to see much of them, or for them (you'll have to take my word on this) to see us[if high street is visited and roundabout is not visited]. It's tempting to look for crabs among the rocks, but the tide is high just now, and even at the best of times this is not an area rich in sealife[end if]." diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index 9d321bc0..cdabb6af 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -115,7 +115,7 @@ After going from the Aquarium when Slango is in the Counterfeit Monkey: Section 2 - The Aquarium -The Aquarium Bookstore is east of Deep Street. It is a privately-controlled checkpoint room. It is indoors. The description is "The shop takes its name from the [collection of fish] mounted on every wall: swordfish, bass, other things I don't recogn[ize]. Underneath these dubious tokens, the walls are covered with bookshelves, and there are stacks of books on the floor where the shelves have proven insufficient." +The Aquarium Bookstore is east of Deep Street. It is a privately-controlled proper-named checkpoint room. It is indoors. The description is "The shop takes its name from the [collection of fish] mounted on every wall: swordfish, bass, other things I don't recogn[ize]. Underneath these dubious tokens, the walls are covered with bookshelves, and there are stacks of books on the floor where the shelves have proven insufficient." The aquarium-shelving is scenery in the aquarium. Understand "shelves" or "bookshelves" or "shelving" as the aquarium-shelving. The printed name is "shelving". The description is "They're completely crammed with books." @@ -352,7 +352,7 @@ The Authenticator is a woman in Fish Market. Understand "tall" or "stern" or "wo Section 5 - Outdoor Cafe -The Outdoor Cafe is south of the Fish Market and west of Deep Street. The printed name is "Outdoor Café". The description is "From this slightly raised terrace, tourists have a view of the activity in the market and out over the docks[one of][or]. The street is [east], the Fish Market [north][stopping]." +The Outdoor Cafe is south of the Fish Market and west of Deep Street. It is improper-named. The printed name is "Outdoor Café". The description is "From this slightly raised terrace, tourists have a view of the activity in the market and out over the docks[one of][or]. The street is [east], the Fish Market [north][stopping]." The rocky cliff-face is a scenery facade in Outdoor Cafe. It fronts south. Understand "cliff" or "rocks" or "face" as the rocky cliff-face. The description is "This little terrace area has been carved out of the hillside. Immediately to the south there is only rough rock wall for many feet up." The closure notice is "That way is bare cliff rock. ". @@ -1056,7 +1056,7 @@ Sanity-check exiting when the player is in an undisguised car and the location i Check waving the letter-remover at the Traffic Circle when the current setting of the letter-remover is "l": say "Perhaps a Traffic Circe would be able to turn cars into pigs, but the letter-remover has neither the imagination nor the power to bring this entity to life." instead. -Traffic Circle is inside from the Roundabout. It is a privately-controlled checkpoint outdoors road. +Traffic Circle is inside from the Roundabout. It is a privately-controlled checkpoint improper-named outdoors road. Out-direction of Traffic Circle is outside. [The roundabout and the traffic circle are the only place where the standard outside and inside directions are used] diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index 546db7c7..187ce9a3 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -142,7 +142,7 @@ appearance description idle Section 3 - The Fleur d'Or -West of Long Street North is the Fleur d'Or Lobby. The description of the Fleur d'Or Lobby is "[one of]The Fleur d'Or is a high-end hotel that serves businessmen and luxury tourists interested in the linguistic mechanisms of the island. As a result, it has all kinds of paid exemptions, including an exemption allowing it to operate under a foreign name. +West of Long Street North is the Fleur d'Or Lobby. The description of Fleur d'Or Lobby is "[one of]The Fleur d'Or is a high-end hotel that serves businessmen and luxury tourists interested in the linguistic mechanisms of the island. As a result, it has all kinds of paid exemptions, including an exemption allowing it to operate under a foreign name. [or][stopping][The spotlights] in the ceiling light the floor in distinct pools of Bureau blue, and a [room divider] etched with random letters separates the lobby from the drinks club to the [west]." Understand "hotel" as the Fleur d'Or Lobby. @@ -155,7 +155,7 @@ The hotel has recently had a face lift, with the silly old ornamentation pried o If you are my mother, you call this style Atlantean Postmodern. Less kindly, it is something from the sweaty dreams of an upscale swimming-pool installer." -Fleur d'Or lobby is indoors and southern. The room divider is a scenery thing in Fleur d'Or Lobby. The printed name is "sheet of frosted glass". Understand "glass" or "sheet" or "sheet of" or "frosted" or "annotation" or "primordial" or "primeval" or "sea" as the room divider. The description is "The glass is a good three quarters of an inch thick, and looks very sturdy. The etched letters glow or fade out again depending on the changing light conditions in the lobby. +Fleur d'Or lobby is indoors, proper-named and southern. The room divider is a scenery thing in Fleur d'Or Lobby. The printed name is "sheet of frosted glass". Understand "glass" or "sheet" or "sheet of" or "frosted" or "annotation" or "primordial" or "primeval" or "sea" as the room divider. The description is "The glass is a good three quarters of an inch thick, and looks very sturdy. The etched letters glow or fade out again depending on the changing light conditions in the lobby. Annotation in the corner indicates that this is a commissioned artwork by Anne Landis Rosehip, entitled 'The Primeval Sea.'" @@ -231,7 +231,7 @@ Rule for writing a topic sentence about the piano: Section 4 - Drinks Club -Fleur d'Or Drinks Club is west of Fleur d'Or Lobby. It is indoors, checkpoint and southern. The description is "The back wall is dramatically decorated with bottled liquors of all sorts, from gin to cachaça; there's a giant bottle of Campari, taller than your average three-year-old, with a red ribbon around its neck. +Fleur d'Or Drinks Club is west of Fleur d'Or Lobby. It is indoors, checkpoint, proper-named and southern. The description is "The back wall is dramatically decorated with bottled liquors of all sorts, from gin to cachaça; there's a giant bottle of Campari, taller than your average three-year-old, with a red ribbon around its neck. What makes this place technically a drinks club rather than a bar is its lic[ense] to serve letter-manufactured food and drink. [A toolkit] on the [dor-bar-top] contains [a list of things *in the toolkit], ready to be transformed into their respective cocktails." @@ -355,7 +355,7 @@ The apartment complex is a facade in Palm Square. The initial appearance is "I l Section 2 - Babel Cafe -South of Palm Square is Babel Café. Understand "cafe" as the Babel Café. The description of Babel Café is "Through many changes of management, this institution has fed the denizens of the university and ignored their semi-sedition." Babel Café is indoors and southern. +South of Palm Square is Babel Café. Understand "cafe" as the Babel Café. The description of Babel Café is "Through many changes of management, this institution has fed the denizens of the university and ignored their semi-sedition." Babel Café is indoors, proper-named and southern. Out-direction of Babel Café is north. [Back to Palm Square] @@ -735,7 +735,7 @@ Carry out taking the ring: Instead of climbing the gate: say "It is not badly built, as far as gates go, and it would not be possible to climb over without attracting attention." -Southeast of the sturdy iron gate is the University Oval. The University Oval is proper-named, checkpoint and southern. +Southeast of the sturdy iron gate is the University Oval. The University Oval is improper-named, checkpoint and southern. The description of University Oval is "This is the cen[ter] of the university, a broad grassy oval shaded with [sycamore trees] and surrounded by buildings in brick or white stone." @@ -820,7 +820,7 @@ Section 3 - Seminar Room Southwest of Samuel Johnson Hall is the seminar door. The seminar door is a closed lockable locked door. The seminar door is scenery. The description of the seminar door is "It's sturdy, because sometimes valuable equipment is stored in the room beyond. That room also contains the library of department books, a set of research materials kept on hand so that people don't have to go over to the university library to double-check basic data during a discussion." -Southwest of the seminar door is Language Studies Seminar Room. The description of the Language Studies Seminar Room is "They recently redid this room, and whoever picked the decorations had postmodern tastes." The Language Studies Seminar Room is indoors, checkpoint and southern. +Southwest of the seminar door is Language Studies Seminar Room. The description of the Language Studies Seminar Room is "They recently redid this room, and whoever picked the decorations had postmodern tastes." The Language Studies Seminar Room is indoors, checkpoint, improper-named and southern. After looking in the Language Studies Seminar Room when the seminar door is open: if Professor Higgate is enclosed by location: diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x index 0749e519..71ae1660 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x @@ -784,7 +784,7 @@ Definition: a thing is bureau-disallowed if it is not bureau-allowed. ] Section 5 - Cold Storage -Cold Storage is southwest of Bureau Basement Secret Section. It is indoors, forbidden and southern. The description is "Shelves on both sides of the room are full of [objects-on-stands] on stands: objects that used to be men and women, and in a few cases even children. The [stand labels] preserve their original names." +Cold Storage is southwest of Bureau Basement Secret Section. It is indoors, improper-named, forbidden and southern. The description is "Shelves on both sides of the room are full of [objects-on-stands] on stands: objects that used to be men and women, and in a few cases even children. The [stand labels] preserve their original names." The introduction is "If this goes wrong, we could wind up living in here permanently. So we'd better figure whom to send out, and do it fast." diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index 514a562c..ddd6b978 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -1799,7 +1799,7 @@ The passage-place is a thing. The printed name is "passage". Understand "passage [This portion is, again, totally an Easter egg: there's no need to go to the Shadow Chamber, and on the whole it's pretty unlikely that anyone will on the first try. However, it's a repository for palindromes and word puzzles of non-English and slightly superstitious origin, suggesting that some sense of magic attached to these even before linguistic efficacy was widely detected.] -The Shadow Chamber is a room. It is indoors, checkpoint and forbidden. The description is "Dim lights in the floor make it possible to navigate in here, though it's still fairly dark. The place is small and shabby, the air stale.[assign-amanda]". +The Shadow Chamber is a room. It is indoors, checkpoint, improper-named and forbidden. The description is "Dim lights in the floor make it possible to navigate in here, though it's still fairly dark. The place is small and shabby, the air stale.[assign-amanda]". [Somewhat hackish way to get an extra line break before the achievement message and avoid a double paragraph break after] To say assign-amanda: From cb0cb57b61b2a3a8056822ad85b20f39234504ee Mon Sep 17 00:00:00 2001 From: Vivian <26861054+Roachbones@users.noreply.github.com> Date: Sun, 3 Dec 2023 20:47:48 -0600 Subject: [PATCH 076/138] Restore search engine descriptions --- .../Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x | 2 +- .../Extensions/Counterfeit Monkey/World Model Tweaks.i7x | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index fea334f5..f0f8a544 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -295,7 +295,7 @@ Test surveillance with "x computer / x screen / turn on computer / select securi Test survey with "test surveillance" in Surveillance Room. -The surveillance computer runs a search engine called access-database. The data table of access-database is the Table of Access Data. +The surveillance computer runs a search engine called access-database. The description of access-database is "[We] can type search terms to look for data records.". The data table of access-database is the Table of Access Data. Table of Access Data topic title data diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x index 293d5eea..34bef181 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x @@ -2037,8 +2037,7 @@ The description of a keyboard is usually "Arranged in the Dvorak layout preferre When play begins (this is the search engines rule): repeat with item running through search engines: - now the results-found response of item is "The search turns up the following results:"; - now the description of the item is "[We] can type search terms to look for data records." + now the results-found response of item is "The search turns up the following results:". Chapter 2 - Substances From 627a0068f3a44c6731f0889fd03f1541c0561cb0 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 4 Dec 2023 03:52:00 +0100 Subject: [PATCH 077/138] Missed these --- .../Act V Atlantida Herself.i7x | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index fea334f5..b34fe340 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -17,7 +17,7 @@ Section 1 - Display Reloading Room At the same time, we want to discourage the player from thinking that there is something to be won by trying to communicate with those back upstairs. So while the tourists are shown to have reactions to certain types of item, they remain on a tight cycle and can't be broken out of their basic behavior.] -Display Reloading Room is south of Equipment Archive. It is indoors, forbidden and southern. The description is "This area [if the display-platform is not in the location]is more or less empty. [Hazard-tape] marks off an area of the floor to indicate that [we] shouldn't stand there[otherwise]is mostly taken up with the [display-platform] descended from the room above[end if]." +Display Reloading Room is south of Equipment Archive. It is indoors, improper-named, forbidden and southern. The description is "This area [if the display-platform is not in the location]is more or less empty. [Hazard-tape] marks off an area of the floor to indicate that [we] shouldn't stand there[otherwise]is mostly taken up with the [display-platform] descended from the room above[end if]." A tv monitor is a fixed in place device in the Display Reloading Room. It is switched on. Understand "black" or "white" or "black and white" or "television" or "security" as the tv monitor. The initial appearance is "A black and white [tv monitor] is embedded in the wall." @@ -161,7 +161,7 @@ Instead of going north in Wonderland when the secret-door is closed and the secr Section 3 - Equipment Archive -Equipment Archive is a room. It is indoors, forbidden and southern. The description is "The [if boldening is true][bold type][end if]ceiling[roman type] is mirrored, perhaps to make it harder for anyone to sneak around without being noticed among the shelves." +Equipment Archive is a room. It is indoors, improper-named, forbidden and southern. The description is "The [if boldening is true][bold type][end if]ceiling[roman type] is mirrored, perhaps to make it harder for anyone to sneak around without being noticed among the shelves." A ceiling mirror is a mirror in the Equipment Archive. @@ -412,7 +412,7 @@ The spiral staircase is a down-staircase in Surveillance Room. It fronts down. T Section 3 - Workshop -Workshop is east of Surveillance Room. Workshop is indoors and forbidden. The description is "A room whose importance is obvious from how clean it is and how little furniture it is allowed to have." +Workshop is east of Surveillance Room. Workshop is indoors, improper-named and forbidden. The description is "A room whose importance is obvious from how clean it is and how little furniture it is allowed to have." @@ -637,7 +637,7 @@ Chapter 3 - Atlantida's Spaces Section 1 - Personal Apartment -The Personal Apartment is a room. It is indoors, checkpoint and forbidden. The description is "At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. [if the oil-paintings are in the location][Oil-paintings] on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. [end if]An antique bed stands in the cen[ter] of the room." +The Personal Apartment is a room. It is indoors, checkpoint, improper-named and forbidden. The description is "At a guess, this is a room hardly anyone ever visits, or even knows about. Though the ceiling and one wall are bare cave, the rest has been paneled and graciously decorated in the style of the end of the 18th century. [if the oil-paintings are in the location][Oil-paintings] on the walls depict great men and women of Atlantis gone by: Phyllida Shaply, Amelia Landison, Clarence Arbot, Jon Rosehip. [end if]An antique bed stands in the cen[ter] of the room." atlantida-woman is a woman in the Personal Apartment. [She is on the fancy bed.] The printed name of atlantida-woman is "Atlantida". The description of atlantida-woman is "Her face is ageless, her eyes a piercing blue. She looks like Phyllida Shaply, our famous forebear, except that there is something ethereal and heroic about her as well." @@ -864,7 +864,7 @@ Instead of going up in Abandoned Shore: Instead of going north in Abandoned Shore when the player is not in the kayak: say "[We] have too far to go; just swimming won't get [us] out to Slango's yacht." -Abandoned Shore is below Precarious Perch. It is forbidden and checkpoint. The description is "There's a little inlet of shore here, mostly boulders with little sand, completely cut off from the dock area and sheltered by the curve of the rock so that it wouldn't be visible from the sea unless someone were very close in." +Abandoned Shore is below Precarious Perch. It is forbidden, improper-named and checkpoint. The description is "There's a little inlet of shore here, mostly boulders with little sand, completely cut off from the dock area and sheltered by the curve of the rock so that it wouldn't be visible from the sea unless someone were very close in." Some boulders are scenery in Abandoned Shore. Understand "crack" or "rocks" or "boulder" as the boulders. The description is "Rough black rock, the kind that tears up your hands if you try to hold onto it too tightly." @@ -986,7 +986,7 @@ Check facing in abandoned shore: Report facing in Abandoned Shore: say "The charm of this place is that it's very hard to see anything in any direction but the ocean. In every other direction [we] are completely protected by rocks." instead. -Open Sea is north of the Abandoned Shore. It is forbidden and checkpoint. The description is "The water stretches in all directions, but [we] can see off to the north where [viewed-yacht] is anchored, ready to bring [us] back aboard. Its metallic blue shape almost blends in with the water." +Open Sea is north of the Abandoned Shore. It is forbidden, improper-named and checkpoint. The description is "The water stretches in all directions, but [we] can see off to the north where [viewed-yacht] is anchored, ready to bring [us] back aboard. Its metallic blue shape almost blends in with the water." The introduction is "If [we] were further around the island to the east, [we] might be able to see bits of the drowned city: both the buildings that were legitimately destroyed when the land sunk into the sea, and the areas where during the Civil Dispute of Standard[ization] the authorities dumped unwanted foreign archaeological [if the player is wearing britishizing goggles]artefact[otherwise]artifact[end if]s. But here I'm afraid it's just shellfish and sand down there." Rule for listing exits when looking in the Open Sea: @@ -1109,7 +1109,7 @@ The yacht's name is obviously a riff on Counterfeit Monkey (Slango's reason for Section 2 - Sunning Deck -Sunning Deck is a nautical room. It is forbidden. +The Sunning Deck is a nautical room. It is forbidden. The description is "[one of]This is a very fine boat: sleek, shiny, big... Oh, you don't like it when I put it that way, I see. All right then: a high-speed yacht, something luxurious enough that it looks like a rich man's toy to harbor officials, but it handles almost like a cigarette boat. [if the player wears the Britishizing goggles]Fibreglass[otherwise]Fiberglass[end if] hull, shaped in a deep V for racing, capable of 80 knots on a calm sea. Range of around 300 nautical miles, enough to take us past Gibraltar to Málaga or perhaps even Almeria. This bit is the aft portion[or]This is the aft section of the deck[stopping], broad and flat and suitable for sunning oneself." @@ -1144,7 +1144,7 @@ The command chair is an enterable scenery supporter in the Navigation Area. The The controls are scenery in the Navigation Area. Understand "mass" or "buttons" or "button" or "lever" or "levers" or "steering" or "wheel" as the controls. The description is "It's curious, looking at these and knowing I've never touched them before in my life, and yet having your instinctive muscular knowledge of what they're all for and how they work. I feel like I could sit down and drive the yacht, and at the same time I find the idea terrifying." -Foredeck is fore from the Navigation Area. It is nautical and forbidden. The description is "Here the yacht is nothing but a nose over the water. A [hatch], hardly big enough for a portly person, descends into the so-called crew cabin." +The Foredeck is fore from the Navigation Area. It is nautical and forbidden. The description is "Here the yacht is nothing but a nose over the water. A [hatch], hardly big enough for a portly person, descends into the so-called crew cabin." In-direction of Foredeck is down. [Into crew cabin] From 4d6600308b79df27abbad44e497c0b1b1f987b89 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 4 Dec 2023 03:52:49 +0100 Subject: [PATCH 078/138] Fix looking north into Waterstone's office We want the custom message here. --- .../Extensions/Counterfeit Monkey/Act III Among Scholars.i7x | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index 187ce9a3..1e29efa8 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -1425,6 +1425,9 @@ A description-concealing rule when the location is the Language Studies Departme [Report Professor Waterstone locking office-door-1 with something: say "Through the window in Waterstone's door, [we] can see him turning the lock. When he catches us watching he gives a tight, unfriendly smile and goes back to his desk." instead.] +Instead of looking toward Waterstone’s Office when office-door-1 is closed: + try searching the special glass window. + Check examining office-door-1 when the subcommand of office-door-1 matches "waterstone": if Professor Waterstone is marked-visible: try examining Professor Waterstone instead. From 6345a1e25bd8d2919178e4a30f3d18d85d0b9578 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 4 Dec 2023 03:53:58 +0100 Subject: [PATCH 079/138] Fix looking into the lecture hall rooms Add custom messages from each of the three adjacent rooms, so as not to get "We make out the Lecture Hall (at the podium) that way." --- .../Counterfeit Monkey/Act III Among Scholars.i7x | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index 1e29efa8..1a5f1df1 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -1931,6 +1931,12 @@ The printed name is "Lecture Hall". Understand "podium" or "at podium" or "at th After printing the name of Lecture Hall 1 while not constructing the status line: say " [roman type](at the [podium])". +Instead of looking toward Lecture Hall 1 when the location is Samuel Johnson Basement: + say "There is a lecture room to the east." + +Instead of looking toward Lecture Hall 1: + say "[We] see the podium that way." + The podium is a supporter in Lecture Hall 1. It is scenery. The description is "An advanced, pre-wired [podium] that allows the instructor to project slides from a laptop or show movies." On the podium is a page. The page is a notepad. The description of the page is "A sheet of lined paper[if the location is Lecture Hall 1], presumably left by the person who lectured here last[end if]." @@ -1973,6 +1979,9 @@ Lecture Hall 2 is south of Lecture Hall 1. The printed name is "Lecture Hall". U After printing the name of Lecture Hall 2 while not constructing the status line: say " [roman type](among the [if boldening is true][bold type][end if]seats[roman type])". +Instead of looking toward Lecture Hall 2: + say "[We] see the seats that way." + Some wooden seats are supporters in Lecture Hall 2. Understand "hard" or "wood" as the wooden seats. The initial appearance is "The room extends [if Location is Lecture Hall 1]south[otherwise]north[end if], full of hard [wooden seats]." The description is "Ingeniously uncomfortable." Rule for disclosing contents of the wooden seats when at least one mentionable thing is on the wooden seats: From a6d6f4685a2502fcd968db0c65b767fddd79acfb Mon Sep 17 00:00:00 2001 From: Vivian <26861054+Roachbones@users.noreply.github.com> Date: Sun, 3 Dec 2023 21:12:34 -0600 Subject: [PATCH 080/138] Anagram shred to herds, not a herd --- .../Counterfeit Monkey/Safety Overrides and Disasters.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Safety Overrides and Disasters.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Safety Overrides and Disasters.i7x index 31f75c27..56e762b4 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Safety Overrides and Disasters.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Safety Overrides and Disasters.i7x @@ -185,7 +185,7 @@ Unfortunately, the revel is more than big enough to bury [us] under its bulk."; abide by the game-ending rule. Check shooting the shred with the loaded anagramming gun: - say "The gun fires ruggedly into the shred, which shatters and then reforms as a herd. Cows, goats, and sheep, all mingled together and furious to be thus manifested without a shepherd. + say "The gun fires ruggedly into the shred, which shatters and then reforms as some herds. Cows, goats, and sheep, all mingled together and furious to be thus manifested without a shepherd. Something spooks the herds [--] not surprising, as there is scarcely enough room here for them to move. The cows try to go one direction, the goats another, and [we] [are] dragged underhoof."; end the story saying "That was unwise"; From 423bb3e4e2eb10f9bc184896e5163af8666acf12 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 4 Dec 2023 04:13:23 +0100 Subject: [PATCH 081/138] Revert "Update Subcommands by Daniel Stelzer" This reverts commit 4a844e7dd5db92c03a79043c79da9664a887952a. --- .../Extensions/Daniel Stelzer/Subcommands.i7x | 892 ++++++++---------- 1 file changed, 397 insertions(+), 495 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x index b4055667..dee3400e 100644 --- a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x +++ b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x @@ -1,11 +1,7 @@ -Version 2/221104 of Subcommands by Daniel Stelzer begins here. +Subcommands by Daniel Stelzer begins here. "Exposes the snippets referring to each noun." -"incorporating fixes from Vince Laviano" - -Chapter - Globals - An object has a snippet called the subcommand. The subcommand property translates into I6 as "parsed_snippet". Include (- @@ -13,140 +9,88 @@ Property parsed_snippet; Constant EmptySnippet = 100; -) after "Definitions.i6t". -Chapter - NounDomain - -[In the header of NounDomain, add `snip` as a local variable] - -[In NounDomain (Parser.i6t), after the line wn = match_from+match_length;] -[ - ! === NEW === - if (match_length == 0) { - snip = EmptySnippet; - } else { - snip = 100 * match_from + match_length; - } - ! === END === -] - -[In NounDomain, before the line return i;] -[ - ! === NEW === - i.parsed_snippet = snip; - ! === END === -] - -[In NounDomain, within the loop for (j=0 : jj).parsed_snippet = snip; - ! === END === -] -[After that loop] -[ - ! === NEW === - (match_list-->(number_matched-1)).parsed_snippet = snip; - ! === END === -] - -[Before the line if (dont_infer) return i;] -[ - ! === NEW === - i.parsed_snippet = snip; - ! === END === -] - -[Before the line return match_list-->0;] -[ - ! === NEW === - (match_list-->0).parsed_snippet = snip; - ! === END === -] - Include (- [ NounDomain domain1 domain2 context dont_ask first_word i j k l answer_words marker snip; - #Ifdef DEBUG; - if (parser_trace >= 4) { - print " [NounDomain called at word ", wn, "^"; - print " "; - if (indef_mode) { - print "seeking indefinite object: "; - if (indef_type & OTHER_BIT) print "other "; - if (indef_type & MY_BIT) print "my "; - if (indef_type & THAT_BIT) print "that "; - if (indef_type & PLURAL_BIT) print "plural "; - if (indef_type & LIT_BIT) print "lit "; - if (indef_type & UNLIT_BIT) print "unlit "; - if (indef_owner ~= 0) print "owner:", (name) indef_owner; - new_line; - print " number wanted: "; - if (indef_wanted == INDEF_ALL_WANTED) print "all"; else print indef_wanted; - new_line; - print " most likely GNAs of names: ", indef_cases, "^"; - } - else print "seeking definite object^"; - } - #Endif; ! DEBUG - - match_length = 0; number_matched = 0; match_from = wn; - - SearchScope(domain1, domain2, context); - - #Ifdef DEBUG; - if (parser_trace >= 4) print " [ND made ", number_matched, " matches]^"; - #Endif; ! DEBUG - - wn = match_from+match_length; - - ! === NEW === - if (match_length == 0) { - snip = EmptySnippet; - } else { - snip = 100 * match_from + match_length; - } - ! === END === - - ! If nothing worked at all, leave with the word marker skipped past the - ! first unmatched word... - - if (number_matched == 0) { wn++; rfalse; } - - ! Suppose that there really were some words being parsed (i.e., we did - ! not just infer). If so, and if there was only one match, it must be - ! right and we return it... - - if (match_from <= num_words) { - if (number_matched == 1) { - i=match_list-->0; - - ! === NEW === - i.parsed_snippet = snip; - ! === END === - - return i; - } - - ! ...now suppose that there was more typing to come, i.e. suppose that - ! the user entered something beyond this noun. If nothing ought to follow, - ! then there must be a mistake, (unless what does follow is just a full - ! stop, and or comma) - - if (wn <= num_words) { - i = NextWord(); wn--; - if (i ~= AND1__WD or AND2__WD or AND3__WD or comma_word - or THEN1__WD or THEN2__WD or THEN3__WD - or BUT1__WD or BUT2__WD or BUT3__WD) { - if (lookahead == ENDIT_TOKEN) rfalse; - } - } - } - - ! Now look for a good choice, if there's more than one choice... - - number_of_classes = 0; - - if (number_matched == 1) { - i = match_list-->0; + #Ifdef DEBUG; + if (parser_trace >= 4) { + print " [NounDomain called at word ", wn, "^"; + print " "; + if (indef_mode) { + print "seeking indefinite object: "; + if (indef_type & OTHER_BIT) print "other "; + if (indef_type & MY_BIT) print "my "; + if (indef_type & THAT_BIT) print "that "; + if (indef_type & PLURAL_BIT) print "plural "; + if (indef_type & LIT_BIT) print "lit "; + if (indef_type & UNLIT_BIT) print "unlit "; + if (indef_owner ~= 0) print "owner:", (name) indef_owner; + new_line; + print " number wanted: "; + if (indef_wanted == INDEF_ALL_WANTED) print "all"; else print indef_wanted; + new_line; + print " most likely GNAs of names: ", indef_cases, "^"; + } + else print "seeking definite object^"; + } + #Endif; ! DEBUG + + match_length = 0; number_matched = 0; match_from = wn; + + SearchScope(domain1, domain2, context); + + #Ifdef DEBUG; + if (parser_trace >= 4) print " [ND made ", number_matched, " matches]^"; + #Endif; ! DEBUG + + wn = match_from+match_length; + ! === NEW === + if (match_length == 0) { + snip = EmptySnippet; + } else { + snip = 100 * match_from + match_length; + } + ! === END === + + ! If nothing worked at all, leave with the word marker skipped past the + ! first unmatched word... + + if (number_matched == 0) { wn++; rfalse; } + + ! Suppose that there really were some words being parsed (i.e., we did + ! not just infer). If so, and if there was only one match, it must be + ! right and we return it... + + if (match_from <= num_words) { + if (number_matched == 1) { + i=match_list-->0; + ! === NEW === + i.parsed_snippet = snip; + ! === END === + return i; + } + + ! ...now suppose that there was more typing to come, i.e. suppose that + ! the user entered something beyond this noun. If nothing ought to follow, + ! then there must be a mistake, (unless what does follow is just a full + ! stop, and or comma) + + if (wn <= num_words) { + i = NextWord(); wn--; + if (i ~= AND1__WD or AND2__WD or AND3__WD or comma_word + or THEN1__WD or THEN2__WD or THEN3__WD + or BUT1__WD or BUT2__WD or BUT3__WD) { + if (lookahead == ENDIT_TOKEN) rfalse; + } + } + } + + ! Now look for a good choice, if there's more than one choice... + + number_of_classes = 0; + + if (number_matched == 1) { + i = match_list-->0; if (indef_mode == 1 && indef_type & PLURAL_BIT ~= 0) { if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN or @@ -157,14 +101,13 @@ Include (- EndActivity(DECIDING_WHETHER_ALL_INC_ACT, i); } } - } - if (number_matched > 1) { + } + if (number_matched > 1) { i = true; - if (number_matched > 1){ - for (j=0 : j 1) + for (j=0 : jj, match_list-->(j+1)) == false) i = false; - ! === NEW === (match_list-->j).parsed_snippet = snip; ! === END === @@ -172,56 +115,58 @@ Include (- ! === NEW === (match_list-->(number_matched-1)).parsed_snippet = snip; ! === END === - } if (i) dont_infer = true; - i = Adjudicate(context); - if (i == -1) rfalse; - if (i == 1) rtrue; ! Adjudicate has made a multiple - ! object, and we pass it on - } - - ! If i is non-zero here, one of two things is happening: either - ! (a) an inference has been successfully made that object i is - ! the intended one from the user's specification, or - ! (b) the user finished typing some time ago, but we've decided - ! on i because it's the only possible choice. - ! In either case we have to keep the pattern up to date, - ! note that an inference has been made and return. - ! (Except, we don't note which of a pile of identical objects.) - - if (i ~= 0) { - ! === NEW === + i = Adjudicate(context); + if (i == -1) rfalse; + if (i == 1) rtrue; ! Adjudicate has made a multiple + ! object, and we pass it on + } + + ! If i is non-zero here, one of two things is happening: either + ! (a) an inference has been successfully made that object i is + ! the intended one from the user's specification, or + ! (b) the user finished typing some time ago, but we've decided + ! on i because it's the only possible choice. + ! In either case we have to keep the pattern up to date, + ! note that an inference has been made and return. + ! (Except, we don't note which of a pile of identical objects.) + + if (i ~= 0) { + ! === NEW === i.parsed_snippet = snip; ! === END === + if (dont_infer) return i; + if (inferfrom == 0) inferfrom=pcount; + pattern-->pcount = i; + return i; + } - if (dont_infer) return i; - if (inferfrom == 0) inferfrom=pcount; - pattern-->pcount = i; - return i; - } - - if (dont_ask){ + if (dont_ask) { ! === NEW === - (match_list-->0).parsed_snippet = snip; + if (match_length == 0) { + (match_list-->0).parsed_snippet = EmptySnippet; + } else { + (match_list-->0).parsed_snippet = 100 * match_from + match_length; + } ! === END === return match_list-->0; } + + ! If we get here, there was no obvious choice of object to make. If in + ! fact we've already gone past the end of the player's typing (which + ! means the match list must contain every object in scope, regardless + ! of its name), then it's foolish to give an enormous list to choose + ! from - instead we go and ask a more suitable question... - ! If we get here, there was no obvious choice of object to make. If in - ! fact we've already gone past the end of the player's typing (which - ! means the match list must contain every object in scope, regardless - ! of its name), then it's foolish to give an enormous list to choose - ! from - instead we go and ask a more suitable question... - - if (match_from > num_words) jump Incomplete; + if (match_from > num_words) jump Incomplete; - ! Now we print up the question, using the equivalence classes as worked - ! out by Adjudicate() so as not to repeat ourselves on plural objects... + ! Now we print up the question, using the equivalence classes as worked + ! out by Adjudicate() so as not to repeat ourselves on plural objects... BeginActivity(ASKING_WHICH_DO_YOU_MEAN_ACT); if (ForActivity(ASKING_WHICH_DO_YOU_MEAN_ACT)) jump SkipWhichQuestion; j = 1; marker = 0; - for (i=1 : i<=number_of_classes : i++) { + for (i=1 : i<=number_of_classes : i++ ) { while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; if (match_list-->marker hasnt animate) j = 0; @@ -229,282 +174,266 @@ Include (- if (j) PARSER_CLARIF_INTERNAL_RM('A'); else PARSER_CLARIF_INTERNAL_RM('B'); - j = number_of_classes; marker = 0; - for (i=1 : i<=number_of_classes : i++) { - while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; - k = match_list-->marker; + j = number_of_classes; marker = 0; + for (i=1 : i<=number_of_classes : i++ ) { + while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; + k = match_list-->marker; - if (match_classes-->marker > 0) print (the) k; else print (a) k; + if (match_classes-->marker > 0) print (the) k; else print (a) k; - if (i < j-1) print ", "; - if (i == j-1) { + if (i < j-1) print ", "; + if (i == j-1) { #Ifdef SERIAL_COMMA; if (j ~= 2) print ","; - #Endif; ! SERIAL_COMMA - PARSER_CLARIF_INTERNAL_RM('H'); - } - } - print "?^"; + #Endif; ! SERIAL_COMMA + PARSER_CLARIF_INTERNAL_RM('H'); + } + } + print "?^"; .SkipWhichQuestion; EndActivity(ASKING_WHICH_DO_YOU_MEAN_ACT); - ! ...and get an answer: + ! ...and get an answer: .WhichOne; - #Ifdef TARGET_ZCODE; - for (i=2 : ii = ' '; - #Endif; ! TARGET_ZCODE - answer_words=Keyboard(buffer2, parse2); - - ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. - first_word = (parse2-->1); - - ! Take care of "all", because that does something too clever here to do - ! later on: - - if (first_word == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { - if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { - l = multiple_object-->0; - for (i=0 : ii; - multiple_object-->(i+1+l) = k; - } - multiple_object-->0 = i+l; - rtrue; - } - PARSER_CLARIF_INTERNAL_RM('C'); - jump WhichOne; - } + #Ifdef TARGET_ZCODE; + for (i=2 : ii = ' '; + #Endif; ! TARGET_ZCODE + answer_words=Keyboard(buffer2, parse2); + + ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. + first_word = (parse2-->1); + + ! Take care of "all", because that does something too clever here to do + ! later on: + + if (first_word == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { + if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { + l = multiple_object-->0; + for (i=0 : ii; + multiple_object-->(i+1+l) = k; + } + multiple_object-->0 = i+l; + rtrue; + } + PARSER_CLARIF_INTERNAL_RM('C'); + jump WhichOne; + } ! Look for a comma, and interpret this as a fresh conversation command ! if so: - for (i=1 : i<=answer_words : i++) + for (i=1 : i<=answer_words : i++ ) if (WordFrom(i, parse2) == comma_word) { - VM_CopyBuffer(buffer, buffer2); - jump RECONSTRUCT_INPUT; + VM_CopyBuffer(buffer, buffer2); + jump RECONSTRUCT_INPUT; } - ! If the first word of the reply can be interpreted as a verb, then - ! assume that the player has ignored the question and given a new - ! command altogether. - ! (This is one time when it's convenient that the directions are - ! not themselves verbs - thus, "north" as a reply to "Which, the north - ! or south door" is not treated as a fresh command but as an answer.) - - #Ifdef LanguageIsVerb; - if (first_word == 0) { - j = wn; first_word = LanguageIsVerb(buffer2, parse2, 1); wn = j; - } - #Endif; ! LanguageIsVerb - if (first_word ~= 0) { - j = first_word->#dict_par1; - if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { - VM_CopyBuffer(buffer, buffer2); - jump RECONSTRUCT_INPUT; - } - } - - ! Now we insert the answer into the original typed command, as - ! words additionally describing the same object - ! (eg, > take red button - ! Which one, ... - ! > music - ! becomes "take music red button". The parser will thus have three - ! words to work from next time, not two.) - - #Ifdef TARGET_ZCODE; - k = WordAddress(match_from) - buffer; l=buffer2->1+1; - for (j=buffer + buffer->0 - 1 : j>=buffer+k+l : j-- ) j->0 = 0->(j-l); - for (i=0 : i(k+i) = buffer2->(2+i); - buffer->(k+l-1) = ' '; - buffer->1 = buffer->1 + l; - if (buffer->1 >= (buffer->0 - 1)) buffer->1 = buffer->0; - #Ifnot; ! TARGET_GLULX - k = WordAddress(match_from) - buffer; - l = (buffer2-->0) + 1; - for (j=buffer+INPUT_BUFFER_LEN-1 : j>=buffer+k+l : j-- ) j->0 = j->(-l); - for (i=0 : i(k+i) = buffer2->(WORDSIZE+i); - buffer->(k+l-1) = ' '; - buffer-->0 = buffer-->0 + l; - if (buffer-->0 > (INPUT_BUFFER_LEN-WORDSIZE)) buffer-->0 = (INPUT_BUFFER_LEN-WORDSIZE); - #Endif; ! TARGET_ - - ! Having reconstructed the input, we warn the parser accordingly - ! and get out. + ! If the first word of the reply can be interpreted as a verb, then + ! assume that the player has ignored the question and given a new + ! command altogether. + ! (This is one time when it's convenient that the directions are + ! not themselves verbs - thus, "north" as a reply to "Which, the north + ! or south door" is not treated as a fresh command but as an answer.) + + #Ifdef LanguageIsVerb; + if (first_word == 0) { + j = wn; first_word = LanguageIsVerb(buffer2, parse2, 1); wn = j; + } + #Endif; ! LanguageIsVerb + if (first_word ~= 0) { + j = first_word->#dict_par1; + if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { + VM_CopyBuffer(buffer, buffer2); + jump RECONSTRUCT_INPUT; + } + } + + ! Now we insert the answer into the original typed command, as + ! words additionally describing the same object + ! (eg, > take red button + ! Which one, ... + ! > music + ! becomes "take music red button". The parser will thus have three + ! words to work from next time, not two.) + + #Ifdef TARGET_ZCODE; + k = WordAddress(match_from) - buffer; l=buffer2->1+1; + for (j=buffer + buffer->0 - 1 : j>=buffer+k+l : j-- ) j->0 = 0->(j-l); + for (i=0 : i(k+i) = buffer2->(2+i); + buffer->(k+l-1) = ' '; + buffer->1 = buffer->1 + l; + if (buffer->1 >= (buffer->0 - 1)) buffer->1 = buffer->0; + #Ifnot; ! TARGET_GLULX + k = WordAddress(match_from) - buffer; + l = (buffer2-->0) + 1; + for (j=buffer+INPUT_BUFFER_LEN-1 : j>=buffer+k+l : j-- ) j->0 = j->(-l); + for (i=0 : i(k+i) = buffer2->(WORDSIZE+i); + buffer->(k+l-1) = ' '; + buffer-->0 = buffer-->0 + l; + if (buffer-->0 > (INPUT_BUFFER_LEN-WORDSIZE)) buffer-->0 = (INPUT_BUFFER_LEN-WORDSIZE); + #Endif; ! TARGET_ + + ! Having reconstructed the input, we warn the parser accordingly + ! and get out. .RECONSTRUCT_INPUT; num_words = WordCount(); players_command = 100 + num_words; - wn = 1; - #Ifdef LanguageToInformese; - LanguageToInformese(); - ! Re-tokenise: - VM_Tokenise(buffer,parse); - #Endif; ! LanguageToInformese + wn = 1; + #Ifdef LanguageToInformese; + LanguageToInformese(); + ! Re-tokenise: + VM_Tokenise(buffer,parse); + #Endif; ! LanguageToInformese num_words = WordCount(); players_command = 100 + num_words; - actors_location = ScopeCeiling(player); + actors_location = ScopeCeiling(player); FollowRulebook(Activity_after_rulebooks-->READING_A_COMMAND_ACT); - return REPARSE_CODE; + return REPARSE_CODE; - ! Now we come to the question asked when the input has run out - ! and can't easily be guessed (eg, the player typed "take" and there - ! were plenty of things which might have been meant). + ! Now we come to the question asked when the input has run out + ! and can't easily be guessed (eg, the player typed "take" and there + ! were plenty of things which might have been meant). .Incomplete; - if (context == CREATURE_TOKEN) PARSER_CLARIF_INTERNAL_RM('D', actor); - else PARSER_CLARIF_INTERNAL_RM('E', actor); - new_line; + if (context == CREATURE_TOKEN) PARSER_CLARIF_INTERNAL_RM('D', actor); + else PARSER_CLARIF_INTERNAL_RM('E', actor); + new_line; - #Ifdef TARGET_ZCODE; - for (i=2 : ii=' '; - #Endif; ! TARGET_ZCODE - answer_words = Keyboard(buffer2, parse2); + #Ifdef TARGET_ZCODE; + for (i=2 : ii=' '; + #Endif; ! TARGET_ZCODE + answer_words = Keyboard(buffer2, parse2); ! Look for a comma, and interpret this as a fresh conversation command ! if so: - for (i=1 : i<=answer_words : i++) + for (i=1 : i<=answer_words : i++ ) if (WordFrom(i, parse2) == comma_word) { VM_CopyBuffer(buffer, buffer2); jump RECONSTRUCT_INPUT; } - first_word=(parse2-->1); - #Ifdef LanguageIsVerb; - if (first_word==0) { - j = wn; first_word=LanguageIsVerb(buffer2, parse2, 1); wn = j; - } - #Endif; ! LanguageIsVerb - - ! Once again, if the reply looks like a command, give it to the - ! parser to get on with and forget about the question... - - if (first_word ~= 0) { - j = first_word->#dict_par1; - if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { - VM_CopyBuffer(buffer, buffer2); - jump RECONSTRUCT_INPUT; - } - } - - ! ...but if we have a genuine answer, then: - ! - ! (1) we must glue in text suitable for anything that's been inferred. - - if (inferfrom ~= 0) { - for (j=inferfrom : jj == PATTERN_NULL) continue; - #Ifdef TARGET_ZCODE; - i = 2+buffer->1; (buffer->1)++; buffer->(i++) = ' '; - #Ifnot; ! TARGET_GLULX - i = WORDSIZE + buffer-->0; - (buffer-->0)++; buffer->(i++) = ' '; - #Endif; ! TARGET_ - - #Ifdef DEBUG; - if (parser_trace >= 5) - print "[Gluing in inference with pattern code ", pattern-->j, "]^"; - #Endif; ! DEBUG - - ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. - - parse2-->1 = 0; - - ! An inferred object. Best we can do is glue in a pronoun. - ! (This is imperfect, but it's very seldom needed anyway.) - - if (pattern-->j >= 2 && pattern-->j < REPARSE_CODE) { - PronounNotice(pattern-->j); - for (k=1 : k<=LanguagePronouns-->0 : k=k+3) - if (pattern-->j == LanguagePronouns-->(k+2)) { - parse2-->1 = LanguagePronouns-->k; - #Ifdef DEBUG; - if (parser_trace >= 5) - print "[Using pronoun '", (address) parse2-->1, "']^"; - #Endif; ! DEBUG - break; - } - } - else { - ! An inferred preposition. - parse2-->1 = VM_NumberToDictionaryAddress(pattern-->j - REPARSE_CODE); - #Ifdef DEBUG; - if (parser_trace >= 5) - print "[Using preposition '", (address) parse2-->1, "']^"; - #Endif; ! DEBUG - } - - ! parse2-->1 now holds the dictionary address of the word to glue in. - - if (parse2-->1 ~= 0) { - k = buffer + i; - #Ifdef TARGET_ZCODE; - @output_stream 3 k; - print (address) parse2-->1; - @output_stream -3; - k = k-->0; - for (l=i : ll = buffer->(l+2); - i = i + k; buffer->1 = i-2; - #Ifnot; ! TARGET_GLULX - k = Glulx_PrintAnyToArray(buffer+i, INPUT_BUFFER_LEN-i, parse2-->1); - i = i + k; buffer-->0 = i - WORDSIZE; - #Endif; ! TARGET_ - } - } - } - - ! (2) we must glue the newly-typed text onto the end. - - #Ifdef TARGET_ZCODE; - i = 2+buffer->1; (buffer->1)++; buffer->(i++) = ' '; - for (j=0 : j1 : i++,j++) { - buffer->i = buffer2->(j+2); - (buffer->1)++; - if (buffer->1 == INPUT_BUFFER_LEN) break; - } - #Ifnot; ! TARGET_GLULX - i = WORDSIZE + buffer-->0; - (buffer-->0)++; buffer->(i++) = ' '; - for (j=0 : j0 : i++,j++) { - buffer->i = buffer2->(j+WORDSIZE); - (buffer-->0)++; - if (buffer-->0 == INPUT_BUFFER_LEN) break; - } - #Endif; ! TARGET_ - - ! (3) we fill up the buffer with spaces, which is unnecessary, but may - ! help incorrectly-written interpreters to cope. - - #Ifdef TARGET_ZCODE; - for (: ii = ' '; - #Endif; ! TARGET_ZCODE - - jump RECONSTRUCT_INPUT; + first_word=(parse2-->1); + #Ifdef LanguageIsVerb; + if (first_word==0) { + j = wn; first_word=LanguageIsVerb(buffer2, parse2, 1); wn = j; + } + #Endif; ! LanguageIsVerb + + ! Once again, if the reply looks like a command, give it to the + ! parser to get on with and forget about the question... + + if (first_word ~= 0) { + j = first_word->#dict_par1; + if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { + VM_CopyBuffer(buffer, buffer2); + jump RECONSTRUCT_INPUT; + } + } + + ! ...but if we have a genuine answer, then: + ! + ! (1) we must glue in text suitable for anything that's been inferred. + + if (inferfrom ~= 0) { + for (j=inferfrom : jj == PATTERN_NULL) continue; + #Ifdef TARGET_ZCODE; + i = 2+buffer->1; (buffer->1)++; buffer->( i++ ) = ' '; + #Ifnot; ! TARGET_GLULX + i = WORDSIZE + buffer-->0; + (buffer-->0)++; buffer->( i++ ) = ' '; + #Endif; ! TARGET_ + + #Ifdef DEBUG; + if (parser_trace >= 5) + print "[Gluing in inference with pattern code ", pattern-->j, "]^"; + #Endif; ! DEBUG + + ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. + + parse2-->1 = 0; + + ! An inferred object. Best we can do is glue in a pronoun. + ! (This is imperfect, but it's very seldom needed anyway.) + + if (pattern-->j >= 2 && pattern-->j < REPARSE_CODE) { + PronounNotice(pattern-->j); + for (k=1 : k<=LanguagePronouns-->0 : k=k+3) + if (pattern-->j == LanguagePronouns-->(k+2)) { + parse2-->1 = LanguagePronouns-->k; + #Ifdef DEBUG; + if (parser_trace >= 5) + print "[Using pronoun '", (address) parse2-->1, "']^"; + #Endif; ! DEBUG + break; + } + } + else { + ! An inferred preposition. + parse2-->1 = VM_NumberToDictionaryAddress(pattern-->j - REPARSE_CODE); + #Ifdef DEBUG; + if (parser_trace >= 5) + print "[Using preposition '", (address) parse2-->1, "']^"; + #Endif; ! DEBUG + } + + ! parse2-->1 now holds the dictionary address of the word to glue in. + + if (parse2-->1 ~= 0) { + k = buffer + i; + #Ifdef TARGET_ZCODE; + @output_stream 3 k; + print (address) parse2-->1; + @output_stream -3; + k = k-->0; + for (l=i : ll = buffer->(l+2); + i = i + k; buffer->1 = i-2; + #Ifnot; ! TARGET_GLULX + k = Glulx_PrintAnyToArray(buffer+i, INPUT_BUFFER_LEN-i, parse2-->1); + i = i + k; buffer-->0 = i - WORDSIZE; + #Endif; ! TARGET_ + } + } + } + + ! (2) we must glue the newly-typed text onto the end. + + #Ifdef TARGET_ZCODE; + i = 2+buffer->1; (buffer->1)++; buffer->( i++ ) = ' '; + for (j=0 : j1 : i++,j++ ) { + buffer->i = buffer2->(j+2); + (buffer->1)++; + if (buffer->1 == INPUT_BUFFER_LEN) break; + } + #Ifnot; ! TARGET_GLULX + i = WORDSIZE + buffer-->0; + (buffer-->0)++; buffer->( i++ ) = ' '; + for (j=0 : j0 : i++,j++ ) { + buffer->i = buffer2->(j+WORDSIZE); + (buffer-->0)++; + if (buffer-->0 == INPUT_BUFFER_LEN) break; + } + #Endif; ! TARGET_ + + ! (3) we fill up the buffer with spaces, which is unnecessary, but may + ! help incorrectly-written interpreters to cope. + + #Ifdef TARGET_ZCODE; + for (: ii = ' '; + #Endif; ! TARGET_ZCODE + + jump RECONSTRUCT_INPUT; ]; ! end of NounDomain [ PARSER_CLARIF_INTERNAL_R; ]; -) instead of "Noun Domain" in "Parser.i6t". -Chapter - ActionVariablesNotTypeSafe - -[In ActionVariablesNotTypeSafe (Actions.i6t), at the end of the block that calls SUPPLYING_A_MISSING_NOUN_ACT] -[ - ! === NEW === - noun.parsed_snippet = EmptySnippet; - ! === END === -] - -[In ActionVariablesNotTypeSafe (Actions.i6t), at the end of the block that calls SUPPLYING_A_MISSING_SECOND_ACT] -[ - ! === NEW === - second.parsed_snippet = EmptySnippet; - ! === END === -] - Include (- [ ActionVariablesNotTypeSafe mask noun_kova second_kova at; at = FindAction(-1); if (at == 0) rfalse; ! For any I6-defined actions @@ -519,13 +448,13 @@ Include (- !print "sst = ", second_kova, "^"; if (noun_kova == SNIPPET_TY or UNDERSTANDING_TY) { - if (inp1 ~= 1) { inp2 = inp1; second = noun; } - parsed_number = 100*consult_from + consult_words; - inp1 = 1; noun = nothing; ! noun = parsed_number; + if (inp1 ~= 1) { inp2 = inp1; second = noun; } + parsed_number = 100*consult_from + consult_words; + inp1 = 1; noun = nothing; ! noun = parsed_number; } if (second_kova == SNIPPET_TY or UNDERSTANDING_TY) { - parsed_number = 100*consult_from + consult_words; - inp2 = 1; second = nothing; ! second = parsed_number; + parsed_number = 100*consult_from + consult_words; + inp2 = 1; second = nothing; ! second = parsed_number; } mask = ActionData-->(at+AD_REQUIREMENTS); @@ -533,87 +462,67 @@ Include (- meta = 0; if (inp1 == 1) { - if (noun_kova == OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('B'); new_line; } - rtrue; - } + if (noun_kova == OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('B'); new_line; } + rtrue; + } } else { - if (noun_kova ~= OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('C'); new_line; } - rtrue; - } - if ((mask & NEED_NOUN_ABIT) && (noun == nothing)) { - @push act_requester; act_requester = nothing; - CarryOutActivity(SUPPLYING_A_MISSING_NOUN_ACT); - @pull act_requester; - - ! === NEW === - noun.parsed_snippet = EmptySnippet; - ! === END === - - if (noun == nothing) { - if (say__p) rtrue; - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('D'); new_line; } - rtrue; - } - } - if (((mask & NEED_NOUN_ABIT) == 0) && (noun ~= nothing)) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('E'); new_line; } - rtrue; - } + if (noun_kova ~= OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('C'); new_line; } + rtrue; + } + if ((mask & NEED_NOUN_ABIT) && (noun == nothing)) { + @push act_requester; act_requester = nothing; + CarryOutActivity(SUPPLYING_A_MISSING_NOUN_ACT); + @pull act_requester; + if (noun == nothing) { + if (say__p) rtrue; + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('D'); new_line; } + rtrue; + } + ! === NEW === + noun.parsed_snippet = EmptySnippet; + ! === END === + } + if (((mask & NEED_NOUN_ABIT) == 0) && (noun ~= nothing)) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('E'); new_line; } + rtrue; + } } if (inp2 == 1) { - if (second_kova == OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('F'); new_line; } - rtrue; - } + if (second_kova == OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('F'); new_line; } + rtrue; + } } else { - if (second_kova ~= OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('G'); new_line; } - rtrue; - } - if ((mask & NEED_SECOND_ABIT) && (second == nothing)) { - @push act_requester; act_requester = nothing; - CarryOutActivity(SUPPLYING_A_MISSING_SECOND_ACT); - @pull act_requester; - - ! === NEW === - second.parsed_snippet = EmptySnippet; - ! === END === - - if (second == nothing) { - if (say__p) rtrue; - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('H'); new_line; } - rtrue; - } - } - if (((mask & NEED_SECOND_ABIT) == 0) && (second ~= nothing)) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('I'); new_line; } - rtrue; - } + if (second_kova ~= OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('G'); new_line; } + rtrue; + } + if ((mask & NEED_SECOND_ABIT) && (second == nothing)) { + @push act_requester; act_requester = nothing; + CarryOutActivity(SUPPLYING_A_MISSING_SECOND_ACT); + @pull act_requester; + if (second == nothing) { + if (say__p) rtrue; + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('H'); new_line; } + rtrue; + } + ! === NEW === + second.parsed_snippet = EmptySnippet; + ! === END === + } + if (((mask & NEED_SECOND_ABIT) == 0) && (second ~= nothing)) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('I'); new_line; } + rtrue; + } } rfalse; ]; -) instead of "Type Safety" in "Actions.i6t". -Chapter - VerbSubcommand - -To decide what snippet is the/-- subcommand of the/-- verb: (- VerbSubcommand() -). - -Include (- -[ VerbSubcommand i; - if(verb_wordnum == 0) return EmptySnippet; - for(i=1 : ii) < REPARSE_CODE){ - break; - } - } - return verb_wordnum*100 + i; -]; --). - Subcommands ends here. ---- DOCUMENTATION ---- @@ -624,22 +533,16 @@ This extension exposes the snippet which refers to each individual object, as it If the player types "take the wand", referring to the black rod with a rusty star on the end, then the subcommand of the rod is "wand". This can be useful in disambiguation, or in adapting a description to use the player's phrasing. -As of version 2, it now also provides the subcommand of the verb: - - the subcommand of the verb -> snippet - -This provides all the literal text at the beginning of the grammar line: in I6 terms, the verb and all following prepositions. - Example: ** Subcommand Laboratory - A simple demonstration of how subcommands affect the parser. -Include Subcommands 6M62 by Daniel Stelzer. +Include Subcommands by Daniel Stelzer. -Every turn: - say "Verb subcommand: [the subcommand of the verb]."; +Before doing anything: if the noun is not nothing: say "Noun subcommand: [the subcommand of the noun]."; if the second noun is not nothing: say "Second noun subcommand: [the subcommand of the second noun]."; + continue the action. The Laboratory is a room. A red apple, a green apple, a red pear, and a green pear are in the Laboratory. A shiny wooden box is a container in the Laboratory. It is closed and locked. The player carries a silver metal key. @@ -649,4 +552,3 @@ Does the player mean taking the green apple when the subcommand of the green app Test fruit with "get red / drop it / get apple / get pear". Test box with "unlock the shiny wooden box with the silver key". -Test verbs with "x me / look at me / throw box at me". From 1b344a590b077e6c62fcaaf6843797c31d4d61c2 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 4 Dec 2023 04:40:08 +0100 Subject: [PATCH 082/138] Keep the definite article here --- .../Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index cdabb6af..5679053b 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -64,7 +64,7 @@ aquarium-exterior is a facade in Deep Street. It fronts east. The printed name i The description is "[if Aquarium is visited]The outside manages to give an impression of poverty, gloom, and probable drug use; though, having seen the inside, I am going to guess that the real issues are sloth and kookiness[otherwise]I've never been inside the Aquarium: the outside never looked terribly savory. Perhaps that's the point[end if]." Rule for writing a topic sentence about aquarium-exterior when aquarium-exterior is not as-yet-unknown: - say "[The Aquarium] is to the east. [if aquarium-closed-sign is in location]There's a closed sign in the window and a forbidding atmosphere[otherwise]It's dim inside, but occasional movements suggest that the proprietor, Slango's friend Lena, is inside[end if]. " + say "[if boldening is true][bold type][end if]The Aquarium Bookstore[roman type] is to the east. [if aquarium-closed-sign is in location]There's a closed sign in the window and a forbidding atmosphere[otherwise]It's dim inside, but occasional movements suggest that the proprietor, Slango's friend Lena, is inside[end if]. " A ranking rule when aquarium-exterior is not as-yet-unknown and Aquarium is visited and a car (called target) is in the location: increase description-rank of the target by 20. From dfdc0ff2e7e2a3478f7302f9be3923b1da35f46a Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 4 Dec 2023 04:41:19 +0100 Subject: [PATCH 083/138] Update regtests --- tools/regtest/CM-regtest | 4 ++-- tools/regtest/CM-regtest-hard | 4 ++-- tools/regtest/CM-regtest-tests | 40 +++++++++++++++++----------------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/tools/regtest/CM-regtest b/tools/regtest/CM-regtest index e4d0bf1f..c681496e 100644 --- a/tools/regtest/CM-regtest +++ b/tools/regtest/CM-regtest @@ -2944,7 +2944,7 @@ We reset the device to y. The sticky gives way to the now-familiar stick. The snapping continues. > go to tall street -/(We |We have a (brief|quick|short) |We make the( brief| quick| short)? |It's a( brief| quick| short)? )(walk|hike) (over to|as far as|to) University Oval. +/(We |We have a (brief|quick|short) |We make the( brief| quick| short)? |It's a( brief| quick| short)? )(walk|hike) (over to|as far as|to) the University Oval. University Oval This is the center of the university, a broad grassy oval shaded with sycamore trees and surrounded by buildings in brick or white stone. @@ -4254,7 +4254,7 @@ A set of children's playing jacks. They are lined up, with curious precision, in /I reset the device to s. There is a [a-z \-]+, and the jacks turn into a jack. A heavy-duty jack, suitable for raising cars or other substantial objects. > go to workshop -/(It's a |I (make the ))?(short |quick |brief |)(walk|hike) (over to|as far as|to) Personal Apartment. There I try propping the portcullis with the jack. +/(It's a |I (make the ))?(short |quick |brief |)(walk|hike) (over to|as far as|to) the Personal Apartment. There I try propping the portcullis with the jack. /(Then|Next|After that|From there) (I |I have a (brief|quick|short) |I make the( brief| quick| short)? |it's a( brief| quick| short)? )(walk|hike). diff --git a/tools/regtest/CM-regtest-hard b/tools/regtest/CM-regtest-hard index a0fed498..12bd5557 100644 --- a/tools/regtest/CM-regtest-hard +++ b/tools/regtest/CM-regtest-hard @@ -2234,7 +2234,7 @@ We already have that. There is a continuous angry whine from the jigsaw. > go to tall street -/(We |We have a (brief|quick|short) |We make the( brief| quick| short)? |It's a( brief| quick| short)? )(walk|hike) (over to|as far as|to) University Oval. +/(We |We have a (brief|quick|short) |We make the( brief| quick| short)? |It's a( brief| quick| short)? )(walk|hike) (over to|as far as|to) the University Oval. University Oval This is the center of the university, a broad grassy oval shaded with sycamore trees and surrounded by buildings in brick or white stone. @@ -3436,7 +3436,7 @@ A set of children's playing jacks. They are lined up, with curious precision, in /You reset the device to s. There is a [a-z \-]+, and the jacks turn into a jack. A heavy-duty jack, suitable for raising cars or other substantial objects. > go to workshop -/(You |You have a (brief|quick|short) |You make the( brief| quick| short)? |It's a( brief| quick| short)? )(walk|hike) (over to|as far as|to) Personal Apartment. There you try propping the portcullis with the jack. +/(You |You have a (brief|quick|short) |You make the( brief| quick| short)? |It's a( brief| quick| short)? )(walk|hike) (over to|as far as|to) the Personal Apartment. There you try propping the portcullis with the jack. /(Then|Next|After that|From there) (you |you have a (brief|quick|short) |you make the( brief| quick| short)? |it's a( brief| quick| short)? )(walk|hike). diff --git a/tools/regtest/CM-regtest-tests b/tools/regtest/CM-regtest-tests index b6cbf20d..feb7e490 100644 --- a/tools/regtest/CM-regtest-tests +++ b/tools/regtest/CM-regtest-tests @@ -549,7 +549,7 @@ We are jammed into the car with our knees almost at our chin, looking out throug This road descends steeply from southwest to northwest, passing between white concrete buildings to provide access to the marina — the Fish Market, the Docks, and a bar or two. The street is in deep shadow, protected from sunlight from almost any angle by its narrowness and by the height of the walls. -The Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. +Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. We can go northwest, southwest to the Roundabout, east, and west from here. @@ -626,7 +626,7 @@ We can go north, south, southeast to Deep Street, and east to the Tin Hut from h Deep Street This road descends steeply from southwest to northwest, passing between white concrete buildings to provide access to the marina — the Fish Market, the Docks, and a bar or two. The street is in deep shadow, protected from sunlight from almost any angle by its narrowness and by the height of the walls. -The Aquarium Bookstore is to the east. It's dim inside, but occasional movements suggest that the proprietor, Slango's friend Lena, is inside. +Aquarium Bookstore is to the east. It's dim inside, but occasional movements suggest that the proprietor, Slango's friend Lena, is inside. /Our car ?(— which might better be described as a covered bicycle — )is parked nearby. @@ -1988,7 +1988,7 @@ We run some water from the sink tap over the funnel, leaving it glistening and c We run some water from the sink tap over the funnel, leaving it glistening and clean. >gonear Aquarium Bookstore -Which do you mean, 1) Aquarium Bookstore or the 2) Aquarium Bookstore? +Which do you mean, 1) Aquarium Bookstore or 2) Aquarium Bookstore? >2 Aquarium Bookstore @@ -2051,9 +2051,9 @@ Which do you mean, 1) what sort of demonstration, 2) explain about our plans, th Deep Street This road descends steeply from southwest to northwest, passing between white concrete buildings to provide access to the marina — the Fish Market, the Docks, and a bar or two. The street is in deep shadow, protected from sunlight from almost any angle by its narrowness and by the height of the walls. -The Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. +Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. -We can go northwest, southwest, east to the Aquarium Bookstore, and west from here. +We can go northwest, southwest, east to Aquarium Bookstore, and west from here. #tinhut @@ -2540,7 +2540,7 @@ It is the gooseberry fool flavor, left over from a six-pack. I always eat the st #returnbook >gonear Language Studies Seminar Room -(Language Studies Seminar Room) +(the Language Studies Seminar Room) Language Studies Seminar Room They recently redid this room, and whoever picked the decorations had postmodern tastes. @@ -2906,7 +2906,7 @@ There now: the T-inserter has constructed both steer automaton and setter automa >placefather >gonear cold storage -(Cold Storage) +(the Cold Storage) Cold Storage Shelves on both sides of the room are full of objects on stands: objects that used to be men and women, and in a few cases even children. The stand labels preserve their original names. @@ -2975,7 +2975,7 @@ Time passes. >placefather >gonear cold storage -(Cold Storage) +(the Cold Storage) Cold Storage Shelves on both sides of the room are full of objects on stands: objects that used to be men and women, and in a few cases even children. The stand labels preserve their original names. @@ -3042,7 +3042,7 @@ Time passes. >placefather >gonear cold storage -(Cold Storage) +(the Cold Storage) Cold Storage Shelves on both sides of the room are full of objects on stands: objects that used to be men and women, and in a few cases even children. The stand labels preserve their original names. @@ -5952,7 +5952,7 @@ She seems to have taken the meaning the first time. [Can't move screws: it's part of the plexiglas case.] >gonear language studies seminar room -(Language Studies Seminar Room) +(the Language Studies Seminar Room) Language Studies Seminar Room They recently redid this room, and whoever picked the decorations had postmodern tastes. @@ -8185,7 +8185,7 @@ The backpacking girl gags. After a moment to regain her composure, she flees the #shop-volunteer >gonear New Church -Which do you mean, 1) what is worth seeing in the New Church, the 2) New Church, or 3) New Church? +Which do you mean, 1) what is worth seeing in the New Church, the 2) New Church, or the 3) New Church? >3 New Church @@ -9372,7 +9372,7 @@ We could thank the bartender. #lena >gonear Aquarium Bookstore. -Which do you mean, 1) Aquarium Bookstore or the 2) Aquarium Bookstore? +Which do you mean, 1) Aquarium Bookstore or 2) Aquarium Bookstore? >2 Aquarium Bookstore @@ -9513,9 +9513,9 @@ I'd like to thank Lena. Deep Street This road descends steeply from southwest to northwest, passing between white concrete buildings to provide access to the marina — the Fish Market, the Docks, and a bar or two. The street is in deep shadow, protected from sunlight from almost any angle by its narrowness and by the height of the walls. -The Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. +Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. -We can go northwest, southwest, east to the Aquarium Bookstore, and west from here. +We can go northwest, southwest, east to Aquarium Bookstore, and west from here. >car-acquire Deep Street @@ -9525,7 +9525,7 @@ Our pathetic little car is parked right outside Aquarium Bookstore. Here is how Suffice it to say that we are not similarly blessed. -We can go northwest, southwest, east to the Aquarium Bookstore, and west from here. +We can go northwest, southwest, east to Aquarium Bookstore, and west from here. >start car We swing the car door open. @@ -9588,9 +9588,9 @@ We are jammed into the car with our knees almost at our chin, looking out throug This road descends steeply from southwest to northwest, passing between white concrete buildings to provide access to the marina — the Fish Market, the Docks, and a bar or two. The street is in deep shadow, protected from sunlight from almost any angle by its narrowness and by the height of the walls. -The Aquarium Bookstore is to the east. It's dim inside, but occasional movements suggest that the proprietor, Slango's friend Lena, is inside. +Aquarium Bookstore is to the east. It's dim inside, but occasional movements suggest that the proprietor, Slango's friend Lena, is inside. -We can go northwest, southwest to the Roundabout, east to the Aquarium Bookstore, and west from here. +We can go northwest, southwest to the Roundabout, east to Aquarium Bookstore, and west from here. The car is making an unpleasant raspy growl. @@ -11576,7 +11576,7 @@ Fused? We should be two pieces by now. Maybe she has an explanation? But you see >hit atlantida with foil Atlantida raises the rifle and fires with certain aim before the blow has a chance to land. -[gel-convert: BUG! The fossil is not in the repository. It will be moved from Crumbling Wall Face to ourselves.] +[gel-convert: BUG! The fossil is not in the repository. It will be moved from the Crumbling Wall Face to ourselves.] With an audible SPLORT, the foil becomes a fossil. Atlantida smiles with half a mouth. "You've arrived on a difficult day. In the ordinary course of things, I keep things quiet: the spirit of democracy, but none of the sordid wrangling and bribes and corruption and compromise. It's only when the spirit of the island itself is threatened, that we have to resort to such extreme measures." @@ -12199,7 +12199,7 @@ Once you've selected hard mode, you can't go back: certain puzzles with multiple Counterfeit Monkey is now in "hard" mode. Tutorials are off. The world is reconfigured against you. Good luck. >gonear language studies seminar room -(Language Studies Seminar Room) +(the Language Studies Seminar Room) Language Studies Seminar Room They recently redid this room, and whoever picked the decorations had postmodern tastes. @@ -12277,7 +12277,7 @@ A fairly natural-looking extension, red in color, attachable by comb. It should We settle the red hairpiece on our head and adjust our hair underneath. >gonear cafe -Which do you mean, 1) where the Babel Café is, 2) Outdoor Café, the 3) café building, or 4) Babel Café? +Which do you mean, 1) where the Babel Café is, the 2) Outdoor Café, the 3) café building, or 4) Babel Café? >2 Outdoor Café From 54f775383d59a9fb9a4fa40d22f95330d1fc5c51 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 4 Dec 2023 04:54:34 +0100 Subject: [PATCH 084/138] Properly fix article of bookstore --- .../Counterfeit Monkey/Act II Among Smugglers.i7x | 2 +- tools/regtest/CM-regtest-tests | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index 5679053b..340eca9d 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -60,7 +60,7 @@ A description-concealing rule: if Counterfeit Monkey is unvisited: now aquarium-exterior is not marked for listing. -aquarium-exterior is a facade in Deep Street. It fronts east. The printed name is "Aquarium Bookstore". Understand "aquarium" or "shop" or "window" or "bookstore" or "store" as aquarium-exterior. The initial appearance is "[The Aquarium] is to the east." The introduction is "It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past[if the player knows lena-needed and aquarium is not visited]. That would be Lena, the woman that [we] need to talk to about Slango[end if]." +aquarium-exterior is a facade in Deep Street. It fronts east. The printed name is "Aquarium Bookstore". Understand "aquarium" or "shop" or "window" or "bookstore" or "store" as aquarium-exterior. The initial appearance is "[if boldening is true][bold type][end if]The Aquarium Bookstore[roman type] is to the east." The introduction is "It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past[if the player knows lena-needed and aquarium is not visited]. That would be Lena, the woman that [we] need to talk to about Slango[end if]." The description is "[if Aquarium is visited]The outside manages to give an impression of poverty, gloom, and probable drug use; though, having seen the inside, I am going to guess that the real issues are sloth and kookiness[otherwise]I've never been inside the Aquarium: the outside never looked terribly savory. Perhaps that's the point[end if]." Rule for writing a topic sentence about aquarium-exterior when aquarium-exterior is not as-yet-unknown: diff --git a/tools/regtest/CM-regtest-tests b/tools/regtest/CM-regtest-tests index feb7e490..d28742d5 100644 --- a/tools/regtest/CM-regtest-tests +++ b/tools/regtest/CM-regtest-tests @@ -549,7 +549,7 @@ We are jammed into the car with our knees almost at our chin, looking out throug This road descends steeply from southwest to northwest, passing between white concrete buildings to provide access to the marina — the Fish Market, the Docks, and a bar or two. The street is in deep shadow, protected from sunlight from almost any angle by its narrowness and by the height of the walls. -Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. +The Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. We can go northwest, southwest to the Roundabout, east, and west from here. @@ -626,7 +626,7 @@ We can go north, south, southeast to Deep Street, and east to the Tin Hut from h Deep Street This road descends steeply from southwest to northwest, passing between white concrete buildings to provide access to the marina — the Fish Market, the Docks, and a bar or two. The street is in deep shadow, protected from sunlight from almost any angle by its narrowness and by the height of the walls. -Aquarium Bookstore is to the east. It's dim inside, but occasional movements suggest that the proprietor, Slango's friend Lena, is inside. +The Aquarium Bookstore is to the east. It's dim inside, but occasional movements suggest that the proprietor, Slango's friend Lena, is inside. /Our car ?(— which might better be described as a covered bicycle — )is parked nearby. @@ -2051,7 +2051,7 @@ Which do you mean, 1) what sort of demonstration, 2) explain about our plans, th Deep Street This road descends steeply from southwest to northwest, passing between white concrete buildings to provide access to the marina — the Fish Market, the Docks, and a bar or two. The street is in deep shadow, protected from sunlight from almost any angle by its narrowness and by the height of the walls. -Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. +The Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. We can go northwest, southwest, east to Aquarium Bookstore, and west from here. @@ -9513,7 +9513,7 @@ I'd like to thank Lena. Deep Street This road descends steeply from southwest to northwest, passing between white concrete buildings to provide access to the marina — the Fish Market, the Docks, and a bar or two. The street is in deep shadow, protected from sunlight from almost any angle by its narrowness and by the height of the walls. -Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. +The Aquarium Bookstore is to the east. It is an esoteric bookstore (and purveyor of other things), but one whose owner has helped you in the past. We can go northwest, southwest, east to Aquarium Bookstore, and west from here. @@ -9588,7 +9588,7 @@ We are jammed into the car with our knees almost at our chin, looking out throug This road descends steeply from southwest to northwest, passing between white concrete buildings to provide access to the marina — the Fish Market, the Docks, and a bar or two. The street is in deep shadow, protected from sunlight from almost any angle by its narrowness and by the height of the walls. -Aquarium Bookstore is to the east. It's dim inside, but occasional movements suggest that the proprietor, Slango's friend Lena, is inside. +The Aquarium Bookstore is to the east. It's dim inside, but occasional movements suggest that the proprietor, Slango's friend Lena, is inside. We can go northwest, southwest to the Roundabout, east to Aquarium Bookstore, and west from here. From a84b3787aa13a6dc317af1656214171e7e756413 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 4 Dec 2023 06:38:24 +0100 Subject: [PATCH 085/138] Fix secession year in guidebook --- .../Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x index faea4f62..3b449bc9 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x @@ -1610,7 +1610,7 @@ topic reply "bureau/rotunda" or "bureau of orthography" or "orthography" "The entry is long and greasily flattering: resplendent blue dome, magnificent interior, warm and hospitable employees, world-renowned historical research department, etc., etc., etc." "Serial Comma Day" or "holiday" "Commemorating the 1935 standard[ization] of a whole range of punctuation conventions, Serial Comma Day is one of three major patriotic holidays on Anglophone Atlantis. (See also SHAPLY DAY, SECESSION DAY.)" "Shaply Day" "Named in hon[our] of pioneering suffragette Phyllida Shaply, Shaply Day commemorates the 1877 decision to allow all citizens of Anglophone Atlantis to vote in referenda (the direct-democracy form for deciding contentious issues). This right was extended regardless of race, gender, or creed and is a source of considerable pride to Atlanteans." -"Secession Day" or "secession" "The secession of Atlantis from British governance in 1823 culminated in the reduction of the attacking British fleet on April 19. The holiday celebrates this occasion, which is considered the beginning of Atlantean self-rule." +"Secession Day" or "secession" "The secession of Atlantis from British governance in 1822 culminated in the reduction of the attacking British fleet on April 19. The holiday celebrates this occasion, which is considered the beginning of Atlantean self-rule." "cannon" or "depluralizing" or "depluralizing cannon" or "hexagonal" or "turret" or "depluralising" or "depluralising cannon" "The Guidebook explains that Atlantis['] harb[our]s were traditionally defended by the deplural[izing] cannon, using techniques discovered by Clarence Arbot in 1779. Turrets along the old city walls provided elevated positions for these cannons, allowing them considerable range. See also SECESSION, CLARENCE ARBOT." "sigil street" or "sigil" "The entry on Sigil Street proclaims it an excellent place for those seeking to commission their own fonts or indulge in other typographical expenses." "ampersand bend" or "ampersand/bend" "Ampersand Bend is notable to the guidebook chiefly for the presence of a fine museum. A little less fine now that we've been past, perhaps." From 27a7442f3561502d917b0052ee9e1865a6da132d Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 4 Dec 2023 08:32:47 +0100 Subject: [PATCH 086/138] Sanity-check the things used as source for random words. Fixed #227 The code that generated random words could cause all kinds of run-time problems and infinite loops. Now we check beforehand that the random thing chosen is fit for purpose. --- .../Act V Atlantida Herself.i7x | 2 +- .../Repository Alphabetic Details.i7x | 36 +++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index b34fe340..5338ef9f 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -620,7 +620,7 @@ Instead of pulling the portcullis: [Nothing makes this explicit, but in addition to being part of the counterweight, the counter measures numbers of visits to the oracle in a given month. For the most part people do not open the portcullis and consult with Atlantida from the outside instead, as they are increasingly afraid of her.] -The ordinary-counter is on the pulley. The printed name of the ordinary-counter is "counter". The description of the ordinary-counter is "One of those devices with a press-button to increment a number, to assist with counting things like the number of people attending an event. There's also a loop to let the user wear it over one finger. The counter currently reads [counter-state]." The ordinary-counter has a number called the counter-state. The counter-state of the ordinary-counter is 17. +The ordinary-counter is on the pulley. The printed name of the ordinary-counter is "counter". The description of the ordinary-counter is "One of those devices with a press-button to increment a number, to assist with counting things like the number of people attending an event. There's also a loop to let the user wear it over one finger. The counter currently reads [counter-state of the ordinary-counter]." The ordinary-counter has a number called the counter-state. The counter-state of the ordinary-counter is 17. Understand "press-button" or "button" as the ordinary-counter. Understand "counter" as the ordinary-counter. The ordinary-counter is wearable. diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index ddd6b978..a4d59e40 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -17,13 +17,13 @@ Instead of searching the aas-object: say "There are a surprising number of sharp bits: this is friable stone, but it hasn't yet been eroded into smoothness." -The description of the ad is "A folded, rumpled newspaper ad for [ad subject]." The ad has some text called the ad subject. The heft of the ad is 1. +The description of the ad is "A folded, rumpled newspaper ad for [ad subject of the ad]." The ad has some text called the ad subject. The heft of the ad is 1. Before examining the ad for the first time: if the restoration gel is not seen: now the ad subject of the ad is "Restoration Gel: a unique patented formula to restore lost letters and undo the effects of a letter-remover"; otherwise: - now the ad subject is "[one of]fixed-price dinners at Literal[or]an exhibit on the pre-history of linguistic concepts at the local museum, especially highlighting their possession of an amazing classic codex[or]seaweed wrap treatments at the Fleur d'Or spa[sticky random]"; + now the ad subject of the ad is "[one of]fixed-price dinners at Literal[or]an exhibit on the pre-history of linguistic concepts at the local museum, especially highlighting their possession of an amazing classic codex[or]seaweed wrap treatments at the Fleur d'Or spa[sticky random]"; The adage is an r-abstract thing. The heft of the adage is 0. The description of the adage is "It reads: [one of]Don't make a god of gold[or]The value of a thing is what it may become[or]From little acorns, much corn may be harvested[or]Every stick has three ends[or]Good fences make good fertil[ize]r[or]Even players have layers[or]If hoses were horses, gardeners would rule the racetrack[or]The fanciest word is the least productive[or]Wordplay is stronger than swordplay[or]Judge a man by his verbs alone[at random]." @@ -627,7 +627,7 @@ Instead of listening to the click: [clock] -The clock has a time called the current time. The description of a clock is "It appears to be one of those archetypal alarm clocks that crows at sunrise and generally makes a nuisance of itself. It shows the time to be about [the current time to the nearest five minutes in words]." +The clock has a time called the current time. The description of a clock is "It appears to be one of those archetypal alarm clocks that crows at sunrise and generally makes a nuisance of itself. It shows the time to be about [the current time of the clock to the nearest five minutes in words]." Every turn (this is the advance clock rule): increase the current time of the clock by one minute. @@ -4237,11 +4237,32 @@ The description of the wire rack is "The new rack is miraculously much larger th The word is r-abstract. The heft of the word is 0. The description is "At the moment, the word is '[recent word]', floating about in [one of]handsome Garamond[or]Arno Pro[or]unmistakable Hoefler[or]slick Buivinga[or]elegant Didot[or]unimaginative Times[or]Helvetica[or]solid-bodied Gotham[at random] lettering." +Definition: a thing is description-appropriate: + if it is the word: + no; + if it is the wordage: + no; + if it is the words: + no; + if it is a quip: + no; + if it is a facade: + no; + if it is a door: + no; + if it is a tap: + no; + if it is a software: + no; + yes. + To say recent word: + let target be a random thing; let N be some text; - now N is the substituted form of the description of a random marked-visible thing; - if N is "": + if target is not description-appropriate or the description of target is "": now N is description of the passage; + otherwise: + now N is the substituted form of the description of target; let count be the number of words in N; let index be a random number between 1 and count; say word number index in N. @@ -4254,9 +4275,10 @@ To say generictext: let N be a random number between 20 and 30; let assemblage be text; repeat with I running from 1 to N: - let content be description of a random seen thing; - if content is "": + let target be a random thing; + if target is not description-appropriate or the description of target is "": next; + let content be the substituted form of the description of target; let max be the number of words in content; let word-choice be a random number between 1 and max; now assemblage is "[assemblage][word number word-choice in content] "; From 22daa4b7241191aa5f81af682ef497305477a69a Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 5 Dec 2023 05:57:22 +0100 Subject: [PATCH 087/138] Large Game Speedup: Convert spaces to tabs --- .../Andrew Plotkin/Large Game Speedup.i7x | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Andrew Plotkin/Large Game Speedup.i7x b/Counterfeit Monkey.materials/Extensions/Andrew Plotkin/Large Game Speedup.i7x index 3329e051..19405b3d 100644 --- a/Counterfeit Monkey.materials/Extensions/Andrew Plotkin/Large Game Speedup.i7x +++ b/Counterfeit Monkey.materials/Extensions/Andrew Plotkin/Large Game Speedup.i7x @@ -41,8 +41,8 @@ Include (- -) after "Sort" in "Tables.i6t". To sort (T - table name) up to row (N - number) in (TC - table column) order - (documented at ph_sortcolumn): - (- TableSortPartial({T}, {N}, {TC}, 1); -). + (documented at ph_sortcolumn): + (- TableSortPartial({T}, {N}, {TC}, 1); -). [We have to clear these flags for every thing. It's worth having a routine that skips I7's usual SetEitherOrProperty() mechanism and all its safety checks.] To rapidly set all things not mentioned: (- OptimizedAllThingsUnsetMentioned(); -). @@ -73,7 +73,7 @@ To set the/-- locale priority of (O - an object) to (N - a number): let rownum be 0; let blanknum be 0; repeat with I running from 1 to locale-table-count: - let ent be the notable-object in row I of the Table of Locale Priorities; + let ent be the notable-object in row I of the Table of Locale Priorities; if ent is nothing: if blanknum is 0: now blanknum is I; @@ -117,7 +117,7 @@ This is the optimized interesting locale paragraphs rule: let the domain be the parameter-object; sort the Table of Locale Priorities up to row locale-table-count in locale description priority order; repeat with I running from 1 to locale-table-count: - let O be the notable-object in row I of the Table of Locale Priorities; + let O be the notable-object in row I of the Table of Locale Priorities; if O is not nothing: carry out the printing a locale paragraph about activity with O; continue the activity. @@ -198,8 +198,8 @@ Include (- [ WriteListFrom first style depth noactivity iter i a ol; @push c_iterator; @push c_style; @push c_depth; @push c_margin; - if (iter) c_iterator = iter; else c_iterator = ObjectTreeIterator; - c_style = style; c_depth = depth; + if (iter) c_iterator = iter; else c_iterator = ObjectTreeIterator; + c_style = style; c_depth = depth; c_margin = 0; if (style & EXTRAINDENT_BIT) c_margin = 1; ! Set or clear the list_filter_permits flag. Try to do it efficiently. @@ -228,12 +228,12 @@ Include (- } } - first = c_iterator(first, depth, 0, START_ITF); + first = c_iterator(first, depth, 0, START_ITF); if (first == nothing) { - if (style & ISARE_BIT ~= 0) LIST_WRITER_INTERNAL_RM('W'); - else LIST_WRITER_INTERNAL_RM('Y'); - if (style & NEWLINE_BIT ~= 0) new_line; - } else { + if (style & ISARE_BIT ~= 0) LIST_WRITER_INTERNAL_RM('W'); + else LIST_WRITER_INTERNAL_RM('Y'); + if (style & NEWLINE_BIT ~= 0) new_line; + } else { if ((noactivity) || (iter)) { WriteListR(first, c_depth, true); say__p = 1; @@ -246,7 +246,7 @@ Include (- } } - @pull c_margin; @pull c_depth; @pull c_style; @pull c_iterator; + @pull c_margin; @pull c_depth; @pull c_style; @pull c_iterator; ]; -) instead of "WriteListFrom" in "ListWriter.i6t". @@ -265,8 +265,8 @@ Include (- } if (length == 0) { - if (style & ISARE_BIT ~= 0) LIST_WRITER_INTERNAL_RM('W'); - else if (style & CFIRSTART_BIT ~= 0) LIST_WRITER_INTERNAL_RM('X'); + if (style & ISARE_BIT ~= 0) LIST_WRITER_INTERNAL_RM('W'); + else if (style & CFIRSTART_BIT ~= 0) LIST_WRITER_INTERNAL_RM('X'); else LIST_WRITER_INTERNAL_RM('Y'); } else { @push MarkedObjectArray; @push MarkedObjectLength; From 22d9a4167329976413bdab1daff0d1db3bbec915 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 5 Dec 2023 06:06:53 +0100 Subject: [PATCH 088/138] Act I-V: Remove double spaces in code We're going to do this in sections, so that any errors introduced will be easier to catch. None of these are in the output text, so it is merely aestetic. I left some that seemed to be deliberate. --- .../Act I Among Sightseers.i7x | 26 ++++++++-------- .../Act II Among Smugglers.i7x | 8 ++--- .../Act III Among Scholars.i7x | 30 +++++++++---------- .../Act IV Among Policemen.i7x | 6 ++-- .../Act V Atlantida Herself.i7x | 24 +++++++-------- 5 files changed, 47 insertions(+), 47 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x index 3b449bc9..484cd496 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x @@ -245,7 +245,7 @@ Instead of buying something which is part of the clothing shops: Instead of putting the restoration gel on something which is part of the clothing shops: say "The shop window is, unsurprisingly, not open to reach into." -The typographer's office is a facade in Sigil Street. It is scenery. +The typographer's office is a facade in Sigil Street. It is scenery. Understand "sign" or "display" or "poster" or "typographer" or "font" or "fonts" or "comma" or "commas" or "punctuation" as the typographer's office. It fronts north. The description of the typographer's office is "The office advertises custom fonts and symbols, though it is very unlikely that anyone decides to have a custom font made simply because they happened to catch a notice in a shop window. In hon[our] of the holiday, there is also a display poster showing the form of the humble comma as it manifests itself in a variety of popular fonts." Instead of looking toward Back Alley: @@ -307,7 +307,7 @@ Rule for printing the banner text when stored first name is not "Andra": do nothing instead. Before taking inventory for the first time: - if the player is carrying the letter-remover and the number of things carried by the player is 1: + if the player is carrying the letter-remover and the number of things carried by the player is 1: say "You insisted that we bring almost nothing into the synthesis room, so the criminal who was performing the synthesis couldn't rob us. I had hoped there was more hon[our] among thieves, but you said no, there isn't."; A last when play begins rule (this is the initial conversation rule): @@ -920,7 +920,7 @@ Instead of turning the wheel: The random foodstuffs are scenery in the fair. Understand "spun" or "sugar" or "candy" or "butter" or "artificial" or "booze" or "popcorn" as the random foodstuffs. The description is "An assortment of unwholesome things to eat are sold here, and since it's extremely hot, [we] smell all of them pungently and in rapid succession. If it's not my imagination, actually, I think this female nose is better than mine. (I've heard that women have a better sense of smell. This could be wrong.) At the moment that sensitivity is a liability, as disorienting as flashes of a col[our]ed strobe.". [* I wanted to give the sense in the first portion of the game that Alex and Andra are really disoriented by what has happened to them. Some of their sensations are borrowed from what it's like to have a migraine on a hot, sunny day amid a crowd: everything is simply too present to endure, and smells and noises become distinct and offensive even if normally they'd be quite pleasant.] -Some kiosks are fixed in place things in the Fair. The description of the kiosks is "They're the usual tacky affairs of brightly painted [if the player wears the Britishizing goggles]fibreboard[otherwise]fiberboard[end if] and cheap prizes. I don't see any likely to help us today, however." Understand "activity" or "activities" or "cheap" or "prizes" or "face-painting" or "face painting" or "spell offs" or "spell-offs" as the kiosks. +Some kiosks are fixed in place things in the Fair. The description of the kiosks is "They're the usual tacky affairs of brightly painted [if the player wears the Britishizing goggles]fibreboard[otherwise]fiberboard[end if] and cheap prizes. I don't see any likely to help us today, however." Understand "activity" or "activities" or "cheap" or "prizes" or "face-painting" or "face painting" or "spell offs" or "spell-offs" as the kiosks. A ranking rule for the kiosks: increase description-rank of the kiosks by 50. @@ -1152,7 +1152,7 @@ Rule for listing exits when the location is Church Forecourt: else: say "South and east lead to more of the park; there is a small [cinema-exterior][if the backpack is not handled] (where I left my pack)[end if] to the north, and the entrance to the [church exterior] is west."; -The cinema-exterior is a facade in Church Forecourt. It fronts north. It is scenery. The description is "Large red letters on the marquee announce the latest film from Cannes." Understand "small" or "cinema" or "theater" or "theatre" or "movie" or "red letters" or "large red" or "large letters" or "large red letters" or "marquee" or "film" or "cannes" as the cinema-exterior. The printed name is "cinema". +The cinema-exterior is a facade in Church Forecourt. It fronts north. It is scenery. The description is "Large red letters on the marquee announce the latest film from Cannes." Understand "small" or "cinema" or "theater" or "theatre" or "movie" or "red letters" or "large red" or "large letters" or "large red letters" or "marquee" or "film" or "cannes" as the cinema-exterior. The printed name is "cinema". Section 4 - Heritage Corner @@ -1237,7 +1237,7 @@ Rule for listing exits when the location is Heritage Corner: else: say "The park continues to the north and west; to the east is [if the hostel is unvisited]a backpackers['] [hostel-exterior] where you've stayed recently and where you stowed the rest of your important possessions[otherwise]the [hostel-exterior][end if]." -The hostel-exterior is a facade in Heritage Corner. It is scenery. The printed name is "hostel". The description is "It's a narrow brick townhouse with only one or two rooms on each floor, and silly ornamental brickwork up near the skyline. The label over the entrance merely announces a generic hostel, without the dignity of a name." Understand "hostel" or "sign" or "townhouse" or "silly brickwork/bricks" or "ornamental brickwork/bricks" or "silly ornamental brickwork/bricks" or "brickwork" or "narrow" or "brick" or "backpacker's" or "backpackers'" or "backpacker" as the hostel-exterior. The hostel-exterior fronts east. +The hostel-exterior is a facade in Heritage Corner. It is scenery. The printed name is "hostel". The description is "It's a narrow brick townhouse with only one or two rooms on each floor, and silly ornamental brickwork up near the skyline. The label over the entrance merely announces a generic hostel, without the dignity of a name." Understand "hostel" or "sign" or "townhouse" or "silly brickwork/bricks" or "ornamental brickwork/bricks" or "silly ornamental brickwork/bricks" or "brickwork" or "narrow" or "brick" or "backpacker's" or "backpackers'" or "backpacker" as the hostel-exterior. The hostel-exterior fronts east. The octagonal bricks are scenery in Heritage Corner. The description is "Alternating with square bricks of a slightly darker shade of maroon. Nothing about this seems remotely significant." Understand "ground" or "paving" or "floor" as the octagonal bricks. @@ -1935,7 +1935,7 @@ To say prayer response: [--]and now quiet. I don't know what, if anything, that may have accomplished, but I promise not to be rude if you need to do it again. " -The gift-shop-exterior is a facade in New Church. It is scenery. It fronts south. The description is "[We] can't really see it from here; I just know that it is back there, from previous visits, though decently screened from the main body of the church." Understand "shop" or "gift shop" or "narthex" as the gift-shop-exterior. The printed name is "gift shop". +The gift-shop-exterior is a facade in New Church. It is scenery. It fronts south. The description is "[We] can't really see it from here; I just know that it is back there, from previous visits, though decently screened from the main body of the church." Understand "shop" or "gift shop" or "narthex" as the gift-shop-exterior. The printed name is "gift shop". The Cathedral Gift Shop is south of the New Church. Understand "narthex" and "giftshop" as the cathedral gift shop. It is indoors. The description is "This area used to be a sort of antechamber where the priests and choir might gather for processions into the church, but it has now been done over for retail purposes. This is one of several schemes to make the New Church pay for its own upkeep: a problem is that people somehow feel everything associated with a church ought to be free, including lunchtime concerts, potluck suppers, and Thursday-night lecture series." @@ -2343,7 +2343,7 @@ Rule for writing a paragraph about the farmer: if a mentionable thing (called item) is in location: say line break. -An asparagus is carried by the farmer. It is a vegetable. The indefinite article of the asparagus is "some". The description of the asparagus is "It looks particularly tender and pleasant, but I avoid the stuff." +An asparagus is carried by the farmer. It is a vegetable. The indefinite article of the asparagus is "some". The description of the asparagus is "It looks particularly tender and pleasant, but I avoid the stuff." A lime is carried by the farmer. It is a vegetable. The description of the lime is "A small, wrinkled, intense-looking fruit: it wouldn't give much juice, but is likely very strong." @@ -2446,7 +2446,7 @@ He closes the door behind him."; Report taking off the monocle in the presence of fake-father: say "Hastily I take off our monocle and palm it. Father shouldn't recogn[ize] us in our current body, but wearing expensive Bureau equipment in his presence would be a terrible idea." instead. -fake-father is a man. fake-father is privately-named. The printed name of fake-father is "Father". Understand "father" and "dad" as fake-father. The description of fake-father is "He looks put out. Serial Comma Day is supposed to be a day off, even for him." The initial appearance is "My father is just outside [my home]. He's clipping the cuffs of his trousers so that he won't snag them on anything during his ride in to work. His scooter is propped against the [statue of Noah Webster], ready for action." +fake-father is a man. fake-father is privately-named. The printed name of fake-father is "Father". Understand "father" and "dad" as fake-father. The description of fake-father is "He looks put out. Serial Comma Day is supposed to be a day off, even for him." The initial appearance is "My father is just outside [my home]. He's clipping the cuffs of his trousers so that he won't snag them on anything during his ride in to work. His scooter is propped against the [statue of Noah Webster], ready for action." After writing a paragraph about fake-father: set pronouns from fake-father. @@ -2602,9 +2602,9 @@ A description-concealing rule when the gum is marked for listing: if the gum is not handled and the gum is not seen: now the gum is not marked for listing. -Test gum with "tutorial off / look / x school / x palm / look / x gum / get gum / look / x palm trees / chew gum / eat gum / drop gum / look / get gum / put gum on spinner / get mug / x mug / wave g-remover at mug / n" in Roget Close. +Test gum with "tutorial off / look / x school / x palm / look / x gum / get gum / look / x palm trees / chew gum / eat gum / drop gum / look / get gum / put gum on spinner / get mug / x mug / wave g-remover at mug / n" in Roget Close. -Rule for listing exits while looking in Roget Close: +Rule for listing exits while looking in Roget Close: do nothing instead. After going from Roget Close to the Winding Footpath: @@ -2620,7 +2620,7 @@ Soon, however, the footpath begins to descend purposefully towards the level of Section 5 - Winding Footpath -The spinner-gate is north of Roget Close. It is a closed transparent locked door. The printed name of the spinner-gate is "gate". Understand "gate" as the spinner-gate. The initial appearance is "If you look just north between the houses, you'll notice also the footpath down to an almost-private beach. It used to be open, but it's now gated off, and built into the [spinner-gate] is a chic modern [if boldening is true][bold type][end if]sculpture[roman type]." +The spinner-gate is north of Roget Close. It is a closed transparent locked door. The printed name of the spinner-gate is "gate". Understand "gate" as the spinner-gate. The initial appearance is "If you look just north between the houses, you'll notice also the footpath down to an almost-private beach. It used to be open, but it's now gated off, and built into the [spinner-gate] is a chic modern [if boldening is true][bold type][end if]sculpture[roman type]." The description of the spinner-gate is "A gate of wrought iron bars between two sturdy columns[if the spinner-gate is closed and the spinner-gate is locked], too close to climb through and too tall to climb over[else if the spinner-gate is closed], closed but not locked[else if the spinner-gate is open]; at the moment the gate has been pushed conveniently open[end if]. Built into the right-hand column, next to the gate latch, is a curious [if boldening is true][bold type][end if]sculpture[roman type]." @@ -2754,7 +2754,7 @@ But Anglophone Atlantis prefers to forget what it was."; Report inserting something into the shrine: say "[We] give [the noun] a place of solemn hon[our] above the relief of frolicking ladies." instead. -The low relief is a part of the shrine. Understand "ladies" or "three" or "waves" or "surface" or "nymph" or "nymphs" or "bare" or "breasts" or "breast" or "garment" or "garments" or "carving" or "sculpture" or "sculpted" as the low relief. The description is "It looks like three ladies dancing on the surface of waves. They're probably meant to be nymphs, if I had to guess. They have bare breasts and fluttering garments, but the carving was done by someone who has not the slightest idea how to make limbs appear under sculpted cloth, so it all looks clunky, as though they don't have hips or legs at all, just randomly swirling skirts as their lower halves. +The low relief is a part of the shrine. Understand "ladies" or "three" or "waves" or "surface" or "nymph" or "nymphs" or "bare" or "breasts" or "breast" or "garment" or "garments" or "carving" or "sculpture" or "sculpted" as the low relief. The description is "It looks like three ladies dancing on the surface of waves. They're probably meant to be nymphs, if I had to guess. They have bare breasts and fluttering garments, but the carving was done by someone who has not the slightest idea how to make limbs appear under sculpted cloth, so it all looks clunky, as though they don't have hips or legs at all, just randomly swirling skirts as their lower halves. All the same, there's something appealing about it." @@ -2779,7 +2779,7 @@ Table of Ultratests (continued) topic stuff setting "shrine" { god, pita, roll of bills, as-coin, cross, army, members, yellow sign, Guidebook } Winding Footpath -Test shrine with "tutorial off / autoupgrade / wave z-remover at kudzu / look behind bushes / put god in shrine / look / get god / wave a-remover at pita / wave t-remover at pit / put pi in shrine / look / get pi / put bills in shrine / look / get bills / put as in shrine / look / get as / put cross in shrine / look / get cross / put army in shrine / look / get army / put members in shrine / look / get members / wave s-remover at members / put member in shrine / look / get member / wave g-remover at sign / put sin in shrine / look / get sin / put guidebook in shrine / look / get guidebook" [holding the god and the pita and the roll of bills and the as and the cross and the army and the members and the yellow sign and the Guidebook in the Winding Footpath.] +Test shrine with "tutorial off / autoupgrade / wave z-remover at kudzu / look behind bushes / put god in shrine / look / get god / wave a-remover at pita / wave t-remover at pit / put pi in shrine / look / get pi / put bills in shrine / look / get bills / put as in shrine / look / get as / put cross in shrine / look / get cross / put army in shrine / look / get army / put members in shrine / look / get members / wave s-remover at members / put member in shrine / look / get member / wave g-remover at sign / put sin in shrine / look / get sin / put guidebook in shrine / look / get guidebook" [holding the god and the pita and the roll of bills and the as and the cross and the army and the members and the yellow sign and the Guidebook in the Winding Footpath.] Section 6 - The Beach diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index 340eca9d..a48ab359 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -218,7 +218,7 @@ Definition: a thing is disguisable: yes; if it is proffered by the modems: yes; - if it is proffered by the preamps: + if it is proffered by the preamps: yes; no. @@ -674,7 +674,7 @@ Check waving the letter-remover at the tattoos: Some tattoos are part of the clientele. The description of the tattoos is "[one of]One says I HEART MA[or]One is a detailed rendering of scenes from Brooklyn[or]One looks like an Elder Sign[at random]." The clientele is a person in Counterfeit Monkey. The initial appearance is "[The clientele] is keeping [the barman] thoroughly busy." - The description of the clientele is "A nasty-looking bunch. They can be good enough if you're on the right side of them, but getting and staying that way isn't easy. And they're justly suspicious: the customs house not infrequently tries to infiltrate the criminal organ[ization]s and brotherhoods, though with no great success." Understand "crowd" or "players" or "player" or "customers" or "customer" or "guys" or "people" or "guy" as the clientele. + The description of the clientele is "A nasty-looking bunch. They can be good enough if you're on the right side of them, but getting and staying that way isn't easy. And they're justly suspicious: the customs house not infrequently tries to infiltrate the criminal organ[ization]s and brotherhoods, though with no great success." Understand "crowd" or "players" or "player" or "customers" or "customer" or "guys" or "people" or "guy" as the clientele. After reading a command when location is Counterfeit Monkey (this is the replace men with clientele rule): while the player's command includes "men": @@ -695,7 +695,7 @@ Instead of saying hello to the clientele: say "They're... busy. At best interrupting them would interrupt their code, and at worst it would make them think [we] [are] a Bureau agent." [say "At the moment they aren't harassing us, but there's no reason to get their attention. After all, it took plenty of work to get their respect the first time out, and we don't have the time now to earn it again."] -The bar-top is a supporter in Counterfeit Monkey. It is scenery. Understand "counter" or "bar" as the bar-top. The printed name of the bar-top is "bar". The description is "Kept scrupulously clean, whatever you might say about the rest of the place." +The bar-top is a supporter in Counterfeit Monkey. It is scenery. Understand "counter" or "bar" as the bar-top. The printed name of the bar-top is "bar". The description is "Kept scrupulously clean, whatever you might say about the rest of the place." To summon Slango: move Slango to the Counterfeit Monkey; @@ -1149,7 +1149,7 @@ The description of the stuffed octopus is "Slightly wrong, actually, but I suppo This one has been tied to Atlantida's hand alongside the [end if][if the stuffed octopus is on the giant Atlantida statue and the olive branch is on the huge-metal-arm][olive branch] she traditionally carries[end if][if the stuffed octopus is on the giant Atlantida statue and the live branch is on the huge-metal-arm][live branch] she untraditionally carries[end if]." -Some traffic-island-protesters are a plural-named man. The printed name is "protesters". Understand "protesters" or "crowd" as the traffic-island-protesters. The initial appearance is "Protesters clog the street and sit or stand around the base of the statue." +Some traffic-island-protesters are a plural-named man. The printed name is "protesters". Understand "protesters" or "crowd" as the traffic-island-protesters. The initial appearance is "Protesters clog the street and sit or stand around the base of the statue." The All-Purpose-Officer is a privately-named man in Traffic Circle. The printed name is "All-Purpose Officer". Understand "all" or "purpose" or "all-purpose" or "officer" as the All-Purpose-Officer. The description is "He is uniformed and has a look of serious determination." The All-Purpose-Officer is carrying a diminutive affixer and a restoration-gel rifle. diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index 1a5f1df1..e8f7c46a 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -22,7 +22,7 @@ Long Street North is a proper-named and southern road. Understand "long street n Some anemic palm trees are a backdrop. They are in Long Street North and Long Street South. The description is "The only foliage comes in a clump high above. The effect is distorted and unnatural, and I say that having lived with them all my life. They are trees in the same sense that ostriches are birds." The printed name is "an[ae]mic palm trees". Understand "palms" or "anaemic" as the anemic palm trees. -South of Long Street North is Long Street South. Long Street South is a proper-named southern road. Understand "long street s" as Long Street South. The description is "Long Street is lined on each side with a double-row of tall, an[ae]mic palm trees that bend towards one another many feet overhead. [We] are now in the southern part of this long corridor, between the Canadian Embassy and Arbot Maps & Antiques." +South of Long Street North is Long Street South. Long Street South is a proper-named southern road. Understand "long street s" as Long Street South. The description is "Long Street is lined on each side with a double-row of tall, an[ae]mic palm trees that bend towards one another many feet overhead. [We] are now in the southern part of this long corridor, between the Canadian Embassy and Arbot Maps & Antiques." The Canadian Embassy is a facade in Long Street South. It fronts east. It is scenery. The description is "The embassy is the largest foreign embassy here: Canadians do a lot of business with Atlantis, but the Québécois require special permission to enter, so there's a call for substantial clerical work. The building is a solid 1960s block in concrete with slit-shaped windows." Understand "concrete" or "windows" or "solid" or "block" or "slit-shaped" or "slit" or "window" or "slit shaped" or "slits" as the Canadian Embassy. @@ -55,14 +55,14 @@ After going to Arbot Maps & Antiques: say "The woman watching over the store stops you. 'I'm sorry,' she says. 'We are only open to those who have made previous visiting arrangements.' And we're shooed back out."; move the player to Long Street South, without printing a room description. -Arbot Maps & Antiques is west of Long Street South. It is indoors, checkpoint and southern. Understand "shop" or "store" or "antique" as Arbot Maps & Antiques. +Arbot Maps & Antiques is west of Long Street South. It is indoors, checkpoint and southern. Understand "shop" or "store" or "antique" as Arbot Maps & Antiques. Out-direction of Arbot Maps & Antiques is east. [Long Street South] Instead of smelling Arbot Antiques: say "The place smells of fresh coffee and old paper." -The maps collection is a thing in Arbot Maps & Antiques. Understand "large" or "collection" or "of" or "antique" or "under glass" or "street maps" or "maiana" or "navigation" or "distant places" or "charts" or "island" or "topography" as the maps collection. It is fixed in place. The printed name is "[if looking]collection[otherwise]maps collection[end if]". The initial appearance is "There is a large [maps collection] of vintage and antique maps under glass [--] the island of Atlantis as a whole, street maps of here and of Maiana, navigation maps of the harb[our], and then maps of more distant places as well." +The maps collection is a thing in Arbot Maps & Antiques. Understand "large" or "collection" or "of" or "antique" or "under glass" or "street maps" or "maiana" or "navigation" or "distant places" or "charts" or "island" or "topography" as the maps collection. It is fixed in place. The printed name is "[if looking]collection[otherwise]maps collection[end if]". The initial appearance is "There is a large [maps collection] of vintage and antique maps under glass [--] the island of Atlantis as a whole, street maps of here and of Maiana, navigation maps of the harb[our], and then maps of more distant places as well." The description of the maps collection is "[We] pore over a map of [one of]the Old City when the walls were still intact, as reconstructed from archaeological surveys[or]forbidden dig zones in Atlantis[or]bus routes between here and Maiana ca. 1973[or]island topography as measured in 1910[or]1880 shipping lines between Atlantis, Gibraltar, and points east[at random]." Instead of examining the maps collection when the Slangovia map is unseen: @@ -166,7 +166,7 @@ The spotlights are a scenery thing in the Fleur d'Or Lobby. Understand "spotligh Rule for listing exits when looking in Fleur d'Or Lobby: do nothing instead. -A piano is a fixed in place instrument in the Fleur d'Or Lobby. The initial appearance is "[if the player is on the piano-bench]We're seated at a handsome piano in the corner[else]There is no one at the glossy [piano] in the corner[end if]." The description is "A glossy grand, probably worthy of better than bar music." Understand "keys" or "keyboard" as the piano. +A piano is a fixed in place instrument in the Fleur d'Or Lobby. The initial appearance is "[if the player is on the piano-bench]We're seated at a handsome piano in the corner[else]There is no one at the glossy [piano] in the corner[end if]." The description is "A glossy grand, probably worthy of better than bar music." Understand "keys" or "keyboard" as the piano. The piano-bench is an enterable scenery supporter. It allows seated. [The piano-bench is part of the piano.] The piano-bench is in the Fleur d'Or Lobby. The printed name is "piano bench". Understand "bench" or "piano bench" as the piano-bench. The description of the piano-bench is "Lightly padded and made of the same wood as the piano itself." @@ -199,7 +199,7 @@ Report performing the piece on an instrument which is not the oboe: Report performing something on an instrument which is not the oboe: say "We pick out [one of]some vaguely remembered commercial jingles from your childhood[or]a church hymn you heard a lot in your youth[or]my mother's fav[our]ite Atlantean folk tune[at random]." instead. -Check improvising the topic understood on the piano when the player is not on the piano-bench: +Check improvising the topic understood on the piano when the player is not on the piano-bench: try entering the piano-bench; Report improvising a topic listed in the Table of Musical Styles on the piano: @@ -319,7 +319,7 @@ After printing the name of the patron while writing a topic sentence about the b [Understand "play [piano]" as a mistake ("[one of]I have no skill in that department[or]I don't play[or]I don't think we want to attract attention with a jangly performance, thanks[at random]."). -Understand "play [text]" as a mistake ("[one of]I have no skill in that department[or]I don't play[or]I don't think we want to attract attention with a jangly performance, thanks[at random].") when the player can see the piano. ] +Understand "play [text]" as a mistake ("[one of]I have no skill in that department[or]I don't play[or]I don't think we want to attract attention with a jangly performance, thanks[at random].") when the player can see the piano. ] Part 2 - Student Quarters @@ -517,7 +517,7 @@ The description of the nightstand is "It is wobbly, scratched, and chipped, whic Instead of inserting something into the nightstand, say "[The nightstand] doesn't have a drawer." -The key is a passkey on the nightstand. It unlocks the apartment door. The heft of the key is 1. The description is "It's made of an extremely ordinary blank.". The key unbolts the apartment door. The indefinite article of the key is "a". +The key is a passkey on the nightstand. It unlocks the apartment door. The heft of the key is 1. The description is "It's made of an extremely ordinary blank.". The key unbolts the apartment door. The indefinite article of the key is "a". Test key-article with "i" holding the key. @@ -575,7 +575,7 @@ When play begins (this is the setting up my apartment rule): Test sink-kitchen with "X KITCHEN / WAVE S-REMOVER AT SINK / X KITCHEN" in My Apartment. -Studies Primary Language Acquisition is a book in My Apartment. Journal of Third-World Economics is a book in My Apartment. +Studies Primary Language Acquisition is a book in My Apartment. Journal of Third-World Economics is a book in My Apartment. The printed name of Studies Primary Language Acquisition is "Studies in Primary Language Acquisition". Understand "studies in" as Studies Primary Language Acquisition. @@ -590,7 +590,7 @@ A pot-of-yogurt is an edible thing. The printed name is "yogurt". Understand "yo Rule for printing the name of the pot-of-yogurt when the player wears the Britishizing goggles: say "yoghurt". -Test yogurtbug with "tutorial off / x yogurt / x yoghurt" holding the pot-of-yogurt. +Test yogurtbug with "tutorial off / x yogurt / x yoghurt" holding the pot-of-yogurt. A futon is a clothed bed. The futon is in My Apartment. The description of the futon is "Strictly speaking, more of a futon mattress. It doesn't have a frame." The flexible appearance is "My [futon] is on the floor in the opposite corner. ". @@ -808,7 +808,7 @@ Out-direction of Samuel Johnson Hall is north. [To University oval] Rule for listing exits while looking in Samuel Johnson Hall: do nothing instead. -The framed photograph of Waterstone is a thing in Samuel Johnson Hall. It is fixed in place. The initial appearance is "On the wall hangs a [photograph of Waterstone], with the words SHAPLY CHAIR in big letters underneath." Understand "photo" or "picture" or "professor" or "frame" as the framed photograph. +The framed photograph of Waterstone is a thing in Samuel Johnson Hall. It is fixed in place. The initial appearance is "On the wall hangs a [photograph of Waterstone], with the words SHAPLY CHAIR in big letters underneath." Understand "photo" or "picture" or "professor" or "frame" as the framed photograph. The printed name is "framed photograph of Professor Waterstone". The description is "The Shaply Chair is not named after the famous suffragette Phyllida Shaply, but after her considerably less famous or interesting descendant Lawrence Shaply, who was well-placed within Dental Consonants Ltd. when it started up and subsequently had buckets of money with which to endow university chairs. @@ -818,7 +818,7 @@ This may explain the particularly expansive grin on Waterstone's face in this im Section 3 - Seminar Room -Southwest of Samuel Johnson Hall is the seminar door. The seminar door is a closed lockable locked door. The seminar door is scenery. The description of the seminar door is "It's sturdy, because sometimes valuable equipment is stored in the room beyond. That room also contains the library of department books, a set of research materials kept on hand so that people don't have to go over to the university library to double-check basic data during a discussion." +Southwest of Samuel Johnson Hall is the seminar door. The seminar door is a closed lockable locked door. The seminar door is scenery. The description of the seminar door is "It's sturdy, because sometimes valuable equipment is stored in the room beyond. That room also contains the library of department books, a set of research materials kept on hand so that people don't have to go over to the university library to double-check basic data during a discussion." Southwest of the seminar door is Language Studies Seminar Room. The description of the Language Studies Seminar Room is "They recently redid this room, and whoever picked the decorations had postmodern tastes." The Language Studies Seminar Room is indoors, checkpoint, improper-named and southern. @@ -832,7 +832,7 @@ After looking in the Language Studies Seminar Room when the seminar door is open The LSR chair is a chair in The Language Studies Seminar Room. The printed name of the LSR chair is "chair". The LSR chair is not scenery. The LSR chair is portable. -Before going from the Language Studies Seminar Room when the player carries Problem of Adjectives: +Before going from the Language Studies Seminar Room when the player carries Problem of Adjectives: try putting Problem of Adjectives on the LSR bookcase. Carry out putting Problem of Adjectives on the LSR Bookcase: @@ -843,7 +843,7 @@ Carry out putting Problem of Adjectives on the LSR Bookcase: The LSR bookcase is a supporter in the Language Studies Seminar Room. The initial appearance is "The bookshelves lining the walls contain the department library." The description is "Built in and sturdily made." The printed name is "bookshelf". Understand "shelf" or "shelves" or "bookshelf" as the LSR bookcase. -The big table is a supporter in the Language Studies Seminar Room. "The [big table] at the cen[ter] of the room is an irregular polygon[if the LSR chair is in location and the LSR chair is not handled], with one [LSR chair] pushed up to the shortest side[end if]." +The big table is a supporter in the Language Studies Seminar Room. "The [big table] at the cen[ter] of the room is an irregular polygon[if the LSR chair is in location and the LSR chair is not handled], with one [LSR chair] pushed up to the shortest side[end if]." The introduction is "I think the shape is intended to undermine traditional conceptions of academic hierarchy, but in practice it just means that whoever gets to seminar late has to sit with a table angle jabbing him in the stomach." The description is "Crafted from some exotic wood with lots of interesting burl structure. There was a wealthy donor behind the construction of this room." Understand "polygon" as the big table. @@ -1292,7 +1292,7 @@ Definition: a thing is Waterstone-inspiring: yes; no. -[It is confusing if Watersone looks at the player's belongings before we even know that he is looking for anything. So we use a fact, homonym-shame-wanted, to check whether the player knows about the puzzle. This will be set to known if we have read the draft document, if we have already tried to show or give something to Waterstone, or simply by knocking on his door after having been thrown out the first time.] +[It is confusing if Watersone looks at the player's belongings before we even know that he is looking for anything. So we use a fact, homonym-shame-wanted, to check whether the player knows about the puzzle. This will be set to known if we have read the draft document, if we have already tried to show or give something to Waterstone, or simply by knocking on his door after having been thrown out the first time.] Instead of knocking on office-door-1 when Professor Waterstone is on a chair and office-door-1 is closed and the location is Language Studies Department Office: if the player does not know homonym-shame-wanted: @@ -1642,7 +1642,7 @@ The reclamation computer is running a password-lock program called reclamation s The reclamation computer is running an enumerated multiple-choice program called the reclamations operation program. The options table of the reclamations operation program is the table of deeds. - The description of the reclamations operation program is "At the top of the screen is the message STATUS: [if the reclamation machine is closed and the reclamation machine is limit-replacing]STANDBY[otherwise if reclamation machine is abstract-removing]REMOVING ABSTRACTION LIMITS[otherwise if reclamation machine is abstract-replacing]RESTORING ABSTRACTION LIMITS[otherwise if the reclamation machine is limit-replacing]RESTORING LEGAL LIMITS ON ANIMAL-CREATION[otherwise]REMOVING LEGAL LIMITS ON ANIMAL-CREATION[end if]. + The description of the reclamations operation program is "At the top of the screen is the message STATUS: [if the reclamation machine is closed and the reclamation machine is limit-replacing]STANDBY[otherwise if reclamation machine is abstract-removing]REMOVING ABSTRACTION LIMITS[otherwise if reclamation machine is abstract-replacing]RESTORING ABSTRACTION LIMITS[otherwise if the reclamation machine is limit-replacing]RESTORING LEGAL LIMITS ON ANIMAL-CREATION[otherwise]REMOVING LEGAL LIMITS ON ANIMAL-CREATION[end if]. [options-list of the item described]". diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x index 71ae1660..43039d45 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x @@ -26,7 +26,7 @@ Rule for listing exits when looking in Tall Street: else: say "To the south is the important blue rotunda of the Bureau of Orthography. The street runs west towards the busy roundabout." -The employment office is a facade in Tall Street. It fronts north. It is scenery. +The employment office is a facade in Tall Street. It fronts north. It is scenery. The description is "Only the stencilled lettering in the window identifies this place: Temporary Employment For Job Seekers. The blinds are down and the door locked. It doesn't look like a large facility." Understand "blinds" or "blind" or "door" or "window" or "lettering" as the employment office. Section 2 - Abandoned Park @@ -71,7 +71,7 @@ Rule for listing exits when looking in the Rotunda: The used furniture shop is a facade in Abandoned Park. It fronts east. The description is "Like just about everything else, the shop is closed, but were it open, it would be just the place to buy cracked mirrors, scuffed end tables, and wobbly chairs painted with a thick layer of off-white paint." It is scenery. -The veterinary clinic is a facade in Abandoned Park. It fronts north. It is scenery. +The veterinary clinic is a facade in Abandoned Park. It fronts north. It is scenery. The description is "From outside it looks just the same as almost any kind of professional office: there could just as well be a doctor in there, or a lawyer, or a psychiatrist." @@ -206,7 +206,7 @@ The skylight is scenery in the rotunda. The description is "It is distant and pe The inscribed-text is scenery in the Rotunda. Understand "new" or "orthodox" or "orthography" or "inscribed" or "text" or "lettering" or "inscription" as the inscribed-text. The printed name is "text". The description of the inscribed-text is "It is far too small to read, especially since the letters are not painted or inked, just carved into the stone surfaces." Instead of touching the inscribed-text: say "The letters are cool and tiny under our fingers." -The informational bulletin-board is fixed in place in the Rotunda. Understand "bulletin" or "board" as the bulletin-board. The initial appearance is "Near the street entrance is a sizable [bulletin-board] advertising the services of the Bureau[if the bin is in the location]; and next to this, pushed back to be out of the way, is a [bin][end if].[run paragraph on]" +The informational bulletin-board is fixed in place in the Rotunda. Understand "bulletin" or "board" as the bulletin-board. The initial appearance is "Near the street entrance is a sizable [bulletin-board] advertising the services of the Bureau[if the bin is in the location]; and next to this, pushed back to be out of the way, is a [bin][end if].[run paragraph on]" The description is "[i]What Can Your Bureau of Orthography Do For You?[/i] inquires the bulletin board, in a sprightly casual font. diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index 8bee89a4..51640aea 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -235,7 +235,7 @@ The surveillance room description is intentionally kept very brief as a partial The Surveillance Room is east of the Oracle Project. It is indoors. -The surveillance computer is a desktop computer in the Surveillance Room. It is fixed in place. The initial appearance is "A [surveillance computer] is mounted on the wall, an impressive flat screen readout[if the surveillance computer is switched on] displaying current activity[otherwise] presently blacked out[end if]." The surveillance computer is switched on. +The surveillance computer is a desktop computer in the Surveillance Room. It is fixed in place. The initial appearance is "A [surveillance computer] is mounted on the wall, an impressive flat screen readout[if the surveillance computer is switched on] displaying current activity[otherwise] presently blacked out[end if]." The surveillance computer is switched on. The description of the surveillance computer is "Below the flat screen are a keyboard and mouse, both shiny silver. Only top of the line equipment down here, it seems." Understand "flat" or "screen" or "readout" as the surveillance computer's screen. The description of the surveillance computer's screen is "It is bigger than my parent's television, and that is saying something." @@ -733,7 +733,7 @@ topic title data "biography" or "phyllida" or "shaply" or "marcus" or "aurelius" or "churchill" or "winston" or "margaret" or "thatcher" or "martin" or "luther" or "king" or "nelson" or "mandela" "biographies" "The collection includes four different biographies of Phyllida Shaply; numerous lives of her contemporaries; and then a bizarrely diverse coverage of saints and villains, ancient and recent figures. Marcus Aurelius appears, as do Winston Churchill and Margaret Thatcher, Martin Luther King and Nelson Mandela." "economy/economics/macroeconomics" "books on the economy" "Several impressive-looking textbooks on macroeconomics are listed, though from the bookmarks it is clear that the owner has not been able to get all the way through them." -The tall window is a transparent door. The initial appearance is "A window in the north wall, cut out through the cliff face, gives a view of [if the current daytime is sunset]the ocean in fading sunlight[otherwise if the current daytime is evening]tranquil sea under a darkening sky[otherwise]brilliant sunlight and the hot sea[end if]." It is north of Private Solarium and south of the Precarious Perch. +The tall window is a transparent door. The initial appearance is "A window in the north wall, cut out through the cliff face, gives a view of [if the current daytime is sunset]the ocean in fading sunlight[otherwise if the current daytime is evening]tranquil sea under a darkening sky[otherwise]brilliant sunlight and the hot sea[end if]." It is north of Private Solarium and south of the Precarious Perch. The description of the tall window is "[if the tall window is open]The window stands open.[else]The window is closed.[end if]". @@ -768,7 +768,7 @@ Instead of going through the closed tall window: say "The window is shut: you'd break the glass." -Official Grounds is a region. The Antechamber, Rotunda, Tools Exhibit, All-Purpose Office, Bureau Hallway, Bureau Basement South, Bureau Basement Middle, Bureau Basement Secret Section, Wonderland, and Sensitive Equipment Testing Room, Equipment Archive, Cold Storage, Display Reloading Room, Workshop, Generator Room, Surveillance Room, and Oracle Project are in the Official Grounds. +Official Grounds is a region. The Antechamber, Rotunda, Tools Exhibit, All-Purpose Office, Bureau Hallway, Bureau Basement South, Bureau Basement Middle, Bureau Basement Secret Section, Wonderland, and Sensitive Equipment Testing Room, Equipment Archive, Cold Storage, Display Reloading Room, Workshop, Generator Room, Surveillance Room, and Oracle Project are in the Official Grounds. The Antechamber, All-Purpose Office, Bureau Hallway, Bureau Basement South, Bureau Basement Middle, Bureau Basement Secret Section [, Wonderland, Display Reloading Room, Oracle Project, Workshop, Equipment Archive, and Cold Storage] are privately-controlled. @@ -1070,7 +1070,7 @@ The aft is a direction. The aft has opposite fore. Understand "a" or "af" as aft The aft-port is a direction. The aft-port has opposite fore-starboard. It is nautical-directional. Understand "pa" or "ap" as aft-port when the location is nautical. -The aft-starboard is a direction. It is nautical-directional. The aft-starboard has opposite fore-port. Understand "sa" or "as" or "asb" as aft-starboard when the location is nautical. +The aft-starboard is a direction. It is nautical-directional. The aft-starboard has opposite fore-port. Understand "sa" or "as" or "asb" as aft-starboard when the location is nautical. The fore-port is a direction. It is nautical-directional. The fore-port has opposite aft-starboard. Understand "pf" or "fp" as fore-port when the location is nautical. @@ -1136,7 +1136,7 @@ In-direction of Navigation Area is down. [Into galley] Rule for writing a paragraph about Slango when Slango is on the Command Chair: say "Slango is in [the command chair]. He looks more relaxed driving the boat than I've ever seen him before." -The steep staircase top is a down-staircase. It is in the Navigation Area. It fronts down. The description is "The steps are taller than is really quite comfortable.". The printed name is "steep staircase". Understand "ladder" as the steep staircase top. +The steep staircase top is a down-staircase. It is in the Navigation Area. It fronts down. The description is "The steps are taller than is really quite comfortable.". The printed name is "steep staircase". Understand "ladder" as the steep staircase top. The steep staircase bottom is an up-staircase. It fronts up. It is in the Galley. The description is "The stairs ascend to the navigation area on deck." The printed name is "steep staircase". Understand "ladder" as the steep staircase bottom. @@ -1148,7 +1148,7 @@ The Foredeck is fore from the Navigation Area. It is nautical and forbidden. The In-direction of Foredeck is down. [Into crew cabin] -Some portholes are a kind of thing. Portholes are usually scenery. The description of the portholes is usually "Perhaps I should drop any attempt to sound nautical and just call them windows, because they are not the round things one normally thinks of. But they are waterproof and just above the water line." Understand "window" or "windows" or "porthole" or "portholes" as portholes. The printed name of portholes is always "portholes". +Some portholes are a kind of thing. Portholes are usually scenery. The description of the portholes is usually "Perhaps I should drop any attempt to sound nautical and just call them windows, because they are not the round things one normally thinks of. But they are waterproof and just above the water line." Understand "window" or "windows" or "porthole" or "portholes" as portholes. The printed name of portholes is always "portholes". Instead of searching portholes: say "It's hard to get much of a view, just the glimmering and rolling of the water surface." @@ -1269,7 +1269,7 @@ Instead of inserting something into a freezer compartment: Section 6 - Brock's Stateroom -Brock's Stateroom is fore from the Galley. It is nautical and forbidden. It is indoors. The description is "Bigger than your bunk or Slango's, Brock's space takes the whole width of the yacht here, with windows out both sides, and a double bed. +Brock's Stateroom is fore from the Galley. It is nautical and forbidden. It is indoors. The description is "Bigger than your bunk or Slango's, Brock's space takes the whole width of the yacht here, with windows out both sides, and a double bed. The shape of hull in this part of the yacht means that the room is much narrower fore than aft, the walls sweeping grandly outward from the head of [Brock's bed]. It looks like the bed of Captain Horndog, Space Woman[ize]r. If you ask me." @@ -1354,7 +1354,7 @@ Some front portholes are portholes. They are in Brock's Stateroom. Section 7 - Brock's Head -Brock's Head is aft-port from Brock's Stateroom. It is nautical and forbidden. It is indoors. It is a bathroom. The description is "Brock has gotten the best accommodations in this respect as well: his bathroom is less cramped than the others aboard, and the mirror is bigger." +Brock's Head is aft-port from Brock's Stateroom. It is nautical and forbidden. It is indoors. It is a bathroom. The description is "Brock has gotten the best accommodations in this respect as well: his bathroom is less cramped than the others aboard, and the mirror is bigger." Instead of going starboard in Brock's Head: try going fore-starboard. @@ -1364,7 +1364,7 @@ Instead of going fore in Brock's Head: Section 8 - Your Bunk -Your Bunk is aft-starboard from the Galley. It is nautical and forbidden. It is indoors. The description is "Amazing: it's even tinier than my apartment, and the bed isn't even a twin in width. Across from the bed is a built-in [bench], with [random portholes] above, just at the waterline." +Your Bunk is aft-starboard from the Galley. It is nautical and forbidden. It is indoors. The description is "Amazing: it's even tinier than my apartment, and the bed isn't even a twin in width. Across from the bed is a built-in [bench], with [random portholes] above, just at the waterline." Out-direction of Your bunk is fore-port. [Back to galley] @@ -1384,7 +1384,7 @@ Your wardrobe contains a sundress, a black turtleneck, some trousers, and a swim The sundress, black turtleneck, trousers, and swimsuit are wearable. The description of the sundress is "Bought during a vacation in Nauplia. It was tempting to look like the other tourists. And why not?" The sundress covers the torso-area. The description of the black turtleneck is "It averts attention and is useful on jobs." The turtleneck covers the torso-area. - The description of the trousers is "Close-fitting and dark col[our]ed, useful to wear when going places sneakily by night." The trousers cover the legs-area. + The description of the trousers is "Close-fitting and dark col[our]ed, useful to wear when going places sneakily by night." The trousers cover the legs-area. The description of the swimsuit is "Often the only form of exercise available is swimming off the back of the True Macaque, and Slango insists that you and Brock do this daily if on-shore forms of exertion are not available. It's a one-piece suit, meant for function rather than show." The swimsuit covers the torso-area. Sanity-check wearing the sundress: @@ -1425,11 +1425,11 @@ Instead of going fore in Your Bunk: Section 10 - Your Head -Your Head is aft from Your Bunk. It is nautical and forbidden. It is a bathroom. It is indoors. The description is "All the absolutely required amenities of a bathroom, packed into the least possible space. The international space station assigns more room to the bathroom functions." +Your Head is aft from Your Bunk. It is nautical and forbidden. It is a bathroom. It is indoors. The description is "All the absolutely required amenities of a bathroom, packed into the least possible space. The international space station assigns more room to the bathroom functions." Section 11 - Slango's Bunk -Slango's Bunk is aft-port from the Galley. It is nautical and forbidden. It is indoors. The description is "Just as tiny as yours, with a bed narrower than a standard twin, and its own miniature head, and drawers cunningly fitted under the bed to hold clothing and other necessities." +Slango's Bunk is aft-port from the Galley. It is nautical and forbidden. It is indoors. The description is "Just as tiny as yours, with a bed narrower than a standard twin, and its own miniature head, and drawers cunningly fitted under the bed to hold clothing and other necessities." Out-direction of Slango's bunk is fore-starboard. [Back to galley] From c71ef3e91f48d66957104d842c15579242028bce Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 5 Dec 2023 06:22:02 +0100 Subject: [PATCH 089/138] Files A-M: Remove double spaces --- .../Animal Actions and Human Conversation.i7x | 162 +++++++++--------- .../Approaching Speedups.i7x | 2 +- .../Counterfeit Monkey/Dispensers.i7x | 6 +- .../Features of Created Objects.i7x | 2 +- .../Initial Quip Positions.i7x | 4 +- .../Intelligent Substitution.i7x | 4 +- .../Extensions/Counterfeit Monkey/Liquids.i7x | 2 +- .../Counterfeit Monkey/Loudness.i7x | 2 +- .../Counterfeit Monkey/Memories.i7x | 2 +- .../Counterfeit Monkey/Mentions Indices.i7x | 8 +- 10 files changed, 97 insertions(+), 97 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 5328266d..838f470c 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -323,7 +323,7 @@ To say directions to (destination - a room): -- 1: say ". That's just [way] from here[run paragraph on]"; -- otherwise: - if distance is less than 5: + if distance is less than 5: say ". It's not far; you'd head [way] to start[run paragraph on]"; otherwise if distance is less than 9: say ". It's a little bit of a walk, but not too bad. Head [way] to start with[run paragraph on]"; @@ -393,7 +393,7 @@ location-questioning quip is a kind of questioning quip. where there seems airport is a weakly-phrased location-questioning quip. The printed name is "where there is an airport". The true-name is "where there seems airport". - Understand "is" or "an" or "airport" or "international" or "plane" or "airplane" as where there seems airport. The place-sought is "an airport". + Understand "is" or "an" or "airport" or "international" or "plane" or "airplane" as where there seems airport. The place-sought is "an airport". [The mentions-list is {geography, transportation}.] The reply is "[one of]'Atlantis doesn't have a commercial airport,' says [the current interlocutor]. 'There's an airstrip that belongs to Dental Consonants Limited, but if you don't have a corporate jet, forget it.'[or]'[awkward no]. Occasionally you might see planes or even a helicopter, but they're going to the DCL campus for business purposes. Tourists only come by ocean.'[or][The current interlocutor] explains, as we've already heard, that there is no airport, at least not as far as we're concerned.[stopping]". It is background-information. @@ -401,7 +401,7 @@ where there seems airport is a weakly-phrased location-questioning quip. where there seems garage is a weakly-phrased location-questioning quip. The printed name is "where there is a garage". The true-name is "where there seems garage". - Understand "is" or "a" as where there seems garage. The place-sought is "a garage". + Understand "is" or "a" as where there seems garage. The place-sought is "a garage". [The mentions-list is {geography, transportation}.] It is background-information. The correct answer is Park Center. @@ -414,7 +414,7 @@ Availability rule for where there seems garage: where there seems telephone service is a weakly-phrased location-questioning quip. The printed name is "where there is telephone service". The true-name is "where there seems telephone service". - Understand "is" or "phone" as where there seems telephone service. The place-sought is "a public telephone". + Understand "is" or "phone" as where there seems telephone service. The place-sought is "a public telephone". [The mentions-list is {geography}.] It is background-information. The correct answer is Park Center. @@ -427,14 +427,14 @@ Availability rule for where there seems internet service when the current interl where there seems internet service is a weakly-phrased location-questioning quip. The printed name is "where there is internet service". The true-name is "where there seems internet service". - Understand "is" as where there seems internet service. The place-sought is "internet service". + Understand "is" as where there seems internet service. The place-sought is "internet service". [The mentions-list is {Internet, geography}.] The reply is "[one of]'There are some cafés and places that have access to the Atlantis network,' [the current interlocutor] [say]. 'But a lot of them are probably closed today for Serial Comma Day.'[or][holiday closures][stopping]". It is background-information. where food seems sold is a weakly-phrased location-questioning quip. The printed name is "where food is sold". The true-name is "where food seems sold". - Understand "is" or "where there seems" as where food seems sold. The place-sought is "a source of groceries". + Understand "is" or "where there seems" as where food seems sold. The place-sought is "a source of groceries". [The mentions-list is {food, geography}.] The reply is "[one of]'All the regular grocery stores are probably closed for Serial Comma Day, but you could try the farmer's market up on Hesychius Street.'[or][holiday closures][at random]". It is background-information. @@ -442,36 +442,36 @@ where food seems sold is a weakly-phrased location-questioning quip. where a school seems is a weakly-phrased location-questioning quip. The printed name is "where a school is". The true-name is "where a school seems". - Understand "is" or "elementary" or "grammar" or "comprehensive" or "junior" or "where there seems" as where a school seems. The place-sought is "an elementary school". + Understand "is" or "elementary" or "grammar" or "comprehensive" or "junior" or "where there seems" as where a school seems. The place-sought is "an elementary school". [The mentions-list is {education, geography}.] It is background-information. The correct answer is Roget Close. where customs seems found is a weakly-phrased location-questioning quip. The printed name is "where customs is found". The true-name is "where customs seems found". - Understand "is" or "where there seems" as where customs seems found. The place-sought is "customs services". + Understand "is" or "where there seems" as where customs seems found. The place-sought is "customs services". [The mentions-list is {immigration, geography}.] It is background-information. The correct answer is Customs House. where post office seems found is a weakly-phrased location-questioning quip. The printed name is "where a post office is found". The true-name is "where post office seems found". - Understand "is" or "post office" or "postal" or "mail" or "postal/mail service" or "where there seems" as where post office seems found. The place-sought is "a post office". + Understand "is" or "post office" or "postal" or "mail" or "postal/mail service" or "where there seems" as where post office seems found. The place-sought is "a post office". [The mentions-list is {geography}.] It is background-information. The correct answer is Deep Street. where pharmacy seems found is a weakly-phrased location-questioning quip. The printed name is "where a pharmacy is found". The true-name is "where pharmacy seems found". - Understand "is" or "drugs" or "drug" or "druggist" or "chemist" or "chemists" or "where there seems" as where pharmacy seems found. The place-sought is "a pharmacy". + Understand "is" or "drugs" or "drug" or "druggist" or "chemist" or "chemists" or "where there seems" as where pharmacy seems found. The place-sought is "a pharmacy". [The mentions-list is {geography}.] It is background-information. The correct answer is Midway. where lodging seems found is a weakly-phrased location-questioning quip. The printed name is "where lodging is found". - The true-name is "where lodging seems found". - Understand "is" or "hostel" or "lodgings" or "where there seems" as where lodging seems found. The place-sought is "lodging for the night". + The true-name is "where lodging seems found". + Understand "is" or "hostel" or "lodgings" or "where there seems" as where lodging seems found. The place-sought is "lodging for the night". [The mentions-list is {geography}.] It is background-information. The correct answer is Hostel. @@ -493,14 +493,14 @@ Instead of discussing where lodging seems found when location is dormitory: where there seems hotel is a weakly-phrased location-questioning quip. The printed name is "where there is a hotel". The true-name is "where there seems hotel". - Understand "is" or "a" or "fleur" or "d'or" as where there seems hotel. The place-sought is "a hotel". + Understand "is" or "a" or "fleur" or "d'or" as where there seems hotel. The place-sought is "a hotel". [The mentions-list is {geography}.] It is background-information. The correct answer is Fleur d'or. where there seems Arbot is a weakly-phrased location-questioning quip. The printed name is "where to find Arbot Maps & Antiques". The true-name is "where there seems Arbot". - Understand "is" or "Arbot" or "antiques" or "an" or "store" or "shop" or "arbots" or "arbot's" or "maps" or "&" as where there seems arbot. The place-sought is "an antiques store". + Understand "is" or "Arbot" or "antiques" or "an" or "store" or "shop" or "arbots" or "arbot's" or "maps" or "&" as where there seems arbot. The place-sought is "an antiques store". [The mentions-list is {geography}.] It is background-information. The correct answer is Arbot Maps & Antiques. @@ -513,7 +513,7 @@ Instead of discussing where there seems Arbot when the location is Arbot Maps & where there seems cinema is a weakly-phrased location-questioning quip. The printed name is "where there is a cinema". The true-name is "where there seems cinema". - Understand "is" or "a" or "cinema" as where there seems cinema. The place-sought is "a cinema". + Understand "is" or "a" or "cinema" as where there seems cinema. The place-sought is "a cinema". [The mentions-list is {geography}.] It is background-information. The correct answer is Cinema. @@ -526,7 +526,7 @@ Instead of discussing where there seems cinema when the location is the cinema l where there seems pub is a weakly-phrased location-questioning quip. The printed name is "where there is a pub". The true-name is "where there seems pub". - Understand "is" or "a" or "bar" as where there seems pub. The place-sought is "a pub". + Understand "is" or "a" or "bar" as where there seems pub. The place-sought is "a pub". [The mentions-list is {geography, counterfeit monkey-as-subject}.] It is background-information. The correct answer is Counterfeit Monkey. @@ -1442,7 +1442,7 @@ buy the wrap is a purchasing quip. It quip-supplies the clerk. Carry out the clerk discussing buy the wrap: - move the wrap to the player; + move the wrap to the player; say "The clerk takes the wrap out of the case and puts it on the table for us." Availability rule for buy the pocket-bread: @@ -1564,13 +1564,13 @@ Does the player mean doing something to the gimlets: Does the player mean doing something to the nails: it is very unlikely. -Does the player mean doing something to the screwdriver when location is Fleur d'Or Drinks Club: +Does the player mean doing something to the screwdriver when location is Fleur d'Or Drinks Club: it is very likely. -Does the player mean doing something to the gimlet when location is Fleur d'Or Drinks Club: +Does the player mean doing something to the gimlet when location is Fleur d'Or Drinks Club: it is very likely. -Does the player mean doing something to the nail when location is Fleur d'Or Drinks Club: +Does the player mean doing something to the nail when location is Fleur d'Or Drinks Club: it is very likely. Carry out the bartender discussing buy the screwdriver: @@ -1642,9 +1642,9 @@ Rule for printing the name of rusty nail while looking at the rusty-nail-drink t say "metallic kind of rusty nail". Rule for printing the name of rusty-nail-drink while looking at the rusty-nail-drink through something: say "rusty nail cocktail". -Rule for printing the name of screwdriver while looking at the screwdriver-drink through something: +Rule for printing the name of screwdriver while looking at the screwdriver-drink through something: say "tool form of screwdriver". -Rule for printing the name of screwdriver-drink while looking at the screwdriver-drink through something: +Rule for printing the name of screwdriver-drink while looking at the screwdriver-drink through something: say "screwdriver cocktail". Rule for printing the name of gimlet while looking at the gimlet-drink through something: say "tool form of gimlet". @@ -2331,7 +2331,7 @@ whether crime could ever be justified is a questioning quip. The comment is "'Hy whether the government seems just is a questioning quip. The printed name is "whether the government is just". The true-name is "whether the government seems just". - Understand "is" as whether the government seems just. The comment is "'Do you think the government is just?'". + Understand "is" as whether the government seems just. The comment is "'Do you think the government is just?'". [The mentions-list is {bureau, legislation}.] The reply is "'What, here? Of course. We had universal suffrage before lots of places, right?' he says, counting off on his fingers. '1877. And we never had slavery. Plus there is very little poverty and there's a high standard of living. Good health care. No complaints here.'". It quip-supplies the ticket-taker. @@ -2339,7 +2339,7 @@ whether the government seems just is a questioning quip. whether immigration laws seem fair is a questioning quip. The printed name is "whether immigration laws are fair". The true-name is "whether immigration laws seem fair". - Understand "are" as whether immigration laws seem fair. The comment is "'Do you think our immigration laws are fair?'". + Understand "are" as whether immigration laws seem fair. The comment is "'Do you think our immigration laws are fair?'". [The mentions-list is {immigration, legislation, bureau}.] The reply is "'They seem like they're working,' he says. 'I don't really give that kind of thing a lot of thought, but, I've never met someone who seemed like they shouldn't have been let in, you know?'". It quip-supplies the ticket-taker. @@ -2350,7 +2350,7 @@ Definition: whether he hath ever been in trouble alongside law is civic: whether he hath ever been in trouble alongside law is a questioning quip. The printed name is "whether he has ever been in trouble with the law". The true-name is "whether he hath ever been in trouble alongside law". - Understand "has" or "with" as whether he hath ever been in trouble alongside law. The comment is "'Have you ever had any run-ins with the law?'". + Understand "has" or "with" as whether he hath ever been in trouble alongside law. The comment is "'Have you ever had any run-ins with the law?'". [The mentions-list is {security, legislation, crime}.] The reply is "'That's kind of none of your business, isn't it?'". It quip-supplies the ticket-taker. @@ -2381,7 +2381,7 @@ Instead of saying no when the current interlocutor is the ticket-taker and expla explain that we hath a recorder is a performative quip. The printed name is "explain that we have a recorder". The true-name is "explain that we hath a recorder". - Understand "have" as explain that we hath a recorder. The comment is "'I'm, ah, recording all of this. Makes it easier not to have to write things down during the survey. More scientific, too.'". + Understand "have" as explain that we hath a recorder. The comment is "'I'm, ah, recording all of this. Makes it easier not to have to write things down during the survey. More scientific, too.'". [The mentions-list is {yourself}.] The reply is "'Uh... okay.'". It quip-supplies the ticket-taker. @@ -2389,7 +2389,7 @@ explain that we hath a recorder is a performative quip. we seem curious is an informative quip. The printed name is "we are curious". The true-name is "we seem curious". - Understand "are" as we seem curious. The comment is "'No, not exactly. I was just curious about what you thought,' we say.". + Understand "are" as we seem curious. The comment is "'No, not exactly. I was just curious about what you thought,' we say.". [The mentions-list is {yourself}.] The reply is "'...huh.'". It quip-supplies the ticket-taker. @@ -2443,7 +2443,7 @@ mutual-embarrassment is an NPC-directed quip. assure him that we seem not hitting on him is a performative quip. The printed name is "assure him that we are not hitting on him". The true-name is "assure him that we seem not hitting on him". - Understand "are" as assure him that we seem not hitting on him. The comment is "You laugh. 'Sorry, no, I wasn't asking you out[forget you-hit-on],' you say. 'I'm sure she's a lucky girl, but I'd be robbing the cradle just a little.'". + Understand "are" as assure him that we seem not hitting on him. The comment is "You laugh. 'Sorry, no, I wasn't asking you out[forget you-hit-on],' you say. 'I'm sure she's a lucky girl, but I'd be robbing the cradle just a little.'". [The mentions-list is { yourself, ticket-taker }.] The reply is "'Heh. Heh. Yeah. Heh.' He's not meeting our eye and his face is going even redder than it was before, but I can't think what else you could have said there. Except, of course, for the option of leaving the poor guy alone, since this is hardly germane to our mission.". It quip-supplies the ticket-taker. @@ -2451,7 +2451,7 @@ assure him that we seem not hitting on him is a performative quip. about what his girlfriend seems like is a questioning quip. The printed name is "what his girlfriend is like". The true-name is "what his girlfriend seems like". - Understand "is" as what his girlfriend seems like. The comment is "'What's she like, your girlfriend?'". + Understand "is" as what his girlfriend seems like. The comment is "'What's she like, your girlfriend?'". [The mentions-list is { romance, ticket-taker }.] The reply is "'Uh... she's blonde, about this tall' (he holds his hand at the height of his own shoulder) 'and she has two sisters. And she really likes collecting perfumes. She wants to be a perfume designer when we're older. Or I think there's another name for it.'". It quip-supplies the ticket-taker. @@ -2485,24 +2485,24 @@ An availability rule for where my backpack seems: where my backpack seems is an unlisted questioning quip. The printed name is "where my backpack is". The true-name is "where my backpack seems". - Understand "is" or "pack" or "lost" as where my backpack seems. The comment is "'I left my pack in the cinema,' we say. 'Can I just go in and fetch it? I'll come right back out. No need for a ticket.'". + Understand "is" or "pack" or "lost" as where my backpack seems. The comment is "'I left my pack in the cinema,' we say. 'Can I just go in and fetch it? I'll come right back out. No need for a ticket.'". [The mentions-list is {backpack}.] The reply is "He scowls. 'We've been getting a lot of people trying to scam us,' he says. 'So I'm going to say no.'". It quip-supplies the ticket-taker. -An availability rule for argue about lost plus found policy: +An availability rule for argue about lost plus found policy: if the player encloses the backpack: it is off-limits; if the ticket-taker knows allowed-in-movie: it is off-limits. -argue about lost plus found policy is a performative quip. - The printed name is "argue about the lost and found policy". The true-name is "argue about lost plus found policy". - Understand "and" as argue about lost plus found policy. The comment is "'That's ridiculous. I'll be right back out!'". +argue about lost plus found policy is a performative quip. + The printed name is "argue about the lost and found policy". The true-name is "argue about lost plus found policy". + Understand "and" as argue about lost plus found policy. The comment is "'That's ridiculous. I'll be right back out!'". [The mentions-list is {yourself, backpack}.] The reply is "'We clean the theater between showings,' he says bullishly. 'So if you had left something in there, we would have found it. You must have left your stuff somewhere else.'". It quip-supplies the ticket-taker. - It directly-follows where my backpack seems. + It directly-follows where my backpack seems. Availability rule for demonstrate lost backpack: if the player does not enclose the backpack: @@ -2513,7 +2513,7 @@ demonstrate the lost backpack is a performative quip. [The mentions-list is {backpack}.] The reply is "'Uh... the person who cleaned before me must've been a little bit careless,' he says. Right.". It quip-supplies the ticket-taker. - It indirectly-follows argue about lost plus found policy + It indirectly-follows argue about lost plus found policy Before discussing buy movie-ticket when the player encloses the ticket: say "Oh, doesn't that seem a waste? We have a nice fake ticket that we didn't have to spend any money on. Maybe money's like water to you.... @@ -2739,7 +2739,7 @@ Did they indeed? I wonder who that could have been, hm?". whether there seem beds available is a questioning quip. The printed name is "whether there are beds available". The true-name is "whether there seem beds available". - Understand "are" or "bed" or "space" or "room" as whether there seem beds available. The comment is "'Are there free beds for the evening?'". + Understand "are" or "bed" or "space" or "room" as whether there seem beds available. The comment is "'Are there free beds for the evening?'". The reply is "'Sure,' she says. 'You can go up and claim whichever free one you like. The hostel won't really fill up until this evening.'". It quip-supplies the attendant. It is background-information. @@ -2751,7 +2751,7 @@ who would do this is a questioning quip. It quip-supplies the attendant. It directly-follows whether there seems an internet connection nearby. -what other group was like is an unlisted questioning quip. The comment is "'Was there anything interesting about the other group? The three guys?' I'm starting to see how much you enjoy playing off your own cleverness. I just hope it doesn't get us caught.". +what other group was like is an unlisted questioning quip. The comment is "'Was there anything interesting about the other group? The three guys?' I'm starting to see how much you enjoy playing off your own cleverness. I just hope it doesn't get us caught.". [The mentions-list is {internet}.] The reply is "She shrugs. That sounds like a no, then.". It quip-supplies the attendant. @@ -2838,7 +2838,7 @@ She's missing the point entirely, of course: Serial Comma Day celebrates the ado Oh, all right, I'll stop. But you should hear Professor Waterstone on this topic." -what she recommends seeing in city is a questioning quip. The comment is "'So, is there stuff I really should see around here? The best of the city, or something?'". +what she recommends seeing in city is a questioning quip. The comment is "'So, is there stuff I really should see around here? The best of the city, or something?'". [The mentions-list is {entertainment}.] The reply is "'I'm not, like, a concierge,' she says. 'If you came to town you must have had a reason, right? Plus you can maybe pick up a map somewhere around here[if the guidebook is not enclosed by the player], or we usually have a guidebook or two lying around that someone left[end if].'". It quip-supplies the attendant. @@ -2938,7 +2938,7 @@ The greeting of backpacking girl is "'Greetings, fellow traveler!'" whether she seems really from canada is a questioning quip. The printed name is "whether she is really from Canada". The true-name is "whether she seems really from canada". - Understand "is" or "canadian" as whether she seems really from canada. The comment is "'So,' we say, nodding at the pack. 'Are you really Canadian?'". + Understand "is" or "canadian" as whether she seems really from canada. The comment is "'So,' we say, nodding at the pack. 'Are you really Canadian?'". [The mentions-list is {heavy pack}.] The reply is "'Uh, no. I come from Ohio[fake-canada]. But don't tell anyone that. My mom thought this would be safer in case of terrorists. She's also worried about serial killers but there's not much I can do about that.'". It quip-supplies the backpacking girl. @@ -3187,7 +3187,7 @@ Carry out discussing ask for privacy: whether she had trouble alongside customs is a questioning quip. The printed name is "whether she had trouble with customs". The true-name is "whether she had trouble alongside customs". - Understand "with" as whether she had trouble alongside customs. The comment is "'How was coming through Customs?' we ask. 'Any trouble there?'". + Understand "with" as whether she had trouble alongside customs. The comment is "'How was coming through Customs?' we ask. 'Any trouble there?'". [The mentions-list is {immigration}.] The reply is "'Not really. There were a few people in line, and they made me take all my stuff out of my backpack... and this one guy I saw them take away into a back room, and I don't think he ever came out again. But, uh, they were nice enough to me I guess. I was expecting worse.'". It quip-supplies the backpacking girl. @@ -3320,7 +3320,7 @@ my mother is a woman. remind the gift shop volunteer that Mrs Rosehip seems married is a performative quip. The printed name is "remind the gift shop volunteer that [Mrs] Rosehip is married". The true-name is "remind the gift shop volunteer that Mrs Rosehip seems married". - Understand "is" or "dad" or "father" or "my father" or "my dad" or "your father" or "your dad" or "remind him" as remind gift shop volunteer that Mrs Rosehip seems married. + Understand "is" or "dad" or "father" or "my father" or "my dad" or "your father" or "your dad" or "remind him" as remind gift shop volunteer that Mrs Rosehip seems married. [The mentions-list is {my mother}.] The comment is "'My mother[--]' we begin, before you catch me. @@ -3528,7 +3528,7 @@ whether this liquid will be water is a questioning quip. The reply is "Her eyebrows crinkle together. 'Yes [--] well, maybe,' she says. 'Why?'". It quip-supplies the activist. It is restrictive. - It indirectly-follows how campaign will address problems of visualization. + It indirectly-follows how campaign will address problems of visualization. whether this liquid will also be flavorless is a questioning quip. Understand "flavor" or "flavour" or "flavourless" as whether this liquid will also be flavorless. @@ -3574,7 +3574,7 @@ explain about our plans is a performative quip. It quip-supplies the activist. It directly-follows point out that being from Language Studies does not make us wrong. -Report smiling when the current interlocutor is the activist and the current quip is not explain about our plans: +Report smiling when the current interlocutor is the activist and the current quip is not explain about our plans: say "[We] smile, a little more broadly than usual[one of][or]. So I think she's cute[stopping]." instead. Report smiling when the current quip is explain about our plans and the current interlocutor is the activist: @@ -3676,7 +3676,7 @@ The greeting of the barman is "[one of]'Help you?' asks Parker the barman unenth whether he hath seen slango is a questioning quip. The printed name is "whether he has seen Slango". The true-name is "whether he hath seen slango". - Understand "has" or "parker" or "barman" or "bartender" as whether he hath seen slango. The comment is "'I wonder whether you've seen an associate of mine,' we say to Parker. 'Name of Slango.'". + Understand "has" or "parker" or "barman" or "bartender" as whether he hath seen slango. The comment is "'I wonder whether you've seen an associate of mine,' we say to Parker. 'Name of Slango.'". [The mentions-list is {Slango}.] The reply is "Parker looks over the bar at us. 'He comes in here from time to time,' he says. 'Very regular customer. Always has about three rum and cokes.' [paragraph break]This is a lie, and therefore a test. Slango doesn't drink alcohol himself and doesn't permit drunkenness in his crew.". It quip-supplies the barman. @@ -3727,7 +3727,7 @@ Instead of subject-asking the origin paste when the origin paste is not won: whether we can hath the origin paste is a questioning quip. The printed name is "whether we can have the Origin Paste". The true-name is "whether we can hath origin paste". - Understand "have" as whether we can hath origin paste. The comment is "'That Origin Paste for sale?' ". + Understand "have" as whether we can hath origin paste. The comment is "'That Origin Paste for sale?' ". [The mentions-list is {origin paste}.] The reply is "'Well now,' he says, grinning, 'that would surely be illegal, would it not? Origin Paste is after all a controlled substance in this country, due to its unhappy association with fraudulent activities. On the other hand there is no law against someone [i]winning[/i] the Origin Paste in a completely legitimate game of chance or skill.'". It quip-supplies the barman. @@ -3933,7 +3933,7 @@ Time up is an NPC-directed quip. complain that the game seems unfair is a performative quip. The printed name is "complain that the game is unfair". The true-name is "complain that the game seems unfair". - Understand "is" as complain that the game seems unfair. The comment is "'This game is unfair,' we say. 'You're the moderator, but you have a vested interest in the defender continuing to win, because you get half the ante every time!'". + Understand "is" as complain that the game seems unfair. The comment is "'This game is unfair,' we say. 'You're the moderator, but you have a vested interest in the defender continuing to win, because you get half the ante every time!'". [The mentions-list is {origin paste}.] The reply is "'The house puts up the stakes, remember,' he says. 'But the Counterfeit Monkey has been running this game for years, and would people keep coming back to play if it were rigged?' [paragraph break]Of course, the regulars usually play def[ense] and newcomers offense, which makes the game into a device for fleecing strangers for the benefit of the bar and its usual patrons. But sometimes someone is allowed to win, if they're clever.". It quip-supplies the barman. @@ -3950,14 +3950,14 @@ Availability rule for whether he hath any other games going: whether he hath any other games going is a questioning quip. The printed name is "whether he has any other games going". The true-name is "whether he hath any other games going". - Understand "has" or "parker/barman" as whether he hath any other games going. The comment is "'So, is there anything else I can win? Any other games going?'". + Understand "has" or "parker/barman" as whether he hath any other games going. The comment is "'So, is there anything else I can win? Any other games going?'". [The mentions-list is {paste}.] The reply is "Parker laughs. 'Not until tomorrow, kid,' he says. 'We only run one game a day.'". It quip-supplies the barman. -how long he hath worked at bar is a questioning quip. - The printed name is "how long he has worked at the bar". The true-name is "how long he hath worked at bar". - Understand "has" as how long he hath worked at bar. The comment is "'How long have you been working at this pub?' we ask. 'And do you like it?'". +how long he hath worked at bar is a questioning quip. + The printed name is "how long he has worked at the bar". The true-name is "how long he hath worked at bar". + Understand "has" as how long he hath worked at bar. The comment is "'How long have you been working at this pub?' we ask. 'And do you like it?'". [The mentions-list is {employment}.] The reply is "He wrinkles his nose. 'Word of advice: don't go around asking questions like that down here,' he says.". It quip-supplies the barman. @@ -4196,9 +4196,9 @@ Report Slango saying goodbye to the player: now brock-bed is triggered. -Test Slango with "tutorial off / deparker / z / t who / laugh / snicker / snicker" in the Counterfeit Monkey. +Test Slango with "tutorial off / deparker / z / t who / laugh / snicker / snicker" in the Counterfeit Monkey. -Test Slango2 with "tutorial off / deparker / z / t who / explain / snicker / snicker" in the Counterfeit Monkey. +Test Slango2 with "tutorial off / deparker / z / t who / explain / snicker / snicker" in the Counterfeit Monkey. @@ -4221,7 +4221,7 @@ A plausibility rule for whether she hath seen slango when the player knows lena- whether she hath seen slango is a questioning quip. The printed name is "whether she has seen Slango". The true-name is "whether she hath seen slango". - Understand "has" or "Lena" as whether she hath seen slango. The comment is "[one of]'You wouldn't happen to have seen Slango about recently?' we ask.[or][if Lena does not know trust-me]'I'm still curious about Slango. Seen him?'[otherwise]'Now, you owe me one Slango,' you say. 'Where'd he get to?'[end if][stopping]". + Understand "has" or "Lena" as whether she hath seen slango. The comment is "[one of]'You wouldn't happen to have seen Slango about recently?' we ask.[or][if Lena does not know trust-me]'I'm still curious about Slango. Seen him?'[otherwise]'Now, you owe me one Slango,' you say. 'Where'd he get to?'[end if][stopping]". [The mentions-list is {Slango}.] The reply is "'Slango and I were catching up. Bless that man, he's hung like a yak,' she says. 'But he got bad news and had to hurry back to the yacht. Said something about not being able to keep an appointment. I take it you're the appointment? I can try reaching him for you, if you want.'". It quip-supplies Lena. @@ -4230,7 +4230,7 @@ whether she hath seen slango is a questioning quip. who we seem-3 is an informative quip. The printed name is "who we are". The true-name is "who we seem-3". - Understand "are" as who we seem-3. The comment is "'Lena, it's Andra. And company. Maybe Slango mentioned that I was auditioning a new silent partner.'". + Understand "are" as who we seem-3. The comment is "'Lena, it's Andra. And company. Maybe Slango mentioned that I was auditioning a new silent partner.'". [The mentions-list is {yourself}.] The reply is "[lena-distrusts]'I don't know what you're talking about,' she says. 'But since you're here, whoever you are, I wonder whether you'd like to have a look at some merchandise of mine that could use a spruce.' [paragraph break]Aha. She wants us to prove our identity; probably has contraband that needs concealing, and wants us to do the deed as proof of trustworthiness[queue offer-contraband as immediate obligatory].". It quip-supplies Lena. @@ -4411,7 +4411,7 @@ that-does-it is an NPC-directed quip. The reply is "'Perfect,' Lena says, regarding her contraband possessions with satisfaction[trust-me]. 'Welcome back, Andra and Guest[queue whether she hath seen slango].'" Instead of saying yes when current interlocutor is Lena and encourage Lena to contact slango is available: - try discussing encourage Lena to contact slango; + try discussing encourage Lena to contact slango; Instead of saying no when current interlocutor is Lena and encourage Lena to contact slango is available: say "Are you mad? That's exactly what we need her to do."; @@ -4574,7 +4574,7 @@ Carry out Professor Brown discussing whether he can fix the letter-remover: why reifying living creatures seems cruel is a questioning quip. The printed name is "why reifying living creatures is cruel". The true-name is "why reifying living creatures seems cruel". - Understand "is" as why reifying living creatures seems cruel. The comment is "'Why would it be cruel to make a living creature?' you ask.". + Understand "is" as why reifying living creatures seems cruel. The comment is "'Why would it be cruel to make a living creature?' you ask.". [The mentions-list is {letter-remover}.] The reply is "'We don't know whether such creations have awareness and sensation like other creatures,' he says. 'If they do, it is horrible to bring them into existence only to send them out again.'". It quip-supplies Professor Brown. @@ -4691,9 +4691,9 @@ Instead of saying yes when the current interlocutor is Professor Higgate and tha Every turn when the current interlocutor is Professor Higgate and we do not speak lojban is available: - try discussing we do not speak lojban. + try discussing we do not speak lojban. -that we do not speak Lojban is an unlisted informative quip. Understand "no" as that we do not speak Lojban. +that we do not speak Lojban is an unlisted informative quip. Understand "no" as that we do not speak Lojban. [The mentions-list is {constructed language}.] The comment is "'I'm afraid I don't understand,' we say, smiling faintly.". The reply is "Her face falls. 'Ah! I was hoping you'd be here for Conversational Lojban Tea.' The room is conspicuously lacking other Lojban conversationalists.[queue cucumber regret]". @@ -4834,7 +4834,7 @@ if we can take the paint is a questioning quip. [The mentions-list is {paint}.] The reply is "'Oh! Well, that's very kind of you. Make sure you do it properly!'". It quip-supplies Professor Higgate. - It indirectly-follows whether she needs paint. + It indirectly-follows whether she needs paint. Carry out Professor Higgate discussing if we can take the paint: now the paint is released. @@ -4848,8 +4848,8 @@ availability rule for whether she seems sure she doesn't want the pint: it is off-limits. whether she seems sure she doesn't want the pint is a weakly-phrased questioning quip. - The printed name is "whether she is sure she doesn't want the pint". The true-name is "whether she seems sure she doesn't wantthe pint". - Understand "is" as whether she seems sure she doesn't want the pint. The comment is "'You're sure I can't tempt you with this nice pint?'". + The printed name is "whether she is sure she doesn't want the pint". The true-name is "whether she seems sure she doesn't want the pint". + Understand "is" as whether she seems sure she doesn't want the pint. The comment is "'You're sure I can't tempt you with this nice pint?'". [The mentions-list is {pint}.] The reply is "'Perfectly,' she says. 'Tea and water for me.'". It quip-supplies Professor Higgate. @@ -4863,7 +4863,7 @@ paint-recycling is an NPC-directed quip. which conlangs she kens is a questioning quip. The printed name is "which conlangs she knows". The true-name is "which conlangs she kens". - Understand "knows" or "what" or "languages" or "language" as which conlangs she kens. The comment is "'Which conlangs do you know, then?'". + Understand "knows" or "what" or "languages" or "language" as which conlangs she kens. The comment is "'Which conlangs do you know, then?'". [The mentions-list is {constructed language}.] The reply is "'Esperanto, Volapük, and Lojban, naturally,' she says. 'Interlingua, a bit of Fukhian,' (she is careful to pronounce the h sound), '...Quenya, Klingon, Royeship, Toki Pona... and several others in which I am not fluent enough to speak, but know well enough for the purposes of study.'". It quip-supplies Professor Higgate. @@ -4916,7 +4916,7 @@ whether he met the activists is a questioning quip. what he kens about me is an unlisted questioning quip. The printed name is "what he knows about me". The true-name is "what he kens about me". - Understand "knows" as what he kens about me. The comment is "'Actually, I did wonder: do you have a student named Alex Rosehip? One of the teaching assistants, I think?'". + Understand "knows" as what he kens about me. The comment is "'Actually, I did wonder: do you have a student named Alex Rosehip? One of the teaching assistants, I think?'". [The mentions-list is {yourself}.] The reply is "He looks at us with an unusually keen stare. 'He is an advisee of mine,' says Waterstone. 'A bright scholar, but I fear that he has taken on board some dubious ideas about the [i]applications[/i] of what we study. I would suggest that you take anything he may have said to you with a grain of salt.'". It quip-supplies Professor Waterstone. @@ -4927,7 +4927,7 @@ Availability rule for why he seems working on Serial Comma Day: why he seems working on Serial Comma Day is a questioning quip. The printed name is "why he is working on Serial Comma Day". The true-name is "why he seems working on Serial Comma Day". - Understand "is" or "professor" or "waterstone" as why he seems working on serial comma day. The comment is "'Why are you in today?' we ask. 'Isn't it a holiday?'". + Understand "is" or "professor" or "waterstone" as why he seems working on serial comma day. The comment is "'Why are you in today?' we ask. 'Isn't it a holiday?'". [The mentions-list is {Waterstone, celebration}.] The reply is "'The pursuit of knowledge does not occur according to the calendar,' he says. Then he adds, 'And my wife is having the carpets shampooed[carpets-shampooed] and kicked me out of the house.'". It quip-supplies Professor Waterstone. @@ -5064,7 +5064,7 @@ First conversation-reply rule when the current interlocutor is Brock: casually queue good-abstracts; otherwise if Brock is not urgently eager-to-speak and "Test T-inserter on making creatures" is completed and Brock does not recollect seems-lifelike: casually queue seems-lifelike; - otherwise if Brock is not urgently eager-to-speak and "Test T-inserter on situations where it could build more than one thing" is completed and Brock does not recollect stability-results: + otherwise if Brock is not urgently eager-to-speak and "Test T-inserter on situations where it could build more than one thing" is completed and Brock does not recollect stability-results: casually queue stability-results. The random-commentary rule is listed after the character pursues own ideas rule in the conversation-reply rules. @@ -5105,7 +5105,7 @@ A Brock-suggestion rule when "Test T-inserter on making abstracts" is completed: try Brock discussing test-creatures; rule succeeds. -A Brock-suggestion rule when "Test T-inserter on making abstracts" is completed and "Test T-inserter on making creatures" is completed: +A Brock-suggestion rule when "Test T-inserter on making abstracts" is completed and "Test T-inserter on making creatures" is completed: if Brock does not recollect test-stability or a random chance of 1 in 3 succeeds: unless "Test T-inserter on situations where it could build more than one thing" is completed: carry out the beat-producing activity; @@ -5228,7 +5228,7 @@ defend Alex is a performative quip. [The mentions-list is {Brock, yourself}.] The reply is "'He's us,' Brock replies. 'Come on, let's just get this over with and get out of here. We can talk this all out when we're all feeling more like ourselves, okay?'". It quip-supplies Brock. - It directly-follows remind brock that synthesis was necessary because of him. + It directly-follows remind brock that synthesis was necessary because of him. accept his advice is a performative quip. The comment is "'Fine.' I can feel the adrenaline from your anger coursing through us. It makes me want to take a swing at something, but you have it under control.". @@ -5242,7 +5242,7 @@ An availability rule for discover why Brock got stuck here: it is off-limits; make no decision. -An availability rule for discover why Brock got stuck here: +An availability rule for discover why Brock got stuck here: if Brock-argument is not happening: it is off-limits; if the time since Brock-argument began is greater than 4 minutes: @@ -5257,7 +5257,7 @@ discover why Brock got stuck here is a performative quip. rejoice that brock seems okay is a performative quip. The printed name is "rejoice that Brock is okay". The true-name is "rejoice that brock seems okay". - Understand "is" as rejoice that brock seems okay. The comment is "'That was a lot narrower than I like,' you say. To my horror, we are tearing up a little. 'I thought you might be in Cold Storage already.'". + Understand "is" as rejoice that brock seems okay. The comment is "'That was a lot narrower than I like,' you say. To my horror, we are tearing up a little. 'I thought you might be in Cold Storage already.'". [The mentions-list is {yourself, Brock}.] The reply is "'Hey, hey. I'm here.' He puts an arm around our shoulder, hugs uncertainly[casually queue you-okay].". It quip-supplies Brock. @@ -5401,7 +5401,7 @@ Rule for listing plausible quips during Brock-argument: To say get-to-work: say "[one of]. Then again, we could just get to work so we can be out of here faster[or]. Maybe it's not worth it, though[or]. Or, then again, there's always finishing the job[stopping]". -Test Brockscene with "tutorial off / autoupgrade / unmonkey / open tub / gel rock / suggest we get out / insist / ask about buried command / wave g-remover at sign / put sin in the t-inserter / gel stint / wave g-remover at sign / wave s-remover at sin / i / put sin in t-inserter / wave s-remover at stint / wave n-remover at tint / wave t-remover at tit / put i in t-inserter / wave t-remover at tit / put i in t-inserter / get rock / i" holding the tub in the Equipment Testing. +Test Brockscene with "tutorial off / autoupgrade / unmonkey / open tub / gel rock / suggest we get out / insist / ask about buried command / wave g-remover at sign / put sin in the t-inserter / gel stint / wave g-remover at sign / wave s-remover at sin / i / put sin in t-inserter / wave s-remover at stint / wave n-remover at tint / wave t-remover at tit / put i in t-inserter / wave t-remover at tit / put i in t-inserter / get rock / i" holding the tub in the Equipment Testing. Table of Ultratests (continued) topic stuff setting @@ -5410,7 +5410,7 @@ topic stuff setting Test Misdirection with "tutorial off / autoupgrade /unmonkey / sw / n / w / e / open tub / gel rock / e" [holding the tub and the apple and the roll of bills and the piece in Bureau Secret Section.] -Test BrockAlt with "tutorial off / autoupgrade / unmonkey / open tub / gel rock / put seer in t-inserter / x automaton / turn on automaton / gel automaton / put seer in t-inserter / x automaton / turn on automaton/ x automaton / put the roll in the t-inserter / gel the troll / wave d-remover at chard / put char in t-inserter / wave c-remover at chart / wave r-remover at hart / get hat / x hat / wear hat / remove hat / put hat in t-inserter" [holding the tub and the seer automaton and the chard and the roll in the Equipment Testing.] +Test BrockAlt with "tutorial off / autoupgrade / unmonkey / open tub / gel rock / put seer in t-inserter / x automaton / turn on automaton / gel automaton / put seer in t-inserter / x automaton / turn on automaton/ x automaton / put the roll in the t-inserter / gel the troll / wave d-remover at chard / put char in t-inserter / wave c-remover at chart / wave r-remover at hart / get hat / x hat / wear hat / remove hat / put hat in t-inserter" [holding the tub and the seer automaton and the chard and the roll in the Equipment Testing.] Instead of putting gel on the rock when Brock-argument has happened and Brock-argument has ended and Cold Dilemma has not happened: say "No, we leave him in rock form for now. One of us will have an easier time slipping out than two." @@ -5568,7 +5568,7 @@ I know you think it's a bit sketchy that my mother just walks into my apartment claim to hath seen him this morning is a performative quip. The printed name is "claim to have seen him this morning". The true-name is "claim to hath seen him this morning". - Understand "have" as claim to hath seen him this morning. The comment is "'He went out to, ah, do some research, I think. He left before I was completely awake.' (Thanks, now you've given my mother the impression that I'm a cad.)". + Understand "have" as claim to hath seen him this morning. The comment is "'He went out to, ah, do some research, I think. He left before I was completely awake.' (Thanks, now you've given my mother the impression that I'm a cad.)". [The mentions-list is {romance}.] The reply is "She looks at the disheveled futon[if the futon is non-empty], with [the list of things *in the futon] still arranged on it[end if], and her expression becomes even more unreadable. 'I did think I'd taught my son better manners,' she remarks. 'I apolog[ize] on his behalf.'". It quip-supplies My mother. @@ -5579,7 +5579,7 @@ Instead of shrugging when my mother is marked-visible and we don't ken is availa we don't ken is an informative quip. The printed name is "we don't know". The true-name is "we don't ken". - Understand "know" as we don't ken. The comment is "'I don't know,' we say.". + Understand "know" as we don't ken. The comment is "'I don't know,' we say.". [The mentions-list is {yourself}.] The reply is "'A communicative couple, then,' she says dryly. My mother has never been very nice to girlfriends she considered stupid.". It quip-supplies My mother. @@ -5635,8 +5635,8 @@ explain we might go out is a performative quip. It is restrictive. It directly-follows not-planning-dinner. -Instead of shrugging when my mother is marked-visible and claim he didn't say is available: - try discussing claim he didn't say . +Instead of shrugging when my mother is marked-visible and claim he didn't say is available: + try discussing claim he didn't say . claim he didn't say is a weakly-phrased performative quip. The comment is "'Er... he didn't tell me. I assume he'll explain later.'". @@ -5835,7 +5835,7 @@ that it's one of those things atlanteans learn is an informative quip. what-atlantis is a questioning quip. The printed name is "what he is doing in Atlantis". The true-name is "what-atlantis". - Understand "what" or "he" or "nexami" or "engeo" or "is" or "doing" or "Atlantis" or "in Atlantis" as what-atlantis. The comment is "'So, what are you doing in Atlantis?'". + Understand "what" or "he" or "nexami" or "engeo" or "is" or "doing" or "Atlantis" or "in Atlantis" as what-atlantis. The comment is "'So, what are you doing in Atlantis?'". [The mentions-list is {Nexami}.] The reply is "'Doing a show tonight,' he says. 'Up on the City Walls.' This is only partly a lie: you know that his main business in town is some sort of computer science contract, and that it's largely cover that his band is playing in the Serial Comma Day festivities.". It quip-supplies Nexami Engeo. @@ -6128,7 +6128,7 @@ Atlantida [one of]rolls her eyes and fires the weapon, hitting the lady speaking Sanity-check going east in the presence of atlantida-woman: say "[We] would have to get through her first." instead. -After attacking atlantida-woman with something when Atlantida-woman carries the restoration-gel rifle: +After attacking atlantida-woman with something when Atlantida-woman carries the restoration-gel rifle: if the second noun is proffered by Brock: continue the action; if the second noun is proffered by something which is not the second noun: @@ -6140,7 +6140,7 @@ After attacking atlantida-woman with something when Atlantida-woman carries the Report attacking atlantida-woman with the leaf: say "[We] wield the leaf like a dagger[one of] and slice across her arm, drawing blood. She recoils, angry but not deterred[or]. This time [we] don't manage to land another blow[stopping]." instead. -Report attacking atlantida-woman with something: +Report attacking atlantida-woman with something: say "[one of][We] swing [the second noun] at her, but can't quite reach. She's keeping her distance[or]Closing some of the distance, [we] try a slash of [the second noun]. She leaps backward[or][We] lunge with [the second noun], but she dodges[cycling]." instead. Instead of throwing something at atlantida-woman: @@ -6172,7 +6172,7 @@ topic stuff setting "missiles" { rock, page, sword, secret-plans, iron-pans, ire } -- "attacks" { sword, foil, stick, sill, leaf, slat, track, warm rods, wand batch, swordstick, crosspiece } -- -Test oracle with "tutorial off / autoupgrade / unmonkey / load gun / wave h-remover at power chord / open tub / look / x paintings / x charts / x fable / gel paperweight / gel fable / look up 1942 in cabinet / look up 1982 in cabinet / look up 1962 in cabinet / look up 1958 / look up 1964 / look up 2003 / look up 1983 in cabinet / x paper / x weight / get weight / e / e / e / put pastis in bucket / go to workshop / plug in cord / go to surveillance / d / get counter / go to workshop / put counter and weight on dais / turn switch / pull lever / get counterweight / go to tunnel / put counterweight on hook / pull counterweight / e" [in the Oracle holding the anagramming gun and the bullets and the power chord and the pastis and the tub.] +Test oracle with "tutorial off / autoupgrade / unmonkey / load gun / wave h-remover at power chord / open tub / look / x paintings / x charts / x fable / gel paperweight / gel fable / look up 1942 in cabinet / look up 1982 in cabinet / look up 1962 in cabinet / look up 1958 / look up 1964 / look up 2003 / look up 1983 in cabinet / x paper / x weight / get weight / e / e / e / put pastis in bucket / go to workshop / plug in cord / go to surveillance / d / get counter / go to workshop / put counter and weight on dais / turn switch / pull lever / get counterweight / go to tunnel / put counterweight on hook / pull counterweight / e" [in the Oracle holding the anagramming gun and the bullets and the power chord and the pastis and the tub.] Test missiles with "establish / throw rock at Atlantida / throw paper at atlantida / throw plans at atlantida / throw sword at atlantida / throw tub at atlantida / throw pans at atlantida / throw ire at atlantida" [holding the rock and the page and the sword and the secret-plans and the iron-pans and the ire.] @@ -6285,7 +6285,7 @@ topic stuff setting "almostlast" { anagramming gun, bullets, tub, counterweight } The Tunnel "lastmeeting" { anagramming gun, bullets, tub } Personal Apartment -Test almostlast with "tutorial off / establish / unlegend / load gun / put counterweight on hook / open tub / open portcullis / go through portcullis / x files / z / a cold storage / look / shoot anagramming gun at gel rifle / look / gel astrologer / shoot gel rifle at atlantida" [in the Tunnel holding the anagramming gun and the bullets and the tub and the counterweight.] +Test almostlast with "tutorial off / establish / unlegend / load gun / put counterweight on hook / open tub / open portcullis / go through portcullis / x files / z / a cold storage / look / shoot anagramming gun at gel rifle / look / gel astrologer / shoot gel rifle at atlantida" [in the Tunnel holding the anagramming gun and the bullets and the tub and the counterweight.] Test lastmeeting with "tutorial off / establish / unlegend / load gun / open tub / x files / a cold storage / look / shoot anagramming gun at gel rifle / look / gel astrologer / shoot gel rifle at atlantida" [in the Personal Apartment holding the anagramming gun and the tub.] diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Approaching Speedups.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Approaching Speedups.i7x index 879f4263..66a221c5 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Approaching Speedups.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Approaching Speedups.i7x @@ -24,7 +24,7 @@ This is the even newer creating a path history rule: Carry out going to a forbidden room (called target): now the target is nonsecret. -Understand "go to [any nonsecret room]" or "goto [any nonsecret room]" or "go back to [any nonsecret room]" or "return to [any nonsecret room]" or "revisit [any nonsecret room]" as approaching. +Understand "go to [any nonsecret room]" or "goto [any nonsecret room]" or "go back to [any nonsecret room]" or "return to [any nonsecret room]" or "revisit [any nonsecret room]" as approaching. The tell the player when blocked at a door rule response (A) is "Unfortunately, [we] [find] [we] [lack] a key fitting [the locked-thing]."; diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x index 81a88834..eb1a56b8 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Dispensers.i7x @@ -99,19 +99,19 @@ Carry out waving the letter-remover at the soap dispenser creating the sap-dispe now the sap-liquid is proffered by the soap; move the soap to the repository. -Carry out waving the letter-remover at the soap dispenser creating the sop-dispenser when the soap is in the soap dispenser: +Carry out waving the letter-remover at the soap dispenser creating the sop-dispenser when the soap is in the soap dispenser: if the sop is in the repository: move the sop to the sop-dispenser; now the sop is proffered by nothing; now the sop is proffered by the soap; move the soap to the repository. -Carry out putting the gel on the sap-dispenser when the sap-liquid is in the sap-dispenser: +Carry out putting the gel on the sap-dispenser when the sap-liquid is in the sap-dispenser: if the soap is in the repository: move the soap to the soap dispenser; move the sap-liquid to the repository. -Carry out putting the gel on the sop-dispenser when the sop is in the sop-dispenser: +Carry out putting the gel on the sop-dispenser when the sop is in the sop-dispenser: if the soap is in the repository: move the soap to the soap dispenser; move the sop to the repository. diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Features of Created Objects.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Features of Created Objects.i7x index 0c44182d..35077798 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Features of Created Objects.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Features of Created Objects.i7x @@ -161,7 +161,7 @@ Sanity-check rubbing or squeezing or touching or waving or pulling or pushing or Sanity-check eating or drinking or tasting an r-abstract thing: say "[The noun] [are] too abstract to offer sustenance." instead. -Sanity-check pushing an r-abstract thing to a direction: +Sanity-check pushing an r-abstract thing to a direction: say "[The noun] [aren't] solid enough for that kind of treatment." instead. Sanity-check switching on or switching off an r-abstract thing: if the noun is a device: diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Initial Quip Positions.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Initial Quip Positions.i7x index dcd5cf3c..9d1f49c7 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Initial Quip Positions.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Initial Quip Positions.i7x @@ -89,7 +89,7 @@ assure him that we seem not hitting on him is in the backup-repository. what his girlfriend seems like is in the backup-repository. delay ticket-taker is in the backup-repository. where my backpack seems is in the backup-repository. -argue about lost plus found policy is in the backup-repository. +argue about lost plus found policy is in the backup-repository. demonstrate the lost backpack is in the backup-repository. buy movie-ticket is in the backup-repository. whether we can hath the scope is in the backup-repository. @@ -173,7 +173,7 @@ how one might go about winning is in the backup-repository. play the game is in the backup-repository. complain that the game seems unfair is in the backup-repository. whether he hath any other games going is in the backup-repository. -how long he hath worked at bar is in the backup-repository. +how long he hath worked at bar is in the backup-repository. what he thinks about the Bureau is in the backup-repository. whether he hates customs officials is in the backup-repository. whether he believes in god-2 is in the backup-repository. diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Intelligent Substitution.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Intelligent Substitution.i7x index fd1f49f3..f1191f6b 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Intelligent Substitution.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Intelligent Substitution.i7x @@ -96,8 +96,8 @@ Include score = score - 100; } - ! The letter-remover is not upgraded to create this. - ! Don't choose this. + ! The letter-remover is not upgraded to create this. + ! Don't choose this. if (contender ofclass (+ person +) && ~~(+ letter-remover +).(+ creature-enabled +)) { score = score - 100; diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Liquids.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Liquids.i7x index 9bc63fa6..94f48c9d 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Liquids.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Liquids.i7x @@ -23,7 +23,7 @@ Instead of taking an uncontained fluid thing (called the fluid): Understand "drink from [something]" as drinking. Sanity-check drinking a tap (called target tap): - if the subcommand of the target tap matches "water" or the player's command includes "from": + if the subcommand of the target tap matches "water" or the player's command includes "from": say "It may not be sanitary." instead. Sanity-check inserting something into a tap (called target tap): diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Loudness.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Loudness.i7x index c476fada..81048368 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Loudness.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Loudness.i7x @@ -93,7 +93,7 @@ Array noisy_things --> 10; i = MyFindNoiseMakerLoop(o.component_sibling, i); ! Don't look inside closed containers - if (child(o) && ~~(o has openable && o hasnt open) ) o = child(o); + if (child(o) && ~~(o has openable && o hasnt open) ) o = child(o); else while (o) { diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Memories.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Memories.i7x index 14a8dfbe..e079f94e 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Memories.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Memories.i7x @@ -311,7 +311,7 @@ Slango still didn't look impressed. Section 10 - Counterfeit Monkey Clue -category-memory is a memory. The max is 1. The printed name is "past experience playing games". Understand "past" or "experience" or "playing" or "games" as category-memory. +category-memory is a memory. The max is 1. The printed name is "past experience playing games". Understand "past" or "experience" or "playing" or "games" as category-memory. Carry out an actor discussing how one might go about winning: trigger category-memory. diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Mentions Indices.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Mentions Indices.i7x index 41affc24..eca13729 100755 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Mentions Indices.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Mentions Indices.i7x @@ -171,8 +171,8 @@ delay ticket-taker has mention-start-index 133. delay ticket-taker has mention-stop-index 133. where my backpack seems has mention-start-index 134. where my backpack seems has mention-stop-index 134. -argue about lost plus found policy has mention-start-index 135. -argue about lost plus found policy has mention-stop-index 136. +argue about lost plus found policy has mention-start-index 135. +argue about lost plus found policy has mention-stop-index 136. demonstrate the lost backpack has mention-start-index 137. demonstrate the lost backpack has mention-stop-index 137. buy movie-ticket has mention-start-index 138. @@ -321,8 +321,8 @@ complain that the game seems unfair has mention-start-index 225. complain that the game seems unfair has mention-stop-index 225. whether he hath any other games going has mention-start-index 226. whether he hath any other games going has mention-stop-index 226. -how long he hath worked at bar has mention-start-index 227. -how long he hath worked at bar has mention-stop-index 227. +how long he hath worked at bar has mention-start-index 227. +how long he hath worked at bar has mention-stop-index 227. what he thinks about the Bureau has mention-start-index 228. what he thinks about the Bureau has mention-stop-index 229. whether he hates customs officials has mention-start-index 230. From 156b394c20b66c92fd9288f35065178d12116d9e Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 5 Dec 2023 06:39:34 +0100 Subject: [PATCH 090/138] Files R-T: Remove double spaces This is the last of them. --- .../Repository Alphabetic Details.i7x | 40 +++++++++---------- .../Repository Major Contents.i7x | 4 +- .../Extensions/Counterfeit Monkey/Tests.i7x | 10 ++--- .../Extensions/Counterfeit Monkey/Tools.i7x | 8 ++-- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index a4d59e40..11d61d2c 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -38,7 +38,7 @@ But no, it has come out as the representation of an era, the golden age of Atlan The ahi is an edible thing. The indefinite article of an ahi is "some". The description of the ahi is "Sashimi-grade tuna, deep translucent pink except around the edges, where it has been seared and coated with blackened sesame seeds.". Understand "tuna" or "fish" as the ahi. -The heft of an air is 0. The indefinite article of an air is "some". The description of an air is "It's hard to see." The scent-description of an air is "nothing". +The heft of an air is 0. The indefinite article of an air is "some". The description of an air is "It's hard to see." The scent-description of an air is "nothing". Sanity-check doing something other than smelling with an air when the noun must be touched: say "[The noun] is not susceptible to [action name part of the current action]." instead. @@ -270,7 +270,7 @@ The bass-fish is a privately-named thing. The description is "A trophy of a fish The heft of the bat is 1. The description of the bat is "It's small and black-furred, and looks like it would rather be in a cool dark place alone with some fruit." -The Ben-wig is wearable. It covers the head-area. The printed name is "Ben wig". Understand "wig" or "ben wig" as the ben-wig. The description is "It is a wig belonging to [--] at a guess [--] a Ben Franklin costume. A rubbery pate simulates baldness at the top of the head, while grey curls hang below. It would not, I fear, look remotely persuasive on our head." +The Ben-wig is wearable. It covers the head-area. The printed name is "Ben wig". Understand "wig" or "ben wig" as the ben-wig. The description is "It is a wig belonging to [--] at a guess [--] a Ben Franklin costume. A rubbery pate simulates baldness at the top of the head, while grey curls hang below. It would not, I fear, look remotely persuasive on our head." The scent-description is "the faintest whiff of dust". The description of the bell is "It's a tiny golden bell with a tiny golden clapper inside." The bell is an instrument. @@ -585,7 +585,7 @@ Understand "cook [char]" as a mistake ("Even if you know how, there's no time fo The description of the charlie is "It's a quantity of very suspicious-looking white powder. Cocaine, I believe. Drug slang was never my strength." The charlie is illegal. The indefinite article of the charlie is "some". -Sanity-check smelling the charlie: +Sanity-check smelling the charlie: say "[We][']d prefer not to undergo this whole process while higher than a kite. We need our wits." instead. Sanity-check cutting the charlie: say "Odds are it's already cut with corn starch or baby powder or whatever it is they put into drugs to make up the weight." instead. @@ -675,7 +675,7 @@ Test cockbug with "autoupgrade / wave l-remover at clock / open tub / gel cock" [The cockpit is a thing. The heft of the cockpit is 10. The description is "It's a tiny room lined on every surface with buttons and instrument readouts and warning signs, altimeters and radios and all sorts of other gadgets I don't recognize." Understand "buttons" and "readouts" and "instrument" and "warning" and "signs" and "altimeters" and "radios" and "gadgets" and "button" and "readout" and "sign" and "altimeter" and "radio" and "gadget" as the cockpit.] -The cock-ring is a wearable thing. The printed name is "cock ring". The cock-ring is naughty-sounding. The description is "A sturdy ring of black rubber[one of]. Which reminds me [--] never mind[or]. And no, I'm not going to tell you about that memory[or]. Stop prying[stopping]." Understand "cock" or "ring" as cock-ring. +The cock-ring is a wearable thing. The printed name is "cock ring". The cock-ring is naughty-sounding. The description is "A sturdy ring of black rubber[one of]. Which reminds me [--] never mind[or]. And no, I'm not going to tell you about that memory[or]. Stop prying[stopping]." Understand "cock" or "ring" as cock-ring. Sanity-check wearing the cock-ring: say "Er. Our combined physique doesn't allow for a place to put that." instead. @@ -738,7 +738,7 @@ The description of the countertop is "The result is a slab of good black granite The cratering is r-abstract. The indefinite article is "some". The heft is 0. The description is "It's an image, light as air, of the moon and the craters on it." -The crew-group is a privately-named plural-named person. The description of the crew-group is "Five (or six? it's extremely hard to count) swarthy sailors. They look buff and burly and have very thick eyebrows." The heft of the crew-group is 6. The printed name of the crew-group is "crew". Understand "crew" as the crew-group. +The crew-group is a privately-named plural-named person. The description of the crew-group is "Five (or six? it's extremely hard to count) swarthy sailors. They look buff and burly and have very thick eyebrows." The heft of the crew-group is 6. The printed name of the crew-group is "crew". Understand "crew" as the crew-group. [Persuasion rule for asking the crew-group to try doing something: rule succeeds.] @@ -1280,7 +1280,7 @@ The keycard is a passkey. It unlocks the small door. The description is "An elec Carry out taking the keycard: record "acquiring a keycard" as achieved. -The key-lime is an edible thing. The printed name is "key lime". Understand "key" or "lime" as the key-lime. The description is "One of those small, extra-flavorful limes used as a flavor for pie." +The key-lime is an edible thing. The printed name is "key lime". Understand "key" or "lime" as the key-lime. The description is "One of those small, extra-flavorful limes used as a flavor for pie." The scent-description is "sharp and citrusy". The flavor-description is "The outer layer of skin tastes a little bit sharp, but most of the flavor is locked inside.". @@ -2567,7 +2567,7 @@ Sanity-check going somewhere when the player carries the power cord: if the player carries the power cord: stop the action. -Understand "plug [a power socket] into [a power socket]" as connecting it to. Understand "plug in [a power socket] in [a power socket]" as connecting it to. Connecting it to is an action applying to two things. +Understand "plug [a power socket] into [a power socket]" as connecting it to. Understand "plug in [a power socket] in [a power socket]" as connecting it to. Connecting it to is an action applying to two things. Understand "connect [a power socket] to [a power socket]" as connecting it to. Understand "connect [a power cord] to [a power socket]" as plugging it into. @@ -2684,7 +2684,7 @@ The rampage is an r-abstract thing. It is noisy. The description of the rampage A rap is usually noisy. A rap is usually r-abstract. The description of the rap is "A pulsating ball of angry air." -[Originally the rap riffed on the lyrics of the handful of songs I know at all well. The results were so painfully square that Sam Ashwell responded by schooling me with a 38K email entitled 'A Very White Person Summarises Hip-Hop Themes'. +[Originally the rap riffed on the lyrics of the handful of songs I know at all well. The results were so painfully square that Sam Ashwell responded by schooling me with a 38K email entitled 'A Very White Person Summarises Hip-Hop Themes'. The results do not live up to his efforts, but you should know that he really really tried and, hey, the Sir Mixalot joke is gone.] @@ -2950,7 +2950,7 @@ Ross is a proper-named man. The description of Ross is "He's red-headed and he l The description of the rotas inscription is "It reads: [paragraph break][fixed letter spacing] P[line break] A[line break] T[line break] A E O[line break] R[line break]PATERNOSTER[line break] O[line break] O S A[line break] T[line break] E[line break] R[variable letter spacing]". The rotas inscription is fixed in place. -Rule for printing the name of the rotas inscription when not shooting: +Rule for printing the name of the rotas inscription when not shooting: say "Roman inscription". Understand "roman" or "letters" or "lettering" as the rotas inscription. The initial appearance of the rotas inscription is "On the opposite wall is a cross of inscribed letters, this time Roman." @@ -3492,16 +3492,16 @@ To say generated tale: if V is: -- 1: now tale-intro is "Once upon a time, a [t-hero] was [one of][or]hard at work [or]busy [or]in the middle of [at random][t-activity]. "; - now tale-danger is "Then the [t-hero] met with a [t-antagonist]. [one of]For a time [t-nom] thought that [t-nom] and [t-pos] family were done for, so great was [t-pos] fear, when[or]Everything seemed lost until[or]The [t-hero] did not know what to do until[or]The [t-hero] was overwhelmed with terror until[at random] [one of][t-nom] remembered the [t-tool][or][t-nom] found the [t-tool] again among [t-pos] possessions[or]the [t-tool] spoke aloud saying USE ME, USE ME[at random]. "; + now tale-danger is "Then the [t-hero] met with a [t-antagonist]. [one of]For a time [t-nom] thought that [t-nom] and [t-pos] family were done for, so great was [t-pos] fear, when[or]Everything seemed lost until[or]The [t-hero] did not know what to do until[or]The [t-hero] was overwhelmed with terror until[at random] [one of][t-nom] remembered the [t-tool][or][t-nom] found the [t-tool] again among [t-pos] possessions[or]the [t-tool] spoke aloud saying USE ME, USE ME[at random]. "; -- 2: now tale-intro is "Once upon a time, the supreme councilor of the land was captured by a [t-antagonist][one of], and no one but a [t-hero] dared try to save him[or]. A brave [t-hero] set out to save him[or], and only a [t-hero] was willing to go after him[at random]. "; now t-activity is "searching high and low for the councilor"; - now tale-danger is "At last the [t-hero] found the lair of the [t-antagonist]. "; - now tale-resolution is "[tale-resolution]The councilor was saved, and all rejoiced. "; + now tale-danger is "At last the [t-hero] found the lair of the [t-antagonist]. "; + now tale-resolution is "[tale-resolution]The councilor was saved, and all rejoiced. "; -- 3: now t-activity is "[one of]treasure[or]a cure to the plague[or]fresh water[or]the world's hottest spice[or]the world's sweetest honey[or]the world's end[or]the Secret Word that Makes Men Live Forever[or]the 27th letter of the alphabet (which God gave secretly to the angels)[as decreasingly likely outcomes]"; - now tale-danger is "When at last the [t-hero] [one of]discovered the hiding place of the [t-activity][or]tracked down the [t-activity] with subtle maps and a magic compass[or]uncovered the [t-activity] by asking every merchant and priest in the land[or]came to the hidden place where the [t-activity] could be found[at random], [t-nom] found it was being guarded by a [t-antagonist]. "; - now tale-resolution is "[tale-resolution]The [t-hero] and [t-pos] whole town lived [one of]healthily[or]wisely[or]joyfully[or]wealthily[at random] ever after. "; + now tale-danger is "When at last the [t-hero] [one of]discovered the hiding place of the [t-activity][or]tracked down the [t-activity] with subtle maps and a magic compass[or]uncovered the [t-activity] by asking every merchant and priest in the land[or]came to the hidden place where the [t-activity] could be found[at random], [t-nom] found it was being guarded by a [t-antagonist]. "; + now tale-resolution is "[tale-resolution]The [t-hero] and [t-pos] whole town lived [one of]healthily[or]wisely[or]joyfully[or]wealthily[at random] ever after. "; if t-activity is "the world's end" and chosen tale-villain is t-foreigner: now tale-resolution is "[tale-resolution]But all were amazed that the world's end should be in a foreign land rather than their own. "; otherwise if t-activity is "the 27th letter of the alphabet, which God gave secretly to the angels": @@ -3551,15 +3551,15 @@ To say generated tale: now V is a random number between 1 and 8; if V is: -- 1: - now tale-donation is "In the midst of [t-activity], [t-nom] was interrupted by a [t-helper]. [one of]Though [t-nom] did not welcome the interruption, [or]Though [t-nom] was rude, [or]The [t-hero] said, 'Go away! Can't you see I'm busy?' But [or]The [t-hero] made a bad face, but [at random]the [t-helper] said, '[one of]I was sent to bring you this[or]A dream told me to present you this[or]I have brought you a[or]I wanted only to give you this[at random] [t-tool].' Thinking nothing of it, the [t-hero] went on [t-pos] way. "; + now tale-donation is "In the midst of [t-activity], [t-nom] was interrupted by a [t-helper]. [one of]Though [t-nom] did not welcome the interruption, [or]Though [t-nom] was rude, [or]The [t-hero] said, 'Go away! Can't you see I'm busy?' But [or]The [t-hero] made a bad face, but [at random]the [t-helper] said, '[one of]I was sent to bring you this[or]A dream told me to present you this[or]I have brought you a[or]I wanted only to give you this[at random] [t-tool].' Thinking nothing of it, the [t-hero] went on [t-pos] way. "; if t-tool is "whip": now tale-resolution is "When the [t-helper] met with the [t-hero] again, the [t-helper] said, 'Now perhaps you see what sort of creature it is proper to beat!' [tale-resolution]"; otherwise if t-tool is "mirror": now tale-resolution is "The [t-helper] returned to the [t-hero] and said, 'Now use your mirror on yourself, and see what kind of person you have become!' [tale-resolution]"; otherwise: - now tale-resolution is "The next morning [t-nom] met the [t-helper] again. Astonished, [t-nom] said, 'Why did you give the [t-tool] to me after I treated you unkindly?' The [t-helper] replied: '[one of]I did this not for you, but for the whole island[or]I could not withhold that which it was your fate to receive[or]In payment, you and your family must always treat me well and bring me gifts[at random].' [tale-resolution]"; + now tale-resolution is "The next morning [t-nom] met the [t-helper] again. Astonished, [t-nom] said, 'Why did you give the [t-tool] to me after I treated you unkindly?' The [t-helper] replied: '[one of]I did this not for you, but for the whole island[or]I could not withhold that which it was your fate to receive[or]In payment, you and your family must always treat me well and bring me gifts[at random].' [tale-resolution]"; -- 2: - now tale-donation is "[one of]While the [t-hero] was [t-activity][or]Just then[at random], a [t-helper] approached [t-obj] and demanded [tale-donation]. And though the [t-hero] was very busy, [t-nom] gave all the aid in [t-pos] power. In return, the [t-helper] gave [t-obj] a [t-tool]. "; + now tale-donation is "[one of]While the [t-hero] was [t-activity][or]Just then[at random], a [t-helper] approached [t-obj] and demanded [tale-donation]. And though the [t-hero] was very busy, [t-nom] gave all the aid in [t-pos] power. In return, the [t-helper] gave [t-obj] a [t-tool]. "; if chosen tale-gift is t-diversion and t-activity is not "scouring the land for what was lost": now tale-donation is "[tale-donation]'I cannot imagine what use this will be,' thought the [t-hero]. But [t-nom] put it away in [t-pos] bag, because [t-nom] knew that there is a use for everything in its time. "; -- 3: @@ -3728,7 +3728,7 @@ The description of a tap is "It's a tap marked [if the item described is hot]Hot The description of the tape is "It's clear tape, the kind you use to wrap presents or make childhood art projects. I made an entire paper village when I was small, at significant expense in sticky tape." -The description of the tar is "A pot of sticky black goo." The indefinite article of tar is "some". Instead of tasting or eating the tar: say "Ugh." Instead of smelling the tar: say "It smells like roadworks on a hot day." +The description of the tar is "A pot of sticky black goo." The indefinite article of tar is "some". Instead of tasting or eating the tar: say "Ugh." Instead of smelling the tar: say "It smells like roadworks on a hot day." The tarpan is a neuter animal. The description is "A small, mouse-col[our]ed horse with black-barred legs. It looks wild and shows no signs of ever having been saddled or ridden." @@ -3842,7 +3842,7 @@ Table of Ultratests (continued) topic stuff setting "paintings" { anagramming gun, bullets, paintings, tub } Sensitive Equipment Testing Room -Test paintings with "autoupgrade / load gun / wave s-remover at paintings / shoot painting / put giant pin in t-inserter / shoot giant pint / wave g-remover at pig tat inn / shoot pi tat inn / put pin in inserter / shoot titan pint / open tub / gel tint / shoot paintings / wave g-remover at sign / shoot sin" [holding the anagramming gun and the bullets and the paintings and the tub in the Sensitive Equipment Testing Room.] +Test paintings with "autoupgrade / load gun / wave s-remover at paintings / shoot painting / put giant pin in t-inserter / shoot giant pint / wave g-remover at pig tat inn / shoot pi tat inn / put pin in inserter / shoot titan pint / open tub / gel tint / shoot paintings / wave g-remover at sign / shoot sin" [holding the anagramming gun and the bullets and the paintings and the tub in the Sensitive Equipment Testing Room.] The titan-pin is wearable. The description of the titan-pin is "The pin depicts two giant-like figures locked in a wrestling match." The printed name is "titan pin". Understand "titan" or "titan pin" as the titan-pin. Understand "pin" as the titan-pin when the pin is marked invisible. @@ -4215,7 +4215,7 @@ The description of the weight is "Shaped like a headless pyramid. '0.5 kg' is st The wet epigraph is r-abstract. The heft is 0. The description is "Currently it reads, '[one of]Unshakable faith is faith that has been shaken[or]Anyone who thinks the sky is the limit, has limited imagination[at random].'" -The wig is wearable and floppy. It covers the head-area. The description is "A surprisingly realistic wig, cut to about the shoulder. It looks like our hair, but a good bit longer." +The wig is wearable and floppy. It covers the head-area. The description is "A surprisingly realistic wig, cut to about the shoulder. It looks like our hair, but a good bit longer." The scent-description is "the faintest whiff of shampoo". diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Major Contents.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Major Contents.i7x index a3ce7225..73aaff17 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Major Contents.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Major Contents.i7x @@ -506,7 +506,7 @@ A live branch is in the repository. [paintings] -The repository contains a painting, an inapt sign, an inapt sin, a satin-pin, a satin-pint, a saint-pint, a giant-pin, a giant-pint, a pig-tat-inn, a pi-tat-inn, a titan-pin, a titan-pint, and an inapt tint. +The repository contains a painting, an inapt sign, an inapt sin, a satin-pin, a satin-pint, a saint-pint, a giant-pin, a giant-pint, a pig-tat-inn, a pi-tat-inn, a titan-pin, a titan-pint, and an inapt tint. [page] @@ -963,7 +963,7 @@ A nitrate is in the repository. The repository contains a papa and some papas and an aa and an aas-object. [page] -The repository contains a passage-place. ["page", "passage"] +The repository contains a passage-place. ["page", "passage"] [pass] The repository contains a password-thing, a passcard, a passage, a passkey-thing. diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tests.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tests.i7x index 5f32b199..cef79e71 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tests.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tests.i7x @@ -487,35 +487,35 @@ After printing the name of something (called N) while listing longs: otherwise: say " (strong)" -Understand "list noisy" as listing noisy. Listing noisy is an action out of world. +Understand "list noisy" as listing noisy. Listing noisy is an action out of world. Carry out listing noisy: let N be the list of noisy things; sort N; say "[N]". -Understand "list cat 5" as listing category five. Listing category five is an action out of world. +Understand "list cat 5" as listing category five. Listing category five is an action out of world. Carry out listing category five: let N be the list of edible things which are not vegetables; sort N; say "[N]". -Understand "list liquid" as listing liquid. Listing liquid is an action out of world. +Understand "list liquid" as listing liquid. Listing liquid is an action out of world. Carry out listing liquid: let N be the list of fluid things; sort N; say "[N]". -Understand "list edible" as listing edible. Listing edible is an action out of world. +Understand "list edible" as listing edible. Listing edible is an action out of world. Carry out listing edible: let N be the list of edible things; sort N; say "[N]". -Understand "list uncontained" as listing uncontained. Listing uncontained is an action out of world. +Understand "list uncontained" as listing uncontained. Listing uncontained is an action out of world. Carry out listing uncontained: let N be the list of uncontained fluid things; diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index 3a81e71f..fc717cd8 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -163,7 +163,7 @@ Check vaguely setting: Instead of vaguely setting the letter-remover: say "You have to set it to a specific letter, as in SET [letter-remover] TO X." -Understand "set [letter-remover device] to [text]" or "tune [letter-remover device] to [text]" or "turn [letter-remover device] to [text]" as tuning it to. [Understand "set [something] to [text]" as tuning it to.] Tuning it to is an action applying to one carried thing and one topic. +Understand "set [letter-remover device] to [text]" or "tune [letter-remover device] to [text]" or "turn [letter-remover device] to [text]" as tuning it to. [Understand "set [something] to [text]" as tuning it to.] Tuning it to is an action applying to one carried thing and one topic. Check tuning it to: if the noun is not the letter-remover device, say "[The noun] cannot be tuned." instead. @@ -1488,7 +1488,7 @@ Sanity-check putting the restoration gel on something irretrievable: Before putting the restoration gel on something which is in a container (called the box): if the second noun is proffered by an uncontained fluid thing (called the liquid): if the number of things in the box is greater than 1 or the number of things proffered by the second noun is greater than 1 and the box is not the synthesizer: - say the liquid would make a mess in the box instead. + say the liquid would make a mess in the box instead. Before putting the restoration gel on something which is enclosed by the backpack: if the backpack is closed: @@ -1902,7 +1902,7 @@ Sanity-check shooting something irretrievable with the restoration-gel rifle: Before shooting something which is in a container (called the box) with the restoration-gel rifle: if the noun is proffered by an uncontained fluid thing (called the liquid): if the number of things in the box is greater than 1 or the number of things proffered by the noun is greater than 1 and the box is not the synthesizer: - say the liquid would make a mess in the box instead. + say the liquid would make a mess in the box instead. [Because it's possible to change something into an object that becomes fixed in place in the backpack, or too heavy to move...] @@ -2335,7 +2335,7 @@ Chapter 16 - The Cryptolock aka Vowel Rotator The puzzle here is completely different depending on whether you're playing hard mode or easy mode.] -The cryptolock is a scenery enterable container in the Generator Room. It is fixed in place. The printed name of the cryptolock is "brushed steel bucket". Understand "brushed" or "steel" or "container" or "bucket" as the cryptolock. +The cryptolock is a scenery enterable container in the Generator Room. It is fixed in place. The printed name of the cryptolock is "brushed steel bucket". Understand "brushed" or "steel" or "container" or "bucket" as the cryptolock. The cryptoswitch is a device. The cryptoswitch is part of the cryptolock. The printed name of the cryptoswitch is "reverse switch". Understand "reverse" or "switch" as the cryptoswitch. From 867f5446bf3af76ad07ddac159fadb2137eb16ef Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 5 Dec 2023 07:02:31 +0100 Subject: [PATCH 091/138] Convert spaces to tabs Some indentation using spaces had snuck in. This also includes some eliminated double spaces I missed in the previous pass, but that I'll let that slide. --- .../Counterfeit Monkey/Animal Speedups.i7x | 2 +- .../Counterfeit Monkey/Character Models.i7x | 82 +++++++++---------- .../Counterfeit Monkey/Custom Speedups.i7x | 8 +- .../Extensions/Counterfeit Monkey/Hashing.i7x | 6 +- .../Presentation Details.i7x | 6 +- .../Regenerate Mentions.i7x | 4 +- .../Repository Alphabetic Details.i7x | 28 +++---- .../Room Description Speedups.i7x | 8 +- .../Utilitarian Inventory.i7x | 10 +-- .../Counterfeit Monkey/World Model Tweaks.i7x | 6 +- 10 files changed, 80 insertions(+), 80 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Speedups.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Speedups.i7x index 88aa5bb1..2be859b4 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Speedups.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Speedups.i7x @@ -55,7 +55,7 @@ Include ]; [ MyFakePeopleGoing room dir traveler last; - LIST_OF_TY_SetLength((+ incoming-list +), 0, -1, 1); + LIST_OF_TY_SetLength((+ incoming-list +), 0, -1, 1); for (traveler = child(room): traveler : traveler = last) { last = sibling(traveler); if (traveler ofclass (+ person +) && traveler.(+ fake +) && traveler ~= (+ roc +)) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x index e04e0324..398971c9 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x @@ -199,49 +199,49 @@ Include (- ! If input has run out then always match, with only quality 0 (this saves ! time). - if (wn > WordCount()) { ! MODIFIED + if (wn > WordCount()) { ! MODIFIED if (nomatch) return 0; - if (indef_mode ~= 0) - dict_flags_of_noun = $$01110000; ! Reject "plural" bit - MakeMatch(obj,0); - #Ifdef DEBUG; - if (parser_trace >= 5) print " Matched (zero)^"; - #Endif; ! DEBUG - return 1; + if (indef_mode ~= 0) + dict_flags_of_noun = $$01110000; ! Reject "plural" bit + MakeMatch(obj,0); + #Ifdef DEBUG; + if (parser_trace >= 5) print " Matched (zero)^"; + #Endif; ! DEBUG + return 1; } ! Ask the object to parse itself if necessary, sitting up and taking notice ! if it says the plural was used: if (obj.parse_name~=0) { - parser_action = NULL; j=wn; - k = RunRoutines(obj,parse_name); - if (k > 0) { - wn=j+k; - - .MMbyPN; - - if (parser_action == ##PluralFound) - dict_flags_of_noun = dict_flags_of_noun | 4; - - if (dict_flags_of_noun & 4) { - if (~~allow_plurals) k = 0; - else { - if (indef_mode == 0) { - indef_mode = 1; indef_type = 0; indef_wanted = 0; - } - indef_type = indef_type | PLURAL_BIT; - if (indef_wanted == 0) indef_wanted = INDEF_ALL_WANTED; - } - } - - #Ifdef DEBUG; - if (parser_trace >= 5) print " Matched (", k, ")^"; - #Endif; ! DEBUG - if (nomatch == false) MakeMatch(obj,k); - return k; - } - if (k == 0) jump NoWordsMatch; + parser_action = NULL; j=wn; + k = RunRoutines(obj,parse_name); + if (k > 0) { + wn=j+k; + + .MMbyPN; + + if (parser_action == ##PluralFound) + dict_flags_of_noun = dict_flags_of_noun | 4; + + if (dict_flags_of_noun & 4) { + if (~~allow_plurals) k = 0; + else { + if (indef_mode == 0) { + indef_mode = 1; indef_type = 0; indef_wanted = 0; + } + indef_type = indef_type | PLURAL_BIT; + if (indef_wanted == 0) indef_wanted = INDEF_ALL_WANTED; + } + } + + #Ifdef DEBUG; + if (parser_trace >= 5) print " Matched (", k, ")^"; + #Endif; ! DEBUG + if (nomatch == false) MakeMatch(obj,k); + return k; + } + if (k == 0) jump NoWordsMatch; } ! The default algorithm is simply to count up how many words pass the @@ -256,9 +256,9 @@ Include (- if (w >= 2 && w < 128 && (LanguagePronouns-->w == obj)) { k = 1; jump MMbyPN; } if (Refers(obj, wn-1) == 0) { - .NoWordsMatch; - if (indef_mode ~= 0) { k = 0; parser_action = NULL; jump MMbyPN; } - rfalse; + .NoWordsMatch; + if (indef_mode ~= 0) { k = 0; parser_action = NULL; jump MMbyPN; } + rfalse; } threshold = 1; @@ -267,7 +267,7 @@ Include (- while (Refers(obj, wn-1)) { threshold++; if (w) - dict_flags_of_noun = dict_flags_of_noun | ((w->#dict_par1) & $$01110100); + dict_flags_of_noun = dict_flags_of_noun | ((w->#dict_par1) & $$01110100); w = NextWord(); } @@ -477,7 +477,7 @@ Test secondaries with "tutorial off / z / say hello / g / ask about paddle / say Table of Ultratests (continued) topic stuff setting -"customer" { map-customer, papas } Arbot +"customer" { map-customer, papas } Arbot Test customer with "z / ask about maps / say hello to customer / ask customer about maps / say hello to papas / ask papas about maps" [holding the map-customer and the papas in Arbot.] diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Custom Speedups.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Custom Speedups.i7x index 1949d1e2..05c141ff 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Custom Speedups.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Custom Speedups.i7x @@ -78,7 +78,7 @@ Include (- MarkContentsVisible(o.component_sibling); ! Don't look inside closed opaque containers - if (child(o) && ~~((o has openable && o hasnt open) && o hasnt transparent)) + if (child(o) && ~~((o has openable && o hasnt open) && o hasnt transparent)) o = child(o); else while (o) { @@ -104,7 +104,7 @@ Include (- MarkContentsInvisible(o.component_sibling); ! Don't look inside closed opaque containers - if (child(o) && ~~((o has openable && o hasnt open) && o hasnt transparent)) + if (child(o) && ~~((o has openable && o hasnt open) && o hasnt transparent)) o = child(o); else while (o) { @@ -148,7 +148,7 @@ Include (- ! Don't look inside people or vehicles containing the player - if (child(o) && ~~(o ofclass (+ person +) || ( o ofclass (+ vehicle +) && o == parent(player))) ) o = child(o); + if (child(o) && ~~(o ofclass (+ person +) || ( o ofclass (+ vehicle +) && o == parent(player))) ) o = child(o); else while (o) { @@ -200,7 +200,7 @@ Include (- i = FindVisibleThing(o.component_sibling, i); ! Don't look inside closed opaque containers or the backpack - if (child(o) && ~~(o has openable && (o hasnt open && (o hasnt transparent || o == (+ the backpack +) )))) o = child(o); + if (child(o) && ~~(o has openable && (o hasnt open && (o hasnt transparent || o == (+ the backpack +) )))) o = child(o); else while (o) { if (sibling(o)) { o = sibling(o); break; } diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Hashing.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Hashing.i7x index 551dfd6b..366b1d76 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Hashing.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Hashing.i7x @@ -83,9 +83,9 @@ Include (- ]; [ ShowLetterHash h i b; - for (i=0, b=1; i<26; i++, b=b*2) { - if (h&b) print "1"; else print "0"; - } + for (i=0, b=1; i<26; i++, b=b*2) { + if (h&b) print "1"; else print "0"; + } ]; -); diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Presentation Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Presentation Details.i7x index 8957610a..8603810a 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Presentation Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Presentation Details.i7x @@ -205,9 +205,9 @@ Points (a number) Citation (some text) Time (a time) 15 "returning to the yacht" To record (T - text) as achieved: - choose row with a citation of T in the Table of Tasks Achieved; - if there is no time entry begin; - now time entry is the time of day; + choose row with a citation of T in the Table of Tasks Achieved; + if there is no time entry begin; + now time entry is the time of day; increase score by points entry; end if. diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Regenerate Mentions.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Regenerate Mentions.i7x index 183d7854..4b32c0f3 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Regenerate Mentions.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Regenerate Mentions.i7x @@ -198,7 +198,7 @@ The mentions-list of assure him that we seem not hitting on him is {yourself, ti The mentions-list of what his girlfriend seems like is {Romance, ticket-taker}. The mentions-list of delay ticket-taker is {Entertainment}. The mentions-list of where my backpack seems is {backpack}. -The mentions-list of argue about lost plus found policy is {yourself, backpack}. +The mentions-list of argue about lost plus found policy is {yourself, backpack}. The mentions-list of demonstrate the lost backpack is {backpack}. The mentions-list of buy movie-ticket is {hidden-ticket}. The mentions-list of whether we can hath the scope is {Regulation Authentication Scope}. @@ -273,7 +273,7 @@ The mentions-list of how one might go about winning is {Origin Paste}. The mentions-list of play the game is {Origin Paste, Entertainment}. The mentions-list of complain that the game seems unfair is {Origin Paste}. The mentions-list of whether he hath any other games going is {Origin Paste}. -The mentions-list of how long he hath worked at bar is {Employment}. +The mentions-list of how long he hath worked at bar is {Employment}. The mentions-list of what he thinks about the Bureau is {Bureau, barman}. The mentions-list of whether he hates customs officials is {Immigration, barman, local-officials}. The mentions-list of whether he believes in god-2 is {Religion}. diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index 11d61d2c..fd74fd90 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -122,34 +122,34 @@ The description of the art is "It's a very plausible copy of [one of]'Still Life The description of an as is "[one of]It appears to be an as, a [or]A [stopping]Roman coin of very low denomination[one of]. (Your knowledge, not mine. Should I ask how you know such things?)[or].[stopping] It is made of copper and has the letters S C stamped on one side." Understand "as/roman/coin/copper" as an as. The heft of an as is 1. The printed name of an as is "as". Understand "asses" as the plural of as. Instead of searching or looking under an as: - say "We inspect both obverse and reverse, but come away none the wiser." + say "We inspect both obverse and reverse, but come away none the wiser." Instead of buying an as: - say "We're much too late for speculation in this particular currency." + say "We're much too late for speculation in this particular currency." Instead of touching or squeezing or rubbing an as: - say "The metal surface is dull and weathered, skin-temperature, all smooth edges." + say "The metal surface is dull and weathered, skin-temperature, all smooth edges." Rule for initially listing contents: - initially group ases together. + initially group ases together. Rule for grouping together an as (called target): - say "[listing group size in words] asses"; - let source be the holder of the target; - now every as held by the source is mentioned. + say "[listing group size in words] asses"; + let source be the holder of the target; + now every as held by the source is mentioned. Does the player mean doing something to the as-coin when the subcommand of the as-coin matches "as": - it is likely. + it is likely. Does the player mean doing something to the as-coin when action requires a carried noun and the player does not carry the as-coin: - it is likely. + it is likely. Does the player mean taking the as-coin when the player carries the as-coin: it is unlikely. Does the player mean doing something when the second noun is the as-coin and the subcommand of the as-coin matches "as": - it is likely. + it is likely. Does the player mean doing something when the second noun is the as-coin and action requires a carried second noun and the player does not carry the as-coin: - it is unlikely. + it is unlikely. The fake-as is an as. @@ -635,13 +635,13 @@ Every turn (this is the advance clock rule): Understand "set [clock] to [time]" as setting it by time. Setting it by time is an action applying to one thing and one time. Instead of setting the clock to something: - say "[The noun] can be set only to a time of day, such as 8:00 AM, or midnight." + say "[The noun] can be set only to a time of day, such as 8:00 AM, or midnight." Carry out setting a clock by time: - now the current time of the noun is the time understood. + now the current time of the noun is the time understood. Report setting a clock by time: - say "[We] set [the noun] to [time understood]." + say "[We] set [the noun] to [time understood]." A cluck is an r-abstract noisy thing. The heft of the cluck is 0. The description of the cluck is "Genuine barnyard stuff, it sounds like." diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Room Description Speedups.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Room Description Speedups.i7x index 355d27df..323c095a 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Room Description Speedups.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Room Description Speedups.i7x @@ -102,7 +102,7 @@ Include (- ]; [ HasLightSource i; - rtrue; + rtrue; ]; [ ComponentHasLight o; @@ -110,7 +110,7 @@ Include (- ]; [ HidesLightSource obj; - rfalse; + rfalse; ]; -) instead of "Light Measurement" in "Light.i6t". @@ -129,8 +129,8 @@ Include (- Include (- [ SilentlyConsiderLight; - lightflag = true; - location = real_location; + lightflag = true; + location = real_location; rfalse; ]; diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Utilitarian Inventory.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Utilitarian Inventory.i7x index e0bf5146..16aee51c 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Utilitarian Inventory.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Utilitarian Inventory.i7x @@ -275,9 +275,9 @@ Include (- ((+ Table of Inventory Ordering +)-->col)-->(i+COL_HSIZE) = TABLE_NOVALUE; } - ! if we found no value, return nothing. - if (v == TABLE_NOVALUE) return nothing; - else return v; + ! if we found no value, return nothing. + if (v == TABLE_NOVALUE) return nothing; + else return v; ]; -). @@ -295,8 +295,8 @@ Include (- [ IsInventoryListable p par prop; if (p == (+ restoration gel +) or nothing) rfalse; ! It is the restoration gel if (p provides component_parent && p.component_parent) rfalse; ! It is part of something - par = parent(p); - if (par ~= (+ player +) && par ~= nothing && par has animate) rfalse; ! It is worn by an animal + par = parent(p); + if (par ~= (+ player +) && par ~= nothing && par has animate) rfalse; ! It is worn by an animal rtrue; ]; diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x index 34bef181..36c21e43 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/World Model Tweaks.i7x @@ -191,9 +191,9 @@ This is the sanity-check stage rule: The sanity-check stage rule is listed before the before stage rule in the action-processing rules. To decide whether (item - a thing) must be touched: - if the item is the noun and the action requires a touchable noun, yes; - if the item is the second noun and the action requires a touchable second noun, yes; - no. + if the item is the noun and the action requires a touchable noun, yes; + if the item is the second noun and the action requires a touchable second noun, yes; + no. An accessibility rule (this is the no touching NPC stuff rule): if the touch-goal is enclosed by someone (called the owner) who is not the actor and the touch-goal must be touched: From 700699403868d1af42db6950bd1f9f5ae4f5e83d Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 5 Dec 2023 07:08:17 +0100 Subject: [PATCH 092/138] Missed one --- .../Extensions/Counterfeit Monkey/Character Models.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x index 398971c9..472797e2 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x @@ -477,7 +477,7 @@ Test secondaries with "tutorial off / z / say hello / g / ask about paddle / say Table of Ultratests (continued) topic stuff setting -"customer" { map-customer, papas } Arbot +"customer" { map-customer, papas } Arbot Test customer with "z / ask about maps / say hello to customer / ask customer about maps / say hello to papas / ask papas about maps" [holding the map-customer and the papas in Arbot.] From 8bc9d427056668732dda38adc602f0bdc8f53e46 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 5 Dec 2023 13:07:36 +0100 Subject: [PATCH 093/138] Update change log --- CHANGELOG.md | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5cc7738..2a0eba65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,32 +4,40 @@ ### Bugs fixed -- The start up data embedded in the game file was bad in the two previous releases. The game will now print a warning at startup if it detects bad embedded data. -- Run-time problem P10 would occur when trying to remove letters from the current room. -- Lena would occasionally ask the player to change the modem although it was no longer present. -- The fast travel GO TO command could be used to bypass the confrontation with Alex's father. -- Typing EXAMINE DIRECTION and then answering the resulting "Which do you mean" question with a direction would cause run-time problem P10. -- Run-time problem P60 would occur when using the soap dispenser after removing all sinks. -- Turning on the tap while in a shower or bath would cause run-time problem P43 as the game attempted to move the player out of play. It was also possible to drop any objects in the bath or shower, and then remove them from play by turning on the tap. We fix this by simply no longer allowing the player to enter showers or baths, in the hope that nobody will miss this. -- The first aid station was not fixed in place and could be picked up, while its description still said it was mounted to the wall. +- Search engine descriptions were not shown for the e-book reader and the secretary's computer. (@Roachbones) +- The sun wasn't distant but behaved as if sitting right next to you (@Roachbones). +- With Andra in control, it was possible to get a reprise of Alex's hesitation speech by trying to go back in through the tall window, if you diregarded it the first time when going out. (@Roachbones) +- Examining the word, the words, or the wordage could cause run-time problems. (@Roachbones) +- The wordage description was broken since release 7. +- The start up data embedded in the game file was bad in the two previous releases. The game will now print a warning at startup if it detects bad embedded data. (@hanna-kruppe) +- Run-time problem P10 would occur when trying to remove letters from the current room. (@eriktorbjorn) +- Lena would occasionally ask the player to change the modem when it is no longer present. (@eriktorbjorn) +- The fast travel GO TO command could be used to bypass the confrontation with Alex's father (@DefKonOne). +- Typing EXAMINE DIRECTION and then replying with a direction (such as NORTH) to the resulting "Which do you mean" disambiguation question would cause run-time problem P10. +- Run-time problem P60 would occur when using the soap dispenser after removing all sinks. (@Stealthii) +- Turning on the tap while in a shower or bath would cause run-time problem P43 as the game attempted to move the player out of play. It was also possible to drop any objects in the bath or shower, and then remove them from play by turning on the tap. We fix this by blocking entry into showers and baths. (@Roachbones). +- The first aid station was not fixed in place and could be picked up, while its description still said it was mounted to the wall. (@lynn) ### Cosmetic output errors -- The live branch was not mentioned in the description of the statue arm. -- The inlaid desk was still referenced in certain messages after it was gone. -- After shooting ourselves with the anagramming gun, the text would say that we return to "or original form" rather than "our". -- Many more important things are now highlighted. -- Fixes many unintended double spaces throughout the output text. -- There would in some cases be a missing newline after the "Batman remark" at the end of the roundabout scene. -- There would sometimes be an extra "I can't see what you're talking about" message when use of the letter-remover was attempted but disallowed. +- The guidebook and the game blurb gave two different years as the liberation of Anglophone Atlantis. (@Roachbones) +- The shred was anagrammed into a single herd rather than herds. (@Roachbones) +- The live branch is now mentioned in the description of the statue arm. +- The inlaid desk was still referenced in certain messages after it was gone. (@lynn) +- After shooting ourselves with the anagramming gun, the text would say that we return to "or original form" instead of "our original form". (@lynn) +- Taking the pill would print a message about tossing the pill into "our mouths" rather than "our mouth". (@Roachbones) +- Many more important things are now highlighted. (@dfabulich, @eriktorbjorn) +- Eliminates many unintended double spaces throughout the output text. (@Roachbones, @lynn) +- There would in some cases be a missing newline after the "Batman remark" at the end of the roundabout scene. (@eriktorbjorn) +- There would sometimes be a superfluous "I can't see what you're talking about" message when use of the letter-remover was attempted but disallowed. (@eriktorbjorn) ### Parsing - T INSERTER without a hyphen is now understood as the T-inserter. - The T-inserter can now be used by typing INSERT T IN (thing). - Things like REMIND MAN THAT MRS. ROSEHIP IS MARRIED would be understood as two different commands separated by a period. Periods after titles are now properly stripped from input. -- DEMO is now understood as DEMONSTRATION. -- Contractions such as WHAT'S, HE'S, and IT'S are understood. +- DEMO is now understood as DEMONSTRATION. (@Stealthii) +- Contractions such as WHAT'S, HE'S, and IT'S are understood. (@Stealthii) - Adds more synonyms to the "ask why he is here" quip for the gift shop volunteer. WHY ARE YOU HERE and ASK WHY HE IS THERE now work. ## Release 11 From 08e316069e70077eb574cba382d577d346c0c5d6 Mon Sep 17 00:00:00 2001 From: Vivian <26861054+Roachbones@users.noreply.github.com> Date: Sun, 20 Oct 2024 19:29:38 -0500 Subject: [PATCH 094/138] Allow sitting in seating --- .../Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index 51640aea..b0fbe75a 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -1194,7 +1194,7 @@ There's even a little washing machine, for items too big to hand-wash in the sin Out-direction of Galley is up. [Back up to navigation area] -A built-in table is scenery in the Galley. It is a supporter. The description is "When the weather is good and there is nothing urgent happening, you all often eat out on the sunning deck, which is more congenial; but at other times you take your meals down here, on this table. The seating is built-in.". Some seating is part of the built-in table. The seating is an enterable supporter. Understand "built-in seating" as the seating. +A built-in table is scenery in the Galley. It is a supporter. The description is "When the weather is good and there is nothing urgent happening, you all often eat out on the sunning deck, which is more congenial; but at other times you take your meals down here, on this table. The seating is built-in.". Some seating is part of the built-in table. The seating is an enterable supporter. The seating allows seated. Understand "built-in seating" as the seating. The galley cabinet is a scenery cabinet in the Galley. From ad32ff0cf454276be12a2417f23f4121c22bf4de Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 21 Oct 2024 10:29:03 +0200 Subject: [PATCH 095/138] Don't allow turning Brock into a Bock. Fixes #234 Looks like the bock was added in release 5 as a derivative of brock. We need to block actually turning Brock into a Bock, though, otherwise the game breaks: The player can leave the T-inserter early, and later gel the bock. Thanks to Vivian Thomas (@Roachbones) for the bug report and fix. --- .../Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x index 43039d45..2f6489e8 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x @@ -712,6 +712,9 @@ Sanity-check going from the Sensitive Equipment Testing Room: Check waving the letter-remover at Brock when the current setting of the letter-remover is "b": say "Brock would never forgive [us] if [we] turned him back into a rock now." instead. +Check waving the letter-remover at Brock when the current setting of the letter-remover is "r": + say "Brock would never forgive [us] if [we] turned him into a Bock now." instead. + Carry out putting gel on the rock when the player does not know brock-found: now the player knows brock-found; complete "Find Brock"; From 8f7f43ffa9ab9d54e33aecfea967b716754cdfff Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 21 Oct 2024 10:35:48 +0200 Subject: [PATCH 096/138] Change capitalization of bock I used a capital B in the last commit because I for some reason assumed it was a product name. --- .../Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x index 2f6489e8..1155e720 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act IV Among Policemen.i7x @@ -713,7 +713,7 @@ Check waving the letter-remover at Brock when the current setting of the letter- say "Brock would never forgive [us] if [we] turned him back into a rock now." instead. Check waving the letter-remover at Brock when the current setting of the letter-remover is "r": - say "Brock would never forgive [us] if [we] turned him into a Bock now." instead. + say "Brock would never forgive [us] if [we] turned him into a bock now." instead. Carry out putting gel on the rock when the player does not know brock-found: now the player knows brock-found; From 3e512e030eec65b46eab0b600c981d697287fb50 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 21 Oct 2024 14:34:29 +0200 Subject: [PATCH 097/138] Update change log --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a0eba65..1498b8bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ - Run-time problem P60 would occur when using the soap dispenser after removing all sinks. (@Stealthii) - Turning on the tap while in a shower or bath would cause run-time problem P43 as the game attempted to move the player out of play. It was also possible to drop any objects in the bath or shower, and then remove them from play by turning on the tap. We fix this by blocking entry into showers and baths. (@Roachbones). - The first aid station was not fixed in place and could be picked up, while its description still said it was mounted to the wall. (@lynn) +- Brock could be turned into a bock, potentially breaking the game. (@Roachbones) +- It is now possible to sit on the built-in seating in the Galley. (@Roachbones) ### Cosmetic output errors From 417bd0fa7efcf3baf6f23fc5f8667de3832542b3 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 27 Feb 2025 10:44:53 +0100 Subject: [PATCH 098/138] Add missing word to message when winning tube Reported by Mike Russo in his Let's play thread on intficion.org. --- .../Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x index 484cd496..e33c3b80 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x @@ -981,7 +981,7 @@ A first every turn rule (this is the win the tube rule): now the barker is nowhere; say "There is a [if the ear is in a pan]disgusted gasp[otherwise]cheer[end if] from the spectators. [The word-balance] tilts slowly but inexorably. - [The barker] looks astonished and displeased, except for a fraction of a second when he just noticeably winks. With exaggerated bad grace hands us [a gel]. 'There's your prize. And now this contest is over.' + [The barker] looks astonished and displeased, except for a fraction of a second when he just noticeably winks. With exaggerated bad grace he hands us [a gel]. 'There's your prize. And now this contest is over.' He stalks away."; record "winning the gel" as achieved; From 624c169acb4f41d607d84c36b842c26d332c53ad Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 27 Feb 2025 10:54:47 +0100 Subject: [PATCH 099/138] Make creating the scree kill the player again This was changed in 36f0761, mainly in order to make it possible to see some custom responses to trying to do things to the scree. However, there are several places in the code where the screen is assumed to be present in the cinema, and I am not really up to fixing all of them at the moment. Thanks to Mike Russo for pointing this out in his Let's play on intfiction.org. --- .../Counterfeit Monkey/Repository Alphabetic Details.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index fd74fd90..e7edf8a9 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -3012,7 +3012,7 @@ The saint-pint is a container. The printed name of the saint-pint is "saint pint The Scot is a man. The description is "The full stereotype: bagpipes, kilt, sporran. If you look at him too long, he says, 'Och.'" Understand "bagpipes" or "kilt" or "sporran" or "man" as the Scot. The greeting of the Scot is "'Och,' he says. A tic." -The scree is a fixed in place thing. The heft of the scree is 8. The description of the scree is "The scree is a sloping pile of small and mid-sized stones, most of them roughly broken off. They look like the result of a rockfall rather than of, say, long erosion by water." The indefinite article of the scree is "some". Understand "stones" or "stone" or "rubble" or "pile" as the scree. +The scree is a fixed in place thing. The heft of the scree is 10. The description of the scree is "The scree is a sloping pile of small and mid-sized stones, most of them roughly broken off. They look like the result of a rockfall rather than of, say, long erosion by water." The indefinite article of the scree is "some". Understand "stones" or "stone" or "rubble" or "pile" as the scree. Instead of climbing the scree: say "As soon as [we] get a step or two up the pile, [we] slide back down again." From 4ca918ee656e2a809d3a2909674776465a9644bf Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 7 Mar 2025 21:37:53 +0100 Subject: [PATCH 100/138] Add missing "when" in guidebook entry on Counterfeit Monkey Reported by Mike Russo in his let's play on Intfiction.org. --- .../Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x index e33c3b80..3ee1ed3e 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x @@ -1634,7 +1634,7 @@ topic reply "fair/fairground/fairs/fairgrounds" or "market" or "farmer's market" "The guidebook is lyrical about the phenomenal produce to be enjoyed at the farmer's market held in Hesychius Street every Saturday and Wednesday and also on special days of observation." "fish market" "The fish market, the guidebook explains, may be found at the northeastern part of town near the docks, and holds most of its sales in the early morning." "dock/docks/boat/boats/ferry/ferries" "The guidebook gives us to understand that the docks, found northeast of the central town, are a pleasant place to commission short voyages of exploration and to see the island from a distance. It does, however, warn against spending too much time in the adjacent taverns, which have an unsavory reputation." -"tavern/taverns" or "counterfeit" or "monkey" or "counterfeit monkey" "The Counterfeit Monkey is a tavern of unsavory reputation near to the docks, said to be the locale of more fistfights and disturbances of the peace than the rest of the city put together. The tavern is named in hon[our] of a famous linguistic con job and was a regular site for contraband creation and smuggling. In 1929, the Bureau first developed tools and procedures for identifying linguistic fakes, the Monkey was the target of a law enforcement raid; but a lively and committed criminal community soon put the Monkey in business again with new strategies." +"tavern/taverns" or "counterfeit" or "monkey" or "counterfeit monkey" "The Counterfeit Monkey is a tavern of unsavory reputation near to the docks, said to be the locale of more fistfights and disturbances of the peace than the rest of the city put together. The tavern is named in hon[our] of a famous linguistic con job and was a regular site for contraband creation and smuggling. In 1929, when the Bureau first developed tools and procedures for identifying linguistic fakes, the Monkey was the target of a law enforcement raid; but a lively and committed criminal community soon put the Monkey in business again with new strategies." "all-purpose" or "all purpose" "The All-Purpose, the guidebook explains, is a general civil servant attached to the Bureau of Orthography, with wide-ranging powers to repair, correct, and heal using a variety of linguistic tools." "university/college/education" "The guidebook praises the many excellent departments and exceptional research work performed at the university. This is all true, naturally." "new church/cathedral" or "church/cathedral" "The guidebook devotes two and a half pages to the splendors of the New Church, located on the western edge of the town square. It particularly admires the clean lines of the architecture, the solidly constructed pews, and the austere decoration; in fact, the more you read, the more the guide seems to be rhapsod[izing] about what the builders left [i]out[/i], instead of what they put in. The guide also recommends a visit to the church gift shop, which apparently supports assorted worthy causes, such as, for instance, buying a new roof for the structure and paying a custodial staff." From e82354addcb1ff90744d51e999e622a1e4f5783b Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 7 Mar 2025 21:41:41 +0100 Subject: [PATCH 101/138] Fix stray period when exiting the tin hut while the trap door is closing The indentation wasn't deep enough. Noted by Mike Russo in his let's play on Intfiction.org. --- .../Act II Among Smugglers.i7x | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index a48ab359..11a4983b 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -522,14 +522,14 @@ Every turn when the trap-door is open and the trap-door is not wedged by somethi now the trap-door is closed; if the location is the Crawlspace or the location is the Tin Hut: say "The trap-door makes a creaking noise and slams shut again"; - if the player is in the Crawlspace: - say ". I DO NOT LIKE being in the dark in a confined space with potential rats. Sorry, I'm getting us out of here. You can come back later."; - custom-wait for any key; - try going up; - otherwise if Crawlspace is not visited: - say ". They must prop it open when they use it."; - otherwise: - say "." + if the player is in the Crawlspace: + say ". I DO NOT LIKE being in the dark in a confined space with potential rats. Sorry, I'm getting us out of here. You can come back later."; + custom-wait for any key; + try going up; + otherwise if Crawlspace is not visited: + say ". They must prop it open when they use it."; + otherwise: + say "." Instead of going to the Crawlspace when the Crawlspace is visited and the trap-door is not wedged by something: say "Let's wait to explore down there until [we] can make sure the trap door won't slam on us." From ce92bef6ce1b23c47f0f82d4d7d1ae78da4b6242 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 7 Mar 2025 21:46:42 +0100 Subject: [PATCH 102/138] Don't try to enter the trap door when getting off the tarp in the tin hut That is not the likely intention if the player types DOWN while standing on the tarpaulin-covered masses. Noted by Mike Russo in his let's play on Intficion.org. --- .../Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x index 11a4983b..23752aff 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act II Among Smugglers.i7x @@ -534,6 +534,9 @@ Every turn when the trap-door is open and the trap-door is not wedged by somethi Instead of going to the Crawlspace when the Crawlspace is visited and the trap-door is not wedged by something: say "Let's wait to explore down there until [we] can make sure the trap door won't slam on us." +Before going down when the player is on the tarpaulin-covered masses: + try exiting instead. + Before closing a door which is wedged by something (called the impediment): say "(first removing [the impediment])[command clarification break]"; try taking the impediment; From 1a89b26e47aa52bc7fbb1cdd68bd5b10bc0420b0 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 8 Mar 2025 09:22:30 +0100 Subject: [PATCH 103/138] Update change log --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1498b8bc..1d075cf0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ - The first aid station was not fixed in place and could be picked up, while its description still said it was mounted to the wall. (@lynn) - Brock could be turned into a bock, potentially breaking the game. (@Roachbones) - It is now possible to sit on the built-in seating in the Galley. (@Roachbones) +- Creating the scree will once again kill the player. (This was changed in release 9.) The movie screen is assumed to always be in place in too many places in the code. (Mike Russo) ### Cosmetic output errors @@ -32,6 +33,8 @@ - Eliminates many unintended double spaces throughout the output text. (@Roachbones, @lynn) - There would in some cases be a missing newline after the "Batman remark" at the end of the roundabout scene. (@eriktorbjorn) - There would sometimes be a superfluous "I can't see what you're talking about" message when use of the letter-remover was attempted but disallowed. (@eriktorbjorn) +- A couple of missing words ("he" and "when", to be precise) in output text were corrected. (Mike Russo) +- A stray period was printed when exiting the tin hut while the trap door was closing. (Mike Russo) ### Parsing @@ -41,6 +44,7 @@ - DEMO is now understood as DEMONSTRATION. (@Stealthii) - Contractions such as WHAT'S, HE'S, and IT'S are understood. (@Stealthii) - Adds more synonyms to the "ask why he is here" quip for the gift shop volunteer. WHY ARE YOU HERE and ASK WHY HE IS THERE now work. +- Going DOWN when standing on the tarpaulin-covered masses in the tin hut will no longer make the player try to enter the trap door. (Mike Russo) ## Release 11 From 51edfe7dc00aa29a87e67008c6ddc6863be9b236 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 8 Mar 2025 11:08:32 +0100 Subject: [PATCH 104/138] Make the origin paste wager closer to the original code When adapting the code to Inform 6M62, I made this part a little less elegant. Basically it does the equivalent of setting a global variable instead of passing a variable as an argument. This should return it to its former glory. --- .../Animal Actions and Human Conversation.i7x | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 838f470c..260881d2 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -3815,10 +3815,13 @@ To say game-coaching: otherwise: say "The barman keeps an eye on our remaining time." +The liquid wager rules is an object-based rulebook. +The tiny wager rules is an object-based rulebook. +The import wager rules is an object-based rulebook. + The wager is an object that varies. The wager is yourself. -The proposed solution is an object that varies. The wager-name is an object that varies. -The wager-judging rule is a rule that varies. The wager-judging rule is the liquid wager rule. +The wager-judging rules is an object-based rulebook that varies. The wager-judging rules is the liquid wager rules. The wager-index is a number that varies. Instead of giving something to the barman when play the game is the current quip and the wager is yourself: @@ -3831,7 +3834,6 @@ Instead of showing something (called the item) to the barman when play the game say "'No no no,' he says. 'No suicides or self-inanimations in my bar today, thanks.'" instead; now the wager-name is the item; now the wager is the item; - now the proposed solution is the item; make wager choice; while something (called the wager-parent) which is not the wager proffers the wager: now the wager is the wager-parent; @@ -3841,22 +3843,20 @@ Instead of showing something (called the item) to the barman when play the game Instead of showing something (called the item) to the barman when the wager is not the player: if the item is not proffered by the wager: say "'Sorry,' he says, 'but I know that didn't come from [the wager-name] you bet on.'" instead; - now the proposed solution is the item; - follow the wager-judging rule; + follow the wager-judging rules for the item; if the rule succeeded: now the origin paste is won; record "winning a barroom bet" as achieved; try the barman discussing wager-won; now the wager is the player; otherwise: - choose a row with a selected rule of wager-judging rule in the Table of Wager Suggestions; + choose a row with a selected rule of wager-judging rules in the Table of Wager Suggestions; say "'[one of]That doesn't fit the category[or][personal no][or][awkward no][at random],' says [the barman]. [summary entry][paragraph break]". Every turn when the location is Counterfeit Monkey and the wager is not the player and the paste is not won: repeat with item running through things which are proffered by the wager: if the item is marked-visible: - now the proposed solution is the item; - follow the wager-judging rule; + follow the wager-judging rules for the item; if the rule succeeded: now the origin paste is won; record "winning a barroom bet" as achieved; @@ -3876,9 +3876,9 @@ To make wager choice: let selection be false; while selection is false: choose row N in the Table of Wager Suggestions; - follow the selected rule entry; + follow the selected rule entry for the wager; if the rule failed: - now the wager-judging rule is the selected rule entry; + now the wager-judging rules is the selected rule entry; now the wager-index is N; now selection is true; otherwise: @@ -3888,27 +3888,27 @@ To make wager choice: To say wager-choice: say "[run paragraph on]"; - choose a row with a selected rule of wager-judging rule in the Table of Wager Suggestions; + choose a row with a selected rule of wager-judging rules in the Table of Wager Suggestions; say "[description entry]"; -Sanity-check drinking the wager when the wager-judging rule is the tiny wager rule: +Sanity-check drinking the wager when the wager-judging rules is the tiny wager rules: say "You know from experience that a quantity of liquid smaller than a pebble is not deemed to count." instead. Table of Wager Suggestions -description summary (a text) selected rule (a rule) -"'Something smaller than a pebble!' suggests a woman in the front row. She passes forward her own ante to the bar, and the game is on." "'[one of]I know the definition of 'small' is a bit vague, but think smaller than that. Pebble-sized or smaller.[or]That's not quite within the range of small as I understand it.[at random]'" tiny wager rule -"'A liquid,' says a gruff man. ('You always say liquid!' complains one of the others. 'It's his fav[our]ite thing!' says a third.) But the ante is submitted and the challenge set." "'It has to be a liquid [--] any kind.'" liquid wager rule -"'Import Category 5!' shouts a voice. [paragraph break]The barman raises his eyebrows apologetically and says, 'It's a well-defined category, so I have to allow it: any kind of edible consumable object, be that food or beverage, that does not fall under the botanical import category. So no fruits or vegetables.'" "[if the noun is a vegetable]'[The noun] is an agricultural import, so it's outside category 5. You need something consumable but not a fruit or vegetable.'[otherwise]'It has to be some kind of consumable thing but not a vegetable or fruit.'[end if]" import wager rule +description summary (a text) selected rule (an object-based rulebook) +"'Something smaller than a pebble!' suggests a woman in the front row. She passes forward her own ante to the bar, and the game is on." "'[one of]I know the definition of 'small' is a bit vague, but think smaller than that. Pebble-sized or smaller.[or]That's not quite within the range of small as I understand it.[at random]'" tiny wager rules +"'A liquid,' says a gruff man. ('You always say liquid!' complains one of the others. 'It's his fav[our]ite thing!' says a third.) But the ante is submitted and the challenge set." "'It has to be a liquid [--] any kind.'" liquid wager rules +"'Import Category 5!' shouts a voice. [paragraph break]The barman raises his eyebrows apologetically and says, 'It's a well-defined category, so I have to allow it: any kind of edible consumable object, be that food or beverage, that does not fall under the botanical import category. So no fruits or vegetables.'" "[if the noun is a vegetable]'[The noun] is an agricultural import, so it's outside category 5. You need something consumable but not a fruit or vegetable.'[otherwise]'It has to be some kind of consumable thing but not a vegetable or fruit.'[end if]" import wager rules + -The wager-assessment rules are an object-based rulebook. -A wager-assessment rule (this is the liquid wager rule): +A liquid wager rule for something (called the proposed solution) (this is the liquid wager rule): if the proposed solution is fluid: rule succeeds; rule fails. -A wager-assessment rule (this is the tiny wager rule): +A tiny wager rule for something (called the proposed solution) (this is the tiny wager rule): if the proposed solution is nothing: say "Error: wager-assessment tested with nothing!"; rule fails; @@ -3916,7 +3916,7 @@ A wager-assessment rule (this is the tiny wager rule): rule succeeds; rule fails. -A wager-assessment rule (this is the import wager rule): +A import wager rule for something (called the proposed solution) (this is the import wager rule): if the proposed solution is edible and the proposed solution is not a vegetable: rule succeeds; rule fails. From 6c51c881cf278a09b47493c88eb531471968fd4e Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 8 Mar 2025 12:02:02 +0100 Subject: [PATCH 105/138] Update regtests with added word We added a missing "he" to the message printed when the player wins the restoration gel. --- tools/regtest/CM-regtest | 2 +- tools/regtest/CM-regtest-hard | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/regtest/CM-regtest b/tools/regtest/CM-regtest index c681496e..cde87123 100644 --- a/tools/regtest/CM-regtest +++ b/tools/regtest/CM-regtest @@ -122,7 +122,7 @@ We reset the device to p. There's a smell of fermenting apple, then cider, then There is a cheer from the spectators. The word-balance tilts slowly but inexorably. -The barker looks astonished and displeased, except for a fraction of a second when he just noticeably winks. With exaggerated bad grace hands us some restoration gel. "There's your prize. And now this contest is over." +The barker looks astonished and displeased, except for a fraction of a second when he just noticeably winks. With exaggerated bad grace he hands us some restoration gel. "There's your prize. And now this contest is over." He stalks away. diff --git a/tools/regtest/CM-regtest-hard b/tools/regtest/CM-regtest-hard index 12bd5557..7dd797d1 100644 --- a/tools/regtest/CM-regtest-hard +++ b/tools/regtest/CM-regtest-hard @@ -114,7 +114,7 @@ We reset the device to p. There's a smell of fermenting apple, then cider, then There is a cheer from the spectators. The word-balance tilts slowly but inexorably. -The barker looks astonished and displeased, except for a fraction of a second when he just noticeably winks. With exaggerated bad grace hands us some restoration gel. "There's your prize. And now this contest is over." +The barker looks astonished and displeased, except for a fraction of a second when he just noticeably winks. With exaggerated bad grace he hands us some restoration gel. "There's your prize. And now this contest is over." He stalks away. From 3bb23b53a0bfd9df4f46c28d218aa03bba66cebe Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Wed, 12 Mar 2025 21:59:49 +0100 Subject: [PATCH 106/138] Revert pointless change Neither variant seems to have any effect, but if we should keep any of them, it should be the original. --- .../Extensions/Counterfeit Monkey/Character Models.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x index 472797e2..0cf37caa 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Character Models.i7x @@ -18,7 +18,7 @@ Instead of waving the letter-remover at yourself when the current setting of the Check waving the letter-remover at yourself when the current setting of the letter-remover is "i": say "If this were likely to work, it would be a terrible idea. Fortunately, we don't self-identify simply as I, and secondly, the letter-remover won't remove the last letter of something." instead. -The printed name of the player is "Alexandra". [This seems to have no effect whatsoever] +The printed name of yourself is "Alexandra". [This seems to have no effect whatsoever] Understand "us" or "ourselves" or "we" or "ourself" or "alexandra" or "your/my/our/-- body" or "you/yourself" as yourself. From ab2cc8571557251cb2e9406bebc9accbf484d865 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 15 Mar 2025 09:46:05 +0100 Subject: [PATCH 107/138] Subcommands extension: Use tabs It was using a mix. This change will make the next commit more readable. By the way, I think we should stick to tabs throughout the code. --- .../Extensions/Daniel Stelzer/Subcommands.i7x | 760 +++++++++--------- 1 file changed, 380 insertions(+), 380 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x index dee3400e..12fdf179 100644 --- a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x +++ b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x @@ -12,85 +12,85 @@ Constant EmptySnippet = 100; Include (- [ NounDomain domain1 domain2 context dont_ask first_word i j k l answer_words marker snip; - #Ifdef DEBUG; - if (parser_trace >= 4) { - print " [NounDomain called at word ", wn, "^"; - print " "; - if (indef_mode) { - print "seeking indefinite object: "; - if (indef_type & OTHER_BIT) print "other "; - if (indef_type & MY_BIT) print "my "; - if (indef_type & THAT_BIT) print "that "; - if (indef_type & PLURAL_BIT) print "plural "; - if (indef_type & LIT_BIT) print "lit "; - if (indef_type & UNLIT_BIT) print "unlit "; - if (indef_owner ~= 0) print "owner:", (name) indef_owner; - new_line; - print " number wanted: "; - if (indef_wanted == INDEF_ALL_WANTED) print "all"; else print indef_wanted; - new_line; - print " most likely GNAs of names: ", indef_cases, "^"; - } - else print "seeking definite object^"; - } - #Endif; ! DEBUG - - match_length = 0; number_matched = 0; match_from = wn; - - SearchScope(domain1, domain2, context); - - #Ifdef DEBUG; - if (parser_trace >= 4) print " [ND made ", number_matched, " matches]^"; - #Endif; ! DEBUG - - wn = match_from+match_length; - ! === NEW === - if (match_length == 0) { - snip = EmptySnippet; - } else { - snip = 100 * match_from + match_length; - } - ! === END === - - ! If nothing worked at all, leave with the word marker skipped past the - ! first unmatched word... - - if (number_matched == 0) { wn++; rfalse; } - - ! Suppose that there really were some words being parsed (i.e., we did - ! not just infer). If so, and if there was only one match, it must be - ! right and we return it... - - if (match_from <= num_words) { - if (number_matched == 1) { - i=match_list-->0; + #Ifdef DEBUG; + if (parser_trace >= 4) { + print " [NounDomain called at word ", wn, "^"; + print " "; + if (indef_mode) { + print "seeking indefinite object: "; + if (indef_type & OTHER_BIT) print "other "; + if (indef_type & MY_BIT) print "my "; + if (indef_type & THAT_BIT) print "that "; + if (indef_type & PLURAL_BIT) print "plural "; + if (indef_type & LIT_BIT) print "lit "; + if (indef_type & UNLIT_BIT) print "unlit "; + if (indef_owner ~= 0) print "owner:", (name) indef_owner; + new_line; + print " number wanted: "; + if (indef_wanted == INDEF_ALL_WANTED) print "all"; else print indef_wanted; + new_line; + print " most likely GNAs of names: ", indef_cases, "^"; + } + else print "seeking definite object^"; + } + #Endif; ! DEBUG + + match_length = 0; number_matched = 0; match_from = wn; + + SearchScope(domain1, domain2, context); + + #Ifdef DEBUG; + if (parser_trace >= 4) print " [ND made ", number_matched, " matches]^"; + #Endif; ! DEBUG + + wn = match_from+match_length; + ! === NEW === + if (match_length == 0) { + snip = EmptySnippet; + } else { + snip = 100 * match_from + match_length; + } + ! === END === + + ! If nothing worked at all, leave with the word marker skipped past the + ! first unmatched word... + + if (number_matched == 0) { wn++; rfalse; } + + ! Suppose that there really were some words being parsed (i.e., we did + ! not just infer). If so, and if there was only one match, it must be + ! right and we return it... + + if (match_from <= num_words) { + if (number_matched == 1) { + i=match_list-->0; ! === NEW === i.parsed_snippet = snip; ! === END === - return i; - } - - ! ...now suppose that there was more typing to come, i.e. suppose that - ! the user entered something beyond this noun. If nothing ought to follow, - ! then there must be a mistake, (unless what does follow is just a full - ! stop, and or comma) - - if (wn <= num_words) { - i = NextWord(); wn--; - if (i ~= AND1__WD or AND2__WD or AND3__WD or comma_word - or THEN1__WD or THEN2__WD or THEN3__WD - or BUT1__WD or BUT2__WD or BUT3__WD) { - if (lookahead == ENDIT_TOKEN) rfalse; - } - } - } - - ! Now look for a good choice, if there's more than one choice... - - number_of_classes = 0; - - if (number_matched == 1) { - i = match_list-->0; + return i; + } + + ! ...now suppose that there was more typing to come, i.e. suppose that + ! the user entered something beyond this noun. If nothing ought to follow, + ! then there must be a mistake, (unless what does follow is just a full + ! stop, and or comma) + + if (wn <= num_words) { + i = NextWord(); wn--; + if (i ~= AND1__WD or AND2__WD or AND3__WD or comma_word + or THEN1__WD or THEN2__WD or THEN3__WD + or BUT1__WD or BUT2__WD or BUT3__WD) { + if (lookahead == ENDIT_TOKEN) rfalse; + } + } + } + + ! Now look for a good choice, if there's more than one choice... + + number_of_classes = 0; + + if (number_matched == 1) { + i = match_list-->0; if (indef_mode == 1 && indef_type & PLURAL_BIT ~= 0) { if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN or @@ -101,11 +101,11 @@ Include (- EndActivity(DECIDING_WHETHER_ALL_INC_ACT, i); } } - } - if (number_matched > 1) { + } + if (number_matched > 1) { i = true; - if (number_matched > 1) - for (j=0 : j 1) + for (j=0 : jj, match_list-->(j+1)) == false) i = false; ! === NEW === @@ -116,30 +116,30 @@ Include (- (match_list-->(number_matched-1)).parsed_snippet = snip; ! === END === if (i) dont_infer = true; - i = Adjudicate(context); - if (i == -1) rfalse; - if (i == 1) rtrue; ! Adjudicate has made a multiple - ! object, and we pass it on - } - - ! If i is non-zero here, one of two things is happening: either - ! (a) an inference has been successfully made that object i is - ! the intended one from the user's specification, or - ! (b) the user finished typing some time ago, but we've decided - ! on i because it's the only possible choice. - ! In either case we have to keep the pattern up to date, - ! note that an inference has been made and return. - ! (Except, we don't note which of a pile of identical objects.) - - if (i ~= 0) { - ! === NEW === + i = Adjudicate(context); + if (i == -1) rfalse; + if (i == 1) rtrue; ! Adjudicate has made a multiple + ! object, and we pass it on + } + + ! If i is non-zero here, one of two things is happening: either + ! (a) an inference has been successfully made that object i is + ! the intended one from the user's specification, or + ! (b) the user finished typing some time ago, but we've decided + ! on i because it's the only possible choice. + ! In either case we have to keep the pattern up to date, + ! note that an inference has been made and return. + ! (Except, we don't note which of a pile of identical objects.) + + if (i ~= 0) { + ! === NEW === i.parsed_snippet = snip; ! === END === - if (dont_infer) return i; - if (inferfrom == 0) inferfrom=pcount; - pattern-->pcount = i; - return i; - } + if (dont_infer) return i; + if (inferfrom == 0) inferfrom=pcount; + pattern-->pcount = i; + return i; + } if (dont_ask) { ! === NEW === @@ -152,16 +152,16 @@ Include (- return match_list-->0; } - ! If we get here, there was no obvious choice of object to make. If in - ! fact we've already gone past the end of the player's typing (which - ! means the match list must contain every object in scope, regardless - ! of its name), then it's foolish to give an enormous list to choose - ! from - instead we go and ask a more suitable question... + ! If we get here, there was no obvious choice of object to make. If in + ! fact we've already gone past the end of the player's typing (which + ! means the match list must contain every object in scope, regardless + ! of its name), then it's foolish to give an enormous list to choose + ! from - instead we go and ask a more suitable question... - if (match_from > num_words) jump Incomplete; + if (match_from > num_words) jump Incomplete; - ! Now we print up the question, using the equivalence classes as worked - ! out by Adjudicate() so as not to repeat ourselves on plural objects... + ! Now we print up the question, using the equivalence classes as worked + ! out by Adjudicate() so as not to repeat ourselves on plural objects... BeginActivity(ASKING_WHICH_DO_YOU_MEAN_ACT); if (ForActivity(ASKING_WHICH_DO_YOU_MEAN_ACT)) jump SkipWhichQuestion; @@ -174,139 +174,139 @@ Include (- if (j) PARSER_CLARIF_INTERNAL_RM('A'); else PARSER_CLARIF_INTERNAL_RM('B'); - j = number_of_classes; marker = 0; - for (i=1 : i<=number_of_classes : i++ ) { - while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; - k = match_list-->marker; + j = number_of_classes; marker = 0; + for (i=1 : i<=number_of_classes : i++ ) { + while (((match_classes-->marker) ~= i) && ((match_classes-->marker) ~= -i)) marker++; + k = match_list-->marker; - if (match_classes-->marker > 0) print (the) k; else print (a) k; + if (match_classes-->marker > 0) print (the) k; else print (a) k; - if (i < j-1) print ", "; - if (i == j-1) { + if (i < j-1) print ", "; + if (i == j-1) { #Ifdef SERIAL_COMMA; if (j ~= 2) print ","; - #Endif; ! SERIAL_COMMA - PARSER_CLARIF_INTERNAL_RM('H'); - } - } - print "?^"; + #Endif; ! SERIAL_COMMA + PARSER_CLARIF_INTERNAL_RM('H'); + } + } + print "?^"; .SkipWhichQuestion; EndActivity(ASKING_WHICH_DO_YOU_MEAN_ACT); - ! ...and get an answer: + ! ...and get an answer: .WhichOne; - #Ifdef TARGET_ZCODE; - for (i=2 : ii = ' '; - #Endif; ! TARGET_ZCODE - answer_words=Keyboard(buffer2, parse2); - - ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. - first_word = (parse2-->1); - - ! Take care of "all", because that does something too clever here to do - ! later on: - - if (first_word == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { - if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { - l = multiple_object-->0; - for (i=0 : ii; - multiple_object-->(i+1+l) = k; - } - multiple_object-->0 = i+l; - rtrue; - } - PARSER_CLARIF_INTERNAL_RM('C'); - jump WhichOne; - } + #Ifdef TARGET_ZCODE; + for (i=2 : ii = ' '; + #Endif; ! TARGET_ZCODE + answer_words=Keyboard(buffer2, parse2); + + ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. + first_word = (parse2-->1); + + ! Take care of "all", because that does something too clever here to do + ! later on: + + if (first_word == ALL1__WD or ALL2__WD or ALL3__WD or ALL4__WD or ALL5__WD) { + if (context == MULTI_TOKEN or MULTIHELD_TOKEN or MULTIEXCEPT_TOKEN or MULTIINSIDE_TOKEN) { + l = multiple_object-->0; + for (i=0 : ii; + multiple_object-->(i+1+l) = k; + } + multiple_object-->0 = i+l; + rtrue; + } + PARSER_CLARIF_INTERNAL_RM('C'); + jump WhichOne; + } ! Look for a comma, and interpret this as a fresh conversation command ! if so: for (i=1 : i<=answer_words : i++ ) if (WordFrom(i, parse2) == comma_word) { - VM_CopyBuffer(buffer, buffer2); - jump RECONSTRUCT_INPUT; + VM_CopyBuffer(buffer, buffer2); + jump RECONSTRUCT_INPUT; + } + + ! If the first word of the reply can be interpreted as a verb, then + ! assume that the player has ignored the question and given a new + ! command altogether. + ! (This is one time when it's convenient that the directions are + ! not themselves verbs - thus, "north" as a reply to "Which, the north + ! or south door" is not treated as a fresh command but as an answer.) + + #Ifdef LanguageIsVerb; + if (first_word == 0) { + j = wn; first_word = LanguageIsVerb(buffer2, parse2, 1); wn = j; + } + #Endif; ! LanguageIsVerb + if (first_word ~= 0) { + j = first_word->#dict_par1; + if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { + VM_CopyBuffer(buffer, buffer2); + jump RECONSTRUCT_INPUT; } + } - ! If the first word of the reply can be interpreted as a verb, then - ! assume that the player has ignored the question and given a new - ! command altogether. - ! (This is one time when it's convenient that the directions are - ! not themselves verbs - thus, "north" as a reply to "Which, the north - ! or south door" is not treated as a fresh command but as an answer.) - - #Ifdef LanguageIsVerb; - if (first_word == 0) { - j = wn; first_word = LanguageIsVerb(buffer2, parse2, 1); wn = j; - } - #Endif; ! LanguageIsVerb - if (first_word ~= 0) { - j = first_word->#dict_par1; - if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { - VM_CopyBuffer(buffer, buffer2); - jump RECONSTRUCT_INPUT; - } - } - - ! Now we insert the answer into the original typed command, as - ! words additionally describing the same object - ! (eg, > take red button - ! Which one, ... - ! > music - ! becomes "take music red button". The parser will thus have three - ! words to work from next time, not two.) - - #Ifdef TARGET_ZCODE; - k = WordAddress(match_from) - buffer; l=buffer2->1+1; - for (j=buffer + buffer->0 - 1 : j>=buffer+k+l : j-- ) j->0 = 0->(j-l); - for (i=0 : i(k+i) = buffer2->(2+i); - buffer->(k+l-1) = ' '; - buffer->1 = buffer->1 + l; - if (buffer->1 >= (buffer->0 - 1)) buffer->1 = buffer->0; - #Ifnot; ! TARGET_GLULX - k = WordAddress(match_from) - buffer; - l = (buffer2-->0) + 1; - for (j=buffer+INPUT_BUFFER_LEN-1 : j>=buffer+k+l : j-- ) j->0 = j->(-l); - for (i=0 : i(k+i) = buffer2->(WORDSIZE+i); - buffer->(k+l-1) = ' '; - buffer-->0 = buffer-->0 + l; - if (buffer-->0 > (INPUT_BUFFER_LEN-WORDSIZE)) buffer-->0 = (INPUT_BUFFER_LEN-WORDSIZE); - #Endif; ! TARGET_ - - ! Having reconstructed the input, we warn the parser accordingly - ! and get out. + ! Now we insert the answer into the original typed command, as + ! words additionally describing the same object + ! (eg, > take red button + ! Which one, ... + ! > music + ! becomes "take music red button". The parser will thus have three + ! words to work from next time, not two.) + + #Ifdef TARGET_ZCODE; + k = WordAddress(match_from) - buffer; l=buffer2->1+1; + for (j=buffer + buffer->0 - 1 : j>=buffer+k+l : j-- ) j->0 = 0->(j-l); + for (i=0 : i(k+i) = buffer2->(2+i); + buffer->(k+l-1) = ' '; + buffer->1 = buffer->1 + l; + if (buffer->1 >= (buffer->0 - 1)) buffer->1 = buffer->0; + #Ifnot; ! TARGET_GLULX + k = WordAddress(match_from) - buffer; + l = (buffer2-->0) + 1; + for (j=buffer+INPUT_BUFFER_LEN-1 : j>=buffer+k+l : j-- ) j->0 = j->(-l); + for (i=0 : i(k+i) = buffer2->(WORDSIZE+i); + buffer->(k+l-1) = ' '; + buffer-->0 = buffer-->0 + l; + if (buffer-->0 > (INPUT_BUFFER_LEN-WORDSIZE)) buffer-->0 = (INPUT_BUFFER_LEN-WORDSIZE); + #Endif; ! TARGET_ + + ! Having reconstructed the input, we warn the parser accordingly + ! and get out. .RECONSTRUCT_INPUT; num_words = WordCount(); players_command = 100 + num_words; - wn = 1; - #Ifdef LanguageToInformese; - LanguageToInformese(); - ! Re-tokenise: - VM_Tokenise(buffer,parse); - #Endif; ! LanguageToInformese + wn = 1; + #Ifdef LanguageToInformese; + LanguageToInformese(); + ! Re-tokenise: + VM_Tokenise(buffer,parse); + #Endif; ! LanguageToInformese num_words = WordCount(); players_command = 100 + num_words; - actors_location = ScopeCeiling(player); + actors_location = ScopeCeiling(player); FollowRulebook(Activity_after_rulebooks-->READING_A_COMMAND_ACT); - return REPARSE_CODE; + return REPARSE_CODE; - ! Now we come to the question asked when the input has run out - ! and can't easily be guessed (eg, the player typed "take" and there - ! were plenty of things which might have been meant). + ! Now we come to the question asked when the input has run out + ! and can't easily be guessed (eg, the player typed "take" and there + ! were plenty of things which might have been meant). .Incomplete; - if (context == CREATURE_TOKEN) PARSER_CLARIF_INTERNAL_RM('D', actor); - else PARSER_CLARIF_INTERNAL_RM('E', actor); - new_line; + if (context == CREATURE_TOKEN) PARSER_CLARIF_INTERNAL_RM('D', actor); + else PARSER_CLARIF_INTERNAL_RM('E', actor); + new_line; - #Ifdef TARGET_ZCODE; - for (i=2 : ii=' '; - #Endif; ! TARGET_ZCODE - answer_words = Keyboard(buffer2, parse2); + #Ifdef TARGET_ZCODE; + for (i=2 : ii=' '; + #Endif; ! TARGET_ZCODE + answer_words = Keyboard(buffer2, parse2); ! Look for a comma, and interpret this as a fresh conversation command ! if so: @@ -317,117 +317,117 @@ Include (- jump RECONSTRUCT_INPUT; } - first_word=(parse2-->1); - #Ifdef LanguageIsVerb; - if (first_word==0) { - j = wn; first_word=LanguageIsVerb(buffer2, parse2, 1); wn = j; - } - #Endif; ! LanguageIsVerb - - ! Once again, if the reply looks like a command, give it to the - ! parser to get on with and forget about the question... - - if (first_word ~= 0) { - j = first_word->#dict_par1; - if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { - VM_CopyBuffer(buffer, buffer2); - jump RECONSTRUCT_INPUT; - } - } - - ! ...but if we have a genuine answer, then: - ! - ! (1) we must glue in text suitable for anything that's been inferred. - - if (inferfrom ~= 0) { - for (j=inferfrom : jj == PATTERN_NULL) continue; - #Ifdef TARGET_ZCODE; - i = 2+buffer->1; (buffer->1)++; buffer->( i++ ) = ' '; - #Ifnot; ! TARGET_GLULX - i = WORDSIZE + buffer-->0; - (buffer-->0)++; buffer->( i++ ) = ' '; - #Endif; ! TARGET_ - - #Ifdef DEBUG; - if (parser_trace >= 5) - print "[Gluing in inference with pattern code ", pattern-->j, "]^"; - #Endif; ! DEBUG - - ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. - - parse2-->1 = 0; - - ! An inferred object. Best we can do is glue in a pronoun. - ! (This is imperfect, but it's very seldom needed anyway.) - - if (pattern-->j >= 2 && pattern-->j < REPARSE_CODE) { - PronounNotice(pattern-->j); - for (k=1 : k<=LanguagePronouns-->0 : k=k+3) - if (pattern-->j == LanguagePronouns-->(k+2)) { - parse2-->1 = LanguagePronouns-->k; - #Ifdef DEBUG; - if (parser_trace >= 5) - print "[Using pronoun '", (address) parse2-->1, "']^"; - #Endif; ! DEBUG - break; - } - } - else { - ! An inferred preposition. - parse2-->1 = VM_NumberToDictionaryAddress(pattern-->j - REPARSE_CODE); - #Ifdef DEBUG; - if (parser_trace >= 5) - print "[Using preposition '", (address) parse2-->1, "']^"; - #Endif; ! DEBUG - } - - ! parse2-->1 now holds the dictionary address of the word to glue in. - - if (parse2-->1 ~= 0) { - k = buffer + i; - #Ifdef TARGET_ZCODE; - @output_stream 3 k; - print (address) parse2-->1; - @output_stream -3; - k = k-->0; - for (l=i : ll = buffer->(l+2); - i = i + k; buffer->1 = i-2; - #Ifnot; ! TARGET_GLULX - k = Glulx_PrintAnyToArray(buffer+i, INPUT_BUFFER_LEN-i, parse2-->1); - i = i + k; buffer-->0 = i - WORDSIZE; - #Endif; ! TARGET_ - } - } - } - - ! (2) we must glue the newly-typed text onto the end. - - #Ifdef TARGET_ZCODE; - i = 2+buffer->1; (buffer->1)++; buffer->( i++ ) = ' '; - for (j=0 : j1 : i++,j++ ) { - buffer->i = buffer2->(j+2); - (buffer->1)++; - if (buffer->1 == INPUT_BUFFER_LEN) break; - } - #Ifnot; ! TARGET_GLULX - i = WORDSIZE + buffer-->0; - (buffer-->0)++; buffer->( i++ ) = ' '; - for (j=0 : j0 : i++,j++ ) { - buffer->i = buffer2->(j+WORDSIZE); - (buffer-->0)++; - if (buffer-->0 == INPUT_BUFFER_LEN) break; - } - #Endif; ! TARGET_ - - ! (3) we fill up the buffer with spaces, which is unnecessary, but may - ! help incorrectly-written interpreters to cope. - - #Ifdef TARGET_ZCODE; - for (: ii = ' '; - #Endif; ! TARGET_ZCODE - - jump RECONSTRUCT_INPUT; + first_word=(parse2-->1); + #Ifdef LanguageIsVerb; + if (first_word==0) { + j = wn; first_word=LanguageIsVerb(buffer2, parse2, 1); wn = j; + } + #Endif; ! LanguageIsVerb + + ! Once again, if the reply looks like a command, give it to the + ! parser to get on with and forget about the question... + + if (first_word ~= 0) { + j = first_word->#dict_par1; + if ((0 ~= j&1) && ~~LanguageVerbMayBeName(first_word)) { + VM_CopyBuffer(buffer, buffer2); + jump RECONSTRUCT_INPUT; + } + } + + ! ...but if we have a genuine answer, then: + ! + ! (1) we must glue in text suitable for anything that's been inferred. + + if (inferfrom ~= 0) { + for (j=inferfrom : jj == PATTERN_NULL) continue; + #Ifdef TARGET_ZCODE; + i = 2+buffer->1; (buffer->1)++; buffer->( i++ ) = ' '; + #Ifnot; ! TARGET_GLULX + i = WORDSIZE + buffer-->0; + (buffer-->0)++; buffer->( i++ ) = ' '; + #Endif; ! TARGET_ + + #Ifdef DEBUG; + if (parser_trace >= 5) + print "[Gluing in inference with pattern code ", pattern-->j, "]^"; + #Endif; ! DEBUG + + ! Conveniently, parse2-->1 is the first word in both ZCODE and GLULX. + + parse2-->1 = 0; + + ! An inferred object. Best we can do is glue in a pronoun. + ! (This is imperfect, but it's very seldom needed anyway.) + + if (pattern-->j >= 2 && pattern-->j < REPARSE_CODE) { + PronounNotice(pattern-->j); + for (k=1 : k<=LanguagePronouns-->0 : k=k+3) + if (pattern-->j == LanguagePronouns-->(k+2)) { + parse2-->1 = LanguagePronouns-->k; + #Ifdef DEBUG; + if (parser_trace >= 5) + print "[Using pronoun '", (address) parse2-->1, "']^"; + #Endif; ! DEBUG + break; + } + } + else { + ! An inferred preposition. + parse2-->1 = VM_NumberToDictionaryAddress(pattern-->j - REPARSE_CODE); + #Ifdef DEBUG; + if (parser_trace >= 5) + print "[Using preposition '", (address) parse2-->1, "']^"; + #Endif; ! DEBUG + } + + ! parse2-->1 now holds the dictionary address of the word to glue in. + + if (parse2-->1 ~= 0) { + k = buffer + i; + #Ifdef TARGET_ZCODE; + @output_stream 3 k; + print (address) parse2-->1; + @output_stream -3; + k = k-->0; + for (l=i : ll = buffer->(l+2); + i = i + k; buffer->1 = i-2; + #Ifnot; ! TARGET_GLULX + k = Glulx_PrintAnyToArray(buffer+i, INPUT_BUFFER_LEN-i, parse2-->1); + i = i + k; buffer-->0 = i - WORDSIZE; + #Endif; ! TARGET_ + } + } + } + + ! (2) we must glue the newly-typed text onto the end. + + #Ifdef TARGET_ZCODE; + i = 2+buffer->1; (buffer->1)++; buffer->( i++ ) = ' '; + for (j=0 : j1 : i++,j++ ) { + buffer->i = buffer2->(j+2); + (buffer->1)++; + if (buffer->1 == INPUT_BUFFER_LEN) break; + } + #Ifnot; ! TARGET_GLULX + i = WORDSIZE + buffer-->0; + (buffer-->0)++; buffer->( i++ ) = ' '; + for (j=0 : j0 : i++,j++ ) { + buffer->i = buffer2->(j+WORDSIZE); + (buffer-->0)++; + if (buffer-->0 == INPUT_BUFFER_LEN) break; + } + #Endif; ! TARGET_ + + ! (3) we fill up the buffer with spaces, which is unnecessary, but may + ! help incorrectly-written interpreters to cope. + + #Ifdef TARGET_ZCODE; + for (: ii = ' '; + #Endif; ! TARGET_ZCODE + + jump RECONSTRUCT_INPUT; ]; ! end of NounDomain @@ -448,13 +448,13 @@ Include (- !print "sst = ", second_kova, "^"; if (noun_kova == SNIPPET_TY or UNDERSTANDING_TY) { - if (inp1 ~= 1) { inp2 = inp1; second = noun; } - parsed_number = 100*consult_from + consult_words; - inp1 = 1; noun = nothing; ! noun = parsed_number; + if (inp1 ~= 1) { inp2 = inp1; second = noun; } + parsed_number = 100*consult_from + consult_words; + inp1 = 1; noun = nothing; ! noun = parsed_number; } if (second_kova == SNIPPET_TY or UNDERSTANDING_TY) { - parsed_number = 100*consult_from + consult_words; - inp2 = 1; second = nothing; ! second = parsed_number; + parsed_number = 100*consult_from + consult_words; + inp2 = 1; second = nothing; ! second = parsed_number; } mask = ActionData-->(at+AD_REQUIREMENTS); @@ -462,61 +462,61 @@ Include (- meta = 0; if (inp1 == 1) { - if (noun_kova == OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('B'); new_line; } - rtrue; - } + if (noun_kova == OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('B'); new_line; } + rtrue; + } } else { - if (noun_kova ~= OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('C'); new_line; } - rtrue; - } - if ((mask & NEED_NOUN_ABIT) && (noun == nothing)) { - @push act_requester; act_requester = nothing; - CarryOutActivity(SUPPLYING_A_MISSING_NOUN_ACT); - @pull act_requester; - if (noun == nothing) { - if (say__p) rtrue; - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('D'); new_line; } - rtrue; - } - ! === NEW === - noun.parsed_snippet = EmptySnippet; - ! === END === - } - if (((mask & NEED_NOUN_ABIT) == 0) && (noun ~= nothing)) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('E'); new_line; } - rtrue; - } + if (noun_kova ~= OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('C'); new_line; } + rtrue; + } + if ((mask & NEED_NOUN_ABIT) && (noun == nothing)) { + @push act_requester; act_requester = nothing; + CarryOutActivity(SUPPLYING_A_MISSING_NOUN_ACT); + @pull act_requester; + if (noun == nothing) { + if (say__p) rtrue; + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('D'); new_line; } + rtrue; + } + ! === NEW === + noun.parsed_snippet = EmptySnippet; + ! === END === + } + if (((mask & NEED_NOUN_ABIT) == 0) && (noun ~= nothing)) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('E'); new_line; } + rtrue; + } } if (inp2 == 1) { - if (second_kova == OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('F'); new_line; } - rtrue; - } + if (second_kova == OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('F'); new_line; } + rtrue; + } } else { - if (second_kova ~= OBJECT_TY) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('G'); new_line; } - rtrue; - } - if ((mask & NEED_SECOND_ABIT) && (second == nothing)) { - @push act_requester; act_requester = nothing; - CarryOutActivity(SUPPLYING_A_MISSING_SECOND_ACT); - @pull act_requester; - if (second == nothing) { - if (say__p) rtrue; - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('H'); new_line; } - rtrue; - } - ! === NEW === - second.parsed_snippet = EmptySnippet; - ! === END === - } - if (((mask & NEED_SECOND_ABIT) == 0) && (second ~= nothing)) { - if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('I'); new_line; } - rtrue; - } + if (second_kova ~= OBJECT_TY) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('G'); new_line; } + rtrue; + } + if ((mask & NEED_SECOND_ABIT) && (second == nothing)) { + @push act_requester; act_requester = nothing; + CarryOutActivity(SUPPLYING_A_MISSING_SECOND_ACT); + @pull act_requester; + if (second == nothing) { + if (say__p) rtrue; + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('H'); new_line; } + rtrue; + } + ! === NEW === + second.parsed_snippet = EmptySnippet; + ! === END === + } + if (((mask & NEED_SECOND_ABIT) == 0) && (second ~= nothing)) { + if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('I'); new_line; } + rtrue; + } } rfalse; From 45cebe3aa4d5e05114eec25e4352e2605795e3d7 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 15 Mar 2025 10:01:19 +0100 Subject: [PATCH 108/138] Update Subcommands extension This does not actually touch any subcommands functionality, but because the extension replaces NounDomain function, any changes to NounDomain must be made here. What we in fact do is implementing the upstream fix for bug I7-2115. I haven't actually seen this bug manifest in Counterfeit Monkey, so it is a pre-emptive fix. But it is the kind of bug that seems like it should be possible to trigger in most games. --- .../Extensions/Daniel Stelzer/Subcommands.i7x | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x index 12fdf179..5a47b26e 100644 --- a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x +++ b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x @@ -1,15 +1,23 @@ -Subcommands by Daniel Stelzer begins here. +Version 3/250315 of Subcommands by Daniel Stelzer begins here. "Exposes the snippets referring to each noun." An object has a snippet called the subcommand. The subcommand property translates into I6 as "parsed_snippet". Include (- + Property parsed_snippet; Constant EmptySnippet = 100; +Global dont_inject_pronoun; + -) after "Definitions.i6t". Include (- + +! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== +! Parser.i6t: Noun Domain +! ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== + [ NounDomain domain1 domain2 context dont_ask first_word i j k l answer_words marker snip; #Ifdef DEBUG; @@ -120,6 +128,7 @@ Include (- if (i == -1) rfalse; if (i == 1) rtrue; ! Adjudicate has made a multiple ! object, and we pass it on + dont_inject_pronoun = true; ! See bug I7-2115 for discussion of this } ! If i is non-zero here, one of two things is happening: either @@ -280,6 +289,8 @@ Include (- .RECONSTRUCT_INPUT; + dont_inject_pronoun = false; ! ADDED + num_words = WordCount(); players_command = 100 + num_words; wn = 1; #Ifdef LanguageToInformese; @@ -362,16 +373,18 @@ Include (- ! (This is imperfect, but it's very seldom needed anyway.) if (pattern-->j >= 2 && pattern-->j < REPARSE_CODE) { - PronounNotice(pattern-->j); - for (k=1 : k<=LanguagePronouns-->0 : k=k+3) - if (pattern-->j == LanguagePronouns-->(k+2)) { - parse2-->1 = LanguagePronouns-->k; - #Ifdef DEBUG; - if (parser_trace >= 5) - print "[Using pronoun '", (address) parse2-->1, "']^"; - #Endif; ! DEBUG - break; - } + if (~~dont_inject_pronoun) { + PronounNotice(pattern-->j); + for (k=1 : k<=LanguagePronouns-->0 : k=k+3) + if (pattern-->j == LanguagePronouns-->(k+2)) { + parse2-->1 = LanguagePronouns-->k; + #Ifdef DEBUG; + if (parser_trace >= 5) + print "[Using pronoun '", (address) parse2-->1, "']^"; + #Endif; ! DEBUG + break; + } + } } else { ! An inferred preposition. From b2b6fc39c84a58ba96b4123d6d8e1efd8b376cd7 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 15 Mar 2025 15:24:44 +0100 Subject: [PATCH 109/138] Subcommands: Fix errors in tab conversion Remove tabs inserted into strings and comments. --- .../Extensions/Daniel Stelzer/Subcommands.i7x | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x index 5a47b26e..cf1d692a 100644 --- a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x +++ b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x @@ -22,8 +22,8 @@ Include (- first_word i j k l answer_words marker snip; #Ifdef DEBUG; if (parser_trace >= 4) { - print " [NounDomain called at word ", wn, "^"; - print " "; + print " [NounDomain called at word ", wn, "^"; + print " "; if (indef_mode) { print "seeking indefinite object: "; if (indef_type & OTHER_BIT) print "other "; @@ -34,10 +34,10 @@ Include (- if (indef_type & UNLIT_BIT) print "unlit "; if (indef_owner ~= 0) print "owner:", (name) indef_owner; new_line; - print " number wanted: "; + print " number wanted: "; if (indef_wanted == INDEF_ALL_WANTED) print "all"; else print indef_wanted; new_line; - print " most likely GNAs of names: ", indef_cases, "^"; + print " most likely GNAs of names: ", indef_cases, "^"; } else print "seeking definite object^"; } @@ -48,7 +48,7 @@ Include (- SearchScope(domain1, domain2, context); #Ifdef DEBUG; - if (parser_trace >= 4) print " [ND made ", number_matched, " matches]^"; + if (parser_trace >= 4) print " [ND made ", number_matched, " matches]^"; #Endif; ! DEBUG wn = match_from+match_length; @@ -66,7 +66,7 @@ Include (- if (number_matched == 0) { wn++; rfalse; } ! Suppose that there really were some words being parsed (i.e., we did - ! not just infer). If so, and if there was only one match, it must be + ! not just infer). If so, and if there was only one match, it must be ! right and we return it... if (match_from <= num_words) { @@ -79,15 +79,15 @@ Include (- } ! ...now suppose that there was more typing to come, i.e. suppose that - ! the user entered something beyond this noun. If nothing ought to follow, + ! the user entered something beyond this noun. If nothing ought to follow, ! then there must be a mistake, (unless what does follow is just a full ! stop, and or comma) if (wn <= num_words) { i = NextWord(); wn--; if (i ~= AND1__WD or AND2__WD or AND3__WD or comma_word - or THEN1__WD or THEN2__WD or THEN3__WD - or BUT1__WD or BUT2__WD or BUT3__WD) { + or THEN1__WD or THEN2__WD or THEN3__WD + or BUT1__WD or BUT2__WD or BUT3__WD) { if (lookahead == ENDIT_TOKEN) rfalse; } } @@ -126,16 +126,16 @@ Include (- if (i) dont_infer = true; i = Adjudicate(context); if (i == -1) rfalse; - if (i == 1) rtrue; ! Adjudicate has made a multiple - ! object, and we pass it on + if (i == 1) rtrue; ! Adjudicate has made a multiple + ! object, and we pass it on dont_inject_pronoun = true; ! See bug I7-2115 for discussion of this } ! If i is non-zero here, one of two things is happening: either ! (a) an inference has been successfully made that object i is - ! the intended one from the user's specification, or + ! the intended one from the user's specification, or ! (b) the user finished typing some time ago, but we've decided - ! on i because it's the only possible choice. + ! on i because it's the only possible choice. ! In either case we have to keep the pattern up to date, ! note that an inference has been made and return. ! (Except, we don't note which of a pile of identical objects.) @@ -262,8 +262,8 @@ Include (- ! Now we insert the answer into the original typed command, as ! words additionally describing the same object ! (eg, > take red button - ! Which one, ... - ! > music + ! Which one, ... + ! > music ! becomes "take music red button". The parser will thus have three ! words to work from next time, not two.) @@ -493,9 +493,9 @@ Include (- if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('D'); new_line; } rtrue; } - ! === NEW === - noun.parsed_snippet = EmptySnippet; - ! === END === + ! === NEW === + noun.parsed_snippet = EmptySnippet; + ! === END === } if (((mask & NEED_NOUN_ABIT) == 0) && (noun ~= nothing)) { if (actor == player) { ACTION_PROCESSING_INTERNAL_RM('E'); new_line; } From 02ef744acd705d950e75d744a41fd9b351cfaf79 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 16 Mar 2025 21:08:38 +0100 Subject: [PATCH 110/138] Subcommands: More tab fixes This was harder than I thought. Fingers crossed that these are the last ones. --- .../Extensions/Daniel Stelzer/Subcommands.i7x | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x index cf1d692a..70079e71 100644 --- a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x +++ b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Subcommands.i7x @@ -72,9 +72,9 @@ Include (- if (match_from <= num_words) { if (number_matched == 1) { i=match_list-->0; - ! === NEW === - i.parsed_snippet = snip; - ! === END === + ! === NEW === + i.parsed_snippet = snip; + ! === END === return i; } @@ -86,8 +86,8 @@ Include (- if (wn <= num_words) { i = NextWord(); wn--; if (i ~= AND1__WD or AND2__WD or AND3__WD or comma_word - or THEN1__WD or THEN2__WD or THEN3__WD - or BUT1__WD or BUT2__WD or BUT3__WD) { + or THEN1__WD or THEN2__WD or THEN3__WD + or BUT1__WD or BUT2__WD or BUT3__WD) { if (lookahead == ENDIT_TOKEN) rfalse; } } @@ -154,9 +154,9 @@ Include (- ! === NEW === if (match_length == 0) { (match_list-->0).parsed_snippet = EmptySnippet; - } else { + } else { (match_list-->0).parsed_snippet = 100 * match_from + match_length; - } + } ! === END === return match_list-->0; } From 57fceaa9ae5b7d091cf93bd2b6e02d5c2134c7fe Mon Sep 17 00:00:00 2001 From: Daniel Stelzer Date: Sun, 16 Mar 2025 11:42:52 -0500 Subject: [PATCH 111/138] Fix very minor typo (#238) --- .../Extensions/Counterfeit Monkey/Tools.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index fc717cd8..60f8c843 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -650,7 +650,7 @@ Test it-construction with "autoupgrade / wave a-remover at pita / wave p-remover Chapter 4 - The Synthesizer -The plexiglas case is a thing in the Language Studies Seminar Room. It is enterable, transparent, closed, openable, lockable, and locked. It is fixed in place. The initial appearance is "A massive plexiglas case takes up one corner of the room." The description is "The case is made of very thick protective plastic on a metal frame[if the screws are part of the plexiglas case and the plexiglas case is lockable]. It is thoroughly locked shut; I don't think [we][']ll have any luck with normal forms of approach. However, plexiglas is a cuttable substance with the right tools, and then there are the screws at the back[otherwise if the plexiglas case is not lockable]. The lid has been compromised by a saw, and the case is now permanenty open[end if]." +The plexiglas case is a thing in the Language Studies Seminar Room. It is enterable, transparent, closed, openable, lockable, and locked. It is fixed in place. The initial appearance is "A massive plexiglas case takes up one corner of the room." The description is "The case is made of very thick protective plastic on a metal frame[if the screws are part of the plexiglas case and the plexiglas case is lockable]. It is thoroughly locked shut; I don't think [we][']ll have any luck with normal forms of approach. However, plexiglas is a cuttable substance with the right tools, and then there are the screws at the back[otherwise if the plexiglas case is not lockable]. The lid has been compromised by a saw, and the case is now permanently open[end if]." Test plexibug with "tutorial off / get plexiglas" in the Language Studies Seminar Room. From fbcb34ad35d0a57bd0e20f8682a1bd514982d41c Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 25 Mar 2025 18:26:01 +0100 Subject: [PATCH 112/138] Add missing word Noted by Daniel Stelzer in the Let's Play: Counterfeit Monkey thread on intfiction.org. --- .../Counterfeit Monkey/Repository Alphabetic Details.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index e7edf8a9..a030758b 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -2350,7 +2350,7 @@ The printed name of the polling-chart is "polling chart". Understand "polling" o A poppycock is a noisy r-abstract thing. The indefinite article is "some". The heft of the poppycock is 0. The description is "A great deal of drivel. Or, no: more the concept of drivel, as regarded by a previous age. -Curiously, therefore, the concept manifests itself as a little floaty cloud in which a flustered gent with Victorian [if the player wears the Britishizing goggles]moustaches[otherwise]mustaches[end if], verging on apoplexy." +Curiously, therefore, the concept manifests itself as a little floaty cloud in which is a flustered gent with Victorian [if the player wears the Britishizing goggles]moustaches[otherwise]mustaches[end if], verging on apoplexy." Instead of listening to the poppycock, say "[one of]'POPPYCOCK!' shouts the little imaginary man[or]'ARRANT NONSENSE,' shouts the angry poppycock-gentleman[or]'STUFF! POPPYCOCK!' The imaginary man is beet red and his mustaches quiver[at random]." From ae05efab1672fbf907a27a0032d478c8958cc3d8 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 27 Mar 2025 19:31:09 +0100 Subject: [PATCH 113/138] Fix entering Brock's laptop password verbatim MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Punctuation Removal replaces the exclamation mark in the password with a space, so we check for the result of that instead. (An alternative would have been to roll our own punctuation removal, but this is less work.) This bug was discovered by Mike Russo in the Let’s Play: Counterfeit Monkey thread on intfiction.org. --- .../Counterfeit Monkey/Act V Atlantida Herself.i7x | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index b0fbe75a..d9bc33a3 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -1310,6 +1310,14 @@ The expensive laptop is a laptop. The description is "It's Brock's fav[our]ite o The expensive laptop is running a password-lock program called Brock's security. The password of Brock's security is "2!ch_nqrx@v". +An input handling rule for Brock's security (this is the fix broken password rule): + let N be "[the topic understood]"; + if N matches the text "2 ch_nqrx@v": + carry out the rewarding successful answering activity with Brock's security; + rule succeeds; + otherwise: + abide by the check for correct passwords rule. + The expensive laptop is running a multiple-choice program called Brock-OS. The options table of Brock-OS is the Table of GUI Choices. From a27a7961e20e93cd3b392537c247a5a454efc9b3 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Mar 2025 00:24:24 +0100 Subject: [PATCH 114/138] Make Brock's nice-garment quip weakly phrased Apparently there is a small chance that Brock's quip about something we're wearing ("Nice wig") will be preceded by a beat, and an even smaller chance that it will be the exact same beat as in the following paragraph, as Mike Russo discovered in his let's play. By giving the quip the weakly-phrased property, we make sure that it will be printed as a part of the following paragraph, hopefully preventing that this ever happens again. I also think it looks nicer this way. --- .../Animal Actions and Human Conversation.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 260881d2..389f64b3 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -5167,7 +5167,7 @@ The waxen look melts and he grins. 'Thank god. It's harder than you'd expect bei weird-you-look is an NPC-directed quip. The reply is "'It's weird [--] you have a different face but the expressions are still yours. It's like you have a really good rubber mask on.'" -nice-garment is an NPC-directed quip. +nice-garment is a weakly-phrased NPC-directed quip. The reply is "'[worn-thing].'" To say worn-thing: From 7971e19ce02fd38591cfa59bcf60b204ae995965 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Mar 2025 13:01:08 +0100 Subject: [PATCH 115/138] Fix capitalization of your bed As pointed out by Mike Russo in his let's play. --- .../Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x index d9bc33a3..c72b855b 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act V Atlantida Herself.i7x @@ -1426,6 +1426,9 @@ Every turn when the location is nautical and portholes are in location: Your bed is a yacht bed in your bunk. It is scenery. The description is "Homely but familiar." +Rule for describing the drawer layout of your bed: + say "Your bed has two drawers. "; + Some back portholes are portholes. They are in your bunk. Instead of going fore in Your Bunk: From 03db96370da91c88402adf6b23e9689e778c9eec Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Mar 2025 13:04:36 +0100 Subject: [PATCH 116/138] Fix switching on a computer while wearing the monocle Pointed out by Mike Russo in his let's play. When starting up a computer, we automatically examine an associated screen. This may give a confusing message if we are wearing the monocle, such as "The monocle pings happily as you sight Book search with the crosshairs." (There may be something else going wrong here, as the Book search is a search engine and not a screen.) We hackily fix this by temporarily removing the monocle from the player. --- .../Extensions/Counterfeit Monkey/Tools.i7x | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index 60f8c843..078dfb39 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -1219,6 +1219,20 @@ But I have to say, you were right: the scope neither beeps nor blatts. [The acto First carry out looking at the inscription through an authentication scope: say "[The second noun] begins to whirr and whirr, as though something inside has caught in an unresolvable loop. After a very long time, it whirrs down again without any noise of rejection or acceptance." instead. +Report switching on a computer (this is the new computers make a noise on starting rule): + say "[The startup noise of the noun][paragraph break]" (A); + let target screen be a random screen that is part of the noun; + let player-wears-monocle be false; + if the player is wearing the monocle: + now player-wears-monocle is true; + now the player carries the monocle; + try examining the target screen; + if player-wears-monocle is true: + now the player wears the monocle; + stop the action. + +The new computers make a noise on starting rule is listed instead of the computers make a noise on starting rule in the report switching on rulebook. + Chapter 8 - The Origin Paste A thing can be disguised or undisguised. A thing is usually undisguised. From 1625660a0166f1d36e54d8af64dff943ec65a4b6 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Mar 2025 13:41:47 +0100 Subject: [PATCH 117/138] Fix examining a computer while wearing the monocle Related to the last commit, examining a computer will automatically make you examine an associated screen (or, for some reason, a search engine if the device has no screen.) This will produce a confusing message if the player is wearing the monocle, so we sneakily remove it temporarily, --- .../Extensions/Counterfeit Monkey/Tools.i7x | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index 078dfb39..5ae3bd70 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -1233,6 +1233,19 @@ Report switching on a computer (this is the new computers make a noise on starti The new computers make a noise on starting rule is listed instead of the computers make a noise on starting rule in the report switching on rulebook. +After examining a switched on computer (this is the new report software when examining a functioning computer rule): + let target screen be a random screen that is part of the noun; + let player-wears-monocle be false; + if the player is wearing the monocle: + now player-wears-monocle is true; + now the player carries the monocle; + try examining the target screen; + if player-wears-monocle is true: + now the player wears the monocle; + continue the action. + +The new report software when examining a functioning computer rule is listed instead of the report software when examining a functioning computer rule in the after rulebook. + Chapter 8 - The Origin Paste A thing can be disguised or undisguised. A thing is usually undisguised. From 092546b5231cc595fec949bce313f7186efd11e3 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Mar 2025 21:42:56 +0100 Subject: [PATCH 118/138] Update change log --- CHANGELOG.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d075cf0..e30557c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - Brock could be turned into a bock, potentially breaking the game. (@Roachbones) - It is now possible to sit on the built-in seating in the Galley. (@Roachbones) - Creating the scree will once again kill the player. (This was changed in release 9.) The movie screen is assumed to always be in place in too many places in the code. (Mike Russo) +- The password to Brock's laptop would not be understood if entered verbatim (Mike Russo) ### Cosmetic output errors @@ -33,8 +34,13 @@ - Eliminates many unintended double spaces throughout the output text. (@Roachbones, @lynn) - There would in some cases be a missing newline after the "Batman remark" at the end of the roundabout scene. (@eriktorbjorn) - There would sometimes be a superfluous "I can't see what you're talking about" message when use of the letter-remover was attempted but disallowed. (@eriktorbjorn) -- A couple of missing words ("he" and "when", to be precise) in output text were corrected. (Mike Russo) +- Adds various missing words ("he", "when", and "is", to be precise) to the output text. (Mike Russo) - A stray period was printed when exiting the tin hut while the trap door was closing. (Mike Russo) +- When Brock comments something the player is wearing, it could sometimes be accompanied by a bit of flavor text that would be repeated in the next paragraph. (Mike Russo) +- Fixes a typo in the description of the synthesizer after sawing it open ("permanenty".) (@dstelzer) +- Switching on or examining the ebook reader while wearing the monocle would produce some confusing text about examining the Book search engine. Interacting with other computers could produce similar undesired output. (Mike Russo) +- The message when examining the player's yacht bed would start a sentence with a lower case letter. (Mike Russo) + ### Parsing From d76804c41e2c0e57cb4850b312fa863a6d726c0d Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Fri, 28 Mar 2025 23:38:56 +0100 Subject: [PATCH 119/138] Update change log again --- CHANGELOG.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e30557c8..62ccf9af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,22 +5,22 @@ ### Bugs fixed - Search engine descriptions were not shown for the e-book reader and the secretary's computer. (@Roachbones) -- The sun wasn't distant but behaved as if sitting right next to you (@Roachbones). +- The sun did not have the "distant" attribute, but instead behaved as if being touchable. (@Roachbones) - With Andra in control, it was possible to get a reprise of Alex's hesitation speech by trying to go back in through the tall window, if you diregarded it the first time when going out. (@Roachbones) - Examining the word, the words, or the wordage could cause run-time problems. (@Roachbones) - The wordage description was broken since release 7. - The start up data embedded in the game file was bad in the two previous releases. The game will now print a warning at startup if it detects bad embedded data. (@hanna-kruppe) - Run-time problem P10 would occur when trying to remove letters from the current room. (@eriktorbjorn) -- Lena would occasionally ask the player to change the modem when it is no longer present. (@eriktorbjorn) +- Lena would occasionally ask the player to change the modem even though it is no longer present. (@eriktorbjorn) - The fast travel GO TO command could be used to bypass the confrontation with Alex's father (@DefKonOne). - Typing EXAMINE DIRECTION and then replying with a direction (such as NORTH) to the resulting "Which do you mean" disambiguation question would cause run-time problem P10. -- Run-time problem P60 would occur when using the soap dispenser after removing all sinks. (@Stealthii) +- Run-time problem P60 would occur when using the soap dispenser after removing all the sinks. (@Stealthii) - Turning on the tap while in a shower or bath would cause run-time problem P43 as the game attempted to move the player out of play. It was also possible to drop any objects in the bath or shower, and then remove them from play by turning on the tap. We fix this by blocking entry into showers and baths. (@Roachbones). - The first aid station was not fixed in place and could be picked up, while its description still said it was mounted to the wall. (@lynn) - Brock could be turned into a bock, potentially breaking the game. (@Roachbones) - It is now possible to sit on the built-in seating in the Galley. (@Roachbones) -- Creating the scree will once again kill the player. (This was changed in release 9.) The movie screen is assumed to always be in place in too many places in the code. (Mike Russo) -- The password to Brock's laptop would not be understood if entered verbatim (Mike Russo) +- Creating the scree will once again kill the player. This was changed in release 9, but it turns out the movie screen is assumed to always be in place in too many places in the code. (Mike Russo) +- The password to Brock's laptop would not be understood if entered verbatim, as the Punctuation Removal extension removes one of the characters. (Mike Russo) ### Cosmetic output errors @@ -41,7 +41,6 @@ - Switching on or examining the ebook reader while wearing the monocle would produce some confusing text about examining the Book search engine. Interacting with other computers could produce similar undesired output. (Mike Russo) - The message when examining the player's yacht bed would start a sentence with a lower case letter. (Mike Russo) - ### Parsing - T INSERTER without a hyphen is now understood as the T-inserter. From ab5d21278793830deb1f924dc8a3515427cad34e Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 27 Apr 2025 14:14:46 +0200 Subject: [PATCH 120/138] Fix chaining letter-removing commands Using the Before Processing a Command extension by Daniel Stelzer. U-REMOVE MOURNING DRESS THEN WAVE R-REMOVER AT T-SHIRTS and similar now works. Thanks to @dstelzer for working out how to do this. --- Counterfeit Monkey.inform/Source/story.ni | 1 + .../Extensions/Counterfeit Monkey/Tools.i7x | 35 +- .../Before Processing a Command.i7x | 491 ++++++++++++++++++ 3 files changed, 508 insertions(+), 19 deletions(-) create mode 100644 Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Before Processing a Command.i7x diff --git a/Counterfeit Monkey.inform/Source/story.ni b/Counterfeit Monkey.inform/Source/story.ni index cb94ecf3..fba5a30f 100644 --- a/Counterfeit Monkey.inform/Source/story.ni +++ b/Counterfeit Monkey.inform/Source/story.ni @@ -82,6 +82,7 @@ Use static object grouping. Include Scope Caching by Mike Ciul. Include Large Game Speedup by Andrew Plotkin. Include Subcommands by Daniel Stelzer. +Include Before Processing a Command by Daniel Stelzer. [ Startup precomputation ] Include version 1/160718 of Startup Precomputation by Dannii Willis. diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index 5ae3bd70..5ba1655f 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -109,36 +109,33 @@ After printing the name of the small knob: Sanity-check doing something to the small knob: now the noun is the letter-remover device. -To expand X-remover-string: - replace the text " [current setting of the letter-remover]-remover" in player-command-substitute with " letter-remover"; - replace the regular expression "^[current setting of the letter-remover]-remove " in player-command-substitute with "letter-remove ". - -A first command-string altering rule (this is the implicitly change letter-remover setting rule): +A first before processing a command rule (this is the implicitly change letter-remover setting rule): now the letter-remover is static; - let N be player-command-substitute; - if N matches the regular expression ".-remove": - if N matches the regular expression "(.*) (.)-remover (.)*": - replace the regular expression "(.*) (.)-remover (.)*" in N with "\2"; - otherwise if N matches the regular expression "(.*) (.)-remover": - replace the regular expression "(.*) (.)-remover" in N with "\2"; - otherwise: - replace the regular expression "(.)-remove.*" in N with "\1"; + let C be the substituted form of the player's command; + if C matches the regular expression "\b.-remove": + let N be "[C]"; + let pre be "[C]"; + let post be "[C]"; + replace the regular expression ".*?\b(.)-remove.*" in N with "\1"; + replace the regular expression "(.*?)\b.-remove.*" in pre with "\1"; + replace the regular expression ".*?\b.-remove(.*)" in post with "\1"; + now C is "[pre]letter-remove[post]"; if the current setting of the letter-remover exactly matches the text N: - expand X-remover-string; + change the text of the player's command to C; make no decision; if the number of characters in N is greater than 1: make no decision; + unless N matches the regular expression "": + say "Only the 26 letters of the English alphabet are available to the letter-remover."; + reject the player's command; if the letter-remover is in a closed backpack: silently try opening the backpack; if the backpack is closed: - parsing fails; + reject the player's command; if the player can touch the letter-remover: - unless N matches the regular expression "": - say "Only the 26 letters of the English alphabet are available to the letter-remover."; - parsing fails; now the current setting of the letter-remover is N; now the letter-remover is changing; - expand X-remover-string; + change the text of the player's command to C; otherwise: say "[run paragraph on]"; diff --git a/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Before Processing a Command.i7x b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Before Processing a Command.i7x new file mode 100644 index 00000000..696c7da6 --- /dev/null +++ b/Counterfeit Monkey.materials/Extensions/Daniel Stelzer/Before Processing a Command.i7x @@ -0,0 +1,491 @@ +Version 2/250424 of Before Processing a Command by Daniel Stelzer begins here. + +Book - I7 Code + +Before processing a command is a rulebook. + +Book - I6 Code + +Chapter - Default (for use without Unified Glulx Input by Andrew Plotkin) + +Include (- + if (held_back_mode) { + held_back_mode = false; wn = hb_wn; + if (verb_wordnum > 0) i = WordAddress(verb_wordnum); else i = WordAddress(1); + j = WordAddress(wn); + if (i<=j) for (: i0 = ' '; + i = NextWord(); + if (i == AGAIN1__WD or AGAIN2__WD or AGAIN3__WD) { + ! Delete the words "then again" from the again buffer, + ! in which we have just realised that it must occur: + ! prevents an infinite loop on "i. again" + + i = WordAddress(wn-2)-buffer; + if (wn > num_words) j = INPUT_BUFFER_LEN-1; + else j = WordAddress(wn)-buffer; + for (: ii = ' '; + } + + VM_Tokenise(buffer, parse); + jump ReParse; + } + + .ReType; + + cobj_flag = 0; + actors_location = ScopeCeiling(player); + BeginActivity(READING_A_COMMAND_ACT); if (ForActivity(READING_A_COMMAND_ACT)==false) { + Keyboard(buffer,parse); + num_words = WordCount(); players_command = 100 + num_words; + } if (EndActivity(READING_A_COMMAND_ACT)) jump ReType; + + .ReParse; + + parser_inflection = name; + + ! Initially assume the command is aimed at the player, and the verb + ! is the first word + + num_words = WordCount(); players_command = 100 + num_words; + wn = 1; inferred_go = false; + + #Ifdef LanguageToInformese; + LanguageToInformese(); + ! Re-tokenise: + VM_Tokenise(buffer,parse); + #Endif; ! LanguageToInformese + + num_words = WordCount(); players_command = 100 + num_words; + + ! CHANGED DMS + FollowRulebook((+ before processing a command +)); + if(RulebookFailed()) jump ReType; + ! END CHANGE + + k=0; + #Ifdef DEBUG; + if (parser_trace >= 2) { + print "[ "; + for (i=0 : i(i*2 + 1); + #Ifnot; ! TARGET_GLULX + j = parse-->(i*3 + 1); + #Endif; ! TARGET_ + k = WordAddress(i+1); + l = WordLength(i+1); + print "~"; for (m=0 : mm; print "~ "; + + if (j == 0) print "?"; + else { + #Ifdef TARGET_ZCODE; + if (UnsignedCompare(j, HDR_DICTIONARY-->0) >= 0 && + UnsignedCompare(j, HDR_HIGHMEMORY-->0) < 0) + print (address) j; + else print j; + #Ifnot; ! TARGET_GLULX + if (j->0 == $60) print (address) j; + else print j; + #Endif; ! TARGET_ + } + if (i ~= num_words-1) print " / "; + } + print " ]^"; + } + #Endif; ! DEBUG + verb_wordnum = 1; + actor = player; + actors_location = ScopeCeiling(player); + usual_grammar_after = 0; + + .AlmostReParse; + + scope_token = 0; + action_to_be = NULL; + + ! Begin from what we currently think is the verb word + + .BeginCommand; + + wn = verb_wordnum; + verb_word = NextWordStopped(); + + ! If there's no input here, we must have something like "person,". + + if (verb_word == -1) { + best_etype = STUCK_PE; jump GiveError; + } + if (verb_word == comma_word) { + best_etype = COMMABEGIN_PE; jump GiveError; + } + + ! Now try for "again" or "g", which are special cases: don't allow "again" if nothing + ! has previously been typed; simply copy the previous text across + + if (verb_word == AGAIN2__WD or AGAIN3__WD) verb_word = AGAIN1__WD; + if (verb_word == AGAIN1__WD) { + if (actor ~= player) { + best_etype = ANIMAAGAIN_PE; + jump GiveError; + } + #Ifdef TARGET_ZCODE; + if (buffer3->1 == 0) { + PARSER_COMMAND_INTERNAL_RM('D'); new_line; + jump ReType; + } + #Ifnot; ! TARGET_GLULX + if (buffer3-->0 == 0) { + PARSER_COMMAND_INTERNAL_RM('D'); new_line; + jump ReType; + } + #Endif; ! TARGET_ + for (i=0 : ii = buffer3->i; + VM_Tokenise(buffer,parse); + num_words = WordCount(); players_command = 100 + num_words; + jump ReParse; + } + + ! Save the present input in case of an "again" next time + + if (verb_word ~= AGAIN1__WD) + for (i=0 : ii = buffer->i; + + if (usual_grammar_after == 0) { + j = verb_wordnum; + i = RunRoutines(actor, grammar); + #Ifdef DEBUG; + if (parser_trace >= 2 && actor.grammar ~= 0 or NULL) + print " [Grammar property returned ", i, "]^"; + #Endif; ! DEBUG + + if ((i ~= 0 or 1) && (VM_InvalidDictionaryAddress(i))) { + usual_grammar_after = verb_wordnum; i=-i; + } + + if (i == 1) { + parser_results-->ACTION_PRES = action; + parser_results-->NO_INPS_PRES = 0; + parser_results-->INP1_PRES = noun; + parser_results-->INP2_PRES = second; + if (noun) parser_results-->NO_INPS_PRES = 1; + if (second) parser_results-->NO_INPS_PRES = 2; + rtrue; + } + if (i ~= 0) { verb_word = i; wn--; verb_wordnum--; } + else { wn = verb_wordnum; verb_word = NextWord(); } + } + else usual_grammar_after = 0; +-) instead of "Parser Letter A" in "Parser.i6t". + +Chapter - UGI (for use with Unified Glulx Input by Andrew Plotkin) + +Section - Replacement (in place of Section - Parser__parse in Unified Glulx Input by Andrew Plotkin) + +Include (- + parser_results_set = false; + + if (held_back_mode) { + held_back_mode = false; wn = hb_wn; + if (verb_wordnum > 0) i = WordAddress(verb_wordnum); else i = WordAddress(1); + j = WordAddress(wn); + if (i<=j) for (: i0 = ' '; + i = NextWord(); + if (i == AGAIN1__WD or AGAIN2__WD or AGAIN3__WD) { + ! Delete the words "then again" from the again buffer, + ! in which we have just realised that it must occur: + ! prevents an infinite loop on "i. again" + + i = WordAddress(wn-2)-buffer; + if (wn > num_words) j = INPUT_BUFFER_LEN-1; + else j = WordAddress(wn)-buffer; + for (: ii = ' '; + } + + VM_Tokenise(buffer, parse); + jump ReParse; + } + + .ReType; + + cobj_flag = 0; + actors_location = ScopeCeiling(player); + + BeginActivity(READING_A_COMMAND_ACT); if (ForActivity(READING_A_COMMAND_ACT)==false) { + .ReParserInput; + num_words = 0; players_command = 100; + ParserInput( (+ primary context +), inputevent, buffer, parse); + if (input_rulebook_data-->IRDAT_RB_CURRENT ~= 0) { + print "(BUG) Reading-a-command called recursively!^"; + } + parser_results_set = false; + InputRDataInit( (+ handling input rules +), inputevent, buffer, parse); + FollowRulebook((+ handling input rules +), (+ primary context +), true); + InputRDataFinal(); + if (RulebookFailed()) { + jump ReParserInput; + } + if (inputevent-->0 == evtype_LineInput) { + num_words = WordCount(); players_command = 100 + num_words; + } + if (parser_results_set && parser_results-->ACTION_PRES ~= 0) { + ! If we're not parsing, reading a command shouldn't show the input. + num_words = 0; players_command = 100; + } + } if (EndActivity(READING_A_COMMAND_ACT)) jump ReType; + + .ReParse; + + if (parser_results_set && parser_results-->ACTION_PRES ~= 0) { + ! The rulebook gave us an explicit action. + rtrue; + } + + num_words = 0; players_command = 100; + if (inputevent-->0 == evtype_LineInput) { + num_words = WordCount(); players_command = 100 + num_words; + } + + if (num_words == 0) { + ! Either this was a blank line or it was not line input at all. Reject it. + ! (Blank line input could reach this point if the PASS_BLANK_INPUT_LINES option is set.) + EmptyInputParserError(); + jump ReType; + } + + parser_inflection = name; + + ! Initially assume the command is aimed at the player, and the verb + ! is the first word + + wn = 1; inferred_go = false; + + #Ifdef LanguageToInformese; + LanguageToInformese(); + ! Re-tokenise: + VM_Tokenise(buffer,parse); + #Endif; ! LanguageToInformese + + num_words = WordCount(); players_command = 100 + num_words; + + ! CHANGED DMS + FollowRulebook((+ before processing a command +)); + if(RulebookFailed()) jump ReType; + ! END CHANGE + + k=0; + #Ifdef DEBUG; + if (parser_trace >= 2) { + print "[ "; + for (i=0 : i(i*2 + 1); + #Ifnot; ! TARGET_GLULX + j = parse-->(i*3 + 1); + #Endif; ! TARGET_ + k = WordAddress(i+1); + l = WordLength(i+1); + print "~"; for (m=0 : mm; print "~ "; + + if (j == 0) print "?"; + else { + #Ifdef TARGET_ZCODE; + if (UnsignedCompare(j, HDR_DICTIONARY-->0) >= 0 && + UnsignedCompare(j, HDR_HIGHMEMORY-->0) < 0) + print (address) j; + else print j; + #Ifnot; ! TARGET_GLULX + if (j->0 == $60) print (address) j; + else print j; + #Endif; ! TARGET_ + } + if (i ~= num_words-1) print " / "; + } + print " ]^"; + } + #Endif; ! DEBUG + verb_wordnum = 1; + actor = player; + actors_location = ScopeCeiling(player); + usual_grammar_after = 0; + + .AlmostReParse; + + scope_token = 0; + action_to_be = NULL; + + ! Begin from what we currently think is the verb word + + .BeginCommand; + + wn = verb_wordnum; + verb_word = NextWordStopped(); + + ! If there's no input here, we must have something like "person,". + + if (verb_word == -1) { + best_etype = STUCK_PE; jump GiveError; + } + if (verb_word == comma_word) { + best_etype = COMMABEGIN_PE; jump GiveError; + } + + ! Now try for "again" or "g", which are special cases: don't allow "again" if nothing + ! has previously been typed; simply copy the previous text across + + if (verb_word == AGAIN2__WD or AGAIN3__WD) verb_word = AGAIN1__WD; + if (verb_word == AGAIN1__WD) { + if (actor ~= player) { + best_etype = ANIMAAGAIN_PE; + jump GiveError; + } + #Ifdef TARGET_ZCODE; + if (buffer3->1 == 0) { + PARSER_COMMAND_INTERNAL_RM('D'); new_line; + jump ReType; + } + #Ifnot; ! TARGET_GLULX + if (buffer3-->0 == 0) { + PARSER_COMMAND_INTERNAL_RM('D'); new_line; + jump ReType; + } + #Endif; ! TARGET_ + for (i=0 : ii = buffer3->i; + VM_Tokenise(buffer,parse); + num_words = WordCount(); players_command = 100 + num_words; + jump ReParse; + } + + ! Save the present input in case of an "again" next time + + if (verb_word ~= AGAIN1__WD) + for (i=0 : ii = buffer->i; + + if (usual_grammar_after == 0) { + j = verb_wordnum; + i = RunRoutines(actor, grammar); + #Ifdef DEBUG; + if (parser_trace >= 2 && actor.grammar ~= 0 or NULL) + print " [Grammar property returned ", i, "]^"; + #Endif; ! DEBUG + + if ((i ~= 0 or 1) && (VM_InvalidDictionaryAddress(i))) { + usual_grammar_after = verb_wordnum; i=-i; + } + + if (i == 1) { + parser_results-->ACTION_PRES = action; + parser_results-->NO_INPS_PRES = 0; + parser_results-->INP1_PRES = noun; + parser_results-->INP2_PRES = second; + if (noun) parser_results-->NO_INPS_PRES = 1; + if (second) parser_results-->NO_INPS_PRES = 2; + rtrue; + } + if (i ~= 0) { verb_word = i; wn--; verb_wordnum--; } + else { wn = verb_wordnum; verb_word = NextWord(); } + } + else usual_grammar_after = 0; + +-) instead of "Parser Letter A" in "Parser.i6t". + +Before Processing a Command ends here. + +---- DOCUMENTATION ---- + +This extension adds a new rulebook, "before processing a command", which is run before each iteration of the parser. In other words, if the player enters a command like "N. E. JUMP", this rulebook will run once with the player's command set to "N. E. JUMP", once with it set to "E. JUMP", and once with it set to "JUMP". + +This is intended to avoid many of the headaches created by "after reading a command" rules, and acts similarly to them in as many respects as possible. In particular, it also allows you to "reject the player's command", which returns control to the keyboard, skipping any remaining commands. + +Note that this is a single rulebook, not an activity. There are no "for processing a command" or "after processing a command" rules. + +Example: * Echo - A basic demonstration of the extension. + +"Echo" + +Include Before Processing a Command by Daniel Stelzer. + +Before processing a command: say "[player's command]". + +Lab is a room. + +Test me with "wait / jump then wait then wave / wave. jump". + +Example: *** The Riddle of the Labyrinth - Cancelling a series of commands when something dramatic happens in the world. + +"The Riddle of the Labyrinth" + +Include Before Processing a Command by Daniel Stelzer. + +[We want to interrupt ongoing commands if something dramatic has happened since the last time the player typed something on the keyboard. + +We handle this with a flag: it gets set to false whenever the player has the opportunity to type, and set to true whenever dramatic changes happen in the world. + +If the flag is true "before processing a command", then, we want to cancel all processing. This is where "reject the player's command" comes in.] + +The interruption flag is initially false. +Before reading a command: now the interruption flag is false. +Before processing a command when the interruption flag is true: + say "(Since something dramatic has happened, the remainder of your command---'[player's command]'---has been cut off.)[paragraph break]"; + now the interruption flag is false; + reject the player's command. + +To interrupt ongoing commands: + now the interruption flag is true. + +[Now we contrive a reason why the player would want to type a long sequence of commands on a single line, but might also get interrupted in the process. + +This is a sort of maze that was very popular in the early 80s, where every wrong step leads back to the starting location. The intended result is that you need to know the correct path in advance. But what usually happened instead was that players would map it by brute force.] + +Definition: a direction (called the way) is viable if the room-or-door (way) from the location is not nothing. +A maze is a kind of room. The printed name of a maze is "Labyrinth". The description of a maze is "Exits lead [list of viable directions]." + +Start is a maze. The description of Start is "You've chalked a big X on the floor here to mark your starting point. Exits lead [list of viable directions]." North of Start is Start. East of Start is Maze1. West of Start is Start. South of Start is Start. + +Maze1 is a maze. North of Maze1 is Maze2. East of Maze1 is Start. West of Maze1 is Start. South of Maze1 is Start. + +Maze2 is a maze. North of Maze2 is Maze3. East of Maze2 is Start. West of Maze2 is Start. South of Maze2 is Start. + +Maze3 is a maze. North of Maze3 is Start. East of Maze3 is Maze4. West of Maze3 is Start. South of Maze3 is Start. + +Maze4 is a maze. North of Maze4 is Start. East of Maze4 is Maze5. West of Maze4 is Start. South of Maze4 is Start. + +Maze5 is a maze. North of Maze5 is Start. East of Maze5 is Start. West of Maze5 is Start. South of Maze5 is Maze6. + +Maze6 is a maze. North of Maze6 is Start. East of Maze6 is Start. West of Maze6 is Maze7. South of Maze6 is Start. + +Maze7 is a maze. North of Maze7 is Start. East of Maze7 is Start. West of Maze7 is Start. South of Maze7 is Start. Southeast of Maze7 is End. + +End is a room. The description of End is "That last passage dropped you in a dead end with no exits. How can you escape now?" Northeast of End is nothing. + +[And our source of interruptions!] + +The Minotaur is a man. +Instead of jumping in the presence of the Minotaur: + say "You jump on the spot. The Minotaur is startled and flees!"; + now the Minotaur is nowhere. +Instead of doing anything in the presence of the Minotaur: + say "The Minotaur charges. The results are unfortunately too gory to describe in text."; + end the story saying "You have died". + +Every turn: + if a random chance of 1 in 5 succeeds: + move the Minotaur to the location; + say "The Minotaur lumbers into the room!"; + interrupt ongoing commands. + +[We don't really want to make the player brute-force the maze.] + +The player carries a clue. The description of the clue is "Instead of the traditional spool of thread, the king's daughter gave you this slip of paper. On the front it says: 'E. N. N. E. E. S. W. SE. Then say the magic word.' On the back it says: 'Jumping scares the Minotaur away.'" + +[And the final magic word. SAY XYZZY will, by default, map to "answering yourself that xyzzy".] + +Instead of answering yourself that a topic: + say "You cry out, '[topic understood]'! But there is no answer." + +[The correct path through the maze has drawn out this magic letter on the map.] + +Instead of answering yourself that "r" when the location is End: + say "As you call out the magic word, a hidden door swings open in the wall..."; + end the story finally saying "But what happens next?". From 9d2c12aa9b28fe89e837cd18b531ba7732266f59 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 28 Apr 2025 00:53:35 +0200 Subject: [PATCH 121/138] Adapt the word "You" when explicitly adjusting the letter-remover It would say "You flick our thumb over the small knob." Nobody noticed until now. --- .../Extensions/Counterfeit Monkey/Tools.i7x | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index 5ba1655f..a9975e38 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -176,8 +176,9 @@ Check tuning it to: Carry out tuning it to: now the current setting of the letter-remover device is the topic understood. + Report tuning it to: - say "You flick our thumb over the small knob: [we] now have [a-an letter-remover device]." + say "[We] flick our thumb over the small knob: [we] now have [a-an letter-remover device]." Report tuning the letter-remover to something for the third time: say "[first custom style][bracket]You can also tune the device just by using another name for it: referring to the device as, for instance, an N-remover will automatically set it to n.[close bracket][roman type][paragraph break]" From 6764fb5778569a97e240683a86456a43df491a2e Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 28 Apr 2025 00:55:43 +0200 Subject: [PATCH 122/138] Introduce [word] token to chain explicitly setting letter-remover >SET LETTER-REMOVER TO U THEN WAVE IT AT DRESS THEN SET LETTER- REMOVER TO R THEN WAVE IT AT SHIRT now works. Code provided by @dstelzer. --- .../Extensions/Counterfeit Monkey/Tools.i7x | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index a9975e38..43b3b247 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -160,7 +160,18 @@ Check vaguely setting: Instead of vaguely setting the letter-remover: say "You have to set it to a specific letter, as in SET [letter-remover] TO X." -Understand "set [letter-remover device] to [text]" or "tune [letter-remover device] to [text]" or "turn [letter-remover device] to [text]" as tuning it to. [Understand "set [something] to [text]" as tuning it to.] Tuning it to is an action applying to one carried thing and one topic. +Include (- +[ WORD_TOKEN ; + if(NextWordStopped() == -1) return GPR_FAIL; + consult_from = wn-1; + consult_words = 1; + return GPR_PREPOSITION; +]; +-). + +The Understand token word translates into I6 as "WORD_TOKEN". + +Understand "set [letter-remover device] to [word]" or "tune [letter-remover device] to [word]" or "turn [letter-remover device] to [word]" as tuning it to. [Understand "set [something] to [word]" as tuning it to.] Tuning it to is an action applying to one carried thing and one topic. Check tuning it to: if the noun is not the letter-remover device, say "[The noun] cannot be tuned." instead. From da2367e594ad254c465cd852f294d6ae7cda97fc Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Mon, 28 Apr 2025 12:02:57 +0200 Subject: [PATCH 123/138] Superfluous space --- Counterfeit Monkey.inform/Source/story.ni | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.inform/Source/story.ni b/Counterfeit Monkey.inform/Source/story.ni index fba5a30f..45071fef 100644 --- a/Counterfeit Monkey.inform/Source/story.ni +++ b/Counterfeit Monkey.inform/Source/story.ni @@ -82,7 +82,7 @@ Use static object grouping. Include Scope Caching by Mike Ciul. Include Large Game Speedup by Andrew Plotkin. Include Subcommands by Daniel Stelzer. -Include Before Processing a Command by Daniel Stelzer. +Include Before Processing a Command by Daniel Stelzer. [ Startup precomputation ] Include version 1/160718 of Startup Precomputation by Dannii Willis. From 0bb727299cf68eca26586eaa89d648db83b56422 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 14 Jun 2025 20:39:25 +0200 Subject: [PATCH 124/138] Don't use rule for disclosing contents of paper-drawer. Fixes #240 --- .../Counterfeit Monkey/Act III Among Scholars.i7x | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index e8f7c46a..deb1dbc4 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -925,7 +925,7 @@ Rule for writing a paragraph about the department printer: now the output tray is referenced by the current-paragraph; now the paper-drawer is referenced by the current-paragraph; if the paper-drawer is open: - say "[The paper-drawer] stands open[if the paper-drawer is not surprising]. [end if][run paragraph on]"; + say "[The paper-drawer] stands open[if the paper-drawer is surprising], revealing [a list of mentionable things *in the paper-drawer][end if]. [run paragraph on]"; while a surprising thing (called second special-target) is referenced by the current-paragraph: carry out the disclosing contents activity with the second special-target; rapidly set all immediate children of the second special-target mentioned; @@ -935,11 +935,6 @@ Rule for writing a paragraph about the department printer: otherwise: say line break. - -Rule for disclosing contents of the paper-drawer: - now the current-subject is paper-drawer; - say ", revealing [a list of mentionable things *in the paper-drawer]. [run paragraph on]". - After examining the department printer: if the paper-drawer is closed: say "The paper drawer is closed."; From 6ff1ed92f5dd5a2c19f3155c0200973a96f7943e Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sat, 14 Jun 2025 20:45:56 +0200 Subject: [PATCH 125/138] Don't print the word "also" if we haven't mentioned the u-shaped desk We always set the mentioned property pre-emptively to avoid speaking about "a u-shaped desk", so we need a different property to keep track of whether it actually *is* mentioned. --- .../Counterfeit Monkey/Act III Among Scholars.i7x | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x index deb1dbc4..9150bf25 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act III Among Scholars.i7x @@ -907,9 +907,16 @@ Many courses are taught by graduate students, but these are naturally not listed Instead of taking the secretary's computer: say "I understand that theft is more or less your way of life, but please hold back this once." +The u-shaped desk can be hack-mentioned. + Before writing a paragraph about something when the u-shaped desk is in the location: + if the u-shaped desk is unmentioned: + now the u-shaped is not hack-mentioned; now the u-shaped desk is mentioned. [We want "the u-shaped desk" not "a u-shaped desk" or worse "an u-shaped desk".] +After printing the name of the u-shaped desk: + now the u-shaped desk is hack-mentioned. + The department printer is a device on the u-shaped desk. It is fixed in place. The description is "The networked [printer] handles output for all the computers in the department. [printer indicator]." Understand "lights" or "indicator" as the department printer. The printed name is "printer". @@ -920,7 +927,7 @@ Instead of taking the department printer: say "It would be a heavy thing to carry around, and I don't see much use for it elsewhere." Rule for writing a paragraph about the department printer: - say "[if boldening is true][bold type][end if]The department printer[roman type] also sits on [the u-shaped desk]. [run paragraph on]"; + say "[if boldening is true][bold type][end if]The department printer[roman type] [if the u-shaped desk is hack-mentioned]also [end if]sits on [the u-shaped desk]. [run paragraph on]"; now the department printer is mentioned; now the output tray is referenced by the current-paragraph; now the paper-drawer is referenced by the current-paragraph; From a62a2524a41ae11a6660f1318cd7ba08b5b088a7 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Sun, 15 Jun 2025 11:21:31 +0200 Subject: [PATCH 126/138] Regtests: Remove "also" regarding the printer We hack the u-shaped desk to always be mentioned, which makes the room description code add an incorrect "also" when mentioning the printer on the desk. We now work around this, so the "also" is gone. --- tools/regtest/CM-regtest | 8 ++++---- tools/regtest/CM-regtest-hard | 8 ++++---- tools/regtest/CM-regtest-tests | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tools/regtest/CM-regtest b/tools/regtest/CM-regtest index cde87123..a57edc73 100644 --- a/tools/regtest/CM-regtest +++ b/tools/regtest/CM-regtest @@ -1831,7 +1831,7 @@ The snapping continues. Language Studies Department Office This big, slightly drab area holds such useful objects as the mailboxes and the secretary's computer. On ordinary days the secretary would be in as well, presiding over affairs. The offices of individual professors lie north and west. -The department printer also sits on the u-shaped desk. +The department printer sits on the u-shaped desk. This corner office was won in a battle of wills with several other departments during the most recent rebuilding drive. Professor Waterstone is fond of reminding the others that he was the one to obtain this favorable position whenever there is a disagreement about procedure. @@ -1881,7 +1881,7 @@ A moment later the printer whirs thoughtfully. Language Studies Department Office This big, slightly drab area holds such useful objects as the mailboxes and the secretary's computer. On ordinary days the secretary would be in as well, presiding over affairs. The offices of individual professors lie north and west, though the north door is closed. -The department printer also sits on the u-shaped desk. +The department printer sits on the u-shaped desk. > x printer The networked printer handles output for all the computers in the department. The indicator lights glow red to indicate that the paper-drawer is empty. An additional light indicates that some document is in the queue to print and is waiting for the printer to be ready. @@ -1942,7 +1942,7 @@ The snapping continues. Language Studies Department Office This big, slightly drab area holds such useful objects as the mailboxes and the secretary's computer. On ordinary days the secretary would be in as well, presiding over affairs. The offices of individual professors lie north and west, though the north door is closed. -The department printer also sits on the u-shaped desk. The paper drawer stands open. +The department printer sits on the u-shaped desk. The paper drawer stands open. The snapping continues. @@ -2849,7 +2849,7 @@ We scoop the peacock into our arms. Language Studies Department Office This big, slightly drab area holds such useful objects as the mailboxes and the secretary's computer. On ordinary days the secretary would be in as well, presiding over affairs. The offices of individual professors lie north and west, though both doors are closed. -The department printer also sits on the u-shaped desk. +The department printer sits on the u-shaped desk. > knock on waterstone's door /(Waterstone|He) looks at the peacock, briefly arrested by some thought. He gets a monocle like mine out of his drawer. He looks through it at the peacock, notes the cock and the pea; grins. He gets up and comes out of his office. diff --git a/tools/regtest/CM-regtest-hard b/tools/regtest/CM-regtest-hard index 7dd797d1..0d43af59 100644 --- a/tools/regtest/CM-regtest-hard +++ b/tools/regtest/CM-regtest-hard @@ -1423,7 +1423,7 @@ On the wall hangs a framed photograph of Professor Waterstone, with the words SH Language Studies Department Office This big, slightly drab area holds such useful objects as the mailboxes and the secretary's computer. On ordinary days the secretary would be in as well, presiding over affairs. The offices of individual professors lie north and west. -The department printer also sits on the u-shaped desk. +The department printer sits on the u-shaped desk. This corner office was won in a battle of wills with several other departments during the most recent rebuilding drive. Professor Waterstone is fond of reminding the others that he was the one to obtain this favorable position whenever there is a disagreement about procedure. @@ -1465,7 +1465,7 @@ A moment later the printer whirs thoughtfully. Language Studies Department Office This big, slightly drab area holds such useful objects as the mailboxes and the secretary's computer. On ordinary days the secretary would be in as well, presiding over affairs. The offices of individual professors lie north and west, though the north door is closed. -The department printer also sits on the u-shaped desk. +The department printer sits on the u-shaped desk. > x printer The networked printer handles output for all the computers in the department. The indicator lights glow red to indicate that the paper-drawer is empty. An additional light indicates that some document is in the queue to print and is waiting for the printer to be ready. @@ -1504,7 +1504,7 @@ We open the tiny refrigerator, revealing some cream and a silver platter. Language Studies Department Office This big, slightly drab area holds such useful objects as the mailboxes and the secretary's computer. On ordinary days the secretary would be in as well, presiding over affairs. The offices of individual professors lie north and west, though the north door is closed. -The department printer also sits on the u-shaped desk. The paper drawer stands open. +The department printer sits on the u-shaped desk. The paper drawer stands open. > put ream in printer The ream fits exactly into the depth of the drawer. We adjust the plastic clamps that hold pages in place until everything is snug. @@ -2190,7 +2190,7 @@ There is a continuous angry whine from the jigsaw. Language Studies Department Office This big, slightly drab area holds such useful objects as the mailboxes and the secretary's computer. On ordinary days the secretary would be in as well, presiding over affairs. The offices of individual professors lie north and west, though both doors are closed. -The department printer also sits on the u-shaped desk. +The department printer sits on the u-shaped desk. There is a continuous angry whine from the jigsaw. diff --git a/tools/regtest/CM-regtest-tests b/tools/regtest/CM-regtest-tests index d28742d5..003173d5 100644 --- a/tools/regtest/CM-regtest-tests +++ b/tools/regtest/CM-regtest-tests @@ -2292,7 +2292,7 @@ We take the shuttlecock. Language Studies Department Office This big, slightly drab area holds such useful objects as the mailboxes and the secretary's computer. On ordinary days the secretary would be in as well, presiding over affairs. The offices of individual professors lie north and west. -The department printer also sits on the u-shaped desk. +The department printer sits on the u-shaped desk. This corner office was won in a battle of wills with several other departments during the most recent rebuilding drive. Professor Waterstone is fond of reminding the others that he was the one to obtain this favorable position whenever there is a disagreement about procedure. @@ -2325,7 +2325,7 @@ A moment later the printer whirs thoughtfully. Language Studies Department Office This big, slightly drab area holds such useful objects as the mailboxes and the secretary's computer. On ordinary days the secretary would be in as well, presiding over affairs. The offices of individual professors lie north and west, though the north door is closed. -The department printer also sits on the u-shaped desk. +The department printer sits on the u-shaped desk. >put shuttlecock in backpack We open the backpack. @@ -2565,7 +2565,7 @@ The sound of discussion comes from down the hall: two voices speaking in Lojban, Language Studies Department Office This big, slightly drab area holds such useful objects as the mailboxes and the secretary's computer. On ordinary days the secretary would be in as well, presiding over affairs. The offices of individual professors lie north and west, though the west door is closed. -The department printer also sits on the u-shaped desk. +The department printer sits on the u-shaped desk. This corner office was won in a battle of wills with several other departments during the most recent rebuilding drive. Professor Waterstone is fond of reminding the others that he was the one to obtain this favorable position whenever there is a disagreement about procedure. From d3e39826c9e686f6372d1dc8d6e543330671f699 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 24 Jun 2025 19:57:34 +0200 Subject: [PATCH 127/138] Replace another marked-visible with enclosed by location. Fixes #241 We haven't had one of these bugs in a while. --- .../Animal Actions and Human Conversation.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index 389f64b3..d2c470c0 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -4274,7 +4274,7 @@ A first conversation-reply rule when the current interlocutor is Lena: queue ream-approval as immediate obligatory; if the odes-book is marked-visible and Lena does not recollect odes-approval: queue odes-approval as immediate obligatory; - if the origin paste is marked-visible: + if the origin paste is enclosed by location: casually queue nice-paste; if the odes-book is marked-visible and the ream is marked-visible and the ream is disguised and the odes-book is disguised and Lena does not know trust-me: queue that-does-it as immediate obligatory; From bcad8318d6832f7d605aafcf75f95403e6bfc5c0 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Tue, 24 Jun 2025 20:15:59 +0200 Subject: [PATCH 128/138] Restrict the ho removal to the park center. Fixes #242 The ho can be created in the boiler room as well. --- .../Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x index 3ee1ed3e..964c0f60 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Act I Among Sightseers.i7x @@ -801,7 +801,7 @@ There's a bang, a last glittering fan of water in the air.[paragraph break]"; gel-convert the hoses; say "As for the Officer, she's already speaking into her radio as she turns away.". -Every turn when the ho is in location: +Every turn when the ho is in location and the location is the park center: say "It isn't but a few seconds before a watchful parent notices the ho strutting around and goes to report her. She is too stupid [--] as a constructed person [--] to put up much resistance when an officer shows up to escort her away."; From 03c1f591a3e7284a3e1aa25ae4364a95d846eb77 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 26 Jun 2025 00:07:12 +0200 Subject: [PATCH 129/138] Understand "Brock" as the quip "whether Brock-man seemed upset". Fixes #243 Without this, ASK WHETHER BROCK SEEMED UPSET is not understood. --- .../Animal Actions and Human Conversation.i7x | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index d2c470c0..a47b1480 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -2142,6 +2142,8 @@ Cryptic. Perhaps he was posing as a researcher? But we can't very well ask, not It indirectly-follows whether she hath seen Brock-man. It quip-supplies Kate. +Understand "brock" as whether Brock-man seemed upset. + recommend-help is an NPC-directed quip. The reply is "'If your friend is missing, you could report him to the Bureau, you know,' she says. 'I believe they keep close tabs on academic and research visitors. They may well know where he is.' From b7f14a1d6d7ab4674a914f5d74a463caa6e539b0 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 26 Jun 2025 01:10:53 +0200 Subject: [PATCH 130/138] More fixes for Lena's first conversation-reply rule Replace more marked-visible with enclosed by location. This will make her speak more quips when we first enter the store. Also some minor attempts at optimization. --- .../Animal Actions and Human Conversation.i7x | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x index a47b1480..503974df 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Animal Actions and Human Conversation.i7x @@ -4261,24 +4261,30 @@ A first conversation-reply rule when the current interlocutor is Lena: [say "STARTING: "; try checking queue for Lena;] let needs more conversation be true; + let ream-is-here be false; + if the single ream is enclosed by location: + now ream-is-here is true; + let odes-is-here be false; + if the odes-book is enclosed by location: + now odes-is-here is true; if Lena is urgently eager-to-speak: let needs more conversation be false; - if (the single ream is undisguised and the single ream is marked-visible) or (the odes-book is undisguised and the odes-book is marked-visible): - if Lena does not recollect needs-disguise: + if Lena does not recollect needs-disguise: + if (the single ream is undisguised and ream-is-here is true) or (the odes-book is undisguised and odes-is-here is true): queue needs-disguise as postponed optional; [She'll only say this once.] - if (the single ream is undisguised and the single ream is marked-visible) or (the odes-book is undisguised and the odes-book is marked-visible) and Lena recollects needs-disguise: + otherwise if (the single ream is undisguised and ream-is-here is true) or (the odes-book is undisguised and odes-is-here is true): if Lena does not recollect still-needs-pasting or a random chance of 1 in 3 succeeds: queue still-needs-pasting as postponed optional; if needs more conversation is false: make no decision; [positive feedback before negative...] - if the single ream is marked-visible and Lena does not recollect ream-approval: + if ream-is-here is true and Lena does not recollect ream-approval: queue ream-approval as immediate obligatory; - if the odes-book is marked-visible and Lena does not recollect odes-approval: + if odes-is-here is true and Lena does not recollect odes-approval: queue odes-approval as immediate obligatory; if the origin paste is enclosed by location: casually queue nice-paste; - if the odes-book is marked-visible and the ream is marked-visible and the ream is disguised and the odes-book is disguised and Lena does not know trust-me: + if odes-is-here is true and ream-is-here is true and the ream is disguised and the odes-book is disguised and Lena does not know trust-me: queue that-does-it as immediate obligatory; if the modem is enclosed by location and Lena is not urgently eager-to-speak: if Lena does not recollect modem-complaint or a random chance of 1 in 3 succeeds: @@ -4291,19 +4297,20 @@ A first conversation-reply rule when the current interlocutor is Lena: if the preamp is enclosed by location and Lena is not urgently eager-to-speak: if Lena does not recollect preamp-complaint or a random chance of 1 in 3 succeeds: queue preamp-complaint as immediate obligatory; - if the reams are enclosed by location and Lena is not urgently eager-to-speak: - if Lena does not recollect reams-complaint or a random chance of 1 in 3 succeeds: - queue reams-complaint as immediate obligatory; - if the reams are enclosed by location and the modems are marked-visible and Lena is not urgently eager-to-speak: - if Lena does not recollect task-reminder or a random chance of 1 in 3 succeeds: - queue task-reminder; - if the modems are marked-visible and Lena is not urgently eager-to-speak: + if the reams are enclosed by location: + if Lena is not urgently eager-to-speak: + if Lena does not recollect reams-complaint or a random chance of 1 in 3 succeeds: + queue reams-complaint as immediate obligatory; + if the modems are enclosed by location and Lena is not urgently eager-to-speak: + if Lena does not recollect task-reminder or a random chance of 1 in 3 succeeds: + queue task-reminder; + if Lena is not urgently eager-to-speak and the modems are enclosed by location: if Lena does not recollect modems-complaint or a random chance of 1 in 3 succeeds: queue modems-complaint as immediate obligatory; - if the preamps are marked-visible and Lena is not urgently eager-to-speak: + if Lena is not urgently eager-to-speak and the preamps are enclosed by location: if Lena does not recollect preamps-complaint or a random chance of 1 in 3 succeeds: queue preamps-complaint as immediate obligatory; - if the monocle is marked-visible and Lena is not urgently eager-to-speak and lena recollects who we seem-3: + if the monocle is enclosed by location and Lena is not urgently eager-to-speak and lena recollects who we seem-3: if Lena does not recollect monocle-remark: queue monocle-remark; [say "NMC True: "; From d25d1f5eb09ce9eb970ce5972e873bf061bdbc0e Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 26 Jun 2025 12:49:14 +0200 Subject: [PATCH 131/138] Update change log --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62ccf9af..d0ec1adb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ - It is now possible to sit on the built-in seating in the Galley. (@Roachbones) - Creating the scree will once again kill the player. This was changed in release 9, but it turns out the movie screen is assumed to always be in place in too many places in the code. (Mike Russo) - The password to Brock's laptop would not be understood if entered verbatim, as the Punctuation Removal extension removes one of the characters. (Mike Russo) +- The ho would be escorted away with a park-specific message even when she was not created in the park. (@most90) ### Cosmetic output errors @@ -40,6 +41,9 @@ - Fixes a typo in the description of the synthesizer after sawing it open ("permanenty".) (@dstelzer) - Switching on or examining the ebook reader while wearing the monocle would produce some confusing text about examining the Book search engine. Interacting with other computers could produce similar undesired output. (Mike Russo) - The message when examining the player's yacht bed would start a sentence with a lower case letter. (Mike Russo) +- If the player puts something on the u-shaped desk while the printer drawer is open, the room description would output a broken sentence. (@svemoe) +- Lena would comment on the origin paste even if the player does not have it, when fast-travelling from the Counterfeit Monkey Bar to the Aquarium Bookstore with GO TO BOOKSTORE. (@most90) +- Many of Lena's quips would not trigger on the same turn as entering the bookstore. ### Parsing @@ -50,6 +54,7 @@ - Contractions such as WHAT'S, HE'S, and IT'S are understood. (@Stealthii) - Adds more synonyms to the "ask why he is here" quip for the gift shop volunteer. WHY ARE YOU HERE and ASK WHY HE IS THERE now work. - Going DOWN when standing on the tarpaulin-covered masses in the tin hut will no longer make the player try to enter the trap door. (Mike Russo) +- ASK WHETHER BROCK SEEMED UPSET would not be understood when the current memory is "how it started with Brock". (@most90) ## Release 11 From 0aed62799d8d23b5fb9ea2fa61763c1dc66e28c4 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 26 Jun 2025 13:12:55 +0200 Subject: [PATCH 132/138] Update change log again --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0ec1adb..b6f35d6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ ### Parsing +- Chaining letter-remover commands with THEN, as in U-REMOVE MOURNING DRESS THEN WAVE R-REMOVER AT T-SHIRTS, or SET LETTER-REMOVER TO U THEN WAVE IT AT DRESS THEN SET LETTER-REMOVER TO R, now works, thanks to the "Before Processing a Command" extension and other contributions by Daniel Stelzer. (@dstelzer) - T INSERTER without a hyphen is now understood as the T-inserter. - The T-inserter can now be used by typing INSERT T IN (thing). - Things like REMIND MAN THAT MRS. ROSEHIP IS MARRIED would be understood as two different commands separated by a period. Periods after titles are now properly stripped from input. From 6ef65fb38b6056e04228194ed77edcbbced376de Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 26 Jun 2025 13:13:59 +0200 Subject: [PATCH 133/138] And update change log again --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6f35d6d..1b42e9cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,7 +47,7 @@ ### Parsing -- Chaining letter-remover commands with THEN, as in U-REMOVE MOURNING DRESS THEN WAVE R-REMOVER AT T-SHIRTS, or SET LETTER-REMOVER TO U THEN WAVE IT AT DRESS THEN SET LETTER-REMOVER TO R, now works, thanks to the "Before Processing a Command" extension and other contributions by Daniel Stelzer. (@dstelzer) +- Chaining letter-remover commands with THEN now works, as in U-REMOVE MOURNING DRESS THEN WAVE R-REMOVER AT T-SHIRTS, or SET LETTER-REMOVER TO U THEN WAVE IT AT DRESS THEN SET LETTER-REMOVER TO R, thanks to the "Before Processing a Command" extension and other contributions by Daniel Stelzer. (@dstelzer) - T INSERTER without a hyphen is now understood as the T-inserter. - The T-inserter can now be used by typing INSERT T IN (thing). - Things like REMIND MAN THAT MRS. ROSEHIP IS MARRIED would be understood as two different commands separated by a period. Periods after titles are now properly stripped from input. From ab9699a29c72736394254a303532526734210d67 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 24 Jul 2025 22:11:02 +0200 Subject: [PATCH 134/138] Make the ten-object a single thing As opposed to a kind of thing. I don't remember if there actually used to exist more than one. --- .../Extensions/Counterfeit Monkey/Repository Major Contents.i7x | 1 - 1 file changed, 1 deletion(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Major Contents.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Major Contents.i7x index 73aaff17..8d04cbb1 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Major Contents.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Major Contents.i7x @@ -93,7 +93,6 @@ An alterna-tart is a kind of woman. A tattle is a kind of thing. A tear is a kind of fluid thing. An alterna-tear is a kind of thing. -A ten-object is a kind of thing. A tent is a kind of container. Some plural-tents is a kind of container. A tin-can is a kind of container. ["tin"] From c8c9e6b9859c29a9d997008e86f508adaf2b9956 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 24 Jul 2025 22:13:18 +0200 Subject: [PATCH 135/138] Fix PUT TEN IN BUCKET This collides with the player actually trying to insert ten things into a container that only takes one thing, when one of them is the ten-object. Hopefully nobody will ever notice. --- .../Counterfeit Monkey/Actions on Multiple Objects.i7x | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Actions on Multiple Objects.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Actions on Multiple Objects.i7x index c6089de8..82ba4a0c 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Actions on Multiple Objects.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Actions on Multiple Objects.i7x @@ -196,6 +196,10 @@ A multiple action processing rule when inserting: This is the stop inserting error list rule: if the number of entries in the multiple object list is less than 2: the rule succeeds; + [Hack to make sure that typing PUT TEN IN CONTAINER in order to put the ten-object in the container does at least work, even if TEN is understood by the parser as ten random things.] + if entry 1 in the multiple object list is the ten-object and the number of entries in the multiple object list is 10: + alter the multiple object list to { ten-object }; + the rule succeeds; abide by the check multiple insert rules for the second noun; if the second noun is not touchable: abide by the try reaching rules for the second noun; From 75080aeb236f488b5a4fdf9fd467e83d6556cc6f Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Thu, 7 Aug 2025 07:50:22 +0200 Subject: [PATCH 136/138] Better fix for #244 and related problems Now both PUT TEN IN BUCKET and PUT EIGHT IN BUCKET should work as expected (rather than being understood as PUT TEN RANDOM THINGS IN BUCKET), without introducing new problems. PUT 10 IN BUCKET and PUT 6 IN BUCKET are still not fixed. --- .../Counterfeit Monkey/Actions on Multiple Objects.i7x | 4 ---- .../Repository Alphabetic Details.i7x | 10 ++++++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Actions on Multiple Objects.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Actions on Multiple Objects.i7x index 82ba4a0c..c6089de8 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Actions on Multiple Objects.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Actions on Multiple Objects.i7x @@ -196,10 +196,6 @@ A multiple action processing rule when inserting: This is the stop inserting error list rule: if the number of entries in the multiple object list is less than 2: the rule succeeds; - [Hack to make sure that typing PUT TEN IN CONTAINER in order to put the ten-object in the container does at least work, even if TEN is understood by the parser as ten random things.] - if entry 1 in the multiple object list is the ten-object and the number of entries in the multiple object list is 10: - alter the multiple object list to { ten-object }; - the rule succeeds; abide by the check multiple insert rules for the second noun; if the second noun is not touchable: abide by the try reaching rules for the second noun; diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x index a030758b..e0db80e5 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Repository Alphabetic Details.i7x @@ -881,6 +881,11 @@ An eel is edible. The description of an eel is "Manifested dead, because out of The eight-object is an r-abstract thing. The printed name is "eight". Understand "eight" or "8" as the eight-object. The heft is 0. The description is "It looks like an infinity symbol rotated ninety degrees." +[This and the equivalent rule for the ten-object below makes sure that things like PUT EIGHT IN BUCKET will work as expected for the eight-object and ten-object (otherwise it will be understood as putting ten random objects in the bucket). Referring to them as 8 and 10 will still not work, as we don't want to interfer with the numbered disambiguation.] +After reading a command when the eight-object is marked-visible (this is the replace eight-object in input rule): + while the player's command includes "eight": + replace the matched text with "eight-object". + The elegantly winter pilot is a woman. Understand "aviatrix" or "slim" or "alert" as the elegantly winter pilot. The initial appearance is "[The elegantly winter pilot] shows no sign of nervousness or impatience." The description is "A slim, alert aviatrix, dressed suitably for a biplane duel somewhere over the Ukraine. Her eyes are almond-shaped and her glance taunting." @@ -3712,6 +3717,11 @@ The description of the tat is "It looks like the end-of-day leftovers from a par The ten-object is r-abstract. The heft of the ten-object is 0. Understand "ten" or "10" as the ten-object. The description of a ten-object is usually "The concept of ten is here represented by [one of]the letter X[or]the digits 1 and 0[or]the digit A[or]an Olympic judge holding up a scorecard[or]two hands, exposing their fingers[or]two feet, spreading their toes[at random]." The printed name of a ten-object is usually "ten". +[This and the equivalent rule for the eight-object above makes sure that things like PUT EIGHT IN BUCKET will work as expected for the eight-object and ten-object (otherwise it will be understood as putting ten random objects in the bucket). Referring to them as 8 and 10 will still not work, as we don't want to interfer with the numbered disambiguation.] +After reading a command when the ten-object is marked-visible (this is the replace ten-object in input rule): + while the player's command includes "ten": + replace the matched text with "ten-object". + The description of the Tao is "It presents itself as one of those circular yin-yang symbols, part black, part white. I'm afraid Atlantean understanding of Asian philosophies is fairly simplistic." A tap can be hot, unhot or undecided. A tap is usually undecided. From c68a5be47f5a3fbde666048c2a99353ef219b6c5 Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Wed, 13 Aug 2025 17:09:28 +0200 Subject: [PATCH 137/138] Add a custom response to SET REMOVER TO (nothing) Kludge for #245. Any unicode characters will be stripped from input by the Punctuation Removal extension, so we check for attempts to set it to nothing and give the response "Only the 26 letters of the English alphabet are available to the letter-remover." --- .../Extensions/Counterfeit Monkey/Tools.i7x | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x index 43b3b247..171a4ba6 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Tools.i7x @@ -160,6 +160,14 @@ Check vaguely setting: Instead of vaguely setting the letter-remover: say "You have to set it to a specific letter, as in SET [letter-remover] TO X." +Understand "set [something] to" as objectlessly setting. Objectlessly setting is an action applying to one thing. + +Check objectlessly setting: + say "I don't understand what to set [the noun] to." instead. + +Instead of objectlessly setting the letter-remover: + say "Only the 26 letters of the English alphabet are available to the letter-remover." + Include (- [ WORD_TOKEN ; if(NextWordStopped() == -1) return GPR_FAIL; From f28f9418c17de53fcc32747feeffff41d3dffafe Mon Sep 17 00:00:00 2001 From: angstsmurf Date: Wed, 11 Feb 2026 13:34:31 +0100 Subject: [PATCH 138/138] Don't crash on more than 60 items in room. Fixes #246 The previous check allowed seen_count to get out of bounds. --- .../Counterfeit Monkey/Room Description Speedups.i7x | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Room Description Speedups.i7x b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Room Description Speedups.i7x index 323c095a..73f28596 100644 --- a/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Room Description Speedups.i7x +++ b/Counterfeit Monkey.materials/Extensions/Counterfeit Monkey/Room Description Speedups.i7x @@ -411,10 +411,9 @@ Include (- col=TableFindCol((+ Table of Seen Things +), (+ output subject +), true); - for (obj=IK2_First: obj : obj=obj.IK2_Link) + for (obj=IK2_First: obj && seen_count < 60 : obj=obj.IK2_Link) if (obj has workflag && obj hasnt mentioned) { seen_count++; - if (seen_count > 60) print_ret "ERROR: more than 60 mentionable things in room!^"; ((+ Table of Seen Things +)-->col)-->(seen_count+COL_HSIZE) = obj; } ];