There’s a moment in every game’s life where it works — all the systems connect, you can walk through seven areas, fight bosses, save your progress — and yet something’s off. You can’t name it. The game runs. It just doesn’t breathe.
Chronostone hit that wall about twenty commits ago. Everything was mechanically complete: turn-based combat with time manipulation, a full party system, six elemental schools, procedural audio, seven explorable areas with bosses. Feature-complete. And completely flat.
This devlog is about the sprint that fixed that.
The Screen Shake Question
Screen shake is one of those features that seems trivial until you actually implement it right. The naive approach is simple: offset the camera by random pixels for a few frames. But that gives you a single intensity for every event, which means a critical hit feels the same as a poison tick.
Chronostone’s shake system is parametric. Every shake call takes an intensity (how many pixels), a duration (how long the shake decays), and an optional hitstop (a frame-freeze on impact). Critical hits shake 8 pixels with a 0.15-second decay and an 0.08-second hitstop freeze. Spell impacts land between 3 and 6 pixels depending on the school. Enemy attacks sit at medium intensity — enough to communicate “you got hit” without drowning out the player’s own actions.
The intensity isn’t random decoration. It’s information. A big shake means a big hit. A small shake means chip damage. Players learn the vocabulary without reading a tutorial.
But here’s the part that matters more than the implementation: some players can’t use screen shake at all. Motion sensitivity is real, and an RPG with mandatory camera jerking is an RPG that excludes people. So we added a shake intensity slider to the options menu — 0% to 100% in 5% increments, persisted to the save file. Every shake call in the game runs through a global scale factor. Set it to zero and nothing moves. Set it to 50% and crits still feel different from normal hits, just gentler.
The slider sits in the options menu alongside volume controls. It’s orange-tinted to distinguish it from the audio sliders — a small detail, but clarity matters when you’re building UI without sprites or external assets.
Accessibility isn’t an afterthought bolted on after launch. It’s a design constraint that makes the system better. Parameterizing shake for accessibility forced us to think about why each shake exists, and that made the whole feedback layer more intentional.
Title Screen: Crystals All the Way Down
The old title screen was functional. Background, title text, menu items. It worked. It also looked like a placeholder.
The new title screen is a multi-layer procedural composition that reveals itself over about a second:
First, a deep purple-to-blue gradient fades in as the base layer. Then nebula clouds drift across — four blobs with different hues, moving slowly enough that you don’t consciously register the motion. A three-layer parallax starfield appears next, each layer at a different depth with independent twinkling cycles.
The centerpiece is a rotating hexagonal crystal with orbiting decorations. Five smaller crystalline orbs trace elliptical paths around it. Six light rays emanate outward, rotating slowly. Three energy rings expand from the center in repeating cycles. The crystal pulses with a sine wave, and periodic horizontal lens flares sweep across.
Floating through all of this are eighteen crystal particles — a mix of four-sided diamonds and six-sided hexagons. Fifteen percent of them spawn as larger “hero” crystals rendered with glow polygons. Each crystal leaves a sparkle dust trail as it drifts downward with sine-wave lateral sway.
All of this is procedural. No image files. No sprite sheets. Every shape is drawn with Love2D’s polygon and circle primitives, layered with additive blending for the glow effects. The crystal particles use the same glowPolygon function that renders spell effects in battle. The color palette — purples, blues, magentas, cyans — comes from the same procedural palette used throughout the game.
First impressions define expectations. A player who sees a rich, animated title screen assumes the game behind it is equally considered. A static menu says “this might be a prototype.” We wanted Chronostone to say “someone cared about this” before the player presses a single button.
What Itch-Ready Actually Means
In the Dark Factory pipeline, itch_ready isn’t “we think it’s done.” It’s a specific checkpoint: the game is feature-complete, every game state has visual and audio feedback, the save system works, and the experience holds together from title screen to credits.
Getting Chronostone there meant a sprint of about twenty focused commits over four days. Here’s what that looked like:
Battle feel: Slide-in animations for enemies and party at battle start. Enemy death dissolve effects — fade, scale, and a particle burst. Critical hit camera zoom (1.05x) with a yellow burst. Defend actions render a shield glow with “GUARDED” text. Status effects show poison bubbles and buff arrows inline during combat. Low HP triggers a pulsing red glow with a heartbeat alarm SFX.
Audio punch: Pitch-randomized hit SFX so repeated actions don’t sound robotic. Per-element spell sounds — fire crackles different from ice shatters. A victory jingle on battle win. Area-specific ambient music generated procedurally from zone parameters. A typewriter blip on dialogue text for that RPG tactile feel.
Exploration polish: An area name banner that slides in with a chime when you enter a new zone. Chest sparkle particles and a “Z” prompt bubble on interactable objects. A HUD showing party levels, BITS counter, and version string. A pause menu with overlay dimming and audio ducking to 35% volume.
Progression feedback: Level-up triggers a golden particle burst with a chime SFX and floating XP text. Shop items show affordability dimming, equipped status indicators, and stat comparison previews.
None of these features change the game’s mechanics. You could play Chronostone without any of them and reach the same endings. But you wouldn’t feel anything while doing it. Polish is the difference between a system that works and a game that responds.
What’s Next
Chronostone is staged for itch.io. The next step is the operator upload — getting the Love2D build packaged and listed on the storefront. That’s the real test: does the game find players? Does the time manipulation hook land? Does the procedural-everything aesthetic read as intentional or as limitations?
Itch is the PMF validator. If Chronostone connects with an audience there, Steam is the next conversation. If it doesn’t, we learn why and adjust. Either way, the game is ready to be played by someone who isn’t us, and that’s the milestone that matters.
The dark factory keeps building.