The goal of this game is to have players maximize productivity in a futuristic car-manufacturing plant. Players will create and gather parts such as wheels, engines, and bodies to assemble vehicles with certain specifications. The score for each level will be based on how many cars the player creates. Players will be tasked with creating different combinations of vehicles, and work stations for each vehicle part along with supplies to make the parts will be dispersed throughout the environment.
Players will need to train robots (NPCs) to perform tasks in order to meet the car quotas in a certain amount of time. Players will train the robots by creating or modeling a loop that involves walking to and interacting with a series of objects and work stations. The player must return to the starting point of the loop for it to be valid. Once the loop is set, the robot will continue moving parts and interacting with objects unless the player directs them otherwise.
The game world is set in a futuristic car manufacturing plant run by a descendent of Henry Ford. The environment will be a clean, futuristic take on what factories might look like in 100 years.
The basic user interface will consist of basic directional keys (arrow keys or WASD) to allow the player to navigate the environment; this navigation will be done on a tiled floor. There will also be a button designated for interacting with the environment (i.e. picking up, dropping, or crafting objects). If the player hits a key in a direction other than the one they are facing, they will rotate towards that direction. For example, if the player is facing North and hits the ‘s’ or down key, the player will then be facing South. By hitting the ‘s’ or down key again, the player will move in that direction.
The user interface for training robots will include initiating the training loop, ending the training loop, and assigning the training loop to a robot. All actions that the player performs between the start and end of the loop will be assigned to the robot. This loop could be implemented by having a player pickup and hold an object such as a floppy disk; while holding the object, the loop would be recorded. Players could then place the object on a robot to assign that loop.
To manage robot loops, levers associated with each robot could control their speed. Other user interfaces could be developed to account for variations required in robot tasks. For instance, a robot could be set on a loop to create paint. The player could interact with the paint bucket to change what color is being produced at that moment. In this way, the robot can stay on its loop without “reprogramming” and the player can manage the variability required.
Game elements will include miscellaneous crafting parts and objects. Further, NPCs will take the form of a finite number of robots available to train for each level. Though there will not be any dangers in the environment, the environment itself will be designed in a way to make the intractability between robots and the player interesting. An example of this will be tables or walls placed in a way that it is faster for the robots to have various tasks and gather different objects rather than doing the entire loop on their own. Inspiration for this will be taken from games like “Overcooked” that require tasks to be dispersed between players to maximize productivity.
Though other scripts will be required, the following represent an initial estimate of the scripts required for this game:
GameManager - The overall game loop and public variables such as quotas for achievements, time allotted for training, and time alloted for the level; this script also stores the number and type of completed vehicles.
PlayerController - Script for player input including movement and interactions with the game world.
Interactable - Parent class that performs an action when the player or robot interacts with it.
Spawner - Spawns various parts (screws, pigments, alloys, etc.) when players or robots interact with it.
Inventory - Excess paint, parts, etc. will be stored here and displayed on screen. The player can choose which components will be used to create the next car. If the selected component is out of stock, the car will not be created.
Receiver - Receives completed vehicles and communicates with the GameManager the type of vehicle.
Lever - Object to control robot speed.
FloppyDisk - Holds the robot loop.
Moveable - Object in the world that can be moved if interacted with.
Robot - Script that handles the loop for the robot.
Blueprint - Indicate what objects are required to make another object; different levels will have different blueprints available.
We will need to balance the difficulty of each level so that the player does not become discouraged. The very first level will not involve robots so the player learns how spawners, inventory, movement, interactions, and other basic game components function. As levels progress, more robots can be introduced along with more variations in vehicle components. This progression will mitigate frustrations early on and promote player engagement as they continue.
The minimum playable game will involve all usable game components including trainable robots. However, advanced features such as animations, sound effects, level variation, player tips, themed models, etc. will be available in later iterations.
Geoff will take the primary lead on robot training and the associated interactions. Kristopher will take the primary lead on base game components like spawners and inventory. Other scripts like the GameManger and PlayerController will have joint ownership between both developers.
First build - The minimum playable game.
Second build - This will involve three levels including an initial tutorial level (no robots), a second tutorial level (robots), and a third more challenging level.
Third build - This build will involve polishing of animations, models, sound effects, level balancing, player tips, and improvements based on player feedback. If there is time, we can also create additional levels.
The two developers will meet on Mondays at 4:00 PM and Thursday at 11:00 AM. There will be a third meeting time over the weekend that will occur at a time dependent on availability.
We will be using Unity 2019.3.2f1. We will also be using Unity Collaborate as our version control system.