
1V1 | First-Person Shooter | Resource Farming
Concept
Development time - 8 Weeks
Site Zero is a high-intensity 1v1 arena shooter set in a brutalist construction zone where players duel using quick movement, tight gunplay, and mid-round resource gathering.
Every round starts fresh, players spawn with basic weapons and must farm/kill drones to gain resources to unlock weapons or upgrade them in real-time.
The gameplay focuses on adaptability and moment-to-moment decision-making. Players must not only outgun their opponent but outmaneuver, outthink, and outplay them through the use of dynamic movement systems, the vertical map, and a flexible loadout system that evolves during the match.
The result is a tense, fast-paced experience where every action matters, from deciding when to focus on farming drones to landing that final shot across the map.
Game Trailer
Full Game
Main Contribution
Combat System
Developed a modular gun architecture with core mechanics like recoil, damage falloff, and hitbox-based damage.
Weapon Abilities
Designed and implemented unique fire modes and special abilities for base and upgraded weapons.
Aim Assist & Controller Support
Built a dynamic aim assist system using raycasts, dot product targeting, and distance-based weighting.
My Role
I was responsible for implementing the foundational combat systems in Site Zero, including a gun base class, projectile logic, and all individual weapon behaviors.
I created advanced weapon upgrades and ability systems, such as see-through-walls-abilities, homing missiles, and cloaking effects, and developed controller aim assist with smart targeting logic.
Beyond gameplay programming, I worked on combat feedback through VFX, audio, and post-process effects, and supported balance tuning and cross-team integration of abilities and weapon states.

Core Combat System
Goal
The goal was to design a responsive and flexible shooting framework that supports multiple weapon types and mechanics, with features that elevate both feel and depth of the combat experience.
I also wanted to create four distinct firearms that each feel powerful, intuitive, and strategically viable in different combat scenarios. Since all weapons share the same foundational purpose, shooting, their core functionality needed to be consistent and modular.
At the same time, each gun needed a unique twist, that encourage players to favor one weapon over another based on context. Whether it's close-quarters combat, ranged engagements, or utility-based play, every weapon should offer situational advantages and promote player choice. This design approach supports skill expression, where mastery of each weapon’s strengths and limitations leads to diverse playstyles and meaningful decision-making in each round.
Solution
I created a base weapon class, Gun, to handle core mechanics like firing, reloading, ammo tracking, damage falloff, and recoil.
Recoil increases progressively while holding the trigger, encouraging controlled bursts in automatic weapons.
Damage falloff is calculated dynamically based on shot distance.
Custom hitboxes were implemented to allow head, body, and leg shots to deal different damage amounts, making positioning and accuracy more rewarding.
Weapons
Pistol

Shotgun

Assault Rifle

Sniper

Implementation
The core combat is built on a base gun class shared by all weapons. It handles firing, reloading, recoil, damage falloff, and hit detection.
When fired, the weapon performs a raycast toward the crosshair. The trace checks what body part was hit, applying different damage values for head, body, or legs. Distance-based damage falloff is applied using a linear reduction beyond a set threshold.
Recoil ramps up with each consecutive shot, affecting both aim offset and camera shake, rewarding controlled bursts. Reloading works both manually and automatically when ammo runs out.
Death is triggered when a player’s health reaches zero, with a clean separation between health application and hit feedback.
This system supports consistent weapon feel while allowing each weapon subclass to override specific behaviors where needed.


Reflection & Learnings
One of the main takeaways from building the core combat system was learning how powerful yet potentially problematic timers can be in Unreal Engine. They’re great for managing cooldowns, delays, and timed events, but when multiple timers become interdependent, performance differences between systems can cause subtle and hard-to-detect bugs. I learned the importance of designing timer logic with desynchronization risks in mind, especially when it impacts core gameplay behavior like firing or reloading.
I also aimed to centralize as much shared functionality as possible in the base gun class. While this significantly reduced code duplication across weapon types, it increased system complexity and led to longer debugging cycles. Object-oriented principles like inheritance are valuable, but I learned to be cautious. It’s easy to overengineer a clean class hierarchy at the cost of maintainability or clarity.
Sometimes, prioritizing a simpler, more direct solution can be the better long-term choice, especially when gameplay clarity is key.
Pistol
Goal & Solution
The aim was to integrate a way for players to gain resources while using the game’s core mechanics, shooting and movement. The goal was for players to develop their combat skills while also engaging in strategic thinking. Since we wanted a 1v1 shooter with resource-farming elements inspired by MOBA titles, we needed an elegant way to merge farming with the shooting gameplay.
Our answer was the pistol, a lightweight sidearm that deals less damage against players but excels at destroying/farming drones. This design encourages players to swap between weapons, rewarding accuracy and decision-making while seamlessly tying resource collection into the game’s combat flow.
Implementation
Base-version
The pistol is based on the gun base class, making it an automatic weapon. It has high fire rate and makes increased damage to drones.
The damage scales on weapon level making it the optimal choice for farming resources.
Upgraded version
The upgraded version of the weapon enhances the weapon’s M.O., in other words its utility function. It grants the player extra resource drops, further increasing its importance when it comes to farming.
The ability that comes with the upgrade is a wallhack that makes opponents visible through walls for a short period of time. Making it possible to either hunt down or avoid them, depending on strategy.
Farming

Ability

Reflection & Learnings
I learned more about Unreal Engine’s built-in Take Damage method, and how easy it is to alter the damage received depending on what is dealing the damage. I also picked up a few things about working with post-process materials and how to create cool functionality in code to alter materials and the player’s point of view.

Assault Rifle
Goal & Solution
The goal with the Assault Rifle was to create a reliable, general-purpose weapon that represents the core idea of a standard shooter firearm. It needed to deliver high and consistent damage, maintain strong performance over long range, and reward precision with significant headshot damage. Recoil was implemented to prevent it from being too easy to secure long-range kills too quickly, ensuring balance while keeping it satisfying to use.
The upgraded version retains the weapon’s well-rounded strengths but adds more damage and a larger magazine. Its most defining feature, however, is its unique ability, a controllable missile that can be steered by the player’s rotation after firing. This opens up creative strategic opportunities while adding a high-impact, skill-based element to combat.
Implementation
Base-version
The Assault Rifle is built on the weapon base class, making it the most “standard” firearm in the arsenal. It deals high damage, has a balanced fire rate, and remains effective at long range.
Headshots are especially powerful, but recoil ensures players must control their aim to maintain accuracy over distance.
Upgraded version
Ability
The upgraded Assault Rifle increases base damage and magazine size. Its standout addition is a guided missile ability. Once fired, the missile changes direction based on the player’s rotation, allowing it to be redirected mid-flight.
The missile is a subclass of a custom explosive projectile class, dealing damage to both players and drones, and features immersive visual effects and camera shake for extra impact.


Reflection & Learnings
When developing the missile ability, I had to think creatively to find a way for players to control its direction without making it feel unnatural or clumsy. I learned a lot about Unreal Engine’s radial damage functions, how to apply damage within an area, and how to create physical shockwaves that can push objects away from explosions.
I would approach the implementation the same way if I did it again, as the final result felt both fun and intuitive.
Shotgun
Goal & Solution
The goal with the Shotgun was to promote an aggressive playstyle, giving players a weapon that dominates in close-range combat. We chose a shotgun over an SMG to ensure greater variety in the arsenal and to provide a weapon with a clear, distinct role.
Showcase


Implementation
Base-version
Unlike the other weapons, the Shotgun fires slowly but releases multiple pellets per shot in a small cone spread, similar to a classic shotgun. Each pellet’s direction is randomized within the cone, naturally limiting its long-range effectiveness, which is further balanced by a damage falloff system. This design rewards players who close the distance to their target, making positioning and timing crucial to success.
Upgraded version
Ability
The upgraded Shotgun retains its core firing behavior but gains a pulse grenade ability, built as a subclass of the custom explosive projectile base class. Instead of dealing damage, the grenade applies a physical force that pushes players away from the impact point.
It can be used to knock opponents back or propel the shooter forward. Upon triggering their own pulse effect, the shooter also becomes temporarily invisible until they fire, take damage, or a short timer expires.

Reflection & Learnings
I learned how to use Unreal Engine’s force application systems to create knockback effects, how to generate cone-shaped spreads with functions like VRandCone, and how to control visibility so that certain meshes are only visible to specific players. These skills allowed me to design a weapon that feels unique and strategically versatile.
Sniper
Goal & Solution
The goal was to give the players a way fight from longer distances.
The solution was the Sniper which gave players a way to deal high amounts of damage from long range, rewarding precision and timing. It needed to feel powerful when landing a hit, while requiring skill to use effectively.

Implementation
Base-version
The Sniper is based on the generic weapon base class but introduces a scoped aiming mode. When aiming down sights, the player gains a zoomed-in view with a dedicated UI, allowing for greater accuracy at long range. Without aiming, the weapon’s shots are intentionally inaccurate, firing in a random direction within a cone spread. This forces players to scope in to achieve reliable hits, making positioning and aim discipline essential.
Upgraded version
Wallbang
The upgraded Sniper changes its shot type to an electric projectile with a much wider hit area, making it easier to land shots. It also gains the ability to wallbang, penetrating walls to damage targets behind them. This adds a unique tactical layer, allowing skilled players to control sightlines and punish predictable positioning.


Reflection & Learnings
While developing the upgraded Sniper, I learned a lot about working with raycasts in Unreal Engine, especially when combining wall penetration with precise hit detection. The initial approach didn’t work as intended due to how certain raycast functions handled hits, they could either pass through multiple objects or register only a single hit, but not both in the way I needed.
I solved this by combining multiple raycasts, ensuring both accurate hit detection on player body parts and correct wall penetration behavior. This also taught me more about collision channels, hit sorting, and how to manage sets of already-hit actors to prevent duplicate damage.
Aim Assist
Goal & Solution
The goal with the aim assist was to help controller players be more accurate in a fast-paced FPS environment with high movement. Without assistance, hitting both enemies and drones would be much more difficult compared to playing with mouse and keyboard. The solution was to implement an aim assist system that subtly guides the player’s aim towards valid targets.
Implementation
The aim assist activates only when the player is moving the camera with the right stick. It checks the area in front of the player for potential targets using a spherical sweep. If multiple targets are found, it prioritizes player characters over drones.
The chosen target is the one most aligned with the player’s view, determined using a dot product calculation. The assist strength is based on both alignment and distance to the target. Once calculated, the system interpolates the camera’s rotation toward the target’s position, providing a smooth and natural aim adjustment without removing the need for player input.
Applying Aim Assist

Reflection & Learnings
While developing this system, I learned a lot about using dot products in gameplay mechanics, especially for determining angles and alignment in 3D space. I also gained experience with combining visibility checks, distance factors, and interpolation to create an assist system that feels helpful but not intrusive, and that works seamlessly for both player and drone targets.
Other Contributions
In addition to the core weapon systems, I implemented several supporting features that improved gameplay feel, accessibility, and immersion:
-
Audio and visual polish – Added sound effects and visual effects for all weapons and abilities to enhance feedback and impact.
-
Post-process wall vision – Created a post-process material for the upgraded pistol ability, allowing players to see opponents through walls.
-
Hitboxes – Set up separate hitboxes for head, body, and legs, with different damage multipliers depending on the hit location.
-
Drone resource drop system – Updated drones’ resource drop behavior to better balance farming mechanics.
-
Customizable sensitivity – Added settings for both mouse and controller sensitivity, including separate values for scoped sniper aiming.
-
Vertical rotation clamp – Limited vertical aim to prevent unnatural camera movement.
-
Camera clipping reduction – Adjusted camera settings to minimize clipping through geometry.
