Sunburnt Santa Play free

How Sunburnt Santa was made

By the Sunburnt Santa team Published 7 min read

Sunburnt Santa in sunglasses, hat and zinc cream waving from a red ute with a Christmas tree in the tray as a kangaroo bounds alongside.
Sunburnt Santa in his hat, sunnies and zinc, driving the red ute through the outback. Painted with AI tools, finished by us.

Sunburnt Santa was made by one person, Ben Cooney (who goes by vibe_dm), in Yungaburra on the Atherton Tablelands in Far North Queensland. It's an Expo (React Native) app with every frame drawn in Skia, game rules that run identically on your phone and on our server, painted worlds made with AI image tools and then cut, outlined, lit and animated by our own pipeline, and comic songs per level made with Suno.

The idea

Santa swapped the sleigh for a ute. That one line is the whole game: an advent calendar of 24 quick Aussie Christmas mini-games, one door a day, starring a Santa who has clearly been in the sun too long. He jumps roos in the outback, fires Christmas puddings at bin chickens, stacks a pavlova while Nan watches, and gives way to cassowaries on a rainforest road.

Day 13, Cassowary Crossing, is set on a Tablelands road through the rainforest just after rain: a level straight out of our own backyard, with cassowaries stepping out of the forest and the odd cane toad, tractor and cow on the cattle grid. For the real-life Santa who did his rounds in the heat long before ours, read about Father Christmas on the Tea and Sugar train.

From one web page to an app

The first version was a single HTML page with two levels, Ute Run and Bin Chicken Blitz. It's still in the project, kept for reference. The first commit landed on 14 October 2026, and the same day the game was rebuilt as a proper app.

The app is built with Expo, which is React Native in TypeScript, so one codebase runs on iPhone, Android and the web. Screens and navigation use Expo Router. The games themselves are drawn with React Native Skia, so every frame is drawn natively rather than in a web view. Accounts, the top 100, scores and the daily reminder run on Supabase.

Making 24 games and six bonus games as one person only works with reuse. Underneath the 24 doors there are six engines, each used on four days:

EngineWhat you doDays
RunnerJump and dodge1, 7, 24 (and 13, below)
SlingshotDrag back, aim, let go2, 8, 14, 19
CatcherSlide to catch3, 9, 15, 20
TapperTap fast, or tap on time4, 10, 16, 21
StackerDrop it on the stack5, 11, 17, 22
BrainWatch, remember, answer6, 12, 18, 23

Each engine picks its variant by the day, so the slingshot that fires puddings into a gum tree on Day 2 fires water bombs at seagulls on a jetty on Day 8 and flings snags at Dad's barbie on Day 19. Day 13 started on the Runner and was later rebuilt as its own top-down lane game. The six bonus games (Santa Smash, Christmas Light Smash, Chimney Drop, Snap!, Present Spin and Santa Pinball) each have their own engine. By the end of that first day, all 24 doors existed in rough form; everything since has been making them good.

Rules that give the same answer everywhere

The most important design decision isn't visible at all. Every game's rules are plain TypeScript with no phone code in them. They run in fixed steps, 60 a second, and everything random comes from a seed. They don't use the platform's random numbers or even its sine function; the project has its own, so the maths can't differ between devices. Your taps are recorded with the step they happened on.

That means a round is fully described by its seed plus your inputs. Replay the same seed and the same taps and you get the same score, whether the rules run on a phone's JavaScript engine (Hermes), in a web browser (V8) or on the server (Deno). There are 17 test files in the rules folder, and their main job is to prove exactly that, including pinning the scores of known rounds so a change to one level can't quietly change another.

Every scored round is replayed

The phone's score is never trusted. When you press Play, the server issues a ticket with a fresh seed. When the round ends, the app sends back the ticket and your inputs, not a number. A Supabase Edge Function called round-submit runs the same rules from the same seed with your inputs, and the score it gets is the one that's saved. It also checks that the round really took as long as the game says, and holds back for review any round whose inputs look too perfect for a person. Editing the number on your phone does nothing, because nothing reads it.

Even the game feel had to respect this. When you land a big hit, the picture freezes for a few hundredths of a second and punches in (a "hit-stop"). That freeze can't be allowed to change your score, so taps that arrive mid-freeze are stamped with the next rule step, exactly like any other tap, and a test plays whole rounds with random frame times and random freezes to check the replay still matches.

Guests can play everything without signing in. Signing in is only needed to save scores and rank.

The art: painted with AI tools, finished and animated by us

The first art was drawn in code, and it looked like it. On 17 October we chose a new look: painted golden-hour worlds with big, bold sticker-style characters, matched to the welcome sticker that became the app icon.

Here's how that art is made, plainly. The paintings and character sheets are generated with AI image models through fal.ai, using the sticker and approved frames as references, and every generation is logged in the project. What comes out of a generator is a starting point, not a game asset. Our own build pipeline then:

  • cuts each character, animal and prop out of its sheet and trims it;
  • redraws an even dark-brown outline so everything reads like a sticker;
  • splits moving characters into parts, such as Santa's slingshot arm, which is rigged with two bones so it pulls back to wherever you drag;
  • turns runs and hops into three- and four-frame cycles that are tweened in code with squash and stretch;
  • bakes each level's light (golden hour, dusk, moonlight) into the sprites, so the same roo looks right in the outback and on a rooftop at night;
  • packs it all into small WebP files per level, and composes each calendar door from that level's own art.

The art follows a written style guide (palette, outline weights, light from the upper left, Santa three heads tall with his sunnies always on), and every level was screenshot on a phone-sized screen and scored against the best casual games on the App Store, then reworked, pass by pass, to close the gap. There's a shared library of animals and characters, 144 sprite images at last count, so the roo in Ute Run is the same roo in Chimney Drop. You can meet them on the characters page.

There are house rules for the art too. It's family-friendly: Dad's barbie has soft drink, birds that get hit with a pudding are dazed for a moment and then fly off, and the marketing Santa always wears his hat and zinc.

Music and sound

The original music is chiptune arrangements of public-domain carols, such as Jingle Bells, Deck the Halls and We Wish You a Merry Christmas, played by a small synthesiser written in code and rendered to sound files along with every sound effect. That retro soundtrack stays in the game as an option.

On top of that, each level is getting its own comic novelty song. There are 31 in the plan: a theme song, one for each of the 24 doors and one for each bonus game. They're made with Suno, an AI music tool, on a paid plan, from lyric sheets that describe what you actually do in the level, so the song doubles as the tutorial. Each one nods to a public-domain carol, and only public-domain carols are used. You hear the sung version on the level's intro and results screens and an instrumental loop of the same tune while you play.

No AI in the game

AI tools helped make the paintings and the songs. There is no AI in the game itself: no chatbot, no generated content while you play, no paid AI services behind it. Every level is hand-tuned rules running on your device, and every scored round is checked by the same rules on the server.

In its first week, 14 to 20 October 2026, the project ran to 60 commits. The quickest way to see where they went is to play Ute Run, Door 1, and drive.

Keep reading