Hello, hatching a unit in Mutarch is a slot machine pull. Not “is a bit like”, not “has elements of”. Last week in #7 I showed you the splice math: a penetration roll per socket, then a grade roll that splits the success mass into perfect, normal, and weakened. That is a variable-ratio reinforcement schedule. It is the same machinery a casino uses, and I did not arrive at it by accident. I designed the probability mass myself, I know what the lever does, and this post is about why I pulled it toward the player anyway.
One paragraph of literature, because pretending this is undiscovered country would be dishonest. Skinner showed decades ago that rewards delivered on a variable-ratio schedule (you do not know which attempt pays out) produce more persistent behavior than any predictable schedule, and that the behavior survives long dry stretches that would kill a fixed-reward habit. Later gambling research, Reid and Griffiths among others, added the near-miss effect: an outcome that looks almost like a win is processed more like a win than like the loss it actually is, which is why slot reels stop one symbol short so often. Every gacha game you have ever installed is built on these two findings. So is hatching in Mutarch.
I am not writing this from a podium. I have lost evenings to gacha games, real ones, the kind with a shop. I know the feeling of one more pull at 1 a.m., and I know exactly which part of my head it was talking to, because it is the same part I am now wiring up for other people. That is precisely why I think the interesting question is not whether the lever exists. It is what the machine pays out in, and what it costs to pull.
Where the line is, mechanically
I am not going to argue that Mutarch is fine because my intentions are good. Intentions do not survive contact with a probability table. Instead, here is the actual structure, each piece verifiable in the code.
There is no money in the machine. The entire economy is one TypeScript interface,
Currency, and it holds three wallets: biomass, epicBiomass, and legendaryBiomass,
all earned by playing. There is
no store, no purchasable currency, no second “premium” resource that conveniently runs out.
This is not a monetization plan I am deferring; there is no slot in the architecture where a
shop would go.
The worst case is floored. From #7: a socket that takes a skill rolls perfect 10% of the penetration mass, weakened 25%, normal the rest. A weakened skill runs at 0.65x power and 1.3x cooldown. That is a worse skill, and it is supposed to sting a little, but it is a functioning skill on a functioning unit. Compare the gacha dud, the 1-star filler whose entire design purpose is to make the pull feel wasted so you pull again. Mutarch’s grades split the success mass, they never add to the failure mass: a socket at 77% penetration carries its skill 77% of the time, exactly, whatever the grades do.
The randomness is inspectable, and nothing is watching you. Every hatch roll comes off
the seeded streams from #3; the variance roll literally comes from a fork labeled
"variance". A determined player can dump the distribution and check it against this post.
Everything runs on your machine: there is no server, no account, and, stated as a verified
absence, no telemetry. The dependency list is React, Pixi, Zustand, i18next, and the Tauri
filesystem plugin; there is no analytics package because the game never phones home about
anything. The drop rates cannot adjust to your behavior because the game does not know your
behavior. I want to be precise here, since this is the mechanism the worst of the genre
hides behind: dynamic, engagement-optimized odds require data, and the data does not exist.
The machine takes no coins. Splicing is free, also from #7. I think this single change breaks most of the predatory loop on its own, and it is worth spelling out why. The classic loop is: pull costs money, dud, the loss itself creates the pressure to spend again. Remove the coin slot and the schedule still does what Skinner said it does, it still produces texture, anticipation, and the occasional perfect hatch you tell someone about. But the thing the dry streak extracts from you is no longer money, it is time you were already choosing to spend playing a game, gathering genes, which is the game. A slot machine that pays out in stories and charges in play is, I would argue, just a game again. The schedule was never the poison; the coin slot was.
The two loops. The right one is missing an arrow, and the absence is load-bearing.
No pity counter, on purpose, and two honest grep hits
There is no pity system on the hatch roll. rollSkillOutcome takes a penetration value and
a uniform roll and returns a grade; it is memoryless, it does not know how many times you
have hatched, and there is no hidden counter ratcheting your odds after a bad run.
Honesty requires a disclosure here, because if you grep the codebase for “pity” you get hits. Two systems use the word, and neither touches the hatch roll. First, the opening boss of a campaign force-passes the 15% chassis drop roll, once per save, because the chassis frame is the entry ticket to the whole splice system and playtesters who missed the coin flip never incubated anything. Second, the expedition board always keeps 2 low-tier “pity” offer slots stocked next to the 4 normal ones, so there is always something runnable. Both guarantee access to the machine. Neither guarantees what the machine pays. I think that distinction is the whole ballgame, but I am stating it as a distinction, not hiding the word.
So why no real pity on the roll itself? Because pity counters exist to soften paid scarcity.
When each pull costs $2, a publisher has to cap your worst case or the lawsuits and the
reviews arrive. With free, unlimited pulls, the penetration curve plays that role
asymptotically instead: 1 gene is a 40% chance, 50 genes is 90%, and the curve is clamped at
99% so certainty is never on the table. Your protection against bad luck is not a counter, it
is that pulling again is free and pouring more genes visibly moves the floor. I will be
straight about the counter-argument, because it is real: a long dry streak still feels bad,
math or no math, and “the expected value is fine” has never once consoled anyone at 1 a.m.
There is a comment in penetration.ts deferring an idea I keep circling, a finite completion
around 30 genes or a fixative catalyst item, some honest finish line for collectors. I have
not built it. I am genuinely not sure if it belongs.
1,000 rolls through the shipping rollSkillOutcome at 10 genes poured (77.4% penetration),
seed “devlog-007”. Dashed lines are the expected counts. The weakened band ran 12 hot and
perfect ran 5 cold; that is what honest dice look like.
The week I removed the dice
I did not always believe the above. In April I talked myself into the opposite position.
Every hatchling rolls a genetic variance once, at hatch, between 0.70 and 1.30, frozen for life. The UI bands it into five labels: Degenerate below 0.82, Flawed to 0.94, Standard to 1.06, Superior to 1.18, Pristine above. On April 20 I removed it. The reasoning felt airtight: the skill sockets were already a gamble, stacking a ±30% body lottery on top felt unfair, like the game rolling its eyes at your build. Everyone hatched Standard. The math got cleaner and the tooltips got shorter, and I was briefly proud of myself.
The game went flat in under a week of playtesting. Hatching stopped being an event and became a vending machine: insert genes, receive unit, feel nothing. Worse, I stopped caring about individual units. The Pristine brute you protect because she rolled 1.27, the Flawed runt you field anyway and feel weirdly loyal to, both gone, replaced by interchangeable spreadsheet rows. It turns out the variance was not noise on top of the units. The variance was where the units came from. On April 29 it went back in, and while I was in there I consolidated the rolls: the chassis frame used to carry its own small vigor roll, which I deleted, so today the one hatch-time variance draw is the only randomness on a hatchling’s body. One die, visible, labeled.

The flat week next to the revert, recreated on today’s build by pinning the variance roll to 1.0 on the left (the flat-week branch is gone, the flatness is easy to reproduce). Same species, same level: Skarn rolled 0.79 and hatched at 210 HP, Brill rolled 1.27 and hatched at 315.
The lesson, stated as plainly as I can: the thing that makes hatch randomness exploitative in a cash shop and the thing that makes units lovable in a colony sim are the same thing. Variable outcomes are what make individuals individual. The mechanism is neutral. The economics wrapped around the mechanism are not, and the design work is in the wrapper, not in the dice.
So that is the machine, with the panels off. No money in, floored worst case, inspectable seeds, free pulls, no pity by decision rather than by oversight. I think the line is in roughly the right place, and I am not certain it is in exactly the right place. The part I still worry about is dry-streak feel: the player who hatches four Degenerate units in a row and does not care that the distribution is honest, because their evening was not a distribution. If you have been on either side of that evening, I want to hear about it.
This is one of the cases where I actually need opinions, so let me know what you think.