2D Platformer Generator
About
2D Platform Generator is a prototype I’m building using the Unity engine for my master’s dissertation on the generation and evaluation of platform games using rules. The purpose of this project is to build levels for a 2D platformer using a set of grammatical rules and to determine whether the levels are playable.
List of controls:- You can move using the WASD keys or the arrow keys;
- Jump and double jump using the space key;
- You can wall slide by pressing the move key in the direction of the wall;
- You can jump while wall sliding.
If you want to participate in my study please follow the next steps:
- Download the prototype and run it as instructed below;
- In the game click “Choose Levels” and play through all the levels;
- Everytime you finish a level your progress is saved and you can see this progress in the Level Selection menu;
- Once you completed all the levels please fill the following form: https://forms.gle/Yvw3mBLaBURTHiAy9
Note: If one of the levels is too difficult or impossible to complete, please skip it by going back to the Level Selection menu and selecting another level.
Summary of the generation process:The generation beginnings with a set of graph grammar rules, below is an example of what this rules look like:
Example of a Grammar rule systemThe rules are then used to create a mission map by evolving and mutating a graph called host, this process evolves finding subgraphs in the host that match the left side pater of the rule, and the replace said subgraphs with the pattern on the right of the rule.
The mission map serves as a template for the level's fundamental structure, including details like where the next platform should be placed in relation to the one before it, what kind of platform it is, how often enemies or coins should appear, etc.
Example of a complete mission mapAfter that, the mission map is utilized to create a space blueprint, during which the mission nodes are transformed into prototype structures like specific kinds of platforms or terrains. Taking into account the player size and movement validations are made in order to find the best position to place these structures.
Finally, the best space map is transformed into the actual level by turning the structure prototypes into the game object that make up the level.
Messing around with the rules:If you would like to explore more and change the grammar rule system for generating mission maps and get different results when generating a level in the application, please bear in mind the following guidelines:
Locate the “2D Platformer Generator_Data \ StreamingAssets” folder in the game's root folder.
This folder contains two grammar json files, "MissionGrammar" and "MissionClosingGrammar". The first one is used to build the mission map normally, while the second one is used to finish the generation by converting any non-terminal symbols in the graph to terminal symbols.
Json file rules:
- Json hold an object called "Items" that is a list of all rules;
- Each rule is composed of an id, a left side graph and a list of right side graphs;
- The rule Id is important because its used to reference the rule in the field AssociatedRules ( 2.c.ii. );
- The rule Left is a graph that contains a list of vertices( 3. ) and edges( 4. );
- The rule right sides or mutations are composed of a priority value, a list of AssociatedRules ( 2.c.ii. ), a list of vertices( 3. ) and a list of edges( 4. );
- The Priority is a percentage of how likely this mutation should be picked over the other rights, represented with a float from 0 to 1.
IMPORTANT: The sum of all right sides' priorities must be 1; - The AssociatedRules is a list of rule ids, this list is used by the application to more easily pick the next rule to apply.
NOTE: If this list is empty the application will still check to see if it can use this rule;
- The Priority is a percentage of how likely this mutation should be picked over the other rights, represented with a float from 0 to 1.
- Each vertex has a type and an alias;
- Type is a string used in finding matching nodes to appliy rules,
- A vertex's type can be either terminal or non-terminal. Non-terminal types are just used for match finding and can be of any kind. However, the host graph must be finished with terminal nodes that are used to convert the mission map nodes into the space map prototype structures. At the moment, they must be one of the following: "coins," "enemy," and "platform";
- Each edge has reference to a vertex "Source" and another "Target", it also has a type and a slope;
- The edge type is not used right now, all edges are normal, but it will be used to associate a vertex to another with special link, for example a lock to a key;
- The slope of a edge determines the elevation of the target vertice compared to the source vertice, if the value is 1 the target vertice will be placed northeast of the source, if the value is -1 it will be placed southeast, if the value is 0 it will be placed directly east of the source vertice;
- The source and target are references to the alias of a vertice.
IMPORTANT: When replacing nodes edges coming in to the pattern are associated with the lowest alias and edges going out are associated with highest alias number.
Game Engine used: Unity;
Player art and script behavior: The fantastic Metroidvania Controller by Aisukaze Studio.
https://assetstore.unity.com/packages/2d/characters/metroidvania-controller-1667...
With the attack, shoot, and dash features turned off;
Coins and Enemy art: Modified version of the cute sprites in Simple 2D Platformer Assets Pack by Goldmetal.
https://assetstore.unity.com/packages/2d/characters/simple-2d-platformer-assets-...;
Trees art: Simple Trees by Jestan.
https://opengameart.org/content/pixel-art-simple-trees;
Rocks art: Nature pixel art base assets FREE by Blackspire.
https://assetstore.unity.com/packages/2d/environments/nature-pixel-art-base-asse...
Sound Effects: https://mixkit.co/free-sound-effects/
Music: Adventure by Alexander Nakarada | https://www.serpentsoundstudios.com
Music promoted by https://www.chosic.com/free-music/all/
Attribution 4.0 International (CC BY 4.0)
https://creativecommons.org/licenses/by/4.0/
Inspired by the paper: Joris Dormans. 2010. Adventures in level design: generating missions and spaces for action adventure games. In Proceedings of the 2010 workshop on procedural content generation in games. 1–8.
Generation engine and prototype building: Diogo Soares (me)
Thank you so much for your participation and feedback !