Expand Your Land
Year: 2021
Language(s): C#

Prototype of a simple turn-based strategy board game about taking control of territory. The game is free to play (browser), and is available on Itch.io. This simple project is used as a way to practice design principles and design patterns (e.g. command pattern). I also aim to add networking to the game and to push it to mobile devices, such that players can play using each their own devices on a local network, or to create online lobbies.

Expand-Your-Land
Placeholder Img for Expand Your Land
Gondola's Adventure: Endless Adventure
Year: 2021
Language(s): C#

Gondola's Adventure: Endless Adventure is an endless climbing version of Gondola's Adventure, developed for Mobile devices. How far can you climb? Free to play and available for Android on Google Play!

Get it on Google Play

Gondola's Adventure: Endless Adventure Trailer
Gondola's Adventure
Year: 2020
Language(s): C#

A 2D precision platformer game released on Steam, Gondola's Adventure was built to procedurally generate levels to allow for re-playability. The game was developed in Unity.

Gondola's Adventure Trailer
DialogueMemoryBot
Year: 2020
Language(s): Python
Project: Github

An important aspect of building rapport in human-to-human interaction is the existence of memory. Using memory in chatbots was chosen as a research topic for the sake of contributing toward the development of chatbots with long-term engagingness. I worked with question answering (self-disclosure) with long-term and short-term memory for a social chatbot. The chatbot is focused on a limited domain, e.g. getting to know someone for the first time. It consists of template, retrieval and generative components. The template component is used for consistently answering questions regarding preference, "What do you think about apples?", "What is your favorite sport?". The retrieval component contains some common questions and answers asked when getting to know someone. The generative component is used to handle any remaining question by over-generating candidate responses with GPT-2 and then performing ranking to find the most suitable answer. The question answering agent was made available as a callable API to be used with a memory based question asking agent, made by a colleague.

Example agent interaction (3x speed-up)
Boids - Blender plugin
Year: 2019
Language(s): Python

A simple flocking tool/plugin was created for Blender by using the Boids algorithm (separation, alignment cohesion). The tool allows for using your own model as the boid, spawning N number of boids, adjusting the parameters affecting the flocking behavior, telling the boids to follow a 3D curve (path), and spawning predators.

Tetris
Boids in Blender
Simulated Rocket Landing by AI
Year: 2019
Language(s): C#

An AI (Fully connected neural network, 9 input layers, 2 output layers) was taught how to safely land a rocket on random terrains by the help of genetic algorithms. The project was made with Unity. A group of agents act in the environment with randomly initialized weights. A fitness function calculates a score that determines which agents are performing the best, based on desired behavior, e.g. staying upright and moving toward the goal. Then a new generation of agents are created by crossover. Each new agent is created by considering/taking weights from two parent agents (e.g. 2 of the best performing agents). Then random mutation is performed and the new population act on the environment. This process is repeated until the AI learns the behavior that result in a maximized fitness score, e.g. landing safely. The agent gets 9 inputs every 0.02 seconds that helps it decide whether it should activate any or both rocket thrusters.

Illustrating the training phase and the trained agent
Procedural Fire&Smoke
Year: 2018
Language(s): C++ / OpenGL / shader programming

An attempt was made at procedurally generating fire and smoke by using Perlin noise in OpenGL. This was done by generating Perlin noise in different scales and animating it, applying masks such that noise values below a threshold gets a certain color. The flame in focus is built up by three different scaled noises, the biggest being the main flame, the second one being flares, the third one attempting to simulate minor flame particles. An additional noise was used to try to create individual dancing flames within the main flame, by subtracting parts from it.

Tetris
Animated Procedural Fire&Smoke
AI Puzzle Game
Year: 2018
Language(s): C#

A short project where the base mechanics of a puzzle game with AI agents was developed. The puzzle concept is dragging boxes onto platforms to open doors. It consists of three agent types: troublemaker, follower and guard. The troublemaker will drag boxes off platforms when no one sees. The follower counteracts the troublemaker by acting as a supervisor. The guard patrols an area and will chase trespassers. More levels need to be designed and some mechanics need to be tweaked before it can be released. Project currently on hold.

Tetris
AI Puzzle - Troublemaker illustration
Arts of the Elementalists
Year: 2018
Language(s): C#

The game revolves around the four elements where the main character will have to find each master of each element to learn them all. Enemies are of different elements as well, and the damage dealt to them depend on the element that the player is using. The game was developed as part of a course called "Design and Programming of Computer Games", and as such the focus was on designing progression and feedback rather than creating a finished product.

Arts of the Elementalists demo
Gorilla Fighters
Year: 2018
Language(s): C#

Temporary Name: Mobile Super Smash Bros.
Summer of 2018 I felt like creating a game. I decided to do a Super Smash Bros. like game for mobiles by myself. The task consisted of 3D modeling, animating, network programming and programming mechanics. The project was a bit too much work and was put on hold indefinitely.

Tetris
Gorilla Fighters demo
Animal Approach
Year: 2018
Language(s): C#

The task was to create a social game where people had to physically move around (a desk) to play it. Our group developed a capture the flag type AR game using Vuforia and Unity. The game consists of 4 animal characters with each their own unique ability and passive. Each character also had the ability to steal a flag when close enough. My role was mainly programming game mechanics and everything network related.

Animal Approach (Swedish) trailer
Pocket watch Gear Simulation
Year: 2018
Language(s): C++ / OpenGL

Gears in a pocket watch was simulated in OpenGL by calculating the forces that impacts each gear (driving forces and breaking forces). A publicly available 3D modeled pocket watch was found and used. Main part of the work was calculating the ODE and then using Euler method to calculate velocity. With the velocity, an angle could be found which could then be used to calculate how much each gear should rotate. The gears then rotate and as a whole represent an accurate clock running in real time. Some simplifications were made such as an arbitrary friction constant and that the driving force is constant.

Pocket watch gear simulation
Grow Up
Year: 2016
Language(s): C#

The game is a runner type for android which was made in Unity for a course in 'Communication and User Interfaces'. Concept of the game was for the character to start as a baby and go through different stages as it grew up: kid, teenager, adult, middle aged and senior. Due to the scope of the course, only the baby stage was implemented. My main role was that of programming the game mechanics, while others worked with art and game design.

Tetris
Sped-up Grow Up gameplay
Link: Lost in Mario World
Year: 2015
Language(s): JavaScript, HTML5

Made with HTML5 and JavaScript, it was a Super Mario Bros. type game hosted on the web server provided by the gymnasium. The game had Goombas, high-score and animations (using publicly available sprite-sheets). By using AJAX, high-scores were updated in real time. The project was part of the final work of gymnasium, 2015. It was quite challenging to program everything from scratch, by just using the canvas element of HTML5, especially the collision detection. The resulting game was a bit laggy with the collision detection being calculated on every unit.

Tetris
Link: Lost in Mario World gameplay
Forum - Web Server Programming
Year: 2015
Language(s): PHP, MySQL, CSS

Forum - Web server programming course
For the final project in this course I created a forum with PHP and MySQL. The forum allowed for creating threads, in each thread users could create their own sub-threads. On each sub-thread users could comment, cite others and edit their own comments. Threads could be deleted by the creator or by admin type users. It allowed for registration and login, but no user customization. The MySQL tables were kept in a database provided by the gymnasium and are since then lost.

Tetris
Year: 2014
Language(s): C++

As a final project for the introductory programming course in 2014, we got to freely choose our own projects. I chose Tetris as a challenge as I had heard no previous student of the teacher had succeeded so far. I created the basics of it in a very hard-coded manner with a lot of repeated code.

Tetris
Sped-up Tetris gameplay