Inspiration

Vampire Survivors, but as a painted storybook: gouache worlds, a masked wizard, and a new take on skills and ultimates.

What it does

A survivor-like you play with one thumb.

  • In a run: your wizard auto-casts spells while you steer through the horde. Every level-up, you pick one skill card out of three, so no two builds are the same. Your one button is your ultimate, the spell you hold back until the screen is full.
  • Chapters and bosses: the Moon Forest, the Sunscar Desert, then the Jademist Grove, each with its own creatures and its own boss. The Scarlet Warden, the Zenith Scorpion and the Great Sage Ape announce themselves, change phase, and open the passage to the next chapter when they fall.
  • Between runs: death is not the end. Kills earn coins, and coins buy permanent powers in the power tree and gear in the shop: heads, cloaks, staves and grimoires, each with five ranks to upgrade.
  • A reason to come back: chests to open, achievements to chase, and a global leaderboard on Game Center.

How we built it

  • The app is Expo and React Native: home, shop, power tree, achievements, leaderboard and settings are native screens.
  • The game is Three.js on an ECS engine with about sixty systems, running inside the app as an Expo DOM component and shipped inside the binary, so it works offline.
  • Rendering: custom GLSL shaders for grass, water and ink outlines, instanced sprite-sheet enemies, and quality tiers that adapt to the device.
  • Art pipeline: AI-generated sheets, sliced into atlases by Python scripts. 3D heads are built by script in Blender and exported as GLB; grimoires are generated entirely in code.
  • Monetization: RevenueCat for every purchase (diamond packs, starter pack, premium pack), AdMob for rewarded ads.
  • Around it: Game Center for the global leaderboard, PostHog for analytics, Sentry for crash reports, Vite for the game bundle, EAS Build to ship.

Monetization

The game is free and no run is ever locked.

  • Rewarded ads are a choice: watch one to reroll your cards, to revive once, or to double the coins of a run.
  • One premium pack removes forced ads for good and doubles your coins, for the player who has decided to stay.
  • Diamonds come in three packs, plus a one-time starter pack with an exclusive hat. They open chests and shortcut gear, but every piece also has a coin price: money buys time, never a wall.

Every purchase runs through RevenueCat, with offerings managed in the dashboard, so we can change packs and prices without shipping a new build.

Challenges we ran into

Optimization. A survivor-like is hundreds of enemies, spells and particles at once, on a phone. We rebuilt rendering around instancing and pooled data so 800 enemies cost no extra draw calls, loaded character models only when needed (the engine compiled every model at startup, even hidden ones), and added quality tiers that scale effects down on weaker devices.

3D modeling. Making 3D characters read like the hand-painted world was the hardest part. Our characters are unlit, so every shape and shadow has to be painted or sculpted in. We rigged and animated them in Blender.

One world, two technologies. The menus are native and the game is WebGL, but the player should never feel the seam. We drew both in the same language: parchment buttons, etched gold frames, night blue everywhere, down to the death screen.

A game inside an app. The game runs in a web view but has to feel native: purchases, ads, haptics, audio and saves all cross a bridge between the two.

Accomplishments that we're proud of

A consistent painted look across every map and every menu, hundreds of enemies at a steady 120 fps, and a full game loop, shop and monetization built and shipped to the App Store within the hackathon.

What we learned

Measure everything. We built a perf mode and a difficulty simulator, and both changed the game more than any guess did.

What's next for Survivor Mage

A real story woven through the runs: who the wizard is, why the worlds are attacking him, what waits beyond the last boss. And more levels: new biomes with their own creatures and bosses.

Built With

Share this project:

Updates

Submission history