Fungal is Cyber Sloth's second game and is a gruesome third person shooter game. You enter a fun house to help exterminate the horrid corruption which has occupied the ride, personnel tunnels and the main amphitheatre. You help the exterminator shoot their way through fungus blisters and past horrible marionette creatures to get to the source of the corruption.

  • Third person shooter
  • 15 weeks half time
  • Our own Lucky Engine using DirectX 11
  • Using entity component system EnTT

After preproduction, and the group having decided on what type of third person game we wanted to make, it was time to discuss amongst the programmers who would be responsible for what. In preparation, we had listed a few systems, features and new tools that we wanted to implement and one of those was a basic game editor. In our last project, Spite, there was a limited number of things other groupmembers could test out in the game. Furthermore, there was little to no way for them to try out models, animation or VFX without the help of a programmer. Therefore, I was excited to allow them to have more freedom, using a custom editor for our engine, and took on this responsibility.

Other than the editor, my responsibilities would be to (like in the previous game) export levels from Unity to json-files, import this data into the game and the maintenance of the particle pipeline. Even if I had already created this functionality before, the criteria for this game required some new features and I was presented with new and fun challenges.

Editor and its Functionality

The plan for the editor was for it to be convenient for all disciplines and that it could be something programmers could add functionality to whenever there was a need. I saw my job as making a base from which it could grow. The entire editor is built using Dear ImGui.

The first thing I added (after getting the rendering of the game to work) was a scene hierarchy which I divided into a few convenient tabs. It started off at models, lights and particles, however, I ended up getting some requests from the level designers to add triggers and scripted (objects) as well. The scene hierarchy also has a search functionality, so that the user may search for their target object via its ID or its name.

The second thing I added was the object inspector. Here, I expose the chosen object's transform. Felix Ulvmåne, who was working on the scripting part of the editor, could then easily add his UI here, such as buttons to add blueprints.

Under the Entity-button, the user may add a model or a particle system to the scene. This allowed the graphics artists to check their models and textures directly in a scene together with other models and in the right lighting. Other features that the editor offers, that I added, are a scene-dropdown to load different scenes, cubemap and environment light settings and the particle editor. The remaining features that my group mates added include a play-mode, object material settings (both by Felix Ulvmåne) and a flexible dev-camera similar to Unity's (by Erik Lindskoug).

ID Generation and Managment

In our previous project we did not see any purpose for IDs to be saved in between builds (we could generate them for every launch and not worry about it too much). For this project, one requirement to pass the course was the possibility of node scripting in the engine. This introduced a purpose to save IDs for all entities in between builds, so that the saved scripts connected to specific entities would not get lost or affect the wrong ones. Since we do not create our levels in our engine, we now needed a system in Unity that would generate new IDs for new objects, without the possibility of duplicates. For this I created an IDManager in C# to be used in Unity's editor mode.

I must admit that I have fought with Unity a great deal in order to get this to partly work, realying heavily on the IDs for objects being appropriately contained within Unity's meta-files. It worked surprisingly well until we started developing a very complicated pipeline where levels got turned into prefabs and got moved around in different scenes. For our next and final project, I hope that our workflow can get smoother or perhaps I can come up with a more bulletproof way of containing out IDs in Unity.

Particle Editor

I continued working on the particle editor that I started developing for the technical artists in Spite. Some of the new features that I was able to implement this time around were sprite sheets (animated particles or randomised textures) and rotation of particles.

One other big change for the particle editor, was that it now needed to be integrated into the game editor. This was a fun challenge, which also gave me the time to refactorise its inner workings. Before, I was not as familiar with large interfaces using ImGui, however, after a bit more experience I could really give the particle editor its own, very much needed facelift.

Here, you can see some spore clouds and blister splatter made by technical artist Anton Karlsson. Under Specialisation/Particle editor I write more about the particle tool.