Well, I guess I’m overstating it, but functionally I understood it as how to get a similar effect to incorporation in I6 as far as scoping goes, being an object-oriented feature. ‘Place (obj) in scope’ is rule-oriented and not conducive to adding an object to scope when another object is in scope (and calls I6 PlaceInScope(obj) not AddToScope(obj)) so perhaps it’s not really equivalent either?
So we have all the pieces here if some ambitious person wants to update Aaron’s Remembering extension:
Chapter - New Can't See That Report [ Remembering last seen locations From Aaron Reed's remembering Replaces 'You can't see any such thing' for a seen but out-of-scope noun with a message acknowledging that the parser recognizes the object. ] Every thing has an object called the remembered location. The remembered location of a thing is usually nothing. Last when play begins (this is the Remembering update remembered positions for first turn rule): follow the Remembering update remembered positions of things rule. Every turn (this is the Remembering update remembered positions of things rule): unless in darkness: repeat with item running through things that are enclosed by the location: if remembered location of item is not holder of item: if item is visible: now the remembered location of item is the holder of item. To decide whether (item - an object) acts plural: if the item is plural-named or the item is ambiguously plural: yes; no. To say was-were of (N - an object): if the story tense is future tense: say "will have been"; otherwise if N acts plural: say "were"; otherwise: say "was". To say at the (place - an object): carry out the saying the location name activity with place. saying the location name of something is an activity on objects. For saying the location name of a room (called place) (this is the Remembering saying room name rule): say "at '[the place]'" (A). For saying the location name of the location (this is the Remembering saying current location name rule): say "right here" (A). For saying the location name of a person (called subject) (this is the Remembering saying person name rule): say "in the possession of [the subject]" (A). For saying the location name of a person who is the player (this is the Remembering saying player name rule): say "in your possession" (A). For saying the location name of a container (called the holder) (this is the Remembering saying container name rule): say "in [the holder]" (A). For saying the location name of a supporter (called the holder) (this is the Remembering saying supporter name rule): say "on [the holder]" (A). [ my mods to remembering ] A room has some text called casual_name. The Remembering saying room name rule response (A) is "[the casual_name of the place]". [ Deciding scope and Reporting Courtesy of @otistdog https://intfiction.org/t/remembering-mysteries/49840/15?u=wmodes ] [An alternative to scope testing via direct object tree inspection] To decide whether (X - thing) has line of sight to (Y - thing): if the common ancestor of X with Y is nothing, decide no; if Y is enclosed by a closed opaque container that does not enclose X, decide no; if X is enclosed by a closed opaque container that does not enclose Y, decide no; decide yes. To decide whether (X - thing) does not have line of sight to (Y - thing): if X has line of sight to Y: decide no; otherwise: decide yes. Definition: a thing is unavailable if it is seen and the player does not have line of sight to it. After deciding the scope of the player: repeat with X running through unavailable things: place X in scope. [Uses before rules to intervene ahead of visibility checks] Before doing something when the noun is unavailable: [say "[The noun] [are] nowhere to be seen." instead.] say "You look around, but don't see [the noun]. Last you remember, [they] [was-were of noun] [at the remembered location of noun].[line break]" instead. Before doing something when the second noun is unavailable: [say "[The second noun] [are] nowhere to be seen." instead.] say "You look around, but don't see [the second noun]. Last you remember, [they] [was-were of noun] [at the remembered location of noun].[line break]" instead.
It could be improved. For instance, a check to make sure casual_name is defined could/should be added if you use it.
It works for me:
> drop train penny
> x coin
The train rolled over your penny and turned it into a flattened oval.
> x grandpa
You can’t see any such thing.
> x bucket
You can’t see any such thing.
This is a pleasant clearing carpeted with stubbly grass under a sycamore tree.
You see your grandpa and the big bucket here.
> x grandpa
Grandpa is, well, Grandpa.
> x bucket
There’s a big bucket that Honey and Grandpa have been putting their berries into, about half full now.
> give coin to grandpa
You look around, but don’t see the flattened train penny… Last you remember, it was lost in the brambles.
There are paths through the brambles, a maze with tantalizing fruit.
> say hello to grandpa
You look around, but don’t see Grandpa. Last you remember, he was at the grassy clearing.
> x bucket
You look around, but don’t see the big bucket. Last you remember, it was at the grassy clearing
You are carrying your pail.
> x pail
This is a purple pail with a yellow handle.
> x me
What’s to say? You are eight and a half, and you are going into 4th grade in the fall.
Thanks for all the help and great discussion.
I know neither of these are yet published extensions and that the topic is marked as solved, but I’ve found a problem with OtisTDog’s Unavailable Things.
If you have two objects with similar names and one of them is in a container, Inform will try to disambiguate between the two even when one is now off-stage.
"Test 2" by "J. J. Guest" Include Epistemology by Eric Eve. Chapter 1 - Room Storeroom is a room. The description is "You are in a storeroom." A pink ball is in the storeroom. The description of the pink ball is "It's pink." A wooden box is an openable closed container in the storeroom. Casting plugh is an action applying to one visible thing. Understand "plugh [something]" as casting plugh. Carry out casting plugh: say "[The noun] disappears in a puff of smoke."; now the noun is nowhere. A blue ball is in the wooden box. The description of the blue ball is "It's blue."
The result of this is:
Test 2 An Interactive Fiction by J. J. Guest Release 1 / Serial number 210929 / Inform 7 build 6M62 (I6/v6.33 lib 6/12N) SD Storeroom You are in a storeroom. You can see a pink ball and a wooden box (closed) here. >x ball It's pink. >plugh ball The pink ball disappears in a puff of smoke. >open box You open the wooden box, revealing a blue ball. >x ball Which do you mean, the blue ball or the pink ball? >get blue Taken. >x ball (the blue ball) It's blue. >drop ball (the blue ball) Dropped. >get ball (the blue ball) Taken. >put ball in box (the blue ball in the wooden box) You put the blue ball into the wooden box. >x ball Which do you mean, the blue ball or the pink ball? >
@J_J_Guest, As you’ve gathered, this wasn’t a formally published extension so much as a suggestion to help get the desired effect.
The issue can be partially addressed by adding:
Does the player mean doing something when the noun is unavailable: it is very unlikely. Does the player mean doing something when the second noun is unavailable: it is very unlikely.
However, this leaves constant disambiguation messages like:
>X BALL (the blue ball)
even when the blue ball is the only one in the player’s presence, and also the inclusion of unavailable things in disambiguation questions, such as (assuming that there is also a yellow ball in the open box after removing the pink ball from play):
>X BALL Which do you mean, the blue ball, the yellow ball or the pink ball?
in which the pink ball arguably doesn’t belong. Those are deeper problems.
The Capgras Syndrome extension by Fusiform Gyrus is known to cause this behavior.
This intertwining between “in scope”, “actor can see it”, and “object is lit” was the most painful part of writing Wear Gloves. I doubt too many players ever try to reach through a closed dark container from inside of a different closed dark container, but I got it to work!
There’s the heart of an advanced visibility extension in there somewhere.
It takes the interesting tack of not putting all the remembered things into scope every turn; instead it hooks into
printing a parser error when the latest parser error is the can't see any such thing error.