Vladimir Chavdarov
Tools and Gameplay Programmer
Vladimir Chavdarov
Tools and Gameplay Programmer
"Oh Bugger!" is a singleplayer first-person shooter where you take on the role of a blue-collar mech, exterminating hordes of alien bugs on an infested luxury resort in space.
🔧Engine/Language: Unreal Engine 5, C++
👥Team Size: 21-23
⏳Duration: Sep. 2024 - Jun. 2025
🎮Game: Steam
📝Related Technical Breakdown: Asset Validation in UE5
During the development, I worked on the enemies, which is one of the signature features of our game. For that, I worked closely with our dedicated AI programmer Daniel Donkov. My responsibilities included:
Experimented with State Machines, Behavior Trees and combined approach leveraging UE5's systems where relevant.
Developing the underlying code architecture for the base enemy type. Optimize it diligently so it adds minimal overhead to the game.
Architecture sketches on Paper
Proper diagrams in UML. Modeled and prototyped multiple solutions.
Implementation of the Behaviour Tree based on one of the Diagrams from the carousel above.
One of the signature moves of the enemies is the jump attack of the most common bug. While working on that, I collaborated closely with out AI designer Ekaterina Morozova to ensure good gameplay. In order to implement this feature, I had to take into account the following:
Enemies need to be able to jump between any combination of surfaces since they walk on floors, walls and ceilings. This is done via a Bezier Curve.
Enemies need to be able to jump back from the player and land on a location close to them.
Depending on the angle of the jump, enemies can either jump back to their start location or land on a horizontal surface next to the player. The curve of the jump depends on the angle, e.g. if an enemy jumps from the ceiling, it would fall almost straight down.
Sketch of different cases the jump must account for.
Difference between low jump (1st gif) and high jump (2nd gif)
One of my biggest contributions to the project was my effort I put into optimization during the Production and Release stages. The result was an almost 50% increase in fps which helped us hit our 60 fps target for lowest spec hardware and sit comfortably at 70-80 fps on higher specs. In order to achieve this, I optimized the following:
Reducing Behavior Tree traversal when enemies "prey" on the player character.
Pool VFX that spawn often (bullet sparks, trails, holes, etc.)
Activate/Deactivate destructibles based on the room the player is in. Also reduce the average number of destructible volumes spawned.
Before-After: Behavior Tree
Before-After: Destructibles
Technical Article: link to Articles
As part of our QA pipeline, I developed a custom Asset Validator that ensures all files follows the naming convention established by the team. Every time a file is added or renamed, the tool checks if its prefix matches the type. Depending on the result of that check, the validator can give a rename prompt to the user or give them the option to add a new file type to the data table.
The goal of this tool is to omit the manual naming conventions check during code reviews and make searching through files in UE5 faster and more convenient for the whole team. Here is a more detailed breakdown in a tutorial-like style.
During this project, I took on the role of a Programming Lead. As such, I was responsible for keeping an overview of the project, track deliverables and milestones, working alongside the Producer and the Leads from the other disciplines. I was also responsible for the technical integrity and performance of the project. Being a Lead taught me a lot about the social dynamics of a team project - resolving conflict, keeping motivation high and giving a sense of security and confidence to the team.