ikrpg version 3 alpha: added new background image and using pouchdb to store it client side.

This commit is contained in:
Yord 2015-04-05 18:38:30 +02:00
parent 67d39d2dc9
commit a06573dfd0
12 changed files with 535 additions and 23 deletions

View file

@ -0,0 +1,169 @@
---
layout: ikrpg
tags: [Character Generator]
---
<div id="generator">
<h2>Race</h2>
<select id="race">
<option value="0">&nbsp;</option>
<option value="1" selected>Human</option>
</select>
<ul data-id="race">
<li data-mod='modify("set", "race", "Human")'>race: Human</li>
<li data-key="race" data-modifier="set" data-value='"Human"'>race: Human</li>
<!--li data-key="PHY" data-modifier="set" data-value='5'>PHY: 5</li-->
<li data-key="stats" data-modifier="add" data-value='["PHY","PHY","PHY","PHY","PHY"]'>PHY: 5</li>
<!--li data-key="SPD" data-modifier="set" data-value='6'>SPD: 6</li>
<li data-key="STR" data-modifier="set" data-value='4'>STR: 4</li>
<li data-key="AGL" data-modifier="set" data-value='3'>AGL: 3</li>
<li data-key="PRW" data-modifier="set" data-value='4'>PRW: 4</li>
<li data-key="POI" data-modifier="set" data-value='4'>POI: 4</li>
<li data-key="INT" data-modifier="set" data-value='3'>INT: 3</li>
<li data-key="ARC" data-modifier="set" data-value='0'>ARC: 0</li>
<li data-key="PER" data-modifier="set" data-value='3'>PER: 3</li-->
<li data-key="constraints" data-modifier="add" data-value='if (hero.level == "hero" && hero.PHY > 7) "Hero level for PHY can be at most 7."'>hero limit PHY: 7</li>
<!--li data-key="hero-limit-SPD" data-modifier="set" data-value='7'>hero limit SPD: 7</li>
<li data-key="hero-limit-STR" data-modifier="set" data-value='6'>hero limit STR: 6</li>
<li data-key="hero-limit-AGL" data-modifier="set" data-value='5'>hero limit AGL: 5</li>
<li data-key="hero-limit-PRW" data-modifier="set" data-value='5'>hero limit PRW: 5</li>
<li data-key="hero-limit-POI" data-modifier="set" data-value='5'>hero limit POI: 5</li>
<li data-key="hero-limit-INT" data-modifier="set" data-value='5'>hero limit INT: 5</li>
<li data-key="hero-limit-ARC" data-modifier="set" data-value='4'>hero limit ARC: 4</li>
<li data-key="hero-limit-PER" data-modifier="set" data-value='5'>hero limit PER: 5</li>
<li data-key="veteran-limit-PHY" data-modifier="set" data-value='8'>veteran limit PHY: 8</li>
<li data-key="veteran-limit-SPD" data-modifier="set" data-value='7'>veteran limit SPD: 7</li>
<li data-key="veteran-limit-STR" data-modifier="set" data-value='7'>veteran limit STR: 7</li>
<li data-key="veteran-limit-AGL" data-modifier="set" data-value='6'>veteran limit AGL: 6</li>
<li data-key="veteran-limit-PRW" data-modifier="set" data-value='6'>veteran limit PRW: 6</li>
<li data-key="veteran-limit-POI" data-modifier="set" data-value='6'>veteran limit POI: 6</li>
<li data-key="veteran-limit-INT" data-modifier="set" data-value='6'>veteran limit INT: 6</li>
<li data-key="veteran-limit-ARC" data-modifier="set" data-value='6'>veteran limit ARC: 6</li>
<li data-key="veteran-limit-PER" data-modifier="set" data-value='6'>veteran limit PER: 6</li>
<li data-key="epic-limit-PHY" data-modifier="set" data-value='8'>epic limit PHY: 8</li>
<li data-key="epic-limit-SPD" data-modifier="set" data-value='7'>epic limit SPD: 7</li>
<li data-key="epic-limit-STR" data-modifier="set" data-value='8'>epic limit STR: 8</li>
<li data-key="epic-limit-AGL" data-modifier="set" data-value='7'>epic limit AGL: 7</li>
<li data-key="epic-limit-PRW" data-modifier="set" data-value='7'>epic limit PRW: 7</li>
<li data-key="epic-limit-POI" data-modifier="set" data-value='7'>epic limit POI: 7</li>
<li data-key="epic-limit-INT" data-modifier="set" data-value='7'>epic limit INT: 7</li>
<li data-key="epic-limit-ARC" data-modifier="set" data-value='8'>epic limit ARC: 8</li>
<li data-key="epic-limit-PER" data-modifier="set" data-value='7'>epic limit PER: 7</li-->
</ul>
<input type="number" />
<h2>Archetype</h2>
<select id="archetype">
<option value="0" selected>&nbsp;</option>
<option value="1">Gifted</option>
</select>
<ul data-id="archetype">
</ul>
<h2>Career 1</h2>
<select id="career1">
<option value="0" selected>&nbsp;</option>
<option value="1">Aristocrat</option>
<option value="2">Gun Mage (Amethyst Rose)</option>
</select>
<ul data-id="career1">
</ul>
<h2>Career 2</h2>
<select id="career2">
<option value="0" selected>&nbsp;</option>
<option value="1">Aristocrat</option>
<option value="2">Gun Mage (Amethyst Rose)</option>
</select>
<ul data-id="career2">
</ul>
</div>
<script type="text/javascript">
var hero = {
"race": "",
"stats": [], // ["PHY", "STR", "INT", "PHY", "PHY", "STR"] => { "PHY": 3, "STR": 2, "INT": 1 }
"languages": [],
"occupational skills": [] // ["Negotiation", "Detection", "Negotiation"] => { "Negotiation": 2, "Detection": 1 }
};
// helpers
function clone(obj) {
return $.extend(true, {}, obj);
}
// obj = { "PHY": 3, "STR": 2, "INT": 1 }, output = ["PHY", "PHY", "PHY", "STR", "STR", "INT"]
function as_array(obj) {
var acc = [];
for(var key in obj) {
var val = obj[key];
for(var i = 0; i < val; i++) {
acc.push(key);
}
}
return acc;
}
function modify(modifier, key, value) {
return function(hero) {
return modifier(key, value)(hero);
};
}
// modifiers
function set(key, value) {
return function(hero) {
var hero_clone = clone(hero);
hero_clone[key] = value;
return hero_clone;
};
}
function add(key, values) {
return function(hero) {
var hero_clone = clone(hero);
hero_clone[key] = hero_clone[key].concat(values);
return hero_clone;
};
}
// data
var races = {
"Human": [
'modify("set", "race", "Human")',
'modify("add", "stats", as_array({ "PHY": 5, "SPD": 6, "STR": 4, "AGL": 3, "PRW": 4, "POI": 4, "INT": 3, "PER": 3 }))'
]
}
// program
var modifications = [modify(set, "race", "Human"), modify(add, "PHY", 4)];
var h = modifications.reduce(function(acc, f) { return f(acc); }, hero);
console.log(h);
//$("#foo").change(function() { console.log($("#foo").val()); });
</script>