
A Horde Survival - Action RPG:
I worked as Technical Director in this project.
I programmed the UI, save system, spawner, dialogue, skilltree and many other things.
Besides that I did the lighting, shaders and focused on performance.
To see further details, scroll down:

UI
For the UI I used an observer pattern with delegates, so that even if an UI element is missing or deactivated the game still works.Also: I was able to create scrolling UI textures in the pause menu that move althought the time scale is set to zero!
UI Screens
Start, Settings, Tipps, Pause Menu, Ingame, Dialogue, Level Selection, Skilltree

Dialogue System
I used the YarnSpinner Package for the dialogue system.
It allows the editors to use a more intuitive writing style for dialogues.
It also adds in localization.modifications made:
- hiding UI and zooming camera
- extended controlls with keyboard
- progressing ingame quests
Skilltree
We have about 100 variables the player can increase and a special ability to unlock.Designers can easily add new upgrades to unlock by simply greating a new upgrade Scriptable-Object that contains the variables that get upgraded and references to previous upgrades that are required .

Save System
The Save System saves every information in an XML file and has numerous utilities to be easily used by other programmers.For example you can easily write new data right before actually saving the game by simply subscribing a function to the "UserFile.SaveGame.onSave" action.


Enemy Spawner
I made a custom inspector for the rather complex spawner.A spawner can spawn multiple waves and the designers can define the types of enemies, their location and amount when spawning.
They can also define a condition for spawning the next wave.

Outline Shader
(Custom Render Pipeline Feature)
I used a custom render pipeline feature from my last project to add object based screen space outlines.
The outline shader works by using
two different edge detection algorithms.
By using the depth buffer it is determining the outer outlines.
The inner oulines are made using a custom buffer,
which renders the gameObjects, marked with the "outline" layer, with their screenspace normals.In combination with a bloom post processing effect
I was able to achieve a glowing look for outlined objects.


outer outlines
calculated with depth buffer (glowing pink)inner outlines
calculated with object normals(white)
special feature
outer & Inner outline
The outlines improve recognition of shapes and is a core element of our neon-hell art style.

Water Shader
I was also able to reuse the water shader from my last project.This time I made the waves depending on world coordinates so we can place several water planes besides each other without any noticable cuts.
application example
water shader ingame

Rune Shader
This is the first shader I made completly from scratch. A simple alpha clipping Material with a scrolling texture. The glow is created by using HDR-Colors and a Bloom post processing effect.
Fog Shader
For the special responsive fog during bossfights I am using a technique that is usually used for snow.I am using a Camera that renders hidden particle effects on a render-texture. I then use the render texture in my fog shader to displace vertecies of a plain accordingly.
Crystal Shader
I made a crystal shader for our cave level. Here I wanted to experiment with refraction.
Performance
In order to achieve a consistent performance I tried to optimize every possible aspect.I use baked lighting for every static object and blend probes for moving objects.The enemies use animation with less frames when further away from the player.
The calculation of the pathfinding of every enemy is managed and spread out through time.

FPS captured in Engine.
The Build generaly reaches about 100fps more.During empty locations without enemies the fps reaches up to 360fps. During combat with enemies it can go as low as 180fps.


Discord integration
Out of pure curiosity I added a Discord integration. Now Discord recognizes Elders of Rapa Nui as a game and displays the level the player is currently playing.
Premise
For this Project I wanted to deepen my knowlede about shaders and lighting,
while creating a sanbox like editor experience with custom inspectors and editor scripts.While strengthening my skills as a technical director,
I want to focus on performance and a well organized project.
Context
This was the portfolio project of my 5th semester. Our team consisted of 7 people.
We had three main programmers (myself included).We divided the Project into three aspects:
- Player & Animations
- Enemy AI
- Everything else (UI, save system, spawner, dialogue, skilltree)Every Programmer worked on one of those aspects.
I did the last Point since I was the most knowledged in programming. As the Technical directer I functioned as the "glue" of the programming team. In that way it also made sense for me to manage everything "glueing" the game together.
Experience Gained
I overall deepened my knowledge in using Unity, C# and managing a team of programmers.New learned Hard Skills:
- shaders (rune, responsive fog, crystal)
- custom inspectors (relative options appearing / disappearing)
- XML save system
- observer pattern UI
- Discord integrationI am happy with the performance of the game. With Around 180 to 360 fps I achieved a perfomance that is multiple times better than in previous, far less expensive, projects. Still I think there is a lot more optimization that could be done and I want to look further into this subject in the future.This was the first project where I encountered no issues with managing the team. Everyone worked in his section and the systems interact semlessly with each other. Everything went smoothly to a point where we implemented things just for fun
without discupting any of the existing features. Even when any of the Game Designers, Level Builders or 3D Artists had to implement anything, we were always able to merge without unresolved issues.