← Devlog
v0.4.6-pre-alpha

Ultraviolet v0.4.6-pre-alpha: catching up, and two movement bugs squashed

It’s been a while since the last post here. v0.3.7 was the last build pushed to itch; eight versions happened since and none of them shipped here — so this build catches you up on all of it, then gets into what actually prompted this post.

What you missed, in one pass

If you played back at v0.3.7, that’s the gap. Full detail on any of these is in the itch.io comments or the game’s changelog on the repo.


v0.4.6 — the actual point of this post

Two playtest reports, both about touching things that shouldn’t grab you.

Catching a ledge used to read as sliding down the wall

Reaching for a ledge at speed, holding toward it, would often just… slide. Not fall past it — stick to the wall and slowly slide down, never catching, even when you were clearly aimed right at the lip.

The cause: the wall-slide and the ledge-grab share a single frame of logic, and the wall-slide spins the character to visually face away from the wall it’s sliding down (so the sprite reads right). The ledge-grab was reusing that same “which way am I facing” value to decide which direction to check for a ledge — so the instant a slide started, the grab check was looking the wrong way, every single frame, for as long as contact lasted. It wasn’t a near-miss or a timing window; once a slide began, a grab in that same motion was never going to land. Now the grab checks the direction you’re actually pressing or moving, not the (possibly reversed) sprite facing — and the character’s facing is set explicitly the instant a grab lands, so the hang pose doesn’t inherit whatever the slide left behind.

You could bounce off enemies like a wall

The player, every enemy, and the level all share one physics layer — that’s deliberate, it’s what makes bodies block each other. But wall-slide and wall-jump were reading “touching anything solid” as “touching a wall”, with no check for what that something was. Stand next to an enemy and press into them mid-air, and you’d slide down their body and could kick off them like they were a wall. Wall-slide and wall-jump are a level-traversal tool, not a way to spring off a person.

Fixed by asking, specifically, whether the thing you’re pressed against is actually part of the level (the same check the ledge system already used to make sure a grabbable edge is level geometry, never a body) — an enemy standing next to a wall you’re sliding is unaffected, but an enemy standing alone no longer behaves like one.

Both came from two lines in a running to-do list, not from a bug hunt — the report was specific enough to go straight to the cause. Both have a regression test that’s confirmed to fail on the old code and pass on the fix, and both were confirmed fixed by hand in the editor before this build went out.


Controls

Unchanged in shape since v0.3.7, plus the moveset and stomp that landed in v0.3.9.

ActionKeyboardPad (Xbox)
Move← / →left stick / d-pad
Jump (double)Space / EnterA
Wall-slide / wall-jumphold toward the wall in the air to slide · jump to kick offsame
Melee (3-hit combo)A — tapRB
Charged attackA — hold ≥ ~0.5 sRB — hold
Third-hit varianthold ↓ heavy · nothing = fast · ↑ = air launchersame
Stomp↓ + attack in the airsame
Block / parryD — hold / tap just before the hitLT
Riposteautomatic — hit within 0.4 s of a parry, same enemysame
Dodge (dash, i-frames)ShiftLB
Shoot (8-way)SRT
ReloadR (auto on empty)Y
Interact / throw-outEX
Look up / down↑ / ↓ held (standing still)same
Full map + overview (held)TabSelect
Pause / menuEscStart
Ledge grabautomatic; climb = jump / ↑, drop = ↓same
Debug console~ (backtick)—

How to run it

SystemFileNotes
Windowsultraviolet.exe (+ ultraviolet.pck beside it)SmartScreen may warn about an unsigned file — “More info” → “Run anyway”.
Linuxultraviolet.x86_64 (+ .pck beside it)chmod +x, then ./ultraviolet.x86_64.
macOSUltraviolet.appUnsigned: 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.


Still pre-alpha — what’s not here


How to report feedback

The fastest path is now 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.

BUG — what happened, where, how to reproduce, which platform. A report dump covers most of this automatically.

FEEL

Leave feedback in the comments under the game or this post.

Thanks for playing something that’s still mostly rectangles.

— SolarNine · v0.4.6-pre-alpha