top of page

The Negotiator

Time: 300h 
Team Size:  11 people, of which 6 programmers
Engines: FaktalOktav (Custom Engine) and Unity
Libraries: DirectX 11, FMOD, NLohmann Json, ImGui
Language: C++/C#

The Negotiator is a 90's era shooter game with a simple color palette and gameplay inspired by Roboquest and Quake. To enhance the level design process, we decided to split the workload 50/50 between our engine and Unity. This allows us to create the gameplay logic in our engine and the visual layout in Unity.

I refactord the pre-existing UI code and created a tool for UI modification and Implementation.

The purpose for this tool was to streamline the process of creating and modifying UI.

​

The functionalities that I wanted to fulfill were:

  • Scale and Orient UI Element 

  • Implement Text 

  • Create action functionalities

  • Layering options

  • Save functionality

Scale and Orient UI Elements

The first feature implemented was scaling and orienting UI elements. During this project I learned to work with the interaction  between UI and DirectX 11 leading to various iterations of UI.

​

The first iteration utilized a pixel-oriented approach, where a position such as 100x100 represented the pixel position on the screen. Although straightforward, it proved problematic with resolution discrepancies across different screens.

TheApplication_Debug_VexPFfEQFH-ezgif.com-video-to-gif-converter.gif

Save Function

videoForSave.gif

The second iteration was resolution-oriented and took the percent value for positioning, meaning 0.5x0.5 is the center of the screen. The adjustment made required changes to each UI elements and prompted the creation of a Save Function, to streamline the process and save time.

​

The Save Functionality takes every exposed value inside the ImGui editor and creates a JSON file for them, similar to serialize and deserialize from prior projects.

Text has been a crucial yet missing feature for our engine. We modified our SpriteDrawer class to incorporate a SpriteFont into its batch, enabling both text and sprites to render within the same Render Layer.

​

Text differs from sprites in that instead of fixed sizes, which could cause tearing. I choose to utilse font size. This appoach scales the text proportionally to its string length, ensuring smooth rendering.

​

Adjusting Text

TheApplication_Debug_1LV2w2gEe7-ezgif.com-video-to-gif-converter.gif

Changing Functionality of Button

TheApplication_Debug_t3tKiZxpYR-ezgif.com-video-to-gif-converter.gif

The UI Elements were developed further to allow for function calls. Each available function is represented by a bit within a 64-bit variable. This design allows an element to have multiple functions attached to it, which are executed upon clicking, dragging, or hovering. For more complex functions like scene transitions or color swaps, additional sub-options for values are provided.

UI Editor

Input Controller & Mapper

Event based Input Controller

image.png

Further development of our gameplay code was needed for us to develop quicker and more efficiently. 

​

I developed a key mapper allowing us to change key bindings for remapping purposes. This allowed us to make multiple choices on how to execute event.

​

A joint effort of the gameplay team was to created a comprehensive structure of controllers, built up on Input, AI, and NetworkMy role was to create the input controller for our game, which lead to adding callbacks to components.  

bottom of page