Longer gap than usual — five tagged builds since v0.2.0, rolled into one release here. The headline: missions are generated now. v0.2.0 had one hand-built test corridor; v0.2.9 builds a fresh mission from a seed every time you leave the hub. Everything else this cycle is the scaffolding around that — a language toggle, a real options menu, a pause menu, and the first sound. Still placeholder art, still the same question: does it play well.
Missions are generated (v0.2.5 + v0.2.6)
Leaving the hub through the portal no longer loads a fixed level. MapGenerator builds a room graph from a seed — the Dead Cells model: entry → a few combat / traversal zones → a choice room → one more zone → the boss. The choice room forks into optional branches — an in-mission reliquary, a shortcut, a challenge room, sometimes a reward behind a 90-second timed door — and there’s a ~35% chance of a hidden room hanging off the main path.
The rooms themselves are hand-built (16 for the Nadodrze district so far). The generator picks and arranges them by type, depth and which doors line up — it doesn’t draw geometry. Same seed = same layout, every time.
The main spine is seamless: instead of a fade between every room, three rooms are stitched into one continuous scene with a sliding window, so the camera just flows from one to the next as you walk. Branches, the secret room and the boss arena still fade in. One generated mission is roughly a 10–20 minute session. (--map-debug-level on the command line still loads the old hand-built level if you want to compare.)
English and Polish (v0.2.7)
The game has a language toggle now. English is the default; Polish is the other option. First launch shows a one-time prompt; after that it lives in Options → Language and switches live. Every string in the game runs through translation keys (four CSV files — UI, relics, tattoos, dialogue). The English text is a first pass and will get a prose edit; more languages later are just another column.
A real options menu, and a pause menu (v0.2.8)
“Options” used to be a stub. Now it has:
- Fullscreen toggle
- Resolution (1152×648 up to 1920×1080, windowed)
- Volume — three sliders, see below
Camera framing is now fixed across resolutions: the picture scales as a whole, the camera always shows the same slice of the world, so changing resolution doesn’t change how much you see. Odd monitor aspect ratios letterbox.
Changes are staged — left/right edits a pending value (marked with a *), and a built-in Apply row commits them all at once. Leaving without Apply discards.
Esc during a run now opens a pause menu: Resume / Settings / Quit to main menu (with a confirm on quit). Same settings panel as Options, one level down. On a pad: Start opens and closes it, B backs out a level, A selects. Music keeps playing while paused.
Sound (v0.2.9)
The big one for this build. There were no sound effects at all before — now there are 30 placeholder clips wired across combat (katana swings, hits, parries, guard breaks, the throw-out), the revolver (shots, dry-fire, reload), movement (jump, double jump, dash, ledge grab), taking damage, and the whole UI (cursor moves, selects, back, apply). They’re rough stand-ins from a sound pack — unbalanced, and going to be replaced — but the game isn’t silent anymore.
Audio is split into three buses — Master / Music / SFX — with a slider for each in the settings. Turn the music down and keep the hit sounds, or the other way round.
The two “Corrupted Hunt” music tracks also play on generated missions now (they used to only play on the old test level), shuffling, and surviving every room transition and the pause menu.
Also fixed
The exported build had no floor on generated missions — you’d leave the hub and drop straight through the world. It worked fine in the editor, which made it a good one to chase down: in an export Godot renames resource files, and the room loader’s directory scan stopped matching any of them, so the room pool came back empty and the generator had nothing to build with. Fixed.
Controls
| Action | Keyboard | Pad (Xbox) |
|---|---|---|
| Move | ← / → | left stick / d-pad |
| Jump (double) | Space / Enter | A |
| Melee (3-hit combo) | A — tap | RB |
| Charged attack | A — hold ≥ ~0.5 s | RB — hold |
| Third-hit variant | hold ↓ heavy · nothing = fast · ↑ = air launcher | same |
| Block / parry | D — hold / tap just before the hit | LT |
| Dodge (dash, i-frames) | Shift | LB |
| Shoot (8-way) | S | RT |
| Reload | R (auto on empty) | Y |
| Interact / throw-out | E | X |
| Pause / menu | Esc | Start |
| Dialogue & menus: move / confirm / back | ↑↓ / Enter / Esc | d-pad / A / B |
| Overview (relic + tattoos, read-only) | Tab — hold | Select — hold |
| Ledge grab | automatic; climb = jump / ↑, drop = ↓ | same |
How to run it
| System | File | Notes |
|---|---|---|
| Windows | ultraviolet.exe (+ ultraviolet.pck beside it) | SmartScreen may warn about an unsigned file — “More info” → “Run anyway”. |
| Linux | ultraviolet.x86_64 (+ .pck beside it) | chmod +x, then ./ultraviolet.x86_64. |
| macOS | Ultraviolet.app | Unsigned: right-click → Open → confirm, or xattr -dr com.apple.quarantine Ultraviolet.app. |
Quitting: Esc in the main menu closes the game (careful). In a run, Esc opens the pause menu — quit to the main menu from there.
Still pre-alpha — what’s not here
- Placeholder art. The player has a stand-in sprite pack; enemies, terrain and UI are still colored rectangles.
- Placeholder sound. The SFX are rough stand-ins, not final and not level-balanced; two music tracks on loop.
- The boss is a stub. The room at the end of a mission spawns a “Legion” placeholder — a blocker with extra HP — that locks the exit until it’s down. The real fight isn’t built.
- Balance is untuned — damage, enemy HP, costs, the per-room enemy-count ramp: all temporary.
- No death screen, no attempt counter, no meta-progression beyond tattoos (which still swap for free, with no boss souls to earn new ones).
- Death or a fall into the void = back to the hub, new seed, run reset.
How to report feedback
BUG — what happened, where (menu / hub / which room), how to reproduce, which platform, and a screenshot or clip if you can.
FEEL — it works, but how does it play? This build especially:
- procedural missions — is the pacing right? do the rooms flow, or does it feel like a shuffled deck? run too long / too short?
- seamless transitions — does the camera flow read well, or is the lack of a beat between rooms disorienting?
- the difficulty ramp across a mission — too flat, too steep?
- the choice room and its branches — worth the detour? is it clear what you’re picking?
- the new menus — Options and pause: readable? the staged “Apply” model — obvious, or annoying?
- sound levels — anything far too loud or too quiet next to the rest? (they’re placeholders, but gross imbalances are worth knowing)
- the older feel questions still stand: the jump, the ledge grab, the cold revolver at the start of a fight, dash-as-dodge, 3–4 enemies at once.
Leave feedback in the comments under the game or this post. Testers with the full guide have a checklist there — even a partial run helps.
Thanks for playing something that’s still mostly rectangles.
— SolarNine · v0.2.9-pre-alpha