Fallowmere
A solo survival-horror prototype in a quarantined town — a stalker that hunts by sound, a live microphone that works against you, and a keypad-then-voice puzzle chain to escape.
- Type
- University Assignment
- Module
- GDEV40010
- Level
- Level 4
- Engine
- Unity 6
- Language
- C#
- Year
- Apr – May 2025
- Team
- Solo
- Brief
- Env. Storytelling
- Voice AI
- Vosk (Offline)
- Enemy AI
- Stalker NavMesh
- Input
- Hot-swap multi-device
What is Game Prototype 2?
Game Prototype 2 — Fallowmere — is a solo survival-horror prototype built for GDEV40010 Game Prototyping at Staffordshire University (Level 4, 2024/25). The brief had a single narrative constraint: tell the entire story through the environment. No cutscenes, no explicit text — the world is the narrator.
The visual world is entirely abstract — orange and amber geometry, dark brown buildings, dramatic dark red-orange cloudy skybox, and no textures. Atmosphere is created entirely through form, lighting, and sound.
// Fallowmere — outdoor quarantine zone at dusk
Fallowmere is a quarantined small town under the iron grip of Vitae Industries, a biotech corporation. A mysterious cult — The Order of Genesis — operates in the shadows. The player is infected, holed up in an abandoned building, and must escape without losing their mind — a literal mechanic, not just a metaphor. A relentless stalker AI hunts them by sound, the microphone becomes a weapon against the player, and the only way out is through a keypad puzzle and a voice-based final challenge: say "I am not infected" to unlock the exit.
Prototype in Motion
Development progress was recorded as unlisted YouTube videos throughout the sprint period. The main gameplay video was submitted to the GDEV40010 Digital Academy Forum alongside a deep development diary forum post.
Watch on YouTube
Gameplay — Fallowmere (Submission) · NomNom · May 2025 · Unlisted
Watch on YouTube
Development Recording — Early Build · NomNom · Apr 2025 · Unlisted
Fallowmere
Fallowmere is a small town placed under quarantine by Vitae Industries — a biotech corporation whose motivations are never fully stated. Evidence of their presence is written into the environment: barriers, decontamination markings, the hum of authority without any visible agents. The town feels abandoned but not empty.
Beneath the corporate veneer, The Order of Genesis — a cult — has been operating within Fallowmere. Their relationship to the infection, to Vitae Industries, and to the player's own condition is left deliberately ambiguous, communicated only through the two collectable notes and the geometry of the world itself.
// Fallowmere — quarantined town exterior
The player is infected. They wake in an abandoned building with no explanation. Survival requires navigating the environment without triggering the stalker, solving the puzzles embedded in the space, and — in the final moment — asserting their identity aloud. The voice puzzle is the only moment of character voice in the entire prototype.
The visual language is deliberately abstract. All geometry in the world is untextured — orange-amber sandy ground, dark brown building masses, and a dramatic dark red-orange clouded skybox. No realistic props, no detailed surfaces. The horror lives in shape and shadow.
The Stalker
The stalker is the prototype's central threat — an entity that cannot be killed, only evaded. It navigates Fallowmere via Unity's NavMesh and
maintains four internal states: Idle, Patrol, Investigate, and Chase. The base
logic lives in the abstract EnemyBase.cs; StalkerEnemy.cs extends it with Fallowmere-specific behaviour.
// Stalker — enemy detection triggered
The Field of View renderer uses a procedural mesh — 110° angle, 10m radius, 50 segments — visualising exactly what the enemy can see. Three eye-state icons on the top-centre HUD communicate the stalker's current awareness to the player in real time without breaking immersion.
EnemyBase.cs
Abstract · State MachineNavigation Unity NavMesh agent
Hearing Sound events from mic or thrown objects
Threat Cannot be killed — only evaded
FieldOfViewRenderer.cs
Procedural Mesh · VisionRadius 10m detection range
Mesh 50 segments, runtime-generated
Purpose Visual debug + in-world tension
EnemyAwarenessUI.cs
HUD · Sprites · InspiredStates Out of Bounds / Searching / Detected
Icons Custom sprites per state
Position Top centre HUD
Keypad → Voice → Exit
The prototype's core loop ends in a two-part chained puzzle. Solving the keypad unlocks the voice trigger; the voice trigger unlocks the exit door. Neither step can be skipped.
// Keypad puzzle — code entry UI
4-digit code entered on the in-world keypad. Time freezes while the keypad UI is open. Controller and keyboard both supported via
KeypadTrigger.cs.
- "i am not infected"
- "i'm not infected"
- "i am uninfected"
- "open"
Vosk runs offline — no API call, no latency spike. Audio is captured at 16000Hz on a background thread via MicrophoneHandler.cs, fed
to Vosk's recogniser, and the JSON result is matched using Levenshtein distance in VoicePuzzleTrigger.cs. The fuzzy matching accounts
for natural speech variation and ambient noise distortion.
Vosk — Offline Speech-to-Text
Integrating Vosk into Unity 6 required threading audio capture on a background thread so it doesn't block the main loop, feeding raw PCM at 16000Hz into the recogniser, and parsing the JSON result for phrase matching. The entire pipeline runs with no internet connection — no API key, no cloud dependency, no latency spike from a round-trip call.
MicrophoneHandler.cs
Input · Audio · ThreadingRMS level Drives mic meter UI in real time
Alert radius 40m — mic input above threshold alerts stalker
Thread Background audio capture thread
VoicePuzzleTrigger.cs
Puzzle · Vosk · Fuzzy MatchMatching Levenshtein fuzzy distance
Phrases 4 accepted variants
On match Unlocks exit door
In-World Interface
Every HUD element serves gameplay directly. Nothing decorative — each piece of the interface communicates a survival-critical signal.
// Sanity meter — annotated HUD breakdown
Sanity / Health Bar
Top LeftEnemy Awareness Icon
Top CentreEnemyAwarenessUI.cs. Inspired by The Evil Within's awareness indicator. States: Out of
Bounds (eye/slash), Searching (eye/arrow), Detected (crosshair).Microphone Meter
Bottom LeftInteraction Prompts
World-AnchoredPlayerInteraction.cs SphereCast. Icons
auto-switch: keyboard E, Xbox X, DualSense Triangle.Full Technical Architecture
49 C# scripts were written across the five-sprint development period. The architecture covers every gameplay layer: AI, audio, UI, save/load, input, camera, and post-processing.
AudioManager.cs
Audio · Cross-fade · BGMTransition Cross-fade based on enemy proximity and state
Effect Music becomes the tension meter
NotePickup + NoteData
Lore · ScriptableObjectData Title, content, image, sound per note
UI Typewriter animation on text reveal
Inventory Manager stores collected notes
SaveManager + SavePoint
Persistence · JSONTrigger World-anchored "Press to Save" interact
Hotkey F5 opens save menu
UI SaveLoadUI.cs handles menu display
ObjectInteractionSystem
Physics · DistractionThrow Thrown objects alert enemies within 40m
Strategy Core distraction mechanic vs the stalker
PlayerInteraction.cs
Interaction · SphereCastPrompts World-anchored UI per interactable
Input icons KB E / Xbox X / DualSense Triangle
CameraBobbing.cs
Camera · FeelReturn Smooth ease-back when stopped
Feel Adds weight to player movement
GamepadUIRumbleInjector
Input · HapticsNo manual setup per button required
Controllers Xbox + DualSense supported
GameManager.cs
State · Game OverShows GameOverUI on death
Freezes Time scale on game over
DebugLogger.cs
Dev Tool · LoggingTags Context labels for each log type
Purpose Clean console during rapid iteration
- MicrophoneHandler.cs
- VoicePuzzleTrigger.cs
- KeypadTrigger.cs
- EnemyBase.cs
- StalkerEnemy.cs
- FieldOfViewRenderer.cs
- EnemyAwarenessUI.cs
- AudioManager.cs
- NotePickup.cs
- NoteData.cs
- SaveManager.cs
- SavePoint.cs
- SaveLoadUI.cs
- ObjectInteractionSystem.cs
- PlayerInteraction.cs
- CameraBobbing.cs
- GamepadUIRumbleInjector.cs
- GameManager.cs
- DebugLogger.cs
- BGMSlider.cs
- SFXSlider.cs
- MainMenuCanvas.cs
Five Sprints
Development ran from 02/04/2025 to 06/05/2025 across five Agile sprints. Sprint 1 was the most chaotic — 28 tasks, the full foundation of every major system. Sprints 2–4 were each cut short by three days. Sprint 5 was the polish and final-feature sprint.
-
Sprint 1 · 02 Apr – 09 Apr 2025
Foundation Sprint — 28 Tasks
The most chaotic sprint. Established the full base: Vosk offline ASR integration (native libraries, background threading, JSON parsing), player movement (RE2 Tofu movement attempt — funky, but kept), Cinemachine camera, environmental interaction system, floating world-anchored button prompt, initial stalker enemy with NavMesh, inventory and note viewer, DualSense lightbar feedback, and AudioManager with cross-fade BGM. -
Sprint 2 · ~10 Apr – 15 Apr 2025 · Cut short
Save System & Camera Polish
JSON slot-based save and load system, world-anchored save point interactions, camera bobbing, general bug fixing from Sprint 1 backlog.
// Outdoor gameplay — sprint 2
-
Sprint 3 · 16 Apr – 22 Apr 2025 · Cut short
Pickable Objects & UI Polish
Pickable and throwable object system — picked up objects can be thrown to distract the stalker within 40m. Raycast fix for interaction detection, general UI polish pass.
// Indoor dark area — sprint 3
-
Sprint 4 · 23 Apr – 29 Apr 2025 · Cut short
Enemy Awareness UI, Keypad, Level Complete
Enemy Awareness UI system built (inspired by The Evil Within). Keypad puzzle implemented — code 9179, time freeze, controller + keyboard support. Speech recognition tuning with Levenshtein fuzzy matching added. Level blockout completed. Puzzle chain wired: keypad solve → voice trigger activates.
// Examine interaction — sprint 4
-
Sprint 5 · 30 Apr – 06 May 2025
Sanity System, Mic Meter, Lore, Final Polish
Sanity system built (Phasmophobia-inspired — green bar draining as dread builds). Microphone volume meter UI added to HUD. Lore notes written and placed in world ("Vitae Industries Newspaper", "Scrambled Note"). Pause menu with mic device switching in options. Post-processing effects added (not assessed). Final build polish.
What Was Cut & What Was Learned
Environmental storytelling is harder than it looks. Removing all textual narrative forces every prop placement, lighting angle, and audio cue to carry communicative weight. Fallowmere's quarantine premise gives a clear visual language — but executing it convincingly in five weeks required sharp prioritisation.
Vosk in Unity 6 is non-trivial. Native libraries, background threading, PCM capture, JSON parsing, and Levenshtein fuzzy matching — none of it is out-of-the-box. The payoff is an interaction type that a button press cannot replicate. Worth every hour.

















