top of page
 
Crossy Road remake

Tools: C++, DirectX, HLSL and Autodesk 3ds Max

​

Using the Overlord Engine, I made a remake of the mobile game Crossy Road. I chose this game because of its small scope, giving me more time to work on nice effects to really polish the end result.

 

Some stuff I am quite proud of:
- The trees move slowly as if the wind is blowing. This is achieved through a vertex shader. The trees also cast real-time shadows.

- The water shader uses noise textures and time, to create the illusion of moving water.

- The level generation is endless, and always makes sure that the created level parts are actually possible to traverse.

- If you're familiar with the original game, you might notice that the art style of my remake is very similar. I did however make all art assets myself.

​

Crossy Road

Tools: Unity, C# and HLSL

​

Detritus was one of the finalists of The Rookies Awards 2020! Here's our submission page.

​

This game is a group project I worked on together with another programmer and two artists. In the span of twelve weeks, we went through the whole production process, from prototyping to polish. In the end, we achieved a result I'm really proud of.

​

My main responsibilities included:

- All game mechanics related to the engineer. Planning, crafting, picking up and placing items, etc.

- The toon shader used by all assets in the game, as well as the water shader.

- The start screen with the mechanics to easily add game controllers and choose the character you want to play as.

- The triggered events happening in the level. Opening chests and opening doors, a door closing and enemies spawning in the room, a bridge collapsing, etc.

​

You can download Detritus on itch.io!

There you'll also find the weekly devlog we wrote

throughout the development of the game..

 
Detritus
Detritus
 
Aqua Mundo

Tools: Unity, C#, HLSL and Blender

​

Aqua Mundo is a waterpark simulator game. Because it is such a big project, I have given it its own page with an overview of the different elements of the game and some of the techniques I am using.

Click here to find out more about Aqua Mundo.

​

aqua mundo logo transparent.png
Aqua Mundo
 
Raytracer and rasterizer

Tools: C++, DirectX and HLSL

​

Starting from a small framework that could draw pixels to the screen, I created my own raytracer and rasterizer. The rasterizer can switch between the CPU and GPU. It can also load mesh files and textures, and display them on the screen. Using the keyboard, you can fly around through the scene.

I also implemented my own PBR materials.

bunny.bmp
Annotation 2020-05-08 020101.png
Raytracer and Rasterizer
 
Glengine + Bubble Bobble
Glengine

Tools: C++ and SDL2

​

I made my own 2D game engine, that I then used to recreate some levels from the classic game Bubble Bobble. You can find the source code of the engine and the game right here on gitlab.
 

...

About the engine:

  • With this engine, I wanted to go the data oriented route. There are different types of components, and they consist of data only. All logic is found within the managers of those components. So instead of updating, say, every game object with its components one after the other, and the logic being included in the component class, all components of the same type are grouped together in memory and batched per type.

  • A manager goes through every component of its type, and updates the data inside those components. GameObjects are merely pointers that get used to tie together different components, but GameObjects themselves don't have any knowledge of the components they "have". One thing that the GameObjects do have, is transform information. That way, every object has a position and each component can easily access it, because the components do know what object they are connected to.

  • When making a game in an engine, you want to add custom functionality of course. That's where the logic components come in. These components can contain functions that the game developer can create, and easily add to the Update loop.

...

Some specific comments:

  • Components are also subjects, and observers can easily get added to them so they get notified of changes.

  • Want to include AI in your game? The BehaviorTree class will make it easy to add functionality to your NPCs. The behavior tree logic is also multithreaded, so having a lot of NPCs in your game shouldn't be a problem.

  • Physics are also in the engine (custom written).

  • There's a Command class, and this can be used to add functionality whenever you need it. It is most powerful when used in the input manager. Just add a command to that manager, and specify which buttons should be assigned to it. Multiple input layouts for easy switching / disabling of commands is also supported.

  • The audio system is a service locator, which makes it easy to switch between configurations.

  • Playing sounds, displaying textures and rendering text is of course possible. Textures can also easily be made into sprite sheets. Animations within those sprite sheets are also supported.

​​​​​​​​​​​​​​​​​​​​​​​

Annotation 2020-06-24 103950.png
screenshot2.png
 
Self-teaching Snake AI
Snake AI

Tools: Unity and C#

​

This project was my first step into the field of machine learning. I created a simple Snake game in Unity, and a basic neural network class. This class takes in a certain amount of inputs, pushes it through a certain amount of hidden layers, and spits out a certain amount of outputs. These hidden layers have weights and biases, and modify the data moving through them. After a lot of trial and error, I was able to make the game "understand" the rules of the game, without me explicitly explaining them. The source code is available on gitlab.

​

My experiment ran with 100 Snake games at a time.

I tried giving the position of the snake on the playing field, and the relative position of the snake head to the candy, as input values to the network. I used the output of the network to choose if the snake should go a certain direction (up, down, right, left).

I then evaluate if a network does well. This means that it has good values for the weights and biases, so that it outputs a value that makes the snake move towards the candy in order to gain points.

​

When all 100 snake games are over (because the snakes either moved out of the playing field or did not manage to collect candy for a long time), the best performing half of the networks are kept for the next iteration. The other half are thrown away, and replaced by mutations of the best half. This means that the weights and biases of those best networks are slightly modified.

After a lot of iterations, the networks really start to get good and have "taught" themselves to avoid the edges of the playing field and always move towards candy.

​

Some stuff I would like to try out in the future:

- Right now, I select the fittest neural networks in a very crude way, by keeping the best performing half and replacing the worst performing half with mutations of the best performing half. Tuning this selection algorithm could help a lot in achieving results faster.

- Experimenting with different inputs, outputs and number of hidden layers could improve results as well.

- Right now, the snake doesn't grow bigger when eating candy. I'd like to experiment with this in the future to find out how this would affect the neural networks.

​​

 
Tetris in asm
Tetris

Tools: 6502 assembly language and this simulator

​

To get to know the assembly language, I followed a tutorial on how to create Snake for the MOS 6502. I had already written a robot AI for the Assembly Cup, but now it was time to create a small game in the language.

 

Together with another programmer, I worked on a simple Tetris version for the MOS 6502. You can rotate blocks, accelerate the falling block, force it down at once, and move left and right. Full lines get cleared, you earn points for clearing lines, and the game ends when a new block is obstructed from spawning at the top. It was an interesting learning experience to program something in this low-level language.

​

clearing lines.gif
clearing 4 lines.gif
 
New Kaywan

Tools: Unity, C#, HLSL and Blender

​

New Kaywan is a solo project, currently on hold. 

 

The game has an open world. It will consist of several areas with creatures living in them. You'll be able to get to know the creatures, as well as helping them out by delivering packages, solving mysteries etc.

 

This is a passion project of mine that I hope to one day have the time to work on again. For now, the ideas for this universe are staying mostly inside of my head.

​

New Kaywan
 
Portals experiment

Tools: Unity, C#, HLSL and Blender

​

I had an idea for a game where you walk around in a big desert-like area with portals to other dimensions scattered across it, meeting fellow travelers along your journey.

 

This made me start experimenting with render textures and custom shaders in Unity in order to create seamless portals you can walk through.

​

This is a project I definitely want to start working on again, once I have the time for it.

​

Portals experiment
bottom of page