Do’s and Don’ts of Procedural Flirting

Kitfox Games
Oct 15, 2019 · 4 min read

Captain Tanya X. Short of Kitfox Games shares design lessons learned from the brief procedural flirting experiment that was BadCupid.

BadCupid was briefly a livestream-only game created for Mixer (perhaps someday to come to in which viewers could bet virtual currency on the outcomes of “dates” held between randomly chosen characters in a database. Characters would flirt with one another using different ‘Moves’, such as Compliment or Kiss, with accompanying text as dialogue or description of their action.

BadCupid (2018–2019), in all its jonky glory

As a result of a Move and its success or failure, characters gain or lose Love points. Players bet on whether or not the two characters can reach maximum Love within a time limit.

When designing and scripting the A.I. characters “fall in love” in BadCupid, we intended to create a spectacle that was fun to bet on, like a sports match or horse race. Thus, our design goals were to:

  • Make it funny, using subverted familiarity, surprise, and some absurdity, in over-the-top writing.
  • Make it dramatic, with generally perceived/clear progression and “swingy” outcomes, leading to somewhat predictable odds with occasional improbable, sudden upsets.

However, dating and love are fraught with tricky social cues and political implications, so we knew the topic would be risky, even (especially?) if intended to be humorous. We wanted to create an experience that equally celebrated all forms of adult, consensual dating, and feared making light of sexual harassment or predation, which are real dangers in the modern dating world.

In order to reduce the chance of hateful or out-of-control content, we decided to use a “replacement grammar” for the dialogue, meaning it was all created from an authored corpus. So if a line’s base grammar was “%thinkPhrase %interest %positivePhrase”, for example, it could be filled to become “I’m sure science is so great.” OR “I think Street Fighter should be more popular.”, but all of those variants (such as %thinkPhrase becoming “I’m sure” or “I think”) would need to be written by us.

With all that in mind as context, here’s a few lessons learned from writing a replacement grammar for the flirting dialogue of BadCupid.


  • Do be inclusive. It was tempting to limit ourselves to only ‘safe’, status quo depictions of romance, because we were afraid of seeming like we were depicting LGBTQ+ dates as a joke, or different body types as a joke, or other cultures as a joke. But by including lots of different characters with different known romantic preferences, it welcomed more kinds of viewers and gave the algorithm a seemingly wider range of outcomes, because we naturally interpret some compliments or actions differently between different types of people.
  • Do plan out your pacing. Escalation is the key appeal (and danger) of dating. To go from being strangers to falling in love is a pretty intense escalation — it can help to map out exactly what kinds of flirting belong to which level of intimacy and extroversion one or both flirters have achieved.
  • Do radically accommodate character personality traits. One of our biggest mistakes was trying to make a single set of Moves support most characters — it made them all sound too similar, and react too similarly to each other, when in reality, the fun and horror of dating is that we’re all so different, even when given the same stimulus. One person’s casual “Hello, beautiful” is unspeakable to another, and might be the perfect line on some of us, and the worst line on others. As soon as we started dividing characters (and their Moves and reactions) into “pure” and “jerk” types, for example, we started seeing much more interesting and varied flirt scripts.
  • Do highlight when characters use or discover a shared, mutual interest (or a new incompatibility). This kind of moment is the building block of any relatable romance, whether or not it eventually ends in heartbreak.


  • Don’t overly depend on “compatibility”. In reality, humans are often picky and have specific demands of our dating partners (gender expression, age, location, behaviour, personality, etc), but flirting is much more compelling to watch when you know there’s some kind of chance they’ll fall in love, no matter how ill-suited to each other these 2 characters are.
  • Don’t forget that flirting is a two-way, collaborative activity, not just 1 person acting on another. Spend plenty of time thinking and planning not just how characters can flirt, but also about the different ways characters can react to being flirted with!
  • Don’t be afraid to go a little extreme, especially if your pacing plan can support it. At first, we only explored Moves like “Kiss” or “Touch” or “Insult”, but if you would like your procedural flirting to be funny, why not go all the way with “Propose Marriage” or “Declare War”? It certainly makes the dates quickly memorable!

But maybe most of all, don’t hesitate to make a procedural flirting engine! The world would benefit from more deconstructions of what is romance and why we fall in love, whether sincere or comedic.

Kitfox Games

Written by

Games with dangerous, intriguing worlds to explore. Currently: Boyfriend Dungeon, Lucifer Within Us, Dwarf Fortress, Mondo Museum •

Kitfox Games

Posts and thoughts from the Kitfoxes.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade