diff --git a/Oltree-FR/ReadMe.md b/Oltree-FR/ReadMe.md
index 898ae3ee5f..a780f005b1 100644
--- a/Oltree-FR/ReadMe.md
+++ b/Oltree-FR/ReadMe.md
@@ -3,6 +3,9 @@
Feuille de personnage pour Oltréé! Un jeu de rôle créé par Le Grümph.
Plus d'informations : http://www.legrog.org/jeux/oltree/oltree-fr
+##v1.2 (2016-02-02)
+Correction d'un bug d'affichage du dé d'exaltation sur le jet de soldat.
+
##v1.1 (2016-02-02)
Ajout des métiers du compagnon. Ceux-ci sont marqué d'un * pour les reconnaitre.
diff --git a/Pathfinder-Neceros/pathfinder-neceros.css b/Pathfinder-Neceros/pathfinder-neceros.css
index 173a381878..5ee2742bf5 100644
--- a/Pathfinder-Neceros/pathfinder-neceros.css
+++ b/Pathfinder-Neceros/pathfinder-neceros.css
@@ -11,6 +11,9 @@
.sheet-buffs2-show:not(:checked)~.sheet-buffs2 {
display: none;
}
+.sheet-expand-show:checked ~div .sheet-sect-show:checked ~.sheet-expand {
+ display:none;
+}
.sheet-table {
display: table;
width: 100%;
@@ -20,7 +23,6 @@
div.repitem.repitembroken,
.sheet-repeating-fields div.repitem.repitembroken {
border:3px dashed red !important;
-
}
.sheet-table-buff {
display: table;
@@ -66,17 +68,22 @@ div.repitem.repitembroken,
.sheet-center {
text-align: center;
}
-
/* this is ignored even with !important */
div.sheet-section.sheet-section-core div.sheet-table-flow{
overflow-x:auto;
}
-
+span.sheet-table-data.sheet-entry-wide input,
+span.sheet-entry-wide input,
+span.sheet-table-data.sheet-entry-wide input[type="text"],
+span.sheet-entry-wide input[type="text"],
+span.sheet-table-data.sheet-entry-wide textarea,
+span.sheet-entry-wide textarea {
+ width:100%;
+}
.sheet-entry_med, input[type="text"].sheet-entry_med,
-span.sheet-entry_med
- {
+span.sheet-entry_med {
/*min-width:60px;
- width:100px;*/
+ width:100px;*/
width:8em;
text-align:left;
}
@@ -101,9 +108,8 @@ span.sheet-table-data.sheet-divider-lg, span.sheet-table-data.sheet-divider {
span.sheet-table-header.sheet-divider-lg,span.sheet-table-header.sheet-divider {
vertical-align:bottom;
}
-
span.sheet-table-header.sheet-buff-cell, span.sheet-table-data.sheet-buff-cell {
- /*width:40px;*/
+ /*width:40px;*/
/*width:3em;*/
min-width:2.5em;
max-width:3.5em;
@@ -137,7 +143,6 @@ span.sheet-table-data.sheet-buff-cell input[type="number"].sheet-calc {
min-width:2.5em;
max-width:3.5em;
}
-
span.sheet-table-data.sheet-buff-cell textarea.sheet-skill-macro-text,
span.sheet-table-data.sheet-buff-cell input[type="text"].sheet-skill-macro-text {
text-align: left;
@@ -158,7 +163,7 @@ span.sheet-table-data.sheet-buff-cell input[type="text"].sheet-skill-macro-text
.sheet-table-row {
display: table-row;
vertical-align: bottom;
- width: 100%;
+ width: 100%;
}
.sheet-buff-row {
display: table-row;
@@ -181,52 +186,43 @@ span.sheet-table-data.sheet-buff-cell input[type="text"].sheet-skill-macro-text
min-width:70px;
text-align: center;
}
-
.sheet-select-small {
font-size: .90em;
height: 26px;
padding: 0;
}
-
input[type="text"], input[type="number"] {
background-color: transparent;
border: 0 solid #000;
border-bottom-width: 1px;
}
-
span.sheet-table-data.sheet-center, span.sheet-table-data {
padding-left:1px;
padding-right:1px;
}
-
span.sheet-table-data.sheet-center input.sheet-calc,
span.sheet-table-data input.sheet-calc ,
span.sheet-table-data.sheet-center input[readonly],
-span.sheet-table-data input[readonly]
-{
+ span.sheet-table-data input[readonly] {
margin-top:1px;
margin-bottom:1px;
}
-
/* color for disabled/sheet-calc */
-
.sheet-calc, input[readonly] ,
input[type="text"].sheet-calc, input[type="number"].sheet-calc,
input[type="text"]:disabled, input[type="number"]:disabled,
input.sheet-calc, textarea.sheet-calc {
- background-color: rgba(74, 100, 134, 0.28);
- border-width: 0px;
- color: #222;
+ background-color: rgba(74, 100, 134, 0.28);
+ border-width: 0px;
+ color: #222;
padding-left:4px;
padding-right:0px;
text-align:left;
min-width:2.5em;
}
-
.charsheet input[type="number"]{
-moz-appearance: textfield;
}
-
/* hide spinner for all disabled/sheet-calc */
.charsheet input.sheet-calc[type="number"]:hover,
.charsheet input.sheet-calc[type="number"]:focus,
@@ -236,7 +232,6 @@ input.sheet-calc, textarea.sheet-calc {
-webkit-appearance: none;
-moz-appearance: textfield;
}
-
input[type="text"], select {
width: 100%;
margin: 0;
@@ -415,8 +410,7 @@ input.sheet-spellclass-tab2:checked + span.sheet-spellclass-tab2 {
}
button,
button:hover,
-button:active
-{
+button:active {
background-image: none;
}
/*show and hide*/
@@ -428,10 +422,37 @@ input[type="checkbox"] + span:not(.sheet-not-sheet-show)::before {
font-size: .85em;
}
input[type="checkbox"]:checked + span:not(.sheet-not-sheet-show)::before {
- content: '▼';
+ content: '▼';
}
-input[type="checkbox"]:Hover + span:not(.sheet-not-sheet-show) {
- color:#ff0000;
+input[type="checkbox"]:hover + span:not(.sheet-not-sheet-show) {
+ color:#ff0000;
+}
+/* min/max repeating rows */
+input[type="checkbox"].sheet-expand-show + span:not(.sheet-not-sheet-show)::before {
+ content: '☰ )';
+ display: inline-block;
+ width: auto;
+ font-size: .75em;
+ background-color: rgba(0, 0, 0, 0);
+ color: #000;
+ border-radius: 5px;
+ border: 1px solid #808080;
+ padding: 0 5px 1px 5px;
+ height:1.4em;
+ margin-bottom: 2px;
+ font-family: "Pictos";
+}
+input[type="checkbox"].sheet-expand-show:checked + span:not(.sheet-not-sheet-show)::before {
+ content: '⚌ (';
+ display: inline-block;
+ width: auto;
+ font-size: .75em;
+ background-color: #4a6486;
+ color: #FFF;
+ padding: 0 5px 2px 5px;
+ height:1.4em;
+ margin-bottom: 2px;
+ font-family: "Pictos";
}
input[name*="condition"]:checked + b:not(.sheet-offCase),
input[name*="notes"]:checked + b:not(.sheet-offCase),
@@ -445,19 +466,18 @@ input[name*="check"]:checked + b:not(.sheet-offCase) {
padding-bottom: 1px;
padding-top: 1px;
}
-
/*repeating item counter*/
.sheet-repeating-fields {
- counter-reset: sheet-rep-items -1;
+ counter-reset: sheet-rep-items -1;
}
input[type="checkbox"].sheet-counted + span:not(.sheet-not-sheet-show)::before {
- counter-increment: sheet-rep-items;
- content: counter(sheet-rep-items) '. ►' !important;
+ counter-increment: sheet-rep-items;
+ content: counter(sheet-rep-items) '. ►' !important;
width: auto !important;
}
input[type="checkbox"].sheet-counted:checked + span:not(.sheet-not-sheet-show)::before {
- counter-increment: sheet-rep-items;
- content: counter(sheet-rep-items) '. ▼' !important;
+ counter-increment: sheet-rep-items;
+ content: counter(sheet-rep-items) '. ▼' !important;
width: auto !important;
}
/* end repeating item counter*/
@@ -503,7 +523,7 @@ textarea {
.sheet-footer {
text-align: center;
font-size: xx-small;
- background-color: #FFF8DC;
+ background-color: #FFF8DC;
border: 1px #000 solid;
border-radius: 3px;
}
@@ -520,12 +540,12 @@ textarea {
margin: 0;
resize:vertical;
}
-.charsheet .sheet-weapon-notes ,
+.charsheet .sheet-weapon-notes,
.sheet-init-notes,
.sheet-speed-notes {
- height: 2.15em;
- overflow: hidden;
- margin: 0;
+ height: 2.15em;
+ overflow: hidden;
+ margin: 0;
resize:vertical;
}
.charsheet .repcontainer .repitem {
@@ -535,18 +555,28 @@ textarea {
border-radius: 3px !important;
}
.charsheet button[type=roll] {
- margin: 2px 2px 0 2px !important;
+ margin: 2px 2px 0 2px !important;
}
[data-groupname=repeating_class-ability] > button.btn.repcontrol_add::after {
content: " New Class Ability";
}
+
+[data-groupname=repeating_mythic-ability] > button.btn.repcontrol_add::after {
+ content: " New Mythic Ability";
+}
+
[data-groupname=repeating_weapon] > button.btn.repcontrol_add::after {
content: " New Weapon";
}
[data-groupname=repeating_feat] > button.btn.repcontrol_add::after {
content: " New Feat";
}
+
+[data-groupname=repeating_mythic-feat] > button.btn.repcontrol_add::after {
+ content: " New Mythic Feat";
+}
+
[data-groupname=repeating_item] > button.btn.repcontrol_add::after {
content: " New Item";
}
@@ -556,18 +586,27 @@ textarea {
[data-groupname=repeating_trait] > button.btn.repcontrol_add::after {
content: " New Trait";
}
-
.charsheet .repcontrol_add,
.charsheet .repcontrol_edit,
.charsheet .repcontrol_del {
- display: block;
- background: #000;
- color: white;
- box-shadow:none;
- font-size:0.9em;
- height:2.2em;
+ display: block;
+ background: #000;
+ color: white;
+ box-shadow:none;
+ font-size:0.9em;
+ height:2.2em;
+}
+button[type=roll].sheet-blank-roll-button::before {
+ content: ' ';
+}
+.sheet-options {
+ display: block;
+ width:auto;
+ padding: 2px;
+ border: 1px solid #808080;
+ border-radius: 5px;
+ background-color: #d3d3d3;
}
-
/*Roll Templates*/
/*Spells*/
.sheet-rolltemplate-pf_spell table {
@@ -577,7 +616,7 @@ textarea {
border-spacing: 0;
border-collapse: separate;
border-radius: 5px;
- -moz-box-shadow: 2px 2px 5px #000;
+ -moz-box-shadow: 2px 2px 5px #000;
-webkit-box-shadow: 2px 2px 5px #000;
box-shadow: 2px 2px 5px #000;
overflow: hidden;
@@ -589,7 +628,7 @@ textarea {
font-family: "Helvetica Neue",Helvetica,sans-serif;
font-size: 1.1em;
font-weight: bold;
- text-align: left;
+ text-align: left;
}
.sheet-rolltemplate-pf_spell .sheet-header-table {
display:table;
@@ -613,7 +652,7 @@ textarea {
font-family: "Helvetica Neue",Helvetica,sans-serif;
font-size: 1em;
font-weight:normal;
- text-align: left;
+ text-align: left;
}
.sheet-rolltemplate-pf_spell img {
vertical-align:middle;
@@ -631,27 +670,29 @@ textarea {
background-color: #D3D3D3;
}
.sheet-rolltemplate-pf_spell .sheet-tcat {
- font-weight: bold;
+ font-weight: bold;
}
.sheet-rolltemplate-pf_spell .inlinerollresult {
- background-color: transparent;
- border: none;
- display: inline-block;
+ color: #FFF;
+ background-color: #000;
+ border-color: #000;
min-width: 1em;
text-align: center;
+ display: inline-block;
+ margin-left: 1px;
padding:0px;
}
.sheet-rolltemplate-pf_spell .inlinerollresult.fullcrit {
- color: #3FB315;
- border: none;
+ color: #FFF;
+ background-color: #3FB315;
}
.sheet-rolltemplate-pf_spell .inlinerollresult.fullfail {
- color: #B31515;
- border: none;
+ color: #FFF;
+ background-color: #B31515;
}
.sheet-rolltemplate-pf_spell .inlinerollresult.importantroll {
- color: #4A57ED;
- border: none;
+ color: #FFF;
+ background-color: #4A57ED;
}
/* Attacks */
.sheet-rolltemplate-pf_attack table {
@@ -661,7 +702,7 @@ textarea {
border-spacing: 0;
border-collapse: separate;
border-radius: 5px;
- -moz-box-shadow: 2px 2px 5px #000;
+ -moz-box-shadow: 2px 2px 5px #000;
-webkit-box-shadow: 2px 2px 5px #000;
box-shadow:2px 2px 5px #000;
overflow: hidden;
@@ -673,7 +714,6 @@ textarea {
font-family:"Helvetica Neue",Helvetica,sans-serif;
font-size: 1.1em;
font-weight: bold;
- padding: 5px;
}
.sheet-rolltemplate-pf_attack .sheet-header-table {
display:table;
@@ -682,7 +722,7 @@ textarea {
.sheet-rolltemplate-pf_attack .sheet-header-middle {
display:table-cell;
vertical-align:middle;
-}
+}
.sheet-rolltemplate-pf_attack .sheet-header-image {
float: right;
display: table-cell;
@@ -697,7 +737,7 @@ textarea {
font-family: "Helvetica Neue",Helvetica,sans-serif;
font-size: 1em;
font-weight:normal;
- text-align: left;
+ text-align: left;
}
.sheet-rolltemplate-pf_attack img {
vertical-align:middle;
@@ -747,7 +787,7 @@ textarea {
border-spacing: 0;
border-collapse: separate;
border-radius: 5px;
- -moz-box-shadow: 2px 2px 5px #000;
+ -moz-box-shadow: 2px 2px 5px #000;
-webkit-box-shadow: 2px 2px 5px #000;
box-shadow:2px 2px 5px #000;
overflow: hidden;
@@ -758,7 +798,6 @@ textarea {
color: #FFF;
font-family:"Helvetica Neue",Helvetica,sans-serif;
font-size: 1.1em;
- padding: 5px;
}
.sheet-rolltemplate-pf_defense .sheet-header-table {
display:table;
@@ -782,7 +821,7 @@ textarea {
font-family: "Helvetica Neue",Helvetica,sans-serif;
font-size: 1em;
font-weight:normal !important;
- text-align: left;
+ text-align: left;
}
.sheet-rolltemplate-pf_defense img {
vertical-align:middle;
@@ -833,7 +872,7 @@ textarea {
border-spacing: 0;
border-collapse: separate;
border-radius: 5px;
- -moz-box-shadow: 2px 2px 5px #000;
+ -moz-box-shadow: 2px 2px 5px #000;
-webkit-box-shadow: 2px 2px 5px #000;
box-shadow:2px 2px 5px #000;
overflow: hidden;
@@ -844,7 +883,6 @@ textarea {
color: #FFF;
font-family:"Helvetica Neue",Helvetica,sans-serif;
font-size: 1.1em;
- padding: 5px;
}
.sheet-rolltemplate-pf_generic .sheet-header-table {
display:table;
@@ -868,7 +906,7 @@ textarea {
font-family: "Helvetica Neue",Helvetica,sans-serif;
font-size: 1em;
font-weight:normal !important;
- text-align: left;
+ text-align: left;
}
.sheet-rolltemplate-pf_generic img {
vertical-align:middle;
@@ -920,7 +958,7 @@ textarea {
border-spacing: 0;
border-collapse: separate;
border-radius: 5px;
- -moz-box-shadow: 2px 2px 5px #000;
+ -moz-box-shadow: 2px 2px 5px #000;
-webkit-box-shadow: 2px 2px 5px #000;
box-shadow:2px 2px 5px #000;
overflow: hidden;
@@ -931,7 +969,6 @@ textarea {
color: #FFF;
font-family:"Helvetica Neue",Helvetica,sans-serif;
font-size: 1.1em;
- padding: 5px;
}
.sheet-rolltemplate-pf_block .sheet-header-table {
display:table;
@@ -955,7 +992,7 @@ textarea {
font-family: "Helvetica Neue",Helvetica,sans-serif;
font-size: 1em;
font-weight:normal !important;
- text-align: left;
+ text-align: left;
}
.sheet-rolltemplate-pf_block img {
vertical-align:middle;
diff --git a/Pathfinder-Neceros/pathfinder-neceros.html b/Pathfinder-Neceros/pathfinder-neceros.html
index d8114887dd..3ff3798bb0 100644
--- a/Pathfinder-Neceros/pathfinder-neceros.html
+++ b/Pathfinder-Neceros/pathfinder-neceros.html
@@ -1,45 +1,44 @@
- Attention:
-
+ Attention:
+
-
- Core
-
- Classes
+
+ Core
+
+ Classes
Defenses
- Attacks
+ Attacks
Skills
@@ -55,127 +54,127 @@
y
-
+
|
-
- |
-
+
|
-
- |
-
-
-
+
|
-
+
|
-
-
-
+
+
+
|
-
-
+
|
-
-
-
-
-
-
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
4.
|
- |
+ |
|
- |
+ |
@@ -423,47 +422,47 @@
-
+
-
+
|
-
- |
-
+
|
-
- |
-
-
-
+
|
-
+
|
-
-
-
+
+
+
|
-
-
+
|
-
-
-
-
-
-
-
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
5.
|
- |
+ |
|
- |
+ |
@@ -483,43 +482,43 @@
-
+
-
+
|
-
- |
-
+
|
-
- |
-
-
-
+
|
-
+
|
-
-
-
+
+
+
|
-
-
+
|
-
-
-
-
-
-
-
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
Totals
-
+
@@ -537,13 +536,13 @@
-
+
-
+
Buffs 6-10
@@ -552,9 +551,9 @@
-
+
-
+
@@ -570,7 +569,7 @@
-
+
@@ -578,13 +577,13 @@
-
+
6.
|
- |
+ |
|
@@ -608,43 +607,43 @@
-
+
-
+
|
-
- |
-
+
|
-
- |
-
-
-
+
|
-
+
|
-
-
-
+
+
+
|
-
-
+
|
-
-
-
-
-
-
-
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
7.
|
- |
+ |
|
@@ -668,43 +667,43 @@
-
+
-
+
|
-
- |
-
+
|
-
+
+ |
+
|
-
-
-
+
+
+
|
-
+
|
-
-
-
+
+
+
|
-
-
+
+
|
-
-
-
-
-
-
-
+
+
+
+
+
+
+
8.
|
- |
+ |
|
@@ -728,43 +727,43 @@
-
+
-
+
|
-
- |
-
+
|
-
- |
-
-
-
+
|
-
+
|
-
-
-
+
+
+
|
-
-
+
|
-
-
-
-
-
-
-
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
9.
|
- |
+ |
|
@@ -788,47 +787,47 @@
-
+
-
+
|
-
- |
-
+
|
-
- |
-
-
-
+
|
-
+
|
-
-
-
+
+
+
|
-
-
+
|
-
-
-
-
-
-
-
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
10.
|
- |
+ |
|
- |
+ |
@@ -848,43 +847,43 @@
-
+
-
+
|
-
- |
-
+
|
-
- |
-
-
-
+
|
-
+
|
-
-
-
+
+
+
|
-
-
+
|
-
-
-
-
-
-
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
Totals
-
+
@@ -902,87 +901,87 @@
-
+
-
+
-
-
Conditions
-
-
+
+
+
+
+
+ Initiative Notes
+
+
+
+
+
+
+ Speed Notes
+
+
+
+
+
+
+
Experience and Hero Points
+
+
+
+
-
-
-
Class Information
-
-
-
-
Class Features and Abilities
-
-
-
Class Features and Abilities
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
Mythic Hero Information and Mythic Power
+
+
-
-
+
+
+
Class Features and Abilities
+
+
+
+
Class Features and Abilities
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Mythic Path Features and Abilities
+
+
+
+
Mythic Path Features and Abilities
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
Defense Values
-
-
-
Defense Values
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
Defense Values
+
+
+
Defense Values
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
- AC
-
- = 10 +
-
- +
-
- +
+
+
+
+
+ AC
+
+ = 10 +
+
+ +
+
+ +
STR
@@ -1361,28 +1510,28 @@
+
-
- +
-
- +
-
- +
-
- +
-
+
+ +
+
+ +
+
+ +
+
+ +
+
+
- +
-
-
-
- Touch
-
- = 10 +
-
-
-
-
+ +
+
+
+
+ Touch
+
+ = 10 +
+
+
+
+
STR
@@ -1393,30 +1542,30 @@
CHA
-
- +
-
- +
-
- +
-
- +
-
- +
-
+
+ +
+
+ +
+
+ +
-
- +
-
-
-
- Flat-Footed
-
- = 10 +
-
- +
-
- +
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ Flat-Footed
+
+ = 10 +
+
+ +
+
+ +
•None
@@ -1428,54 +1577,53 @@
CHA
-
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
-
-
-
- +
-
- +
-
- +
-
- +
- +
-
-
-
-
-
-
-
-
-
+ +
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CMD
-
- = 10 +
-
- +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CMD
+
+ = 10 +
+
+ +
•STR
@@ -1485,8 +1633,8 @@
WIS
CHA
-
-
+
+
STR
@@ -1497,28 +1645,28 @@
CHA
-
+
-
-
- +
-
-
-
- +
-
- +
-
-
-
- +
-
-
-
- FF CMD
-
- = 10 +
-
- +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ FF CMD
+
+ = 10 +
+
+ +
•STR
@@ -1528,7 +1676,7 @@
WIS
CHA
-
+
@@ -1540,118 +1688,117 @@
WIS
CHA
-
-
+
+
-
-
- +
-
-
-
- +
-
- +
-
-
-
- +
-
-
-
-
-
-
-
Special Defenses
-
-
+
+
+
+
Special Defenses
+
+
-
-
-
-
Armor Penalties
-
-
+
+
+
+
Armor Penalties
+
+
-
-
-
-
Saving Throws
-
-
-
Saving Throws
-
-
-
-
-
-
+
+
+
+
+
-
-
-
Armor and Shield
-
-
-
Armor and Shield
-
-
-
-
-
-
-
-
-
+
+
+
+
+
Armor and Shield
+
+
-
-
-
-
+
+
+
+
+
+
+
+
@@ -1957,17 +2111,17 @@
=
+
-
-
- None
- •STR
- DEX
- CON
- INT
- WIS
- CHA
-
-
+
+
+ None
+ •STR
+ DEX
+ CON
+ INT
+ WIS
+ CHA
+
+
+
@@ -1986,17 +2140,17 @@
=
+
-
-
- None
- STR
- •DEX
- CON
- INT
- WIS
- CHA
-
-
+
+
+ None
+ STR
+ •DEX
+ CON
+ INT
+ WIS
+ CHA
+
+
+
@@ -2015,17 +2169,17 @@
=
+
-
-
- None
- •STR
- DEX
- CON
- INT
- WIS
- CHA
-
-
+
+
+ None
+ •STR
+ DEX
+ CON
+ INT
+ WIS
+ CHA
+
+
-
@@ -2044,7 +2198,7 @@
=
-
+
@@ -2062,7 +2216,7 @@
@@ -2201,14 +2355,15 @@
+
CS = Class Skill | RT = Requires Training | Cl/Ac/Sz/Co = Class Skill Bonus / Armor check penalty / Size mod / Condition penalty
-
-
+
+
-
-
-
Feats Available
-
-
-
-
-
-
Feats
-
+
+
+
Feats Available
+
+
+
Feats
+
+
+
+
Feats
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Mythic Feats
+
+
+
+
Mythic Feats
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
Worn Magic Equipment
-
-
-
-
-
-
Inventory
-
+
+
+
Currency
+
+
+
Worn Magic Equipment
+
+
+
+
+
+
Inventory
+
+
+
+
Inventory
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
-
-
-
Spells Classes
-
-
-
-
Spell Class 0
-
-
Spell Class 1
-
-
Spell Class 2
-
-
-
Spell Class 0
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
Spells Classes
+
+
+
+
+
Domains / SubDomains / Bloodlines / Patrons / Schools
+
+
+
+
+
+
-
-
+
+
+
+
+
Domains / SubDomains / Bloodlines / Patrons / Schools
+
+
+
+
+
+
-
-
+
+
+
+
+
+
Domains / SubDomains / Bloodlines / Patrons / Schools
+
+
+
+
+
+
-
-
-
-
+
+
+
+
Spells
+
+
+
+
+
Level 0
+
+
Level 1
+
+
Level 2
+
+
Level 3
+
+
Level 4
+
+
Level 5
+
+
Level 6
+
+
Level 7
+
+
Level 8
+
+
Level 9
+
+
All Spells
+
+
+
+
+ Level 0 Spells
+
-
-
+
+
Prepped
- Name
+ Name
- •N/A
- Class 0
+ Class 0
Class 1
Class 2
Class
- Level
- School
- Casting Time
- DC Mod
-
+
Level
+
School
+
Casting Time
+
Domain
+
DC Mod
+
DC
+
-
+
+
+
+
+ Level 1 Spells
+
-
-
+
+
- Prepped
- Name
+ Prepped
+ Name
- •N/A
- Class 0
+ Class 0
Class 1
Class 2
Class
- Level
- School
- Casting Time
- DC Mod
-
+
Level
+
School
+
Casting Time
+
Domain
+
DC Mod
+
DC
+
-
+
+
+
+
+ Level 2 Spells
+
-
-
+
+
Prepped
- Name
+ Name
- •N/A
- Class 0
+ Class 0
Class 1
Class 2
Class
- Level
- School
- Casting Time
- DC Mod
-
+
Level
+
School
+
Casting Time
+
Domain
+
DC Mod
+
DC
+
-
+
+
+
+
+ Level 3 Spells
+
-
-
+
+
Prepped
- Name
+ Name
- •N/A
- Class 0
+ Class 0
Class 1
Class 2
Class
- Level
- School
- Casting Time
- DC Mod
-
+
Level
+
School
+
Casting Time
+
Domain
+
DC Mod
+
DC
+
-
+
+
+
+
+ Level 4 Spells
+
-
-
+
+
Prepped
- Name
+ Name
- •N/A
- Class 0
+ Class 0
Class 1
Class 2
Class
- Level
- School
- Casting Time
- DC Mod
-
+
Level
+
School
+
Casting Time
+
Domain
+
DC Mod
+
DC
+
-
+
+
+
+
+ Level 5 Spells
+
-
-
+
+
Prepped
- Name
+ Name
- •N/A
- Class 0
+ Class 0
Class 1
Class 2
Class
- Level
- School
- Casting Time
- DC Mod
-
+
Level
+
School
+
Casting Time
+
Domain
+
DC Mod
+
DC
+
-
+
+
+
+
+ Level 6 Spells
+
-
-
+
+
Prepped
- Name
+ Name
- •N/A
- Class 0
+ Class 0
Class 1
Class 2
Class
- Level
- School
- Casting Time
- DC Mod
-
+
Level
+
School
+
Casting Time
+
Domain
+
DC Mod
+
DC
+
-
+
+
+
+
+ Level 7 Spells
+
-
-
+
+
Prepped
- Name
+ Name
- •N/A
- Class 0
+ Class 0
Class 1
Class 2
Class
- Level
- School
- Casting Time
- DC Mod
-
+
Level
+
School
+
Casting Time
+
Domain
+
DC Mod
+
DC
+
-
+
+
+
-
-
-
Character Details
-
-
- Character Details
-
-
-
Character Name
+
+
-
-
Racial Traits
-
-
-
Racial Traits
-
+
+
Racial Traits
+
+
+
+
Racial Traits
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
Traits
-
-
+
+
Traits
+
+
+
+
Traits
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
+
+
-
-
-
-
-
-
+
+
-
-
- QUICK STATS
-
-
+
+
+
+
-
-
-
DEFENSE
-
-
-
-
-
-
OFFENSE
-
-
-
+
-
-
Attacks
-
-
-
+
+
+
+
STATISTICS
+
+
+
-
-
-
-
Feats
-
-
-
-
-
SPECIAL ABILITIES
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
SPECIAL ABILITIES
+
+
+
+
-
-
+
+
+
+
+
+
-
-
-
Pathfinder Unchained
-
-
+
+
+
Pathfinder Unchained
+
+
Pathfinder Unchained
-
-
+
-
-
Roll Template Info
-
+
+
+
Pathfinder Mythic Adventures
+
-
Roll Template Info
+
Pathfinder Mythic Adventures
+
+
+
+
+ Display/Enable Mythic Adventures Character Sheet Items
+
+
+
+
+
+
+
+
+
Roll Template Info
+
+
+
Roll Template Info
@@ -9762,96 +10762,114 @@
-
+
+
Spell Roll Template (pf_spell) Used for all spell-based sheet rolls. Primarily formatted to emulate a typical spell stat-block. (note: @{spell_options} is used by the sheet to enable the toggling of spell attributes and contains ALL pf_spell specific properties.)
-
+
+
-
-
+
+
Attack Roll Template (pf_attack) Used for attacks. 2 column format except for the "description" property. (note: @{macro_options} is used by the sheet to enable the toggling of notes related to attacks and contains the properties for @{melee_notes}, @{ranged_notes}, @{cmb_notes}, and @{attack_notes}.)
-
+
+
-
-
+
+
Defense Roll Template (pf_defense) Used for Saving Throws. (note: @{macro_options} is used by the sheet to enable the toggling of notes related to defense and contains the properties for @{dr_notes}, @{resistances_notes}, @{immunities_notes}, @{weaknesses_notes}, @{sr_notes}, @{armor_notes}, @{save_notes}, @{cmd_notes}, and @{defense-notes}.)
-
-
+
+
+
-
+
+
Generic Roll Template (pf_generic) Used for Ability checks, Initiative, Spell Failure Check, Skill Checks, Concentration Check, Caster Level Check. 2 column format, except for righttext_X(1-10), lefttext_X(1-10), and the description keys.
-
-
+
+
+
-
+
+
Block Text Roll Template (pf_block) Used for Class Abilities, Feats, Inventory, Racial Traits, Traits. Key/Property names are not shown in this template. Best for long blocks of text.
-
-
+
+
+
-
-
-
-
Sheet configuration
-
-
+
+
+
+
Sheet configuration
+
+
Sheet configuration
-
+
Editing NPC HP updates PC HP
-
- NPC rolls: Whisper to GM or broadcast publicly
+
+
+ NPC rolls: Whisper to GM or broadcast publicly
Public Rolls
Whisper GM
-
- PC rolls: Whisper to GM or broadcast publicly
+
+
+
+
+
+
+ PC rolls: Whisper to GM or broadcast publicly
Public Rolls
Whisper GM
-
+
+
+
+
-
+
-
+
-
- Description: {{description}} {{/description}}
+
-
+
- {{#subtitle}} {{/subtitle}}
+
+
+ {{#subtitle}}
+ {{/subtitle}}
{{#attack}}
**Attack** {{attack}}
@@ -10133,17 +11176,23 @@
{{/damage8}}
{{/attack8}}
- {{#melee_notes}}**Melee Notes:** {{melee_notes}} {{/melee_notes}}
- {{#ranged_notes}}**Ranged Notes:** {{ranged_notes}} {{/ranged_notes}}
- {{#CMB_notes}}**CMB Notes:** {{CMB_notes}} {{/CMB_notes}}
- {{#attack_notes}}**Attack Notes:** {{attack_notes}} {{/attack_notes}}
+ {{#melee_notes}}
+ **Melee Notes:** {{melee_notes}} {{/melee_notes}}
+ {{#ranged_notes}}
+ **Ranged Notes:** {{ranged_notes}} {{/ranged_notes}}
+ {{#CMB_notes}}
+ **CMB Notes:** {{CMB_notes}} {{/CMB_notes}}
+ {{#attack_notes}}
+ **Attack Notes:** {{attack_notes}} {{/attack_notes}}
- {{#type}}**Type** {{type}} {{/type}}
+ {{#type}}
+ **Type** {{type}} {{/type}}
+ {{#weapon_notes}}
+ **Weapon Notes:** {{weapon_notes}} {{/weapon_notes}}
- {{#allprops() header_image character_name character_id name_link subtitle attack damage crit_confirm crit_damage description attack2 damage2 crit_confirm2 crit_damage2 attack3 damage3 crit_confirm3 crit_damage3 attack4 damage4 crit_confirm4 crit_damage4 attack5 damage5 crit_confirm5 crit_damage5 attack6 damage6 crit_confirm6 crit_damage6 attack7 damage7 crit_confirm7 crit_damage7 attack8 damage8 crit_confirm8 crit_damage8 melee_notes ranged_notes CMB_notes attack_notes type}}
-
+ {{#allprops() header_image character_name character_id name_link subtitle attack damage crit_confirm crit_damage description attack2 damage2 crit_confirm2 crit_damage2 attack3 damage3 crit_confirm3 crit_damage3 attack4 damage4 crit_confirm4 crit_damage4 attack5 damage5 crit_confirm5 crit_damage5 attack6 damage6 crit_confirm6 crit_damage6 attack7 damage7 crit_confirm7 crit_damage7 attack8 damage8 crit_confirm8 crit_damage8 melee_notes ranged_notes CMB_notes attack_notes type weapon_notes}}
{{key}} {{value}}
- {{/allprops() header_image character_name character_id name_link subtitle attack damage crit_confirm crit_damage description attack2 damage2 crit_confirm2 crit_damage2 attack3 damage3 crit_confirm3 crit_damage3 attack4 damage4 crit_confirm4 crit_damage4 attack5 damage5 crit_confirm5 crit_damage5 attack6 damage6 crit_confirm6 crit_damage6 attack7 damage7 crit_confirm7 crit_damage7 attack8 damage8 crit_confirm8 crit_damage8 melee_notes ranged_notes CMB_notes attack_notes type}}
+ {{/allprops() header_image character_name character_id name_link subtitle attack damage crit_confirm crit_damage description attack2 damage2 crit_confirm2 crit_damage2 attack3 damage3 crit_confirm3 crit_damage3 attack4 damage4 crit_confirm4 crit_damage4 attack5 damage5 crit_confirm5 crit_damage5 attack6 damage6 crit_confirm6 crit_damage6 attack7 damage7 crit_confirm7 crit_damage7 attack8 damage8 crit_confirm8 crit_damage8 melee_notes ranged_notes CMB_notes attack_notes type weapon_notes}}
{{#description}}
{{description}}
@@ -10153,8 +11202,9 @@
-
- Niveau : {{sortniveau}}
Durée : {{sortduree}}
Portée : {{sortportee}}
- Desc. : {{sortdesc}}
+ Desc. :
+ {{sortdesc}}
{{/sort}}
{{#DV}}
PV gagnés : {{DV}}
diff --git a/PortesMonstresTresors/sheet.json b/PortesMonstresTresors/sheet.json
index c4dea7c227..42264b9157 100644
--- a/PortesMonstresTresors/sheet.json
+++ b/PortesMonstresTresors/sheet.json
@@ -3,6 +3,6 @@
"css": "pmt.css",
"authors": "Nathanael TERRIEN",
"roll20userid": "75857",
- "preview": "pmt_v3.jpg",
- "instructions": "Feuille de Personnage pour PMT v2 (Portes, Monstres et Trésors), un rétro-clone de D&D B/X (adaptation de Labyrinth Lord par Arasmo). Les PDFs du jeu sont disponibles gratuitement sur le site du Scriptorium.D100.fr ( http://www.scriptorium.d100.fr/index.php/lesparchemins/portes-monstres-tresors/ ). Un script API est disponible pour accélérer la crétion de personnage (cf. readme : https://github.com/Roll20/roll20-character-sheets/blob/master/PortesMonstresTresors/ReadMe.md ). v4.0 (29 Janvier 2016)."
+ "preview": "pmt_v4.jpg",
+ "instructions": "Feuille de Personnage pour PMT v2 (Portes, Monstres et Trésors), un rétro-clone de D&D B/X (adaptation de Labyrinth Lord par Arasmo). Les PDFs du jeu sont disponibles gratuitement sur le site du Scriptorium.D100.fr ( http://www.scriptorium.d100.fr/index.php/lesparchemins/portes-monstres-tresors/ ). Un script API est disponible pour accélérer la crétion de personnage. Voir le [readme](https://github.com/Roll20/roll20-character-sheets/blob/master/PortesMonstresTresors/ReadMe.md). v4.1 (22/02/2016)."
}
diff --git a/SavageWorlds-Tabbed/SW_CharSheet-tabbed.css b/SavageWorlds-Tabbed/SW_CharSheet-tabbed.css
index 09873d3604..9eca170e2e 100644
--- a/SavageWorlds-Tabbed/SW_CharSheet-tabbed.css
+++ b/SavageWorlds-Tabbed/SW_CharSheet-tabbed.css
@@ -7,6 +7,87 @@ semi-trans75.png = 75% opacity
semi-trans-grayish.png = 75% opacity
*/
+/*----------- Google Fonts for Cyberpunk --------*/
+/*font-family: 'Audiowide', cursive;
+
+font-family: 'Days One', sans-serif;*/
+
+/*----------- Font Information -----------*/
+/*@font-face {
+ font-family: 'Cinzel';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://themes.googleusercontent.com/static/fonts/cinzel/v1/Hm1qjDlZpOdVXoa-QGE7_w.ttf) format('truetype');
+}
+@font-face {
+ font-family: 'Shadows Into Light';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://themes.googleusercontent.com/static/fonts/shadowsintolight/v3/clhLqOv7MXn459PTh0gXYBayoCksK7A5ZWkzVNukUdQ.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Covered By Your Grace';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://themes.googleusercontent.com/static/fonts/coveredbyyourgrace/v3/6ozZp4BPlrbDRWPe3EBGA8Swx7O1nRJXGXrmuE0DD7s.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Rock Salt';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://themes.googleusercontent.com/static/fonts/rocksalt/v3/Q94aHXFHGip10K5uxi1jOKCWcynf_cDxXwCLxiixG1c.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Bad Script';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://themes.googleusercontent.com/static/fonts/badscript/v2/rL_b2ND61EQmMOJ8CRr1fi3USBnSvpkopQaUR-2r7iU.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Calligraffitti';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://themes.googleusercontent.com/static/fonts/calligraffitti/v4/vLVN2Y-z65rVu1R7lWdvyF9q9cSakIY5dTu4rft1WBw.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Homemade Apple';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://themes.googleusercontent.com/static/fonts/homemadeapple/v3/yg3UMEsefgZ8IHz_ryz86J9Wgegw1HyrDAZq28nXLYY.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Nothing You Could Do';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://themes.googleusercontent.com/static/fonts/nothingyoucoulddo/v3/jpk1K3jbJoyoK0XKaSyQAQB8Hyktk_aPnlUAWJgZcX8.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Architects Daughter';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://themes.googleusercontent.com/static/fonts/architectsdaughter/v3/RXTgOOQ9AAtaVOHxx0IUBOlC2pU_uJZcAXPUd4HCQp8.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Audiowide';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://themes.googleusercontent.com/static/fonts/audiowide/v1/8XtYtNKEyyZh481XVWfVOqCWcynf_cDxXwCLxiixG1c.ttf) format('truetype');
+}
+
+@font-face {
+ font-family: 'Days One';
+ font-style: normal;
+ font-weight: 400;
+ src: url(http://themes.googleusercontent.com/static/fonts/daysone/v3/mM2FsD73BN33S6yWJhnlqfesZW2xOQ-xsNqO47m55DA.ttf) format('truetype');
+}*/
@font-face {
font-family: 'cinzelregular';
@@ -92,6 +173,14 @@ semi-trans-grayish.png = 75% opacity
}
+/*@font-face {
+ font-family: 'Rufscript';
+ src: url('http://www.geeksville.us/fonts/Rufscript_v2.ttf') format('opentype')
+ font-weight: normal;
+ font-style: normal;
+
+}*/
+
/*Font Drop Down Menu*/
.sheet-fontDropdown {
/* fixed widths work best;*/
@@ -203,7 +292,10 @@ semi-trans-grayish.png = 75% opacity
/*font-family: 'Nothing You Could Do', cursive;*/
font-size: 25px;
}
-
+/*.sheet-font9 {
+ font-family: "BlackletterHand";
+ font-size: 25px;
+}*/
.sheet-font10 {
font-family: "Architect";
/*font-family: 'Architects Daughter', cursive;*/
@@ -277,11 +369,19 @@ semi-trans-grayish.png = 75% opacity
.sheet-useBackground input[value="1"]:checked ~ *.sheet-background {
background-image: none;
background-color: white;
+ /*background-image: url("http://www.geeksville.us/roll20/oldMap_seamless_2.png");
+ background-size: 845px 900px;*/
+ /*background-repeat: no-repeat;*/
+ /*background-attachment: fixed;*/
+ /*background-position: center;
+ background-origin: content-box;*/
}
.sheet-useBackground input[value="2"]:checked ~ *.sheet-background {
background-image: url("http://www.geeksville.us/roll20/oldMap_seamless_2.png");
background-size: 845px 900px;
+ /*background-repeat: no-repeat;*/
+ /*background-attachment: fixed;*/
background-position: center;
background-origin: content-box;
}
@@ -289,13 +389,19 @@ semi-trans-grayish.png = 75% opacity
.sheet-useBackground input[value="3"]:checked ~ *.sheet-background {
background-image: url("http://www.geeksville.us/roll20/Z-background.jpg");
background-size: 845px 564px;
+ /*background-repeat: no-repeat;*/
+ /*background-attachment: fixed;*/
background-position: center;
background-origin: content-box;
}
.sheet-useBackground input[value="4"]:checked ~ *.sheet-background {
+ /*background-image: url("http://www.geeksville.us/roll20/NYC-Night_2.jpg");*/
+ /*background-image: url("http://www.geeksville.us/roll20/noir3.jpg");*/
background-image: url("http://www.geeksville.us/roll20/NewNoir2.jpg");
background-size: 850px 920px;
+ /*background-repeat: no-repeat;*/
+ /*background-attachment: fixed;*/
background-position: center;
background-origin: content-box;
}
@@ -303,6 +409,8 @@ semi-trans-grayish.png = 75% opacity
.sheet-useBackground input[value="5"]:checked ~ *.sheet-background {
background-image: url("http://www.geeksville.us/roll20/LastParsec-Background.jpg");
background-size: 840px 1060px;
+ /*background-repeat: no-repeat;*/
+ /*background-attachment: fixed;*/
background-position: center;
background-origin: content-box;
-webkit-border-image:url("http://www.geeksville.us/roll20/LastParsec-Border.png"); /* Safari 3.1-5 */
@@ -315,21 +423,28 @@ semi-trans-grayish.png = 75% opacity
.sheet-useBackground input[value="6"]:checked ~ *.sheet-background {
background-image: url("http://www.geeksville.us/roll20/supers.jpg");
background-size: 840px 564px;
+ /*background-repeat: no-repeat;*/
+ /*background-attachment: fixed;*/
background-position: center;
background-origin: content-box;
}
.sheet-useBackground input[value="7"]:checked ~ *.sheet-background {
+ /*background-image: url("http://www.geeksville.us/roll20/cyberpunk2.jpg");*/
background-image: url("http://www.geeksville.us/roll20/cyberpunk-2.5.jpg");
background-size: 840px 840px;
+ /*background-repeat: no-repeat;*/
+ /*background-attachment: fixed;*/
background-position: center;
background-origin: content-box;
}
.sheet-useBackground input[value="8"]:checked ~ *.sheet-background { /*Hellfrost*/
+ /*background-image: url("http://www.geeksville.us/roll20/cyberpunk2.jpg");*/
background-image: url("http://www.geeksville.us/roll20/Hellfrost_4.jpg");
background-size: 840px 840px;
background-repeat: repeat;
+ /*background-attachment: fixed;*/
background-position: center;
background-origin: content-box;
}
@@ -347,6 +462,7 @@ semi-trans-grayish.png = 75% opacity
background-image: url("http://www.geeksville.us/roll20/lankhmar-bg-1.jpg");
background-size: 840 840px;
background-repeat: repeat;
+ /*background-attachment: fixed;*/
background-position: center;
background-origin: content-box;
}
@@ -448,6 +564,30 @@ semi-trans-grayish.png = 75% opacity
display: inline-block;
}
+/*.sheet-playDisclaimer input[value="3"]:checked + span.sheet-disclaimer::before {
+ content: "The Last Parsec logo is a trademark of Pinnacle Entertainment Group. Used with permission.";
+}*/
+
+/*.sheet-playDisclaimer input[value="2"]:checked + span.sheet-disclaimer::before {
+ content: "The Pirates of the Spanish Main logo is a trademark of Pinnacle Entertainment Group. Used with permission.";
+}*/
+
+/*.sheet-playDisclaimer input[value="5"]:checked + span.sheet-disclaimer::before {
+ content: "The Necessary Evil logo is a trademark of Pinnacle Entertainment Group. Used with permission.";
+}*/
+
+/*.sheet-playDisclaimer input[value="6"]:checked + span.sheet-disclaimer::before {
+ content: "The Deadlands logo is a trademark of Pinnacle Entertainment Group. Used with permission.";
+}*/
+
+/*.sheet-playDisclaimer input[value="7"]:checked + span.sheet-disclaimer::before {
+ content: "The Deadlands: Noir logo is a trademark of Pinnacle Entertainment Group. Used with permission.";
+}*/
+
+/*.sheet-playDisclaimer input[value="8"]:checked + span.sheet-disclaimer::before {
+ content: "The Deadlands: Hell on Earth logo is a trademark of Pinnacle Entertainment Group. Used with permission.";
+}*/
+
.sheet-playDisclaimer input[value="9"]:checked + span.sheet-disclaimer::after {
content: "logo is a trademark of Gun Metal Games. Used with permission.";
}
@@ -592,7 +732,11 @@ input.sheet-rt2:checked + span.sheet-rt2 {
/*----------- Character Sheet Type setup --------------*/
.charsheet div.sheet-player,
-.charsheet div.sheet-npc {
+.charsheet div.sheet-npc {
+ /*visibility: hidden;
+ opacity: 0;
+ max-height:0;
+ overflow: hidden;*/
display: none;
float: left;
}
@@ -600,6 +744,10 @@ input.sheet-rt2:checked + span.sheet-rt2 {
.charsheet input.sheet-is-npc:checked ~ div.sheet-npc,
.charsheet input.sheet-is-npc:not(:checked )~ div.sheet-player
{
+ /*max-height: 999999px;
+ visibility: visible;
+ opacity: 1;
+ transition: opacity 0.5s linear 0s;*/
display: block;
overflow: auto;
}
@@ -649,7 +797,11 @@ input.sheet-rt2:checked + span.sheet-rt2 {
div.sheet-core-content { display: none; width:840px;}
.charsheet div[class^="sheet-section"],
-.charsheet div[class^="sheet-options"] {
+.charsheet div[class^="sheet-options"] {
+ /*visibility: hidden;
+ opacity: 0;
+ max-height:0;
+ overflow: hidden;*/
display: none;
}
@@ -664,10 +816,19 @@ div.sheet-core-content { display: none; width:840px;}
.charsheet input.sheet-attacks:checked ~ div.sheet-options-attack,
.charsheet input.sheet-defend:checked ~ div.sheet-options-defend,
.charsheet input.sheet-misc:checked ~ div.sheet-options-other, {
+ /*max-height: 999999px;
+ visibility: visible;
+ opacity: 1;
+ transition: opacity 0.5s linear 0s;
+ overflow: auto;*/
display: block;
}
-.charsheet input.sheet-tab99:checked ~ div[class^="sheet-section"] {
+.charsheet input.sheet-tab99:checked ~ div[class^="sheet-section"] {
+ /*max-height: 999999px;
+ visibility: visible;
+ opacity: 1;
+ transition: opacity 0.5s linear 0s;*/
display: block;
}
@@ -678,6 +839,7 @@ div.sheet-core-content { display: none; width:840px;}
.charsheet input.sheet-tab,
.charsheet input.sheet-combat-options {
+ /*width: 100px;*/
width: 87px;
height: 40px;
cursor: pointer;
@@ -690,9 +852,11 @@ div.sheet-core-content { display: none; width:840px;}
.charsheet span.sheet-combat-options {
text-align: center;
display: inline-block; /*originally inline-block*/
+ /*font-size: 13px; */
font-size: 11px;
background: #c7c3b0; /*originally 4a6486*/
color: black; /*originally white*/
+ /*font-family: "Tinos", "Quattrocento", "Lustria", "Buenardserif", serif;*/
font-weight: bold;
border-radius: 4px;
@@ -838,7 +1002,9 @@ input[type=number]::-webkit-inner-spin-button {
.sheet-standardtext {
background-color: transparent;
background-image: url("http://i.imgur.com/e1Cfspj.png");
+ /*background-image: url("https://raw.githubusercontent.com/finderski/roll20-character-sheets/master/SavageWorlds-Tabbed/semi-trans75.png");*/
color: black;
+ /*font-weight: bold;*/
font-size: .75em;
}
@@ -848,6 +1014,7 @@ input[type=number]::-webkit-inner-spin-button {
border-right: none;
border-left: none;
border-bottom: solid 1px;
+ /*background-color: transparent;*/
background-image: url("http://i.imgur.com/e1Cfspj.png");
color: black;
font-weight: bold;
@@ -896,6 +1063,8 @@ input.sheet-standardNum {
border-left: none;
border-bottom: solid 1px;
text-align: center;
+ /*color: transparent;*/
+ /*background-color: transparent;*/
background-image: url("http://i.imgur.com/e1Cfspj.png");
color: black;
font-weight: bold;
@@ -904,6 +1073,8 @@ input.sheet-standardNum {
input.sheet-derivedStat {
width: 37px;
text-align: center;
+ /*background-color: white;*/
+ /*background-color: transparent;*/
background-image: url("http://i.imgur.com/e1Cfspj.png");
color: black;
font-weight: bold;
@@ -922,6 +1093,7 @@ img.sheet-protect {
input.sheet-modifier {
width: 35px;
text-align: center;
+ /*background-color: transparent;*/
background-image: url("http://i.imgur.com/e1Cfspj.png");
color: black;
font-weight: bold;
@@ -942,12 +1114,14 @@ span.sheet-nameRankXp {
font-size: 12px;
padding-left: 5px;
padding-right: 5px;
+ /*background-color: #c7c3b0;*/
color: black;
background-image: url("http://www.geeksville.us/roll20/semi-trans-grayish.png");
border-radius: 8px;
}
.sheet-spaceBetween {
+ /*line-height: 35px;*/
font-weight: bold;
color: black;
background-image: url('http://i.imgur.com/e1Cfspj.png');
@@ -972,11 +1146,15 @@ label.sheet-AttributeLabel {
width: 785px;
padding: 5px;
margin-bottom: 5px;
+ /*background-image: url("http://i.imgur.com/e1Cfspj.png");*/
background-image: url("http://i.imgur.com/e1Cfspj.png");
+ /*background-image: url("https://raw.githubusercontent.com/finderski/roll20-character-sheets/master/SavageWorlds-Tabbed/semi-trans75.png");*/
}
button[type=roll].sheet-GM-button::before {
background-image: none;
+ /*background-color: #f2f5d3;*/
+ /*background-color: white;*/
font-size: 13px;
font-family: sans-serif;
content: "gm";
@@ -1017,6 +1195,7 @@ label.sheet-AttributeLabel {
.sheet-AttBorder > input.sheet-NewDieType:checked{
height: auto;
+ /*margin-top: -2px;*/
}
.sheet-AttMod {
@@ -1044,6 +1223,12 @@ label.sheet-AttributeLabel {
display: inline-block;
}
+/*.sheet-additionalrules{
+ width:46%;
+ margin-left:10px;
+ margin-right:10px;
+}*/
+
.sheet-formula{
display:inline-block;
}
@@ -1071,6 +1256,12 @@ label.sheet-AttributeLabel {
margin-bottom:1px;
}
+/*.sheet-col strong.sheet-dee {
+ font-size: 1.4em;
+ font-weight: bold;
+ padding-right: 4px;
+}*/
+
.charsheet input.sheet-short {
width: 3.5em;
text-align: center;
@@ -1119,6 +1310,9 @@ select.sheet-dtype {
color: black;
}
+/*.sheet-DStatsTable th {
+ text-align: center;
+}*/
/*----------- End Main Setup -----------*/
@@ -1186,73 +1380,113 @@ select.sheet-dtype {
}
.sheet-d0 {
+ /*background-position: -411px -1px;*/
width: 35px;
height: 35px;
+ /*background-image: url("https://i.imgur.com/zkgyBOi.png");*/
font-family: "dicefontd4";
font-size: 50px;
color: red;
line-height:25px;
text-align: center;
+ /*text-align: right;*/
+ /*line-height: 25px;*/
background-image: url("http://i.imgur.com/e1Cfspj.png");
+ /*padding-bottom: 25px;*/
+ /*background-repeat: no-repeat;*/
+ /*color: transparent;*/
+ /*display: inline-block;*/
display: none;
}
.sheet-d4 {
+ /*background-position: -411px -1px;*/
width: 35px;
height: 35px;
+ /*background-image: url("https://i.imgur.com/zkgyBOi.png");*/
font-family: "dicefontd4";
font-size: 50px;
color: red;
line-height:25px;
text-align: center;
+ /*text-align: right;*/
+ /*line-height: 25px;*/
background-image: url("http://i.imgur.com/e1Cfspj.png");
+ /*padding-bottom: 25px;*/
+ /*background-repeat: no-repeat;*/
+ /*color: transparent;*/
+ /*display: inline-block;*/
display: none;
}
.sheet-d6 {
+ /*background-position: -411px -1px;*/
width: 35px;
height: 35px;
+ /*background-image: url("https://i.imgur.com/zkgyBOi.png");*/
font-family: "dicefontd6";
font-size: 40px;
color: black;
line-height:35px;
text-align: center;
+ /*text-align: right;*/
+ /*line-height: 25px;*/
background-image: url("http://i.imgur.com/e1Cfspj.png");
+ /*background-repeat: no-repeat;*/
+ /*color: transparent;*/
display: inline-block;
display: none;
}
.sheet-d8 {
+ /*background-position: -703px -1px;*/
width: 35px;
height: 35px;
+ /*background-image: url("https://i.imgur.com/zkgyBOi.png");*/
font-family: "dicefontd8";
font-size: 40px;
color: black;
line-height:35px;
text-align: center;
+ /*text-align: right;*/
+ /*line-height: 25px;*/
background-image: url("http://i.imgur.com/e1Cfspj.png");
+ /*background-repeat: no-repeat;*/
+ /*color: transparent;*/
display: inline-block;
display: none;
}
.sheet-d10 {
+ /*background-position: -411px -1px;*/
width: 35px;
height: 35px;
+ /*background-image: url("https://i.imgur.com/zkgyBOi.png");*/
font-family: "dicefontd10";
font-size: 45px;
color: blue;
line-height:35px;
text-align: center;
+ /*text-align: right;*/
+ /*line-height: 25px;*/
background-image: url("http://i.imgur.com/e1Cfspj.png");
+ /*background-repeat: no-repeat;*/
+ /*color: transparent;*/
display: inline-block;
display: none;
}
.sheet-d12 {
+ /*background-position: -411px -1px;*/
width: 35px;
height: 35px;
+ /*background-image: url("https://i.imgur.com/zkgyBOi.png");*/
font-family: "dicefontd12";
font-size: 40px;
color: green;
line-height:35px;
text-align: center;
+ /*text-align: right;*/
+ /*line-height: 25px;*/
background-image: url("http://i.imgur.com/e1Cfspj.png");
+ /*background-repeat: no-repeat;*/
+ /*color: transparent;*/
display: inline-block;
display: none;
}
@@ -1459,10 +1693,14 @@ select.sheet-dtype {
.sheet-HideVehicles:checked ~ *[class^="sheet-vehicleTypes"],
.sheet-HideVehicles:checked ~ *.sheet-vehicleTypes.sheet-allVehicles,
+/*.sheet-HideSailing:checked ~ *.sheet-ship-sailing.sheet-isSailing,*/
.sheet-HideSailing:checked ~ *.sheet-isSailing,
.sheet-HideFlying:checked ~ *.sheet-isFlying,
.sheet-HideGround:checked ~ *.sheet-isGround,
.sheet-HideWalker:checked ~ *.sheet-isWalker,
+/*.sheet-HideFlying:checked ~ *.sheet-ship-flying.sheet-isFlying,*/
+/*.sheet-HideGround:checked ~ *.sheet-ship-groundvehicle.sheet-isGround,
+.sheet-HideWalker:checked ~ *.sheet-ship-walker.sheet-isWalker,*/
.sheet-HideGear:checked ~ *.sheet-gear,
.sheet-HideSpellsd:checked ~ *.sheet-spellsd,
@@ -1837,6 +2075,7 @@ select.sheet-dtype {
width: 20%;
height: 16px;
font-size: 9px;
+ /*background: #65763c;*/
background: #c7c3b0; /*#93537c;*/
color: black; /*white;*/
font-weight: bold;
@@ -1850,6 +2089,8 @@ select.sheet-dtype {
width: 5%;
height: 16px;
font-size: 9px;
+ /*font-family: "Pictos";*/
+ /*background: #65763c;*/
background: black; /*#93537c;*/
color: white; /*white;*/
font-weight: bold;
@@ -1910,6 +2151,8 @@ select.sheet-dtype {
cursor: pointer;
margin-left: auto;
margin-top: auto;
+ /*position: absolute;
+ right: 20%;*/
opacity: 0;
z-index: 9999;
}
@@ -1920,11 +2163,13 @@ select.sheet-dtype {
cursor: pointer;
margin-left: auto;
margin-top: auto;
+ /*position: absolute;
right: 20%;*/
opacity: 0;
z-index: 9999;
}
+/*.charsheet span.sheet-is-config,*/
.charsheet span.sheet-is-wcSkills,
.charsheet span.sheet-is-mSkills,
.charsheet span.sheet-is-mSkills2,
@@ -1984,12 +2229,23 @@ select.sheet-dtype {
border-radius: 4px;
}
-.charsheet input.sheet-HideWCSkills2 {
+.charsheet input.sheet-HideWCSkills2/*,
+.charsheet input.sheet-use528,
+.charsheet input.sheet-use9212,
+.charsheet input.sheet-h528,
+.charsheet input.sheet-h9212,
+.charsheet input.sheet-augEnd,
+.charsheet input.sheet-hide528*/ {
+ /*width: 20%;*/
+ /*width: 158px;*/
+ /*height: 16px;*/
width: 90px;
height:2.2em;
cursor: pointer;
margin-left: auto;
margin-top: auto;
+ /*position: absolute;
+ right: 20%;*/
opacity: 0;
z-index: 9999;
}
@@ -2000,17 +2256,33 @@ select.sheet-dtype {
display: block;
background: #000;
color: white;
+ /*text-shadow:0px 0px 2px #000,0px 0px 2px #000,0px 0px 2px #000;*/
box-shadow:none;
+ /*float:left!important;*/
+ /*margin-bottom:0px;*/
font-size:0.9em;
height:2.2em;
}
-.charsheet span.sheet-is-wcSkills2 { /*Close Config: grayish background with black text*/
+.charsheet span.sheet-is-wcSkills2/*,
+.charsheet span.sheet-528,
+.charsheet span.sheet-h528,
+.charsheet span.sheet-9212,
+.charsheet span.sheet-aEnd*/ { /*Close Config: grayish background with black text*/
+ /*background-color: #c7c3b0;
+ color: black;*/
+ /*display: block;*/
+ /*text-shadow:0px 0px 2px #000,0px 0px 2px #000,0px 0px 2px #000;*/
+ /*box-shadow:none;*/
+ /*float:left!important;*/
+ /*margin-bottom:0px;*/
background: #000;
border-radius: 4px;
color: white;
font-size: 0.9em;
height: 2.2em;
+ /*width: 158px;
+ margin-left: -158px;*/
width: 90px;
margin-left: -90px;
border-radius: 4px;
@@ -2020,12 +2292,19 @@ select.sheet-dtype {
line-height: 2.2em;
}
-.charsheet .sheet-HideWCSkills2:checked + span.sheet-is-wcSkills2 {
+.charsheet .sheet-HideWCSkills2:checked + span.sheet-is-wcSkills2/*,
+.charsheet .sheet-use528:checked + span.sheet-528,
+.charsheet .sheet-use9212:checked + span.sheet-9212,
+.charsheet .sheet-h528:checked + span.sheet-h528,
+.charsheet .sheet-h9212:checked + span.sheet-h9212,
+.charsheet .sheet-augEnd:checked + span.sheet-aEnd*/ {
background: #000;
border-radius: 4px;
color: white;
font-size: 0.9em;
height:2.2em;
+ /*width: 158px;
+ margin-left: -158px;*/
width: 90px;
margin-left: -90px;
display: inline-block;
@@ -2054,6 +2333,8 @@ select.sheet-dtype {
width: 90%;
max-width: 200px;
text-align: center;
+ /*color: #755b27;
+ background-color: #dbc792;*/
color: white;
background-color: black;
border-radius: 15px;
@@ -2068,7 +2349,10 @@ select.sheet-dtype {
width: 90%;
max-width: 200px;
min-height: 250px;
+ /*height: 250px;*/
background: url(http://www.geeksville.us/roll20/Ace_of_Spades5.jpg) top left;
+ /*background-size: 200px 250px;*/
+ /*background-size: cover;*/
background-size: 100% 100%;
background-repeat: no-repeat;
padding: 5px;
@@ -2084,8 +2368,12 @@ select.sheet-dtype {
.sheet-rolltemplate-clubsdamage table,
.sheet-rolltemplate-combined table {
width: 95%;
+ /*height: 250px;*/
+ /*padding: 2px;*/
font-family: "Trebuchet MS", Helvetica, sans-serif;
border-spacing: 0;
+ /*position: relative;
+ top: 10%;*/
}
.sheet-rolltemplate-spadestrait2 caption,
@@ -2098,6 +2386,7 @@ select.sheet-dtype {
.sheet-rolltemplate-clubsdamage th {
height: 1.0em;
font-size: 1.0em;
+ /*border: solid 1px;*/
border-collapse: collapse;
margin: 5px;
}
@@ -2112,6 +2401,7 @@ select.sheet-dtype {
vertical-align: top;
font-family: "Trebuchet MS", Helvetica, sans-serif;
font-size: 0.875em;
+ /*border-collapse: collapse;*/
border-bottom: solid 1px;
}
@@ -2148,6 +2438,7 @@ select.sheet-dtype {
}
.sheet-rolltemplate-spadestrait2 .sheet-rtcard .sheet-fakeroll .inlinerollresult{
+ /*padding-right: 0px;*/
text-align: right;
color: #4d4d4d;
font-weight: normal;
@@ -2196,7 +2487,10 @@ select.sheet-dtype {
/* Version 2 Roll Template */
.sheet-rolltemplate-solidtrait h2.sheet-caption {
+ /*width: 95%;*/
text-align: center;
+ /*color: #dbc792;
+ background-color: #755b27;*/
color: white;
background-color: black;
border-radius: 15px;
@@ -2226,6 +2520,9 @@ select.sheet-dtype {
font-size: 1.5em;
margin-top: 5px;
margin-bottom: 15px;
+ /*border: solid 1px #755b27;
+ background-color: #755b27;
+ color: #dbc792;*/
border: solid 1px black;
background-color: black;
color: white;
@@ -2253,6 +2550,7 @@ select.sheet-dtype {
.sheet-rolltemplate-clubsdamage h2.sheet-caption {
width: 90%;
max-width: 200px;
+ /*width: 200px;*/
text-align: center;
color: white;
background-color: #680000;
@@ -2265,10 +2563,12 @@ select.sheet-dtype {
.sheet-rolltemplate-clubsdamage div.sheet-rtcard,
.sheet-rolltemplate-combined div.sheet-AceClubs {
+ /*width: 200px;*/
width: 90%;
max-width: 200px;
min-height: 250px;
background: url('http://www.geeksville.us/roll20/Ace_of_Clubs-Red-light.jpg') top left;
+ /*background-size: cover;*/
background-size: 100% 100%;
background-repeat: no-repeat;
padding: 5px;
@@ -2279,7 +2579,10 @@ select.sheet-dtype {
/* Damage Roll Solid Template */
.sheet-rolltemplate-soliddamage h2.sheet-caption {
+ /*width: 95%;*/
text-align: center;
+ /*color: #dbc792;
+ background-color: #755b27;*/
color: white;
background-color: #680000;
border-radius: 15px;
@@ -2308,6 +2611,9 @@ select.sheet-dtype {
font-size: 1.5em;
margin-top: 5px;
margin-bottom: 15px;
+ /*border: solid 1px #755b27;
+ background-color: #755b27;
+ color: #dbc792;*/
border: solid 1px #680000;
background-color: #680000;
color: white;
@@ -2345,6 +2651,8 @@ select.sheet-dtype {
.sheet-rolltemplate-combined caption {
font-size: 1.5em;
margin: 5px;
+ /*border: solid 1px #4C0000;*/
+ /*background-color: #4C0000;*/
color: #4C0000;
border-radius: 15px;
padding: 10px;
@@ -2353,6 +2661,7 @@ select.sheet-dtype {
.sheet-rolltemplate-combined th {
height: 1.0em;
font-size: 1.0em;
+ /*border: solid 1px;*/
border-collapse: collapse;
margin: 5px;
}
diff --git a/SavageWorldsFrench/ReadMe.md b/SavageWorldsFrench/ReadMe.md
index b22a7d0682..72aa857006 100644
--- a/SavageWorldsFrench/ReadMe.md
+++ b/SavageWorldsFrench/ReadMe.md
@@ -1,90 +1,113 @@
# Savage Worlds (french)
-Feuille de personnage (FdP) avec jets intégrés pour **Savage Worlds**, basée sur le Livre de Base (LdB) de la version éditée en français par [Black Book Editions](http://www.black-book-editions.fr/index.php?site_id=278).
+Feuille de personnage (FdP) avec jets intégrés pour **Savage Worlds** et **Deadlands Reloaded**, basée sur le Livre de Base (LdB) de la version éditée en français par [Black Book Editions](http://www.black-book-editions.fr/catalogue.php?id=58).
# Version courante
-1.2 [Capture d'écran](sawofr.png)
+1.4 [Capture d'écran](sawofr.jpg)
+[Style Deadlands](sawofr_style_deadlands.png)
-#Divers notes
+#Notes sur les Jets
-##A propos des jets
-Dans le cadre de Savage Worlds et de cette FdP, activer l'option des dés 3D, automatiquement lancés, est fortement recommandé :
+##Pénalités
+Les pénalités de jet dues aux Blessures, à la Fatigue et à l'Encombrement sont automatiquement prises en compte dans les 3 modes de jet (voir ci-dessous).
+Dans les 2 modes d'affichages par template, l'état du personnage peut être optionnellement affiché (activé par défaut), rappelant ces éventuelles pénalités :
+
-
+##Modes d'affichage des jets
+La feuille permet 3 modes d'affichage des jets :
+
+Ces options sont détaillées ci-dessous.
-Les pénalités de jet dues aux Blessures, à la Fatigue et à l'Encombrement sont automatiquement prises en compte dans les 2 modes de jet (voir ci-dessous), et affichées/rappelées (pour information) dans le chat.
+Ce choix se fait par personnage, en haut de la FdP, et peut être changé à tout moment (on peut passer de l'un à l'autre, au besoin).
-La feuille permet 2 types de jets :
-
-* Option 1 : afficher **Succès + Relances**
-* Option 2 : afficher les **Jets bruts**
-
-Ce choix se fait par personnage, en haut de la FdP, et peut être changé à tout moment (on peut passer de l'un à l'autre, au besoin) :
-
-
-Que cela soit dans l'option 1 ou 2, un modificateur ponctuel/circonstanciel est toujours demandé :
-
-
-Dans le cas des Jets de Lancer, de Tir, ou d'armes/attaques utilisant une de ces compétences, la Portée est demandée et intégrée au jet :
+Quel que soit le mode choisi, un modificateur ponctuel/circonstanciel est toujours demandé :
+
+Un modificateur du même genre est demandé pour le jet de dégâts intégrés aux jets d'attaques.
+Dans le cas des Jets de Lancer, de Tir, ou d'armes/attaques utilisant une de ces compétences, la Portée est demandée et intégrée au jet :

-Pour les jets de Tir, l'utilisation du Dé Joket est optionnelle (pour gérer les Cadences de Tir supérieures à 1) et son utilisation doit être confirmée :
-
+Pour les jets de Tir, l'utilisation du Dé Joket est optionnelle (pour gérer les Cadences de Tir supérieures à 1) et son utilisation doit être confirmée :

###Option 1 : Succès + Relances
-La feuille demande une difficulté ou une cible (pour les jets d'attaques et dégâts) avant de lancer les dés.
-
-
-
-Une cible dans Roll20 est un autre pion, lequel doit être associé à une feuille de personnage dont les caractéristiques ont été renseignées.
-
+Les jets demande une difficulté, ou une cible pour les jets d'attaques et dégâts si l'option est activée, avant de lancer les dés.
+
+Une cible dans Roll20 est un autre pion, lequel doit être associé à une feuille de personnage dont les caractéristiques ont été renseignées.

-Le choix d'une cible ou le renseignement d'une difficulté permet de calculer et d'afficher la réussite du jet (d'attribut, compétence, attaque ou dégâts) avec la lecture suivante des résultats :
+Le choix d'une cible ou le renseignement d'une difficulté permet de calculer et d'afficher la réussite du jet (d'attribut, de compétence, d'attaque ou de dégâts) avec les possibilités de résultat suivantes :
-* 0 succès+relances : le jet est un échec,
-* 1 succès+relances : le jet est une réussite, sans relance
-* 2 succès+relances : le jet est une réussite, avec 1 relance
-* 3 succès et relances : le jet est une réussite, avec 2 relances
-* etc. (nombre de relance = résultat -1)
-
-
-
-Le détail du calcul (et du résultat individuel des dés) est visible dans l'info-bulle du jet :
+* Échec (0 succès+relances),
+* Succès sans relance (1 succès+relances)
+* Succès+Relances :
+** résultat de 2 : un succès et une relance
+** résultat de 3 : un sucècs et 2 relances
+** etc. (nombre de relances = résultat affiché -1)
+Le détail du calcul (et du résultat individuel des dés) est visible dans l'info-bulle du jet :

-###Option 2 : Jets bruts
-La feuille ne demande pas d'autre renseignement que le Modificateur circonstanciel (cf. ci-dessus), effectue le jet demandé (y compris dégâts s'il s'agit d'une arme/attaque) et affiche le total de chaque jet :
-
-
+Dans le cas des attaques, en cas de relance, 1d6 explosif est automatiquement ajouté aux jets de dégâts :
+
+NB : techniquement, aboutir à ce résultat contraint à lancer 2 fois le jet de dégâts (une fois avec, une fois sans le +1d6!!) et d'afficher l'un ou l'autre en fonction de la réussite de l'attaque (si relance donc). Donc avec les dé 3D activés, cela peut apparaître un peu ... confus (beaucoup de dés sont lancés).
+###Option 2 : Total des jets
+La feuille ne demande pas d'autre renseignement que les éventuels Modificateurs circonstanciels (cf. ci-dessus), effectue le jet demandé (y compris dégâts s'il s'agit d'une arme/attaque) et affiche un template avec le total de chaque jet.
+Le détail du calcul (et du résultat individuel des dés) est visible dans l'info-bulle du jet.
+
Au MJ et/ou aux joueurs de calculer la réussite ou l'échec, les relances éventuelles etc.
-Le détail du calcul (et du résultat individuel des dés) est visible dans l'info-bulle du jet :
+Dans le cas d'attaque, le d6 explosif de dégâts supplémentaires en cas de relance est directement lancé, affiché à part (au MJ et/ou aux joueurs de le prendre en compte si nécessaire) :
+
-
+###Option 3 : Jets bruts
+La feuille ne demande pas d'autre renseignement que les éventuels Modificateurs circonstanciels (cf. ci-dessus), effectue le jet demandé (y compris dégâts s'il s'agit d'une arme/attaque) et l'affiche entièrement détaillé dans le chat, façon "macro", sans template.
+Dans le cas d'attaque, le d6 explosif de dégâts supplémentaires en cas de relance est directement lancé, affiché à part (au MJ et/ou aux joueurs de le prendre en compte si nécessaire).
+
+
+#Autres Notes
## Mise en place des pions
-Les 3 "barres"/propriétés visibles des pions peuvent être associées à n'importe quel attribut de la FdP, à votre convenance.
+Les 3 "barres"/propriétés visibles des pions peuvent être associées à n'importe quel attribut de la FdP, à votre convenance.
Il n'y a (pour l'instant) aucun automatisme lié à ces propriétés.
##Raccourcis/barre de macro
-Pour l'instant, sur le serveur de production de Roll20, les boutons contenus dans les sections dynamiques/répétables ne peuvent pas être glisser/déposer dans la barre de macro pour créer un bouton "raccourcis".
-Cela concerne, sur le FdP : compétences supplémentaire (au-delà de la liste complète du LdB, intégrée dans la FdP), et les armes/attaques au-delà des 3 premières.
-En effet, pour pallier ce problème, la FdP propose donc par défaut 3 armes/attaques "fixes", dont le bouton peut être utilisé en macro/raccourcis.
+Les boutons contenus dans les sections dynamiques/répétables peuvent être glissés/déposés dans la barre de macro pour créer un bouton "raccourcis".
+Cela concerne, sur la FdP : compétences supplémentaire (au-delà de la liste complète du LdB, intégrée dans la FdP), et les armes/attaques au-delà des 3 premières.
##Pouvoirs
-Aucun jet/automatisme n'est pour l'instant intégré dans la FdP concernant les Pouvoirs.
-Les suggestions sont les bienvenues à ce sujet.
+Aucun jet/automatisme n'est pour l'instant intégré dans la FdP concernant les Pouvoirs, si ce n'est de pouvoir les saisir et les montrer dans le chat.
+Les suggestions sont les bienvenues à ce sujet.
NB : décrémenter les PP automatiquement au lancement d'un pouvoir nécessiterait l'utilisation d'un script API, donc d'un compte "Pro".
# Notes de version
-##v1.2 (2015-12-22)
+##v1.4 (2016-02-21)
+Merci à Xo de Vorcen pour les tests !
+* Configuration
+ * Déplacement de la configuration dans un onglet dédié
+ * Option d'affichage aux couleurs de Deadlands Reloaded
+ * Option de configuration pour afficher/masquer les Possessions (masquée par défaut pour les PNJ et Extras)
+ * Options de configuration pour afficher/masquer les compétences, toutes ou une à une (sauf Tripes, dépendante du style Deadlands)
+ * Option de configuration pour les jets : template de succès+relances (défaut), template de total de jets, ou "jets bruts" (pas de template)
+ * Option de configuration pour les attaques avec succès+relances : choix entre cible/pion (défaut) ou saisie de difficulté
+ * Option d'affichage ou non des états du personnage (Secoué, Blessures, Fatigue) dans le template de jet
+* Feuille
+ * Ajout de la caractéristique Trempe et la compétence Tripes, visibles uniquement en mode "Deadlands"
+ * Correction : les bonus de dégâts peuvent être négatifs
+ * Affichage adapté entre PJ/PNJ/Extra
+ * Stylisation de l'état Secoué, des Blessures et de la Fatigue
+ * Ajout un bouton d'affichage dans le chat de la description des pouvoirs
+ * Ajout d'un bouton d'agrandissement/réduction des Atouts, Handicaps, Signes particuliers, Richesse, des notes d'Armes et Pouvoirs
+* Jets
+ * Possibilité de saisir un modificateur au jet de dégâts
+ * Jet de dégâts avec +1d6!! dégâts en mode succès+relances si relance, affichage d'un jet supplémentaire de +1d6!! dans les autres modes
+ * Amélioration de l'affichage des résultats de jets en mode succès+relances (indicateur d'échec, succès sans relance et succès+relances)
+ * Correction des malus de jets en état critique (-3 pour les Blessures et -2 pour la Fatigue)
+
+##v1.2 (2015-12-22)
Equipement / Inventaire / Encombrement : ajout du poids individuel, gestion des poids décimaux, correction d'un bug lors de la suppression d'une ligne.
##v1.1 (2015-11-30)
diff --git a/SavageWorldsFrench/sawofr.css b/SavageWorldsFrench/sawofr.css
index 0da79218e4..5416ef734e 100644
--- a/SavageWorldsFrench/sawofr.css
+++ b/SavageWorldsFrench/sawofr.css
@@ -1,6 +1,6 @@
/* TEMPLATES */
.sheet-rolltemplate-sawo table {
- width: 189px;
+ width: 100%;
padding: 2px;
border: none;
background-color: #FBFCFC;
@@ -36,177 +36,297 @@
.sheet-rolltemplate-sawo td.sheet-info {
font-style: italic;
background-color:#F6F1EC;
+ text-align: right;
+}
+.sheet-rolltemplate-sawo div.sheet-jetdesc{
+ font-family: 'Verdana', serif;
+ font-size: 0.9em;
+ max-height: 140px;
+ overflow-y: auto;
+}
+/************************************** FDP ********************************************/
+ /************************************** GENERAL *********************************/
+div,
+button,
+textarea,
+span,
+input,
+select,
+table,
+tr,
+td,
+th{
+ box-sizing: border-box;
+}
+input[type=radio],
+input[type=checkbox],
+span {
+ display : inline-block;
+}
+/***************************** CONFIGURATION *******************************************/
+div.sheet-configuration div.sheet-col{
+ border : 2px dotted #888888;
+ margin-bottom: 10px;
+ min-height: 120px;
+ padding: 5px;
+}
+div.sheet-conftitre{
+ display: block;
+ color: #888888;
+ font-weight: bold;
+ height: 25px;
+ text-align: center;
+}
+div.sheet-confcat,
+div.sheet-optionEtat,
+div.sheet-optionCible{
+ color: #555555;
+ font-style: italic;
+ padding-left: 5px;
+ min-height: 25px;
+}
+.sheet-confcat{
+ display: block;
+}
+.sheet-optionEtat{
+ display: none;
+}
+.sheet-optionCible{
+ display: none;
+}
+input[type=radio].sheet-styleRolrel:checked ~ .sheet-optionCible{
+ display: inline-block;
+}
+input[type=radio].sheet-styleRolrel:checked ~ .sheet-optionEtat,
+input[type=radio].sheet-styleRoljet:checked ~ .sheet-optionEtat{
+ display: inline-block;
+}
+input[type=checkbox].sheet-optionEtat,
+input[type=checkbox].sheet-optionCible{
+ opacity: 0;
+ width: 50px;
+ min-height: 30px;
+ z-index: 10;
+}
+input[type=checkbox].sheet-optionEtat + span,
+input[type=checkbox].sheet-optionCible + span{
+ text-align: center;
+ width: 50px;
+ height: 25px;
+ margin-left: -52px;
+ vertical-align: bottom;
+ z-index: 1;
+ color: #777777;
+}
+input[type=checkbox].sheet-chkSkill {
+ display: inline-block;
+ opacity: 0;
+ width: 170px;
+ z-index: 10;
+ border: 1px solid black;
+}
+input[type=checkbox].sheet-chkSkill + span {
+ display: inline-block;
+ text-align: center;
+ width: 170px;
+ margin-left: -160px;
+ vertical-align: bottom;
+ z-index: 1;
+ color: #777777;
+}
+input[type=checkbox].sheet-chkRolrel,
+input[type=checkbox].sheet-chkRoljet,
+input[type=checkbox].sheet-chkRolbrut {
+ display: none;
}
-/* FDP */
input[type=radio].sheet-styleRolrel,
-input[type=radio].sheet-styleRoljet{
- margin-left: 10px;
- margin-right: 2px;
+input[type=radio].sheet-styleRoljet,
+input[type=radio].sheet-styleRolbrut{
+ display : inline-block;
+ opacity: 0;
+ width: 120px;
+ min-height: 30px;
+ z-index: 10;
+ margin-top: -15px;
}
input[type=radio].sheet-styleRolrel + span,
-input[type=radio].sheet-styleRoljet + span{
- font-size:11px;
- color: #888888;
- text-align:left;
+input[type=radio].sheet-styleRoljet + span,
+input[type=radio].sheet-styleRolbrut + span{
+ display : inline-block;
+ text-align: center;
+ width: 120px;
+ height: 25px;
+ margin-left: -122px;
+ vertical-align: bottom;
+ z-index: 1;
+ color: #777777;
}
-span.sheet-smallspan{
- font-size:11px;
- color: #888888;
- text-align:left;
+input[type=radio].sheet-styleRolrel + span:before,
+input[type=radio].sheet-styleRoljet + span:before,
+input[type=radio].sheet-styleRolbrut + span:before,
+input[type=checkbox].sheet-optionEtat + span:before,
+input[type=checkbox].sheet-optionCible + span:before,
+input[type=checkbox].sheet-chkSkill + span:before{
+ font-size: 1.2em;
+ font-family: 'pictos';
+ color: #777777;
+ content:'*';
}
-button[type="roll"]{
- padding: 0px 0px 0px 0px;
- margin: 0px 0px 0px 0px;
- text-shadow: none;
- box-shadow: none;
- text-align:left;
- vertical-align: middle;
- line-height: 0px;
- height: 20px;
- width: 20px;
- font-size: 1em;
- font-weight: normal;
- color:#CD071E;
- border-width: 1px;
- border-style: solid;
- border-color: rgba(34,66,143,0.5);
- border-radius: 4px;
-}
-button[type="roll"]:hover{
- border-width: 1px;
- border-color:#CD071E;
+input[type=radio].sheet-styleRolrel:checked + span,
+input[type=radio].sheet-styleRoljet:checked + span,
+input[type=radio].sheet-styleRolbrut:checked + span,
+input[type=checkbox].sheet-optionEtat:checked + span,
+input[type=checkbox].sheet-optionCible:checked + span,
+input[type=checkbox].sheet-chkSkill:checked + span {
font-weight: bold;
+ color: #CD071E;
}
-button[type="roll"].sheet-btRolrel{
- width: 142px;
- border-width: 1px;
+input[type=radio].sheet-styleRolrel:checked + span:before,
+input[type=radio].sheet-styleRoljet:checked + span:before,
+input[type=radio].sheet-styleRolbrut:checked + span:before,
+input[type=checkbox].sheet-optionEtat:checked + span:before,
+input[type=checkbox].sheet-optionCible:checked + span:before,
+input[type=checkbox].sheet-chkSkill:checked + span:before{
+ font-weight: bold;
+ color: #CD071E;
+ content:'3';
+}
+input[type=radio].sheet-onglmain,
+input[type=radio].sheet-onglconfig{
+ margin: 0;
+ margin-top: -4px;
+ margin-bottom: -4px;
+ padding: 0;
+ display: inline-block;
+ opacity: 0;
+ width: 110px;
+ height: 25px;
+ z-index: 2;
+}
+input[type=radio].sheet-onglmain + span,
+input[type=radio].sheet-onglconfig + span{
+ color: #666666;
+ background-color: #BBBBBB;
+ font-size:15px;
+ text-align:center;
+ display: inline-block;
+ width: 110px;
+ height: 28px;
+ margin: 0;
+ margin-left: -110px;
+ margin-right: 0px;
+ padding:0;
+ margin-bottom: -1px;
+ padding-top: 5px;
+ font-size: 0.9em;
+ text-transform: uppercase;
border-style: solid;
- border-color: transparent;
- font-size:1em;
+ border-width: 1px;
+ border-color: #888888;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ z-index: 1;
+}
+input[type=radio].sheet-onglmain:checked + span,
+input[type=radio].sheet-onglconfig:checked + span {
font-weight: bold;
color: black;
- background-image:none;
- background: transparent;
- text-transform: uppercase;
-}
-button[type="roll"].sheet-btRolrel:before{
- content: "t ";
- text-transform: lowercase;
-}
-button[type="roll"].sheet-btRolrel:hover:before{
- font-weight: bold;
- color: #CD071E;
-}
-button[type="roll"].sheet-btRolrel:hover{
- border-width: 1px;
- border-style: solid;
- border-color:#CD071E;
-}
-input[type=radio].sheet-styleRolrel:checked ~ div.sheet-main button[type=roll].sheet-btRolrel{
- display: inline-block;
-}
-input[type=radio].sheet-styleRoljet:checked ~ div.sheet-main button[type=roll].sheet-btRolrel{
- display: none;
-}
-input[type=radio].sheet-styleRolrel:checked ~ div.sheet-main select.sheet-selComprel{
- display: inline-block;
-}
-input[type=radio].sheet-styleRoljet:checked ~ div.sheet-main select.sheet-selComprel{
- display: none;
-}
-input[type=radio].sheet-styleRolrel:checked ~ div.sheet-main select.sheet-selCompjet{
- display: none;
-}
-input[type=radio].sheet-styleRoljet:checked ~ div.sheet-main select.sheet-selCompjet{
- display: inline-block;
-}
-button[type="roll"].sheet-btRoljet{
- width: 142px;
- border-width: 1px;
- border-style: solid;
- border-color: transparent;
- font-size:1em;
- font-weight: bold;
- color: black;
- background-image:none;
- background: transparent;
- text-transform: uppercase;
-}
-button[type="roll"].sheet-btRoljet:before{
- content: "t ";
- text-transform: lowercase;
-}
-button[type="roll"].sheet-btRoljet:hover:before{
- font-weight: bold;
- color: #CD071E;
-}
-button[type="roll"].sheet-btRoljet:hover{
- border-width: 1px;
- border-style: solid;
- border-color:#CD071E;
-}
-input[type=radio].sheet-styleRolrel:checked ~ div.sheet-main button[type=roll].sheet-btRoljet{
- display: none;
-}
-input[type=radio].sheet-styleRoljet:checked ~ div.sheet-main button[type=roll].sheet-btRoljet{
- display: inline-block;
-}
-div.sheet-main{
- width:860px;
- background: linear-gradient(#CD071E,#E6DBCF,#EFE7DD);
- font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
- padding: 5px 5px 5px 5px;
-}
-div.sheet-mycol{
- display: inline-block;
- width: 280px;
- vertical-align:top;
- padding: 0px 0px 0px 0px;
- margin: 0px 0px 0px 0px;
-}
-div.sheet-redtitle1{
- font-family: Candal;
- font-size: 16px;
- color: #CD071E;
- text-align: center;
- font-weight: bold;
- margin: 10px 1px 1px 1px;
-}
-div.sheet-redtitle2{
- font-family: Candal;
- font-size: 12px;
- color: #CD071E;
- text-align: center;
- font-weight: bold;
- margin: 5px 1px 1px 1px;
-}
-div.sheet-redtitle3{
- display: inline-block;
- font-family: Candal;
- font-size: 12px;
- color: #CD071E;
- text-align: left;
- font-weight: bold;
- margin: 5px 1px 1px 1px;
-}
-div.sheet-colblock{
background-color: white;
- margin-top: 0px;
- margin-left: 5px;
- margin-right 5px;
- margin-bottom: 10px;
- padding: 1px 5px 5px 5px;
+ border-bottom-width: 0px;
}
-div.sheet-input{
- text-align:left;
- width: 100%;
- border-bottom: 1px dashed black;
- padding: 1px 0px 0px 0px;
- margin: 0px 0px 0px 0px;
+ /************************************** RADIOS / CHECKBOX ***************************/
+input[type=radio]{
+ margin-right: 2px;
+ margin-left: 1px;
}
-div.sheet-input div{
+input[type=radio].sheet-blessure{
+ opacity : 0;
+ z-index : 10;
+ width: 30px;
+ height: 20px;
+ margin-top: -10px;
+}
+input[type=radio].sheet-blessure + span {
+ width: 30px;
+ height: 25px;
+ margin-left: -32px;
+ text-align: center;
+ z-index : 1;
+ font-family: Arial;
+ font-weight: bold;
+ font-size: 1.6em;
+ color: #AAAAAA;
+ padding: 2px;
+}
+input[type=radio].sheet-blessure:checked + span {
+ color: red;
+ border: 2px solid red;
+}
+input[type=radio].sheet-blessure[value="0"]:checked + span {
+ color: green;
+ border: 2px solid green;
+}
+input[type="checkbox"]{
+ margin-right: 1px;
+ margin-left: 1px;
+}
+input[type=checkbox].sheet-secoue{
+ opacity : 0;
+ z-index : 10;
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+ border: 1px solid red;
+ margin-top: -10px;
+}
+input[type=checkbox].sheet-secoue + span {
+ width: 30px;
+ height: 30px;
+ margin-left: -32px;
+ text-align: center;
+ z-index : 1;
+ font-family: pictos;
+ font-size: 2.2em;
+ color: #AAAAAA;
+ padding-top: 5px;
+}
+input[type=checkbox].sheet-secoue + span:before {
+ content: '*';
+}
+input[type=checkbox].sheet-secoue:checked + span {
+ color: orange;
+}
+input[type=checkbox].sheet-secoue:checked + span:before {
+ content: '2';
+}
+input[type="checkbox"].sheet-dispcheck{
+ width: 15px;
+ height: 18px;
+ max-width: 18px;
+ opacity: 0;
+ z-index: 2;
+ margin: 0;
+}
+input[type="checkbox"].sheet-dispcheck + span{
display: inline-block;
+ text-align: center;
+ margin: 0;
+ margin-left: -15px;
+ width: 15px;
+ max-width: 18px;
+ height: 18px;
+ z-index: 1;
+ font-family: pictos;
+ color: #888888;
}
+input[type="checkbox"].sheet-dispcheck:hover + span{
+ color: #CD071E;
+}
+input[type="checkbox"].sheet-dispcheck:checked + span{
+ font-weight: bold;
+ color: #CD071E;
+}
+ /************************************** INPUTS ***************************/
input{
display: inline-block;
border: none;
@@ -251,14 +371,31 @@ input[type="text"]:read-only
{
background-color: white;
}
-input[type="checkbox"]{
- margin-right: 1px;
- margin-left: 1px;
+input[type="number"].sheet-selde{
+ width: 32px;
}
-input[type="radio"]{
- margin-right: 2px;
- margin-left: 1px;
+ /************************************** TEXTAREA ***************************/
+textarea{
+ box-shadow: none;
+ text-shadow: none;
+ background-color:#F6F1EC;
+ padding: 0;
+ margin: 0;
+ color: black;
+ font-family: cursive;
+ font-weight: normal;
+ border: none;
}
+textarea.sheet-textdesc{
+ font-family: 'Verdana', serif;
+ font-size: 0.9em;
+ height: 22px;
+ resize: none;
+}
+input[type="checkbox"]:checked ~ textarea.sheet-textdesc{
+ height: 140px;
+}
+ /************************************** SELECT ***************************/
select{
border: none;
padding: 0px 0px 0px 0px;
@@ -283,8 +420,241 @@ select.sheet-attcomptext{
font-size: 0.9em;
width: 35px;
}
-input[type="number"].sheet-selde{
- width: 32px;
+select.sheet-selComprel,
+select.sheet-selCompjet{
+ display: none;
+}
+input[type=radio].sheet-styleRolrel:checked ~ div.sheet-main select.sheet-selComprel{
+ display: inline-block;
+}
+input[type=radio].sheet-styleRoljet:checked ~ div.sheet-main select.sheet-selCompjet,
+input[type=radio].sheet-styleRolbrut:checked ~ div.sheet-main select.sheet-selCompjet{
+ display: inline-block;
+}
+ /************************************** BOUTONS ***************************/
+button[type="roll"]{
+ padding: 0px 0px 0px 0px;
+ margin: 0px 0px 0px 0px;
+ text-shadow: none;
+ box-shadow: none;
+ text-align:left;
+ vertical-align: middle;
+ line-height: 0px;
+ height: 20px;
+ width: 20px;
+ font-size: 1em;
+ font-weight: normal;
+ color:#CD071E;
+ border-width: 1px;
+ border-style: solid;
+ border-color: rgba(34,66,143,0.5);
+ border-radius: 4px;
+}
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main button[type="roll"]{
+ color: #8B6434;
+}
+button[type="roll"]:hover{
+ border-width: 1px;
+ border-color:#CD071E;
+ font-weight: bold;
+}
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main button[type="roll"]:hover{
+ color: #8B6434;
+}
+button[type="roll"].sheet-btRolrel,
+button[type="roll"].sheet-btRoljet,
+button[type="roll"].sheet-btRolbrut{
+ width: 142px;
+ border-width: 1px;
+ border-style: solid;
+ border-color: transparent;
+ font-size:1em;
+ font-weight: bold;
+ background-image:none;
+ background: transparent;
+ text-transform: uppercase;
+ display: none;
+}
+button[type="roll"].sheet-btRolrel{
+ color: black;
+}
+button[type="roll"].sheet-btRoljet{
+ color: black;
+}
+button[type="roll"].sheet-btRolbrut{
+ color: black;
+}
+button[type="roll"].sheet-btRolrel:before,
+button[type="roll"].sheet-btRoljet:before,
+button[type="roll"].sheet-btRolbrut:before{
+ content: "t ";
+ text-transform: lowercase;
+}
+button[type="roll"].sheet-btRolrel:hover:before,
+button[type="roll"].sheet-btRoljet:hover:before,
+button[type="roll"].sheet-btRolbrut:hover:before{
+ font-weight: bold;
+ color: #CD071E;
+}
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main button[type="roll"].sheet-btRolrel:hover:before,
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main button[type="roll"].sheet-btRoljet:hover:before,
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main button[type="roll"].sheet-btRolbrut:hover:before{
+ color: #8B6434;
+}
+button[type="roll"].sheet-btRolrel:hover,
+button[type="roll"].sheet-btRoljet:hover,
+button[type="roll"].sheet-btRolbrut:hover{
+ border-width: 1px;
+ border-style: solid;
+ border-color:#CD071E;
+}
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main button[type="roll"].sheet-btRolrel:hover,
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main button[type="roll"].sheet-btRoljet:hover,
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main button[type="roll"].sheet-btRolbrut:hover{
+ border-color:#8B6434;
+}
+input[type=checkbox].sheet-chkRolrel:checked ~ div.sheet-main button[type=roll].sheet-btRolrel{
+ display: inline-block;
+}
+input[type=checkbox].sheet-chkRoljet:checked ~ div.sheet-main button[type=roll].sheet-btRoljet{
+ display: inline-block;
+}
+input[type=checkbox].sheet-chkRolbrut:checked ~ div.sheet-main button[type=roll].sheet-btRolbrut{
+ display: inline-block;
+}
+button[type="roll"].sheet-btDesc{
+ color: black;
+ height: 15px;
+ width: 15px;
+ opacity: 0.4;
+ display: inline-block;
+ margin: 0;
+ padding: 0;
+ background: none;
+ border: none;
+}
+button[type="roll"].sheet-btDesc:before{
+ font-family: "Pictos";
+ font-size: 0.9em;
+ content: 'i';
+}
+button[type="roll"].sheet-btDesc:hover{
+ opacity: 1.0;
+ color: #CD071E;
+ font-weight: normal;
+}
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main button[type="roll"].sheet-btDesc:hover{
+ color: #8B6434;
+}
+/* Formatage des boutons de fieldset */
+.charsheet .repcontrol_add,
+.charsheet .repcontrol_edit,
+.charsheet .repcontrol_del{
+ opacity: 0.6;
+ display: inline;
+ background: white;
+ box-shadow: none;
+ border: 1px solid #CD071E;
+ border-radius: 6px;
+ font-size:0.9em;
+ height:2.0em;
+ margin-bottom: 4px;
+ color: #CD071E;
+ margin: 3px;
+}
+.charsheet .repcontrol_add:hover,
+.charsheet .repcontrol_edit:hover,
+.charsheet .repcontrol_del:hover{
+ opacity: 1.0;
+}
+ /************************************** DIV ***************************/
+div.sheet-fdp{
+ background: transparent;
+ width:860px;
+}
+div.sheet-main{
+ display: none;
+ width:100%;
+ background: linear-gradient(#CD071E,#E6DBCF,#EFE7DD);
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ padding: 5px 5px 5px 5px;
+ border: 1px solid #888888;
+}
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main{
+ background: linear-gradient(#85582A,#C39657,#F0DAAD,#C39657,#85582A);
+}
+div.sheet-configuration{
+ display: none;
+ width:100%;
+ background: white;
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ padding: 5px 5px 5px 5px;
+ border: 1px solid #888888;
+}
+input[type=radio].sheet-onglmain:checked ~ div.sheet-main{
+ display: block;
+}
+input[type=radio].sheet-onglconfig:checked ~ div.sheet-configuration{
+ display: block;
+}
+div.sheet-mycol{
+ display: inline-block;
+ width: 280px;
+ vertical-align:top;
+ padding: 0px 0px 0px 0px;
+ margin: 0px 0px 0px 0px;
+}
+div.sheet-redtitle1{
+ font-family: Candal;
+ font-size: 16px;
+ color: #CD071E;
+ text-align: center;
+ font-weight: bold;
+ margin: 10px 1px 1px 1px;
+}
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main div.sheet-redtitle1{
+ color: #8B6434;
+}
+div.sheet-redtitle2{
+ font-family: Candal;
+ font-size: 12px;
+ color: #CD071E;
+ text-align: center;
+ font-weight: bold;
+ margin: 5px 1px 1px 1px;
+}
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main div.sheet-redtitle2{
+ color: #8B6434;
+}
+div.sheet-redtitle3{
+ display: inline-block;
+ font-family: Candal;
+ font-size: 12px;
+ color: #CD071E;
+ text-align: left;
+ font-weight: bold;
+ margin: 5px 1px 1px 1px;
+}
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main div.sheet-redtitle3{
+ color: #8B6434;
+}
+div.sheet-colblock{
+ background-color: white;
+ margin-top: 0px;
+ margin-left: 5px;
+ margin-right 5px;
+ margin-bottom: 10px;
+ padding: 1px 5px 5px 5px;
+}
+div.sheet-input{
+ text-align:left;
+ width: 100%;
+ border-bottom: 1px dashed black;
+ padding: 1px 0px 0px 0px;
+ margin: 0px 0px 0px 0px;
+}
+div.sheet-input div{
+ display: inline-block;
}
div.sheet-blacktext1 {
display: inline-block;
@@ -323,15 +693,168 @@ div.sheet-attcomptext:before{
div.sheet-attcomptext:after{
content: ")";
}
-div,
-button,
-textarea,
-span,
-input,
-select,
-table,
-tr,
-td,
-th{
- box-sizing: border-box;
+ /*********************** AFFICHAGE COMPETENCE et AUTRES OPTIONS ********************/
+.sheet-extra{
+ display: none;
+}
+.sheet-pnj{
+ display: none;
+}
+input[type=checkbox].sheet-persoExtra:checked ~ div.sheet-main .sheet-extra {
+ display: block;
+}
+input[type=checkbox].sheet-persoExtra:checked ~ div.sheet-main .sheet-noextra {
+ display: none;
+}
+input[type=checkbox].sheet-persoPnj:checked ~ div.sheet-main .sheet-pnj {
+ display: block;
+}
+input[type=checkbox].sheet-persoPnj:checked ~ div.sheet-main .sheet-nopnj {
+ display: none;
+}
+input[type=checkbox].sheet-chkArcane,
+input[type=checkbox].sheet-chkCombat,
+input[type=checkbox].sheet-chkConduite,
+input[type=checkbox].sheet-chkConnaissance,
+input[type=checkbox].sheet-chkCrochetage,
+input[type=checkbox].sheet-chkDiscretion,
+input[type=checkbox].sheet-chkEquitation,
+input[type=checkbox].sheet-chkEscalade,
+input[type=checkbox].sheet-chkIntimidation,
+input[type=checkbox].sheet-chkJeu,
+input[type=checkbox].sheet-chkLancer,
+input[type=checkbox].sheet-chkNatation,
+input[type=checkbox].sheet-chkNavigation,
+input[type=checkbox].sheet-chkPerception,
+input[type=checkbox].sheet-chkPersuasion,
+input[type=checkbox].sheet-chkPilotage,
+input[type=checkbox].sheet-chkPistage,
+input[type=checkbox].sheet-chkRecherche,
+input[type=checkbox].sheet-chkReparation,
+input[type=checkbox].sheet-chkReseaux,
+input[type=checkbox].sheet-chkSarcasme,
+input[type=checkbox].sheet-chkSoins,
+input[type=checkbox].sheet-chkSurvie,
+input[type=checkbox].sheet-chkTir,
+input[type=checkbox].sheet-persoExtra,
+input[type=checkbox].sheet-persoPnj,
+input[type=checkbox].sheet-chkPossessions,
+input[type=checkbox].sheet-chkSheetDead
+{
+ display: none;
+}
+div.sheet-chkArcane,
+div.sheet-chkCombat,
+div.sheet-chkConduite,
+div.sheet-chkConnaissance,
+div.sheet-chkCrochetage,
+div.sheet-chkDiscretion,
+div.sheet-chkEquitation,
+div.sheet-chkEscalade,
+div.sheet-chkIntimidation,
+div.sheet-chkJeu,
+div.sheet-chkLancer,
+div.sheet-chkNatation,
+div.sheet-chkNavigation,
+div.sheet-chkPerception,
+div.sheet-chkPersuasion,
+div.sheet-chkPilotage,
+div.sheet-chkPistage,
+div.sheet-chkRecherche,
+div.sheet-chkReparation,
+div.sheet-chkReseaux,
+div.sheet-chkSarcasme,
+div.sheet-chkSoins,
+div.sheet-chkSurvie,
+div.sheet-chkTir,
+div.sheet-chkPossessions {
+ display: none;
+}
+
+input[type=checkbox].sheet-chkArcane:checked ~ div.sheet-main div.sheet-chkArcane {
+ display: block;
+}
+input[type=checkbox].sheet-chkCombat:checked ~ div.sheet-main div.sheet-chkCombat {
+ display: block;
+}
+input[type=checkbox].sheet-chkConduite:checked ~ div.sheet-main div.sheet-chkConduite {
+ display: block;
+}
+input[type=checkbox].sheet-chkConnaissance:checked ~ div.sheet-main div.sheet-chkConnaissance {
+ display: block;
+}
+input[type=checkbox].sheet-chkCrochetage:checked ~ div.sheet-main div.sheet-chkCrochetage {
+ display: block;
+}
+input[type=checkbox].sheet-chkDiscretion:checked ~ div.sheet-main div.sheet-chkDiscretion {
+ display: block;
+}
+input[type=checkbox].sheet-chkEquitation:checked ~ div.sheet-main div.sheet-chkEquitation {
+ display: block;
+}
+input[type=checkbox].sheet-chkEscalade:checked ~ div.sheet-main div.sheet-chkEscalade {
+ display: block;
+}
+input[type=checkbox].sheet-chkIntimidation:checked ~ div.sheet-main div.sheet-chkIntimidation {
+ display: block;
+}
+input[type=checkbox].sheet-chkJeu:checked ~ div.sheet-main div.sheet-chkJeu {
+ display: block;
+}
+input[type=checkbox].sheet-chkLancer:checked ~ div.sheet-main div.sheet-chkLancer {
+ display: block;
+}
+input[type=checkbox].sheet-chkNatation:checked ~ div.sheet-main div.sheet-chkNatation {
+ display: block;
+}
+input[type=checkbox].sheet-chkNavigation:checked ~ div.sheet-main div.sheet-chkNavigation {
+ display: block;
+}
+input[type=checkbox].sheet-chkPerception:checked ~ div.sheet-main div.sheet-chkPerception {
+ display: block;
+}
+input[type=checkbox].sheet-chkPersuasion:checked ~ div.sheet-main div.sheet-chkPersuasion {
+ display: block;
+}
+input[type=checkbox].sheet-chkPilotage:checked ~ div.sheet-main div.sheet-chkPilotage {
+ display: block;
+}
+input[type=checkbox].sheet-chkPistage:checked ~ div.sheet-main div.sheet-chkPistage {
+ display: block;
+}
+input[type=checkbox].sheet-chkRecherche:checked ~ div.sheet-main div.sheet-chkRecherche {
+ display: block;
+}
+input[type=checkbox].sheet-chkReparation:checked ~ div.sheet-main div.sheet-chkReparation {
+ display: block;
+}
+input[type=checkbox].sheet-chkReseaux:checked ~ div.sheet-main div.sheet-chkReseaux {
+ display: block;
+}
+input[type=checkbox].sheet-chkSarcasme:checked ~ div.sheet-main div.sheet-chkSarcasme {
+ display: block;
+}
+input[type=checkbox].sheet-chkSoins:checked ~ div.sheet-main div.sheet-chkSoins {
+ display: block;
+}
+input[type=checkbox].sheet-chkSurvie:checked ~ div.sheet-main div.sheet-chkSurvie {
+ display: block;
+}
+input[type=checkbox].sheet-chkTir:checked ~ div.sheet-main div.sheet-chkTir {
+ display: block;
+}
+input[type=checkbox].sheet-chkPossessions:checked ~ div.sheet-main div.sheet-chkPossessions {
+ display: block;
+}
+div.sheet-SheetSaWo{
+ display: inline-block;
+}
+div.sheet-SheetDead{
+ display: none;
+}
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main div.sheet-SheetSaWo {
+ display: none;
+}
+input[type=checkbox].sheet-chkSheetDead:checked ~ div.sheet-main div.sheet-SheetDead {
+ display: inline-block;
}
diff --git a/SavageWorldsFrench/sawofr.html b/SavageWorldsFrench/sawofr.html
index 968825123b..8d288e3d1d 100644
--- a/SavageWorldsFrench/sawofr.html
+++ b/SavageWorldsFrench/sawofr.html
@@ -1,1174 +1,3 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-v1.3 - Style des jets : Succès+Relances
-Jets bruts
-
-
-
-
-
-
-
TRAITS
-
-
Dé Joker
-
- -
- d4
- d6
- d8
- d10
- d12
-
-
-
ATTRIBUTS
-
- AGILITÉ
- AGILITÉ
-
- d4
- d6
- d8
- d10
- d12
-
- +
-
-
- ÂME
- ÂME
-
- d4
- d6
- d8
- d10
- d12
-
- +
-
-
- FORCE
- FORCE
-
- d4
- d6
- d8
- d10
- d12
-
- +
-
-
- INTELLECT
- INTELLECT
-
- d4
- d6
- d8
- d10
- d12
-
- +
-
-
- VIGUEUR
- VIGUEUR
-
- d4
- d6
- d8
- d10
- d12
-
- +
-
-
-
-
COMPÉTENCES
-
-
-
-
-
- (AGI)
- (ÂME)
- (FOR)
- (INT)
- (VIG)
-
-
- d4
- d6
- d8
- d10
- d12
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- (AGI)
- (ÂME)
- (FOR)
- (INT)
- (VIG)
-
-
- d4
- d6
- d8
- d10
- d12
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
CARAC. DÉRIVÉES
-
-
-
-
-
-
-
-
POSSESSIONS
-
ARGENT
-
-
-
-
ÉQUIPEMENT
-
Qté
-
Poids
-
Tot.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
PERSONNAGE
-
-
-
DESCRIPTION
-
-
-
Signe particulier :
-
-
-
-
ATOUTS
-
-
-
-
-
-
HANDICAPS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
POUVOIRS
-
Rang
-
PP
-
Portée
-
Durée
-
Effets
-
-
-
-
-
- N - Novice
- A - Aguerri
- V - Vétéran
- H - Héroïque
- L - Légendaire
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Feuille
+
Configuration
+
v1.4 (21/02/2016)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
TRAITS
+
+
Dé Joker
+
+ - Extra (PNJ)
+ d4
+ d6
+ d8
+ d10
+ d12
+
+
+
ATTRIBUTS
+
+ AGILITÉ
+ AGILITÉ
+ AGILITÉ
+
+ d4
+ d6
+ d8
+ d10
+ d12
+
+ +
+
+
+ ÂME
+ ÂME
+ ÂME
+
+ d4
+ d6
+ d8
+ d10
+ d12
+
+ +
+
+
+ FORCE
+ FORCE
+ FORCE
+
+ d4
+ d6
+ d8
+ d10
+ d12
+
+ +
+
+
+ INTELLECT
+ INTELLECT
+ INTELLECT
+
+ d4
+ d6
+ d8
+ d10
+ d12
+
+ +
+
+
+ VIGUEUR
+ VIGUEUR
+ VIGUEUR
+
+ d4
+ d6
+ d8
+ d10
+ d12
+
+ +
+
+
+
+
COMPÉTENCES
+
+
+
+
+
+
+ (AGI)
+ (ÂME)
+ (FOR)
+ (INT)
+ (VIG)
+
+
+ d4
+ d6
+ d8
+ d10
+ d12
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (AGI)
+ (ÂME)
+ (FOR)
+ (INT)
+ (VIG)
+
+
+ d4
+ d6
+ d8
+ d10
+ d12
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
CARAC. DÉRIVÉES
+
+
+
+
+
+
+
+
+
POSSESSIONS
+
ARGENT
+
s
+
+
+
+
+
ÉQUIPEMENT
+
Qté
+
Poids
+
Tot.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
PERSONNAGE
+
+
+
DESCRIPTION
+
+
+
Signes particuliers :
+
+ s
+
+
+
+
+
+
ATOUTS
+
ATOUTS / APTITUDES (+)
+
+
+ s
+
+
+
+
HANDICAPS
+
HANDICAPS / APTITUDES (-)
+
+
+ s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
POUVOIRS
+
Rang
+
PP
+
Portée
+
Durée
+
Effets
+
+
+
+
+
+
+ N - Novice
+ A - Aguerri
+ V - Vétéran
+ H - Héroïque
+ L - Légendaire
+
+
+
+
+ s
+
+
+
+
+
+
+
+
{{#perso}}
+ {{#pouvoir}}Pouvoir de{{/pouvoir}}
{{perso}}
{{#attaque}}attaque{{/attaque}}
- {{^attaque}}fait un jet{{/attaque}}
+ {{^pouvoir}}
+ {{^attaque}}fait un jet{{/attaque}}
+ {{/pouvoir}}
{{#cible}}
-
-
- {{^attaque}}contre{{/attaque}}
- {{cible}}
-
-
+ {{#rollTotal() atkcible 1}}
+
+
+ {{^attaque}}contre{{/attaque}}
+ {{cible}}
+
+
+ {{/rollTotal() atkcible 1}}
{{/cible}}
{{/perso}}
@@ -1614,71 +2490,145 @@ on("change:encombpoids change:encombmax", function() {
{{#relances}}
-
- {{relances}}
- succès+relances{{#attaque}} (attaque){{/attaque}}
-
+ {{#rollLess() relances 1}}
+
+ {{#attaque}}Attaque : {{/attaque}}Échec
+ {{relances}}
+
+ {{/rollLess() relances 1}}
+ {{#rollTotal() relances 1}}
+
+ {{#attaque}}Attaque : {{/attaque}}Succès sans relance
+ {{relances}}
+
+ {{#attaque}}
+ {{#rollLess() degatsrel 1}}
+
+ Pas de Dégât
+ {{degatsrel}}
+
+ {{/rollLess() degatsrel 1}}
+ {{#rollTotal() degatsrel 1}}
+
+ Dégâts : Succès sans relance
+ {{degatsrel}}
+
+ {{/rollTotal() degatsrel 1}}
+ {{#rollGreater() degatsrel 1}}
+
+ Dégâts : Succès+relance(s)
+ {{degatsrel}}
+
+ {{/rollGreater() degatsrel 1}}
+ {{/attaque}}
+ {{/rollTotal() relances 1}}
+ {{#rollGreater() relances 1}}
+
+ {{#attaque}}Attaque : {{/attaque}}Succès+Relance(s)
+ {{relances}}
+
+ {{#attaque}}
+ {{#rollLess() degatsrelplus 1}}
+
+ Pas de Dégât
+ {{degatsrelplus}}
+
+ {{/rollLess() degatsrelplus 1}}
+ {{#rollTotal() degatsrelplus 1}}
+
+ Dégâts(+1d6) : Succès sans relance
+ {{degatsrelplus}}
+
+ {{/rollTotal() degatsrelplus 1}}
+ {{#rollGreater() degatsrelplus 1}}
+
+ Dégâts(+1d6) : Succès+relance(s)
+ {{degatsrelplus}}
+
+ {{/rollGreater() degatsrelplus 1}}
+ {{/attaque}}
+ {{/rollGreater() relances 1}}
{{/relances}}
{{#jet}}
- Jet :
+ Jet :
{{jet}}
+ {{#degats}}
+
+ Dégâts :
+ {{degats}}
+
+
+ +1d6 si relance :
+ {{degatsplus}}
+
+ {{/degats}}
{{/jet}}
- {{#degatsrel}}
+ {{#pouvoir}}
- {{degatsrel}}
- succès+relances (dégâts)
+ PP
+ {{pp}}
- {{/degatsrel}}
- {{#degats}}
- Dégâts :
- {{degats}}
+ Portée
+ {{portee}}
- {{/degats}}
+
+
+ {{description}}
+
+
+ {{/pouvoir}}
-
- État de {{perso}}
- {{#rollTotal() blessures 0}}
- {{#rollTotal() fatigue 0}}
- {{#rollTotal() secoue 0}}
- Normal
- {{/rollTotal() secoue 0}}
- {{/rollTotal() fatigue 0}}
- {{/rollTotal() blessures 0}}
- {{#rollTotal() secoue 1}}
-
- Secoué
-
- {{/rollTotal() secoue 1}}
- {{#rollGreater() blessures 0}}
-
- {{#rollLess() blessures 4}}
- {{blessures}}
- Blessures
- {{/rollLess() blessures 4}}
- {{#rollTotal() blessures 4}}
- Blessures Critiques
- {{/rollTotal() blessures 4}}
-
- {{/rollGreater() blessures 0}}
- {{#rollGreater() fatigue 0}}
-
- {{#rollLess() fatigue 3}}
- {{fatigue}}
+ {{#rollTotal() etat 1}}
+
+ État de {{perso}}
+ {{#rollTotal() blessures 0}}
+ {{#rollTotal() fatigue 0}}
+ {{#rollTotal() secoue 0}}
+ Normal
+ {{/rollTotal() secoue 0}}
+ {{/rollTotal() fatigue 0}}
+ {{/rollTotal() blessures 0}}
+ {{#rollTotal() secoue 1}}
+
+ Secoué
+
+ {{/rollTotal() secoue 1}}
+ {{#rollGreater() blessures 0}}
+
+
+ Blessures
+
+
+ {{blessures}}
+ {{#rollTotal() blessures 4}}
+ (État critique)
+ {{/rollTotal() blessures 4}}
+
+
+ {{/rollGreater() blessures 0}}
+ {{#rollGreater() fatigue 0}}
+
Fatigue
- {{/rollLess() fatigue 3}}
- {{#rollTotal() fatigue 3}}
- Fatigue Critique
- {{/rollTotal() fatigue 3}}
-
- {{/rollGreater() fatigue 0}}
- {{#rollGreater() encombrement 0}}
-
- {{encombrement}}
- Encombrement
-
- {{/rollGreater() encombrement 0}}
-
+ {{#rollTotal() fatigue 1}}
+ Fatigué
+ {{/rollTotal() fatigue 1}}
+ {{#rollTotal() fatigue 2}}
+ Epuisé
+ {{/rollTotal() fatigue 2}}
+ {{#rollTotal() fatigue 3}}
+ État Critique
+ {{/rollTotal() fatigue 3}}
+
+ {{/rollGreater() fatigue 0}}
+ {{#rollGreater() encombrement 0}}
+
+ {{encombrement}}
+ Encombrement
+
+ {{/rollGreater() encombrement 0}}
+
+ {{/rollTotal() etat 1}}
diff --git a/SavageWorldsFrench/sawofr.jpg b/SavageWorldsFrench/sawofr.jpg
new file mode 100644
index 0000000000..b65167f41c
Binary files /dev/null and b/SavageWorldsFrench/sawofr.jpg differ
diff --git a/SavageWorldsFrench/sawofr_choixjet.png b/SavageWorldsFrench/sawofr_choixjet.png
index 8e07f34ea0..80fad8d621 100644
Binary files a/SavageWorldsFrench/sawofr_choixjet.png and b/SavageWorldsFrench/sawofr_choixjet.png differ
diff --git a/SavageWorldsFrench/sawofr_des3d.png b/SavageWorldsFrench/sawofr_des3d.png
deleted file mode 100644
index 4569d0813d..0000000000
Binary files a/SavageWorldsFrench/sawofr_des3d.png and /dev/null differ
diff --git a/SavageWorldsFrench/sawofr_infobulleoption1.png b/SavageWorldsFrench/sawofr_infobulleoption1.png
index 4e586d4b36..e6ccb8fcf9 100644
Binary files a/SavageWorldsFrench/sawofr_infobulleoption1.png and b/SavageWorldsFrench/sawofr_infobulleoption1.png differ
diff --git a/SavageWorldsFrench/sawofr_infobulleoption2.png b/SavageWorldsFrench/sawofr_infobulleoption2.png
index a29e7c9d32..06ecbc59ab 100644
Binary files a/SavageWorldsFrench/sawofr_infobulleoption2.png and b/SavageWorldsFrench/sawofr_infobulleoption2.png differ
diff --git a/SavageWorldsFrench/sawofr_jetoption3.png b/SavageWorldsFrench/sawofr_jetoption3.png
new file mode 100644
index 0000000000..b3c13885a8
Binary files /dev/null and b/SavageWorldsFrench/sawofr_jetoption3.png differ
diff --git a/SavageWorldsFrench/sawofr_style_deadlands.png b/SavageWorldsFrench/sawofr_style_deadlands.png
new file mode 100644
index 0000000000..cf000bf325
Binary files /dev/null and b/SavageWorldsFrench/sawofr_style_deadlands.png differ
diff --git a/SavageWorldsFrench/sawofr_template_penalistes.png b/SavageWorldsFrench/sawofr_template_penalistes.png
new file mode 100644
index 0000000000..421c69557c
Binary files /dev/null and b/SavageWorldsFrench/sawofr_template_penalistes.png differ
diff --git a/SavageWorldsFrench/sawofr_templateoption1.png b/SavageWorldsFrench/sawofr_templateoption1.png
index d80586f607..311745ac22 100644
Binary files a/SavageWorldsFrench/sawofr_templateoption1.png and b/SavageWorldsFrench/sawofr_templateoption1.png differ
diff --git a/SavageWorldsFrench/sawofr_templateoption2.png b/SavageWorldsFrench/sawofr_templateoption2.png
index dc9a68f41c..e3b0821404 100644
Binary files a/SavageWorldsFrench/sawofr_templateoption2.png and b/SavageWorldsFrench/sawofr_templateoption2.png differ
diff --git a/SavageWorldsFrench/sheet.json b/SavageWorldsFrench/sheet.json
index 374a498152..202802ce33 100644
--- a/SavageWorldsFrench/sheet.json
+++ b/SavageWorldsFrench/sheet.json
@@ -3,6 +3,6 @@
"css": "sawofr.css",
"authors": "Nathanael TERRIEN",
"roll20userid": "75857",
- "preview": "sawofr.png",
- "instructions": "Feuille de Personnage VF (avec jets intégrés) pour Savage Worlds. Consultez l'[aide/readme](ReadMe.md). v1.2 (Décembre 2015)."
+ "preview": "sawofr.jpg",
+ "instructions": "Feuille de Personnage VF (avec jets intégrés) pour Savage Worlds et Deadlands Reloaded. Consultez l'[aide/readme](ReadMe.md). v1.4 (19/02/2016)."
}
diff --git a/Star Wars FFG API-Compatible/Character Sheet Preview.png b/Star Wars FFG API-Compatible/Character Sheet Preview.png
new file mode 100644
index 0000000000..4f251fce58
Binary files /dev/null and b/Star Wars FFG API-Compatible/Character Sheet Preview.png differ
diff --git a/Star Wars FFG API-Compatible/FFG-SWRPG-CharacterSheet.css b/Star Wars FFG API-Compatible/FFG-SWRPG-CharacterSheet.css
new file mode 100644
index 0000000000..bcef4f97f1
--- /dev/null
+++ b/Star Wars FFG API-Compatible/FFG-SWRPG-CharacterSheet.css
@@ -0,0 +1,1329 @@
+/*
+Version Info:
+Verion 4.0.2.18
+*/
+
+.sheet-clear {clear:both}
+.sheet-divider {border-top:1px solid #e3e3e3}
+
+/* GRID
+ * ----------------------------------------------------------------- */
+
+.sheet-row {padding: 1% 0%; clear: both}
+.sheet-column {margin:0 1%; float:left;}
+.sheet-column .sheet-column {margin:0 0%; float:left;}
+
+.sheet-row .sheet-column:last-child {float:right}
+
+.sheet-small-1 {width: 6.3%}
+.sheet-small-2 {width: 14.6%}
+.sheet-small-3 {width: 23%}/* 25% */
+.sheet-small-4 {width: 31.3%}
+.sheet-small-5 {width: 39.6%}
+.sheet-small-6 {width: 48%}/* 50% */
+.sheet-small-7 {width: 56.3%}
+.sheet-small-8 {width: 64.6%}
+.sheet-small-9 {width: 73%}/* 75% */
+.sheet-small-10 {width: 81.3%}
+.sheet-small-11 {width: 91.6%}
+.sheet-small-12 {width: 98%}/* 100% */
+
+/* Dice input reset
+ *-------------------------------------- */
+.sheet-dice-pool [type=roll] {
+ padding:2px 4px !important;
+ margin:0 !important;
+ font-size:28px !important;
+ line-height:28px !important;
+}
+
+.sheet-dice-pool [name='roll_ResetDicePool'],
+.sheet-dice-pool [name='roll_ResetGMDicePool'] {padding-bottom:3px !important}
+
+.sheet-dice-pool [name='roll_ResetDicePool']:before,
+.sheet-dice-pool [name='roll_ResetGMDicePool']:before {
+ font-family: "Pictos" !important;
+ content: "r" !important;
+}
+
+/* ------------------------------------ */
+/* Dice input span graphics
+ *----------------------------------------- */
+
+.sheet-yd + span {
+ background-image:url('http://i.imgur.com/Ntq77sk.png');/* Yellow - Proficiency Die */
+ background-position:left top;
+ background-repeat:repeat-x;
+ height:20px;
+ display:block;
+ float:left;
+}
+
+.sheet-gd + span {
+ background-image:url('http://i.imgur.com/cqkTp2t.png');/* Green - Ability Die */
+ background-position:left top;
+ background-repeat:repeat-x;
+ height:20px;
+ display:block;
+ float:left;
+}
+
+.sheet-pd + span {
+ background-image:url('http://i.imgur.com/afj6fxH.png');/* Purple - Difficulty Die */
+ background-position:left top;
+ background-repeat:repeat-x;
+ height:20px;
+ display:block;
+ float:left;
+}
+
+.sheet-gd[value="0"] + span {width:0;}
+.sheet-gd[value="1"] + span {width: 17px}
+.sheet-gd[value="2"] + span {width: 34px}
+.sheet-gd[value="3"] + span {width: 51px}
+.sheet-gd[value="4"] + span {width: 68px}
+.sheet-gd[value="5"] + span {width: 85px}
+.sheet-gd[value="6"] + span {width: 102px}
+.sheet-gd[value="7"] + span {width: 124px}
+
+.sheet-yd[value="0"] + span {width:0;}
+.sheet-yd[value="1"] + span {width: 17px}
+.sheet-yd[value="2"] + span {width: 34px}
+.sheet-yd[value="3"] + span {width: 51px}
+.sheet-yd[value="4"] + span {width: 68px}
+.sheet-yd[value="5"] + span {width: 85px}
+.sheet-yd[value="6"] + span {width: 102px}
+.sheet-yd[value="7"] + span {width: 124px}
+
+/*used for crit section*/
+.sheet-pd[value="0"] + span {width:0;}
+.sheet-pd[value="1"] + span {width: 20px}
+.sheet-pd[value="2"] + span {width: 40px}
+.sheet-pd[value="3"] + span {width: 60px}
+.sheet-pd[value="4"] + span {width: 80px}
+.sheet-pd[value="5"] + span {width: 100px}
+.sheet-pd[value="6"] + span {width: 120px}
+.sheet-pd[value="7"] + span {width: 140px}
+
+/* Switch
+ * ------------------------------------ */
+.sheet-switch {
+ position: relative;
+ margin: 0px auto;
+ height: 27px;
+ width: 120px;
+ background: rgba(0, 0, 0, 0.40);
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1);
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1);
+}
+
+.sheet-switch [type=radio] {
+ width:60px;
+ height:27px;
+ float:left;
+ display:block;
+ -webkit-appearance:none;
+ -moz-appearance:none;
+ border:none;
+ outline:none;
+ position: relative;
+ cursor: pointer;
+ z-index: 2;
+}
+
+.sheet-switch [type=radio]::before {
+ content: attr(title);
+ display:block;
+ width:60px;
+ height:27px;
+ line-height:27px;
+ text-align:center;
+}
+
+.sheet-switch [type=radio]:checked,
+.sheet-switch [type=radio]:active,
+.sheet-switch [type=radio]:focus {
+ font-weight: normal;
+ background:transparent;
+ color: #fff;
+}
+
+.sheet-switch-input-on:checked ~ .sheet-switch-selection {
+ left: 2px;
+}
+
+.sheet-switch-input-off:checked ~ .sheet-switch-selection {
+ left: 60px;
+}
+
+.sheet-switch-selection {
+ display: block;
+ position: absolute;
+ z-index: 1;
+ top: 2px;
+ left: 2px;
+ width: 58px;
+ height: 23px;
+ background: #65bd63;
+ border-radius: 3px;
+ background-image: -webkit-linear-gradient(top, #485a6d, #2c3947);
+ background-image: -moz-linear-gradient(top, #485a6d, #2c3947);
+ background-image: -o-linear-gradient(top, #485a6d, #2c3947);
+ background-image: linear-gradient(to bottom, #485a6d, #2c3947);
+ -webkit-box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2);
+ box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2);
+ -webkit-transition: left 0.15s ease-out;
+ -moz-transition: left 0.15s ease-out;
+ -o-transition: left 0.15s ease-out;
+ transition: left 0.15s ease-out;
+}
+
+/* Form Options
+ * ------------------------------------ */
+
+table .sheet-opt-content {
+ display: none;
+}
+
+/* Old Vehicle Tabs */
+input.sheet-opt-vehicle:checked ~ table tr.sheet-opt-vehicle,
+input.sheet-opt-ship:checked ~ table tr.sheet-opt-ship,
+/* New Vehicle Tabs */
+input.sheet-tab-transport-space:checked ~ table tr.sheet-tab-transport-space,
+input.sheet-tab-transport-planetary:checked ~ table tr.sheet-tab-transport-planetary,
+input.sheet-tab-transport-beast:checked ~ table tr.sheet-tab-transport-beast,
+/* Base of Operations Tabs */
+input.sheet-opt-rebel:checked ~ table tr td.sheet-opt-rebel,
+input.sheet-opt-business:checked ~ table tr td.sheet-opt-business,
+input.sheet-opt-homestead:checked ~ table tr td.sheet-opt-homestead,
+/* Companion Tabs */
+input.sheet-tab-companion-info:checked ~ table tr td.sheet-tab-companion-info,
+input.sheet-tab-companion-combat:checked ~ table tr td.sheet-tab-companion-combat,
+input.sheet-tab-companion-inventory:checked ~ table tr td.sheet-tab-companion-inventory,
+/* GM Tabs */
+input.sheet-tab-gm-combat:checked ~ table tr td.input.sheet-tab-gm-combat,
+input.sheet-tab-gm-weapons:checked ~ table tr td.sheet-tab-gm-weapons,
+input.sheet-tab-gm-adversaries:checked ~ table tr td.sheet-tab-gm-adversaries
+{
+ display: table-row;
+}
+
+/* Old Vehicle Tabs */
+input.sheet-opt-vehicle:checked ~ table tr td.sheet-opt-vehicle,
+input.sheet-opt-ship:checked ~ table tr td.sheet-opt-ship,
+/* New Vehicle Tabs */
+input.sheet-tab-transport-space:checked ~ table tr.sheet-tab-transport-space,
+input.sheet-tab-transport-planetary:checked ~ table tr.sheet-tab-transport-planetary,
+input.sheet-tab-transport-beast:checked ~ table tr.sheet-tab-transport-beast,
+/* Base of Operations Tabs */
+input.sheet-opt-rebel:checked ~ table tr td.sheet-opt-rebel,
+input.sheet-opt-business:checked ~ table tr td.sheet-opt-business,
+input.sheet-opt-homestead:checked ~ table tr td.sheet-opt-homestead,
+/* Companion Tabs */
+input.sheet-tab-companion-info:checked ~ table tr td.sheet-tab-companion-info,
+input.sheet-tab-companion-stp:checked ~ table tr td.sheet-tab-companion-stp,
+input.sheet-tab-companion-combat:checked ~ table tr td.sheet-tab-companion-combat,
+input.sheet-tab-companion-inventory:checked ~ table tr td.sheet-tab-companion-inventory,
+/* GM Tabs */
+input.sheet-tab-gm-combat:checked ~ table tr td.input.sheet-tab-gm-combat,
+input.sheet-tab-gm-weapons:checked ~ table tr td.sheet-tab-gm-weapons,
+input.sheet-tab-gm-adversaries:checked ~ table tr td.sheet-tab-gm-adversaries
+{
+ display: table-cell;
+}
+
+input.sheet-opt {
+ height: 30px;
+ margin-right:120px;
+ border:none;
+ outline:none;
+ position: relative;
+ cursor: pointer;
+ z-index: 1;
+}
+
+input.sheet-opt::after {
+ content: attr(title);
+ text-align: left;
+ display: block;
+ color:#444;
+ width: 120px;
+ padding-left:20px;
+ line-height: 30px;
+ font-size: 16px;
+}
+
+input.sheet-opt-vehicle {
+ margin-left:10px;
+}
+
+input.sheet-opt:active,
+input.sheet-op:focus {
+ outline:none;
+}
+
+/* START TAB CODE */
+
+input.sheet-tab-new {
+ cursor: pointer;
+ height: 20px;
+ opacity: 0;
+ position: relative;
+ width: 120px;
+ z-index: 9999;
+ !important;
+}
+
+span.sheet-tab-new {
+ background: #ff0b02 none repeat scroll 0 0;
+ border-radius: 4px;
+ color: white;
+ cursor: pointer;
+ font-size: 13px;
+ font-weight: bold;
+ height: 20px;
+ margin-left: -122px;
+ position: relative;
+ text-align: center;
+ line-height:20px;
+ width: 120px;
+}
+
+input.sheet-tab-new:checked + span {
+ background: #dea710 none repeat scroll 0 0;
+ border-radius: 4px;
+ color: black;
+}
+
+/* END TAB CODE */
+
+div.sheet-tab-content {
+ display: none;
+ border-top:1px solid #444;
+ margin-top:2px;
+}
+
+/* Top Level Tabs */
+input.sheet-tab-character-sheet:checked ~ div.sheet-tab-character-sheet,
+input.sheet-tab-ship-sheet:checked ~ div.sheet-tab-ship-sheet,
+input.sheet-tab-base-sheet:checked ~ div.sheet-tab-base-sheet,
+input.sheet-tab-gm-dice:checked ~ div.sheet-tab-gm-dice,
+input.sheet-tab-companion-sheet:checked ~ div.sheet-tab-companion-sheet,
+
+/* Character Sheet Tab SubTabs */
+input.sheet-tab-character:checked ~ div.sheet-tab-character,
+input.sheet-tab-skills:checked ~ div.sheet-tab-skills,
+input.sheet-tab-talents:checked ~ div.sheet-tab-talents,
+input.sheet-tab-weapons:checked ~ div.sheet-tab-weapons,
+input.sheet-tab-notes:checked ~ div.sheet-tab-notes,
+
+/* Vehicle Sheet Tab SubTabs */
+input.sheet-tab-v-details:checked ~ div.sheet-tab-v-details,
+input.sheet-tab-v-weapons:checked ~ div.sheet-tab-v-weapons,
+input.sheet-tab-transport-space:checked ~ div.sheet-tab-transport-space,
+input.sheet-tab-transport-planetary:checked ~ div.sheet-tab-transport-planetary,
+input.sheet-tab-transport-beast:checked ~ div.sheet-tab-transport-beast,
+
+/* Group Sheet Tab*/
+input.sheet-tab-base-details:checked ~ div.sheet-tab-base-details,
+input.sheet-tab-base-shared:checked ~ div.sheet-tab-base-shared,
+
+/* Group Sheet Tab SubTabs */
+input.sheet-tab-groupshared:checked ~ div.sheet-tab-groupshared,
+
+/* Group Sheet Tab Radio Buttons */
+input.sheet-opt-rebel:checked ~ div.sheet-opt-rebel,
+input.sheet-opt-business:checked ~ div.sheet-opt-business,
+input.sheet-opt-homestead:checked ~ div.sheet-opt-homestead,
+
+/* Companion Sub Tabs */
+input.sheet-tab-companion-info:checked ~ div.sheet-tab-companion-info,
+input.sheet-tab-companion-combat:checked ~ div.sheet-tab-companion-combat,
+input.sheet-tab-companion-inventory:checked ~ div.sheet-tab-companion-inventory,
+
+/* gmdice Sheet Tab SubTabs */
+input.sheet-tab-gm-combat:checked ~ div.sheet-tab-gm-combat,
+input.sheet-tab-gm-weapons:checked ~ div.sheet-tab-gm-weapons, /* Currently used for Group Mechanics sheet */
+input.sheet-tab-gm-adversaries:checked ~ div.sheet-tab-gm-adversaries /* Currently used for Campaign Details sheet */
+{
+ display: block;
+}
+
+/* Custom Show Hide
+ * ------------------------------------ */
+.sheet-player-sheet,
+.sheet-gm-sheet {
+ display: none;
+}
+
+input.sheet-player:checked ~ .sheet-player-sheet,
+input.sheet-gm:checked ~ .sheet-gm-sheet{
+ display: inline-block;
+}
+
+input.sheet-gm:checked ~ div.sheet-tab-content {
+ display: none;
+}
+
+input.sheet-gm:checked ~ div.sheet-tab-gm-dice {
+ display: block;
+}
+
+/* ------------------------------------ */
+.charsheet {
+ padding:0px !important;
+ margin:0px !important;
+}
+
+.charsheet input[type=number] {
+ text-align:right;
+ cursor:pointer;
+}
+
+.charsheet input[type=text],
+.charsheet textarea,
+.charsheet select {
+ width:100%;
+ height:auto;
+ margin-bottom:0px;
+}
+
+.charsheet input,
+.charsheet textarea {
+ background:#e3e3e3;
+}
+
+.charsheet input:focus,
+.charsheet textarea:focus {
+ background:#fff;
+}
+
+.charsheet textarea {
+ width:calc(100% - 15px);
+ height:auto;
+ text-align:left;
+}
+
+.charsheet label {
+ font-size:11px;
+ color:#444;
+ margin:0px;
+ padding:0px;
+}
+
+.charsheet table {
+ width:100%;
+ background-image: url('http://i.imgur.com/4biHABZ.jpg');/* Grey Background */
+ background-position:center center;
+ background-repeat:repeat;
+}
+
+.charsheet table tr th {
+ text-align:left;
+ background:#444;
+ color:#f3f3f3;
+ padding:3px 5px;
+}
+
+.charsheet table tr th:last-child {
+ background-image: url('http://i.imgur.com/iZPF9he.png');/* Blank white space */
+ background-position: right bottom;
+ background-repeat:no-repeat;
+}
+
+.charsheet table tr td {
+ text-align:left;
+ padding:3px 5px;
+ border-bottom:1px dotted #ccc;
+}
+
+.charsheet table tr:hover td {
+ background-color:#f1f1f1;
+}
+
+.sheet-bg-gray label {color:#eee}
+.sheet-bg-gray td,
+.sheet-bg-gray:hover td,
+
+.charsheet .sheet-sub-header,
+.charsheet .sheet-sub-header:hover{
+ background:#D3D3D3;
+ color:#eee;
+}
+
+.sheet-bg-blue label {color:#fff}
+.sheet-bg-blue td,
+.sheet-bg-blue:hover td,
+
+.charsheet .sheet-sub-header,
+.charsheet .sheet-sub-header:hover{
+ background:#78728f;
+ color:#fff;
+}
+
+.charsheet table tr td.sheet-div-right {
+ border-right:1px solid #ccc
+}
+
+.charsheet h3 {
+ background-image: url('http://i.imgur.com/PAAMegP.png'), url('http://i.imgur.com/oWaNr2C.png');/* Stretched hexagon, Grey Title lines*/
+ background-position: center top, center 5px;
+ background-repeat:no-repeat, repeat-x;
+ line-height:40px;
+ padding:0;
+ margin:0;
+ text-align:center;
+ color:#fff;
+}
+
+.charsheet .sheet-sub-header,
+.charsheet .sheet-sub-header:hover{
+ background:#485a6d;
+ color:#fff;
+}
+
+/* ------------------------------------------------- Dice Pool */
+
+.sheet-section-1 {
+ padding-bottom:10px;
+}
+
+.sheet-section-1 .sheet-column {
+ margin-bottom:0px;
+ margin:0 0;
+ width:100%
+}
+
+.sheet-dice-pool {border-bottom:1px solid #444;}
+
+.sheet-dice-pool img {
+ width:20px;
+ margin:4px 0 0 -10px;
+ padding:0px;
+ position:absolute;
+}
+
+.sheet-dice-pool .sheet-note {
+ font-size:10px;
+ font-weight:normal;
+ color:#d3d3d3;
+}
+
+.sheet-dice-pool td,
+.sheet-dice-pool tr:hover td {
+ background:#444;
+}
+
+.sheet-dice-pool td.sheet-light,
+.sheet-dice-pool td.sheet-dark,
+.sheet-dice-pool td.sheet-force {
+ text-align:center;
+}
+
+.sheet-dice-pool td.sheet-light:nth-child(1),
+.sheet-dice-pool td.sheet-dark:nth-child(5) {
+ text-align:right;
+}
+
+.sheet-dice-pool td.sheet-light:nth-child(3),
+.sheet-dice-pool td.sheet-dark:nth-child(7) {
+ text-align:left;
+}
+
+.sheet-dice-pool td.sheet-force {
+ border-left:1px solid #777;
+ border-right:1px solid #777;
+}
+
+.sheet-dice-pool td.sheet-force {border-bottom:none}
+.sheet-dice-pool td.sheet-light {}
+.sheet-dice-pool td.sheet-dark {}
+
+.sheet-dice-pool td.sheet-light:nth-child(1) {
+ border-left:1px solid #999;
+}
+
+.sheet-dice-pool td.sheet-upgrade,
+.sheet-dice-pool td.sheet-downgrade {
+ text-align:center !important;
+ border-bottom:1px solid #777;
+ border-top:1px solid #777;
+}
+
+.sheet-dice-pool [type=number] {
+ background:#f3f3f3;
+ width: 50px !important;
+ height:40px;
+ font-size:20px;
+ font-weight:bold;
+}
+
+.sheet-dice-pool [type=number]:focus {
+ background:#fff;
+}
+
+.sheet-upgrade label,
+.sheet-downgrade label {
+ display:inline-block;
+ width:auto;
+ text-align:center;
+ color:#f3f3f3;
+}
+
+/* ------------------------------------------------- Soak, Wounds... */
+
+.sheet-swsd {
+ background: url('http://i.imgur.com/M8dBhzt.png') center -2px no-repeat;/* Character Sheet Stat connecting sword title - Border */
+}
+.sheet-swsd tr:hover td {background-color:transparent;}
+.sheet-swsd tr td {border:none;}
+
+.sheet-swsd th {
+ font-size:10px;
+ font-weight:normal;
+}
+
+.sheet-swsd td {
+ text-align:center;
+ vertical-align:top;
+}
+
+.sheet-swsd td:nth-child(1),
+.sheet-swsd td:nth-child(2),
+.sheet-swsd td:nth-child(3),
+.sheet-swsd td:nth-child(4),
+.sheet-swsd td:nth-child(5) {
+ background-image: url('http://i.imgur.com/cODj4n5.png');/* Threshold / Current - Border */
+ background-position: center top;
+ background-repeat:no-repeat;
+ width:153px;
+ height:87px;
+}
+
+.sheet-swsd td:nth-child(3),
+.sheet-swsd td:nth-child(4),
+.sheet-swsd td:nth-child(5) {
+ background-position: center center;
+ vertical-align:middle;
+}
+
+.sheet-swsd tr:nth-child(2) td:nth-child(1),
+.sheet-beast tr:first-child td:nth-child(5){
+ background-image: url('http://i.imgur.com/cyPJPLg.png');/* Single Digit - Border */
+ background-position: center top;
+ background-repeat:no-repeat;
+ width:99px;
+ height:66px;
+ vertical-align:top;
+}
+
+.sheet-beast tr:first-child td:nth-child(5){
+ vertical-align:middle;
+ background-position: center 60px;
+}
+
+.sheet-swsd tr:nth-child(2) td:nth-child(2) {
+ background:none;
+ width:auto;
+ height:auto;
+}
+
+.sheet-swsd tr:nth-child(2) td:nth-child(1) label.sheet-label-title {
+ text-align:center;
+ color:#fff;
+ font-weight:bold;
+ line-height:15px;
+ padding-bottom:4px;
+ font-size:14px;
+ display:block;
+}
+
+.sheet-beast tr:first-child td:nth-child(5) label.sheet-label-title {
+ padding-bottom:0px;
+ margin-bottom:0px;
+}
+
+label.sheet-label-title {
+ text-align:center;
+ color:#fff;
+ font-size:13px;
+ line-height:25px;
+ padding-bottom:6px;
+}
+
+label.sheet-label-threshold,
+label.sheet-label-current,
+label.sheet-label-range,
+label.sheet-label-melee {
+ color:#fff;
+ font-size:9px;
+ font-weight:normal;
+ display:inline-block;
+ width:auto;
+ padding:0 5px;
+}
+label.sheet-label-current-speed,
+label.sheet-label-threshold-speed {
+ color:#fff;
+ font-size:9px;
+ font-weight:normal;
+ display:inline-block;
+ width:auto;
+ padding:0 10px;
+}
+
+label.sheet-label-current {
+ padding-right:16px;
+}
+
+.charsheet .sheet-swsd [type=number] {
+ font-size:16px;
+ font-weight:bold;
+ text-align:right;
+ width:50px !important;
+}
+
+.sheet-destiny td:nth-child(1)
+{
+ margin-left: auto;
+ margin-right: auto;
+ width:250px;
+ height:66px;
+ vertical-align:top;
+}
+
+.sheet-destiny td:nth-child(3)
+{
+ width:99px;
+ height:66px;
+ vertical-align:middle;
+}
+
+.sheet-destiny td:nth-child(2),
+.sheet-destiny td:nth-child(4)
+{
+ text-align:center;
+ background-image: url('http://i.imgur.com/cyPJPLg.png');/* Single Digit - Border */
+ background-position: center top;
+ background-repeat:no-repeat;
+ width:99px;
+ height:66px;
+ vertical-align:top;
+}
+
+.sheet-destiny {
+ background-image:none;
+}
+
+.sheet-destiny tr td {border:none;}
+.sheet-destiny tr:hover td {background-color:transparent;}
+
+.sheet-destiny label {
+ text-align:center;
+ color:#fff;
+ font-weight:bold;
+ line-height:15px;
+ padding-bottom:4px;
+ font-size:14px;
+ display:block;
+}
+
+.sheet-destiny [type=number] {
+ font-size:14px;
+ font-weight:bold;
+}
+
+/* ------------------------------------------------- Characteristics */
+
+.sheet-characteristics td:nth-child(1),
+.sheet-characteristics td:nth-child(3),
+.sheet-characteristics td:nth-child(5),
+.sheet-characteristics td:nth-child(7),
+.sheet-characteristics td:nth-child(9),
+.sheet-characteristics td:nth-child(11),
+.sheet-characteristics td:nth-child(13)
+{
+ text-align:center;
+ background-image: url('http://i.imgur.com/cyPJPLg.png');/* Single Digit - Border */
+ background-position: center top;
+ background-repeat:no-repeat;
+ width:99px;
+ height:66px;
+ vertical-align:top;
+}
+
+.sheet-characteristics {
+ background-image:none;
+}
+
+.sheet-characteristics tr td {border:none;}
+.sheet-characteristics tr:hover td {background-color:transparent;}
+
+.sheet-characteristics label {
+ text-align:center;
+ color:#fff;
+ font-weight:bold;
+ line-height:15px;
+ padding-bottom:4px;
+ font-size:14px;
+ display:block;
+}
+
+.sheet-characteristics [type=number] {
+ font-size:14px;
+ font-weight:bold;
+}
+
+/* Critical */
+
+.sheet-critical tr td {
+ border-bottom:none;
+}
+
+.sheet-critical {
+ border-bottom:1px dotted #999;
+}
+
+.sheet-critical:hover {
+ background:#f1f1f1;
+}
+
+.sheet-roll-critical,
+.sheet-roll-critical tr td,
+.sheet-roll-critical tr:hover td {
+ background-color:#444;
+ border:none;
+ color:#ccc
+}
+
+.sheet-crit-dice-bg {
+ background-image:url('http://i.imgur.com/UqQCDZ6.png');/* Four Boxes - Dice Border */
+ background-position:center center;
+ background-repeat:no-repeat;
+}
+
+.sheet-roll-critical label {
+ color:#ccc;
+}
+
+[name="attr_critAddRangeNum"],
+[name="attr_critShipAddRangeNum"],
+[name="attr_critAddOffset"],
+[name="attr_critShipAddOffset"]{
+ background:#ccc;
+}
+
+.sheet-critical {
+ display:none;
+}
+
+.sheet-checkbox-criton {
+ display:none;
+}
+
+.sheet-checkbox-criton:checked + .sheet-critical {
+ display:block;
+}
+
+button.sheet-btn-lightSide[type=roll]::before {
+ content: '';
+}
+
+button.sheet-btn-lightSide[type=roll] {
+ white-space:nowrap;
+ font-size:15px;
+ margin:0;
+}
+
+button.sheet-btn-heal-crit[type=roll]::before,
+button.sheet-btn-roll-crit[type=roll]::before,
+button.sheet-btn-add-crit[type=roll]::before {
+ content: '';
+}
+
+button.sheet-btn-heal-crit[type=roll],
+button.sheet-btn-add-crit[type=roll],
+button.sheet-btn-roll-crit[type=roll] {
+ white-space:nowrap;
+ font-size:12px;
+ width:100%;
+ margin:0;
+}
+
+button.sheet-btn-roll-crit[type=roll] {
+ color:#fff;
+ font-size:16px;
+ line-height:30px;
+ background: #65bd63;
+ border:none;
+ background-image: -webkit-linear-gradient(top, #485a6d, #2c3947);
+ background-image: -moz-linear-gradient(top, #485a6d, #2c3947);
+ background-image: -o-linear-gradient(top, #485a6d, #2c3947);
+ background-image: linear-gradient(to bottom, #485a6d, #2c3947);
+ -webkit-box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2);
+ box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2);
+}
+
+button.sheet-btn-roll-crit[type=roll]::before {
+ content: 't ';
+ font-size:18px;
+ color:#fff;
+}
+
+button.sheet-btn-roll-crit[type=roll]:focus {
+ outline:none;
+ border:none;
+}
+
+button.sheet-btn-roll-crit[type=roll]:active {
+ background-image: -webkit-linear-gradient(top, #2c3947, #485a6d);
+ background-image: -moz-linear-gradient(top, #2c3947, #485a6d);
+ background-image: -o-linear-gradient(top, #2c3947, #485a6d);
+ background-image: linear-gradient(to bottom, #2c3947, #485a6d);
+}
+
+/* ------------------------------------------------- Skills */
+
+.sheet-skills td:nth-child(2),
+.sheet-skills td:nth-child(3),
+.sheet-skills td:nth-child(6){
+ width:50px;
+}
+
+.sheet-init td:nth-child(2),
+.sheet-init td:nth-child(5),
+.sheet-skills td:nth-child(4) {
+ width:124px;
+ background-image:url(http://i.imgur.com/xUqfqbd.gif);/*url('http://i.imgur.com/fY7gsGx.png'); Six Boxes - Dice Border */
+ background-repeat:no-repeat;
+ background-position:3px center;
+}
+
+.sheet-skills td:nth-child(5) {
+ width:124px;
+}
+
+.sheet-custome-skills td:nth-child(2) {
+ width:100px;
+}
+
+.sheet-custome-skills td:nth-child(3),
+.sheet-custome-skills td:nth-child(4),
+.sheet-custome-skills td:nth-child(7) {
+ width:50px;
+ background-image:none;
+}
+
+.sheet-custome-skills td:nth-child(6) {
+ width:120px;
+}
+
+.sheet-custome-skills td:nth-child(5) {
+ width:124px;
+ background-image:url('http://i.imgur.com/xUqfqbd.gif');/* Six Boxes - Dice Border */
+ background-repeat:no-repeat;
+ background-position:4px center;
+}
+
+.sheet-skills th:nth-child(2),
+.sheet-skills td:nth-child(2),
+.sheet-custome-skills th:nth-child(3),
+.sheet-custome-skills td:nth-child(3) {
+ text-align:center;
+}
+
+/* TIP HELP */
+
+.sheet-icon-S {background:url('http://galacticcampaigns.com/images/EotE/Symbols/S.png') center center no-repeat;}/* Success - Symbol */
+.sheet-icon-A {background:url('http://galacticcampaigns.com/images/EotE/Symbols/A.png') center center no-repeat;}/* Advantage - Symbol */
+.sheet-icon-Tri {background:url('http://galacticcampaigns.com/images/EotE/Symbols/Triumph.png') center center no-repeat;}/* Triumph - Symbol */
+.sheet-icon-T {background:url('http://galacticcampaigns.com/images/EotE/Symbols/T.png') center center no-repeat;}/* Threat - Symbol */
+.sheet-icon-Des {background:url('http://galacticcampaigns.com/images/EotE/Symbols/Despair.png') center center no-repeat;}/* Despair - Symbol */
+.sheet-icon-B {background:url('http://galacticcampaigns.com/images/EotE/Boost/boostBlank.png') center center no-repeat;}
+.sheet-icon-G {background:url('http://galacticcampaigns.com/images/EotE/Ability/abilityBlank.png') center center no-repeat;}
+.sheet-icon-Y {background:url('http://galacticcampaigns.com/images/EotE/Proficiency/ProficiencyBlank.png') center center no-repeat;}
+.sheet-icon-P {background:url('http://galacticcampaigns.com/images/EotE/Difficulty/DifficultyBlank.png') center center no-repeat;}
+.sheet-icon-R {background:url('http://galacticcampaigns.com/images/EotE/Challenge/ChallengeBlank.png') center center no-repeat;}
+.sheet-icon-BLK {background:url('http://galacticcampaigns.com/images/EotE/Setback/SetBackBlank.png') center center no-repeat;}
+.sheet-icon-W {background:url('http://galacticcampaigns.com/images/EotE/Force/ForceD.png') center center no-repeat;}/* Force Die - Black - Symbol */
+
+.sheet-icon-S,
+.sheet-icon-A,
+.sheet-icon-Tri,
+.sheet-icon-T,
+.sheet-icon-Des,
+.sheet-icon-B,
+.sheet-icon-G,
+.sheet-icon-Y,
+.sheet-icon-P,
+.sheet-icon-R,
+.sheet-icon-BLK,
+.sheet-icon-W {
+ background-size:15px 15px;
+ display:inline-block;
+ width:15px;
+ height:15px;
+}
+
+.sheet-skills label {
+ float:left;
+ width:auto;
+}
+
+.sheet-tips {
+ float:left;
+ margin-left:5px;
+}
+
+.sheet-help {display:none;}
+.sheet-help-def {display:block}
+
+.sheet-tips:hover .sheet-help {display:block}
+
+.sheet-icon-question {
+ width:14px;
+ margin:auto;
+ line-height:14px;
+ display:block;
+ text-align:center;
+ color:#fff;
+ font-weight:bold;
+ background:#444;
+ -webkit-border-radius: 7px;
+ border-radius: 7px;
+}
+
+th .sheet-icon-question {
+ color:#444;
+ background:#fff;
+}
+
+.sheet-help .sheet-icon {
+ position:absolute;
+ width:21px;
+ height:16px;
+ padding:4px 2px 2px 2px;
+ text-align:center;
+ margin-top:-2px;
+ cursor:pointer;
+}
+
+.sheet-help-def .sheet-icon {margin-left: 0px}
+.sheet-help-success .sheet-icon {margin-left: 25px}
+.sheet-help-advantage .sheet-icon {margin-left: 50px}
+.sheet-help-triumph .sheet-icon {margin-left: 75px}
+.sheet-help-threat .sheet-icon {margin-left: 100px}
+.sheet-help-despair .sheet-icon {margin-left: 125px}
+
+.sheet-help-content {
+ position:absolute;
+ background:#fff;
+ border:1px solid #ccc;
+ display:none;
+ width:250px;
+ margin-left:-25px;
+ margin-top:19px;
+ padding:10px;
+ font-size:12px;
+ -webkit-border-radius: 0px 3px 3px 3px;
+ border-radius: 0px 3px 3px 3px;
+ -webkit-box-shadow: 2px 2px 3px 0px rgba(50, 50, 50, 0.75);
+ /* -moz-box-shadow: 2px 2px 3px 0px rgba(50, 50, 50, 0.75); */
+ box-shadow: 2px 2px 3px 0px rgba(50, 50, 50, 0.75);
+}
+
+th .sheet-help-content {
+ color:#444;
+ font-weight: normal;
+}
+
+.sheet-icon:hover ~ .sheet-help-content {display:block; z-index:10}
+
+.sheet-icon:hover {
+ background:#fff;
+ border:1px solid #ccc;
+ border-bottom:1px solid #fff;
+ padding:3px 1px 1px 1px;
+ z-index:15;
+ -webkit-border-radius: 3px 3px 0px 0px;
+ border-radius: 3px 3px 0px 0px;
+}
+
+.sheet-help-content h5 {
+ padding-bottom:8px;
+}
+
+.sheet-help-content ul li {
+ line-height:14px;
+ padding-bottom:8px;
+}
+
+.sheet-force-rating label input {
+ text-align: center;
+}
+
+/* -------------------------------------------------- Talents */
+
+.sheet-talents th:last-child {
+ background-image:none;
+ text-align:center;
+}
+
+.sheet-talent tr td {
+ border-bottom:none;
+}
+
+.sheet-talent {
+ border-bottom:1px dotted #999;
+}
+
+.sheet-talent:hover {
+ background:#f1f1f1;
+}
+
+[name=attr_talentname] {
+ font-weight:bold;
+}
+
+/* ------------------------------------------------- Weapons */
+
+.sheet-weapons td:nth-child(1),
+.sheet-weapons td:nth-child(9) {
+ width:20%;
+}
+
+.sheet-weapons td:nth-child(2),
+.sheet-weapons td:nth-child(4),
+.sheet-weapons td:nth-child(6),
+.sheet-weapons td:nth-child(8)
+{
+ text-align:center;
+ background-image: url('http://i.imgur.com/cyPJPLg.png');/* Single Digit - Border */
+ background-position: center top;
+ background-repeat:no-repeat;
+ width:99px;
+ height:66px;
+ vertical-align:top;
+}
+
+.sheet-weapons {
+ background: url('http://i.imgur.com/oWaNr2C.png') center 45px repeat-x;/* Title Double Line */
+}
+
+.sheet-weapons tr td {border:none;}
+.sheet-weapons tr:hover td {background-color:transparent;}
+
+.sheet-weapons label {
+ text-align:center;
+ color:#fff;
+ font-weight:bold;
+ line-height:15px;
+ padding-bottom:4px;
+ font-size:14px;
+ display:block;
+}
+
+.sheet-weapons [type=text] {
+ font-size:14px;
+ font-weight:bold;
+ width:50px;
+ text-align:center
+}
+
+.sheet-weapons [type=roll] {
+ font-size:28px !important;
+ line-height:30px !important;
+ width:auto !important;
+}
+
+.sheet-attachments-wrapper {
+ position:relative;
+ padding-top:5px;
+}
+
+.sheet-view-attachments {
+ float:left;
+ margin-left:10px;
+ padding-bottom:15px;
+ position:relative;
+}
+
+input.sheet-view-attachments {
+ margin-top:-28px;
+}
+
+label.sheet-view-attachments {
+ width:150px;
+ margin-top:-31px;
+ margin-left:30px;
+}
+
+.sheet-attachments {
+ display:none;
+}
+
+input.sheet-view-attachments:checked ~ .sheet-attachments {
+ display:table;
+}
+
+.sheet-attachments th:last-child {
+ background:#444;
+}
+
+/* ---------------------------------------------------------- Ship */
+
+.sheet-ship {
+ background:url('http://i.imgur.com/R7CME69.png') center center no-repeat;/* Vehicle Sheet Stat connecting sword title - Border */
+ background-color:transparent;
+}
+
+table.sheet-ship tr td {
+ border:none;
+ background-color:transparent;
+}
+
+table.sheet-ship tr:hover td {
+ background-color:transparent;
+}
+
+.sheet-ship-defense {
+ background:url('http://i.imgur.com/VaTaF9r.png') center center no-repeat;/* Starship Four Zones - Border */
+ width:302px;
+ height:236px;
+ text-align:center;
+ vertical-align:top;
+}
+
+.sheet-ship-char-thre-bg {
+ background-image: url('http://i.imgur.com/cODj4n5.png');/* Threshold / Current - Border */
+ background-position: center 0px;
+ background-repeat:no-repeat;
+ vertical-align:top;
+ width: 33%;/*153px;*/
+ height:87px;
+ text-align:center;
+}
+
+.sheet-ship-char-thre-bg-speed {
+ background-image: url('http://i.imgur.com/cODj4n5.png');/* Threshold / Current - Border */
+ background-position: center 25px;
+ background-repeat:no-repeat;
+ vertical-align:top;
+ width: 33%;/*153px;*/
+ height:87px;
+ text-align:center;
+ padding-top:28px;
+}
+
+.sheet-ship-char-bg {
+ text-align:center;
+ background-image: url('http://i.imgur.com/cyPJPLg.png');/* Single Digit - Border */
+ background-position: center 37px;
+ background-repeat:no-repeat;
+ width:99px;
+ height:66px;
+ vertical-align:top;
+ text-align:center;
+ padding-top:40px;
+}
+
+.sheet-ship-char-bg label {
+ text-align:center;
+ color:#fff;
+ font-weight:bold;
+ line-height:15px;
+ padding-bottom:4px;
+ font-size:13px;
+ display:block;
+}
+
+.sheet-ship [type=number] {
+ font-size:16px;
+ font-weight:bold;
+ text-align:right;
+ width:50px !important;
+}
+
+.sheet-ship-char-bg [type=number] {
+ font-size:14px;
+}
+
+.sheet-ship-defense label {
+ color:#fff;
+ text-align:center
+}
+
+.sheet-def-label {
+ position:absolute;
+ width:50px;
+ margin-left:220px;
+ margin-top:48px;
+ font-size:14px
+}
+
+.sheet-fore,
+.sheet-starboard,
+.sheet-aft,
+.sheet-port {
+ width:99px;
+ height:66px;
+ position:absolute;
+}
+
+.sheet-fore {
+ margin-left:99px;
+ margin-top:2px;
+}
+
+.sheet-starboard {
+ margin-left:203px;
+ margin-top:91px;
+}
+
+.sheet-aft {
+ margin-left:99px;
+ margin-top:172px;
+}
+
+.sheet-port {
+ margin-left:0px;
+ margin-top:91px;
+}
+
+.sheet-firearc-field {width:32px; height:32px; padding:1px 0 0 0; vertical-align:top}
+
+.sheet-fireArcFore,
+.sheet-fireArcStarboard,
+.sheet-fireArcAft,
+.sheet-fireArcPort {
+ position:absolute;
+ z-index:5;
+ opacity:0.0;
+}
+
+.sheet-fireArcFore {margin-left:10px; margin-top:0px}
+.sheet-fireArcStarboard {margin-left:20px; margin-top:10px}
+.sheet-fireArcAft {margin-left:10px; margin-top:20px}
+.sheet-fireArcPort {margin-left:0px; margin-top:10px}
+
+span.sheet-fireArcForeImg,
+span.sheet-fireArcStarboardImg,
+span.sheet-fireArcAftImg,
+span.sheet-fireArcPortImg {
+ background:url('http://i.imgur.com/DcWGIWp.png') left bottom no-repeat;/* Starship Weapon Firing Arcs */
+ display:block;
+ width:32px;
+ height:32px;
+ position:absolute;
+}
+
+span.sheet-fireArcForeImg {background-position:0px bottom}
+span.sheet-fireArcStarboardImg {background-position:-32px bottom}
+span.sheet-fireArcAftImg {background-position:-64px bottom}
+span.sheet-fireArcPortImg {background-position:-96px bottom}
+
+.sheet-fireArcFore:checked ~ span.sheet-fireArcForeImg {background-position:0px top}
+.sheet-fireArcStarboard:checked ~ span.sheet-fireArcStarboardImg {background-position:-32px top}
+.sheet-fireArcAft:checked ~ span.sheet-fireArcAftImg {background-position:-64px top}
+.sheet-fireArcPort:checked ~ span.sheet-fireArcPortImg {background-position:-96px top}
\ No newline at end of file
diff --git a/Star Wars FFG API-Compatible/FFG-SWRPG-CharacterSheet.html b/Star Wars FFG API-Compatible/FFG-SWRPG-CharacterSheet.html
new file mode 100644
index 0000000000..f27713a618
--- /dev/null
+++ b/Star Wars FFG API-Compatible/FFG-SWRPG-CharacterSheet.html
@@ -0,0 +1,9506 @@
+
+
+
+
+
+
+
+Character Sheet
+
+Vehicle Sheet
+
+Group Sheet
+
+Companion Sheet
+
+
+
+GM Resources
+
+
+
+
+
+
+
Character Info
+
+
Skills
+
+
Combat
+
+
Item Inventory
+
+
Notes
+
+
+
+
+
+
+
+
+
+ Notable Features
+
+
+
+
+
+
+
+
+
+
+
+ Other
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ General Skills
+ Career
+ Rank
+
+ Modifiers
+
+
+
+ ?
+
+
+
Adding Dice
+
+ To add additional dice write the number of
+ dice and color letter you want to roll.
+ Additionally you can add some dice symbols
+ to automatically add to the roll.
+
+
Example: 1b 1g outputs
+
+ b -> Blue = Boost, blk -> BLack = Setback
+ g -> Green = Ability, y -> Yellow = Proficiency
+ p -> Purple = Difficulty, r -> Red = Challenge
+ w -> White = Force
+ s = Success, f = Failure, a = Advantage, t = Threat
+
+
+
+
+
+
+
+
+
+
+ Astrogation (Int)
+
+
+
+ ?
+
+
+
Overview (p71)
+
+ Program a navicomputer for a hyperspace jump.
+ Basic knowledge of galactic geography.
+ Use navicomputer to identify location.
+ Familiarity with hyperspace routes and the types of craft and commerce most common along a route.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Better target the location, e.g.: place vessel directly into orbit around target planet.
+ Reduce time spent calculating.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Reduce travel time.
+ Identify convenient stopovers to resupply or conduct additional business.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Complete calculations in minimum time.
+ Greatly reduce travel time.
+ Reveal highly valuable but previously unknown information.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Decrease accuracy of hyperspace jump.
+ Increase travel time.
+ Miss relevant details when analyzing hyperspace routes or galactic maps.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ As for , but to greater magnitude.
+ Trigger something truly awful happening, such as jumping out of hyperspace in the path of an asteroid.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Athletics (Br)
+
+
+
+ ?
+
+
+
Overview (p71)
+
+ Climb - including rappel or swing on a line - difficulty determined by surface and weather conditions.
+ Swim - difficulty determined by water conditions (waves, currents and tides).
+ Jump horizontally or vertically - difficulty determined by gravitational conditions and distance required.
+ Push movement to a longer speed or run for an extended time.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Reduce time required.
+ Increase distance travelled.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Generate bonus on other physical checks performed later or by allies that turn.
+ to grant additional maneuver during turn to move or perform physical activity.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Perform the check with truly impressive results.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Small amounts cause strain.
+ Larger amounts may cause character to fall prone, or even suffer a wound from sprains and bruises.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Inflict a Critical Injury, which the GM can choose to be thematic or roll randomly.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Charm (Pr)
+
+
+
+ ?
+
+
+
Overview (p72)
+
+ Persuade an individual to make a special exception to usual practices through flattery, flirting and grace.
+ Appeal to an individual's better nature, requiring them to go out of their way to aid the characters without any hope of remuneration.
+ Sincere seduction attempts (use Deceit when interest is feigned).
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Gain an extra scene in which target is willing to support you for each additional
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Affect unexpected subjects beyond the original target.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Have target NPC become recurring character who remains predisposed to assist.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Reduce the number of people able to influence
+ Turn those affected negatively against character.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Turn NPC against character and make into a minor recurring adversary.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Coercion (Will)
+
+
+
+ ?
+
+
+
Overview (p72)
+
+ Issue a threat, whether accompanied by hostile actions or implied, such as gesturing or pointing towards a weapon.
+ Question or persuade a target under conditions of physical captivity.
+ Acts of torture.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Inflict one strain on target.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Affect unexpected subjects beyond the original target.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Shift allegiance of target.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Target has building resentment towards character.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Reveal something about goals and motivations to target.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Computers (Int)
+
+
+
+ ?
+
+
+
Overview (p73)
+
+ Open a locked door, control an elevator or bypass a security system.
+ Search through records, particularly if encrypted.
+ Investigate what actions a slicer might have taken against a computer system.
+ Alter a droid's programming or gain access to its memories.
+ Recover data from a system that has suffered physical damage.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Reduce time required.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Uncover additional information about the system.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Obfuscate actions taken -add to any check to detect or identify the characters actions.
+
+
+
+
+
+
+
+
+
Per Threat
+
+
+ The character does a
+ poor job of concealing his
+ presence in the system.
+ Security systems are
+ alerted, and add to the
+ check of any NPC attempting
+ to discover evidence of his
+ actions.
+
+
+
+
+
+
+
+
+
+
Per Despair
+
+
+ Leave behind trace
+ information of your own
+ system in the system being
+ sliced. Add to the check of
+ any NPC using the target
+ system to slice the
+ character's system.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cool (Pr)
+
+
+
+ ?
+
+
+
Overview (p74)
+
+ Resist efforts to hide the truth among overt niceties.
+ Check for initiative when carefully and calmly prepared.
+ Check for initiative in a social situation/discussion where timing matters.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Gain an additional insight into the situation at hand.
+
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Miss a vital detail or event.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ The character is overwhelmed by the chaos and is stunned for one round.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Coordination (Ag)
+
+
+
+ ?
+
+
+
Overview (p74)
+
+ Reduce damage when falling (see p140).
+ Walk across a narrow surface, whether a wide beam or a thin pipe.
+ Escape from restraints.
+ Crawl through the twists and turns of a sewage pipe, ventilation duct or garbage chute.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Reduce time required.
+ Increase distance travelled by 25%, (maximum 100% increase).
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ to grant additional maneuver during turn.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Perform the check with truly impressive results.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Lose free maneuver for one round.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Suffer a wound
+ Lose a vital piece of equipment.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Deception (Cun)
+
+
+
+ ?
+
+
+
Overview (p75)
+
+ Mislead a buyer or seller about the value of an object.
+ Distract an opponent through guile.
+ Lay a false trail when pursued.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Extend duration of Deceit action.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Increase the value of any goods or services gained through the action.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Fool the target into believing the character is trustworthy - future Deceit checks against target do not require an opposed check.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Give away a portion of the lie, making target suspicious.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Target realises he has been lied to and spreads word of his deceit to harm his reputation or uses the situation to his advantage.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Discipline (Will)
+
+
+
+ ?
+
+
+
Overview (p75)
+
+ Act normally while pinned down by heavy fire.
+ Engage, rather than flee before, a creature with inherently horrifying aspects.
+ Resist a tempting deal that seems far too good to be true.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Downgrade difficulty of the dice pool for next action (max. 1).
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Gain an additional insight into the situation at hand.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Add to any Discipline checks made by allies during the following round.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Undermine the characters resolve, perhaps inflicting a penalty on further actions in distressing circumstances.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ The character is overwhelmed entirely and is unable to perform more than one maneuver next round.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Leadership (Pr)
+
+
+
+ ?
+
+
+
Overview (p76)
+
+ Rally allies subject to the effects of fear (see p189).
+ Sway a crowd in a public venue to take action, most often of a political nature.
+ Reassert the loyalty of underlings that have fallen before the guile of an opponent.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Extend target's support for additional scenes.
+ Increase efficiency or effectiveness of target during ordered actions.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Affect bystanders in addition to target.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Have target NPC become recurring character who decides to faithfully follow the acting character.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Decrease the efficiency of ordered actions, causing them to take longer or be done poorly.
+
+
+
+
+
+
+
+
+
Per Despair
+
+
+ Undermine the
+ character's authority,
+ damaging the characters
+ ability to command target or
+ those who witnessed the
+ attempt.
+
+
+ With multiple target may
+ become a recurring thorn in
+ the character's side,
+ refusing future orders or
+ turning others against the
+ character.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mechanics (Int)
+
+
+
+ ?
+
+
+
Overview (p76)
+
+ Repair physical damage to a device, provided necessary tools and replacement components are available.
+ Repair starship or vehicle (see p155).
+ Identify the parts and tools necessary for a repair job, along with approximate cost.
+ Construct a completely new device from discrete components and damaged devices.
+ Make a healing check on a droid (see Medicine, p177).
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Reduce time required by 10-20%
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Grant on checks when using repaired item, or even the Superior quality, for a session.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Give device additional single use function.
+
+
+
+
+
+
+
+
+
Per Threat
+
+
+ Particularly shoddy
+ repairs or temporary
+ measures, the GM may spend
+ to cause the target object
+ or system to malfunction
+ shortly after check
+ completed.
+
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Cause further harm to target object or system.
+ Cause other components of target to malfunction.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Medicine (Int)
+
+
+
+ ?
+
+
+
Overview (p77)
+
+ Apply routine first aid, including medpacs.
+ Treat or inflict a poison, pharmaceutical or recreational drug.
+ Identify symptoms and treatment for infectious diseases and parasites.
+ More serious treatment - including surgery, cybernetic augmentation and psychotherapy, provided necessary pharmaceuticals and medical instruments are available.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Target recovers one additional wound.
+ Reduce healing time by one hour.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Eliminate one strain from target.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Heal additional wounds while attempting to heal Critical Injury, or vice versa.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Inflict strain on the target due to shock of procedure.
+ Increase time procedure takes.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ A truly terrible accident, perhaps inflicting further wounds on target.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Negotiation (Pr)
+
+
+
+ ?
+
+
+
Overview (p77)
+
+ Adjust the purchase price when buying goods or services.
+ Adjust the selling price when selling goods or services.
+ Participate in skill-based gambling (use Deceit when cheating).
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Increase acting character's profit by 5%.
+ Modify scope of agreement.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Earn unrelated boons from target, concessions if failed or extra perks if passed.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Have target NPC become regular client or specialist vendor.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Increase cost of goods purchased.
+ Decrease value of goods sold.
+ Shorten contracts negotiated.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Seriously sabotage goals during the interaction, perhaps receive counterfeit goods or payment, or agree to terms entirely beyond scope of negotiation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Perception (Cun)
+
+
+
+ ?
+
+
+
Overview (p78)
+
+ Detect a trap or ambush, prior to falling prey to the assault.
+ Detect a disguised individual, when not actively looking.
+ Notice a subtle clue - overheard conversation, the stink of a Jawa, drug introduced to beverage.
+ Accidently notice subtly hidden objects, such as the latch securing a smuggling compartment.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Reveal additional details.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Recall additional information associated with object noticed.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Notice details that can be useful later to gain on future interactions with noticed object.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Conceal a vital detail about situation or environment.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Obtain false information about surroundings or target.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Piloting - Planetary (Ag)
+
+
+
+ ?
+
+
+
Overview (p78)
+
+ Decipher basic controls of completely foreign type of atmospheric craft.
+ Determine results of a race upon a world's surface.
+ Maintain a tail or lose a chaser.
+ Navigate through a familiar environment, representing knowledge of typical traffic patterns.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Gain insights into situation.
+ Deduce way to modify vehicle to make it more effective in future.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Reveal vulnerability in opponent's piloting style or vehicle, giving benefit in later rounds.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Grant additional maneuver while continuing to pilot vehicle.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ to give opponents on checks against character and vehicle due to momentary malfunction in system.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Deal damage to vehicle as character strains systems throughout vehicle during check.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Piloting - Space (Ag)
+
+
+
+ ?
+
+
+
Overview (p79)
+
+ Determine results of a race between the stars.
+ Resolve chases, whether through asteroid belts, a crowded battlefield or skirting the edge of a gravimetric instability.
+ Jockey for position in a space conflict, to determine which shields face the enemy and which weapons may be brought to bear.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Gain insights into situation.
+ Deduce way to modify vehicle to make it more effective in future.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Reveal vulnerability in opponent's piloting style or vehicle, giving benefit in later rounds.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Grant additional maneuver while continuing to pilot vehicle.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ to give opponents on checks against character and vehicle due to momentary malfunction in system.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Deal damage to vehicle as character strains systems throughout vehicle during check.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Resilience (Br)
+
+
+
+ ?
+
+
+
Overview (p79)
+
+ Go without sleep for significantly longer than is healthy for species.
+ Resist the effects of a toxin.
+ Endure prolonged exposure to a hostile environment - including heat, cold or toxic pollution.
+ Resist the effects of dehydration and malnutrition.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Extend effects of the success to increase time between checks.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Identify way to reduce difficulty of future checks against same threat.
+
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Overburden the character, inflicting penalties on subsequent checks.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Inflict a wound or minor Critical Injury on character, as they succumb to harsh conditions.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Skulduggery (Cun)
+
+
+
+ ?
+
+
+
Overview (p80)
+
+ Pick a lock or pocket using physical tools rather than programming.
+ Escape from a cell (after using Coordination to slip any bonds) and navigate away from security elements.
+ Identify the most vulnerable aspects of a security scheme.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Gain additional insights about nature of opposition.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Identify additional potential target.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Earn an unexpected boon.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Opportunity to catch character immediately after act, number of determine immediacy of discovery and ensuing danger.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Leave behind evidence of larceny.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Stealth (Ag)
+
+
+
+ ?
+
+
+
Overview (p80)
+
+ Blend in with a crowd, hiding by acting as though you belong.
+ Hide from an opponent's senses, modified by ambient conditions and applicable gear.
+ Hide people or objects from the attentions of others, either through concealment or misdirection.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Assist allied character infiltrating at same time.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Decrease time taken to perform action while hidden.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Identify way to completely distract opponent for duration of scene.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Increase time taken to perform action while hidden by 20%.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Leave behind evidence of passing, concerning identity and possibly motive.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Streetwise (Cun)
+
+
+
+ ?
+
+
+
Overview (p81)
+
+ Locate a merchant who specialises in unsavoury goods or illicit services.
+ Pick up subtle cues from the language and attitudes of those who operate outside of legal structures. Understand subtle references within conversations.
+ Discover what rumours are actively circulating within a region.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Reduce time or funds required to obtain item, information or service.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Reveal additional rumours or alternative sources.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Gain semi-permanent contact on street.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Seed gathered information with minor falsehoods.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Character lets slip details about self or information sought.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Survival (Cun)
+
+
+
+ ?
+
+
+
Overview (p82)
+
+ Identify safe food, potable water or shelter in a natural environment.
+ Understand weather patterns. Recognise the signs of imminent dangerous conditions and know the best way to prepare.
+ Track a subject through the wilderness - whether game or bounty.
+ Handle domesticated animals, so they may be used as beasts of burden or transport.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Assist other character in surviving.
+ Stockpile goods to increase time between checks.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Gain insight into environment to make future checks simpler.
+ When tracking, learn significant detail about target, such as number, species or how recently tracks were made.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ When handling domesticated animal, predispose animal towards character earning loyal companion.
+ When tracking, learn vital clue about target.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Spend vital resources (food, fuel, etc.) during check.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ Inflict wounds, Critical Injuries or large amounts of strain on character.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Vigilance (Will)
+
+
+
+ ?
+
+
+
Overview (p82)
+
+ Check for initiative when unprepared.
+ Use ability associated with the Force dependent on Vigilance.
+ Determine how prepared you are for unexpected crises. Resolve questions about whether or not a small piece of gear is available.
+
+
+
+
+
+
+
+
+
Per Additional Success
+
+ Character is particularly well prepared.
+
+
+
+
+
+
+
+
+
Per Advantage
+
+ Notice key environmental factor.
+
+
+
+
+
+
+
+
+
Per Triumph
+
+ Gain extra maneuver during first round of combat.
+
+
+
+
+
+
+
+
+
Per Threat
+
+ Miss key piece of information about situation or environment.
+
+
+
+
+
+
+
+
+
Per Despair
+
+ The character is unable to perform more than one maneuver during first round of combat.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Combat Skills
+ Career
+ Rank
+ Mods
+
+
+
+
+
+ Lightsaber
+
+
+
+ ?
+
+
+
Overview (p130)
+
+ Make a melee attack while using a Lightsaber-type weapon.
+ The characteristic associated with this skill can be modified by certain talents.
+
+
+
+
+
+ Brawn
+ Agility
+ Intellect
+ Cunning
+ Willpower
+ Presence
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Brawl (Br)
+
+
+
+ ?
+
+
+
Overview (p83)
+
+ Make a melee attack while unarmed or using a Brawl weapon.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gunnery (Agi)
+
+
+
+ ?
+
+
+
Overview (p83)
+
+ Make a ranged attack using a Gunnery weapon.
+ Operate complex targeting computers and automated weapons mounts.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Melee (Br)
+
+
+
+ ?
+
+
+
Overview (p84)
+
+ Make a melee attack using a Melee weapon.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ranged - Light (Ag)
+
+
+
+ ?
+
+
+
Overview (p84)
+
+ Make a ranged attack using a Ranged (Light) weapon.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Ranged - Heavy (Ag)
+
+
+
+ ?
+
+
+
Overview (p84)
+
+ Make a ranged attack using a Ranged (Heavy) weapon.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Knowledge Skills
+ Career
+ Rank
+ Mods
+
+
+
+
+
+ Core Worlds (Int)
+
+
+
+ ?
+
+
+
Overview (p85)
+
+ Identify a person's planet of origin without asking, by recognising traits of accent, dress and mannerisms associated with a particular world.
+ Know what behaviours are considered necessary and polite, as opposed to ones that could be offensive when interacting with someone from a Core World.
+ Identify which markets are the best places to sell or purchase a particular cargo (in the Core Worlds). Recognise any worlds where such goods could be illegal.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Education (Int)
+
+
+
+ ?
+
+
+
Overview (p85)
+
+ Identify the best way to proceed when interacting with a government entity.
+ Employ basic scientific knowledge in an analysis.
+ Understand any question that doesn't obviously fall under another knowledge skill.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lore (Int)
+
+
+
+ ?
+
+
+
Overview (p85)
+
+ Decipher an ancient piece of writing or identify its context.
+ Know legends associated with the exploits of an ancient hero.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Outer Rim (Int)
+
+
+
+ ?
+
+
+
Overview (p86)
+
+ Find a planet with a particular resource or service among the systems of the Outer Rim.
+ Identify which markets are the best places to sell or purchase a particular cargo (in the Outer Rim). Recognise any worlds where such goods could be illegal.
+ Know what behaviours are considered necessary and polite, as opposed to ones that could be offensive when interacting with someone from an Outer Rim world.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Underworld (Int)
+
+
+
+ ?
+
+
+
Overview (p86)
+
+ Know which nearby worlds are the best locations for a particular type of illegal business.
+ Determine the most common methods an opponent might use for a particular type of criminal activity.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Xenology (Int)
+
+
+
+ ?
+
+
+
Overview (p86)
+
+ Know what behaviours are considered necessary and polite, as opposed to ones that could be offensive when interacting with a member of an unfamiliar species.
+ Identify a particular way to injure or a characteristic vulnerability, to either help or harm a member of another species.
+ Know appropriate environmental conditions and foodstuffs for a member of another species.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Warfare (Int)
+
+
+
+ ?
+
+
+
Overview (AoR p136)
+
+ Know of the strategies and tactics of warefare both on the ground and in space.
+ Remembering details about a significant event, organization, or individual who played a role in a galactic struggle.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Weapons
+
+
+
+
+
+
View Attachments
+
+
+
+
+
+
+
+
+
+
+
+
+ Skill Name
+ Modifiers
+
+
+
+
+
+
+
+
+
Talents and Special Abilities
+
+
+
+ Name
+ Summary
+
+
+
+
+
+
+
+
+
+
Force Powers
+
+
+
+ Power Name
+ Summary
+
+
+
+
+
+
+
+
+
+
Signature Abilities
+
+
+
+ Ability Name
+ Summary
+
+
+
+
+
+
+
+
+
+
+
+
+
Armor
+
+
+
+
+
+
+
View Attachments
+
+
+
+
+
+
+
+
+
Cybernetics
+
+
+
+ Make/Model
+ Bonus
+
+
+
+
+
+
+
+
+
+
+
+
Other Gear
+
+
+
+ Personal Gear
+
+
+
+
+
+
+
+
+
+ Assets & Resources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Starship
+
+
Planetary
+
+
Beast
+
+
+
+
+
+
+
+
+
+
+
+ Character Name
+ Role (Pilot, Co-pilot, Engineer)
+ Dice
+ Special
+ Skill
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Character Name
+ Weapon Name
+ Arc
+ Crit
+ Dmg
+ Range/Skill
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name
+ Hard points
+ Base Modifiers
+ Modifications
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Character Name
+ Role (Pilot, Co-pilot, Engineer)
+ Dice
+ Special
+ Skill
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Character Name
+ Weapon Name
+ Arc
+ Crit
+ Dmg
+ Range/Skill
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Name
+ Hard points
+ Base Modifiers
+ Modifications
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Notable Features
+
+
+
+
+
+
+
+
+
+
+
+ Other Information
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Abilities
+
+
+
+ Name
+ Ability Summary
+
+
+
+
+
+
+
+
+
+
+
Attacks
+
+
+
+
+
+
View Attachments
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Base of Operations
+
+
Shared Resources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Upgrades
+
+
+
+ Upgrade Type:
+ Description
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Upgrades
+
+
+
+ Upgrade Type:
+ Description
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Upgrades
+
+
+
+ Upgrade Type:
+ Description
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Companion Info
+
+
Skills, Talents, Weapons & Powers
+
+
Item Inventory
+
+
+
+
+
+
+
+
+
+ Notable Features
+
+
+
+
+
+
+
+
+
+
+
+ Other
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Weapons
+
+
+
+
+
+
+
View Attachments
+
+
+
+
+
+
+
+
+
+
+
Talents and Special Abilities
+
+
+
+ Name
+ Ability Summary
+
+
+
+
+
+
+
+
+
+
+
+
Force Powers
+
+
+
+ Name
+ Power Summary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Armor
+
+
+
+
+
+
View Attachments
+
+
+
+
+
+
+
+
+
+
Cybernetics
+
+
+
+ Make/Model
+ Bonus
+
+
+
+
+
+
+
+
+
+
+
+
Other Gear
+
+
+
+ Personal Gear
+
+
+
+
+
+
+
+
+
+ Assets & Resources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Group Details
+
+
Campaign Details
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Specific Details
+
+
+
+ Mission Objectives:
+
+
+
+ Key Items:
+
+
+
+ Mission Contacts:
+
+
+
+
+
+
+
+
+
+
+
+
+ NPC Name
+ Type (Minion, Rival, or Nemesis)
+ Number
+ Skill
+ Modifiers
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Star Wars FFG API-Compatible/FFG-SWRPG-Dice-Roller.js b/Star Wars FFG API-Compatible/FFG-SWRPG-Dice-Roller.js
new file mode 100644
index 0000000000..4d2fe3f735
--- /dev/null
+++ b/Star Wars FFG API-Compatible/FFG-SWRPG-Dice-Roller.js
@@ -0,0 +1,3525 @@
+/*
+Version Info:
+Version 4.0.2.17
+*/
+
+/* Begin Sheet Character Sheet Auto Creator */
+
+var Charsheet = Charsheet || {};
+
+on('chat:message', function (msg) {
+ // Exit if not an api command
+ if (msg.type != "api") {
+ return;
+ }
+
+ if (msg.content.indexOf('!charsheet') != -1) {
+ Charsheet.Generate(msg);
+ }
+});
+
+Charsheet.Generate = function (msg) {
+ var player = msg.who;
+ var character_name = msg.who + Date.now();
+
+ var character = createObj('character', {
+ gmnotes: 'Player: ' + player + ' Generated by script Charsheet.js',
+ archived: false,
+ inplayerjournals: msg.playerid,
+ controlledby: msg.playerid
+ });
+
+ /* Create attributes */
+ createObj('attribute', {
+ name: 'player_name',
+ current: player,
+ _characterid: character.id
+ });
+ createObj('attribute', {
+ name: 'name',
+ current: character_name,
+ _characterid: character.id
+ })
+
+ sendChat(player, "/me created a character named \"" + character_name + "\"!");
+};
+
+if (!Date.now) {
+ Date.now = function now() {
+ return new Date().getTime();
+ };
+}
+/* End Sheet Character Sheet Auto Creator */
+
+/*
+ Current Version: 4.0.2.4
+ Last updated: 11.17.2015
+ Character Sheet and Script Maintained by: GM Knowledge Rhino
+ Current and Developement Verions: https://github.com/KnowledgeRhino/FFG-SWRPG-CharacterSheet-For-Roll20.git
+ Older Verions: https://github.com/dayst/StarWarsEdgeOfTheEmpire_Dice
+
+ Credits:
+ Original creator: Konrad J.
+ Helped with Dice specs: Alicia G. and Blake the Lake
+ Dice graphics hosted by Alicia G. at galacticcampaigns.com
+ Dice graphics borrowed from the awesome google+ hangouts EotE Dice App
+ Character Sheet and Advanced Dice Roller: Steve Day
+ GM Sheet Campaign Details design idea: www.reddit.com/user/JohnSquiggleton
+ Sheet Autocreator: www.reddit.com/user/lowdownfool
+ New Tab Design: Steve D., GM Knowledge Rhino, and Loki
+ Skill Description by: Gribble - https://dl.dropboxusercontent.com/u/9077657/SW-EotE-Reference-Sheets.pdf
+ Critical Descriptions by: Gribble - https://dl.dropboxusercontent.com/u/9077657/SW-EotE-Reference-Sheets.pdf
+ Debugger: Arron
+ Initiative Roller: Andrew H.
+ Opposed Roller: Tom F.
+ Work done by GM Knowledge Rhino:
+ Group Tab
+ Companion Tab
+ GM Resources
+ ReDesign of Vehicle Tabs
+
+ API Chat Commands
+
+ Settings:
+ Log
+ * default: 'on' and 'single'
+ * Description: Sets the visual output in the chat window for the dice rolls
+ * Command: !eed log on|off|multi|single
+
+ Graphics
+ * default: 'on' and 'm'
+ * Description: Sets chat window dice output as graphic, small, medium, or large if "on" or as text if "off"
+ * Command: !eed graphics on|off|s|m|l
+
+ Test
+ * Description: Output every side of every die to the chat window
+ * !eed test
+
+ Debug
+ * default: 'off'
+ * DescriptionL Sets the logging level of the script in the API console. If you are having issues with the
+ * script rolling incorect dice, turn on debug logging and post the result in the forums. No need to restart the
+ * script with this command.
+ * Command: !eed debug on|off
+
+ Roll:
+ Label
+ * default: null
+ * Description: set the skill name of the roll
+ * Command: !eed label(Name of Skill)
+
+ Initiative
+ * default: false
+ * Description: Set NPC/PC initiative true
+ * Command: !eed npcinit or pcinit and #b #g #y #blk #p #r #w
+
+ Skill
+ * default:
+ * Description: create the ability and proficiency dice for a skill check
+ * Command: !eed skill(char_value|skill_value)
+
+ Opposed
+ * default:
+ * Description: create the difficulty and challenge dice for an opposed skill check
+ * Command: !eed opposed(char_value|skill_value)
+
+ Dice
+ * default:
+ * Description: Loop thru the dice and adds or subtracts them from the dice object
+ * Command: !eed #g #y #b #blk #r #p #w #s #f #a #t
+
+ Upgrade
+ * default:
+ * Description: upgrades ability and difficulty dice
+ * Command: !eed upgrade(ability|#) or upgrade(difficulty|#)
+
+ Downgrade
+ * default:
+ * Description: downgrades proficiency and challenge dice
+ * Command: !eed downgrade(proficiency|#) or downgrade(challenge|#)
+
+ destiny
+ * default:
+ * Description: Rolls 1w die and adds the result to the destiny pool
+ * Command: !eed #w destiny doRoll
+
+ Other:
+ charsheet
+ * default:
+ * Description: Generates a blank character sheet and automatically makes it viewable and editable by the person calling the script.
+ * Command: !charsheet
+*/
+
+var eote = {}
+
+eote.init = function () {
+ eote.setCharacterDefaults();
+ eote.createGMDicePool();
+ eote.events();
+}
+
+eote.defaults = {
+ globalVars: {
+ diceLogChat: true,
+ diceGraphicsChat: true,
+ diceGraphicsChatSize: 30,//medium size
+ diceTextResult: "",
+ diceTextResultLog: "",
+ diceGraphicResult: "",
+ diceGraphicResultLog: "",
+ diceTestEnabled: false,
+ diceLogRolledOnOneLine: true,
+ scriptDebug: false
+ },
+ '-DicePoolID': '',
+ character: {
+ attributes: [
+ /* Don't need to update characterID
+ *
+ *{
+ name : "characterID",
+ current : "UPDATES TO CURRENT ID",
+ max : "",
+ update : false
+ }*/
+ ],
+ ablities: [],
+ },
+ graphics: {
+ SIZE: {
+ SMALL: 20,
+ MEDIUM: 30,
+ LARGE: 40
+ },
+ ABILITY: {
+ BLANK: "http://galacticcampaigns.com/images/EotE/Ability/abilityBlank.png",
+ A: "http://galacticcampaigns.com/images/EotE/Ability/abilityA.png",
+ AA: "http://galacticcampaigns.com/images/EotE/Ability/abilityAA.png",
+ S: "http://galacticcampaigns.com/images/EotE/Ability/abilityS.png",
+ SA: "http://galacticcampaigns.com/images/EotE/Ability/abilitySA.png",
+ SS: "http://galacticcampaigns.com/images/EotE/Ability/abilitySS.png"
+ },
+ BOOST: {
+ BLANK: "http://galacticcampaigns.com/images/EotE/Boost/boostBlank.png",
+ A: "http://galacticcampaigns.com/images/EotE/Boost/boostA.png",
+ AA: "http://galacticcampaigns.com/images/EotE/Boost/boostAA.png",
+ S: "http://galacticcampaigns.com/images/EotE/Boost/boostS.png",
+ SA: "http://galacticcampaigns.com/images/EotE/Boost/boostSA.png"
+ },
+ CHALLENGE: {
+ BLANK: "http://galacticcampaigns.com/images/EotE/Challenge/ChallengeBlank.png",
+ F: "http://galacticcampaigns.com/images/EotE/Challenge/ChallengeF.png",
+ FF: "http://galacticcampaigns.com/images/EotE/Challenge/ChallengeFF.png",
+ FT: "http://galacticcampaigns.com/images/EotE/Challenge/ChallengeFT.png",
+ T: "http://galacticcampaigns.com/images/EotE/Challenge/ChallengeT.png",
+ TT: "http://galacticcampaigns.com/images/EotE/Challenge/ChallengeTT.png",
+ DESPAIR: "http://galacticcampaigns.com/images/EotE/Challenge/ChallengeDespair.png"
+ },
+ DIFFICULTY: {
+ BLANK: "http://galacticcampaigns.com/images/EotE/Difficulty/DifficultyBlank.png",
+ F: "http://galacticcampaigns.com/images/EotE/Difficulty/DifficultyF.png",
+ FF: "http://galacticcampaigns.com/images/EotE/Difficulty/DifficultyFF.png",
+ FT: "http://galacticcampaigns.com/images/EotE/Difficulty/DifficultyFT.png",
+ T: "http://galacticcampaigns.com/images/EotE/Difficulty/DifficultyT.png",
+ TT: "http://galacticcampaigns.com/images/EotE/Difficulty/DifficultyTT.png"
+ },
+ FORCE: {
+ D: "http://galacticcampaigns.com/images/EotE/Force/ForceD.png",
+ DD: "http://galacticcampaigns.com/images/EotE/Force/ForceDD.png",
+ L: "http://galacticcampaigns.com/images/EotE/Force/ForceL.png",
+ LL: "http://galacticcampaigns.com/images/EotE/Force/ForceLL.png"
+ },
+ PROFICIENCY: {
+ BLANK: "http://galacticcampaigns.com/images/EotE/Proficiency/ProficiencyBlank.png",
+ A: "http://galacticcampaigns.com/images/EotE/Proficiency/ProficiencyA.png",
+ S: "http://galacticcampaigns.com/images/EotE/Proficiency/ProficiencyS.png",
+ SA: "http://galacticcampaigns.com/images/EotE/Proficiency/ProficiencySA.png",
+ SS: "http://galacticcampaigns.com/images/EotE/Proficiency/ProficiencySS.png",
+ AA: "http://galacticcampaigns.com/images/EotE/Proficiency/ProficiencyAA.png",
+ TRIUMPH: "http://galacticcampaigns.com/images/EotE/Proficiency/ProficiencyTriumph.png"
+ },
+ SETBACK: {
+ BLANK: "http://galacticcampaigns.com/images/EotE/Setback/SetBackBlank.png",
+ F: "http://galacticcampaigns.com/images/EotE/Setback/SetBackF.png",
+ T: "http://galacticcampaigns.com/images/EotE/Setback/SetBackT.png"
+ },
+ SYMBOLS: {
+ A: "http://galacticcampaigns.com/images/EotE/Symbols/A.png",
+ S: "http://galacticcampaigns.com/images/EotE/Symbols/S.png",
+ T: "http://galacticcampaigns.com/images/EotE/Symbols/T.png",
+ F: "http://galacticcampaigns.com/images/EotE/Symbols/F.png",
+ TRIUMPH: "http://galacticcampaigns.com/images/EotE/Symbols/Triumph.png",
+ DESPAIR: "http://galacticcampaigns.com/images/EotE/Symbols/Despair.png",
+ L: "http://galacticcampaigns.com/images/EotE/Symbols/L.png",
+ D: "http://galacticcampaigns.com/images/EotE/Symbols/D.png"
+ }
+ },
+ regex: {
+ cmd: /!eed/,
+ log: /log (on|multi|single|off)/,
+ debug: /debug (on|off)/,
+ graphics: /graphics (on|off|s|m|l)/,
+ test: /test/,
+ resetdice: /(resetgmdice|resetdice)/,
+ initiative: /\bnpcinit|\bpcinit/,
+ characterID: /characterID\((.*?)\)/,
+ rollPlayer: /rollPlayer(\(.*?\))/,
+ label: /label\((.*?)\)/,
+ skill: /skill\((.*?)\)/g,
+ opposed: /opposed\((.*?)\)/g,
+ upgrade: /upgrade\((.*?)\)/g,
+ downgrade: /downgrade\((.*?)\)/g,
+ gmdice: /\(gmdice\)/,
+ encum: /encum\((.*?)\)/g,
+ dice: /(-?\d{1,2}blk)\b|(-?\d{1,2}b)\b|(-?\d{1,2}g)\b|(-?\d{1,2}y)\b|(-?\d{1,2}p)\b|(-?\d{1,2}r)\b|(-?\d{1,2}w)\b|(-?\d{1,2}a)\b|(-?\d{1,2}s)|(-?\d{1,2}t)\b|(-?\d{1,2}f)/g,
+ crit: /crit\((.*?)\)/,
+ critShip: /critship\((.*?)\)/,
+ unusable: /unusableWeapon/,
+ destiny: /destiny (useDark|useLight|registerPlayer|sendUpdate|doRoll|clearPool)/,
+ },
+ destinyListeners: []
+}
+
+eote.createGMDicePool = function () {
+
+ var charObj_DicePool = findObjs({ _type: "character", name: "-DicePool" })[0];
+
+ var attrObj_DicePool = [
+ {
+ name: 'pcgm',
+ current: 3,
+ max: '',
+ update: true
+ },
+ {
+ name: 'gmdicepool',
+ current: 2,
+ max: '',
+ update: true
+ }
+ ];
+
+ //create character -DicePool
+ if (!charObj_DicePool) {
+
+ charObj_DicePool = createObj("character", {
+ name: "-DicePool",
+ bio: "GM Dice Pool"
+ });
+
+ }
+
+ eote.defaults['-DicePoolID'] = charObj_DicePool.id;
+
+ eote.updateAddAttribute(charObj_DicePool, attrObj_DicePool);
+
+}
+
+eote.createObj = function () {//Create Object Fix - Firebase.set failed
+ var obj = createObj.apply(this, arguments);
+ var id = obj.id;
+ var characterID = obj.get('characterid');
+ var type = obj.get('type');
+ if (obj && !obj.fbpath && obj.changed) {
+ obj.fbpath = obj.changed._fbpath.replace(/([^\/]*\/){4}/, "/");
+ } else if (obj && !obj.changed && type == 'attribute') { //fix for dynamic attribute after in character created in game
+ obj.fbpath = '/char-attribs/char/' + characterID + '/' + id;
+ // /char-attribs/char/characterID/attributeID
+ }
+
+ return obj;
+}
+
+eote.setCharacterDefaults = function (characterObj) {
+
+ var charObj = [characterObj];
+
+ if (!characterObj) {
+ charObj = findObjs({ _type: "character" });
+ }
+
+ //add/update characterID field
+ _.each(charObj, function (charObj) {
+
+ //updates default attr:CharacterID to current character id
+ //_.findWhere(eote.defaults.character.attributes, {'name':'characterID'}).current = charObj.id;
+
+ //Attributes
+ eote.updateAddAttribute(charObj, eote.defaults.character.attributes);//Update Add Attribute defaults
+
+ //Abilities
+
+ });
+}
+
+eote.updateListeners = function (attributes) {
+
+ _.each(eote.defaults.destinyListeners, function (charID) {
+
+ var charObj = findObjs({
+ _type: "character",
+ _id: charID
+ });
+
+ //add/update characterID feild
+ _.each(charObj, function (charObj) {
+
+ //Attributes
+ eote.updateAddAttribute(charObj, attributes); //Update Add Attribute defaults
+
+ });
+ });
+
+ //Update GM
+ var GMObj = findObjs({
+ _type: "character",
+ _id: eote.defaults['-DicePoolID']
+ });
+ eote.updateAddAttribute(GMObj, attributes);
+}
+
+eote.updateAddAttribute = function (charactersObj, updateAddAttributesObj) { // charactersObj = object or array objects, updateAddAttributesObj = object or array objects
+
+ //check if object or array
+ if (!_.isArray(charactersObj)) {
+ charactersObj = [charactersObj];
+ }
+
+ if (!_.isArray(updateAddAttributesObj)) {
+ updateAddAttributesObj = [updateAddAttributesObj];
+ }
+
+ _.each(charactersObj, function (characterObj) {//loop characters
+
+ var characterName = '';
+
+ if (characterObj.name) {
+ characterName = characterObj.name;
+ } else {
+ characterName = characterObj.get('name');
+ }
+
+ //find attribute via character ID
+ var characterAttributesObj = findObjs({ _type: "attribute", characterid: characterObj.id });
+
+ if (updateAddAttributesObj.length != 0) {
+
+ log('UPDATE/ADD ATTRIBUTES FOR:----------------------->' + characterName);
+
+
+ _.each(updateAddAttributesObj, function (updateAddAttrObj) { //loop attributes to update / add
+
+ attr = _.find(characterAttributesObj, function (a) {
+ return (a.get('name') === updateAddAttrObj.name);
+ });
+
+ if (attr) {
+ if (updateAddAttrObj.update) {
+ log('Update Attr: ' + updateAddAttrObj.name);
+ attr.set({ current: updateAddAttrObj.current });
+ attr.set({ max: updateAddAttrObj.max ? updateAddAttrObj.max : '' });
+ }
+ } else {
+ log('Add Attr: ' + updateAddAttrObj.name);
+ eote.createObj('attribute', {
+ characterid: characterObj.id,
+ name: updateAddAttrObj.name,
+ current: updateAddAttrObj.current,
+ max: updateAddAttrObj.max ? updateAddAttrObj.max : ''
+ });
+ }
+ });
+ }
+ });
+
+}
+
+/* DICE PROCESS
+ *
+ * Matches the different regex commands and runs that dice processing step
+ * The order of step should not be change or dice could be incorrectly rolled.
+ * example: All dice needs to be 'upgraded" before it can be 'downgraded'
+ * ---------------------------------------------------------------- */
+
+eote.defaults.dice = function () {
+ this.vars = {
+ characterName: '',
+ characterID: '',
+ playerName: '',
+ playerID: '',
+ label: ''
+ }
+ this.totals = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0
+ }
+ this.graphicsLog = {
+ Boost: '',
+ Ability: '',
+ Proficiency: '',
+ SetBack: '',
+ Difficulty: '',
+ Challenge: '',
+ Force: '',
+ Success: '',
+ Advantage: '',
+ Threat: '',
+ Failure: ''
+ }
+ this.textLog = {
+ Boost: '',
+ Ability: '',
+ Proficiency: '',
+ SetBack: '',
+ Difficulty: '',
+ Challenge: '',
+ Force: '',
+ Success: '',
+ Advantage: '',
+ Threat: '',
+ Failure: ''
+ }
+ this.count = {
+ boost: 0,
+ ability: 0,
+ proficiency: 0,
+ setback: 0,
+ difficulty: 0,
+ challenge: 0,
+ force: 0,
+ success: 0,
+ advantage: 0,
+ threat: 0,
+ failure: 0
+ }
+}
+
+eote.process = {}
+
+eote.process.logger = function (functionName, cmd) {
+ if (eote.defaults.globalVars.debugScript) {
+ log(functionName + ' : ' + cmd);
+ }
+}
+
+eote.process.setup = function (cmd, playerName, playerID) {
+
+ if (!cmd.match(eote.defaults.regex.cmd)) { //check for api cmd !eed
+ return false;
+ }
+
+ var debugMatch = cmd.match(eote.defaults.regex.debug);
+ if (debugMatch) {
+ eote.process.debug(debugMatch);
+ return false;
+ }
+
+ eote.process.logger("eote.process.setup", "NEW ROLL");
+
+ eote.process.logger("eote.process.setup", "Original Command: " + cmd);
+
+ /* reset dice - test, might not need this
+ * ------------------------------------------------------------- */
+
+ var diceObj = new eote.defaults.dice();
+ diceObj.vars.playerName = playerName;
+ diceObj.vars.playerID = playerID;
+
+ /* Dice config
+ * Description: Change dice roller default config
+ * --------------------------------------------------------------*/
+ var logMatch = cmd.match(eote.defaults.regex.log);
+
+ if (logMatch) {
+ eote.process.log(logMatch);
+ return false; //Stop current roll and run test
+ }
+
+ var graphicsMatch = cmd.match(eote.defaults.regex.graphics);
+
+ if (graphicsMatch) {
+ eote.process.graphics(graphicsMatch);
+ return false; //Stop current roll and run test
+ }
+
+ var testMatch = cmd.match(eote.defaults.regex.test);
+
+ if (testMatch) {
+ eote.process.test(testMatch);
+ return false; //Stop current roll and run test
+ }
+
+ /* Roll information
+ * Description: Set default dice roll information Character Name and Skill Label
+ * --------------------------------------------------------------*/
+
+ var rollPlayerMatch = cmd.match(eote.defaults.regex.rollPlayer);
+
+ if (rollPlayerMatch) {
+ diceObj = eote.process.rollPlayer(rollPlayerMatch, diceObj);
+
+ if (!diceObj) {
+ return false;
+ }
+ }
+
+ var characterIDMatch = cmd.match(eote.defaults.regex.characterID);
+
+ if (characterIDMatch) {
+ diceObj = eote.process.characterID(characterIDMatch, diceObj);
+ //Once Character ID is parsed, remove it from the cmd.
+ //it is possible that the character ID could contain dice values
+ //for ex. characterID(-JMBFmYX1i0L259bjb-X) will add 59 blue dice to the pool
+ cmd = cmd.replace(characterIDMatch[0], '');
+ eote.process.logger("eote.process.setup.characterIDMatch", "New command: " + cmd);
+ }
+
+ var unusableMatch = cmd.match(eote.defaults.regex.unusable);
+
+ if (unusableMatch) {
+ eote.process.logger("eote.process.setup.unusableMatch", "Roll ended because of unusable weapon");
+ sendChat(diceObj.vars.characterName, 'Weapon is too damaged to be used. Try repairing it.');
+ return false;
+ }
+
+ var labelMatch = cmd.match(eote.defaults.regex.label);
+
+ if (labelMatch) {
+ diceObj = eote.process.label(labelMatch, diceObj);
+ }
+
+ /* Dice rolls
+ * Description: Create dice pool before running any custom roll
+ * script commands that may need dice evaluated.
+ * --------------------------------------------------------------*/
+ var gmdiceMatch = cmd.match(eote.defaults.regex.gmdice);
+
+ if (gmdiceMatch) {
+ cmd = eote.process.gmdice(cmd); // update the cmd string to contain the gmdice
+ eote.process.logger("eote.process.setup.gmDice", "New command: " + cmd);
+ }
+
+ var encumMatch = cmd.match(eote.defaults.regex.encum);
+
+ if (encumMatch) {
+ diceObj = eote.process.encum(encumMatch, diceObj);
+ //eote.process.logger("eote.process.setup.encumMatch","New dice:" + diceObj);
+ }
+
+ var skillMatch = cmd.match(eote.defaults.regex.skill);
+
+ if (skillMatch) {
+ diceObj = eote.process.skill(skillMatch, diceObj);
+ }
+
+ var opposedMatch = cmd.match(eote.defaults.regex.opposed);
+
+ if (opposedMatch) {
+ diceObj = eote.process.opposed(opposedMatch, diceObj);
+ }
+
+ var diceMatch = cmd.match(eote.defaults.regex.dice);
+
+ if (diceMatch) {
+ diceObj = eote.process.setDice(diceMatch, diceObj);
+ }
+
+ var upgradeMatch = cmd.match(eote.defaults.regex.upgrade);
+
+ if (upgradeMatch) {
+ diceObj = eote.process.upgrade(upgradeMatch, diceObj);
+ }
+
+ var downgradeMatch = cmd.match(eote.defaults.regex.downgrade);
+
+ if (downgradeMatch) {
+ diceObj = eote.process.downgrade(downgradeMatch, diceObj);
+ }
+
+ /* Roll dice and update success / fail
+ * ------------------------------------------------------------- */
+ diceObj = eote.process.rollDice(diceObj);
+
+ /* Custom rolls
+ * Description: Custom dice components have thier own message, results and
+ * often will return false to not allow proceeding scripts to fire
+ * --------------------------------------------------------------*/
+ var resetdiceMatch = cmd.match(eote.defaults.regex.resetdice);
+
+ if (resetdiceMatch) {
+ eote.process.resetdice(resetdiceMatch, diceObj);
+ return false;
+ }
+
+ var initiativeMatch = cmd.match(eote.defaults.regex.initiative);
+
+ if (initiativeMatch) {
+ eote.process.initiative(initiativeMatch, diceObj);
+ //return false;
+ }
+
+ var destinyMatch = cmd.match(eote.defaults.regex.destiny);
+
+ if (destinyMatch) {
+ eote.process.logger("etoe.process.setup.destiny", "Destiny Point Command");
+ var doRoll = eote.process.destiny(destinyMatch, diceObj);
+ if (!doRoll) {
+ return false;
+ }
+ }
+
+ var critMatch = cmd.match(eote.defaults.regex.crit);
+
+ if (critMatch) {
+ eote.process.crit(critMatch, diceObj);
+ return false;
+ }
+
+ var critShipMatch = cmd.match(eote.defaults.regex.critShip);
+
+ if (critShipMatch) {
+ eote.process.critShip(critShipMatch, diceObj);
+ return false;
+ }
+
+ /* Display dice output in chat window
+ * ------------------------------------------------------------- */
+ eote.process.diceOutput(diceObj, playerName, playerID);
+
+}
+
+/* DICE PROCESS FUNCTION
+ *
+ * ---------------------------------------------------------------- */
+
+eote.process.log = function (cmd) {
+
+ /* Log
+ * default: 'on' and 'single'
+ * Description: Sets the visual output in the chat window for the dice rolls
+ * Command: !eed log on|off|multi|single
+ * ---------------------------------------------------------------- */
+
+ //log(cmd[1]);
+
+ switch (cmd[1]) {
+ case "on": //if 'on' outputs dice to chat window
+ eote.defaults.globalVars.diceLogChat = true;
+ sendChat("Dice Sytem", 'Output rolled dice to chat window "On"');
+ break;
+ case "off": //if 'off' outputs only results to chat window
+ eote.defaults.globalVars.diceLogChat = false;
+ sendChat("Dice Sytem", 'Output rolled dice to chat window "Off"');
+ break;
+ case "multi": //if 'multi' multiple sets dice per line
+ eote.defaults.globalVars.diceLogRolledOnOneLine = false;
+ sendChat("Dice Sytem", 'Mulitple line output "Off"');
+ break;
+ case "single": //if 'single' single set of dice per line
+ eote.defaults.globalVars.diceLogRolledOnOneLine = true;
+ sendChat("Dice Sytem", 'Mulitple line output "On"');
+ break;
+ }
+}
+
+eote.process.debug = function (cmd) {
+ switch (cmd[1]) {
+ case "on":
+ eote.defaults.globalVars.debugScript = true;
+ sendChat("Dice Sytem", 'Debug Script "On"');
+ break;
+ case "off":
+ eote.defaults.globalVars.debugScript = false;
+ sendChat("Dice Sytem", 'Debug Script "Off"');
+ break;
+ }
+}
+
+eote.process.graphics = function (cmd) {
+
+ /* Graphics
+ * default: 'on' and 'm'
+ * Description: Sets chat window dice output as graphic, small, medium, or large if "on" or as text if "off"
+ * Command: !eed graphics on|off|s|m|l
+ * ---------------------------------------------------------------- */
+
+ //log(cmd[1]);
+
+ switch (cmd[1]) {
+ case "on":
+ eote.defaults.globalVars.diceGraphicsChat = true;
+ sendChat("Dice Sytem", 'Chat graphics "On"');
+ break;
+ case "off":
+ eote.defaults.globalVars.diceGraphicsChat = false;
+ sendChat("Dice Sytem", 'Chat graphics "Off"');
+ break;
+ case "s":
+ eote.defaults.globalVars.diceGraphicsChatSize = eote.defaults.graphics.SIZE.SMALL;
+ sendChat("Dice Sytem", 'Chat graphics size "Small"');
+ break;
+ case "m":
+ eote.defaults.globalVars.diceGraphicsChatSize = eote.defaults.graphics.SIZE.MEDIUM;
+ sendChat("Dice Sytem", 'Chat graphics size "Medium"');
+ break;
+ case "l":
+ eote.defaults.globalVars.diceGraphicsChatSize = eote.defaults.graphics.SIZE.LARGE;
+ sendChat("Dice Sytem", 'Chat graphics size "Large"');
+ break;
+ }
+
+}
+
+eote.process.test = function (cmd) {
+
+ eote.process.logger("eote.process.test", cmd);
+
+ //Set test vars to true
+ eote.defaults.globalVars.diceTestEnabled = true;
+ tmpLogChat = eote.defaults.globalVars.diceLogChat;
+ tmpGraphicsChat = eote.defaults.globalVars.diceGraphicsChat;
+ eote.defaults.globalVars.diceLogChat = true;
+ eote.defaults.globalVars.diceGraphicsChat = true;
+
+ //Roll dice
+ eote.process.setup('!eed 1b 1g 1y 1blk 1p 1r 1w', 'GM', 'Dice Test');
+
+ //After test reset vars back
+ eote.defaults.globalVars.diceTestEnabled = false;
+ eote.defaults.globalVars.diceLogChat = tmpLogChat;
+ eote.defaults.globalVars.diceGraphicsChat = tmpGraphicsChat;
+
+}
+
+eote.process.rollPlayer = function (cmd, diceObj) {
+ //Build cmd string
+ //get characterID
+ //get skills
+ //get encum
+ //remove rollPlayer(xxxx) from string
+ var match = {
+ skill: /skill:(.*?)[\|\)]/,
+ encum: /encum/,
+ character: /character:(.*?)[\|\)]/,
+ }
+
+ var charcterMatch = cmd[1].match(match.character);
+
+ if (charcterMatch) {
+
+ var charObj = findObjs({ _type: "character", name: charcterMatch[1] });
+
+ if (charObj.length > 0) {
+
+ diceObj.vars.characterName = charObj[0].get('name');
+ diceObj.vars.characterID = charObj[0].id;
+
+ } else {
+ sendChat("Alert", "Can't find character. Please update character name field to match sheet character name and try again.");
+ return false;
+ }
+ } else {
+ sendChat("Alert", "Please update character name field.");
+ return false;
+ }
+
+ var encumMatch = cmd[1].match(match.encum);
+
+ if (encumMatch) {
+ //encumbrance
+ var attr_1 = getAttrByName(diceObj.vars.characterID, 'encumbrance', 'max');
+ var attr_2 = getAttrByName(diceObj.vars.characterID, 'encumbrance');
+ var cmdEncum = ['encum(' + attr_1 + '|' + attr_2 + ')']; //["encum(3|5)"]
+
+ diceObj = eote.process.encum(cmdEncum, diceObj);
+
+ }
+
+ var skillMatch = cmd[1].match(match.skill);
+
+ if (skillMatch) {
+
+ var attrArray = skillMatch[1].split(',')
+ var attr_1 = getAttrByName(diceObj.vars.characterID, attrArray[0]);
+ var attr_2 = getAttrByName(diceObj.vars.characterID, attrArray[1]);
+ var cmdSkill = ['skill(' + attr_1 + '|' + attr_2 + ')']; //['skill(0|2)']
+
+ diceObj = eote.process.skill(cmdSkill, diceObj);
+ }
+
+ return diceObj;
+
+}
+
+eote.process.destiny = function (cmd, diceObj) {
+
+ var charObj_DicePool = findObjs({ _type: "character", name: "-DicePool" })[0];
+
+ var doRoll = false;
+
+ if (!charObj_DicePool) {
+ sendChat("Dice System", "We can't find the DicePool player! SEND HELP!");
+ return doRoll;
+ }
+
+ //GM's Destiny Point Pool
+ var currentLightSidePoints = findObjs({
+ _characterid: charObj_DicePool.get("_id"),
+ _type: "attribute",
+ _name: "lightSidePoints"
+ });
+ var currentDarkSidePoints = findObjs({
+ _characterid: charObj_DicePool.get("_id"),
+ _type: "attribute",
+ _name: "darkSidePoints"
+ });
+
+ if (!currentDarkSidePoints[0] || !currentLightSidePoints[0]) {
+ sendChat("Dice System", "No Destiny Points Defined. GM needs to add points then update players.");
+ return doRoll;
+ }
+
+ var darkSide = parseInt(currentDarkSidePoints[0].get("current"));
+ var lightSide = parseInt(currentLightSidePoints[0].get("current"));
+
+ switch (cmd[1]) {
+ case "useDark":
+ if (darkSide > 0) {
+ sendChat("The GM", "Uses a dark side point!");
+ darkSide = darkSide - 1;
+ lightSide = lightSide + 1;
+ }
+ else {
+ sendChat("Dice System", "No dark side points to use!");
+ return doRoll;
+ }
+ break;
+ case "useLight":
+ if (lightSide > 0) {
+ sendChat(diceObj.vars.characterName, "Uses a light side point!");
+ lightSide = lightSide - 1;
+ darkSide = darkSide + 1;
+ }
+ else {
+ sendChat("Dice System", "No light side points to use!");
+ return doRoll;
+ }
+ break;
+ case "doRoll":
+ sendChat(diceObj.vars.characterName, "Rolling Destiny Point");
+ doRoll = true;
+ case "registerPlayer":
+ if (!doRoll) {
+ sendChat(diceObj.vars.characterName, "Regestering with Destiny Pool");
+ }
+ darkSide = darkSide + diceObj.totals.dark;
+ lightSide = lightSide + diceObj.totals.light;
+
+ //Register
+ if (eote.defaults.destinyListeners.indexOf(diceObj.vars.characterID) == -1) {
+ eote.defaults.destinyListeners.push(diceObj.vars.characterID);
+ }
+
+ break;
+ case "sendUpdate":
+ sendChat("Dice System", "Updating Players Destiny Pools");
+ break;
+ case "clearPool":
+ sendChat("Dice System", "Clearing The Destiny Pool");
+ lightSide = 0;
+ darkSide = 0;
+ break;
+ }
+
+ var newDestPool = [
+ {
+ name: 'lightSidePoints',
+ current: lightSide,
+ max: '',
+ update: true
+ },
+ {
+ name: 'darkSidePoints',
+ current: darkSide,
+ max: '',
+ update: true
+ }
+ ];
+
+ eote.updateListeners(newDestPool);
+
+ return doRoll;
+}
+
+eote.process.characterID = function (cmd, diceObj) {
+
+ /* CharacterId
+ * default: null
+ * Description: looks up the characters name based on character ID
+ * Command: !eed characterID(##########)
+ * ---------------------------------------------------------------- */
+
+ eote.process.logger("eote.process.characterID", cmd);
+
+ var characterID = cmd[1];
+
+ if (characterID) {
+
+ diceObj.vars.characterName = getObj("character", characterID).get('name');
+ diceObj.vars.characterID = characterID;
+
+ }
+
+ return diceObj;
+
+}
+
+eote.process.label = function (cmd, diceObj) {
+
+ /* Label
+ * default: null
+ * Description: set the skill name of the roll
+ * Command: !eed label(Name of Skill)
+ * ---------------------------------------------------------------- */
+ //log(cmd);
+
+ var label = cmd[1];
+
+ if (label) {
+
+ var labelStr = '';
+ var labelArray = label.split('|');
+
+ _.each(labelArray, function (labelVal) {
+ var labelArray = labelVal.split(':');
+ var label = labelArray[0];
+ var message = labelArray[1];
+
+ labelStr = labelStr + '' + label + ': ' + message + ' ';
+ });
+
+ diceObj.vars.label = labelStr;
+ }
+
+ return diceObj;
+
+}
+
+eote.process.resetdice = function (cmd, diceObj) {
+
+ var characterObj = [{ name: diceObj.vars.characterName, id: diceObj.vars.characterID }];
+
+ eote.process.logger("eote.process.resetdice", cmd);
+
+ if (cmd[1] == 'resetdice') {
+ var resetdice = [
+ {
+ name: "b",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "g",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "y",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "blk",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "r",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "p",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "w",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "upgradeAbility",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "downgradeProficiency",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "upgradeDifficulty",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "downgradeChallenge",
+ current: 0,
+ max: "",
+ update: true
+ }
+ ]
+ }
+
+ if (cmd[1] == 'resetgmdice') {
+ var resetdice = [
+ {
+ name: "bgm",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "ggm",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "ygm",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "blkgm",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "rgm",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "pgm",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "wgm",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "upgradeAbilitygm",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "downgradeProficiencygm",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "upgradeDifficultygm",
+ current: 0,
+ max: "",
+ update: true
+ },
+ {
+ name: "downgradeChallengegm",
+ current: 0,
+ max: "",
+ update: true
+ }
+ ]
+ }
+
+ eote.updateAddAttribute(characterObj, resetdice);
+
+}
+
+eote.process.initiative = function (cmd, diceObj) {
+
+ /* initiative
+ * default: false
+ * Description: Set NPC/PC initiative true
+ * Command: !eed npcinit or pcinit
+ * ---------------------------------------------------------------- */
+
+ var type = '';
+ var NumSuccess = diceObj.totals.success;
+ var NumAdvantage = diceObj.totals.advantage;
+ var turnorder;
+
+ eote.process.logger("eote.process.initiative.diceObj", diceObj);
+ eote.process.logger("eote.process.initiative.NumSuccess", NumSuccess);
+ eote.process.logger("eote.process.initiativeNumAdvantage", NumAdvantage);
+
+ if (Campaign().get("turnorder") == "") turnorder = []; //NOTE: We check to make sure that the turnorder isn't just an empty string first. If it is treat it like an empty array.
+ else turnorder = JSON.parse(Campaign().get("turnorder"));
+
+ if (cmd[0] == 'pcinit') {
+ type = 'PC';
+ }
+
+ if (cmd[0] == 'npcinit') {
+ type = 'NPC';
+ }
+
+ //Add a new custom entry to the end of the turn order.
+ turnorder.push({
+ id: "-1",
+ pr: NumSuccess + ":" + NumAdvantage,
+ custom: type
+ });
+
+ turnorder.sort(function (x, y) {
+ var a = x.pr.split(":");
+ var b = y.pr.split(":");
+
+
+ if (b[0] - a[0] != 0) {//First rank on successes
+ return b[0] - a[0];
+ } else if (b[1] - a[1] != 0) {//Then rank on Advantage
+ return b[1] - a[1];
+ } else { //If they are still tied, PC goes first
+
+ if (x.custom == y.custom) {
+ return 0;
+ } else if (x.custom == "NPC") {
+ return 1;
+ } else {
+ return -1;
+ }
+ }
+ });
+
+ Campaign().set("turnorder", JSON.stringify(turnorder));
+
+ //sendChat(diceObj.vars.characterName, 'Rolls initiative');
+
+}
+
+eote.process.crit = function (cmd, diceObj) {
+
+ /* Crit
+ * default:
+ * Description: Rolls critical injury table
+ * Command: !eed crit(roll) crit(roll|#) crit(heal|#)
+ * ---------------------------------------------------------------- */
+
+ eote.process.logger("eote.process.crit", "");
+
+ var characterObj = [{ name: diceObj.vars.characterName, id: diceObj.vars.characterID }];
+ var critTable = [
+ {
+ percent: '1 to 5',
+ severity: 1,
+ name: 'Minor Nick',
+ Result: 'Suffer 1 strain.',
+ effect: '',
+ },
+ {
+ percent: '6 to 10',
+ severity: 1,
+ name: 'Slowed Down',
+ Result: 'May only act during last allied Initiative slot on next turn.',
+ effect: '',
+ },
+ {
+ percent: '11 to 15',
+ severity: 1,
+ name: 'Sudden Jolt',
+ Result: 'May only act during last hero Initiative slot on next turn.',
+ effect: '',
+ },
+ {
+ percent: '16 to 20',
+ severity: 1,
+ name: 'Distracted',
+ Result: 'Cannot perform free maneuver on next turn.',
+ effect: '',
+ },
+ {
+ percent: '21 to 25',
+ severity: 1,
+ name: 'Off-Balance',
+ Result: 'Add 1 Setback die to next skill check.',
+ effect: '',
+ },
+ {
+ percent: '26 to 30',
+ severity: 1,
+ name: 'Discouraging Wound',
+ Result: 'Flip one light destiny to dark.',
+ effect: '',
+ },
+ {
+ percent: '31 to 35',
+ severity: 1,
+ name: 'Stunned',
+ Result: 'Staggered, cannot perform action on next turn.',
+ effect: '',
+ },
+ {
+ percent: '36 to 40',
+ severity: 1,
+ name: 'Stinger',
+ Result: 'Increase difficulty of next check by 1 Difficulty die.',
+ effect: '',
+ },
+ //----------------------------- Severity 2
+ {
+ percent: '41 to 45',
+ severity: 2,
+ name: 'Bowled Over',
+ Result: 'Knocked prone and suffer 1 strain.',
+ effect: '',
+ },
+ {
+ percent: '46 to 50',
+ severity: 2,
+ name: 'Head Ringer',
+ Result: 'Increase difficulty of all Intellect and Cunning checks by 1 Difficulty die until end of encounter.',
+ effect: '',
+ },
+ {
+ percent: '51 to 55',
+ severity: 2,
+ name: 'Fearsome Wound',
+ Result: 'Increase difficulty of all Presence and Willpower checks by 1 Difficulty die until end of encounter.',
+ effect: '',
+ },
+ {
+ percent: '56 to 60',
+ severity: 2,
+ name: 'Agonizing Wound',
+ Result: 'Increase difficulty of all Brawn and Agility checks by 1 Difficulty die until end of encounter.',
+ effect: '',
+ },
+ {
+ percent: '61 to 65',
+ severity: 2,
+ name: 'Slightly Dazed',
+ Result: 'Add 1 Setback die to all skill checks until end of encounter.',
+ effect: '',
+ },
+ {
+ percent: '66 to 70',
+ severity: 2,
+ name: 'Scattered Senses',
+ Result: 'Remove all Boost dice from all skill checks until end of encounter.',
+ effect: '',
+ },
+ {
+ percent: '71 to 75',
+ severity: 2,
+ name: 'Hamstrung',
+ Result: 'Lose free maneuver until end of encounter.',
+ effect: '',
+ },
+ {
+ percent: '76 to 80',
+ severity: 2,
+ name: 'Staggered',
+ Result: 'Attacker may immediately attempt another free attack against you using same dice pool as original attack.',
+ effect: '',
+ },
+ {
+ percent: '81 to 85',
+ severity: 2,
+ name: 'Winded',
+ Result: 'Cannot voluntarily suffer strain to activate abilities or gain additional maneuvers until end of encounter.',
+ effect: '',
+ },
+ {
+ percent: '86 to 90',
+ severity: 2,
+ name: 'Compromised',
+ Result: 'Increase difficulty of all skill checks by 1 Difficulty die until end of encounter.',
+ effect: '',
+ },
+ //---------------------------------------- Severity 3
+ {
+ percent: '91 to 95',
+ severity: 3,
+ name: 'At the Brink',
+ Result: 'Suffer 1 strain each time you perform an action.',
+ effect: '',
+ },
+ {
+ percent: '96 to 100',
+ severity: 3,
+ name: 'Crippled',
+ Result: 'Limb crippled until healed or replaced. Increase difficulty of all checks that use that limb by 1 Difficulty die.',
+ effect: '',
+ },
+ {
+ percent: '101 to 105',
+ severity: 3,
+ name: 'Maimed',
+ Result: 'Limb permanently lost. Unless you have a cybernetic replacement, cannot perform actions that use that limb. Add 1 Setback to all other actions.',
+ effect: '',
+ },
+ {
+ percent: '106 to 110',
+ severity: 3,
+ name: 'Horrific Injury',
+ Result: 'Roll 1d10 to determine one wounded characteristic -- roll results(1-3 = Brawn, 4-6 = Agility, 7 = Intellect, 8 = Cunning, 9 = Presence, 10 = Willpower. Until Healed, treat characteristic as one point lower.',
+ effect: '',
+ },
+ {
+ percent: '111 to 115',
+ severity: 3,
+ name: 'Temporarily Lame',
+ Result: 'Until healed, may not perform more than one maneuver each turn.',
+ effect: '',
+ },
+ {
+ percent: '116 to 120',
+ severity: 3,
+ name: 'Blinded',
+ Result: 'Can no longer see. Upgrade the difficulty of Perception and Vigilance checks three times, and all other checks twice.',
+ effect: '',
+ },
+ {
+ percent: '121 to 125',
+ severity: 3,
+ name: 'Knocked Senseless',
+ Result: 'You can no longer upgrade dice for checks.',
+ effect: '',
+ },
+ //---------------------------------------- Severity 4
+ {
+ percent: '126 to 130',
+ severity: 4,
+ name: 'Gruesome Injury',
+ Result: 'Roll 1d10 to determine one wounded characteristic -- roll results(1-3 = Brawn, 4-6 = Agility, 7 = Intellect, 8 = Cunning, 9 = Presence, 10 = Willpower. Characteristic is permanently one point lower.',
+ effect: '',
+ },
+ {
+ percent: '131 to 140',
+ severity: 4,
+ name: 'Bleeding Out',
+ Result: 'Suffer 1 wound and 1 strain every round at the beginning of turn. For every 5 wounds suffered beyond wound threshold, suffer one additional Critical Injury (ignore the details for any result below this result).',
+ effect: '',
+ },
+ {
+ percent: '141 to 150',
+ severity: 4,
+ name: 'The End is Nigh',
+ Result: 'Die after the last Initiative slot during the next round.',
+ effect: '',
+ },
+ {
+ percent: '151',
+ severity: 4,
+ name: 'Dead',
+ Result: 'Complete, absolute death.',
+ effect: '',
+ }
+ ];
+
+ var critRoll = function (addCritNum) {
+
+ var openSlot = false;
+ var diceRoll = '';
+ var critMod = '';
+ var rollTotal = '';
+ var rollOffset = parseInt(getAttrByName(diceObj.vars.characterID, 'critAddOffset'));
+ rollOffset = rollOffset ? rollOffset : 0;
+ eote.process.logger("critRoll", "rollOffset: " + rollOffset)
+ var totalcrits = 0;
+
+ //check open critical spot
+ for (i = 15; i >= 1; i--) {
+
+ var slot = getAttrByName(diceObj.vars.characterID, 'critOn' + i);
+
+ if (slot == '0' || slot == '') {
+ openSlot = i;
+ } else {
+ totalcrits = totalcrits + 1;
+ }
+ }
+
+ if (!openSlot) {
+ sendChat("Alert", "Why are you not dead!");
+ return false;
+ }
+
+ //roll random
+ if (!addCritNum) {
+ diceRoll = randomInteger(100);
+ critMod = (totalcrits * 10);
+ rollTotal = diceRoll + critMod + rollOffset;
+ eote.process.logger("critRoll", "diceRoll: " + diceRoll);
+ eote.process.logger("critRoll", "critMod: " + critMod);
+ eote.process.logger("critRoll", "rollTotal " + rollTotal);
+ } else {
+ rollTotal = parseInt(addCritNum);
+ }
+
+ //find crit in crital table
+ for (var key in critTable) {
+
+ var percent = critTable[key].percent.split(' to ');
+ var low = parseInt(percent[0]);
+ var high = percent[1] ? parseInt(percent[1]) : 1000;
+
+ if ((rollTotal >= low) && (rollTotal <= high)) {
+
+ critAttrs = [
+ {
+ name: 'critName' + openSlot,
+ current: critTable[key].name,
+ max: '',
+ update: true
+ },
+ {
+ name: 'critSeverity' + openSlot,
+ current: critTable[key].severity,
+ max: '',
+ update: true
+ },
+ {
+ name: 'critRange' + openSlot,
+ current: critTable[key].percent,
+ max: '',
+ update: true
+ },
+ {
+ name: 'critSummary' + openSlot,
+ current: critTable[key].Result,
+ max: '',
+ update: true
+ },
+ {
+ name: 'critOn' + openSlot,
+ current: openSlot,
+ max: '',
+ update: true
+ }
+ ];
+
+ eote.updateAddAttribute(characterObj, critAttrs);
+
+ var chat = '/direct Rolls Critical Injury ';
+ chat = chat + ' '
+ chat = chat + 'Current Criticals: (' + totalcrits + ' x 10) ';
+ if (rollOffset) {
+ chat = chat + 'Dice Roll Offset: ' + rollOffset + ' ';
+ }
+ chat = chat + 'Dice Roll: ' + diceRoll + ' ';
+ chat = chat + 'Total: ' + rollTotal + ' ';
+ chat = chat + ' ';
+ chat = chat + '' + critTable[key].name + ' ';
+ chat = chat + critTable[key].Result + ' ';
+
+ sendChat(diceObj.vars.characterName, chat);
+
+ }
+ }
+ }
+
+ var critHeal = function (critID) {
+
+ critAttrs = [
+ {
+ name: 'critName' + critID,
+ current: '',
+ max: '',
+ update: true
+ },
+ {
+ name: 'critSeverity' + critID,
+ current: '',
+ max: '',
+ update: true
+ },
+ {
+ name: 'critRange' + critID,
+ current: '',
+ max: '',
+ update: true
+ },
+ {
+ name: 'critSummary' + critID,
+ current: '',
+ max: '',
+ update: true
+ },
+ {
+ name: 'critOn' + critID,
+ current: 0,
+ max: '',
+ update: true
+ }
+ ];
+
+ eote.updateAddAttribute(characterObj, critAttrs);
+
+ }
+
+
+ var critArray = cmd[1].split('|');
+ var prop1 = critArray[0];
+ var prop2 = critArray[1] ? critArray[1] : null;
+
+ if (prop1 == 'heal') {
+ critHeal(prop2);
+ } else if (prop1 == 'add') {
+ critRoll(prop2);
+ } else { // crit(roll)
+ critRoll();
+ }
+
+}
+
+eote.process.critShip = function (cmd, diceObj) {
+
+ /* CritShip
+ * default:
+ * Description: Rolls vehicle critical table, Both crit() and critShip() function the same
+ * Command: !eed critShip(roll) critShip(roll|#) critShip(heal|#)
+ * ---------------------------------------------------------------- */
+
+ var characterObj = [{ name: diceObj.vars.characterName, id: diceObj.vars.characterID }];
+
+ var critTable = [
+ {
+ percent: '1 to 9',
+ severity: 1,
+ name: 'Mechanical Stress',
+ Result: 'Ship or vehicle suffers 1 system strain.',
+ effect: '',
+ },
+ {
+ percent: '10 to 18',
+ severity: 1,
+ name: 'Jostled',
+ Result: 'All crew members suffer 1 strain.',
+ effect: '',
+ },
+ {
+ percent: '19 to 27',
+ severity: 1,
+ name: 'Losing Power to Shields',
+ Result: 'Decrease defense in affected defense zone by 1 until repaired. If ship or vehicle has no defense, suffer 1 system strain.',
+ effect: '',
+ },
+ {
+ percent: '28 to 36',
+ severity: 1,
+ name: 'Knocked Off Course',
+ Result: 'On next turn, pilot cannot execute any maneuvers. Instead, must make a Piloting check to regain bearings and resume course. Difficulty depends on current speed.',
+ effect: '',
+ },
+ {
+ percent: '37 to 45',
+ severity: 1,
+ name: 'Tailspin',
+ Result: 'All firing from ship or vehicle suffers 2 setback dice until end of pilot\'s next turn.',
+ effect: '',
+ },
+ {
+ percent: '46 to 54',
+ severity: 1,
+ name: 'Component Hit',
+ Result: 'One component of the attacker\'s choice is knocked offline, and is rendered inoperable until the end of the following round. See page 245 CRB for Small/Large Vehicle and Ship Component tables. ',
+ effect: '',
+ },
+ // --------------- severity : 2
+ {
+ percent: '55 to 63',
+ severity: 2,
+ name: 'Shields Failing',
+ Result: 'Decrease defense in all defense zones by 1 until repaired. If ship or vehicle has no defense, suffer 2 system strain.',
+ effect: '',
+ },
+ {
+ percent: '64 to 72',
+ severity: 2,
+ name: 'Hyperdrive or Navicomputer Failure',
+ Result: 'Cannot make any jump to hyperspace until repaired. If ship or vehicle has no hyperdrive, navigation systems fail leaving it unable to tell where it is or is going.',
+ effect: '',
+ },
+ {
+ percent: '73 to 81',
+ severity: 2,
+ name: 'Power Fluctuations',
+ Result: 'Pilot cannot voluntarily inflict system strain on the ship until repaired.',
+ effect: '',
+ },
+ // --------------- severity : 3
+ {
+ percent: '82 to 90',
+ severity: 3,
+ name: 'Shields Down',
+ Result: 'Decrease defense in affected defense zone to 0 and all other defense zones by 1 point until repaired. If ship or vehicle has no defense, suffer 4 system strain.',
+ effect: '',
+ },
+ {
+ percent: '91 to 99',
+ severity: 3,
+ name: 'Engine Damaged',
+ Result: 'Ship or vehicle\'s maximum speed reduced by 1, to a minimum of 1, until repaired.',
+ effect: '',
+ },
+ {
+ percent: '100 to 108',
+ severity: 3,
+ name: 'Shield Overload',
+ Result: 'Decrease defense in all defense zones to 0 until repaired. In addition, suffer 2 system strain. Cannot be repaired until end of encounter. If ship or vehicle has no defense, reduce armor by 1 until repaired.',
+ effect: '',
+ },
+ {
+ percent: '109 to 117',
+ severity: 3,
+ name: 'Engines Down',
+ Result: 'Ship or vehicle\'s maximum speed reduced to 0. In addition, ship or vehicle cannot execute maneuvers until repaired. Ship continues on course at current speed and cannot be stopped or course changed until repaired.',
+ effect: '',
+ },
+ {
+ percent: '118 to 126',
+ severity: 3,
+ name: 'Major System Failure',
+ Result: 'One component of the attacker\'s choice is heavily damages, and is inoperable until the critical hit is repaired. See page 245 CRB for Small/Large Vehicle and Ship Component tables. ',
+ effect: '',
+ },
+ // --------------- severity : 4
+ {
+ percent: '127 to 133',
+ severity: 4,
+ name: 'Major Hull Breach',
+ Result: 'Ships and vehicles of silhouette 4 and smaller depressurize in a number of rounds equal to silhouette. Ships of silhouette 5 and larger don\'t completely depressurize, but parts do (specifics at GM discretion). Ships and vehicles operating in atmosphere instead suffer a Destabilized Critical.',
+ effect: '',
+ },
+ {
+ percent: '134 to 138',
+ severity: 4,
+ name: 'Destabilised',
+ Result: 'Reduce ship or vehicle\'s hull integrity threshold and system strain threshold to half original values until repaired.',
+ effect: '',
+ },
+ {
+ percent: '139 to 144',
+ severity: 4,
+ name: 'Fire!',
+ Result: 'Fire rages through ship or vehicle and it immediately takes 2 system strain. Fire can be extinguished with appropriate skill, Vigilance or Cool checks at GM\'s discretion. Takes one round per two silhouette to put out.',
+ effect: '',
+ },
+ {
+ percent: '145 to 153',
+ severity: 4,
+ name: 'Breaking Up',
+ Result: 'At the end of next round, ship is completely destroyed. Anyone aboard has one round to reach escape pod or bail out before they are lost.',
+ effect: '',
+ },
+ {
+ percent: '154+',
+ severity: 4,
+ name: 'Vaporized',
+ Result: 'The ship or Vehicle is completely destroyed.',
+ effect: '',
+ }
+ ];
+
+ var critRoll = function (addCritNum) {
+
+ var openSlot = false;
+ var diceRoll = '';
+ var critMod = '';
+ var rollTotal = '';
+ var rollOffset = parseInt(getAttrByName(diceObj.vars.characterID, 'critShipAddOffset'));
+ rollOffset = rollOffset ? rollOffset : 0;
+ var totalcrits = 0;
+
+ //check open critical spot
+ for (i = 15; i >= 1; i--) {
+
+ var slot = getAttrByName(diceObj.vars.characterID, 'critShipOn' + i);
+
+ if (slot == '0' || slot == '') {
+ openSlot = i;
+ } else {
+ totalcrits = totalcrits + 1;
+ }
+ }
+
+ if (!openSlot) {
+ sendChat("Alert", "Why are you not dead!");
+ return false;
+ }
+
+ //roll random
+ if (!addCritNum) {
+ diceRoll = randomInteger(100);
+ critMod = (totalcrits * 10);
+ rollTotal = diceRoll + critMod + rollOffset;
+ } else {
+ rollTotal = parseInt(addCritNum);
+ }
+
+ //find crit in crital table
+ for (var key in critTable) {
+
+ var percent = critTable[key].percent.split(' to ');
+ var low = parseInt(percent[0]);
+ var high = percent[1] ? parseInt(percent[1]) : 1000;
+
+ if ((rollTotal >= low) && (rollTotal <= high)) {
+
+ critAttrs = [
+ {
+ name: 'critShipName' + openSlot,
+ current: critTable[key].name,
+ max: '',
+ update: true
+ },
+ {
+ name: 'critShipSeverity' + openSlot,
+ current: critTable[key].severity,
+ max: '',
+ update: true
+ },
+ {
+ name: 'critShipRange' + openSlot,
+ current: critTable[key].percent,
+ max: '',
+ update: true
+ },
+ {
+ name: 'critShipSummary' + openSlot,
+ current: critTable[key].Result,
+ max: '',
+ update: true
+ },
+ {
+ name: 'critShipOn' + openSlot,
+ current: openSlot,
+ max: '',
+ update: true
+ }
+ ];
+
+ eote.updateAddAttribute(characterObj, critAttrs);
+
+ var chat = '/direct Rolls Vehicle Critical ';
+ chat = chat + ' ';//need new graphic
+ chat = chat + 'Current Criticals: (' + totalcrits + ' x 10) ';
+ if (rollOffset) {
+ chat = chat + 'Dice Roll Offset: ' + rollOffset + ' ';
+ }
+ chat = chat + 'Dice Roll: ' + diceRoll + ' ';
+ chat = chat + 'Total: ' + rollTotal + ' ';
+ chat = chat + ' ';
+ chat = chat + '' + critTable[key].name + ' ';
+ chat = chat + critTable[key].Result + ' ';
+
+ sendChat(diceObj.vars.characterName, chat);
+
+ }
+ }
+
+ }
+
+ var critHeal = function (critID) {
+
+ critAttrs = [
+ {
+ name: 'critShipName' + critID,
+ current: '',
+ max: '',
+ update: true
+ },
+ {
+ name: 'critShipSeverity' + critID,
+ current: '',
+ max: '',
+ update: true
+ },
+ {
+ name: 'critShipRange' + critID,
+ current: '',
+ max: '',
+ update: true
+ },
+ {
+ name: 'critShipSummary' + critID,
+ current: '',
+ max: '',
+ update: true
+ },
+ {
+ name: 'critShipOn' + critID,
+ current: 0,
+ max: '',
+ update: true
+ }
+ ];
+
+ eote.updateAddAttribute(characterObj, critAttrs);
+
+ }
+
+ var critArray = cmd[1].split('|');
+ var prop1 = critArray[0];
+ var prop2 = critArray[1] ? critArray[1] : null;
+
+ if (prop1 == 'heal') {
+ critHeal(prop2);
+ } else if (prop1 == 'add') {
+ critRoll(prop2);
+ } else { // crit(roll)
+ critRoll();
+ }
+
+}
+
+eote.process.gmdice = function (cmd) {
+
+ /* gmdice
+ * default:
+ * Description: Update CMD string to include -DicePool dice
+ * Command: (gmdice)
+ * ---------------------------------------------------------------- */
+
+ //var charObj = findObjs({ _type: "character", name: "-DicePool" });
+ var charID = eote.defaults['-DicePoolID'];//charObj[0].id;
+
+ var g = getAttrByName(charID, 'ggm');
+ var y = getAttrByName(charID, 'ygm');
+ var p = getAttrByName(charID, 'pgm');
+ var r = getAttrByName(charID, 'rgm');
+ var b = getAttrByName(charID, 'bgm');
+ var blk = getAttrByName(charID, 'blkgm');
+ var w = getAttrByName(charID, 'wgm');
+ var upAbility = getAttrByName(charID, 'upgradeAbilitygm');
+ var upDifficulty = getAttrByName(charID, 'upgradeDifficultygm');
+ var downProficiency = getAttrByName(charID, 'downgradeProficiencygm');
+ var downChallenge = getAttrByName(charID, 'downgradeChallengegm');
+
+ var gmdiceCMD = g + 'g ' + y + 'y ' + p + 'p ' + r + 'r ' + b + 'b ' + blk + 'blk ' + w + 'w upgrade(ability|' + upAbility + ') downgrade(proficiency|' + downProficiency + ') upgrade(difficulty|' + upDifficulty + ') downgrade(challenge|' + downChallenge + ')';
+
+ eote.process.logger("eote.process.gmDice.charID", charID);
+
+ cmd = cmd.replace('(gmdice)', gmdiceCMD);
+
+ //log(cmd);
+
+ return cmd;
+}
+
+eote.process.encum = function (cmd, diceObj) {
+
+ /* Encumberment
+ * default:
+ * Description: If the current encum is great than threshold add 1 setback per unit over current encum
+ * Command: !eed encum(encum_current|encum_threshold)
+ * ---------------------------------------------------------------- */
+
+ eote.process.logger("eote.process.encum", cmd);
+
+ _.each(cmd, function (encum) {
+
+ var diceArray = encum.match(/\((.*?)\|(.*?)\)/);
+
+ if (diceArray && diceArray[1] && diceArray[2]) {
+
+ var num1 = eote.process.math(diceArray[1]);
+ var num2 = eote.process.math(diceArray[2]);
+ var setbackDice = diceObj.count.setback;
+
+ if (num2 > num1) {
+ diceObj.count.setback = setbackDice + (num2 - num1);
+ eote.process.logger("eote.process.encum.NewSetbackTotal", diceObj.count.setback + "blk");
+ }
+ else {
+ eote.process.logger("eote.process.encum", "No New Setback");
+ }
+ }
+ });
+
+
+ return diceObj;
+
+}
+
+eote.process.skill = function (cmd, diceObj) {
+
+ /* Skill
+ * default:
+ * Description: create the ability and proficiency dice for a skill check
+ * Command: !eed skill(char_value|skill_value)
+ * ---------------------------------------------------------------- */
+
+ eote.process.logger("eote.process.skill", cmd);
+
+ _.each(cmd, function (skill) {
+
+ var diceArray = skill.match(/\((.*?)\|(.*?)\)/);
+
+ if (diceArray && diceArray[1] && diceArray[2]) {
+
+ var num1 = eote.process.math(diceArray[1]);
+ var num2 = eote.process.math(diceArray[2]);
+ var totalAbil = Math.abs(num1 - num2);
+ var totalProf = (num1 < num2 ? num1 : num2);
+ var abilityDice = diceObj.count.ability;
+ var proficiencyDice = diceObj.count.proficiency;
+
+ diceObj.count.ability = abilityDice + totalAbil;
+ diceObj.count.proficiency = proficiencyDice + totalProf;
+
+ eote.process.logger("eote.process.skill.abilityTotal", diceObj.count.ability + "g");
+ eote.process.logger("eote.process.skill.proficiencyTotal", diceObj.count.proficiency + "y");
+ }
+ });
+
+ return diceObj;
+
+}
+
+eote.process.opposed = function (cmd, diceObj) {
+ /*Opposed
+ * default:
+ * Description: create the difficulty and challenge dice for an opposed skill check
+ * Command: !eed opposed(char_value|skill_value)
+ * ---------------------------------------------------------------- */
+
+ eote.process.logger("eote.process.opposed", cmd);
+
+ _.each(cmd, function (opposed) {
+
+ var diceArray = opposed.match(/\((.*?)\|(.*?)\)/);
+
+ if (diceArray && diceArray[1] && diceArray[2]) {
+ var num1 = eote.process.math(diceArray[1]);
+ var num2 = eote.process.math(diceArray[2]);
+ var totalOppDiff = Math.abs(num1 - num2);
+ var totalOppChal = (num1 < num2 ? num1 : num2);
+ var opposeddifficultyDice = diceObj.count.difficulty;
+ var opposedchallengeDice = diceObj.count.challenge;
+ diceObj.count.difficulty = opposeddifficultyDice + totalOppDiff;
+ diceObj.count.challenge = opposedchallengeDice + totalOppChal;
+ }
+ });
+
+ return diceObj;
+}
+
+eote.process.setDice = function (cmd, diceObj) {
+
+ /* setDice
+ * default:
+ * Description: Loop thru the dice and adds or subtracts them from the dice object
+ * Command: !eed g# y# b# blk# r# p# w# or g#+# or g#-#
+ * ---------------------------------------------------------------- */
+
+ eote.process.logger("eote.process.setDice", cmd);
+
+ _.each(cmd, function (dice) {
+
+ var diceArray = dice.match(/(-?\d{1,2})(\w{1,3})/);
+
+ if (diceArray && diceArray[1] && diceArray[2]) {
+
+ var diceQty = eote.process.math(diceArray[1]);
+ diceQty = (isNaN(diceQty) ? 0 : diceQty);
+
+ var abilityDice = diceObj.count.ability;
+ var proficiencyDice = diceObj.count.proficiency;
+ var difficultyDice = diceObj.count.difficulty;
+ var challengeDice = diceObj.count.challenge;
+ var boostDice = diceObj.count.boost;
+ var setbackDice = diceObj.count.setback;
+ var forceDice = diceObj.count.force;
+ var success = diceObj.count.success;
+ var advantage = diceObj.count.advantage;
+ var threat = diceObj.count.threat;
+ var failure = diceObj.count.failure;
+
+ switch (diceArray[2]) {
+ case 'b':
+ diceObj.count.boost = boostDice + diceQty;
+ break;
+ case 'g':
+ diceObj.count.ability = abilityDice + diceQty;
+ break;
+ case 'y':
+ diceObj.count.proficiency = proficiencyDice + diceQty;
+ break;
+ case 'blk':
+ diceObj.count.setback = setbackDice + diceQty;
+ break;
+ case 'p':
+ diceObj.count.difficulty = difficultyDice + diceQty;
+ break;
+ case 'r':
+ diceObj.count.challenge = challengeDice + diceQty;
+ break;
+ case 'w':
+ diceObj.count.force = forceDice + diceQty;
+ break;
+ case 's':
+ diceObj.count.success = success + diceQty;
+ break;
+ case 'a':
+ diceObj.count.advantage = advantage + diceQty;
+ break;
+ case 't':
+ diceObj.count.threat = threat + diceQty;
+ break;
+ case 'f':
+ diceObj.count.failure = failure + diceQty;
+ break;
+ }
+ }
+ });
+
+ diceObj = eote.process.checkNegative(diceObj);
+
+ eote.process.logger("eote.process.setDice.DiceToRoll", diceObj.count.boost + "b," + diceObj.count.ability + "g," + diceObj.count.proficiency + "y," + diceObj.count.setback + "blk," + diceObj.count.difficulty + "p," + diceObj.count.challenge + "r," + diceObj.count.force + "w," + diceObj.count.advantage + "a," + diceObj.count.threat + "t," + diceObj.count.failure + "f");
+
+ return diceObj;
+}
+
+eote.process.checkNegative = function (diceObj) {
+ if (diceObj.count.boost < 0) {
+ eote.process.logger("eote.process.checkNegative.boost", "Setting count to 0 for being negative.")
+ diceObj.count.boost = 0;
+ }
+
+ if (diceObj.count.ability < 0) {
+ eote.process.logger("eote.process.checkNegative.ability", "Setting count to 0 for being negative.")
+ diceObj.count.ability = 0;
+ }
+
+ if (diceObj.count.proficiency < 0) {
+ eote.process.logger("eote.process.checkNegative.proficiency", "Setting count to 0 for being negative.")
+ diceObj.count.proficiency = 0;
+ }
+
+ if (diceObj.count.setback < 0) {
+ eote.process.logger("eote.process.checkNegative.setback", "Setting count to 0 for being negative.")
+ diceObj.count.setback = 0;
+ }
+
+ if (diceObj.count.difficulty < 0) {
+ eote.process.logger("eote.process.checkNegative.difficulty", "Setting count to 0 for being negative.")
+ diceObj.count.difficulty = 0;
+ }
+
+ if (diceObj.count.challenge < 0) {
+ eote.process.logger("eote.process.checkNegative.challenge", "Setting count to 0 for being negative.")
+ diceObj.count.challenge = 0;
+ }
+
+ if (diceObj.count.force < 0) {
+ eote.process.logger("eote.process.checkNegative.force", "Setting count to 0 for being negative.")
+ diceObj.count.force = 0;
+ }
+
+ if (diceObj.count.success < 0) {
+ eote.process.logger("eote.process.checkNegative.success", "Setting count to 0 for being negative.")
+ diceObj.count.success = 0;
+ }
+
+ if (diceObj.count.advantage < 0) {
+ eote.process.logger("eote.process.checkNegative.advantage", "Setting count to 0 for being negative.")
+ diceObj.count.advantage = 0;
+ }
+
+ if (diceObj.count.threat < 0) {
+ eote.process.logger("eote.process.checkNegative.threat", "Setting count to 0 for being negative.")
+ diceObj.count.threat = 0;
+ }
+
+ if (diceObj.count.failure < 0) {
+ eote.process.logger("eote.process.checkNegative.failure", "Setting count to 0 for being negative.")
+ diceObj.count.failure = 0;
+ }
+
+ return diceObj;
+}
+
+eote.process.upgrade = function (cmd, diceObj) {
+
+ /* Upgrade
+ * default:
+ * Description: upgrades ability and difficulty dice
+ * Command: !eed upgrade(ability|#) or upgrade(difficulty|#)
+ * ---------------------------------------------------------------- */
+
+ eote.process.logger("eote.process.upgrade", cmd);
+
+ _.each(cmd, function (dice) {
+
+ var diceArray = dice.match(/\((.*?)\|(.*?)\)/);
+
+ if (diceArray && diceArray[1] && diceArray[2]) {
+
+ var type = diceArray[1];
+ var upgradeVal = eote.process.math(diceArray[2]);
+ var abilityDice = diceObj.count.ability;
+ var proficiencyDice = diceObj.count.proficiency;
+ var difficultyDice = diceObj.count.difficulty;
+ var challengeDice = diceObj.count.challenge;
+
+ switch (type) {
+ case 'ability':
+
+ var totalProf = (upgradeVal < abilityDice ? upgradeVal : abilityDice);
+ var totalAbil = Math.abs(upgradeVal - abilityDice);
+
+ if (upgradeVal > abilityDice) {
+ totalProf = totalProf + Math.floor(totalAbil / 2);
+ totalAbil = totalAbil % 2;
+ }
+
+ diceObj.count.ability = totalAbil;
+ diceObj.count.proficiency = proficiencyDice + totalProf;
+
+ eote.process.logger("eote.process.upgrade.abilityTotal", diceObj.count.ability + "g");
+ eote.process.logger("eote.process.upgrade.proficiencyTotal", diceObj.count.proficiency + "y");
+
+ break;
+ case 'difficulty':
+
+ var totalChall = (upgradeVal < difficultyDice ? upgradeVal : difficultyDice);
+ var totalDiff = Math.abs(upgradeVal - difficultyDice);
+
+ if (upgradeVal > difficultyDice) {
+ totalChall = totalChall + Math.floor(totalDiff / 2);
+ totalDiff = totalDiff % 2;
+ }
+
+ diceObj.count.difficulty = totalDiff;
+ diceObj.count.challenge = challengeDice + totalChall;
+
+ eote.process.logger("eote.process.upgrade.difficultyTotal", diceObj.count.difficulty + "p");
+ eote.process.logger("eote.process.upgrade.challengeTotal", diceObj.count.challenge + "r");
+
+ break;
+ }
+ }
+
+
+ });
+
+ return diceObj;
+}
+
+eote.process.downgrade = function (cmd, diceObj) {
+
+ /* Downgrade
+ * default:
+ * Description: downgrades proficiency and challenge dice
+ * Command: !eed downgrade(proficiency|#) or downgrade(challenge|#)
+ * ---------------------------------------------------------------- */
+
+ eote.process.logger("eote.process.downgrade", cmd);
+
+ _.each(cmd, function (dice) {
+
+ var diceArray = dice.match(/\((.*?)\|(.*?)\)/);
+
+ if (diceArray && diceArray[1] && diceArray[2]) {
+
+ var type = diceArray[1];
+ var downgradeVal = eote.process.math(diceArray[2]);
+ var abilityDice = diceObj.count.ability;
+ var proficiencyDice = diceObj.count.proficiency;
+ var difficultyDice = diceObj.count.difficulty;
+ var challengeDice = diceObj.count.challenge;
+
+ switch (type) {
+ case 'proficiency':
+
+ var profConvertedToAbil = proficiencyDice * 2;
+
+ if (downgradeVal > (abilityDice + profConvertedToAbil)) {
+ diceObj.count.ability = 0;
+ diceObj.count.proficiency = 0;
+ } else if (downgradeVal > profConvertedToAbil) {
+ downgradeVal = Math.abs(downgradeVal - profConvertedToAbil);
+ diceObj.count.ability = Math.abs(downgradeVal - abilityDice);
+ diceObj.count.proficiency = 0;
+ } else {
+ diceObj.count.ability = abilityDice + (profConvertedToAbil - downgradeVal) % 2;
+ diceObj.count.proficiency = Math.floor((profConvertedToAbil - downgradeVal) / 2);
+ }
+
+ break;
+ case 'challenge':
+
+ var challConvertedToDiff = challengeDice * 2;
+
+ if (downgradeVal > (difficultyDice + challConvertedToDiff)) {
+ diceObj.count.difficulty = 0;
+ diceObj.count.challenge = 0;
+ } else if (downgradeVal > challConvertedToDiff) {
+ downgradeVal = Math.abs(downgradeVal - challConvertedToDiff);
+ diceObj.count.difficulty = Math.abs(downgradeVal - difficultyDice);
+ diceObj.count.challenge = 0;
+ } else {
+ diceObj.count.difficulty = difficultyDice + (challConvertedToDiff - downgradeVal) % 2;
+ diceObj.count.challenge = Math.floor((challConvertedToDiff - downgradeVal) / 2);
+ }
+
+ break;
+ }
+ }
+ });
+
+ return diceObj;
+}
+
+eote.process.math = function (expr) {
+
+ /* Math
+ * Returns: Number
+ * Description: Evaluates a mathematical expression (as a string) and return the result
+ * ---------------------------------------------------------------- */
+
+ var chars = expr.split("");
+ var n = [], op = [], index = 0, oplast = true;
+
+ n[index] = "";
+
+ // Parse the expression
+ for (var c = 0; c < chars.length; c++) {
+
+ if (isNaN(parseInt(chars[c])) && chars[c] !== "." && !oplast) {
+ op[index] = chars[c];
+ index++;
+ n[index] = "";
+ oplast = true;
+ } else {
+ n[index] += chars[c];
+ oplast = false;
+ }
+ }
+
+ // Calculate the expression
+ expr = parseFloat(n[0]);
+ for (var o = 0; o < op.length; o++) {
+ var num = parseFloat(n[o + 1]);
+ switch (op[o]) {
+ case "+":
+ expr = expr + num;
+ break;
+ case "-":
+ expr = expr - num;
+ break;
+ case "*":
+ expr = expr * num;
+ break;
+ case "/":
+ expr = expr / num;
+ break;
+ }
+ }
+
+ return expr;
+}
+
+eote.process.addDiceValues = function (diceTotalObj, diceResult) {
+
+ diceTotalObj.success = diceTotalObj.success + diceResult.success;
+ diceTotalObj.failure = diceTotalObj.failure + diceResult.failure;
+ diceTotalObj.advantage = diceTotalObj.advantage + diceResult.advantage;
+ diceTotalObj.threat = diceTotalObj.threat + diceResult.threat;
+ diceTotalObj.triumph = diceTotalObj.triumph + diceResult.triumph;
+ diceTotalObj.despair = diceTotalObj.despair + diceResult.despair;
+ diceTotalObj.light = diceTotalObj.light + diceResult.light;
+ diceTotalObj.dark = diceTotalObj.dark + diceResult.dark;
+
+ return diceTotalObj;
+}
+
+eote.process.totalDiceValues = function (diceTotalObj) {
+
+ var diceTS = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+
+ var i = 0;
+
+ i = diceTotalObj.success - diceTotalObj.failure;
+
+ if (i >= 0) {
+ diceTS.success = i;
+ } else {
+ diceTS.failure = Math.abs(i);
+ }
+
+ i = diceTotalObj.advantage - diceTotalObj.threat;
+
+ if (i >= 0) {
+ diceTS.advantage = i;
+ } else {
+ diceTS.threat = Math.abs(i);
+ }
+
+ diceTS.triumph = diceTotalObj.triumph;
+ diceTS.despair = diceTotalObj.despair;
+ diceTS.light = diceTotalObj.light;
+ diceTS.dark = diceTotalObj.dark;
+
+ return diceTS;
+}
+
+eote.process.rollDice = function (diceObj) {
+
+ results = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: '',
+ diceTextLog: ''
+ }
+
+ eote.process.logger("eote.process.rollDice.FinalDiceToRoll", diceObj.count.boost + "b," + diceObj.count.ability + "g," + diceObj.count.proficiency + "y," + diceObj.count.setback + "blk," + diceObj.count.difficulty + "p," + diceObj.count.challenge + "r," + diceObj.count.force + "w," + diceObj.count.advantage + "a," + diceObj.count.threat + "t," + diceObj.count.failure + "f");
+
+ //Blue "Boost" die (d6)
+ if (diceObj.count.boost > 0) {
+ results = eote.roll.boost(diceObj.count.boost);
+ diceObj.graphicsLog.Boost = results.diceGraphicsLog;
+ diceObj.textLog.Boost = results.diceTextLog;
+ diceObj.totals = eote.process.addDiceValues(diceObj.totals, results);
+ }
+
+ //Green "Ability" die (d8)
+ if (diceObj.count.ability > 0) {
+ results = eote.roll.ability(diceObj.count.ability);
+ diceObj.graphicsLog.Ability = results.diceGraphicsLog;
+ diceObj.textLog.Ability = results.diceTextLog;
+ diceObj.totals = eote.process.addDiceValues(diceObj.totals, results);
+ }
+
+ //Yellow "Proficiency" die (d12)
+ if (diceObj.count.proficiency > 0) {
+ results = eote.roll.proficiency(diceObj.count.proficiency);
+ diceObj.graphicsLog.Proficiency = results.diceGraphicsLog;
+ diceObj.textLog.Proficiency = results.diceTextLog;
+ diceObj.totals = eote.process.addDiceValues(diceObj.totals, results);
+ }
+
+ //Black "SetBack" die (d6)
+ if (diceObj.count.setback > 0) {
+ results = eote.roll.setback(diceObj.count.setback);
+ diceObj.graphicsLog.SetBack = results.diceGraphicsLog;
+ diceObj.textLog.SetBack = results.diceTextLog;
+ diceObj.totals = eote.process.addDiceValues(diceObj.totals, results);
+ }
+
+ //Purple "Difficulty" die (d8)
+ if (diceObj.count.difficulty > 0) {
+ results = eote.roll.difficulty(diceObj.count.difficulty);
+ diceObj.graphicsLog.Difficulty = results.diceGraphicsLog;
+ diceObj.textLog.Difficulty = results.diceTextLog;
+ diceObj.totals = eote.process.addDiceValues(diceObj.totals, results);
+ }
+
+ //Red "Challenge" die (d12)
+ if (diceObj.count.challenge > 0) {
+ results = eote.roll.challenge(diceObj.count.challenge);
+ diceObj.graphicsLog.Challenge = results.diceGraphicsLog;
+ diceObj.textLog.Challenge = results.diceTextLog;
+ diceObj.totals = eote.process.addDiceValues(diceObj.totals, results);
+ }
+
+ //White "Force" die (d12)
+ if (diceObj.count.force > 0) {
+ results = eote.roll.force(diceObj.count.force);
+ diceObj.graphicsLog.Force = results.diceGraphicsLog;
+ diceObj.textLog.Force = results.diceTextLog;
+ diceObj.totals = eote.process.addDiceValues(diceObj.totals, results);
+ }
+
+ // Free Successes (from skills)
+ if (diceObj.count.success > 0) {
+ results = eote.roll.success(diceObj.count.success);
+ diceObj.graphicsLog.Success = results.diceGraphicsLog;
+ diceObj.textLog.Success = results.diceTextLog;
+ diceObj.totals = eote.process.addDiceValues(diceObj.totals, results);
+ }
+ // Free Advantage (from skills)
+ if (diceObj.count.advantage > 0) {
+ results = eote.roll.advantage(diceObj.count.advantage);
+ diceObj.graphicsLog.Advantage = results.diceGraphicsLog;
+ diceObj.textLog.Advantage = results.diceTextLog;
+ diceObj.totals = eote.process.addDiceValues(diceObj.totals, results);
+ }
+ //Free Threat (from skills)
+ if (diceObj.count.threat > 0) {
+ results = eote.roll.threat(diceObj.count.threat);
+ diceObj.graphicsLog.Threat = results.diceGraphicsLog;
+ diceObj.textLog.Threat = results.diceTextLog;
+ diceObj.totals = eote.process.addDiceValues(diceObj.totals, results);
+ }
+ // Free Failure (from skills)
+ if (diceObj.count.failure > 0) {
+ results = eote.roll.failure(diceObj.count.failure);
+ diceObj.graphicsLog.Failure = results.diceGraphicsLog;
+ diceObj.textLog.Failure = results.diceTextLog;
+ diceObj.totals = eote.process.addDiceValues(diceObj.totals, results);
+ }
+
+ //finds the sum of each dice attribute
+ diceObj.totals = eote.process.totalDiceValues(diceObj.totals);
+
+
+ return diceObj;
+}
+
+eote.process.diceOutput = function (diceObj, playerName, playerID) {
+
+ //log(diceObj);
+ var s1 = ' ';
+ var chatGlobal = '';
+ var diceGraphicsResults = "";
+ var diceGraphicsRolled = "";
+ var diceTextRolled = "";
+ var diceTextResults = "";
+
+ diceTextResults = "["
+
+ if (diceObj.totals.success > 0) {
+ diceTextResults = diceTextResults + " Success:" + diceObj.totals.success;
+ for (i = 1; i <= diceObj.totals.success; i++) {
+ diceGraphicsResults = diceGraphicsResults + s1 + eote.defaults.graphics.SYMBOLS.S + s2 + "Success" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+ }
+ if (diceObj.totals.failure > 0) {
+ diceTextResults = diceTextResults + " Fail:" + diceObj.totals.failure;
+ for (i = 1; i <= diceObj.totals.failure; i++) {
+ diceGraphicsResults = diceGraphicsResults + s1 + eote.defaults.graphics.SYMBOLS.F + s2 + "Failure" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+ }
+ if (diceObj.totals.advantage > 0) {
+ diceTextResults = diceTextResults + " Advant:" + diceObj.totals.advantage;
+ for (i = 1; i <= diceObj.totals.advantage; i++) {
+ diceGraphicsResults = diceGraphicsResults + s1 + eote.defaults.graphics.SYMBOLS.A + s2 + "Advantage" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+ }
+ if (diceObj.totals.threat > 0) {
+ diceTextResults = diceTextResults + " Threat:" + diceObj.totals.threat;
+ for (i = 1; i <= diceObj.totals.threat; i++) {
+ diceGraphicsResults = diceGraphicsResults + s1 + eote.defaults.graphics.SYMBOLS.T + s2 + "Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+ }
+ if (diceObj.totals.triumph > 0) {
+ diceTextResults = diceTextResults + " Triumph:" + diceObj.totals.triumph;
+ for (i = 1; i <= diceObj.totals.triumph; i++) {
+ diceGraphicsResults = diceGraphicsResults + s1 + eote.defaults.graphics.SYMBOLS.TRIUMPH + s2 + "Triumph" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+ }
+ if (diceObj.totals.despair > 0) {
+ diceTextResults = diceTextResults + " Despair:" + diceObj.totals.despair;
+ for (i = 1; i <= diceObj.totals.despair; i++) {
+ diceGraphicsResults = diceGraphicsResults + s1 + eote.defaults.graphics.SYMBOLS.DESPAIR + s2 + "Despair" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+ }
+ if (diceObj.totals.light > 0) {
+ diceTextResults = diceTextResults + " Light:" + diceObj.totals.light;
+
+ for (i = 1; i <= diceObj.totals.light; i++) {
+ diceGraphicsResults = diceGraphicsResults + s1 + eote.defaults.graphics.SYMBOLS.L + s2 + "Light" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+ }
+ if (diceObj.totals.dark > 0) {
+ diceTextResults = diceTextResults + " Dark:" + diceObj.totals.dark;
+ for (i = 1; i <= diceObj.totals.dark; i++) {
+ diceGraphicsResults = diceGraphicsResults + s1 + eote.defaults.graphics.SYMBOLS.D + s2 + "Dark" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+ }
+
+ diceTextResults = diceTextResults + "]";
+
+ //------------------------------------>
+
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ chatGlobal = "/direct 6b 8g 12y 6blk 8p 12r 12w ";
+ } else if (diceObj.vars.label) {
+ chatGlobal = "/direct " + diceObj.vars.label + ' ';
+ } else {
+ chatGlobal = "/direct ";
+ }
+
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ characterPlayer = 'TEST';
+ } else if (diceObj.vars.characterName) {
+ characterPlayer = diceObj.vars.characterName;
+ } else {
+ characterPlayer = playerName;
+ }
+
+ //------------------------------------>
+
+ if (eote.defaults.globalVars.diceLogChat === true) {
+ if (eote.defaults.globalVars.diceLogRolledOnOneLine === true) {
+
+ diceGraphicsRolled = diceObj.graphicsLog.Boost + diceObj.graphicsLog.Ability + diceObj.graphicsLog.Proficiency + diceObj.graphicsLog.SetBack + diceObj.graphicsLog.Difficulty + diceObj.graphicsLog.Challenge + diceObj.graphicsLog.Force + diceObj.graphicsLog.Success + diceObj.graphicsLog.Advantage + diceObj.graphicsLog.Failure + diceObj.graphicsLog.Threat;
+
+ if (diceObj.textLog.Boost != "") diceTextRolled = diceTextRolled + "Boost:" + diceObj.textLog.Boost;
+ if (diceObj.textLog.Ability != "") diceTextRolled = diceTextRolled + "Ability:" + diceObj.textLog.Ability;
+ if (diceObj.textLog.Proficiency != "") diceTextRolled = diceTextRolled + "Proficiency:" + diceObj.textLog.Proficiency;
+ if (diceObj.textLog.SetBack != "") diceTextRolled = diceTextRolled + "SetBack:" + diceObj.textLog.SetBack;
+ if (diceObj.textLog.Difficulty != "") diceTextRolled = diceTextRolled + "Difficulty:" + diceObj.textLog.Difficulty;
+ if (diceObj.textLog.Challenge != "") diceTextRolled = diceTextRolled + "Challenge:" + diceObj.textLog.Challenge;
+ if (diceObj.textLog.Force != "") diceTextRolled = diceTextRolled + "Force:" + diceObj.textLog.Force;
+ if (diceObj.textLog.Success != "") diceTextRolled = diceTextRolled + "Success:" + diceObj.textLog.Success;
+ if (diceObj.textLog.Advantage != "") diceTextRolled = diceTextRolled + "Advantage:" + diceObj.textLog.Advantage;
+ if (diceObj.textLog.Failure != "") diceTextRolled = diceGraphicsRolled + "Failure:" + diceObj.textLog.Failure;
+ if (diceObj.textLog.Threat != "") diceTextRolled = diceGraphicsRolled + "Threat:" + diceObj.textLog.Threat;
+
+ if (eote.defaults.globalVars.diceGraphicsChat === true) {
+ chatGlobal = chatGlobal + ' ' + diceGraphicsRolled;
+ } else {
+ sendChat("", diceTextRolled);
+ }
+
+ } else {
+
+ if (eote.defaults.globalVars.diceGraphicsChat === true) {
+
+ if (diceObj.vars.label) {
+ sendChat(characterPlayer, "/direct Skill: " + diceObj.vars.label + ' ');
+ }
+
+ if (diceObj.graphicsLog.Boost != "") sendChat("", "/direct " + diceObj.graphicsLog.Boost);
+ if (diceObj.graphicsLog.Ability != "") sendChat("", "/direct " + diceObj.graphicsLog.Ability);
+ if (diceObj.graphicsLog.Proficiency != "") sendChat("", "/direct " + diceObj.graphicsLog.Proficiency);
+ if (diceObj.graphicsLog.SetBack != "") sendChat("", "/direct " + diceObj.graphicsLog.SetBack);
+ if (diceObj.graphicsLog.Difficulty != "") sendChat("", "/direct " + diceObj.graphicsLog.Difficulty);
+ if (diceObj.graphicsLog.Challenge != "") sendChat("", "/direct " + diceObj.graphicsLog.Challenge);
+ if (diceObj.graphicsLog.Force != "") sendChat("", "/direct " + diceObj.graphicsLog.Force);
+ if (diceObj.graphicsLog.Success != "") sendChat("", "/direct " + diceObj.graphicsLog.Success);
+ if (diceObj.graphicsLog.Advantage != "") sendChat("", "/direct " + diceObj.graphicsLog.Advantage);
+ if (diceObj.graphicsLog.Failure != "") sendChat("", "/direct " + diceObj.graphicsLog.Failure);
+ if (diceObj.graphicsLog.Threat != "") sendChat("", "/direct " + diceObj.graphicsLog.Threat);
+ } else {
+
+ if (diceObj.vars.label) {
+ sendChat(characterPlayer, "/direct Skill: " + diceObj.vars.label + ' ');
+ }
+
+ if (diceObj.textLog.Boost != "") sendChat("", "Boost:" + diceObj.textLog.Boost);
+ if (diceObj.textLog.Ability != "") sendChat("", "Ability:" + diceObj.textLog.Ability);
+ if (diceObj.textLog.Proficiency != "") sendChat("", "Proficiency:" + diceObj.textLog.Proficiency);
+ if (diceObj.textLog.SetBack != "") sendChat("", "SetBack:" + diceObj.textLog.SetBack);
+ if (diceObj.textLog.Difficulty != "") sendChat("", "Difficulty:" + diceObj.textLog.Difficulty);
+ if (diceObj.textLog.Challenge != "") sendChat("", "Challenge:" + diceObj.textLog.Challenge);
+ if (diceObj.textLog.Force != "") sendChat("", "Force:" + diceObj.textLog.Force);
+ if (diceObj.textLog.Success != "") sendChat("", "Success:" + diceObj.textLog.Success);
+ if (diceObj.textLog.Advantage != "") sendChat("", "Advantage:" + diceObj.textLog.Advantage);
+ if (diceObj.textLog.Failure != "") sendChat("", "Failure:" + diceObj.textLog.Failure);
+ if (diceObj.textLog.Threat != "") sendChat("", "Threat:" + diceObj.textLog.Threat);
+
+ }
+ }
+ }
+
+ if (eote.defaults.globalVars.diceGraphicsChat === true) {
+
+ chatGlobal = chatGlobal + ' Roll:' + diceGraphicsResults;
+
+ sendChat(characterPlayer, chatGlobal);
+
+ } else {
+ sendChat("Roll", diceTextResults);
+ }
+
+ eote.process.logger("eote.process.rollResult", diceTextResults);
+ //All DONE!!!
+}
+
+//---------------------->
+
+eote.roll = {
+
+ boost: function (diceQty) {
+ //Blue "Boost" die (d6)
+ //1 Blank
+ //2 Blank
+ //3 Success
+ //4 Advantage
+ //5 Advantage + Advantage
+ //6 Success + Advantage
+ var roll = 0;
+ var diceResult = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+ var i = 0;
+ var s1 = ' ';
+
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ diceQty = 6;
+ }
+
+ for (i = 1; i <= diceQty; i++) {
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ roll = roll + 1;
+ } else {
+ roll = randomInteger(6);
+ }
+
+ switch (roll) {
+ case 1:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Blank)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.BOOST.BLANK + s2 + "Boost Blank" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ break;
+ case 2:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Blank)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.BOOST.BLANK + s2 + "Boost Blank" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ break;
+ case 3:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.BOOST.S + s2 + "Boost Success" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 1;
+ break;
+ case 4:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Advantage)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.BOOST.A + s2 + "Boost Advantage" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.advantage = diceResult.advantage + 1;
+ break;
+ case 5:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Advantage x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.BOOST.AA + s2 + "Boost Advantage x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.advantage = diceResult.advantage + 2;
+ break;
+ case 6:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success + Advantage)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.BOOST.SA + s2 + "Boost Success + Advantage" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 1;
+ diceResult.advantage = diceResult.advantage + 1;
+ break;
+ }
+ }
+
+ return diceResult;
+ },
+
+ ability: function (diceQty) {
+ //Green "Ability" die (d8)
+ //1 Blank
+ //2 Success
+ //3 Success
+ //4 Advantage
+ //5 Advantage
+ //6 Success + Advantage
+ //7 Advantage + Advantage
+ //8 Success + Success
+ var roll = 0;
+ var diceTextLog = "";
+ var diceGraphicsLog = "";
+ var diceResult = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+ var i = 0;
+ var s1 = ' ';
+
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ diceQty = 8;
+ }
+
+ for (i = 1; i <= diceQty; i++) {
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ roll = roll + 1;
+ }
+ else {
+ roll = randomInteger(8);
+ }
+
+ switch (roll) {
+ case 1:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Blank)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.ABILITY.BLANK + s2 + "Ability Blank" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ break;
+ case 2:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.ABILITY.S + s2 + "Ability Success" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 1;
+ break;
+ case 3:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.ABILITY.S + s2 + "Ability Success" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 1;
+ break;
+ case 4:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Advantage)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.ABILITY.A + s2 + "Ability Advantage" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.advantage = diceResult.advantage + 1;
+ break;
+ case 5:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Advantage)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.ABILITY.A + s2 + "Ability Advantage" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.advantage = diceResult.advantage + 1;
+ break;
+ case 6:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success + Advantage)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.ABILITY.SA + s2 + "Ability Success + Advantage" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 1;
+ diceResult.advantage = diceResult.advantage + 1;
+ break;
+ case 7:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Advantage x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.ABILITY.AA + s2 + "Ability Advantage x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.advantage = diceResult.advantage + 2;
+ break;
+ case 8:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.ABILITY.SS + s2 + "Ability Success x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 2;
+ break;
+ }
+ }
+ return diceResult;
+ },
+
+ proficiency: function (diceQty) {
+ //Yellow "Proficiency" die (d12)
+ //1 Blank
+ //2 Triumph
+ //3 Success
+ //4 Success
+ //5 Advantage
+ //6 Success + Advantage
+ //7 Success + Advantage
+ //8 Success + Advantage
+ //9 Success + Success
+ //10 Success + Success
+ //11 Advantage + Advantage
+ //12 Advantage + Advantage
+ var roll = 0;
+ var diceTextLog = "";
+ var diceGraphicsLog = "";
+ var diceResult = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+ var i = 0;
+ var s1 = ' ';
+
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ diceQty = 12;
+ }
+
+ for (i = 1; i <= diceQty; i++) {
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ roll = roll + 1;
+ }
+ else {
+ roll = randomInteger(12);
+ }
+
+ switch (roll) {
+ case 1:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Blank)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.BLANK + s2 + "Proficiency Blank" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ break;
+ case 2:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Triumph(+Success))";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.TRIUMPH + s2 + "Proficiency Triumph(+Success)" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.triumph = diceResult.triumph + 1;
+ diceResult.success = diceResult.success + 1;
+ break;
+ case 3:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.S + s2 + "Proficiency Success" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 1;
+ break;
+ case 4:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.S + s2 + "Proficiency Success" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 1;
+ break;
+ case 5:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Advantage)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.A + s2 + "Proficiency Advantage" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.advantage = diceResult.advantage + 1;
+ break;
+ case 6:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success + Advantage)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.SA + s2 + "Proficiency Success + Advantage" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 1;
+ diceResult.advantage = diceResult.advantage + 1;
+ break;
+ case 7:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success + Advantage)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.SA + s2 + "Proficiency Success + Advantage" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 1;
+ diceResult.advantage = diceResult.advantage + 1;
+ break;
+ case 8:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success + Advantage)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.SA + s2 + "Proficiency Success + Advantage" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 1;
+ diceResult.advantage = diceResult.advantage + 1;
+ break;
+ case 9:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.SS + s2 + "Proficiency Success x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 2;
+ break;
+ case 10:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Success x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.SS + s2 + "Proficiency Success x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.success = diceResult.success + 2;
+ break;
+ case 11:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Advantage x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.AA + s2 + "Proficiency Advantage x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.advantage = diceResult.advantage + 2;
+ break;
+ case 12:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Advantage x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.PROFICIENCY.AA + s2 + "Proficiency Advantage x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.advantage = diceResult.advantage + 2;
+ break;
+ }
+ }
+ return diceResult;
+ },
+
+ setback: function (diceQty) {
+ //Black "Setback" die (d6)
+ //1 Blank
+ //2 Blank
+ //3 Failure
+ //4 Failure
+ //5 Threat
+ //6 Threat
+ var roll = 0;
+ var diceTextLog = "";
+ var diceGraphicsLog = "";
+ var diceResult = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+ var i = 0;
+ var s1 = ' ';
+
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ diceQty = 6;
+ }
+
+ for (i = 1; i <= diceQty; i++) {
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ roll = roll + 1;
+ }
+ else {
+ roll = randomInteger(6);
+ }
+
+ switch (roll) {
+ case 1:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Blank)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.SETBACK.BLANK + s2 + "Setback Blank" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ break;
+ case 2:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Blank)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.SETBACK.BLANK + s2 + "Setback Blank" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ break;
+ case 3:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Failure)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.SETBACK.F + s2 + "Setback Failure" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.failure = diceResult.failure + 1;
+ break;
+ case 4:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Failure)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.SETBACK.F + s2 + "Setback Failure" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.failure = diceResult.failure + 1;
+ break;
+ case 5:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Threat)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.SETBACK.T + s2 + "Setback Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.threat = diceResult.threat + 1;
+ break;
+ case 6:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Threat)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.SETBACK.T + s2 + "Setback Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.threat = diceResult.threat + 1;
+ break;
+ }
+ }
+ return diceResult;
+ },
+
+ difficulty: function (diceQty) {
+ //Purple "Difficulty" die (d8)
+ //1 Blank
+ //2 Failure
+ //3 Threat
+ //4 Threat
+ //5 Threat
+ //6 Failure + Failure
+ //7 Failure + Threat
+ //8 Threat + Threat
+ var roll = 0;
+ var diceTextLog = "";
+ var diceGraphicsLog = "";
+ var diceResult = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+ var i = 0;
+ var s1 = ' ';
+
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ diceQty = 8;
+ }
+
+ for (i = 1; i <= diceQty; i++) {
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ roll = roll + 1;
+ }
+ else {
+ roll = randomInteger(8);
+ }
+
+ switch (roll) {
+ case 1:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Blank)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.DIFFICULTY.BLANK + s2 + "Difficulty Blank" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ break;
+ case 2:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Failure)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.DIFFICULTY.F + s2 + "Difficulty Failure" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.failure = diceResult.failure + 1;
+ break;
+ case 3:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Threat)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.DIFFICULTY.T + s2 + "Difficulty Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.threat = diceResult.threat + 1;
+ break;
+ case 4:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Threat)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.DIFFICULTY.T + s2 + "Difficulty Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.threat = diceResult.threat + 1;
+ break;
+ case 5:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Threat)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.DIFFICULTY.T + s2 + "Difficulty Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.threat = diceResult.threat + 1;
+ break;
+ case 6:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Failure x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.DIFFICULTY.FF + s2 + "Difficulty Failure x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.failure = diceResult.failure + 2;
+ break;
+ case 7:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Failure + Threat)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.DIFFICULTY.FT + s2 + "Difficulty Failure + Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.failure = diceResult.failure + 1;
+ diceResult.threat = diceResult.threat + 1;
+ break;
+ case 8:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Threat x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.DIFFICULTY.TT + s2 + "Difficulty Threat x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.threat = diceResult.threat + 2;
+ break;
+ }
+ }
+ return diceResult;
+ },
+
+ challenge: function (diceQty) {
+ //Red "Challenge" die (d12)
+ //1 Blank
+ //2 Despair
+ //3 Failure
+ //4 Failure
+ //5 Threat
+ //6 Threat
+ //7 Failure + Failure
+ //8 Failure + Failure
+ //9 Threat + Threat
+ //10 Threat + Threat
+ //11 Failure + Threat
+ //12 Failure + Threat
+ var roll = 0;
+ var diceTextLog = "";
+ var diceGraphicsLog = "";
+ var diceResult = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+ var i = 0;
+ var s1 = ' ';
+
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ diceQty = 12;
+ }
+
+ for (i = 1; i <= diceQty; i++) {
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ roll = roll + 1;
+ }
+ else {
+ roll = randomInteger(12);
+ }
+
+ switch (roll) {
+ case 1:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Blank)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.BLANK + s2 + "Challenge Blank" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ break;
+ case 2:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Despair)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.DESPAIR + s2 + "Challenge Despair" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.despair = diceResult.despair + 1;
+ diceResult.failure = diceResult.failure + 1;
+ break;
+ case 3:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Failure)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.F + s2 + "Challenge Failure" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.failure = diceResult.failure + 1;
+ break;
+ case 4:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Failure)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.F + s2 + "Challenge Failure" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.failure = diceResult.failure + 1;
+ break;
+ case 5:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Threat)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.T + s2 + "Challenge Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.threat = diceResult.threat + 1;
+ break;
+ case 6:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Threat)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.T + s2 + "Challenge Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.threat = diceResult.threat + 1;
+ break;
+ case 7:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Failure x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.FF + s2 + "Challenge Failure x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.failure = diceResult.failure + 2;
+ break;
+ case 8:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Failure x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.FF + s2 + "Challenge Failure x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.failure = diceResult.failure + 2;
+ break;
+ case 9:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Threat x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.TT + s2 + "Challenge Threat x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.threat = diceResult.threat + 2;
+ break;
+ case 10:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Threat x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.TT + s2 + "Challenge Threat x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.threat = diceResult.threat + 2;
+ break;
+ case 11:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Failure + Threat)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.FT + s2 + "Challenge Failure + Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.failure = diceResult.failure + 1;
+ diceResult.threat = diceResult.threat + 1;
+ break;
+ case 12:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Failure + Threat)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.CHALLENGE.FT + s2 + "Challenge Failure + Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.failure = diceResult.failure + 1;
+ diceResult.threat = diceResult.threat + 1;
+ break;
+ }
+ }
+ return diceResult;
+ },
+
+ force: function (diceQty) {
+ //White "Force" die (d12)
+ //1 Light
+ //2 Light
+ //3 Light + Light
+ //4 Light + Light
+ //5 Light + Light
+ //6 Dark
+ //7 Dark
+ //8 Dark
+ //9 Dark
+ //10 Dark
+ //11 Dark
+ //12 Dark + Dark
+ var roll = 0;
+ var diceTextLog = "";
+ var diceGraphicsLog = "";
+ var diceResult = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+ var i = 0;
+ var s1 = ' ';
+
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ diceQty = 12;
+ }
+
+ for (i = 1; i <= diceQty; i++) {
+ if (eote.defaults.globalVars.diceTestEnabled === true) {
+ roll = roll + 1;
+ }
+ else {
+ roll = randomInteger(12);
+ }
+
+ switch (roll) {
+ case 1:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Light)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.L + s2 + "Force Light" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.light = diceResult.light + 1;
+ break;
+ case 2:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Light)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.L + s2 + "Force Light" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.light = diceResult.light + 1;
+ break;
+ case 3:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Light x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.LL + s2 + "Force Light x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.light = diceResult.light + 2;
+ break;
+ case 4:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Light x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.LL + s2 + "Force Light x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.light = diceResult.light + 2;
+ break;
+ case 5:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Light x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.LL + s2 + "Force Light x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.light = diceResult.light + 2;
+ break;
+ case 6:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Dark)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.D + s2 + "Force Dark" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.dark = diceResult.dark + 1;
+ break;
+ case 7:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Dark)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.D + s2 + "Force Dark" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.dark = diceResult.dark + 1;
+ break;
+ case 8:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Dark)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.D + s2 + "Force Dark" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.dark = diceResult.dark + 1;
+ break;
+ case 9:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Dark)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.D + s2 + "Force Dark" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.dark = diceResult.dark + 1;
+ break;
+ case 10:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Dark)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.D + s2 + "Force Dark" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.dark = diceResult.dark + 1;
+ break;
+ case 11:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Dark)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.D + s2 + "Force Dark" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.dark = diceResult.dark + 1;
+ break;
+ case 12:
+ diceResult.diceTextLog = diceResult.diceTextLog + "(Dark x2)";
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.FORCE.DD + s2 + "Force Dark x2" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ diceResult.dark = diceResult.dark + 2;
+ break;
+ }
+ }
+ return diceResult;
+ },
+
+ success: function (diceQty) {
+ //Free Success
+ var i = 0;
+ var s1 = ' ';
+
+ var roll = 0;
+ var diceTextLog = "";
+ var diceGraphicsLog = "";
+
+ var diceResult = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+
+ diceResult.diceTextLog = diceTextLog + "(Success x" + diceQty + ")";
+ diceResult.success = diceResult.success + diceQty;
+ for (i = 0; i < diceQty; i++) {
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.SYMBOLS.S + s2 + "Success" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+
+ return diceResult;
+ },
+
+ advantage: function (diceQty) {
+ //Free Advantage
+ var i = 0;
+ var s1 = ' ';
+
+ var roll = 0;
+ var diceTextLog = "";
+ var diceGraphicsLog = "";
+
+ var diceResult = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+
+ diceResult.diceTextLog = diceTextLog + "(Advantage x" + diceQty + ")";
+ diceResult.advantage = diceResult.advantage + diceQty;
+ for (i = 0; i < diceQty; i++) {
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.SYMBOLS.A + s2 + "Advantage" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+
+ return diceResult;
+ },
+
+ threat: function (diceQty) {
+ //Free threat
+ var i = 0;
+ var s1 = ' ';
+
+ var roll = 0;
+ var diceTextLog = "";
+ var diceGraphicsLog = "";
+
+ var diceResult = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+
+ diceResult.diceTextLog = diceTextLog + "(Threat x" + diceQty + ")";
+ diceResult.threat = diceResult.threat + diceQty;
+ for (i = 0; i < diceQty; i++) {
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.SYMBOLS.T + s2 + "Threat" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+
+ return diceResult;
+ },
+
+ failure: function (diceQty) {
+ //Free Faliure
+ var i = 0;
+ var s1 = ' ';
+
+ var roll = 0;
+ var diceTextLog = "";
+ var diceGraphicsLog = "";
+
+ var diceResult = {
+ success: 0,
+ failure: 0,
+ advantage: 0,
+ threat: 0,
+ triumph: 0,
+ despair: 0,
+ light: 0,
+ dark: 0,
+ diceGraphicsLog: "",
+ diceTextLog: ""
+ };
+
+ diceResult.diceTextLog = diceTextLog + "(Failure x" + diceQty + ")";
+ diceResult.failure = diceResult.failure + diceQty;
+ for (i = 0; i < diceQty; i++) {
+ diceResult.diceGraphicsLog = diceResult.diceGraphicsLog + s1 + eote.defaults.graphics.SYMBOLS.F + s2 + "Success" + s3 + eote.defaults.globalVars.diceGraphicsChatSize + s4 + eote.defaults.globalVars.diceGraphicsChatSize + s5;
+ }
+
+ return diceResult;
+ }
+}
+
+eote.events = function () {
+
+ //event listner Add character defaults to new characters
+ on("add:character", function (characterObj) {
+ eote.setCharacterDefaults(characterObj);
+ });
+
+ on("chat:message", function (msg) {
+
+ if (msg.type != 'api') {
+ return;
+ }
+
+ eote.process.setup(msg.content, msg.who, msg.playerid);
+ });
+}
+
+on('ready', function () {
+ eote.init();
+});
\ No newline at end of file
diff --git a/Star Wars FFG API-Compatible/README.md b/Star Wars FFG API-Compatible/README.md
new file mode 100644
index 0000000000..7c997214d6
--- /dev/null
+++ b/Star Wars FFG API-Compatible/README.md
@@ -0,0 +1,2 @@
+# FFG-SWRPG-API-Compatible
+Roll20 Character Sheet for Fantasy Flight Games Star Wars Role Playing Game - For Pro (API) GMs
diff --git a/Star Wars FFG API-Compatible/sheet.json b/Star Wars FFG API-Compatible/sheet.json
new file mode 100644
index 0000000000..22009be75c
--- /dev/null
+++ b/Star Wars FFG API-Compatible/sheet.json
@@ -0,0 +1,8 @@
+{
+ "html": "FFG-SWRPG-CharacterSheet.html",
+ "css": "FFG-SWRPG-CharacterSheet.css",
+ "authors": "GM Knowledge Rhino",
+ "roll20userid": "472728",
+ "preview": "Character Sheet Preview.png",
+ "instructions": "This character sheet utilizes the FFG-SWRPG-Dice-Roller.js to perform many of the rolls of the sheet. Please make sure this is loaded."
+}
diff --git a/Street_Fighter-neovatar/README.md b/Street_Fighter-neovatar/README.md
index f25f8dbb62..c88469a6aa 100644
--- a/Street_Fighter-neovatar/README.md
+++ b/Street_Fighter-neovatar/README.md
@@ -43,5 +43,8 @@ This will create `Street_Fighter-neovatar.[css|html]` that you can copy and past
### Changelog
+**1.1.0:**
+* User sheet worker scripts to track wounds and used resources and to syncronize it with attributes shown with tokens (hp, willpower, chi)
+
**1.0.0:**
* Intitial release
\ No newline at end of file
diff --git a/Street_Fighter-neovatar/Street_Fighter-neovatar.css b/Street_Fighter-neovatar/Street_Fighter-neovatar.css
index 38009aa399..c5cbfee188 100644
--- a/Street_Fighter-neovatar/Street_Fighter-neovatar.css
+++ b/Street_Fighter-neovatar/Street_Fighter-neovatar.css
@@ -1,4 +1,4 @@
-/* version: 1.0.0 */
+/* version: 1.1.0 */
.charsheet label {
display: inline-block;
@@ -379,7 +379,7 @@ input.sheet-cursive {
label.sheet-filler {
display: inline-block;
- width: 40px;
+ width: 50px;
text-align: left;
padding-bottom: 0px;
font-size: 12px;
diff --git a/Street_Fighter-neovatar/Street_Fighter-neovatar.html b/Street_Fighter-neovatar/Street_Fighter-neovatar.html
index 64bf70b855..00b7e89bda 100644
--- a/Street_Fighter-neovatar/Street_Fighter-neovatar.html
+++ b/Street_Fighter-neovatar/Street_Fighter-neovatar.html
@@ -921,18 +921,18 @@
@@ -943,110 +943,110 @@
Chi
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
Willpower
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
Health
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1136,3 +1136,61 @@
+
+
+
diff --git a/Street_Fighter-neovatar/package.json b/Street_Fighter-neovatar/package.json
index 5fac675e60..95f83b7c57 100644
--- a/Street_Fighter-neovatar/package.json
+++ b/Street_Fighter-neovatar/package.json
@@ -1,6 +1,6 @@
{
"title": "Street Fighter Character Sheet",
- "version": "1.0.0",
+ "version": "1.1.0",
"name": "roll20-Street_Figter-neovatar",
"author": {
"name": "Thomas Seliger"
diff --git a/Street_Fighter-neovatar/sheet.json b/Street_Fighter-neovatar/sheet.json
index 0bc0273785..f3783ee102 100644
--- a/Street_Fighter-neovatar/sheet.json
+++ b/Street_Fighter-neovatar/sheet.json
@@ -4,5 +4,5 @@
"authors": "Thomas Seliger (neovatar)",
"roll20userid": "388327",
"preview": "Street_Fighter-neovatar.jpg",
- "instructions": "Charactersheet for 'Street Fighter: The Storytelling Game'.\n\nVersion: 1.0.0\n\nIf you find bugs or have suggestions, please use the [Github issue tracker](https://github.com/neovatar/roll20-character-sheets/issues) for this sheet.\n\nFor changes in this version, please check the [CHANGELOG](https://github.com/Roll20/roll20-character-sheets/blob/master/Street_Fighter-neovatar/README.md#changelog) on Roll20.net Github repository."
+ "instructions": "Charactersheet for 'Street Fighter: The Storytelling Game'.\n\nVersion: 1.1.0\n\nIf you find bugs or have suggestions, please use the [Github issue tracker](https://github.com/neovatar/roll20-character-sheets/issues) for this sheet.\n\nFor changes in this version, please check the [CHANGELOG](https://github.com/Roll20/roll20-character-sheets/blob/master/Street_Fighter-neovatar/README.md#changelog) on Roll20.net Github repository."
}
\ No newline at end of file
diff --git a/Street_Fighter-neovatar/src/Street_Fighter-neovatar.css b/Street_Fighter-neovatar/src/Street_Fighter-neovatar.css
index d4bfa2e798..4e0bc24977 100644
--- a/Street_Fighter-neovatar/src/Street_Fighter-neovatar.css
+++ b/Street_Fighter-neovatar/src/Street_Fighter-neovatar.css
@@ -379,7 +379,7 @@ input.sheet-cursive {
label.sheet-filler {
display: inline-block;
- width: 40px;
+ width: 50px;
text-align: left;
padding-bottom: 0px;
font-size: 12px;
diff --git a/Street_Fighter-neovatar/src/Street_Fighter-neovatar.html b/Street_Fighter-neovatar/src/Street_Fighter-neovatar.html
index 61596f9fd5..f2dd9f0c9f 100644
--- a/Street_Fighter-neovatar/src/Street_Fighter-neovatar.html
+++ b/Street_Fighter-neovatar/src/Street_Fighter-neovatar.html
@@ -921,18 +921,18 @@
@@ -943,110 +943,110 @@
Chi
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
Willpower
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
Health
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1136,3 +1136,61 @@
+
+
+
diff --git a/WFRP-2nd-Ed/WFRP-2nd-Ed.html b/WFRP-2nd-Ed/WFRP-2nd-Ed.html
index 7fbc80d733..012d0d1448 100644
--- a/WFRP-2nd-Ed/WFRP-2nd-Ed.html
+++ b/WFRP-2nd-Ed/WFRP-2nd-Ed.html
@@ -1,1546 +1,1235 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
Characteristics
-
-
-
-
-
-
-
-
-
- Weapon Skill
-
-
-
-
-
-
-
-
-
-
-
-
-
- Ballistic Skill
-
-
-
-
-
-
-
-
-
-
-
-
-
- Strength
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Toughness
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Agility
-
-
-
-
-
-
-
-
-
-
-
-
-
- Intelligence
-
-
-
-
-
-
-
-
-
-
-
-
-
- Willpower
-
-
-
-
-
-
-
-
-
-
-
-
-
- Fellowship
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Attacks
-
-
-
-
-
-
-
-
-
-
-
-
- Wounds
-
-
-
-
-
-
-
-
-
-
-
-
-
- Magic
-
-
-
-
-
-
-
-
-
-
-
-
- Fate Points
-
-
-
-
-
-
-
-
-
-
-
-
Initiative
-
-
-
-
-
-
-
-
-
- Initiative
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Health
-
-
-
-
-
-
-
-
-
-
-
-
- Insanity Points
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Skills
-
-
-
-
-
-
-
- Animal Care (Int)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Charm (Fel)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Command (Fel)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Concealment (Ag)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Consume Alcohol (T)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Disguise (Fel)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Drive (Str)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Evaluate (Int)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Gamble (Int)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Gossip (Fel)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Haggle (Fel)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Intimidate (Str)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Outdoor Survival (Int)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Perception (Int)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Ride (Ag)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Row (Str)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Scale Sheer Surface (Str)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Search (Int)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Silent Move (Ag)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Swim (Str)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Advanced Skills
-
-
-
-
-
-
-
-
-
-
-
- (Ag)
- (Fel)
- (Int)
- (S)
- (WP)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Weapons
-
-
-
-
-
-
-
-
-
-
-
-
-
- Main Hand
- Off Hand
- Two Handed
- Other
-
-
-
-
- Poor
- Common
- Good
- Best
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Very Easy (+30)
- Easy (+20)
- Routine (+10)
- Average
- Challenging (-10)
- Hard (-20)
- Very Hard (-30)
-
-
-
-
- Standard
- Swift Attack
- Charge Attack (+10)
- Guarded Attack (-10)
- All Out Attack (+20)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Very Easy (+30)
- Easy (+20)
- Routine (+10)
- Average
- Challenging (-10)
- Hard (-20)
- Very Hard (-30)
-
-
-
-
- Standard
- Swift Attack
-
-
-
-
-
-
-
- Short
- Long
- Extreme
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Armor
-
-
-
-
-
-
-
-
-
- Head
-
-
-
- Poor
- Common
- Good
- Best
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Arms
-
-
-
- Poor
- Common
- Good
- Best
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Body
-
-
-
- Poor
- Common
- Good
- Best
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Legs
-
-
-
- Poor
- Common
- Good
- Best
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+Warhammer
+
+
+
+
+
+
+
Characteristics
+
+
+
+
+
+
+
+
+
+Weapon Skill
+
+
+
+
+
+
+
+
+
+
+
+
+Ballistic Skill
+
+
+
+
+
+
+
+
+
+
+
+
+Strength
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toughness
+
+
+
+
+
+
+
+
+
+
+
+
+
+Agility
+
+
+
+
+
+
+
+
+
+
+
+
+Intelligence
+
+
+
+
+
+
+
+
+
+
+
+
+Willpower
+
+
+
+
+
+
+
+
+
+
+
+
+Fellowship
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Attacks
+
+
+
+
+
+
+
+
+
+
+
+Wounds
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Fate Points
+
+
+
+
+
+
+
+
+
+
+
Initiative
+
+
+
+
+
+
+
+
+
+Initiative
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Health
+
+
+
+
+
+
+
+
+
+
+
+
+Insanity Points
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Skills
+
+
+
+
+
+
+Animal Care (Int)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Charm (Fel)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Command (Fel)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Concealment (Ag)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Consume Alcohol (T)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Disguise (Fel)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Drive (Str)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Evaluate (Int)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Gamble (Int)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Gossip (Fel)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Haggle (Fel)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Intimidate (Str)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Outdoor Survival (Int)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Perception (Int)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Ride (Ag)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Row (Str)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Scale Sheer Surface (Str)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Search (Int)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Silent Move (Ag)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Swim (Str)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Advanced Skills
+
+
+
+
+
+
+
+
+(Ag) (Fel) (Int) (S) (WP)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Weapons
+
+
+
+
+
+
+
+
+
+
+Main Hand Off Hand Two Handed Other
+
+Poor Common Good Best
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Very Easy (+30) Easy (+20) Routine (+10) Average Challenging (-10) Hard (-20) Very Hard (-30)
+
+
+Standard Swift Attack Charge Attack (+10) Guarded Attack (-10) All Out Attack (+20)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Very Easy (+30) Easy (+20) Routine (+10) Average Challenging (-10) Hard (-20) Very Hard (-30)
+
+
+Standard Swift Attack
+
+
+
+
+
+Short Long Extreme
+
+
+
+
+
+
+
+
+
+
+
+
+
Armor
+
+
+
+
+
+
+
+
+
+Head
+
+
+Poor Common Good Best
+
+
+
+
+
+
+
+
+
+
+
+
+
+Arms
+
+
+Poor Common Good Best
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Body
+
+
+Poor Common Good Best
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Legs
+
+
+Poor Common Good Best
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/approved.yaml b/approved.yaml
index b5e877ae06..b38e9a03ea 100644
--- a/approved.yaml
+++ b/approved.yaml
@@ -434,8 +434,8 @@ eclipsephase:
- "13th Age Legacy"
- "13th Age"
-13thage:
- - "13th_Age"
+13thage:
+ - "13th_Age"
- "13th Age"
- "hidden"
@@ -775,7 +775,7 @@ strike:
dragonageBR:
- "Dragon-Age-RPG-PT-BR"
-- "Dragon Age RPG (Portugese)"
+- "Dragon Age RPG (Portuguese)"
- "AGE System"
onlywar:
@@ -839,23 +839,23 @@ pathfindersp:
fateacelerado:
- "Fate Acelerado BR"
-- "Fate Acelerado (Portugese/Brazilian)"
+- "Fate Acelerado (Portuguese/Brazilian)"
- "Fate"
fatebasico:
- "Fate Básico BR"
-- "Fate Basico (Portugese/Brazilian)"
+- "Fate Basico (Portuguese/Brazilian)"
- "Fate"
fatejadepunkbr:
- "Fate Jadepunk BR"
-- "Fate Jadepunk BR (Portugese/Brazilian)"
+- "Fate Jadepunk BR (Portuguese/Brazilian)"
- "Fate"
dungeonworldbr:
- "Dungeon World Português"
-- "Dungeon World (Portugese/Brazilian)"
-- "Dungeon World"
+- "Dungeon World (Portuguese/Brazilian)"
+- "Apocalypse World Engine"
dungeonslayers:
- "Dungeon-slayers-4"
@@ -928,7 +928,7 @@ official13thage:
- "13th Age"
officialnwod:
-- "New World of Darkness Offical"
+- "New World of Darkness Official"
- "New World of Darkness Official Sheet"
- "Storytelling System"
@@ -944,7 +944,7 @@ dnd35espanish:
cwodm20:
- "CWOD-M20"
-- "Mage: The Ascention 20th Anniversary Edition (cWoD)"
+- "Mage: The Ascension 20th Anniversary Edition (cWoD)"
- "Storytelling System"
cthulhutech:
@@ -1140,3 +1140,30 @@ hollowearthexpedition:
- "HollowEarthExpedition"
- "Hollow Earth Expedition"
- "Ubiquity"
+
+aliens:
+- "Aliens"
+- "Aliens"
+
+dogsinthevineyard:
+- "Dogs-in-the-Vineyard"
+- "Dogs in the Vineyard"
+
+cahiersduvastemondefr:
+- "CahiersDuVastemonde"
+- "Cahiers du Vastemonde"
+
+dungeonworldfr:
+- "DungeonWorldFrench"
+- "Dungeon World (French)"
+- "Apocalypse World Engine"
+
+nightshadeacademy:
+- "Nightshade Academy"
+- "Nightshade Academy"
+- "Fate"
+
+# starwarseoteapi:
+# - "Star Wars FFG API-Compatible"
+# - "Star Wars: Edge of the Empire (API-Compatible) new" # REMOVE THE NEW
+# - "Star Wars"
\ No newline at end of file