Portfolio

Here you can find some of my more notable projects. For more information about a project simply click on its name.

Engines and graphics


Pixel trader

Pixel trader is a prototype of a local multiplayer game where two players shoot each other with bows in a small arena (similar to TowerFall Ascension). It is built mostly from scratch on top of a custom engine which serves as my experimentation playground. The game itself uses simple archetype Entity Component System implementation inspied by FLECS.
The most interesting part of the engine is probably the renderer written in Vulkan. There are also custom containers, math library, and anything else I find interesting to try to implement myself. I try to use as few libraries as possible here while still gettings things done.


DirectX examples

Introduction to the DirectX 11 API. Starting from a simple "Hello triangle" example step by step introduces more advanced techniques such as texturing, shadow mapping, and normal mapping all the way to deferred rendering and screen space ambient occlusion (seen on the picture with intermediate buffers and G-buffer displayed on the right). All this is done in a simple but powerful custom framework which allows creating new examples with ease and encapsulates known methods to objects.
Currently used for education at Charles University.


Vulkan renderer

This is a learning project where I experiment with various rendering techniques such as physically based rendering, image based lighting, and more. It is written on top of the same engine as Pixel Trader.


Platformer engine

Platformer engine was my first attempt at an engine. It was mostly a learning project where I explored how to tackle problems of much bigger 3D game engines such as resource management, system communication, and decoupling of rendering backend and the game. It is written in modern C++ and OpenGL using GLM for math and Box2D for physics.
Some of the interesting techniques used are: entities and components, automated instanced rendering, resource management, loosely coupled systems communicating via a message bus. During the development, I've read many articles online as well as I drew some inspiration from the IdTech 4 engine.


Artificial intelligence


Children of the Galaxy combat AI

My diploma thesis project, where the goal was to create an artificial intelligence for a 4X game Children of the Galaxy (CotG). The AI does not play the whole game but focuses on the micromanagement of units, since that is the basis of any decent AI. To do that several modified versions of the Monte-Carlo tree search (MCTS) algorithm are used and compared to regular script-based approaches as well as Portfolio greedy search algorithm. A new variant of MCTS called MCTS considering HP wins over all other methods. A followup paper we did is currently accepted to AIIDE.
To be able to use search approaches I implemented a game simulator called CotG micro simulator which provides a forward model. To evaluate the different AI approaches efficiently I also implemented a benchmarking framework which is highly configurable and saves the data to a SQL database from which we can easily generate graphs using a series of scripts.


Countering BroodWar bot AI

My bachelor thesis where I explore strategy prediction and countering, and scouting in the context of real-time strategy games specifically StarCraft: BroodWar (SC). Using previous work of Gabriel Synnaeve which focused on strategy prediction, we implemented his Bayesian predictor to existing SC bot called UAlberta bot. We also added advanced scouting mechanisms which send scouts in times where the value of information is assumed to be the highest. The resulting bot, while not being able to win our little tournament, was able to successfully counter some common openings.


Tetris AI

My entry to the theaigames.com Tetris competition called Block battle currently moved to riddles.io. The bot uses genetic algorithms and hill climbing to learn weights which it then uses to evaluate states. The state evaluation is used in search, when the bot tries all possible ways to place the current piece.
The bot was developed during the beta stages of the competition and the rules of the final version were different. Even though I did not change the bot according to the final rules, it got into the playoff stages where it was eliminated in the first round.


Games


Fruitons (originally Besought)

A crossover of chess and Hearthstone. Made in Unity as a (nine-month) software project in four people at Charles University. The game features online multiplayer, social features (friends, chat), achievements, solo play versus AI, different game modes and more. Available at Google Play.
My main contribution was the implementation of the actual game simulation system (Kernel), which was challenging since we had C# game client and Java backend. The Kernel was therefore done in Haxe, for me a completely new language, which is transpilable to C# and Java. Since we were not set on the actual game mechanics, it is implemented as a rather generic framework for turn-based games.
My other major contribution was to various aspects of the Client including draft mode, AI, visualization, and overall game design and architecture. The project's repository is on Github.
To play the game you can either install it from Google Play or download it here for Windows. In the main menu select Trial which is an offline mode since the servers are currently down.


Spring

Point and click adventure game with time rewinding mechanics. Developed as a semestral (three-month) project for Computer Games Development course at Charles University. It was made by four people in Unity using Spine for animations.


Cat Saviour: The rain is comming (jam)

Logical platformer game where the goal is to save all the cats in the level and the twist is that you are heavier the more cats you hold. The cats (when awaken) can also walk around, not making it easier for you (as in real life :).
Can be played in a browser at itch.io. This is a Ludum Dare 40 entry made in 72 hours in Unity by two people.


Date or Die (jam)

Combination of a dating simulator and a roguelike game. You are not a very attractive demon trying to date a girl but first, you need to find her in a dungeon crawling with enemies. Each of the four girls is, in fact, an element and will give you special powers if you treat her nice. The goal is to reach level 3 with any girl but beware, each level-up ports you to a new procedurally generated dungeon with more enemies.
Can be played in a browser at itch.io. This is a Ludum Dare 41 entry made in 72 hours in Unity by two people.


Ant Factory (jam)

A simulation game where the goal is to produce required items while not running out of storage space. You can to place buildings which make products from materials and combine these to get the required products. To allow transportation of the products you need to build roads which are navigated by the transportation ants.
This is a Ludum Dare 42 entry made in 72 hours in Unity by two people.


Dragon Runner (jam)

You are a dragon, last of its kind. An evil wizard stole your eggs, the last hope to preserve your species is to take them back.
Simple "endless" runner game with hand-crafted levels where your goal is to collect 100 eggs as fast as possible while avoiding deadly bombs and traps. You also have two helpful spells at your disposal — shield and "time stop". Each has limited uses but more can be bought at the end of a level.


Grave Fallers (jam)

Grave Fallers is a racing platformer where you try to fall as deep as you can in a two-minute time limit either in sigle-player or in local split-screen multiplayer. In your way stand dangerous thorny platforms and fireballs. When you hit them one of your hearts is shot upwards in form of a pick up, if you’re out of hearts you are shot upwards yourself to respawn, losing some of the depth you’ve gained.