Opponents in crime is an online multiplayer party game, where the main goal is to be the best thief and steal as much artwork as you possibly can. The twist is that your friends are now your enemies and will do their best to sabotage you. So hurry and sabotage them before they get a chance to! This chaotic, light-hearted game is promised to make you laugh out of malice, but watch out so you’re not the one being laughed at. Will you be the best art thief or will you let your opponents win?

My roleIn this project as following to my contribution in Slip Up N Slide I was taking on responsibilities of features that no-one was that excited to implement or what was an important feature that had not yet been completed. During this project I also became more comfortable with taking over others work and to work more as one entity rather then isolated in my own part of the project.

Networking

I started out the project with researching and experimenting with unreal's networking and multiplayer functionality.It was a lot more straightforward and easier to get into then I thought due to unreal's way of syncing character controllers and physics objects without doing it manually.The real challenge began when trying to sync our own classes after the project grew and became more complex. The networking got more and more difficult to structure and keep up with new functionalities.Therefore I now better understand why having a good code structure is crucial when you are making a multiplayer game.


Lobby UI

Towards the end of the project I took over the lobby widget blueprint to make all the networking for it. That consisted of registering when someone is joining or leaving the lobby and syncing it to all other players with showing the players icons and ready label.


Score reveal UI

I designed and implemented the UI for the scoreboard that appears at the end of every round. During the game you have to keep track of your score by counting yourself if you want to know how well you are doing. But because of the chaotic nature of the game, most players will not have any idea. This makes the score reveal a very important part of the game.It was made to hold the secrecy and build suspense throughout the whole score reveal to keep the players engaged and unaware who scored the most. To make the score reveal as impactful as possible.The "juice" and feel of the score reveal was also very important to make your score feel impactful and worth fighting for. As you can see there are a lot of things that are happening. Score bar that is filling up, numbers counting and shaking and a crown that appears on the current player that is in the lead.The score reveal happens in two sequences, adding score and score deduction. When the score is adding we look at one player at a time so the players can easily understand what is happening. This also helps to build suspension where you only know the score of the player that has already gotten their score, and the leader-board can change by the current or next player. But after the adding of scores we are not done, because then there is the score deduction. You get score deduction every time you trigger the security (get seen by a security camera or guard). This deduction happens at the same time for every player to make a chaotic ending to the score reveal. And if you are lucky you can climb the leader-board just because someone else got caught one too many times.


Security system

I was responsible for the game's security system. It consists of security cameras, patrolling guards, a timer for ending the game prematurely if caught and a station for turning the alarm off.The security cameras have the option to rotate horizontally or vertically. In front of the cameras a visual cone is created that responds to a level's geometry. When you touch the cone the alarm is triggered and the camera's visual cones disappear since you are already seen.To get the visuals of the camera's cone I shot a range of raycasts that built a dynamic mesh from their resulting points. To get a result where the visual cone doesn't go through geometry to simulate what the camera would actually see. Now in retrospect I realize that this is not a very performant way of solving this problem where creating a new mesh of the cone every few frames affects the game's performance a lot. I think a better solution would be to have more raycasts that handle the player's collision with the vision cone while the visual part is handled by a shader instead of a physical mesh.The guard patrols around a set path that follows a spline and knows where he can walk with the help of a nav mesh to not walk through physics objects laying on the ground. When you are in the guards field of view its detection bar starts to get filled over its head. If the bar gets filled then you get spotted and the alarm gets triggered.


Spawning art props

The art (loot) exists in six different forms, it's wall & floor art that's separated in three different sizes. This is the item you pick up and increases your score when you cash them in at your car.I took over the code from another programmer for spawning art and made it so you can add more art models to the loot table that gets randomized on the start of every level.I also made the spawning of "target art", an art that is worth more than normal art and is specific for each player. So for example player two can't see what player one's target art is and the other way around.


What I learnedThis project helped me become more comfortable with taking over others work, made me more confident in my own abilities and who I am in a group project. I became more comfortable to speak up and question decisions when I thought there was a better solution. Not like previously when I didn't get as involved.


Noa Johansson