












Overview
JaniTerror is a prototype of a first-person horror game built from a blank Unreal Engine 5.2 project - no framework, no starter content - as a collaborative group assignment at Staffordshire University (Collaborative Enterprise Foundation, Level 3 Foundation Year). The concept: you are a janitor. The building you are cleaning is not safe, as there is a horrifying being around you.
The team of nine - three artists, two 3D modellers, and four programmers - designed and built the entire game from scratch across the semester. No version control was used, and relied entirely on OneDrive to share project around. Many programmers were off throughout the development, and lack of progress were made, so me and my peer took in charge to sort a lot of stuff with the project.
The building is a large single-floor structure with distinct zones: a glass-walled corporate office wing, a cinema lounge, a photography studio, a sci-fi corridor with a flooded floor, a loading dock, basement mechanical rooms, a dark red-lit surveillance corridor, and a science lab. Each area has its own lighting mood and level-designed atmosphere, all produced under a cohesive industrial-horror art direction.
NomNom's Contributions
Within the nine-person team, contributions were divided across programming, art, and level design. My focus was primarily programming and level design:
CameraShakeBase class, triggered on pressure plate activation to give physical feedback when the player steps on a plate.Level Design
The building is divided into fourteen distinct rooms and zones, each with individual lighting mood and props. Art direction was inspired by a mix of industrial horror, corporate unease, and sci-fi corridors:
Technical Breakdown
Built entirely with Blueprint for rapid actor logic and gameplay systems. No C++ was used as at this stage, we have not learned about Unreal Engine C++. The team used OneDrive for "version control", which was critical given the nine-person contributor count and the risk of Blueprint asset conflicts.
The Windows Update in-world monitor material was driven by a Blueprint-managed media texture, rendering a live updating BSOD-style screen on a static mesh monitor prop in the world — the same technique used across the dev office and gaming PC room props.
The level blockout was produced using cyan collision volumes visible in UE5's editor - a standard BSP-first layout workflow used to validate room flow and scale before committing to final mesh placement.
Challenges & Lessons
The hardest part of JaniTerror was not the technical implementation - it was integration. With nine contributors each building Blueprint systems on their own branches, merging into a single working build repeatedly surfaced conflicts: interface mismatches, timing issues between event dispatchers, and component reference errors across actor classes.
The torch durability system had a specific bug that took disproportionate time: the UI widget would not correctly bind to the Blueprint property when the torch actor was possessed mid-level, because the widget was constructed before the actor reference was set. Understanding the UE5 construction script order — and when to use BeginPlay vs. Construct — resolved it.
The conveyor belt also had a non-obvious edge case: if the player jumped onto the belt at speed, the physics material velocity addition compounded with the character's own velocity. A velocity clamping check was added to the Tick function to prevent unintended acceleration.
Majority of the programmers were inactive, absent, and did not work on the project. So, it led to the analysis of the project's scope, eventually cutting down the scope.