The Mysteries of Aaron Reed's Remembering Extension (and a solution)

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
Dropped.

> 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.

> d
Grassy Clearing
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.

> d
Blackberry Tangle
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

> i
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.

1 Like

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.

1 Like

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.

2 Likes

I’ve meant to mention that there is a current Friends of I7 repo extension with working Remembering functionality: Expanded Understanding by @xavid (as one part of a very broad extension).

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.

3 Likes

My kludged together version above has irritating unintended consequences. Putting everything in scope so that it can be referenced means that you suddenly have disambiguation issues with other actions. Things that are no where near players location start showing up:

>climb tree
Which do you mean the white tree, the tall doug fir, the Doug Fir, the pine trees, the sentinel tree, or the Madrone tree?

2 Likes

Doing some thread necromancy here…

…because I just got Aaron Reed’s Remembering working again. As part of a casual trawl through the Friends of I7 repo updating extensions on the “master” branch for 10.2. It shouldn’t be too hard to backport to 10.1 from this point.

It should work better than the previous version did. I ended up using pretty much the same approach as Expanded Understanding, hooking into “printing a parser error”. Except I rewrite the line into an explicit “find” and throw it all the way back through the parser, so that it goes through the whole Understand mechanism again.

Xavid’s extensions mostly still need updating for 10.1 (and are quite difficult because they’re enormous and complex). I wonder if I can use Mike Ciel’s Objects Matching Snippets to replace Xavid’s Object Matching…

…I’m also realizing there’s some oft-recurring functionality which probably belongs in Snippetage or even in Core Inform.

Here’s Object Matching for 10.2. 10.2 now includes the Parser patch from Object Matching, so Object Matching can be short.

Object Matching.i7x (22.4 KB)

I wrote my own implementation of Snippetage’s functionality.

(I also have a basically working Remembrance-like module based on Expanded Understanding whose output parts were never finished, which is why I have the above.)

Intriguing Snippets.i7x (1.6 KB)

1 Like

Cool! Did you publish these somewhere previously, or is this their first publication?

I’ve been using the ‘master’ branch of friends-of-i7 for 10.2 extension development, on the grounds that it is the development branch and 10.2 is a moving target.

In terms of trying to get a complete list of what snippet terms are useful: I used “the command from … onwards” today, and Neutral Standard Responses has a catalog of low-level stuff at the top.

First publication. Been saying this for a few weeks now, but I gotta get a new branch up at the Friends. I’ve already updated a bunch of extensions, and hate to see duplicated work…

1 Like