← All projects

AI narrative investigation

Ask your own questions. Follow the evidence.

↓
Dafu

THE PROJECT

Overview

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.

MY ROLESolo developer
Engine & tools
Unity / C#
Development
May 2026 – present
Languages
English / Simplified Chinese

DESIGN & IMPLEMENTATION

My Contributions

01

Character-aware interviews

Defined character knowledge, interview states and reply rules, so Dafu and Ms. Lin provide complementary accounts.

Explore details ↓
02

Notes, cards & writing

Connected discovered topics and source-labeled material cards to article assembly and editor review.

Explore details ↓
03

Art, UI & Unity tools

Created the visual world and reporting interfaces, and built tools for layouts, hotspots and portraits.

Explore details ↓

01 / RESEARCH

From cat rescue to narrative 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

Choose when to ask and when to give space

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.

Interview UI: state bars at left, dialogue in the center and suggested topics at right.

03 / CHARACTER KNOWLEDGE

Compare accounts without erasing their sources

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.

Dafu recalls the sensation; Ms. Lin identifies what the vet found.

04 / NOTES & WRITING

Turn an interview into a sourced article

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.

  1. 01Discover a topic and record its source.
  2. 02Ask follow-up questions to fill the gaps.
  3. 03Choose 8–10 unlocked material cards.
  4. 04Revise after the editor checks facts and wording.
LifePastInjuryRescuerAwayReturn

TOPIC / NECK INJURY

Dafu’s account

Something tight hurt his neck.
He could not remove it himself.

STILL UNKNOWNWhat was it?
Source: Dafu

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

Let everyday objects describe the neighborhood

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.

Community environment artwork: shared facilities, seating and the guard booth.

06 / INTERFACE DESIGN

Build the interface from a reporter’s tools

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.

The main menu uses photographs and reporting tools as navigation.

07 / SYSTEM IMPLEMENTATION

Keep game state under explicit rules

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.

01

Notebook hints follow discovered clues

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;
    }
02

Reset the session and select the character engine

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);
03

Record intel and extract newly unlocked materials

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);
}
View the original portfolio designs

08 / UNITY TOOLS

Adjust UI and portraits without replaying dialogue

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.

Browse the portfolio pages8 pages +
Portfolio page 2
Portfolio page 3
Portfolio page 4
Portfolio page 5
Portfolio page 6
Portfolio page 7
Portfolio page 8
Portfolio page 9
Open the full PDF