In EXOBORNE you play as an Exoborne Warrior in a near future ravaged by natural disasters.
Empowered by your Exo-Rig you scavenge, craft and fight to survive against enemies from the sinister Rebirth Corporation, vicious Bandits, and other hostile Players.
The game is currently unreleased, and is still under development.
Getting an Internship
There were a couple of companies that wished to interview me but I eventually landed with Sharkmob. The studio is a large company developing a AAA product so I thought it would be an excellent place to learn more things and get a headstart into the market. My interviewer (who would become my lead) also noted that I was a bit rough around the edges but showed great potential, and he really wanted to give a chance for someone to enter the Gaming Industry.
First Weeks
This would turn out to be my first professional experience at a workplace, which was both exciting and nerve-racking. It was an entirely new environment with much to learn and much to adapt to.
Luckily the staff at Sharkmob were really welcoming and quickly got me set up with all the tools I needed to start working. I was introduced to my team but I wouldn't be working with them for quite a while, as I was a bit isolated with my Onboarding tasks and courses while I learnt more about Unreal Engine. This was also a busy period of time in the company meaning my lead was often pre-occupied with meetings or important tasks, but luckily I was able to work quite autonomously and didn't really need any guiding. It became a scenario where I was handed something to do and then I'd complete it as quick as I could on my own, something which my lead appreciated as he didn't have to dedicate more of his already busy schedule.
Most of these early tasks were to learn the ins-and-outs of the Unreal Engine, something which I had only worked minimally in before. It proved to be quite similar to other engines and I quickly got the hang of it, it was mostly just the Blueprint system and integration into the C++ side which I had to get familiar with. The course did however teach me some rather interesting things with Delegates, the Gameplay Ability System, how to create interactable UI, Multiplayer Networking, and the Environment Query System, as it explored multiple different areas and made you create a very simple but encompassing base for a game. Some of the teachings from this course would prove vital as an introduction to many of the areas that I'd be working on, and it isn't something I would have skipped given the chance.
AAA Development
After my courses were completed I was able to be properly introduced into the project, I started with some trivial bugs and issues they had laying and was tearing through them like they were nothing. My lead noticed this and handed me an issue with NetCorrections which was much more complicated and had been looked at by 3 Intermediate Engineers before without any improvements, this was a sort of test of resolve to see if I'd just give up on a task if I couldn't find a solution to it. A NetCorrection manifests in Rubber-Banding, where the validation of the objects movement is seen as invalid on the server-side and therefore leads to a noticable jump in position. Usually this isn't that bad, but this problem was in regards to an object being stationary and constantly causing corrections while the player brushed up against it.
I gave it a week and learnt a lot by looking at the systems and how everything was connected, and once my lead checked in on how it was going I told them to give me a day or two longer, as I was on the cusp of finding something. Next time he checked back I was able to present a solution to the problem, to his surprise. We discussed it a bit together and found a better way to solve it, and I was put to work. After another week the bug was handed in as improved, there were still some other issues in the surrounding area but they would require a lot of refactors in the system and given the project phase it was something we didn't have time for. My lead was happy and continued to hand me more difficult tasks, many of which were tied to NetCorrections.
Jose Luiz, 2022, Unreal Engine 4 - network corrections example [Video]. Youtube. https://www.youtube.com/watch?v=OY754kGVaJs
Working with a Team
Bit by bit I was also introduced to the people in our team by working on tasks with them. My lead would instruct me to take some tasks from them, communicate with them on how to solve it, and in the end receive a Code Review by them. This provided an excellent segue to better get to know everyone in the team, and I quickly made friends with everyone.
I became a sort of dependable person who they could throw any kind of task to and know it'd be completed within a week or two. This led me to receive tasks in two of our feature teams, Traversal which was the one I belonged to, and Exo:s which handled things like Abilities and Status Effects. It also meant that as a 3C Programmer I'd be talking to our Game Designers a lot to check their decisions on how everything should work in the game, and I'd slowly be working with other departments such as Animation and Level Design for other issues. Eventually towards the end of my time I started even receiving Must-Fix and other priority bugs which I was grateful to take on, as it showed that my team had truly started trusting me and my capabilities.
Overall it was a really pleasant experience and I really started liking my team, we were quite casual but still very professional and took everything about work and reviews in upmost sincerity.
It created this trustworthy environment where you could turn around and ask anyone for anything and they'd try to help you as well as they could or direct you to someone who could. We were still very independent and working on our own task but it created a very warm feeling of comfort, something I'd like to see in every team that I become part of.
A majority of my team at a party, with 2 members unfortunately being unable to attend.
Sorrowful Goodbyes
Unfortunately the company was unable to keep me or any of the other interns that year, my lead tried to overrule it and fight to make an exception for me and another one of my team members asked one of our producers if anything could be done. This decision was something that couldn't be changed so it is with sadness that I was unable to join the company and my new friends.
Sharkmob proved to be an excellent experience for me, where I learned a lot on how game development in larger studios is carried out. It is a time that I will hold close to my heart for a while, and reflect upon all the teachings that it gave me. I wish them the best in the future and their careers, and hope to see the game blossom once it's released.
(Click to Enhance)
3C - Traversal & NetCorrections
I worked on a majority of the traversal options that the player possesses, many of these fixes were to clean up transitions between them and lessen the NetCorrections that happened during some of them. Some of my work was also to implement or enable more traversal options for the player, or just generally tweaking the gameplay to be more fluid and less error-prone.
One of the mayor areas I worked a lot in was the Grapple Hook, and how it handles collisions and transitions. Before I came in and reworked certain parts of it, it relied on the crouching logic of Unreal's MovementComponent to handle the collider. I implemented a general purpose function for resizing the collider and handling pushing the player out of meshes with a lot of parameters you could input to customize on how you wanted to handle the resize, like for instance if you wanted to pivot the resize around the bottom of your collider to keep that position (like if we un-crouch), or if you even wanted to handle pushing out the player. This rework also included some example implementations on how the code could be used to solve various problems that we had at this point, and the logic was later used by one of my co-workers in the implementation on how we squish the player if something is dropped on them.
There was also a lot of work to be done with NetCorrections which was steadily improved by securing the transitions between the player states that we had. This is the type of work that I conducted for many of our states to ensure that the players experience went by a bit smoother, and I worked in conjunction with two of our team members to squash them one by one. During my time I became the main "NetCorrection" engineer in our team and focused on them almost solely, apparently the others weren't so enthusiastic in working with NetCorrections but I found them a fun challenge!
3C -Abilities
My work on Abilities was a bit limited, and was mostly centered on fixing some NetCorrections as it had a lot of overlap with Traversal. The other main areas within Abilities that I touched was our Melee System and several NetCorrections with them, and our Status Effects to ensure that they weren't drained while we're still receiving it.
During development one of our Abilities Programmers had to leave the team temporarily and I took an initiative to fill that gap which both my co-workers and my lead appreciated. This led me to taking some bugs and issues they had and learning our implementations with Unreal engine's GAS (Gameplay Ability System) and it was a fun little side adventure. I remained in traversal as my main team though and received some other high-priority bugs that pulled me away from Abilities.
Destructibles
One of the larger reworks I did from ground up was on how we handle explosions and raycasts to see what objects are damageable. This solution proved to be much more dependable while staying relatively performant, and served as a good middle ground. If we wanted even more accuracy we would require more raycasts and with the amount of destructibles that could be in an area it was a bit of a scary thing to change.
During this work I pulled together a number of people and communicated with them on how the problem should be solved, since there were other issues in other parts that they were more fitting to work in or had already started working in. With a Producer pushing for it to be fixed for a certain Build, it became a bit stressful but I pulled together and kept calm while driving the work forwards and handling communications until it was ready to be pushed.
Feature Jam Winner
In the annual Sharkmob Feature Jam I participated with a submission by myself. The competition lasted for 48 hours but I managed to design and code it to a baseline version in just 3 hours, and spent the rest of the time polishing it and creating a video to showcase it.
It was a really fun experience which allowed my creative thinking to blossom! I managed to win the People's Choice Category with around 30% of the votes, it was one of the 3 categories that you could win in and a total of 20 Submissions were made from teams of varying sizes.
Unfortunately I cannot show my submission, but I am nonetheless very proud about it!
Lead
Konstantinos Benos
Programmers
Oscar Öhrn
Aron Jönsson
Akın Kürşat Özkan
Gunnar Frennesson
Andrey Rusanov
Casper Bengtsson
Vincent Badin
Used Assets:
Splash Art - PlayStation.Store. Exoborne. https://store.playstation.com/en-us/concept/10013741
Sharkmob Logo - Level Infinite. Sharkmob - PR Contacts - Level Infinite Press Extranet. https://press.levelinfinite.com/en-US/Sharkmob
Game Images - Sharkmob AB. EXOBORNE Steam Page. https://store.steampowered.com/app/2705130/Exoborne/
EXOBORNE Logo - Sharkmob AB. Welcome to Exoborne. https://www.exoborne.com/en/