• English
  • Français
  • Games by François Hautier

    OEngine development (from July 2020 to February 2021)


    Continuation of OEngine development (from June 2019 to June 2020), this article covers the period from July 2020 to February 2021, corresponding to the first half of the development of The Smurfs – Mission Malfeuille.



    Mentioned several times throughout this article, what we call ‘Entity‘ in OEngine is an object type based on the Entity component system pattern. Each game element (player, NPC, scenery, mechanism) are entities. Introduced by Passtech Games, they outclass historical GameObjects, offering the possibility to be easily composable, inheritable, ‘spawnable‘…

    Discord bots

    In order to improve the comfort of the users of the OEngine editor, it was imperative to fix its stability. During the production of Asterix & Obelix XXL 3, it was extremely common for the editor to crash several times a day for most users (level artists, level designer, etc.), so much so that it became a habit for them and they were used to it, as long as it was possible to find a way around the problem and continue to work. Excepted for blocking crashes, the engine development team was no longer even aware of the problems encountered, which weighed on the mental health of users and slowed down the progress of the production.

    To remedy this, an idea came to my mind, starting from a joke: create a Discord bot (which is our internal communication tool at OSome Studio). Its role: to publish in a channel the error messages encountered by OEngine users in case of crash or warning, with the user’s name, the editor’s build number, the callstack… Thanks to this, we – programmers – were now notified immediately when a user crashed, and could react accordingly to solve the problem! It was actually quite funny (maybe a bit strange too) to call users almost immediately after their crash to better understand the circumstances that led to it.

    Talking about this bot is a good opportunity to remind that bug hunting represents a considerable but necessary time, for me as well as for my fellow programmers, but that it is difficult to describe and make interesting these various fixes. However, as I mentioned in this previous article, they are an opportunity to discover parts of the code that I wouldn’t necessarily have the occasion to visit or modify in other circumstances.

    Another Discord bot was created later, with the task of sending out release notes for the latest build of the editor built by Jenkins to the users.

    Multi-view

    It is now possible to work with multiple views in the editor! This new feature follows my work to improve the ergonomics of the 3D view (described in this article). A lot of code refactoring was needed to achieve this result: all the code that was designed for the main view is now designed to work with an unlimited number of views (camera movement, view manipulator, grid drawing, etc.).

    Additionally, it is possible to create a camera GameObject from a view, and open a view from a camera GameObject. This allows for example to keep a particular point of view in a level. This point of view can also be adjusted easily, by moving the position and the target of the camera directly with the manipulators.

    This feature was particularly used by the level designers, who during the production of Smurfs, worked on the architecture of the levels with multiple open views, allowing them to monitor what the level looked like from all angles, with each movement of objects.

    Flags

    The concept of flags is not new in OEngine, they are for example used for physics, among others. However, I have been asked to extend their use to scene objects in general, such as entities or the height map, and to improve their usability:

    • Users can now create and edit flags from the editor, which was previously a task assigned to programmers.
    • The flags can be used with the entities, and these inherit the flags from their parent entities.
    • Scene objects grouped by flags can be hidden as needed, independently from one view to another.
    • It is also possible to hide the objects grouped by flags in game on console, for example, to more easily identify which objects reduce performance.
    • Similarly, we can prevent certain entities from appearing via their flags depending on the platform, to improve performance (remove small flowers on the ground on Switch, …).

    Prefabs

    In OEngine, what we call ‘prefabs‘ is a type of GameObject that adds to the scene the GameObjects as they are arranged in the level pointed to by this prefab. A kind of GameObject that groups others. This notion was brought up to date by Alban Guéret from Passtech Games, who had created the prefab entity component, during the development of Curse of the Dead Gods. This component was then specific to this project.

    For the needs of our own production, I made this component generic, so that it could be used by all projects, including ours. I then made some corrections: it is now possible to select the prefab in the scene, to hide it, and to resize it in a uniform way. As a bonus, I fixed the function for constructing a quaternion from a matrix, which was constructing a broken rotation with an unnormalized matrix…

    A variety of tools and improvements

    To save time for the level artist when they dress up the levels, I added a magic button to the HeightMap, to automatically sculpt it according to the objects in the scene.

    For a better understanding, the closing message of the documents opened in the editor has been modified, to make it conform to other software. It’s silly, but this is the kind of detail that can waste time.

    Added a ‘rule of thirds‘ display, and a tool to easily measure the distance of a point under the mouse. These tools work regardless of the view.

    It is now possible to create entities ‘on the fly‘ under the mouse, among the entities models available in the scene.

    Added a button to select entities that inherit the same entity as the one we are interested in.

    Menus can now display several sub-menus, not just one as before.

    When searching for an item in a menu (like this one above), empty categories are no longer visible.

    Improved the order of items in the hierarchy window: folders appear first, followed by objects.

    Added the notion of solid angle for the occluders, to be able to exclude from the rendering some occluders, if they are too small. We can now also define a maximum number of occluders. I also set up a visual debug of the occluders, to understand how they interact with each other and correct their behaviour if necessary (for example, one occluder can occlude another one).

    Improved control of the ‘free camera‘ available in the engine, used by the marketing department to make screenshots, or by us developers, for debugging purposes.

    Development of a tool which checks that no audio voices are missing for each language available in the game.

    Export of the rendered objects list during a frame to a csv file, with their number of triangles, their distance from the camera and their volume, to help the optimisation of the game.