Inspiration
What if a friend's voice became the least trustworthy sound in the room?
We wanted to make a Halloween horror game set in the past about broken trust rather than just jumpscares. The setting came from the contrast between a warm student pub and the vast, silent library above it: one place for laughter and friendship, the other for rules, isolation, and things that should not be able to speak.
That became Last Orders: a fictional college pub where the drinks are still on the table, the attendant is a little too helpful, and something in the library is learning how your friends sound.
What it does
Last Orders is a 1–3 player Roblox horror game. Players wake beneath The Crooked Quill with no memory of how they arrived. Allison, the pub's attendant, explains that each player must recover their named Borrower's Ledger from the library before they can leave.
The library has other plans. A disguised Skinwalker approaches using a teammate's recorded voice before revealing its true form, while the blind Listener hunts footsteps, thrown bottles, and panicked heartbeats. Players can crouch, hide, throw distractions, and follow the green reading lamps toward safety.
Heart rate is part of the mechanic: a live reading above 80 BPM can make a player audible to the Listener, but panic also slows and disorients it. Fear makes you easier to find without making the game unfair.
Recovering the final ledger triggers Allison's transformation and a pursuit back toward the pub. The person who taught you to survive was never trying to help you escape.
How we built it
We built the game in Roblox Studio using Luau, with Rojo synchronising our source code and a server-owned round controller coordinating the roster, cinematic, objectives, monsters, and escape. Our reproducible builders generate the pub, multi-level library, hiding places, vents, and navigation markers.
We created custom student and Allison character assets in Blender, then developed procedural animation clips where third-party animation assets would not load. Camera choreography, subtitles, voiced dialogue, and character movement combine in a shared opening cinematic.
We used the Gemini API to draft deceptive monster dialogue—reassurances, directions, and callouts that become unsettling when repeated out of context. Selected scripts and Allison's dialogue became consented, pre-generated ElevenLabs recordings, uploaded through Roblox Open Cloud. Monsters replay sampled phrases; claimed-voice lines unlock after death. Neither service generates dialogue live during play, and subtitles cover missing audio.
Presage could not simply be embedded in Roblox: its desktop SDK and webcam access had to live outside the game. We built a per-player SmartSpectra/Presage → Node.js → FastAPI → Roblox bridge. The server turns readings into heartbeat audio, monster hearing, and bounded difficulty adjustments, with labelled simulated and manual fallbacks.
Challenges we ran into
Getting ElevenLabs audio playing live was harder than generating it. Clips needed Open Cloud uploads, approval, publisher permissions, and exact subtitle matching. Revising a line meant a new asset and ID. Preloading and waiting for playback kept camera cuts from cropping dialogue.
Animation and asset permissions. When third-party clips were rejected, we built runtime keyframe sequences for Allison and played them locally.
Turning fear into fair gameplay. A faster heartbeat needed to matter without punishing someone for being scared. Our answer was a trade-off: panic can reveal your position, but it also weakens the Listener's pursuit.
Multiplayer state. Shared cinematics, locked rosters, ledgers, deaths, late joins, disconnects, and resets had to agree across players and monsters. Spawn, tool, and transition race conditions broke solo-tested assumptions, making server-owned state and idempotent pickups, voice claims, and resets essential.
Accomplishments that we're proud of
We created a distinctive pub-and-library world, custom characters, a shared cinematic opening, named objectives, hiding and distraction systems, two contrasting hunting behaviours, and a final pursuit within the hackathon.
We also verified live Presage heart-rate input reaching a Roblox playtest, and built a repeatable ElevenLabs-to-Roblox voice pipeline with consent, provenance, permissions, and subtitle fallbacks.
Most of all, we made voice more than presentation. A familiar voice can be reassurance, evidence, bait—or the last thing you hear before a friend stops being themselves.
What we learned
The strongest horror mechanic was not the monster itself; it was giving players a rule they could no longer trust. Hearing a teammate is normally reassuring, so turning that sound into uncertainty changed how every dark corridor felt.
We also learned that ambitious atmosphere needs conservative engineering. Server authority, explicit round states, bounded AI behaviour, and graceful audio and sensor fallbacks kept individual failures from becoming game-ending ones. Finally, biometric and voice features require honesty by design: consent, clear live-versus-simulated labels, and no pretence that prerecorded speech is being generated in real time.
What's next for Last Orders
Next, we want to complete Allison's voiced reveal, expand the consented teammate voice banks, polish the remaining character animations, and run broader real multiplayer playtests. We would also like to refine monster balance and accessibility, add more reactive voice lines, and develop the pub ending into an even stronger payoff.
Beyond the demo, Last Orders could grow into a larger anthology of institutional nightmares—different places, different rules, and the same unsettling question: do you trust the person, or the voice?
Log in or sign up for Devpost to join the conversation.