The last build on this page was v0.4.6. Seven versions have happened since — so this one catches you up in a single pass, then gets into what this post is actually about: v0.4.13 changes how a mission is put together, and you will notice it in the first room.
What you missed, in one pass
v0.4.7— ash and Death’s shop. The hunter now carries a blessing: dying on a mission sends you back to the hub instead of ending the game. Death — the character, who thinks you’re a fraud and helps anyway — runs a shop in a pocket room on generated maps (about half the time), and trades in ash: a per-run currency you collect physically from enemies by holding X for about 1.5 s (in view of the camera, standing on the ground). 15 ash buys a one-off reliquary roll — one of three random relics, active immediately, gone when you die.v0.4.8— a cleanup pass. No gameplay change on purpose.v0.4.9— feel tuning and seven playtest fixes. You walk 30% faster, enemies 50% faster. Archers’ arrows stopped vanishing in mid-air. You can dash diagonally upward (↑ + direction — one per airtime, refreshed by the ground, a wall-slide or a wall-jump) and stomp diagonally down, and the stomp is a lot faster. The main menu and hub got their own music. On the fix side: ash now survives leaving to the menu and coming back, there is an autosave every 45 seconds mid-mission (a crash used to lose everything since the last room), Death’s shop is a pocket you can re-enter with an offer that stays the same for the whole map, pockets are scattered across the map instead of all hanging off one junction, and the shop always sits in a dead end. Enemies standing in your room no longer fall asleep when they lose track of you.v0.4.10— the aiming bar. A charged attack (hold attack) is now a lunging slash with i-frames, and while you charge a small vertical bar appears beside you: ↑ / ↓ tilt the lunge up to ±45°. Shooting got the same idea — hold the shoot button past ~0.15 s and the bar opens (up to ±80°), the shot leaves when you release; a quick tap fires straight like before. New placeholder sounds for ash, buying, the chapel and the stomp landing. The console (~) got an event log withlogs,loglevelandmark, andreportnow says exactly which build it came from, so bug reports carry more.v0.4.11— another cleanup pass. Also no gameplay change; it did fix an intermittent failure in one of the AI tests.v0.4.12— Legion, round two. The first boss was beaten on the first playtest — but too easily, mostly by standing back and shooting. So: a shove you can block (an audible wind-up, no damage, pure knockback, on a cooldown, whenever you’re too close), reactive distancing (with a clear line of fire he now ducks behind his own brood, or walks to the arena’s edge when it’s empty), and a pincer with one shield — in the last phase the first piece of the split lands on the wall line between him and you.
v0.4.13 — the actual point of this post
Three things in one release, because they share one piece of data.
Enemies aren’t on fixed spots any more
Until now every arena had a handful of fixed markers and the enemies stood on them, so the same room always greeted you the same way. Now each room has spawn zones — stretches of floor and platform — and the game draws the exact spot from the map’s seed. A few rules keep it honest: nobody starts closer than ~120 px to a door you can actually come in through, enemies keep 36 px between each other, archers prefer a ledge, shield-bearers stay on the ground. About half of all enemies now stand on platforms, where before it was none.
On top of that, every room gets a threat level — empty, patrol, normal, heavy — including corridors:
- Corridors have patrols now: roughly every other one holds one or two enemies. The rest are empty.
- Arenas vary. A heavy room (5–7 enemies) only shows up later in a mission, and the room after one is always lighter. The room before the boss (with the chapel) is never heavy. The entrance is always empty.
- The total stays the same. A mission still contains roughly as many enemies as before (about 57 / 70 / 82 per map on the three difficulties), just spread differently — arenas are a bit lighter (2–4 enemies), and the corridors between them aren’t safe any more.
Rooms: same shape, different look — and bigger
A room is now a shape (its doors and size) plus a variant (what’s inside). The generator lays out shapes first and then picks a look for each — six different decorations fit every standard room, so two rooms with identical doors can have different platforms. The crossroads keeps its own look.
Rooms also aren’t limited to one screen any more: there are now wide rooms (two shafts / two floor gaps), tall rooms (two floors) and a big 2×2 room, each with doors on every floor. And the boss can now be entered from the left-hand door of the previous room, which the old generator couldn’t lay out.
A map that tells you more
The minimap and the overview (hold Tab) now show:
- passages as gaps in a room’s outline, so you can see which walls are actually open;
- pocket doors as small icons — coin = shop, cross = chapel, diamond = reliquary, star = reward, X = challenge, chevrons = shortcut. A secret stays invisible until you’ve walked into it; spent pockets dim (the shop doesn’t — you can come back);
- a ring with seconds on a timed door, a shield on the boss door, an orange dot in any room that still has something standing in it;
- a legend at the bottom of the overview, listing only what this run has shown you so far.
WARNING: A mission-in-progress save from an older version is dropped — Continue takes you to the hub (your tattoos and souls are untouched; hub saves work normally). And the same seed now gives a different map than in older versions, so any seed you noted down is not the same map any more.
Controls
Same layout as before, with the additions from v0.4.9 and v0.4.10 marked.
| Action | Keyboard | Pad (Xbox) |
|---|---|---|
| Move | ← / → | left stick / d-pad |
| Jump (double) | Space / Enter | A |
| Wall-slide / wall-jump | hold toward the wall in the air to slide · jump to kick off | same |
| Melee (3-hit combo) | A — tap | RB |
Charged attack — lunging slash, ↑/↓ tilt it (v0.4.10) | A — hold ≥ ~0.5 s | RB — hold |
| Third-hit variant | hold ↓ heavy · nothing = fast · ↑ = air launcher | same |
| Stomp | ↓ + attack in the air · direction + ↓ + attack = diagonal (v0.4.9) | same |
| Block / parry | D — hold / tap just before the hit | LT |
| Riposte | automatic — hit within 0.4 s of a parry, same enemy | same |
| Dodge (dash, i-frames) | Shift · ↑ + direction = diagonal, one per airtime (v0.4.9) | LB |
Shoot (8-way) — hold to open the aiming bar, ↑/↓ aim, release to fire (v0.4.10) | S | RT |
| Reload | R (auto on empty) | Y |
| Interact / throw-out | E | X |
| Collect ash (hold ~1.5 s) | X | click the right stick (R3) |
| Look up / down | ↑ / ↓ held (standing still) | same |
| Full map + overview (held) | Tab | Select |
| Pause / menu | Esc | Start |
| Ledge grab | automatic; climb = jump / ↑, drop = ↓ | same |
| Debug console | ~ (backtick) | — |
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. In a run, Esc opens the pause menu — quit or return to hub from there. Continue on the main menu resumes your last save.
The Linux build was smoke-tested on a Linux machine; I haven’t been able to run the Windows and macOS builds myself, so if one doesn’t start, that is worth a bug report.
Still pre-alpha — what’s not here
- Placeholder art. The player has a stand-in sprite pack; enemies, terrain and UI are coloured rectangles.
- Placeholder sound. Rough stand-ins, a few music tracks on loop.
- The challenge pocket still uses fixed enemy positions — it’s the only room that hasn’t moved to the new system.
- Balance is untuned — damage, enemy HP, prices, and the new room threat levels are all first guesses.
- No death screen, no attempt counter, no meta-progression beyond tattoos and the first soul from Legion.
How to report feedback
The fastest path is the debug console: press ~, type report, and it drops a log + version/scene/seed/HP file straight into your file manager — drag that into a comment or a message. Include the seed (the report has it) and where on the map it happened.
BUG — what happened, where, how to reproduce, which platform. “I can’t get through this room” — which room (wide? tall?) and which door.
FEEL — the part I actually want to hear about:
- Are the enemy positions fair? Can you see them before they can hit you? Does the same arena feel like a new decision each time?
- Patrols in corridors — tension or chore? Are there too few empty rooms, or too many?
- Lighter arenas — is a heavy room now an event? Is a normal one too easy?
- The minimap — does it help or give too much away? Is the legend useful?
- Bigger rooms — interesting places, or generator bugs? Do you get lost coming back through a room whose look is random?
- Legion — does he still fall to standing back and shooting?
Leave feedback in the comments under the game or this post.
Thanks for playing something that’s still mostly rectangles.
— SolarNine · v0.4.13-pre-alpha