The project was born from the game jam theme, "The end is near...". Instead of a typical apocalypse, I wanted to explore a more personal and terrifying end: the complete dissolution of one's identity. Inspired by the philosophical concept of Memento Mori ("remember you must die") and the looping, psychological corridors of games like P.T. and The Stanley Parable, I chose to represent this internal decay as a physical journey through a failing mind. The goal was to make the gameplay mechanic a direct metaphor for the story. Memento Mori — The Final Log puts you in the shoes of Dr. Elias Vance, a brilliant scientist whose mind is collapsing due to a failed experiment. The game is a first-person psychological puzzle where players walk down a long, sterile corridor representing his last active neural pathways. At the end of the hall, a memory from his past materializes. The player must observe the scene and determine if it's a pure, normal memory or a corrupted anomaly. If the memory is normal, they must continue walking forward through it. If it's an anomaly, they must recognize the glitch and turn back. Making a wrong choice degrades the player's "sanity" (visualized by a closing vignette effect) and erodes their three lives. Surviving all six stages means finding a final moment of peace before the end. This experience was built entirely within Roblox Studio using Lua. The core of the game is driven by a few key systems: Modular Game Manager: A single, server-side script acts as the brain of the game. It manages player data (lives, stage progression), scene spawning, and the overall game state. Dynamic Scene Spawning: I created 12 distinct memory scenes (6 normal, 6 anomaly) as models in ServerStorage. The GameManager clones and positions these at pre-determined locations in the Workspace to create each stage. Proximity-Based Triggers: To create a fair and dynamic challenge, the choice triggers don't exist initially. A "watcher" script checks the player's distance to the scene. Only when the player gets within 20 studs do the final "forward" and "rear" trigger walls spawn, presenting the choice. Client-Server Communication: I use RemoteEvents to bridge the server and client. The server tells the client when to display narration (ShowNarration) and when to update the sanity vignette (UpdateSanity), ensuring the UI is responsive to server-side game logic. There are several significant technical challenges: Unfair Trigger Spawning: Our biggest hurdle was the trigger system. Initially, triggers spawned at the same time as the player, causing instant, unavoidable deaths. I iterated through multiple designs, from static triggers to flaId proximity checks, before landing on our final, robust "activation zone" system that spawns triggers only when the player intentionally approaches the scene. Client-Side Visuals Not Working: For a long time, the sanity vignette effect wouldn't appear. Through systematic debugging (using print statements on both the server and client), I traced the problem not to the RemoteEvent communication, but to a LocalScript that was crashing because I Ire trying to use incorrect Instance.new() calls for lighting effects. This forced a deep dive into the Roblox rendering pipeline. CFrame and Positioning Bugs: The forward trigger was initially spawning outside the tunnel. This was a classic local vs. world space problem. I solved it by calculating the trigger's position using world coordinates (forcing X=0 to stay in the tunnel's center) instead of relying on the scene model's local rotation. This project was a huge learning experience. The Importance of Robust Trigger Logic: A simple .Touched event is rarely enough. Building a state-based system (like our proximity watcher) that controls when triggers are active is crucial for fair gameplay. Systematic Debugging is Key: Don't just guess what's wrong. Adding print statements and warning messages at every step of a process is the fastest way to find the exact line where your logic is failing. Client-Server Boundary: Always be mindful of what script is running where. The "vignette" bug was a perfect lesson in how a simple client-side crash can make it seem like a server-side problem. While the core loop is complete, there's so much potential to deepen the experience. My next steps would be: Full Audio Design: Adding custom sounds for footsteps, ambient humming, unsettling glitch effects for anomalies, and a subtle, melancholic soundtrack would elevate the atmosphere tenfold. More Memories & Story: Expanding the pool of memories to tell more of Dr. Vance's story and building the final "win" and "lose" rooms to provide a more satisfying narrative conclusion. Visual Polish: Adding more environmental details, particle effects, and refining the lighting to make the world feel even more alive—and more unsettling when it breaks.

Built With

Share this project:

Updates