I made a game. It’s called Scents & Semiosis.
It’s a piece of interactive fiction about perfume, memory, and the process of assigning or re-evaluating personal symbolic associations with things: semiosis, the creation of meaning. I’ve been working on it for far too long, and – as is the wont of procgen pieces – it’s never going to be fully done, but it’s ready for public consumption.
A perfumer – someone fairly advanced in her field, with a peripatetic past – collects perfumes of particular significance, associated with specific memories. Periodically, she goes through the collection, remembering, throwing out no-longer-important ones, re-assessing what others mean. You get to see her past only as fragments; it’s not a methodical biography. It’s a reflective, relaxing kind of piece – not strictly reflective in the mechanical sense, but not a piece where challenge is important.
An Audience of One
Emily Short has spoken, before, about a particular approach to making games: writing for an intended audience of one, designing a game for the very specific tastes of someone you know well. It’s a very tempting design brief. Also, I have an irrational hangup that if I’m going to give my friends gifts, they should really be hand-made and precisely considered for the recipient’s tastes. I sometimes get carried away by this.
This determined a lot of the design decisions. Emily is a very busy person, so I wanted something that could be consumed in small sessions and with only gentle effort; I didn’t want playing it to become a chore. And the tone needed to be generally either light or a Very Aesthetic bittersweet-melancholy, because ‘I made this for you! here’s some raw pain!’ is kinda rough. It was meant to be brief, densely-flavoured, and more than a little indulgent, like a very tiny box of very nice chocolates or a liqueur that you only need a few sips of.
To be very clear: the protagonist of the game isn’t Emily, or even a fictionalised version of Emily. I am assured that Emily owns relatively few boating-corsets, and has never fought a duel in the toilets of a Montmartre bookstore. But the idea was to suggest someone who Emily would like being around, a sympathetic peer with some shared enthusiasms.
The joke was that this was a Heavy Petal game. Heavy Petal is a fictional game studio that I invented for my Tlön GOTY posts, descriptions of games that don’t exist. Heavy Petal’s output had a particular house style: femme-coded historical-fiction games with some fantasy and alt-history edges, focused on intricate social dynamics and beautiful trappings while also having very sophisticated mechanics. I got a certain amount of ‘okay but this needs to exist’ about the Heavy Petal game descriptions in particular – but they were all conceived of as ridiculous, high-gloss AAA projects, far beyond the scale of anything I could actually attempt.
But thinking of this as a Heavy Petal kind of project was useful for setting the tone and expectations of the thing. It tied a lot into the visual design: this wouldn’t really work in a bare-text parser presentation. I still needed to keep it fairly minimalist – I am not a web dev person at all, and even the very limited CSS at work here gave me trouble – but it really needed to feel textured and lush and nice.
Scents is based on the procgen structure I built for Apocalypse Fuel: a Tracery-like expansion grammar that relies heavily on I7’s powerful text substitutions. This means that the corpus is basically organised into lists of text strings, with each text string able to expand by picking a random item from another list.
It’s an efficient method, and one that I find really easy to work in; but it’s a slightly odd fit for I7, whose tools are largely built around the assumption of a world of objects. You can do context-sensitive stuff this way, but it’s tricky to generalise; a lot of things exist mostly as a big pile of special-case flags. It often felt as though I was stretching the limits of what this particular framework could do; if I were making anything with longer sections of text, or that relied less on implicit suggestion, it wouldn’t have been a good fit. I’m not really thinking about the Next Procgen Project right now, but if and when that happens I might need to try another approach – one that makes tagging and filtering output easier.
People who intimately understand perfume are likely to laugh a lot at the outputs; many of them, I am sure, would not work as written. I am not a perfume expert. (I personally wear perfume hardly at all; I like it in moderation on other people but on me it tends to produce headaches.)
I did the research! And I did consider applying more orthodox principles of perfume composition, but it felt a bit too restrictive for an alternate world and a procgen project. There’s a whole category of scent styles, usually called ‘Oriental’, that’s a bit of an awkward fit for this world. I was going more for hopeful monsters than well-groomed show ponies. Perfumes are constructed with top, heart and base notes, but that’s about as far as the real-world design goes.
The perfumes and the way they’re described owe more to the prose style of Black Phoenix Alchemy Lab descriptions than to serious perfumery; I know this will make some of you roll your eyes with tide-inducing force, and you’re not wrong. There is an underlying structure to how scent-notes are chosen and described, but it’s more about theme than chemistry: a scent might be Autumn / Goth or Mystic / Lewd. I won’t go too nuts-and-bolts about it for now, but if you’re interested I recommend digging around in the source code. (Inform 7 source is very legible even if you don’t have any coding experience).
Ultimately, the scents were probably the easiest and quickest of the systems to set up: this system was effectively complete pretty early in the process. Memories and meanings were much more troublesome.
Beeswax & Venom
Speaking of personal symbolic associations: Emily has a system of considering procgen creativity, divided into the five approaches of Mushroom, Egg, Beeswax, Venom and Salt. (In a classic moment of Emily modesty, the primary source for this is in the footnotes of Annals of the Parrigues, a .pdf that’s only linked to in a post that mostly talks about other people’s work.)
Most of my procgen output tends to come out aligned along the principles of Beeswax and particularly Venom. Some of this is just a matter of technical ability: Salt and Mushroom-like approaches tend to require more complex tools, while Beeswax involves a lot of detail-work and compilation by hand, and Venom relies on writerly instincts. (Egg, in general, concerns a sense of co-authorship between machine and human, and that’s not how I see procgen at all.)
Venom is meant in the sense of toxin, hallucinogen, bitterness, acid, etching, numbness, drugs, and release from the mortal coil. Venom represents that which is destructive, fictive, cruel, lovely, playful, unreliable.
Poisonous things come in jewel colors. The principle of venom permits the use of connotation rather than denotation.
Scents’ design is messy, sprawling, and designed very much with specific outputs in mind; it’s a little like the Dwarf Fortress process which begins with stories about dwarf exploits and works backwards to see what kind of system could produce those stories. Most of it was: figure out an output that would be good, and then generalise from it.
But that only comes alive when you have enough elements going on, enough possibilities, that the system can surprise you by throwing together things – things you intended to put in there, but which taken together imply something more and greater. It takes a good while for a mostly-handworked procgen project to get complicated enough to start doing this, and a lot of that is beeswaxy: lots of small, steady, incremental, unglamorous additions, list-sifting, running your antennae over all the parts.
Beeswax embraces many spirits, daemons, and forces in the spectrum between the natural and the underworldly. The instruction to “mind your own beeswax,” the cells of a hive, and the gentle witchlike scent of candles foster these associations. Beeswax represents healing withdrawal from the systemic unkindness of the world, but not laziness or the loss of productivity.
The principle of beeswax attends to specific cases and does not attempt a generalization outside its ken. Approaches that crowdsource content elements and then compile the elements — especially if humans have intervened in the tagging — comport with the principle of beeswax.
Again, this is an indulgent project, and allowing oneself lots of indulgent elements was important. Part of what I love about parser that’s often lost in hypertext IF is the sense of weird discovery, of finding something amazing that you didn’t have to find and might not have. Procgen can supply this, but – just like that parser game with lots of hidden content – it’s not very efficient design to implement. But that moment where the system throws up a little bubble of something odd and the player – I’ll use an Apocalypse Fuel example here to avoid spoiling the thing I just released – goes ‘holy shit, there’s a whole subsystem for generating weird historical martyrs?’ Gold.
This took far too long. It was originally conceived of as a NaNoGenMo project, and I’m not saying in which year. Much of that time wasn’t really active development; there were doldrums.
Because this was a big and varied and beeswaxy project, I invited a few authors whose style I thought would be a good fit – fantasy-edged, aesthetic-detail-oriented, attentive to the right phrase – to contribute to the memory corpus; Cat Manning, Caleb Wilson, and Yoon Ha Lee. Everyone was very generous and enthusiastic, and there were some great contributions, but figuring out a mode of collaboration that really clicked for everyone was elusive. Collaboration is an elusive beast, especially in hobbyist games – sometimes it really works, and sometimes it just doesn’t quite take off and it’s nobody’s fault. (If anything: my fault. It’s difficult to introduce people to your weird code and get them to feel comfortable adding to it.)
In one of the doldrums, Cat Manning, who I’d already asked to contribute, asked me if it’d help for her to take on a producer role. Saying yes was the smartest move I made on the whole damn project. I am not very good at bringing medium-large art projects to completion without some kind of external accountability; procgen projects have a particular tendency to expand indefinitely, and need regular triage. Cat kept me honest about scope, required me to articulate things in terms of priorities and schedules, and wrote target outputs at points when my imagination had burned out entirely; and her enthusiasm for the project and critical eye were invaluable.
(Cat also has more hustle in her little finger than I have in my entire body, which I appreciate enormously.)
A lot of the effort – probably too much – was spent on considering how to suggest the world that surrounds the protagonist’s life; a lot of alternate history is loosely referenced by the text, and things like name lists and cities inevitably suggest something. It’s meant to be a better world, though not anywhere near a perfect one; it is centred around a version of Europe, but one that’s less hegemonic, more open, stranger. A big part of the reason I love Crusader Kings is its ability to produce underdog worlds, alternate histories where the Cathars outnumber Catholics or Russia never unifies or the Khazars survive into modernity; I wanted to gesture at that kind of feeling, without bringing it into the foreground.
There was a fair amount of effort, for a while, put into procedurally generating some names entirely by phonological rules in order to suggest languages and cultures that don’t exist in our world; mostly this didn’t work enormously well and that aspect got scaled back considerably. I could probably write entire posts about the difficulty of scoping name lists for this; I don’t know whether this aspect quite gets what I was gesturing at. It’s such a tiny window of output that you can put so much work into.
I’ve got… probably more I want to say about this! I should talk about using Vorple for a full project, and maybe about how meanings get generated, and about the different play options. But for now: it’s out, and people seem to like it, and I’m glad and grateful.
(Also: if you’d like to share any particularly good output from the game, I am super interested.)