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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.