I've been writing a simple 2d arcade rpg a few years ago. I created a simple graph language for creating quests and started to design the system for specifying arbitrary quest conditions.
It started from simple things like "has player killed a monster of type X", "does player have item Y in inventory", "was the actor X in place Y already", "have player talked to actor Z about Q".
But then I thought it would be cool to add metainformation. "Have actor X seen player killing the monster Y". "Have any actor seen player talking about Q". "is there a chain of actors meeting each other from the actor that seen player killing actor X to the quest giver".
I tried to implement this naively and it turns out the amount of information is astounding. To the point that I'm still amazed our brains can do this.
It started from simple things like "has player killed a monster of type X", "does player have item Y in inventory", "was the actor X in place Y already", "have player talked to actor Z about Q".
But then I thought it would be cool to add metainformation. "Have actor X seen player killing the monster Y". "Have any actor seen player talking about Q". "is there a chain of actors meeting each other from the actor that seen player killing actor X to the quest giver".
I tried to implement this naively and it turns out the amount of information is astounding. To the point that I'm still amazed our brains can do this.