Requires: Java 1.6
Controls: arrows to move, 's' to jump, 'a' to run
Recently, there has been increased interest in building games that dynamically adapt to players. One of the common approaches to building adaptive games is dynamic difficulty adjustment. However, most of these approaches are limited to parameter tweaking such as adjusting weapon strength or reducing spawning times, and do not modify levels in response to difficulty adjustment. My system attempts to overcome this limitation by incorporating parameter tweaking into procedural content generation. The system creates new levels on the fly in response to the current performance of the player.
Infinite Adaptive Mario expands on Markus Persson's Infinite Mario by adapting to the skill of the player. A description of the level generator used by the system is provided here. One of the inputs to the system is a set of parameters which specify probabilities for specific events to occur, such as placing a gap. By modifying these probabilities, the system can create a large space of levels with varying difficulty. Infinite Adaptive Mario scales up difficulty by increasing the frequently of gaps, average size of gaps, variation of ground height, and number of enemies. Scaling up the difficulty also tends to result in a larger number of possible paths through a level.
The player begins at level 50, which produces levels with a moderate degree of challenge. Upon successful completion of a level, the challenge is increased. Faster completion times result in larger increases in difficulty. Upon death, the difficulty is decreased based on the amount of progress made by the player. If the player is close to the goal upon death, then the difficulty is decreased only a small amount. A new level is generated when the player either completes a level or fails to complete a level after three deaths.
The best way to get a feel for how dynamic difficulty works in Infinite Adaptive Mario is to try it out for yourself. It is available as an executable JAR file (with source), which requires Java 1.6. Use the arrow keeps to move, 'a' to run, and 's' to jump.
Levels generated at the easiest and most challenging difficulty settings: