For my internship, I joined the development team of Virtual Room, a studio that creates virtual reality experiences. During the first two weeks, I worked on the final stages of a project called "Planet Party," which is designed to entertain groups who have finished their adventure before others with mini-games like bowling and darts, and to take a final photo as a souvenir. My role involved debugging, testing, and exploring the core code to better understand how the project functioned.
After this, I transitioned to a new project:
At the beginning of production, I actively participated in setting up the initial resources, notably the core code, where I fixed issues due to compatibility problems with the engine version and SteamVR. We adopted an organization based on two-week sprints.
In the first sprint, I worked on making the game lobby functional and began R&D on the final photo, which is a statue of the characters. I also fixed numerous crashes occurring during disconnection or reconnection and level transitions.
During the second sprint, I undertook my first gameplay production task: creating a slingshot that players can grab with both hands—one on the handle and the other on the spoon. By pulling and releasing the spoon, players can shoot stones to defend against Romans and interact with environmental elements. I implemented a sight on the slingshot to allow players to visualize where they are aiming, as it was nearly impossible to hit enemies at a distance without it.
In the third sprint, I worked on a stealth enemy type that moves uniquely by hiding in bushes at certain locations. I also helped fix bugs in the enemy pooling system caused by new mechanics added to the enemies, such as fleeing behaviors.
The fourth sprint was particularly significant, lasting four weeks. I dedicated this time to creating an entire game level (one of five), specifically the one focused on potion preparation. This is where I accomplished the bulk of my work.
Players must concoct potions (magical but not excessively so) using various ingredients and utensils. I had to develop all these mechanics, such as allowing players to place an ingredient in a bowl, crush it with a pestle, and then pour its contents. Additionally, I implemented mechanics for opening a nut with a mallet and simply tossing an ingredient into the cauldron. I also handled event management, such as detecting objects falling into the cauldron. If the object is an ingredient, the system checks whether it matches the recipe requirements.
Working on virtual reality presented unique challenges. Since most actions require physical interaction from the player, it was crucial to prioritize the user experience. We had to avoid abrupt character movements to prevent motion sickness among sensitive players. For instance, in one level, we traverse a forest using fast-moving platforms, and extensive testing revealed that this could cause discomfort. We also faced constraints related to player movement and playable space. In the potion preparation level, we had many ingredients but limited space, so we decided that each player would have certain ingredients and would need to communicate with others to obtain the rest.
Another significant challenge was implementing multiplayer functionality in VR. Handling object ownership and network replication required careful consideration. For example, when a player interacts with an object, we need to manage ownership transfers so that actions are correctly synchronized across all clients. Differences between first-person and third-person rendering also posed issues, especially when ensuring that objects held by players appeared correctly to others. The code architecture had to evolve frequently to accommodate new functionalities and to resolve network-related problems.
During the last sprint I participated in, I began by creating a ladle to transfer the cauldron's contents into other containers. I refactored parts of my code to make it more generic, facilitating the addition of new gameplay elements without increasing code complexity—for example, allowing the contents of a bottle to be poured into the bowl or retrieving the contents of the cauldron with the bowl. This mechanic will be reused in future gameplay elements, so it was prudent to simplify its implementation.
At the end of this sprint, I developed a tool to more easily manage movement platforms. Initially, we had to manually select platforms in the level, which was not efficient. The new visual tool allows us to quickly select platforms and visualize groups of zones, making level design more streamlined and reducing potential bugs due to misconfigured platforms.
Overall, this internship allowed me to learn a great deal about programming in Unreal Engine with C++, network programming, and VR development. I also gained experience in team collaboration, adopting new methodologies, and even acquired some graphical notions within Unreal. I was able to bring my previous experience with Unreal Engine to the team, helping artists integrate their assets into the gameplay and proposing design ideas to solve problems.
Working on a well-known license like Asterix was a pleasure, despite the challenges. The daily commute was tough, but the motivation I found each morning reaffirmed my career choice and my appreciation for the company's atmosphere.
Theses footage represent the state when I leaved the team in December 2023
For recent footage please, go to the artists ArtStation (in Team panel)