top of page

Burglar

Game Description

Burglar is a Stealth robbery Game. In Collabortation with Sony and developed for PS-VR2 . Where the player is a robber and break into homes and steal as much Valiables and as they can. Meanwhile try not to get caught by the People and animals that lives there, and also escape with their life.

PS-VR2                         Unreal Engine 5                      9 weeks                                           18 member                                 PlaygroundSquad GameProject 2

Platform         Engine               Duration                     Team size                Purpose                                

My main tasks as Lead Programmer was managing workload between the Programmers. Overlook that the distrubtion of work where fair. Meetings with other Leads, about what has to be implemented and if it is possible with our time period in cosideration.

My Contributions

Lead Programmer

AI Implementation

  • Greta (Grandma)

Greta patrols between diffrent rooms. The next room she chooses is depending on her needs and rooms that has something that fullfills that Need. Her Needs is as closely what Needs we human have, for example Sleepiness. The Need's value is increased at diffrent rates and amount. Greta chosses her next room to patrol to by a procentage calculation. This calculation calculates a procentage of every Need's value, based of all Need's values combined. Then the Program multiplies every procentage by 100 and puts that Need into the list that amount of times. The multiplication is made because it's more likely to take the Need with the Highest value. Then Picks a Random Index in the List. Lastly the Program finds a Room that fulfills that Need.

Need Calculation 

Greta Chasing and After Chasing:

After Greta has chased the player and doesn't see the player anymore and Then Greta will do one of two thing, which one Greta do is chosen randomly.

After Chasing Player

The Program checks if there are any rooms in front of Greta and within a distance of Greta and puts all rooms whom meets the criterias into a List. Then picks one at of them at random and investigate that room to see if the Player is in it.

  • Invesitigation

if Greta has also heard a noice during the last 5 seconds after she has chased the player. She can instead take a unoptinal path the location that the sound came from to surprise the player. This is made by usage of Unreal's UNavArea. Firstly the Program finds the closest room to the location where the sound came from. Every Room has figurable amount of NavAreas, then it finds the closest one to the Sound location and changes it cost to very high one. It leads to Greta when calculating her path to sound location, usually takes the shortest path, will instead this time see that taking the path through the NavArea will be very costly and then calculate a way around it. This was one of hardest problems for me to figure out during the Project. Firstly I thought of manipulate the calculated path for Greta and change the location of the points for her path, but I realized it would take a lot of time and debugging to make it work. Mostly checking if the Point is inside another object and make it unaccesible for Greta, and exactly how the design for taking a unopitonal path, programming wise would take too long aswell. Then i thought of implementing my own Unoptional path algorithm but i realized it would take too much of my time aswell and wouldn't be very Designer friendly also. After some reasearch i found UNavArea, that will manipulate the path finding for Greta to believe that walking through it will take a long time and then calculate a way around it. This i found would be solution that will take the quickest time to implement, but would take much time to test and rework and move the UNavAreas. At the same time it would be designer friendly, because they could move them and add more and configure them to get the best way of Greta taking a unoptional path.

  • Sneak

Magda Calling for Greta:

  • Magda(The Dog)

She will be asleep at a sleeping postion for most of the game, which is figurable points around the world. Unless she enters one of her two states:

Bark: She will stand still while the player is in her visible range and bark. That Greta will hear and Greta will move to that location, then the Dog will patrol for a small duration around a 6m Radius and search fo the player then go back to the closest Sleep position.

Search: While Greta is aware of the player is in the house, Greta can make a special action. Which is awake Magda and make her running and search for the player all around the house at a rapid pace. This will happen for a small duration then Magda will go back to the closest sleeping position

Safe Implementation

The Player has to Rotate the safedoor knob to a sequence of numbers to unlock the Safe. Then the Safedoor will be unlocked, so the player can retrieve anything that is inside the Safe.

Normally this is pretty simple to implement but because the project was made in VR and every object that supposed to be grabbed and interacted with had continuously Physics applied to them during interaction, to make them follow and rotating with the hands. Then at the same time make the Safe Knob rotate a certain amount every time it is supposed to, so it would rotate perfectly with the numbers on the Door Knob.

  • Safe Knob

After a while of discussions and trying, then realized i could make the UPhysicsHandle (that we used for making objects following and rotating with the hands) release the object, so it would not be under any physics at all, apply the rotation that i wanted and then say to the UPhysicsHandle to grab it again, so it would have know that the hands are interacting with the Door Knob. Then i could just check the rotation of the hands from the last frame and this frame, to see if there has been a big diffrence in either direction and later apply the rotation that i wanted.

  • Safe Puzzle System

On berfore hand i knew how many rotation clicks it needed for the Safe door knob to rotate for a number to be exactly upwards. Then i just checked if it was right number the safe knob was on depending on the number sequence. If it was just moved on to the next number in the sequence or if it was the last number in the sequence, the door would be open.

Specialization

Project Description

It is a 2D Maze procedural generation in a 3D World. The Maze are small grids of mazes that are generated and when the player is close to a Maze chunk that does not exist then the Program generates and creates it and a 3x3 box of Mazes around that maze. Then some of the walls of the newly generated mazes are removed, so they blend in with the Rest of the maze. During the Project it was a lot of optimization aswell

Windows                        Tengine                                4 weeks                                           1 member                                 Specialization Project

Platform         Engine               Duration                  Team size             Purpose                                

Maze Generation

The Algorithm used for generating the Maze are Depth-First Search. It starts at a random node in the new Maze grid. Then selecting nodes that are next to it that has not been selected. When there are no nodes left, then it backtracks until it is. This process will continue to run until all nodes has been selected. Then the algorithm backtracks through the route that has been generated and removes walls to make a path.

Procedural Generation & Optimization

If the player walks close enough to another Maze Node than the Current Maze Node that the player are in, Then the Program checks if that Maze Node in that direction have been made. At the same time it checks all surrounding mazes if they exist. If any of those mazes are not existing then it will be generated and created. At the beginning i had so the program generated only the maze in that direction and not the surrounding ones, but i realised that if the Player was unlucky with the Maze Generation, then the Player could see outside of the whole big maze all together and that was not my intention. Later i made it generate and create the surrounding mazes aswell

In the beginning i just iterated over all existing mazes to find if the surronding mazes has been generated but after a while when a lot a Maze Chunks has been generated, the performance went down by a lot. Then i realized i could make it faster for searching through larger amount of Maze Chunks using Binary Search. Of course depending where in the List the Maze Chunk that the Program is trying to find, then iterating can be a little faster from time to time, but in overall binary will be faster when the amount of existing Mazes gets larger and larger.

Later i realised because many mazes could be generated at the same time, will affect the Performance a lot. I decided to use Multi threading, so the Mazes are generated and created on diffrent threads. Every time the program will generate a maze, it is assigning that task to a random thread.

  • Multi threading

At first i just loaded a new model of the Maze Wall for every wall in newly created Maze Chunk. Afterwards i notice that the performance went down pretty quickly, more and more for every Maze Chunk that was being created. Instead The Program renders the same Maze Wall model at the Matrices where the Maze Wall is supposed to be every frame.

  • Mesh Instanced Rendering

Overall overview of the Project:

Full Moon Fears

Game Description

Full Moon Fears is Stealth, Reverse Horror Game. The Player plays as a Werewolf and have to Escape the Level. Meanwhile avoid the Villagers that is trying to hunt the Player Down.

Windows                      Unreal Engine 5                  6 weeks                                               10 member                                   PlaygroundSquad GameProject 1

Platform         Engine               Duration                     Team size                Purpose                                

My Contributions

Player Implemenation

The Player's Movement started as being a third person point and click Movement. Then if the Player clicked on Screen it remade the mouse cursor from Screen Space to Game World Position and then the Player's characther will go to that Position. The Player was able to rotate camera by moving the mouse and the camera rotated around the player. Later we felt that the player movement was weird and the controls did not feel natural for the game we was going to make. Then we decided to make normal WASD-movement but with same type of rotation as we had earlier.

  • Movement

  • Interactions

  • Unhide and Hide

The Player rotates towards the snow and hides in it. Then if the player presses any button it will make the Player unhide from the snow

  • Climb and Climb down

The Player rotates towards the tree and hides in it. Then if the player presses any button it will make the Player unhide from the tree

  • Jump

The Player jumps and is unavaible to change its movement while in the air.

Werewolf Movement:

Werewolf Jump:

On top of all those Interactions i implemented the transition between the animations for all of the mentioned interactions .

Bunny Implemenation

The Bunny is a simple AI that sprints around the whole map and then being idle for a few seconds and doing the same process again. For the Bunny i implemented everything including Movement and transition between animations

Tree Interact:

Snow Interact:

bottom of page