top of page

Abducted

Specifications

  • Second project

  • Genre: Puzzle game (for mobile)

  • Made in Unity/C#

  • 6 weeks half speed

My Contributions

  • Grid system

  • Tile triggers

  • Enemy AI

Grid System

Since our reference game was Tomb Raider Go, we were going to make a turn-based puzzle game. The player, AI, and other interactive objects moved around on tiles, so we needed some form of grid system to keep track of all that: which tile we were on, what the actor would do if the actor wanted to move in some direction, and so forth. And since I was responsible for softer parts of the game last time, I requested to work on something more technical. 

There were talks early on of writing our very own grid system, but the educators recommended against this. There already was a grid system in Unity, so we decided to use that. This was a fateful decision, since the grid system caused us no end of problems, and when we realized this, it was too late to refactor or rework. 

First of all, the grid system seems to be designed for 2D, so we had to convert to 3D-coordinates. We also noticed that we had to consider the fact that Z and Y axis means different in the two systems. We also used Dictionaries to store all our tiles, but this caused problems later when we could start to test gameplay. Essentially, the Dictionary would not allow two objects to occupy the same tile, so we had to compensate by having multiple grid system... and some way to convert between them. In short, a lot of conversions depending on magic numbers and in general a big mess, but in the end we had a finished game.  

P2_grid.jpg

An example of the hard-to-read code near the end of the project. 

Tile Triggers

Certain tiles had some sort of gameplay functionality, and the core of the gameplay revolved around using these functionalities in the correct way to solve the puzzle. Some examples include levers to open or close doors, breakable floor that would leave a hole when it had been stepped on a second time, and pushable objects that would block actors or trigger pressure plates on the ground. 

I was involved with this from the start, and of course there was a lot of overlap with the grid system. It was nice to also get a break from the problematic grid system sometimes, to work on something more gameplay related. 

There was a decent variety of functional tiles, which offered a range of challenges to implement. The saw blade trap would move on fixed path on the ground, but how does it know when it reached the end and needs to go the other way? And how does the saw blade trap know if there is something blocking the next tile? This required a different way of thinking to solve, compared to the lever which only needed to have a door object connected to it, and call the door Activate() function. 

Examples of functional tiles and the colliders (green boxes) used for their effects. 

Enemy AI

I made some contributions on some of the enemies. There was only a handful of enemies in the game. I worked mainly on the chasing enemy, the Rabbot. It should wake up and start chasing the player if the player was within two tiles from the player, and instantly jump and kill the player if adjacent to the player. 

This required knowledge of the workings of the grid system. In the end, we all had touched the grid system in one way or the other, and us programmers jumped around between tasks a lot, because there were a lot of leaks to plug.

I did enjoy working on the chasing enemy, though! Some interesting problems arose that needed solving. For example, how should the enemy respond if something blocks it's path when chasing? How do we want the enemy to respond? What kind of response makes sense, makes the game better? If a chasing enemy and a patrolling enemy wants to move to the same tile, which takes precedence? 

P2_rabbot.gif

The Rabbot enemy chasing the player, falling victim to a cracked floor tile. 

Team

We were Meatgrinder Studios.

​

Programmers

Filip Nygren, Henrik Park, Ventus Andersson, Kevin Fredin, Mateusz Salaga, Oscar Kempe Söderholm

Level Designers

Niklas Hagerman, Christoffer Janbris, Vincent Karagöz

Graphical Artists

Albin Günther, Emal Ghouse, Albin Bång

Animators

Arvid Aspeborg, Jonas Berggren

bottom of page