Skip to content
coded4
 All work
Case study Own product Mobile

Hexbrew

Nine wizards. Twenty waves. Far too many slimes.

Hexbrew on an iPhone: a wizard in a yellow hat on wave 13, his weapons firing into a crowd of slimes, with the thumbstick and spell button at either side
Role
Design, development & release
Platform
iPhone and iPad, iOS 15 or later
Stack
Godot 4.6, GDScript, GUT, Python
Status

The brief

An arena action game with wizards, on iPhone and iPad from the same project as the desktop build.

You pick one of nine wizards and survive twenty waves of slimes. Your weapons aim and fire on their own; you move, cast your wizard’s spell by hand, brew potions from what the slimes drop, and decide before each wave whether to hex it. Bosses come on waves 10 and 15, and the King Slime has to be killed on wave 20 to win.

Four things make it its own: potions brewed from what particular slimes drop, with a recipe book kept between runs; a spell you cast by hand and see happen; hexes that curse a wave in return for a reward; and a spellbook look on a meadow.

It plays offline, with no ads and no account, and it collects no data.

Design

Nothing in the game is drawn or recorded by hand. Every sprite is an SVG written by a Python script, and every sound and music loop is synthesised by another, with no dependencies. To change how something looks, I change the script and run it again.

On a phone a wizard is under a centimetre tall, so they are kept simple: a big hat, a big head with dot eyes and a robe. On a touch screen the game adds its own controls: a thumbstick wherever your left thumb lands, a spell button you tap to cast at the nearest crowd or drag to aim, and larger menus that keep clear of the notch and home bar.

Hexbrew on an iPad: a storm cloud casts lightning into a crowd of slimes on wave 13, with the wizard and his weapons on the left
Palette
  • #2C3A2A
  • #93CF6E
  • #F3E6C4
  • #4A3524
  • #FFD75A
The cauldron screen: five ingredients to add or buy, slots to mix two or three of them, and a row of potions already drunk

Build & release

Hexbrew is built in Godot 4.6. Every rule of the game lives in plain scripts with no scene dependence, and the scenes only draw them and feed them input. That one decision made the rest possible: tests and a balance bot step the simulation without a window, and desktop and iOS share every rule.

Content as data Wizards, weapons, spells, monsters, waves, potions, trinkets, runes and hexes live in JSON. A new weapon is usually an entry and an icon, and a test fails if anything is missing its art or sound.
Tested without a window 156 GUT tests cover the data, stats, the run, the workshop, brewing, hexes, saving, touch and the arena simulation.
Balanced by a bot A bot plays whole runs with every wizard on every difficulty. The target: it nearly always wins on Apprentice, a little over half the time on Adept and about a quarter of the time on Archmage.
One project, two platforms The same project runs on desktop and iOS. Touch controls and phone-sized menus switch on at run time, and the desktop game is unchanged.
Store images from the game The App Store screenshots and the 20-second preview are the game drawing itself: the bot plays to a chosen wave and a promo scene frames the shot and its caption.
Shipped Hexbrew went live on the App Store on 21 October 2026.

Choose what you're happy with. You can change this any time from Cookie settings in the footer.

Strictly necessary
Keeps the site working, like remembering your cookie choice and light or dark mode.
Always on