From 270a243d8f6e07fa8ae963ec2947ccaa52ffe233 Mon Sep 17 00:00:00 2001 From: Miguel Peres Date: Mon, 8 Mar 2021 10:29:13 -0300 Subject: [PATCH] Adding rollable dmg for ships --- Esper_Genesis_5E/EG_Sheet.css | 18 +++++++++++++- Esper_Genesis_5E/EG_Sheet.html | 42 ++++++++++++++++++++++++++++++++ Esper_Genesis_5E/EG_Sheet.sass | 17 ++++++++++++- Esper_Genesis_5E/sheetworkers.js | 36 +++++++++++++++++++++++++++ Esper_Genesis_5E/src/pc/ship.pug | 6 +++++ 5 files changed, 117 insertions(+), 2 deletions(-) diff --git a/Esper_Genesis_5E/EG_Sheet.css b/Esper_Genesis_5E/EG_Sheet.css index 1a3e013e20..9cf2953619 100644 --- a/Esper_Genesis_5E/EG_Sheet.css +++ b/Esper_Genesis_5E/EG_Sheet.css @@ -6841,7 +6841,7 @@ div.sheet-charmancer div.sheet-licensedsheet-flag:not(:empty) ~ * .sheet-summary .charsheet .sheet-pc .sheet-pc-ship .sheet-weapon-systems .sheet-table-header { grid-template-columns: 45px 1fr 60px 30px 50px 70px; grid-gap: 2px; - max-width: calc(50% - 10px); + max-width: calc(50% - 30px); } .charsheet .sheet-pc .sheet-pc-ship .sheet-weapon-systems .sheet-table-header span { font-size: 11px; @@ -6853,6 +6853,22 @@ div.sheet-charmancer div.sheet-licensedsheet-flag:not(:empty) ~ * .sheet-summary } .charsheet .sheet-pc .sheet-pc-ship .sheet-weapon-systems .repcontainer .repitem { border-top: 2px solid #e2c285; + margin-right: 20px; +} +.charsheet .sheet-pc .sheet-pc-ship .sheet-weapon-systems .repcontainer .repitem button[type=roll] { + position: absolute; + top: 4px; + right: -20px; + background: none; + border: none; + color: black; + box-shadow: none; + margin: 0; + padding: 0; + font-weight: bold; +} +.charsheet .sheet-pc .sheet-pc-ship .sheet-weapon-systems .repcontainer .repitem button[type=roll]:hover { + color: #00ba73; } .charsheet .sheet-pc .sheet-pc-ship .sheet-weapon-systems .repcontainer .repitem .sheet-table-body { grid-template-columns: 45px 1fr 60px 30px 50px 70px; diff --git a/Esper_Genesis_5E/EG_Sheet.html b/Esper_Genesis_5E/EG_Sheet.html index cf90e6704e..405dbbc47b 100644 --- a/Esper_Genesis_5E/EG_Sheet.html +++ b/Esper_Genesis_5E/EG_Sheet.html @@ -4523,6 +4523,9 @@
+ + +
@@ -4556,6 +4559,9 @@
+ + +
@@ -18692,6 +18698,42 @@ classRelatedAttrs.forEach(attr => { }); }); +/* +@{wtype}&{template:dmg} {{rname=@{atkname}}} @{atkflag} {{range=@{atkrange}}} @{dmgflag} {{dmg1=[[1d10]]}} {{dmg1type=}} @{dmg2flag} {{dmg2=[[0]]}} {{dmg2type=}} @{saveflag} {{desc=@{atk_desc}}} @{hldmg} {{spelllevel=@{spelllevel}}} {{innate=@{spell_innate}}} {{globaldamage=[[0]]}} {{globaldamagetype=@{global_damage_mod_type}}} @{charname_output} {{licensedsheet=@{licensedsheet}}} +on("change:repeating_tool:toolname change:repeating_tool:toolbonus_base change:repeating_tool:toolattr_base +*/ + +var calcShipAtkdmgc = function(damage) { + let damagec = damage + ''; + for(let i=20; i>=1; i--) { + damagec = damagec.replace(`${i}d`, `${i*2}d`); + damagec = damagec.replace(`${i}D`, `${i*2}D`); + } + return damagec; +}; +var addShipDamageType = function(damage, type) { + if(!damage || !type) return damage; + return `${damage} [${type}]`; +} +on("change:repeating_weapon-systems", eventinfo => { + if(!eventinfo.sourceType || eventinfo.sourceType != 'player' || eventinfo.sourceAttribute.includes('atkdmg')) return; + const id = SheetUtils.getUID(eventinfo.triggerName); + const pre = `repeating_weapon-systems_${id}`; + const weaponAttributes = ['gunner', 'weapon', 'range', 'tohit', 'damage', 'dmgtype', 'special', 'ammo', 'recharge'].map(attr => { return `${pre}_${attr}`; }); + getAttrs(weaponAttributes, values => { + if(values[`${pre}_damage`]) { + const damage = addShipDamageType(values[`${pre}_damage`], values[`${pre}_dmgtype`]); + const damagec = addShipDamageType(calcShipAtkdmgc(values[`${pre}_damage`]), values[`${pre}_dmgtype`]); + const atkdmg = `@{wtype}&{template:dmg} {{rname=@{weapon}}} {{attack=1}} {{range=@{range}}} {{damage=1}} {{dmg1flag=1}} {{dmg1=[[${damage}]]}} {{dmg1type=${values[`${pre}_dmgtype`]}}} {{desc=@{special}}} @{charname_output} {{licensedsheet=@{licensedsheet}}}`; + const atkdmgc = `@{wtype}&{template:dmg} {{rname=@{weapon}}} {{attack=1}} {{range=@{range}}} {{damage=1}} {{dmg1flag=1}} {{dmg1=[[${damagec}]]}} {{dmg1type=${values[`${pre}_dmgtype`]}}} {{desc=@{special}}} @{charname_output} {{licensedsheet=@{licensedsheet}}}`; + const update = { + [`${pre}_atkdmg`]: atkdmg, + [`${pre}_atkdmgc`]: atkdmgc, + } + setAttrs(update, {silent: true}); + } + }); +}); //# sourceURL=espergenesis.js diff --git a/Esper_Genesis_5E/EG_Sheet.sass b/Esper_Genesis_5E/EG_Sheet.sass index 3799a8ed93..6ac492692a 100644 --- a/Esper_Genesis_5E/EG_Sheet.sass +++ b/Esper_Genesis_5E/EG_Sheet.sass @@ -6795,7 +6795,7 @@ div.sheet-charmancer .sheet-table-header grid-template-columns: 45px 1fr 60px 30px 50px 70px grid-gap: 2px - max-width: calc(50% - 10px) + max-width: calc(50% - 30px) span font-size: 11px @@ -6806,6 +6806,21 @@ div.sheet-charmancer .repitem border-top: 2px solid #e2c285 + margin-right: 20px + + button[type='roll'] + position: absolute + top: 4px + right: -20px + background: none + border: none + color: black + box-shadow: none + margin: 0 + padding: 0 + font-weight: bold + &:hover + color: #00ba73 .sheet-table-body grid-template-columns: 45px 1fr 60px 30px 50px 70px diff --git a/Esper_Genesis_5E/sheetworkers.js b/Esper_Genesis_5E/sheetworkers.js index c2184bea91..881f9a2a64 100644 --- a/Esper_Genesis_5E/sheetworkers.js +++ b/Esper_Genesis_5E/sheetworkers.js @@ -3652,6 +3652,42 @@ classRelatedAttrs.forEach(attr => { }); }); +/* +@{wtype}&{template:dmg} {{rname=@{atkname}}} @{atkflag} {{range=@{atkrange}}} @{dmgflag} {{dmg1=[[1d10]]}} {{dmg1type=}} @{dmg2flag} {{dmg2=[[0]]}} {{dmg2type=}} @{saveflag} {{desc=@{atk_desc}}} @{hldmg} {{spelllevel=@{spelllevel}}} {{innate=@{spell_innate}}} {{globaldamage=[[0]]}} {{globaldamagetype=@{global_damage_mod_type}}} @{charname_output} {{licensedsheet=@{licensedsheet}}} +on("change:repeating_tool:toolname change:repeating_tool:toolbonus_base change:repeating_tool:toolattr_base +*/ + +var calcShipAtkdmgc = function(damage) { + let damagec = damage + ''; + for(let i=20; i>=1; i--) { + damagec = damagec.replace(`${i}d`, `${i*2}d`); + damagec = damagec.replace(`${i}D`, `${i*2}D`); + } + return damagec; +}; +var addShipDamageType = function(damage, type) { + if(!damage || !type) return damage; + return `${damage} [${type}]`; +} +on("change:repeating_weapon-systems", eventinfo => { + if(!eventinfo.sourceType || eventinfo.sourceType != 'player' || eventinfo.sourceAttribute.includes('atkdmg')) return; + const id = SheetUtils.getUID(eventinfo.triggerName); + const pre = `repeating_weapon-systems_${id}`; + const weaponAttributes = ['gunner', 'weapon', 'range', 'tohit', 'damage', 'dmgtype', 'special', 'ammo', 'recharge'].map(attr => { return `${pre}_${attr}`; }); + getAttrs(weaponAttributes, values => { + if(values[`${pre}_damage`]) { + const damage = addShipDamageType(values[`${pre}_damage`], values[`${pre}_dmgtype`]); + const damagec = addShipDamageType(calcShipAtkdmgc(values[`${pre}_damage`]), values[`${pre}_dmgtype`]); + const atkdmg = `@{wtype}&{template:dmg} {{rname=@{weapon}}} {{attack=1}} {{range=@{range}}} {{damage=1}} {{dmg1flag=1}} {{dmg1=[[${damage}]]}} {{dmg1type=${values[`${pre}_dmgtype`]}}} {{desc=@{special}}} @{charname_output} {{licensedsheet=@{licensedsheet}}}`; + const atkdmgc = `@{wtype}&{template:dmg} {{rname=@{weapon}}} {{attack=1}} {{range=@{range}}} {{damage=1}} {{dmg1flag=1}} {{dmg1=[[${damagec}]]}} {{dmg1type=${values[`${pre}_dmgtype`]}}} {{desc=@{special}}} @{charname_output} {{licensedsheet=@{licensedsheet}}}`; + const update = { + [`${pre}_atkdmg`]: atkdmg, + [`${pre}_atkdmgc`]: atkdmgc, + } + setAttrs(update, {silent: true}); + } + }); +}); //# sourceURL=espergenesis.js diff --git a/Esper_Genesis_5E/src/pc/ship.pug b/Esper_Genesis_5E/src/pc/ship.pug index 555cdbb911..a23b95dc94 100644 --- a/Esper_Genesis_5E/src/pc/ship.pug +++ b/Esper_Genesis_5E/src/pc/ship.pug @@ -276,6 +276,9 @@ mixin armorClassOrManeuverEntry(name) span(data-i18n='pc-ship-damage-type') +repeatingSection('weapon-systems') + input(type='hidden' name='attr_rollbase' value!='@{wtype}&{template:atk} {{mod=@{tohit}}} {{rname=[@{weapon}](~repeating_weapon-systems_atkdmg)}} {{rnamec=[@{weapon}](~repeating_weapon-systems_atkdmgc)}} {{r1=[[@{d20} + @{tohit}]]}} {{normal=1}} {{r2=[[0d20]]}} {{range=@{range}}} {{desc=@{special}}} ammo=@{ammo} @{charname_output} {{licensedsheet=@{licensedsheet}}}') + input(type='hidden' name='attr_atkdmg' value!='') + input(type='hidden' name='attr_atkdmgc' value!='') .sheet-grid-container.table-body .sheet-gunner input(type='text' name='attr_gunner') @@ -301,6 +304,9 @@ mixin armorClassOrManeuverEntry(name) input(type='checkbox' name='attr_recharge' value='3') input(type='checkbox' name='attr_recharge' value='2') input(type='checkbox' name='attr_recharge' value='1') + button.hidden(type='roll' value!='@{atkdmg}' name='roll_atkdmg') + button.hidden(type='roll' value!='@{atkdmgc}' name='roll_atkdmgc') + button(type='roll' value!='@{rollbase}' name='roll_attack') div span(data-i18n='weapon-systems-info') \ No newline at end of file