How can I track fairmath stats without railroading the player?

Hi peeps! I’d like some advice on raising/lowering and tracking fairmath stats.
I’ve read LadyCass’ thread on the subject, but my problem is less about mechanics and more about practicality.

I’m making a dating sim with a compatibility mechanic. Each RO has a combination of lower thresholds for the MC’s opposed stats, meaning the player’s stats have to be above a certain amount for an RO to be interested in them. Each opposed stat is created at 50.

Filux requires: Disciplined>10%, Gentle>75%, Courtly>50%, Loyal>50%
Quan requires: Disciplined>25%, Gentle>50%, Courtly>10%, Loyal>90%

My goal is to create a game that requires the player to carefully navigate social situations and work to build trust with their romantic interest, as opposed to just spending time with them.

I’ve already coded a system for determining compatibility, I’ve found gkkiller’s fairmath calculator and Twiger_Fluff’s fairmath calculator collection, and I’ve read the 2016 CoG writing guide.

The plan:
One option I’ve considered is to keep the stats loose until I’ve finished the content for the game, at which point I’ll figure out how many opportunities there are for stat adjustments and use spreadsheets to weigh the increases/decreases accordingly.

The issue:
My problem is determining the necessary stat increases while also allowing room for player exploration and avoiding railroading. This is my first game and I feel like I’ve set myself up for some rough alpha testing.

Questions and considerations:
Has anyone tried something similar to this? Are there common pitfalls I should watch out for while making my calculations? Should I ditch the fairmath entirely? Is there a simple solution here that I’m just not seeing?

I mean, we should probably start with the fact that—realistically speaking—nobody is ever getting less than 10% or more than 90% with fairmath. Your ROs seem effectively unromancable, which is kinda defeating the whole point.


I’d suggest that 10 and 90 are too extreme for fairmath. In most games 25 and 75 are pretty high to achieve, 20 and 80 are a daunting challenge.

The idea of setting them so precisely that you need a spreadsheet… I guess if you’re aiming for the romance equivalent of Dark Souls you could go that route. :slight_smile: But I’d have thought fairmath could work fine for less-punishing but still-challenging dynamics.

Don’t set the thresholds in stone until you alpha test and see whether the “difficulty level” of each RO feels right to you.


As someone who has played a bunch of these games… Gotta say, I don’t enjoy fair math. Diminishing returns suck. Big stat swings that happen when you do something against what you’ve been focusing on are the worst. Especially if you’ve put a few hours into a game and there’s no saving.

I prefer having consistent predictable stat increases that I can plan and min-max.


The way I balance my stats is something like this. It means I can get a sense of how difficult the game is on average, as well as gauging how easy or hard it is to reach certain thresholds so I can make sure each stat is equally powerful. It also means I can change the difficulty thresholds and increases/decreases very easily if I need to.

I think having very precise requirements for romanceable characters, or several of them as you’ve proposed here, are going to be frustrating for players so I would recommend using something like the linked method to see whether it’s even possible to reach the requirements, and if so how easy it is to do so. It may also be worth considering an optional tag on the stat choices to show how each one affects the PC’s stats so they can make their choices with more clarity.


The link is very interesting, but as someone who struggles with things like this it makes me wonder if it would be okay to ask readers themselves about how they see the stats in a WIP? Or would that ruin the immersion, seeing as most readers probably don’t think about the ifs and buts of coding?

Plenty of readers here do. :slight_smile: At WIP stage, you can get lots of feedback on how your stats are “feeling” without losing your audience.


You can certainly ask, but take replies with a grain of salt. While people cannot be wrong about what they liked or disliked about a game, they are often wrong about things they would like or dislike about some hypothetical game or mechanic.

People complain about fairmath all the time, to the point where you’d be forgiven for wondering why the authors still use such a widely-hated mechanic. But if all writers switched to purely flat stat increments, people would just start complaining about that, pointing out how those mechanics incentivise them to keep increasing one stat until it’s maxed out and then immediately switch to raising others. Then everyone would have to switch to fairmath again, and then to flat increments again, and the cycle would continue forever and we’d be in hell.

Or take the dream of everyone and their grandma, the fabled back button. This forum has a long history of people bemoaning COG for their stupid insistence on not allowing takebacks in their games, and sometimes even threatening the staff unless their precious back button gets implemented. But when COG actually tested such a feature, they ended up with a bunch of bored players treating the game like a chore, as they turned every choice into an arduous process of checking each and every option before deciding on anything. Which was a pretty obvious outcome; Given the opportunity, players will optimize the fun out of a game.

Again, that’s not to say any feedback you get is strictly invalid, but you need to put it in perspective. Chances are nobody will ever say “man, I’m glad I never hit a stat ceiling and that the check difficulty was just right!” because those mechanics are seamless and go without comment if done right. Complaints must be weighed against complaints you would get in an alternate scenario, as well as the number of people who didn’t raise any complaints. And if you think that’s overly complicated and you should just do whatever you want with your game… that’s a valid way of thinking too. :slightly_smiling_face:


Ah okay that’s very useful info!
Luckily I’m only doing lower requirements, meaning (for most ROs) the player only has to hold two stats at 50%, raise one above 75%, and not let the other fall below 10%.
I’ll adjust the more extreme upper requirements though, it’s good to know that 90% is unattainable lol

1 Like

Good stuff – but remember 90 and 10 are equivalent in fairmath. :slight_smile: As you know, you start a fairmath stat at 50, not 0; dropping it to 10 is just as difficult/unlikely as raising it to 90. A 10% minimum threshold is one that could only be reached with great and deliberate effort.

1 Like

Aaaaa thank you, this makes everything so much easier!!

1 Like

Glad it’s helpful and I hope it works well for you! In my first game that didn’t use that method, early drafts were outrageously difficult and many paths were impossible to access - using it for the later games saved a lot of headaches.


One thing you can do is ask players to report their stats after playing, which should give you some idea of how easy it would be for the average player to get those stats. (And just looking at the stats my players have been reporting, 350,000 words into a story that probably won’t hit 500,000, the numbers of fairmath stats that have reached 75 is very small, and none have reached 90.)


(God, ignore that I’m writing this for a second time, I just woke up and I accidentally deleted my first reply instead of editing it)

That makes sense. Ever since I started learning choicescript I feel like the way I experience choice games has completely changed as I often have the code open next to the actual game itself, but it’s obvious that isn’t the case for most players.

Thank you for such a long comment! Your feedback is greatly appreciated.


BTW I just wanna say that y’all are so nice?? I’m not used to getting replies this kind and helpful on other forums, it’s a huge breath of fresh air.


Hi, My approach to this is shown in this post using a tool one of the forum members made.

This tool:

Basically you add all the variables you want to track to your startup file

like this:
*comment savestatsetup str agi int char cons gold_coins

Then at the point you want to know the values you do a
*comment savestats

Then you run the tool as many times as you want (the longer and more branched the game the more iterations you should do to have a better distribution and endpoints.)

After that you’ll have a file with all the output, and from there you can do simple excel functions to get the endpoints or averages:

Or you can use more complex tools to graph probability distribution or all sorts of things.


Oh damn that’s fancy! Thank you, this will come in handy.

1 Like

A word of caution: the more careful navigation of social situations your game requires (and the more complex a field of choices you’re letting your readers navigate), the less a random testing approach is going to tell you. Your readers aren’t going to be picking at random; they’re going to be doing things that make sense within the social situations you write. In complex games, there’s no substitute for readthroughs/alpha testing.


That’s true, but sadly you need readers for that, and then readers that give feedback. Randomtest can run as many times as you want. It can be useful to test other stuff though.


Yeh most likely, I’ll use randomtest as a screening tool while I alpha test each chapter. It’s useful for catching big problems. Once I’ve done a couple playthroughs, I’ll feel more comfortable opening it for beta testing.