Context Tags are a collection of simple text descriptors. The same tag is typically shared between many different objects within a game world, and they are managed through the aptly named Context Manager.
These tags, chiefly, provide a space for adding context to the containing object. They maintain multiple tags on something within the game world and enable comparing and sorting of tags using integer operations, rather than string comparisons, to greatly save on memory.
Affinity Tags are extended from Context Tags, but each tag also has an associated value of some sort. When multiple objects have the same affinity tag, each object will have an individual value - or affinity - attached to each tag. These affinities are typically a way of measuring how meaningful each tag is to a given object.
Comparing affinities - say, comparing the “Trustworthy” values of two characters - is one of the important tools provided in this toolkit.
Why did I make Context Tags?
Initially? As a context system for an RPG "Spot Check". Everything that could be seen by an NPC was tagged. Each tag affinity represented the difficulty in "seeing" that level of context. If a character had a Vision score of 10, and saw an NPC, they would be able to discern every bit of context with an affinity at or below 10.
Immediately after that, I began to notice more and more situations where a cheap, rapid system for discerning context would have been super helpful, and I began work on this project.
Why are Context Tags cool?
Because there are a lot of details that make sense within the realm of a game that it would make no sense to try and include - particularly things we presently CAN'T include, like taste, smell, and sensation.
Context Tags aren't a 1 to 1 replacement for the senses, but being able to meaningfully include those details - and even more so, the ability to USE those details mechanically in our game spaces - has still proven really handy to me.
What ideas have I had for Context Tags?
Smart targeting: Create a list of tags to filter what gets hit from what doesn't.
Use Affinity Tags to hold detailed emotional info for characters. Each tag represents an emotion, with the affinity value representing the strength of that emotion.
Subtext in a conversation: Allow players to see some tags of subtext, but not others, based on the player character's social awareness.
As sensory information that can't / shouldn't be put into the game. Smells, sensations, taste, etc.
Meta-analysis of something that can be represented in a game. E.g. the pattern on a tapestry is something the player can directly see, but the social and historical significance of that pattern could be held as Context Tags.