I’ve pondered this too, especially the trifecta between seen, known, and familiar.
I think what you’re running into is a combination of blurred implementation decisions made due to (a) the 99% case of IF games having a single player character, with multiple PC being added later, (b) the distinction between the player character versus the human player seeing/knowing something, and (c) historical inertia, as the seen/known/familiar flags are similar to those in TADS 2.
You didn’t mention familiar
, but that’s important here. A PC may not have seen their bicycle when the game starts, but the bicycle can be marked familiar
in the code so the PC knows about it before they encounter it. (At least, this is how adv3Lite deals with it: knowsAbout()
is coded as “has seen or is familiar with.”) For example, this allows the PC to talk about their bicycle before actually seeing it in-game. It’s “in scope.”
There’s also familiarity with abstract topics and knowledge, which cannot be seen but may be familiar and may be known.
I suspect the module you’re working on is similar to code that I’ve toyed with writing. (I don’t have a WIP that would use it, so I’ve not made a stab at it.) Namely, proper memory tracking that’s tied to the Actor, and not a set of flags on the Things themselves. It sounds like you’re going further, tracking each Actor’s sense memory too.
So, the bicycle isn’t known, rather, one Actor may know about the bicycle and the other does not. NPCs could also have their own memory tracking, which is kind of cool.
If I did work on it, I’d be tempted to have a default Actor-like object that represents the human player, and therefore be able to track what the player knows, since it’s possible they know something the current PC does not (and vice-versa, I suppose, but that starts to get esoteric in terms of game design). I suppose this could be achieved by polling all Actors the PC can play and see if its been seen by any of them, but I still like the idea.
Also, adv3Lite has some other state that’s useful/interesting, such as lastSeenAt
, which means all the PCs may have seen the object, but in different locations, and therefore have different “memories” of it.
This is the only quibble I have, since as I mentioned, “knowing” could reflect an abstraction or something not-yet-sensed by the player.