Skip to content

Instantly share code, notes, and snippets.

@goblinHordes
Created October 30, 2013 05:45
Show Gist options
  • Save goblinHordes/7227708 to your computer and use it in GitHub Desktop.
Save goblinHordes/7227708 to your computer and use it in GitHub Desktop.
BFRpg.js - Basic Fantasy Role-Playing Game for Roll20 API
Function.prototype.inheritsFrom = function( parentClassOrObject ){
if ( parentClassOrObject.constructor == Function )
{
//Normal Inheritance
this.prototype = new parentClassOrObject;
this.prototype.constructor = this;
this.prototype.parent = parentClassOrObject.prototype;
if(this.prototype.parent.constructor.children)
this.prototype.parent.constructor.children.push(this);
else
this.prototype.parent.constructor.children = [ this ];
}
else
{
//Pure Virtual Inheritance
this.prototype = parentClassOrObject;
this.prototype.constructor = this;
this.prototype.parent = parentClassOrObject;
}
return this;
}
String.prototype.toProperCase = function () {
return this.replace(/([^\W_]+[^\s-]*) */g,
function(txt){
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
};
var BFRpg = BFRpg || {};
var bf = BFRpg;
bf.StatBlock = function (){
function roll(){
return randomInteger(6) + randomInteger(6) + randomInteger(6);
}
this.strength = roll();
this.intelligence = roll();
this.wisdom = roll();
this.dexterity = roll();
this.constitution = roll();
this.charisma = roll();
this.toString = function (){
return( ["Str:" + this.strength + "(" + this.modifier('strength') + ")",
"Int:" + this.intelligence + "(" + this.modifier('intelligence') + ")",
"Wis:" + this.wisdom + "(" + this.modifier('wisdom') + ")",
"Dex:" + this.dexterity + "(" + this.modifier('dexterity') + ")",
"Con:" + this.constitution + "(" + this.modifier('constitution') + ")",
"Cha:" + this.charisma + "(" + this.modifier('charisma') + ")"].join(' '));
}
this.modifier = function (stat){
switch(this[stat]) {
case 3:
return(-3);
break;
case 4:
case 5:
return(-2);
break;
case 6:
case 7:
case 8:
return(-1);
break;
case 9:
case 10:
case 11:
case 12:
return(0);
break;
case 13:
case 14:
case 15:
return(1);
break;
case 16:
case 17:
return(2);
break;
case 18:
return(3);
break;
}
return(undefined);
}
}
bf.PlayerCharacter = function (){
this.level = 0;
this.sex;
this.hitPoints;
this.maxHitPoints = 0;
this.class;
this.race;
this.statBlock;
this.toString = function (){
pc = this.fullname() + ", " + [this.sex.toProperCase(), this.race.strings.adjective.toProperCase(),
this.class.strings.name.toProperCase()].join(' ') + "\n";
pc += ["HP:" + this.maxHitPoints, this.statBlock.toString()].join(' ') + "\n\n";
return pc
}
}
/*
BFRpg.PlayerCharacter.random( options )
Create a random character within the constraints of options.
Permitted options: sex, race, class, level
*/
bf.PlayerCharacter.random = function (options){
var eClasses = {};
var eRaces = {};
options = typeof options !== 'undefined' ? options : {};
pc = new BFRpg.PlayerCharacter;
//dbg.info('selected sex: ' + options.sex);
//dbg.info('selected race: ' + options.race);
//dbg.info('selected class: ' + options.class);
//dbg.info('selected level: ' + options.level);
pc.sex = options.sex || ['male', 'female'][(Math.floor(Math.random() * 2))];
while(_.keys(eClasses).length == 0){
matchedPreference = false;
while(!matchedPreference) {
pc.statBlock = new bf.StatBlock();
eRaces = BFRpg.Race.eligibleRaces(pc.statBlock);
//dbg.info('eligible races:' + JSON.stringify(eRaces));
if(options.race)
matchedPreference = (_(eRaces).keys().indexOf(options.race)) >= 0
else
matchedPreference = true
}
if(options.race)
pc.race = BFRpg.Race.findByName(options.race);
else
pc.race = BFRpg.Race.selectBest(pc.statBlock);
eClasses = BFRpg.Class.eligibleClasses(pc.statBlock, pc.race);
//dbg.info('eligible classes:' + JSON.stringify(eClasses));
if(options.class && ((_(eClasses).keys().indexOf(options.class)) < 0)){ eClasses = {} }
}
if(options.class)
pc.class = BFRpg.Class.findByName(options.class);
else
pc.class = BFRpg.Class.selectBest(pc.statBlock, pc.race);
pc.name = pc.race.generateName(pc.sex);
pc.hitPoints = pc.levelUp(options.level);
return( pc );
}
bf.PlayerCharacter.prototype.levelUp = function (){
this.level++;
hitDie = this.race.maxHitDie ? Math.min(this.class.hitDie, this.race.maxHitDie) : this.class.hitDie;
hitPointUpgrade = randomInteger(hitDie);
if(this.level >= 10)
hitDiePointUpgrade += ((this.level - 9) * this.class.hitDieBonusMultiplier);
else
hitPointUpgrade += this.statBlock.modifier('constitution');
hitPointUpgrade = Math.max(1, hitPointUpgrade);
this.maxHitPoints += hitPointUpgrade;
return hitPointUpgrade;
}
bf.PlayerCharacter.prototype.fullname = function (){
return(_(this.name).values().join(' '));
}
bf.Class = function (){ /* bf.Class */
this.constructor.classes.push(this);
}
bf.Class.classes = [];
bf.Class.prototype.eligible = function (stats){
concordance = this.baseConcordance;
eligible = true;
_(this.reqs).each(function (req){
if(req.stat){
if(req.min) {
concordance += (stats[req.stat] - req.min);
if(stats[req.stat] < req.min)
eligible = false;
}
if(req.max) {
concordance += (req.max - stats[req.stat]);
if(stats[req.stat] > req.max)
eligible = false;
}
}
})
//*/
if(eligible)
return(concordance);
else
return(false);
};
bf.Class.prototype.baseConcordance = 0;
bf.Class.prototype.hitDieBonusMultipler = 1;
bf.Class.prototype.bonuses = {}
bf.Class.prototype.reqs = {};
bf.Class.prototype.strings = { name: 'undefined Class' };
bf.Class.prototype.toString = function(){ return this.strings.name }
bf.Class.prototype.xpToLevel = [];
bf.Class.prototype.spellsAtLevel = [];
bf.Class.prototype.abilities = [];
/*
BFRpg.Class.findByName( raceName )
Returns a defined BFRPG.Class by name
*/
bf.Class.findByName = function (className){
return _(this.classes).find(function (bfclass){return bfclass.strings.name == className})
}
/*
BFRpg.Class.selectBest( statBlock, race )
Return the best match class based on the statBlock, race, and concordance.
*/
bf.Class.selectBest = function ( statBlock, race ){
var eClasses;
var maxConcord;
var pClasses;
var selectedClass;
eClasses = this.eligibleClasses(statBlock, race);
maxConcord = _(eClasses).reduce( function(memo, concord){ return Math.max(memo, concord) }, 0);
pClasses = _.chain(eClasses)
.keys()
.filter( function(bfclass) { return eClasses[bfclass] == maxConcord } )
.value();
selectedClass = pClasses[Math.floor(Math.random() * pClasses.length)];
selectedClass = this.findByName( selectedClass );
return( selectedClass );
}
/*
BFRpg.Class.eligibleClasses( statBlock )
Check against each class to find if it is eligible with the given stats, and if so provide
the class concordance value.
*/
bf.Class.eligibleClasses = function ( statBlock, race ){
var classes = {};
_.each(bf.Class.classes, function (bfclass){
if((_(race.permittedClasses).indexOf(bfclass.strings.name)>-1) && (concord = bfclass.eligible(statBlock)))
classes[bfclass.strings.name] = concord;
});
return(classes);
}
bf.Class.Fighter = new bf.Class;
bf.Class.Fighter.strings = {
name: 'fighter',
shortname: 'F',
}
bf.Class.Fighter.reqs = [ {stat: 'strength', min: 9 } ];
bf.Class.Fighter.hitDie = 6;
bf.Class.Fighter.hitDieBonusMultiplier = 2;
bf.Class.MagicUser = new bf.Class;
bf.Class.MagicUser.strings = {
name: 'magic-user',
shortname: 'Mu',
}
bf.Class.MagicUser.reqs = [ {stat: 'intelligence', min: 9 } ];
bf.Class.MagicUser.hitDie = 4;
bf.Class.MagicUser.hitDieBonusMultiplier = 1;
bf.Class.MagicUser.spellsPerLevel = [
[1, 0, 0, 0, 0, 0],
[2, 0, 0, 0, 0, 0],
[2, 1, 0, 0, 0, 0],
[2, 2, 0, 0, 0, 0],
[2, 2, 1, 0, 0, 0],
[3, 2, 2, 0, 0, 0],
[3, 2, 2, 1, 0, 0],
[3, 3, 2, 2, 0, 0],
[3, 3, 2, 2, 1, 0],
[4, 3, 3, 2, 2, 0],
[4, 4, 3, 2, 2, 1],
[4, 4, 3, 3, 2, 2],
[4, 4, 4, 3, 2, 2],
[4, 4, 4, 3, 3, 2],
[5, 4, 4, 3, 3, 2],
[5, 5, 4, 3, 3, 2],
[5, 5, 4, 4, 3, 3],
[6, 5, 4, 4, 3, 3],
[6, 5, 5, 4, 3, 3],
[6, 5, 5, 4, 4, 3]
]
bf.Class.Thief = new bf.Class;
bf.Class.Thief.strings = {
name: 'thief',
shortname: 'T',
}
bf.Class.Thief.reqs = [ {stat: 'dexterity', min: 9 } ];
bf.Class.Thief.hitDie = 4;
bf.Class.Thief.hitDieBonusMultiplier = 2;
bf.Class.xpToLevel = [
0, 1250, 2500, 5000, 10000, 20000, 40000, 75000, 150000, 225000, 300000,
375000, 450000, 525000, 600000, 675000, 750000, 825000, 900000, 975000
]
bf.Class.abilities={
"openLocks": [ 25, 30, 35, 40, 45, 50, 55, 60, 65, 68, 71, 74, 77, 80, 83, 84, 85, 86, 87, 88 ],
"removeTraps": [ 20, 25, 30, 35, 40, 45, 50, 55, 60, 63, 66, 69, 72, 75, 78, 79, 80, 81, 82, 83 ],
"pickPockets": [ 30, 35, 40, 45, 50, 55, 60, 65, 70, 74, 78, 82, 86, 90, 94, 95, 96, 97, 98, 99 ],
"moveSilently": [ 25, 30, 35, 40, 45, 50, 55, 60, 65, 68, 71, 74, 77, 80, 83, 85, 87, 89, 91, 93 ],
"climbWalls": [ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 ],
"hide": [ 10, 15, 20, 25, 30, 35, 40, 45, 50, 53, 56, 59, 62, 65, 68, 69, 70, 71, 72, 73 ],
"listen": [ 30, 34, 38, 42, 46, 50, 54, 58, 62, 65, 68, 71, 74, 77, 80, 83, 86, 89, 92, 95 ]
}
bf.Class.Cleric = new bf.Class;
bf.Class.Cleric.strings = {
name: 'cleric',
shortname: 'C',
}
bf.Class.Cleric.reqs = [ {stat: 'wisdom', min: 9 } ];
bf.Class.Cleric.hitDie = 4;
bf.Class.Cleric.hitDieBonusMultiplier = 1;
bf.Class.Cleric.spellsPerLevel=[
[0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0],
[2, 0, 0, 0, 0, 0],
[2, 1, 0, 0, 0, 0],
[2, 2, 0, 0, 0, 0],
[2, 2, 1, 0, 0, 0],
[3, 2, 2, 0, 0, 0],
[3, 2, 2, 1, 0, 0],
[3, 3, 2, 2, 0, 0],
[3, 3, 2, 2, 1, 0],
[4, 3, 3, 2, 2, 0],
[4, 4, 3, 2, 2, 1],
[4, 4, 3, 3, 2, 2],
[4, 4, 4, 3, 2, 2],
[4, 4, 4, 3, 3, 2],
[5, 4, 4, 3, 3, 2],
[5, 5, 4, 3, 3, 2],
[5, 5, 4, 4, 3, 3],
[6, 5, 4, 4, 3, 3],
[6, 5, 5, 4, 3, 3]
]
bf.Class.Cleric.vsUndead = {
skeleton: [13,11,9,7,5,3,2,'T','T','T','D','D','D','D','D','D','D','D','D','D'],
zombie: [17,15,13,11,9,7,5,3,2,'T','T','T','D','D','D','D','D','D','D','D'],
ghoul: [19,18,17,15,13,11,9,7,5,3,2,'T','T','T','D','D','D','D','D','D'],
wight: ['No',20,19,18,17,15,13,11,9,7,5,3,2,'T','T','T','D','D','D','D'],
wraith: ['No','No','No',20,19,18,17,15,13,11,9,7,5,3,2,'T','T','T','D','D'],
mummy: ['No','No','No','No','No',20,19,18,17,15,13,11,9,7,5,3,2,'T','T','T'],
spectre: ['No','No','No','No','No','No','No',20,19,18,17,15,13,11,9,7,5,3,2,'T'],
vampire: ['No','No','No','No','No','No','No','No','No',20,19,18,17,15,13,11,9,7,5,3]
}
bf.Race = {}
bf.Race = function (){ /* bf.Race */
this.constructor.races.push(this);
}
bf.Race.prototype.eligible = function (stats){
concordance = this.baseConcordance;
eligible = true;
_(this.reqs).each(function (req){
if(req.stat){
if(req.min){
concordance += (stats[req.stat] - req.min);
if(stats[req.stat] < req.min)
eligible = false;
}
if(req.max){
concordance += (req.max - stats[req.stat]);
if(stats[req.stat] > req.max)
eligible = false;
}
}
})
//*/
if(eligible)
return(concordance);
else
return(false);
};
/*
BFRpg.Race.prototype.generateName( sex='male' )
Generates a random name using tables in the Race, based on provided sex
*/
bf.Race.prototype.generateName = function (sex){
sex = sex || 'male';
names = this.names;
fullname = [];
nameParts = [];
_(names.forename[sex]).each( function (nameSet) {
while((nextPart = nameSet[(Math.floor(Math.random() * nameSet.length))]) == nameParts[nameParts.length]);
nameParts.push(nextPart);
});
fullname['forename'] = nameParts.join('');
nameParts = [];
_(names.surname).each( function (nameSet) {
while((nextPart = nameSet[(Math.floor(Math.random() * nameSet.length))]) == nameParts[nameParts.length]);
nameParts.push(nextPart);
});
fullname['surname'] = nameParts.join('');
return(fullname);
}
bf.Race.prototype.baseConcordance = 0;
bf.Race.prototype.maxHitDie = undefined;
bf.Race.prototype.permittedClasses = bf.Class.classes;
bf.Race.prototype.bonuses = [];
bf.Race.prototype.reqs = {}
bf.Race.prototype.strings = { name: 'undefined Race' }
bf.Race.prototype.toString = function(){ return this.strings.name }
bf.Race.prototype.names={
forename: {
male: [
["Joe", "John", "Jack"],
],
female: [
["Mary", "Sue", "Jane"],
]
},
surname: [
['Smith', 'Doe', 'Wilson', 'Donner'],
],
}
bf.Race.races = [];
/*
BFRpg.Race.findByName( raceName )
Returns a defined BFRPG.Race by name
*/
bf.Race.findByName = function (raceName){
return _(this.races).find(function (race){return race.strings.name == raceName});
}
/*
BFRpg.Race.selectBest( statBlock )
Return the best match race based on the statBlock and racial concordance.
*/
bf.Race.selectBest = function (statBlock){
var eRaces;
var maxConcord;
var pRaces;
var selectedRace;
// find all eligible races
eRaces = this.eligibleRaces(statBlock);
// sort by concordance and eliminate all but the top matches
maxConcord = _(eRaces).reduce( function (memo, concord){ return Math.max(memo, concord) }, 0);
pRaces = _.chain(eRaces)
.keys()
.filter( function(race) { return eRaces[race] == maxConcord } )
.value();
// if more than one race is eligible with equal concordance, select one randomly
selectedRace = pRaces[Math.floor(Math.random() * pRaces.length)];
// convert that to an actual BFRpg.Race
selectedRace = this.findByName(selectedRace);
return( selectedRace );
}
/*
BFRpg.Race.eligibleRaces( statBlock )
Check against each race to find if it is eligible with the given stats, and if so provide
the racial concordance value.
*/
bf.Race.eligibleRaces = function (statBlock){
var races = {};
var concord;
_(bf.Race.races).each(function (race){
if(concord = race.eligible(statBlock))
races[race.strings.name] = concord;
})
return(races);
}
bf.Race.Dwarf = new bf.Race;
bf.Race.Dwarf.permittedClasses = [
'cleric', 'fighter', 'thief'
]
bf.Race.Dwarf.reqs = [
{
stat: 'strength',
min: '9'
},
{
stat: 'charisma',
max: '17'
},
]
bf.Race.Dwarf.bonuses = {
saveVs : {
deathRay: 4,
magicWands: 4,
paralysis: 4,
spells: 4,
dragonBreath: 3,
},
}
bf.Race.Dwarf.strings = {
name: "dwarf",
plural: "dwarves",
adjective: "dwarven",
}
bf.Race.Dwarf.names={
forename: {
male: [
["B", "L", "D", "M", "F", "N", "G", "R", "G", "S", "H", "T", "K", "V"],
["a", "o", "e", "oi", "i", "u"],
["bur","mli","fur","nar","gan","nus","gnus","rin","gnar","ran","li","sin","lin","sil","lir","sur"]
],
female: [
["Al","L","Br","M","C","Mer","Cl","N","D","R","El","S","Gw","Ys","J"],
["a","o","ae","u","e","y","ea","w","i"],
["brylla","ngwen","cla","niver","dda","noic","ll","ra","lla","rka","llyra","ryan","lonna","ssa","lyan","vyan","na"]
]
},
surname: [
['Iron', 'Copper', 'Bronze', 'Silver', 'Gold', 'Opal', 'Diamond', 'Hammer', 'Mine', 'Fire', 'Forge'],
['smith', 'hammer', 'beard', 'forge', 'brow', 'arm', 'fist', 'leg', 'nose']
],
}
bf.Race.Elf = new bf.Race;
bf.Race.Elf.permittedClasses = [
'cleric', 'figher', 'magic-user', 'thief'
]
bf.Race.Elf.maxHitDie = 6;
bf.Race.Elf.reqs = [
{
stat: 'intelligence',
min: '9'
},
{
stat: 'constitution',
max: '17'
},
]
bf.Race.Elf.bonuses = {
saveVs: {
paralysis: 1,
magicWands: 2,
spells: 2,
}
}
bf.Race.Elf.strings = {
name: "elf",
plural: "elves",
adjective: "elven",
}
bf.Race.Elf.names={
forename: {
male: [
["Abadda", "Abarat", "Adamar", "Adorellan", "Adresin", "Aduce", "Aelrindel", "Aerendyl", "Aermhar", "Aesar", "Aeson", "Afamrail", "Agis", "Aglanthol", "Ainésilver", "Aithlin", "Ajaar", "Akhelbhen", "Akkar", "Alabyran", "Albondiel", "Alinar", "Allain", "Alok", "Alosrin", "Althidon", "Amrynn", "Anarallath", "Andaerean", "Andrathath", "Anfalen", "Anlyth", "Aolis", "Aquilan", "Araevin", "Arandron", "Aravilar", "Arbane", "Ardreth", "Ardryll", "Argus", "Arkhun", "Arkiem", "Arl", "Arlen", "Arun", "Ascal", "Athtar", "Aubric", "Aubron", "Aulathar", "Aulauthar", "Aumanas", "Aumrauth", "Avourel", "Baerdelcoam", "Baerithryn", "Belanor", "Beldroth", "Bellas", "Belstram", "Beluar", "Bhyrindaar", "Biafyndar", "Bialaer", "Braern", "Brindarry", "Buttorwyr", "Cameron", "Chaalmyth", "Chathanglas", "Cheyrth", "Chozzaster", "Chylnoth", "Cluhurach", "Cluym", "Cohnal", "Conall", "Connak", "Cornaith", "Corym", "Cymbiir", "Cystenn", "Dakath", "Dalyor", "Dannyd", "Daratrine", "Darcassan", "Darfin", "Darthoridan", "Deldrach", "Delmuth", "Delsaran", "Dhoelath", "Divisav", "Drannor", "Droth", "Druindar", "Durlan", "Durothil", "Dyffros", "Earynspieir", "Edansyr", "Edicûve", "Edwyrd", "Edyrm", "Ehlark", "Ehrendil", "Eilauver", "Elaethan", "Elaith", "Elandorr", "Elanjar", "Elashor", "Elbauthin", "Elbereth", "Eldaernth", "Eldar", "Eldrin", "Elenshaer", "Elephon", "Elhieardacil", "Elidyr", "Elion", "Elkhazel", "Ellisar", "Elorfindar", "Elorshin", "Elpaerae", "Eltaor", "Eltargrim", "Elénaril", "Emmyth", "Entrydal", "Erendriel", "Erglareo", "Eriladar", "Erlan", "Erlathan", "Eroan", "Erolith", "Eschallus", "Estelar", "Ethlando", "Ettrian", "Euchoé", "Evindal", "Eyrynnhv", "Faahresc", "Faelar", "Faelyn", "Faeranduil", "Falael", "Faoraar", "Felaern", "Fenian", "Fflar", "Fhaornik", "Fhociin", "Filarion", "Filvendor", "Filverel", "Finufaranell", "Flardryn", "Flinar", "Foxfire", "Fylson", "Gaeleath", "Gaelin", "Galaeron", "Galan", "Galather", "Ganamede", "Gantar", "Garrik", "Garynnon", "Giilvas", "Giullio", "Glarald", "Glorandal", "Goronyyv", "Grathgor", "Haalaari", "Hachaam", "Haemir", "Haladavar", "Halafarin", "Halamar", "Haldreithen", "Halflar", "Halgondas", "Halpaeril", "Halueth", "Halueve", "Haryk", "Hastos", "Hatharal", "Hiflanyl", "Hoccar", "Horith", "Hubyr", "Iefyr", "Ievos", "Ihimbraskar", "Ilbryn", "Ilimitar", "Iliphar", "Ilitharath", "Illianaro", "Illithor", "Illitran", "Ilphas", "Ilrune", "Ilthuryn", "Ilyndrathyl", "Inchel", "Inialos", "Injros", "Intevar", "Iolas", "Iolrath", "Itham", "Ithraides", "Ivlisar", "Ivran", "Ivósaar", "Iymbryl", "Iyrandrar", "Iyriklaunavan", "Jandar", "Jannalor", "Jaonos", "Jassin", "Jhaan", "Jhaartael", "Jhaeros", "Jharak", "Jharym", "Jhuvik", "Jonas", "Jonik", "Jorildyn", "Josidiah", "Juppar", "Kahvoerm", "Kalaerede", "Katar", "Katyr", "Keletheryl", "Kelvhan", "Kendel", "Kerym", "Keryth", "Kesefehon", "Khaalindaan", "Kharis", "Khatar", "Khidell", "Khiiral", "Khilseith", "Khuumal", "Khyrmn", "Khyssoun", "Kindroth", "Kivessin", "Kiyuigh", "Klaern", "Kolvar", "Korrigash", "Kroloth", "Kuornos", "Kuskyn", "Kuskyn", "Kymil", "Kyrtaar", "Laeroth", "Lafarallin", "Lamruil", "Laosx", "Larongar", "Larrel", "Lashul", "Lathai", "Lathlaeril", "Leayonadas", "Leojym", "Lhombaerth", "Lhoris", "Lianthorn", "Llarm", "Llewellenar", "Llombaerth", "Lorsan", "Luirlan", "Luthais", "Luvon", "Lyari", "Lyklor", "Lysanthir", "Maasli", "Maendellyn", "Maeraddyth", "Maeral", "Maiele", "Malgath", "Mardeiym", "Marikoth", "Marlevaur", "Melandrach", "Melisander", "Merellien", "Merith", "Methild", "Mhaenal", "Mihangyl", "Miilaethorn", "Miirphys", "Mirthal", "Mirthal", "Mi’tilarro", "Mlartlar", "Mlossae", "Molonym", "Molostroi", "Montagor", "Morgan", "Morthil", "Mothrys", "Mourn", "Myrddin", "Myriil", "Myrin", "Myronthilar", "Mythanthar", "Naertho", "Naeryndam", "Naeryndam", "Napraeleon", "Narbeth", "Nardual", "Nelaeryn", "Nelaeryn", "Neldor", "Neldor", "Nesterin", "Nevarth", "Nhamashal", "Nieven", "Nindrol", "Ninthalor", "Nlossae", "Nopos", "Norlorn", "Nremyn", "Nuvian", "Nyaalsir", "Nylian", "Nym", "Nyvorlas", "Oacenth", "Oenel", "Ohmbryn", "Olaurae", "Olinsivver", "Olithir", "Onas", "Oncith", "Ondabrar", "Ondroth", "Onvyr", "Orist", "Orlpar", "Orndacil", "Ornthalas", "Ornthalas", "Ortauré", "Orym", "Oslarelar", "Otaehryn", "Otaerhyn", "Othorion", "Paeral", "Paeris", "Passilorris", "Paulorin", "Phaendar", "Pharom", "Phraan", "Pirphal", "Pleufan", "Purtham", "Pyrder", "Pyrravym", "Pywaln", "Pyxaanthal,", "Qildor", "Quastarte", "Quynn", "Raeranthur", "Raibyr", "Ralikanthae", "Ralnor", "Rathal", "Raunaeril", "Rauthomyr", "Rauvelore", "Reluraun", "Reluvethel", "Rennyn", "Reptar", "Respen", "Rhaac'var", "Rhalyf", "Rhangyl", "Rhenalyrr", "Rhespen", "Rhistel", "Rhothomir", "Rhys", "Rilitar", "Riluaneth", "Rolim", "Rotheloe", "Rothilion", "Ruardh", "Ruehar", "Ruith", "Rumathil", "Ruvaen", "Ruven", "Ruvyn", "Rychell", "Ryfon", "Ryul", "Ryvvik,", "Sadalymn", "Saelethil", "Saevel", "Saevel", "Sakrattars", "Sakrattars", "Samblar", "Sandevv", "Seanchai", "Seith", "Seiveril", "Selanlar", "Selgauth", "Shael", "Shammath", "Sharian", "Sharian", "Sharlario", "Shaundyl", "Shevarash", "Shonassir", "Shyrrik", "Siirist", "Silvyr", "Simimar", "Sinaht", "Sinaht", "Skalanis", "Skalanis", "Sontar", "Srindin", "Strohm", "Sudryl", "Sudryl", "Sundamar", "Sylvar", "Symkalr", "Sythaeryn", "Sythaeryn", "Taanyth", "Taegen", "Taeglyn", "Taenaran", "Taeral", "Taerntym", "Taleisin", "Tammson", "Tamnaeuth", "Tamnaeuth", "Tamsin", "Tanithil", "Tannivh", "Tannivh", "Tannyll", "Tanseril", "Tanyl", "Tanyl", "Taranath", "Tarathiel", "Tarathiel", "Taredd", "Tarosspur", "Tarron", "Tasar", "Tassarion", "Tathaln", "Tehlmar", "Teirist", "Tenyajn", "Tethir", "Thalanil", "Thallan", "Thatoryl", "Thiilthan", "Thurdan", "Thurruvyn", "Tiarshus", "Tlannatar", "Tolthe", "Tolthe", "Tordynnar", "Toross", "Traeliorn", "Traeliorn", "Travaran", "Triandal", "Triktappic", "Tsaer", "Tsiilmas", "Tyvollus", "T’karon", "Ualair", "Uevareth", "Uldreiyn", "Uldreiyn", "Urddusk", "Usunaar", "Uthorim", "Vaalyun", "Vaeril", "Valmaxian", "Vander", "Vartan", "Velethuil", "Venali", "Vesperr", "Vesryn", "Vesstan", "Vhoadan", "Vhoorhin", "Vhoori", "Volodar", "Voron", "Waernas", "Wistari", "Wylchyr", "Wylym", "Wyn", "Wyndelleu", "Wyqhael", "Wyrran", "Xalph", "Xanotter", "Xhalh", "Xhalth", "Xharlion", "Yalathanil", "Yeschant", "Yhendorn", "Ylyndar", "Ynloeth", "Zabbas", "Zaltarish", "Zandro", "Zaor", "Zaos", "Zelphar", "Zhoron", "Zulae"]
],
female: [
["Aelieyeeva", "Aelrue", "Aelynthi", "Aerilaya", "Ahrendaaria", "Ahrendue", "Ahskahala", "Ajhalanda", "Alaglossa", "Alais", "Alauthshaee", "Alavara", "Alea", "Alerathla", "Allannia", "Allisa", "Alloralla", "Allynna", "Almithara", "Aloevan", "Aluendalee", "Alvaerele", "Alyndra", "Amara", "Amaranthae", "Amkissra", "Amlaruil", "Amnestria", "Amra", "Anaharae", "Anarzee", "Aneirin", "Anhaern", "Anyllan", "Ara", "Araushnee", "Aravae", "Arcaena", "Arielimnda", "Arlayna", "Arnarra", "Artin", "Ashemmi", "Aubaudameira", "Auluua", "Aurae", "Ava", "Axilya", "Ayaeqlarune", "Azariah", "Bhuraelea", "Blythswana", "Bonnalurie", "Braerindra", "Caerthynna", "Calarel", "Cauladra", "Chaenath", "Chalsarda", "Chandrelle", "Chasianna", "Chichlandra", "Chin’nesstre", "Chomylla", "Cilivren", "Ciyradyl", "Claire", "Csharynn", "Daenalaia", "Daratrine", "Darshee", "Dasyra", "Dathlue", "Dathlue", "Dathlue", "Delimbiyra", "Delshandra", "Deularla", "Duilya", "Eallyrl", "Ecaeris", "Edraele", "Elanalue", "Elanil", "Elasha", "Eldratha", "Eletha", "Ellarian", "Ellifain", "Eloen", "Elora", "Elvandaruil", "Elénaril", "Embrae", "Emvorele", "Enajharas", "Eshenesra", "Essaerae", "Esta", "Ester", "Esyae", "Faranni", "Faunalyn", "Fhaertala", "Fieryat", "Filaurel", "Filauria", "Fildaerae", "Fox-at-Twilight", "Francessca", "Gaelira", "Gaerradh", "Gaylia", "Gemstarzah", "Ghilanna", "Glynnii", "Gweyr", "Gwynnestri", "Gylledha", "Haalija", "Hacathra", "Halaema", "Halaema", "Halama", "Halanaestra", "Hamalitia", "Haramara", "Helartha", "Hhora", "Holone", "Huquethae", "Hycis", "Iahalae", "Ialantha", "Ikeshia", "Ildilyntra", "Ilmadia", "Ilsevel", "Ilyrana", "Ilyrana", "Ilythyrra", "Imdalace", "Imizael", "Immianthe", "Immianthe", "Imra", "Imramarthree", "Imryll", "Innovindil", "Ioelena", "Irhaal", "Isciira", "Isilfarrel", "Ithrythra", "Itiireae", "Itylra", "Jastra", "Jeardra", "Jhaer", "Jhalass", "Jhanandra", "Jhaumrithe", "Jhiilsraa", "Kavrala", "Kaylessa", "Keerla", "Keishara", "Kethryllia", "Keya", "Khiipaera", "Kileontheal", "Kythaela", "Laamtora", "Laerdya", "Laerune", "Laurlaethee", "Lazziar", "Leilatha", "Liluth", "Llamryl", "Lorelei", "Lydi’aleera", "Lyraesel", "Maaleshiira", "Maelyrra", "Maeralya", "Maith", "Makaela", "Malruthiia", "Mariona", "Marissa", "Martainn", "Meira", "Melarue", "Merethyl", "Merialeth", "Meriel", "Merlara", "Mistale", "Mladris", "Mnuvae", "Morgwais", "Moryggan", "Muerlara", "Mylaela", "Mylaerla", "Myriani", "Naevys", "Nakiasha", "Nambra", "Namyriitha", "Nanalethalee", "Nanthee", "Nanthleene", "Naumys", "Nlaea", "Nuala", "Nueleth", "Nuovis", "Nushala", "Nylaathria", "Ochyllyss", "Oluevaera", "Phaerl", "Phantyni", "Phelorna", "Phuingara", "Phyrra", "Pollae", "Puorlaas", "Qemba", "Quamara", "Raejiisa", "Raerauntha", "Rathiain", "Renestrae", "Roanmara", "Ruavia", "Rubrae", "Ryllae", "Saelihn", "Saida", "Sakaala", "Sariandi", "Sarya", "Saélihn", "Schimae", "Seirye", "Seldanna", "Selussa", "Shadowmoon", "Shael", "Shalana", "Shalantha", "Shalendra", "Shalheira", "Shandalar", "Shanyrria", "Sharaera", "Sheedra", "Sheera", "Shialaevar", "Shialaevar", "Shi’larra", "Shoulree", "Shyael", "Shyael", "Shyllisyrr", "Sinnafain", "Soliania", "Soora", "Sorsasta", "Susklahava", "Sylmae", "Symrustar", "Syndra", "Synnorha", "Syrune", "Syviis", "Séonais", "Taenya", "Takari", "Talaedra", "Talanashta", "Talila", "Talindra", "Tamara", "Tarasynora", "Teharissa", "Teryani", "Thalaera", "Thalanil", "Thaola", "Thasitalia", "Throleatha", "Tiatha", "Tira’allara", "Tiriara", "Tisharu", "Tsarra", "Tyllaetha,", "Ulelesse", "Unae", "Urmicca", "Uschymna", "Vaervenshalice", "Valindra", "Vashti", "Velaethaunyl", "Velatha", "Veluthil", "Verrona", "Vestele", "Viansola", "Winterflower", "Xiiltharra", "Yaereene", "Yalanilue", "Yathlanae", "Yeshelné", "Yghiilra", "Ygrainne", "Ynshael", "Yrlissa", "Yrneha", "Yrthraethra", "Ysmyrlda", "Ytharra", "Yulmanda", "Zhuirentel", "Zoastria", "Z’Beryl"]
]
},
surname: [
["Aelasar", "Aelorothi", "Aendryr", "Aerasumé", "Aeravansel", "Agayous", "Agrivar", "Ahmaquissar", "Alaenree", "Alantar", "Alastrarra", "Alavara", "Alenuath", "Alerothi", "Alluth", "Aloevan", "Aluianti", "Aluviirsaan", "Amalith", "Amarallis", "Amaratharr", "Amarthen", "Ammath", "Amrallatha", "Anuaer", "Argentaamn", "Arren", "Ash", "Ashgrove", "Audark", "Auglamyr", "Auglathla", "Aunglor", "Autumnfire", "Bellas", "Berethryl", "Berilan", "Bharaclaiev", "Bhephel", "Blackhelm", "Braegen", "Briarbosk", "Brightcloak", "Brightsong", "Brightwing", "Caersaelk", "Calaudra", "Calauth", "Camusiil", "Cathdeiryn", "Ceretlan", "Chaadren", "Chamaranthe", "Clatharla", "Cormyth", "Coudoarluth", "Craulnober", "Crystalembers", "Dahast", "Dawnhorn", "Dhorinshyl", "Dlardrageth", "Doedance", "Donnathlascen", "Dracoseir", "Dree", "Duirsar", "Durothil", "Duskmere", "Duthjuth", "Ealoeth", "Echorn", "Elassidil", "Elaéyadar", "Elian", "Ellarian", "Elond", "Eluarshee", "Ereuvyn", "Erkowe", "Erladden", "Erlshade", "Eroth", "Estelda", "Evanara", "Eveningfall", "Everlove", "Evioro", "Eyriendor", "Faerondaerl", "Faerondarl", "Falanae", "Felinaun", "Fellmirr", "Fenmarel", "Fflannidan", "Floshin", "Fynnasla", "Gildenguard", "Goadulphyn", "Goldenleaf", "Gourael", "Greencloak", "Gwaelon", "Haell", "Haerlgent", "Haevaul", "Haladar", "Halavanthlarr", "Hawksong", "Hlarr", "Hyshaanth", "Iazymnal", "Ibryiil", "Ilbaereth", "Ilbenalu", "Ildacer", "Ildroun", "Iliathor", "Iliathor", "Iliathorr", "Ilnatar", "Immeril", "Ipyllasc", "Irian", "Irithyl", "Irithyl", "Ithruen", "Iydril", "Jaglene", "Kadelaryn", "Kelerandri", "Kelpor’ral", "Keove", "Kevanarial", "Korianthil", "Kraok", "Laelithar", "Laralytha", "Larenthanil", "Larethian", "Laughingwater", "Leafbower", "Leafsigil", "Le’Quella", "Lharithlyn", "Lhoril", "Lightshiver", "Llundlar", "Loceath", "M'Haaren", "Maendellyn", "Maerdrym", "Meirityn", "Melruth", "Miritar", "Mistrivvin", "Mistwinter", "Mithalvarin", "Moonbow", "Moondown", "Moonflower", "Moonglade", "Moonglamaer", "Moonsnow", "Moonweather", "Morningdove", "Mornmist", "Mrhulaedir", "Nacnar", "Naelgrath", "Narlbeth", "Narlbeth", "Neirdre", "Nelnueve", "Never", "Nhachashaal", "Nharimlur", "Nhaéslal", "Nierde", "Nightmeadow", "Nightstar", "Nightwing", "Nihmedu", "Nimesin", "Ni’Tessine", "Nlossae", "Nlossae", "Nolbrae", "Nyamtharsar", "Nyntynel", "Oakstaff", "Oakwood", "Olortynnal", "Olyrnn", "Omberdawn", "Ongluth", "Orama", "Orbryn", "Orbryn", "Ortauré", "Oumryn", "Phenthae", "Pholont", "Presrae", "Q'Naepp,", "Rachiilstar", "Raedrimn", "Raryndur", "Reithel", "Revven", "Rhaevaern", "Rhothomir", "Rhuidhen", "Rhyllgallohyr", "Rivleam", "Rivvikyn", "Runemaster", "Sarsantyr", "Selakiir", "Selmer", "Selorn", "Shadowmantle", "Shadowwater", "Shaeremae", "Shaethe", "Shalandalan", "Sharrith", "Shaurlanglar", "Shraiee", "Shyr", "Sicafei", "Siltral", "Silverbow", "Silverhand", "Silveroak", "Silverspear", "Sinaran", "Slenderbow", "Soryn", "Spellstalker", "Srinshee", "Starbrow", "Starglance", "Starglow", "Starnar", "Starym", "Stillhawk", "Stilmyst", "Straeth", "Strongbow", "Suldusk", "Sultaasar", "Summerstars", "Sunweaver", "Swordstar", "Symbaern", "Talandren", "Talesspur", "Tamlyranth", "Tanagathor", "Tarnruth", "Tarsap", "Tarsis", "Tassarion", "Taurntyrith", "Tellynnan", "Teshurr", "Thea", "Tlanbourn", "Tohrthaal", "Toralynnsyr", "Tornglara", "Tornglara", "Torthtan", "Toryvhallen", "Trueshot", "Tsornyl", "Tyrneladhelu", "Uirthur", "Ulondarr", "Ulongyr", "Vandiir", "Veverell", "Vispasial", "Vyshaan", "Waelvor", "Whitethistle", "Windstar", "Windwalker", "Xantrani", "Yeschant", "Yhendorn", "Yraueme", "Yridnae", "Yundraer"]
],
}
bf.Race.Halfling = new bf.Race;
bf.Race.Halfling.permittedClasses = [
'cleric', 'fighter', 'thief'
]
bf.Race.Halfling.maxHitDie = 6;
bf.Race.Halfling.reqs = [
{
stat: 'dexterity',
min: '9'
},
{
stat: 'strength',
max: '17'
},
]
bf.Race.Halfling.bonuses = {
toHit: 1,
initiative: 1,
saveVs : {
deathRay: 4,
magicWands: 4,
paralysis: 4,
spells: 4,
dragonBreath: 3,
},
}
bf.Race.Halfling.strings = {
name: "halfling",
plural: "halflings",
adjective: "halfling",
}
bf.Race.Halfling.names={
forename: {
male: [
["Adalgrim", "Adelard", "Andwise", "Balbo", "Bandobras", "Berilac", "Bilbo", "Bingo", "Bodo", "Bowman", "Bungo", "Deagol", "Dinodas", "Doderick", "Drogo", "Dudo", "Erling", "Everard", "Fastolph", "Fastred", "Ferdibrand", "Ferdinard", "Ferumbras", "Filibert", "Flambard", "Folco", "Fosco", "Fredegar", "Frodo", "Gerontius", "Gorbadoc", "Gorbulas", "Gorhendad", "Gormadoc", "Griffo", "Gundabald", "Halfred", "Hamfast", "Hamson", "Hending", "Hildibrand", "Hildifons", "Hildigrim", "Hobson", "Hugo", "Ilberic", "Isembold", "Isengar", "Isengrim", "Isumbras", "Largo", "Longo", "Lotho", "Madoc", "Marmadas", "Marmadoc", "Marroc", "Matta", "Meriadoc", "Merimac", "Merimas", "Milo", "Minto", "Moro", "Mosco", "Moto", "Mungo", "Odo", "Odovacar", "Olo", "Orgulas", "Otho", "Paladin", "Peregrin", "Pippin", "Polo", "Ponto", "Porto", "Posco", "Reginard", "Robin", "Rorimac", "Rudigar", "Rufus", "Sadoc", "Samwise", "Sancho", "Saradas", "Saradoc", "Seredic", "Sigismond", "Smeagol", "Togo", "Tolman", "Tomba", "Wilcome", "Wilibald", "Bebo", "Bedo", "Beffo", "Bibu", "Bidu", "Biffu", "Bebdu", "Bobdo", "Bodo", "Bodu", "Boffin", "Dedo", "Dedu", "Diffu", "Dudo", "Febo", "Febu", "Figo", "Figu", "Fiffu", "Frado", "Frago", "Fralo", "Fredo", "Frego", "Frelo", "Frido", "Frigo", "Frilo", "Frudi", "Frugo", "Frulo", "Fubo", "Fubdo", "Gebu", "Gedo", "Geffin", "Odo", "Odu", "Olo", "Olu", "Pedo", "Pidu", "Pudo", "Tedo", "Tedu", "Tibu", "Tidu", "Todo", "Togo"]
],
female: [
["Adaldrida", "Amranth", "Amaryllis", "Angelica", "Aspodel", "Belba", "Belladonna", "Berylla",
"Camellia", "Carissa", "Celandine", "Charmaine", "Cora", "Crystal", "Daisy", "Diamond",
"Donamira", "Dora", "Eglantine", "Elanor", "Esmerelda", "Euphemia", "Gilly", "Gwiston", "Hilda",
"Jillian", "Lavinia", "Lily", "Lidda", "Lobelia", "Malva", "Marigold", "May", "Melindy", "Mentha",
"Merla", "Mimosa", "Mirabella", "Myrtle", "Pansy", "Pearl", "Pedderee", "Peony", "Petrilly",
"Poppy", "Portia", "Primula", "Prisca", "Rose", "Ruby", "Seraphina", "Susannah", "Verna", "Viloet"]
]
},
surname: [
["Apple", "Barn", "Boffin", "Brace", "Brandy", "Broad", "Brocks", "Brown", "Bun", "Bunce", "Burrow", "Bush", "Butter", "Chubb", "Cotton", "Crumble", "Darns", "Digger", "Digs", "Fallo", "Farrow", "Fine", "Fleam", "Furry", "Goat", "Gold", "Good", "Green", "Grubb", "Handy", "Har", "Hay", "Heather", "Hedge", "Hemp", "Hilly", "Hole", "Horn", "Jumps", "Leather", "Light", "Long", "Mangle", "Mill", "More", "Mud", "Mug", "Neer", "Ness", "New", "Odd", "Old", "Over", "Park", "Patch", "Pick", "Prim", "Proud", "Puddi", "Red", "Root", "Rope", "Rumble", "Rush", "Sack", "Sand", "Sandy", "Shuffle", "Small", "Spinner", "Stone", "Tea", "Thistle", "Top", "Two", "Under", "Whit", "Worry"],
["back", "bar", "beam", "belly", "belt", "berry", "body", "buck", "bucket", "buff", "bur", "burrow", "by", "child", "cleve", "closet", "corn", "dore", "down", "fettle", "foot", "gather", "girdle", "hand", "heaver", "hide", "hill", "holm", "house", "leaf", "light", "lock", "mould", "petal", "pie", "pond", "ruffin", "sack", "smith", "stone", "thistle", "thorn", "toes", "ville", "ward", "well", "wise", "wool", "wort", "worthy"]
],
}
bf.Race.Human = new bf.Race;
bf.Race.Human.permittedClasses = [
'cleric', 'fighter', 'magic-user', 'thief'
]
bf.Race.Human.baseConcordance = 9;
bf.Race.Human.strings = {
name: "human",
plural: "humans",
adjective: "human",
}
bf.Race.Human.names={
forename: {
male: [
["Althalos", "Arthur", "Asher", "Barda", "Benedict", "Berinon", "Borin", "Brom",
"Bryce", "Carac", "Cassius", "Cedric", "Charles", "Clifton", "Dain", "Destrian",
"Donald", "Doran", "Edmund", "Favian", "Fendrel", "Forthwind", "Francis",
"Frederick", "Gavin", "Geoffrey", "Gregory", "Hadrian", "Henry", "Janshai",
"Jarin", "John", "Josef", "Joseph", "Leo", "Leofrick", "Letholdus", "Lief",
"Merek", "Oliver", "Peter", "Peyton", "Quinn", "Robin", "Roger", "Ronald", "Rowan",
"Rulf", "Sadon", "Simon", "Terrin", "Terrowin", "Terryn", "Thomas", "Tybalt",
"Ulric", "Walter", "William", "Xalvador", "Xavior", "Zane"]
],
female: [
["Adelaide", "Aleida", "Alexia", "Alianor", "Alice", "Alys", "Amelia", "Anastas",
"Angmar", "Anne", "Arabella", "Ariana", "Atheena", "Ayleth", "Beatrix", "Brunhild",
"Catherine", "Catrain", "Cedany", "Cristiana", "Dimia", "Duraina", "Eleanor", "Elizabeth",
"Ellyn", "Emeline", "Enndolynn", "Esme", "Farfelee", "Gloriana", "Godiva", "Guinevere",
"Gussalen", "Gwendolynn", "Helena", "Helewys", "Hildegard", "Isabel", "Isolde",
"Jacquelyn", "Janet", "Jasmine", "Josselyn", "Juliana", "Katelyn", "Katrina", "Kaylein",
"Krea", "Loreena", "Luanda", "Maerwynn", "Malkyn", "Margaret", "Maria", "Mary", "Matilda",
"Millicent", "Mirabelle", "Muriel", "Peronell", "Phrowenia", "Rainydayas", "Rose", "Ryia",
"Seraphina", "Sybbyl", "Thea", "Victoria", "Winifred", "Ysmay"]
]
},
surname: [
["Achard", "Addinell", "Adeney", "Aguilon", "Albelin", "Alevi", "Alis", "Altard", "Ansgot", "Anzeray", "Arundel", "Aschuill", "Asselin", "Auber", "Aubert", "Auffrye", "Aungier", "Auvray", "Azor", "Bachiler", "Baignard", "Bailleul", "Bainard", "Baliol", "Ballard", "Barkentin", "Basnage", "Basset", "Baudry", "Baujot", "Bauldry", "Bauquemare", "Bavent", "Beaumanoir", "Beaumarchais", "Beaumont", "Beauvallet", "Becdelièvre", "Bele", "Belet", "Bellecote", "Belmis", "Benoist", "Beringar", "Berners", "Bernières", "Bertran", "Bigot", "Blancbaston", "Blangi", "Blosbeville", "Blouet", "Bohon", "Boisivon", "Boislevesque", "Boissel", "Boivin", "Bolam", "Bolbec", "Bondeville", "Bonel", "Bonenffant", "Boneth", "Bonvalet", "Bordel", "Bosanquet", "Bosc", "Bosiet", "Bossard", "Bostel", "Boteler", "Boterel", "Botin", "Bouchard", "Bourchier", "Bourdekin", "Bourdet", "Bourneville", "Bradwardine", "Brai", "Braund", "Brebeuf", "Brereton", "Bretel", "Breteuil", "Bretteville", "Brèvedent", "Brimou", "Brinon", "Briouse", "Briqueville", "Brix", "Buci", "Budi", "Bulli", "Burci", "Burguet", "Buron", "Bursigni", "Busnois", "Busquent", "Caen", "Cailli", "Caillot", "Cairon", "Calmette", "Cambrai", "Campion", "Canaigres", "Canouville", "Caradas", "Carbonnel", "Cardon", "Cardonell", "Carnet", "Carteret", "Castillon", "Caunter", "Cavelier", "Ceauce", "Cely", "Challenge", "Chandos", "Chartres", "Chauncy", "Cheney", "Cherbourg", "Cioches", "Claville", "Clerinell", "Clinchamps", "Coliar", "Colleville", "Colombelles", "Colombieres", "Comyn", "Conteville", "Corbet", "Corbière", "Corbon", "Cormeilles", "Corneilles", "Corviser", "Cosin", "Couci", "Couer", "Courcelle", "Courcelles", "Courci", "Courcon", "Courcy", "Courseume", "Craon", "Crevecoeur", "Croc", "Cruel", "Cugey", "Cul de Louf", "Culai", "Cumin", "Curteys", "d'Ouilli", "d'Adreci", "d'Aguillon", "d'Albert", "d'Alencon", "Dalyngridge", "d'Amboise", "d'Ambray", "Damours", "d'Andeli", "d'Andre", "d'Angers", "d'Angerville", "d'Angleville", "Danneville", "d'Ansleville", "Danvers", "Darcy", "Darell", "d'Argentan", "D'Argouges", "d'Argues", "d'Armentieres", "d'Arques", "d'Athenous", "d'Aubernon", "d'Auberville", "d'Audrieu", "d'Aufai", "d'Aumale", "Daunger", "d'Aunon", "D'Auvay", "D'Auvrecher", "d'Avranches", "d'Avre", "de Bailleul", "de Balon", "de Bans", "de Bapaumes", "de Barbes", "de Beauchamp", "de Beaufou", "de Beaumais", "de Beaumont", "de Beauvais", "de Bellehache", "de Bellemare", "de Bellièvre", "de Belmeis", "De Berchelai", "de Bercheres", "de Bernai", "de Bernieres", "de Berranger", "de Berville", "de Bethencourt", "de Bienfaite", "de Biville", "de Blays", "de Blundville", "de Bouilon", "de Bourgueville", "de Breos", "de Cahaihnes", "de Calmesnil", "de Caulmont", "de Caux", "de Challon", "de Chefderue", "de Civille", "de Corbeil", "de Cormeilles", "de Coucy", "de Courseilles", "de Croismare", "de Faicterau", "De Felius", "De Fry", "de Genville", "de Gosbeck", "de Grieu", "de Hanivel", "de Hattes", "de Herle", "de Ireby", "de La Champagne", "de La Hay", "de La Mare", "de La Noue", "de La Place", "de La Porte", "de La Reue", "de La Roche", "de Lampérière", "de Lombelon", "de Lorraine", "de Malhortye", "de Maromme", "de Massard", "de Mesniel", "de Mesnildo", "de Monchy", "de Monluc", "de Montchrestien", "de Montfault", "de Montgomery", "de Moustiers", "de Moy", "de Munchesney", "de Pardieu", "de Perronet", "de Pinchemont", "de Recusson", "de Rely", "de Reymes", "de Roncherolles", "de Salynges", "de Saussay", "de Savage", "de Seguzzo", "de Servian", "de Seyssel", "de Tanie", "de Tocni", "de Toeni", "de Valles", "de Vandes", "de Vaux", "de Vesci", "de Villy", "de Viuepont", "de Vymont", "d'Ecouis", "d'Engagne", "d'Eresby", "des Moutiers", "des Vaux", "d'Escalles", "Deschamps", "Desmares", "d'Espagne", "Destain", "d'Eu", "d'Evreux", "d'Helion", "d'Hericy", "d'Houdetot", "Digby", "d'Incourt", "Ditton", "Dive Beugelin", "d'Ivri", "Dol Hugue", "d'Olgeanc", "d'Orbec", "d'Orglande", "d'Ornontville", "Douai", "Dreux", "Droullin", "Druel", "du Bec", "du Bois-Hebert", "du Bosc-Roard", "du Breuil", "Du Buisson", "Du Gouey", "du Merle", "Du Moucel", "du Perche", "Du Perron", "du Quesnai", "du Saussai", "du Theil", "du Tilleul", "Dubosc", "Dufay", "Dufour", "Duhamel", "Dumont", "d'Unepac", "Dupasquier", "Duquesne", "Durandal", "Durerie", "Durjardin", "Durville", "Duval", "Dyel", "Ecouland", "Elers", "Emory", "Engerrand", "Erquemboure", "Espec", "Esteney", "Evelyn", "Eveque", "Faceby", "Faintree", "Falaise", "Fantosme", "Faucon", "Fecamp", "Fergant", "Ferrieres", "Feu", "Fitzalan", "Fitzherbert", "Fitzhugh", "Fitzroy", "Flambard", "Folet", "Foliot", "Fonnereau", "Fontemai", "Fossard", "Fougeres", "Fourneaux", "Framan", "Fresle", "Fribois", "Froissart", "Fromentin", "Furnival", "Gael", "Gand", "Garin", "Gaveston", "Gibard", "Giffard", "Gillain", "Gilpin", "Giscard", "Glanville", "Godart", "Godefroy", "Gomboult", "Gouel", "Goulaffre", "Gournai", "Grai", "Grancourt", "Grentemesnil", "Grenteville", "Greslet", "Griffin", "Grimoult", "Grouchet", "Groulart", "Guéribout", "Guernon", "Gueron", "Guideville", "Guiffart", "Guildersleeve", "Guinand", "Gurney", "Guyot", "Hachet", "Halacre", "Hallé", "Hamage", "Harcourt", "Haute", "Hauville", "Hédiart", "Hendry", "Herbard", "Heriet", "Heuzé", "Hewse", "Hodenc", "Holland", "Hotot", "Hue", "Hugonin", "Hynde", "Ide", "Jolland", "Jubert", "la Berviere", "la Bruiere", "la Cleve", "la Foret", "la Guierche", "la Mare", "la Pommeraie", "la Riviere", "La Vache", "La Verrier", "Labbé", "Laci", "l'Adoube", "l'Aigle", "Lallement", "l'Ane", "Lanquetot", "l'Appeville", "l'Archer", "l'Aune", "Le Barge", "le Berruier", "Le Blanc", "le Blond", "le Bouguignon", "le Breton", "Le Chandelier", "Le Clerc", "Le Conte", "Le Cordier", "Le Cornu", "le Despensier", "Le Doulcet", "le Flamand", "le Gaucher", "Le Goix", "Le Grant", "Le Gras", "Le Jumel", "Le Lieur", "Le Maistre", "Le Marchant", "le Marechal", "Le Marinier", "Le Masson", "Le Paulmier", "Le Pelletier", "Le Pesant", "le Poitevin", "Le Prévost", "le Roux", "Le Roux", "Le Seigneur", "le Senechal", "Le Sueur", "Le Tellier", "le Vicomte", "Lefebre", "l'Estourmi", "Letre", "Levasseur", "Lhuillier", "Libourg", "Ligonier", "L'ile", "Linesi", "Lisieux", "Loges", "Lorz", "Loucelles", "Louet", "Louvet", "Lovet", "Lucy", "Ludel", "Lynom", "Machault", "Machel", "Maci", "Maignart", "Malet", "Mallebisse", "Malleville", "Mallilie", "Mallory", "Malvallet", "Malveisin", "Maminot", "Mandeville", "Manneilli", "Mansel", "Mantel", "Marchés", "Marchmain", "Marci", "Marescot", "Margas", "Mariage", "Marillac", "Marisco", "Martel", "Mathan", "Maubenc", "Maudit", "Mauduit", "Maunsell", "Maurouard", "Mautravers", "Maynet", "Medley", "Mercier", "Meri", "Merteberge", "Mesnage", "Meulan", "Meules", "Meverel", "Middleton", "Mobec", "Moion", "Monceaux", "Montacute", "Montaigu", "Montbrai", "Mont-Canisi", "Montfiquet", "Montfort", "Montgomery", "Montgommeri", "Moron", "Morphew", "Mortagne", "Mortain", "Mortemer", "Mortmain", "Moyaux", "Mucedent", "Munneville", "Murdac", "Musard", "Musart", "Mussegros", "Mustel", "Nelond", "Neot", "Nesdin", "Neufmarche", "Neuville", "Noyers", "Omand", "Orlebar", "Ormond", "Osmond", "Osmont", "Ouistreham", "Painel", "Paixdecouer", "Pancevolt", "Pantoul", "Papelion", "Papon", "Paris", "Parry", "Parthenai", "Paschal", "Pasquier", "Pastforeire", "Patris", "Paumera", "Peccoth", "Peche", "Peis", "Pennant", "Perci", "Péricard", "Perroy", "Petremol", "Peveril", "Pevrel", "Picard", "Picot", "Picvini", "Pierrepont", "Pinel", "Pipin", "Pippery", "Piquiri", "Pistres", "Pithou", "Plucknet", "Poer", "Poignant", "Poillei", "Pointel", "Pont", "Pont de l'Arche", "Pontchardon", "Port", "Postel", "Poussin", "Prestcote", "Puchot", "Quesnel", "Quièvremont", "Quincarnon", "Raimbeaucourt", "Rainecourt", "Raleigh", "Rames", "Raoullin", "Rassent", "Ravenot", "Rennes", "Renold", "Restault", "Reviers", "Riebou", "Rivière", "Roard", "Rocque", "Roger", "Romé", "Romenel", "Ros", "Rosai", "Rou", "Roussel", "Runeville", "Sacquerville", "Saint-Clair", "Sainte-d'Aignaux", "Saint-Germain", "Saint-Helene", "Saint-Leger", "Saint-Ouen", "Saint-Quentin", "Saint-Sanson", "Saint-Valeri", "Saint-Waleri", "Saisset", "Sauvigni", "Scolland", "Séguier", "Senarpont", "Senlis", "Sept-Meules", "Simnel", "Sollers", "Somneri", "Sourdeval", "Strivelyn", "Stukely", "Tabraham", "Taillebois", "Taillepied", "Talvace", "Tessel", "Thaon", "Theroulde", "Thibault", "Thiboust", "Thorel", "Tibon", "Tilly", "Tinel", "Tirel", "Toclive", "Torteval", "Touchet", "Tourlaville", "Tourmente", "Tournai", "Tournebulle", "Tournebut", "Tourneville", "Toustain", "Tranchant", "Trelli", "Tulles", "Urry", "Valance", "Valognes", "Vastel", "Vatteville", "Vaubadon", "Vauville", "Vaux", "Vavassour", "Veci", "Venois", "Ventris", "Ver", "Verdun", "Vernold", "Vernon", "Verrall", "Vesci", "Vesli", "Veteripont", "Vieuxpont", "Villehardain", "Villon", "Vipont", "Vis-de-Louf", "Vis-de-Loup", "Vitalis", "Vivers", "Viville", "Voisin", "Wadard", "Warci", "Watteau", "Werables", "Willoughby", "Wissant", "Ygou"]
],
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment