Eiro
Eiro was created over a year with a team of myself, four artists and another programmer for a final year university assignment. It is a RPG/Bullet Hell game focused on colour blending and complements. My role was lead programmer and producer.
Responsibilities
Graphics Programming
I did all of the technical graphics work, collaborating with artists to figure out what they need, and implementing most art assets.
I created vegetation shaders which fade as the camera is close, move in the wind, and displace depending on player position
I created a custom terrain shader for Unity built-in terrain which adds triplanar mapping and height blending
I implemented VFX including screen shake, post processing, and those supplied by artists
I did all of the optimisation work to ensure 60+ fps
Combat Systems
I developed the bullet system, which was a performance challenge. We were targeting 500+ simultaneous bullets which follow terrain and can be affected by the player mid-flight. Bullets have different materials depending on their colour and type. To achieve this performance I used Unity 2018's job system for physics simulation, used a heightmap based terrain, and ensured that bullets could be batch rendered.
Player abilities was my second combat responsibility, including a 'shield', 'time slow' and a 'blank' ability. These interact with the bullet system in complex ways, and are learned as the game progresses.
AI System
As a content heavy game, an artist-editable AI system was required to create enemies and other game objects.
I developed this system on top of a state machine using ScriptableObjects. Artists can create states of different types such as 'ShootAtPlayer' or 'PlaceObject'. These states have configurable properties, and can trigger animations, sounds or VFX.
This system enabled an artist to take an enemy implementation role and create 5 unique enemies, without back-and-forth with programmers.
Other Responsibilities
As producer, I:
Ensured tasks were appropriately delegated (with team input)
Held daily meetings (much like in Scrum) to keep everybody on the same page and update task progress
Managed the product backlog, task list and burn down chart
Was the primary communication point with lecturers (product owners) in weekly meetings
Prompted team when we were behind schedule and potentially cutting tasks, or re-prioritising
My other programming tasks included:
Saving and Loading
Level Streaming
Sound implementation with FMOD
Skill Tree system and UI
Active ability UI
Main Menu
Overall software architect
Fixing Git issues
Helping others work in Unity