Personal project · maths, design & build
Safari Time
A five-reel, ten-line video slot with expanding wilds, and sticky expanding wilds in a free-games feature. The par sheet, the solver and the game all read one config.
A five-reel, ten-line video slot with expanding wilds, and sticky expanding wilds in a free-games feature. The par sheet, the solver and the game all read one config.
Personal project · maths, design & build
A five-reel, ten-line video slot with expanding wilds, and sticky expanding wilds in a free-games feature. The par sheet, the solver and the game all read one config.
What it is
Ten lines, always on. Wins are three or more matching symbols from the first reel rightwards, best win per line. A wild anywhere on a reel expands to fill it before the pays are counted. Three, four or five scatters award ten, fifteen or twenty free games, and in the feature the wilds land only on the middle reels, expand, and stay for the rest of the run.
One definition, three readers
The entire game is defined once, in a Python par sheet: symbols, reel strips, pay table, lines, rules. An exact solver computes the base-game return in closed form with no simulation. A Monte Carlo simulator prices the free-games feature and checks the whole game against the $800 cap. And the browser build exports its data from the same file. So the game you play is, provably, the game that was modelled — and the return printed under the reels is the one the maths produces.
How it is built
The playable game is static HTML with no build step. Symbol art is cut from a contact sheet into per-symbol WebP tiles by the engine, and the audio is encoded from source WAVs to MP3 by a small Node script. Built to Montana’s $2.00 bet and $800 payout limits. Play money only.
More games
Your turn
The games are practice. The same habits — verified numbers, plain code, a changelog — go into every site I build for a client.