Spite - Order of Chaos

"Bludgeon your way through hordes of enemies
to save the high priest before your order falls to evil"

Spite was the first game we made during our second year.

After using Unity and Tga2D during our first year it was time to make our own game engine from scratch.

We had 14 weeks half time to make a game engine and a game. A tough task, which I'm proud to say we accomplished

Platform: PC
Engine:
Metronome
Project Duration: 14 weeks, 50 %
Team size:
16
Genre:
Hack-and-Slash action game
Inspiration:
Diablo

Gameplay and Feedback

  • Player Movement and Abilities

    • The player had many abilities such as a leap attack and a spin attack. I implemented movement and attack length and range for some of these abilities. Variables such as duration and range were configurable via ImGui to facilitate iteration.

  • VFX (Vignette, Fog, Flickering)

    • For extra feedback and atmosphere I added a vignette on death, fog rendering and flickering of our point light that simulated candles. I also added a hit effect on enemies which made fighting much more satisfying.

  • Player Camera

    • For extra feedback and gamefeel I added camera shake on player damage and a zoom out effect during the final boss battle.

Hit effect, leap attack, spin attack

Mouse picking against colliders

Engine

  • Input

    • Together with Aron Jönsson I implented an event driven input system to minimize the need of polling. Objects subscribe to events and receive a signal when an input is triggered.

  • Collision Manager

    • I implemented a simple collision system that was sufficient for this game since it used a navmesh for all actor movement.

  • Mouse Picking

    • I implemented mouse picking againts the ground and our colliders. A ray was constructed based on mouse placement and the player camera frustum. This was used in concert with ray vs. plane / ray vs. collider intersections tests.

Engine

  • Animations

    • I implemented an animation system that uses FBX sdk precomputed bone transforms. It can handle blending between animation states for a configurable amount of time and one-shot and looping animations.

  • Frustum Culling

    • For performance reasons we needed culling. I implemented a sphere based frustum culling system that greatly reduced the number of rendered meshes each frame.

  • Sprite Rendering

    • I implemented a sprite rendering system with Aron Jönsson that was used for our UI and HUD elements.

  • Shadows

    • I added shadows from spotlights on our meshes

Shadows

Lessons learned:

  • Cooperation and using other programmers systems

  • The benefit of agile development, the importance of being willing to kill your darlings

  • Writing a game engine is difficult, it requires constant upkeep and testing