mirror of
https://github.com/Nighthawk42/roll20-character-sheets.git
synced 2026-09-07 23:52:29 +00:00
Merge pull request #7987 from dtsm12/Maximum-Apocalypse-v6
Maximum apocalypse v6
This commit is contained in:
@@ -11,8 +11,11 @@ Could do with more efficient class definition
|
||||
|
||||
.sheet-has-faith,
|
||||
.sheet-has-reflex,
|
||||
.sheet-has-reflex,
|
||||
.sheet-has-collar,
|
||||
input.sheet-has-collar-check[value="1"] ~ .sheet-starving .sheet-hunger-desc-left,
|
||||
input.sheet-has-collar-check[value="1"] ~ .sheet-emaciated .sheet-hunger-desc-left,
|
||||
.sheet-has-luck-stars,
|
||||
.sheet-has-instinctive,
|
||||
.sheet-has-moving-target,
|
||||
.sheet-has-giant-genetics,
|
||||
.sheet-tightening-the-belt {
|
||||
@@ -21,7 +24,9 @@ Could do with more efficient class definition
|
||||
|
||||
input.sheet-has-faith-check[value="1"] ~ .sheet-has-faith,
|
||||
input.sheet-has-reflex-check[value="1"] ~ .sheet-has-reflex,
|
||||
input.sheet-has-collar-check[value="1"] ~ .sheet-has-collar,
|
||||
input.sheet-has-luck-stars-check[value="1"] ~ .sheet-has-luck-stars,
|
||||
input.sheet-has-instinctive-check[value="1"] ~ .sheet-has-instinctive,
|
||||
input.sheet-has-moving-target-check[value="1"] ~ .sheet-has-moving-target,
|
||||
input.sheet-has-giant-genetics-check[value="1"] ~ .sheet-has-giant-genetics,
|
||||
input.sheet-tightening-the-belt-check[value="1"] ~ .sheet-tightening-the-belt {
|
||||
@@ -599,12 +604,44 @@ input[type=number].sheet-armor-cp {
|
||||
display: grid;
|
||||
grid-area: build;
|
||||
grid-template-columns: 45px 45px;
|
||||
grid-template-rows: 32px 40px 40px;
|
||||
grid-template-rows: 32px 40px 30px 40px;
|
||||
grid-template-areas: "build-labels build-labels"
|
||||
"build-input dc-input"
|
||||
". dc-input-label";
|
||||
". dc-input-label"
|
||||
"food-req-label food-req";
|
||||
}
|
||||
|
||||
.sheet-food {
|
||||
font-size: 10px;
|
||||
font-weight: bold;
|
||||
font-family: 'Blinker';
|
||||
text-transform: uppercase;
|
||||
line-height: 11px;
|
||||
}
|
||||
|
||||
.sheet-food-req-label {
|
||||
grid-area: food-req-label;
|
||||
padding-right: 5px;
|
||||
align-self: center;
|
||||
text-align: end;
|
||||
}
|
||||
|
||||
.sheet-food-req {
|
||||
grid-area: food-req;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
input[type=number].sheet-food-req {
|
||||
width: 24px !important;
|
||||
height: 30px !important;
|
||||
border: 1px solid #000000;
|
||||
font-family: Bangers;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.sheet-build-labels {
|
||||
grid-area: build-labels;
|
||||
align-self: end;
|
||||
@@ -657,7 +694,6 @@ input[type=number].sheet-dc-lozenge {
|
||||
}
|
||||
|
||||
.sheet-dc-lozenge {
|
||||
background-color: #ffffff;
|
||||
border-style: solid;
|
||||
border-color: #000000;
|
||||
border-width: 3px 3px 3px 0px;
|
||||
@@ -679,7 +715,6 @@ input[type=number].sheet-dc-lozenge {
|
||||
|
||||
.sheet-health-lozenge {
|
||||
text-align:center;
|
||||
background-color: #ffffff;
|
||||
border: 3px solid black;
|
||||
border-radius: 10px;
|
||||
-moz-border-radius: 10px;
|
||||
@@ -750,7 +785,6 @@ input[type=number].sheet-health-current {
|
||||
|
||||
.sheet-init-lozenge {
|
||||
text-align:center;
|
||||
background-color: #ffffff;
|
||||
border: 3px solid black;
|
||||
border-radius: 10px;
|
||||
-moz-border-radius: 10px;
|
||||
@@ -857,14 +891,13 @@ input[type=number].sheet-init- {
|
||||
border-top: 2px dashed #000000;
|
||||
grid-area: prof-desc;
|
||||
grid-column-gap: 5px;
|
||||
grid-template-columns: 29px 10% 70%;
|
||||
grid-template-rows: 20px 20px 20px 20px 20px 80px;
|
||||
grid-template-areas:"prof-circle prof-code-not prof-desc-not"
|
||||
"prof-circle prof-code-p prof-desc-p"
|
||||
"prof-circle prof-code-s prof-desc-s"
|
||||
"prof-circle prof-code-t prof-desc-t"
|
||||
"prof-circle prof-code-m prof-desc-m"
|
||||
"prof-text prof-text prof-text";
|
||||
grid-template-columns: 28px 20px 73px 1fr;
|
||||
grid-template-rows: 20px 20px 20px 20px 20px;
|
||||
grid-template-areas:"prof-circle prof-code-not prof-desc-not prof-text"
|
||||
"prof-circle prof-code-p prof-desc-p prof-text"
|
||||
"prof-circle prof-code-s prof-desc-s prof-text"
|
||||
"prof-circle prof-code-t prof-desc-t prof-text"
|
||||
"prof-circle prof-code-m prof-desc-m prof-text";
|
||||
}
|
||||
|
||||
.sheet-prof-desc .sheet-code {
|
||||
@@ -873,12 +906,10 @@ input[type=number].sheet-init- {
|
||||
|
||||
.sheet-prof-text {
|
||||
grid-area: prof-text;
|
||||
border-top: 2px dashed #000000;
|
||||
font-size: 10px;
|
||||
font-weight: bold;
|
||||
font-family: 'Blinker';
|
||||
padding-left: 15px;
|
||||
width: 145px;
|
||||
}
|
||||
|
||||
|
||||
@@ -947,7 +978,6 @@ input[type=number].sheet-init- {
|
||||
|
||||
.sheet-lozenge {
|
||||
text-align:center;
|
||||
background-color: #fff;
|
||||
border: 1px solid black;
|
||||
border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
@@ -1368,7 +1398,7 @@ input[type=number].sheet-table-cell {
|
||||
display: grid;
|
||||
grid-column-gap: 5px;
|
||||
grid-template-columns: 3% 8.5% 3% 8.5% 3% 8.5% 3% 8.5% 3% 8.5% 3% 8.5% 3% 8.5% 3% 8.5%;
|
||||
grid-template-rows: 32px 32px 32px 32px 32px 32px 32px 32px;
|
||||
grid-template-rows: 32px 32px 32px 32px 32px 32px 32px 32px 32px;
|
||||
grid-template-areas: ". skill-banner skill-banner skill-banner skill-banner skill-banner skill-banner skill-banner skill-banner skill-banner skill-banner skill-banner skill-banner skill-banner skill-banner ."
|
||||
"skill-str skill-str skill-for skill-for skill-agi skill-agi skill-int skill-int skill-ins skill-ins skill-cha skill-cha skill-fs skill-fs skill-bs skill-bs"
|
||||
"athletics-prof athletics-label . . archery-prof archery-label academics-prof academics-label crafting-prof crafting-label animalken-prof animalken-label blades-prof blades-label firearms-prof firearms-label"
|
||||
@@ -1376,15 +1406,15 @@ input[type=number].sheet-table-cell {
|
||||
"prof-desc prof-desc prof-desc prof-desc palming-prof palming-label medicine-prof medicine-label navigation-prof navigation-label command-prof command-label clubs-prof clubs-label . ."
|
||||
"prof-desc prof-desc prof-desc prof-desc stealth-prof stealth-label science-prof science-label perception-prof perception-label interrogate-prof interrogate-label . . . ."
|
||||
"prof-desc prof-desc prof-desc prof-desc wrangle-prof wrangle-label techuse-prof techuse-label survival-prof survival-label intimidate-prof intimidate-label . luck-label luck-use-label luck-use-label"
|
||||
"prof-desc prof-desc prof-desc prof-desc . . . . tracking-prof tracking-label . . . luck-input luck-max luck-current"
|
||||
"prof-desc prof-desc prof-desc prof-desc roll-mod roll-mod roll-mod roll-mod xenotechuse-prof xenotechuse-label . . . luck-base-label luck-max-label luck-current-label";
|
||||
"lift-prof lift-label . . contort-prof contort-label remember-prof remember-label tracking-prof tracking-label . . . luck-input luck-max luck-current"
|
||||
"pry-prof pry-label . . throw-prof throw-label . . xenotechuse-prof xenotechuse-label . . . luck-base-label luck-max-label luck-current-label"
|
||||
". . . . . . . . . . . . roll-mod roll-mod roll-mod roll-mod";
|
||||
|
||||
}
|
||||
|
||||
.sheet-sp-stats {
|
||||
grid-area: sp-stats;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 3fr 1fr 3fr 2fr 4fr;
|
||||
grid-template-rows: 11px 5px 1fr;
|
||||
grid-template-areas: "sp-stats-ltl sp-stats-ltl sp-stats-ltl sp-stats-banner sp-stats-ltr sp-stats-ltr"
|
||||
"sp-stats-lbl sp-stats-lbl sp-stats-lbl sp-stats-banner sp-stats-lbr sp-stats-lbr"
|
||||
@@ -1661,6 +1691,17 @@ input[type=number].sheet-table-cell {
|
||||
.sheet-xenotechuse-prof { grid-area: xenotechuse-prof; }
|
||||
.sheet-xenotechuse-label { grid-area: xenotechuse-label; }
|
||||
|
||||
.sheet-contort-prof { grid-area: contort-prof; }
|
||||
.sheet-contort-label { grid-area: contort-label; }
|
||||
.sheet-lift-prof { grid-area: lift-prof; }
|
||||
.sheet-lift-label { grid-area: lift-label; }
|
||||
.sheet-pry-prof { grid-area: pry-prof; }
|
||||
.sheet-pry-label { grid-area: pry-label; }
|
||||
.sheet-remember-prof { grid-area: remember-prof; }
|
||||
.sheet-remember-label { grid-area: remember-label; }
|
||||
.sheet-throw-prof { grid-area: throw-prof; }
|
||||
.sheet-throw-label { grid-area: throw-label; }
|
||||
|
||||
.sheet-prof-code-not { grid-area: prof-code-not; }
|
||||
.sheet-prof-desc-not { grid-area: prof-desc-not; }
|
||||
.sheet-prof-code-p { grid-area: prof-code-p; }
|
||||
|
||||
@@ -702,9 +702,51 @@
|
||||
<div class="prof-desc-m"><label data-i18n="master">Master.</label></div>
|
||||
<div class="prof-text"><span data-i18n="proficiency_text">Skills that are NOT PROFICIENT start as DISADVANTAGE and cannot have ADVANTAGE when rolled.</span></div>
|
||||
</div>
|
||||
<div class="contort-prof prof">
|
||||
<input type="hidden" name="attr_contort"/>
|
||||
</div>
|
||||
<div class="contort-label">
|
||||
<button value="&{template:maxapoc} {{subtitle=^{contort}}} {{profdesc=^{na}}} {{firstdegree1=[[@{contort}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{contort}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{contort}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{contort}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{contort}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{contort}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
|
||||
<span data-i18n="contort">Contort.</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="lift-prof prof">
|
||||
<input type="hidden" name="attr_lift"/>
|
||||
</div>
|
||||
<div class="lift-label">
|
||||
<button value="&{template:maxapoc} {{subtitle=^{lift}}} {{profdesc=^{na}}} {{firstdegree1=[[@{lift}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{lift}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{lift}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{lift}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{lift}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{lift}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
|
||||
<span data-i18n="lift">Lift.</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="pry-prof prof">
|
||||
<input type="hidden" name="attr_pry"/>
|
||||
</div>
|
||||
<div class="pry-label">
|
||||
<button value="&{template:maxapoc} {{subtitle=^{pry}}} {{profdesc=^{na}}} {{firstdegree1=[[@{pry}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{pry}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{pry}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{pry}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{pry}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{pry}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
|
||||
<span data-i18n="pry">Pry.</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="remember-prof prof">
|
||||
<input type="hidden" name="attr_remember"/>
|
||||
</div>
|
||||
<div class="remember-label">
|
||||
<button value="&{template:maxapoc} {{subtitle=^{remember}}} {{profdesc=^{na}}} {{firstdegree1=[[@{remember}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{remember}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{remember}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{remember}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{remember}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{remember}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
|
||||
<span data-i18n="remember">Remember.</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="throw-prof prof">
|
||||
<input type="hidden" name="attr_throwing"/>
|
||||
</div>
|
||||
<div class="throw-label">
|
||||
<button value="&{template:maxapoc} {{subtitle=^{throw}}} {{profdesc=^{na}}} {{firstdegree1=[[@{throwing}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{throwing}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{throwing}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{throwing}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{throwing}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{throwing}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="skill-label blank-roll-button">
|
||||
<span data-i18n="throw">Throw.</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="roll-modifiers">
|
||||
<span class="label" data-i18n="threshold_modifier_text">Threshold modifier prompt on every roll ?</span>
|
||||
<input type="checkbox" value="?{Threshold Modifier|0}" name="attr_threshold_modifier"/>
|
||||
<!--span class="label">Use API for rolls (Requires Pro Account) ?</span>
|
||||
<input type="checkbox" value="!ma roll" name="attr_api_use"/-->
|
||||
</div>
|
||||
<div class="luck-label"><span data-i18n="luck" class="banner">Luck.</span><span class="dark code"> (L)</span></div>
|
||||
<div class="luck-use-label">
|
||||
@@ -741,7 +783,7 @@
|
||||
<div class="armor-shield">
|
||||
<div class="shield-label subheading"><span data-i18n="armor">Armor.</span></div>
|
||||
<div class="shield-input-max">
|
||||
<input class="shield shield-max" type="number" name="attr_armor_max"/>
|
||||
<input class="shield shield-max" type="number" name="attr_armor_max" readonly/>
|
||||
</div>
|
||||
<div class="shield-input-max-label self-center shield-label">
|
||||
<span data-i18n="max">Max.</span>
|
||||
@@ -787,6 +829,13 @@
|
||||
<span class="dc-input-label">DC</span><br/>
|
||||
<span class="dc-input-label" data-i18n="modifier">Modifier.</span>
|
||||
</div>
|
||||
<div class="food food-req-label">
|
||||
<span data-i18n="required_food">Required Food.</span><span>:</span>
|
||||
</div>
|
||||
<div class="food food-req">
|
||||
<input class="food-req" type="number" name="attr_food_req" readonly/>
|
||||
<span data-i18n="unit(s)">Unit(s).</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="health">
|
||||
<div class="stat-labels health-labels">
|
||||
@@ -809,7 +858,12 @@
|
||||
<div class="initiative">
|
||||
<div class="stat-labels init-labels">
|
||||
<div class="subheading"><span data-i18n="initiative" class="subheading">Initiative.</span></div>
|
||||
<div class="footing"><span class="footing">(AGI + LUCK) / 10</span></div>
|
||||
<div class="footing">
|
||||
<input type="hidden" name="attr_has_instinctive" class="has-instinctive-check"/>
|
||||
<span class="footing">(AGI + LUCK</span>
|
||||
<span class="footing has-instinctive"> + INS</span>
|
||||
<span class="footing">) / 10</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="init">
|
||||
<input class="init-lozenge" type="number" name="attr_init" width="18" readonly/>
|
||||
@@ -1048,8 +1102,9 @@
|
||||
<input name="attr_attack_threshold_half" class="attack-cell attack-threshold-q table-cell" type="number"/>
|
||||
<input name="attr_attack_ammo" class="attack-cell attack-ammo table-cell" type="number"/>
|
||||
<input name="attr_attack_traits" class="attack-cell attack-traits table-cell" type="text"/>
|
||||
<input name="attr_attack_unreliable" type="hidden" value="0"/>
|
||||
<input name="attr_attack_cp" class="attack-cell attack-cp table-cell" type="number"/>
|
||||
<button value="&{template:maxapoc} {{subtitle=@{attack_weapon}}} {{firstdegree1=[[@{attack_threshold}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{attack_threshold}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{attack_threshold}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{attack_threshold}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{attack_threshold}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{attack_threshold}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button attack-roll">
|
||||
<button value="&{template:maxapoc} {{unreliable=[[@{attack_unreliable}]]}} {{subtitle=@{attack_weapon}}} {{firstdegree1=[[@{attack_threshold}+@{roll_thresh_mod}+1]]}} {{firstdegree=[[@{attack_threshold}+@{roll_thresh_mod}]]}} {{seconddegree1=[[floor((@{attack_threshold}+@{roll_thresh_mod})/2)+1]]}} {{seconddegree=[[floor((@{attack_threshold}+@{roll_thresh_mod})/2)]]}} {{thirddegree1=[[floor((@{attack_threshold}+@{roll_thresh_mod})/4)+1]]}} {{thirddegree=[[floor((@{attack_threshold}+@{roll_thresh_mod})/4)]]}} {{profroll=[[@{roll_perc}]]}} {{mod=[[@{mod_query}]]}} {{absmod=[[abs(@{mod_query})]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button attack-roll">
|
||||
<span data-i18n="attack">Attack.</span>
|
||||
</button>
|
||||
<button value="&{template:maxapoc} {{subtitle=@{attack_weapon}}} {{dmgroll=[[@{attack_dc}]]}} {{title=@{character_name}}}" type="roll" class="blank-roll-button damage-roll">
|
||||
@@ -1165,14 +1220,21 @@
|
||||
</div>
|
||||
<div class="hunger section">
|
||||
<div class="hunger-banner banner"><span data-i18n="hunger" class="banner">Hunger.</span></div>
|
||||
<input type="hidden" name="attr_starving_threshold"/>
|
||||
<input type="hidden" name="attr_starving" class="starving-check"/>
|
||||
<input type="hidden" name="attr_has_collar" class="has-collar-check"/>
|
||||
<div class="starving hunger-desc-left table-head-small">
|
||||
<span>1/4 FOR</span>
|
||||
<input type="hidden" name="attr_has_tightening_the_belt" class="tightening-the-belt-check"/>
|
||||
<span class="tightening-the-belt"> +4 </span>
|
||||
<span> = </span>
|
||||
</div>
|
||||
<div class="starving has-collar hunger-desc-left table-head-small">
|
||||
<span data-i18n="na">N/A</span> (<span data-i18n="collar">Collar</span>)
|
||||
<span> = </span>
|
||||
</div>
|
||||
<div class="starving hunger-desc-right table-head-small"><span data-i18n="starving">Starving.</span></div>
|
||||
<input type="hidden" name="attr_emaciated_threshold"/>
|
||||
<input type="hidden" name="attr_emaciated" class="emaciated-check"/>
|
||||
<div class="emaciated hunger-desc-left table-head-small">
|
||||
<span>1/2 FOR </span>
|
||||
@@ -1180,6 +1242,10 @@
|
||||
<span class="tightening-the-belt"> +8 </span>
|
||||
<span> = </span>
|
||||
</div>
|
||||
<div class="emaciated has-collar hunger-desc-left table-head-small">
|
||||
<span data-i18n="na">N/A</span> (<span data-i18n="collar">Collar</span>)
|
||||
<span> = </span>
|
||||
</div>
|
||||
<div class="emaciated hunger-desc-right table-head-small"><span data-i18n="emaciated">Emaciated.</span></div>
|
||||
<input type="hidden" name="attr_dead" class="dead-check"/>
|
||||
<div class="dead hunger-desc-left table-head-small">FOR = </div>
|
||||
@@ -1251,13 +1317,21 @@
|
||||
|
||||
const multistats = {
|
||||
luck_uses_max: {rule: 'luck_uses', attributes: ['luck', 'has_faith', "has_luck_stars"], modifier: 10},
|
||||
contort: {rule: 'contort', attributes: ['agi', 'build_dc']},
|
||||
lift: {rule: 'sum', attributes: ['str']},
|
||||
pry: {rule: 'sum', attributes: ['str']},
|
||||
remember: {rule: 'sum', attributes: ['int']},
|
||||
throwing: {rule: 'sum', attributes: ['agi']},
|
||||
build: {rule: 'build', attributes: ['str', 'for', 'has_giant_genetics'], modifier: 1},
|
||||
build_dc: {rule: 'build_dc', attributes: ['build']},
|
||||
food_req: {rule: 'food_req', attributes: ['build_dc']},
|
||||
health_max: {rule: 'special_stat', attributes: ['build'], modifier: 5},
|
||||
starving: {rule: 'hungry', attributes: ['hunger', 'for_quarter', 'has_tightening_the_belt'], modifier: 4},
|
||||
emaciated: {rule: 'hungry', attributes: ['hunger', 'for_half', 'has_tightening_the_belt'], modifier: 8},
|
||||
starving: {rule: 'hungry', attributes: ['hunger', 'starving_threshold']},
|
||||
starving_threshold: {rule: 'hunger_threshold', attributes: ['for_quarter', 'has_tightening_the_belt', 'has_collar'], modifier: 4},
|
||||
emaciated: {rule: 'hungry', attributes: ['hunger', 'emaciated_threshold']},
|
||||
emaciated_threshold: {rule: 'hunger_threshold', attributes: ['for_half', 'has_tightening_the_belt', 'has_collar'], modifier: 8},
|
||||
dead: {rule: 'greater_than_or_equal', attributes: ['hunger', 'for']},
|
||||
init: {rule: 'init', values: -1, attributes: ['agi', 'luck', 'init_temp', 'encumbered', 'shaken', 'acute', 'starving', 'emaciated', 'has_moving_target'], modifier: 10},
|
||||
init: {rule: 'init', values: -1, attributes: ['agi', 'luck', 'init_temp', 'encumbered', 'shaken', 'acute', 'starving', 'emaciated', 'has_moving_target', 'has_instinctive', 'ins'], modifier: 10},
|
||||
init_5: {rule: 'add', attributes: ['init'], modifier: -5},
|
||||
init_10: {rule: 'add', attributes: ['init'], modifier: -10},
|
||||
init_15: {rule: 'add', attributes: ['init'], modifier: -15},
|
||||
@@ -1272,7 +1346,8 @@ const multistats = {
|
||||
encum_max: {rule: 'add', attributes: ['build'], modifier: 200},
|
||||
cp_total: {rule: 'sum', attributes: ['cp_inferior', 'cp', 'cp_superior', 'cx']},
|
||||
encum: {rule: 'sum', attributes: ['armor_cp_total', 'attack_cp_total', 'gear_cp_total', 'cp_total']},
|
||||
encumbered: {rule: 'encumbered', attributes: ['encum', 'encum_max', 'armor_max']}
|
||||
encumbered: {rule: 'encumbered', attributes: ['encum', 'encum_max', 'armor_max']},
|
||||
'$attack_unreliable': {rule: 'contains', values: -1, section: 'attack', attributes: ['$attack_traits'], modifier: 'unreliable'}
|
||||
};
|
||||
|
||||
const stats = ['str', 'for', 'agi', 'int', 'ins', 'cha', 'fs', 'bs', 'brawl',
|
||||
@@ -1306,6 +1381,13 @@ prof_mods['m'] = {mod:15,desc:'Master'};
|
||||
const dmg_codes = ["1d4", "2d4", "1d6+3", "2d6+3", "1d8+7", "2d8+7", "1d10+11", "2d10+11", "2d10+1d4+11", "2d10+2d4+11",
|
||||
"2d10+1d6+14", "2d10+2d6+14", "2d10+1d8+18", "2d10+2d8+18", "3d10+22", "4d10+22"];
|
||||
|
||||
const build_dc_mods = {};
|
||||
build_dc_mods[-1] = {food_units: 1, contort_mod: 20};
|
||||
build_dc_mods[0] = {food_units: 2, contort_mod: 10};
|
||||
build_dc_mods[1] = {food_units: 3, contort_mod: 0};
|
||||
build_dc_mods[2] = {food_units: 4, contort_mod: -10};
|
||||
build_dc_mods[3] = {food_units: 5, contort_mod: -20};
|
||||
|
||||
|
||||
const multifunctions = {
|
||||
sum: (arr) => arr.reduce((total, add) => total + add), // add up any number of attributes
|
||||
@@ -1313,19 +1395,22 @@ const multifunctions = {
|
||||
half: (arr) => Math.max(Math.floor(arr[0] / 2), 1),
|
||||
quarter: (arr) => Math.max(Math.floor(arr[0] / 4), 1),
|
||||
build_dc: (arr) => Math.floor(arr[0]/50)-1,
|
||||
food_req: (arr) => build_dc_mods[arr[0]].food_units,
|
||||
contort: (arr) => arr[0] + build_dc_mods[arr[1]].contort_mod || arr[0],
|
||||
add: (arr, val) => arr[0]+val,
|
||||
full_dodge: (arr) => Math.floor(arr[0]+(arr[1]/2)),
|
||||
max: (arr) => Math.max(...arr),
|
||||
encumbered: (arr) => arr[0] > arr[1] || arr[2] >= 12 ? 'on' : '0',
|
||||
greater_than_or_equal: (arr) => arr[0] >= arr[1] ? 'on' : '0',
|
||||
toggle: (arr, modifier) => arr[0] === 'on' ? modifier : 0,
|
||||
contains: (arr, modifier) => arr.join('').toLowerCase().indexOf(modifier)>-1 ? 1 : 0,
|
||||
luck_uses: function(arr, divisor) {
|
||||
let luck = arr[0];
|
||||
let has_faith = arr[1];
|
||||
let has_luck_stars = arr[2];
|
||||
let luck_uses = Math.floor(luck / divisor)
|
||||
luck_uses += has_faith > 0 ? 3 : 0;
|
||||
luck_uses += has_luck_stars > 0 ? 1 : 0;
|
||||
luck_uses += has_luck_stars > 0 ? 3 : 0;
|
||||
return luck_uses;
|
||||
},
|
||||
dodge: function(arr, divisor) {
|
||||
@@ -1358,13 +1443,18 @@ const multifunctions = {
|
||||
let hasGiantGenetics = arr[2];
|
||||
return str + fort + (hasGiantGenetics > 0 ? 50 : 0);
|
||||
},
|
||||
hungry: function(arr, modifier) {
|
||||
hungry: function(arr) {
|
||||
let hunger = arr[0];
|
||||
let baseThreshold = arr[1];
|
||||
let hasTighteningTheBelt = arr[2];
|
||||
let threshold = baseThreshold + (hasTighteningTheBelt > 0 ? modifier : 0);
|
||||
let threshold = arr[1];
|
||||
return hunger >= threshold ? 'on' : '0';
|
||||
},
|
||||
hunger_threshold: function(arr, modifier) {
|
||||
let baseThreshold = arr[0];
|
||||
let hasTighteningTheBelt = arr[1];
|
||||
let hasCollar = arr[2];
|
||||
let threshold = baseThreshold + (hasTighteningTheBelt > 0 ? modifier : 0);
|
||||
return hasCollar > 0 ? 999 : threshold;
|
||||
},
|
||||
init: function(arr, divisor) {
|
||||
let agi = parseInt(arr[0]) || 0;
|
||||
let luck = parseInt(arr[1]) || 0;
|
||||
@@ -1375,8 +1465,12 @@ const multifunctions = {
|
||||
let starving = arr[6];
|
||||
let emaciated = arr[7];
|
||||
let hasMovingTarget = arr[8];
|
||||
let hasInstinctive = arr[9];
|
||||
let instinct = parseInt(arr[10]) || 0;
|
||||
|
||||
let init = Math.floor((agi+luck) / divisor);
|
||||
let init = agi+luck;
|
||||
init += hasInstinctive > 0 ? instinct : 0;
|
||||
init = Math.floor(init / divisor);
|
||||
init += initTemp;
|
||||
init -= encumbered === 'on' ? 1 : 0;
|
||||
init -= shaken === 'on' ? 3 : 0;
|
||||
@@ -1585,11 +1679,11 @@ on('change:repeating_gear:gear_cp remove:repeating_gear', function() {
|
||||
|
||||
/* detect special abilities */
|
||||
on('change:repeating_abilities:ability_name remove:repeating_abilities', function() {
|
||||
repeatingPresence(["has_faith", "has_reflex", "has_tightening_the_belt", "has_moving_target", "has_giant_genetics", "has_luck_stars"],
|
||||
"abilities",
|
||||
//["ability_name", "ability_name", "ability_name", "ability_name", "ability_name", "ability_name"],
|
||||
"ability_name",
|
||||
["faith", "reflex", "tightening_the_belt", "moving_target", "giant_genetics", "luck_stars"]);
|
||||
|
||||
var abilitieNames = ["faith", "reflex", "tightening_the_belt", "moving_target", "giant_genetics", "luck_stars", "collar", "instinctive"];
|
||||
var abilityAttrs = _.map(abilitieNames, function(name){ return 'has_' + name; });
|
||||
|
||||
repeatingPresence(abilityAttrs, "abilities", "ability_name", abilitieNames);
|
||||
});
|
||||
|
||||
/* END OF REPEATING ABILITY PRESENCE */
|
||||
@@ -1733,10 +1827,10 @@ attackSkills.forEach(attackSkill => {
|
||||
|
||||
<!-- 1 DISADVANTAGE OR LESS -->
|
||||
{{#rollGreater() mod -2}}
|
||||
{{#rollLess() profroll 2}}
|
||||
{{#rollTotal() profroll 1}}
|
||||
<div class="sheet-value">Critical Success !!!</div>
|
||||
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">4</div>
|
||||
{{/rollLess() profroll 2}}
|
||||
{{/rollTotal() profroll 1}}
|
||||
{{#rollBetween() profroll 2 thirddegree}}
|
||||
<div class="sheet-value">Amazing Success !!</div>
|
||||
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">3</div>
|
||||
@@ -1753,10 +1847,10 @@ attackSkills.forEach(attackSkill => {
|
||||
|
||||
<!-- 2 DISADVANTAGES -->
|
||||
{{#rollTotal() mod -2}}
|
||||
{{#rollLess() profroll 2}}
|
||||
{{#rollTotal() profroll 1}}
|
||||
<div class="sheet-value">Critical Success !!!</div>
|
||||
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">3</div>
|
||||
{{/rollLess() profroll 2}}
|
||||
{{/rollTotal() profroll 1}}
|
||||
{{#rollBetween() profroll 2 thirddegree}}
|
||||
<div class="sheet-value">Amazing Success !!</div>
|
||||
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">2</div>
|
||||
@@ -1772,10 +1866,10 @@ attackSkills.forEach(attackSkill => {
|
||||
|
||||
<!-- 3 DISADVANTAGES -->
|
||||
{{#rollTotal() mod -3}}
|
||||
{{#rollLess() profroll 2}}
|
||||
{{#rollTotal() profroll 1}}
|
||||
<div class="sheet-value">Critical Success !!!</div>
|
||||
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">2</div>
|
||||
{{/rollLess() profroll 2}}
|
||||
{{/rollTotal() profroll 1}}
|
||||
{{#rollBetween() profroll 2 thirddegree}}
|
||||
<div class="sheet-value">Amazing Success !!</div>
|
||||
<div class="sheet-key">Degrees of Success</div><div class="sheet-value">1</div>
|
||||
@@ -1794,9 +1888,16 @@ attackSkills.forEach(attackSkill => {
|
||||
<div class="sheet-value">Failure</div>
|
||||
{{/rollBetween() profroll firstdegree1 99}}
|
||||
|
||||
{{#rollGreater() profroll 99}}
|
||||
{{#rollTotal() profroll 0}}
|
||||
<div class="sheet-value">Critical Failure !!!!</div>
|
||||
{{/rollGreater() profroll 99}}
|
||||
{{/rollTotal() profroll 0}}
|
||||
|
||||
<!-- JAMMED UNRELIABLE WEAPON -->
|
||||
{{#rollTotal() unreliable 1}}
|
||||
{{#rollGreater() profroll 94}}
|
||||
<div class="sheet-desc">WEAPON JAMMED !</div>
|
||||
{{/rollGreater() profroll 94}}
|
||||
{{/rollTotal() unreliable 1}}
|
||||
|
||||
{{/mod}}
|
||||
|
||||
|
||||
@@ -11,16 +11,17 @@ Also see the API script which implements the logic to handle initiative tracking
|
||||
## Usage Notes
|
||||
|
||||
- Structure very close to to core rulebook
|
||||
- If sheet is too wide/large setting browser zoom to 80% is a good alternate size
|
||||
- Automatically calculates all derived stats: half/quarter stats, special stats, build/repair table & encumbrance
|
||||
- Automatic calculations incorporate effects from following abilities: Faith, Giant Genetics, Luck Stars, Moving Target, Reflex, Tightening the Belt
|
||||
- Automatic calculations incorporate effects from following abilities: Collar, Faith, Giant Genetics, Instinctive, Luck Stars, Moving Target, Reflex, Tightening the Belt, Unreliable
|
||||
- Roll buttons for stats, skills, special stats, defenses, attacks & damage
|
||||
- Roll buttons query for 0-3 advantages/disadvantages & implement advantage/disadvantage effects
|
||||
- Roll template indicates level & degree of success
|
||||
- Sheet also has roll buttons for base stat actions & shows required food units
|
||||
- Tick the "Threshold modifier prompt on every roll" checkbox to specify misc. threshold modifer for subsequent rolls
|
||||
- Drop down selections for archetypes, apocalypse & skill proficiencies
|
||||
- Initiative includes modifiers from being encumbered, shaken, acute, starving & emaciated
|
||||
- Temporary initiative modifier field for situational special ability effects
|
||||
- Faith & Reflex ability benefits automatically calculated
|
||||
- Special Ability and Gear descriptions can be expanded/contracted to see the full text when needed
|
||||
- Hunger conditions will highlight in red when active
|
||||
- Starving condition will apply -10 modifier to base stats (modifier indicator will appear next to base stats)
|
||||
@@ -33,6 +34,15 @@ Also see the API script which implements the logic to handle initiative tracking
|
||||
|
||||
## Change Log
|
||||
|
||||
### December 27th 2020 v6.0
|
||||
- Added support to field calculations for specific special abilities:
|
||||
- Collar
|
||||
- Instinctive
|
||||
- Added base stat action roll button below skills. Contort roll incorporates build modifier.
|
||||
- For weapons with Unreliable trait, the roll template will show if weapon becomes jammed
|
||||
- Added required food units below build
|
||||
- Ensure all read-only fields have a grey background
|
||||
|
||||
### December 14th 2020 v5.0
|
||||
- Added support to field calculations for specific special abilities:
|
||||
- Tightening the Belt
|
||||
|
||||
@@ -4,5 +4,5 @@
|
||||
"authors": "David Maitland",
|
||||
"roll20userid": "994218",
|
||||
"preview": "MaximumApocalypse.png",
|
||||
"instructions": "Version 5.0 of sheet for Maximum Apocalypse. Includes roll buttons & field value calculation. See ReadMe for full feature list."
|
||||
"instructions": "* Automatically calculates all derived stats: half/quarter stats, special stats, build/repair table & encumbrance\r* Automatic calculations incorporate effects from following abilities: Collar, Faith, Giant Genetics, Instinctive, Luck Stars, Moving Target, Reflex, Tightening the Belt, Unreliable\r* Roll buttons for stats, skills, special stats, defenses, attacks & damage\r* Roll buttons query for 0-3 advantages/disadvantages & implement advantage/disadvantage effects\r* Roll template indicates level & degree of success\r* Sheet also has roll buttons for base stat actions & shows required food units\r* Tick the \"Threshold modifier prompt on every roll\" checkbox to specify misc. threshold modifer for subsequent rolls\r* Drop down selections for archetypes, apocalypse & skill proficiencies\r* Initiative includes modifiers from being encumbered, shaken, acute, starving & emaciated\r* Temporary initiative modifier field for situational special ability effects\r* Special Ability and Gear descriptions can be expanded/contracted to see the full text when needed\r* Hunger conditions will highlight in red when active\r* Starving condition will apply -10 modifier to base stats (modifier indicator will appear next to base stats)\r* Structure deviations from core rulebook implemented to provide enough room for Special Ability and Gear descriptions\r* If sheet is too wide/large setting browser zoom to 80% is a good alternate size\r\r[Sheet Readme](https://github.com/Roll20/roll20-character-sheets/blob/master/Maximum%20Apocalypse/README.md)."
|
||||
}
|
||||
@@ -26,7 +26,9 @@
|
||||
"charm": "Charm",
|
||||
"child_0-15": "Child (0-15)",
|
||||
"clubs": "Clubs",
|
||||
"collar": "Collar",
|
||||
"command": "Command",
|
||||
"contort": "Contort",
|
||||
"cp_costs": "CP Costs",
|
||||
"crafting": "Crafting",
|
||||
"current": "Current",
|
||||
@@ -65,11 +67,13 @@
|
||||
"initiative": "Initiative",
|
||||
"insanity_condition": "Insanity Condition",
|
||||
"instinct": "Instinct",
|
||||
"instinctive": "Instinctive",
|
||||
"intelligence": "Intelligence",
|
||||
"interrogate": "Interrogate",
|
||||
"intimidate": "Intimidate",
|
||||
"item": "Item",
|
||||
"kaiju_attack": "Kaiju Attack",
|
||||
"lift": "Lift",
|
||||
"lockpick": "Lockpick",
|
||||
"luck": "Luck",
|
||||
"luck_stars": "Luck Stars",
|
||||
@@ -84,6 +88,7 @@
|
||||
"move": "Move",
|
||||
"moving_target": "Moving Target",
|
||||
"navigation": "Navigation",
|
||||
"na": "N/A",
|
||||
"not_proficient": "Not Proficient",
|
||||
"nuclear_holocaust": "Nuclear Holocaust",
|
||||
"one_per_4_cp": "1 per 4 CP",
|
||||
@@ -99,7 +104,10 @@
|
||||
"prodromal": "Prodromal",
|
||||
"proficiency_text": "Skills that are NOT PROFICIENT start as DISADVANTAGE and cannot have ADVANTAGE when rolled.",
|
||||
"proficient": "Proficient",
|
||||
"pry": "Pry",
|
||||
"reflex": "Relex",
|
||||
"remember": "Remember",
|
||||
"required_food": "Required Food",
|
||||
"repair": "Repair",
|
||||
"repair_skill": "Repair Skill",
|
||||
"resilience": "Resilience",
|
||||
@@ -135,6 +143,7 @@
|
||||
"thief": "Thief",
|
||||
"three_per_armor_point": "3 per Armor pt",
|
||||
"threshold": "Threshold",
|
||||
"throw": "Throw",
|
||||
"tightening_the_belt": "Tightening the Belt",
|
||||
"time_paradox": "Time Paradox",
|
||||
"total_xp": "Total XP",
|
||||
@@ -142,6 +151,7 @@
|
||||
"trained": "Trained",
|
||||
"traits": "Traits",
|
||||
"transform_die": "Transform/Die",
|
||||
"unit(s)": "Unit(s)",
|
||||
"unarmed": "Unarmed",
|
||||
"unnerved": "Unnerved",
|
||||
"unused_xp": "Unused XP",
|
||||
|
||||
Reference in New Issue
Block a user