I'm Kaspian,
A Gameplay &
Tools Developer

I'm a game developer and student at The Game Assembly who has been programming for the better part of a decade and who specializes in developing gameplay and tools.

My resume Linkedin

I'm hooked already, just take me to the contact section

More about me

My name is Kaspian Ringqvist and I live in southern Sweden. I have been programming for almost half my life and what started with making cool things in Unity just for the fun of it quickly turned into much more and now - a couple of years later - it is what I'm hoping to do for a career. I'm comfortable with at least half a dozen programming languages and spend my days either playing games or creating them as well as working on everything from websites to Discord bots in my free time. Why don't you continue scrolling and have a look at what I've done during my time at TGA?

Tools

I enjoy tools development a lot and at TGA I've been involved with a number of tools ranging from level exporters for Unity to visual scripting solutions. My specialization even revolves around tools development.

Gameplay

Gameplay is what I've worked with the most during my time at TGA and is also something I enjoy. During our game projects I've worked on everything from AI and interactables for mobile games to audio and collision systems.

My programming journey in 4 parts

2016 - 2017

Technically one might say that my programming journey started 8 years ago when I won a competition with a game I made but that was done using visual scripting with blocks you dragged into place so I would say that it started properly a little later when I got into Unity. I made a lot of things using Unity but, except for one very small and rushed game jam game, never anything I released. I was much more interested in learning as much as possible and experimenting so mostly just played around with all of what the engine had to offer and by doing so also got very comfortable with C#.

C#
Unity

2018 - 2019

After Unity I branched out and started learning other programming languages. I taught myself JavaScript and some simple web development which I used to create really simple browser games for me and my friends to play during our breaks at school and I also briefly got into game modification and taught myself some Java to mod Minecraft. It was still quite simple and never released outside my friend group but it was a lot of fun and was the first time other people got to try my things.

JavaScript
Web development
Java

2019 - 2022

In high school I didn't really have a reason to keep making games but took on some projects for an online group and made quite a few things for them which was an amazing learning opportunity. I got a chance to work on things collaboratively even if the groups were small, learned new programming languages, and most importantly got to build things that would actually be used by quite a few people and did so completely from scratch. This taught me a lot about structuring medium to large software projects that would require continuous updates and I've made everything from user-facing tools and websites to backend servers and libraries.

TypeScript
Databases
Git
APIs
UI/UX
Small scale collaboration

2022 - 2024

And last but not least we get to my time at The Game Assembly. I'll cover this in way more detail further down on this page when I talk about the projects I've worked on and my specialization but to briefly summarize I've had a hand in almost everything across both the projects and my individual courses. I had not worked in C++ at all before TGA so that was new to me but now I feel very comfortable with it. I'm sure there are more things for me to learn but I know it well enough to be on par with the rest of the class and think it helped me a lot to already be familiar with writing and structuring code.

C++
Perforce Helix
Custom engine
Large scale collaboration
more that I'll mention further down

Core competencies

C++

As it was the language primarily used at The Game Assembly I am very comfortable with C++ and know it well.

C#

C# was the first language I learnt and I became really good at it during the years I used it. I might be a little rusty now but I think I'd quickly get back into it if I started using it more.

Unity

Unity was my go to engine for very long and was even briefly used at TGA. I am very comfortable with it and even made my specialization in it.

Other
Coding

I know multiple other programming languages. JavaScript/TypeScript is what I've been using the most but I have experience in Java and even briefly touched Python and Lua.

Source
Control

I have worked with both Git (using GitHub and GitLab) and Perforce Helix as source control softwares.

English

While not exactly a rare thing to know I speak English almost as much as I speak Swedish nowadays and have exclusively spoken English on the projects I've done outside school so know it very very well.

Projects at TGA

Mothia #7

Description: This game project was a lot freer with 3 very different reference games to choose from but we went with Jak & Daxter and made a 3D platformer with a heavy focus on exploration and light combat elements. This was the first game project I transitioned to tools development for.

My contributions:

  • Alongside one other programmer I implemeted our visual scripting solution
  • Worked on our level editor and did a number of things there

15 weeks

18 people

Custom engine, C++

PC

The Firefly Café has been raided by the Mothia! As a mercenary frog; jump, roll, and spin through the seedy underbelly of the lighthouse island to retrieve the fireflies.

Reference game: Jak & Daxter

GOSpiTe #6

Description: This was a third-person combat game with a fixed camera and we had to use Diablo 3 as our reference game. I almost exclusively worked on gameplay as I was solely responsible for the enemies and everything that came with that.

My contributions:

  • Was responsible for implementing all 5 types of enemies and their underlying structures
  • Built a custom state machine and handled everything from animations to physics based projectiles

10 weeks

18 people

Custom engine, C++

PC

Leap into battle and use your rage to battle your way through Helheim to save your brother from Hel and her undying legion.

Reference game: Diablo 3

G.O.S.T. #5

Description: This was made for a very short game project designed to get us familiar with working in our own engine. It was a puzzle game where you moved on a grid and had to collect items and interact with objects to progress through a small lab.

My contributions:

  • Was responsible for implementing all interactables
  • Implemeted some audio

4 weeks

18 people

Custom engine, C++

PC

Assist the overworked scientist as he is haunted by his own experiments, is it real or all in his head? Call for help!

Reference game: The Legend of Grimrock

Watch trailer

Tårta och Demoner #4

Description: This game was created in TGA's in-house engine and was a top-down adventure game with a heavy focus on combat. This was the first project I did some tools development for but I also helped out here and there with audio and other gameplay things.

My contributions:

  • Created an editor extension that lets you start the game from Unity and handled exporting levels from Unity and importing them into the game
  • Did some gameplay things such as destructible objects and audio implementation

8 weeks

13 people

TGA's engine, C++

PC

You're a demon slayin' kid and it's your little sister's birthday! Fight your way to the store through a Swedish town, return home and bake that cake!

Reference game: Moonlighter

Watch trailer

PitFoil #3

Description: This was the first game we made using TGA's own engine and was a 2D platformer with a heavy focus on aesthetics and feel. I was more or less solely responsible for implementing audio using FMOD but also worked on some other gameplay aspects and collisions.

My contributions:

  • Some interactables and other gameplay objects
  • Audio implementation

12 weeks

13 people

TGA's engine, C++

PC

Reawaken a once Desolate Steel Mill and manipulate its Forgotten Technology to overcome its Automated Defense System

Reference game: Limbo

Watch trailer

Library of Illusions #2

Description: For this project, which was done in Unity, we took inspiration from the puzzle game Monument Valley to create a game that was all about optical illusions and perspective. This time I almost exclusively worked on interactables and other moving parts in the game world.

My contributions:

  • All interactable things in the world and their foundation
  • A number of other moving parts triggered by buttons and similar

6 weeks

12 people

Unity, C#

Phone

As an owl, climb your way up the library while solving puzzles based on optical illusions to aid the Grand Owl

Reference game: Monument Valley

Watch trailer

Scatter #1

Description: This was our first project and was supposed to be an endless runner-type game although in our case split up into levels instead of infinitely generating. It was created in Unity, featured 2 levels, and, as we didn't have much time and were just getting started, I had no dedicated role in this project.

My contributions:

  • Handled collision detection
  • Implemented playing of certain animations in code

6 weeks

13 people

Unity, C#

PC

Play as a muscular Cockroach running your way through stages and avoiding obstacles!

Reference game: Temple run

Watch trailer

Specialization

Background

For my specialization, I decided to delve deeper into tools creation by expanding on an idea I had during game project 4. This idea was a level exporter for Unity that wouldn't just export your level with a button but notice the user pressing play and doing so automatically in addition to generating and/or copying many other necessary files.

I knew I wanted to do something to do with tools as I hadn't gotten to do that very much before this point but this idea also felt both fun and challenging as it would expose me to several things I hadn't done before and left a lot of room for trying to improve convenience and ease of use which I enjoy trying to maximize.

The concrete idea

I wanted to create a level exporter for Unity that focused heavily on convenience and ease of use and even simplified parts of our pipeline. I wanted to design it in such a way that it could work for nearly any project but decided to export the files in a way that would work for our custom engine as I was familiar with it and figured it would make it easy to test and structure the tool.

A step-by-step guide covering what my exporter does

Export level

  • I created my own way to save data to JSON. There are a whole number of prebuilt ways to do this (including one that comes with Unity) but none really worked for my purposes and I also wanted more of a say in how objects are stored.
    • This makes it trivial to edit the format of basic objects. Want vectors or colors as arrays instead of objects with properties? That's a 30-second change. Want it to also include a property for its type so that we know that it's a 3D vector? No problem.
    • My system also handles lists very well. It works recursively so can serialize nested lists or objects.
  • I used reflection to get all fields and properties of any class and save it, no matter if it comes built-in as part of Unity or is custom-made. Our engine is built on a component system so I wanted the exporter to easily support creating components in Unity that just store data and export that data to be used in the game.
    • Say you want to create an enemy spawner for example. Make a component in Unity that stores all the necessary data (what enemy to spawn, how often to spawn them, where to spawn them, etc.), and then all of that will be exported automatically without needing to touch the exporter. Level designers can then easily edit all that in the level editor and everything will work in game.
  • I hard-coded some commonly used components. This allowed me to add more advanced functionality for those or display them in a custom way for convenience.

Example of a component exported using reflection - only the name and whether or not it was enabled was hard coded

Prepare files

  • I copy the needed files from the asset folder in Unity to the game's asset folder. This was used for meshes and textures since those are used in both places and the graphic artists appreciated only having to place their files in one folder as opposed to two.
    • I also use a command line utility to convert the PNGs to DDS files. Our engine uses .dds but our artists create their textures in .png which is what Unity uses so not having to convert it every time saved them time. For bonus points, the command line utility used will be downloaded to the user's computer if they don't have it installed instead of having to do so manually or keeping it in the files you'd push to Perforce.
  • I create JSON files for all materials. Our engine uses JSON files for each material to keep track of all its textures, how metallic it is, etc., and creating that manually was a pain and caused a lot of problems. We did create a tool for it in our editor that we used for the game projects but I figured I'd add it to my tool as well.
  • I keep track of the exported files in a JSON file. I didn't have time to work on this quite as much as I would have liked to because I was planning to store all the exported files along with a hash to keep track of changes (alternatively I could use the timestamp of the last edit in Windows but hashing would most likely be better) and that way I wouldn't have to export the same file more than once. I still do keep track of everything I've exported in a file to more easily remove files that were used at one point but have been deleted since though however if I would have had another week or two this is the part I would have kept working on.

Start game

  • I start the game automatically. I start the game correctly right from the editor and even pass along what level we were just in so that that level can be started without having to go through the level selection.
  • Optionally, the things logged to the game console can be sent to the Unity console. In case of crashes and similar this is sometimes useful.

How did it go?

Creating the tool went very well and didn't cause me any major issues. I initially tried to use Unity's built-in JSON utilities which didn't really work for what I wanted to do and my attempt to use a different one also didn't work because Unity blocks it (probably to encourage the usage of their one) so there I lost some time but that was probably the biggest issue I encountered and didn't bother me as it gave me a chance to build my own which was a good learning opportunity.

The only other thing I can really think of that became a problem is that the tool can be a bit slow sometimes, especially when converting a large number of textures to DDS, so if I was to continue working on it I would definitely try to improve that by either looking at more efficient ways to use the converter or only exporting and converting the PNGs when something has changed (by using hashes as explained above).

Showcase

Contact me

Kaspian Ringqvist

Phone: +46 73-532 86 54
Email: kaspianringqvist@gmail.com

Internship Disclaimer

I am part of The Game Assembly's internship program. As per the agreement between the Games Industry and The Game Assembly, neither student nor company may be in contact with one another regarding internships before April 23rd.

Any internship offers can be made on May 6th, at the earliest.