Quoll Work Thread, 2025-10-05 - 2025-10-05 20:13
Day job and life have been keeping me pretty busy, but I have been working on Quoll here and there. Making plushies proper People has helped reveal a lot of bugs in my conversation implementation, but has also revealed a crack in the New Gender Order I proclaimed back in November 2023…
Unfortunately, most of the posts I made talking about the New Gender Order were on Cohost (RIP), and I haven’t imported them to this website yet, but I intend to! (Maybe this will get me off my tail to do it…) But in short, it involved me making some code I had specifically written for Glitch, our fluffy skunktaur tutor, and Flo Kelly, a future planned they/them nonbinary character, to be more generic and better interact with the internal Inform 6 pronoun dictionary.
As Ada and the Playerr move through the world, there is a dictionary that maps pronouns like “HER” to what they most likely refer to. Glitch doesn’t use pronouns, but as a benefit to the Playerr, Glitch has graciously allowed the use of all the standard pronouns (“HIM”, “HER”, “THEM”, and “IT”) to refer to Glitch. Internally, this essentially works by Glitch being placed in the pronoun dictionary for those pronouns when visible, unless another Person with more “claim” on those pronouns is also visible.
Here is what the code looks like in the case of Women (the other genders are similar):
To decide whether (O - an object) is inform-6-no-matching-pronoun: (- ({O}==-1) -).
[...]
To decide which object is the noticed woman: (- (PronounValue('her')) -).
To set the noticed woman to (P - a person): (- SetPronoun('her', {P}); -).
To clear the noticed woman: (- SetPronoun('her', -1); -).
The most relevant woman is an object that varies. The most relevant woman is nothing.
To decide which object is the currently relevant woman:
if the most relevant woman is nothing:
let NW be the noticed woman;
unless NW is inform-6-no-matching-pronoun or NW is Glitch the Skunktaur:
if NW is visible:
now the most relevant woman is NW;
if NW is Glitch the Skunktaur:
decide on Glitch the Skunktaur;
decide on the most relevant woman.
The first part are some Phrase definitions to make working with the Inform 6 code nicer in Inform 7, by wrapping them up
in the idea of the noticed woman
. This is so I don't need to really change the code that handles updating the pronoun
dictionary except to add Glitch if necessary. Then we define an Object that Varies called the most relevant woman
, to
keep track within Inform 7 of who we have last set as the noticed woman
. I think I meant to eventually get rid of
most relevant woman
, but decided to save that for a later minor release.
The last part is a Phrase to get the currently relevant woman
, which gets used in a bit of code that always runs when
Glitch is visible to Ada:
Every turn when Glitch the Skunktaur is visible (this is the allow glitch to take non-used pronouns rule):
let CRW be the currently relevant woman;
if CRW is nothing:
set the noticed woman to Glitch the Skunktaur;
let CRM be the currently relevant man;
if CRM is nothing:
set the noticed man to Glitch the Skunktaur;
let CRE be the currently relevant enby;
if CRE is nothing:
set the noticed enby to Glitch the Skunktaur.
It's a bit repetitive to have to repeat this for every gender, but I think it's a pretty clean solution to a tricky problem. But, there is a bug! Can you figure it out? As hint, since this was discovered when I made plushies real People, and thus a plushie like Daisy the Bunny was now a Woman as well, think about what happens if Daisy came into a room, and then left. (Well, she can’t really do that being a plushie, but thanks to some low-level debugging commands, this is essentially what happens.)
Well, let me show what happens when I do a similar thing with Malia Jennings, using the “ABSTRACT” debugging command:
> x her
Glitch is a widely grinning skunk... person... with a skunk butt. Glitch has no pronouns. Glitch is outside of this reality. Glitch was a classmate of mine in college. Though, I guess not technically anymore since the person that became Glitch was erased from this reality. I still remember Glitch... for reasons.Glitch now is this extra-dimensional skunktaur... thing. It's pretty cool. Glitch is much more "loopy" now than the classmate I remember; being erased kind of does that to you. What looks like orange fur is actually holes in the fabric of space-time; pits of emptiness giving me vertigo
Glitch is wearing only a simple white t-shirt, with the words "(un)frotz stuff" written on it in black. After all, pants would really not fit Glitch with the skunk butt and all.
> abstract Malia Jennings to NullReferenceException
[Abstracted.]> gender Malia Jennings
I am taken by a sudden sense of Malia, particularly her gender. She's on my mind.> x her
I see nothing special about Malia.> abstract Malia Jennings to Plushie Bin
[Abstracted.]> l
NullReferenceException
The featureless void of NullReferenceException spans all around me. My home... away from home.A portal IN to Reckoning Room stands here.
Glitch is here, fiddling with a fidget cube in paws, not paying attention. If I want to talk, I should SAY HELLO TO GLITCH.
> x her
I'm not sure what 'her' refers to.
To explain the “GENDER MALIA JENNINGS” command, that is a testing command I added to make it easier to add ABSTRACTed
People to the pronoun dictionary without having to do something like LOOKing, like I do later on in this test. But more
importantly, we get the response that Ada is “not sure what 'her' refers to”! The issue is that when Malia is ABSTRACTed
to the Plushie Bin testing Room, she is removed from the pronoun dictionary by lower level code, but she never stops
being the most relevant woman
! So Glitch doesn't think to take over her pronouns, and thus the bug.
My quick fix is to add this additional otherwise
branch to the if the most relevant woman is nothing
block:
The most relevant woman is an object that varies. The most relevant woman is nothing.
To decide which object is the currently relevant woman:
if the most relevant woman is nothing:
[... same code as before ...]
otherwise if the most relevant woman is not visible:
now the most relevant woman is nothing;
decide on the most relevant woman.
So perhaps my intentions to get rid of the separate most relevant woman
variable would have been a good idea. But I
wrote a test… how did it miss this? Well, the original version of this test used the similar “DEGENDER” testing command
to better clean up:
Degendering is an action out of world applying to one thing.
Carry out degendering something:
say "I no longer have that sense about [the noun] and [regarding the noun][possessive] gender.";
if the noun is neuter:
now the most relevant enby is nothing;
otherwise if the noun is male:
now the most relevant man is nothing;
otherwise:
now the most relevant woman is nothing.
Understand "degender [someone]" as degendering.
But since this is a testing command, it does not get used in normal play by default. I suspect I saw a similar error and decided to add the “DEGENDER” command to fix it, or just added as a pair with “GENDER”. Either way, this meant my test was not covering the expected user path, and thus… the bug.
OK, now I am actually going to change the test and think about if I want to really fix this by getting rid of the most relevant woman
variable (as well as the others) and these testing commands. I think I’ll save that for the future,
though. Regardless, I am going to fix my test so it would hit this without my fix, and then I will have fixed the first
crack in the New Gender Order. May it remain standing…