Devlog #6
The core experience of Neuma lies in the investigation. I don’t want the player to just passively read text - I want them to feel like a real investigator who catches inconsistencies and spots connections between seemingly unrelated elements.
So I spent this week building the backend architecture that allows the game to actually "understand" what is being discussed during interrogations.
Semantic Analysis: Words Are More Than Just Words
In most narrative games, dialogue is often just a string of letters displayed on the screen. The game engine doesn’t inherently understand that "I was at home" constitutes an alibi. For Neuma, the system needs to understand the meaning behind the words. Otherwise the player wouldn’t be able to do any actual detecti…
Devlog #6
The core experience of Neuma lies in the investigation. I don’t want the player to just passively read text - I want them to feel like a real investigator who catches inconsistencies and spots connections between seemingly unrelated elements.
So I spent this week building the backend architecture that allows the game to actually "understand" what is being discussed during interrogations.
Semantic Analysis: Words Are More Than Just Words
In most narrative games, dialogue is often just a string of letters displayed on the screen. The game engine doesn’t inherently understand that "I was at home" constitutes an alibi. For Neuma, the system needs to understand the meaning behind the words. Otherwise the player wouldn’t be able to do any actual detective work. That’s where the semantic analysis system comes in.
When you highlight a specific fragment of a transcript - for example, the interrogated person saying "I was alone at home" - the system acts as a translator. It filters out the noise, analyzes keywords and context and converts that raw, unstructured text into a specific logical fact stored in the database and identified by its ID (e.g. "fact_alibi_at_home").
Here’s a sneak peek at how the game defines these facts in the code:
public class TextFactDefinition
{
// The unique logic ID used by the deduction engine
// e.g., "fact_alibi_at_home"
public string FactId { get; init; }
// Keywords required to trigger this fact
// e.g., ["alone", "home", "nobody"]
public List<string> Keywords { get; init; }
// Prevents selecting whole paragraphs to brute-force
public int MaxWordCount { get; init; } = 5;
}
This conversion turns a "fuzzy" narrative element into a hard data point (an ID) that other gameplay systems can process.
Connecting the Dots: The Deduction Engine
To solve a case you need to find relations between different elements - for example, between a blood stain found on a cloth and a statement made during an interrogation. I implemented a system for handling detecting these relations and named it "the deduction engine". It works like a logic gate: it needs to be fed at least two IDs to check if there’s a valid connection between them.
The game doesn’t "see" the blood stain visually. It recognizes it by its unique ID. Raw text, on the other hand, doesn’t have an ID. If I allowed the player to just select the entire transcript, they could easily brute-force the solution without thinking.
I want the player to be precise. By selecting the exact phrase, like "I was alone at home", the semantic analysis creates a Fact ID. Now the deduction engine has two IDs to compare:
1. **Evidence **ID: ev_blood_stain
2. Text Fact ID: fact_alibi_at_home
public sealed class DeductionRule
{
public string Id { get; }
// The dots that need to be connected
// e.g. ["ev_blood_stain", "fact_alibi_at_home"]
public IReadOnlySet<string> RequiredFactIds { get; }
// What happens if player succeeds?
// e.g. Unlock new topic "Ask about the shirt"
public IReadOnlyList<DeductionReward> Rewards { get; }
}
If there is a logic rule connecting them, the deduction is successful.
Final Words
This architecture turns the interrogation into a puzzle where you must truly listen to the words. It also bridges the gap to the biometrics system I discussed last week. Because the text is now data, the game can validate connections between a specific lie (Fact Text ID) and a sudden spike of cortisol (Biometric Event ID).
See you next Sunday!
Neuma
A detective interrogation legal sim
| Status | In development |
| Author | White Raven Games |
| Genre | Puzzle, Adventure |
| Tags | Detective, Dystopian, Godot, Meaningful Choices, Narrative, retrofuturistic |
| Languages | English |
| Accessibility | Subtitles, Configurable controls |
More posts
6 days ago
14 days ago
21 days ago
27 days ago
29 days ago