This game was made in our own engine we created in the school The Game Assembly, it is called Wondrous Engine.
Our gameplay insipirations are from Diablo 3 and we had the same gritty and dark theme similar to the game.
I made more engine related things in this project, since this was our first game in our own engine there was a lot to do to make things work out.
Video shows the trailer of our sixth game project in the school The Game Assembly.
I implemented our Audio Engine that we use in our engine. After som research I decided to use FMOD Core API, it seems to be a handy tool to be using for making quick changes to balance sounds, add different effects, modulation etc.
As I have never used FMOD before there was a lot to learn. There isn't really that much documentation to implementing this in a own engine. But after figuring out how to export all sounds in to a file I just had to figure out how to read everything.
In the audio engine I created so that it goes through every FMODs audio file (.BANK). It loads every event and to play it we use a MessageSystem to play different sounds.
After all that we could play sounds but I wanted a better representation on how to play sounds so I started a audio tool to make everything smoother.
The tool is using a mix of JSON files and ImGui. You can apply and change sounds in-game to all the different audio and then save the settings.
Unity Export Script
I took on to make a script in Unity to export all the assets in a scene to then be converted to JSON files to be read in our own engine. The biggest struggle was to find the balance of all the conversions.
Unity uses left-handed conversions which we use a right-handed conversion in our engine. Also had to adjust all the light settings in our engine to replicate Unitys light system. A lot of communications with different diciplines and a big iteration process here to make everything work.
Also made a export for the NavMesh to get all the vertices. That as well exports into a JSON file and is being read
After the export script was done I had to make a way to read it in our engine and create everything.
I created a SceneLoader script where it loads everything in our engine. It loops the conversion file from Unity Export Script and initialized all objects and creates everything.
So we are looping all the objects here for all the checks that is needed to be done I seperated out Projectile, Enemies and Player in different methods for better readability.
The collision system is using different checks here. We primarily used checks agains SphereVsSphere, SphereVsBox and SphereVsOBB, in which we can see in the CheckEnemyCollisions() function.
This project uses a ECS system which is based on ENTT. Here we grab all the necessary entities which has the components Sphere & Enemy.
In EnemyCollision we do check against OBB and Sphere colliders and also check if the collider is active or not in the active scene.
I made triggers in Unity to then be converted inside the Export Script.
Some of the triggers are Door Opening/Locking, EndTrigger (which switches levels), CollapseTrigger (Object falling down).
Had some struggle here with finding out the real entity and that the entities I am searching for has been created. But I saved Unitys ID in the export script and for making sure that the object has been created before I made a trigger I used a Queue System so that the trigger always got created after the objects.
Here in AddOpenDoorTrigger() it takes the JSON values and read them to get the IDs from Unity. In which we then can get all the different entities colliders to set animations and the triggers.