ikrpg.github.io/_posts/0000-01-01-Character-Generator.html

1091 lines
No EOL
42 KiB
HTML

---
layout: ikrpg
tags: [Character Generator]
---
<style>
div.data label { display: block; }
.character-generator-table tbody td:nth-of-type(2) { text-align: left; }
</style>
<h2>Race</h2>
<p>
<select id="race">
<option value="empty"></option>
</select>
</p>
<table class="hero character-generator-table">
<thead>
<tr>
<th>Attribute</th>
<th>Value</th>
</tr>
</thead>
<tbody id="race-data" class="character-generator-data">
</tbody>
</table>
<h2>Caste</h2>
<p>
<select id="caste">
<option value="empty"></option>
</select>
</p>
<table class="veteran character-generator-table">
<thead>
<tr>
<th>Attribute</th>
<th>Value</th>
</tr>
</thead>
<tbody id="caste-data" class="character-generator-data">
</tbody>
</table>
<h2>Archetype</h2>
<p>
<select id="archetype">
<option value="empty"></option>
</select>
</p>
<table class="epic character-generator-table">
<thead>
<tr>
<th>Attribute</th>
<th>Value</th>
</tr>
</thead>
<tbody id="archetype-data" class="character-generator-data">
</tbody>
</table>
<h2>Career 1</h2>
<p>
<select id="career1">
<option value="empty"></option>
</select>
</p>
<table class="hero character-generator-table">
<thead>
<tr>
<th>Attribute</th>
<th>Value</th>
</tr>
</thead>
<tbody id="career1-data" class="character-generator-data">
</tbody>
</table>
<h2>Career 2</h2>
<p>
<select id="career2">
<option value="empty"></option>
</select>
</p>
<table class="veteran character-generator-table">
<thead>
<tr>
<th>Attribute</th>
<th>Value</th>
</tr>
</thead>
<tbody id="career2-data" class="character-generator-data">
</tbody>
</table>
<h2>Adventuring Company</h2>
<p>
<select id="adventuring-company">
<option value="empty"></option>
</select>
</p>
<table class="epic character-generator-table">
<thead>
<tr>
<th>Attribute</th>
<th>Value</th>
</tr>
</thead>
<tbody id="adventuring-company-data" class="character-generator-data">
</tbody>
</table>
<div><a href="javascript:test()">test</a></div>
<script type="text/javascript">
function HeroNumber(key, value) {
this.key = key;
this.value = value;
this.html = function() {
var str = '';
str += '<tr>\n';
str += ' <td>'+this.key+'</td>\n';
str += ' <td><input class="'+this.key+'" type="number" data-type="number" min="'+this.value+'" max="'+this.value+'" value="'+this.value+'" disabled /></td>\n';
str += '</tr>\n';
return str;
};
}
function number(key, value) {
return new HeroNumber(key, value);
}
function HeroRange(key, min, max) {
this.key = key;
this.min = min;
this.max = max;
this.html = function() {
var str = '';
str += '<tr>\n';
str += ' <td>'+this.key+'</td>\n';
str += ' <td><input class="'+this.key+'" type="number" data-type="number" min="'+this.min+'" max="'+this.max+'" value="'+this.min+'" /></td>\n';
str += '</tr>\n';
return str;
};
}
function range(key, min, max) {
return new HeroRange(key, min, max);
}
function HeroString(key, value) {
this.key = key;
this.value = value;
this.html = function() {
var str = '';
str += '<tr>\n';
str += ' <td>'+this.key+'</td>\n';
str += ' <td><input class="'+this.key+'" type="text" data-type="text" value="'+this.value+'" disabled /></td>\n';
str += '</tr>\n';
return str;
};
}
function string(key, value) {
return new HeroString(key, value);
}
function HeroListItem(key, value) {
this.key = key;
this.value = value;
this.html = function() {
var str = '';
str += '<tr>\n';
str += ' <td>'+this.key+'</td>\n';
str += ' <td><input class="'+this.key+'" type="text" data-type="array" value="'+this.value+'" disabled /></td>\n';
str += '</tr>\n';
return str;
}
}
function listItem(key, value) {
return new HeroListItem(key, value);
}
function HeroList(key, listItems) {
this.key = key;
this.listItems = listItems;
this.html = function() {
var htmls = $.map(this.listItems, function(item) { return listItem(key, item).html(); });
return mkString(htmls, "\n");
}
}
function list(key, listItems) {
return new HeroList(key, listItems);
}
function HeroNumberPair(key, value) {
this.key = key;
this.value = value;
this.html = function() {
return '<option class="'+this.key+'" data-type="number" value="'+this.value+'">'+this.key+': '+this.value+'</option>\n';
};
}
function numberPair(key, value) {
return new HeroNumberPair(key, value);
}
function numberPairs(key, values) {
return $.map(values, function(value) { return numberPair(key, value); });
}
function HeroArrayPair(key, value) {
this.key = key;
this.value = value;
this.html = function() {
return '<option class="'+this.key+'" data-type="array" value="'+this.value+'">'+this.key+': '+this.value+'</option>\n';
};
}
function arrayPair(key, value) {
return new HeroArrayPair(key, value);
}
function arrayPairs(key, values) {
return $.map(values, function(value) { return arrayPair(key, value); });
}
function HeroChoices(pairs, label) {
this.pairs = pairs;
this.html = function() {
var str = '';
str += '<tr>\n';
if(label) str += ' <td><label>'+label+':</label></td>\n';
str += ' <td><select multiple>\n';
str += mkString($.map(pairs, function(pair) { return pair.html(); }), "\n ", "", "\n");
str += ' </select></td>\n';
str += '</tr>\n';
return str;
};
}
function choices(pairs, label) {
return new HeroChoices(pairs, label);
}
</script>
<script type="text/javascript">
// TODO: All languages
var languages = ["Cygnaran", "Khadoran", "Ordic"];
var races = {
"Blighted Ogrun": [],
"Bog Trog": [],
"Dwarf": [
string("race", "Dwarf"),
number("PHY", 6),
number("SPD", 4),
number("STR", 5),
number("AGL", 3),
number("PRW", 4),
number("POI", 3),
number("INT", 4),
number("PER", 3),
listItem("languages", "Rhulic"),
choices(arrayPairs("languages", languages), "Choose 1"),
range("height", 47, 60),
range("weight", 105, 190),
listItem("abilities", "Load Bearing"),
listItem("connections", "Connection (dwarven clan)")
],
"Efaarit": [],
"Farrow": [],
"Gatorman": [],
"Gobber": [
string("race", "Gobber"),
number("PHY", 4),
number("SPD", 6),
number("STR", 3),
number("AGL", 4),
number("PRW", 4),
number("POI", 3),
number("INT", 3),
number("PER", 3),
listItem("languages", "Gobberish"),
choices(arrayPairs("languages", languages), "Choose 1"),
range("height", 32, 42),
range("weight", 38, 60),
listItem("benefits", "Deft"),
number("DEF racial modifier", 1),
listItem("notes", "Gobbers cannot use great weapons or rifles")
],
"Human (FMF)": [
string("race", "Human"),
number("PHY", 5),
number("SPD", 6),
number("STR", 4),
number("AGL", 3),
number("PRW", 4),
number("POI", 4),
number("INT", 3),
number("PER", 3),
choices(arrayPairs("languages", languages), "Choose 2"),
range("height", 55, 75),
range("weight", 90, 200),
choices([ numberPair("PHY", 1), numberPair("AGL", 1), numberPair("INT", 1) ], "Choose 1")
],
"Human (IKU)": [],
"Iosan": [
string("race", "Iosan"),
number("PHY", 5),
number("SPD", 6),
number("STR", 4),
number("AGL", 3),
number("PRW", 4),
number("POI", 4),
number("INT", 4),
number("PER", 3),
listItem("languages", "Shyr"),
choices(arrayPairs("languages", languages), "Choose 1"),
range("height", 60, 75),
range("weight", 85, 180),
listItem("notes", "begins the game with an additional ability selected from on of the careers")
],
"Nyss (FMF)": [
string("race", "Nyss"),
number("PHY", 5),
number("SPD", 6),
number("STR", 4),
number("AGL", 4),
number("PRW", 4),
number("POI", 4),
number("INT", 3),
number("PER", 3),
listItem("languages", "Aeric"),
choices(arrayPairs("languages", languages), "Choose 1"),
range("height", 62, 77),
range("weight", 95, 195),
list("notes", ["Cannot be an Arcane Mechanik, Arcanist, Gun Mage, or Warcaster",
"Nyss bows/claymores are cheaper at charater creation",
"Gains +1 on Initiative and PER rolls",
"Gains +3 ARM against cold damage",
"Gains -3 ARM against fire damage"])
],
"Nyss (IKU)": [],
"Ogrun": [
string("race", "Ogrun"),
number("PHY", 6),
number("SPD", 5),
number("STR", 6),
number("AGL", 3),
number("PRW", 4),
number("POI", 3),
number("INT", 3),
number("PER", 2),
list("languages", ["Molgur-Og", "Rhulic"]),
choices(arrayPairs("languages", languages), "Choose 1"),
range("height", 82, 105),
range("weight", 330, 500),
listItem("notes", "Can wield two-handed weapons in one hand but suffers -2 on attack rolls")
],
"Pygmy Troll": [],
"Satyxis": [],
"Skorne": [],
"Strider": [],
"Tharn": [],
"Trollkin (FMF)": [
string("race", "Trollkin"),
number("PHY", 6),
number("SPD", 5),
number("STR", 5),
number("AGL", 3),
number("PRW", 4),
number("POI", 2),
number("INT", 3),
number("PER", 3),
listItem("languages", "Molgur-Trul"),
choices(arrayPairs("languages", languages), "Choose 1"),
range("height", 63, 84),
range("weight", 150, 330),
listItem("notes", "Trollkin cannot be Arcane Mechaniks, Arcanists, or Warcasters"),
list("benefits", ["Tough", "Feat: Revitalize"])
],
"Trollkin (IKU)": []
};
var castes = {
"Extoller": [],
"Outcast": [],
"Paingiver": [],
"Slave": [],
"Warrior": [],
"Worker": []
}
var archetypes = {
"Cunning": [],
"Gifted (FMF)": [
string("archetype", "Gifted"),
choices(numberPairs("ARC", [2, 3]), "Focusers start with ARC 2,<br />Will Weavers with ARC 3"),
choices(arrayPairs("benefits", ["Additional Study", "Combat Caster", "Fast Caster", "Feat: Domninator", "Feat: Powerful Caster", "Feat: Quick Cast", "Feat: Strength of Will", "Magic Sensitivity", "Rune Reader", "Warding Circle"]), "Choose 1")
],
"Gifted (IKU)": [],
"Intellectual": [
string("archetype", "Intellectual"),
choices(arrayPairs("benefits", ["Battlefield Coordination", "Feat: Flawless Timing", "Feat: Prescient", "Feat: Perfect Plot", "Feat: Plan of Action", "Feat: Quick Thinking", "Feat: Unconventional Warfare", "Genius", "Hyper Perception", "Photographic Memory"]), "Choose 1"),
listItem("notes", "friendly models gain +1 on attack and damage rolls if within command range")
],
"Mighty (FMF)": [
string("archetype", "Mighty"),
choices(arrayPairs("benefits", ["Beat Back", "Feat: Back Swing", "Feat: Bounding Leap", "Feat: Counter Charge", "Feat: Invulnerable", "Feat: Revitalize", "Feat: Shield Breaker", "Feat: Vendetta", "Righteous Anger", "Tough"]), "Choose 1"),
listItem("notes", "gains an additional die on melee damage rolls")
],
"Mighty (IKU)": [],
"Skilled (FMF)": [
string("archetype", "Skilled"),
choices(arrayPairs("benefits", ["Ambidextrous", "Cagey", "Deft", "Feat: Defensive Strike", "Feat: Disarm", "Feat: Swashbuckler", "Feat: Untouchable", "Preternatural Awareness", "Sidestep", "Virtuoso"]), "Choose 1"),
listItem("notes", "gains an additional attack")
],
"Skilled (IKU)": []
};
var careers = {
"Alchemist": [
listItem("careers", "Alchemist"),
list("abilities", ["Grenadier", "Poison Resistance"]),
list("military skills", ["Hand Weapon", "Thrown Weapon"]),
list("occupational skills", ["Alchemy", "Medicine"]),
number("gold", 50),
list("gear", ["alchemist's leather", "gas mask", "travelling alchemist's kit", "grenadier's bandolier"]),
list("gear", ["any alchemical grenate", "any alchemical grenate", "any alchemical grenate", "any alchemical grenate", "any alchemical grenate"])
],
"Allegiant": [],
"Arcane Mechanik": [
listItem("careers", "Arcane Mechanik"),
listItem("abilities", "Inscribe Formulae"),
choices(arrayPairs("military skills", ["Hand Weapon", "Rifle"]), "Choose 1"),
list("occupational skills", ["Craft (gunsmithing)", "Craft (metalworking)", "Mechanikal Engineering"]),
list("spells", ["Arcantrik Bolt", "Polarity Shield"]),
number("gold", 50),
listItem("gear", "rune etching kit"),
choices(arrayPairs("gear", ["mechanika weapon", "mechanika suit of armor"]), "Choose 1")
],
"Arcane Tempest Gun Mage": [],
"Arcanist": [
listItem("careers", "Arcanist"),
listItem("abilities", "Great Power"),
list("occupational skills", ["Lore (Arcane)", "Research"]),
list("spells", ["Arcane Bolt", "Aura of Protection", "Light in the Darkness"]),
listItem("benefits", "Rune Reader"),
number("gold", 75)
],
"Archer": [],
"Aristocrat": [
listItem("careers", "Aristocrat"),
list("abilities", ["Good Breeding", "Privilege"]),
choices(arrayPairs("abilities", languages), "Choose 1"),
listItem("connections", "Connections (nobility)"),
listItem("military skills", "Hand Weapon"),
choices(arrayPairs("military skills", ["Archery", "Pistol", "Rifle"]), "Choose 1"),
list("occupational skills", ["Command", "Etiquette"]),
listItem("notes", "50gc each month from familiy holdings"),
number("gold", 200)
],
"Artillerist": [],
"Ascetic": [],
"Assault Kommando": [],
"Beast Handler": [],
"Blackclad": [],
"Bloodrunner": [],
"Bloodtracker": [],
"Bloodweaver": [],
"Bokor": [],
"Bone Grinder": [],
"Bounty Hunter": [
listItem("careers", "Bounty Hunter"),
list("abilities", ["Binding", "Take Down"]),
choices(arrayPairs("military skills", ["Crossbow", "Hand Weapon", "Pistol", "Rifle", "Unarmed Combat"]), "Choose 2"),
list("occupational skills", ["Detection", "Intimidation", "Rope Use", "Tracking"]),
number("gold", 75)
],
"Brigand": [],
"Bushwhacker": [],
"Cataphract": [],
"Chieftain": [],
"Chirurgeon": [],
"Chymist": [],
"Crucible Guard": [],
"Cutthroat": [
listItem("careers", "Cutthroat"),
list("abilities", ["Anatomical Precision", "Backstab", "Prowl"]),
listItem("military skills", "Hand Weapon"),
choices(arrayPairs("military skills", ["Crossbow", "Thrown Weapon", "Unarmed Combat"]), "Choose 1"),
list("occupational skills", ["Intimidation", "Sneak", "Streetwise"]),
number("gold", 75)
],
"Cygnaran Warcaster": [],
"Deathstalker": [],
"Doom Reaver": [],
"Duelist": [
listItem("careers", "Duelist"),
list("abilities", ["Parry", "Riposte"]),
list("military skills", ["Hand Weapon", "Pistol"]),
list("occupational skills", ["Gambling", "Intimidation", "Jumping"]),
number("gold", 75)
],
"Exemplar": [],
"Exemplar Errant": [],
"Exemplar Vengar": [],
"Explorer": [
listItem("careers", "Explorer"),
list("abilities", ["Big Game Hunter", "Port of Call"]),
choices(arrayPairs("languages", languages), "Choose 1"),
listItem("connections", "Connections (patron)"),
choices(arrayPairs("military skills", ["Archery", "Hand Weapon", "Pistol", "Rifle"]), "Choose 1"),
list("occupational skills", ["Detection", "Medicine", "Navigation", "Survival"]),
listItem("notes", "20gc each month from a patron"),
number("gold", 150),
list("gear", ["map case", "spyglass"])
],
"Extoller": [],
"Fell Caller": [
listItem("careers", "Fell Caller"),
list("abilities", ["Fell Call: Signal Call", "Fell Call: Sonic Blast"]),
choices(arrayPairs("military skills", ["Hand Weapon", "Great Weapon"]), "Choose 1"),
list("occupational skills", ["Command", "Fell Calling", "Fell Calling", "Lore (Trollkin)", "Oratory"]),
number("gold", 75)
],
"Fennblade": [],
"Ferox Rider": [],
"Field Mechanik": [
listItem("careers", "Field Mechanik"),
list("abilities", ["'Jack Marshal", "Bodge", "Hit the Deck!"]),
choices(arrayPairs("military skills", ["Hand Weapon", "Pistol"]), "Choose 1"),
list("occupational skills", ["Command", "Craft (metalworking)", "Mechanikal Engineering"]),
number("gold", 25),
list("gear", ["mechanik's tool kit", "light laborjack with up to 200gc of weapons"])
],
"Flame Bringers": [],
"Greylord": [],
"Greylord Outrider": [],
"Gun Mage": [
listItem("careers", "Gun Mage"),
list("abilities", ["Craft Rune Shot", "Fast Reload"]),
choices(arrayPairs("military skills", ["Pistol", "Rifle"]), "Choose 1"),
list("occupational skills", ["Detection", "Intimidation"]),
list("spells", ["Rune Shot: Accuracy", "Rune Shot: Brutal", "Rune Shot: Thunderbolt"]),
number("gold", 25),
list("gear", ["ammo bandolier", "rune shot casting kit", "powder and ten rounds of ammunition"]),
choices(arrayPairs("gear", ["magelock pistol", "magelock rifle"]), "Choose 1")
],
"Gun Mage of the Amethyst Rose": [],
"Guttersnipe": [],
"Highwayman": [
listItem("careers", "Highwayman"),
list("abilities", ["Ambush", "Saddle Shot"]),
listItem("military skills", "Hand Weapon"),
choices(arrayPairs("military skills", ["Archery", "Crossbow", "Pistol"]), "Choose 1"),
list("occupational skills", ["Animal Handling", "Detection", "Intimidation", "Riding"]),
number("gold", 75),
list("gear", ["mask", "riding horse", "tack"])
],
"Horseman": [],
"Illuminated Arcanist": [],
"Investigator": [
listItem("careers", "Investigator"),
listItem("abilities", "Astute"),
choices(arrayPairs("languages", languages), "Choose 1"),
choices(arrayPairs("military skills", ["Hand Weapon", "Pistol"]), "Choose 1"),
list("occupational skills", ["Detection", "Forensic Science", "Interrogation", "Law", "Medicine", "Sneak"]),
listItem("benefits", "Hyper Perception"),
number("gold", 100)
],
"Iron Fang": [
listItem("careers", "Iron Fang"),
listItem("notes", "Must choose between Aristocrat, Military Officer, Soldier, or Warcaster as second career"),
list("abilities", ["Fast Rearm (Blasting Pike)", "Specialization (Blasting Pike)"]),
listItem("connections", "Connections (Khadoran military)"),
list("military skills", ["Great Weapon", "Shield"]),
list("occupational skills", ["Command", "Survival"]),
number("gold", 25),
list("gear", ["blasting pike with spear head", "ten blasting heads", "Iron Fang full plate", "shield"])
],
"Iron Fang Uhlan": [],
"Ironhead": [],
"Khadoran Warcaster": [],
"Knight": [
listItem("careers", "Knight"),
list("abilities", ["Cleave", "Defender"]),
listItem("connections", "Connections (knightly order)"),
list("military skills", ["Great Weapon", "Hand Weapon", "Shield"]),
list("occupational skills", ["Command", "Etiquette", "Lore (knightly order)"]),
number("gold", 100)
],
"Kriel Champion": [],
"Labor Korune": [],
"Llaelese Warcaster": [],
"Long Rider": [],
"Mage Hunter": [
listItem("careers", "Mage Hunter"),
list("abilities", ["Arcane Assassin", "Iron Will"]),
listItem("connections", "Connections (Retribution of Scyrah)"),
listItem("military skills", "Hand Weapon"),
choices(arrayPairs("military skills", ["Archery", "Crossbow"]), "Choose 1"),
list("occupational skills", ["Climbing", "Jumping", "Sneak", "Tracking"]),
number("gold", 75)
],
"Man-at-Arms": [
listItem("careers", "Man-at-Arms"),
list("abilities", ["Defensive Line", "Shield Guard"]),
list("military skills", ["Great Weapon", "Shield"]),
choices(arrayPairs("military skills", ["Hand Weapon", "Pistol"]), "Choose 1"),
list("occupational skills", ["Command", "Detection"]),
number("gold", 100)
],
"Man-O-War": [],
"Man-O-War Drakhun": [],
"Marine": [],
"Maritime Order of the Trident Arcanist": [],
"Military Officer": [
listItem("careers", "Military Officer"),
list("abilities", ["Battle Plan: Call to Action", "Natural Leader", "Team Leader"]),
listItem("military skills", "Hand Weapon"),
choices(arrayPairs("military skills", ["Great Weapon", "Pistol"]), "Choose 1"),
list("occupational skills", ["Command", "Medicine", "Navigation"]),
number("gold", 100),
listItem("gear", "officer's uniform")
],
"Mist Speaker": [],
"Monster Hunter": [],
"Mortitheurge": [],
"Nihilator": [],
"Nomad": [],
"Ordic Warcaster": [],
"Paladin": [],
"Pirate": [
listItem("careers", "Pirate"),
list("abilities", ["Gang", "Steady", "Specialization (Cutlass)"]),
listItem("military skills", "Hand Weapon"),
choices(arrayPairs("military skills", ["Pistol", "Thrown Weapon"]), "Choose 1"),
list("occupational skills", ["Climbing", "Intimidation", "Sailing", "Swimming"]),
number("gold", 75)
],
"Pistoleer": [
listItem("careers", "Pistoleer"),
list("abilities", ["Fast Draw", "Gunfighter", "Return Fire"]),
listItem("military skills", "Pistol"),
list("occupational skills", ["Detection", "Intimidation", "Sneak"]),
number("gold", 50),
listItem("gear", "ammo bandolier"),
choices(arrayPairs("gear", ["hand cannon", "2 repeating pistols"]), "Choose 1"),
choices(arrayPairs("gear", ["ammunition for ten shots", "2 ammo wheels with ammunition for ten shots"]), "Choose 1")
],
"Praetorian": [],
"Priest of Cyriss": [],
"Priest of Menoth": [
listItem("careers", "Priest of Menoth"),
listItem("abilities", "Dispel"),
listItem("connections", "Connections (Menite temple)"),
choices(arrayPairs("military skills", ["Great Weapon", "Hand Weapon"]), "Choose 1"),
list("occupational skills", ["Lore (Menite faith)", "Oratory"]),
list("spells", ["Guided Blade", "Ignite", "Immolation"]),
number("gold", 75)
],
"Priest of Morrow": [
listItem("careers", "Priest of Morrow"),
listItem("abilities", "Empower"),
listItem("connections", "Connections (Morrowan temple)"),
choices(arrayPairs("military skills", ["Great Weapon", "Hand Weapon"]), "Choose 1"),
list("occupational skills", ["Lore (Morrowan faith)", "Medicine"]),
list("spells", ["Blade of Radiance", "Solovin's Boon", "True Sight"]),
number("gold", 75)
],
"Priest of Nyssor": [],
"Protectorate Warcaster": [],
"Pugilist": [],
"Raider": [],
"Ranger": [
listItem("careers", "Ranger"),
list("abilities", ["Camouflage", "Pathfinder"]),
listItem("military skills", "Hand Weapon"),
choices(arrayPairs("military skills", ["Archery", "Crossbow", "Pistol", "Rifle"]), "Choose 1"),
list("occupational skills", ["Detection", "Sneak", "Survival", "Tracking"]),
number("gold", 75)
],
"Raptor": [],
"Ravager": [],
"Reclaimer": [],
"Rhulic 'Jack Marshal": [],
"Rhulic Field Mechanik": [],
"Rhulic Warcaster": [],
"Rifleman": [
listItem("careers", "Rifleman"),
list("abilities", ["Crackshot", "Dual Shot", "Marksman"]),
listItem("military skills", "Rifle"),
list("occupational skills", ["Climbing", "Detection", "Survival"]),
number("gold", 50),
list("gear", ["ammo bandolier", "powder and ammunition for ten shots"]),
choices(arrayPairs("gear", ["heavy rifle", "repeating long rifle"]))
],
"Ryssovass": [],
"Scout": [],
"Scrutator": [],
"Searforge Trader": [],
"Seeker": [],
"Shaman (Devourer Wurm)": [],
"Shaman (Dhunia)": [],
"Slaughterhouser": [],
"Soldier": [
listItem("careers", "Soldier"),
list("abilities", ["Find Cover", "Sentry"]),
choices(arrayPairs("military skills", ["Hand Weapon", "Pistol", "Crossbow", "Great Weapon", "Rifle", "Thrown Weapon"]), "Choose 2"),
list("occupational skills", ["Detection", "Driving", "Medicine", "Survival"]),
number("gold", 100)
],
"Sorcerer (Fire) (FMF)": [
listItem("careers", "Sorcerer (Fire)"),
listItem("abilities", "Immunity: Fire"),
choices(arrayPairs("military skills", ["Archery", "Crossbow", "Hand Weapon"]), "Choose 1"),
list("occupational skills", ["Detection", "Survival"]),
list("spells", ["Fire Starter", "Howling Flames", "Wall of Fire"]),
number("gold", 75)
],
"Sorcerer (Fire) (IKU)": [],
"Sorcerer (Ice) (FMF)": [
listItem("careers", "Sorcerer (Ice)"),
listItem("abilities", "Immunity: Cold"),
choices(arrayPairs("military skills", ["Archery", "Crossbow", "Hand Weapon"]), "Choose 1"),
list("occupational skills", ["Detection", "Survival"]),
list("spells", ["Blizzard", "Chiller", "Ice Bolt"]),
number("gold", 75)
],
"Sorcerer (Ice) (IKU)": [],
"Sorcerer (Stone) (FMF)": [
listItem("careers", "Sorcerer (Stone)"),
number("PHY", 1),
choices(arrayPairs("military skills", ["Archery", "Crossbow", "Hand Weapon"]), "Choose 1"),
list("occupational skills", ["Detection", "Survival"]),
list("spells", ["Battering Ram", "Solid Ground", "Stone Stance"]),
number("gold", 75)
],
"Sorcerer (Stone) (IKU)": [],
"Sorcerer (Storm) (FMF)": [
listItem("careers", "Sorcerer (Storm)"),
number("SPD", 1),
choices(arrayPairs("military skills", ["Archery", "Crossbow", "Hand Weapon"]), "Choose 1"),
list("occupational skills", ["Detection", "Survival"]),
list("spells", ["Razor Wind", "Storm Tossed", "Wind Blast"]),
number("gold", 75)
],
"Sorcerer (Storm) (IKU)": [],
"Spy": [
listItem("careers", "Spy"),
list("abilities", ["Battle Plan: Shadow", "Cover Identity"]),
choices(arrayPairs("languages", languages), "Choose 1"),
listItem("connections", "Connections (intelligence network)"),
choices(arrayPairs("military skills", ["Hand Weapon", "Pistol", "Thrown Weapon"]), "Choose 1"),
list("occupational skills", ["Command", "Deception", "Detection", "Disguise", "Sneak"]),
number("gold", 100),
listItem("gear", "forged identity papers")
],
"Storm Lance": [],
"Stormblade": [
listItem("careers", "Stormblade"),
listItem("notes", "Must choose between Aristocrat, Knight, Man-at-Arms, Military Officer, Soldier, or Warcaster for second career"),
list("abilities", ["Blaster", "Specialization (Storm Glaive)"]),
listItem("connections", "Connections (Cygnaran military)"),
listItem("military skills", "Great Weapon"),
list("occupational skills", ["Command", "Detection", "Etiquette"]),
list("gear", ["Storm Glaive", "Storm Knight armor"])
],
"Stormguard": [],
"Stormsmith": [],
"Tempest Blazer": [],
"Thamarite Advocate": [],
"Thief": [
listItem("careers", "Thief"),
list("abilities", ["Conniver", "Dodge"]),
choices(arrayPairs("military skills", ["Hand Weapon", "Thrown Weapon"]), "Choose 1"),
list("occupational skills", ["Bribery", "Deception", "Escape Artist", "Lock Picking", "Lock Picking", "Pickpocket", "Pickpocket", "Sneak", "Streetwise"]),
number("gold", 75),
listItem("gear", "thief's tools")
],
"Tormentor": [],
"Trencher": [
listItem("careers", "Trencher"),
listItem("notes", "Must choose between Military Officer, Ranger, Rifleman, Soldier, or Warcaster for second career"),
list("abilities", ["Bayonet Charge", "Dig In"]),
listItem("connections", "Connections (Cygnaran military)"),
list("military skills", ["Great Weapon", "Rifle", "Thrown Weapon"]),
list("occupational skills", ["Command", "Detection"]),
number("gold", 25),
list("gear", ["ammo bandolier", "bayonet", "entrenching spade", "military rifle", "smoke grenate", "smoke grenate", "smoke grenate", "Trencher medium infantry armor"])
],
"Trencher Commando": [],
"Tyrant": [],
"Urban Nomad": [],
"Vassal of Menoth": [],
"Venator": [],
"Warcaster": [
listItem("careers", "Warcaster"),
listItem("abilities", "Bond"),
list("military skills", ["Hand Weapon", "Pistol"]),
list("occupational skills", ["Command", "Detection"]),
list("spells", ["Boundless Charge", "Convection"]),
choices(arrayPairs("gear", ["light suit of warcaster armor", "medium suit of warcaster armor", "mechanika hand weapon", "mechanika hand cannon (with 10 rounds of ammunition)"]), "Choose 1")
],
"Warcaster, Cyriss": [],
"Warlock, Circle": [],
"Warlock, Farrow": [],
"Warlock, Legion": [],
"Warlock, Swamp": [],
"Warlock, Trollkin": [],
"Warlock: Skorne": [],
"Warmonger": [],
"Warrior": [],
"Wolf of Orboros": [],
"Wolf Rider": [],
"Wyrmwall Bruiser": [],
"Wyrmwall Rider": [],
"Wyrmwall Veteran": []
};
var adventuringCompanies = {
"Agents of the Crucible": [],
"Arcane Order": [
string("adventuring company", "Arcane Order"),
listItem("notes", "At least one of the characters must be Gifted"),
listItem("occupational skills", "Lore (Arcane)"),
choices(arrayPairs("occupational skills", ["Arcane Scholar", "Shield Guard"]), "Choose 1")
],
"Army of the Western Reaches": [],
"Beast Hunters": [],
"Bonded Porters": [],
"Bone Grinder Hunting Party": [],
"Caspian Cortex Smugglers": [],
"Circle Orboros Conclave": [],
"Crusaders": [],
"Farrow Tribe": [],
"Five Fingers Transporters": [],
"Fringe Cultists": [],
"Gatorman Tribe": [],
"Greylords": [],
"Heroes of the Resistance": [],
"House Taberna": [],
"Idrian Tribe": [],
"Illuminated Ones": [],
"Intrepid Investigators": [
string("adventuring company", "Intrepid Investigators"),
listItem("notes", "All characters must either be an Alchemist, Arcane Mechanik, Arcanist, Aristocrat, Explorer, Investigator, Military Officer, Priest, or Spy"),
listItem("notes", "All characters can benefit from the Intellectual archetype benefit twice"),
],
"Khadoran Military Detail": [],
"Korsk Stanzynat Mustyn": [],
"Law Dogs": [
string("adventuring company", "Law Dogs"),
listItem("notes", "All characters must either be a Bounty Hunter, Highwayman, Investigator, Military Officer, Ranger, or Soldier"),
listItem("notes", "While pursuing a bounty, character gain boni on skill and attack rolls")
],
"Mercenary Charter": [
string("adventuring company", "Mercenary Charter"),
listItem("notes", "One character is the captain"),
choices(arrayPair("abilities", "Natural Leader"), "The leader gets the Natural Leader ability"),
choices(arrayPairs("occupational skills", ["Animal Handling", "Command", "Driving", "Gambling", "Interrogation", "Medicine", "Negotiation", "Riding"]), "Choose 1")
],
"Mystics": [],
"Nobile Exiles": [],
"Nomads": [],
"Northkin Kriel": [],
"Nyss Refugees": [],
"Ordic Naval Expedition": [],
"Outlaws": [
string("adventuring company", "Outlaws"),
listItem("notes", "All characters must either be an Alchemist, Cutthroat, Duelist, Highwayman, Pistoleer, Rifleman, Sorcerer, Spy, or Thief"),
listItem("notes", "One character is the boss"),
list("abilities", ["Gang", "Language (Five Chant)"])
],
"Pirates of the Broken Cost": [
string("adventuring company", "Pirates of the Broken Cost"),
listItem("notes", "All characters must either be a Cutthroat, Explorer, Military Officer, Pirate, or Thief"),
listItem("notes", "One character is the captain"),
choices(arrayPair("abilities", "Natural Leader"), "The captain gets the Natural Leader ability"),
listItem("abilities", "Hit the Deck!")
],
"Raiders": [],
"Renegades": [],
"Soldiers of Fortune": [],
"Spy Ring": [
string("adventuring company", "Spy Ring"),
listItem("notes", "All characters must either be an Aristocrat, Investigator, Ranger, Spy, or Thief"),
listItem("notes", "One character is the captain"),
choices($.merge(arrayPairs("languages", languages), arrayPairs("occupational skills", ["Bribery", "Climbing", "Cryptography", "Deception", "Detection", "Disguise", "Escape Artist", "Etiquette", "Forensic Science", "Forgery", "Gambling", "Interrogation", "Intimidation", "Jumping", "Lock Picking", "Negotiation", "Pickpocket", "Research", "Riding", "Rope Use", "Seduction", "Sneak", "Streetwise"])), "Choose 1")
],
"Thamarite Sept": [],
"Tharn Tuath": [],
"The Inner Circle": [],
"United Kriels": [],
"Unlikely Heroes": [],
"Unorthodox Engagement Team": [],
"Wilderness Expedition": [],
"Wilderness Kriel": []
}
</script>
<script type="text/javascript">
function addOption(selector) {
return function(key, value) {
if(value.length > 0) {
var html = $(selector).html();
$(selector).html(html+'\n<option value="'+key+'">'+key+'</option>');
}
}
}
$.each(races, addOption("#race"));
$.each(castes, addOption("#caste"));
$.each(archetypes, addOption("#archetype"));
$.each(careers, addOption("#career1"));
$.each(careers, addOption("#career2"));
$.each(adventuringCompanies, addOption("#adventuring-company"));
</script>
<script type="text/javascript">
// global
// var ikrpg
var ikrpg = ikrpg || {};
//(function () {
//'use strict';
function hero() {
return {
"race": "",
"PHY": 0,
"SPD": 0,
"STR": 0,
"AGL": 0,
"PRW": 0,
"POI": 0,
"INT": 0,
"PER": 0,
"DEF racial modifier": 0,
"languages": [],
"height": 0,
"weight": 0,
"archetype": "",
"benefits": [],
"careers": [],
"abilities": [],
"connections": [],
"military skills": [],
"occupational skills": [],
"spells": [],
"gear": [],
"gold": 0,
"notes": [],
"adventuring company": ""
};
}
function test() {
var data = hero();
$(".character-generator-data input, .character-generator-data option:selected").each(function(index, entry) {
var elem = $(entry);
var clazz = elem.attr("class");
var value = elem.val();
var type = elem.attr("data-type");
switch(type) {
case "number":
if(!data[clazz]) data[clazz] = parseInt(value);
else data[clazz] += parseInt(value);
break;
case "array":
if(!data[clazz]) data[clazz] = [value];
else data[clazz].push(value);
break;
default:
data[clazz] = value;
}
});
console.log(data);
}
function mkString(array, between, before, after) {
var str = "";
if(before) str += before;
if(array.length > 0) {
str += array.slice(0, 1);
$.each(array.slice(1, array.length), function(index, entry) {
if(between) str += between;
str += entry;
});
}
if(after) str += after;
return str;
}
function lookupAndFillOut(selectSelector, dataSelector, data) {
return function(event) {
$(dataSelector).html("");
var option = $(selectSelector).val();
if(data[option]) {
var stuff = data[option];
$(dataSelector).html("");
$.each(stuff, function(index, entry) {
var html = $(dataSelector).html();
$(dataSelector).html(html+"\n"+entry.html());
});
} else {
// TODO: option does not exist!
}
};
}
$("#race").change(lookupAndFillOut("#race", "#race-data", races));
$("#caste").change(lookupAndFillOut("#caste", "#caste-data", castes));
$("#archetype").change(lookupAndFillOut("#archetype", "#archetype-data", archetypes));
$("#career1").change(lookupAndFillOut("#career1", "#career1-data", careers));
$("#career2").change(lookupAndFillOut("#career2", "#career2-data", careers));
$("#adventuring-company").change(lookupAndFillOut("#adventuring-company", "#adventuring-company-data", adventuringCompanies));
// generator
ikrpg.generator = {
//hero: {
// race: "",
// PHY: 0,
// SPD: 0,
// STR: 0,
// AGL: 0,
// PRW: 0,
// POI: 0,
// INT: 0,
// ARC: 0,
// PER: 0,
// //archetype: "",
// //careers: [],
// //level: "hero",
// //languages: [],
// //benefits: [],
// //careers: [],
// //abilities: [],
// //"military skills": {},
// //connections: [],
// //"occupational skills": {},
// //"gold coins": 0,
// //"starting assets": []
//}
};
//})();
</script>