Critical Gaming Hubfree games · night shift

A Critical Gaming Hub game · public alpha 0.1.0

Closed Casket

You're the night shift at Black Lane Funeral & Collection. Carry the client down the stairs, strap them in, and get the hearse across a rainy neon city before sunrise. 2–4 friends, one casket, no dignity. The Office, in a hearse.

lift · strap · drive · lie · mop

▶ Play in browser Download for PC On your phone Public rooms

3D open world coming soon.You'll be able to pick 2D or 3D.
Alpha trailer, 58 s, all real gameplay with game sound. Captions on. 1080p MP4 (21 MB) · 720p (18 MB) · CC0, use it however you like.
Trailer transcript

[Rain, an engine idling.] DISPATCH (over the radio): Okay. New hires. Welcome to Black Lane Funeral and Collection. Night shift. The job's simple. Carry the client downstairs, strap him in, drive him across town. Before sunrise. If he sits up at a red light... push him back down. Don't make it weird. Lose Grandma on the stairs? That's coming out of your check. Oh, don't look in the bag. Nobody looks in the bag. Two to four of you per hearse. Bring friends. Honestly, that's the scary part. Browser, PC, phone, doesn't matter. Public or private room, share the code. It's free. No ads. No tracking. Can't afford to watch you anyway. Word is a 3D open world's coming soon. You'll pick, 2D or 3D. Same pay. Clock out before dawn. Closed Casket. Play free in your browser. [A coffin lid slams.] End card: 3D open world coming soon. You'll be able to pick 2D or 3D.

The dispatcher is an open-source computer voice (Kokoro-82M) with a radio effect. See AI use.

Before you clock in

CLOSED CASKET is a dark comedy about a night-shift funeral crew. It's about death, with cartoon corpses, the odd client who won't stay lying down, and crude humour. No gore. Made for 13 and up. If death is a hard subject for you right now, it's okay to skip this one.

There's rain, neon and headlights, but no strobing. Settings has Reduce motion and a Photosensitive mode (no blinking, no shake). More in Content & safety.

One night

How a shift goes

The crew

Each crew member gets a role, and the host can rotate them:

  • Driver: gas, brake, lanes. Mind the red lights.
  • Loader: straps the casket and holds on in the back.
  • Handler: sits on the lid. Pushes the client back down.
  • Fixer: takes the phone calls and picks the lie.

Clients come as Standard, Talker and Waker. Solo? Dale, the AI coworker, covers the roles you don't. There's a 60-second First Shift tutorial and a same-screen mode for two people on one keyboard.

Controls

Keyboard: WASD move, E action, Space steady, T quick lines, G walkie ping, Esc pause. Player 2 on the same keyboard uses the arrows and Enter.

Gamepad: left stick, A action, triggers for gas and brake.

Touch: joystick on the left, one big action button that changes its label (LIFT, STRAP, SIT DOWN!, MOP...). Landscape only.

Every key can be remapped in Settings. Subtitles, caption size, colour-blind-safe markers and volume sliders are in there too.

Same rooms

Cross-play

Everybody ends up in the same rooms, whatever they're playing on. A room is a 6-character code. Share the code or the invite link (/play/#CODE) and your friends are in.

Browser

Chrome, Edge, Firefox or Safari on a computer. Nothing to install. Keyboard or gamepad. Mac players: this is your version for now.

Play now

PC app

Windows and Linux builds of the same game, for people who want a window of its own. Same rooms as the browser.

Downloads

Phone & tablet

Open /play/ in Safari or Chrome and turn the phone sideways. To keep it like an app: iPhone: Share › Add to Home Screen. Android: menu › Install app / Add to Home Screen. There's an Android APK too.

Phone install guide

Everyone in a room has to be on the same version (it's on the title screen). If someone's behind, the game says "Update your game!": refresh the page, or grab the new PC build.

Public rooms right now

Live from the room server. It only shows a random room name, the head count and the district. Private rooms never show up here.

Checking the room server...

    Start a room

    Downloads

    Same game, same rooms, in its own window (PC) or as an app file (Android). Free, no installer tricks, no auto-updater, no telemetry.

    BuildSizeChecksumLink
    Windows .zip (101 MB), Linux .zip (91 MB), Linux AppImage (95 MB). Links load with JavaScript.

    The desktop files are too big for this website's host, so they'll live on a separate file host. The links appear here as soon as they're up. Until then, the browser version is the exact same game.

    • No Mac build yet. Mac players: play in the browser, it's the same game and the same rooms.
    • The builds aren't code-signed, so Windows SmartScreen will say "unrecognized app". Click More info › Run anyway, or check the SHA-256 first if you like.
    • Linux AppImage: chmod +x it, then run it.
    • Phones and tablets: no download needed. Add it to your home screen in a few taps. Android players can also sideload the APK (step-by-step guide, with checksum).
    CHANGELOG.md

    What's new

    Coming next

    • 3D open world coming soon. You'll be able to pick 2D or 3D. A 3D open world of small towns and villages, still free, still cross-play. (No date yet; we'll ship it when it's ready.)
    • Also planned: host migration (so a room survives the host leaving), signed desktop builds, and a macOS build.

    ALPHA 0.1.0 (protocol 1), 2026-10-04: first public alpha

    Multiplayer (new)
    • Online co-op for 2–4 players on Cloudflare Workers + Durable Objects (PartyServer). One Durable Object per 6-character room code.
    • Host-authoritative simulation. The server relays traffic, so players never see each other's IPs.
    • Handshake checks both the protocol and the exact game version. Mismatched clients get "Update your game!" (close code 4001).
    • Join by typing the code, opening the invite link /play#CODE, or one click in the public room browser.
    • Rooms can be Private or Public. The public list shows only the random room name, X/4, contract/district and whether you can join. It's kept by a Lobby DO with heartbeats and drops rooms that are empty, full, locked or stale (more than 40 s).
    • Roles (Driver, Loader, Handler, Fixer) are split across the crew. The host can rotate them, lock the room, toggle public/private and kick players.
    • Diegetic comms: walkie ping plus a wheel of 10 preset quick lines (rate-limited). No text chat; optional voice is the crew radio below.
    • Report a room: sends only the room code and a fixed category. Stored per day, capped, pruned after 14 days, and readable only with an admin token.
    • Server: token-bucket rate limits, message size caps, input sanitizing. The room closes when the host leaves (no host migration yet).
    • Mixed-platform crews: browser, phone and Electron desktop all play together.
    Dispatcher voice-over (new)
    • 150 spoken dispatcher lines from the in-game VO pack: tutorial, per-job / per-run / per-client intros, situational

    chatter, reactions to every big caption, Fixer outcomes, and a night 1–7 story arc with an 8+ loop.

    • Hooked to sim cues (new vo events, named captions, keyed tutorial steps). Each pick is matched by trigger, night, job and client.
    • One line at a time with a priority queue, stale lines dropped, no repeats within 60 s. The duplicate DISPATCH text line is

    replaced by the voice's subtitle.

    • New settings: Dispatcher voice volume (0 = off) and Dispatcher subtitles (on by default). Music ducks under the voice.
    • Lazy loading: nothing loads until the first shift starts, then each line (about 10–25 KB) loads when it's needed. Ogg Opus,

    with an AAC fallback for browsers that can't decode Opus. Works from file:// in the desktop app.

    • 4 lines that failed speech-recognition QA are held back (tools/build-vo.py).
    • Honesty update: the dispatcher is an open-source computer voice (Kokoro-82M TTS, Apache-2.0) with a radio effect. The

    README AI use statement, credits screen, settings text and THIRD_PARTY_NOTICES now say so. The old "no AI voice" wording is gone.

    • Test: tests/vo.js (desktop Chromium real-speed solo night, settings, iPhone WebKit, packaged desktop app).
    Crew radio: opt-in voice chat (new)
    • WebRTC audio only, relay-only (iceTransportPolicy: "relay") through TURN, so players never see each other's IPs. Non-relay candidates are dropped by the client and stripped again by the Worker (SDP candidates, c= lines, ICE server list). No STUN.
    • Nothing is recorded or stored. The Worker only forwards signalling (size-capped, rate-limited, only between players who have the radio on). The relay config has logs off.
    • OFF by default. Opt in from Settings > Crew radio or the lobby. A one-time notice covers 13+, not moderated, not recorded and IP hidden. The mic permission is requested only after opting in, and the mic is released when the radio goes off.
    • Push-to-talk by default (V / ' / touch TALK button, remappable). Open mic is optional.
    • Per-player mute and volume, mute all, and a crew-radio volume slider. Available in the lobby crew list and a new pause-menu panel.
    • Speaking indicator: a walkie icon above the character while carrying, next to the label while driving.
    • Walkie filter on incoming voices: band-pass, light drive, carrier hiss while talking, squelch chirps.
    • Host toggle in the lobby. Private rooms allow voice; public rooms default to voice disabled, and switching a room to public turns voice off. The server refuses vjoin while voice is off.
    • New report category "Something said on crew radio". Kick closes that player's links.
    • Relay is set by environment at deploy: Cloudflare Realtime TURN (TURN_KEY_ID + TURN_KEY_API_TOKEN) or coturn (TURN_URLS + TURN_SECRET). Until then voice shows "not set up". Example config: server/turn/turnserver.conf.example.
    • Electron: the permission handler allows media for audio only, and only for the game's own page.
    • PRIVACY.md, the in-game privacy text (Settings > Data, Crew radio tab, online screen) and the README were updated.
    • Test: tests/voice.js. Up to 4 clients with fake mics (desktop Chromium host, Pixel 7, desktop guest, packaged Electron, plus iPhone 13 WebKit). It checks relay/relay selected pairs, forged host/srflx candidates being dropped, PTT/open mic, mute/volume/mute all, host off/on, kick and the public-room default.
    Modes (new)
    • Same-screen 2 player (two keyboard zones, gamepads).
    • Solo with Dale, an AI coworker who covers the roles you don't.
    • First Shift tutorial: about 60 seconds, learn by doing, with one scripted funny fail (the stairs) and the sit-up gag at the first red light.
    The night (expanded)
    • The prototype had 3 separate contracts. A night is now 3–5 linked contracts across Old Town and the Docks, about 15–25 minutes for humans.
    • Cash, heat and reputation (City Hall, Chapel, Docks) carry over between contracts.
    • Prep shop with 7 items. Two of them (Lid Clamp, Route Card) are earned unlocks.
    • Cosmetic unlocks (hats, uniforms, hearse paints) come from playing, never from buying. There are no streaks, dailies or timers.
    • Progress, unlocks and settings save to localStorage only.
    • Shift report: a stamped paper card with awards and crew notes. It can be saved as PNG (stays on your device).
    • Sunrise budget per contract. Getting to sunrise ends the night with a report.
    Physics comedy (expanded)
    • Shared carry with handles on each end. The dignity meter replaces the old flat score.
    • Sliding loads, stair bumps, drops with a ragdoll and lid pop, a "tuck them back in" action, puddles you can slip on, and a mop.
    • Straps, a sliding load in the hearse, ejection out the back door, wrong turns ("WRONG FUNERAL"), and Fixer phone calls where you pick a lie.
    • Waker escort: push them back down, or they climb out and you chase them.
    • Big captions, slow-mo, short screen shake (all optional), and a spectate label while you're ragdolled.
    Title screen
    • Handmade "3D OPEN WORLD COMING SOON" sticker: "You'll be able to pick 2D or 3D." No date, no countdown.
    Mobile and PWA (new)
    • Touch controls: joystick (move, lane, junction), GAS/BRAKE for the driver, and a big contextual action button that relabels itself (LIFT / STRAP / LOAD / TUCK / MOP / SIT DOWN! / LID / CALM). Also STEADY, PING, and SAY (radial emote wheel).
    • Landscape layout with a "Rotate your phone" card in portrait.
    • Pinch zoom and double-tap zoom are blocked. All tap targets are at least 44 px.
    • Device pixel ratio capped at 1.25x and rain/ripples thinned on phones (Settings > Quality).
    • Installable PWA: a manifest (fullscreen, landscape, 192/512/maskable icons) and a static-files-only, network-first service worker.
    • Version and protocol are stamped on the title screen and kept small in-game.
    Settings and accessibility (new)
    • Esc pauses.
    • Master/music/SFX volume.
    • Remappable keys for both local players.
    • Gamepad support and fullscreen.
    • Subtitles and caption size.
    • Reduce motion and photosensitive mode (no blinking, no shake).
    • Colorblind-safe UI: player colors also get shapes, and lights also show words.
    • Touch mode and quality options.
    • "Reset all data".
    • A content note on first launch. A credits & licenses screen.
    • Feedback button on the menu, the shift report and the quit confirm. In Electron it opens the system browser.
    Art and audio (redone)
    • Hand-drawn look made entirely in canvas code: wobbly lines, paper memo UI, tape and stamps.
    • Neon-wet city with sodium lamps, rain, puddles with ripples, Old Town walk-ups and the Docks gangway and cranes.
    • Self-hosted OFL fonts (IM Fell English SC, Courier Prime, Bungee). No font CDN.
    • Animation pass: every player is drawn and animated at all times.
      • Each crew member has a callsign label, a shape marker, and their own colour as a scarf/band on top of their unlocked uniform and hat.
      • Clock-in at the hub: the night opens in the Black Lane garage. The crew file in one by one, punch the time clock (KA-CHUNK), and head for the hearse.
      • Carry: walk cycles with head bob; idle breathing and an occasional stretch; a stumble (buckled knees, flailing arms) when the box wobbles; a flinch when it's dropped; a wave when you send a ping or quick line. Crew who aren't on an end take the far corners, drawn behind the casket with their hands under it.
      • Drive: the hearse is bigger, with a cab and bay cutaway, and all 2–4 players ride in or on it, seated by role:
        • Driver: front seat, hands on a wheel that turns with lane changes.
        • Handler: sits on the lid. Pushes down when the client stirs, and pushes the client back down when they sit up.
        • Loader: kneels in the back holding a ceiling grab-strap, tugging it on bumps and while re-strapping.
        • Fixer: leans out the passenger window, waving at the street, with a phone out during calls.
        • Dale fills a free seat in solo.
        • Everyone braces forward on hard braking, flails on lane changes and bumps, and waves on their own emotes. Labels are staggered so they don't overlap.
      • Client: sits up and waves at pedestrians, flails when you brake, shoves the lid up with one hand while stirring, and rides as a strapped-in, visibly unhappy passenger during an escort. Arms flail out of a launched casket. On an escape, a "FREEDOM" figure runs off down the pavement.
      • Hearse: suspension bounce, nose-dive on the brakes and squat on the gas, a rear door that flaps open when the load is loose, spinning wheels, speed-scaled rooster-tail rain spray, and a headlight beam that sweeps with steering and pitch.
      • Shift report: a small live panel shows the whole crew celebrating (jumping, confetti) or slumped on the kerb under a tiny personal rain cloud.
      • Between jobs (night board, drop-off) the crew waits by the hearse, breathing, stretching and waving on emotes. Callsign labels stagger when players bunch up.
      • Readability: the drive hint moved to the right (mid-screen on touch, clear of GAS/BRAKE) and the progress strip moved right of the hearse, so neither covers the crew. A sodium rim light keeps a black hearse visible on wet asphalt.
      • Reduce-motion tones all of this down (no bounce, no spray, smaller stumbles).
    • Sound pass (all procedural WebAudio, original, no samples):
      • Buses for music, SFX, ambience and voice into a compressor and master. iOS unlock on first touch. Audio suspends when the tab is hidden.
      • Layered rain (muffled indoors and in the cab) and a city bed. Distant cars, drips, sirens, a dog and thunder.
      • Engine hum with rpm, gears and throttle, rising with speed. Tyre hiss on the wet road, brake squeal and squeaks, the casket sliding in the bay, and thuds when it hits either end.
      • Per-player footsteps: wood on stairs and gangways, floorboards indoors, wet splashes outside.
      • Door creaks and the lid pop. The client's sit-up gasp, groan and waves are stylized vocal blips, never a real voice.
      • Radio squelch with formant "mumble" blips, timed to each subtitle (dispatch, crew, callers, a muffled client).
      • An original late-night lo-fi/lounge loop (FM keys, walking bass, brushes, vibes, vinyl dust). It plays as the hearse's dash radio while driving and sounds muffled from the kerb.
      • Paper-tick UI clicks, fail stings under the big captions, and a sad trombone on a total fail (celebration hit on a good night).
      • Every animation has a paired sound:
        • time-clock punch and footsteps at the clock-in;
        • a "whoa" on stumbles;
        • a cloth squeak on the idle stretch;
        • a whistle on emote waves;
        • door bangs while the rear door flaps;
        • an indicator tick on lane changes;
        • brake plus brace;
        • client "hiii" waves;
        • escape footsteps running away;
        • celebrate or trombone on the report.
    • No samples and no AI images or video. All sound is synthesized. (Later: the dispatcher voice-over uses an open-source TTS voice; see above.)
    Privacy and licensing (new)
    • Zero personal data: no accounts, no free-text names (random callsigns), no chat, no analytics, no cookies.
    • Worker logs, invocation logs and Logpush are off.
    • Optional anonymous counters stub, off by default.
    • Code is 0BSD, content is CC0. Added TRADEMARKS.md, THIRD_PARTY_NOTICES.md and PRIVACY.md.
    Desktop (new wrapper, same approach as the old one)
    • Electron 33. It loads the same client from disk, and the server URL comes from config or CC_SERVER_URL.
    • Sandboxed with context isolation. Permission prompts are denied and external links open in the system browser.
    • Linux zip and AppImage, plus a Windows zip built from win-unpacked (no Wine).
    Tests (new)
    • Headless sim night runner.
    • Browser tests for solo and same-screen full nights.
    • Online cross-play test against wrangler dev:
      • desktop Chromium host, iPhone 13 on WebKit, Pixel 7 on Chromium, and the packaged Electron app;
      • covers create, public listing, one-click join, invite link, platform/role sync, a full contract, touch UI, tap sizes, kick, report, room full, version mismatch, and the portrait prompt.
    • Playwright footage recorders: silent (record-footage.js) and with sound (record-sound.js). The with-sound recorder captures the game's own master bus through a MediaStreamDestination and a MediaRecorder, then muxes it into H.264 + AAC with ffmpeg.
    • anim-check.js: screenshots of the clock-in, carry, 2-crew and 4-crew drive, the sit-up and the report crew. Fails on page errors.
    • perf-mobile.js: a Pixel 7 profile with the CPU throttled 4x through CDP. Reports frame times per phase.

    The whole changelog as a text file

    Played a shift?

    Tell us what made you laugh and what made you want to throw your keyboard. Anonymous, two minutes. Leave a note · Take the alpha survey · Read the wall