Files
roll20-character-sheets/Heroclix/clixSheet.html
T
2024-06-03 13:15:14 -04:00

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>