Starwick
- 8 Devlogs
- 30 Total hours
starwick's a procedural cosmic adventure i'm building
starwick's a procedural cosmic adventure i'm building
Big swing this stretch. The free-roam version was pretty but aimless, so I pivoted the core flow runner - you ride a procedural ribbon, charge and release to glide, and trace constellations as gates at speed. Kept the old explore mode intact; this is a second mode built from scratch alongside it.
The whole loop, as systems, end to end:
While wiring the meta screen, it proudly told me I’d restored 4,244 stars across 9 journeys. I had never played a full run. Turns out my tests were writing to the real save file - every test that relit a star bumped the actual player profile, and it had been quietly inflating for days.
Fix was a test-only backend: in headless test mode the save lives in memory and never touches the real file. Round-trips and version migration still work, the tests stay honest, and your real profile is yours again. I made it a hard rule for the new save system from the start.
The other nice unlock: at runner speed you blow past a point in a single frame, so checking “is the player on the node right now” drops inputs constantly. Testing the swept segment from last frame to this frame against the node sphere fixes it - you can be going full tilt and a clean pass still counts. Perfect-center passes score extra.
Honest version: it’s systems-complete and every piece is proven by an automated test - 40 of them, movement, track, gates, combo, a full run, save, Hearth - but it is not visually playable yet. There’s no Wick model, no gate glow, no run HUD, no Hearth view. I built the entire core behind tests and haven’t actually watched it move.
So the next pass is pure presentation: give the runner its body, light up the gates, show the HUD, and wire the mode select so you can press Play and ride it. The skeleton is real and verified; now it needs skin.
Spent this stretch on two things: making the realm look premium, and making it feel premium.
You now relight several star-sites in a row - a companion leads you to each, you trace its constellation, the ground warms, a new light calls you onward. Restore the whole sky, then make the choice. And there’s a roster of companions: the one you carry seeds the world - different terrain, layout, palette, color, even the music. Replay and you’re somewhere new with someone new.
No new art, just rendering: a filmic color grade with glowy bloom, a horizon haze with a richer nebula, crystals that went from flat cutouts to lit glass that catches light, and a focus-pull that softly blurs the world behind dialogue. Aiming at the Sky / Gris look, not photoreal - the right call for a game built entirely from code.
Everything reacts: a screen-punch and crystal pop on relight, buttons that pop in, a counter that punches when it ticks. Every tap, trace, and relight makes a synthesized sound, with matching haptics on a phone. None of the audio is recorded.
Reached for ACES tonemapping plus heavy contrast and vignette, and the whole scene crushed to near-black - nebula and terrain just gone. Swapped to a gentler tonemap, lifted exposure, dropped the bloom threshold so things glow instead of clip, and it came back better than before. Bonus near-miss: I wanted horizon fog but fog eats a star field - turns out the sky’s shader ignores scene fog, so the land hazes while the stars stay crisp. Accidentally perfect.
Looks and feels like a real game now Caveats: no title screen yet, and it doesn’t remember you between runs - a persistent sky and a collection screen are next.
Big one. Up to now the game was a sky in front of your face - pretty, but you were a floating eyeball. This update turns it into a place you stand in and walk across, where relighting a star physically changes the ground around you, and the music shifts depending on where you are.
The relight has a shockwave - a ring that expands out from the star. Except it kept rendering as a flat horizontal white bar. Looked like someone drew a highlighter line across the screen.
Took me a while to realize the torus mesh sits in one plane and I was aiming the wrong axis at the camera, so the ring was permanently edge-on. Point the ring’s actual face at the camera and it pops into a clean expanding circle. One line. I stared at a glowing strip for longer than I’ll admit.
My screenshot oracle kept saving pure black for one shot. Same code worked for the next shot in the same function. Turns out a freshly created camera doesn’t render to its texture on the first frame - it needs a beat to warm up, or an explicit render call. The second shot worked because the camera was already warm. Forced a synchronous render and the black frames went away.
The score is layered now - a drone underneath, a pad that swells as you get near a site, a motif while you trace, a tense layer during a choice, and a full bloom on relight. And the stars pulse in time with it - brighter when the music swells. None of it is recorded; it’s all synthesized in code, mixed live by how close you are and what you’re doing.
You can walk the realm, find a site, trace the constellation, watch it warm the world, and the score moves with you.
Quick one. The vertical slice is playable end to end now, and for the first time it actually feels like the thing I pitched myself instead of a pile of systems that happen to compile.
You’re a Wick - a small candle-soul whose job is to relight dying stars. The
slice is one star:
The choice screen looked done before it was done. Two buttons, tap one, ending plays. Fine. Except the constellation and the companion both live in the same world behind that screen, and they were still listening. So a tap meant to pick “send it onward” also poked the companion, and a stray drag re-traced stars that were already lit. The UI was a sheet of glass with holes in it.
The fix was boring and correct: one piece of state that says “something modal is up - dialogue, journal, or a choice.” Everything in the world that reads input
checks it first and shuts up while it’s true. Once that landed, taps stopped leaking and the choice felt like a choice instead of a coincidence.
The slice runs: trace, relight, choose, branch, two endings, restart - and the sky remembers the run. Everything’s checked by a headless pass that renders the scene and asserts on it, so I’m not eyeballing regressions every time.
What’s not there yet: it’s still a sky in front of you, not a place you walk through. Next is lifting the constellation into the actual world and building the
first realm you can move around in. That’s the jump from “pretty” to “somewhere.”
big stretch of work. the cosmos went from “pretty to look at” to a place that tells you something and actually feels alive. three threads landed: the story shows up on screen, everything became real crafted 3d, and i finally taught my tests to see motion.
relight a constellation now and it speaks. a line types out across the bottom - “a star has gone dark. you feel the absence before you see it.” - the stars flare, and a memory surfaces: the ferryman’s lantern, someone who lit the way for others and got forgotten the moment they weren’t needed. those memories collect in a journal you can open. it’s the first time starwick has felt like it’s about something, not just nice to drift through.
i ripped out the “glowing blobs of particles” look. the companion and the thing you carry are real 3d now - a glowing core wrapped in actual orbiting rings (generated the ring meshes in code). the lantern is an ember inside three tilted rings spinning at different speeds, like a little orrery of light. vesp got a proper body too and now spring-follows you with a bit of lag and overshoot instead of sliding around on rails - it reads as a thing with weight that’s choosing to keep up with you.
the relight used to be a flat on/off. now it’s staged: the star contracts, motes spiral inward, the core ignites, a shockwave ring blows outward, the companion reacts, and the camera breathes back. small thing, couple seconds, but it turns “i pressed the thing” into “something happened.”
a flyable procedural cosmos, a companion that follows and sings and reacts, the relight-a-constellation loop with a real cinematic beat, and a story that surfaces as you go .
third devlog. the cosmos isn’t just something to look at now - you can fly through it, trace a dead constellation to bring it back, and poke the companion to get a reaction. the core thing you do in the game finally exists.
dead constellations hang in the sky as dim blue stars. you drag across them in order, a line of light links each one, and when the shape closes it relights - the stars flare gold, sparks burst out, a star reborn (the game counts how many you’ve brought back). small moment, but it feels good, and it’s what everything else will hang off.
input’s online. you can fly around - move and look, keyboard at the desk, thumbstick + drag on a phone, same code. and vesp, the companion, now answers a tap: it pulses and its little tune swells for a second. went from “thing floating near you” to “thing that notices you.”
two real ones. first, none of my input worked and every test exploded with an exception - turns out the project’s on the new input system only, and i was calling the old input api, which just throws. rebuilt it on one input layer that handles mouse and touch the same.
second, my movement test kept insisting the camera didn’t move - except it was moving, just not far. i was counting frames, and headless each frame is a sliver of a second, so 60 of them barely budged it. measured by time instead of frame count and it was exactly right.
fly through a glowing procedural cosmos, trace constellations to relight them, a companion that follows, sings, and reacts. all generated in code - no art or audio files.
second devlog. last time starwick was an empty glowing void. now it’s got soft twinkling stars, a proper wispy nebula, and a companion floating next to you humming its own little tune. starting to feel less like a screensaver and more like a place.
the stars used to be blocky squares (default particle, no texture). swapped them for soft round points i generate in code - a radial gradient sprite - plus a twinkle layer that fades stars in and out so the field shimmers. bumped the bloom so the bright ones actually glow.
the nebula was the fight. first pass was a few clean soft blobs, looked like lens flares. so i made it noise-based - fractal perlin clouds with a soft falloff - and overshot the other way, came out dark and basically invisible lol. third try: dropped the noise threshold and roughly doubled the color and alpha, and now it’s vivid purple-and-blue wisps sweeping across the whole sky. took three goes to land that one.
the companion. a small violet mote that orbits near you, bobs around, and plays a soft synthesized motif - a little bell arpeggio - that layers over the ambient drone. no samples, the melody’s built from sine waves like everything else.
first attempt vesp came out as a giant white sun, lol. i’d picked a bright purple but cranked the hdr way too high, so between that and the bloom the core blew out to pure white and it hogged the whole frame like a second star. dialed the color back, shrank it, pushed it further out, and rebuilt it from a hard sphere into a cluster of soft glowing dots. now it reads like a little spirit drifting with you instead of a death star.
empty void -> twinkling stars + vivid nebula -> a companion that floats beside you and sings. all still procedural, no art or audio files anywhere.
next up is the actual game verb: tracing constellations to relight stars, and being able to reach out and interact with vesp.
first devlog. starwick’s a procedural cosmic adventure i’m building
right now it’s just the bootable cosmos. no art, no audio files, nothing downloaded, it’s all generated in code. 700 stars on a sphere around the camera, bloom and vignette, and an ambient drone synthesized at runtime (few detuned sines + a slow lfo).