Files
5ead/generators/npcs/index.html
2025-06-07 07:58:30 -05:00

1743 lines
18 KiB
HTML

<!DOCTYPE html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta name="robots" content="noindex">
<meta charset="UTF-8">
<style>
body {
max-width: 700px;
margin: auto;
font-size: 18px;
font-family: sans-serif;
padding: 10px;
}
p, li {
line-height: 1.5em;
}
ul, ol {
padding-left: 20px;
margin-left: 0;
}
li {
margin-left: 0;
}
table {
border-collapse: collapse;
}
th, td {
border: 1px solid black;
padding: 5px;
text-align: left;
}
button, select, input, textarea {
font-size: 18px;
touch-action: manipulation;
}
</style>
<title>NPC Generator</title>
</head>
<body>
<h1>NPC Generator</h1>
<div id="controls">
<button onclick="generate()">Generate</button>
</div>
<div id="output"></div>
<script>
const dataText = `
template
{name} {surname_first}{surname_last}, a {personality} {species} {npc_type} with {trait} who dresses {dress} and wants to {goal}. They want the characters to {quest}.
species
human
elf
dwarf
halfling
gnome
dragonborn
orc
goblin
kobold
infernal
birdfolk
celestial
bugbear
centaur
changling
deep gnome
deep dwarf
planar elf
fairy
firbolg
djinn-born
mirad-born
dao-born
efreet-born
goliath
rabbitfolk
hobgoblin
lizardfolk
minotaur
satyr
sea elf
shadow elf
catfolk
turtlefolk
merfolk
serpentfolk
personality
surly
cautious
brash
elitist
suspicious
carefree
loyal
opportunistic
wide-eyed
humorous
drunken
optimistic
ignorant
obnoxious
brazen
loving
ambitious
greedy
eagle-eyed
lovestruck
sinister
foulmouthed
pious
npc_type
bandit
cultist
scout
thug
spy
berserker
cult fanatic
druid
priest
knight
veteran
mage
assassin
caravanner
circusfolk
collegiate
cosmopolitan
dragoncult
forgotten folk
forsaken
godbound
imperial
itinerant
lone wanderer
nomad
settler
shadow folk
steamforged
stoneworthy
tyrannized
villager
warhordling
wildling
acolyte
artisan
charlatan
criminal
cultist
entertainer
exile
farmer
folk hero
gambler
guard
guildmember
hermit
marauder
noble
outlander
sage
sailor
soldier
trader
urchin
name
Abelard
Abigail
Abraham
Achaios
Acis
Adalyn
Addison
Adela
Adelaide
Adeline
Admiranda
Adonis
Adrian
Adwait
Aeditha
Aegipan
Aelina
Aeris
Affilo
Agnys
Ahmet
Aiden
Aigis
Aigyptos
Aiolides
Aion
Aisa
Aisakos
Aithilla
Aithon
Aitne
Akakos
Alaina
Alainne
Alaire
Albert
Albin
Alburg
Aldebrand
Aldous
Alexander
Alexandra
Alexis
Aleyn
Alianore
Alison
Alistair
Alkmene
Allison
Alobeth
Alora
Alyne
Alys
Alyssa
Amabel
Amann
Ambrosia
Amelia
Amias
Amice
Ampelos
Amphelice
Anaxibia
Ancelot
Angelet
Anna
Annabel
Annabelle
Anne
Anselm
Anthoinette
Antigone
Apemosyne
Arabella
Aran
Archedios
Argo
Aria
Arianna
Arkeisios
Arlette
Arnald
Arnott
Arthur
Asher
Askalabos
Atilda
Atropos
Atys
Aubrey
Audolyn
Audrey
Audrye
Augeias
Augustina
Augustine
Auson
Austin
Ava
Avelin
Avelyn
Averil
Avery
Ayleth
Aylmer
Bacchus
Baderon
Bailey
Bakis
Baldric
Balthazar
Bardolf
Barnabas
Baron
Bartholomew
Baterich
Bathsua
Bayard
Beatrix
Belath
Bella
Bellamy
Bellinda
Belmont
Belos
Benedict
Beneger
Berekyntia
Bernaith
Bernard
Berndan
Bertana
Berte
Bertram
Bertrand
Bess
Beth
Birch
Blackburn
Blake
Blanche
Blavier
Bormos
Borse
Bouchard
Boyle
Bran
Brangwine
Branwen
Braya
Brayden
Breccan
Brentyn
Brice
Brick
Brien
Brody
Brom
Brontes
Bruce
Brunhild
Brusce
Bryce
Bryde
Brynda
Budaur
Bukolos
Caden
Caesaria
Caia
Cain
Caleb
Callie
Calloway
Camden
Cameron
Camers
Camilla
Caplan
Cared
Carmen
Carmine
Carna
Caroline
Carson
Carter
Casandra
Cashel
Casimir
Caspar
Catillus
Ceadda
Cecilia
Cecily
Celeste
Celestia
Celestine
Celestria
Cenota
Cenwood
Chamberlain
Charis
Charlotte
Charlys
Chartain
Chase
Chesias
Chloe
Christabel
Christian
Chryses
Chulisa
Cicely
Circe
Claire
Clancy
Clarimond
Claudia
Claudien
Clemence
Clementina
Clifton
Clio
Clive
Cole
Colin
Collys
Colson
Colton
Concessa
Connor
Conphas
Constance
Cornelia
Cornell
Cosmo
Coster
Crestian
Cristiana
Cullive
Cunovin
Cutbert
Cuthbert
Cwengyth
Cybele
Cyndra
Cynewyn
Cyriac
Daimbert
Dalmas
Damaris
Dametta
Damia
Danae
Danyell
Dardanos
Dauid
Davyd
Dawson
Day
Decima
Declan
Deianeira
Deidameia
Deimachos
Deimos
Deitrich
Dekelos
Deloys
Delphos
Denston
Denys
Deonen
Derkynos
Derwin
Deryk
Diamanda
Dionisia
Dodona
Dolly
Dominic
Domino
Dominy
Donner
Dorcas
Dorothe
Drake
Drew
Dryope
Drystan
Durilda
Dwynn
Dwyvaer
Dyana
Dylan
Dysaules
Eadbert
Ealdwine
Echetlos
Echo
Edelinne
Edithe
Edmund
Edwyn
Eidothea
Eilonwy
Elaisse
Elatus
Eldred
Ele
Eleanor
Eleazar
Electra
Elena
Elewys
Eli
Eliana
Elijah
Ella
Ellerete
Ellie
Elliot
Elpenor
Elsebee
Elspeth
Elyn
Elynor
Elyzabeth
Emanuel
Emblyn
Emeline
Emeny
Emeria
Emerick
Emery
Emilie
Emlinie
Emma
Emmet
Enipeus
Epigonoi
Epione
Erasmus
Erato
Erebos
Erik
Eschina
Eschiva
Esdeline
Esmenet
Esmond
Esmour
Esperaunce
Estienne
Estrild
Etgar
Ethan
Ethelbert
Ethelia
Ethelred
Euadne
Euchenor
Euenos
Eugenia
Eunomos
Eupalamos
Euphorbos
Europe
Eustace
Eustacia
Eva
Evan
Evelyn
Fames
Fauna
Fawkes
Federica
Feleta
Felice
Fergus
Fiebras
Finola
Flambard
Fleur
Florens
Folke
Foxe
Frances
Francis
Francisca
Franny
Frederick
Frederyk
Frideswide
Fridgia
Fulke
Gabriel
Galain
Galateia
Galeos
Galfrid
Ganelon
Gared
Gauwyn
Gavin
Gembert
Genneth
Geoffrey
Gerald
Gerbold
Gerhardt
Gerland
Germainne
Gethrude
Gianna
Gillian
Giselle
Glauke
Glenda
Gloriana
Goddard
Godebert
Godfrey
Grace
Grayson
Gregory
Griffith
Grimbald
Grups
Gryffen
Guinevere
Guston
Guthrie
Gwayne
Gyes
Gygas
Gylbart
Gylda
Gyles
Habreham
Hadrian
Hailey
Haimirich
Halia
Halisera
Halla
Halli
Halstein
Hamish
Hamon
Hannah
Harper
Hart
Havynn
Hebir
Heinlein
Helena
Helenor
Helias
Helios
Helvynya
Hemithea
Henrietta
Henry
Hepaklos
Herkyna
Hester
Hewrey
Hilda
Hildegard
Hilith
Hippotes
Honora
Hopladamos
Huaina
Hudson
Humphrey
Hunter
Hylas
Iamos
Ian
Ianthe
Ierick
Ilos
Imedia
Inferi
Ingham
Ingram
Inigo
Inuus
Iobes
Ione
Iphis
Irae
Irus
Isaac
Isabella
Isabelle
Ischys
Isemeine
Isleton
Ismay
Ismenia
Isolde
Isyrion
Ivan
Jaane
Jacinta
Jack
Jackson
Jacob
Jacquette
Jago
Jakys
James
Janbert
Janus
Jasmine
Jayce
Jayden
Jeanne
Jedediah
Jeger
Jellion
Jemime
Jenet
Jeniel
Jenlyns
Jenni
Jenyfer
Jessamine
Jestan
Jezebel
Jillian
Jocea
Jocelyn
Johannes
Joleicia
Jolline
Jonathas
Jordan
Jordyn
Joseph
Josephine
Josiah
Josian
Josiane
Josias
Jotham
Joyce
Joyse
Judithe
Judye
Julian
Juliana
Julyan
June
Jupiter
Justina
Justitia
Kadelon
Kaelyn
Kain
Kaitlyn
Kampe
Kapys
Katelyn
Kath
Katherine
Katrine
Kaukon
Kaunos
Kayla
Kaylee
Keira
Kelmis
Kennard
Kenrick
Kephalos
Kermit
Kerrich
Khellus
Kiernan
Kilix
Kimball
Kinborow
Kinnison
Klaros
Kleobis
Kranaos
Kurtz
Kyknos
Kyley
Kylie
Kyzikos
Ladislas
Laios
Laird
Lake
Lambert
Lampetos
Landon
Laodameia
Laodike
Lapithes
Lars
Latinos
Latisha
Latona
Lauda
Lauren
Laurence
Laurentius
Lausus
Laverna
Layla
Leah
Leavold
Lefwyne
Leimone
Leipephile
Lennard
Leofwen
Leofwynn
Leonie
Leopold
Letita
Lettice
Leuke
Leukippe
Leukon
Levi
Liam
Lila
Liliana
Lillian
Lilou
Lily
Linette
Linos
Linyeve
Littlejohn
Lityerses
Llawran
Lloyd
Lodwicke
Logan
Lora
Lorcan
Lowell
Lucas
Lucienne
Lucy
Luke
Lux
Lykeios
Lykomedes
Lykophron
Lykurgos
Lynkos
Lysippe
Machaon
Mackenzie
Maddeline
Madelyn
Madison
Maerwynn
Maiandros
Mainfroi
Maisenta
Makaria
Makayla
Malachy
Malin
Mansel
Manter
Margarete
Margeria
Margry
Maria
Marjore
Maronne
Mars
Marsilia
Martine
Mason
Mateo
Mathild
Mathye
Mavors
Maxfield
Maya
Megareus
Melaineus
Melampus
Melas
Melodie
Melusine
Memphis
Menestheus
Meredithe
Merewyn
Merilda
Merops
Meryell
Mestor
Metaneira
Metis
Metope
Mia
Micah
Mila
Miles
Millicent
Minerva
Minos
Minyas
Mirabelle
Misericordia
Mnestra
Molossos
Morgant
Morgayne
Morpheus
Morys
Mulciber
Muriel
Murienne
Musa
Mydrede
Mykenai
Myles
Myrine
Myrto
Natalie
Nathan
Nathaniel
Nausithos
Nautes
Navarre
Neaira
Neale
Neilos
Nemea
Nessos
Nesta
Nicholas
Nicholina
Nicia
Nicolaa
Nireus
Noah
Noes
Nolan
Nomios
Nora
Norman
North
Nyx
Oberon
Ogaphos
Ogden
Ogygos
Oiax
Oibalos
Oinomaos
Oliver
Olivia
Olyffe
Olympia
Olyver
Ondine
Ophellia
Ophis
Orrick
Orson
Orthaia
Orvist
Orwen
Osborne
Osric
Oswald
Oswyn
Ottilia
Overn
Owen
Owyne
Oxylos
Ozias
Paige
Pallene
Parker
Parnell
Parnella
Pasiphae
Patrick
Paul
Paz
Pedasos
Peirene
Pelias
Pelinne
Penates
Penelope
Penia
Penthesileia
Percival
Peripanos
Persephone
Perseus
Peter
Petronilla
Phanes
Pheraia
Philippe
Philyra
Phlegrai
Phobos
Phrasios
Phrixos
Phthonos
Pieria
Piers
Pike
Pippa
Pisos
Pitane
Pittheus
Placencia
Poine
Polybos
Polydamna
Polykaon
Polyxo
Portheus
Potitii
Powle
Prescott
Priamos
Prokne
Prokris
Proteus
Prothoos
Prudence
Pulmia
Purnell
Radcliffe
Radolf
Raffe
Randall
Randwulf
Raoul
Rauffe
Raulin
Reagan
Rebeccah
Redmond
Redwald
Reeve
Reginald
Reinholdt
Remnus
Reona
Reothine
Reynard
Reyner
Reynfred
Rhadamanthys
Rhadine
Rhakios
Rhea
Rianna
Ricard
Richarde
Richenda
Rickeman
Ridel
Riley
Robert
Robyn
Roger
Rolfe
Romulus
Ronald
Rosa
Rosalind
Rosamund
Rose
Roundelph
Rowland
Roysia
Ruby
Rufus
Ryan
Rychyld
Sabra
Sadie
Saffron
Salamis
Salios
Samantha
Samson
Sanche
Sandre
Sarra
Saskia
Satyros
Savannah
Scarlet
Scarlett
Sebastian
Seldi
Selphina
Semele
Sence
Serendipity
Serge
Sevrin
Shardusa
Sibyl
Sighard
Sigurdh
Sikyon
Silvanus
Simond
Sinead
Singleton
Sinope
Sithon
Skalk
Skyler
Snow
Sol
Solyeuse
Somerhild
Sophia
Sophie
Spenser
Sreda
Stella
Stellan
Stewart
Sulen
Swift
Sybaris
Sybell
Sydnee
Sydney
Sylphie
Syme
Symon
Symond
Syndony
Sysley
Systeleley
Talaos
Tamsin
Tanah
Tanaquil
Tansa
Tansy
Tantalos
Taran
Tarvorwen
Tatius
Taylor
Telephassa
Temperance
Templeton
Tenes
Teukros
Thaeox
Thamyris
Thearden
Theda
Thelxion
Theodore
Theophane
Theresa
Thespis
Thoas
Thomas
Thomasine
Thomasyn
Thora
Thornton
Thrydwulf
Thyia
Tiberius
Timothy
Tiphina
Tobiah
Toril
Tristan
Tristana
Tulip
Turstin
Tyche
Tyler
Typhon
Ulric
Uranos
Ursula
Valentine
Valentyne
Vannes
Vaughan
Verena
Vesta
Vicca
Victor
Violet
Vita
Vivian
Vorlan
Voyce
Vrsela
Vyncent
Wadard
Walden
Walter
Ward
Warin
Wauter
Webster
Wenyld
Werner
Wilfrid
Wilham
William
Willielmus
Willmott
Win
Wineburg
Wolfstan
Wulfhilda
Wyatt
Wymon
Wymond
Wynefreede
Wystan
Xavier
Yedythe
Ysabel
Ysmeina
Ywain
Zachary
Zacheus
Zell
Zephyrus
Zerig
Zoe
Agathe
Alesta
Arissa
Brigone
Calaphe
Corisande
Hira
Hypatia
Iadorna
Ianthe
Lidia
Luphea
Nymosyne
Olexa
Polyxene
Psemilla
Rakleia
Sophronia
Telephone
Tikaia
Vala
Alkmenos
Basarios
Braulios
Drasus
Eccles
Hixus
Kaliaros
Kalogeros
Kanlos
Kleon
Kytheon
Lanathos
Lindos
Nyklos
Phrogas
Prokoios
Rhexenor
Ristos
Teraklos
Uremides
Verenes
Zenon
Aletha
Atagone
Demne
Doxia
Ecate
Eriz
Gragonde
Iadma
Koila
Oramne
Seza
Ziore
Apto
Athoz
Baragon
Bryguz
Eremoz
Gorioz
Grexes
Oriz
Pyxathor
Teoz
Xemnon
Xior
Bozzri
Dhazdoro
Erinimachis
Ghalantzo
Halafoti
Kerania
Mitevra
Philoprodis
Tavromiki
Ypoudoris
Bamvros
Fotiyinos
Halafotios
Keranios
Menetavro
Nikavros
Prodos
Rhordon
Tavrostenes
Thyrogog
Aliki
Avra
Chara
Dafni
Eirini
Elpida
Irini
Kaiti
Lia
Niki
Tasia
Xeni
Yanna
Zoi
Alekos
Dimi
Filippos
Ilias
Kyriakos
Neofytos
Omiros
Pantelis
Spyro
Takis
Zenon
Amathe
Gnorcys
Leurybia
Margomestra
Nereones
Oleia
Samathe
Saphiro
Tethene
Theaneia
Thectra
Bysseus
Cetos
Galaukus
Galiton
Kenessos
Odexes
Palamon
Pontreus
Rheteus
Thrasios
surname_first
Angel
Anvil
Arrow
Bear
Beast
Blue
Bright
Broad
Bronze
Bull
Cat
Cloud
Copper
Crow
Dark
Dawn
Dirt
Dog
Doom
Dragon
Drake
Drum
Dusk
Dust
Eagle
Earth
Ebon
Emerald
Faerie
Fel
Fire
Flame
Flower
Foe
Forge
Fox
Free
Frost
Gem
Gentle
Ghost
Ghoul
Giant
Glass
Gloom
Glory
Goblin
Gold
Goose
Grass
Grave
Gravel
Gray
Green
Gust
Hair
Half
Harp
Hawk
Hero
Hill
Holly
Ice
Iron
Jewel
Kill
King
Knife
Late
Law
Leaf
Light
Lion
Long
Mace
Mill
Monster
Moon
Mountain
Mud
Needle
Night
North
Oak
Ox
Quick
Rain
Rat
Red
Riddle
Scale
Shadow
Sharp
Shield
Siege
Silver
Smile
Song
Spell
Spider
Spine
Spirit
Spring
Stale
Star
Stone
Storm
Strife
Swift
Sword
Tall
Thorn
Tiger
Titan
Trail
Tree
White
Willow
Wise
Wolf
Worm
Wyrm
surname_last
bane
beard
belly
blade
blood
board
bond
boot
born
bottom
bound
bright
brissle
brood
brow
buckle
caller
carol
caster
change
chaser
chest
chewer
chuckle
claw
cleaver
cloak
cloud
cowl
crippler
cry
cutter
dance
dancer
dazer
ear
fall
fang
finger
flinger
forger
gaze
giver
glacier
glove
gust
hair
hammer
hand
harp
heart
heart
helm
hide
hood
hoof
hound
house
howler
hunter
kick
kin
kiss
knee
knee
knocker
laugher
lover
maker
master
maul
rain
razor
rend
river
rock
runner
sail
seeker
sharp
singer
slicer
smasher
smile
son
song
soother
sorcerer
soul
spear
spur
stalker
star
steel
stinger
stone
storm
storm
talker
teeth
thumb
toes
tongue
tooth
touch
trail
traveler
tromp
valley
viper
walker
watcher
whisker
whisper
willow
wind
wing
trait
wild hair
a scarred cheek
body tattoos
a smoking pipe
gold teeth
a limp
a missing eye
unusual eyes
big earrings
a missing hand
a bad habit of spitting
shifty eyes
uneven teeth
a snort
facial tattoos
an unusual nose
a missing tooth
a shaved head
false lashes
heavy makeup
dress
plainly
in dirty clothes
in pristine clothes
in crumpled clothes
in coordinated clothes
in well-decorated clothes
in mended clothes
ragged ragged clothes
in colorful clothes
in drab clothes
in oversized clothes
in mismatched clothes
in a uniform
in embroidered clothes
in armor
in faded clothes
too tightly
in patched clothes
in gilded clothes
in flattering clothes
goal
get rich
impress their crush
get revenge
clear their name
reunite with their love
get a job
solve a mystery
impress the boss
outshine their rival
trick someone
return home at last
be left alone
prove themself
leave a bad scene
avoid their enemy
defeat their enemy
topple a local leader
prove a theory
turn over a new leaf
honor someone
quest
find an item
kill a villain
rescue an NPC
uncover a secret
clear out monsters
protect a monument
protect an NPC
steal an item
return an item
close a gate
open a gate
activate a monument
disable an artifact
recover an item
convince an NPC
awaken a monster
put a monster to sleep
bury a secret
discover a monument
dig up an artifact
`;
function parseInput(text) {
const lines = text.trim().split('\n');
const result = {};
let currentKey = null;
for (let line of lines) {
if (!line.trim()) continue;
if (!line.startsWith(' ')) {
currentKey = line.trim().replace(':', '');
result[currentKey] = [];
} else if (currentKey) {
result[currentKey].push(line.trim());
}
}
return result;
}
function pick(list) {
return list[Math.floor(Math.random() * list.length)];
}
function fillTemplate(template, data) {
return template.replace(/{(.*?)}/g, (_, key) => pick(data[key] || ['']));
}
function generate(count = 10) {
const parsed = parseInput(dataText);
const template = (parsed.template || [''])[0];
delete parsed.template;
const output = document.getElementById('output');
output.innerHTML = '';
for (let i = 0; i < count; i++) {
const text = fillTemplate(template, parsed);
const p = document.createElement('p');
p.innerHTML = text.charAt(0).toUpperCase() + text.slice(1);
output.appendChild(p);
}
}
window.onload = () => generate();
</script>
</body>
</html>