Â
Stay and Slay
Project Details
Engine: TGE (my school's rendering framework using C++ and Directx 11), modified by us.
Duration: 16 weeks, 50 %, completed in April 2023.
Team: 5 programmers, 5 artists, 2 level designers.
Genre: Action FPS.
Inspiration: Anger Foot.
Awards: Three nominations in The Swedish Game Awards, in the top 5 out of 96 games.
Contribution Highlights
Animations Layers and Filters
Building upon my animation system in our last project, Curse of Archibald, I added animations layers and filters. This was because we had a need to separated upper body animations from lower body animations, so that enemies could run and shoot or hit etc.
There are two kinds of layers, interpolating and additive. Each layer got a magnitude to blend the results of the previous layer, and a filter to control what bones to effect.
Custom additive reference. It was hard to visualize the end results of additive blending, when working from a bind pose as reference. So I added this feature.
Animation culling, the animations does a light update when out of frustum, only updating what frames they are on.
I made a animation controller for the player arm animations using bit flags to update the state of the player every frame, and use the appropriate animation based on that.
Shadow Map Atlas
I implemented a shadow map atlas that our point and spotlights use. The pointlights only use 4 grid cells as a tetrahedron, to save performance.
We sort and cull all the lights and create shadows for the closests lights within a max range.
Using percentage-closer filtering for softer shadows.
Blood Splatter VFX
The blood splatter uses a mesh that I expand the vertices of in the vertex shader using a start time. The I UV masks the blood with noise and based on the distance from the pivot.
Game Juice
Game juice and polish is definitely one of my favourite parts in game developing. Alternative pistol animation, additive side shooting and muzzle flash lights (ljust the light) are some thing I helped add to the game to increase the experience and help it feel alive.
Weapons with PhysX
I made a system in our entity component system, handling how enemies and player can pickup and hold weapons, and throwing them switching layers with PhysX to kill enemies.
GPU and CPU Profiling
We needed more performance multiple times during the development of this game and I made most of the optimizations. The optimizations could be better culling, improved algoritms, removing square roots, early discards in shaders, and event telling our level designers to no use somethings too much. Thanks to profiling both the CPU and GPU I could narrow down many problems with the engine.