No menus, no chat windows, no push-to-talk. Face someone within four metres and speak — they answer in roughly one second, in a natural spoken voice, in character. Your controls are never taken, which makes it work for cinema, RP streams and content creation.
NPCs that actually do their job
Talking is where most AI NPC scripts stop. These ones act. Tell a nurse you are bleeding and she does not describe checking you in — she checks you in, and your real admission form opens while she is still speaking.
Every role gets its own short list of things it can genuinely do, so a nurse is never offered a mechanic’s tools and cannot invent a service that does not exist. The model only ever picks what it intends to do from that list; your script decides who, where and how much from live game state. If a service fails, the NPC is told — so nobody ever confirms something that did not happen. Wiring your own resources in is config, not code: point a role at any event, export or command you already have.
The city is alive around the conversation
Placed NPCs — clerks, guards, staff — remember every player individually, across sessions and restarts. Argue with the clerk on Monday and on Tuesday he opens with “oh hell nah, you again.” Shootings, robberies, chases and arrests ripple outward: witnesses know instantly and can repeat concrete details, cops hear it on dispatch, the neighbourhood hears it later, and big stories make the news. Peds two blocks away will tell you “I heard shots, didn’t see anything.”
Features
- OpenAI Realtime speech-to-speech — ~1s to first audio, with barge-in: interrupt them mid-sentence and they stop.
- NPCs perform real actions — a per-role whitelist of things each character can genuinely do, wired to your own resources from an open config file.
- Five-dimension relationships — trust, respect, fear, familiarity and hostility, all independent. A gangster can respect you and still hate you.
- Physical compliance — NPCs actually DO what they agree to: follow you, stop, turn around, hands behind back, get in the car, kneel, flee, and (if you push the wrong person) pull a gun on you. Tool-call driven, not text parsing.
- 150+ ped models mapped to roles — clerk, nurse, doctor, bouncer, dealer, cop, EMS, security, dancer, casino, waiting staff and more, each with its own persona, accent and pinned voice, all editable in
roles.lua. Gang members name their real crew rather than all claiming one. - Derived mood — night shifts, rain, rough neighbourhoods and nearby violence change how people talk to you, at zero extra API cost.
- Reputation & escalation — a public/street reputation split with an undercover mechanic, and certain roles and neighbourhoods that might be carrying.
- Optional AI radio dispatcher — hand the channel to a real LSPD dispatcher with proper radio procedure, callsigns and ten-codes, who dispatches actual units and runs plates. Inert unless you have a radio resource to call it.
- An API for your other scripts —
BroadcastEvent,SpeakOnce,Chat,Promptand more, so any resource can publish a world event or make a ped deliver a live, in-character line.
Built around the cost
Audio tokens are the real expense, so this resource is designed for them. Sessions only open when a player deliberately engages (a dwell gate stops passers-by from costing you money), idle sessions close in 12 s, one-shot lines close as soon as they’re spoken, and a token ceiling caps runaway replies. The entire gossip, mood and memory-recall layer is templated arithmetic — zero API calls. The only recurring model call besides live speech is one short text summarization after a conversation with a placed NPC ends, and you can switch that off.
You supply your own OpenAI API key with Realtime access — usage is billed to you by OpenAI, not by us.