Hostile Volume – A game about adjusting volume with intentionally bad UI
Velocifyer
83 points
56 comments
March 14, 2026
Related Discussions
Found 5 related stories in 43.7ms across 3,471 title embeddings via pgvector HNSW
- The worst volume control UI in the world andsoitis · 11 pts · March 18, 2026 · 63% similar
- Show HN: My open-world voxel game with a magic system, playable in the browser kouhxp · 13 pts · March 31, 2026 · 44% similar
- A retro terminal music player inspired by Winamp mkagenius · 73 pts · March 23, 2026 · 43% similar
- Show HN: Fio: 3D World editor/game engine – inspired by Radiant and Hammer vicioussquid · 52 pts · March 26, 2026 · 41% similar
- Voxile: A ray-traced game made in its own engine and programming language spacemarine1 · 157 pts · March 03, 2026 · 41% similar
Discussion Highlights (20 comments)
Findecanor
I have encountered the rate-limited spinner (#8) and the self-resizing slider (#5) in real desktop UIs. #3 are almost like Google Maps' zooming buttons. They jump around more, making you click on the map itself or swap in/out.
jupin
Laughed out loud but gave up at level 5
Retr0id
There are two types of volume slider I've encountered thus far, "too logarithmic", and "not logarithmic enough".
dsmason321
Level 17 is NOT bugged. The slider is backward and the volume nonresponsive. Its a planned feature.
tobr
Meanwhile, iPhone is still using this design https://xkcd.com/1884/
jimkleiber
Got an error on Level 17, just a heads up. Love the game, btw.
TheLNL
Finished the game. It was fun to play. I got stuck for a while on the opposite level where the display doesn't update, but was able to go through the rest just fine
xnx
The worst volume control UI in the world (2017): https://news.ycombinator.com/item?id=27819384
graypegg
This is not an issue at all, but when ever I come across something like it, I like to poke at the frontend in dev tools a bit. You can pass most levels with `setVolume(25)` in the web console, since that function is just sitting in the document object. That feels like the ultimate volume UI puzzle heh.
DrSiemer
Plenty of annoyance in here for sure. Looks like 17 cannot be finished on mobile though. Switching to desktop view resets progress.
jonathanlydall
My favourite bad volume control was in Real Player around 1997 where changing the volume in the application actually changed the global volume of Windows.
danjl
...and, of course, there's really no need for a volume control in any app, since there's already a system volume...
Pipe94
somehow i'm amazed and annoyed at the same time
wild_pointer
Hilarious, some of them are easy with the keyboard
LoganDark
These mostly seem to be variations of "takes a long time / is tedious" rather than "annoying/fiddly / takes skill / is creatively bad", which is a little disappointing.
pimlottc
This works for almost all levels: for (i = 0; i < 50; i++) { document.querySelector("#l3-down").click(); }
burgerone
Prwtty neat. Unfortunately wasn't able to solve the UI desync one :/
mdx97
Level 27 is not possible.
apublicfrog
Great fun, well done to the horrible person who made it. Apparently my RSS reader leaves the browswr live in the background, as the audio is still playing. Horrible to do on a mobile device. Worst level by far was 17.
susam
I often write small userscripts to neutralise hostile or annoying UI patterns. I played the 'Hostile Volume' game for a while. Nice game! After a while, I wondered: if this were a real hostile website, could I write a userscript to make each level happy? Here is the script: // ==UserScript== // @name Hostile Volume Winner // @match https://hostilevolume.com/ // ==/UserScript== (function () { const s = document.createElement('script') s.textContent = ` (function () { function visible (id) { return !document.getElementById(id).classList.contains('hidden') } function win () { if (visible('victory-screen')) return if (visible('instructions-modal')) { document.getElementById('start-btn').click() setTimeout(win, 2000) return } setTimeout(function () { document.getElementById('l13-age-input').value = '01011970' window.cancelAnimationFrame(levels[currentLevelIndex].frame) }, 100) window.setVolume(25) setTimeout(win, 3500) } win() })() ` document.body.appendChild(s) })() If you don't have a userscript manager, you can just copy the script between the two backticks and paste it to the web browser's Developer Tools console.