A devlog by Neeraj Kotwani, who builds every game on Elipar.
I keep a long engineering notebook for this site. Every game gets an entry: what it is, what broke, what the fix was, what to watch out for next time. It is the single most useful artefact in the project and it is why most of these devlogs can exist at all.
The entry for Lucky 6 said this:
"Web Audio oscillator beeps with a real button carrying a mute label, per the mute-button convention."
Lucky 6 had no mute button. It had no music either. It had a bare beep function on a raw audio context, no mute flag, and no way to silence it at all.
A written convention is not evidence
I found this during an audio audit across the catalogue, and only because the audit worked from the files rather than from my notes.
What had happened is mundane. The convention is real and well established — every original game here is supposed to have a proper mute control, and most do. When I wrote the entry I described the game as conforming to it, because that is what I intended and because it is what nearly every sibling game does. The description was of the standard, not of the file.
And once written, it reads exactly like a fact. Any future pass that trusted it would have skipped this game.
So the note now carries a correction in place, plus the rule it taught me: a convention written down is not evidence a game follows it. Grep the folder.
This is the second time documentation drift has cost me real work on this project. The contributing guide and both game-building skills spent weeks telling anyone adding a game to put its files in a folder that no longer served them, after a routing migration moved every game — thirteen stale references, in the documents whose entire job is to tell you where things go. A game built from those instructions would have 404'd and failed the build.
What the game needed
Three games in the catalogue turned out to have no music at all. Two of them, Lucky 6 included, had no mute control either, so they got the whole stack built from scratch.
One detail in that is worth passing on, because it is a trap rather than a preference. These games' existing effect helpers take a relative delay — play this sound in so many milliseconds. A music scheduler works in absolute clock times, because it queues notes ahead of the playhead.
Converting one to the other by subtracting the current time goes negative the instant the loop falls behind — a tab switch, a slow frame, a garbage-collection pause — and then every note is scheduled in the past and silently dropped. The music stops and nothing reports an error.
So each of those three games got a separate note function taking an absolute time. Do that rather than reusing the effects helper with arithmetic.
Lucky 6's loop is a slow walking bassline, deliberately. It is a thinking game where every placement is permanent, and an action bassline rushes the player into the one kind of mistake the game is built around.
How the audit actually checked
Worth saying what "has music" was measured by, since the whole point of this entry is that reading code is not the same as knowing what it does.
The audio context's oscillator constructor was monkeypatched to count calls. Then: load the game and confirm the count is zero before anybody has pressed anything, start a run and confirm it climbs, mute and confirm it stops at exactly zero further calls, unmute mid-run and confirm it resumes.
That last pair is the one that matters. A mute button that stops the music by setting a volume to zero while the scheduler keeps queueing notes looks identical from the outside and is not the same thing — it keeps doing work, and any later code path that reads the gain can un-mute it by accident.
One threshold in that sweep had to be fixed rather than the game it flagged. A deliberately sparse track scheduled six notes in the 2.6-second sample window and failed a "more than six" bar I had invented. The invariant worth asserting is that the count keeps climbing across two samples, not that it clears a number I picked.
The game itself: six numbers, no take-backs
Six random numbers are drawn one at a time. Six slots, multiplying by one through six, left to right. Each number must be locked into a slot before the next is drawn, and you never see what is coming.
Score is the sum of each number times its slot, plus a bonus if the final row ascends left to right, plus a smaller bonus per equal pair.
That shape is the whole game. The high-multiplier slots are obviously worth saving for a big number, so every early draw is a bet: commit a middling number to a good slot, or spend a cheap slot on it and risk the big numbers never arriving. With no preview and no undo there is no optimal play, only a reasonable one.
Verified with a scripted playthrough that scores exactly 1607, summed by hand as one plus forty-four plus two-sixteen plus three-ninety-six plus four-ten plus five-forty. Exact-value assertions are worth the effort on a scoring formula with five terms; "the score went up" would pass with any of them broken.
Lucky 6 is free in a browser, no account, no download. There is a mute button, and this time I checked.