Conference: SeGAH

SeGAH2011: IEEE 1st International Conference on Serious Games and Applications for Health

The overall objectives of the conference are the discussion and sharing of knowledge, experiences and scientific and technical results, related to state-of-the-art solutions, technologies and applications of serious games in health and healthcare, as well as the demonstration of advanced products and technologies.

Visit SeGAH2011's website.

Two More AI topics on Serious Games

Animal-like AI behavior

I found this topic quite interesting because it can be applied to lots of different stuff. The most obvious one being programming the AI of in-game animals. Depending on the type of game, this can greatly enhance the player's experience. This is a must in games designed to teach about animals or simulations that involve animals. For example, the game WolfQuest could be enhanced with this type of AI, as the different animals in the gameworld would feel less scripted.

Another possible application can be in enemy behavior. The enemy can use animal - like behavior to hunt, ambush, escape, regroup, etc. depending on the player's actions. This could also make the game feel less scripted and more dynamic while preventing the player to "learn" the AI and exploit a weakness the programmer didn't consider.

Opponent Modeling

This is very similar to player modeling, where you need to classify the players in order to modify the game and create enjoyable experiences for everyone whether they are newbies or experts. The difference is that in opponent modeling, the objective is to modify the enemy's strategy to the player or even other AI controlled opponents. When an opponent is successfuly modeled, a rough estimation can be mado of what will happen next, so the AI could be prepared beforehand.

The gameplay value of this topic consists on forcing the player to change strategies instead of grinding the game with the same one over and over. This of course, makes the game more dinamic and entertaining.

  • David Carmel and Shaul Markovitch. Opponent Modeling in Multi-agent Systems. In Gerhard Weiss and Sandip Sen, editors, Adaption And Learning In Multi-Agent Systems, volume 1042 of Lecture Notes in Artificial Intelligence. Springer-Verlag, 1996.
  • Schneider, Nicolas (2011). Animal and Genetic AI: A Combination To Improve AI in Video Games. Obtained in April 13, 2011 from Gameinformer: http://www.gameinformer.com/blogs/members/b/tognick_blog/archive/2011/04/08/animal-and-genetic-ai-a-combination-to-improve-ai-in-video-games.aspx
  • Kharkar, Sandeep V.; (2002). Simulating Real Animal Behavior. In Steve Rabin (Ed.) AI Game Programming Wisdom (pp 479 - 485) United States, Charles River Media Inc.

Paper: Simulating Real Animal Behavior

Simulating Real Animal Behavior
Sandeep V. Kharkar [2002]

I found this article really interesting because this is the first time I read about AI applied to animal behavior. This type of behavior is a little bit different from the usual opponent AI as to make the animals seem realistic.

The paper states that there are three different categories of animales in a game:
  • Ambient Animals (Ambient animals are used to enchance the environment of the game. They don't require heavy AI programming but they still require specific behaviors to make them seem real).
  • Secondary Animals (Secondary animals have limited interaction with the player. They need to be intelligent but somewhat limited so the interaction with them doesn't take the focus away from the main gameplay).
  • Primary Animals (Primary animals are the focus of the game. They usually have the most complex AI as they are the center of attention and probably a key part of a gameplay mechanic).
The author gives some tips to program the behavior of different types of animals like bugs, birds and fish. Also, he provides some insight what should be considered when programming each of the three kinds of animals in games.

For example, when programming bugs, you should consider that they never fly in a straight line, that they don't always flap their wings or that they try to avoid any moving objects.

This paper is a great starting point when trying to make the environment more lifelike as it gives a nice overview of what you can expect to achieve with AI programming.

The complete paper can be found in the book: AI Game Programming Wisdom.

Kharkar, Sandeep V.; (2002). Simulating Real Animal Behavior. In Steve Rabin (Ed.) AI Game Programming Wisdom (pp 479 - 485) United States, Charles River Media Inc.

Game: Pixel Legions

Pixel Legions is a little flash strategy game where you must control your Pixels (units) and send them to attack your opponents to kill their Pixels and most importantly, their Base.

The game is simple, your base produces pixels which group themselves. Select a group and trace a path in the environment. The pixels will follow your traced path and if they encounter an enemy, they will atack.

I like this game because it's concept is extremely simple yet it creates fun experiences because you can't just mindlessly play, you actually need to have some sort of strategy.

As the game progresses, more elements come into play, like sections that you can only cross from one side or more enemies to deal with.

It would be interesting to see a variation of this type of game where you could program your pixels and pitch them against other people's armies and see who has the best strategy.

What I liked about the game:
  • The game is really easy to understand.
  • It keeps you entertained by adding small twists every now and then.
  • Encourages you to have some sort of strategy instead of mindless play.
  • Can provide interesting gameplay ideas for a programming game.

What I didn't like about the game:
  • The pixels auto-lock enemies (even if it's your enormous pixel group against two enemy pixels) which can cause some problems in advanced levels.
  • Some kind of multiplayer would've been nice.

Pixelante (2010). Pixel Legions

Game: Colobot

Colobot is a nifty real-time strategy game that combines programming elements into its gameplay. In this game, you control an astronaut that must complete several missions in each planet he arrives. To help him, he can build bots that can do specific things, like fly or move through the ground and pick objects.

Bots are built much like how you would build stuff in games like Age Of Empires, where you need to gather resources (in this case, energy cells and titanium blocks) and build the corresponding structures that will allow you to create your units (in this case, your bots). Colobot has a super simplified resource management system so you don't have to worry about it too much (you need 1 block of titanium to build stuff, your bots use 1 energy cell to power themselves, etc.) so you can focus on the programming part.

The cool thing about this game is that you can choose not to program anything and control all your bots by yourself, but this proves harder and harder as you progress in the game, so, just like in real life, you can use programming to avoid having to perform everything yourself. And because of this, you will also feel the joy of watching your program work, just like when your code works in real life!

The game has some faults though. The levels introduce new topics quite nicely, but trying to see which is your next objective is a chore. Instead of having an "objective complete! Next objective is...." on the GUI, you have to press F1 to see the objective list. The game won't even cross out the ones that you have completed. Also, it would be nice if the game introduced easy programming concepts right from the first level instead of presenting you with example programs. Still, this is an interesting game and one of the few if it's type that will let you to program your units OR control them yourself in real time.

What I liked about the game:
  • Program OR control your units (yay!).
  • Simplified Real Time Strategy style won't boggle your head.
  • The programming language used in the is similar to a real life programming language.
  • The games is really entertaining once you get the hang of it.

What I didn't like about the game:
  • The game really needs mission status updates.
  • The help system is like reading a .chm file.
  • The programming language could be introduced from the start to make it easier to create your own programs.

Check out the game's main page.
Download the demo here.
Epistec Games (2001). ColoBot

Game: C-Jump

C-Jump is a board game designed to teach programming. Wait, what? A board game? Well.. yes, it's a board game and probably the only one that teaches this topic.

I found it quite interesting that someone desinged a board game to make it fun for kids to learn programming basics.

The gameplay is a pretty standard roll your dice and move your piece n spaces, whoever reaches the last space is the winner. The catch is that the board is made up of lines of code taken from the C programming language. Here's a pic of the board:

Each space line of code represents stuff that can will happen if you're standing on it when you throw the dice where X is the number you get. For example, if you are in a space that says "x+5" and you get a "3", you can move 8 spaces forward, or if you happen to land on an "if" space, the number you get will determine the path to follow.

Aside from simple arithmetic, the game also has the most common statements like if, else, switch, goto, break, continue, return, etc. The full board looks like this:

It's an interesting concept. I would need to play it to know if a game based almost entirely on luck would be fun enough to play it several times. At least, children that play it would actually be learning basic programming concepts.

Visit C-Jump's main page.
c-jump factory (2007). C-Jump

Paper: Opponent Modeling in Multi-Agent Systems

Opponent Modeling in Multi-Agent Systems
David Carmel and Shaul Markovitch [1996]

Opponent modeling is an interesting way to allow the AI to behave realistically to different strategies. If you can create an accurate model of your opponent, you could be able choose your next actions based on what you predict your opponent will do.

In this paper the authors propose an opponent modeling algorithm based on Finite State Machines that can work in a multi-agent environment.

They explain an algorithm that can create a model of an opponent as a Finite State Machine based on previous actions taken in the game. The model is reinforced as data is being processed. When a counter exapmle is found, the model updates itself to try and match the real model. The full algorithm with proofs and thorough explanations can be found in the original paper.

The authors concluded that their algorithm is only a first step in the area of opponent modeling, but can be of great interest if further research is made.

Complete paper can be found here
David Carmel and Shaul Markovitch. Opponent Modeling in Multi-agent Systems. In Gerhard Weiss and Sandip Sen, editors, Adaption And Learning In Multi-Agent Systems, volume 1042 of Lecture Notes in Artificial Intelligence. Springer-Verlag, 1996.

Book: End to End Game Development

End to End Game Development: Creating Independent Serious Games and Simulations from Start to Finish
Nick Iuppa and Terry Borst [2010]

Buy the book from Amazon.com
ISBN: 978-0-240-81179-6

This book is a very complete guide to the Serious Game development process. It includes everything from how to define the goals of your project to how to produce and author your game. Also, several interesting topics are included like Game Design, Instructional Design and Gameplay Design.

This book has an easy-to-read format and the authors take great care in how the information is presented to the reader. The great amount of examples, many of the taken from real life situations make it easy to see how all the topics can be applied to your own project.

End to End Game Development is a book that I would recommend to start with, as it provides knowledge from all the game development process, which can then be deepened depending on your presonal interests.
Iuppa, Nick; Borst, Terry (2010). End to End Game Development, Creating Independent Serious Games and Simulations from Start to Finish (1st ed.). Massachusetts, United States: Elseiver.

Article: Animal and Genetic AI

Animal and Genetic AI: A Combination to Improve AI in Video Games
Nicholas Schneider [2011]

In this article, the author analyzes how to create challenge in videogames as to make them fun. He says that artificially creating challenge through inflated health bars, unlocable moves and one hit kills don't offer a sense of realism.

A nice attempt to solve this problem was Bethesda's Radiant AI system, in which the NPC's would make choices rather than perform scripted events. Still, Schneider considers that this system still feels scripted.

On the other hand, in FPS games like Halo, enemies act intelligently by trying to flank you, run for cover and sending search parties for the player. This also feels scripted as the player needs to pass through a specific waypoint to trigger certain behaviors.

The author proposes the combination of AI with animal like behaviors, which can be the hunting habits of wolves or the social structure of bees for example. The difference is that no waypoints and scripted events would be needed as the animal like behaviors themselves would kick in the moment they are needed or as each NPC sees fit.

Even now, the AI would feel scripted, so Schneider says that combining those behaviors with Genetic AI would provide a much dynamic and interesting experience. The AI would adapt to the player and adjust it's skills while applying such behaviors like predator skills (force the player into an area where the rest of the enemies can set an ambush) thus making the experience feel more like a real life exercise in survival and less like scripted enemy guidance.

Schneider, Nicolas (2011). Animal and Genetic AI: A Combination To Improve AI in Video Games. Obtained in April 13, 2011 from Gameinformer: http://www.gameinformer.com/blogs/members/b/tognick_blog/archive/2011/04/08/animal-and-genetic-ai-a-combination-to-improve-ai-in-video-games.aspx

Conference: Paris Game/AI Conference

The Paris Game/AI Conference is largest worldwide gathering dedicated to gameplay, character animation & artificial intelligence in game development, and we'd argue it's the most passionate event on the topic too — but we're a little biased. In 2010, the conference brought together leading developers from Europe and worldwide, and in total almost three hundred (300) people from all around the globe including programmers, designers, students and enthusiasts
.Check out the Paris Game/AI Conference

Even More AI Topics on Serious Games

If the game involves a user programming agents and pitting them agains AI controlled agents, it is possible that some sort of pathfinding would need to be done as to allow the AI to reach the player in a believable manner. Implementing this topic would include things such as A*, Theta* and path smoothing.

Blackboard Architecture
This architecture seems to be really helpful when developing AI agents, as a platform that eases agent scalability and as a platform that enables inter-agent coordination, as well as dynamic logic changing with the addition and removal of Knowledge Sources. This topic would need to be further researched as there are already several blackboard architecture implementations out there for different kinds of problems.

State Machine For Non-Programmers Implementation
If the game involves teaching some sort of programmable agent, it should become apparent that we would need to implement some sort of state machine that is easy to use, easy to modify and fun to work with. This would probably lead to visual programming. Implementing this topic would include things such as abstraction/generalization of computer logic and the cognitive process of the player while engaging in visual programming.

In-Game Scripting Implementation
On the other hand, if we end up creating a game where the player would need to a more complex programming of the agent, a form of in-game scripting would be needed to facilitate this. This would have to be combined with other gameplay mechanics as to not make the game tedious in a 'create a solution, watch what happens, change the solution' cycle and make it more active and fun. The scripting language would have to be tailored to our game's needs.

This is something I didn't know about but can be quite useful. Capturing the actions of different gamers and then having the AI replicating those actions can create a believable experience, as the AI would learn the little quirks that human players have that are difficult to emulate in a computer controlled player. The implementation of this topic depends completely on the style and objective on the game that will be developed.

  • McGlinchey, Stephen (2004). Enabling Computers to Play Like Humans. In Ercim News 57(1),14-16
  • Nash, A. (2010). Theta*: Any-Angle Path Planning for Smoother Trajectories in Continuous Environments.
  • Rabin, Steve (2002) AI Game Programming Wisdom, United States, Charles River Media Inc.
  • Isla, Damian; Blumberg, Bruce (2002) Blackboard Architectures. In Steve Rabin (Ed.) In AIGame Programign Wisdom (pp 333-344) United States, Charles River Media Inc.

Paper: Blackboard Architectures

Blackboard Architectures
Damian Isla and Bruce Blumberg [2002]

This paper explains a possible approach to handle coordination between different AI agents called "blackboard". This architecture references the physical blackboard that we are all used to.

A physical blackboard provides a shared space where the problem can be broken down and incrementally solved. Also, the group standing around the blackboard can break into smaller groups to solve different parts of the problem but still knowing how the others are going and being able to assist them if necessary.

A blackboard architecture consists on three basic elements:
  • A blackboard: A publicly read/writeable information display.
  • Knowledge sources: Components that operate on the information that the blackboard contains.
  • Arbiter: Given a single snapshot of the blackboard contents, the arbiter must decide which of the relevant knowledge sources to execute.

This system can be used as part of an agent architecture. The most notable improvement when using this architecture is that when the agent needs to be extended, the new modules just need to be connected to the blackboard and that's it. This could also help to morph an agent's behavior by adding or removing knowledge sources.

Also, this system can be used for agent-to-agent coordination. Depending on the type of game, the knowledge sources can represent different elements. The most important aspect of this architecture is to get the arbiter's decision making algorithm right.

The full article can be found in the book AI Game Programming Wisdom.

Isla, Damian; Blumberg, Bruce (2002) Blackboard Architectures. In Steve Rabin (Ed.) AI Game Programming Wisdom (pp 333 - 344) United States, Charles River Media Inc.

Game: Crayon Physics Deluxe

This game has an amazing concept. Like Scribblenauts, this game focuses on the player creating stuff in the world to pass each level. In this game though, instead of writing nouns to sommon stuff, players draw lines that transform into in-game objects that will hopefully make the ball reach a star.

In each level, you must draw lines, paths, boxes, circles, and more to help the ball reach it's destination. The cool thing is that whatever you draw will have complete physics effects. That means that if you draw a box, it will fall to the ground, if you draw a circle, it will roll around and if you draw a line connecting a heavy box, it will tug the line as if it were a rope.

This creates interesting puzzles for players to solve and because there are many ways to solve them, players will have different experiences when playing the same levels. And much like Fantastic Contraption, some of them will be encouraged to create crazy over-the-top scribbles to achieve the same goal, much like a Rube Goldberg Machine.

I havn't bought the game yet, but heres a video showing what it is all about:

Kloonigames (2007). Crayon Physics Deluxe

Game: SuperMe

SuperMe is an interesting concept. It's a browser based game where players' goal is to improve four different types of skills: Widom, Ability, Influence and Connection. The catch is that this will be done through the different quizzes, videos and games that the site has to offer. The cool thing is that when you get better at one of this skills, you are actually getting better in real life, because all the content on this page will make you think about yourself and your actions.

This is a type of Gamification, in which players are rewarded for learning how to be happy, how to be a better person and how to live an overall good life.

The quizzes are a bit boring, but because of the gamification aspect of the site, they are bearable. The videos are really interesting, because they are short, concise and entertaining, plus you can learn from other people's experiences. The games are fun and challenging, they make you think and improve certain skills along the way.

There is one downside though, and probably a game-breaker one. The scores reset when the page refreshes or you navigate to another page. I don't know if this is common, but I tried the game with Facebook Connect in Chrome and IE9 and both times I lost my progress. A real bummer, considering that the most important aspect of the gamification process doesn't work. Still, it's an interesting concept that will actually help people once they fix the score resetting issue.

What I liked about the game:
  • Interesting concept.
  • Videos are fun and informative.
  • Games are challenging and entertaining.
  • Registering is extremely easy with Facebook connect.

What I didn't like about the game:
  • Quizzes feel more like a chore than a fun activity.
  • Broken scoring system breaks the experience (should get fixed soon).

Somethin' Else (2010). SuperMe [www.playsuperme.com]

Game: Super Scribblenauts

Scribblenauts is a series with an awesome concept: Write anything you can think of and it will appear in-game. It sounds quite ambitious but it's actually pretty well implemented.

The games consist of a series of puzzles that you have to solve and to do that, you must use your imagination to summon stuff into the game world progress. In Super Scribblenauts, they added the ability to use adjectives so the amount of stuff that can be summoned is enormous.

I found this concept to be quite entertaining and it creates different experiences to different gamers.

Here is a gameplay montage that gives an idea of what you can do in the game

I only played this game once in a ds booth, so I will include a review from IGN instead of reviewing it myself:

Buy the game from Amazon.com

Visit Scribblenauts' website
5th Cell (2009). Super Scribblenauts

Journal: Ercim News (No. 57)

Ercim News (No. 57)

This journal includes papers from a wide range of topics relating to computer science. This issue in particular has a special section dedicated to games. Some of the topics include:
  • Artificial inteligence
  • Dramatic Gaming
  • Games as Learning Tools
  • Mobile Gaming
  • Pervasive Gaming
  • Interactive Storytelling
And many others. This issue is worth checking out if you're interested in game development, AI development or Serious Game development.

Read Ercim News Issue 57 here.

Read Ercim News lastest issue here.

Article: Enabling Computers to Play Games Like Humans

Enabling Computers to Play Games Like Humans
Stephen McGlinchey [2004]

This article is a quick mention on how it might be possible to create an AI that behaves like a human.

McGlinchey states that AI players can be written with several different objectives. Some developers aim to develop AI players that are most likely to succeed in a game, others aim at producing players that will make the gaming experience more enjoyable and this means that the AI should behave like a human.

She says that there are two aspects of game AI that affect the gamer's experience: level of performance and style of play. This means that the AI must match the experience level of the player and that it must behave similar to how a human would play (AI players should not have superhuman reactions or be able to move in an impossible manner). Failing to correctly adjust any of those will make the experience less immersive and less enjoyable.

One way of solving this problem is a technique that is being researched called motion capture for AI. Which is basically training the AI with recorded data from human players, a process called GoCap (Game Observation Capture). The trained AI can then mimic the data that was used to train it.

The author suggests using Kohonen's Self Organising Map (SOM) in conjunction with the GoCap. In a simple game of pong, they were able to replicate some of the quirks that are present in human play, which can actually make the player believe that the opponent is intelligent and non-mechanized.

McGlinchey, Stephen (2004). Enabling Computers to Play Games like Humans. In Ercim News 57(1),14 - 16

Book: AI Game Programming Wisdom

AI Game Programming Wisdom
Various Authors, edited by Steve Rabin [2002]

Get the book on Amazon.com
Visit the AI Wisdom website
ISBN: 1-58450-077-8

This book is an amazing collection of AI related articles that focus on specific aspects of AI development. The great variety of authors and topics make this book a must have for game developers interested in improving their games thorugh AI.

The more than 70 articles contained in the book range from general purpose AI techniques to genere specific AI implementations. It also includes a cd-rom with implemented examples of the code that appears in the book.

Can the information in this book be applied in a serious game context? Probably not every single article, but depending on the type of serious game, many of them could be applied or easily modified to fit the needs of a serious game.

Paper: Building an AI Diagnostic Toolset

Building an AI Diagnostic Toolset
Paul Tozour [2002]

This paper explains one of those things that are rarely planned when developing an AI system: the diagnosis tools.

The author explains that having a good set of diagnosis tools can save a lot of time when trying to figure out what is the AI trying to do, plus it makes it easier for non AI-developers to understand and tweak the system if needed.

Two types of tools are proposed: AI Commands and AI Diagnostic Tools. The former can be used to change the state of the system and the latter can be used to view the internal state of the system.

Here are a few examples of the proposed tools:

AI Commands
  • Destroy (Eliminate a number of AI-controlled units).
  • Insensate (Make AIs unaware of sensory inputs).
  • Forget (AI forgets current target and loses all knowledge it possesses).
  • Modify State (Force the AI to excecute a specific behavior or tactic).
  • Switch player control (Allow user to take over an AI unit)

AI Diagnostic Tools
  • Unit AI state (If the system is a finite-state machine, display the state of any given AI subsystem).
  • View Pathfinding search (Show nodes looked at and the order they were searched).
  • View Current Target (Display arrow from selected AI unit to it's intended target).
  • View Sensory Knowledge (Draw a line from selected AI to any stimuli it notices, changing colors depending on the intensity of the stimulus).
  • View Past Locations (Draw connected lines indicating locations an AI has visited).

Aside from being useful as debugging and tweaking tools, they can also provide interesting functionality if implemented as game mechanics in a game where the player can "program" their units, for example, being able to analyze what's going on with Diagnostic Tools in-game and being able to alter part of the programmed behavior with AI Commands could make the game more active and less "program and wait too see what happens".

The paper can be found on the book: AI Game Programmming Wisdom
Tozour, Paul (2002). Building an AI Diagnostic Toolset. In Steve Rabin (Ed.), AI Game Programming Wisdom (pp. 39 - 45). United States, Charles River Media, Inc.

More AI Topics on Educational Serious Game Development

Expanding my previous post, I'd like to add some more topics I've found that could have some use in a serious game.

Procedurally Generated Levels

Automatically generating levels has the advantage of creating a great amount of levels without the developer having to program all of them. This can also help in a game to keep things fresh for many replays. The great disadvantage is that the levels might end up being awkward or not useful for the purpose of the game. This could be solved with an intelligent algorithm that prefers creating fun and useful content. But how would it know what is fun and what is not? Maybe a genetic algorithm that receives input from players instead of having a calculated fitness score could be one solution.

Opponent AI

How could I have missed this one. In about any game, having opponents to play with when no humans are around is nice, and the more human-like they behave, the better. Depending on the type of serious game, there might or might not be the need to include intelligent bots that play like humans, but even outside a Serious Game context, this topic is an interesting one.

Dynamic Scripting

Dinamically adapt the AI of a game can provide a boost in the entertainment it provides while improving the Enemy AI. Dynamic Scrpting allows the game to adapt to new or unforseen strategies used by players. This technique can be used in real time and its computationally fast, effective, robust, and efficient. Depending on the type of Serious Game, this technique can be used to moderate the material provided to the player to learn or to force the player to think of different strategies to defeat an enemy. This is also a topic that can prove interesting to implement in a Serious Game context.

  • Mott, Ken. (2009) Evolution of Artificial Intelligence in Video gAMES: A Survey
  • Spronck, Pieter; Sprinkhuizen-Kuyper, Ida; Postma, Eric (2004) Difficulty Scaling of Game AI
  • Spronck, Pieter; Ponsen, Mark; et. Al (2006) Adaptive Game AI with Dynamic Scripting

Game: Infinite Adaptive Mario

Infinite Adaptive Mario is an expansion of Markus Persson's Infinite Mario.

This game is a mario clone but with procedurally genereted levels that adapt to the player. Everyone starts at level 50 which produces levels with a moderate degree of challenge. If the player dies that number will decrease depending on how far from the goal was the player. If the player passes the level, the difficulty goes up depending on how fast the level was completed.

The level number indicates how difficult a level can be created. This is done by the frequency of gaps, average size of gaps, variation of ground height and the number of enemies.

What I liked about the game:
  • Traditional mario game controls make it easy to get used if someone has already played a mario game of the same style.
  • Procedurally generated levels make this game interesting, as it varies the difficulty of the game based on the skill of the player.

What I didn't like about the game:
  • The game needs a menu screen or confirmation screen. Jumping right into action with enemies at 1 second from you will most surely result in death if you're not paying attention.
  • A score system would increase this game's replay value and encourage competition between players.

Ben Weber (2010) Infinite Adaptive Mario [http://users.soe.ucsc.edu/~bweber/dokuwiki/doku.php?id=infinite_adaptive_mario]