Elliot Jimenez Bosch


Programmer

Introduction

For this project, we chose the engine made by Jordi Oña and me, which is why my main objective in the project has been to work on the Engine. As I knew how each engine system worked, I took care to improve it and add new systems. I also made some Gameplay scripts.

Before all the programmers started, I started a week before to fix and prepare the engine for all the programmers. To do this, I made a series of changes in different parts of the code and made some documents explaining how to implement new components and resources.

Next, I will show all parts I have done during the project:

Engine

Resources

Throughout the project, I have been retouching the Resource system. Adding new functionality and fixing problems that were coming out. One of the most radical changes was to change the system of saving, of a file (.json) with all the resources to each resource has own .meta.

To manage and see all the resources of the game I have made different windows (tools), where as you see in the image, you can see the information of each resources, select a resources for an object or see all the resources that are in the engine (Window Project).

Finally, I have implemented 4 management features: Import, Auto-Import, Reimport, Auto-Reimport.

Scripting

The Scripting system has been the system that I have dedicated the most time to. I started doing it together with Jordi Oña, where we made the base of the system and later I was correcting the mistakes I had. Take Unity as reference to develop our scripting system, especially the structure (MonoBehaviour), and other systems. Systems that I added to the scripting:

  • CulverinBehaviour, all the scripts inherit from this script and the other parents (Order: ScriptName::CulverinBehaviour::Component::Object)(Jointly with Ferran Martín).
  • To be able to use more than one script in a GameObject and the same script in more than one GameObject.
  • To be able to use a script from another script whether or not it is in the same script. This is one of the most important features.
  • Multi maps to synchronize all C # objects with the Engine (GameObject, Scripts, Components, Vector3, Quaternions, Materials).
  • MonoObjects now use UID so that the Garbage Collector does not modify them (Jointly with Èric Solà).
  • More...
  • API Documentation CulverinEditor
  • Explanation in detail of the Scripting system

Prefabs

I Implemented a system of prefabs. This system is similar to serialization, that is what we really create is a mini scene but it adds the GameObjects to the scene.

To create a prefab you have to select the GameObject that will be the father of the Prefab and then with right click you select the option "Create Prefab". This will be created in Assets with extension: ".prefab.json".

System Build

The build system has two forms. The first system is the "Build Settings" window where you have a some features to create a new build, by default it will be created on the desktop.

The second system is the automatic build. These builds are created by AppVeyor and uploaded to our github. I did this system together with Martí Majó, I took care of what the engine had to do and that of the AppVeyor section. For AppVeyor to do the builds, the only thing that needs to be done is to put in the title of a commit "appveyor_build". For this system what I did was that when passing some arguments to the execution of the engine, instead of executing it, it is normally executed in "Build Mode". Here what it will do is create the build of our game, for what it does is collect and Re-Import all assets to have them in Library.

Editor Map

This system is responsible for the creation of maps and sets the paths where the player can walk and those that do not. This system has 4 kinds:

  • Edit Walkable Map:
  • With this you can set the tiles Walkables, No Walkables, Initial Position and Valyrian Fire

  • Create 3D Map:
  • With this you can create the levels of the game, you can use prefabs made or fbx imported.

  • Edit Navigation Map (IA):
  • With this the intention was to make the path of the AI but in the end another mode was used.

  • Oclusion Map:
  • With this map, we set the zones to make occlusion. I've only made the editor, the functionality has been done by Pere Rifa.

From scripting there is some functions to load the different walkability maps.

OnClick UI

Before implementing this system, we have a similar one but it was more complicated to use and less functional. So implement a system very similar to Unity. When you add a button you have a menu "OnClick ()" in the Inspector, when you set a GameObject of the scene you can choose a script which is inside the GameObject and then you can select a public function of the script.

Once the system was finished, Andreu Rojas was responsible for integrating it in the different components.

Game Mode

Our engine has 2 modes: Engine Mode, Game Mode. The Engine Mode is when the engine is run in editor mode, while in the Game Mode it only executes the necessary modules (that is, UI Editor will not be seen) and the game will begin.

This is achieved by setting a bool to true.

Serialitzation JSON-Binary

At the beginning of the project, I already implemented the serialization in JSON, during the project it was modified according to what we needed. It was not until Alpha 1 that we saw that this method of Serialization is very slow, load and save scene took more than 30 seconds. So for Alpha 2, I implemented Serialization in Binary.

Comparison of load times in Alpha 2 and Alpha 1, respectively:

.

In Alpha 2, it was decided to reduce the size of the maps so the difference is not evident but at very big levels the difference is more visible.

Temporally Scene - Dont Destroy On Load

I Implemented the temporally scene so that by putting together the scenes of the different scrums they did not have to create all the GameObjects again and could move them from one scene to another.

I also implemented a scene loading method that loads another scene in the background until you indicate it and the current one is deleted.

Gameplay

Puzzles

Puzzle Barrels

In this puzzle I was in charge of making the manager, the script that is responsible for saying who does what and when.

Puzzle Projectils

This puzzle consists of when you enter a room the door is closed and from the other side of the room Lions shoot fireballs and you will have to dodge them for a certain time.

More Scripts

  • Base of player movement.
  • The door script.
  • FadeToBlack.