Merge pull request #7987 from dtsm12/Maximum-Apocalypse-v6

Maximum apocalypse v6
This commit is contained in:
Miguel Peres
2021-01-04 09:26:51 -03:00
committed by GitHub
5 changed files with 212 additions and 50 deletions
+62 -21
View File
@@ -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; }
+127 -26
View File
@@ -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}}
+12 -2
View File
@@ -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
+1 -1
View File
@@ -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)."
}
+10
View File
@@ -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",