Living NPCs: Zero-Script LLM Characters on a Shared Engine — Live Results from a 2D Village and a 3D Mage Isle
DOI: 10.5281/zenodo.23627899[1] · View on Zenodo (CERN)
Abstract #
Can a game character run with no scripted behaviour at all, so that every step, word, blow and spell starts from one language-model decision, and still be fast, cheap and sensible enough for real-time play? We built a shared engine for such characters and ran two games on it: Oakhollow, a 2D medieval village, and Quarthaven, a 3D isle of twelve elemental mages. On private copies of both games, scripted players greeted, asked, insulted, attacked and healed 34 characters (437 model calls with gemini-2.5-flash-lite and mistral-small-3.2); we also analysed 577 live calls and counted each game’s code. First, a decision costs a median of 0.738 s and USD 0.2042 per 1,000 calls with gemini-2.5-flash-lite in Quarthaven (2.110 s with mistral-small-3.2); because characters let a moment settle and type at a human pace, a player waits a median 7.44 s for an answer. Second, characters perceive what happens around them: 91.3% of 46 bystander decisions after an attack on someone else showed a visible reaction, though only one bystander fought; victims turned hostile in 7 of 19 cases. Third, a second game is mostly a definition file: Oakhollow ported onto the engine needs 310 lines of its own code, 15.07% of its standalone version, and Quarthaven needs 835 lines on top of a 1,966-line core.
1. Introduction #
Article 1 of this series classified the ways AI can be attached to game characters and chose a server-authoritative browser world, in which characters receive structured perceptions and the server validates every action, as the testbed [1][2]. This article reports what happened when we built it in its most radical form. Most “AI NPCs” are hybrids in which a behaviour tree, schedule or reflex moves the body and a language model writes the lines. Our first village worked like that: routines, and a reflex attack when an opinion score fell too low. The version deployed on 24 October 2026 removed all of it. A character that does not decide to move stays where it is; a character that does not decide to fight never fights.
That raises three practical questions: whether a world in which nothing happens without a one-second model call can run in real time, whether characters without a scripted fallback respond to the world around them and not only to words addressed to them, and how much of a game is left to write once such an engine exists.
RQ1: How long does one fully LLM-driven NPC decision take, what does it cost, and how long does a player wait for an answer, across two games and two low-cost models? RQ2: When every act comes from a model decision, how do NPCs respond to requests, insults and violence directed at them, and do bystanders react to what they witness? RQ3: How much of a game is engine and how much is game definition when two different games share one engine?
Both games are open to play: Quarthaven at its game page[3], which also links to Oakhollow.
2. Existing Approaches (2025–2026 state of the art) #
2.1 Generative-agent towns #
Generative Agents populated a sandbox town with 25 characters whose memory stream, reflections and plans produced believable daily life and emergent social events [2][4]. Project Sid scaled the idea to 10 and more than 1,000 agents on Minecraft servers with an architecture that keeps several output streams coherent in real time [3][5], and AI Town packages a deployable town in which AI characters “live, chat and socialize” [4][6]. They are simulations to be observed: time is the simulation’s own, and a human is a visitor rather than a peer who can walk up, interrupt and strike.
2.2 Model proposes, rules dispose #
Where an NPC is tied to game systems, most recent work lets the model propose and lets code decide. MART, an IJCAI 2025 framework, splits an active merchant into an appraiser and a negotiator, finds fine-tuned smaller models effective and reports irregular responses the game must handle [5][7]. A 2026 Unity study has the model convert player input into a JSON intent with rule tags, which a finite-state machine (FSM) validates against the game state; compared with a model-only NPC, forbidden state transitions fell and the success rate on valid input rose [6][8]. State-inference prompting decomposes trading into six states and reaches more than 97% state compliance and 99.7% calculation precision [7][9]. Our engine also lets the server validate and execute, but keeps no behaviour layer behind the model, only a small verb set executed mechanically.
2.3 Prompt scaffolding for character and task #
In a voice-driven detective game, high- and low-constraint prompts made no reliable experiential difference, and scaffolding stabilised a quest-giver while suspects lost improvisational believability [8][10]. In the 2025 persona-grounded dialogue challenge, a “Deflanderization” prompt that suppresses excessive role-play improved task fidelity [9][11]. Both treat dialogue as the product; in a zero-script world the prompt must also produce locomotion, combat and silence.
2.4 Hybrid populations and event-driven time #
Social simulators cut cost by giving the model to few agents: GASim drives core agents with a model and ordinary agents with graph message passing, reporting a 9.94-fold speedup and less than 20% of baseline tokens [10][12]. BotVerse runs language-model agents on an asynchronous, event-driven engine that emulates human-like temporal patterns [11][13]. The Real-Time Reasoning Gym finds that combining fast reactive and slower planning agents works best as time pressure rises [12][14], and RealtimeBench shows a stronger model that wins in paused games falling behind when games keep running during inference [13][15]. In a VR interrogation game with two GPT-4 Turbo characters, the speech-to-speech cycle averaged 7 s and grew with context [14][16].
flowchart TD
R[LLM characters in a shared world] --> A[Simulation towns: model plans, world observed]
R --> B[Model proposes, rules or FSM dispose]
R --> C[Hybrid populations: model for a few agents]
R --> D[Zero-script: every act is a model decision]
D --> E[Server executes verbs mechanically]
D --> F[Time gate decides when a model is asked]
D --> G[Perception of what others do triggers or informs decisions]
Surveys map the roles a language model can play in games [15][17]; what is missing is a measurement of the zero-script case under live, human-paced play with violence, witnesses and a real cost per decision.
3. Method and Data #
3.1 The engine #
The engine has four parts: a world simulation with an authoritative 10 Hz tick for each world a server hosts (one public, up to 50 private), in which humans and NPCs are the same kind of entity and clients are never told which is which; a mind module that builds the prompt, calls the model and parses the answer; a server for transport, speech and bookkeeping; and a shared browser client that leaves drawing and controls to each game’s renderer through a fixed contract (init, onMap, frame, pick, preview, dir, message, keydown).
Perception. Each NPC has three channels. Events that need an answer (being addressed, struck, targeted by a spell, a fight in view) are perceived and trigger a decision. Everything else seen or heard (who comes into view, goes indoors, casts, changes activity) is noticed and kept, up to 14 items, for the next decision; a memory log keeps 60 lines, the last 12 in the prompt. Sight reaches 9 tiles and stops at walls. Voices carry 2.5 tiles for a whisper, 7 for a normal voice and 16 for a shout; words are clear in the inner half of the range and drop out toward its edge, and a wall makes a voice sound 2.5 times farther plus 3 tiles. Humans hear by the same rule, and the model chooses each line’s volume.
Time gate. An NPC deliberates only after 3 s without a new event, at most once every 7 s, with up to 6 batched events. An answer is then typed at 90 ms per character, clamped to 1.5–9 s, before it is spoken. When nothing happens, a settled NPC is told that time passes and asked what it does now: 5–45 s after the world starts, 30–60 s after it arrives somewhere, and every 60–120 s after that, but only while at least one human is active in the world. An empty world stops.
Decision. The model returns one JSON object: a line to say (or none), its addressee and voice, opinion changes clamped to -15..15, one of 11 core actions (continue, stay, follow, go, walk_away, attack, flee, go_home, sleep, work, wander) with a target, a short description of what the NPC busies itself with, and a private thought. The call uses temperature 0.9, at most 320 output tokens, JSON mode and a 12 s timeout, with mistral-small-3.2 as the routing fallback for the default model [16][18]; billed cost per call is read from the response’s usage block [17][19]. The parser takes the first JSON object, clamps numbers and maps unknown actions to “continue”; a line whose word set overlaps one of the NPC’s last 15 lines with a Jaccard index of 0.6 or more is dropped. Without a model, the NPC does nothing.
What the code still decides. The body executes a chosen plan mechanically: path-finding, following until the leader is 18 tiles away, and for an attack closing in and striking, or in Quarthaven repeating bolts every 2.5 s while mana lasts. Some state changes are rules: a first blow lowers the victim’s opinion of the attacker by 45 points, witnesses lose 12 points (25 if the victim is a friend, and gain 5 if they hated the victim), a mend raises it by 8, opinions drift back toward their baseline by one point per game hour, neighbours’ model-proposed changes are halved, and a sleeper dies from one blow. These rules move numbers in the prompt; whether anyone acts on them is still a model decision.
Who pays. Players bring their own OpenRouter key. A decision about a player is paid by that player’s key and model; NPC-only moments are paid by the nearest player with a key. The server’s own key is off by default.
flowchart LR
W[World tick 10 Hz] --> S[Senses: sight 9 tiles, voices by volume, walls]
S -->|addressed, struck, fight in view| P[Perceive: inbox]
S -->|everything else| N[Notice: up to 14 items]
P --> G{Gate: 3 s quiet, 7 s since last call}
G -->|yes| M[Model call: one JSON decision]
N --> M
M --> V[Parse, clamp, repeat filter]
V --> B[Body executes verb, types the line]
B --> X[Witness: others perceive or notice the act]
X --> W
3.2 The two games #
Oakhollow is a walled 2D village with 10 villagers. Quarthaven is a 3D isle of four towers sealed under a magical Veil, with 12 mages, three per element (fire, water, stone, wind), each with a private backstory in the prompt. Spells are a ranged bolt whose damage follows an element wheel (water beats fire, fire beats wind, wind beats stone, stone beats water), a ward, and one art per element: kindle, mend, wall and gust. The only addition Quarthaven makes to the decision schema is one action, cast, and one field, spell.
3.3 Experiments #
E1, live logs. The live Oakhollow server logged 577 model calls on 23 and 24 October 2026 under six earlier builds that still had routines and a reflex attack. We extracted an anonymised table (no player names or chat text) labelled by build. The zero-script build, v5, went live at 02:15 UTC on 24 October; its log so far holds one test connection and no model call, because no visitor has entered with a key since.
E2, controlled probes. On 24 October 2026, 21:48 to 21:55 UTC, we ran three private servers with their own logs, unchanged engine code and speech synthesis off: Quarthaven with the default model, Quarthaven with players choosing mistral-small-3.2, and Oakhollow ported onto the engine (the unreleased port draft). A launcher logged each decision’s full perception, so every reply can be matched to what the NPC knew. In phase 1, four scripted players per server each walked up to one NPC and applied a fixed sequence about 20 s apart: a greeting; a request to follow, after which the player walked 7 tiles away and measured the distance 14 s later; a request to go to a named place (the Moonpool or the well), checked 22 s later; an insult; a bolt (Quarthaven) or two blows (Oakhollow); a mend (Quarthaven) or an apology (Oakhollow); and an attack on the nearest third character. A player that died stopped. In phase 2, four fresh players per server attacked the character with the most NPCs in sight, without a word; four picked another probe player and count only for the bystander analysis, and two never reached their target. A decision responds if its perception contains the stimulus and is hostile if it attacks the player or casts a bolt, kindle or gust at them; outcomes count within the window before the next stimulus, at most 30 s. A bystander is an NPC whose perception within 20 s of an attack contains “You see” the attacker acting on the victim. Model prices are from OpenRouter’s public catalogue as of 24 October 2026: USD 0.10 and 0.40 per million input and output tokens for gemini-2.5-flash-lite, USD 0.075 and 0.20 for mistral-small-3.2 [18][20].
E3, code reuse. Non-blank, non-comment lines of code per layer, with the vendored three.js library excluded.
All code, raw logs and outputs are in stabilarity/hub/research/living-npcs-zero-script-llm-characters-on-a-shared-engine-measured-in-two-games.
4. Results #
4.1 RQ1: A decision takes under a second; an answer takes seven #
The three probe servers made 437 model calls for 34 NPCs, of which 432 returned a usable decision. Table 1 compares them with the live logs of the earlier builds.
| Run | Calls | Usable | Total p50 (s) | Total p90 (s) | First token p50 (s) | Input tokens p50 | Output tokens p50 | USD per 1,000 decisions | Player reply time p50 (s) |
|---|---|---|---|---|---|---|---|---|---|
| Quarthaven, gemini-2.5-flash-lite | 135 | 133 | 0.738 | 0.859 | 0.430 | 2,872 | 102 | 0.2042 | 6.98 |
| Quarthaven, mistral-small-3.2 | 158 | 157 | 2.110 | 4.231 | 0.337 | 2,861 | 94 | 0.2491 | 9.46 |
| Oakhollow on the engine, gemini-2.5-flash-lite | 144 | 142 | 0.728 | 0.842 | 0.440 | 2,454 | 89 | 0.1974 | 5.50 |
| Oakhollow live, builds before v5 | 577 | 565 | 0.747 | 1.965 | 0.482 | 1,038 | 73 | 0.1313 | not measured |
Source: our measurement, E1 and E2; prices as listed on 24 October 2026 [18][20]. Input tokens rounded to whole tokens.

Latency. With gemini-2.5-flash-lite a decision takes a median 0.738 s in Quarthaven and 0.728 s in Oakhollow, with the 90th percentile under 0.86 s. Mistral-small-3.2 streams its first token sooner (0.337 s) but needs 2.110 s for the whole object, up to 11.103 s, just under the 12 s timeout. The live logs show the wider tail of a mixed deployment (p90 1.965 s), with 111 of 565 usable calls (19.65%) served by the fallback model.
What the player waits for. The gate waits for 3 s of quiet, the model decides, and the NPC types its line before it is spoken. Across 47 spoken replies, the median time from the player’s line to the NPC’s answer was 7.44 s, with the decision itself a median 4.32 s after the stimulus. That is close to the 7 s cycle reported for GPT-4 Turbo characters in VR [14][16], but here most of the wait is deliberate pacing, so a faster model buys little unless the gate is shortened.
Cost. The v5 prompt carries rules, character, perception, noticed events and recent lines, so it is much larger than in the earlier build (median 2,872 against 1,038 input tokens), and the cost rose to USD 0.2042 per 1,000 calls. During the probe sessions each Quarthaven mage decided 2.426 times per minute. Our estimate for one world of 12 mages at that rate is 1,746.7 decisions and USD 0.3567 per hour with gemini-2.5-flash-lite, or USD 0.5045 with mistral-small-3.2. Probe sessions are busier than ordinary play, so these are upper values.
Reliability. Of 437 calls, 432 returned a usable decision: 2, 0 and 2 replies did not parse in the three runs, and 1 call failed upstream. The repeat filter removed 14 lines in Quarthaven and 8 in Oakhollow with gemini-2.5-flash-lite, and none with mistral-small-3.2, which spoke in 96.82% of its decisions against 83.46% for gemini-2.5-flash-lite.
4.2 RQ2: NPCs answer, refuse, retaliate and notice #
Chart 2 shows what the addressed NPC decided within each stimulus window, pooled over the three runs.

Requests are negotiated, not obeyed. Every greeting was answered, and none moved the NPC. Of 12 requests to follow, 5 led to a follow decision within the window and 4 NPCs were within 3 tiles of the player 14 s after the player walked away. Of 12 requests to go to a named place, only 2 produced a decision to go there and 1 NPC had arrived 22 s later. Compliance differed by model: mistral-small-3.2 first answered all four follow requests with “stay” (one NPC followed later in the window) and chose “go” for none of the four errands. Agreement often came one decision late: Maelis, the water warden, first asked “Where are we going, Elara?”, followed only after the player walked off, and accepted the errand 16 s after it was given, so the 22 s check caught her on the way. The prompt asks for exactly this (agree, refuse or haggle), so a game cannot rely on an NPC to follow a quest instruction on cue.
Insults lower opinion; violence brings violence. The model’s own opinion change toward an insulter averaged -13.18 points on a -15..15 scale, and 2 of 12 insulted NPCs attacked at once. Ignatia, the fire warden, answered a bolt with “You dare strike me, water-witch?” and a duel. Of 19 NPCs struck by a bolt or a blow with a recorded decision, 7 (36.84%) turned hostile within the window, 1 named a ward in its reply without choosing the cast action, so nothing was cast, and the other 11 stayed where they were. The players fared worse than the NPCs: NPCs landed 21, 28 and 30 hits on players in the three runs against 6, 6 and 10 hits by players on NPCs, and killed 2, 3 and 3 probe players. In the mistral-small-3.2 run the violence spread among the NPCs themselves: 16 hits were NPC on NPC, and both NPC deaths were by Brann, the young pyromancer, who turned on his own warden with “Ignatia, you’ve gone too far this time!”
Kindness registers less. Mends and an apology moved opinions up by 5 and 10 points where the model reported a change, and none of the four NPCs changed what it was doing.
Bystanders notice. Chart 3 counts the decisions of NPCs that saw an attack on someone else in 22 attack episodes.

Of 46 bystander decisions, 42 (91.3%) produced a visible reaction, and 60.87% named the attacker or the victim in what they said or thought. The reaction was almost always speech: 39 bystanders spoke and stayed, 2 did something else, and only 1 attacked the attacker: Brann, whose persona is loyal to Ignatia, joined the duel when a probe player bolted her. What bystanders see also stays with them. Grisa watched Torvald kill a probe player and a minute later walked away from him with “I’ve had enough of this, Torvald. When you’re ready to talk sense, find me at the stones.” In 15 bystander decisions the model also lowered its opinion of the attacker beyond the engine’s fixed witness penalty. Perception works; faced with violence it does not suffer, the model comments.
Every act traces to a decision. All 361 lines NPCs spoke matched the say field of an earlier decision by the same NPC, and all 95 NPC hits and 52 NPC casts happened inside an attack plan or right after a cast decision. Only 1 cast came from a single cast decision; 51 were bolts the body repeated inside a duel the model had started with attack. The model chooses to fight; the engine aims.
4.3 RQ3: A new game is mostly a definition file #
The core engine has 1,966 lines of code: 1,086 for the server side (simulation, mind, transport, tile world) and 880 for the shared client. Chart 4 shows what each game adds.

Oakhollow on the engine needs 310 lines of its own (158 for map, personas, lore and prompt text, 152 for its 2D renderer): 13.62% of the total it runs on and 15.07% of the 2,057-line standalone v5 village. Its definition adds no action and no field to the decision schema. Quarthaven needs 835 lines, 29.81% of its total: 406 on the server, of which 252 are the spell system, and 429 for the 3D renderer and its translations. Magic enters the mind through one action (cast), one field (spell), a paragraph of rules in the prompt, and hooks that describe each spell to everyone who can see or hear it. Nothing in the core knows that spells exist.
The decisive choice is that hooks produce perceptions, not behaviour. A game describes its world in text (places, looks, states such as “behind a ward”) and reports its events through the same witness function the core uses for blows and doorways; the model does the rest.
flowchart TD
C[Shared core: simulation, mind, server, client] --> O[Oakhollow definition: map, 10 personas, lore, prompt text]
C --> Q[Quarthaven definition: map, 12 mages, lore, prompt text]
Q --> H[Hooks: cast action, spell field, bolt flight, ward, flames, walls]
O --> R2[2D renderer]
Q --> R3[3D renderer]
H --> C
5. Discussion #
Implications for practitioners. A zero-script NPC is viable at hobby scale: an active world of a dozen characters costs our estimated USD 0.3567 to 0.5045 per hour. The binding constraint is pacing, not inference. It suits conversation but not combat, where the 3 s settle and 7 s gap delay the answer to a first blow by seconds; faster fights need a shorter gate for salient events, not a faster model.
The second lesson concerns control. Free characters negotiate, so designers who need an NPC somewhere for a quest must accept refusal as content or give the persona a reason. Combining a model that proposes with rule-based validation, as in FSM guardrails [6][8] or state-inference prompting [7][9], buys reliability at the cost of the freedom measured here.
Third, model choice changes personality as much as latency: with identical prompts, mistral-small-3.2 was slower, spoke almost every time and first refused every follow request. When players bring their own model, their choice sets the village’s temperament.
flowchart TD
Q1{Must the NPC reliably do what a quest needs?} -->|yes| A1[Model proposes, FSM or rules validate]
Q1 -->|no| Q2{Is the world shared with humans in real time?}
Q2 -->|no| A2[Simulation town, model plans freely]
Q2 -->|yes| Q3{Is combat fast-paced?}
Q3 -->|yes| A3[Zero-script with a short gate for salient events]
Q3 -->|no| A4[Zero-script with human-paced gate]
Players and validity. A randomised study with 130 players found that model-driven NPCs raised cognitive load and lowered perceived usability and trust without improving the overall experience [19][21]; refusals and late agreement may contribute. Fluent replies are not evidence of realistic social dynamics: limitations of single decisions can propagate into homogenised behaviour of the whole population [20][22], and the near-uniform “speak and stay” reaction of bystanders may be such a case. Prompt injection can make NPCs reveal secrets [21][23]; in our engine it could also make one walk, follow or fight.
Limitations and threats to validity. The probe sample is small: 34 NPCs, 12 targets per stimulus at most, one session of about six minutes per server, and scripted English lines about 20 s apart, which left little time to act on a request; distances were checked once, so slow compliance counts as failure. We tested two low-cost models at default settings. The live data come from earlier builds with routines and a reflex attack (11 reflex attack events logged); the zero-script build has no live decision yet. The Oakhollow results on the engine come from an unreleased port draft. Reading the code exposed three flaws: the relations panel reveals who is human, because humans have no outgoing opinions and their rows are empty; Quarthaven’s stone walls are stored in a map shared by every isle a server hosts, so a wall raised in one private isle also blocks the same tiles in the others; and the live village’s help text still says that anyone who falls too low in someone’s eyes “will come for you”, which describes the old reflex rather than the current behaviour. Finally, the engine uses JSON mode rather than the schema-constrained structured output the routing service supports [22][24], which may explain the unparseable replies.
What would change the conclusion. A combat-tuned gate, schema-constrained output or a larger model could move reply times and compliance substantially, and live players in longer conversations may find NPCs more cooperative than our scripted probes did.
6. Conclusion #
RQ1 Finding: A fully LLM-driven decision is fast and cheap enough for real-time play, but human-like pacing dominates what the player waits for. Measured by median decision latency = 0.738 s (p90 0.859 s) with gemini-2.5-flash-lite in Quarthaven and 2.110 s (p90 4.231 s) with mistral-small-3.2, cost = USD 0.2042 per 1,000 decisions, and median player reply time = 7.44 s across 47 replies. This matters for the series because the next improvement is a time gate that treats violence differently from conversation, not a faster model.
RQ2 Finding: Without scripted behaviour, NPCs negotiated requests, punished insults, often met violence with violence and noticed attacks on others. Measured by follow decisions = 5 of 12 requests, errand decisions = 2 of 12, mean opinion change after an insult = -13.18, hostile replies to an attack = 7 of 19 (36.84%), and bystander visible reaction rate = 91.3% of 46 decisions with 1 bystander intervening; every NPC line, hit and cast traced back to a model decision. This matters for the series because perception and agency work, and the open problem is social calibration: when a witness should do more than talk.
RQ3 Finding: On a shared engine a new game is mostly a definition file plus a renderer. Measured by game-specific code = 310 lines for Oakhollow (15.07% of its 2,057-line standalone version) and 835 lines for Quarthaven on a 1,966-line core, with magic added through one action and one field. This matters for the series because it lets later articles compare games, models and gate settings on one engine.
The next article will put the zero-script villages in front of human players and measure whether they can tell the humans from the characters.
References (24) #
- Stabilarity Research Hub. (2026). Living NPCs: Zero-Script LLM Characters on a Shared Engine — Live Results from a 2D Village and a 3D Mage Isle. doi.org. dtl
- Stabilarity Research Hub. Living NPCs: A Classification of AI Integration Approaches for Game Characters. tb
- Stabilarity Research Hub. Quarthaven: Wizard Village. tb
- Park, Joon Sung; O'Brien, Joseph; Cai, Carrie Jun; Morris, Meredith Ringel; Liang, Percy. (2023). Generative Agents: Interactive Simulacra of Human Behavior. doi.org. dcrtl
- AL, Altera., Ahn, Andrew, Becker, Nic, Carroll, Stephanie, et al.. (2024). Project Sid: Many-agent simulations toward AI civilization. doi.org. dtil
- a16z-infra. (2026). a16z-infra/ai-town (GitHub repository). github.com. tr
- Byungjun Kim, Minju Kim, Dayeon Seo, Bugeun Kim, et al.. (2025). Leveraging Large Language Models for Active Merchant Non-player Characters. doi.org. dcrtil
- Yunseong Na, Youngju Nam. (2026). A Study on LLM-based Game NPC State Control using FSM. doi.org. dcrtil
- Kim, Minkyung, Kim, Junsik, Bae, Hwidong, Yang, Woongcheol, et al.. (2025). State-Inference-Based Prompting for Natural Language Trading with Game NPCs. doi.org. dtil
- Figueiredo, Vanessa, Elumeze, David. (2025). Symbolically Scaffolded Play: Designing Role-Sensitive Prompts for Generative NPC Dialogue. doi.org. dtil
- Buakhaw, Pasin, Kerdthaisong, Kun, Phenhiran, Phuree, Khlaisamniang, Pitikorn, et al.. (2025). Deflanderization for Game Dialogue: Balancing Character Authenticity with Task Execution in LLM-based NPCs. doi.org. dtil
- Zhou, Xuan, Sun, Yanhui, Yao, Hantao, He, Allen, et al.. (2026). GASim: A Graph-Accelerated Hybrid Framework for Social Simulation. doi.org. dtil
- Allegrini, Edoardo, Di Paolo, Edoardo, Spognardi, Angelo, Petrocchi, Marinella. (2026). BotVerse: Real-Time Event-Driven Simulation of Social Agents. doi.org. dtil
- Wen, Yule, Ye, Yixin, Zhang, Yanzhe, Yang, Diyi, et al.. (2025). Real-Time Reasoning Agents in Evolving Environments. doi.org. dtil
- Pan, Ningxin, Li, Hanyu, Shen, Yeqing, Ding, Ning, et al.. (2026). The World Won't Wait: Evaluating and Teaching Agents Under a Live Clock. doi.org. dtil
- Korkiakoski, Mikko, Sheikhi, Saeid, Nyman, Jesper, Saariniemi, Jussi, et al.. (2025). An Empirical Evaluation of AI-Powered Non-Player Characters' Perceived Realism and Performance in Virtual Reality Environments. doi.org. dtil
- Gallotta, Roberto; Todd, Graham; Zammit, Marvin; Earle, Sam; Liapis, Antonios; Togelius, Julian; Yannakakis, Georgios N.. (2024). Large Language Models and Games: A Survey and Roadmap. doi.org. dcrtil
- openrouter.ai. l
- openrouter.ai. l
- (2026). current provider docs, accessed 2026-10-20. openrouter.ai. l
- Hsu, Ting-Chen, Chen, Wenran, Lin, Jiangxu, Qin, Fei, et al.. (2026). The Double-Edged Sword of Open-Ended Interaction: How LLM-Driven NPCs Affect Players' Cognitive Load and Gaming Experience. doi.org. dtil
- Taillandier, Patrick, Zucker, Jean Daniel, Grignard, Arnaud, Gaudou, Benoit, et al.. (2025). From the Fluency Fallacy to the Micro-to-Macro Validity Gap: Opportunities and Pitfalls of LLMs in Social Simulation. doi.org. dtil
- Shiomi, Kyohei, Lian, Zhuotao, Nakanishi, Toru, Kitasuka, Teruaki. (2025). Tricking LLM-Based NPCs into Spilling Secrets. doi.org. dtil
- openrouter.ai. l