mirror of
https://github.com/ikrpg/ikrpg.github.io.git
synced 2026-05-13 14:27:22 +00:00
169 lines
No EOL
6.5 KiB
HTML
169 lines
No EOL
6.5 KiB
HTML
---
|
|
layout: ikrpg
|
|
tags: [Character Generator]
|
|
---
|
|
|
|
<div id="generator">
|
|
|
|
<h2>Race</h2>
|
|
|
|
<select id="race">
|
|
<option value="0"> </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> </option>
|
|
<option value="1">Gifted</option>
|
|
</select>
|
|
|
|
<ul data-id="archetype">
|
|
</ul>
|
|
|
|
|
|
<h2>Career 1</h2>
|
|
|
|
<select id="career1">
|
|
<option value="0" selected> </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> </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> |