UNLIT: A Horror Game Built Entirely Inside One Rive FileUNLIT: A Horror Game Built Entirely Inside One Rive File
The network for creativity
Join 1.25M professional creatives like you
Connect with clients, get discovered, and run your business 100% commission-free
Creatives on Contra have earned over $150M and we are just getting started
UNLIT: Everything You Light Looks Back
UNLIT is a tiny horror game that lives entirely inside one Rive file. It opens with a story told inside Rive: on the night of the storm a demon took the woman he loves, and her trail ends at the door of a house whose old master, the necromancer Corvin Ashgrave, never left. Every room hides a relic; together they can break the demon's hold. This room is the first chapter, and the house promises more.
You stand in a Victorian parlor with a dying torch. Eight relics are hidden in the dark, and so is something else. Eyes open in the doorway, the cracked mirror, the cold fireplace and the window. Stare them down until they look away, or they come for the screen.
No two games are the same: the relics are dealt to new hiding places each time, two of them are mimics that breathe and bite, a faceless walker crosses the room and steals a relic if you light it, writing on the walls only shows in the hot core of your beam, and when lightning strikes the window, the necromancer is sometimes standing outside. Hold to flare the torch and drive everything back, at the cost of battery. Sound on, headphones if you dare: doors slam on your left, footsteps pass behind you, and voices in the dark tell you, from one side or the other, that they can see you.
How it is built (Rive CLI + GPU Canvas, both):
• Rive CLI: the whole scene is RML written with Claude Code as my coding agent. Five artboards (the screen, the room, the overlay, the writings, the prologue), a Game view model, state machines for the screens, the five jump-scare lunges and the dying battery, and a data-bound HUD whose values ease in through converter chains.
• GPU Canvas: a Luau layout script draws the lit room and the writings into offscreen canvases every frame and hands them to a WGSL shader that decides what you are allowed to see: a warm torch cone, cold moonlight, fog that only shows inside the beam, UV-like ink, a flare bloom, a shadow rushing past, film grain, a heartbeat vignette and a possessed-screen glitch with chromatic tearing.
• The prologue, in Rive: six painted panels on one timeline (slow Ken Burns drift, lightning, looping rain, letterbox, captions, a handwritten inscription on the scroll), written as RML. The Luau script scrubs that timeline with setTime() and fires the narration, thunder and rain on the same clock, so picture and voice can never drift apart. One click skips it.
• Scripting: the same script directs the haunting (spawns, stare-downs, mimics, the walker, battery, both endings), places the relics, draws the eyes that track your torch, and plays the sound. Rive has no audio panning, so positional sound is baked into stereo files.
• Data Binding + State Machines: the script only writes view model values and fires triggers. The markup reacts on its own.
• A calm title screen: the rules wait behind a "how to play" panel, assist mode is one tap away, a pause menu (Esc or P) lets you restart or go back to the title, and the end screens close with a threat about the rooms still to come.
• Responsive by design: it adapts to any window and pixel density, and plays on a phone in landscape with the torch riding above your finger so it never hides what it lights.
• Accessible by design: fear is for everyone. An assist mode on the title screen gives a brighter, wider torch, a dimly visible room, high-contrast outlines around relics, a sonar-like ping that quickens as you near one, bigger eyes, and no strobing, shaking or red flashes for photosensitive players (the lightning in the prologue and at the window turns into a slow glow). The story is always captioned, and in assist mode so are the voices in the dark, with the side they come from. The one tell carried by colour (a mimic's red glint) is also a different shape and a breathing motion, so it reads without colour vision.
• Human touch (Rive Editor): the title hides a blood red that only your torch can reveal, the same way it uncovers the writing on the walls. I designed it by hand in the Editor: dark grey letters with a blood red hidden inside them that the light burns through, a soft halo, and a stuttering dying-bulb flicker keyed frame by frame.
Assets: room, creatures, relics and the prologue's panels generated with Higgsfield and art-directed into one gothic storybook palette; the English narration is Higgsfield text to speech. Creature screams come from Higgsfield video audio; ambience, heartbeat, whispers and positional effects are synthesized in code.
Features used: Rive CLI, GPU Canvas (WGSL), Scripting (Luau), Data Binding, State Machines.
Post image
Post image
Post image
Back to feed
The network for creativity
Join 1.25M professional creatives like you
Connect with clients, get discovered, and run your business 100% commission-free
Creatives on Contra have earned over $150M and we are just getting started