Official Savage Worlds v1.00.27

Added support for the Artificer Edge/Arcane Devices.

Enhancement and a minor bug fix.
This commit is contained in:
finderski
2022-06-13 18:46:34 -04:00
parent edf52c9064
commit 53bf6c048c
4 changed files with 403 additions and 77 deletions
@@ -116,7 +116,7 @@ hr.dashed {
.normallabel {
font-size: 13px;
font-weight: normal;
color: #404040;
color: rgb(64, 64, 64);
}
summary:hover {
@@ -251,7 +251,7 @@ details[open] > summary.config {
}
.sheet-darkmode .characterviewer .charsheet label {
color: #404040;
color: rgb(64, 64, 64);
}
.sheet-darkmode .characterviewer .charsheet .container {
@@ -280,12 +280,12 @@ details[open] > summary.config {
input.useBackground[value="1"] ~ .background {
background-image: url(https://raw.githubusercontent.com/finderski/SWT/master/Parchement_Background2.jpg);
background-color: #f4f4f4;
background-color: rgb(244, 244, 244);
}
input.useBackground[value="2"] ~ .background {
background-image: url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/backgrounds/swade-parchment-seamless.jpg);
background-color: #f4f4f4;
background-color: rgb(244, 244, 244);
}
input.useBackground[value="3"] ~ .background {
@@ -2003,7 +2003,7 @@ select {
.configSection {
display: block;
width: 100%;
background: white;
background: rgb(255, 255, 255);
margin: 0 0 10px 0;
/*padding: 5px 5px 5px 5px;*/
}
@@ -2748,7 +2748,7 @@ span.statblock {
.charsheet .normallabel {
font-size: 13px;
font-weight: normal;
color: #404040;
color: rgb(64, 64, 64);
}
.showconsumables {
@@ -3897,6 +3897,40 @@ label.ddmenu:hover {
font-size: 0.93em;
}
/* Hide Skills that aren't "trained" */
.staticfaith:not(:checked) ~ .repcontainer[data-groupname=repeating_weapons] .faith {
display: none;
}
.staticfocus:not(:checked) ~ .repcontainer[data-groupname=repeating_weapons] .focus {
display: none;
}
.staticperformance:not(:checked) ~ .repcontainer[data-groupname=repeating_weapons] .performance {
display: none;
}
.staticpsionics:not(:checked) ~ .repcontainer[data-groupname=repeating_weapons] .psionics {
display: none;
}
.staticspellcasting:not(:checked) ~ .repcontainer[data-groupname=repeating_weapons] .spellcasting {
display: none;
}
.staticweirdscience:not(:checked) ~ .repcontainer[data-groupname=repeating_weapons] .weirdscience {
display: none;
}
/*
:is(.staticfaith,.staticfocus,.staticperformance,.staticpsionics,.staticspellcasting,.staticweirdscience):not(:checked) ~ .repcontainer[data-groupname=repeating_weapons] :is(.faith,.focus,.performance,.psionics,.spellcasting,.weirdscience) {
display: none;
}
*/
/*.AthleticsStaticSkill:not(:checked) ~ .repcontainer[data-groupname=repeating_weapons] .athletics,
.ShootingStaticSkill:not(:checked) ~ .repcontainer[data-groupname=repeating_weapons] .shooting {
display: none;
}*/
label.abmenu:hover {
border: 1px solid cyan;
}
@@ -6520,7 +6554,7 @@ li.docList::before {
}
.useTheme[value="3"] ~ .statblockview .statBlockHeader .statblockName .headerContainer {
font-family: Anton;
color: #f29f40;
color: rgb(242, 159, 64);
-webkit-text-stroke: 1px black;
}
.useTheme[value="3"] ~ .statblockview .statBlockHeader .charsummary {
@@ -7288,7 +7322,7 @@ li.docList::before {
background-position-y: -8px;
background-repeat: no-repeat;
font-family: Anton;
color: #f29f40;
color: rgb(242, 159, 64);
-webkit-text-stroke: 1px black;
height: 95px;
display: flex;
@@ -7299,13 +7333,13 @@ li.docList::before {
.useTheme[value="3"] ~ .background > .base .powerArmor h1.groupHeader input.headerInput,
.useTheme[value="3"] ~ .background > .base .robotArmor h1.groupHeader input.headerInput {
font-family: Anton;
color: #f29f40;
color: rgb(242, 159, 64);
-webkit-text-stroke: 1px black;
}
.useTheme[value="3"] ~ .background > .base .vehicles h1.groupHeader input.headerInput::placeholder,
.useTheme[value="3"] ~ .background > .base .powerArmor h1.groupHeader input.headerInput::placeholder,
.useTheme[value="3"] ~ .background > .base .robotArmor h1.groupHeader input.headerInput::placeholder {
color: #f29f40;
color: rgb(242, 159, 64);
-webkit-text-stroke: 1px black;
}
.useTheme[value="3"] ~ .background > .base .vehicles .shipWeapons,
@@ -7323,7 +7357,7 @@ li.docList::before {
.useTheme[value="3"] ~ .background > .base .vehicles .hideBtn,
.useTheme[value="3"] ~ .background > .base .powerArmor .hideBtn,
.useTheme[value="3"] ~ .background > .base .robotArmor .hideBtn {
color: #f29f40;
color: rgb(242, 159, 64);
-webkit-text-stroke: 1px black;
margin: 15px 0 -27px 35px;
}
@@ -7337,7 +7371,7 @@ li.docList::before {
background-position-y: -8px;
background-repeat: no-repeat;
font-family: Anton;
color: #f29f40;
color: rgb(242, 159, 64);
-webkit-text-stroke: 1px black;
height: 95px;
display: flex;
@@ -7360,7 +7394,7 @@ li.docList::before {
background-repeat: no-repeat;
background-color: transparent;
font-family: Anton;
color: #f29f40;
color: rgb(242, 159, 64);
-webkit-text-stroke: 1px black;
font-size: 2.5em;
height: 95px;
@@ -7384,7 +7418,7 @@ li.docList::before {
background-position-y: -8px;
background-repeat: no-repeat;
font-family: Anton;
color: #f29f40;
color: rgb(242, 159, 64);
-webkit-text-stroke: 1px black;
height: 95px;
display: flex;
@@ -7400,14 +7434,14 @@ li.docList::before {
color: white;
}
.useTheme[value="3"] ~ .background > .base .combatoptions .combatOptionDetails .combatoptionItem:nth-child(odd) .optionLabel {
color: #f29f40;
color: rgb(242, 159, 64);
}
.useTheme[value="3"] ~ .background > .base .combatoptions .combatOptionDetails .combatoptionItem:nth-child(even) {
background-color: #5D6D7E;
color: white;
}
.useTheme[value="3"] ~ .background > .base .combatoptions .combatOptionDetails .combatoptionItem:nth-child(even) .optionLabel {
color: #f29f40;
color: rgb(242, 159, 64);
}
.useTheme[value="3"] ~ .background > .base .releasenotesTab .groupHeader {
background-image: url(https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/headers/r20-rifts-header.png);
@@ -7415,7 +7449,7 @@ li.docList::before {
background-position-y: -8px;
background-repeat: no-repeat;
font-family: Anton;
color: #f29f40;
color: rgb(242, 159, 64);
-webkit-text-stroke: 1px black;
height: 95px;
display: flex;
@@ -7438,7 +7472,7 @@ li.docList::before {
background-position-y: -8px;
background-repeat: no-repeat;
font-family: Anton;
color: #f29f40;
color: rgb(242, 159, 64);
-webkit-text-stroke: 1px black;
height: 95px;
display: flex;
@@ -7545,7 +7579,7 @@ li.docList::before {
.sheet-rolltemplate-roll.sheet-rolltemplate-darkmode .sheet-generic,
.sheet-rolltemplate-damage.sheet-rolltemplate-darkmode .sheet-generic,
.sheet-rolltemplate-statblock.sheet-rolltemplate-darkmode .sheet-generic {
background: #404040;
background: rgb(64, 64, 64);
}
.sheet-rolltemplate-roll .sheet-templateMain.sheet-powerTemplate.sheet-swpf,
.sheet-rolltemplate-damage .sheet-templateMain.sheet-powerTemplate.sheet-swpf,
@@ -8338,7 +8372,7 @@ li.docList::before {
padding: none;
}
.sheet-rolltemplate-statblock.sheet-rolltemplate-darkmode {
color: #bfbfbf;
color: hsl(0deg, 0%, 75%);
--header-color: (#d6d6d6);
--main-text: (rgb(214, 214, 214));
--default-header-background: url("https://raw.github.com/finderski/SWT/master/RollTemplate/rt_header-darkmode.png");
+345 -55
View File
@@ -1,7 +1,7 @@
<script type="text/worker">
const sheetVersionPrefix = 'Official Savage Worlds v';
const sheetVersion = '1.00.26';
const sheetVersion = '1.00.27';
// Define colors for Logs
const r20color = '#E948C9';
@@ -198,6 +198,7 @@ function repeatingSimpleSumWCheck(
function fauxChange(field, fauxvalue) {
//repeating fields should be passed in the format: repeating_<section>:attributes
//example: repeating_skills:skillnamerank
log("FauxChange Reached: Field",field,r20color);
log('Setting faux value(s) for', field, 'orangered');
if (field.indexOf(':') > -1) {
//console.log("Need to update values in a repeating section");
@@ -222,6 +223,7 @@ function fauxChange(field, fauxvalue) {
}
log('Step', '!!! Setting Fake Value !!!', 'orangered');
setAttrs(sattrs);
// I think I need to move all this stuff inside the setAttrs above...
for (let c = 0; c < idArray.length; c++) {
log(
'Added Field',
@@ -243,11 +245,12 @@ function fauxChange(field, fauxvalue) {
//console.log(`++++ Setting ${field} to ${fauxvalue} ++++`);
//console.log("Setting " + field + " to " + fauxvalue);
sattrs[field] = fauxvalue;
setAttrs(sattrs);
//console.log(`---- Setting ${field} to ${prevValue} ----`);
//console.log("Setting " + field + " to " + fauxvalue);
sattrs[field] = prevValue;
setAttrs(sattrs);
log(`Setting Faux Value (${field})`, fauxvalue,r20color);
setAttrs(sattrs,null,()=>{
sattrs[field] = prevValue;
log(`Setting Previous Value (${field})`, prevValue, r20color);
setAttrs(sattrs);
});
});
}
}
@@ -507,10 +510,22 @@ const upgradeSheet = function (
stepwiseFaux('weapons', 'weaponskill');
stepwiseFaux('spells', 'spellskill');
setattrvals['newcontent'] = 'unread';
}
if (versionthree < 0.26) {
setattrvals['newcontent'] = 'unread';
}
if (versionthree < 0.27) {
const nameList = ["faith","focus","performance","psionics","spellcasting"];
nameList.forEach(skillName => {
fauxChange(`${skillName}name`, `${skillName}_old`);
});
setattrvals['newcontent'] = 'unread';
setattrvals['newdocumentation'] = 'unread';
} else {
log('Upgrade', `Sheet already updgraded (${characterName})`, 'lime');
}
setAttrs(setattrvals, { silent: true });
setAttrs(setattrvals);
//setAttrs(setattrvals, { silent: true });
});
};
@@ -518,9 +533,10 @@ const upgradeSheet = function (
// Adjust CSS for long Character Names
on(
'sheet:opened change:character_name change:character_avatar change:character_token',
'sheet:opened change:character_name change:character_avatar change:character_token change:show_token',
function () {
log('Name Change', 'Name was changed', r20color);
let setValues = {};
getAttrs(
['character_name', 'character_avatar', 'character_token'],
function (v) {
@@ -532,13 +548,34 @@ on(
? (nameclass = 'smallHeader')
: (nameclass = 'normalHeader');
log('Name Class', nameclass, r20color);
log('Character Token', v.character_token, r20color);
setAttrs({
setValues['namelength'] = nameclass;
let avatarURL = v.character_avatar;
let tokenURL = v.character_token;
setValues['avatar'] = avatarURL;
setValues['ctoken'] = tokenURL;
if (avatarURL.length < 1 && tokenURL.length < 1) {
//Avatar and Token is empty, so make sure show_token is set to 0
setValues['show_token'] = '0';
} else if (tokenURL.length > 0) {
tokenURL.substring(tokenURL.length - 4, tokenURL.length - 3) !== '.'
? (tokenURL += '.png')
: log('URL Has Extension', tokenURL, r20color);
//use the token image for the rolltemplate
setValues['roll_template_token'] = '{{token=[x](' + tokenURL + ')}}';
} else {
avatarURL.substring(avatarURL.length - 4, avatarURL.length - 3) !==
'.'
? (avatarURL += '.png')
: log('URL Has Extension', avatarURL, r20color);
setValues['roll_template_token'] = '{{token=[x](' + avatarURL + ')}}';
}
/*setAttrs({
namelength: nameclass,
avatar: v.character_avatar,
ctoken: v.character_token,
roll_template_token: '{{token=[x](' + v.character_token + '.png)}}',
});
});*/
setAttrs(setValues);
}
);
}
@@ -3305,14 +3342,28 @@ weaponlist.forEach(weapon => {
wbutton = 'repeating_raweapons_weaponbutton';
wskill = 'repeating_raweapons_weaponskill';
}
const skillUn = `@{whisperweapon} &{template:roll} {{name=@{character_name} }} {{namelength=@{namelength}}} @{rolltUnskilled} {{skill_roll=&{noerror} [[ @{weaponUnskilledFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{mook=[[1d0+@{wdNum}]]}} {{wild_die=[[ @{weaponUnskilledWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} @{unshakeTemplate} {{trait=^{unskilled}}} {{source=@{weapon}}} {{button=y}} {{ReRoll=^{reroll}(~repeating_weapons_tWeapon) }} {{DmgRoll=^{roll-damage}(~repeating_${pa}weapons_dmg) }} @{unskilledencumbrancebutton} @{showtraitmods} @{multiattack} {{theme=@{rolltemplate_theme}}} {{showToken=[[0d6+@{show_token}]]}} @{roll_template_token}`;
const skillFi = `@{whisperweapon} &{template:roll} {{namelength=@{namelength}}} {{trait=@{fightingname}}} {{source=@{weapon}}} @{rolltFighting} {{skill_roll=&{noerror} [[ @{weaponFightingFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponFightingWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} @{unshakeTemplate} {{button=y}} {{ReRoll=^{reroll}(~repeating_weapons_tWeapon) }} {{DmgRoll=^{roll-damage}(~repeating_${pa}weapons_dmg) }} @{setmodsenc} @{showtraitmods} @{multiattack} {{theme=@{rolltemplate_theme}}} {{showToken=[[0d6+@{show_token}]]}} @{roll_template_token}`;
const templateCommon = `@{whisperweapon} &{template:roll} {{namelength=@{namelength}}} {{source=@{weapon}}} @{unshakeTemplate} {{button=y}} {{ReRoll=^{reroll}(~repeating_weapons_tWeapon) }} {{DmgRoll=^{roll-damage}(~repeating_${pa}weapons_dmg) }} @{setmodsenc} @{showtraitmods} @{multiattack} {{theme=@{rolltemplate_theme}}} {{showToken=[[0d6+@{show_token}]]}} @{roll_template_token}`;
const skillUn = `${templateCommon} {{name=@{character_name} }} @{rolltUnskilled} {{skill_roll=&{noerror} [[ @{weaponUnskilledFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{mook=[[1d0+@{wdNum}]]}} {{wild_die=[[ @{weaponUnskilledWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{trait=^{unskilled}}} @{unskilledencumbrancebutton}`;
const skillFi = `${templateCommon} {{trait=@{fightingname}}} @{rolltFighting} {{skill_roll=&{noerror} [[ @{weaponFightingFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponFightingWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}}`;
const skillAt = `@{whisperweapon} &{template:roll} {{namelength=@{namelength}}} {{trait=@{athleticsname}}} {{source=@{weapon}}} @{rolltAthletics} {{skill_roll=&{noerror} [[ @{weaponAthleticsFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponAthleticsWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} @{unshakeTemplate} {{button=y}} {{ReRoll=^{reroll}(~repeating_weapons_tWeapon) }} {{DmgRoll=^{roll-damage}(~repeating_${pa}weapons_dmg) }} @{setmodsenc} @{showtraitmods} @{multiattack} {{theme=@{rolltemplate_theme}}} {{showToken=[[0d6+@{show_token}]]}} @{roll_template_token}`;
const skillAt = `${templateCommon} {{trait=@{athleticsname}}} @{rolltAthletics} {{skill_roll=&{noerror} [[ @{weaponAthleticsFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponAthleticsWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}}`;
const skillSh = `@{whisperweapon} &{template:roll} {{namelength=@{namelength}}} {{trait=@{shootingname}}} {{source=@{weapon}}} @{rolltShooting} {{skill_roll=&{noerror} [[ @{weaponShootingFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponShootingWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}}@{unshakeTemplate} {{button=y}} {{ReRoll=^{reroll}(~repeating_weapons_tWeapon) }} {{DmgRoll=^{roll-damage}(~repeating_${pa}weapons_dmg) }} @{setmodsenc} @{showtraitmods} @{multiattack} {{theme=@{rolltemplate_theme}}} {{showToken=[[0d6+@{show_token}]]}} @{roll_template_token}`;
const skillSh = `${templateCommon} {{trait=@{shootingname}}} @{rolltShooting} {{skill_roll=&{noerror} [[ @{weaponShootingFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponShootingWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}`;
const skillWS = `@{whisperweapon} &{template:roll} {{namelength=@{namelength}}} {{trait=@{weirdsciencename}}} {{source=@{weapon}}} @{rolltWeirdScience} {{skill_roll=&{noerror} [[ @{weaponWeirdScienceFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponWeirdScienceWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}}@{unshakeTemplate} {{button=y}} {{ReRoll=^{reroll}(~repeating_weapons_tWeapon) }} {{DmgRoll=^{roll-damage}(~repeating_${pa}weapons_dmg) }} @{setmodsenc} @{showtraitmods} @{multiattack} {{theme=@{rolltemplate_theme}}} {{showToken=[[0d6+@{show_token}]]}} @{roll_template_token}`;
const skillWS = `${templateCommon} {{trait=@{weirdsciencename}}} @{rolltWeirdScience} {{skill_roll=&{noerror} [[ @{weaponWeirdScienceFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponWeirdScienceWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}`;
// faith
const skillFa = `${templateCommon} {{trait=@{faithname}}} @{rolltFaith} {{skill_roll=&{noerror} [[ @{weaponfaithFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponfaithWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}}`;
// Focus
const skillFo = `${templateCommon} {{trait=@{focusname}}} @{rolltFocus} {{skill_roll=&{noerror} [[ @{weaponfocusFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponfocusWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}}`;
// Performance
const skillPe = `${templateCommon} {{trait=@{performancename}}} @{rolltPerformance} {{skill_roll=&{noerror} [[ @{weaponperformanceFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponperformanceWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}}`;
// Psionics
const skillPs = `${templateCommon} {{trait=@{psionicsname}}} @{rolltPsionics} {{skill_roll=&{noerror} [[ @{weaponpsionicsFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponpsionicsWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}}`;
// Spellcasting
const skillSp = `${templateCommon} {{trait=@{spellcastingname}}} @{rolltSpellcasting} {{skill_roll=&{noerror} [[ @{weaponspellcastingFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponspellcastingWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}}`;
// Spirit
const skillSpi = `${templateCommon} {{trait=^{spirit}}} @{rolltspirit} {{skill_roll=&{noerror} [[ @{weaponspiritFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}} {{wild_die=[[ @{weaponspiritWildDieFormula} + @{weaponAttackBonus} [@{weaponAttackBonusReason}] ]]}}`;
console.log(eventInfo.sourceAttribute);
let sid = eventInfo.sourceAttribute.slice(18, 38);
@@ -3342,6 +3393,24 @@ weaponlist.forEach(weapon => {
case 'weirdscience':
skillToUse = skillWS;
break;
case 'faith':
skillToUse = skillFa;
break;
case 'performance':
skillToUse = skillPe;
break;
case 'psionics':
skillToUse = skillPs;
break;
case 'spellcasting':
skillToUse = skillSp;
break;
case 'spirit':
skillToUse = skillSpi;
break;
case 'focus':
skillToUse = skillFo;
break;
case 'unskilled':
skillToUse = skillUn;
break;
@@ -4261,10 +4330,10 @@ function setSkillDropdown(section, field, value, rowid) {
}
}
const weaponsskilllist = ['fighting', 'athletics', 'shooting', 'weirdscience'];
const weaponsskilllist = ['fighting', 'athletics', 'shooting', 'weirdscience','faith','focus','performance','psionics','spellcasting'];
weaponsskilllist.forEach(weaponsskill => {
on(`change:${weaponsskill}name`, function (eventInfo) {
console.log('Triggering Attribute: ' + eventInfo.sourceAttribute);
log('Weapon Skill List', 'Skill Name Change', 'lime');
let field = 'r' + eventInfo.sourceAttribute;
let value = eventInfo.newValue;
setSkillDropdown('weapons', field, value);
@@ -4297,6 +4366,11 @@ const weaponsskillnamelist = [
'athleticsname',
'shootingname',
'weirdsciencename',
'faithname',
'focusname',
'performancename',
'psionicsname',
'spellcastingname'
]; // Considering a refactor here
const spellskillnamelist = [
'faithname',
@@ -6494,7 +6568,7 @@ on(
</script>
<!-- Necessary Mixins-->
<!-- Hidden inputs for character sheet versioning, etc-->
<input type="hidden" name="attr_character_sheet" value="Official Savage Worlds v1.00.25"/>
<input type="hidden" name="attr_character_sheet" value="Official Savage Worlds v1.00.27"/>
<input type="hidden" name="attr_firstInit" value="0"/>
<input type="hidden" name="attr_namelength" value="0"/>
<input type="hidden" name="attr_wdNum" value="1"/>
@@ -6825,6 +6899,10 @@ on(
</div>
<div class="skillsCondensed">
<h3 class="groupHeading" data-i18n="skills">Skills</h3>&nbsp; &nbsp;
<!--Unskilled-->
<!--Button for Statblock view--><span class="unskilled condensedSkill">
<button class="traitbutton miniButton" type="roll" name="roll_tUnskilledRoll" title="@{tUnskilledRoll}" value="@{unskilledRollValue} {{skill_roll=[[ @{unskilledSkillRollFormula} ]]}} {{wild_die=[[ @{unskilledWildDieFormula} ]]}}"> <span data-i18n="unskilled-d4-2">Unskilled (d4-2)</span>
</button></span>
<!--static skill list-->
<!--do stuff-->
<input class="hiddenInput staticacademics" type="checkbox" name="attr_staticacademics"/>
@@ -7854,27 +7932,83 @@ on(
<label class="configlabels" data-i18n="skill">Skill</label>
<div class="container">
<div class="child">
<label class="ddmenu">
<input class="select-radio fighting" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="fighting" checked="checked"/>&nbsp;<span name="attr_rfightingname"> </span>
</label>
<label class="ddmenu athletics">
<input class="select-radio athletics" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="athletics"/>&nbsp;<span name="attr_rathleticsname"> </span>
<input class="select-radio athletics" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="athletics"/>&nbsp;<span name="attr_rathleticsname"></span>
</label>
<label class="ddmenu faith">
<input class="select-radio faith" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="faith"/>&nbsp;<span name="attr_rfaithname"></span>
</label>
<label class="ddmenu fighting">
<input class="select-radio fighting" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="fighting"/>&nbsp;<span name="attr_rfightingname"></span>
</label>
<label class="ddmenu focus">
<input class="select-radio focus" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="focus"/>&nbsp;<span name="attr_rfocusname"></span>
</label>
<label class="ddmenu performance">
<input class="select-radio performance" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="performance"/>&nbsp;<span name="attr_rperformancename"></span>
</label>
<label class="ddmenu psionics">
<input class="select-radio psionics" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="psionics"/>&nbsp;<span name="attr_rpsionicsname"></span>
</label>
<label class="ddmenu shooting">
<input class="select-radio shooting" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="shooting"/>&nbsp;<span name="attr_rshootingname"> </span>
<input class="select-radio shooting" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="shooting"/>&nbsp;<span name="attr_rshootingname"></span>
</label>
<label class="ddmenu">
<input class="select-radio unskilled" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="unskilled"/>&nbsp;<span data-i18n="unskilled">Unskilled</span>
<label class="ddmenu spellcasting">
<input class="select-radio spellcasting" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="spellcasting"/>&nbsp;<span name="attr_rspellcastingname"></span>
</label>
<label class="ddmenu weirdscience">
<input class="select-radio weirdscience" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="weirdscience"/>&nbsp;<span name="attr_rweirdsciencename"> </span>
<input class="select-radio weirdscience" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="weirdscience"/>&nbsp;<span name="attr_rweirdsciencename"></span>
</label>
<!--
label(class="ddmenu")
input(type="radio" class="select-radio fighting" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="fighting" checked="checked")
| &nbsp;
span(name='attr_rfightingname')
label(class="ddmenu athletics")
input(type="radio" class="select-radio athletics" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="athletics")
| &nbsp;
span(name='attr_rathleticsname')
label(class="ddmenu shooting")
input(type="radio" class="select-radio shooting" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="shooting")
| &nbsp;
span(name='attr_rshootingname')
label(class="ddmenu")
input(type="radio" class="select-radio unskilled" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="unskilled")
| &nbsp;
span(data-i18n='unskilled') Unskilled
label(class="ddmenu weirdscience")
input(type="radio" class="select-radio weirdscience" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="weirdscience")
| &nbsp;
span(name='attr_rweirdsciencename')
-->
<!--Manually add the stuff for Spirit, because it doesn't follow the pattern...-->
<label class="ddmenu spirit">
<input class="select-radio spirit" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="spirit"/>&nbsp;<span data-i18n="spirit">Spirit</span>
</label>
<input class="select-radio" type="hidden" name="attr_weaponskill" value="fighting"/>
<div class="fighting"><span name="attr_rfightingname"> </span></div>
<div class="athletics"><span name="attr_rathleticsname"> </span></div>
<div class="shooting"><span name="attr_rshootingname"> </span></div>
<div class="unskilled"><span data-i18n="unskilled">Unskilled</span></div>
<div class="weirdscience"><span name="attr_rweirdsciencename"> </span></div>
<div class="athletics"><span name="attr_rathleticsname"></span></div>
<div class="faith"><span name="attr_rfaithname"></span></div>
<div class="fighting"><span name="attr_rfightingname"></span></div>
<div class="focus"><span name="attr_rfocusname"></span></div>
<div class="performance"><span name="attr_rperformancename"></span></div>
<div class="psionics"><span name="attr_rpsionicsname"></span></div>
<div class="shooting"><span name="attr_rshootingname"></span></div>
<div class="spellcasting"><span name="attr_rspellcastingname"></span></div>
<div class="weirdscience"><span name="attr_rweirdsciencename"></span></div>
<div class="spirit"><span data-i18n="spirit">Spirit</span></div>
<!--
div(class="fighting")
span(name='attr_rfightingname')
div(class="athletics")
span(name='attr_rathleticsname')
div(class="shooting")
span(name='attr_rshootingname')
div(class="unskilled")
span(data-i18n='unskilled') Unskilled
div(class="weirdscience")
span(name='attr_rweirdsciencename')
-->
</div>
</div>
<label class="configlabels" data-i18n="skill-modifier">Skill Modifier</label>(
@@ -7922,14 +8056,36 @@ on(
<!-- Skill Formulae-->
<input type="hidden" name="attr_weaponUnskilledFormula" value="@{unskilledSkillRollFormula}"/>
<input type="hidden" name="attr_weaponUnskilledWildDieFormula" value="@{unskilledWildDieFormula}"/>
<!-- Fighting-->
<input type="hidden" name="attr_weaponFightingFormula" value="@{fightingSkillRollFormula}"/>
<input type="hidden" name="attr_weaponFightingWildDieFormula" value="@{fightingWildDieFormula}"/>
<!-- Athletics-->
<input type="hidden" name="attr_weaponAthleticsFormula" value="@{athleticsSkillRollFormula}"/>
<input type="hidden" name="attr_weaponAthleticsWildDieFormula" value="@{athleticsWildDieFormula}"/>
<!-- Shooting-->
<input type="hidden" name="attr_weaponShootingFormula" value="@{shootingSkillRollFormula}"/>
<input type="hidden" name="attr_weaponShootingWildDieFormula" value="@{shootingWildDieFormula}"/>
<!-- Weird Science-->
<input type="hidden" name="attr_weaponWeirdScienceFormula" value="@{weirdscienceSkillRollFormula}"/>
<input type="hidden" name="attr_weaponWeirdScienceWildDieFormula" value="@{weirdscienceWildDieFormula}"/>
<!-- Faith-->
<input type="hidden" name="attr_weaponfaithFormula" value="@{faithSkillRollFormula}"/>
<input type="hidden" name="attr_weaponfaithWildDieFormula" value="@{faithWildDieFormula}"/>
<!-- Focus-->
<input type="hidden" name="attr_weaponfocusFormula" value="@{focusSkillRollFormula}"/>
<input type="hidden" name="attr_weaponfocusWildDieFormula" value="@{focusWildDieFormula}"/>
<!-- Performance-->
<input type="hidden" name="attr_weaponperformanceFormula" value="@{performanceSkillRollFormula}"/>
<input type="hidden" name="attr_weaponperformanceWildDieFormula" value="@{performanceWildDieFormula}"/>
<!-- Psionics-->
<input type="hidden" name="attr_weaponpsionicsFormula" value="@{psionicsSkillRollFormula}"/>
<input type="hidden" name="attr_weaponpsionicsWildDieFormula" value="@{psionicsWildDieFormula}"/>
<!-- Spellcasting-->
<input type="hidden" name="attr_weaponspellcastingFormula" value="@{spellcastingSkillRollFormula}"/>
<input type="hidden" name="attr_weaponspellcastingWildDieFormula" value="@{spellcastingWildDieFormula}"/>
<!-- Spirit-->
<input type="hidden" name="attr_weaponspiritFormula" value="@{spiritRollFormula}"/>
<input type="hidden" name="attr_weaponspiritWildDieFormula" value="@{spiritWildDieFormula}"/>
<!-- Hidden Fields for the roll button(s), etc-->
<input type="hidden" name="attr_weaponroll" value="@{damageOnly}"/>
<!-- Used for Skill and Damage roll-->
@@ -8151,7 +8307,7 @@ on(
</fieldset>
</div>
<div class="logoBlock">
<input class="showLogo" type="hidden" value="SavageWorlds" name="attr_logo"/><img class="logo PEG" src="https://raw.githubusercontent.com/finderski/SWT/master/PEG_LOGO_White.png"/><img class="logo Deadlands" src="http://www.geeksville.us/roll20/Deadlands.png"/><img class="logo SWADE" src="http://www.geeksville.us/roll20/SW_Logo_AE.png"/><img class="logo SWPF" src="https://raw.githubusercontent.com/finderski/SWT/master/SWAD%20Update%20Images/PFforSW_logo9_square_smaller.png"/><img class="logo Rifts" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/Savage_Rifts_Logo.png"/>
<input class="showLogo" type="hidden" value="SavageWorlds" name="attr_logo"/><img class="logo PEG" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/PEG_LOGO_White.png"/><img class="logo Deadlands" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/Deadlands.png"/><img class="logo SWADE" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/SW_Logo_AE.png"/><img class="logo SWPF" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/PFforSW_logo9_square_smaller.png"/><img class="logo Rifts" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/Savage_Rifts_Logo.png"/>
</div>
</div>
<div class="character">
@@ -8449,8 +8605,7 @@ on(
</label></span><span class="skillItem" data-i18n-list-item="core-skills">
<label class="SkillListLabel">
<input class="StaticSkill" type="checkbox" name="attr_staticCore" value="1"/><span> </span><span class="boldMaroon" data-i18n="core-skills">Core Skills</span>
</label></span>
<!-- each skill in skillNamesList--><span class="skillItem" data-i18n-list-item="academics">
</label></span><span class="skillItem" data-i18n-list-item="academics">
<label class="SkillListLabel">
<!-- input(type="checkbox", class="StaticSkill", name=`attr_static${skill}`)-->
<input class="StaticSkill staticacademics" type="checkbox" name="attr_staticacademics"/><span> </span><span name="attr_academicsname"></span>
@@ -8593,7 +8748,8 @@ on(
<div class="selected-skills" data-i18n-list="character-skills">
<!-- unskilled-->
<div class="basetrait" data-i18n-list-item="unskilled">
<button class="unskilledbutton traitflexattbutton" type="roll" name="roll_tUnskilledRoll" title="@{tUnskilledRoll}" value="@{whisperunskilled} &amp;{template:roll} {{namelength=@{namelength}}} @{rolltUnskilled} {{skill_roll=[[ @{unskilledSkillRollFormula} ]]}} {{wild_die=[[ @{unskilledWildDieFormula} ]]}} @{unskilledencumbrancebutton} @{showtraitmods} {{conviction=[[ [[@{conviction}]]d6! ]] }} @{unshakeTemplate} {{button=y}} {{ReRoll=^{reroll}(~tUnskilledRoll)}} {{theme=@{rolltemplate_theme}}} {{showToken=[[0d6+@{show_token}]]}} @{roll_template_token}"> <span data-i18n="unskilled-d4-2">Unskilled (d4-2)</span></button><span class="unskilledOptions">
<!-- button(type="roll", class="unskilledbutton traitflexattbutton", name="roll_tUnskilledRoll", title="@{tUnskilledRoll}", value="@{whisperunskilled} &{template:roll} {{namelength=@{namelength}}} @{rolltUnskilled} {{skill_roll=[[ @{unskilledSkillRollFormula} ]]}} {{wild_die=[[ @{unskilledWildDieFormula} ]]}} @{unskilledencumbrancebutton} @{showtraitmods} {{conviction=[[ [[@{conviction}]]d6! ]] }} @{unshakeTemplate} {{button=y}} {{ReRoll=^{reroll}(~tUnskilledRoll)}} {{theme=@{rolltemplate_theme}}} {{showToken=[[0d6+@{show_token}]]}} @{roll_template_token}") -->
<button class="unskilledbutton traitflexattbutton" type="roll" name="roll_tUnskilledRoll" title="@{tUnskilledRoll}" value="@{unskilledRollValue} {{skill_roll=[[ @{unskilledSkillRollFormula} ]]}} {{wild_die=[[ @{unskilledWildDieFormula} ]]}}"> <span data-i18n="unskilled-d4-2">Unskilled (d4-2)</span></button><span class="unskilledOptions">
<label class="traitlabel" data-i18n-title="apply-encumbrance">
<input class="traitradio" type="checkbox" name="attr_unskilledencumbrance" title="@{unskilledencumbrance}" value="1"/><span class="joat">O</span>
</label></span>
@@ -8612,6 +8768,7 @@ on(
<input class="wildDieDesc" type="text" name="attr_unskilledwilddieinfo" placeholder="Standard Wild Die die type" data-i18n-placeholder="no-modifying-edges"/>
</div>
</details>
<input type="hidden" name="attr_unskilledRollValue" value="@{whisperunskilled} &amp;{template:roll} {{namelength=@{namelength}}} @{rolltUnskilled} @{unskilledencumbrancebutton} @{showtraitmods} {{conviction=[[ [[@{conviction}]]d6! ]] }} @{unshakeTemplate} {{button=y}} {{ReRoll=^{reroll}(~tUnskilledRoll)}} {{theme=@{rolltemplate_theme}}} {{showToken=[[0d6+@{show_token}]]}} @{roll_template_token}"/>
<input type="hidden" name="attr_unskilled_rank" value="1d4! -2"/>
<input type="hidden" name="attr_unskilled_display" value="1d4-2"/>
<input type="hidden" name="attr_unskilledSkillRollFormula" value="@{unskilled_rank} + @{ModSum}[Wounds, Fatigue, Distracted] + @{traitmods} + [[@{UnskilledEncumbrance}*@{encumbrance}]][Encumbrance Penalty]"/>
@@ -12880,7 +13037,7 @@ on(
img(class="logo Deadlands" src="http://www.geeksville.us/roll20/Deadlands.png")
img(class="logo SWADE" src="http://www.geeksville.us/roll20/SW_Logo_AE.png")
-->
<input class="showLogo" type="hidden" value="SavageWorlds" name="attr_logo"/><img class="logo PEG" src="https://raw.githubusercontent.com/finderski/SWT/master/PEG_LOGO_White.png"/><img class="logo Deadlands" src="http://www.geeksville.us/roll20/Deadlands.png"/><img class="logo SWADE" src="http://www.geeksville.us/roll20/SW_Logo_AE.png"/><img class="logo SWPF" src="https://raw.githubusercontent.com/finderski/SWT/master/SWAD%20Update%20Images/PFforSW_logo9_square_smaller.png"/><img class="logo Rifts" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/Savage_Rifts_Logo.png"/>
<input class="showLogo" type="hidden" value="SavageWorlds" name="attr_logo"/><img class="logo PEG" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/PEG_LOGO_White.png"/><img class="logo Deadlands" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/Deadlands.png"/><img class="logo SWADE" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/SW_Logo_AE.png"/><img class="logo SWPF" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/PFforSW_logo9_square_smaller.png"/><img class="logo Rifts" src="https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/Official%20Savage%20Worlds/images/logos/Savage_Rifts_Logo.png"/>
<!--Right Column (Hindrances, Ancestry Abilities, Special Abilties, Edges/Advances)-->
<input class="showconditions hiddenInput" type="checkbox" name="attr_showconditions" checked="checked"/>
<div class="conditions">
@@ -13084,9 +13241,30 @@ on(
<hr class="weaponItem weapon-hr"/>
<input type="hidden" name="attr_vbonusdamage" value="1d6"/>
<input class="vdamage" type="checkbox" name="attr_RaiseHBRule" value="2" checked="checked"/>
<input class="AthleticsStaticSkill hiddenButton" type="checkbox" name="attr_staticAthletics"/>
<input class="ShootingStaticSkill hiddenButton" type="checkbox" name="attr_staticShooting"/>
<input class="WSStaticSkill hiddenButton" type="checkbox" name="attr_staticWeirdScience"/>
<!--
input(class="AthleticsStaticSkill hiddenButton" type="checkbox" name="attr_staticAthletics")
input(class="ShootingStaticSkill hiddenButton" type="checkbox" name="attr_staticShooting")
input(class="WSStaticSkill hiddenButton" type="checkbox" name="attr_staticWeirdScience")
-->
<!--do stuff-->
<input class="hiddenInput staticathletics" type="checkbox" name="attr_staticathletics"/>
<!--do stuff-->
<input class="hiddenInput staticfaith" type="checkbox" name="attr_staticfaith"/>
<!--do stuff-->
<input class="hiddenInput staticfighting" type="checkbox" name="attr_staticfighting"/>
<!--do stuff-->
<input class="hiddenInput staticfocus" type="checkbox" name="attr_staticfocus"/>
<!--do stuff-->
<input class="hiddenInput staticperformance" type="checkbox" name="attr_staticperformance"/>
<!--do stuff-->
<input class="hiddenInput staticpsionics" type="checkbox" name="attr_staticpsionics"/>
<!--do stuff-->
<input class="hiddenInput staticshooting" type="checkbox" name="attr_staticshooting"/>
<!--do stuff-->
<input class="hiddenInput staticspellcasting" type="checkbox" name="attr_staticspellcasting"/>
<!--do stuff-->
<input class="hiddenInput staticweirdscience" type="checkbox" name="attr_staticweirdscience"/>
<input type="hidden" name="attr_vbonusdamage" value="1d6"/>
<input class="vdamage" type="checkbox" name="attr_RaiseHBRule" value="2" checked="checked"/>
<fieldset class="repeating_weapons" style="width: 100%;">
@@ -13147,27 +13325,83 @@ on(
<label class="configlabels" data-i18n="skill">Skill</label>
<div class="container">
<div class="child">
<label class="ddmenu">
<input class="select-radio fighting" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="fighting" checked="checked"/>&nbsp;<span name="attr_rfightingname"> </span>
</label>
<label class="ddmenu athletics">
<input class="select-radio athletics" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="athletics"/>&nbsp;<span name="attr_rathleticsname"> </span>
<input class="select-radio athletics" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="athletics"/>&nbsp;<span name="attr_rathleticsname"></span>
</label>
<label class="ddmenu faith">
<input class="select-radio faith" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="faith"/>&nbsp;<span name="attr_rfaithname"></span>
</label>
<label class="ddmenu fighting">
<input class="select-radio fighting" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="fighting"/>&nbsp;<span name="attr_rfightingname"></span>
</label>
<label class="ddmenu focus">
<input class="select-radio focus" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="focus"/>&nbsp;<span name="attr_rfocusname"></span>
</label>
<label class="ddmenu performance">
<input class="select-radio performance" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="performance"/>&nbsp;<span name="attr_rperformancename"></span>
</label>
<label class="ddmenu psionics">
<input class="select-radio psionics" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="psionics"/>&nbsp;<span name="attr_rpsionicsname"></span>
</label>
<label class="ddmenu shooting">
<input class="select-radio shooting" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="shooting"/>&nbsp;<span name="attr_rshootingname"> </span>
<input class="select-radio shooting" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="shooting"/>&nbsp;<span name="attr_rshootingname"></span>
</label>
<label class="ddmenu">
<input class="select-radio unskilled" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="unskilled"/>&nbsp;<span data-i18n="unskilled">Unskilled</span>
<label class="ddmenu spellcasting">
<input class="select-radio spellcasting" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="spellcasting"/>&nbsp;<span name="attr_rspellcastingname"></span>
</label>
<label class="ddmenu weirdscience">
<input class="select-radio weirdscience" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="weirdscience"/>&nbsp;<span name="attr_rweirdsciencename"> </span>
<input class="select-radio weirdscience" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="weirdscience"/>&nbsp;<span name="attr_rweirdsciencename"></span>
</label>
<!--
label(class="ddmenu")
input(type="radio" class="select-radio fighting" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="fighting" checked="checked")
| &nbsp;
span(name='attr_rfightingname')
label(class="ddmenu athletics")
input(type="radio" class="select-radio athletics" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="athletics")
| &nbsp;
span(name='attr_rathleticsname')
label(class="ddmenu shooting")
input(type="radio" class="select-radio shooting" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="shooting")
| &nbsp;
span(name='attr_rshootingname')
label(class="ddmenu")
input(type="radio" class="select-radio unskilled" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="unskilled")
| &nbsp;
span(data-i18n='unskilled') Unskilled
label(class="ddmenu weirdscience")
input(type="radio" class="select-radio weirdscience" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="weirdscience")
| &nbsp;
span(name='attr_rweirdsciencename')
-->
<!--Manually add the stuff for Spirit, because it doesn't follow the pattern...-->
<label class="ddmenu spirit">
<input class="select-radio spirit" type="radio" name="attr_weaponskill" title="@{repeating_weapons_$#_weaponskill}" value="spirit"/>&nbsp;<span data-i18n="spirit">Spirit</span>
</label>
<input class="select-radio" type="hidden" name="attr_weaponskill" value="fighting"/>
<div class="fighting"><span name="attr_rfightingname"> </span></div>
<div class="athletics"><span name="attr_rathleticsname"> </span></div>
<div class="shooting"><span name="attr_rshootingname"> </span></div>
<div class="unskilled"><span data-i18n="unskilled">Unskilled</span></div>
<div class="weirdscience"><span name="attr_rweirdsciencename"> </span></div>
<div class="athletics"><span name="attr_rathleticsname"></span></div>
<div class="faith"><span name="attr_rfaithname"></span></div>
<div class="fighting"><span name="attr_rfightingname"></span></div>
<div class="focus"><span name="attr_rfocusname"></span></div>
<div class="performance"><span name="attr_rperformancename"></span></div>
<div class="psionics"><span name="attr_rpsionicsname"></span></div>
<div class="shooting"><span name="attr_rshootingname"></span></div>
<div class="spellcasting"><span name="attr_rspellcastingname"></span></div>
<div class="weirdscience"><span name="attr_rweirdsciencename"></span></div>
<div class="spirit"><span data-i18n="spirit">Spirit</span></div>
<!--
div(class="fighting")
span(name='attr_rfightingname')
div(class="athletics")
span(name='attr_rathleticsname')
div(class="shooting")
span(name='attr_rshootingname')
div(class="unskilled")
span(data-i18n='unskilled') Unskilled
div(class="weirdscience")
span(name='attr_rweirdsciencename')
-->
</div>
</div>
<label class="configlabels" data-i18n="skill-modifier">Skill Modifier</label>(
@@ -13215,14 +13449,36 @@ on(
<!-- Skill Formulae-->
<input type="hidden" name="attr_weaponUnskilledFormula" value="@{unskilledSkillRollFormula}"/>
<input type="hidden" name="attr_weaponUnskilledWildDieFormula" value="@{unskilledWildDieFormula}"/>
<!-- Fighting-->
<input type="hidden" name="attr_weaponFightingFormula" value="@{fightingSkillRollFormula}"/>
<input type="hidden" name="attr_weaponFightingWildDieFormula" value="@{fightingWildDieFormula}"/>
<!-- Athletics-->
<input type="hidden" name="attr_weaponAthleticsFormula" value="@{athleticsSkillRollFormula}"/>
<input type="hidden" name="attr_weaponAthleticsWildDieFormula" value="@{athleticsWildDieFormula}"/>
<!-- Shooting-->
<input type="hidden" name="attr_weaponShootingFormula" value="@{shootingSkillRollFormula}"/>
<input type="hidden" name="attr_weaponShootingWildDieFormula" value="@{shootingWildDieFormula}"/>
<!-- Weird Science-->
<input type="hidden" name="attr_weaponWeirdScienceFormula" value="@{weirdscienceSkillRollFormula}"/>
<input type="hidden" name="attr_weaponWeirdScienceWildDieFormula" value="@{weirdscienceWildDieFormula}"/>
<!-- Faith-->
<input type="hidden" name="attr_weaponfaithFormula" value="@{faithSkillRollFormula}"/>
<input type="hidden" name="attr_weaponfaithWildDieFormula" value="@{faithWildDieFormula}"/>
<!-- Focus-->
<input type="hidden" name="attr_weaponfocusFormula" value="@{focusSkillRollFormula}"/>
<input type="hidden" name="attr_weaponfocusWildDieFormula" value="@{focusWildDieFormula}"/>
<!-- Performance-->
<input type="hidden" name="attr_weaponperformanceFormula" value="@{performanceSkillRollFormula}"/>
<input type="hidden" name="attr_weaponperformanceWildDieFormula" value="@{performanceWildDieFormula}"/>
<!-- Psionics-->
<input type="hidden" name="attr_weaponpsionicsFormula" value="@{psionicsSkillRollFormula}"/>
<input type="hidden" name="attr_weaponpsionicsWildDieFormula" value="@{psionicsWildDieFormula}"/>
<!-- Spellcasting-->
<input type="hidden" name="attr_weaponspellcastingFormula" value="@{spellcastingSkillRollFormula}"/>
<input type="hidden" name="attr_weaponspellcastingWildDieFormula" value="@{spellcastingWildDieFormula}"/>
<!-- Spirit-->
<input type="hidden" name="attr_weaponspiritFormula" value="@{spiritRollFormula}"/>
<input type="hidden" name="attr_weaponspiritWildDieFormula" value="@{spiritWildDieFormula}"/>
<!-- Hidden Fields for the roll button(s), etc-->
<input type="hidden" name="attr_weaponroll" value="@{damageOnly}"/>
<!-- Used for Skill and Damage roll-->
@@ -15582,6 +15838,40 @@ on(
</div>
<div class="releasenotesTab">
<h1 class="groupHeader documentationHeader" data-i18n="release-notes">Release Notes</h1>
<!-- Release 1.00.27-->
<label class="rowlabel">
<input class="releasenotes" type="checkbox" name="attr_releasenotes10027" value="1"/><span class="releasenotesVersion">
<h4 class="rnversion"><span data-i18n="version"></span>1.00.27</h4></span>
</label>
<input class="releasenotes" type="checkbox" style="display:none;" name="attr_releasenotes10027" value="1"/>
<div class="releasenotes">
<h2 class="releaseNotesSubHeader" data-i18n="minor-release">Minor Release</h2>
<p data-i18n="minor-release-info">This release focuses on Minor Enhancements and Bug Fixes</p>
<h2 class="releaseNotesSubHeader" data-i18n="enhancements">Enhancements</h2>
<ul class="releaseNotesList">
<li><span class="black" data-i18n="add-artificer-support">Added support for the Artificer Edge and Arcane Devices; sometimes the user needs to use the Caster's arcane skill, it is now possible to designate an Arcane skill for a weapon. The skill must be checked and configured properly for it to show up in the list of options. Because the user may be using another character's Arcane skill, it's recommended that you add that skill and configure it as temporarily boosted to get the appropriate rank. </span></li>
</ul>
<h2 class="releaseNotesSubHeader" data-i18n="bugs-fixed">Bugs Fixed</h2>
<ul class="releaseNotesList">
<li> <span class="black" data-i18n="hide-arcane-skills-in-weapons">Fixed an issue where the arcane skill (Weird Science) wasn't hidden if the user didn't have Weird Science.</span></li>
</ul>
</div>
<!-- Release 1.00.26-->
<label class="rowlabel">
<input class="releasenotes" type="checkbox" name="attr_releasenotes10026" value="1"/><span class="releasenotesVersion">
<h4 class="rnversion"><span data-i18n="version"></span>1.00.26</h4></span>
</label>
<input class="releasenotes" type="checkbox" style="display:none;" name="attr_releasenotes10026" value="1"/>
<div class="releasenotes">
<h2 class="releaseNotesSubHeader" data-i18n="bug-fix-release">Bug Fix Release</h2>
<p data-i18n="bug-fix-release-info">This release focuses on Bug Fixes</p>
<h2 class="releaseNotesSubHeader" data-i18n="bugs-fixed">Bugs Fixed</h2>
<ul class="releaseNotesList">
<li> <span class="black" data-i18n="statblock-view-skill-spillover">Fixed an issue where the if one had a lot of custom skills, it would not wrap properly and the skills (and potentially Hindrances and Special Abilities) would flow off the character sheet.</span></li>
<li> <span class="black" data-i18n="unskilled-button-on-statblock-view">Fixed an issue where the Unskilled roll button was not present on the Statblock (locked) view of the character sheet.</span></li>
<li><span class="black" data-i18n="token-in-rolltemplate-not-showing">Fixed an issue where if the character sheet didn't have a token assigned, the roll template would still attempt to show the image. Now, if a token is not assigned, the sheet will look to see if an Avatar is assigned for the character and if so, it will use that; if neither a token nor an avatar are assigned, the sheet will uncheck the setting to display the token on the roll template.</span></li>
</ul>
</div>
<!-- Release 1.00.25-->
<label class="rowlabel">
<input class="releasenotes" type="checkbox" name="attr_releasenotes10025" value="1"/><span class="releasenotesVersion">
@@ -16382,7 +16672,7 @@ on(
{{#skill_roll5}}<span class="sheet-rollContainer">{{skill_roll5}}</span>{{/skill_roll5}}
{{/rollGreater() numrolls 4}}
{{#rollGreater() numrolls 5}}
{{#allprops() skill_rank mook showtt showwounds showfatigue showdistracted showenc skill_roll skill_roll2 skill_roll3 skill_roll4 skill_roll5 name trait source PowerTemplate wild_die wild_die2 wild_die3 wild_die4 wild_die5 mods ttmod wounds fatigue distracted encumbrance notes button DmgRoll numrolls wcicon distracteds vulnerable stunned unshake ReRoll vigorStunned unshakeTemplate ap getgritty GrittyRoll skill_rollall trappings bonus_die wci showspec showap wildcard shaken namelength conviction ignoremaxheight}}<span class="sheet-rollContainer">{{value}}</span>{{/allprops() skill_rank mook showtt showwounds showfatigue showdistracted showenc skill_roll skill_roll2 skill_roll3 skill_roll4 skill_roll5 name trait source PowerTemplate wild_die wild_die2 wild_die3 wild_die4 wild_die5 mods ttmod wounds fatigue distracted encumbrance notes button DmgRoll numrolls wcicon distracteds vulnerable stunned unshake ReRoll vigorStunned unshakeTemplate ap getgritty GrittyRoll skill_rollall trappings bonus_die wci showspec showap wildcard shaken namelength conviction ignoremaxheight}}
{{#allprops() theme skill_rank mook showtt showwounds showfatigue showdistracted showenc skill_roll skill_roll2 skill_roll3 skill_roll4 skill_roll5 name trait source PowerTemplate wild_die wild_die2 wild_die3 wild_die4 wild_die5 mods ttmod wounds fatigue distracted encumbrance notes button DmgRoll numrolls wcicon distracteds vulnerable stunned unshake ReRoll vigorStunned unshakeTemplate ap getgritty GrittyRoll skill_rollall trappings bonus_die wci showspec showap wildcard shaken namelength conviction ignoremaxheight}}<span class="sheet-rollContainer">{{value}}</span>{{/allprops() theme skill_rank mook showtt showwounds showfatigue showdistracted showenc skill_roll skill_roll2 skill_roll3 skill_roll4 skill_roll5 name trait source PowerTemplate wild_die wild_die2 wild_die3 wild_die4 wild_die5 mods ttmod wounds fatigue distracted encumbrance notes button DmgRoll numrolls wcicon distracteds vulnerable stunned unshake ReRoll vigorStunned unshakeTemplate ap getgritty GrittyRoll skill_rollall trappings bonus_die wci showspec showap wildcard shaken namelength conviction ignoremaxheight}}
{{/rollGreater() numrolls 5}}
</div>
<div class="sheet-templateRoll sheet-trollRight">
@@ -16524,7 +16814,7 @@ on(
{{/rollGreater() computed::lastcallroll 0}}
{{/burnroll}}
{{#buttonstyle}}<div class="sheet-buttonstyle">{{/buttonstyle}}
{{#allprops() description item type wildcard fear heartattack ignoremaxheight buttonstyle burnroll lastcallroll lastcalldesc}}<p><strong>{{key}}</strong><span>{{value}}</span></p>{{/allprops() description item type wildcard fear heartattack ignoremaxheight buttonstyle burnroll lastcallroll lastcalldesc}}
{{#allprops() theme description item type wildcard fear heartattack ignoremaxheight buttonstyle burnroll lastcallroll lastcalldesc}}<p><strong>{{key}}</strong><span>{{value}}</span></p>{{/allprops() theme description item type wildcard fear heartattack ignoremaxheight buttonstyle burnroll lastcallroll lastcalldesc}}
{{#buttonstyle}}</div>{{/buttonstyle}}
</div>
</div>
+1 -1
View File
@@ -6,7 +6,7 @@
"compendium": "SWADE",
"preview": "OfficialSavageWorldsCharacterSheet.jpg",
"legacy": false,
"instructions": "# Official Savage Worlds Character Sheet\r\r### version 1.00.26 \r\r## Character Sheet\r\r* This is the Official Savage Worlds Character Sheet.\r* Supports Wild Cards and Extras\r* Dice rolling\r* various setting rules\r\r## Custom Configuration\r\rTo configure the sheet to meet your needs, click the crossed hammer and wrench.\r\r## Skills\r\r* All skills from the SWADE rules are available, with the ability to change their names. To pick your skills, click the crossed hammer and wrench next to the Skills heading and place a check mark next to each skill you'd like to use.\r* If you need to make a skill an Unskilled roll, you can either use the Unskilled \"skill\" OR place a -2 in the skill modifier field.\r\r## Additional Notes\r\r* More info about individual sections can be found in the Documentation wiki.\r* If there's something you want added, or you'd like to report a bug, feel free to join the Official Savage Worlds Character Sheet Game (https://app.roll20.net/join/8109876/l20ASw). That game has forums for Bug Reports and Enhancement Requests.\r\r---",
"instructions": "# Official Savage Worlds Character Sheet\r\r### version 1.00.27 \r\r## Character Sheet\r\r* This is the Official Savage Worlds Character Sheet.\r* Supports Wild Cards and Extras\r* Dice rolling\r* various setting rules\r\r## Custom Configuration\r\rTo configure the sheet to meet your needs, click the crossed hammer and wrench.\r\r## Skills\r\r* All skills from the SWADE rules are available, with the ability to change their names. To pick your skills, click the crossed hammer and wrench next to the Skills heading and place a check mark next to each skill you'd like to use.\r* If you need to make a skill an Unskilled roll, you can either use the Unskilled \"skill\" OR place a -2 in the skill modifier field.\r\r## Additional Notes\r\r* More info about individual sections can be found in the Documentation wiki.\r* If there's something you want added, or you'd like to report a bug, feel free to join the Official Savage Worlds Character Sheet Game (https://app.roll20.net/join/8109876/l20ASw). That game has forums for Bug Reports and Enhancement Requests.\r\r---",
"useroptions": [
{
"attribute": "WCI",
+3 -1
View File
@@ -1042,5 +1042,7 @@
"show-token-paragraph": "Selecting this option will show the Token (or Avatar) associated with the character sheet. If neither a token nor an avatar are assigned to the character, this option will automatically deselect.",
"statblock-view-skill-spillover": "Fixed an issue where the if one had a lot of custom skills, it would not wrap properly and the skills (and potentially Hindrances and Special Abilities) would flow off the character sheet.",
"unskilled-button-on-statblock-view": "Fixed an issue where the Unskilled roll button was not present on the Statblock (locked) view of the character sheet.",
"token-in-rolltemplate-not-showing": "Fixed an issue where if the character sheet didn't have a token assigned, the roll template would still attempt to show the image. Now, if a token is not assigned, the sheet will look to see if an Avatar is assigned for the character and if so, it will use that; if neither a token nor an avatar are assigned, the sheet will uncheck the setting to display the token on the roll template."
"token-in-rolltemplate-not-showing": "Fixed an issue where if the character sheet didn't have a token assigned, the roll template would still attempt to show the image. Now, if a token is not assigned, the sheet will look to see if an Avatar is assigned for the character and if so, it will use that; if neither a token nor an avatar are assigned, the sheet will uncheck the setting to display the token on the roll template.",
"add-artificer-support": "Added support for the Artificer Edge and Arcane Devices; sometimes the user needs to use the Caster's arcane skill, it is now possible to designate an Arcane skill for a weapon. The skill must be checked and configured properly for it to show up in the list of options. Because the user may be using another character's Arcane skill, it's recommended that you add that skill and configure it as temporarily boosted to get the appropriate rank.",
"hide-arcane-skills-in-weapons": "Fixed an issue where the arcane skill (Weird Science) wasn't hidden if the user didn't have Weird Science."
}