In my journal entry for June 9, 2024, I wrote, “Doug suggested I make a dating SIM for GH2, as a promotion for it. I love this idea. I’ve written a quick outline & asked Grace if she’d do art. She said yes!
To do: Alert Grace that we need emotion variants: happy / unhappy / talking / flirting
Download Ren’Py again”
This suggestion happened at a party. I’m pretty sure I was two gin-and-tonics in. So I forgive myself for thinking, “Ren’Py is easy. I’ll whip this up in a weekend or two, and release it for Christmas!”
Here begins my post-mortem, as I look back on the year and a half I spent making this “quick weekend project.” TL;DR – Play Galactic Hellcats in Love free on Itch.io!
My outline was something like this (going from memory):
- Choose to play as Autumn or Andrei
- Meet the characters (Equal number male and female, wish I had nonbinary characters! Make one?)
- Interact / score points with each
- Calculate match
- Engage in caper or heist with your love-match
- 1. Pick role in heist they’d like (3 choices, one gives a point, one loses a point, one indifferent)
- 2. Encourage them when they screw up (3 choices, same)
- 3. Pick date for after (3 choices, same)
- Calculate final points
- Final date – load chosen backdrop, 6-9 points, good date, 3-5, medium date, 1-2, bad date.
- Roll credits!
So simple! The only question was, who were the characters you could date? Of course I had the original three hellcats, Ki, Margot, and Zuleikah. Had to have Prince Thane. I wanted a lot of choices. At first I figured I’d have 8 flirtable characters, those four plus Amoreena, Yusef, Hon, and…
I realized I had a paucity of male characters. Did I bring someone more minor onto the scene? Mookie from book one? The bartender from book two? Isn’t it bad I only remember him as “the bartender”?
I started coding with Marion, the bartender, as my eighth dateable character. I set up eight character definitions and 16 variables named you_like_ki and ki_likes_you, etc. I wrote a “Choosening” script that would compare the various variable values and give you the choice of the top three, filtering “you like” first based on choices to flirt with people or ask questions about them, then “they like” based on when you made choices the characters approved of.
Since it’s important to give players feedback, I made a simple pink heart graphic that would float upward with a “plus one” on it when the variable Likes_you incremented, and a grey heart with “minus one” on it that would sink when the variable decremented.
I sat down with a mic and recorded myself saying “aww” and “hmph” and “pewpew” and slapping the desk while making “ow” noises to stand in for fighting. All this progress in one weekend!
At this point, I really thought it would be done in a month. Look how simple!
I used random art from on my computer as placeholders, starting with some figures I’d made for an earlier interactive fiction “Space Princess Coronation” – I also used random photos as background, but soon got a nice drawn-for me background from artist-friend Susan Schaffer – voila! I could actually play:

Having art right away helped with the visual nature of scripting in Ren’Py. I could define regions of the screen for the characters to be in, and have them move and react. For reactions, I just edited images directly in Preview, the simple image and pdf viewer on Macs. To keep my image budget low, I opted to have only three reactions: flirty, blushing, and aghast.
My placeholder for Thane was fan art made by [@danarrrt] (I HAVE FAN ART!) this meant he was just a head next to all these more body-shaped people. I worried this meant his placements weren’t going to be accurate. Still, I wonder if my placeholder work wasn’t more hilarious than the end product:


Why did it take a year and a half to do this silly little game?
Who’s Talking?
Many early play testers had trouble telling who was talking. First, I tried making their text in different colors, matching the names of the characters. That wasn’t enough. I tried modifying Grace’s images to have open mouths for talking. That… exceeded my abilities. Ki just looks like she got into her mom’s black lipstick.

I tried making a script to fade characters out when talking or not, and got tangled up in getting that to work for months – I didn’t want to make more art! (I could have just made faded versions of the sprites, in hindsight, but I spent so long NOT doing that that it felt like too much work.) Then I thought I’d have them shake when talking, like you do with hand-puppets, and I wrote a “bounce” transform which I was playing with when my husband asked, “Why not put a word balloon next to them?”
“Can you draw me word balloons?” I asked. And he did!
Then I had to go through and make it so word balloons appeared every time someone talked, defining where the balloons would appear, and making the balloons reverse themselves if it made more sense for the balloon to be on the other side of the character. This worked! No one complained they didn’t know who was talking anymore.
Ars Larga
Art takes a long time. Wow does art take a long time. Art… is hard. I know because I can’t do it.
Grace got me drawings right away. Alas, the first ones she sent weren’t usable. I needed three-quarter standing figures, so that they could move across backgrounds.
That… was not the funnest thing for an artist to draw. And I had to wait for the art. And then for separate pieces for each expression.
How many pictures could that possibly be?
Six date-characters + two player-characters + two NPCs X all those reactions + revision = ooof. That’s a lot of drawings. Not counting the ones that I couldn’t use, there were 28 character drawings in the game. Then I had to deal with some of them being taller than others and re-sizing them. Grace had to deal with “Just how do I express ‘flirty’ for this shy character? Or ‘angry’ for this taciturn character?” We went back and forth on more angry vs. more shocked for the “upset” images and I really, really, hated not being able to have more reactions but each reaction created so much overhead!
And then, well, I decided that since costume changes are a major theme in dating sims, I needed at least one. So our two player-characters got a costume change, which meant three new reaction poses in their new outfits.

Grace prefers to use pen and paper, and so I would color in her works in GIMP.
Four hours into painting Zuleikah’s face with my finger on a touchpad, my husband said, “It’s painful watching you pixel-hunt. Give them to me, and I’ll color them.”
And that’s why Brian is credited as doing coloring-in. He could turn around a picture in a day or so and have it MUCH more professional-looking than my effort of a week.
I set the new deadline for the game to be Valentine’s Day, 2025.
Then, Brian didn’t have time to color in because his job abruptly switched from being a Unity programmer to an Unreal Programmer and he had to learn a whole new system. (If you know, you know). I approached Susan about doing the rest of the characters, once she was done with the backgrounds. The deadline pushed back to July, 2025, the launch date for Andrei and the Hellcats.
Scope Creep
“Scope Creep” is the term we in the programming world use for when new features keep getting added to a project, making it take longer and longer to finish.
I thought I could get away with 8 backgrounds at first, but then, I needed people to move from one part of a ship to another. One part of a desert to another. I did my best to expand on the backgrounds via my limited GIMP abilities… I flipped one desert scene to be another, I darkened a room and pasted in a different background for a window… but I still ended up needing 16 backgrounds total!
I made a stats screen to show how you were doing, but playtesters never clicked on it, so I made a big pink button. Then I made the button bigger and pinker. Then I added dialog telling you to click on it. Then, finally, I added a small animation to the dialog drawing the eye to it. (WEW)
Putting the button in the upper right corner lead to having to move a lot of “Coms” characters. Sometimes people talked on radios from other locations, so I cut the heads off the characters and put them in circles to be “coms” versions. (Now, technically, I had four reacts: plain, flirty, upset, and coms.) But the new pink button took one of the locations I was putting coms, and I had to shuffle those around.
I don’t remember when I chose to trim the cast down to just 8 characters – our two player-characters and six love interests, but I am super glad I did. Sorry, Amoreena and Marion, you may show up in an expansion pack some day.
I increased the “roles” in the heist to four, however. I don’t remember why. This ended up needing two baddie figures – a New Hope Volunteer and a Ratana Royal Guard. Both of these I color-changed in GIMP for when I needed two on screen.
By this time, we’d missed the launch of the book it was meant to promote, and I had to drop working on the game to, well, promote the book. I traveled A LOT in 2025, saying yes to every convention that would have me and attending my first comic-con as a book vendor.
The new deadline became December, 2025. I figured I could launch it in my quarterly newsletter.
Nobody Loves Me
Because all choices had to be available to the player… there was a chance you would not gain ANY points from any character. What to do with a score of zero? I decided that if you failed to win over anyone, you would date your robot counterpart.
Then I had to face the fact that I hadn’t made reactions for the sibling robots. Oops. They had to be able to do all the things the other characters did – be upset, flirty, or blush, or we’d get a “no image available” error. Rather than tax Grace, I went back to my original “add hearts over the eyes and blush in GIMP” plan, and I simply made a copy of their normal pose and called it “upset” which… look, we’re running out of time here.
And then I had the weirdest time testing because it seems I made it rather hard to get NO points. There were many decisions that would lose points from one person but gain with another – for example, when you “take sides” in an argument or “ship” a couple that is flirting.
Did I not add enough point opportunities, over-all? Is a total of 9 possible points too low?
EH?
A Place For Everyone
There were six dateable characters plus the main character, oh, and two potential NPC / bad guys… and that meant… seven characters could be on screen at the same time. This was weirdly hard!

Because I was changing character sprites with variables – you pick your player, you pick your love interest – I couldn’t use Ren’Py’s built-in reacts in the second half of the game.
A character can be called with reacts:
Show ki upset at left
Show ki plain at center with moveinleft
… this will replace the upset ki at left with a normal ki who slides over to the center seamlessly.
BUT I didn’t have Ki. I had plain_love.
So I had to do this for the same change of expression:
show upset_love at left
hide upset_love with None
show plain_love at left with None
show plain_love at center with moveinleft
If I accidentally left out the “with None” lines, a second ki would slide in from offscreen past herself. DOH!
Also, Ren’Py has this odd thing where it doesn’t really like rapid image changes without dialog or other code between them and it would sometimes simply skip a transition. I couldn’t, say, go from upset to plain to flirty. Sometimes I had to add nonsense little dialog just to get an emotional beat.
In hindsight, this whole variable thing made things needlessly complicated, and the amount of code that I re-used with all love interests was so small compared to the length of the game, I should have just written their branches without variables. You pick Ki, this branch features Ki. Seriously, past-me!
To make it even worse, my branch nodes collapsed frequently, meaning that I had situations where characters on separate branches had to end up standing in the same place, often with no real reason to do so.
For example, a node might look like this one. You’ve chosen Ki as your love interest and “Fight past security” as your role in the final heist. When at first you don’t succeed, you get the choice to either let Ki fight by herself, fight together, or come up with a peaceful solution. If you choose the peaceful solution, you have a choice of bribery or flirting. If you choose to fight together, you can choose to be a distraction or sneak past. Whatever you do, you end up at the next node, where you’ve succeeded in your part of the quest and have to wait to hear back from the others.

I definitely felt tempted to re-use nodes. It seems sensible: you’re saving on code! But in hindsight, these collapsing nodes were more trouble than they were worth, and a lot of my play testing was finding places where I’d have an upset_love standing stage right and a flirty_love moving stage left and a love_balloon pointing where the speaker was not. I had to play through every single combination of every branch to be sure that no matter what your decisions, everything was in the right place.
In my first newsletter of the year, I sent the unfinished game out to my subscribers to beta-test. While I waited for feedback, I walked through every possible branch myself.
I came up with new code for displaying a scarf on characters, and had to rip out some messier code.
I added a bonus scene to the end if you “shipped” two other characters, and then had to fix it so that you didn’t get two shipped couples showing up on top of each other. 😀
I did a lot in the last two months. As I write this, one week before launch, I am waiting on the last background and the last colored-in character, but no matter what, the game is going to come out on February 14, 2026.
Happy Valentine’s Day! Play Galactic Hellcats in Love free on Itch.io!

