Welcome to my portfolio, you'll find my best projects!
I am looking for a position where I can combine my technical skills and my game design knowledge in a team project.
Looking for mainly a Technical Design opportunity, I also have a generalist profile: I like to touch to everything in a project.
Level Design Tool
In a one-month project to release a mobile game on Google Play, our team of six aimed to reach as many countries as possible. With tight deadlines and localization efforts for multiple regions, efficiency was critical.
As the Tech Designer, I developed a Dynamic Level Generation Tool to automate level creation, optimize performance with Actor Pooling System, and a Google Sheet Localization Tool for the many translator joining us, ensuring a smooth and timely launch.
Problem: Manually designing and implementing levels was too slow for our fast-paced mobile game development cycle. We needed a way to quickly generate levels while maintaining variety.
Solution: This tool automates level creation. It uses Level Data Assets to store predefined block patterns, which are then loaded randomly at runtime with Asset Registry and using the Actor Pooling System.
Benefits:
I've created a Editor Utility Widget where the designer can enter the "Level Number", which is a part of the Level Name (In order to manage them efficiently).
Inside the Level Builder map and this number, the tool will Load the level and "Export" it. The export button will create a new Level Data Asset or update an Existing one.
To maintain visual consistency with Unreal Engine's Editor, I designed the widget to seamlessly integrate with its style, ensuring it didn't feel like an outsider tool. Additionally, I implemented "Warning" effects to alert designers if they forgot to enter a level number, preventing errors and improving usability.
I've added a button to the Editor Toolbar for quick access to the tool, implemented using an Editor Utility Blueprint. A script is launched at the Editor starts to ensure the button appears.
(Initially, I used Python, but due to my limited experience, I changed the way to do it, and setting up a C++ plugin for a simple shortcut wasn't worth the effort.)
I've made a dedicated map to build the different levels with the tool: the Level Builder Map.
There is explicit border that shows where the designer can work.
Paired with the Level Exporter Tool: it displays the current level and Block Information (Max count and Current number in the level).
The designer can easy playtest there level with a special Level Builder Game Mode and dedicated HUD.
The created Level Data Asset are then gathered by the Asset Registry during the game initialization, store all the existing Levels and randomly call them at runtime to generates them.
This streamlines the level integration process into the game.
Thumbnails are captured manually for management purposes.
In the tool, the Load and Export process are managed with Editor Utility Task to have them work on the side asynchronously, allowing the designer to continue working on the editor.
In yellow are "heavy" task for the CPU.
How To Use Document sent to the Team
Problem: Spawning and destroying too many actors hurt performance due to CPU overhead. Constant memory allocation, deallocation cause frame drops and our target platform are mobile devices.
Solution: I implemented an Actor Pooling System to reuse existing block instead of constantly spawning/destroying them.
Benefits:
I manually initialized the pool once as we do not need it to be dynamic in the project. As we have a viewport constraint due to mobile platform and visibility limits, I've set up a maximum of block possible in the level.
The pool is located outside the player screen.
When the game initialize, it gather the blocks data from the pool and when they're spawned they are flagged as "In Use".
The "Spawn" and "Despawn" are managed inside the BP_Block that will initialize all the blocks variable: bInUse, Transform, BlockType.
And the Block Type initialization define the behaviour of the block in game (Normal, Explosive, Bonus, Malus, …)
Problem: Manage a lot of translator working on the same file.
Solution: I created a Google Sheet Localization Tool that allows a large number of people to collaborates on the same document without the need of making custom filter.
Benefits:
The translator must to select his language from the list on the right to update the sheet view.
Because of the uses of segment (the language selector) we allow multiple people working on the same document with their own view.