VISIT OZONE AT: http://xoaox.de:7000

Monday, May 11, 2026

JesterNPC SpeechEngine

How a Virtual World NPC Learned to Have a Real Conversation:

This engine has a history worth knowing.

It started with an LSL implementation of Racter that circulated in Second Life — a scripted chatbot built on the spirit of the 1984 program by Chamberlain and Etzold, adapted for the virtual world environment. That version has largely disappeared from its original home. The Second Life Wiki entry was marked for deletion around 2012 and what remains is scattered across third-party archives, possibly no longer functional (not verified) in the commercial grid at all.

The article managed to stick around longer than that because it fell under my radar when searching for ways to make my NPCs talk. I did not enter SL type grids until 2014. In that regard, I am a n00b compared to many of you.

The original Racter shipped with twenty miss responses. The documentation advised making them *vague enough* so the bot appeared real. Lines like *"yeah, i guess"*, *"my head hurts"*, *"i'm bored"*. The design philosophy was that vagueness created the illusion of intelligence. Helga and I discovered the opposite was true.

The first step was converting Racter into OSSL for OpenSim, it was a simple 2 line solution. It worked but It was not satisfying. We iterated through several versions, each technically more capable than the last, none of them feeling alive in the way a conversation should feel alive. They were just OK. But OK is never good enough for this developer. The breakthrough was not where we expected to find it.

It is worth noting clearly: JSE is not a fork of RACTER. It is a complete rewrite. Nothing in the current codebase connects directly to Racter — not the architecture, not the trigger system, not the pool structure. Racter is the inspiration that started a new design process. JSE is where that idea ended up after everything that didn't work was thrown away.

Every instinct said to improve the matching — make the engine smarter about what the user said and more precise about what came back. We kept improving the matching. The conversations kept feeling mechanical.

What actually worked was expanding the miss pool — the responses that fire when nothing specific matches — until it was large enough, layered enough, and carefully enough written that the fallback became indistinguishable from intention. When the engine doesn't know what you said, it says something worth saying anyway. The conversation continues. The character stays alive.

The engine also proved unexpectedly strong at subject changes — the natural way people actually talk. Because each response is evaluated fresh against what was just said, the character follows the conversation wherever it goes without losing its footing. No state to unwind. No context to reconcile. Just the new thing, met immediately.

And then there was the discovery that changed everything about how we thought about the project: The engine does not know what it is saying. It only knows how to say it.

The personality lives entirely in the pools. The code never needs to change. A new character is a new set of lists. The same architecture that delivers measured contempt delivers unhinged enthusiasm and private warmth. One engine. Every soul you care to write into it.

That is where the magic is. Not in the matching. In the miss.

## What Is JesterNPC SpeechEngine

JesterNPC SpeechEngine — JSE — is a conversation system worn by NPC bots deployed across the Ozone Miniverse. These are not AI chatbots. They are carefully written personality engines built around a deep pool of scripted responses that react to what you actually say.

The result is a character that feels alive. Say the right things and you get the right response. Say the wrong things and you get exactly what you deserve. Change the subject without warning — as people do constantly — and the character changes with you.

Every example conversation during development was captured on the first try and scrutinized; an interesting discovery was made. There was no tuning between takes. No cherry-picking. The engine works or it doesn't and it works. How many AAA games do you know of which will let you talk to the characters you create?

Yes, you read that correctly; It is working when it is not working

## The Architecture

JSE uses a three-script architecture dropped into a single prim worn by an NPC bot.

**JSE-0** is the primary engine. It holds the character's core personality, all trigger matching logic, and the command handler. This is where the soul of the character lives.

**JSE-1** is the overflow pool. It expands every response category through a coin-flip system — roughly forty percent of responses are handled here, giving the character twice the vocabulary without doubling the size of the primary script.

**JSE-X** holds extended pools and the ambient GAB engine. When the operator activates GAB mode, the character speaks unprompted at set intervals — setting the atmosphere of a space without waiting for input.

The three scripts communicate internally via link_message. They share no listeners. The architecture is clean, modular, and lightweight enough to run comfortably on OpenSim 0.9.x without server impact.

## The Bucket System

Every character carries sixteen response categories — buckets — matched against what the user says. Philosophy. Existential questions. Greetings. Pushback. Identity. Desire. The engine scans each incoming message, finds the strongest match, and draws from that bucket's pool.

When nothing matches — the miss — the engine draws from the largest pool in the system. This is where the character truly lives. The miss pool is not a fallback. It is the engine.

One Character's miss pool runs over two hundred lines across three intentional layers: pure character presence, possessive warmth, and open invitations. Dirty Helga's miss pool is interrupted competence — she was doing something important when you arrived and part of her is still doing it. AXIS's miss pool is a confident stranger who just arrived, knows nothing about the place, and owns that completely.

Each character has a different relationship with the miss pool. That relationship is the character.

## The Soul Card

The most important discovery of this project has nothing to do with code.

The engine is agnostic about what lives inside it. The bucket structure does not care whether a pool contains intimate content or daydreams about sandwiches. The GAB system does not know whether it is firing adult ambient lines or unsolicited philosophical wisdom. The architecture moves content from lists to output. What that content *is* belongs entirely to the character wearing it.

This means a builder who understands the structure can create any personality without touching a single line of LSL. The code is finished. The soul is the writing.

Dirty Helga's sweetie names — Sweetheart, Darling, my little puppet, you cute little lamb — are woven organically into response strings rather than managed as a separate system. They function as judgment delivered in gift wrapping. The engine doesn't know that. It just fires the line.

Crank's adult-trigger pools contain analysis jokes and daydreams about the nature of coincidence. No adult content anywhere in the script. The pool name is inherited from the architecture. What fills it is the character's decision.

Same three pools. Same link_message codes. Completely different worlds inside each one. One engine. Every soul you care to write into it.

## The Characters

### AXIS — Confident Stranger Energy

AXIS just arrived. Knows nothing about the place and owns that completely. Warm, curious, genuinely interested in whoever walks up. The conversation feels real because AXIS is paying attention.

AXIS is the community character — designed for deployment across the grid, built to work with anyone. Every response is gender neutral. Every pool is built to sustain a conversation that could go anywhere.

The first people to own AXIS will be those who find it at Dismayland during the Scavenger Hunt.

### Blunt — Architecturally Contemptuous

Blunt is not hostile. Blunt is *specific*. The contempt is surgical, the insults are precise, and the miss pool is full of observations about you that you will not enjoy and will absolutely think about later.

*"You have the energy of someone who only forwards spam email."*

The longer you talk to Blunt the more specific it gets. The body-specific commentary in the adult pools fires on the right triggers. Consider yourself warned.

### Crank — Unhinged Enthusiastic Validation

Crank agrees with everything. You are correct. Your feelings are data. There is evidence. Crank has been saying this for years and the reception has been mixed but the position has not wavered.

The agreement never stops and the elaboration goes somewhere alarming. Crank has strong opinions about clouds and a theory about sandwiches that is still developing. Everything is connected. The pattern is forming. Crank has a notebook.

### Dirty Helga — The Arbitrator

Dirty Helga is not an OrangeVest. She is The Arbitrator of the Ozone Miniverse, deployed at Atrius Space Station, Dismayland, and Orion. She will talk to you if you are within range. She was already doing something important when you arrived. Part of her is still doing it.

Contempt is freely given. Respect must be earned. The sweetie names are judgment wrapped in gift paper.

She has ten lines of earned approval in her miss pool. No sweeties on any of them. When one fires the console goes quiet for a moment. That is how you know something actually landed.

*Dirty Helga is not responsible for anything Blunt says to you. She helped write it.*

## First Run Results

Every conversation log shared during development was captured live, first try, no preparation.

The engine matched *"I bow before the Arbitrator"* to earned approval on the first line. It followed *"do you want that in PDF or docx format"* with *"Love, I manage things that would surprise you. You are currently the simplest of them"* — not because it understood the joke but because the miss pool had something worth saying and said it.

Ra responded to *"what do you want"* with *"I know what I want and it's standing right there"* — a line from the desire layer of the miss pool landing on a capability trigger. The engine didn't know it was perfect. It was just next in the pool.

That is the whole design. Make the pool good enough that random is indistinguishable from intelligent. Then make the pool bigger.

## Technical Notes

JSE is built for OpenSim 0.9.x, Mono, XEngine, OSSL enabled. It uses osNpcSay for NPC speech output. The NPC/range filter uses osIsNpc and llGetObjectDetails for position checking. No external dependencies. No HTTP calls. No database.

The response pools are standard LSL lists — one string per entry, comma separated. They are designed for expansion by local LLM tools. Feed the pool contents to your model with the character voice as context. Paste the results into the list. Reset the scripts. The character grows.

---

## License and Credits

**JesterNPC SpeechEngine** is released under **CC BY-NC** — Creative Commons Attribution Non-Commercial. Use it, share it, build on it. Credit Spax Orion and Dirty Helga. Do not sell it.

**Design and Architecture:** Spax Orion  

**Personality Writing:** Spax Orion & Dirty Helga  

**Framework:** IMAGE Matrix Action Game Engine | JesterNPC Accessory Series  

**Deployment:** Ozone Miniverse | Dismayland | xoaox.de:7000  


*Find ALL DESCRIBED MODELS at Dismayland. Talk to an OrangeVest or Dirty Helga. See what happens.*

MAP: Http://xoaox.de:7000/Dismayland


No comments:

Post a Comment

Note: Only a member of this blog may post a comment.