Undead Inc.
What is Undead Inc?
Undead Inc is a strategy, simulation, and builder game where you manage your own franchise. It’s entirely up to you how you want to approach it. Will you prioritize making money through dubious means, or will you opt for the legal route?
To run a successful franchise, you'll need to effectively manage your staff and minimize suspicion. Additionally, you'll have to consider the ethics of things and how far you are willing to go.
Responsibilities and Project Details
Time spent on project: 2023 August - 2024 April
As a Generalist, I have participated in and contributed to most systems within the game in one way or another. This has been a significant learning experience, as I've had to work with a lot of systems created by other team members.
Main Contributions
Custom input system tailored to the game's systems and requirements, replacing the old one.
Procedurally generated set dressing for the procedural maps in the game.
Surface set dressing tool for generating assets on specific surfaces.
Staff leveling system, along with trait and skill generation.
New command flow utilizing the updated input system.
New slot and priority system for the command wheel.
Algorithm to prioritize security staff and police navigation to rooms.
Working on developing a system for entitlement checks for DLC and integration with Steam and Epic Games.
String parsing and generation, with support for colored text and icons.
Various UI refactoring and improvements.
Custom Input System
Action Mapping Table
The Action Mapping Table contains all of the different actions bound to their respective functions, with optional parameters to control how an action plays out or when it occurs.
Options available for actions are:
Event Type determines whether a key was pressed, released, double-clicked, or similar.
Axis binding refers to whether an axis can be utilized, such as the left or right stick on a controller.
Inherit Binding can be utilized if you want to inherit from another Action Binding.
Input Chords can be set to determine which keys can be used to trigger the action.
Action Type determines whether you want the action to trigger on hold, repeat, not be held, or if it belongs to a specific type like a decorator type.
Hold Time Modifier determines the duration a key needs to be held to trigger if it's of the 'held' type.
Controller States can be configured in various controller modes to specify how an action can be triggered.
Usability Type determines whether it's for PC or Gamepad, for example.
Priority determines which action should take precedence if multiple actions are triggered simultaneously. Decorator Types are always triggered.
Input Action Filters
These can be utilized to filter which actions are available in specific controller modes. For instance, a separate filter can be applied in the UI compared to Gameplay.
What does the system allow for?
Here are two examples where the new input system has been crucial. The system enables similar actions or actions with the same keys to be triggered based on certain conditions, resulting in different outcomes.
In the left video, a flow is demonstrated where a command button is first pressed and then executed using a left mouse click. The left mouse click is typically used for selection, but in this state, it will cause a different outcome.
In the video to the right, the “Auto Command” button is utilized by using right mouse click instead because it’s in the default “Auto Command” state.
Other than what has been mentioned, the system has full support for both PC and Gamepad key rebinds at runtime. This was one of the main requirements for the system.
Input Handler
The input handler is the system that oversees everything at a higher level. It validates actions based on key presses, states, filters, and types. It also includes structures such as an Action Binding Container and an Input Binder.
Procedural Set Dressing Generation
System Goals
The aim of this system was to develop a tool and system that artists could utilize to give generated maps more life.
Basic Overview
The system is built upon a previous version, but we required a significant refactor to meet our needs.
To prevent assets from spawning inside each other, a grid system was employed. Parameters could be defined for individual assets to determine their spawning conditions, priority, occupied grid cells and more.
With the generation of set dressing.
Without the generation of set dressing.
Procedural Surface Set Dressing Generation
Why?
The system was created primarily to enhance set dressing on buildings. However, it also supports every tile surface on the map. This system was requested by one of our team members.
Features
A variety of assets with various spawn conditions and rates can be set to appear on specific surfaces. For instance, signs on buildings illustrate this well, as they are set to spawn exclusively at the highest points of buildings. Another condition might involve spawning only at ground level or at a door tile.
With set dressing surface actors active.
Without set dressing surface actors active.
Here's an example with the condition “can only spawn at highest point of building” active.
Leveling System
Features
Leveling up by scoring points earned from completing various tasks in specific states.
Generating stats and incrementing them based on level-ups.
Trait generation occurs at certain levels and has a chance to be granted upon spawn.
This image showcases generated staff available for hire. As depicted, they have been generated with different ranks determined by their stats. Additionally, the displayed staff have been granted a trait during generation.
This video depicts a staff member leveling up while performing their work tasks.
String Parsing And Generation
Summary
The primary features of this implementation are to parse various stats and requirement data into text for displaying such information to the player. This functionality is primarily utilized in popup text boxes and event options.
The implementation also supports icons and colored text.
The text parsing can be seen in the consequences section.
Aim Assist
About Feature
An Aim Assist feature was requested to improve character selection for players using controllers while playing the game.
To locate a character, a sphere cast is utilized. The closest character found is then targeted. If a character is found, the cursor/camera will be pulled towards the character. The aim assist will not activate if you are moving in the opposite direction of the target character or if in high-speed mode.