Oneliners for City or town dwellers

I’m looking for a collection of oneliners for citizens. Such as the collection of oneliners for farmers/peasants as presented in “CCC 2016 February” (Peasants Speaking One-Liners).

Is there anything anywhere?

On the other hand, we could start a new collection. What could a typical town dweller say to out hero(ine)? Suggestions welcome.

it’d be what people always talk about in real life too

complaints or comments about the weather “we sure could use some rain”
Natter about politics “This town is sure run badly” (or good for that matter)
People talk about the local shops: :Eltoora charges too much!" or “If Durgar doesn’t have it you don’t need it”
Shopkeepers would always be talking about their inventory “I’ve got to restock” or “I’ve got a shipment coming”.
Comments about the players’ appearance (typically distinct by race or sex)
Even “How do you do? My name is…” is better than a mute.
I’ve always liked the line “there’s talk of strange folk about” which is nearly always applicable in NWN. A reasonable clever person could even find a good voiceover for that one. I assume it would be relentlessly time consuming for a builder but I’d think that there’s no shortage of audio clips that could easily be plugged in to go with typed text.

The question has me thinking about atmosphere in a module. Some have it and some don’t. What constitutes good atmosphere versus gameplay clutter is, of course, subjective but I think it is a topic worth further discussion.


Gossip about locals, men could be bragging about their sexual conquests, real or imagined, women would be likely to gossip about some scandal or another. It’s the basic stupid crap people always talk about, just tailor it to your setting. Bear in mind historical context though, as with NWN you’re pretty much limited to the medieval fantasy, which means medieval level technology and all its implications, social and otherwise, and lots and lots of superstition. People don’t know shit, so have them utter their moronic ideas that make no sense and be proud of them. The level of stupid also goes up as the age of the character goes down, so some entitled and spoiled noble brats might be found giving an attitude to authorities and getting in trouble for it while the youthful commoners might be found in all sorts of mischiefs and/or doing their daily tasks.

If the society you’re making is lenient in terms of law and discipline, then there might be the odd activist in the city sprouting their nonsense, “spreading awareness” of whatever they have on their agenda and doing rabble rousing. Official orators might be proclaiming news and such.

In the country side, figure out who the local “celebrities” are and have the townspeople gossip about them. A distinctly beautiful young maid would definitely have all sorts of gossip and slander going on about them and their scandalous deeds, and again, real or imagined. Same with men of high status, someone is bound to have an opinion about the secret lover of the local priest sworn to celibacy regardless of whether that lover exists or not. Same with mayors, magistrates, governors, and any and all officials and nobles.

Tim already mentioned trade and weather related topics, along with other practical stuff. If there has been some major event in recent history, such as a disappearance or goblin sightings or something, there’s bound to be chatter about that.

I’d advice you to NOT make a general nonsense-generator for your NPCs, instead, you should tailor their comments to specifically serve your own worldbuilding. You can use NPC banter to highlight story elements, introduce characters in an organic fashion, give glimpses to the history of your world and obviously hints about any local intrigue that might be going on. Use the examples mentioned to figure out what the people in your world specifically would be talking about. That generic crap is so useless that it might not be there at all. If you can’t be bothered to do something properly, don’t do it at all.


My thanks, you gave me some useful suggestions.

Right, thats my intention. There is nothing worse for the atmosphere than mute citizens and a simple “Hello there” or “Nice weather…” isn’t enough for me. And some of the oneliners should be somewhat funny or unexpected.

“Did you know that Nasher wears red underwear? His chambermaid told me …”

Thanks, that’s a good guideline.

Right, there should be some relevance to the current setting, which is Neverwinter after the OC. The city is still in a desastrous state, slowly prospering. let’s see what springs in my mind …

Couple of my suggestions for you -

“Our mayor is so useless, he couldn’t even find the town hall if it didn’t have a flag on it!”
“Young man, I wouldn’t go in there even if hell was in the grip of an ice age!”

And a few quotes from the Edenborough Fringe Festival 2015 -

“My cat is recovering from a massive stroke.” (Darren Walsh)
“If I could take just one thing to a desert island I probably wouldn’t go.” (Dave Green)
“Clowns divorce. Custardy battle.” (Simon Munnery)
“They’re always telling me to live my dreams. But I don’t want to be naked in an exam I haven’t revised for…” (Grace The Child)

TBH, I would make minor edits to the first and last of those. FWIW The names in brackets are the comedians who said them.


1 Like

int StartingConditional()

if ( (GetIsNight()) || (GetIsDusk()) ) return FALSE;

int nRoll = d100();
switch (nRoll)
case 1: SetCustomToken(101, “Pardon me.”); break;
case 2: SetCustomToken(101, “What a rotten looking projection.”); break;
case 3: SetCustomToken(101, “Why don’t you watch where you’re going!”); break;
case 4: SetCustomToken(101, “I’m running late!”); break;
case 5: SetCustomToken(101, “Go milk a bull or something!”); break;
case 6: SetCustomToken(101, “* Smiles "); break;
case 7: SetCustomToken(101, “Perhaps another time.”); break;
case 8: SetCustomToken(101, “Nice day.”); break;
case 9: SetCustomToken(101, “Hey there.”); break;
case 10: SetCustomToken(101, “It’s only safe around here during the day.”); break;
case 11: SetCustomToken(101, “No, I don’t have the time.”); break;
case 12: SetCustomToken(101, “Is that you who smells?”); break;
case 13: SetCustomToken(101, “Damn dogs shit everywhere!”); break;
case 14: SetCustomToken(101, “Can’t help you with that.”); break;
case 15: SetCustomToken(101, “That old bag never shuts up!”); break;
case 16: SetCustomToken(101, “Keep him locked up for good is what I say!”); break;
case 17: SetCustomToken(101, “Haven’t seen you around before.”); break;
case 18: SetCustomToken(101, “No idea.”); break;
case 19: SetCustomToken(101, "
Nods "); break;
case 20: SetCustomToken(101, “Don’t like the sound of the breeze on those trees.”); break;
case 21: SetCustomToken(101, “I don’t trust Lord Bravil myself.”); break;
case 22: SetCustomToken(101, “Sorry but I’m running late.”); break;
case 23: SetCustomToken(101, “Could be a storm approaching.”); break;
case 24: SetCustomToken(101, “The whispers haunted me for many weeks after.”); break;
case 25: SetCustomToken(101, “You hear anything about a gypsy festival by chance?”); break;
case 26: SetCustomToken(101, “Excuse me.”); break;
case 27: SetCustomToken(101, “Leave me alone.”); break;
case 28: SetCustomToken(101, “I’m busy.”); break;
case 29: SetCustomToken(101, “I have errands to run.”); break;
case 30: SetCustomToken(101, “There’s fresh fish at the market.”); break;
case 31: SetCustomToken(101, “Don’t feed the dogs. Or the chickens!”); break;
case 32: SetCustomToken(101, “Sure is damp out today.”); break;
case 33: SetCustomToken(101, “I miss her everyday.”); break;
case 34: SetCustomToken(101, “Even the roots were tripping good folk.”); break;
case 35: SetCustomToken(101, “What?”); break;
case 36: SetCustomToken(101, “Yeah, just keep your hands to yourself!”); break;
case 37: SetCustomToken(101, “Is there no one who cleans the outhouse?”); break;
case 38: SetCustomToken(101, “Didn’t you recently arrive in town?”); break;
case 39: SetCustomToken(101, "
Winks "); break;
case 40: SetCustomToken(101, “Maybe tomorrow.”); break;
case 41: SetCustomToken(101, “Why, thank-you!”); break;
case 42: SetCustomToken(101, “Blasted pigeons messed up my shoulder again!”); break;
case 43: SetCustomToken(101, “I’d be grumpy too if I was a guard doing patrols.”); break;
case 44: SetCustomToken(101, “Then get yourself a room at the Wooden Wool.”); break;
case 45: SetCustomToken(101, “Hands off!”); break;
case 46: SetCustomToken(101, “Oh?”); break;
case 47: SetCustomToken(101, “Yup!”); break;
case 48: SetCustomToken(101, "
Frowns "); break;
case 49: SetCustomToken(101, "
Waves "); break;
case 50: SetCustomToken(101, "
Watches you carefully "); break;
case 51: SetCustomToken(101, "
Bows "); break;
case 52: SetCustomToken(101, “Could be. I wouldn’t know.”); break;
case 53: SetCustomToken(101, “On a windy day, you can smell the stink of Bramblewood Moor.”); break;
case 54: SetCustomToken(101, "
Sighs *”); break;
case 55: SetCustomToken(101, “Aye?”); break;
case 56: SetCustomToken(101, “I say we should burn the wood to the ground.”); break;
case 57: SetCustomToken(101, “It’ll pick up when the Talwin Trail reopens.”); break;
case 58: SetCustomToken(101, “A Lannister always pays their debt!”); break;
case 59: SetCustomToken(101, “Oh boo-who!”); break;
case 60: SetCustomToken(101, “Hate it when it rains. The mud gets on everything.”); break;
case 61: SetCustomToken(101, “Must you pester me?”); break;
case 62: SetCustomToken(101, “What’s this about the pond?”); break;
case 63: SetCustomToken(101, “A good day.”); break;
case 64: SetCustomToken(101, “Even when the storm clouds roll in, I worry it’s the Darkness returning.”); break;
case 65: SetCustomToken(101, “The lad chops wood all day long.”); break;
case 66: SetCustomToken(101, “Never heard of it.”); break;
case 67: SetCustomToken(101, “Nice outfit.”); break;
case 68: SetCustomToken(101, “Avoid the Farrow Flatts at night.”); break;
case 69: SetCustomToken(101, “The cows wake me up every morning.”); break;
case 70: SetCustomToken(101, “They’re calling for heavy storms tonight.”); break;
case 71: SetCustomToken(101, “Now where is that blind woman sitting today?”); break;
case 72: SetCustomToken(101, “Too many apples, not enough oranges.”); break;
case 73: SetCustomToken(101, “I don’t think I’ll make it to the outhouse!”); break;
case 74: SetCustomToken(101, “What?”); break;
case 75: SetCustomToken(101, “I’m in love! Love I say!”); break;
case 76: SetCustomToken(101, “I need a new pair of boots.”); break;
case 77: SetCustomToken(101, “Those colours do not blend well with your skin tone.”); break;
case 78: SetCustomToken(101, “Where am I? Who are you?”); break;
case 79: SetCustomToken(101, “Someone’s watching you from behind that building.”); break;
case 80: SetCustomToken(101, “Whispers say her name’s Lilly Black.”); break;
case 81: SetCustomToken(101, “The pigeons are still using the window at the house.”); break;
case 82: SetCustomToken(101, “Sorry, can’t help you.”); break;
case 83: SetCustomToken(101, “The shadows. Stay out of the shadows!”); break;
case 84: SetCustomToken(101, “She never comes out of her home.”); break;
case 85: SetCustomToken(101, “Oh, she’s up to something alright.”); break;
case 86: SetCustomToken(101, “I need a drink.”); break;
case 87: SetCustomToken(101, “My aching back.”); break;
case 88: SetCustomToken(101, “Watch it!”); break;
case 89: SetCustomToken(101, “There’s a fisherman who braves the wood during the day.”); break;
case 90: SetCustomToken(101, “The entire town rattled and shook.”); break;
case 91: SetCustomToken(101, “I don’t know if I’d wander outside of the walls myself.”); break;
case 92: SetCustomToken(101, “How do red roses turn into blue ones?”); break;
case 93: SetCustomToken(101, “Don’t look at me like that.”); break;
case 94: SetCustomToken(101, “Do you have any fresh fruit or vegetables?”); break;
case 95: SetCustomToken(101, “I’ll try, thanks.”); break;
case 96: SetCustomToken(101, “Time to sit down for a nice meal.”); break;
case 97: SetCustomToken(101, “Elgath has all sorts of strange junk about.”); break;
case 98: SetCustomToken(101, “I hear they’re gypsies.”); break;
case 99: SetCustomToken(101, “Now that’s just stupid.”); break;
case 100: SetCustomToken(101, “Ah. There you are.”); break;

return TRUE;



I think much more than a greeting or maybe a weather comment is weird. If you walk up to a stranger and say hi (wellmet, greetings whatever) they are not going to start talking about Nasher’s underwear or other local gossip likely. You may get a greeting. You may get a wary look. Your PC is probably one of those “lot of strange folk about” that the locals are complaining about (to each other…).

my 2 cp anway :slight_smile:

1 Like

@Fester_Pot Nice - anything less than 100 replies is going to get repetitive too soon.

You could ensure that nothing repeats until all 100 have been used. Put the numbers 1-100 into a stack. Pick one at random. Replace it with the last element, reducing the stack size by one. Repeat until stack empty.

I’ve done that for random citizen appearances to prevent twins.

1 Like

If you’re making giant lists like that, you may want to have special lists for different types of NPCs, the people in the city aren’t likely to be talking about the same things as the people in the countryside, likewise the rich are not likely to talk about the same things as the poor. If you’re doing the whole city, I’d advise to make a special list of banter lines for the commoners of each district separately.

You’re right, but that was just an example (not the best maybe). But I can still use it as a onliner, which is just overheared by the PC.

Now, thats what I’m looking for. Thanks.

There will be at least a different list for people in the farmlands (from CCC), the city and tavernpatrons + some individual texts. And the list will not be that long …

A stack? What the hell is a stack? Ah, I see … structured data like Arrays, Chains, Lists etc. I’ve heared of it :smiley: in a distant past …

For every tavern and inn when you click on filler NPCs for one-liners, it checks a variable. If the variable is equal to 1 which is set OnEnter, the responses are sent based on that location. OnExit clears the variable to 0 until the PC enters a different inn or tavern, where that OnEnter area’s variable is set to 1. So each local area has different responses and uses one single script, albeit, starts to get long as more one-liners are added for each tavern and inn. Got a night response script as well, just have to put the time into coming up with one-liners :slight_smile:

The stack idea sounds interesting Proleric. Any code to share to show how it works?


1 Like

I always liked when even random one-liners were tailored just a bit with appropriate variables. In other words, if you’ve just left the sewers area and gone up to a person in a tavern or on the street, you ought to carry a variable showing where you’ve been. That way, the reaction of the npc can come from a special list that includes things like:

  1. A look of disgust curls this person’s lip. “Gods <man/woman>, have you ever considered a bath?”
  2. The person wrinkles her nose. “Phew!”
  3. “Good <day/night> <sir/madam>. I was just about to . . . Oh! I say, there’s a whole ocean just down by the docks. I suggest a dip, or three.”
  4. “Wow, you stink!”
  5. “Excuse me, but you appear to have a t . . . something . . . on your boot.”
  6. “Sewers, eh? Oh, I can tell.”

That sort of thing. Of course, an injured PC could get responses from another list, etc.

Just food for thought.



In Agrenost-Beneath the Cobbles people would indeed comment if you needed a bath. I thought that was a fantastic bit of immersion.
It really is all about the atmosphere. A town should feel alive as much as possible. I would want the conversations to occasionally be relevant if possible. Maybe drop in a side quest or two from a conversation tree. It’s one of the things that occasionally stood out in the OC. The right conversation at the right time just made it work better. Of course much of what was there wasn’t top notch either so it’s a mixed bag.
One thing is certain, proper conversations are a huge time sink for a builder. Tailoring the convos to male or female and then to race all takes time. It’s worth doing but it takes a lot of effort. I think I would steal the odd line from pop culture just as an easter egg effect.
The idea of a visit to Neverwinter after the OC intrigues me greatly, I should like to subscribe to your newsletter!

another thought occurred to me about immersion that I wanted to point out. Key NPC’s (like Aribeth or Aarin Gend could still move about in the areas that they inhabit while waiting for the player to interact with them. Somebody waiting for something like the word of power would certainly be tempted to pace about if nothing else. If a key character moved from one location to another they could send someone to wait in their place (an underling). “Aribeth has gone to see the blacksmith, look for her in…” Yes it’s more “needless walking about” but it makes the scenario seem more real. Plus you can add an introduction at that point. “Oh, I see you really are working for the City after all. Here is an extra (bauble of some value)” To make the extra walking pay off.
Just a thought…

1 Like

Something like this:

const int ONE_LINER_COUNT = 100;

// Function that returns a random one-liner number
// It will not repeat until all possible one-liners have been used
int zGetOneLiner()
    int nRemaining = GetLocalInt(GetModule(), "OneLinerRemaining");
    int nChosenSub;
    int nChosen;
    int nLast;

    if (nRemaining == 0)  // Initialise table of all possible one-liners
        while (++nRemaining <= ONE_LINER_COUNT) 
            SetLocalArrayInt(GetModule(), "OneLiner", nRemaining, nRemaining);

        nRemaining = ONE_LINER_COUNT;

    nChosenSub = Random(nRemaining) + 1;
    nChosen    = GetLocalArrayInt(GetModule(), "OneLiner", nChosenSub);
    nLast      = GetLocalArrayInt(GetModule(), "OneLiner", nRemaining);
    SetLocalArrayInt(GetModule(), "OneLiner", nChosenSub, nLast);
    SetLocalInt(GetModule(), "OneLinerRemaining", --nRemaining);
    return nChosen;

EDIT - simplified function to initialise automatically on first use.

In this example, the stack is stored on the module, but of course it could be stored on a dummy placeable (or whatever) if you prefer not to clutter the module variables.

1 Like

There is a short visit at the docks in “Bloodfeud”, where I picked up some of the threats of the OC (and added my personal point of view …:slight_smile: )