Spaceborgs

In SpaceBorgs, you are humanity’s last hope—a lone cyborg astronaut stranded on a space station overtaken by zombie-cyborgs. These twisted creatures are bent on unlocking the station’s forbidden secret to destroy Earth. Armed with an array of powerful weapons and your cybernetic enhancements, you’ll blast your way through intense levels filled with mutated horrors, darkened corridors, and the constant threat of annihilation.


Inspired by classic shooters like Doom, SpaceBorgs is fast-paced, easy to pick up, and packed with pulse-pounding action. Choose your weapons, unleash brutal firepower, and fight through the undead forces standing between you and the final showdown. Only by facing the station’s terrifying boss can you prevent an apocalypse—and it will take every ounce of courage and strength to make it through.


Can you survive the nightmare, unlock the truth, and save humanity from total destruction? The fate of Earth lies in SpaceBorgs.

Spaceborgs features I worked on

The Shotgun

This is probably the weapon I’m most proud of mechanics-wise. Although it had some balancing issues (didn’t do enough damage), it was really fun launching yourself in the air with the help of the recoil. And together with Petter’s animations it felt really smooth to use.

The Assault Rifle (together with Georgi)

Me and Georgi did this one together, we had to think outside the box to make it work with the input system, since the Mouse1 button is programmed to click only one time. So, we had to restructure the scripts a bit so the player is able to hold down Mouse1 and shoot. The result was pretty good, but we realized very late that the position of where the bullet spawns is delayed to where the muzzle point of the weapon is. So, if you move left or right the muzzle flare is a little off, but other than that it felt pretty good to use.

The Grenade Launcher

Although this weapon is very hard to use, it is still very fun to play around with. It was fun to launch all the enemies into the air, and also being able to launch yourself away. And Edvin’s particle effect for the explosion made the grenade launcher feel so much better as well.

Weapon Aiming

During the alpha, we realized that the weapons don’t shoot precisely at the crosshair, but instead shoots a little bit to the bottom right of it. To fix that, I made a common script for all the weapons, that does a raycast from the players camera. Then it takes the position of the raycast hit and subtracts it with the muzzle point of the weapon, that way the bullets always shoots in the direction of where the crosshair is placed.

Weapon pick-up and Inventory

This was the first thing I did during this project. You can pick up weapons from the ground and switch between them in the inventory. I think I spent a little too much time on this, because I wanted it to work flawlessly. There were a few bugs that caused the player to pick up any weapon in sight as long as he is close to only one of them, so I had to make an array named “WeaponsCloseTo”, then the player does a HandleBeginOverlap that only takes in AWeaponBase-objects. Then I also did a raycast from the player camera to pick up the weapon he is currently looking at. I also made a highlight material for the weapons.

Sliding mechanic and crouch

This was a really simple feature to implement, yet very fun to use. It acts more like a dash function since I did a “Launch Character”-function for the player. Then I just lowered the camera with the help of a Timeline, and there you go, sliding implemented!

Save/Load-system

This took way longer than I initially thought it would. I wanted to save the player’s inventory between levels, and I couldn’t use an array of pointers to save the weapons, since the weapons already had to exist in the scene for that to work. So, I really had to think outside the box, I made an array of strings instead that saved the path to the folder that the weapon-blueprint existed in, and every time the game/new level starts, it spawns new blueprints of the weapons in the inventory that are stored in the array. Then me and Edvin made a checkpoint-system as well, and we used the same script as the Weapon saving system to save the position of the player every time he had walked into a checkpoint.

Small parts of the melee and ranged enemies

While Fredrik and Liam did most parts of the enemy AI, I made a parent class called EnemyBase that consists of functionality that all enemies should have in common. I also implemented health to the enemies and did a bunch of collision settings for the enemy bullets to work properly. I also made the aiming of the ranged enemy accurate to where the player position is. And also fixed a bug in the behaviour tree that caused the enemies to stand completely still instead of roaming around. And also made the enemy ragdolls work properly.

Animations for the first-person arms and weapons

There was a lot of work I had done with this one that didn’t make it into the Gold-version. I had made an entire animation tree for running, jumping, falling and landing so the first person-arms felt much more alive. But unfortunately, Petter didn’t have time to make all those animations for his arms-mesh. And I couldn’t use Unreal’s default animations either since they didn’t go hand in hand with Petter’s shoot and reload animations. So it ended up with that we scrapped all those animations completely, so my animation tree didn’t come to use. Although I did implement the reload and shoot animations for all weapons that Petter had done, and I also used one of the default animations for the sliding mechanic, so it wasn’t the end of the world.

Settings menu

Just a very simple graphics settings menu to make it more playable on bad computers. It consists of resolution, graphics quality, VSync and fullscreen mode.

Enemy spawners and door functionality

Enemy Spawners and door functionality go hand in hand. I have a trigger box with a reference to a door that opens, and the door has a reference to an enemy spawner that spawns in a number of enemies. The enemy spawner checks if all enemies are dead, and then calls a function in another referenced door that then opens.

UI for weapon slots

Icon for which weapon the player is currently holding.