Maintenance Crew

This project is a project I started a couple months ago as a sort of proof of concept which, after getting a particular system functioning, I decided to pursue as my main project. My current short term goal for the project is to have a playable prototype by the end of the year with a long term goal of being able to exhibit a demo at a convention next year.

This game is primarily inspired by Lethal Company, with smaller inspirations coming from Content Warning, GTFO, Iron Lung, and the SCP community. I’ve always been a really big fan of games that make use of a proximity voice chat system, and this project stemmed from my desire to make one of my own. In general the gameplay takes on a similar loop to that of Lethal Company, with the gameplay being broken up into relatively short sections of exploring, doing activities, and evading hostiles, and sections of safety where the players can purchase new equipment to assist them.

Above is a flow chart I created upon deciding to take this project seriously describing the general gameplay loop, including the menu and the general steps the procedural generation system would take in order to create levels. I created this flow chart a couple of weeks after deciding to start this project fresh with a new project file. The reasoning for this is I was working in an old project file that I had created for a different game I had abandoned. Due to this, not only was the name of the project file no longer representative of the project, but it had a lot of bloat in the files and temporary, hacky code meant to just make things work. Since I was making a new project file from scratch, I decided it would be best to get the gameplay loop written down visually so it could guide me through the design process. This flow chart has since been made obsolete after deciding to redesign how objectives and consequently the floor generator as a whole would function, but this still serves to explain the general gameplay loop.

This video is a demonstration of the level generator in my old project file. The generator itself is extremely simple, almost completely randomly placing rooms on any open door it can find. It only knows about doors so you can see every so often a room will flash into existence before immediately disappearing, as it spawned colliding with another room. This version of the generator did have a couple improvements I made to it in order to make it slightly smarter than completely random. Firstly, I created a system for giving rooms weights. In the data table of rooms, you could assign a float value no smaller than 0.1. This would then be multiplied by 10 and truncated to be used to indicate how many instances of that room’s class reference should be in the array that the generator would randomly pull from to pick what room to spawn. The other improvement I created was tile sets. As you can see, some of the rooms in the generation are a purple color. These rooms are of a different tile set than the white rooms. The way this functioned is each tile set would have a data table indicating the rooms and weights for that set. These data tables would then be referred to in a larger tile set data table which also included a tag name, for example “Tileset1”. Finally, each door on a room would be tagged with 1 or more of those tags to indicate what types of tile sets would be allowed to spawn off of that door. While this did function decently, It ended up being wildly inconsistent and tended to create small patches of the purple tile set on the fringes of a level. In the newest version of the generator, you can see I have a planned system in the flow chart I’ve dubbed “sections” which essentially breaks the generation down into smaller chunks, each having a particular tile set chosen for it.

One of the main reasons I wanted to make a new project file is, like I said before, a lot of the code I had written was really hacky as I was still trying to figure out how this system would work, and a lot of different pieces were overly intertwined with each other, to the point where the player characters couldn’t exist outside of this particular level without breaking. A new project file has allowed me to rectify that and build everything with the game in mind instead of just trying to get this system to function. The gallery below will contain some pictures and videos from the new project file and will be added to when I have new pictures and videos to show off. For more active information on this project, be sure to read my blog posts which have been about this game for the most part lately.

This video shows off the levels changing from an outside perspective, as well as showing off the new floor generator, currently just generating a bunch of placeholder rooms.

You may also note the debug information in the top left of the viewport, which I’ve set up to be toggleable in the future with a single variable.

The elevator seen from the outside. This resides inside the building from the last picture. This elevator acts as the players’ safe haven during the game and it is where they will return to at the end of each round, if they wish to survive.

The new point of interest system for spawning elements in the floor such as objectives, items, enemies, and otherwise. The blue arrows are spawn points for objectives. The orange arrows are spawn points for everything else.

A door, spawned at a connection between 2 rooms. The door can only be opened or closed by interacting with particular parts of it. Additionally, when hovering those parts, the player sees a context widget to indicate both that they can interact with something and what will happen when they do.

This video is acting both as a showcase of some fun cosmetic work I’ve done with the elevator, adding sound effects, lights, and camera shake, as well as an example of level instances functioning. Technically speaking, the elevator is the only real part of this level. The area outside the elevator is a level instance of a level called “Surface”. Once the doors close, that level instance is unloaded and the “Floor” level instance is created, which contains a generator.

This clip was taken before the implementation of the floor generator.

This is the lobby level I’ve created for the game, at least as a placeholder for now. This level is what players see upon either creating or joining a lobby.

The elevator, from the inside.

An objective, spawned in the appropriate space in the room in accordance with the image above.

Next
Next

Capstone