Files
roll20-character-sheets/FIST/FIST.html
T
William Barker 4f5518e8f7 FIST [New Sheet]
FIST by CLAYMORE- new sheet
2025-05-14 21:02:54 -04:00

227 lines
9.9 KiB
HTML

<div class="sheet-container1">
<!-- Banner -->
<div class="sheet-logo">
<img
src="https://github.com/Roll20/roll20-character-sheets/blob/master/FIST/FIST_logo.png?raw=true"
style="width: 240px; height: 160px; max-height: 220px; margin: 0px 0px 0px 20px;">
<label class="sheet-profileLabel" style="width: 260px; margin: 24px 0px 4px 0px;" data-i18n="info-u">INFO</label>
<textarea name="attr_info" style="height: 478px;"></textarea>
<div style='display: inline-block; vertical-align: top; width: 260px; height: 388px; margin: 2px 0px 0px 0px; border: 1px solid LightGray;'>
<img name="attr_character_avatar" title="ID Photograph: 258w x 386h pixels" style="width: 258px; height: 386px; border: 0px solid black; background: white; margin: 0px 0px 0px 4px;">
</div>
</div>
<div class="sheet-profile">
<label class="sheet-profileTitle" data-i18n="operativeProfile-u">OPERATIVE PROFILE</label>
<label class="sheet-profileLabel" data-i18n="codename-u">CODENAME</label>
<input type="text" name="attr_codename" class="sheet-profileInput" value="">
<label class="sheet-profileLabel" data-i18n="pronouns-u">PRONOUNS</label>
<input type="text" name="attr_pronouns" class="sheet-profileInput" style="width: 126px;" value="">
<label class="sheet-profileLabel" style="width: 45px;" data-i18n="role-u">ROLE</label>
<input type="text" name="attr_role" class="sheet-profileInput" style="width: 494px;" value="">
<label class="sheet-profileLabel" style="width: 330px; height: 26px; padding: 6px 0px 4px 0px; margin: 0px 0px 8px 0px;" data-i18n="traits-u">TRAITS</label>
<textarea name="attr_traits" style="height: 220px; width: 99%;"></textarea>
<label class="sheet-profileLabel" style="width: 330px; height: 26px; border-top: 0px; padding-top: 0px;" data-i18n="inventory-u">INVENTORY</label>
<textarea name="attr_inventory" style="height: 220px; width: 99%;"></textarea>
<div style="color: White; background-color: Black; width=99%; margin-top: 4px; height: 192px">
<button class="btn sheet-skillName" type="action" name="act_forceful" title="Forceful Roll">
<label class="sheet-skillName" data-i18n="forceful-u">FORCEFUL</label></button>
<input type="text" name="attr_forceful" class="sheet-level" value="0" data-i18n-title="Forceful points">
<button class="btn sheet-skillName" type="action" name="act_tactical" title="Tactical Roll">
<label class="sheet-skillName" data-i18n="tactical-u">TACTICAL</label></button>
<input type="text" name="attr_tactical" class="sheet-level" value="0" data-i18n-title="Tactical points">
<label class="sheet-skillDefnLeft" data-i18n="forcefulDefn-c">Strength, brute force, intimidation</label>
<label class="sheet-skillDefnRight" data-i18n="tacticalDefn-c">Knowledge, skill, intellect</label>
<button class="btn sheet-skillName" type="action" name="act_creative" title="Creative Roll">
<label class="sheet-skillName" data-i18n="creative-u">CREATIVE</label></button>
<input type="text" name="attr_creative" class="sheet-level" value="0" data-i18n-title="Creative points">
<button class="btn sheet-skillName" type="action" name="act_reflexive" title="Reflexive Roll">
<label class="sheet-skillName" data-i18n="reflexive-u">REFLEXIVE</label></button>
<input type="text" name="attr_reflexive" class="sheet-level" value="0" data-i18n-title="Reflexive points">
<label class="sheet-skillDefnLeft" data-i18n="creativeDefn-c">Diplomacy, deceit, psionics</label>
<label class="sheet-skillDefnRight" data-i18n="reflexiveDefn-c">Precision, dexterity, aim</label>
</div>
<div style="color: White; background-color: Black; width=99%; margin-top: 10px; height: 192px">
<label class="sheet-AuxName" style="border-top: 12px solid Black; padding: 5px;" data-i18n="armor-u">ARMOR</label>
<input type="text" name="attr_armor" class="sheet-level" value="0" data-i18n-title="Armor value">
<label class="sheet-AuxName" style="border-top: 12px solid Black; padding: 5px;" data-i18n="maxHP-u">MAX HP</label>
<input type="text" name="attr_maxHP" class="sheet-level" value="6" data-i18n-title="Maximum Hit Points">
<label class="sheet-skillDefnLeft" data-i18n="armorDefn-c">Subtract from damage taken</label>
<label class="sheet-skillDefnRight" data-i18n="maxHPDefn-c">Capacity to take damage</label>
<label class="sheet-AuxName" style="border-top: 12px solid Black; padding: 5px;" data-i18n="warDice-u">WAR DICE</label>
<input type="text" name="attr_warDice" class="sheet-level" value="0" data-i18n-title="War Dice available">
<label class="sheet-AuxName" style="width: 190px; border-top: 12px solid Black; padding: 5px 15px 5px 5px;" data-i18n="HP-u">HP</label>
<input type="text" name="attr_HP" class="sheet-level" value="6" data-i18n-title="Hit Points">
<label class="sheet-skillDefnLeft" data-i18n="warDiceDefn-c">Luck and grit, spend for +1D6</label>
<label class="sheet-skillDefnRight" data-i18n="HPDefn-c">Operative death occurs at 0 HP</label>
</div>
</div>
</div>
<!-- Roll Templates -->
<rolltemplate class="sheet-rolltemplate-initiative">
<div class="container">
<div><h1>Initiative *for* {{name}}</h1></div>
<div class="arrow-container"><div class="arrow-right"></div></div>
<div class="rowcolor"><span class="tcat">Rolled: </span>{{computed::roll1}}</div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-warDie">
<div class="container">
<div><h1>War Die *for* {{name}}: {{Roll}}</h1></div>
</div>
</rolltemplate>
<rolltemplate class="sheet-rolltemplate-check">
<div class="container">
<div><h1>{{name}}{{#SkillName}} *for* {{SkillName}}{{/SkillName}}</h1></div>
<div class="arrow-container"><div class="arrow-right"></div></div>
{{#Check}}
<div class="rowcolor"><span class="tcat">Check: </span>{{computed::Roll}}</div>
{{#rollLess() computed::Roll 7 }}
<div class="rowcolor"><span class="tcat">Result: </span>Failure</div>
{{/rollLess() computed::Roll 7 }}
{{#rollBetween() computed::Roll 7 9}}
<div class="rowcolor"><span class="tcat">Result: </span>Partial Success</div>
{{/rollBetween() computed::Roll 7 9}}
{{#rollBetween() computed::Roll 10 11}}
<div class="rowcolor"><span class="tcat">Result: </span>Success</div>
{{/rollBetween() computed::Roll 10 11}}
{{#rollGreater() computed::Roll 11}}
<div class="rowcolor"><span class="tcat">Result: </span>Success<span style="color: Red; font-weight: bold; margin-left: -4px" title="Hover over dice results to determine if DOUBLE SIXES - an Ultra Success! - has been rolled">*</span></div>
{{/rollGreater() computed::Roll 11}}
{{/Check}}
{{#DL}}
<div class="rowcolor"><span class="tcat">DL: </span>{{DL}}</div>
{{#rollLess() computed::Roll DL }}
<div class="rowcolor"><span class="tcat">Result: </span>Failure</div>
{{/rollLess() computed::Roll DL }}
{{#^rollLess() computed::Roll DL }}
<div class="rowcolor"><span class="tcat">Result: </span>Success!</div>
{{/^rollLess() computed::Roll DL }}
{{/DL}}
{{#Damage}}
<div class="rowcolor"><span class="tcat" data-i18n-title="possible damage">Damage: </span>{{Damage}}</div>
{{/Damage}}
</div>
</rolltemplate>
<script type="text/worker">
on("sheet:opened", function(eventInfo){
getAttrs(["setupDone"], function(pvalue) {
console.log("Hello there");
let SetupDone=parseInt(pvalue.setupDone);
console.log("setupdone: "+SetupDone );
if (SetupDone==0){
console.log("Do setup");
setAttrs({setupDone:1});
}
});
});
on("clicked:forceful clicked:tactical clicked:creative clicked:reflexive", function(eventInfo) {
let TriggerName = eventInfo.triggerName;
let Name = eventInfo.triggerName.substring(8);
//console.log(" TriggerName: " + TriggerName);
//console.log(" Name: " + Name);
//console.log(" eventInfo: " + JSON.stringify(eventInfo));
getAttrs(["warDice", "forceful","tactical","creative","reflexive"], function(values) {
let WarDie = parseInt(values.warDice)||0;
let Forceful = parseInt(values.forceful)||0;
let Tactical = parseInt(values.tactical)||0;
let Creative = parseInt(values.creative)||0;
let Reflexive = parseInt(values.reflexive)||0;
let WarDiceQuery = "";
let AttributeName = "No Name";
switch (Name) {
case "forceful": AttributeName = "Forceful"; break;
case "tactical": AttributeName = "Tactical"; break;
case "creative": AttributeName = "Creative"; break;
case "reflexive": AttributeName = "Reflexive"; break;
default:
AttributeName = "No Name";
}
//console.log(" Name: " + Name + " AttributeName " + AttributeName);
if (WarDie > 0) { WarDiceQuery = "?{WarDice|No, 0|Yes, 1}d6!!"; }
const rollBase = "&{template:check} {{name=@{character_name} *for* " + AttributeName + "}} {{Check=[[1]]}} {{Roll=[[2d6+@{"+Name+"}+"+WarDiceQuery+"]]}}";
//console.log(" rollBase = " + rollBase);
startRoll(rollBase, rollResult => {
//console.log(" Roll Dice " + rollResult.results.Roll.dice );
//console.log(" Roll Result " + rollResult.results.Roll.result );
//console.log(" Roll Expression " + rollResult.results.Roll.expression );
//console.log(" stringify: " + JSON.stringify(rollResult.results.Roll));
//console.log(" rollBase: " + rollBase);
let numDice = rollResult.results.Roll.dice.length;
//console.log(" numDice: " + numDice);
let computed = rollResult.results.Roll.result; // Not altering total, just want to check if War Dice were used
if ((WarDie > 0) && (numDice == 3)) {
WarDie -= 1;
setAttrs({
warDice: WarDie
});
}
finishRoll(
rollResult.rollId
);
});
});
});
on('clicked:initiative', (info) => {
startRoll("&{template:initiative} {{name=@{character_name}}} {{roll1=[[2d10+@{prowess} &{tracker}]]}}", (results) => {
const total = results.results.roll1.result;
const computed = total;
setAttrs({ initiative: computed });
finishRoll(
results.rollId,
{
roll1: computed
}
);
});
});
</script>