This repository contains a level generator for Mario. It generates levels via an unigram trained on original mario levels whereafter it mutates the level via evolutionary optimisation on a simulation-based evaluation. Find the code in 'src/levelGenerators/groupx'.
This was a group assignment for the course AI in games at Queen Mary University of London.
The Mario AI framework is a framework for using AI methods with a version of Super Mario Bros.
This is an updated version for the Mario AI Framework. As the first version was released in 2009, this is the tenth anniversary edition, integrating features from all previous versions and adding several new features. This new code includes a better interface for playing the game with planning algorithms (the planning track of the competition), generating levels (the level generation track), and possibly will support the learning track in the future . The framework comes with multiple different planning agents, level generators and thousands of levels including generated levels from diffeent generators as well as the original Mario levels. Also, the framework is compatible with Video Game Level Corpus (VGLC) processed notations.
If you want to access the old framework, feel free to check out the old websites for the previous competitions (2015 - 2012 - 2011 - 2009).
- Better Interface for the framework
- Faster framework
- Using the original mario art
- Eleven different playing agents
- Agents now have a forward model, no more hacks for that
- Observation grids can be centered around mario or can reflect the current screen.
- Helper classes to check the observation grid instead of comparing integers
- Five different level generators
- Level generator have a forward model to test the levels
- Thousands of generated levels from winners of the level generation track
- Fifteen levels from the original mario bros
- Support event history for major game events
- A human readable level files
Download the repo and run the PlayLevel.java
file. It will run robinBaumgarten
A* agent on the first Mario level from the original Super Mario Bros. The game will run for 20 seconds (in-game time) and with Mario starting as small Mario and visuals appearing. To change the agent just change the package name of the agent in the following code
printResults(game.runGame(new agents.robinBaumgarten.Agent(), getLevel("levels/original/lvl-1.txt"), 20, 0, true));
to any of the package names that are found in src/agents/
folder, feel free to use any in your work. If you want to play a level yourself uncomment the following code in PlayLevel.java
file
//printResults(game.playGame(getLevel("levels/original/lvl-1.txt"), 200, 0));
and comment the agent running line from before. This code will run the framework to play the first mario level of the original Super Mario Bros with 200 tick on the game clock and with Mario starting as small mario. Feel free to change the 0
to 1
to start as Large Mario or 2
to start as Fire Mario.
Download the repo and run the GenerateLevel.java
from the src/
folder to test the framework. It will run the notch
generator to generate a level then it will run robinBaumgarten
A* agent to play that generated level. Feel free to try another generators by changing the package name of generator in the following line
MarioLevelGenerator generator = new levelGenerators.notch.LevelGenerator();
to any of the other package names of the other generator that can be found in in src/levelGenerators/
folder, feel free to use any in your work. The generators runs for maximum time of 5 hours to generate a level of 150x16 tiles using the following line:
String level = generator.getGeneratedLevel(new MarioLevelModel(150, 16), new MarioTimer(5*60*60*1000));
If you want to play the level by yourself or change the AI playing agent check the Planning Track subsection.
The following paper describes the original Mario AI Benchmark:
- [2012] The Mario AI Benchmark and Competitions by Sergey Karakovskiy and Julian Togelius. Published in the IEEE Transactions on Computational Intelligence and AI in Games (TCIAG), volume 4 issue 1, 55-67.
The following list show all the papers that talk mainly about playing the game in the Mario AI framework:
- [2009] Super Mario Evolution by Julian Togelius, Sergey Karakovskiy, Jan Koutnik and Jurgen Schmidhuber. Published in the proceedings of the IEEE Symposium on Computational Intelligence and Games.
- [2010] The 2009 Mario AI Competition by Julian Togelius, Sergey Karakovskiy and Robin Baumgarten. Published in the proceedings of the IEEE Congress on Evolutionary Computation (CEC).
- [2013] The Mario AI Championship 2009–2012 by Julian Togelius, Noor Shaker, Sergey Karakovskiy and Georgios N. Yannakakis. Published in AI Magazine, 34(3), 89-92.
- [2013] Imitating human playing styles in Super Mario Bros by Juan Ortega, Noor Shaker, Julian Togelius and Georgios N. Yannakakis. Published in the Entertainment Computing, Elsevier, vol. 4, pp. 93-104.
- [2014] Monte Mario: Platforming with MCTS by Emil Juul Jacobsen, Rasmus Greve and Julian Togelius. Published in the proceedings of the ACM Conference on Genetic and Evolutionary Computation.
The following is a list of papers about level generation in Mario AI Framework:
- [2010] The 2010 Mario AI Championship: Level Generation Track by Noor Shaker, Julian Togelius, Georgios N. Yannakakis, Ben Weber, Tomoyuki Shimizu, Tomonori Hashiyama, Nathan Sorenson, Philippe Pasquier, Peter Mawhorter, Glen Takahashi, Gillian Smith, and Robin Baumgarten. Published in the IEEE Transactions on Computational Intelligence and Games.
- [2010] Towards Automatic Personalized Content Generation for Platform Games by Noor Shaker, Georgios Yannakakis and Julian Togelius. Published in the procedings of AIIDE Conference on AI and Interactive Digital Entertainment.
- [2012] Evolving Personalized Content for Super Mario Bros Using Grammatical Evolution by Noor Shaker, Georgios N. Yannakakis, Julian Togelius, Miguel Nicolau, and Michael O'Neill. Published in the AAAI Conference on Artificial Intelligence and Interactive Digital Entertainment (AIIDE).
- [2012] Patterns and Procedural Content Generation by Steve Dahlskog and Julian Togelius. Published in the Proceedings of the FDG Workshop on Design Patterns in Games (DPG).
- [2013] Patterns as Objectives for Level Generation by Steve Dahlskog and Julian Togelius. Published in the Proceedings of the Workshop on Design Patterns in Games at FDG.
- [2014] Procedural Content Generation Using Patterns as Objectives by Steve Dahlskog and Julian Togelius. Published in the Proceedings of EvoGames, part of EvoStar.
- [2014] A Comparative Evaluation of Procedural Level Generators in the Mario AI Framework by Britton Horn, Steve Dahlskog, Noor Shaker, Gillian Smith and Julian Togelius. Published in the Proceedings of Foundations of Digital Games.
- [2014] Experiments in Map Generation using Markov Chains by Sam Snodgrass and Santiago Ontañón. Published in the procceding of Foundation of Digital Games.
- [2014] A Hierarchical Approach to Generating Maps Using Markov Chains by Sam Snodgrass and Santiago Ontanon. Published in the Proceedings of the Tenth Annual AAAI Conference on Artificial Intelligence and Interactive Digital Entertainment.
- [2015] A Hierarchical MdMC Approach to 2D Video Game Map Generation by Sam Snodgrass and Santiago Ontañón. Published in the Eleventh Artificial Intelligence and Interactive Digital Entertainment Conference.
- [2018] Generating Levels That Teach Mechanics by Michael Cerny Green, Ahmed Khalifa, Gabriella A. B. Barros, Andy Nealen and Julian Togelius. Published in the proceeding of Foundation of Digital Games.
- [2018] Evolving Mario Levels in the Latent Space of a Deep Convolutional Generative Adversarial Network by Vanessa Volz, Jacob Schrum, Jialin Liu, Simon M. Lucas, Adam Smith and Sebastian Risi. Published in the proceeding of the ACM Conference on Genetic and Evolutionary Computation.
- [2019] Intentional Computational Level Design by Ahmed Khalifa, Michael Cerny Green, Gabriella A. B. Barros and Julian Togelius. Published in the proceeding of the ACM Conference on Genetic and Evolutionary Computation.
The following list includes papers that do not fit in the previous categories but still use the Mario AI Framework:
- [2009] Modeling Player Experience in Super Mario Bros by Chris Pedersen, Julian Togelius and Georgios N. Yannakakis. Published in the Proceedings of the IEEE Symposium on Computational Intelligence and Games.
- [2013] Decision Making Styles as Deviation from Rational Action A Super Mario Case Study by Christoffer Holmgård, Julian Togelius and Georgios N. Yannakakis. Published in the Proceedings of the Artificial Intelligence in Digital Interactive Entertainment (AIIDE) conference.
- [2013] The Turing Test Track of the 2012 Mario AI Championship: Entries and Evaluation by Noor Shaker, Julian Togelius, Georgios N. Yannakakis, Likith P. K. Satish, Vinay S. Ethiraj, Stefan J. Johansson, Robert Reynolds, Leonard Kinnaird-Heether, Tom Schumann and Marcus Gallagher. Published in the Proceedings of the IEEE Conference on Computational Intelligence and Games.
We are aware that this list is not complete. If you want your paper added, please contact us and we will add it to the list.
The MarioAI framework core engineImplementing a forward model and multiple different observations (based around mario/based around the screen center)Implementing the original SMB graphics instead of Mario world graphicsAdding multiple agents from the previous competitionIsolating particle effects from game spritesOnly using the first SMB action set (no more shell carrying/wall jumping)Documenting the interfaceAdding Generated LevelsAdding the level generator interfaceAdding the level generators to the frameworkBetter way to check the observation grid Using TileType and SpriteTypeAdding event history for the game and agent to MarioResultsModifying the original Mario levels to include more detailsAdding Punishing Model to the Engine where the player dies when certain basic event fires- Allow the punishing model to tackle more complex events that need to be infered
- Allow Agent debugging by drawing the searched trajectories like the Robin A* video
- Adapt more agents to the new Mario-Framework
- Adapt more level generator to the new Mario-Framework
- Add more stats to MarioResult class similar to Gameplay Metrics
- Mix the TileType and TileFeature class
- Adding a simple MCTS agent and simple A* agent
- Koopa shells can come back to life after stomping on it
- Adding Monte Mario agent
- Multiple different backgrounds/palettes that the user can select from.
- Documenting the whole engine
- Mimicking the original SMB physics instead of SMW physics
- Adding the learning track interface
This framework is not endorsed by Nintendo and is only intended for research purposes. Mario is a Nintendo character which the authors don't own any rights to. Nintendo is also the sole owner of all the graphical assets in the game. Any use of this framework is expected to be on a non-commercial basis. This framework was created by Ahmed Khalifa, based on the original Mario AI Framework by Sergey Karakovskiy, Noor Shaker, and Julian Togelius, which in turn was based on Infinite Mario Bros by Markus Persson.