The Generation Game

The Generation Game is a basic game generator, editor and player.

Created as part of a final university project, the Generation Game was written in C# using Unity in ten weeks.

Project Goals:

  • Demonstrate technical abilities

  • Showcase skills in game design theory & application


As this would be my final project at University, I wanted it to be somewhat autobiographical. I wanted to share the experience of playing with game rules and systems.

Capture.PNG

Players can generate simple games, which are often uninteresting. Players can then examine the rules, identify problems and make changes. Editing game rules is fast, and within moments players can then test their changes. By repeating this process, randomly generated rules can be refined into engaging games.

Games are all primarily mouse driven. You can create a number of entity types that all behave differently. These behaviours are driven by interactions, which consist of one input and a number of results. Each result consists of a result type and a value, as well as an 'other actor' field which only applies to collisions. As well as behaviours, entities all have various properties like colour and whether they are affected by gravity.

Inputs:

  • Near - Triggered when the mouse is near the entity this is attached to.

  • Far - Triggered when the mouse is far from the entity this is attached to.

  • Hover - Triggered while the mouse is directly over the entity this is attached to.

  • Click - Triggered when the entity this is attached to is clicked on.

  • Collision - Triggered when the entity this is attached to collides with another entity. Can be any other entity (-1) or restricted to a specific one.

Results:

  • Movementx - Moves in the x axis. Value should be a number, positive for right and negative for left.

  • Movementy - Moves in the y axis. Value should be a number, positive for right and negative for left.

  • Colour - Changes colour. Value should be one of the available colours, with a capital letter.

  • Toggle - Toggles a number of properties depending on the value. 'gravity' will toggle the gravity, 'movement' will freeze and unfreeze an entity, 'follow' will cause the entity to loosely follow the mouse as if attached by an elastic string.

  • Repel - Moves away from the mouse. Value is the strength of this movement, and should be a number.

The system has some flaws. It is not very user friendly and could be better presented. I implemented tooltips to help mitigate the worst of these problems, but in order to develop this past a prototype the editing form especially needs to be redesigned with end users more in mind. In playtesting, users struggled to understand the rules displayed on the right hand panel. These rules could also be shown in more plain English, and with better visuals.

Despite the flaws, the system can generate, fully edit, play, save and load games. The project succeeds on the first goal of demonstrating technical ability by achieving this in a short period of time with little programming experience.

Screenshot 2021-05-07 133305.png

To showcase the system’s capabilities, I designed ten example games which are included in the default save data. Also included are four games by my first playtesters.

Game Breakdown - Demo 10 ‘Opposites’

2.gif

Rules:

  • ‘Zero’ balls move up when the mouse is near them. They are affected by gravity when the mouse is far away.

  • ‘One’ balls move up when the mouse is far away from them. They are affected by gravity when the mouse is near.

  • Both balls can be moved away from the mouse slightly when clicked.

Goal:

  • Move all balls above the horizontal line in the upper portion of the screen.

From the starting position, moving the ‘zero’ balls across the line will leave the ‘one’ ball behind. Moving the one ball above the line leaves the zero balls behind.

The game can be solved by separating the balls. By clicking, move both ‘zero’ balls to one side of the screen, and the ‘one’ ball to the other. Once the balls are separated, the mouse can be in the necessary position of being close to the ‘zero’ balls and near the ‘one’ ball at the same time.