A Familiar Tale

Pitch!

Keep your courage as you explore a mushroom infested forest, full of puzzles and help your grandma in need

Gallery

Trailer

Main Contributions:

  • Wrote a custom ECS system

  • Made a node graph system

  • Editor tools and features

  • Improved prefab/level loading

  • Worked on rendering features

  • Worked on trying to fix our broken PBR

The Custom ECS System

During the previous project the engine used Entt as a ECS system, though we ran into a lot of problems with it as we wanted to work in a less data oriented way as we felt it would speed of development if we could work in a way we we're more familiar with from engines like Unity. So I set out to write a custom ECS both, because we needed a new solution and because I wanted to try my hand at it.

The main pain-points from Entt I wanted to address with this implementation was:

  1. Meta-programming. I'm a big fan of meta programming and though Entt allows you to do some stuff with templates, it's not really got any support for doing things like getting arbitrary component types at runtime.

  2. Pointer safety. I wanted to be able take a pointer to a component and be sure in that the component hasn't moved in memory when you try and look at the pointer later on. Moving components around, though more efficient for iteration causes a great deal of unneeded problems we could avoid.

So, my idea then was to build a more or less standard ECS registry but with the option to interact with the component groups by not only template but also by a component hash or name. I'll also add a means of iterating over all the component hashes present in any one registry. This solves issue 1 but to solve the second issue I'll have to be a little clever about how I handle the component memory and effectively build my own allocator if it's to be efficient. However, I didn't have enough time to implement my de-facto solution for the second problem before the project concluded... So for now i just allocate components on the heap(with surprisingly alright iteration performance actually) and fill a sparse-dense set with pointers to the components on heap. I have however already implemented most of my actual solution for this in a standalone testbed. If you're interested in how I plan to solve that part you can continue read about it here.

Team

Artists

Josefine Rosenlind

Amanda Westergren

Viktor Gustafsson

Louise Wyke

Programmers

Jakob Nilsson

Linus Bensryd

Aron Jönsson

Gunnar Frennesson

Melvin Ringheim

Oliwer Alldén

Animators

Aron Tinz

Elliot Raud

Level Designers

Alexander Thambert

Julia Nyberg

Viktor Lundblad Åfors