Files
2024-06-03 13:15:14 -04:00

422 lines
20 KiB
HTML

<!--
Roll20 Character Sheet for *Zoo Mafia* by: Nerdarchy <https://zoo-mafia-rpg.gr8.com/>
Thanks to Jason Slanga and their "Cartel" character sheet which formed the basis this was created from
Sheet author: Necrot1c
-->
<div class="zoomafia">
<!--
================================================================================================
== HEADER ====================================================================================
================================================================================================
-->
<header>
<div class="identity">
<h1><span name="attr_character_name"></span></h1>
</div>
</header>
<!--
================================================================================================
== MAIN STATS PAGE ===========================================================================
================================================================================================
-->
<div class="statspage">
<main>
<div class="left">
<!-- STATS -->
<section>
<h2><span data-i18n="stats">Stats</span></h2>
<div class="stats">
<!-- awareness -->
<input type="hidden" name="attr_roll_awareness" value="&{template:zoomafia}" />
<label>
<input name="attr_awareness" type="number" min="-3" max="3" value="0" />
<button type="action" name="act_awareness"><span data-i18n="awareness">Awareness</span></button>
<span data-i18n="awareness_exp">(Perception or Senses)</span>
</label>
<!-- magnetism -->
<input type="hidden" name="attr_roll_magnetism" value="&{template:zoomafia}" />
<label>
<input name="attr_magnetism" type="number" min="-3" max="3" value="0" />
<button type="action" name="act_magnetism"><span data-i18n="magnetism">Magnetism</span></button>
<span data-i18n="magnetism_exp">(Appeal or Presence)</span>
</label>
<!-- moxie -->
<input type="hidden" name="attr_roll_moxie" value="&{template:zoomafia}" />
<label>
<input name="attr_moxie" type="number" min="-3" max="3" value="0" />
<button type="action" name="act_moxie"><span data-i18n="moxie">Moxie</span></button>
<span data-i18n="moxie_exp">(Grit or Willpower)</span>
</label>
<!-- precision -->
<input type="hidden" name="attr_roll_precision" value="&{template:zoomafia}" />
<label>
<input name="attr_precision" type="number" min="-3" max="3" value="0" />
<button type="action" name="act_precision"><span data-i18n="precision">Precision</span></button>
<span data-i18n="precision_exp">(Accuracy or Focus)</span>
</label>
<!-- sly -->
<input type="hidden" name="attr_roll_sly" value="&{template:zoomafia}" />
<label>
<input name="attr_sly" type="number" min="-3" max="3" value="0" />
<button type="action" name="act_sly"><span data-i18n="sly">Sly</span></button>
<span data-i18n="sly_exp">(Guile or Subtlety)</span>
</label>
<!-- wild -->
<input type="hidden" name="attr_roll_wild" value="&{template:zoomafia}" />
<label>
<input name="attr_wild" type="number" min="-3" max="3" value="0" />
<button type="action" name="act_wild"><span data-i18n="wild">Wild</span></button>
<span data-i18n="wild_exp">(Instinct or Physicality)</span>
</label>
</div>
</section>
<!-- End of STATS -->
<!-- XP / Ongoing and Forwards -->
<section>
<h2><span data-i18n="character">Character</span></h2>
<div class="character">
<label>
<span data-i18n="xp">XP</span><br />
<input name="attr_xp" type="number" min="0" max="10" value="0" />
</label>
<label>
<span data-i18n="ongoing">Ongoing</span><br />
<input name="attr_ongoing" type="number" min="-3" max="3" value="0" />
</label>
<label>
<span data-i18n="forwards">Forwards</span><br />
<input name="attr_forwards" type="number" min="-3" max="3" value="0" />
</label>
</div>
</section>
<!-- End of XP / Ongoing and Forwards -->
<!-- Health and Markers -->
<section>
<h2><span data-i18n="health">Health</span></h2>
<span class="health">
<input class="recflag" name="attr_health" type="hidden" value="10" />
<input type="radio" id="health10" name="attr_health" value="10" checked="checked" /><label for="health10">10</label>
<input type="radio" id="health9" name="attr_health" value="9" /><label for="health9">9</label>
<input type="radio" id="health8" name="attr_health" value="8" /><label for="health8">8</label>
<input type="radio" id="health7" name="attr_health" value="7" /><label for="health7">7</label>
<input type="radio" id="health6" name="attr_health" value="6" /><label for="health6">6</label><br /><br />
<input type="radio" id="health5" name="attr_health" value="5" /><label for="health5">5</label>
<input type="radio" id="health4" name="attr_health" value="4" /><label for="health4">4</label>
<input type="radio" id="health3" name="attr_health" value="3" /><label for="health3">3</label>
<input type="radio" id="health2" name="attr_health" value="2" /><label for="health2">2</label>
<input type="radio" id="health1" name="attr_health" value="1" /><label for="health1">1</label><br /><br />
<input type="radio" id="health0" name="attr_health" value="0" /><label for="health0" style="width:346px;">Unstable (-1 Ongoing)</label> <!-- width is added here since it is not working in the css -->
</span>
</section>
<hr />
<section>
<h2><span data-i18n="markers">Markers</span></h2>
<span class="markers">
<input class="recflag" name="attr_markers" type="hidden" value="10" />
<input type="radio" id="markers10" name="attr_markers" value="10" checked="checked" /><label for="markers10">10</label>
<input type="radio" id="markers9" name="attr_markers" value="9" /><label for="markers9">9</label>
<input type="radio" id="markers8" name="attr_markers" value="8" /><label for="markers8">8</label>
<input type="radio" id="markers7" name="attr_markers" value="7" /><label for="markers7">7</label>
<input type="radio" id="markers6" name="attr_markers" value="6" /><label for="markers6">6</label><br /><br />
<input type="radio" id="markers5" name="attr_markers" value="5" /><label for="markers5">5</label>
<input type="radio" id="markers4" name="attr_markers" value="4" /><label for="markers4">4</label>
<input type="radio" id="markers3" name="attr_markers" value="3" /><label for="markers3">3</label>
<input type="radio" id="markers2" name="attr_markers" value="2" /><label for="markers2">2</label>
<input type="radio" id="markers1" name="attr_markers" value="1" /><label for="markers1">1</label><br /><br />
</span>
</section>
<hr />
<section>
<h2><span data-i18n="equipment">Equipment</span></h2>
<fieldset class="repeating_equipment">
<div class="equipment">
<input type="text" name="attr_equipment" value="">
</div>
</fieldset>
</section>
<!-- End of Health and Markers -->
</div>
<!-- End of Left side -->
<!-- Right side -->
<div class="right">
<!--== MOVES ============================================================-->
<!-- Class moves, which are user editable -->
<section>
<h2><span data-i18n="class_moves">Class Moves</span></h2>
<fieldset class="repeating_moves">
<div class="move">
<header>
<input type="text" name="attr_movename" value="">
</header>
<main>
<textarea name="attr_movedesc" value=""></textarea>
</main>
</div>
</fieldset>
</section>
<!-- End of class moves -->
<!-- Basic moves from the core rules -->
<section>
<h2><span data-i18n="basic_moves">Basic Moves</span></h2>
<!-- Break it up -->
<div class="basicmove">
<header>
<span data-i18n="break_it_up">Break it up</span>
</header>
<main>
<summary>
<div data-i18n="break_it_up_html"></div>
</summary>
</main>
</div>
<!-- Bop -->
<div class="basicmove">
<header>
<span data-i18n="bop">Bop</span>
</header>
<main>
<summary>
<div data-i18n="bop_html"></div>
</summary>
</main>
</div>
<!-- Bring the heat -->
<div class="basicmove">
<header>
<span data-i18n="bring_the_heat">Bring the heat</span>
</header>
<main>
<summary>
<div data-i18n="bring_the_heat_html"></div>
</summary>
</main>
</div>
<!-- commit caper -->
<div class="basicmove">
<header>
<span data-i18n="commit_caper">Commit caper</span>
</header>
<main>
<summary>
<div data-i18n="commit_caper_html"></div>
</summary>
</main>
</div>
<!-- get out of a jam -->
<div class="basicmove">
<header>
<span data-i18n="get_out_of_a_jam">Get out of a jam</span>
</header>
<main>
<summary>
<div data-i18n="get_out_of_a_jam_html"></div>
</summary>
</main>
</div>
<!-- put your peepers to work -->
<div class="basicmove">
<header>
<span data-i18n="put_your_peepers_to_work">Put your peepers to work</span>
</header>
<main>
<summary>
<div data-i18n="put_your_peepers_to_work_html"></div>
</summary>
</main>
</div>
<!-- start spitting -->
<div class="basicmove">
<header>
<span data-i18n="start_spitting">Start spitting</span>
</header>
<main>
<summary>
<div data-i18n="start_spitting_html"></div>
</summary>
</main>
</div>
</section>
<!-- end section: MOVES -->
</div>
</main>
</div>
<!--
== end div: statspage ========================================================================
-->
<!--
================================================================================================
== SHEET WORKER SCRIPTS ======================================================================
================================================================================================
-->
<script type="text/worker">
//========================================================================
//== List of stats for rolling =========================================
// Custom Roll Pasing code thanks to GiGs
// https://app.roll20.net/forum/post/10681305/rolling-higher-than-and-lower-than-simultaneously
//========================================================================
const stats = [
'awareness',
'magnetism',
'moxie',
'precision',
'sly',
'wild'
];
stats.forEach(button => {
on(`clicked:${button}`, () => {
startRoll(`&{template:diceroll} {{charactername=@{character_name}}} {{name=${button}}} {{stat=@{${button}}}} {{roll=[[2d6 + @{${button}}[${button}] + @{forwards}[forwards]+ @{ongoing}[ongoing]]]}} {{roll2=[[1d6]]}} {{forwards=[[@{forwards}]]}} {{neutral=[[0]]}} {{ally=[[0]]}} {{enemy=[[0]]}} {{matching=[[0]]}}`, (diceroll) => {
const total = diceroll.results.roll.result
const dice = diceroll.results.roll.dice //This will be an array of the values rolled on all the dice
const neutral = dice[0] // First dice in roll is neutral
const ally = dice[1] // Second dice in roll is neutral
const enemy = diceroll.results.roll2.result // roll2 is the enemy dice
var forwards = diceroll.results.forwards.result // Pass the forwards through
var matching = 0 // set matching to zero just in case
// Set "matching" to a number to determine if we have doubles or tripples
if(neutral == ally && neutral == enemy)
{
matching = 4 // Tripples
} else if (neutral == ally) {
matching = 1 // Ally Double
} else if (neutral == enemy) {
matching = 2 // Enemy Double
} else if (ally == enemy) {
matching = 3 // Enemy+Ally Double
} else {
matching = 0 // No doubles found
}
// Forwards are used up on the roll and return to zero
setAttrs({ forwards: 0 })
finishRoll(
diceroll.rollId, // Return the computed values to be passed to rolltemplates.
{
roll: total,
neutral: neutral,
ally: ally,
enemy: enemy,
matching: matching
}
);
});
});
});
</script>
<!-- end div: zoomafia -->
<!--
================================================================================================
== ROLL TEMPLATES ============================================================================
================================================================================================
-->
<rolltemplate class="sheet-rolltemplate-diceroll">
<div class="sheet-zoomafia-rollbox">
<div class="sheet-header">
<div class="sheet-rolling">
<h2><span data-i18n="{{name}}"></span> <span style="float: right;">({{stat}})</span></h2>
</div>
</div>
<div class="sheet-result">
{{computed::roll}}
</div>
<div class="sheet-dice">
<div style="float: left; width: 33.33%;">Neutral<br /><br /><br />{{computed::neutral}}</div>
<div style="float: left; width: 33.33%;">Ally<br /><br /><br />{{computed::ally}}</div>
<div style="float: left; width: 33.33%;">Enemy<br /><br /><br />{{computed::enemy}}</div>
</div>
<!-- 12+ -->
{{#rollGreater() computed::roll 11}}
<div class="sheet-resulttxt-critresult">
<span data-i18n="default_critresult"></span>
</div>
{{/rollGreater() computed::roll 11}}
<!-- 10-11 -->
{{#rollBetween() computed::roll 10 11}}
<div class="sheet-resulttxt-hitresult">
<span data-i18n="default_hitresult"></span>
</div>
{{/rollBetween() computed::roll 10 11}}
<!-- 7-9 -->
{{#rollBetween() computed::roll 7 9}}
<div class="sheet-resulttxt-partialresult">
<span data-i18n="default_partialresult"></span>
</div>
{{/rollBetween() computed::roll 7 9}}
<!-- 6- -->
{{#rollLess() computed::roll 7}}
<div class="sheet-resulttxt-missresult">
<span data-i18n="default_missresult"></span>
</div>
{{/rollLess() computed::roll 7}}
{{#rollTotal() computed::matching 4}}
<div class="sheet-resulttxt-critresult">
<span data-i18n="tripple">Tripple</span>
</div>
{{/rollTotal() computed::matching 4}}
{{#rollBetween() computed::matching 1 3}}
<div class="sheet-resulttxt-hitresult">
<span data-i18n="double">Double</span>
</div>
{{/rollBetween() computed::matching 1 3}}
{{#rollTotal() computed::neutral 6}}
<div class="sheet-resulttxt-hitresult">
<span data-i18n="neutral_boss">Neutral Boss</span>
</div>
{{/rollTotal() computed::neutral 6}}
{{#rollTotal() computed::ally 6}}
<div class="sheet-resulttxt-critresult">
<span data-i18n="ally_boss">Ally boss</span>
</div>
{{/rollTotal() computed::ally 6}}
{{#rollTotal() computed::enemy 6}}
<div class="sheet-resulttxt-missresult">
<span data-i18n="enemy_boss">Enemy Boss</span>
</div>
{{/rollTotal() computed::enemy 6}}
</div>
</div>
</rolltemplate>