In this post (7 sections)
  1. Teaching bots to play
  2. What a million games said
  3. What we changed
  4. What the numbers said afterwards
  5. Also in v0.4
  6. What we learned
  7. Under the hood

Here’s an uncomfortable thing to learn about a game you’re making: almost nobody survives it.

We suspected Drug Warz was too punishing. Friends kept dying early, usually to some random street fight that came out of nowhere. But “my friends keep dying” is an anecdote, and anecdotes are terrible at telling you why. So for v0.4 we stopped guessing and built a way to measure.

Teaching bots to play

The tool is a small command-line program that runs the real game engine — the exact same buy, sell, travel and fight code you play — with no screen attached. Instead of a person tapping buttons, a strategy makes the decisions.

We wrote ten of them, each a caricature of a real playstyle:

  • random buys and sells at random. It’s the control group: if a smart strategy can’t beat it, the game isn’t rewarding thought.
  • greedy always buys the cheapest thing and sells the priciest, with no survival instinct at all.
  • fentanyl-rush goes all-in on the most dangerous, most profitable product.
  • stay-and-grind never travels.
  • banker saves everything it can.
  • property-mogul builds passive income.
  • heat-manager buys every item that lowers police attention.
  • dealer-network works through the game’s big suppliers.
  • optimal-trader remembers prices and only buys real bargains.
  • marathon uses every system the game has.

Each strategy played 50,000 games of Classic and 50,000 of Endless: a million games in total, finished in about two minutes on a laptop. A seeded random number generator makes every run reproducible — same seed, same million games — so when we change a rule we can compare like with like.

For every game the simulator records how it ended (rich, broke or dead), what killed you, how much attention you drew from the police, and which parts of the game you actually used. Then it writes a report and flags anything that looks unhealthy.

What a million games said

Three problems jumped out, and none of them were things we’d have found by playing a few rounds ourselves.

Combat killed almost everyone. Every single death in the data was a fight. Not the loan shark, not a federal raid — fights. Even the most careful strategy died in 65% of Classic games, and in Endless every strategy eventually died. The cause was simple: the chance of a fight depended only on how dangerous the city was. Detroit started a fight on more than a quarter of all arrivals, no matter how quietly you played, and three unlucky fights were enough to end a run.

Heat only went up. “Heat” is how much attention the police are paying you. Between 62% and 84% of active games pushed it into the red zone, and even the strategy that bought every heat-reducing item still got there 87% of the time. Each trade added 5 to 15 heat; a quiet day only removed 3. The math simply never let you cool off.

Nobody could get rich. Not one game in a million reached $100 million. The bank charged 30% to deposit and paid nothing back, and a mansion took the better part of six months to pay for itself.

The v0.4 travel map, with 19 cities across four regions

What we changed

Fights now follow your behavior. The odds of being stopped are now tied to your heat as well as the city’s danger. Keep a low profile and you’ll see about 70% fewer encounters; draw attention and you’ll get roughly the old rate. You also start with a switchblade instead of bare fists, and the weakest police and muggers hit softer and are easier to run from.

Heat can actually come down. It cools by 5 a day instead of 3, the hard drugs generate less of it per trade, and federal raids in the US now need heat above 92 instead of 85. Heat-reduction items recharge faster and lose less of their effect with repeated use.

Money can grow. Bank deposits cost 20% instead of 30%, and the bank now pays 1% a day. Property income went up two to three times, and the ceiling on how high a price can spike went from 4× to 6× a drug’s normal maximum.

What the numbers said afterwards

We re-ran the full million games on the new rules:

Before After
Best median net worth (Classic) $315K $558K
Games reaching $1M 15–43% 43–65%
Richest Endless game $22.7M $121.6M
Careful strategy’s death rate (Classic) 70% 65%

The game is still dangerous, and that’s on purpose. But careful play is now clearly rewarded, the economy has room to breathe, and the police respond to what you do instead of rolling dice behind your back.

Also in v0.4

The shop: weapons, armor and items that lower your heat

Cooking. Buy precursor chemicals, cook them in a lab you own, and produce purer product than the street sells. Six recipes, upgradeable labs — and the occasional explosion.

Teammates. Runners sell while you travel, enforcers help in fights, chemists improve your cooks, and lookouts keep the heat down.

The map. The travel map now plots all 19 cities on a real world map. Positions are stored as percentages rather than pixels, so the same coordinates work on any screen size.

Hiring and managing teammates

What we learned

The real change in v0.4 isn’t any single number — it’s the workflow. Change a rule, play a million games, read the report turns balance from an argument into an experiment. Every release since has been built that way.

Under the hood

The game is plain TypeScript with no framework, tested by a few hundred unit tests and a set of browser tests that click through the real interface. It’s hosted on Cloudflare Pages, and much of it is written with an AI pair programmer, Claude Code.

Play Drug Warz and see whether you’d make it into the surviving 35%.