Splice.
A biopunk auto-battler I make on weekends. Draft a class, splice genes onto your microbes, lay them out on the dish, then take your hands off and watch the wave fight it out. Win and you pick from what it drops. The next wave is built to answer whatever you just turned into.
Splice is my own game, the one I build on weekends. I have spent years building gameplay systems inside other people's games, and this is the one where I get to pick every system myself, which is either the point or the problem depending on the evening.
The dish is never just a grid to fill. Solid tiles cut your lines, vents let things through where you are not allowed to build, and emitter nodes sit in the middle of it all doing their own thing for the whole fight. Whatever the board gave you is the shape you have to build inside, so a bad dish is a different game rather than a worse one, and learning to read one is most of what getting good at this looks like.
There are three kinds of damage and two of them have an answer: armour blunts contact, resistance blunts toxin. The third ignores both, which is the entire reason one of the classes exists. So a strain that melts one enemy slides straight off the next, and the build that walked through wave four is usually the reason wave five goes badly. That is the puzzle the rest of the game is made of, and mitosis, spores, bursts and contagion are what you get to solve it with.
The classes are the part I keep going back to. They are not the same numbers with different names, they are different shapes over time. One of them wins if the fight goes long. Another has to have already won by then. Your cells pick their targets by their own logic instead of all piling onto the nearest thing, an infection spreads underneath the whole fight, and if you want to you can overbuild a cell past what it can hold: it bleeds a little every tick and rolls once at the end. You get to see that roll before you commit to it, because I wanted a gamble you could do arithmetic on rather than a slot machine.
Every run starts from a seed, and the same seed plays out the same way on any machine, every time. Not a similar fight, the same one, move for move. Under all of it, the game is C++ compiled to WebAssembly and it runs off the page's main thread, which is the only reason a whole wave can be resolving while the page still answers a click. That is as much of the engineering as you need to play it.
Press play and the whole thing runs right here in the page. Take a class you have not tried, and if the run falls apart somewhere around wave five, that is the game working as intended.
Eight steps, seed to boss. You make every decision in the first five and none at all in the sixth, and that trade is the whole game.
Start from a number
A run is a seed and very little else. It picks your draft, your dish, the enemies and the drops, so a seed you liked is a run you can hand to someone else whole.
Pick a shape, not a stat line
Toxinologist grinds a wave down with damage over time. Swarm floods the board and wants it finished early. Fortress kills with its defence and means to still be standing at the end. The one you take decides which half of the fight you are trying to win.
Take a microbe
The draft offers a few strains and you keep one. It decides what you open with, so your first real decision lands before you have even seen the board.
Build the genome
Genes go onto microbes by drag and drop, and the game tells you on the drop whether one takes instead of complaining afterwards. A microbe is its morph plus what you spliced in: what it hits with, how often, and how hard.
Set the dish
Placement is the other half of the build. Reagents bake a chemistry into the tiles they sit on, vents and emitters push your layout around, and adjacency is what turns a handful of cells into a strain that works together.
Watch the wave
No input here, and that is the point. Your cells pick their own targets, armour and resistance do their work or get bypassed, the infection creeps across the dish, and any cell you overbuilt either pays off, pays for itself, or does not survive the wave.
Claim what dropped
Clearing a wave opens a data-drop: several cards offered, a couple claimed, rarity weighted by the difficulty you picked. No shop, no currency. Winning better is the entire economy.
Tier up, then meet worse
Waves run up to a boss, and crossing a tier reshapes the dish underneath you. What comes next is generated to answer what you have turned into, so the run gets harder in the shape you made it.
A run takes a few minutes. Lose one and you start another seed, which is most of the reason I still play my own game instead of only balancing it.
Splice is a weekend project. It exists because I wanted a game where the interesting decision happens before the fight, and then the fight is honest about what you built.
It is mine and the repository is private, so there is nothing here to click through to. I still balance it in the evenings and the class list keeps growing. There are more tests in it than there is game, which probably says something about me. If a run ends in a way that feels wrong to you, that is exactly the thing I want to hear about. And if you want to talk gameplay systems, engine work or anything Unreal, the contact link is right below.