NeuralBird is an ongoing AI learning project. I am implementing a simple clone of Flappy Bird with more sophisticated and challenging obstacle placement. Using the 3-step framework, I guarantee solvability and can easily increase the difficulty to superhuman level. Having these level-solution pairs that I can create infinitely, I want to experiment with, compare and visualize different machine learning techniques (especially Q-learning / deep learning) that learn playing the game. This is especially interesting due to the possibility of supervised learning (using the level-solution pairs). I am going to open source this project.
Dark Defender (draft)
Dark Defender is a classic castle defense game, targeting mobile (Android and iOS). The project is started and led by me. The game allows dozens of viable builds (5 weapon types, 4 support module types, 4 spell types, 4 trap types, 30+ upgrades). Level waves are procedurally generated and provide endless gameplay with unique enemies (19+) and challenging bosses (5+). A big issue for me was the balancing; manually crafting numbers that provide a fair but challenging experience for more than 1000 levels is cumbersome, especially due to the large number of possible builds. As solution, I implemented an AI agent (automated game balancing) that is able to autonomously play the game (rule-based agent, k-Means for group detection, Monte Carlo for build evaluation) and test different parameters and builds in no time; this helped extremely in detecting overpowered/underpowered builds as well as improve the general balance. I used the micro-framework Spark to implement a REST API as back-end for persistency/savestate backup and ranking/highscore functions. Dark Defender is released soon!
|Team||Richard Stief (graphic design, art, animation), Jung Choi (music), Me (project lead, programmer, game design, gameplay, balancing, SFX)|
|Development||Java, libGDX, Spark (Java), MongoDB|
ProcJump is a competitive 2D platform game created by applying the 3-step generic framework for procedural game level generation that I proposed earlier. Levels are randomly generated and increase in difficulty as the player progresses. Due to the algorithm's structure, solvability is always guaranteed; this solution can even be shown to the player as an instant replay feature. I plan to improve the procedural generation (level geometry, obstacles, moving platforms) and aim to release the game as a competitive highscore based and fast paced platformer on Android, iOS and HTML5. All assets so far are placeholders.
|Development||Java, libGDX, free graphics|
A 3-Step Generic Framework for Procedural Game Level Generation
As my master's thesis research at Ajou University in South Korea, I introduced a novel framework for procedurally generating game levels. Classic PCG for game level generation suffers from a lack of control over desired constraints, such as solvability or controllable difficulty. Thus, instead of going the classic way of generating level geometry that fits desired constraints (and as a consequence usually severely limits the generative expressivity), I focus on creating the player's experience (named playthrough) first and subsequently simulate this playthrough into playable content using the game's actual rules/controls/physics. In this way, as long as the playthrough is not destroyed anymore, solvability can always be guaranteed and the difficulty can be tuned without having to worry about making the level unplayable. Demonstrating the applicability of my framework, I developed a 2D platform game (Mario-like, reactive controls). Basic playthroughs are created using simple heuristics (a minimal set of blocks that form a possible path, alternatively a timeline of player actions), the playthrough simulation is done using an A* and rule-based AI agent that plays and solves the playthrough and thus concludes with a definite solution. Content is created in the last step using Perlin Noise and Cellular Automata as well as obstacles placed. I presented this work at the nucl.ai 2016 conference in Vienna.
|Team||Prof. Gyuhwan Oh (supervisor), Me|
|Development||Java, libGDX, free graphics|
I developed StaBlock (Android, iOS) as part of a small team at Ajou University (Suwon, South Korea) as well as the company Od (Seoul, South Korea). StaBlock is a typical physics-based (Box2D) puzzle game and the successor of Risky Blocks (developed by the same department); a destructible bead has to be protected from other gravity affected objects by smartly placing blocks, ropes or changing attributes out of a given sortiment. The game ships a fully functional level editor as well as an online browser that allows sharing levels with other players. Due to timely problems, we paused working on the game.
|Team||Prof. Gyuhwan Oh (director), Seokkyu-Kim (game design), Minjin Ko (game design), Od - Hana Lee (artist), Me (programmer)|
|Development||Java, libGDX, Box2D, Amazon Web Services|
Evaluation of Event Detection Systems in Twitter
This is the work done for my master's thesis in computer science at University of Wuerzburg, Germany. Event detection deals with the algorithmic detection of events (e.g., a terrorist attack) from a given set of input documents. I performed an in-depth evaluation of three state-of-the-art event detection algorithms using Twitter as input source. Twitter is especially challenging due to the immense scale of data generated (especially lots of meaningless data), typographical errors, bad grammar, abbreviations and mixed language. To this end, I self-crawled the biggest available and annotated Twitter corpus containing 120 million tweets. I implemented three event detection systems that seemed to be applicable on this scale and ran them against the corpus. Using typical evaluation measures in information retrieval, I was able to provide a detailed and objective comparison.
|Team||Prof. Dr. Andreas Hotho (supervisor), Dipl.-Inf. Martin Becker (supervisor), Me|
|Development||Java, Spring, MongoDB, Twitter4J|