../aic

Client : Critical Wit LLC

AI : Confidential

TL; DR.

I wrote all the code for the AI : Confidential demo from the ground up, with various systems ready for full-game development, and a custom UE5 plugin to handle custom dialogue assets and editor tools around dialogue, animation direction, and various other narrative elements, allowing the team to quickly integrate complex dialogues and scenario elements without the need for further coding.

The full game development is on hold at the moment, in search for funding.

About the game

AI: Confidential is an upcoming first-person narrative game, made in Unreal Engine 5 .

Here is the official gist available on its steam page:

Artificial Intelligence, Real Problems: You are Makenzy Turner, an affable RoboTechnician employed by AI megacorp, Indelligent Solutions. With your trusty assistant ARI, use high-tech tools and old-fashioned empathy to mend everything from broken parts to broken hearts.

AIC Demo promo screenshots

My work on the project

As part of a core team of 5 people, I developed the whole demo from the ground up in ~8 months, in Blueprint and C++ .

As part of that project, I developed :

The core systems have been developed only in C++ , to allow easy maintaining and make their complexity manageable, as well as allowing to easily solve merge conflicts in git, while level-specific logic was implemented in Blueprint .

UI was developed using UMG, with a number of custom UMG widgets written in C++ to provide an easy-to-use API in the rest of the C++ code, with actual logic often written in UMG Blueprint .

About the dialogue system

Padbury in dialogue

The game being mainly narrative, a lot of my attention has been dedicated to the custom Dialogue Plugin that allowed to import complex branching dialogues with variable logic into the engine.

Part of it allowed for precise direction of animation and in-game events; each line having a special field that could contain animation sequences and events in the world.

To allow narrative designers to set those up without the need for my intervention, I created a simple syntax that could be used on every dialogue node in the game:

@MrPadburry : #Sad > Nod > 1.2s > LooksRight;
@DustBuddy : PatsShoulder > 30% > !ReturnToBase // Event ReturnToBase is set up on Dust Buddy;
5s > !CloseDoor; // Event CloseDoor is set up as a "level event"

@ would signify a character code, to know which character should be affected by the line. # signifies an emotion, which state persists until it is changed to something else. Times expressed as seconds (s) of percentages (%) designate delays in the sequence (percentages are percentages of the line duration) and normal tags like LooksRight triggers a 1-shot animation. Tags started with ! trigger an event, either on the Character blueprint itself, or on the Level Blueprint.

To avoid unnecessary load on the CPU at runtime (Dialogues can be quite heavy in text and data), everything is parsed when importing the dialogue in the editor and transformed into UObjects that are serialized in custom UAssets for runtime use.

This system also allowed to direct the Objective System, with an equally simple syntax to be used in the external narrative tools :

MainObjectiveID : Main Objective Title
-> Objective description. This part can be a long string, 
only to be shown in the expanded objective view

- Task1ID : Sub-Objective 1 title
- Task2ID : Sub-Objective 2 Title
OR
- TaskAID : Sub-Objective A Title

I developed the whole demo (think of it as a first introduction level) with the full game in mind; every system is meant to be used as-is in the full game, with the inevitable tweaks and new features that the full game development will bring.

Many other “systems” in the game would be worth a paragraph, but I’m afraid most of them must remain trade secrets, and would reveal too much.

River Song Spoilers Gif

TO know more, Visit the project’s official website ➡️.