diff --git a/Official Savage Worlds/SavageWorldsCharSheet.css b/Official Savage Worlds/SavageWorldsCharSheet.css index 12138b9d38..4e2f26b88d 100644 --- a/Official Savage Worlds/SavageWorldsCharSheet.css +++ b/Official Savage Worlds/SavageWorldsCharSheet.css @@ -1408,6 +1408,10 @@ select.sheet-paceDietype { } /*---- Conditions ----*/ +.sheet-conditionsnew { + width: 100%; +} + .sheet-conditions { text-align: center; display:none; @@ -2076,13 +2080,14 @@ input.sheet-selectedLinkedAtt[value="(SMA)"] ~ .sheet-LASMA, width: 90%; } /*---- Wealth ----*/ + +/* --------- Old/Current -------------- .sheet-usewealth, .sheet-wealthmod, .sheet-usewealthmod, .sheet-usewealth:checked ~ .sheet-nonwealth, .sheet-usewealth:checked ~ .sheet-lankhmar, .sheet-usewealth:checked + .sheet-useLankhmar:checked + .sheet-lankhmar, -/*.sheet-lankhmar,*/ .sheet-money, .sheet-Credits { display: none; @@ -2093,12 +2098,8 @@ input.sheet-selectedLinkedAtt[value="(SMA)"] ~ .sheet-LASMA, .sheet-usewealth:checked + .sheet-showwealthwilddie, .sheet-usewealth:checked ~ .sheet-usewealthmod, .sheet-useLankhmar:checked + .sheet-lankhmar, -/*input[value="3"].sheet-usePieces ~ .sheet-lankhmar,*/ input[value="3"].sheet-usePieces ~ .sheet-money, input[value="0"].sheet-usePieces ~ .sheet-money, -/*input[value="1"].sheet-usePieces ~ .sheet-PofE,*/ -/*input[value="2"].sheet-usePieces ~ .sheet-Clams,*/ -/*input[value="5"].sheet-usePieces ~ .sheet-Livre,*/ input[value="4"].sheet-usePieces ~ .sheet-Credits { display: flex; } @@ -2110,6 +2111,65 @@ input[value="4"].sheet-usePieces ~ .sheet-Credits { input:not([value="3"]).sheet-usePieces ~ .sheet-derivebase > .sheet-moneyfield { width: 165px; } +------------------ End Old/Current Stuff */ + +/* New Money Stuff */ +.sheet-basederived.sheet-usewealth { + display: none; +} + +.sheet-basederived.sheet-usewealth .sheet-derivelabel.sheet-wealth { + flex-grow: 2; +} + +.sheet-money { + flex-grow: 2; +} + +.sheet-moneyLabels { + font-weight: bold; + font-size: 0.75em; + /*margin-top: 5px;*/ + margin-bottom: -3px; +} + +.sheet-usewealth:checked~.sheet-multiMoney { + display: none; +} + +.sheet-usewealth:checked~.sheet-basederived.sheet-usewealth { + display: flex; + width: 100%; +} + +.sheet-usewealth:not(:checked)+.sheet-useMultiCurrency[value="1"]+.sheet-moneyLabels, +.sheet-usewealth:not(:checked)+.sheet-useMultiCurrency[value="1"]~.sheet-nonwealth>.sheet-additionalCurrency { + display: none; +} + +.sheet-usewealth:not(:checked)+.sheet-useMultiCurrency[value="1"]~.sheet-nonwealth>.sheet-derivebase { + width: auto; + flex-grow: 2; +} + +.sheet-useMultiCurrency[value="2"]~.sheet-multiMoney>.sheet-money3, +.sheet-useMultiCurrency[value="2"]~.sheet-multiMoney>.sheet-money4, +.sheet-useMultiCurrency[value="3"]~.sheet-multiMoney>.sheet-money4 { + display: none; +} + +.sheet-usewealth:not(:checked)+.sheet-useMultiCurrency[value="1"]~.sheet-nonwealth>.sheet-derivebase>.sheet-moneyfield { + width: 100%; +} + +.sheet-wealthmod { + display: none; +} + +.sheet-useWealthMod:checked+.sheet-wealthmod { + display: inline-block; +} +/* End New Money Stuff */ .sheet-mischr { border: .45px dashed silver; @@ -3380,7 +3440,7 @@ div.sheet-shieldHalf { .charsheet .sheet-shieldTotalWeight { margin: 0 0 3px 100px; - width: 98%; + /*width: 98%;*/ text-align: left; } @@ -4078,8 +4138,49 @@ div.sheet-vehicleCrewBox { } .sheet-srmconfig { - height: 90px; + height: 150px; } +/* New Stuff for Multi-money */ +.sheet-usewealth, +.sheet-showwealthwilddie, +label.sheet-showwealthwilddie, +.sheet-srmItem.sheet-usewealthmod { + display: none; +} + +.sheet-srmItem .sheet-moneycountlabel { + font-weight: normal; + cursor: pointer; + width: auto; + font-size: 1em; + display: inline-block; +} + +.sheet-srmItem.sheet-multiMoney.sheet-money1, +.sheet-srmItem.sheet-multiMoney.sheet-money2, +.sheet-srmItem.sheet-multiMoney.sheet-money3, +.sheet-srmItem.sheet-multiMoney.sheet-money4 { + display: none; +} + +.sheet-usewealth:not(:checked)~.sheet-moneycount[value="2"]~.sheet-money1, +.sheet-usewealth:not(:checked)~.sheet-moneycount[value="2"]~.sheet-money2, +.sheet-usewealth:not(:checked)~.sheet-moneycount[value="3"]~.sheet-money1, +.sheet-usewealth:not(:checked)~.sheet-moneycount[value="3"]~.sheet-money2, +.sheet-usewealth:not(:checked)~.sheet-moneycount[value="3"]~.sheet-money3, +.sheet-usewealth:not(:checked)~.sheet-moneycount[value="4"]~.sheet-money1, +.sheet-usewealth:not(:checked)~.sheet-moneycount[value="4"]~.sheet-money2, +.sheet-usewealth:not(:checked)~.sheet-moneycount[value="4"]~.sheet-money3, +.sheet-usewealth:not(:checked)~.sheet-moneycount[value="4"]~.sheet-money4 { + display: flex; +} + +.sheet-usewealth:checked~.sheet-showwealthwilddie, +.sheet-usewealth:checked~label.sheet-showwealthwilddie, +.sheet-usewealth:checked~.sheet-srmItem.sheet-usewealthmod { + display: flex; +} +/* End New stuff for Multi-Money */ .sheet-injury { width: 100px; diff --git a/Official Savage Worlds/SavageWorldsCharSheet.html b/Official Savage Worlds/SavageWorldsCharSheet.html index a7c262c2af..5642d91763 100644 --- a/Official Savage Worlds/SavageWorldsCharSheet.html +++ b/Official Savage Worlds/SavageWorldsCharSheet.html @@ -1,4 +1,4 @@ - + @@ -200,7 +200,7 @@ /* ---- Begin Sheet Version Validation & Update ---- */ const sheetVersionPrefix = "Official Savage Worlds v"; - const sheetVersion = "1.00.11"; + const sheetVersion = "1.00.12"; const upgradeSheet = function(version, versionone, versiontwo, versionthree,characterName) { //version format 1.00.01 (string) @@ -259,6 +259,9 @@ if(versionthree < 0.11) { setattrvals["newcontent"] = "unread"; } + if(versionthree < 0.12) { + setattrvals["newcontent"] = "unread"; + } else { log("Upgrade",`Sheet already updgraded (${characterName})`,"lime"); } @@ -344,6 +347,7 @@ setWildDie(); }); + //Ranks and Advances Stuff on("change:repeating_edges:edge change:repeating_edges:tookat remove:repeating_edges", function(v) { log("Change in Edges","Look for Advances","yellow"); getSectionIDs("edges", function(idArray) { @@ -2028,6 +2032,29 @@ }); }); + const moneylist = ["money","gold","silver","electrum","copper"]; + const moneylabels = ["money","moneyone","moneytwo","moneythree","moneyfour"]; + moneylabels.forEach(moneyLabel => { + on("sheet:opened", function() { + log("Money","Setting up money","darkgreen"); + getAttrs([`${moneyLabel}name`], function(v) { + if (v[`${moneyLabel}name`] === "") { + //label is empty, so fill it + const labelIndex = moneylabels.lastIndexOf(moneyLabel); + const moneyType = moneylist[labelIndex]; + const typeOfMoney = getTranslationByKey(`${moneyType}`); + log("Money Type",typeOfMoney,"darkgreen"); + const setmoney = {}; + setmoney[`${moneyLabel}name`] = typeOfMoney; + setAttrs(setmoney); + } + else { + log("Money","Already set","darkgreen"); + } + }); + }); + }); + function setSkillDropdown(section, field, value, rowid) { let repsection = `repeating_${section}`; let setskill = {}; @@ -2740,17 +2767,18 @@ else {log("Is not worn","Don't need to carried...","darkblue");} }); + //Start Compendium Drop const resetCompendiumFields = function() { let setObj = {} setObj["CompendiumName"] = ""; setObj["CompendiumCategory"] = ""; setObj["CompendiumContent"] = ""; setObj["CompendiumData"] = ""; + log("Compendium Reset",JSON.stringify(setObj),r20color); setAttrs(setObj,{silent:true}); //return setObj; } - //Start Compendium Drop const cleanCompendiumData = function(jsonData) { const leftRegEx = /(\"\[)/g; const rightRegEx = /(\]\")/g; @@ -2784,6 +2812,30 @@ } //Set attribute field names...these are all in repeating sections unless otherwise noted + const specialAbiltyUpdates = { + "Construct":{ + "unshakemodtype":"Construct", + "unshakemod":"2", + "reducereason":"Construct", + "reducewoundsby":"1" + }, + "Elemental":{ + "reducereason":"Elemental", + "reducewoundsby":"1" + }, + "Undead":{ + "toughnessModReason":"Undead", + "tufnessMod":"2", + "unshakemodtype":"Undead", + "unshakemod":"2", + "reducereason":"Undead", + "reducewoundsby":"1" + }, + "Dense Body": { + "toughnessModReason":"Dense Body", + "tufnessMod":"2" + } + } const hindrancefields = ["hindrance","hindrancedescription","hindranceType"]; const edgefields = ["edge","edgedescription"]; const gearfields = ["item","itemWeight","description"]; @@ -2806,7 +2858,8 @@ if(jsonObj) { //create Keys for Vehicle Weapons for(let i = 0; i < vehicleweaponfields.length; i++) { - jsonObj[fieldArray[i]] = jsonObj[badFields[i]]; + // jsonObj[fieldArray[i]] = jsonObj[badFields[i]]; + typeof jsonObj[badFields[i]] !== "undefined" ? jsonObj[fieldArray[i]] = jsonObj[badFields[i]] : log("Bad Field","Doesn't exist...nothing to convert",r20color); } log("Ship Weapon JSON",JSON.stringify(jsonObj),r20color); return(jsonObj); @@ -2905,6 +2958,7 @@ else { log("Non-Repeating Fields","Fields Found",r20color); fields.forEach(field => { + log("JSON So Far",JSON.stringify(targetObj),r20color); typeof jsonObj[`${field}`] !== "undefined" ? targetObj[`${field}`] = jsonObj[`${field}`] : log(`${field}`,"Not Found",r20color); }); } @@ -2948,14 +3002,15 @@ repSection= "shields"; break; case "Vehicles": - //clear all fields in preparation for updated + //clear all character sheet vehicle fields in preparation for updated + //This is to avoid getting mixed data if there was another vehicle on the sheet already when the drop occurred. let resetObj = {}; vehiclefields.forEach(field => { resetObj[`${field}`] = ""; }); setAttrs(resetObj,{silent:true}); //Check if Vehicle Type is cared for; if not, will need to set it here. - typeof jsonObj["vehicletype"] !== "undefined" ? log("Vehicle Type","Should already be cared for",r20color) : setattrvalues["vehicletype"] = jsonObj.name; + typeof jsonObj["vehicletype"] !== "undefined" ? log("Vehicle Type","Should already be cared for",r20color) : typeof jsonObj.name !== "undefined" ? setattrvalues["vehicletype"] = jsonObj.name : typeof jsonObj["display_name"] !== "undefined" ? setattrvalues["vehicletype"] = jsonObj["display_name"] : log("Vehicle Name","Nothing defined...leave blank",r20color); //if not already set, show vehicle tab setattrvalues["vehicle"] = "on"; setattrvalues["vehiclewounds"] = "0"; @@ -2969,16 +3024,19 @@ break; } setattrvalues = getDropInfo(jsonObj,setattrvalues,repSection); + jsonObj.Category === "Vehicles" ? log("Returned","Made it back to compendiumDrop",r20color) : console.log("Ignore me"); if(jsonObj.Category === "Vehicles" && typeof jsonObj["data-Weapons"] !== "undefined") { //if this is a vehicle with weapons, then need to add more stuff to the JSON - log("Weapons Array","Found",r20color); - log("Weapons",JSON.stringify(jsonObj["data-Weapons"]),r20color); + log("Vehicle Weapons Array","Found",r20color); + log("Vehicle Weapons",JSON.stringify(jsonObj["data-Weapons"]),r20color); for (let weapon of jsonObj["data-Weapons"]) { - log("Import Weapon",weapon.data.weapon,r20color); + log("Import Vehicle Weapon",weapon.data.weapon,r20color); setattrvalues = getDropInfo(weapon.data,setattrvalues,"shipweapons"); } } + log("setattrvalues",JSON.stringify(setattrvalues),r20color); setAttrs(setattrvalues); + log("Values","Set...character sheet is updated",r20color); }); } @@ -3030,12 +3088,13 @@ //set Wild Card Status if(typeof monsterObj.is_npc !== "undefined") { //if is_npc = TRUE, then set as Wild Card - monsterObj.is_npc === "TRUE" ? monsterStats["is_npc"] = "0" : monster["is_npc"] = "1"; + monsterObj.is_npc === "TRUE" ? monsterStats["is_npc"] = "0" : monsterStats["is_npc"] = "1"; monsterObj.is_npc === "TRUE" ? isWildCard = true : log("Extra","isWildCard false",r20color); monsterObj.is_npc === "TRUE" ? woundsMax = 3 : log("Extra","Leave Wounds at 0",r20color); } //set Size - let monsterSize, tokenSize; + let monsterSize = "0"; + let tokenSize; typeof monsterObj.size !== "undefined" ? monsterSize = monsterObj.size : log("Size","Not found",r20color); monsterStats["size"] = monsterSize; //adjust woundsMax based on Size @@ -3094,7 +3153,9 @@ }) //Set the sheet Attributes log("Character Sheet","Setting Values",r20color); + log("To be set",JSON.stringify(monsterStats),r20color); setAttrs(monsterStats, function(){ + log("Inside","Made it inside the setAttrs",r20color); //Begin Token Settings... //Token size: 4-7 = 2, 8-11 = 3, 12+ = 4 const square_size = 70; // Default Roll20 square size (in px) @@ -3123,23 +3184,26 @@ typeof monsterObj.biography !== "undefined" ? finalCharacterDetails["physdescription"] = monsterObj.biography : log("Biography","Not found",r20color); //set Edges log("Edges","Check for Edges",r20color); - if (typeof monsterObj["data-Edges"] !== "undefined" && monsterObj["data-Edges"].length > 0) { - for (let edge of monsterObj["data-Edges"]) { - log("Import Edge",edge.name,r20color); - log("Monster Edge",JSON.stringify(edge),r20color); - //finalCharacterDetails = getEdgeInfo(monsterObj["data-Edges"],finalCharacterDetails); - finalCharacterDetails = getDropInfo(edge.data,finalCharacterDetails,"npc_Edge"); - // let repSectionID = generateRowID(); - // typeof edge.name !== "undefined" ? finalCharacterDetails[`repeating_edges_${repSectionID}_edge`] = edge.name : log("Edge Name","Not Found",r20color); - // typeof edge.description !== "undefined" ? finalCharacterDetails[`repeating_edges_${repSectionID}_edgedescription`] = edge.description : log("Edge Description","Not Found",r20color); - // finalCharacterDetails[`repeating_edges_${repSectionID}_tookat`] = "GM"; - // finalCharacterDetails[`repeating_edges_${repSectionID}_showEdgeDesc`] = "0"; - // finalCharacterDetails[`repeating_edges_${repSectionID}_whisperEdgeDeets`] = "/w gm "; - } - } + if (typeof monsterObj["data-Edges"] !== "undefined" && typeof monsterObj["data-Edges"] !== "string") { + if (monsterObj["data-Edges"].length > 0) { + for (let edge of monsterObj["data-Edges"]) { + log("Import Edge",edge.name,r20color); + log("Monster Edge",JSON.stringify(edge),r20color); + //finalCharacterDetails = getEdgeInfo(monsterObj["data-Edges"],finalCharacterDetails); + finalCharacterDetails = getDropInfo(edge.data,finalCharacterDetails,"npc_Edge"); + // let repSectionID = generateRowID(); + // typeof edge.name !== "undefined" ? finalCharacterDetails[`repeating_edges_${repSectionID}_edge`] = edge.name : log("Edge Name","Not Found",r20color); + // typeof edge.description !== "undefined" ? finalCharacterDetails[`repeating_edges_${repSectionID}_edgedescription`] = edge.description : log("Edge Description","Not Found",r20color); + // finalCharacterDetails[`repeating_edges_${repSectionID}_tookat`] = "GM"; + // finalCharacterDetails[`repeating_edges_${repSectionID}_showEdgeDesc`] = "0"; + // finalCharacterDetails[`repeating_edges_${repSectionID}_whisperEdgeDeets`] = "/w gm "; + } + } + } + //set Hindrances - if (typeof monsterObj["data-Hinderances"] !== "undefined" && monsterObj["data-Hinderances"].length > 0) { - for (let hindrance of monsterObj["data-Hinderances"]) { + if (typeof monsterObj["data-Hindrances"] !== "undefined" && monsterObj["data-Hindrances"].length > 0) { + for (let hindrance of monsterObj["data-Hindrances"]) { log("Import Hindrances",hindrance.hindrance,r20color); log("Monster Hindrance",JSON.stringify(hindrance),r20color); //finalCharacterDetails = getHindranceInfo(monsterObj["data-Hindrances"],) @@ -3156,6 +3220,12 @@ log("Edges & Hindrances","Write Edges and Hindrances to the Character",r20color); setAttrs(finalCharacterDetails); finalCharacterDetails = {}; + //Set Power Points if any + if (typeof monsterObj.PowerPoints !== "undefined") { + finalCharacterDetails["PowerPoints"] = monsterObj.PowerPoints; + finalCharacterDetails["PowerPoints_max"] = monsterObj.PowerPoints; + } + //Set Weapons //const weaponfields = ["weapon","range","rof","damageatt","dmgnumdice","dmgdietype","dmgbonusnum","weaponap","weaponminstrength","weaponweight"]; log("Weapons","Check for Weapons",r20color); @@ -3179,6 +3249,16 @@ } } + log("Powers","Check for Powers",r20color); + typeof monsterObj["data-Powers"] !== "undefined" ? log("Monster Power",JSON.stringify(monsterObj["data-Powers"]),r20color) : log("Monster Powers","Not Found",r20color); + if (typeof monsterObj["data-Powers"] !== "undefined" && monsterObj["data-Powers"].length > 0) { + log("Power Array","Found",r20color); + for (let power of monsterObj["data-Powers"]) { + log("Import Power",power.data.power,r20color); + finalCharacterDetails = getDropInfo(power.data,finalCharacterDetails,"spells"); + } + } + log("Armor","Check for Armor",r20color); typeof monsterObj["data-Armors"] !== "undefined" ? log("Monster Armor",JSON.stringify(monsterObj["data-Armors"]),r20color) : log("Monster Armor","Not Found",r20color); if (typeof monsterObj["data-Armors"] !== "undefined" && monsterObj["data-Armors"].length > 0) { @@ -3189,22 +3269,34 @@ } } + log("Shields","Check for Shields",r20color); + typeof monsterObj["data-Shields"] !== "undefined" ? log("Monster Shield",JSON.stringify(monsterObj["data-Armors"]),r20color) : log("Monster Armor","Not Found",r20color); + if (typeof monsterObj["data-Shields"] !== "undefined" && monsterObj["data-Shields"].length > 0) { + log("Shield Array","Found",r20color); + for (let shield of monsterObj["data-Shields"]) { + log("Import Shield",shield.data.ShieldType,r20color); + finalCharacterDetails = getDropInfo(shield.data,finalCharacterDetails,"shields"); + } + } + log("Weapons and Armor","Write weapons to the character sheet",r20color); setAttrs(finalCharacterDetails); //Set Special Abilities log("Special Abilities","Begin processing...",r20color); - log("Special Abilities",monsterObj["data-SpecialAbilities"],r20color); - log("Number of Special Abilities",monsterObj["data-SpecialAbilities"].length,r20color); + log("Special Abilities",typeof monsterObj["data-SpecialAbilities"],r20color); + //log("Number of Special Abilities",monsterObj["data-SpecialAbilities"].length,r20color); //if (typeof monsterObj["data-SpecialAbilities"] !== "undefined" && monsterObj["data-SpecialAbilities"].length > 0) { - if (typeof monsterObj["descriptionList"] !== "undefined" && monsterObj["data-SpecialAbilities"].length > 0) { + if (typeof monsterObj["descriptionList"] !== "undefined" && typeof monsterObj["data-SpecialAbilities"] !== "undefined" && monsterObj["data-SpecialAbilities"].length > 0) { finalCharacterDetails["showSpecAbilities"] = "1"; for (let compendiumSpecialAbility of monsterObj["data-SpecialAbilities"]) { log("Special Ability",compendiumSpecialAbility.name,r20color); let repSectionID = generateRowID(); - typeof compendiumSpecialAbility.name !== "undefined" ? finalCharacterDetails[`repeating_specialabilities_${repSectionID}_specialability`] = compendiumSpecialAbility.name : log("Special Ability Name","Not Found",r20color); + typeof compendiumSpecialAbility.name !== "undefined" ? finalCharacterDetails[`repeating_specialabilities_${repSectionID}_specialability`] = compendiumSpecialAbility.name.trim() : log("Special Ability Name","Not Found",r20color); typeof compendiumSpecialAbility.description !== "undefined" ? finalCharacterDetails[`repeating_specialabilities_${repSectionID}_specialabilitydescription`] = compendiumSpecialAbility.description : log("Special Ability Description","Not Found",r20color); finalCharacterDetails[`repeating_specialabilities_${repSectionID}_showSpecAbilityDesc`] = "0"; finalCharacterDetails[`repeating_specialabilities_${repSectionID}_whisperSpecAbilityDeets`] = "/w gm "; + //compendiumSpecialAbility.name.trim() === "Undead" ? finalCharacterDetails = {...finalCharacterDetails, ...specialAbiltyUpdates["Undead"]} : compendiumSpecialAbility.name.trim() === "Construct" ? finalCharacterDetails = {...finalCharacterDetails, ...specialAbiltyUpdates["Construct"]} : compendiumSpecialAbility.name.trim() === "Elemental" ? finalCharacterDetails = {...finalCharacterDetails, ...specialAbiltyUpdates["Elemental"]} : log("Special Ability","Nothing additional needed",r20color); + typeof specialAbiltyUpdates[`${compendiumSpecialAbility.name.trim()}`] ? finalCharacterDetails = {...finalCharacterDetails, ...specialAbiltyUpdates[`${compendiumSpecialAbility.name.trim()}`]} : log("Special Ability","Nothing additional needed",r20color); } log("Special Abilities","Finished Processing",r20color); } @@ -3216,14 +3308,13 @@ }); } - - on("change:CompendiumCategory", function(eventInfo) { log("Compendium Drop",eventInfo.newValue,"#E948C9"); + log("Compendium Change Source",eventInfo.sourceType,r20color); if (eventInfo.newValue !== "") { - let compendiumCategory = eventInfo.newValue; + let cCategory = eventInfo.newValue; let resetFields; - switch (compendiumCategory) { + switch (cCategory) { case "Edges": case "Hindrances": case "Powers": @@ -3232,15 +3323,16 @@ case "Vehicles": case "Gear": case "Shields": - compendiumDrop(compendiumCategory); + compendiumDrop(cCategory); break; case "Bestiary": compendiumBestiary(); break; default: - log(`Category: ${compendiumCategory}`,`Not recognized`,r20color); - resetFields = resetCompendiumFields(); - setAttrs(resetFields,{silent:true}); + log(`Category: ${cCategory}`,`Not recognized`,r20color); + //resetFields = resetCompendiumFields(); + //setAttrs(resetFields,{silent:true}); + resetCompendiumFields(); break; } } @@ -6316,6 +6408,61 @@

+ +
+ + +
+ +
+ +  of  + +
+ +
+ +
+ +
+ +  of  + +
+ +
+ +
+ +
+ +  of  + +
+ +
+ +
+ +
+ +  of  + +
+ +
+ +
+ +
+ +  of  + +
+ +
+
+
@@ -6577,27 +6724,23 @@
- - -
- - -
Money
- -
Credits
- - -
- + +
+
+
+
+
+
+
+ +
+ +
+ +
+
+
+
@@ -6652,7 +6795,7 @@ -
+
@@ -7495,12 +7638,12 @@

+
+

Total Shield Weight Carried:

+ +
-
-

Total Shield Weight Carried:

- -
@@ -7898,6 +8041,21 @@ + +
+ + +
+ + + + : +
@@ -8018,6 +8176,37 @@

Release Notes

+ + + +
+

Minor Release

+

+ This release focuses on Minor Enhancements and Bug Fixes +

+

Enhancements

+
    +
  • Added support for the Deadlands: The Weird West compendium.
  • +
  • Support for additional money/currency fields. These labels are customizeable.
  • +
+

Bugs Fixed

+
    +
  • Fixed a drag and drop issue where some bestiary entries didn't have all the necessary updates. For example, Zombies Undead special ability didn't update/change the creatures Toughness, etc.
  • +
+

Planned Enhancements

+
    +
  • Take into account minimium strength for Armor and weapons and have modifiers automatically apply to the roll.
  • +
  • Ability to have multiple vehicles.
  • +
  • Ability to update character progession via the JSON importer
  • +
+

Things to be aware of

+
    +
  • Pace currently doesn't take into account penalties due to encumbrance; this is being worked on and will be corrected soon.
  • +
  • The condensed view of the character sheet has problems if you are using skill specialization. In most situations it should be fine, however, you may experience odd display issues if specializations are used.
  • +
+