mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-08-31 04:02:29 +00:00
348 lines
13 KiB
HTML
348 lines
13 KiB
HTML
<div>
|
|
<div class="controls">
|
|
<div class="setnumber">
|
|
<div>
|
|
<div class="label">
|
|
<label>Dial</label>
|
|
</div>
|
|
<div class="button">
|
|
<button type="action" name="act_populate">Populate Dial</button>
|
|
</div>
|
|
</div>
|
|
<textarea class="statsentry" type="text" name="attr_dial" spellcheck="false" placeholder="To get started find your BBCode and paste here"></textarea>
|
|
</div>
|
|
<div>
|
|
<label>Click Number</label>
|
|
<input type="number" name="attr_click">
|
|
</div>
|
|
<div>
|
|
<label>Range</label>
|
|
<input type="text" name="attr_damage_current_max">
|
|
</div>
|
|
</div>
|
|
<div class="current_stats">
|
|
<div>
|
|
<label>Speed</label>
|
|
<input type="text" name="attr_click_max" readonly="readonly">
|
|
</div>
|
|
<div>
|
|
<label>Attack</label>
|
|
<input type="text" name="attr_attack_current" readonly="readonly">
|
|
</div>
|
|
<div>
|
|
<label>Defense</label>
|
|
<input type="text" name="attr_attack_current_max" readonly="readonly">
|
|
</div>
|
|
<div>
|
|
<label>Damage</label>
|
|
<input type="text" name="attr_damage_current" readonly="readonly">
|
|
</div>
|
|
</div>
|
|
<div class="powers">
|
|
<label>Powers</label>
|
|
<textarea type="text" name="attr_powers" spellcheck="false"></textarea>
|
|
</div>
|
|
<break/>
|
|
<fieldset class="repeating_clicks">
|
|
<div>
|
|
<label>Speed</label>
|
|
<input type="number" name="attr_speed">
|
|
<select name="attr_speedpowers">
|
|
<option value="None">None</option>
|
|
<option value="Ch">Charge (Ch)</option>
|
|
<option value="Eb">Earthbound (Eb)</option>
|
|
<option value="Fl">Flurry (Fl)</option>
|
|
<option value="Fb">Force Blast (Fb)</option>
|
|
<option value="Hs">Hypersonic Speed (Hs)</option>
|
|
<option value="Lc">Leap/Climb (Lc)</option>
|
|
<option value="Mc">Mind Control (Mc)</option>
|
|
<option value="Pt">Phasing/Teleport (Pt)</option>
|
|
<option value="Pl">Plasticity (Pl)</option>
|
|
<option value="Rs">Running Shot (Rs)</option>
|
|
<option value="Si">Sidestep (Si)</option>
|
|
<option value="St">Stealth (St)</option>
|
|
<option value="Fy">Flying Leap (Fy)</option>
|
|
<option value="Sg">Slingshot (Sg)</option>
|
|
<option value="Ls">Lightning Speed (Ls)</option>
|
|
<option value="Ni">Nimble (Ni)</option>
|
|
<option value="Sp">Special (Sp)</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<label>Attack</label>
|
|
<input type="number" name="attr_attack">
|
|
<select name="attr_attackpowers">
|
|
<option value="None">None</option>
|
|
<option value="Bc">Blades/Claws (Bc)</option>
|
|
<option value="In">Incapacitate (In)</option>
|
|
<option value="Pb">Penetrating/Psychic Blast (Pb)</option>
|
|
<option value="Po">Poison (Po)</option>
|
|
<option value="Pw">Pulse Wave (Pw)</option>
|
|
<option value="Qu">Quake (Qu)</option>
|
|
<option value="Sm">Smoke Cloud (Sm)</option>
|
|
<option value="Se">Steal Energy (Se)</option>
|
|
<option value="Ss">Super Strength (Ss)</option>
|
|
<option value="Tk">Telekinesis (Tk)</option>
|
|
<option value="Ps">Precision Strike (Ps)</option>
|
|
<option value="Ee">Energy Explosion (Ee)</option>
|
|
<option value="Sl">Slam (Sl)</option>
|
|
<option value="Sn">Stun (Sn)</option>
|
|
<option value="Sh">Submission Hold (Sh)</option>
|
|
<option value="Re">Reversal (Re)</option>
|
|
<option value="Sp">Special (Sp)</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<label>Defense</label>
|
|
<input type="number" name="attr_defense">
|
|
<select name="attr_defensepowers">
|
|
<option value="None">None</option>
|
|
<option value="Ba">Barrier (Ba)</option>
|
|
<option value="Cr">Combat Reflexes (Cr)</option>
|
|
<option value="De">Defend (De)</option>
|
|
<option value="Es">Energy Shield/Deflection (Es)</option>
|
|
<option value="Ip">Impervious (Ip)</option>
|
|
<option value="In">Invincible (In)</option>
|
|
<option value="Iv">Invulnerable (Iv)</option>
|
|
<option value="Ma">Mastermind (Ma)</option>
|
|
<option value="Rg">Regeneration (Rg)</option>
|
|
<option value="Su">Super Senses (Su)</option>
|
|
<option value="To">Toughness (To)</option>
|
|
<option value="Wp">Willpower (Wp)</option>
|
|
<option value="Sp">Special (Sp)</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<label>Damage</label>
|
|
<input type="number" name="attr_damage">
|
|
<select name="attr_damagepowers">
|
|
<option value="None">None</option>
|
|
<option value="Bf">Battle Fury (Bf)</option>
|
|
<option value="Cc">Close Combat Expert (Cc)</option>
|
|
<option value="Em">Empower (Em)</option>
|
|
<option value="En">Enhancement (En)</option>
|
|
<option value="Ew">Exploit Weakness (Ew)</option>
|
|
<option value="Le">Leadership (Le)</option>
|
|
<option value="Ow">Outwit (Ow)</option>
|
|
<option value="Px">Perplex (Px)</option>
|
|
<option value="Pc">Probability Control (Pc)</option>
|
|
<option value="Rc">Ranged Comabt Expert (Rc)</option>
|
|
<option value="Sc">Shape Change (Sc)</option>
|
|
<option value="So">Support (So)</option>
|
|
<option value="Sp">Special (Sp)</option>
|
|
</select>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
|
|
<script type="text/worker">
|
|
|
|
//The website that most of the bbcode version of dials come from uses . instead of 0 sometimes
|
|
function statNormalization(stat) {
|
|
if(stat=="."){
|
|
stat=0;
|
|
}
|
|
return stat;
|
|
}
|
|
|
|
//given the colour of the power from bbcode get our two letter power code
|
|
function powerLookup(powerMap, powerName) {
|
|
if(hasOwnProperty.call(powerMap, powerName.toLowerCase())){
|
|
return powerMap[powerName.toLowerCase()];
|
|
} else{
|
|
return "None";
|
|
}
|
|
}
|
|
|
|
//Add brackets to existing powers of return nothing if no power
|
|
function powerSet(values, attributeName) {
|
|
if(values[attributeName]!="None"){
|
|
return "(" + values[attributeName] + ")";
|
|
} else {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
//Takes BBcode from within the input box and parses it into the repeating click sections
|
|
on("clicked:populate", function(){
|
|
|
|
//Delete existing repeating sections
|
|
getSectionIDs("clicks", function(idArray) {
|
|
for(var id = 0; id < idArray.length; id++){
|
|
removeRepeatingRow("repeating_clicks_" + idArray[id]);
|
|
}
|
|
});
|
|
|
|
|
|
|
|
getAttrs(["dial"], function(dialCode){
|
|
var bbCode = dialCode.dial;
|
|
|
|
//Parse and set range
|
|
var rangeRegEx = /\Range:\ \[b\]([0-9]*)/;
|
|
var range = rangeRegEx.exec(bbCode);
|
|
setAttrs({
|
|
damage_current_max: range[1]
|
|
});
|
|
|
|
//Parse special powers and place them in powers box
|
|
var powersRegEx = /\((.*)\[\/b\](.*)/g;
|
|
var allPowers="";
|
|
while( match = powersRegEx.exec(bbCode)){
|
|
console.log("POWERS: " + match);
|
|
allPowers = allPowers + match[1] + match[2] + "\n";
|
|
}
|
|
setAttrs({
|
|
powers: allPowers
|
|
});
|
|
|
|
//Prepare RegEx and Power-Colour associations for dial populate
|
|
var regEx = /\[slot=([a-z|\-]*)]([0-9]*|\.)\[\/slot]/g;
|
|
var speedPowers = {
|
|
"green" : "Ch",
|
|
"lime" : "Eb",
|
|
"red" : "Fl",
|
|
"purple" : "Fb",
|
|
"brown" : "Hs",
|
|
"orange" : "Lc",
|
|
"blue" : "Mc",
|
|
"yellow" : "Pt",
|
|
"darkblue" : "Pl",
|
|
"gray" : "Rs",
|
|
"pink" : "Si",
|
|
"black" : "St",
|
|
"special" : "Sp",
|
|
"orange-circle" : "Fy",
|
|
"purple-circle" : "Sg",
|
|
"brown-circle" : "Ls",
|
|
"black-circle" : "Ni"
|
|
};
|
|
var attackPowers = {
|
|
"red" : "Bc",
|
|
"blue" : "In",
|
|
"darkblue" : "Pb",
|
|
"brown" : "Po",
|
|
"yellow" : "Pw",
|
|
"lime" : "Qu",
|
|
"purple" : "Sm",
|
|
"black" : "Se",
|
|
"gray" : "Tk",
|
|
"pink" : "Ps",
|
|
"orange" : "Ee",
|
|
"green" : "Ss",
|
|
"special" : "Sp",
|
|
"blue-circle" : "Sl",
|
|
"purple-circle" : "Sn",
|
|
"brown-circle" : "Sh",
|
|
"green-circle" : "Re"
|
|
};
|
|
var defensePowers = {
|
|
"green" : "Es",
|
|
"lime" : "Cr",
|
|
"red" : "Su",
|
|
"purple" : "Wp",
|
|
"brown" : "Ip",
|
|
"orange" : "To",
|
|
"blue" : "Ba",
|
|
"yellow" : "De",
|
|
"darkblue" : "Ma",
|
|
"gray" : "Iv",
|
|
"pink" : "In",
|
|
"black" : "Rg",
|
|
"special" : "Sp"
|
|
};
|
|
var damagePowers = {
|
|
"green" : "En",
|
|
"lime" : "Ew",
|
|
"red" : "Rc",
|
|
"purple" : "Cc",
|
|
"brown" : "Px",
|
|
"orange" : "Bf",
|
|
"blue" : "Pc",
|
|
"yellow" : "So",
|
|
"darkblue" : "Sc",
|
|
"gray" : "Le",
|
|
"pink" : "Em",
|
|
"black" : "Ow",
|
|
"special" : "Sp"
|
|
};
|
|
|
|
//Fill in each click with the stats and powers
|
|
while( match = regEx.exec(bbCode)){
|
|
|
|
var rowID = generateRowID();
|
|
var rowAttrs = {};
|
|
|
|
rowAttrs["repeating_clicks_" + rowID + "_speed"] = statNormalization(match[2]);
|
|
rowAttrs["repeating_clicks_" + rowID + "_speedpowers"] = powerLookup(speedPowers, match[1]);
|
|
|
|
match = regEx.exec(bbCode);
|
|
rowAttrs["repeating_clicks_" + rowID + "_attack"] = statNormalization(match[2]);
|
|
rowAttrs["repeating_clicks_" + rowID + "_attackpowers"] = powerLookup(attackPowers, match[1]);
|
|
|
|
match = regEx.exec(bbCode);
|
|
rowAttrs["repeating_clicks_" + rowID + "_defense"] = statNormalization(match[2]);
|
|
rowAttrs["repeating_clicks_" + rowID + "_defensepowers"] = powerLookup(defensePowers, match[1]);
|
|
|
|
match = regEx.exec(bbCode);
|
|
rowAttrs["repeating_clicks_" + rowID + "_damage"] = statNormalization(match[2]);
|
|
rowAttrs["repeating_clicks_" + rowID + "_damagepowers"] = powerLookup(damagePowers, match[1]);
|
|
|
|
setAttrs(rowAttrs);
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
//Set current click values based on click number using repeating section index
|
|
on("change:click", function() {
|
|
|
|
getAttrs(["click"], function(currentClick) {
|
|
getSectionIDs("clicks", function(idArray) {
|
|
getAttrs(["repeating_clicks_" + idArray[currentClick.click-1] +"_speed",
|
|
"repeating_clicks_" + idArray[currentClick.click-1] +"_attack",
|
|
"repeating_clicks_" + idArray[currentClick.click-1] +"_defense",
|
|
"repeating_clicks_" + idArray[currentClick.click-1] +"_damage",
|
|
"repeating_clicks_" + idArray[currentClick.click-1] +"_speedpowers",
|
|
"repeating_clicks_" + idArray[currentClick.click-1] +"_attackpowers",
|
|
"repeating_clicks_" + idArray[currentClick.click-1] +"_defensepowers",
|
|
"repeating_clicks_" + idArray[currentClick.click-1] +"_damagepowers"], function(values) {
|
|
var speed = "";
|
|
var attack = "";
|
|
var defense = "";
|
|
var damage = "";
|
|
|
|
if(currentClick.click <= idArray.length){
|
|
speed = values["repeating_clicks_" + idArray[currentClick.click-1] +"_speed"]
|
|
+ powerSet(values, "repeating_clicks_" + idArray[currentClick.click-1] +"_speedpowers");
|
|
attack = values["repeating_clicks_" + idArray[currentClick.click-1] +"_attack"]
|
|
+ powerSet(values, "repeating_clicks_" + idArray[currentClick.click-1] +"_attackpowers");
|
|
defense = values["repeating_clicks_" + idArray[currentClick.click-1] +"_defense"]
|
|
+ powerSet(values, "repeating_clicks_" + idArray[currentClick.click-1] +"_defensepowers");
|
|
damage = values["repeating_clicks_" + idArray[currentClick.click-1] +"_damage"]
|
|
+ powerSet(values, "repeating_clicks_" + idArray[currentClick.click-1] +"_damagepowers");
|
|
}
|
|
else{
|
|
speed = "0(KO)";
|
|
attack = "0(KO)";
|
|
defense = "0(KO)";
|
|
damage = "0(KO)";
|
|
}
|
|
setAttrs({
|
|
click_max: speed,
|
|
attack_current: attack,
|
|
attack_current_max: defense,
|
|
damage_current: damage
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|