In its initial development, before I showed it to anybody at all, Scents & Semiosis was really just a pretty text-generating toy. I make a lot of cool text-gen toys, and I wanted this to be a bit more than that, something that was played rather than passively absorbed. I completely don’t remember how I got to the idea of selecting scent-notes to associate with meaning; it was part of that initial rush of design ideas that comes all a-tumble in the early life of a really exciting idea. But it was basically the last thing I put in place before I started reaching out to contributors.
The meaning-association system was not the biggest job – memories take up far more space in the source and absorbed more development time – but it was much tougher going. ‘Meaning’ is a really wooly concept, as exemplified by my consistent failure to stick with a nice clear name for the meaning-elements. (In the code they’re ‘resonances’, but I also keep using ‘associations’ and ‘meanings’ and even ‘themes’, which code-wise refers to a different but related thing.) And simulating the ways in which symbols are associated with things – well, according to at least some theories of mind and language then to do that completely you need to create sentient life, which I understand is generally considered over-ambitious for small-team projects.
Finding suitable corpus materials was harder than I had anticipated. ‘A list of important meanings’ or ‘a list of things referred to by symbols’ are fields too vast to be useful. Lists of emotions and moods are somewhat more tractable, but I didn’t want this to be purely a game about ‘and how did this make you feel.’
The reason why Scents feels divination-like has a lot to do with the fact that divination systems are relatively bounded systems of symbolic meaning. Not all of the resonance corpus is based on divination systems, but I poked around in a lot of different places. It was harder than I expected, though, because divination systems often have very specific concerns. I looked at dream-interpretation books, for instance, because those have huge lists of symbols and their interpretations. But as it turns out, while the symbols listed in dream-books are numerous and entertaining, their referents are mostly very repetitive – conforming with the principle that almost everyone who visits a fortune-teller wants answers about the same three or four topics – love, business, significant journeys. Language-of-flowers symbolism has a similar problem: it’s a symbolic set almost entirely concerned with attitudes of people towards one another, which is less suitable for a context of solo introspection. Tarot was better, but less so than I had expected. But little bits and pieces came together from disparate sources. It built.
It’s in vogue to talk about the wunderkammer, or cabinet of curiosities, as a mode of writing and design; and that fits in very well with my basic design instincts (even outside procgen: Invisible Parties is very wunderkammerish). Some of this, I suspect, is that I don’t trust myself to design one single system so radiantly good that it can stand alone. (But also, one of the reasons I’m generally less interested in machine-learning approaches to procgen is that they tend to be very powerful tools that really only do one thing.)
A wunderkammer is accretive; you design it by adding a thing, and then adding another thing, and continuing to do that until the overall effect is right. It’s OK if a particular element isn’t the strongest, as long as it contributes to the variety. You can come at the problem in several very different ways – in fact, it’s ideal if you do this, because using the same approach for everything will make everything feel the same.
So resonances work in several ways. There are several different flavours of wholly random ones, whose appearance has nothing to do with any tagging or context. Some resonances are atomic, complete in themselves. ‘The feeling of having left the gas on’ is not a thought that you could generate from the ground up; it’s a completely hand-authored element. Slightly more complex are noun-adjective constructions like ‘anguished levity’ or relational triads like ‘mistakes fostering friendship’; these, too, will sometimes have no mechanical relation to the preceding text except what the player imagines. It’s important, in procgen, to avoid things getting over-determined, to leave space for the fortuitous.
When I first put resonances in, that was all there was. I was planning on eventually replacing it with something much more sophisticated and clever. It did get a bit smarter than that, but not much, and the placeholders never got thrown out. One of the nice things about beeswaxy design is that you can frequently leave your half-assed placeholder content in, as long as it gets more things added in and around it. (I have the image of the hive swarming over rickety old bones, encrusting them in golden hexagons like a catacomb saint or coral on a drowned king’s skull. Bee-change.)
Then there’s tagged content. Memory snippets include topic-appropriate tags – so if a memory is about time spent with a friend, it’ll reference the ‘friendship’ list of resonances. Those lists cross-reference one another in associative ways, so the ‘friendship’ list will sometimes generate a result from the ‘kindness’ list – which might, in turn, end up referencing the moral-virtue list. (This sounds kind of complicated, but it’s really just done with Tracery-ish expansion grammar.) Some of those tag-based resonances are compelete in themselves, but some are allowed to be modified by an adjective – which, again, might be context-based or wholly fortuitous.
Perfume themes automatically include some tags, so that, for instance, an autumnally themed perfume will also tend to refer to memories set in autumn, and feature resonances about melancholy. This is a big part of how the whole package of a scent – the notes, the memory, the choices offered – is drawn together into something that feels unified.
And… that’s about it? I guess resonances can also include names of significant-seeming NPCs and places. For a long time I kept imagining that I’d come up with a really clever associative system that would intelligently draw on lots of elements within the text to make really good suggestions – apropos without being over-determined, unexpected without being arbitrary. I never solved this problem.
But I didn’t need to, because the game cheats. A huge problem in procgen output, generally, is the need for filtering, curation. Much of what procgen produces is rubbish and it takes human work and human taste to pick out the gems; in a lot of games, that makes run-time procgen elements a liability. The big trick of Scents is that it enlists the player to do that curation work, and calls it play. (The really clever associative system was inside you all along!) It’s not really an original trick, but it’s essential to making the experience participatory.