[p]November's post focuses on one of the major feature changes to the next build of Brigador Killers: the narrative system. The narrative system
was touched upon before in this post. A lot of the things from that previous news article still apply, but the presentation and utility of the system has changed.[/p][p]This time around we'll show these things in action, and then explain the moment-to-moment. To start, watch this short clip from an internal build recorded on November 24th 2025.[/p][previewyoutube][/previewyoutube][p]Plot wise, Brigador Killers
takes place around the events of Brigador Killers: Pilgrim. The consequences of what happened in the book have altered local society, and security forces are widespread - in Mar Nosso at least. The player is crossing a border checkpoint in a Lowboy from Mar Nosso into Sady to seek medical attention for their friend in the passenger seat.[/p][p]At the 0:16 mark, the player approaches a Lil' Cop and the following ephemeral text appears over the Lil' Cop on screen: "
Gee! Make sure your transit papers are ready!"[/p][p]
![]()
Internally this type of text is called "ephemeral text" because it only appears for a short time. The previous game also had text that would appear like this (e.g. the "GREAT LEADER IS DEAD" message), but the reason you only really saw it in that one intro mission was because of how limited it was in its implementation. Now, however, we have more complicated tools for the narrative. Let's look at what this exact moment looks like in Tiled, which is the WYSIWYG editor we use to create maps.[/p][p]
![]()
The rectangle in the center with the arrow pointing out towards the Lil' Cop is a type of script object called a text trigger. What that means is when the player crosses into the space marked by the rectangle, it causes text to appear on screen. Since we want to make it as though the Lil' Cop is talking, the text is offset to appear over its head, hence the dotted arrow leading to a point above the Lil' Cop. The Custom Properties of the script object are the following:[/p][p]
![]()
[/p][p]These properties dictate what the text is and its appearance. Where necessary, ephemeral text can have a different color, or appear on screen for longer periods of time.[/p][p]At the 0:18 mark, the player passes by a lowered gate, which raises behind them, and is stopped by the border guard and a dialog feed opens with a portrait of the guard. This next part looks like this in Tiled.[/p][p]
![]()
There are four new named script objects to pay attention to here. The first two are both named gate trigger, which sandwich the other two script objects named Raise Gate and dialogue_trigger. The gate triggers are another kind of scripting object that connect to the gate props they are placed under, and as developers we can set whether these gates start raised or lowered. In this exact instance, the first gate starts lowered, with the second one in the raised position.[/p][p]The next script object raises the gate the player has just passed. This happens because, much like the text collider with the Lil' Cop from before, this is a
script collider. When the player passes into this collider, a callback called RaiseGate occurs. Callbacks can make specified actions happen within a level. In this case we want a gate to raise, locking the player in and creating a sense of feeling trapped.[/p][p]When the player enters the checkpoint, the gate will raise behind them and the inertia of their movement will carry them into the fourth script object: dialogue_trigger. Looking at the Custom Properties of this object in Tiled, we see a property that has a string of text attached: e01_h00_m01_m_gatebribe-00.[/p][p]
![]()
[/p][p]Unlike the ephemeral text from earlier, this trigger instead causes the storylet of the same name to play, and to inspect this we need to look at the dialogue editor in-game via the debug panel.[/p][p]
![]()
On the left is the list of eleven storylets that play during the dialogue with the Border Guard. On the right is the contents of a selected storylet from that list. Going through the fields from top to bottom: the
name field is the same string of text that is in the dialogue_trigger script object in Tiled mentioned before. The
begin_callback field contains HaltPlayer, which is a callback that, when this dialogue storylet begins, the player is immediately halted on the spot. The
priority value of this storylet is set to a value of 1 which, for the purpose of this storylet, is to make sure that
this storylet plays first. The
speaker field is left as null, since there is technically no speaker that the player is talking to (speaker being an NPC that was placed in Tiled and given a name). The
display_name field - not to be confused with the speaker field above it - is how the character talking is named when they are speaking in-game as in the footage at the start of this post. The
response field is how the game links to another storylet to follow after this one finishes; without this the "chain" of storylets will end, which is important for the next paragraph. The
text field is what text will appear on screen. The
duration slider sets a delay for how long it takes for the "continue" prompt to appear during dialogue (or, if the ephemeral checkbox is marked, how long the text will appear on screen). The
theme field points to a .json file that contains the portrait and relevant text colors for the character speaking. Both
associated_gvar and
predicate are not used in this exchange, but if we wanted to create a situation where a storylet would only play if a player has performed a specific action, then we would use this. Lastly, the
file field is the location of the .json file the storylet is saved to.[/p][p]Skipping to the final storylet in the list, which is e01_h00_m01_m_gatebribe-10, we see the following.[/p][p]
![]()
[/p][p]The main thing to note here is begin_callback contains the LowerGate callback. This callback is what lowers the gate in front of the player when this final storylet plays. What's important here is if there was a break in the string of responses, the player would not be able to reach this part and trigger the callback to lower the gate ahead of them.[/p][p]When the player drives on and clears the gate at the 0:38 mark, they encounter the last script object which is another script collider called Cycle Gates.[/p][p]
![]()
This last callback cycles the gates back to their initial position, raising the one the player has just passed, and lowering the first one, as if to resume the sequence of processing vehicles passing through from Mar Nosso into Sady.[/p][p][/p]
Other things of note
[p]There are a couple of moments in the footage that are not directly related to the narrative or scripting, but they are not entirely worthy of a whole post themselves either.[/p][p]As the player is driving up to the checkpoint at the beginning of the footage you will hear the sounds of the Lowboy's engine and the sound of the tires on the asphalt.
Dave has demonstrated different material noises on ground tiles before with his footsteps and this effect also applies to vehicles.[/p][p]At the 0:07 mark you will see the new "bubble" effect for the player as the Lowboy drives by an antenna.[/p][p]
![]()
[/p][p]This bubble allows the player to clearly see their position and orientation even behind large objects. You see it again as the player passes through the gate into Sady. This effect is functionally identical to what you might have seen in the first two Fallout games when navigating your character through buildings.[/p][p]
![]()
From 0:18 to 0:38 the turret of the SWAT APC on the other side of the checkpoint is visibly tracking the player.[/p][p]
![]()
This is done in Tiled by simply placing an enemy SWAT APC, and in the NPC's custom properties setting it to be immovable and to have no loadout. In other words, it's rooted to the spot, and has no weaponry, but since the APC considers the player an enemy, it still "aims" at them, and so the turret tracks them as the player passes through the checkpoint.[/p][p]Lastly, we see Mar Nosso's roads at the start of the clip with fresh asphalt, lines of palm trees and cold street lamps…[/p][p]
![]()
...And as soon as the player passes through the checkpoint they are met with the quality of Sady's municipal infrastructure.[/p][p]
![]()
As much fun as it is to have new narrative tools and scripts to play with, it's always important to remember that we can tell a story through architecture too.[/p][p]
![]()
[/p]