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

2652 lines
No EOL
109 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-select">
<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-select">
<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-select">
<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-select">
<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-select">
<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-select">
<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">
// global
// var ikrpg
var ikrpg = ikrpg || {};
(function() {
ikrpg.generator = ikrpg.generator || {};
var generator = ikrpg.generator;
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);
}
// keywords (to prevent invalid values)
var _race = "race";
var _PHY = "PHY";
var _SPD = "SPD";
var _STR = "STR";
var _AGL = "AGL";
var _PRW = "PRW";
var _POI = "POI";
var _INT = "INT";
var _ARC = "ARC";
var _PER = "PER";
var _PHY_max = "PHY max"
var _SPD_max = "SPD max";
var _STR_max = "STR max";
var _AGL_max = "AGL max";
var _PRW_max = "PRW max";
var _POI_max = "POI max";
var _INT_max = "INT max";
var _ARC_max = "ARC max";
var _PER_max = "PER max";
var _languages = "languages";
var _height = "height";
var _weight = "weight";
var _abilities = "abilities";
var _connections = "connections";
var _DEF_racial_modifier = "DEF racial modifier";
var _notes = "notes";
var _benefits = "benefits";
var _archetype = "archetype";
var _careers = "careers";
var _military_skills = "military skills";
var _occupational_skills = "occupational skills";
var _gold = "gold";
var _gear = "gear";
var _spells = "spells";
var _ranged_weapons = "ranged weapons";
var _melee_weapons = "melee weapons";
var _armors = "armors";
var _adventuring_company = "adventuring company";
// TODO: All languages
generator.languages = [
"Aeric",
"Caspian",
"Cygnaran",
"Five Cant",
"Gobberish",
"Grun",
"Idrian",
"Khadoran",
"Khurzic",
"Kossite",
"Llaelese",
"Molgur",
"Molgur-Og",
"Molgur-Tharn",
"Molgur-Trul",
"Morridane",
"Ordic",
"Quor-gar",
"Quor-og",
"Rhulic",
"Satyx",
"Scharde",
"Shyr",
"Sulese",
"Thrallspeak",
"Thurian",
"Umbrean"
];
var languages = generator.languages;
generator.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),
number(_PHY_max, 7),
number(_SPD_max, 5),
number(_STR_max, 6),
number(_AGL_max, 5),
number(_PRW_max, 5),
number(_POI_max, 4),
number(_INT_max, 5),
number(_ARC_max, 5),
number(_PER_max, 4),
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),
number(_PHY_max, 6),
number(_SPD_max, 7),
number(_STR_max, 4),
number(_AGL_max, 5),
number(_PRW_max, 5),
number(_POI_max, 5),
number(_INT_max, 4),
number(_PER_max, 4),
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),
number(_PHY_max, 7),
number(_SPD_max, 7),
number(_STR_max, 6),
number(_AGL_max, 5),
number(_PRW_max, 5),
number(_POI_max, 5),
number(_INT_max, 5),
number(_ARC_max, 4),
number(_PER_max, 5),
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),
number(_PHY_max, 7),
number(_SPD_max, 7),
number(_STR_max, 5),
number(_AGL_max, 5),
number(_PRW_max, 5),
number(_POI_max, 5),
number(_INT_max, 6),
number(_ARC_max, 4),
number(_PER_max, 5),
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),
number(_PHY_max, 7),
number(_SPD_max, 7),
number(_STR_max, 6),
number(_AGL_max, 5),
number(_PRW_max, 5),
number(_POI_max, 5),
number(_INT_max, 5),
number(_ARC_max, 4),
number(_PER_max, 5),
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),
number(_PHY_max, 7),
number(_SPD_max, 6),
number(_STR_max, 8),
number(_AGL_max, 5),
number(_PRW_max, 5),
number(_POI_max, 4),
number(_INT_max, 5),
number(_PER_max, 4),
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),
number(_PHY_max, 8),
number(_SPD_max, 6),
number(_STR_max, 7),
number(_AGL_max, 5),
number(_PRW_max, 5),
number(_POI_max, 4),
number(_INT_max, 4),
number(_ARC_max, 4),
number(_PER_max, 4),
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)": []
};
generator.castes = {
"Extoller": [],
"Outcast": [],
"Paingiver": [],
"Slave": [],
"Warrior": [],
"Worker": []
}
generator.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)": []
};
generator.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",
"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(_languages, 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"]) // TODO: Light Laborjack widget
],
"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(_ranged_weapons, [
"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"]) // TODO: horse widget
],
"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, [
"spear head",
"ten blasting heads",
"Iron Fang full plate",
"shield"]),
listItem(_melee_weapons, "blasting pike")
],
"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(_ranged_weapons, [
"hand cannon",
"repeating pistol",
"repeating pistol"]), "Choose either the hand cannon<br />or both repeating pistols"),
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(_ranged_weapons, [
"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"]),
listItem(_melee_weapons, "Storm Glaive"),
listItem(_armors, "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",
"smoke grenate",
"smoke grenate",
"smoke grenate"]),
listItem(_ranged_weapons, "military rifle"),
listItem(_armors, "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([arrayPair(_armors, "light suit of warcaster armor"),
arrayPair(_armors, "medium suit of warcaster armor"),
arrayPair(_melee_weapons, "mechanika hand weapon"),
arrayPair(_ranged_weapons, "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": []
};
generator.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"),
list(_notes, [
"All characters must either be an Alchemist, Arcane Mechanik, Arcanist, Aristocrat, Explorer, Investigator, Military Officer, Priest, or Spy",
"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",
"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"),
list(_notes, [
"All characters must either be an Alchemist, Cutthroat, Duelist, Highwayman, Pistoleer, Rifleman, Sorcerer, Spy, or Thief",
"One character is the boss" ]),
list(_abilities, ["Gang", "Language (Five Cant)"])
],
"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"),
list(_notes, [
"All characters must either be an Aristocrat, Investigator, Ranger, Spy, or Thief",
"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() {
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(ikrpg.generator.races, addOption("#race-select"));
$.each(ikrpg.generator.castes, addOption("#caste-select"));
$.each(ikrpg.generator.archetypes, addOption("#archetype-select"));
$.each(ikrpg.generator.careers, addOption("#career1-select"));
$.each(ikrpg.generator.careers, addOption("#career2-select"));
$.each(ikrpg.generator.adventuringCompanies, addOption("#adventuring-company-select"));
})();
</script>
<script type="text/javascript">
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 () {
ikrpg.generator = ikrpg.generator || {};
var generator = ikrpg.generator;
generator.hero = function() {
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": "",
"ranged weapons": [],
"melee weapons": [],
"armors": []
};
}
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-select").change(lookupAndFillOut("#race-select", "#race-data", ikrpg.generator.races));
$("#caste-select").change(lookupAndFillOut("#caste-select", "#caste-data", ikrpg.generator.castes));
$("#archetype-select").change(lookupAndFillOut("#archetype-select", "#archetype-data", ikrpg.generator.archetypes));
$("#career1-select").change(lookupAndFillOut("#career1-select", "#career1-data", ikrpg.generator.careers));
$("#career2-select").change(lookupAndFillOut("#career2-select", "#career2-data", ikrpg.generator.careers));
$("#adventuring-company-select").change(lookupAndFillOut("#adventuring-company-select", "#adventuring-company-data", ikrpg.generator.adventuringCompanies));
})();
function histogram(array) {
var o = {};
$.each(array, function(index, item) {
o[item] = o[item] || 0;
o[item] += 1;
});
return o;
}
function test() {
ikrpg.cards.cleanData();
ikrpg.cards.data["hero-name"] = "Hero's name";
var data = ikrpg.generator.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);
var character = {
"weight": data["weight"],
"archetype": data["archetype"],
"race": data["race"],
"level": "Hero",
"careers": mkString(data["careers"], ", "),
"height": data["height"],
"phy": data["PHY"],
"phymax": data["PHY max"],
"spd": data["SPD"],
"spdmax": data["SPD max"],
"str": data["STR"],
"strmax": data["STR max"],
"agl": data["AGL"],
"aglmax": data["AGL max"],
"poi": data["POI"],
"poimax": data["POI max"],
"prw": data["PRW"],
"prwmax": data["PRW max"],
"int": data["INT"],
"intmax": data["INT max"],
"arc": data["ARC"],
"arcmax": data["ARC max"],
"per": data["PER"],
"permax": data["PER max"],
"defracialmodifier": data["defracialmodifier"],
"note1": {"text": "Adventuring company: "+data["adventuring company"]},
"gold": data["gold"],
"XP": 0
};
$.each($.merge(data["benefits"], data["abilities"]) || [], function(index, ability) {
character["ability"+(index+1)] = character["ability"+(index+1)] || {};
character["ability"+(index+1)]["title"] = ability;
});
(function() {
var skills = histogram($.merge(data["military skills"], data["occupational skills"]));
var index = 0;
$.each(skills || [], function(skill, value) {
character["s"+(index+1)] = character["s"+(index+1)] || {};
character["s"+(index+1)]["title"] = skill;
character["s"+(index+1)]["lvl"] = value;
index += 1;
});
})();
$.each(data["spells"] || [], function(index, spell) {
character["spell"+(index+1)] = character["spell"+(index+1)] || {};
character["spell"+(index+1)]["title"] = spell;
});
$.each(data["gear"] || [], function(index, gear) {
character["gear"+(index+1)] = character["gear"+(index+1)] || {};
character["gear"+(index+1)]["title"] = gear;
});
$.each(data["ranged weapon"] || [], function(index, weapon) {
character["rat"+(index+1)] = character["rat"+(index+1)] || {};
character["rat"+(index+1)]["name"] = weapon;
});
$.each(data["melee weapon"] || [], function(index, weapon) {
character["mat"+(index+1)] = character["mat"+(index+1)] || {};
character["mat"+(index+1)]["name"] = weapon;
});
$.each(data["armor"] || [], function(index, armor) {
character["wornarmor"+(index+1)] = character["wornarmor"+(index+1)] || {};
character["wornarmor"+(index+1)]["name"] = armor;
});
$.each(data["notes"] || [], function(index, note) {
character["note"+(index+2)] = character["note"+(index+2)] || {};
character["note"+(index+2)]["text"] = note;
});
console.log(character)
ikrpg.sheet.fill(null, character);
}
</script>
<style>
form#import-export { display: none; }
form#import-export:target { display: block; }
#seed { display: block; width: 100%; max-height: 26px; overflow: none; }
.character-sheet {
margin-top: 3em;
width: 980px; }
.fmf.page1 {
height: 711px;
background: url(/static/images/sheet/FMF-1.jpeg) no-repeat;
background-size: 980px 711px; }
.fmf.page2 {
height: 688px;
background: url(/static/images/sheet/FMF-2.jpeg) no-repeat;
background-size: 980px 688px; }
.iku.page1 {
height: 713px;
background: url(/static/images/sheet/IKU-1.jpeg) no-repeat;
background-size: 980px 713px; }
.iku.page2 {
height: 689px;
background: url(/static/images/sheet/IKU-2.jpeg) no-repeat;
background-size: 980px 689px; }
.character-sheet input { position: absolute; font-size: 13px; padding: 2px 1px; font-family: Arial; border: 0; background-color: transparent; }
.character-sheet .hero-name { margin: 20px 0 0 4px; width: 236px; }
.character-sheet #sex { margin: 20px 0 0 250px; width: 39px; }
.character-sheet #definingcharacteristics { margin: 20px 0 0 300px; width: 304px; }
.character-sheet #weight { margin: 20px 0 0 619px; width: 82px; }
.character-sheet #archetype { margin: 48px 0 0 4px; width: 86px; }
.character-sheet #race { margin: 48px 0 0 105px; width: 78px; }
.character-sheet #careers { margin: 48px 0 0 198px; width: 126px; }
.character-sheet #faith { margin: 48px 0 0 333px; width: 86px; }
.character-sheet #playername { margin: 48px 0 0 433px; width: 172px; }
.character-sheet #height { margin: 48px 0 0 619px; width: 82px; }
.character-sheet #level { margin: 20px 0 0 720px; width: 79px; text-align: center; }
.character-sheet #xp { margin: 48px 0 0 720px; width: 79px; text-align: center; }
.character-sheet div#portrait {}
.character-sheet #phy { margin: 330px 0 0 10px; width: 42px; font-size: 30px; text-align: center; }
.character-sheet #phymax { margin: 352px 0 0 60px; width: 18px; text-align: center; }
.character-sheet #agl { margin: 443px 0 0 10px; width: 42px; font-size: 30px; text-align: center; }
.character-sheet #aglmax { margin: 465px 0 0 60px; width: 18px; text-align: center; }
.character-sheet #str { margin: 363px 0 0 92px; width: 32px; font-size: 20px; text-align: center; }
.character-sheet #strmax { margin: 376px 0 0 129px; width: 13px; text-align: center; }
.character-sheet #int { margin: 556px 0 0 10px; width: 42px; font-size: 30px; text-align: center; }
.character-sheet #intmax { margin: 578px 0 0 60px; width: 18px; text-align: center; }
.character-sheet #prw { margin: 428px 0 0 92px; width: 32px; font-size: 20px; text-align: center; }
.character-sheet #prwmax { margin: 441px 0 0 129px; width: 13px; text-align: center; }
.character-sheet #poi { margin: 476px 0 0 92px; width: 32px; font-size: 20px; text-align: center; }
.character-sheet #poimax { margin: 489px 0 0 129px; width: 13px; text-align: center; }
.character-sheet #spd { margin: 315px 0 0 92px; width: 32px; font-size: 20px; text-align: center; }
.character-sheet #spdmax { margin: 328px 0 0 129px; width: 13px; text-align: center; }
.character-sheet #arc { margin: 541px 0 0 92px; width: 32px; font-size: 20px; text-align: center; }
.character-sheet #arcmax { margin: 554px 0 0 129px; width: 13px; text-align: center; }
.character-sheet #per { margin: 589px 0 0 92px; width: 32px; font-size: 20px; text-align: center; }
.character-sheet #permax { margin: 602px 0 0 129px; width: 13px; text-align: center; }
.character-sheet #wil { margin: 648px 0 0 50px; width: 48px; font-size: 30px; text-align: center; }
.character-sheet #rat1 { display: block !important; }
.character-sheet #rat1 .name { margin: 114px 0 0 224px; width: 103px; }
.character-sheet #rat1 .rng { margin: 106px 0 0 341px; width: 25px; text-align: center; }
.character-sheet #rat1 .rat { margin: 106px 0 0 375px; width: 25px; text-align: center; }
.character-sheet #rat1 .aoe {}
.character-sheet #rat1 .pow { margin: 106px 0 0 409px; width: 25px; text-align: center; }
.character-sheet #rat1 .notes { margin: 138px 0 0 224px; width: 103px; }
.character-sheet #rat1 .ammo { margin: 138px 0 0 341px; width: 99px; }
.character-sheet #rat2 { display: block !important; }
.character-sheet #rat2 .name { margin: 182px 0 0 224px; width: 103px; }
.character-sheet #rat2 .rng { margin: 174px 0 0 341px; width: 25px; text-align: center; }
.character-sheet #rat2 .rat { margin: 174px 0 0 375px; width: 25px; text-align: center; }
.character-sheet #rat2 .aoe {}
.character-sheet #rat2 .pow { margin: 174px 0 0 409px; width: 25px; text-align: center; }
.character-sheet #rat2 .notes { margin: 206px 0 0 224px; width: 103px; }
.character-sheet #rat2 .ammo { margin: 206px 0 0 341px; width: 99px; }
.character-sheet #mat1 { display: block !important; }
.character-sheet #mat1 .name { margin: 265px 0 0 224px; width: 140px; }
.character-sheet #mat1 .mat { margin: 277px 0 0 375px; width: 25px; text-align: center; }
.character-sheet #mat1 .pow {}
.character-sheet #mat1 .ps { margin: 277px 0 0 409px; width: 25px; text-align: center; }
.character-sheet #mat1 .notes { margin: 289px 0 0 224px; width: 140px; }
.character-sheet #mat2 { display: block !important; }
.character-sheet #mat2 .name { margin: 327px 0 0 224px; width: 140px; }
.character-sheet #mat2 .mat { margin: 339px 0 0 375px; width: 25px; text-align: center; }
.character-sheet #mat2 .pow {}
.character-sheet #mat2 .ps { margin: 339px 0 0 409px; width: 25px; text-align: center; }
.character-sheet #mat2 .notes { margin: 351px 0 0 224px; width: 140px; }
.character-sheet #mat3 { display: block !important; }
.character-sheet #mat3 .name { margin: 415px 0 0 171px; width: 160px; }
.character-sheet #mat3 .mat { margin: 429px 0 0 375px; width: 25px; text-align: center; }
.character-sheet #mat3 .pow {}
.character-sheet #mat3 .ps { margin: 429px 0 0 409px; width: 25px; text-align: center; }
.character-sheet #mat3 .notes { margin: 439px 0 0 171px; width: 160px; }
.character-sheet #mat3 .free { margin: 429px 0 0 341px; width: 25px; text-align: center; }
.character-sheet #defracialmodifier { margin: 496px 0 0 289px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #defequipmentmodifiers { margin: 496px 0 0 344px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #def { margin: 496px 0 0 399px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #armshieldmodifier { margin: 554px 0 0 231px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #armarmormodifiers { margin: 554px 0 0 288px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #armothermodifiers { margin: 554px 0 0 344px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #arm { margin: 554px 0 0 399px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #iniequipmentmodifiers { margin: 611px 0 0 289px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #iniadditionalmodifiers { margin: 611px 0 0 344px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #ini { margin: 611px 0 0 399px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #cmdcommandskill { margin: 668px 0 0 289px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #cmdabilitymodifier { margin: 668px 0 0 344px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet #cmd { margin: 668px 0 0 399px; width: 34px; font-size: 20px; text-align: center; }
.character-sheet div.stat .title { margin: 2px 0 0 460px; width: 105px; }
.character-sheet div.stat .base { margin: 2px 0 0 570px; width: 15px; text-align: center; }
.character-sheet div.stat .lvl { margin: 2px 0 0 610px; width: 15px; text-align: center; }
.character-sheet div.stat .sum { margin: 2px 0 0 643px; width: 15px; text-align: center; }
.character-sheet div.stat { position: absolute; }
.character-sheet div#s1 { margin-top: 120px; }
.character-sheet div#s2 { margin-top: 141px; }
.character-sheet div#s3 { margin-top: 162px; }
.character-sheet div#s4 { margin-top: 184px; }
.character-sheet div#s5 { margin-top: 205px; }
.character-sheet div#s6 { margin-top: 226px; }
.character-sheet div#s7 { margin-top: 247px; }
.character-sheet div#s8 { margin-top: 269px; }
.character-sheet div#s9 { margin-top: 290px; }
.character-sheet div#s10 { margin-top: 311px; }
.character-sheet div#s11 { margin-top: 332px; }
.character-sheet div#s12 { margin-top: 353px; }
.character-sheet div#s13 { margin-top: 374px; }
.character-sheet div#s14 { margin-top: 396px; }
.character-sheet div#s15 { margin-top: 417px; }
.character-sheet div#s16 { margin-top: 438px; }
.character-sheet div#s17 { margin-top: 459px; }
.character-sheet div#s18 {}
.character-sheet div#s19 {}
.character-sheet div#s20 {}
.character-sheet div#s21 {}
.character-sheet div.ability { position: absolute; }
.character-sheet div.ability .title { margin-left: 689px; width: 100px; }
.character-sheet div.ability .description { margin-left: 796px; width: 150px; }
.character-sheet div.ability .page { margin-left: 946px; width: 28px; text-align: right; }
.character-sheet div#ability1 { margin-top: 135px; }
.character-sheet div#ability2 { margin-top: 156px; }
.character-sheet div#ability3 { margin-top: 177px; }
.character-sheet div#ability4 { margin-top: 198px; }
.character-sheet div#ability5 { margin-top: 219px; }
.character-sheet div#ability6 { margin-top: 240px; }
.character-sheet div#ability7 { margin-top: 261px; }
.character-sheet div#ability8 { margin-top: 282px; }
.character-sheet div#ability9 { margin-top: 303px; }
.character-sheet div#ability10 { margin-top: 324px; }
.character-sheet div#ability11 { margin-top: 345px; }
.character-sheet div#ability12 { margin-top: 366px; }
.character-sheet div#ability13 { margin-top: 387px; }
.character-sheet div#ability14 { margin-top: 408px; }
.character-sheet div#ability15 { margin-top: 429px; }
.character-sheet div#ability16 { margin-top: 450px; }
.character-sheet div#ability17 { margin-top: 471px; }
.character-sheet div#ability18 { margin-top: 492px; }
.character-sheet div#ability19 { margin-top: 513px; }
.character-sheet div#ability20 { margin-top: 534px; }
.character-sheet #feats { font-size: 40px; margin: 606px 0 0 698px; width: 51px; text-align: center; }
.character-sheet .gear { position: absolute; margin-left: 5px; }
.character-sheet .gear .title { width: 125px; }
.character-sheet .gear .benefit { margin-left: 125px; width: 160px; }
.character-sheet #gear1 { margin-top: 38px; }
.character-sheet #gear2 { margin-top: 58px; }
.character-sheet #gear3 { margin-top: 78px; }
.character-sheet #gear4 { margin-top: 97px; }
.character-sheet #gear5 { margin-top: 117px; }
.character-sheet #gear6 { margin-top: 137px; }
.character-sheet #gear7 { margin-top: 157px; }
.character-sheet #gear8 { margin-top: 177px; }
.character-sheet #gear9 { margin-top: 197px; }
.character-sheet #gear10 { margin-top: 217px; }
.character-sheet #gear11 { margin-top: 237px; }
.character-sheet #gear12 { margin-top: 257px; }
.character-sheet #gear13 { margin-top: 276px; }
.character-sheet #gear14 { margin-top: 296px; }
.character-sheet #gear15 { margin-top: 316px; }
.character-sheet #gear16 { margin-top: 336px; }
.character-sheet #gear17 { margin-top: 356px; }
.character-sheet #gear18 { margin-top: 376px; }
.character-sheet #gear19 { margin-top: 396px; }
.character-sheet .wornarmor { position: absolute; margin-left: 5px; }
.character-sheet .wornarmor .name { width: 70px; }
.character-sheet .wornarmor .notes { margin-left: 75px; width: 108px; }
.character-sheet .wornarmor .spd { margin-left: 186px; width: 17px; text-align: center; }
.character-sheet .wornarmor .def { margin-left: 225px; width: 17px; text-align: center; }
.character-sheet .wornarmor .arm { margin-left: 260px; width: 17px; text-align: center; }
.character-sheet #wornarmor1 { margin-top: 468px; }
.character-sheet #wornarmor2 { margin-top: 488px; }
.character-sheet #wornarmor3 { margin-top: 508px; }
.character-sheet #wornarmor4 { margin-top: 528px; }
.character-sheet .connection { position: absolute; margin-left: 5px; }
.character-sheet .connection .name { width: 98px; }
.character-sheet .connection .notes { margin-left: 98px; width: 140px; }
.character-sheet .connection .page { margin-left: 238px; width: 48px; text-align: right; }
.character-sheet #connection1 { margin-top: 600px; }
.character-sheet #connection2 { margin-top: 620px; }
.character-sheet #connection3 { margin-top: 640px; }
.character-sheet #connection4 { margin-top: 660px; }
.character-sheet #arcanetradition { position: absolute; margin: 12px 0 0 398px; width: 256px; }
.character-sheet .spell { position: absolute; margin-left: 312px; }
.character-sheet .spell .title { width: 134px; }
.character-sheet .spell .cost { margin-left: 140px; width: 33px; text-align: center; }
.character-sheet .spell .rng { margin-left: 178px; width: 32px; text-align: center; }
.character-sheet .spell .aoe { margin-left: 215px; width: 32px; text-align: center; }
.character-sheet .spell .pow { margin-left: 252px; width: 33px; text-align: center; }
.character-sheet .spell .up { margin-left: 290px; width: 32px; text-align: center; }
.character-sheet .spell .off { margin-left: 327px; width: 28px; text-align: center; }
.character-sheet .spell .description { margin-top: 23px; width: 355px; }
.character-sheet .iku .mechanika { display: none; }
.character-sheet .mechanika { position: absolute; margin-left: 312px; }
.character-sheet .mechanika .housing { width: 84px; }
.character-sheet .mechanika .runeplate { margin-left: 90px; width: 84px; }
.character-sheet .mechanika .capacitor { margin-left: 180px; width: 84px; }
.character-sheet .mechanika .notes { margin-left: 270px; width: 84px; }
.character-sheet #mechanika1 { margin-top: 486px; }
.character-sheet #mechanika2 { margin-top: 506px; }
.character-sheet #mechanika3 { margin-top: 526px; }
.character-sheet #mechanika4 { margin-top: 546px; }
.character-sheet #mechanika5 { margin-top: 566px; }
.character-sheet .iku .runeplate { display: none; }
.character-sheet .runeplate { position: absolute; margin-left: 312px; }
.character-sheet .runeplate .title { width: 84px; }
.character-sheet .runeplate .benefit { margin-left: 90px; width: 78px; }
.character-sheet #runeplate1 { margin-top: 602px; }
.character-sheet #runeplate2 { margin-top: 622px; }
.character-sheet #runeplate3 { margin-top: 642px; }
.character-sheet #runeplate4 { margin-top: 662px; }
.character-sheet .iku .capacitor { display: none; }
.character-sheet .capacitor { position: absolute; margin-left: 498px; }
.character-sheet .capacitor .title { width: 78px; }
.character-sheet .capacitor .charges { margin-left: 84px; width: 84px; }
.character-sheet #capacitor1 { margin-top: 602px; }
.character-sheet #capacitor2 { margin-top: 622px; }
.character-sheet #capacitor3 { margin-top: 642px; }
.character-sheet #capacitor4 { margin-top: 662px; }
.character-sheet #spell1 { margin-top: 50px; }
.character-sheet #spell2 { margin-top: 100px; }
.character-sheet #spell3 { margin-top: 150px; }
.character-sheet #spell4 { margin-top: 200px; }
.character-sheet #spell5 { margin-top: 250px; }
.character-sheet #spell6 { margin-top: 299px; }
.character-sheet #spell7 { margin-top: 348px; }
.character-sheet #spell8 { margin-top: 398px; }
.character-sheet .note { position: absolute; margin-left: 698px; }
.character-sheet .note .text { width: 265px; }
.character-sheet #note1 { margin-top: 37px; }
.character-sheet #note2 { margin-top: 56px; }
.character-sheet #note3 { margin-top: 75px; }
.character-sheet #note4 { margin-top: 94px; }
.character-sheet #note5 { margin-top: 112px; }
.character-sheet #note6 { margin-top: 131px; }
.character-sheet #note7 { margin-top: 150px; }
.character-sheet #note8 { margin-top: 168px; }
.character-sheet #note9 { margin-top: 187px; }
.character-sheet #note10 { margin-top: 206px; }
.character-sheet #note11 { margin-top: 225px; }
.character-sheet #note12 { margin-top: 244px; }
.character-sheet #permanentinjury1 { position: absolute; margin-top: 310px; margin-left: 698px; width: 265px; }
.character-sheet #permanentinjury2 { position: absolute; margin-top: 330px; margin-left: 698px; width: 265px; }
.character-sheet #permanentinjury3 { position: absolute; margin-top: 350px; margin-left: 698px; width: 265px; }
.character-sheet #spokenlanguage1 { position: absolute; margin-top: 411px; margin-left: 698px; width: 265px; }
.character-sheet #spokenlanguage2 { position: absolute; margin-top: 431px; margin-left: 698px; width: 265px; }
.character-sheet #spokenlanguage3 { position: absolute; margin-top: 451px; margin-left: 698px; width: 265px; }
.character-sheet #religiousbelief1 { position: absolute; margin-top: 512px; margin-left: 698px; width: 265px; }
.character-sheet #religiousbelief2 { position: absolute; margin-top: 532px; margin-left: 698px; width: 265px; }
.character-sheet #religiousbelief3 { position: absolute; margin-top: 552px; margin-left: 698px; width: 265px; }
.character-sheet #gold { position: absolute; margin-top: 613px; margin-left: 698px; font-size: 50px; width: 100px; text-align: right; }
@media print {
html { zoom: 140%; }
form.character-sheet {
margin: 200px 0 0 -130px;
display: inline-block;
-webkit-transform: rotate(-90deg);
-moz-transform:rotate(-90deg);
filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3); }
form.character-sheet.page2 {
margin-top: 228px; }
}
</style>
<p>
These are the (slightly modified) official Full Metal Fantasy and Unleashed character sheets
that can be downloaded at <a href="http://privateerpress.com/iron-kingdoms/downloads">privateerpress.com</a>.
We have modified them so you can fill, print, and save them in your browser!
After you saved them they are only visible to you.
We do not have access to your characters.
Only you can access them and only in the browser you saved them in.
</p>
<p>
<strong>Beware:</strong>
If you <strong>clear your browser cache</strong>, your character sheets <strong>will be lost</strong>!
Additionally, if you <strong>save</strong> a new character sheet <strong>under an existing hero name</strong>, the old sheet <strong>will be lost</strong>!
</p>
<p>
<em>Tip:</em>
Use your browser's print function to print your character sheet!
</p>
<p>
You can import/export character cards should you need them in a different browser, clear your browser cache or email them to a friend.
Exporting cards will give you a gibberish representation of your character that you can copy.
Pasting that gibberish into the import/export field and clicking to import the character will update your sheet.
Have fun using the character sheets!
</p>
<h2 style="font-weight:300;margin:1em 0 2em 0;">
| <a href="javascript:ikrpg.sheet.saveHero();">Save</a> |
<a href="#import-export">Import/Export Character</a> |
</h2>
<form id="import-export">
<textarea id="seed"></textarea>
<button id="generate-seed">Export seed for current cards</button>
<button id="update-seed">Fill out cards using current seed</button>
</form>
<div style="text-align:center;">
<table id="characters" class="hero">
<thead>
<tr>
<th>Hero Name</th>
<th>Archetype</th>
<th>Race</th>
<th>Careers</th>
<th>Load</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<script>
function makeUnleashed() {
$(".character-sheet.fmf").removeClass("fmf").addClass("iku");
}
function makeFullMetalFantasy() {
$(".character-sheet.iku").removeClass("iku").addClass("fmf");
}
</script>
<div style="margin-top:4em;">
<strong>Choose your character sheet design:</strong>
<ul style="list-style-type:disc;">
<li><a href="javascript:makeFullMetalFantasy();">Full Metal Fantasy</a> (slightly modified)</li>
<li><a href="javascript:makeUnleashed();">Unleashed</a></li>
</ul>
</div>
<form class="character-sheet fmf page1">
<input class="hero-name" title="Hero's Name" type="text" />
<input id="sex" title="Sex" type="text" />
<input id="definingcharacteristics" title="Defining Characteristics" type="text" />
<input id="weight" title="Weight" type="text" />
<input id="archetype" title="Archetype" type="text" />
<input id="race" title="Race" type="text" />
<input id="careers" title="Careers" type="text" />
<input id="faith" title="Faith" type="text" />
<input id="playername" title="Player Name" type="text" />
<input id="height" title="Height" type="text" />
<input id="level" title="Level" type="text" />
<input id="xp" title="XP" type="text" />
<!--div id="portrait"></div-->
<input id="phy" title="PHY" type="text" />
<input id="phymax" title="PHY max" type="text" />
<input id="spd" title="SPD" type="text" />
<input id="spdmax" title="SPD max" type="text" />
<input id="str" title="STR" type="text" />
<input id="strmax" title="STR max" type="text" />
<input id="agl" title="AGL" type="text" />
<input id="aglmax" title="AGL max" type="text" />
<input id="prw" title="PRW" type="text" />
<input id="prwmax" title="PRW max" type="text" />
<input id="poi" title="POI" type="text" />
<input id="poimax" title="POI max" type="text" />
<input id="int" title="INT" type="text" />
<input id="intmax" title="INT max" type="text" />
<input id="arc" title="ARC" type="text" />
<input id="arcmax" title="ARC max" type="text" />
<input id="per" title="PER" type="text" />
<input id="permax" title="PER max" type="text" />
<input id="wil" title="WIL" type="text" />
<div id="rat1">
<input class="name" title="Name" type="text" />
<input class="rng" title="RNG" type="text" />
<input class="rat" title="RAT" type="text" />
<input class="pow" title="POW" type="text" />
<input class="notes" title="Notes" type="text" />
<input class="ammo" title="Ammo" type="text" />
</div>
<div id="rat2">
<input class="name" title="Name" type="text" />
<input class="rng" title="RNG" type="text" />
<input class="rat" title="RAT" type="text" />
<input class="pow" title="POW" type="text" />
<input class="notes" title="Notes" type="text" />
<input class="ammo" title="Ammo" type="text" />
</div>
<div id="mat1">
<input class="name" title="Name" type="text" />
<input class="mat" title="MAT" type="text" />
<input class="ps" title="POW" type="text" />
<input class="notes" title="Notes" type="text" />
</div>
<div id="mat2">
<input class="name" title="Name" type="text" />
<input class="mat" title="MAT" type="text" />
<input class="ps" title="POW" type="text" />
<input class="notes" title="Notes" type="text" />
</div>
<div id="mat3">
<input class="name" title="Name" type="text" />
<input class="free" title="Free" type="text" />
<input class="mat" title="MAT" type="text" />
<input class="ps" title="POW" type="text" />
<input class="notes" title="Notes" type="text" />
</div>
<input id="defracialmodifier" title="DEF racial modifier" type="text" />
<input id="defequipmentmodifiers" title="DEF equipment modifiers" type="text" />
<input id="def" title="DEF" type="text" />
<input id="armshieldmodifier" title="ARM shield modifier" type="text" />
<input id="armarmormodifiers" title="ARM armor modifiers" type="text" />
<input id="armothermodifiers" title="ARM other modifiers" type="text" />
<input id="arm" title="ARM" type="text" />
<input id="iniequipmentmodifiers" title="INI equipment modifiers" type="text" />
<input id="iniadditionalmodifiers" title="INI additional modifiers" type="text" />
<input id="ini" title="INI" type="text" />
<input id="cmdcommandskill" title="CMD" type="text" />
<input id="cmdabilitymodifier" title="CMD" type="text" />
<input id="cmd" title="CMD" type="text" />
<div id="s1" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s2" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s3" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s4" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s5" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s6" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s7" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s8" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s9" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s10" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s11" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s12" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s13" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s14" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s15" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s16" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="s17" class="stat">
<input class="title" title="Title" type="text" />
<input class="base" title="Base" type="text" />
<input class="lvl" title="Level" type="text" />
<input class="sum" title="Sum" type="text" />
</div>
<div id="ability1" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability2" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability3" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability4" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability5" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability6" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability7" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability8" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability9" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability10" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability11" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability12" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability13" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability14" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability15" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability16" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability17" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability18" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability19" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="ability20" class="ability">
<input class="title" title="Title" type="text" />
<input class="description" title="Description" type="text" />
<input class="page" title="Page" type="text" />
</div>
<input id="feats" title="Feats" type="text" />
</form>
<form class="character-sheet fmf page2">
<div id="gear1" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear2" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear3" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear4" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear5" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear6" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear7" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear8" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear9" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear10" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear11" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear12" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear13" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear14" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear15" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear16" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear17" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear18" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="gear19" class="gear">
<input class="title" title="Title" type="text" />
<input class="benefit" title="Benefit" type="text" />
</div>
<div id="wornarmor1" class="wornarmor">
<input class="name" title="Name" type="text" />
<input class="notes" title="Notes" type="text" />
<input class="spd" title="SPD" type="text" />
<input class="def" title="DEF" type="text" />
<input class="arm" title="ARM" type="text" />
</div>
<div id="wornarmor2" class="wornarmor">
<input class="name" title="Name" type="text" />
<input class="notes" title="Notes" type="text" />
<input class="spd" title="SPD" type="text" />
<input class="def" title="DEF" type="text" />
<input class="arm" title="ARM" type="text" />
</div>
<div id="wornarmor3" class="wornarmor">
<input class="name" title="Name" type="text" />
<input class="notes" title="Notes" type="text" />
<input class="spd" title="SPD" type="text" />
<input class="def" title="DEF" type="text" />
<input class="arm" title="ARM" type="text" />
</div>
<div id="wornarmor4" class="wornarmor">
<input class="name" title="Name" type="text" />
<input class="notes" title="Notes" type="text" />
<input class="spd" title="SPD" type="text" />
<input class="def" title="DEF" type="text" />
<input class="arm" title="ARM" type="text" />
</div>
<div id="connection1" class="connection">
<input class="name" title="Name" type="text" />
<input class="notes" title="Notes" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="connection2" class="connection">
<input class="name" title="Name" type="text" />
<input class="notes" title="Notes" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="connection3" class="connection">
<input class="name" title="Name" type="text" />
<input class="notes" title="Notes" type="text" />
<input class="page" title="Page" type="text" />
</div>
<div id="connection4" class="connection">
<input class="name" title="Name" type="text" />
<input class="notes" title="Notes" type="text" />
<input class="page" title="Page" type="text" />
</div>
<input id="arcanetradition" title="Arcane Tradition" type="text" />
<div id="spell1" class="spell">
<input type="text" title="Spell" class="title" />
<input type="text" title="Cost" class="cost" />
<input type="text" title="RNG" class="rng" />
<input type="text" title="AOE" class="aoe" />
<input type="text" title="POW" class="pow" />
<input type="text" title="UP" class="up" />
<input type="text" title="OFF" class="off" />
<input type="text" title="Description" class="description" />
</div>
<div id="spell2" class="spell">
<input type="text" title="Spell" class="title" />
<input type="text" title="Cost" class="cost" />
<input type="text" title="RNG" class="rng" />
<input type="text" title="AOE" class="aoe" />
<input type="text" title="POW" class="pow" />
<input type="text" title="UP" class="up" />
<input type="text" title="OFF" class="off" />
<input type="text" title="Description" class="description" />
</div>
<div id="spell3" class="spell">
<input type="text" title="Spell" class="title" />
<input type="text" title="Cost" class="cost" />
<input type="text" title="RNG" class="rng" />
<input type="text" title="AOE" class="aoe" />
<input type="text" title="POW" class="pow" />
<input type="text" title="UP" class="up" />
<input type="text" title="OFF" class="off" />
<input type="text" title="Description" class="description" />
</div>
<div id="spell4" class="spell">
<input type="text" title="Spell" class="title" />
<input type="text" title="Cost" class="cost" />
<input type="text" title="RNG" class="rng" />
<input type="text" title="AOE" class="aoe" />
<input type="text" title="POW" class="pow" />
<input type="text" title="UP" class="up" />
<input type="text" title="OFF" class="off" />
<input type="text" title="Description" class="description" />
</div>
<div id="spell5" class="spell">
<input type="text" title="Spell" class="title" />
<input type="text" title="Cost" class="cost" />
<input type="text" title="RNG" class="rng" />
<input type="text" title="AOE" class="aoe" />
<input type="text" title="POW" class="pow" />
<input type="text" title="UP" class="up" />
<input type="text" title="OFF" class="off" />
<input type="text" title="Description" class="description" />
</div>
<div id="spell6" class="spell">
<input type="text" title="Spell" class="title" />
<input type="text" title="Cost" class="cost" />
<input type="text" title="RNG" class="rng" />
<input type="text" title="AOE" class="aoe" />
<input type="text" title="POW" class="pow" />
<input type="text" title="UP" class="up" />
<input type="text" title="OFF" class="off" />
<input type="text" title="Description" class="description" />
</div>
<div id="spell7" class="spell">
<input type="text" title="Spell" class="title" />
<input type="text" title="Cost" class="cost" />
<input type="text" title="RNG" class="rng" />
<input type="text" title="AOE" class="aoe" />
<input type="text" title="POW" class="pow" />
<input type="text" title="UP" class="up" />
<input type="text" title="OFF" class="off" />
<input type="text" title="Description" class="description" />
</div>
<div id="spell8" class="spell">
<input type="text" title="Spell" class="title" />
<input type="text" title="Cost" class="cost" />
<input type="text" title="RNG" class="rng" />
<input type="text" title="AOE" class="aoe" />
<input type="text" title="POW" class="pow" />
<input type="text" title="UP" class="up" />
<input type="text" title="OFF" class="off" />
<input type="text" title="Description" class="description" />
</div>
<div id="mechanika1" class="mechanika">
<input type="text" title="Housing" class="housing" />
<input type="text" title="Runeplate" class="runeplate" />
<input type="text" title="Capacitor" class="capacitor" />
<input type="text" title="Notes" class="notes" />
</div>
<div id="mechanika2" class="mechanika">
<input type="text" title="Housing" class="housing" />
<input type="text" title="Runeplate" class="runeplate" />
<input type="text" title="Capacitor" class="capacitor" />
<input type="text" title="Notes" class="notes" />
</div>
<div id="mechanika3" class="mechanika">
<input type="text" title="Housing" class="housing" />
<input type="text" title="Runeplate" class="runeplate" />
<input type="text" title="Capacitor" class="capacitor" />
<input type="text" title="Notes" class="notes" />
</div>
<div id="mechanika4" class="mechanika">
<input type="text" title="Housing" class="housing" />
<input type="text" title="Runeplate" class="runeplate" />
<input type="text" title="Capacitor" class="capacitor" />
<input type="text" title="Notes" class="notes" />
</div>
<div id="mechanika5" class="mechanika">
<input type="text" title="Housing" class="housing" />
<input type="text" title="Runeplate" class="runeplate" />
<input type="text" title="Capacitor" class="capacitor" />
<input type="text" title="Notes" class="notes" />
</div>
<div id="runeplate1" class="runeplate">
<input type="text" title="Rune Plate" class="title" />
<input type="text" title="Benefit" class="benefit" />
</div>
<div id="runeplate2" class="runeplate">
<input type="text" title="Rune Plate" class="title" />
<input type="text" title="Benefit" class="benefit" />
</div>
<div id="runeplate3" class="runeplate">
<input type="text" title="Rune Plate" class="title" />
<input type="text" title="Benefit" class="benefit" />
</div>
<div id="runeplate4" class="runeplate">
<input type="text" title="Rune Plate" class="title" />
<input type="text" title="Benefit" class="benefit" />
</div>
<div id="capacitor1" class="capacitor">
<input type="text" title="Capacitor" class="title" />
<input type="text" title="Charges" class="charges" />
</div>
<div id="capacitor2" class="capacitor">
<input type="text" title="Capacitor" class="title" />
<input type="text" title="Charges" class="charges" />
</div>
<div id="capacitor3" class="capacitor">
<input type="text" title="Capacitor" class="title" />
<input type="text" title="Charges" class="charges" />
</div>
<div id="capacitor4" class="capacitor">
<input type="text" title="Capacitor" class="title" />
<input type="text" title="Charges" class="charges" />
</div>
<div id="note1" class="note">
<input type="text" title="Text" class="text" />
</div>
<div id="note2" class="note">
<input type="text" title="Text" class="text" />
</div>
<div id="note3" class="note">
<input type="text" title="Text" class="text" />
</div>
<div id="note4" class="note">
<input type="text" title="Text" class="text" />
</div>
<div id="note5" class="note">
<input type="text" title="Text" class="text" />
</div>
<div id="note6" class="note">
<input type="text" title="Text" class="text" />
</div>
<div id="note7" class="note">
<input type="text" title="Text" class="text" />
</div>
<div id="note8" class="note">
<input type="text" title="Text" class="text" />
</div>
<div id="note9" class="note">
<input type="text" title="Text" class="text" />
</div>
<div id="note10" class="note">
<input type="text" title="Text" class="text" />
</div>
<div id="note11" class="note">
<input type="text" title="Text" class="text" />
</div>
<div id="note12" class="note">
<input type="text" title="Text" class="text" />
</div>
<input type="text" title="Permanent Injury" id="permanentinjury1" />
<input type="text" title="Permanent Injury" id="permanentinjury2" />
<input type="text" title="Permanent Injury" id="permanentinjury3" />
<input type="text" title="Spoken Language" id="spokenlanguage1" />
<input type="text" title="Spoken Language" id="spokenlanguage2" />
<input type="text" title="Spoken Language" id="spokenlanguage3" />
<input type="text" title="Religious Belief" id="religiousbelief1" />
<input type="text" title="Religious Belief" id="religiousbelief2" />
<input type="text" title="Religious Belief" id="religiousbelief3" />
<input type="text" title="Gold" id="gold" />
</form>
<script type="text/javascript" src="/static/javascripts/heroic.js"></script>
<script type="text/javascript">
ikrpg.cards.init();
</script>
<script type="text/javascript">
(function() {
ikrpg.sheet = ikrpg.sheet || {};
var sheet = ikrpg.sheet;
var db2 = new PouchDB('characters.ikrpg');
var hero = ikrpg.cards.data;
listCharacters();
sheet.saveHero = function() {
ikrpg.cards.updateData();
hero = ikrpg.cards.data;
var _id = hero["hero-name"].replace(/["']/g, "");
db2.get(_id, function(error, doc) {
if(error) { // hero not in db yet
doc = hero;
doc["_id"] = _id;
db2.put(doc);
} else { // hero already in db
hero["_id"] = doc["_id"];
hero["_rev"] = doc["_rev"];
db2.put(hero);
}
listCharacters();
});
}
function listCharacters() {
$("#characters > tbody").remove();
$("#characters").append("<tbody>");
db2.allDocs({include_docs: true}, function(error, results) {
var rows = results.rows;
$.each(rows, function(index, row) {
var character = row.doc;
function appendTr() {
$("#characters > tbody").append("<tr>");
}
function appendTd() {
$("#characters > tbody > tr:last-of-type").append("<td>");
}
function lastTd() {
return $("#characters > tbody > tr:last-of-type > td:last-of-type");
}
appendTr();
appendTd();
lastTd().text(character["hero-name"]);
appendTd();
lastTd().text(character["archetype"]);
appendTd();
lastTd().text(character["race"]);
appendTd();
lastTd().text(character["careers"]);
appendTd();
lastTd().html("<a href=\"javascript:ikrpg.sheet.showCharacter('"+character["_id"]+"')\">Load</a>");
appendTd();
lastTd().html("<a href=\"javascript:ikrpg.sheet.deleteCharacter('"+character["_id"]+"', '"+character["_rev"]+"')\"><strong>Delete</strong></a>");
});
});
}
sheet.fill = function(error, character) {
if(!error) {
ikrpg.cards.data = $.extend(ikrpg.cards.data, character);
ikrpg.cards.init();
ikrpg.cards.switchWeapons();
ikrpg.cards.heroNameHack();
ikrpg.cards.setPortrait();
}
}
sheet.showCharacter = function(characterId) {
db2.get(characterId, sheet.fill);
}
sheet.deleteCharacter = function(characterId, characterRev) {
db2.remove(characterId, characterRev, function(error, code) {
listCharacters();
});
}
})();
</script>