ovie.
workaboutwritingcontactresume
Ovie, a cartoon avatar of Matthew Ovie Enamuotor working on a laptop
  • Privacy
  • Terms
  • Cookies

© 2026 Matthew Ovie Enamuotor. All rights reserved.

All work

From Ashes.

From Ashes gameplay, still frame
Engagement
Solo build
Stack
Three.jsSupabaseAzure SpeechBlender MCPStripeWeb AudioViteJavaScript

You play Kayo, who escaped when a private army burned his village, and now works a scrapyard in Port Sable while searching for his lost sister. The game is built from scratch on three.js: a living town with a day and night cycle, weather, cars, animals and a fully voiced cast.

I designed it the way I design product: a core loop that teaches itself, progression that rewards curiosity, and the systems around it (accounts, cloud saves, a real shop, an admin dashboard) that make it something people can actually play and a team can actually run.

How it plays.

Core loop and economy

  • Copper coils are scattered across the yard, and some sit on piles and roofs only a climber can reach. Collect them, carry them, then sell to Mama Efe at her table for shillings.
  • Shillings fund everything: outfits, vehicle repairs at Tobi's workshop and a pocket that gets lighter if Kayo is knocked out.
  • A rival, Dayo, races Kayo for the most copper. Whoever delivers more gets paid first, and beating him earns a secret bonus. He can be fought too.
  • Side hustles feed the same economy: catch chickens by creeping up on them (sprinting scares them off), then roast, eat or sell them. Up to four birds show in Kayo's hands.

Missions and guidance

  • Every chapter is a list of steps that read live game state. The first unfinished step becomes the current objective, so the story reacts to what the player has actually done.
  • An objective card shows the chapter, the goal, a contextual hint and the distance to the target, and flashes when a new objective starts.
  • Guidance is layered: a minimap and full map, waypoints, route arrows painted on the ground and on-screen markers. Each can be switched off.
  • Prompts adapt to the input device. Keyboard players see key hints, touch players get a thumb stick and action buttons.
  • A mission-complete banner shows what was earned. Checkpoints save progress, and getting caught by a patrol sends you back to the last one.

Body and progression

  • Health and stamina bars with real consequences. Running, jumping and fighting drain stamina, and at zero Kayo is spent and breathing hard. Food heals, and a knockout costs shillings.
  • A local gym, the Iron Yard, has a cement barbell and iron dumbbells. Each session costs stamina and the muscles need rest before the next one. Strength levels 1 to 5 make punches and the machete hit harder.
  • Weapons are unlocked by the story, not bought: a machete for catching the thief, then a Dane gun in Chapter 3. A weapon wheel (Tab, the mouse wheel or 1 to 3) swaps between hands, machete and gun, and H holsters.
  • Aiming is a skill. Right click to aim over the shoulder, hold Shift to steady your breath, and the damage you deal is shown on every hit.

Challenge systems

  • Stealth at the Harbour Gate: guards patrol with torches whose light shows on the ground, crouching halves how far you are seen, and a stealth meter tracks suspicion. Running is loud and a caught counter tracks your mistakes.
  • Fist fights with punch, block and dodge. Crowds gather around a brawl.
  • Cars can be driven, hotwired or have their locks picked, and owners chase you down. A mechanic's workshop repairs dents and broken glass for a price.
  • Chases are tuned so they stay fair: the thief tires after a few seconds, so he is catchable but never easy.

A world that reacts

  • Townspeople have jobs, moods, rumours, routines and a three-step relationship meter with Kayo. Befriend someone and they start sharing rumours.
  • Each stranger speaks in the accent of where they are from (Nigerian, Kenyan, Tanzanian and South African), keeps one voice through a whole conversation, and is voiced from a generated cast of 24 voices.
  • Day and night run on a configurable clock from 10 to 80 minutes, with rain, thunder and wet skin. The radio, music and ambience change with the time.
  • Dogs, cats and goats are single sculpted bodies with a lighter version used at a distance, and lizards and birds share the yard.

Meta game and live ops

  • Accounts, saves and friends work offline in the browser or on Supabase, behind one shared API. Progress made as a guest moves to the account on first sign-in, and guests get a free-roam taste of the game with a prompt to sign up.
  • A shop sells outfits, vehicles and shilling packs. Real-money purchases go through Stripe checkout, and prices are looked up on the server by item id so they cannot be changed from the browser.
  • An admin dashboard shows who is playing right now, money coming in and bug reports sent from the pause menu, with separate dev and live databases and a demo mode.
  • A built-in story tab holds the chapter outline, the cast and the status of every system, so the writing and the game live in one place.

Engineering and accessibility

  • Performance is a feature: LODs for people and animals, a frame-rate cap, render-scale and shadow settings, an FPS and draw-call overlay, and a real loading bar. Asset work cut about 11 MB from the first load, for example a 6.7 MB character file shrank to 0.3 MB.
  • Models are built in Blender, driven by an AI assistant over MCP, and exported as compressed GLB files.
  • Accessibility is built in: ARIA meters for health and stamina, live regions for objectives and toasts, subtitles for all dialogue, keyboard and touch controls and a full controls reference in the pause menu.
Fist fights gameplay, still frame

Fist fights

A fist fight with an area boy: punches, blocks, damage numbers on every hit and a vignette when you are hurt.

Collecting copper in the scrapyard: shillings and copper counter, health and stamina bars, an objective card with distance, and a minimap.
Climbing a shipping container for a coil only a climber can reach.
On the roof with a coil in hand, ready to carry it back to Mama Efe's table to sell.
Talking to Mama Efe. Every townsperson has a portrait, a job, a mood and a relationship meter, and finishing a step fires a mission banner.
Another townsperson, with their own job, history and replies.
A chicken caught by creeping up on it, held in Kayo's arms.
Roasting the chicken on a spit over the fire barrel, as a short cutscene.
Then Kayo sits down and eats it, in a close-up scene.

Next project

Footy Teams