Character-aware interviews
Defined character knowledge, interview states and reply rules, so Dafu and Ms. Lin provide complementary accounts.
Explore details ↓AI narrative investigation

Ask your own questions. Follow the evidence.

THE PROJECT
What would a rescued cat tell a reporter? I built a narrative investigation game where players ask their own questions, compare accounts and turn sourced evidence into a published story.
DESIGN & IMPLEMENTATION
Defined character knowledge, interview states and reply rules, so Dafu and Ms. Lin provide complementary accounts.
Explore details ↓Connected discovered topics and source-labeled material cards to article assembly and editor review.
Explore details ↓Created the visual world and reporting interfaces, and built tools for layouts, hotspots and portraits.
Explore details ↓01 / RESEARCH
My own experience rescuing stray cats shaped the project. I combined social-media research, field observation and conversations with rescuers to explore how a cat and a rescuer might remember the same event differently.
02 / INTERVIEW STRATEGY
Questions affect both the information returned and the character’s Trust, Pressure and Focus. Familiar topics can build trust, painful memories can raise pressure, and repetition can drain attention. Players must decide whether to pursue a clue or change the subject.
03 / CHARACTER KNOWLEDGE
Dafu remembers something tightening around his neck. Lin Min can explain what the vet found and how he was treated. Each character answers from their own experience; the notebook brings their accounts together under one topic while keeping the sources distinct.
04 / NOTES & WRITING
The notebook separates established facts from unanswered questions. Discoveries unlock source-labelled material cards; players select 8–10 cards and assemble a draft with a writing template. The editor then flags missing facts or misleading wording, giving players a reason to return to the investigation.
TOPIC / NECK INJURY
Something tight hurt his neck.
He could not remove it himself.
Next lead: ask the rescuer about the injury and treatment.
Reporter’s Notes study: a topic, an account, its source and an open question.
05 / VISUAL DESIGN
Simplified shapes, broad shadows and muted greens and ochres connect the characters and environments. The community map gives each lead a place to investigate. At the editor’s desk, publication logos, reachable magazines and a bitten pear on the laptop establish the workplace and its personality.
06 / INTERFACE DESIGN
Photographs, a notebook and the cat translator connect the interface to the player’s job. Interview reactions make character states visible, while paper material cards carry the same visual language into the writing screen.
07 / SYSTEM IMPLEMENTATION
I separated generated dialogue from game-state changes. The excerpts show how an interview selects its character-specific engine, records new intel, checks related clues and extracts newly unlocked material cards. Notebook hints then change according to the facts and sources the player has found.
topic.inspiration = null;
topic.inspirationIsInvestigate = false;
topic.hintQuestion = null;
if (gs.HasIntel(IntelIds.Sleep) ||
gs.HasIntel(IntelIds.ObjectGone)) {
if (gs.HasIntel(IntelIds.LinIdentity) ||
gs.HasFlag(FlagIds.LinUnlocked)) {
topic.inspiration =
"How did Dafu recover after surgery?";
topic.hintQuestion = topic.inspiration;
} else {
topic.inspiration =
"Find someone involved in the rescue.";
topic.inspirationIsInvestigate = true;
}subject = who;
returnToWritingAfterEnd =
returnToWritingAfter;
log.Clear();
gainedThisInterview.Clear();
LastExtractedMaterials =
Array.Empty<string>();
boundaryHit = false;
lastReply = null;
lastPlayerQuestion = null;
recentDafuFoodMentions.Clear();
// ...
if (who == InterviewSubject.Dafu)
engine = new DafuRuleEngine();
else
engine = new LinRuleEngine();
InterviewDebugLog.SessionStart(who);var reply = engine.Process(question);
var matsBefore = SnapshotUnlockedMaterials();
foreach (var id in reply.unlockedIntel)
{
if (GameState.Instance.GrantIntel(id))
{
gainedThisInterview.Add(id);
TryCrossCheck(id);
}
}
LastExtractedMaterials =
DiffNewMaterials(matsBefore);
InterviewMaterialExtractor.ApplyExtraction(
subject, reply, LastExtractedMaterials, log);
if (reply.cognitiveBoundary)
{
boundaryHit = true;
GameState.Instance.Data
.dafuCognitiveBoundaryHit = true;
}
if (!deferSpeakerLines)
{
if (subject == InterviewSubject.Dafu
&& reply.replyLines != null)
reply.replyLines = EnforceDafuFoodQuota(
reply.replyLines, reply, question);
AppendSpeakerReply(reply);
}08 / UNITY TOOLS
Three Unity tools support iteration: save and restore UI positions, edit investigation hotspots with normalized bounds, and preview differently proportioned character sprites in a shared portrait slot. Portrait previews do not advance the conversation.