Game designer
For self-study I decided to create the 3C’s for a VR shooter. The goal was to create a template to build upon in future projects. I drew inspiration from VR games like Half Life Alyx, Pavlov & Titanfall.
The template contains: a locomotion system, weapon systems, simple AI systems, and HUD / UI systems. The goal of this template is allowing easy access to VR developers to build upon with a solid core that was developed by me.
Comfort to realism
The 3C’s are designed around having realistic yet comfortable gameplay. Meaning each interaction should feel as comfortable as possible while maintaining the realism of VR.
Bursts of action
As you play the goal is to provide short bursts of action that feel like smooth polished gameplay. This was set up to ensure players do not get overwhelmed nor bored.
For the VR Shooter template I was the only developer, this made me responsible for researching, designing, prototyping, and optimizing. This included:
Writing detailed design documents to base prototypes upon.
Containing sketches, flowcharts, and the design specifications.
Frequently updating these game design documents, based on tests.
Designing, implementing and balancing different player systems.
Interaction systems, used to interact with the game at maximum comfort.
Locomotion systems, which can be tweaked to fit the players preference.
Storage systems, which allow quicker and more immersive gameplay.
Designing, implementing and balancing weapon systems.
Shooting component, using a modular setup to build upo.
Reloading, to create a heavy and powerful feeling while controlling the character.
Gun specific systems, which can be set per weapon type (e.g. bullet in the chamber).
Juice, combining VFX, SFX, Haptic Feedback, and animations for more fun.
Designing simple AI to experiment around with.
Ranged Interaction system
Self-initiated
Project info
16 weeks
VR Shooter 3C’s Trailer
Design Pillars
personal contribution
Personal Showcase
overview
A system that allows easier interactions with objects in the environment. Using a trace that comes from the hands to scan for objects that can be picked up. If the object can be picked up the object will provide feedforward to indicate that it is possible.
The system was created to;
Improve comfort: Makes it easier to reach for distant objects, without requiring awkward / uncomfortable movements.
Enhance gameplay: By reducing down-time and supporting ease of using items.
implementation
Grab Component:
Attached in all blueprints that can be picked up:
Actor Component that the grab action looks for.
Allows snap-to-hand or free pick-up.
Scanning:
Sphere trace on hand forward vector:
Checks if the object it hits has a “Grab Component”.
If true → Check if can be grabbed?
True, Set object as “Focused object”.
Show a VFX trace line from hand to object.
If hit object > 1, get object closest to center of trace.
Set this object as “Focused Object”.
Focused object checks if hit every 0,1 seconds.
If Hit: Show Outline.
Else: Hide Outline.
Solo project
First Person Shooter
Quick navigation Menu
Proof-of-concept in engine; First prototype
Same Idea With Scan On Tick:
Pros:
Worked well, and allowed objects to be picked up at range.
Cons:
Enemies occasionally still get stuck.
Strays from our design goals (Order to Chaos).
Attack management
Changing Collision Settings:
Pros:
Easiest and quickest solution.
Pathing becomes cheaper.
Enemies reach player.
Cons:
Makes players lose overview of enemies.
Breaks immersion and feels unfair.
Emergency Reset: Giving players agency in overwhelming situations.
Was a loved ability since the first prototypes onwards.
Game Feeling:
Heaviness: Supported by all layers of polish and feedback.
Control: Provides a safe and controlled feeling.
Catharsis: Enemies ragdolling + chaos destruction.
Pacing: Supports the pushing playstyle.
Alternatives
Cooldown-Per-Enemy:
Did not scale well with amount of enemies we have.
i-frames Implementation:
Pros:
Creates the same functionality.
Cons:
Taxes another strike-team.
Still overwhelms the player.
Example video of difference in comfort
Design impact
Gameplay:
Easy interactions with objects without frustration.
Clear understanding on how targeting works and players feel like they are being in control
Feeling:
Players experienced:
More comfort during playtime.
Less frustration with pickups.
Feeling of being in control.
Better immersion with game systems.
Why this solution?
Implementation was easy, allowing quicker iterations and more polishing on the system.
Uses of the two best factors from alternatives and combines them to improve performance & gameplay.
Aligns well with the design goals.
Enemies do not need to know others’ exact locations.
Makes enemies more manageable.
Got implemented with only a bit of support from programmers, by increasing NavMeshAgent.Radius.
Earlier prototypes
Increased Grab Radius:
Pros:
Made interactions easier.
Cons:
Created weird / inaccurate situations.
Would still be uncomfortable at bigger distances, was not very user friendly.
overview
A token-based attack permission system for enemies, inspired by elementary school hall passes. Enemies must request a token from the player to attack, preventing overwhelming swarms and creating a fair game flow.
Key-Features:
Limits simultaneous attackers via a shared pool.
Uses interfaces for decoupled communication between enemies and players.
Tokens automatically return on attack completion or death.
implementation
Design impact
Token Request Flow:
Enemy Requests Token:
Calls RequestAttackToken() interface method on player.
Player’s AttackTokenComponent checks TokenCount.
Permissions Granted:
If TokenCount > 0, decrement count and return true.
If TokenCount == 0, enemy waits.
Token Return Logic:
On Attack End:
After AttackAnimation (+ Cooldown variable), increment TokenCount.
On Enemy Death:
Token is returned through DeathEvent, to close out edge cases where enemy dies mid-attack.
Tweakable Variables:
MaxTokens: Controls how many tokens the player has.
AttackCost: Determines many tokens the attack will cost.
For different types of enemies.
AttackCooldown: Variable to potentially provide more breathing room to players..
Prevents Player Overwhelm:
Ensures only N enemies attack at the same time (3 for now).
No i-frames required:
Creates an organic feeling & reduces work for other departments.
Debug Friendly / Easily Scalable:
Tokens can be tweaked quickly and tested with. Allowing quick iterations and balancing.
Why this solution?
Easy to implement on and test with.
Scalable for bigger groups and more enemy types.
Limits the enemy in a way that feels more natural.
Clear to players what is going on, combined with SFX.
Designer-controllable allowing quick balancing.
Saved programmers time that could be used elsewhere.
Player ability: Stomp
Destructible objects
Credit Screen Game (wip)
A physics-driven credits screen that replaces passive scrolling with interactive name-plates, encouraging players to "play" with the team's names via physics-based interactions.
Currently still in prototyping state, but aims to create interaction with a completely new art-style.
overview
A high-impact stomp ability that lets the player obliterate hordes, creating breathing room in chaotic encounters. Combines physics-driven knockback, destructible environments, and visual feedback to deliver a "power fantasy" moment.
Key-Features:
Scalable AoE: Damage radius grows with fall distance.
Environmental Destruction: Chaos-enabled objects explode on impact.
Invulnerability: Brief safety window during execution.
implementation
Ability Flow:
Input Trigger:
Player presses button > check cooldown.
Ascend Phase:
Player becomes invulnerable.
Vector lerp smoothly lifts player.
Descend Phase:
Physics-driven slam (launch node).
Impact Detection:
Multi-Sphere Trace:
Radius scales with fall distance (clamped)
Checks for Chaos objects (destroyed via Field System)
Damage:
Communicates through an interface.
Feedback:
VFX: Shockwave showing weight.
SFX: Heavy “Boom” bass sound.
Screen shake: For extra juice.
Why the Stomp?
overview
A Chaos-driven blueprint that lets level designers easily create destructible props with customizable strain and explosion forces, enhancing player immersion and gameplay variety.
Key-Features:
Synergy: With all player interactions (e.g. Shooting).
Tweakable Magnitude: To scale impact easily.
Types: Different types of shattering can be selected.
implementation
Chaos Integration:
Geometry collections:
Created in editor.
Field System Trigger:
Spawned on:
Player collision.
Damage events.
Customizable Destruction:
Strain Control:
Internal- / ExternalStrain easily tweakable for different effects.
Explosion Power:
Apply linearVelocity with ForceMagnitude.
Designer-Friendly Workflow:
Create New Mesh:
Wrote a how-to document.
Selectable in details panel.
Exposed Variables:
Magnitude of explosion.
eNum for changing SFX.
StrainCurve to control break pattern.
Design impact
Level Design Flexibility: Providing easy implementation and iteration without coding.
Player Experience:
Juicy: Supported by the shatter type, VFX, and SFX.
Strong: Coming from the ease to destroy areas.
Dopamine-driven: Players can’t seem to stop destroying.
overview
why
Subversive Engagement: Players will interact instead of skip.
Passive Exposure: Playful ineractions increases name visibility.