top of page
About Anchor
unknown4.png

Fenix Digital Studios & A Square Games and Simulations, LLC

January 2022 - May 2023

Unity Engine

Description

Smash City is an unreleased asymmetric VR vs PC multiplayer game featuring an alien invader tasked with destroying a city and a team of helicopters tasked with saving residents and stopping the invader.

Joining this project mid-development, I quickly got up to speed on the Unity project files and collaborated with a team of programmers, artists and producers in an agile environment while staying in close contact with our contractor to heavily further the progress of the project.

What I Contributed

Car AI Traffic System:
Utilized Finite State Machines (FSM) and Unity's NavMesh system to code car AI with multiple behaviors: wandering, panicking and evacuating.

  • Wandering vehicles calmly drive through the level while avoiding collisions and wait at intersections until it is safe to cross.

  • Panicking vehicles speed up and deliberately drive in random directions in fear of getting destroyed.

  • Evacuating vehicles rush towards the nearest safe zone bunker in the area no longer paying attention to traffic laws.                               
     

Helicopter AI:

Used FSM's and Unity's NavMesh system to create 4 different classes of AI helicopters to help stop the invader and save the city.

  • Attack Class AI search the city to attack the alien invader with chain guns and missiles.

  • Defend Class AI patrol around and defend military facilities, preventing the alien invader from unlocking destructive powers.

  • Support Class AI fly to designated rendez-vous points to save citizens and transport them to the nearest safe zones.

  • Balanced Class AI periodically change priority of attacking, defending, and supporting.  

VR Gameplay:

  • Made use of the XR Interaction Toolkit and programmed a system for the destruction and functionality of throwable objects such as cars, helicopters, people, and debris.

  • Implemented cross-platform controls across VR devices         (Oculus, Vive, Valve Index)

Helicopter Player Controls:

  • Designed main helicopter player controls using Cinemachine and Unity’s input system for keyboard/mouse & controller compatibility.

  • Worked alongside a UI programmer in order to allow adjustable sensitivity.

Processes & Encountered Challenges

Car AI Traffic System​
​
  • System Overview: During development of Smash City one of my goals was to make a fully agnostic car AI traffic system which would allow a designer to be able to easily create and extend the road layout on a level which vehicles can seamlessly travel through. To accomplish this I first placed nodes along each road prefab to stand as a path of points for the cars to follow. I then created a domino-effect system where I placed triggers on each road, at the end of the roads' path of nodes, where by the time a car reaches the last node in a road's list, it would collide with the trigger on the next road prefab ahead of it to get the next train of points to follow. After getting basic straight roads to work, I had to address the issue of cars colliding with each other while waiting or crossing at intersections. To approach this problem I chose to attach a road intersection helper script to each of the road intersection prefabs and created a FIFO queue system where cars are added to the bottom of a list once reaching an intersection and will only tell the next car to go once the most-recent crossing vehicle clears the area.
​
  • Challenge: What caught me off guard was when I was playtesting and I destroyed a car that was in the middle of crossing an intersection and noticed that other cars would no longer cross afterwards. Confused at first, I ended up realizing that the destroyed car technically never exited the queue which left the intersection forever broken for traffic to pile up for the rest of the game.
 
  • Solution: To solve this edge case, I implemented a timer that would keep track of each crossing vehicle where if it takes longer than 10 seconds to cross then the intersection would consider the car destroyed and remove it from it's queue. I decided to use this method instead of having the cars send a signal back to the intersection helper script if it were destroyed because another possible edge case is that if a car is damaged (not destroyed) by the invader and is left on the side of an intersection then the intersection would ultimately have the same broken effect.
Helicopter Player Controls
​
  • Situation Overview: The main helicopter player controls of Smash City had been a struggle for the project's original team to hit a point which felt just right for players. Before I was given responsibility of it, there had already been two re-works of the controls but they still had an uncomfortable feel and lack of player satisfaction. Once I was assigned to make a third re-work, I made it my goal to create a smooth flying attack helicopter that would have a low learning curve and be intuitive for players to control.
     
  • Challenge: The hard part of this task was that I had little resources to refer to because the senior programmer who was in charge of the most recent re-work left the studio which left me with little guidance on how to navigate a more complex set of code. 
 
  • Solutions: Before diving head first into the helicopter code base, I wanted extra insight from others to have a clear idea of what exactly I'd be aiming to create. After consulting and gaining feedback from gamers at the office about which games they remember flying an aircraft that they loved, I discovered the Hornet from Halo 3 was a favorite. Once I got ahold of the game myself and came to a similar opinion, my vision became clear of what I was trying to accomplish. From that point, I decided to use tools I was more confident working with and then picked and chose certain things that others and I liked about the first re-work, second re-work, and Halo 3 to create a helicopter that others enjoyed and found easy to play.
  • Ethan's CV icon
  • gitreal2
  • LinkedIn
  • Twitter
bottom of page