diff --git a/_macros/hotbar_0e/death_save.js b/_macros/hotbar_0e/death_save.js
index 8957565..85fbb53 100644
--- a/_macros/hotbar_0e/death_save.js
+++ b/_macros/hotbar_0e/death_save.js
@@ -46,17 +46,17 @@ if ((macroTarget === 'character' && !game.user.character) || (macroTarget === 't
buttons: {
button1: {
label: `Advantage`,
- callback: () => game.mosh.initRollTable(`cZOHlhEJcYGZsQBM`,`1d10 [+]`,`high`,false,false,null,null),
+ callback: () => game.mosh.initRollTable(game.settings.get('mosh','table0eDeath'),`1d10 [+]`,`high`,false,false,null,null),
icon: ``
},
button2: {
label: `Normal`,
- callback: () => game.mosh.initRollTable(`cZOHlhEJcYGZsQBM`,`1d10`,`high`,false,false,null,null),
+ callback: () => game.mosh.initRollTable(game.settings.get('mosh','table0eDeath'),`1d10`,`high`,false,false,null,null),
icon: ``
},
button3: {
label: `Disadvantage`,
- callback: () => game.mosh.initRollTable(`cZOHlhEJcYGZsQBM`,`1d10 [-]`,`high`,false,false,null,null),
+ callback: () => game.mosh.initRollTable(game.settings.get('mosh','table0eDeath'),`1d10 [-]`,`high`,false,false,null,null),
icon: ``
}
}
diff --git a/_macros/hotbar_1e/death_save.js b/_macros/hotbar_1e/death_save.js
index 486e7e1..90fa6d1 100644
--- a/_macros/hotbar_1e/death_save.js
+++ b/_macros/hotbar_1e/death_save.js
@@ -46,17 +46,17 @@ if ((macroTarget === 'character' && !game.user.character) || (macroTarget === 't
buttons: {
button1: {
label: `Advantage`,
- callback: () => game.mosh.initRollTable(`W36WFIpCfMknKgHy`,`1d10 [+]`,`low`,true,false,null,null),
+ callback: () => game.mosh.initRollTable(game.settings.get('mosh','table1eDeath'),`1d10 [+]`,`low`,true,false,null,null),
icon: ``
},
button2: {
label: `Normal`,
- callback: () => game.mosh.initRollTable(`W36WFIpCfMknKgHy`,`1d10`,`low`,true,false,null,null),
+ callback: () => game.mosh.initRollTable(game.settings.get('mosh','table1eDeath'),`1d10`,`low`,true,false,null,null),
icon: ``
},
button3: {
label: `Disadvantage`,
- callback: () => game.mosh.initRollTable(`W36WFIpCfMknKgHy`,`1d10 [-]`,`low`,true,false,null,null),
+ callback: () => game.mosh.initRollTable(game.settings.get('mosh','table1eDeath'),`1d10 [-]`,`low`,true,false,null,null),
icon: ``
}
}
diff --git a/_macros/triggered_0e/death_save+.js b/_macros/triggered_0e/death_save+.js
index cd55b42..4649408 100644
--- a/_macros/triggered_0e/death_save+.js
+++ b/_macros/triggered_0e/death_save+.js
@@ -1 +1 @@
-game.mosh.initRollTable(`cZOHlhEJcYGZsQBM`,`1d10 [+]`,`high`,false,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table0eDeath'),`1d10 [+]`,`high`,false,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_0e/death_save-.js b/_macros/triggered_0e/death_save-.js
index 542ec68..30cd734 100644
--- a/_macros/triggered_0e/death_save-.js
+++ b/_macros/triggered_0e/death_save-.js
@@ -1 +1 @@
-game.mosh.initRollTable(`cZOHlhEJcYGZsQBM`,`1d10 [-]`,`high`,false,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table0eDeath'),`1d10 [-]`,`high`,false,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/-1_hull.js b/_macros/triggered_1e/-1_hull.js
new file mode 100644
index 0000000..6db7092
--- /dev/null
+++ b/_macros/triggered_1e/-1_hull.js
@@ -0,0 +1 @@
+game.mosh.initModifyActor('system.supplies.hull.value',-1,null,true);
\ No newline at end of file
diff --git a/_macros/triggered_1e/-1_upgrade.js b/_macros/triggered_1e/-1_upgrade.js
new file mode 100644
index 0000000..a518f3e
--- /dev/null
+++ b/_macros/triggered_1e/-1_upgrade.js
@@ -0,0 +1 @@
+game.mosh.initModifyActor('system.supplies.upgrades.value',-1,null,true);
\ No newline at end of file
diff --git a/_macros/triggered_1e/-1d10_battle.js b/_macros/triggered_1e/-1d10_battle.js
new file mode 100644
index 0000000..87b6d30
--- /dev/null
+++ b/_macros/triggered_1e/-1d10_battle.js
@@ -0,0 +1 @@
+game.mosh.initModifyActor('system.stats.battle.value',null,'-1d10',true);
\ No newline at end of file
diff --git a/_macros/triggered_1e/-1d10_systems.js b/_macros/triggered_1e/-1d10_systems.js
new file mode 100644
index 0000000..cabc245
--- /dev/null
+++ b/_macros/triggered_1e/-1d10_systems.js
@@ -0,0 +1 @@
+game.mosh.initModifyActor('system.stats.systems.value',null,'-1d10',true);
\ No newline at end of file
diff --git a/_macros/triggered_1e/-1d5_oxygen.js b/_macros/triggered_1e/-1d5_oxygen.js
new file mode 100644
index 0000000..54c6ca9
--- /dev/null
+++ b/_macros/triggered_1e/-1d5_oxygen.js
@@ -0,0 +1 @@
+game.mosh.initModifyActor('system.stats.oxygen.value',null,'-1d5',true);
\ No newline at end of file
diff --git a/_macros/triggered_1e/-2d10_thrusters.js b/_macros/triggered_1e/-2d10_thrusters.js
new file mode 100644
index 0000000..65c554c
--- /dev/null
+++ b/_macros/triggered_1e/-2d10_thrusters.js
@@ -0,0 +1 @@
+game.mosh.initModifyActor('system.health.value',null,'-1d10',true);
\ No newline at end of file
diff --git a/_macros/triggered_1e/-50%_crew_capacity.js b/_macros/triggered_1e/-50%_crew_capacity.js
new file mode 100644
index 0000000..91f60fd
--- /dev/null
+++ b/_macros/triggered_1e/-50%_crew_capacity.js
@@ -0,0 +1,36 @@
+prepModifyActor();
+
+//tell the actor to run the function
+async function prepModifyActor(fieldAddress,modValue,modRollString,outputChatMsg) {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noCharSelected();
+ } else {
+ //get the health for this token
+ let curValue = game.user.character.system.supplies.crew.max;
+ //calculate difference
+ let lowerBy = Math.ceil(curValue/2)*-1;
+ //run the function for the player's 'Selected Character'
+ game.user.character.modifyActor('system.supplies.crew.max',lowerBy,null,true);
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noCharSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ //get the health for this token
+ let curValue = token.actor.system.supplies.crew.max;
+ //calculate difference
+ let lowerBy = Math.ceil(curValue/2)*-1;
+ //run the function on this token
+ token.actor.modifyActor('system.supplies.crew.max',lowerBy,null,true);
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/bankruptcy_save+.js b/_macros/triggered_1e/bankruptcy_save+.js
new file mode 100644
index 0000000..15de0eb
--- /dev/null
+++ b/_macros/triggered_1e/bankruptcy_save+.js
@@ -0,0 +1,27 @@
+prepBankruptcySave();
+
+//tell the actor to run the function
+async function prepBankruptcySave() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.rollCheck(`1d100 [+]`,`low`,`bankruptcySave`,null,null,null);
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.rollCheck(`1d100 [+]`,`low`,`bankruptcySave`,null,null,null);
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/bankruptcy_save-.js b/_macros/triggered_1e/bankruptcy_save-.js
new file mode 100644
index 0000000..a1ffa99
--- /dev/null
+++ b/_macros/triggered_1e/bankruptcy_save-.js
@@ -0,0 +1,27 @@
+prepBankruptcySave();
+
+//tell the actor to run the function
+async function prepBankruptcySave() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.rollCheck(`1d100 [-]`,`low`,`bankruptcySave`,null,null,null);
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.rollCheck(`1d100 [-]`,`low`,`bankruptcySave`,null,null,null);
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/bankruptcy_save.js b/_macros/triggered_1e/bankruptcy_save.js
new file mode 100644
index 0000000..0c609fc
--- /dev/null
+++ b/_macros/triggered_1e/bankruptcy_save.js
@@ -0,0 +1,27 @@
+prepBankruptcySave();
+
+//tell the actor to run the function
+async function prepBankruptcySave() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.bankruptcySave();
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.bankruptcySave();
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/bleeding_wound+.js b/_macros/triggered_1e/bleeding_wound+.js
index 3f9cdaf..22a8ab5 100644
--- a/_macros/triggered_1e/bleeding_wound+.js
+++ b/_macros/triggered_1e/bleeding_wound+.js
@@ -1 +1 @@
-game.mosh.initRollTable(`ata3fRz3uoPfNCLh`,`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBleeding'),`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/bleeding_wound-.js b/_macros/triggered_1e/bleeding_wound-.js
index 03b2022..6ef50aa 100644
--- a/_macros/triggered_1e/bleeding_wound-.js
+++ b/_macros/triggered_1e/bleeding_wound-.js
@@ -1 +1 @@
-game.mosh.initRollTable(`ata3fRz3uoPfNCLh`,`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBleeding'),`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/bleeding_wound.js b/_macros/triggered_1e/bleeding_wound.js
index 149a8d9..59d6576 100644
--- a/_macros/triggered_1e/bleeding_wound.js
+++ b/_macros/triggered_1e/bleeding_wound.js
@@ -1 +1 @@
-game.mosh.initRollTable(`ata3fRz3uoPfNCLh`,`1d10`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBleeding'),`1d10`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/blunt_force_wound+.js b/_macros/triggered_1e/blunt_force_wound+.js
index fcff5a6..e849e9e 100644
--- a/_macros/triggered_1e/blunt_force_wound+.js
+++ b/_macros/triggered_1e/blunt_force_wound+.js
@@ -1 +1 @@
-game.mosh.initRollTable(`31YibfjueXuZdNLb`,`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBluntForce'),`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/blunt_force_wound-.js b/_macros/triggered_1e/blunt_force_wound-.js
index 4e3d24d..4f00228 100644
--- a/_macros/triggered_1e/blunt_force_wound-.js
+++ b/_macros/triggered_1e/blunt_force_wound-.js
@@ -1 +1 @@
-game.mosh.initRollTable(`31YibfjueXuZdNLb`,`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBluntForce'),`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/blunt_force_wound.js b/_macros/triggered_1e/blunt_force_wound.js
index 8dd8282..aad9e6a 100644
--- a/_macros/triggered_1e/blunt_force_wound.js
+++ b/_macros/triggered_1e/blunt_force_wound.js
@@ -1 +1 @@
-game.mosh.initRollTable(`31YibfjueXuZdNLb`,`1d10`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBluntForce'),`1d10`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/death_save+.js b/_macros/triggered_1e/death_save+.js
index 26aa2ee..85f810a 100644
--- a/_macros/triggered_1e/death_save+.js
+++ b/_macros/triggered_1e/death_save+.js
@@ -1 +1 @@
-game.mosh.initRollTable(`W36WFIpCfMknKgHy`,`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eDeath'),`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/death_save-.js b/_macros/triggered_1e/death_save-.js
index 03c72a0..66dbc80 100644
--- a/_macros/triggered_1e/death_save-.js
+++ b/_macros/triggered_1e/death_save-.js
@@ -1 +1 @@
-game.mosh.initRollTable(`W36WFIpCfMknKgHy`,`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eDeath'),`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/fire_&_explosives_wound+.js b/_macros/triggered_1e/fire_&_explosives_wound+.js
index 97a8c54..27098b3 100644
--- a/_macros/triggered_1e/fire_&_explosives_wound+.js
+++ b/_macros/triggered_1e/fire_&_explosives_wound+.js
@@ -1 +1 @@
-game.mosh.initRollTable(`lqiaWwh5cGcJhvnu`,`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundFireExplosives'),`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/fire_&_explosives_wound-.js b/_macros/triggered_1e/fire_&_explosives_wound-.js
index d781215..ed220d0 100644
--- a/_macros/triggered_1e/fire_&_explosives_wound-.js
+++ b/_macros/triggered_1e/fire_&_explosives_wound-.js
@@ -1 +1 @@
-game.mosh.initRollTable(`lqiaWwh5cGcJhvnu`,`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundFireExplosives'),`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/fire_&_explosives_wound.js b/_macros/triggered_1e/fire_&_explosives_wound.js
index 1db2364..d76bea7 100644
--- a/_macros/triggered_1e/fire_&_explosives_wound.js
+++ b/_macros/triggered_1e/fire_&_explosives_wound.js
@@ -1 +1 @@
-game.mosh.initRollTable(`lqiaWwh5cGcJhvnu`,`1d10`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundFireExplosives'),`1d10`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/gore_&_massive_wound+.js b/_macros/triggered_1e/gore_&_massive_wound+.js
index f6c6256..a11bb41 100644
--- a/_macros/triggered_1e/gore_&_massive_wound+.js
+++ b/_macros/triggered_1e/gore_&_massive_wound+.js
@@ -1 +1 @@
-game.mosh.initRollTable(`uVfC1CqYdojaJ7yRd`,`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGoreMassive'),`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/gore_&_massive_wound-.js b/_macros/triggered_1e/gore_&_massive_wound-.js
index 19ede53..579c627 100644
--- a/_macros/triggered_1e/gore_&_massive_wound-.js
+++ b/_macros/triggered_1e/gore_&_massive_wound-.js
@@ -1 +1 @@
-game.mosh.initRollTable(`uVfC1CqYdojaJ7yR`,`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGoreMassive'),`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/gore_&_massive_wound.js b/_macros/triggered_1e/gore_&_massive_wound.js
index b5e2565..e8e768a 100644
--- a/_macros/triggered_1e/gore_&_massive_wound.js
+++ b/_macros/triggered_1e/gore_&_massive_wound.js
@@ -1 +1 @@
-game.mosh.initRollTable(`uVfC1CqYdojaJ7yR`,`1d10`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGoreMassive'),`1d10`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/gunshot_wound+.js b/_macros/triggered_1e/gunshot_wound+.js
index 219ca27..c9ed71a 100644
--- a/_macros/triggered_1e/gunshot_wound+.js
+++ b/_macros/triggered_1e/gunshot_wound+.js
@@ -1 +1 @@
-game.mosh.initRollTable(`XjDU2xFOWEasaZK0`,`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGunshot'),`1d10 [+]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/gunshot_wound-.js b/_macros/triggered_1e/gunshot_wound-.js
index f6eb3e9..3f77011 100644
--- a/_macros/triggered_1e/gunshot_wound-.js
+++ b/_macros/triggered_1e/gunshot_wound-.js
@@ -1 +1 @@
-game.mosh.initRollTable(`XjDU2xFOWEasaZK0`,`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGunshot'),`1d10 [-]`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/gunshot_wound.js b/_macros/triggered_1e/gunshot_wound.js
index 55f0228..9937339 100644
--- a/_macros/triggered_1e/gunshot_wound.js
+++ b/_macros/triggered_1e/gunshot_wound.js
@@ -1 +1 @@
-game.mosh.initRollTable(`XjDU2xFOWEasaZK0`,`1d10`,`low`,true,false,null,null);
\ No newline at end of file
+game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGunshot'),`1d10`,`low`,true,false,null,null);
\ No newline at end of file
diff --git a/_macros/triggered_1e/maintenance_check+.js b/_macros/triggered_1e/maintenance_check+.js
new file mode 100644
index 0000000..ccda8ce
--- /dev/null
+++ b/_macros/triggered_1e/maintenance_check+.js
@@ -0,0 +1,27 @@
+prepMaintenanceCheck();
+
+//tell the actor to run the function
+async function prepMaintenanceCheck() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.rollTable(`maintenanceCheck`,`1d100 [+]`,`low`,null,null,null,null);
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.rollTable(`maintenanceCheck`,`1d100 [+]`,`low`,null,null,null,null);
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/maintenance_check-.js b/_macros/triggered_1e/maintenance_check-.js
new file mode 100644
index 0000000..db1c0f1
--- /dev/null
+++ b/_macros/triggered_1e/maintenance_check-.js
@@ -0,0 +1,27 @@
+prepMaintenanceCheck();
+
+//tell the actor to run the function
+async function prepMaintenanceCheck() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.rollTable(`maintenanceCheck`,`1d100 [-]`,`low`,null,null,null,null);
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.rollTable(`maintenanceCheck`,`1d100 [-]`,`low`,null,null,null,null);
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/maintenance_check.js b/_macros/triggered_1e/maintenance_check.js
new file mode 100644
index 0000000..d1b50c6
--- /dev/null
+++ b/_macros/triggered_1e/maintenance_check.js
@@ -0,0 +1,27 @@
+prepMaintenanceCheck();
+
+//tell the actor to run the function
+async function prepMaintenanceCheck() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.maintenanceCheck();
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.maintenanceCheck();
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/morale_check+.js b/_macros/triggered_1e/morale_check+.js
new file mode 100644
index 0000000..56d51b5
--- /dev/null
+++ b/_macros/triggered_1e/morale_check+.js
@@ -0,0 +1,27 @@
+prepMoraleCheck();
+
+//tell the actor to run the function
+async function prepMoraleCheck() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.rollCheck(`1d10 [+]`,`high`,`moraleCheck`,null,null,null);
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.rollCheck(`1d10 [+]`,`high`,`moraleCheck`,null,null,null);
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/morale_check-.js b/_macros/triggered_1e/morale_check-.js
new file mode 100644
index 0000000..5dddfbe
--- /dev/null
+++ b/_macros/triggered_1e/morale_check-.js
@@ -0,0 +1,27 @@
+prepMoraleCheck();
+
+//tell the actor to run the function
+async function prepMoraleCheck() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.rollCheck(`1d10 [-]`,`high`,`moraleCheck`,null,null,null);
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.rollCheck(`1d10 [-]`,`high`,`moraleCheck`,null,null,null);
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/morale_check.js b/_macros/triggered_1e/morale_check.js
new file mode 100644
index 0000000..e6637c5
--- /dev/null
+++ b/_macros/triggered_1e/morale_check.js
@@ -0,0 +1,27 @@
+prepMoraleCheck();
+
+//tell the actor to run the function
+async function prepMoraleCheck() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.moraleCheck();
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.moraleCheck();
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/roll_maintenance_issue.js b/_macros/triggered_1e/roll_maintenance_issue.js
new file mode 100644
index 0000000..93c6ee2
--- /dev/null
+++ b/_macros/triggered_1e/roll_maintenance_issue.js
@@ -0,0 +1,27 @@
+prepMaintenanceCheck();
+
+//tell the actor to run the function
+async function prepMaintenanceCheck() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.rollTable(`maintenanceCheck`,`1d100`,`low`,null,null,null,null);
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.rollTable(`maintenanceCheck`,`1d100`,`low`,null,null,null,null);
+ });
+ }
+ }
+}
diff --git a/_macros/triggered_1e/starting_condition+.js b/_macros/triggered_1e/starting_condition+.js
new file mode 100644
index 0000000..ccda8ce
--- /dev/null
+++ b/_macros/triggered_1e/starting_condition+.js
@@ -0,0 +1,27 @@
+prepMaintenanceCheck();
+
+//tell the actor to run the function
+async function prepMaintenanceCheck() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.rollTable(`maintenanceCheck`,`1d100 [+]`,`low`,null,null,null,null);
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.rollTable(`maintenanceCheck`,`1d100 [+]`,`low`,null,null,null,null);
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/starting_condition-.js b/_macros/triggered_1e/starting_condition-.js
new file mode 100644
index 0000000..db1c0f1
--- /dev/null
+++ b/_macros/triggered_1e/starting_condition-.js
@@ -0,0 +1,27 @@
+prepMaintenanceCheck();
+
+//tell the actor to run the function
+async function prepMaintenanceCheck() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.rollTable(`maintenanceCheck`,`1d100 [-]`,`low`,null,null,null,null);
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.rollTable(`maintenanceCheck`,`1d100 [-]`,`low`,null,null,null,null);
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/starting_condition.js b/_macros/triggered_1e/starting_condition.js
new file mode 100644
index 0000000..d1b50c6
--- /dev/null
+++ b/_macros/triggered_1e/starting_condition.js
@@ -0,0 +1,27 @@
+prepMaintenanceCheck();
+
+//tell the actor to run the function
+async function prepMaintenanceCheck() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character || !game.user.character.type === 'ship') {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.maintenanceCheck();
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noShipSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.maintenanceCheck();
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/take_-1d10_cryo_damage.js b/_macros/triggered_1e/take_-1d10_cryo_damage.js
new file mode 100644
index 0000000..1b2a208
--- /dev/null
+++ b/_macros/triggered_1e/take_-1d10_cryo_damage.js
@@ -0,0 +1,27 @@
+prepCryoDamage();
+
+//tell the actor to run the function
+async function prepCryoDamage() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character) {
+ //warn player
+ game.mosh.noCharSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.takeCryoDamage('-1d10');
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noCharSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.takeCryoDamage('-1d10');
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/_macros/triggered_1e/take_-1d5_cryo_damage.js b/_macros/triggered_1e/take_-1d5_cryo_damage.js
new file mode 100644
index 0000000..38aa833
--- /dev/null
+++ b/_macros/triggered_1e/take_-1d5_cryo_damage.js
@@ -0,0 +1,27 @@
+prepCryoDamage();
+
+//tell the actor to run the function
+async function prepCryoDamage() {
+ //determine who to run the macro for
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ //is there a selected character? warn if no
+ if (!game.user.character) {
+ //warn player
+ game.mosh.noCharSelected();
+ } else {
+ //run the function for the player's 'Selected Character'
+ game.user.character.takeCryoDamage('-1d5');
+ }
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ //is there a selected character? warn if no
+ if (!canvas.tokens.controlled.length) {
+ //warn player
+ game.mosh.noCharSelected();
+ } else {
+ //run the function for all selected tokens
+ canvas.tokens.controlled.forEach(function(token){
+ token.actor.takeCryoDamage('-1d5');
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/css/mosh.css b/css/mosh.css
index 647827f..40aa5c3 100644
--- a/css/mosh.css
+++ b/css/mosh.css
@@ -215,6 +215,76 @@ p {
font-family: "Roboto", sans-serif;
}
+.mosh input {
+ font-weight: inherit;
+ font-family: 'Roboto';
+}
+
+.mosh .center-icon{
+ font-size: 42px;
+ align-items: center;
+ justify-content: center;
+ display: flex;
+}
+
+.mosh .transponder input[type="checkbox"] {
+ /* display: none; */
+ appearance: inherit;
+ border: 2px white;
+ border-style: double;
+ border-radius: 100px;
+}
+
+
+.mosh .transponder input[type="checkbox"]:checked, .mosh input[type="radio"]:checked {
+ background: white;
+ border-radius: 100px;
+ appearance: inherit;
+ animation: transponderblink 0.5s alternate infinite;
+ box-shadow: 0 0 15px white;
+}
+
+.mosh .transponder input[type="checkbox"]::after {
+ content: "DISABLED";
+ color: grey;
+ position: relative;
+ /* margin-left: -1rem; */
+ display: inline-block;
+ right: -25px;
+ font-size: 17px;
+ font-weight: bold;
+ font-family: 'Roboto';
+ bottom: 2px;
+}
+
+.mosh .transponder input[type="checkbox"]:checked::after {
+ content: "ENABLED";
+ color: grey;
+ position: relative;
+ /* margin-left: -1rem; */
+ display: inline-block;
+ right: -25px;
+ font-size: 17px;
+ font-weight: bold;
+ font-family: 'Roboto';
+ bottom: 2px;
+ /* text-shadow: 0 0 11px grey; */
+}
+
+@keyframes transponderblink {
+ from {background-color: black;}
+ to {
+ background-color: white;
+ }
+}
+
+@keyframes transpondertextblink {
+ from {color: grey;}
+ to {
+ color: white;
+ }
+}
+
.mosh .char-header {
-webkit-box-flex: 0;
/* -ms-flex: 0 0 610px;
@@ -306,7 +376,8 @@ p {
border-bottom: 2px solid black; */
background: black;
color: white;
- padding: 3px 0;
+ padding: 6px 0;
+ border-radius: 10px;
}
.mosh .tox .tox-editor-container {
@@ -444,7 +515,7 @@ p {
.mosh .items-list .skill-name {
font-weight: bold;
font-size: 14px;
- font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ /* font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; */
color: white;
/* text-transform: uppercase; */
margin-left: 0px;
@@ -459,7 +530,7 @@ p {
.mosh .items-list .skill-stat {
font-size: medium;
- font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ /* font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; */
color: #111;
margin-left: 0px;
/* background: black; */
@@ -477,27 +548,179 @@ p {
text-align: right;
}
+.mosh .button-black {
+ font-weight: bold;
+ font-size: 16px;
+ color: white;
+ margin-left: 0px;
+ background: #111;
+ border-radius: 21px;
+ text-align: center;
+ overflow: hidden;
+ padding: 10px;
+}
+
+.button-black:hover,
+.button-black:focus{
+ /* color: #ffffff; */
+ text-shadow: 0 0 10px rgb(112, 112, 112);
+ box-shadow: 0 0 10px 0px #9e9e9e;
+ background: #202020;
+ cursor: pointer;
+}
+
+.mosh .button-grey {
+ font-weight: bold;
+ font-size: 16px;
+ color: white;
+ margin-left: 0px;
+ background: grey;
+ border-radius: 21px;
+ text-align: center;
+ overflow: hidden;
+ padding: 10px;
+}
+
+.button-grey:hover,
+.button-grey:focus{
+ /* color: #494949; */
+ text-shadow: 0 0 10px rgb(112, 112, 112);
+ box-shadow: 0 0 5px 0px #b9b9b9;
+ background: rgb(100, 100, 100);
+ cursor: pointer;
+ /* border: 1px solid #ffffff; */
+}
+
+.mosh .button-white {
+ font-weight: bold;
+ font-size: 16px;
+ color: #111;
+ margin-left: 0px;
+ background: white;
+ border-radius: 21px;
+ text-align: center;
+ overflow: hidden;
+ padding: 10px;
+ border: 3px solid #111;
+}
+
+/* Dropdown Button */
+.mosh .dropbtn {
+ background-color: #111;
+ color: white;
+ padding: 16px;
+ font-size: 16px;
+ border: none;
+}
+
+/* The container
- needed to position the dropdown content */
+.mosh.dropdown {
+ position: relative;
+ display: inline-block;
+}
+
+/* Dropdown Content (Hidden by Default) */
+.mosh .dropdown-content {
+ display: none;
+ position: absolute;
+ background-color: #f1f1f1;
+ min-width: 160px;
+ box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+ z-index: 1;
+}
+
+/* Links inside the dropdown */
+.mosh .dropdown-content a {
+ color: black;
+ padding: 12px 16px;
+ text-decoration: none;
+ display: block;
+}
+
+/* Change color of dropdown links on hover */
+.mosh .dropdown-content a:hover {background-color: #ddd;}
+
+/* Show the dropdown menu on hover */
+.mosh .dropdown:hover .dropdown-content {display: block;}
+
+/* Change the background color of the dropdown button when the dropdown content is shown */
+.mosh .dropdown:hover .dropbtn {background-color: #3d3d3d;}
+
+
+.mosh .sbt-profile {
+ width: 100px;
+ height: auto;
+ border: 0;
+ padding: 10px;
+}
+
+.mosh .sbt-crew-name .hidden-item-controls {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 86px;
+ flex: 0 0 86px;
+ text-align: right;
+ display: none;
+}
+
+.mosh .sbt-crew-name:hover .hidden-item-controls {
+ -webkit-box-flex: 0;
+ -ms-flex: 0 0 86px;
+ flex: 0 0 86px;
+ text-align: right;
+ display: inline;
+}
+
+.mosh .sbt-deckplan{
+ width: 100%;
+ height: auto;
+ border: 0;
+
+ transition: 2s;
+}
+
+.mosh .sbt-deckplan-parent{
+ height: 185px;
+ overflow: auto;
+ transition: 2s;
+ border-radius: 10px;
+}
+
+.mosh .sbt-deckplan-parent:hover {
+ z-index: 10000;
+ /* height: auto; */
+}
+
+.mosh .sbt-megadamage-menu {
+ padding: 15px;
+ /* font-size: 15px; */
+}
+
+.mosh .invert-title{
+ mix-blend-mode: difference;
+}
+
.mosh .tab-select {
font-size: medium;
font-weight: bold;
- font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ /* font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; */
color: white;
text-align: center;
}
.mosh .tab-select.active {
text-decoration: underline;
+ text-shadow: 0 0 10px white;
}
-.mosh .tab-select.active::before {
+/* .mosh .tab-select.active::before {
font-family: "Font Awesome 6 Pro";
content: "\f0da";
- color:white;
+ color:rgb(255, 113, 113);
position: relative;
right: 6px;
margin-left: -1rem;
display: inline-block;
-}
+} */
.mosh .stresstext {
width: 100%;
@@ -607,11 +830,31 @@ p {
align-items: start;
height: 40px;
padding: 0;
- border: 2px solid #111;
+ border: 3px solid #111;
border-radius: 1.5em;
background: 0;
}
+.mosh .textvaluewrapper{
+ grid-column: 1/-1;
+ display: grid;
+ align-items: start;
+ height: 40px;
+ padding: 0;
+ border: 3px solid #111;
+ border-radius: 0.5em;
+ background: 0;
+}
+
+.mosh .textvaluewrapper-input{
+ margin: auto;
+ border: 0px solid #111;
+ font-size: 1rem;
+ font-weight: bold;
+ text-align: center;
+ background: transparent;
+}
+
.mosh .armorWrapper{
grid-column: 1/-1;
display: grid;
@@ -624,6 +867,12 @@ p {
width: 100%;
}
+.mosh .blankstat{
+ grid-template-rows: 0.3fr 1.1fr 0.4fr;
+ justify-self: center;
+ display: grid;
+ justify-items: center;
+}
.mosh .minmaxtopstat{
grid-template-columns: 1fr 1fr;
@@ -640,9 +889,22 @@ p {
align-items: start;
height: 40px;
padding: 0;
- border: 2px solid #111;
+ border: 3px solid #111;
+ border-radius: 1.5em;
+ background: white;
+}
+
+.mosh .minmaxwrapper-black{
+ grid-column: 1/-1;
+ display: grid;
+ grid-template-columns: 1fr 1px 1fr;
+ align-items: start;
+ height: 40px;
+ padding: 0;
+ border: 3px solid #111;
border-radius: 1.5em;
background: 0;
+ color: white;
}
.mosh .minmaxtext{
@@ -665,9 +927,10 @@ p {
.mosh .healthmaxtext{
grid-column: span 1;
font-size: 0.7rem;
- font-weight: 500;
+ font-weight: bold;
line-height: 1;
text-align: center;
+ margin-top: 3px;
}
.mosh .stresslabel {
@@ -691,6 +954,56 @@ p {
width: 98%;
}
+.mosh .circle-statwrapper {
+ display: flex;
+ width: 100%;
+ align-items: center;
+ justify-content: center;
+ background: #e3e3e3;
+ border-radius: 15px;
+ padding: 9px 0px;
+ flex-direction: column;
+}
+
+.mosh .circle-statwrapper-horizontal {
+ display: flex;
+ width: 100%;
+ align-items: center;
+ justify-content: center;
+ background: #e3e3e3;
+ border-radius: 15px;
+ padding: 9px 0px;
+ flex-direction:row;
+}
+
+.mosh .circle-statwrapper-vertical {
+ display: flex;
+ width: 100%;
+ align-items: center;
+ justify-content: center;
+ background: #e3e3e3;
+ border-radius: 15px;
+ padding: 9px 0px;
+ flex-direction: column;
+}
+
+.mosh .transparentBackground {
+ background: transparent;
+}
+
+.mosh .section-vertical-flex {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+
+.mosh .circle-stat {
+ margin-top: 10px;
+ /* width: 98%; */
+}
+
.mosh .creature-mainstat {
position: relative;
display: grid;
@@ -720,12 +1033,55 @@ p {
text-transform: uppercase;
}
+
+.mosh .area-title {
+ width: 100%;
+ font-size: 1.0rem;
+ font-weight: bold;
+ text-align: center;
+ text-transform: uppercase;
+ /* margin-bottom: 7px; */
+ color: #363636;
+ font-family: 'Roboto';
+}
+
+.mosh .circlestatlabel {
+ padding: 6px;
+ text-align: center;
+}
+
+.mosh .circlestattitle {
+ width: 100%;
+ font-size: 1.0rem;
+ font-weight: bold;
+ text-align: center;
+ text-transform: uppercase;
+ /* margin-bottom: 7px; */
+ color: grey;
+}
+
+.mosh .black {
+ color: black;
+}
+
+.mosh .grey {
+ color: grey;
+}
+
+.mosh .circlestattext {
+ width: 100%;
+ font-size: 0.9rem;
+ font-weight: bold;
+ text-align: center;
+ text-transform: uppercase;
+}
+
.mosh .circle-input {
margin: -0.15em;
height: 50px;
width: 50px;
padding: 0;
- border: 2px solid #111;
+ border: 3px solid #111;
border-radius: 3em;
font-size: 1.5rem;
font-weight: bold;
@@ -734,16 +1090,41 @@ p {
z-index: 5;
}
+.mosh .box1 {
+ display: none;
+}
+
+.mosh .box2 {
+ color: green;
+ display: block;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.mosh .circle-input-swapper {
+ width: auto;
+ display: inline-block;
+}
+
+.mosh .circle-input-swapper:enabled .box1 {
+ display: block;
+}
+
+.mosh .circle-input-swapper:enabled .box2 {
+ display: none;
+}
+
.mosh .textarea-input {
font-family: "Roboto", sans-serif;
margin: -0.15em;
/* padding: 9px; */
border: 2px solid #111;
- border-radius: 0.8em;
+ border-radius: 15px;
font-size: 11pt;
color: white;
font-weight: 500;
- background: black;
+ background: #111;
resize: none;
min-height: 0;
overflow: hidden;
@@ -797,7 +1178,7 @@ p {
margin-bottom: .2em;
width: 100%;
color: white;
- font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ /* font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; */
font-size: 0.8rem;
font-weight: bold;
text-align: center;
@@ -805,7 +1186,7 @@ p {
}
.mosh .savebackground {
- border-radius: 0.3em;
+ border-radius: 10px;
background: #111;
padding-bottom: 0.3rem;
padding-top: 0.4rem;
@@ -825,12 +1206,42 @@ p {
font-family: "Montserrat", "Arial Black", sans-serif;
font-weight: bold;
text-transform: uppercase;
+ border-radius: 15px;
}
.mosh .padding{
padding: 5px;
}
+.mosh .actor-sidebar-tab{
+ border-radius: 0 10px 10px 0;
+ /* z-index: -1; */
+ box-shadow: 0 0 22px -6px;
+ border: 2px solid;
+ writing-mode: vertical-rl;
+ rotate: 180deg;
+ opacity: 0.5;
+}
+
+.mosh .actor-sidebar-tab:hover{
+ opacity: 1;
+}
+
+.mosh .actor-sidebar-row{
+ position: absolute;
+ display: flex;
+ flex-direction: column;
+ left: -20px;
+ top: 30px;
+ z-index: -1;
+ /* transition: 0.3s; */
+ padding-left: 10px;
+}
+
+.mosh .actor-sidebar-row:hover{
+ left: -48px;
+}
+
.mosh .creature-header-grid {
display: grid;
grid-template-areas:
@@ -865,17 +1276,122 @@ p {
outline: 5px solid rgb(22, 22, 22);
overflow: auto;
height: 375px;
+ border-radius: 10px;
}
.mosh .ship-stats-grid{
display: grid;
grid-template-columns: 17em 1fr 18em;
}
-
+
+.mosh .ship-sbt-stats-grid{
+ display: grid;
+ grid-template-columns: 10em 1fr 16em;
+ gap: 10px;
+}
+
+.mosh .sbt-crew-section{
+ margin: 0px;
+ border: 2px solid white;
+ outline: 3px solid rgb(22, 22, 22);
+ overflow: auto;
+ height: 400px;
+ border-radius: 10px;
+ padding: 4px 6px;
+}
+
+.mosh .sbt-text-area{
+ font-family: "Roboto", sans-serif;
+ margin: -0.15em;
+ border: 2px solid #c5c5c5;
+ border-radius: 15px;
+ font-size: 11pt;
+ font-weight: bold;
+ background: #fff;
+ resize: none;
+ min-height: 0;
+ overflow: hidden;
+}
+
+.mosh .sbt-megadamage{
+ /* position: absolute; */
+ /* left: 0; */
+ /* background: white;
+ left: -300px;
+ width: 300px;
+ padding: 20px;
+ border-radius: 10px 0 0 10px;
+ height: 600px;
+ overflow-y: auto;
+ z-index: -1; */
+
+ position: absolute;
+ background: white;
+ left: -310px;
+ width: 300px;
+ padding: 20px;
+ border-radius: 10px;
+ z-index: -2;
+ transition: 1s;
+ height: auto;
+ overflow: hidden;
+}
+
+.mosh .sbt-megadamage-open{
+ left: -310px;
+ height: auto;
+}
+
+.mosh .sbt-megadamage-closed{
+ left: 0;
+ height: 0%;
+}
+
+.mosh .sbt-crew-name {
+ text-align: center;
+ font-size: 1rem;
+ /* text-transform: uppercase; */
+ color:black;
+ font-weight: bold;
+}
+
+.mosh .sbt-crew-job {
+ height: auto;
+ font-size: 0.9rem;
+ color:rgb(129, 129, 129);
+ font-weight: bold;
+ font-style: italic;
+ text-align: center;
+}
+
+.mosh .item-armor-grid {
+ display: grid;
+ grid-template-columns: 1fr 12em;
+ gap: 10px;
+}
.mosh .whiteline {
- border-top: 2px solid white;
+ border-top: 3px solid white;
grid-area: line;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ margin-left: 15px;
+ margin-right: 15px;
+}
+
+.mosh .blackline {
+ border-top: 3px solid black;
+ grid-area: line;
+ margin-bottom: 5px;
+ margin-left: 15px;
+ margin-right: 15px;
+ margin-top: 5px;
+}
+
+.mosh .greyline {
+ border-top: 3px solid grey;
+ grid-area: line;
+ margin-top: 5px;
margin-bottom: 10px;
margin-left: 15px;
margin-right: 15px;
@@ -889,7 +1405,7 @@ p {
border: 2px solid #111;
background-color: #fff;
border-radius: 3em;
- font-size: 0.8rem;
+ font-size: 1rem;
margin-right: 1em;
}
@@ -961,7 +1477,8 @@ p {
.mosh .headerinputtext {
padding: 0.1rem;
color: white;
- font-family: "Montserrat", "Arial Black", sans-serif;
+ /* font-family: "Montserrat", "Arial Black", sans-serif; */
+ font-family: 'Roboto';
font-size: 0.9rem;
font-weight: bold;
text-align: left;
@@ -975,7 +1492,7 @@ p {
grid-template-columns: 1fr 1fr 1fr 1fr;
gap: 0.25rem;
padding: 1em;
- margin-top: -11px;
+ /* margin-top: -11px; */
}
.mosh .headernamegrid {
@@ -1008,6 +1525,8 @@ p {
.mosh .profile {
width: 140px;
height: auto;
+ padding: 6px;
+ border-radius: 10px;
border: 0;
}
@@ -1077,7 +1596,7 @@ p {
width: 100%;
padding: 0.5rem;
color: black;
- font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+ /* font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; */
font-size: 0.9rem;
text-align: center;
}
diff --git a/data/characterCreator.json b/data/characterCreator.json
new file mode 100644
index 0000000..e69de29
diff --git a/data/characterImport.json b/data/characterImport.json
new file mode 100644
index 0000000..e69de29
diff --git a/images/icons/ui/attributes/battle.png b/images/icons/ui/attributes/battle.png
new file mode 100644
index 0000000..425df85
Binary files /dev/null and b/images/icons/ui/attributes/battle.png differ
diff --git a/images/icons/ui/attributes/systems.png b/images/icons/ui/attributes/systems.png
new file mode 100644
index 0000000..7aaf4a1
Binary files /dev/null and b/images/icons/ui/attributes/systems.png differ
diff --git a/images/icons/ui/attributes/thrusters.png b/images/icons/ui/attributes/thrusters.png
new file mode 100644
index 0000000..3c7a3a2
Binary files /dev/null and b/images/icons/ui/attributes/thrusters.png differ
diff --git a/images/icons/ui/macros/create_character.png b/images/icons/ui/macros/create_character.png
new file mode 100644
index 0000000..231b6ce
Binary files /dev/null and b/images/icons/ui/macros/create_character.png differ
diff --git a/images/icons/ui/macros/morale_check.png b/images/icons/ui/macros/morale_check.png
new file mode 100644
index 0000000..68969e3
Binary files /dev/null and b/images/icons/ui/macros/morale_check.png differ
diff --git a/images/icons/ui/rolltables/bankruptcy_save.png b/images/icons/ui/rolltables/bankruptcy_save.png
new file mode 100644
index 0000000..4ed5956
Binary files /dev/null and b/images/icons/ui/rolltables/bankruptcy_save.png differ
diff --git a/images/icons/ui/rolltables/distress_signal.png b/images/icons/ui/rolltables/distress_signal.png
new file mode 100644
index 0000000..e1c6538
Binary files /dev/null and b/images/icons/ui/rolltables/distress_signal.png differ
diff --git a/images/icons/ui/rolltables/maintenance_issues.png b/images/icons/ui/rolltables/maintenance_issues.png
new file mode 100644
index 0000000..bc68c67
Binary files /dev/null and b/images/icons/ui/rolltables/maintenance_issues.png differ
diff --git a/images/icons/ui/rolltables/megadamage_effects.png b/images/icons/ui/rolltables/megadamage_effects.png
new file mode 100644
index 0000000..95d9493
Binary files /dev/null and b/images/icons/ui/rolltables/megadamage_effects.png differ
diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js
index b3d32c9..68fac9d 100644
--- a/module/actor/actor-sheet.js
+++ b/module/actor/actor-sheet.js
@@ -156,7 +156,7 @@ export class MothershipActorSheet extends ActorSheet {
};
}
- actorData.system.weight.capacity = Math.ceil((actorData.system.stats.strength.value/10) + 3);
+ actorData.system.weight.capacity = Math.ceil((actorData.system.stats.strength.value/10)); //Removed a +3 here because I misunderstood some Traaa.sh stuff. This whole thing can probably be ripped out tbh.
actorData.system.weight.current = curWeight;
//console.log("Current Weight: " + curWeight + " Capacity: " + actorData.data.weight.capacity);
@@ -326,6 +326,13 @@ export class MothershipActorSheet extends ActorSheet {
this.actor.rollCheck(null,'low','combat',null,null,item);
});
+ // Rollable Damage
+ html.find('.dmg-roll').click(ev => {
+ const li = ev.currentTarget.closest(".item");
+ const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId));
+ this.actor.rollCheck(null,null,'damage',null,null,item);
+ });
+
// Rollable Item/Anything with a description that we want to click on.
html.find('.description-roll').click(ev => {
const li = ev.currentTarget.closest(".item");
@@ -360,13 +367,13 @@ export class MothershipActorSheet extends ActorSheet {
// Calm - Panic Check
html.find('.calm-roll').click(ev => {
//roll panic check
- this.actor.rollTable('panicCheck',null,null,null,null,'system.other.stress.value',null);
+ this.actor.rollTable('panicCheck',null,null,null,null,null,null);
});
// Stress - Panic Check
html.find('.stress-roll').click(ev => {
//roll panic check
- this.actor.rollTable('panicCheck',null,null,null,null,'system.other.stress.value',null);
+ this.actor.rollTable('panicCheck',null,null,null,null,null,null);
});
// Clicking on Armor
diff --git a/module/actor/actor.js b/module/actor/actor.js
index a5d2361..53181a4 100644
--- a/module/actor/actor.js
+++ b/module/actor/actor.js
@@ -19,6 +19,7 @@ export class MothershipActor extends Actor {
else if (actorData.type === 'ship') this._prepareShipData(actorData);
}
+
//Prepare Character type specific data
_prepareCharacterData(actorData) {
const data = actorData.system;
@@ -122,6 +123,19 @@ export class MothershipActor extends Actor {
android: `System resources free up and you regain control.`,
human: `You take a deep breath and regain your composure.`
}
+ },
+ distress_signal: {
+ roll: {
+ human: `You send out a distress signal and wait for help.`
+ }
+ },
+ maintenance_issues: {
+ roll: {
+ human: `You perform a full inspection of the ship for wear and tear.`
+ },
+ success: {
+ human: `You find nothing wrong with the ship.`
+ }
}
},
//condition flavor text
@@ -142,6 +156,10 @@ export class MothershipActor extends Actor {
radiation: {
android: `Catastro▒ic d⟑ta ▓loss de|/~ ⋥t⋱d`,
human: `You stare into blackness and feel completely unable to pull yourself out of it.`
+ },
+ cryo: {
+ android: `Your systems malfunction from the condensation damage.`,
+ human: `You awaken cold and frigid, barely able to move.`
}
}
},
@@ -413,7 +431,6 @@ export class MothershipActor extends Actor {
human: `Your speed cannot get any lower.`
}
},
-
//intellect flavor text
intellect: {
check: {
@@ -789,6 +806,114 @@ export class MothershipActor extends Actor {
android: `Your armor cannot get any lower.`,
human: `Your armor cannot get any lower.`
}
+ },
+ //thrusters flavor text
+ thrusters: {
+ check: {
+ human: `You successfully manuever the craft through danger.`
+ },
+ increase: {
+ human: `Thrusters upgraded. Agility, acceleration, and top speed have improved.`
+ },
+ increaseHeader: {
+ human: `Thrusters Enhanced`
+ },
+ increaseImg: {
+ human: `systems/mosh/images/icons/ui/attributes/thrusters.png`
+ },
+ hitCeiling: {
+ human: `Your thrusters are at maximum.`
+ },
+ pastCeiling: {
+ human: `Your thrusters are already at maximum and cannot be improved further.`
+ },
+ decrease: {
+ human: `Thrusters damaged. Agility, acceleration, and top speed are impaired.`
+ },
+ decreaseHeader: {
+ human: `Thrusters Impaired`
+ },
+ decreaseImg: {
+ human: `systems/mosh/images/icons/ui/attributes/thrusters.png`
+ },
+ hitFloor: {
+ human: `You've lost your thrusters.`
+ },
+ pastFloor: {
+ human: `Your thrusters are broken and cannot be damaged further.`
+ }
+ },
+ //battle flavor text
+ battle: {
+ check: {
+ human: `You land a successful hit on the target.`
+ },
+ increase: {
+ human: `Targeting systems upgraded. Combat readiness has improved.`
+ },
+ increaseHeader: {
+ human: `Battle Enhanced`
+ },
+ increaseImg: {
+ human: `systems/mosh/images/icons/ui/attributes/battle.png`
+ },
+ hitCeiling: {
+ human: `Your targeting systems are at maximum.`
+ },
+ pastCeiling: {
+ human: `Your targeting systems are already at maximum and cannot be improved further.`
+ },
+ decrease: {
+ human: `Targeting systems damaged. Combat readiness have been impaired.`
+ },
+ decreaseHeader: {
+ human: `Battle Impaired`
+ },
+ decreaseImg: {
+ human: `systems/mosh/images/icons/ui/attributes/battle.png`
+ },
+ hitFloor: {
+ human: `You've lost your targeting systems.`
+ },
+ pastFloor: {
+ human: `Your targeting systems are broken and cannot be damaged further.`
+ }
+ },
+ //systems flavor text
+ systems: {
+ check: {
+ human: `Your ship's systems are running smoothly.`
+ },
+ increase: {
+ human: `Systems upgraded. Sensors, computers, and other systems have improved.`
+ },
+ increaseHeader: {
+ human: `Systems Enhanced`
+ },
+ increaseImg: {
+ human: `systems/mosh/images/icons/ui/attributes/battle.png`
+ },
+ hitCeiling: {
+ human: `Your ship's systems are at maximum.`
+ },
+ pastCeiling: {
+ human: `Your ship's systems are already at maximum and cannot be improved further.`
+ },
+ decrease: {
+ human: `Systems damaged. Sensors, computers, and other systems have been impaired.`
+ },
+ decreaseHeader: {
+ human: `Systems Impaired`
+ },
+ decreaseImg: {
+ human: `systems/mosh/images/icons/ui/attributes/battle.png`
+ },
+ hitFloor: {
+ human: `You've lost your ship's systems.`
+ },
+ pastFloor: {
+ human: `Your ship's systems are broken and cannot be damaged further.`
+ }
}
},
//macro flavor text (embedding actions)
@@ -924,7 +1049,7 @@ export class MothershipActor extends Actor {
}
//central roll parsing function | TAKES '1d100',[Foundry roll object],true,true,41,'<' | RETURNS enriched Foundry roll object
- parseRollResult(rollString,rollResult,zeroBased,checkCrit,rollTarget,comparison) {
+ parseRollResult(rollString,rollResult,zeroBased,checkCrit,rollTarget,comparison,specialRoll) {
//init vars
let doubles = new Set([0, 11, 22, 33, 44, 55, 66, 77, 88, 99]);
let enrichedRollResult = rollResult;
@@ -966,24 +1091,89 @@ export class MothershipActor extends Actor {
});
});
}
- //pick a new winner if [-] or [+]
- if (rollString.includes("[")) {
- //if [-] pick a new lowest number
- if (rollResult.formula.includes("kl")) {
- //set result value
- newTotal = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
- //if [+] pick a new highest number
- } else if (rollResult.formula.includes("kh")) {
- //set result value
- newTotal = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
+ }
+ //pick a new winner if [-] or [+]
+ if (rollString.includes("[")) {
+ //if [-] pick a new worst number
+ if (rollString.includes("[-]")) {
+ //are we checking for crit?
+ if (checkCrit) {
+ //is this rolling dis and both are a failure?
+ if ((enrichedRollResult.dice[0].results[0].result > rollTarget || enrichedRollResult.dice[0].results[0].result >= 90) && (enrichedRollResult.dice[1].results[0].result > rollTarget || enrichedRollResult.dice[1].results[0].result >= 90)) {
+ //are both crits? choose the highest
+ if (doubles.has(enrichedRollResult.dice[0].results[0].result) && doubles.has(enrichedRollResult.dice[1].results[0].result)) {
+ enrichedRollResult._total = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
+ //is the first one a crit? choose that
+ } else if (doubles.has(enrichedRollResult.dice[0].results[0].result) && !doubles.has(enrichedRollResult.dice[1].results[0].result)) {
+ enrichedRollResult._total = enrichedRollResult.dice[0].results[0].result;
+ //is the second one a crit? choose that
+ } else if (!doubles.has(enrichedRollResult.dice[0].results[0].result) && doubles.has(enrichedRollResult.dice[1].results[0].result)) {
+ enrichedRollResult._total = enrichedRollResult.dice[1].results[0].result;
+ //no crits? choose the highest
+ } else {
+ enrichedRollResult._total = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
+ }
+ }
+ } else {
+ //choose highest
+ enrichedRollResult._total = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
+ }
+ //if [+] pick a new lowest number
+ } else if (rollString.includes("[+]")) {
+ //are we checking for crit?
+ if (checkCrit) {
+ //is this rolling adv and both are a failure?
+ if ((enrichedRollResult.dice[0].results[0].result <= rollTarget || enrichedRollResult.dice[0].results[0].result < 90) && (enrichedRollResult.dice[1].results[0].result <= rollTarget || enrichedRollResult.dice[1].results[0].result < 90)) {
+ //are both crits? choose the lowest
+ if (doubles.has(enrichedRollResult.dice[0].results[0].result) && doubles.has(enrichedRollResult.dice[1].results[0].result)) {
+ enrichedRollResult._total = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
+ //is the first one a crit? choose that
+ } else if (doubles.has(enrichedRollResult.dice[0].results[0].result) && !doubles.has(enrichedRollResult.dice[1].results[0].result)) {
+ enrichedRollResult._total = enrichedRollResult.dice[0].results[0].result;
+ //is the second one a crit? choose that
+ } else if (!doubles.has(enrichedRollResult.dice[0].results[0].result) && doubles.has(enrichedRollResult.dice[1].results[0].result)) {
+ enrichedRollResult._total = enrichedRollResult.dice[1].results[0].result;
+ //no crits? choose the lowest
+ } else {
+ enrichedRollResult._total = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
+ }
+ }
+ } else {
+ //choose lowest
+ enrichedRollResult._total = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
+ }
+ }
+ //use new value if a regular roll
+ } else {
+ //set result value
+ enrichedRollResult._total = enrichedRollResult.dice[0].results[0].result;
+ }
+ //make specific change for panic check
+ if (specialRoll === 'panicCheck' && rollString.includes("[")) {
+ //compare values based on compararison setting
+ if (comparison === '<') {
+ //are both a failure?
+ if (enrichedRollResult.dice[0].results[0].result > rollTarget && enrichedRollResult.dice[1].results[0].result > rollTarget) {
+ //advantage
+ if (rollString.includes("[+]")) {
+ enrichedRollResult._total = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
+ //disadvantage
+ } else if (rollString.includes("[-]")) {
+ enrichedRollResult._total = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
+ }
+ }
+ } else {
+ //check against being over the target
+ if (enrichedRollResult.dice[0].results[0].result < rollTarget && enrichedRollResult.dice[1].results[0].result < rollTarget) {
+ //advantage
+ if (rollString.includes("[+]")) {
+ enrichedRollResult._total = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
+ //disadvantage
+ } else if (rollString.includes("[-]")) {
+ enrichedRollResult._total = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result);
+ }
}
- //use new value if a regular roll
- } else {
- //set result value
- newTotal = enrichedRollResult.dice[0].results[0].result;
}
- //update final roll result
- enrichedRollResult._total = newTotal;
}
//enrich roll result object
//add data point: detect critical
@@ -1152,11 +1342,46 @@ export class MothershipActor extends Actor {
//update final roll html string
enrichedRollResult.rollHtml = rollHtml;
//log what was done
- console.log(`Enriched the standard roll result.`);
+ console.log(`Enriched the standard roll result. rollString: ${rollString},rollResult: ${rollResult},zeroBased: ${zeroBased},checkCrit: ${checkCrit},rollTarget: ${rollTarget},comparison: ${comparison},specialRoll: ${specialRoll}`);
//return the enriched roll result object
return enrichedRollResult;
}
+ //A script to return the data from a table.
+ async getRollTableData(tableId){
+ let currentLocation = '';
+ let tableLocation = '';
+ //find where this table is located
+ //get current compendium
+ let compendium = game.packs;
+ //loop through each compendium
+ compendium.forEach(function(pack){
+ //is this a pack of rolltables?
+ if (pack.metadata.type === 'RollTable') {
+ //log where we are
+ currentLocation = pack.metadata.id;
+ //loop through each pack to find the right table
+ pack.index.forEach(function(table) {
+ //is this our table?
+ if (table._id === tableId) {
+ //grab the table location
+ tableLocation = currentLocation;
+ }
+ });
+ }
+ });
+ //get table data
+ let tableData = await game.packs.get(tableLocation).getDocument(tableId);
+ //get table name
+ let tableName = tableData.name;
+ //get table name
+ let tableImg = tableData.img;
+ //get table result
+ let tableDie = tableData.formula.replace('-1','');
+
+ return tableData;
+ }
+
//central table rolling function | TAKES 'W36WFIpCfMknKgHy','1d10','low',true,true,41,'<' | RETURNS chat message showing roll table result
async rollTable(tableId,rollString,aimFor,zeroBased,checkCrit,rollAgainst,comparison) {
//init vars
@@ -1167,6 +1392,8 @@ export class MothershipActor extends Actor {
let msgDesc = ``;
let flavorText = ``;
let woundText = ``;
+ let tableResultEdited = ``;
+ let tableResultFooter = ``;
let chatId = randomID();
let rollTarget = null;
let valueAddress = [];
@@ -1187,14 +1414,14 @@ export class MothershipActor extends Actor {
if (firstEdition) {
if (androidPanic && this.system.class.value.toLowerCase() === 'android') {
if (useCalm) {
- tableId = 'GCtYeCCQVQJ5M6SE';
+ tableId = game.settings.get('mosh','table1ePanicCalmAndroid');
aimFor = 'low';
zeroBased = true;
checkCrit = true;
rollAgainst = 'system.other.stress.value';
comparison = '<';
} else {
- tableId = 'aBnY19jlhPXzibCt';
+ tableId = game.settings.get('mosh','table1ePanicStressAndroid');
aimFor = 'high';
zeroBased = false;
checkCrit = false;
@@ -1203,14 +1430,14 @@ export class MothershipActor extends Actor {
}
} else {
if (useCalm) {
- tableId = 'MOYI6Ntj5OVFYk06';
+ tableId = game.settings.get('mosh','table1ePanicCalmNormal');
aimFor = 'low';
zeroBased = true;
checkCrit = true;
rollAgainst = 'system.other.stress.value';
comparison = '<';
} else {
- tableId = 'ypcoikqHLhnc9tNs';
+ tableId = game.settings.get('mosh','table1ePanicStressNormal');
aimFor = 'high';
zeroBased = false;
checkCrit = false;
@@ -1221,14 +1448,14 @@ export class MothershipActor extends Actor {
} else {
if (androidPanic && this.system.class.value.toLowerCase() === 'android') {
if (useCalm) {
- tableId = 'VW6HQ29T7zClNIZ6';
+ tableId = game.settings.get('mosh','table0ePanicCalmAndroid');
aimFor = 'low';
zeroBased = true;
checkCrit = true;
rollAgainst = 'system.other.stress.value';
comparison = '<';
} else {
- tableId = 'egJ11m2mJM3HBd6d';
+ tableId = game.settings.get('mosh','table0ePanicStressAndroid');
aimFor = 'high';
zeroBased = false;
checkCrit = false;
@@ -1237,14 +1464,14 @@ export class MothershipActor extends Actor {
}
} else {
if (useCalm) {
- tableId = 'kqKpQAXyLTEEyz6Z';
+ tableId = game.settings.get('mosh','table0ePanicCalmNormal');
aimFor = 'low';
zeroBased = true;
checkCrit = true;
rollAgainst = 'system.other.stress.value';
comparison = '<';
} else {
- tableId = '1vCm4ElRPotQXgNB';
+ tableId = game.settings.get('mosh','table0ePanicStressNormal');
aimFor = 'high';
zeroBased = false;
checkCrit = false;
@@ -1263,6 +1490,17 @@ export class MothershipActor extends Actor {
if (useCalm) {rollString = '1d100' + rollString;}
}
}
+ //maintenance check
+ if (tableId === 'maintenanceCheck') {
+ //set special roll value for use later
+ specialRoll = tableId;
+ //assign variables
+ tableId = game.settings.get('mosh','table1eMaintenance');
+ zeroBased = true;
+ checkCrit = true;
+ rollAgainst = 'system.stats.systems.value';
+ comparison = '<';
+ }
//bounce this request away if certain parameters are NULL
//if rollString is STILL blank, redirect player to choose the roll
if (!rollString) {
@@ -1346,15 +1584,15 @@ export class MothershipActor extends Actor {
//roll the dice
let rollResult = await new Roll(parsedRollString).evaluate();
//interpret the results
- let parsedRollResult = this.parseRollResult(rollString,rollResult,zeroBased,checkCrit,rollTarget,comparison);
+ let parsedRollResult = this.parseRollResult(rollString,rollResult,zeroBased,checkCrit,rollTarget,comparison,specialRoll);
//if this is a panic check, we may need to roll again OR add modifiers to our result total
//roll a second die if needed
- if (!parsedRollResult.success && specialRoll === 'panicCheck' && !firstEdition && !useCalm) {
+ if (!parsedRollResult.success && specialRoll === 'maintenanceCheck' && !firstEdition && !useCalm) {
//determine the rollString
let rollString2 = '2d10';
//add modifiers if needed
//0e modifier: + Stress - Resolve
- if (specialRoll === 'panicCheck' && !firstEdition && !useCalm) {
+ if (specialRoll === 'maintenanceCheck' && !firstEdition && !useCalm) {
rollString2 = rollString2 + ' + ' + this.system.other.stress.value + ' - ' + this.system.other.resolve.value
}
//Calm modifier: + Stress - Resolve
@@ -1364,24 +1602,39 @@ export class MothershipActor extends Actor {
//roll second dice
rollResult2 = await new Roll(rollString2).evaluate();
//roll second set of dice
- parsedRollResult2 = this.parseRollResult(rollString2,rollResult2,false,false,null,null);
+ parsedRollResult2 = this.parseRollResult(rollString2,rollResult2,false,false,null,null,specialRoll);
//set marker for HTML
secondRoll = true;
//set table result number
tableResultNumber = parsedRollResult2.total
}
- //set table result number if null
- if(!tableResultNumber) {tableResultNumber = parsedRollResult.total;}
+ //if this is a maintenance check, we need to roll again if a failure
+ //roll a second die if needed
+ if (!parsedRollResult.success && specialRoll === 'maintenanceCheck' && firstEdition) {
+ //determine the rollString
+ let rollString2 = '1d100';
+ //roll second dice
+ rollResult2 = await new Roll(rollString2).evaluate();
+ //roll second set of dice
+ parsedRollResult2 = this.parseRollResult(rollString2,rollResult2,true,false,null,null,specialRoll);
+ //set marker for HTML
+ secondRoll = true;
+ //set table result number
+ tableResultNumber = parsedRollResult2.total;
+ //log second die
+ console.log(`Rolled second die`);
+ }
+ //set table result number if null
+ if(!tableResultNumber) {tableResultNumber = parsedRollResult.total;}
//fetch the table result
- //get table result
- let tableResult = tableData.getResultsForRoll(tableResultNumber);
+ let tableResult = tableData.getResultsForRoll(tableResultNumber);
//make any custom changes to chat message
//panic check #19 customiziation
if (tableName === 'Panic Check' && tableResultNumber === 19) {
if (this.system.class.value.toLowerCase() === 'android') {
- tableResult[0].text = tableResult[0].text.replace("HEART ATTACK / SHORT CIRCUIT (ANDROIDS).","SHORT CIRCUIT.");
+ tableResultEdited = tableResult[0].text.replace("HEART ATTACK / SHORT CIRCUIT (ANDROIDS).","SHORT CIRCUIT.");
} else {
- tableResult[0].text = tableResult[0].text.replace("HEART ATTACK / SHORT CIRCUIT (ANDROIDS).","HEART ATTACK.");
+ tableResultEdited = tableResult[0].text.replace("HEART ATTACK / SHORT CIRCUIT (ANDROIDS).","HEART ATTACK.");
}
}
//assign message description text
@@ -1399,13 +1652,35 @@ export class MothershipActor extends Actor {
}
//append Calm effects for Critical Panic Failure
if (useCalm && !parsedRollResult.success && parsedRollResult.critical) {
- tableResult[0].text = tableResult[0].text + `
You lose 1d10 Calm because you critically failed.
@UUID[Compendium.mosh.macros_triggered_1e.jHyqXb2yDFTNWxpy]{-1d10 Calm}`;
+ tableResultFooter = `
You lose 1d10 Calm because you critically failed.
@UUID[Compendium.mosh.macros_triggered_1e.jHyqXb2yDFTNWxpy]{-1d10 Calm}`;
+ }
+ //append effects for Stress + Maintenance Check Failure
+ if (specialRoll === 'maintenanceCheck' && !useCalm && !parsedRollResult.success && !parsedRollResult.critical) {
+ tableResultFooter = `
Everyone on board the ship takes 1 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.dvJR9DYXI2kV0BbR]{+1 Stress}`;
+ }
+ //append effects for Stress + Critical Maintenance Check Failure
+ if (specialRoll === 'maintenanceCheck' && !useCalm && !parsedRollResult.success && parsedRollResult.critical) {
+ tableResultFooter = `
Everyone on board the ship takes 1 Stress. You must roll for another maintenance issue because you critically failed.
@UUID[Compendium.mosh.macros_triggered_1e.dvJR9DYXI2kV0BbR]{+1 Stress}
@UUID[Compendium.mosh.macros_triggered_1e.hRapiXGVW8WZQH12]{Roll for Maintenance Issue}`;
+ }
+ //append effects for Calm + Maintenance Check Failure
+ if (specialRoll === 'maintenanceCheck' && useCalm && !parsedRollResult.success && !parsedRollResult.critical) {
+ tableResultFooter = `
Everyone on board the ship loses 1d10 Calm.
@UUID[Compendium.mosh.macros_triggered_1e.jHyqXb2yDFTNWxpy]{-1d10 Calm}`;
+ }
+ //append effects for Calm + Critical Maintenance Check Failure
+ if (specialRoll === 'maintenanceCheck' && useCalm && !parsedRollResult.success && parsedRollResult.critical) {
+ tableResultFooter = `
Everyone on board the ship loses 1d10 Calm. You must roll for another maintenance issue because you critically failed.
@UUID[Compendium.mosh.macros_triggered_1e.jHyqXb2yDFTNWxpy]{-1d10 Calm}
@UUID[Compendium.mosh.macros_triggered_1e.hRapiXGVW8WZQH12]{Roll for Maintenance Issue}`;
+ }
+ //append effects for Calm + Critical Maintenance Check Success
+ if (specialRoll === 'maintenanceCheck' && useCalm && parsedRollResult.success && parsedRollResult.critical) {
+ flavorText = flavorText + ` Gain 1d10 Calm.
@UUID[Compendium.mosh.macros_triggered_1e.k2TtLFOG9mGaWVx3]{+1d10 Calm}`;
}
//generate chat message
//prepare data
let messageData = {
actor: this,
tableResult: tableResult,
+ tableResultEdited: tableResultEdited,
+ tableResultFooter: tableResultFooter,
parsedRollResult: parsedRollResult,
tableName: tableName,
tableImg: tableImg,
@@ -1413,7 +1688,8 @@ export class MothershipActor extends Actor {
flavorText: flavorText,
woundText: woundText,
secondRoll: secondRoll,
- parsedRollResult2: parsedRollResult2
+ parsedRollResult2: parsedRollResult2,
+ specialRoll: specialRoll
};
//prepare template
messageTemplate = 'systems/mosh/templates/chat/rollTable.html';
@@ -1837,9 +2113,13 @@ export class MothershipActor extends Actor {
let specialRoll = ``;
let checkCrit = true;
let zeroBased = true;
+ let rollTarget = null;
+ let rollTargetOverride = null;
let messageTemplate = ``;
let messageContent = ``;
- let parsedDamageString = null;
+ let attributeLabel = ``;
+ let parsedDamageString = rollTarget;
+ let comparison = ``;
let damageResult = null;
let parsedDamageResult = null;
let critFail = false;
@@ -1853,8 +2133,85 @@ export class MothershipActor extends Actor {
let chatId = randomID();
let firstEdition = game.settings.get('mosh','firstEdition');
let useCalm = game.settings.get('mosh','useCalm');
- let androidPanic = game.settings.get('mosh','androidPanic');
//customize this roll if its a unique use-case
+ //damage roll
+ if (attribute === 'damage') {
+ //set special roll value for use later
+ specialRoll = attribute;
+ //parse the roll string
+ parsedDamageString = this.parseRollString(weapon.system.damage,'high');
+ //override message header
+ msgHeader = weapon.name;
+ //override header image
+ msgImgPath = weapon.img;
+ let dsnTheme = 0;
+ if(game.settings.get('mosh', 'damageDiceTheme') != ""){ //We're going to check if the theme field is blank. Otherwise, don't use this.
+ //set damage dice color
+ dsnTheme = game.settings.get('mosh','damageDiceTheme');
+ }
+ //prepare flavortext
+ if (weapon.system.damage === "Str/10" && this.type === 'character') {
+ //determine the damage string
+ flavorText = 'You strike your target for
[[floor(' + this.system.stats.strength.value + '/10)]] damage.';
+ } else {
+ flavorText = 'You inflict [[' + parsedDamageString + '[' + dsnTheme + ']' + critMod + ']] points of damage.';
+ }
+ //determine if this roll needs a description area
+ if (weapon.system.description || weapon.system.woundEffect) {
+ needsDesc = true;
+ }
+ //create wound effect string
+ if (weapon.system.woundEffect) {
+ //start with string as is
+ woundEffect = weapon.system.woundEffect;
+ //prepare array for looping
+ //replace ' [-]' and ' [+]'
+ woundEffect = woundEffect.replaceAll(' [-]','_dis').replaceAll(' [+]','_adv');
+ //simplify wounds
+ woundEffect = woundEffect.replace('Bleeding','bleeding');
+ woundEffect = woundEffect.replace('Blunt Force','blunt_force');
+ woundEffect = woundEffect.replace('Fire & Explosives','fire_explosives');
+ woundEffect = woundEffect.replace('Gore & Massive','gore_massive');
+ woundEffect = woundEffect.replace('Gunshot','gunshot');
+ //split string
+ let woundArray = woundEffect.split(' ');
+ //loop through this string and replace each wound effect with macro UUID
+ woundArray.forEach((element, index, array) => {
+ array[index] = this.getFlavorText('macro', 'wound', element);
+ });
+ //combine back into string
+ woundEffect = woundArray.join(' ');
+ }
+ //generate chat message
+ //prepare data
+ let messageData = {
+ actor: this,
+ weapon: weapon,
+ msgHeader: msgHeader,
+ msgImgPath: msgImgPath,
+ flavorText: flavorText,
+ needsDesc: needsDesc,
+ woundEffect: woundEffect,
+ specialRoll: specialRoll
+ };
+ let chatData = {
+ user: game.user.id,
+ speaker: {
+ actor: this.id,
+ token: this.token,
+ alias: this.name
+ }
+ };
+ let template = 'systems/mosh/templates/chat/rollCheck.html';
+ renderTemplate(template, messageData).then(content => {
+ chatData.content = content;
+ ChatMessage.create(chatData);
+ });
+ //log what was done
+ console.log(`Rolled damage on:${weapon.name}`);
+ //exit
+ return;
+ }
//rest save
if (attribute === 'restSave') {
//1e rest save
@@ -1891,6 +2248,51 @@ export class MothershipActor extends Actor {
attribute = 'fear';
}
}
+ //bankruptcy save
+ if (attribute === 'bankruptcySave') {
+ //set special roll value for use later
+ specialRoll = attribute;
+ //set attribute value
+ attribute = 'bankruptcy';
+ }
+ //morale check
+ if (attribute === 'moraleCheck') {
+ //set special roll value for use later
+ specialRoll = attribute;
+ //disable criticals for this roll
+ checkCrit = false;
+ //set attribute value
+ attribute = 'megadamage';
+ //lets get the max megadamage value
+ rollTargetOverride = Math.max.apply(null, this.system.megadamage.hits);
+ }
+ //bounce this request away if certain parameters are NULL
+ //if attribute is blank, redirect player to choose an attribute
+ if (!attribute && !specialRoll) {
+ //run the choose attribute function
+ let chosenAttributes = await this.chooseAttribute(rollString,aimFor);
+ //set variables
+ rollString = chosenAttributes[0];
+ aimFor = chosenAttributes[1];
+ attribute = chosenAttributes[2];
+ //if null, zero them out
+ }
+ //if skill is blank and actor is a character, redirect player to choose a skill
+ if (!skill && this.type === 'character') {
+ //run the choose attribute function
+ let chosenSkills = await this.chooseSkill(this.system.stats[attribute].rollLabel,rollString);
+ //set variables
+ rollString = chosenSkills[0];
+ skill = chosenSkills[1];
+ skillValue = chosenSkills[2];
+ }
+ //if rollString is STILL blank, redirect player to choose the roll
+ if (!rollString) {
+ //run the choose attribute function
+ let chosenRollType = await this.chooseAdvantage(this.system.stats[attribute].rollLabel,'1d100');
+ //set variables
+ rollString = chosenRollType[0];
+ }
//if this is a weapon roll
if (weapon) {
//check to see if this weapon uses ammo
@@ -1919,57 +2321,36 @@ export class MothershipActor extends Actor {
}
}
}
- //bounce this request away if certain parameters are NULL
- //if attribute is blank, redirect player to choose an attribute
- if (!attribute && !specialRoll) {
- //run the choose attribute function
- let chosenAttributes = await this.chooseAttribute(rollString,aimFor);
- //set variables
- rollString = chosenAttributes[0];
- aimFor = chosenAttributes[1];
- attribute = chosenAttributes[2];
- //if null, zero them out
- }
- //if skill is blank and actor is a character, redirect player to choose a skill
- if (!skill && this.type === 'character') {
- //run the choose attribute function
- let chosenSkills = await this.chooseSkill(this.system.stats[attribute].rollLabel,rollString);
- //set variables
- rollString = chosenSkills[0];
- skill = chosenSkills[1];
- skillValue = chosenSkills[2];
- }
- //if rollString is STILL blank, redirect player to choose the roll
- if (!rollString) {
- //run the choose attribute function
- let chosenRollType = await this.chooseAdvantage(this.system.stats[attribute].rollLabel,'1d100');
- //set variables
- rollString = chosenRollType[0];
- }
//make the rollTarget value
+ if (!rollTargetOverride) {
//retrieve the attribute
- let rollTarget = this.system.stats[attribute].value
+ rollTarget = this.system.stats[attribute].value
//add the mod value
rollTarget = Number(rollTarget) + (Number(this.system.stats[attribute].mod) || 0);
//add the skill value
- rollTarget = Number(rollTarget) + Number(skillValue || 0);
+ rollTarget = Number(rollTarget) + Number(skillValue || 0);
+ } else {
+ rollTarget = rollTargetOverride;
+ }
//roll the dice
//parse the roll string
let parsedRollString = this.parseRollString(rollString,aimFor);
//roll the dice
let rollResult = await new Roll(parsedRollString).evaluate();
+ //set comparison based on aimFor
+ if (aimFor === 'low') {
+ comparison = '<';
+ } else {
+ comparison = '>';
+ }
//interpret the results
- let parsedRollResult = this.parseRollResult(rollString,rollResult,checkCrit,zeroBased,rollTarget,'<');
+ let parsedRollResult = this.parseRollResult(rollString,rollResult,zeroBased,checkCrit,rollTarget,comparison,specialRoll);
//prep damage dice in case its needed
if(weapon && parsedRollResult.success) {
//parse the roll string
parsedDamageString = this.parseRollString(weapon.system.damage,'high');
}
//set chat message text
- //message header
- msgHeader = this.system.stats[attribute].rollLabel;
- //set header image
- msgImgPath = 'systems/mosh/images/icons/ui/attributes/' + attribute + '.png';
//set roll result as greater than or less than
if (parsedRollResult.success) {
outcomeVerb = `rolled`;
@@ -1987,6 +2368,8 @@ export class MothershipActor extends Actor {
//set damage dice color
dsnTheme = game.settings.get('mosh','damageDiceTheme');
}
+ //prepare attribute label
+ attributeLabel = this.system.stats[attribute].label;
//set crit damage effect
if (parsedRollResult.success === true && parsedRollResult.critical === true) {
if (game.settings.get('mosh','critDamage') === 'doubleDamage') {
@@ -2077,14 +2460,16 @@ export class MothershipActor extends Actor {
} else if (specialRoll) {
//rest save
if (specialRoll === 'restSave') {
+ //override message header
+ msgHeader = `Rest Save`;
+ //override header image
+ msgImgPath = `systems/mosh/images/icons/ui/macros/rest_save.png`;
+ //prepare attribute label
+ attributeLabel = this.system.stats[attribute].label;
//1e rest save
if (firstEdition) {
//calm outcome
if (useCalm) {
- //override message header
- msgHeader = `Rest Save`;
- //override header image
- msgImgPath = `systems/mosh/images/icons/ui/macros/rest_save.png`;
//prep text based on success or failure
if (parsedRollResult.success === false && this.type === 'character') {
//set fail text
@@ -2098,10 +2483,6 @@ export class MothershipActor extends Actor {
}
//no calm outcome
} else {
- //override message header
- msgHeader = `Rest Save`;
- //override header image
- msgImgPath = `systems/mosh/images/icons/ui/macros/rest_save.png`;
//prep text based on success or failure
if (parsedRollResult.success === false && this.type === 'character') {
if(game.settings.get('mosh','autoStress')){ //If the automatic stress option is enabled
@@ -2126,10 +2507,6 @@ export class MothershipActor extends Actor {
} else {
//calm outcome
if (useCalm) {
- //override message header
- msgHeader = `Rest Save`;
- //override header image
- msgImgPath = `systems/mosh/images/icons/ui/macros/rest_save.png`;
//prep text based on success or failure
if (parsedRollResult.success === false && this.type === 'character') {
//set fail text
@@ -2145,10 +2522,6 @@ export class MothershipActor extends Actor {
}
//no calm outcome
} else {
- //override message header
- msgHeader = `Rest Save`;
- //override header image
- msgImgPath = `systems/mosh/images/icons/ui/macros/rest_save.png`;
//prep text based on success or failure
if (parsedRollResult.success === false && this.type === 'character') {
if(game.settings.get('mosh','autoStress')){ //If the automatic stress option is enabled
@@ -2173,8 +2546,81 @@ export class MothershipActor extends Actor {
}
}
}
+ //bankruptcy save
+ if (specialRoll === 'bankruptcySave') {
+ //message header
+ msgHeader = 'Bankruptcy Save';
+ //set header image
+ msgImgPath = 'systems/mosh/images/icons/ui/rolltables/bankruptcy_save.png';
+ //prepare attribute label
+ attributeLabel = 'Bankruptcy';
+ //get the bankruptcy table
+ //get current compendium
+ let compendium = game.packs;
+ let currentLocation = ``;
+ let tableLocation = ``;
+ let tableId = game.settings.get('mosh','table1eBankruptcy');
+ //loop through each compendium
+ compendium.forEach(function(pack){
+ //is this a pack of rolltables?
+ if (pack.metadata.type === 'RollTable') {
+ //log where we are
+ currentLocation = pack.metadata.id;
+ //loop through each pack to find the right table
+ pack.index.forEach(function(table) {
+ //is this our table?
+ if (table._id === tableId) {
+ //grab the table location
+ tableLocation = currentLocation;
+ }
+ });
+ }
+ });
+ //get table data
+ let tableData = await game.packs.get(tableLocation).getDocument(tableId);
+ //prep text for success
+ if (parsedRollResult.success && parsedRollResult.critical) {
+ //flavor text
+ flavorText = tableData.getResultsForRoll(0)[0].text;
+ //prep text for critical success
+ } else if (parsedRollResult.success && !parsedRollResult.critical) {
+ //flavor text
+ flavorText = tableData.getResultsForRoll(1)[0].text;
+ //prep text for failure
+ } else if (!parsedRollResult.success && !parsedRollResult.critical) {
+ //flavor text
+ flavorText = tableData.getResultsForRoll(2)[0].text;
+ //prep text for critical failure
+ } else if (!parsedRollResult.success && parsedRollResult.critical) {
+ //flavor text
+ flavorText = tableData.getResultsForRoll(3)[0].text;
+ }
+ }
+ //morale check
+ if (specialRoll === 'moraleCheck') {
+ //message header
+ msgHeader = 'Morale Check';
+ //set header image
+ msgImgPath = 'systems/mosh/images/icons/ui/macros/morale_check.png';
+ //prepare attribute label
+ attributeLabel = 'Megadamage';
+ //prep text based on success or failure
+ if (!parsedRollResult.success) {
+ //flavor text
+ flavorText = `The crew, once focused on their tasks, now exchange anxious glances as the reality of the situation set in. Struggling to maintain composure in the chaos, the crew decides to send a hail and hope for mercy.`;
+ } else {
+ //flavor text
+ flavorText = `As the ship shudders under the impact of enemy fire, a sense of urgency fills the control room. Alarms blare, emergency lights bath the crew in a stark glow, but there is no panic. The crew, seasoned and unyielding, maintain their focus on the task at hand.`;
+ }
+ }
//prepare flavor text for regular checks
} else {
+ //prepare attribute label
+ attributeLabel = this.system.stats[attribute].label;
+ //message header
+ msgHeader = this.system.stats[attribute].rollLabel;
+ //set header image
+ msgImgPath = 'systems/mosh/images/icons/ui/attributes/' + attribute + '.png';
//prep text based on success or failure
if (parsedRollResult.success === false && this.type === 'character') {
//if first edition
@@ -2232,7 +2678,7 @@ export class MothershipActor extends Actor {
msgHeader: msgHeader,
msgImgPath: msgImgPath,
outcomeVerb: outcomeVerb,
- attribute: this.system.stats[attribute].label,
+ attribute: attributeLabel,
flavorText: flavorText,
needsDesc: needsDesc,
woundEffect: woundEffect,
@@ -2443,7 +2889,7 @@ export class MothershipActor extends Actor {
//roll the dice
let rollResult = await new Roll(parsedRollString).evaluate();
//interpret the results
- let parsedRollResult = this.parseRollResult(modRollString,rollResult,false,false,null,null);
+ let parsedRollResult = this.parseRollResult(modRollString,rollResult,false,false,null,null,null);
//update modChange
modifyChange = modifyChange + parsedRollResult.total;
//calculate impact to the actor
@@ -2713,7 +3159,7 @@ export class MothershipActor extends Actor {
console.log(`Asked for reload.`);
}
- //tell user we are out of ammo
+ //tell the player we are out of ammo
async outOfAmmo() {
//wrap the whole thing in a promise, so that it waits for the form to be interacted with
return new Promise(async (resolve) => {
@@ -2737,7 +3183,7 @@ export class MothershipActor extends Actor {
console.log(`Told user they are out of ammo.`);
}
- //reload weapon
+ //reload the players weapon
async reloadWeapon(itemId) {
//init vars
let messageTemplate = ``;
@@ -2803,7 +3249,7 @@ export class MothershipActor extends Actor {
console.log(`Reloaded weapon.`);
}
- //take bleeding damage
+ //make the player take bleeding damage
async takeBleedingDamage() {
//init vars
let chatId = randomID();
@@ -2843,7 +3289,7 @@ export class MothershipActor extends Actor {
console.log(`Took bleeding damage.`);
}
- //take radiation damage
+ //make the player take radiation damage
async takeRadiationDamage() {
//init vars
let chatId = randomID();
@@ -2887,7 +3333,58 @@ export class MothershipActor extends Actor {
console.log(`Took radiation damage.`);
}
- //choose cover
+ //make the player take radiation damage
+ async takeCryoDamage(rollString) {
+ //init vars
+ let chatId = randomID();
+ //roll the dice
+ //parse the roll string
+ let parsedRollString = this.parseRollString(rollString,'low');
+ //roll the dice
+ let rollResult = await new Roll(parsedRollString).evaluate();
+ //interpret the results
+ let parsedRollResult = this.parseRollResult(rollString,rollResult,false,false,null,null,null);
+ //reduce all stats and saves by roll result
+ this.modifyActor('system.stats.strength.value',parsedRollResult.total,null,false);
+ this.modifyActor('system.stats.speed.value',parsedRollResult.total,null,false);
+ this.modifyActor('system.stats.intellect.value',parsedRollResult.total,null,false);
+ this.modifyActor('system.stats.combat.value',parsedRollResult.total,null,false);
+ this.modifyActor('system.stats.sanity.value',parsedRollResult.total,null,false);
+ this.modifyActor('system.stats.fear.value',parsedRollResult.total,null,false);
+ this.modifyActor('system.stats.body.value',parsedRollResult.total,null,false);
+ //get flavor text
+ let msgFlavor = this.getFlavorText('item','condition','cryo');
+ let msgOutcome = `All stats and saves decreased by
1.`;
+ //create chat message text
+ let messageContent = `
+
+
+
+
+
+ ${msgFlavor}
+
+ ${msgOutcome}
+
+
+
+
+ `;
+ //push message
+ ChatMessage.create({
+ id: chatId,
+ user: game.user.id,
+ speaker: {actor: this.id, token: this.token, alias: this.name},
+ content: messageContent
+ },{keepId:true});
+ //log what was done
+ console.log(`Took cryofreeze damage.`);
+ }
+
+ //ask the player to choose cover
async chooseCover() {
//wrap the whole thing in a promise, so that it waits for the form to be interacted with
return new Promise(async (resolve) => {
@@ -3079,6 +3576,274 @@ export class MothershipActor extends Actor {
}
+ //activate ship's distress signal
+ async distressSignal() {
+ //wrap the whole thing in a promise, so that it waits for the form to be interacted with
+ return new Promise(async (resolve) => {
+ //create pop-up HTML
+ let msgContent = `
+
+
+
+
+
Distress Signal
Occasionally you may need to put your ship on emergency power, seal yourselves in cryopods, send out a Distress Signal, and wait for help. It’s a long shot, but sometimes it’s the only shot you’ve got. When this happens, roll on this table.
+
+
+
Select your roll type:
+ `;
+ //create final dialog data
+ const dialogData = {
+ title: `Distress Signal`,
+ content: msgContent,
+ buttons: {
+ button1: {
+ label: `Advantage`,
+ callback: () => this.rollTable(game.settings.get('mosh','table1eDistressSignal'),`1d10 [+]`,`low`,true,false,null,null),
+ icon: `
`
+ },
+ button2: {
+ label: `Normal`,
+ callback: () => this.rollTable(game.settings.get('mosh','table1eDistressSignal'),`1d10`,`low`,true,false,null,null),
+ icon: `
`
+ },
+ button3: {
+ label: `Disadvantage`,
+ callback: () => this.rollTable(game.settings.get('mosh','table1eDistressSignal'),`1d10 [-]`,`low`,true,false,null,null),
+ icon: `
`
+ }
+ }
+ };
+ //render dialog
+ const dialog = new Dialog(dialogData,{width: 600,height: 265}).render(true);
+ });
+
+ }
+
+ //activate ship's distress signal
+ async maintenanceCheck() {
+ //wrap the whole thing in a promise, so that it waits for the form to be interacted with
+ return new Promise(async (resolve) => {
+ //create pop-up HTML
+ let msgContent = `
+
+
+
+
+
Maintenance Check
Eventually, your ship needs a tune-up, or sometimes a complete overhaul. When this happens, you’ll need to get it repaired. Minor Repairs cover cosmetic damage, cleanup, and other handyman type work that can be handled in flight, usually within 2d10 days. Major Repairs cover large scale structural or system damage, including repairing Megadamage and Hull, and can only be fixed in port.
+
+
+
Select your roll type:
+ `;
+ //create final dialog data
+ const dialogData = {
+ title: `Maintenance Check`,
+ content: msgContent,
+ buttons: {
+ button1: {
+ label: `Advantage`,
+ callback: () => this.rollTable(`maintenanceCheck`,`1d100 [+]`,`low`,null,null,null,null),
+ icon: `
`
+ },
+ button2: {
+ label: `Normal`,
+ callback: () => this.rollTable(`maintenanceCheck`,`1d100`,`low`,null,null,null,null),
+ icon: `
`
+ },
+ button3: {
+ label: `Disadvantage`,
+ callback: () => this.rollTable(`maintenanceCheck`,`1d100 [-]`,`low`,null,null,null,null),
+ icon: `
`
+ }
+ }
+ };
+ //render dialog
+ const dialog = new Dialog(dialogData,{width: 600,height: 265}).render(true);
+ });
+
+ }
+
+ //activate ship's distress signal
+ async bankruptcySave() {
+ //wrap the whole thing in a promise, so that it waits for the form to be interacted with
+ return new Promise(async (resolve) => {
+ //create pop-up HTML
+ let msgContent = `
+
+
+
+
+
Bankruptcy Save
A slim minority of ships are owned by small banking firms who share ownership with the operators, fronting all costs of the vessel and taking most of the profits. In exchange, you get a ship and a relatively free hand in conducting your business on the Rim. Each year (or quarter, as determined by your Warden), make a Bankruptcy Save to determine the financial health of the company.
+
+
+
Select your roll type:
+ `;
+ //create final dialog data
+ const dialogData = {
+ title: `Bankruptcy Save`,
+ content: msgContent,
+ buttons: {
+ button1: {
+ label: `Advantage`,
+ callback: () => this.rollCheck(`1d100 [+]`,`low`,`bankruptcySave`,null,null,null),
+ icon: `
`
+ },
+ button2: {
+ label: `Normal`,
+ callback: () => this.rollCheck(`1d100`,`low`,`bankruptcySave`,null,null,null),
+ icon: `
`
+ },
+ button3: {
+ label: `Disadvantage`,
+ callback: () => this.rollCheck(`1d100 [-]`,`low`,`bankruptcySave`,null,null,null),
+ icon: `
`
+ }
+ }
+ };
+ //render dialog
+ const dialog = new Dialog(dialogData,{width: 600,height: 265}).render(true);
+ });
+
+ }
+
+ //activate ship's distress signal
+ async moraleCheck() {
+ //wrap the whole thing in a promise, so that it waits for the form to be interacted with
+ return new Promise(async (resolve) => {
+ //create pop-up HTML
+ let msgContent = `
+
+
+
+
+
Morale Check
After any Ship Round where your ship takes MDMG, you must make a Morale Check. To make a Morale Check, roll 1d10. If the roll is under your current MDMG, the crew may send a hail offering a ceasefire and to resume negotiations.
+
+
+
Select your roll type:
+ `;
+ //create final dialog data
+ const dialogData = {
+ title: `Morale Check`,
+ content: msgContent,
+ buttons: {
+ button1: {
+ label: `Advantage`,
+ callback: () => this.rollCheck(`1d10 [+]`,`high`,`moraleCheck`,null,null,null),
+ icon: `
`
+ },
+ button2: {
+ label: `Normal`,
+ callback: () => this.rollCheck(`1d10`,`high`,`moraleCheck`,null,null,null),
+ icon: `
`
+ },
+ button3: {
+ label: `Disadvantage`,
+ callback: () => this.rollCheck(`1d10 [-]`,`high`,`moraleCheck`,null,null,null),
+ icon: `
`
+ }
+ }
+ };
+ //render dialog
+ const dialog = new Dialog(dialogData,{width: 600,height: 265}).render(true);
+ });
+
+ }
+
// print description
printDescription(itemId, options = { event: null }) {
let item = duplicate(this.getEmbeddedDocument('Item',itemId));
@@ -3087,17 +3852,16 @@ export class MothershipActor extends Actor {
// Print the item description into the chat.
chatDesc(item) {
+ let swapNameDesc = false;
+ let swapName = '';
let itemName = item.name?.charAt(0).toUpperCase() + item.name?.toLowerCase().slice(1);
if (!item.name && isNaN(itemName))
itemName = item.charAt(0)?.toUpperCase() + item.toLowerCase().slice(1);
-
var rollInsert = '';
-
if(item.system.roll){
let r = new Roll(item.system.roll, {});
r.evaluate({async: false});
-
rollInsert = '\
'+item.system.roll+'
\
\
@@ -3105,6 +3869,12 @@ export class MothershipActor extends Actor {
';
}
+ //add flag to swap name and description, if desc contains trinket or patch
+ if(item.system.description === '
Patch
' || item.system.description === '
Trinket
' || item.system.description === '
Maintenance Issue
') {
+ swapNameDesc = true;
+ swapName = item.system.description.replaceAll('
','').replaceAll('
','');
+ }
+
var templateData = {
actor: this,
stat: {
@@ -3113,6 +3883,8 @@ export class MothershipActor extends Actor {
item: item,
insert: rollInsert,
onlyDesc: true,
+ swapNameDesc: swapNameDesc,
+ swapName: swapName
};
let chatData = {
diff --git a/module/actor/creature-sheet.js b/module/actor/creature-sheet.js
index 30906cc..1f38979 100644
--- a/module/actor/creature-sheet.js
+++ b/module/actor/creature-sheet.js
@@ -2,9 +2,7 @@
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
-import {
- DLCreatureSettings
-} from "../settings/creature-settings.js";
+import { DLCreatureSettings } from "../settings/creature-settings.js";
export class MothershipCreatureSheet extends ActorSheet {
@@ -164,6 +162,13 @@ export class MothershipCreatureSheet extends ActorSheet {
this.actor.rollCheck(null,'low','combat',null,null,item);
});
+ // Rollable Damage
+ html.find('.dmg-roll').click(ev => {
+ const li = ev.currentTarget.closest(".item");
+ const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId));
+ this.actor.rollCheck(null,null,'damage',null,null,item);
+ });
+
//increase ammo
html.on('mousedown', '.weapon-ammo', ev => {
//dupe item to work on
diff --git a/module/actor/ship-sheet-sbt.js b/module/actor/ship-sheet-sbt.js
new file mode 100644
index 0000000..452f8bb
--- /dev/null
+++ b/module/actor/ship-sheet-sbt.js
@@ -0,0 +1,500 @@
+
+/**
+ * Extend the basic ActorSheet with some very simple modifications
+ * @extends {ActorSheet}
+ */
+import { DLShipDeckplan } from "../windows/ship-deckplan.js";
+import { DLShipMacros } from "../windows/ship-macros.js";
+import { DLShipMegaDamage } from "../windows/ship-megadamage.js";
+import { DLShipSetup } from "../windows/ship-setup.js";
+
+export class MothershipShipSheetSBT extends ActorSheet {
+
+ /** @override */
+ static get defaultOptions() {
+ return mergeObject(super.defaultOptions, {
+ classes: ["mosh", "sheet", "actor", "ship"],
+ template: "systems/mosh/templates/actor/ship-sheet-sbt.html",
+ width: 700,
+ height: 840,
+ tabs: [{ navSelector: "#sheet-tabs", contentSelector: "#sheet-body", initial: "character" },
+ { navSelector: "#side-tabs", contentSelector: "#side-body", initial: "close" }],
+ // { navSelector: "#side-tabs", contentSelector: "#side-body", initial: "crew" }],
+ scrollY: [".sheet-body", "scroll-lock"]
+ });
+ }
+
+ _onOpenDeckplan(event) {
+ event.preventDefault();
+ new DLShipDeckplan(this.actor, {
+ top: this.position.top + 40,
+ left: this.position.left + (this.position.width - 400) / 2
+ }).render(true);
+ }
+
+ _onOpenMacros(event) {
+ event.preventDefault();
+ new DLShipMacros(this.actor, {
+ top: this.position.top + 40,
+ left: this.position.left + (this.position.width - 400) / 2
+ }).render(true);
+ }
+
+ _onOpenSetup(event) {
+ event.preventDefault();
+ new DLShipSetup(this.actor, {
+ top: this.position.top + 40,
+ left: this.position.left + (this.position.width - 400) / 2
+ }).render(true);
+ }
+
+ _onOpenMegadamage(event) {
+ event.preventDefault();
+ new DLShipMegaDamage(this.actor, {
+ top: this.position.top + 40,
+ left: this.position.left + (this.position.width - 400) / 2
+ }).render(true);
+ }
+
+ /* -------------------------------------------- */
+
+ /** @override */
+ getData() {
+ const data = super.getData();
+
+ data.dtypes = ["String", "Number", "Boolean"];
+
+ // console.log(this.actor.getRollTableData('AqGWwoWXzijFs427'));
+
+ // for (let attr of Object.values(data.data.system.attributes)) {
+ // attr.isCheckbox = attr.dtype === "Boolean";
+ // }
+
+ const superData = data.data.system;
+
+ superData.page = {}; //Prep the page object, for any html specific stuff we want to do.
+ // Prepare items.
+ if (this.actor.type == 'ship') {
+ this._prepareShipItems(data);
+ }
+
+ if (superData.settings == null) {
+ superData.settings = {};
+ }
+
+ superData.settings.useCalm = game.settings.get("mosh", "useCalm");
+ superData.settings.hideWeight = game.settings.get("mosh", "hideWeight");
+ superData.settings.firstEdition = game.settings.get("mosh", "firstEdition");
+ superData.settings.androidPanic = game.settings.get("mosh", "androidPanic");
+
+ let maxHull = superData.supplies.hull.max;
+
+ superData.supplies.hull.percentage = " [ "+Math.round(maxHull * 0.25)+" | "+Math.round(maxHull * 0.5)+" | "+Math.round(maxHull * 0.75)+" ]";
+
+
+ //Run Setup
+ // if(data.data.system.runSetup){
+ // this.render(true, {focus:false});
+ // var setupMenu = new DLShipSetup(this.actor, {popOut: true, minimizable : false});
+ // setupMenu.render(true, {focus: true});
+ // console.log(setupMenu);
+ // this.close();
+
+ // data.data.system.runSetup = false;
+ // }
+
+ this._prepareMegadamage(data);
+
+ return data.data;
+ }
+
+
+ /**
+ * Organize and classify Items for Character sheets.
+ *
+ * @param {Object} actorData The actor to prepare.
+ *
+ * @return {undefined}
+ */
+ _prepareShipItems(sheetData) {
+ const actorData = sheetData.data;
+
+ // Initialize containers.
+ const crew = [];
+ const weapons = [];
+ const cargo = [];
+ const modules = [];
+
+ const minorRepairs = []; //We are seperating these to make sure they are always ordered by severity.
+ const majorRepairs = [];
+
+
+ // Iterate through items, allocating to containers
+ // let totalWeight = 0;
+ for (let i of sheetData.items) {
+ let item = i.system;
+ i.img = i.img || DEFAULT_TOKEN;
+
+ if (i.type === 'crew') {
+ crew.push(i);
+ } else if (i.type === 'weapon') {
+ weapons.push(i);
+ } else if (i.type === 'item') {
+ cargo.push(i);
+ } else if (i.type === 'module') {
+ modules.push(i);
+ } else if (i.type == 'repair'){
+ i.name = i.name.split('.')[0];
+
+ if(i.system.major){
+ majorRepairs.push(i);
+ }
+ else{
+ minorRepairs.push(i);
+ }
+ }
+ }
+
+ // Assign and return
+ actorData.crew = crew;
+ actorData.weapons = weapons;
+ actorData.cargo = cargo;
+ actorData.modules = modules;
+ actorData.minorRepairs = minorRepairs;
+ actorData.majorRepairs = majorRepairs;
+
+ }
+
+ async _prepareMegadamage(sheetData){
+ const actorData = sheetData.data;
+
+ //A script to return the data from a table.
+ let tableId = game.settings.get('mosh','table1eMegadamageEffects');
+ let currentLocation = '';
+ let tableLocation = '';
+ //find where this table is located
+ //get current compendium
+ let compendium = game.packs;
+ //loop through each compendium
+ compendium.forEach(function(pack){
+ //is this a pack of rolltables?
+ if (pack.metadata.type === 'RollTable') {
+ //log where we are
+ currentLocation = pack.metadata.id;
+ //loop through each pack to find the right table
+ pack.index.forEach(function(table) {
+ //is this our table?
+ if (table._id === tableId) {
+ //grab the table location
+ tableLocation = currentLocation;
+ }
+ });
+ }
+ });
+ //get table data
+ let tableData = await game.packs.get(tableLocation).getDocument(tableId);
+
+ let megadamageHTML = "";
+
+ let entries = Array.from(tableData.results.entries());
+
+ //Prep Megadamage List
+ // if(actorData.system.megadamage.hits.length > 0){
+ let index = 0;
+ for(const entry of entries){
+
+ // Megadamage - Only Active
+ if(index != 0 && actorData.system.megadamage.hits.includes(index)){
+ // megadamageHTML += `
 `;
+ megadamageHTML += `
 `;
+ megadamageHTML += `
${index} | ${entry[1].text}
`;
+ } else if(index != 0) {
+ // megadamageHTML += `
 `;
+ megadamageHTML += `
 `;
+ megadamageHTML += `${index} | ${entry[1].text}
`;
+ }
+ index++;
+ }
+ // } else {
+
+ // megadamageHTML += entries[0][1].text + "
";
+ // }
+
+ await this.object.update({
+ "data.megadamage.html": megadamageHTML
+ });
+
+ if(actorData.system.page == undefined){
+ actorData.system.page = {};
+ }
+
+ actorData.system.page.megadamageMenuClass = "";
+
+ // if(actorData.system.megadamage.open){
+ // actorData.system.page.megadamageMenuClass = "sbt-megadamage-open"
+ // } else {
+ // actorData.system.page.megadamageMenuClass = "sbt-megadamage-closed"
+ // }
+
+
+ // await this.object.update({
+ // "data.megadamage.hits": []
+ // });
+ }
+
+
+ /** @override */
+ activateListeners(html) {
+ super.activateListeners(html);
+
+ // Everything below here is only needed if the sheet is editable
+ if (!this.options.editable) return;
+
+
+ html.on('mousedown', '.megadamage-button', ev => {
+ const data = this.object;
+
+ const div = $(ev.currentTarget);
+ const targetKey = div.data("key");
+
+ if(data.data.system.megadamage.hits.includes(targetKey)){
+ const index = data.data.system.megadamage.hits.indexOf(targetKey);
+ data.data.system.megadamage.hits.splice(index, 1);
+ } else {
+ data.data.system.megadamage.hits.push(targetKey);
+ }
+
+ this.object.update({
+ "data.megadamage.hits": data.data.system.megadamage.hits
+ });
+
+ this._prepareMegadamage(data);
+ });
+
+ // Create inventory item.
+ html.find('.item-create').click(this._onItemCreate.bind(this));
+ // Delete Inventory Item
+ html.find('.item-delete').click(ev => {
+ const li = $(ev.currentTarget).parents(".item");
+ this.actor.deleteEmbeddedDocuments("Item",[li.data("itemId")]);
+ li.slideUp(200, () => this.render(false));
+ });
+
+ // Update Inventory Item
+ html.find('.item-edit').click(ev => {
+ const li = $(ev.currentTarget).parents(".item");
+ const item = this.actor.getEmbeddedDocument("Item", li.data("itemId"));
+ item.sheet.render(true);
+
+ let amount = item.system.quantity;
+
+ if (item.type == "module") {
+ item.system.totalHull = amount * item.system.hull;
+ }
+ });
+
+ //Quantity adjuster
+ html.on('mousedown', '.item-quantity', ev => {
+ const li = ev.currentTarget.closest(".item");
+ const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId))
+ let amount = item.system.quantity;
+
+ if (event.button == 0) {
+ item.system.quantity = Number(amount) + 1;
+ } else if (event.button == 2) {
+ item.system.quantity = Number(amount) - 1;
+ }
+
+ if (item.type == "module") {
+ item.system.totalHull = item.system.quantity * item.system.hull;
+ }
+
+ this.actor.updateEmbeddedDocuments('Item', [item]);
+ });
+
+ // Rollable Attributes
+ html.find('.stat-roll').click(ev => {
+ const div = $(ev.currentTarget);
+ const statName = div.data("key");
+ this.actor.rollCheck(null,'low',statName,null,null,null);
+ });
+
+ //Weapons
+ // Add Inventory Item
+ html.find('.weapon-create').click(this._onItemCreate.bind(this));
+ // Update Inventory Item
+ html.find('.weapon-edit').click(ev => {
+ const li = $(ev.currentTarget).parents(".item");
+ const weapon = this.actor.getEmbeddedDocument("Item", li.data("itemId"));
+ weapon.sheet.render(true);
+ });
+
+ // Rollable Weapon - not needed since individual ship weapons are not fired
+ // html.find('.weapon-roll').click(ev => {
+ // const li = ev.currentTarget.closest(".item");
+ // const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId));
+ // this.actor.rollCheck(null,'low','combat',null,null,item);
+ // });
+
+ // Distress Signal
+ html.find('.distress-button').click(ev => {
+ //roll distress signal
+ this.actor.distressSignal();
+ });
+
+ // Maintenance Check
+ html.find('.maintenance-button').click(ev => {
+ //roll maintenance check
+ this.actor.maintenanceCheck();
+ });
+
+ // Bankruptcy Save
+ html.find('.bankruptcy-button').click(ev => {
+ //roll bankruptcy save
+ this.actor.bankruptcySave();
+ });
+
+ // Morale Check
+ html.find('.morale-button').click(ev => {
+ //roll morale check
+ this.actor.moraleCheck();
+ });
+
+ // Deckplan Button
+ html.find('.deckplan-button').click(ev => this._onOpenDeckplan(ev));
+
+ //Macro Menu Button
+ html.find('.macro-menu-button').click(ev => this._onOpenMacros(ev));
+
+ //Testing Setup Menu Button
+ html.find('.setup-menu-button').click(ev => this._onOpenSetup(ev));
+
+ //Megadamage Menu Button
+ html.find('.megadamage-menu-button').click(ev => this._onOpenMegadamage(ev));
+
+ //Megadamage Menu Button
+ // html.find('.megadamage-sidebar-button').click(ev => {
+ // const data = this.object;
+
+ // let sidebarClasses = ""
+
+ // if(data.system.megadamage.open){
+ // sidebarClasses = "sbt-megadamage-open"
+ // } else {
+ // sidebarClasses = "sbt-megadamage-closed"
+ // }
+
+ // this.object.update({
+ // "data.megadamage.open": !data.system.megadamage.open,
+ // "data.sidebar.megadamageClasses" : sidebarClasses
+ // });
+ // });
+
+
+ html.on('mousedown', '.weapon-ammo', ev => {
+ const li = ev.currentTarget.closest(".item");
+ const item = duplicate(this.actor.getEmbeddedDocument("Item", li.dataset.itemId))
+ let amount = item.system.ammo;
+
+ if (event.button == 0) {
+ if (amount >= 0) {
+ item.system.ammo = Number(amount) + 1;
+ }
+ } else if (event.button == 2) {
+ if (amount > 0) {
+ item.system.ammo = Number(amount) - 1;
+ }
+ }
+
+ this.actor.updateEmbeddedDocuments('Item', [item]);
+ });
+
+ //Reload Shots
+ html.on('mousedown', '.weapon-reload', ev => {
+ const li = ev.currentTarget.closest(".item");
+ this.actor.reloadWeapon(li.dataset.itemId);
+ });
+
+ // Rollable Item/Anything with a description that we want to click on.
+ html.find('.description-roll').click(ev => {
+ const li = ev.currentTarget.closest(".item");
+ this.actor.printDescription(li.dataset.itemId, {
+ event: ev
+ });
+ });
+
+
+
+ // Drag events for macros.
+ if (this.actor.isOwner) {
+ let handler = ev => this._onDragStart(ev);
+
+ html.find('li.dropitem').each((i, li) => {
+ if (li.classList.contains("inventory-header")) return;
+ li.setAttribute("draggable", true);
+ li.addEventListener("dragstart", handler, false);
+ });
+ }
+ }
+
+ /* -------------------------------------------- */
+
+ /**
+ * Handle creating a new Owned Item for the actor using initial data defined in the HTML dataset
+ * @param {Event} event The originating click event
+ * @private
+ */
+ _onItemCreate(event) {
+ event.preventDefault();
+ const header = event.currentTarget;
+ // Get the type of item to create.
+ const type = header.dataset.type;
+
+ const subtype = header.dataset.subtype;
+
+
+ // Grab any data associated with this control.
+ const data = duplicate(header.dataset);
+ // Initialize a default name.
+ const name = `New ${type.capitalize()}`;
+ // Prepare the item object.
+ const itemData = {
+ name: name,
+ type: type,
+ data: data,
+ system : {}
+ };
+
+ if(type == "repair"){
+ itemData.system.major = (header.dataset.subtype == "major");
+ }
+
+ // Remove the type from the dataset since it's in the itemData.type prop.
+ delete itemData.data["type"];
+
+ // Finally, create the item!
+ return this.actor.createEmbeddedDocuments("Item",[itemData]);
+ }
+
+
+ /**
+ * Handle clickable rolls.
+ * @param {Event} event The originating click event
+ * @private
+ */
+ _onRoll(event) {
+ event.preventDefault();
+ const element = event.currentTarget;
+ const dataset = element.dataset;
+
+ if (dataset.roll) {
+ let roll = new Roll(dataset.roll, this.actor.data.data);
+ let label = dataset.label ? `Rolling ${dataset.label} to score under ${dataset.target}` : '';
+ roll.roll().toMessage({
+ speaker: ChatMessage.getSpeaker({ actor: this.actor }),
+ flavor: label
+ });
+ }
+ }
+
+}
diff --git a/module/mosh.js b/module/mosh.js
index 6615b0a..462334c 100644
--- a/module/mosh.js
+++ b/module/mosh.js
@@ -3,6 +3,8 @@ import { MothershipActor } from "./actor/actor.js";
import { MothershipActorSheet } from "./actor/actor-sheet.js";
import { MothershipCreatureSheet } from "./actor/creature-sheet.js";
import { MothershipShipSheet } from "./actor/ship-sheet.js";
+import { MothershipShipSheetSBT } from "./actor/ship-sheet-sbt.js";
+
import { MothershipItem } from "./item/item.js";
import { MothershipItemSheet } from "./item/item-sheet.js";
import {
@@ -51,6 +53,12 @@ Hooks.once('init', async function () {
types: ['creature'],
makeDefault: false
});
+
+ Actors.registerSheet("mosh", MothershipShipSheetSBT, {
+ types: ['ship'],
+ makeDefault: true
+ });
+
Actors.registerSheet("mosh", MothershipShipSheet, {
types: ['ship'],
makeDefault: false
@@ -834,4 +842,36 @@ async function noCharSelected() {
//log what was done
console.log(`Told the user that no character was selected.`);
});
+}
+
+//tell user no ship is selected
+async function noShipSelected() {
+ //wrap the whole thing in a promise, so that it waits for the form to be interacted with
+ return new Promise(async (resolve) => {
+ //init vars
+ let errorMessage = ``;
+ //create error text based on current settings
+ if (game.settings.get('mosh','macroTarget') === 'character') {
+ errorMessage = `
No Ship Selected
Macro Target is set to the currently selected character. To select a ship, modify your User Configuration in the Players menu located in the lower-left of the interface.
If you prefer Macros to be run on the currently active token(s) in the scene, you should change your settings accordingly.
`;
+ } else if (game.settings.get('mosh','macroTarget') === 'token') {
+ errorMessage = `
No Ship Selected
Macro Target is set to the currently selected token(s) in the scene. To select token(s), click or draw a box around token(s) in the current scene.
If you prefer Macros to be run on the currently selected character for your user, you should change your settings accordingly.
`;
+ }
+ //create final dialog data
+ const dialogData = {
+ title: `Macro Issue`,
+ content: errorMessage,
+ buttons: {}
+ };
+ //add buttons
+ //Ok
+ dialogData.buttons.cancel = {
+ label: `Ok`,
+ callback: () => { },
+ icon: '
'
+ };
+ //render dialog
+ const dialog = new Dialog(dialogData).render(true);
+ //log what was done
+ console.log(`Told the user that no character was selected.`);
+ });
}
\ No newline at end of file
diff --git a/module/settings.js b/module/settings.js
index 6a1e488..9a029b9 100644
--- a/module/settings.js
+++ b/module/settings.js
@@ -1,3 +1,5 @@
+import { rolltableConfig } from "./windows/settings-rolltables.js";
+
export const registerSettings = function () {
game.settings.register('mosh', 'firstEdition', {
@@ -145,9 +147,9 @@ export const registerSettings = function () {
});
game.settings.register('mosh', 'hideWeight', {
- name: "Hide Weight",
- hint: "Hide weight in the items list for players and ships?",
- default: false,
+ name: "Hide 0e Weight",
+ hint: "Hide the 0e weight mechanic in the items list for players and ships?",
+ default: true,
scope: 'world',
type: Boolean,
config: true,
@@ -295,4 +297,151 @@ export const registerSettings = function () {
}
});
-};
+ game.settings.registerMenu('mosh', 'rolltableSelector', {
+ name: "Rolltable Configuration",
+ label: "Choose Tables",
+ hint: "Customize which rolltables are used.",
+ icon: "fa-solid fa-list",
+ type: rolltableConfig
+ });
+
+ game.settings.register('mosh', 'rolltableSelector', {
+ scope: 'world',
+ config: true,
+ type: Object
+ });
+
+ game.settings.register('mosh', 'table0ePanicStressNormal', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "1vCm4ElRPotQXgNB"
+ });
+
+ game.settings.register('mosh', 'table0ePanicStressAndroid', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "egJ11m2mJM3HBd6d"
+ });
+
+ game.settings.register('mosh', 'table0ePanicCalmNormal', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "kqKpQAXyLTEEyz6Z"
+ });
+
+ game.settings.register('mosh', 'table0ePanicCalmAndroid', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "VW6HQ29T7zClNIZ6"
+ });
+
+ game.settings.register('mosh', 'table1ePanicStressNormal', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "ypcoikqHLhnc9tNs"
+ });
+
+ game.settings.register('mosh', 'table1ePanicStressAndroid', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "aBnY19jlhPXzibCt"
+ });
+
+ game.settings.register('mosh', 'table1ePanicCalmNormal', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "MOYI6Ntj5OVFYk06"
+ });
+
+ game.settings.register('mosh', 'table1ePanicCalmAndroid', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "GCtYeCCQVQJ5M6SE"
+ });
+
+ game.settings.register('mosh', 'table1eWoundBluntForce', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "31YibfjueXuZdNLb"
+ });
+
+ game.settings.register('mosh', 'table1eWoundBleeding', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "ata3fRz3uoPfNCLh"
+ });
+
+ game.settings.register('mosh', 'table1eWoundGunshot', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "XjDU2xFOWEasaZK0"
+ });
+
+ game.settings.register('mosh', 'table1eWoundFireExplosives', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "lqiaWwh5cGcJhvnu"
+ });
+
+ game.settings.register('mosh', 'table1eWoundGoreMassive', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "uVfC1CqYdojaJ7yR"
+ });
+
+ game.settings.register('mosh', 'table0eDeath', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "cZOHlhEJcYGZsQBM"
+ });
+
+ game.settings.register('mosh', 'table1eDeath', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "W36WFIpCfMknKgHy"
+ });
+
+ game.settings.register('mosh', 'table1eDistressSignal', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "UxAjAqUTjYTcCbS8"
+ });
+
+ game.settings.register('mosh', 'table1eMegadamageEffects', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "AqGWwoWXzijFs427"
+ });
+
+ game.settings.register('mosh', 'table1eMaintenance', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "kqz8GsFVPfjvqO0N"
+ });
+
+ game.settings.register('mosh', 'table1eBankruptcy', {
+ scope: 'world',
+ config: false,
+ type: String,
+ default: "BsfdIl7CJNs1PViS"
+ });
+
+};
\ No newline at end of file
diff --git a/module/windows/settings-rolltables.js b/module/windows/settings-rolltables.js
new file mode 100644
index 0000000..df43be5
--- /dev/null
+++ b/module/windows/settings-rolltables.js
@@ -0,0 +1,89 @@
+export class rolltableConfig extends FormApplication {
+ static get defaultOptions() {
+ const options = super.defaultOptions;
+ console.log(options);
+ //options.id = 'sheet-modifiers';
+ //options.classes = ["mosh", "sheet", "actor", "ship"];
+ options.id = 'rolltable-modifiers';
+ options.classes = ["mosh"];
+ options.template = 'systems/mosh/templates/dialogs/settings-rolltableconfig-dialog.html';
+ options.width = 800;
+ options.height = 'auto';
+ options.resizeable = false;
+ options.submitOnChange = true;
+ options.submitOnClose = true;
+ options.closeOnSubmit = false;
+ return options;
+ }
+
+ /**
+ * Construct and return the data object used to render the HTML template for this form application.
+ * @return {Object}
+ */
+ getData() {
+ const tableSelection = super.getData();
+ tableSelection.table0ePanicStressNormal = game.settings.get("mosh", "table0ePanicStressNormal");
+ tableSelection.table0ePanicStressAndroid = game.settings.get("mosh", "table0ePanicStressAndroid");
+ tableSelection.table0ePanicCalmNormal = game.settings.get("mosh", "table0ePanicCalmNormal");
+ tableSelection.table0ePanicCalmAndroid = game.settings.get("mosh", "table0ePanicCalmAndroid");
+ tableSelection.table1ePanicStressNormal = game.settings.get("mosh", "table1ePanicStressNormal");
+ tableSelection.table1ePanicStressAndroid = game.settings.get("mosh", "table1ePanicStressAndroid");
+ tableSelection.table1ePanicCalmNormal = game.settings.get("mosh", "table1ePanicCalmNormal");
+ tableSelection.table1ePanicCalmAndroid = game.settings.get("mosh", "table1ePanicCalmAndroid");
+ tableSelection.table1eWoundBluntForce = game.settings.get("mosh", "table1eWoundBluntForce");
+ tableSelection.table1eWoundBleeding = game.settings.get("mosh", "table1eWoundBleeding");
+ tableSelection.table1eWoundGunshot = game.settings.get("mosh", "table1eWoundGunshot");
+ tableSelection.table1eWoundFireExplosives = game.settings.get("mosh", "table1eWoundFireExplosives");
+ tableSelection.table1eWoundGoreMassive = game.settings.get("mosh", "table1eWoundGoreMassive");
+ tableSelection.table0eDeath = game.settings.get("mosh", "table0eDeath");
+ tableSelection.table1eDeath = game.settings.get("mosh", "table1eDeath");
+ tableSelection.table1eDistressSignal = game.settings.get("mosh", "table1eDistressSignal");
+ tableSelection.table1eMegadamageEffects = game.settings.get("mosh", "table1eMegadamageEffects");
+ tableSelection.table1eMaintenance = game.settings.get("mosh", "table1eMaintenance");
+ tableSelection.table1eBankruptcy = game.settings.get("mosh", "table1eBankruptcy");
+
+ return tableSelection;
+ }
+ /* -------------------------------------------- */
+
+ /** @override */
+ activateListeners(html) {
+ super.activateListeners(html);
+
+ // Close Button
+ html.find('.close-button').click(ev => {
+ this.close()
+ });
+ }
+
+ /**
+ * This method is called upon form submission after form data is validated
+ * @param event {Event} The initial triggering submission event
+ * @param formData {Object} The object of validated form data with which to update the object
+ * @private
+ */
+ async _updateObject(event, formData) {
+ await Promise.all([
+ game.settings.set("mosh", "table0ePanicStressNormal", formData["table0ePanicStressNormal"]),
+ game.settings.set("mosh", "table0ePanicStressAndroid", formData["table0ePanicStressAndroid"]),
+ game.settings.set("mosh", "table0ePanicCalmNormal", formData["table0ePanicCalmNormal"]),
+ game.settings.set("mosh", "table0ePanicCalmAndroid", formData["table0ePanicCalmAndroid"]),
+ game.settings.set("mosh", "table1ePanicStressNormal", formData["table1ePanicStressNormal"]),
+ game.settings.set("mosh", "table1ePanicStressAndroid", formData["table1ePanicStressAndroid"]),
+ game.settings.set("mosh", "table1ePanicCalmNormal", formData["table1ePanicCalmNormal"]),
+ game.settings.set("mosh", "table1ePanicCalmAndroid", formData["table1ePanicCalmAndroid"]),
+ game.settings.set("mosh", "table1eWoundBluntForce", formData["table1eWoundBluntForce"]),
+ game.settings.set("mosh", "table1eWoundBleeding", formData["table1eWoundBleeding"]),
+ game.settings.set("mosh", "table1eWoundGunshot", formData["table1eWoundGunshot"]),
+ game.settings.set("mosh", "table1eWoundFireExplosives", formData["table1eWoundFireExplosives"]),
+ game.settings.set("mosh", "table1eWoundGoreMassive", formData["table1eWoundGoreMassive"]),
+ game.settings.set("mosh", "table0eDeath", formData["table0eDeath"]),
+ game.settings.set("mosh", "table1eDeath", formData["table1eDeath"]),
+ game.settings.set("mosh", "table1eDistressSignal", formData["table1eDistressSignal"]),
+ game.settings.set("mosh", "table1eMegadamageEffects", formData["table1eMegadamageEffects"]),
+ game.settings.set("mosh", "table1eMaintenance", formData["table1eMaintenance"]),
+ game.settings.set("mosh", "table1eBankruptcy", formData["table1eBankruptcy"])
+ ]);
+
+ }
+}
diff --git a/module/windows/ship-deckplan.js b/module/windows/ship-deckplan.js
new file mode 100644
index 0000000..e6c612f
--- /dev/null
+++ b/module/windows/ship-deckplan.js
@@ -0,0 +1,69 @@
+export class DLShipDeckplan extends ActorSheet {
+ static get defaultOptions() {
+ const options = super.defaultOptions;
+ options.id = 'sheet-modifiers';
+ options.classes = ["mosh", "sheet", "actor", "ship"];
+ options.template = 'systems/mosh/templates/dialogs/ship-deckplan-dialog.html';
+ options.width = 800;
+ options.height = 'auto';
+ options.resizeable = true;
+ return options;
+ }
+ /* -------------------------------------------- */
+ /**
+ * Add the Entity name into the window title
+ * @type {String}
+ */
+ get title() {
+ return `${this.object.name}: Deckplan`;
+ }
+ /* -------------------------------------------- */
+
+ /**
+ * Construct and return the data object used to render the HTML template for this form application.
+ * @return {Object}
+ */
+ getData() {
+ const actor = this.object;
+ console.log(this.object);
+
+ return {
+ actor
+ };
+ }
+
+
+ /* -------------------------------------------- */
+
+
+
+
+ /** @override */
+ activateListeners(html) {
+ super.activateListeners(html);
+ }
+
+ /**
+ * This method is called upon form submission after form data is validated
+ * @param event {Event} The initial triggering submission event
+ * @param formData {Object} The object of validated form data with which to update the object
+ * @private
+ */
+ async _updateObject(event, formData) {
+ // console.log(this.object.system);
+ // console.log(formData);
+ // console.log(formData['actor.system.images.layout']);
+
+ // Loyalty
+ // await this.object.update({
+ // "system.images.layout": formData['actor.system.images.layout']
+ // });
+
+ // await this.object.updateEmbeddedEntity("OwnedItem", update);
+
+ this.object.update({
+ formData
+ });
+ this.object.sheet.render(true);
+ }
+}
diff --git a/module/windows/ship-macros.js b/module/windows/ship-macros.js
new file mode 100644
index 0000000..77d0253
--- /dev/null
+++ b/module/windows/ship-macros.js
@@ -0,0 +1,110 @@
+import { DLShipDeckplan } from "../windows/ship-deckplan.js";
+
+
+export class DLShipMacros extends BaseSheet {
+ static get defaultOptions() {
+ const options = super.defaultOptions;
+ options.id = 'sheet-modifiers';
+ options.classes = ["mosh", "sheet", "actor", "ship"];
+ options.template = 'systems/mosh/templates/dialogs/ship-macro-dialog.html';
+ options.width = 320;
+ options.height = 'auto';
+ options.resizeable = false;
+ return options;
+ }
+ /* -------------------------------------------- */
+ /**
+ * Add the Entity name into the window title
+ * @type {String}
+ */
+ get title() {
+ return `${this.object.name}: Ship Macros`;
+ }
+ /* -------------------------------------------- */
+
+ _onOpenDeckplan(event) {
+ event.preventDefault();
+ new DLShipDeckplan(this.object, {
+ top: this.position.top + 40,
+ left: this.position.left + (this.position.width - 400) / 2
+ }).render(true);
+ }
+
+ /**
+ * Construct and return the data object used to render the HTML template for this form application.
+ * @return {Object}
+ */
+ getData() {
+ const actor = this.object;
+
+ return {
+ actor
+ };
+ }
+ /* -------------------------------------------- */
+
+ /** @override */
+ activateListeners(html) {
+ super.activateListeners(html);
+
+ // Distress Signal
+ html.find('.distress-button').click(ev => {
+ //roll distress signal
+ this.object.distressSignal();
+ });
+
+ // Maintenance Check
+ html.find('.maintenance-button').click(ev => {
+ //roll maintenance check
+ this.object.maintenanceCheck();
+ });
+
+ // Bankruptcy Save
+ html.find('.bankruptcy-button').click(ev => {
+ //roll bankruptcy save
+ this.object.bankruptcySave();
+ });
+
+ // Morale Check
+ html.find('.morale-button').click(ev => {
+ //roll morale check
+ this.object.moraleCheck();
+ });
+
+ // Deckplan Button
+ html.find('.deckplan-button').click(ev => this._onOpenDeckplan(ev));
+
+ // Close Button
+ html.find('.close-button').click(ev => this.close());
+ }
+
+ /**
+ * This method is called upon form submission after form data is validated
+ * @param event {Event} The initial triggering submission event
+ * @param formData {Object} The object of validated form data with which to update the object
+ * @private
+ */
+ async _updateObject(event, formData) {
+
+ // await this.object.update({
+ // "data.stats.loyalty.enabled": true
+ // });
+
+ await this.object.update({
+ "data.stats.bankruptcy.value": formData['actor.system.stats.bankruptcy.value']
+ });
+
+ // await this.object.updateEmbeddedEntity("OwnedItem", update);
+
+ // await this.object.update({
+ // formData
+ // });
+
+ // console.log(this);
+
+ // await this.object.sheet.render(true, {focus: false});
+ // this.bringToTop();
+
+
+ }
+}
diff --git a/module/windows/ship-megadamage.js b/module/windows/ship-megadamage.js
new file mode 100644
index 0000000..16b2887
--- /dev/null
+++ b/module/windows/ship-megadamage.js
@@ -0,0 +1,140 @@
+export class DLShipMegaDamage extends FormApplication {
+ static get defaultOptions() {
+ const options = super.defaultOptions;
+ options.id = 'sheet-modifiers';
+ options.classes = ["mosh", "sheet", "actor", "ship"];
+ options.template = 'systems/mosh/templates/dialogs/ship-megadamage-dialog.html';
+ options.width = 320;
+ options.height = 'auto';
+ options.resizeable = false;
+ return options;
+ }
+ /* -------------------------------------------- */
+ /**
+ * Add the Entity name into the window title
+ * @type {String}
+ */
+ get title() {
+ return `${this.object.name}: Megadamage Effects`;
+ }
+ /* -------------------------------------------- */
+ /**
+ * Construct and return the data object used to render the HTML template for this form application.
+ * @return {Object}
+ */
+ getData() {
+ const data = super.getData();
+ const actor = this.object;
+
+
+ this._prepareMegadamage(data);
+
+
+ return {
+ actor
+ };
+ }
+
+
+ async _prepareMegadamage(sheetData){
+ const actorData = sheetData.object;
+
+ //A script to return the data from a table.
+ let tableId = game.settings.get('mosh','table1eMegadamageEffects');
+ let currentLocation = '';
+ let tableLocation = '';
+ //find where this table is located
+ //get current compendium
+ let compendium = game.packs;
+ //loop through each compendium
+ compendium.forEach(function(pack){
+ //is this a pack of rolltables?
+ if (pack.metadata.type === 'RollTable') {
+ //log where we are
+ currentLocation = pack.metadata.id;
+ //loop through each pack to find the right table
+ pack.index.forEach(function(table) {
+ //is this our table?
+ if (table._id === tableId) {
+ //grab the table location
+ tableLocation = currentLocation;
+ }
+ });
+ }
+ });
+ //get table data
+ let tableData = await game.packs.get(tableLocation).getDocument(tableId);
+
+ let entries = Array.from(tableData.results.entries());
+
+ // MEGADAMAGE SETTINGS MENU
+ let megadamageSettingsHTML = "";
+ let index = 0;
+ for(const entry of entries){
+ if(index != 0){
+ if (actorData.system.megadamage.hits.includes(index)){
+ megadamageSettingsHTML += `
 `;
+ }
+ else{
+ megadamageSettingsHTML += `
 `;
+ }
+
+ megadamageSettingsHTML += `
${index} | ${entry[1].text}
`;
+ }
+ index++;
+ }
+
+ actorData.system.megadamage.menu.html = megadamageSettingsHTML;
+
+ // await this.object.update({
+ // "data.megadamage.menu.html": megadamageSettingsHTML
+ // });
+ }
+
+ /* -------------------------------------------- */
+
+ /** @override */
+ activateListeners(html) {
+ super.activateListeners(html);
+
+ html.on('mousedown', '.megadamage-button', ev => {
+ const data = this.object;
+
+ const div = $(ev.currentTarget);
+ const targetKey = div.data("key");
+
+ if(data.system.megadamage.hits.includes(targetKey)){
+ const index = data.system.megadamage.hits.indexOf(targetKey);
+ data.system.megadamage.hits.splice(index, 1);
+ } else {
+ data.system.megadamage.hits.push(targetKey);
+ }
+
+ this.object.update({
+ "data.megadamage.hits": data.system.megadamage.hits
+ });
+
+ this.render(true, {focus: true});
+ });
+
+ // Close Button
+ html.find('.close-button').click(ev => this.close());
+ }
+
+ /**
+ * This method is called upon form submission after form data is validated
+ * @param event {Event} The initial triggering submission event
+ * @param formData {Object} The object of validated form data with which to update the object
+ * @private
+ */
+ async _updateObject(event, formData) {
+
+ // this.object.update({
+ // formData
+ // });
+
+ //await this.object.sheet.render(true, {focus: false});
+
+
+ }
+}
diff --git a/module/windows/ship-setup.js b/module/windows/ship-setup.js
new file mode 100644
index 0000000..3c6d172
--- /dev/null
+++ b/module/windows/ship-setup.js
@@ -0,0 +1,73 @@
+export class DLShipSetup extends FormApplication {
+ static get defaultOptions() {
+ const options = super.defaultOptions;
+ options.id = 'sheet-modifiers';
+ options.classes = ["mosh", "sheet", "actor", "ship"];
+ options.template = 'systems/mosh/templates/dialogs/ship-setup-dialog.html';
+ options.width = 320;
+ options.height = 'auto';
+ options.resizeable = false;
+ return options;
+ }
+ /* -------------------------------------------- */
+ /**
+ * Add the Entity name into the window title
+ * @type {String}
+ */
+ get title() {
+ return `${this.object.name}: Ship Setup`;
+ }
+ /* -------------------------------------------- */
+ /**
+ * Construct and return the data object used to render the HTML template for this form application.
+ * @return {Object}
+ */
+ getData() {
+ const actor = this.object;
+ console.log(this);
+
+ return {
+ actor
+ };
+ }
+ /* -------------------------------------------- */
+
+ /** @override */
+ activateListeners(html) {
+ super.activateListeners(html);
+
+ // Starting Conditions
+ html.find('.conditions-button').click(ev => {
+ //roll starting conditions
+ this.object.rollTable('kqz8GsFVPfjvqO0N','1d5+1','low',true,false,null,null);
+ });
+
+ // Close Button
+ html.find('.close-button').click(ev => this.close());
+ }
+
+ /**
+ * This method is called upon form submission after form data is validated
+ * @param event {Event} The initial triggering submission event
+ * @param formData {Object} The object of validated form data with which to update the object
+ * @private
+ */
+ async _updateObject(event, formData) {
+
+ console.log("Updating Object");
+
+ await this.object.update({
+ "name": formData['actor.name']
+ });
+
+
+ this.object.update({
+ formData
+ });
+ console.log(this);
+
+ await this.object.sheet.render(true, {focus: false});
+
+
+ }
+}
diff --git a/packs/conditions_0e/LOG b/packs/conditions_0e/LOG
index 837622f..05270c9 100644
--- a/packs/conditions_0e/LOG
+++ b/packs/conditions_0e/LOG
@@ -1,5 +1,5 @@
-2023/12/07-11:20:51.932 25f8 Delete type=3 #1
-2023/12/07-11:21:09.696 2b64 Level-0 table #5: started
-2023/12/07-11:21:09.698 2b64 Level-0 table #5: 8479 bytes OK
-2023/12/07-11:21:09.699 2b64 Delete type=0 #3
-2023/12/07-11:21:09.704 2b64 Manual compaction at level-0 from '!items!1r6ruvSdxn2bHHIk' @ 72057594037927935 : 1 .. '!items!zbKI2RCl5h3vowoy' @ 0 : 0; will stop at (end)
+2024/05/24-23:57:05.532 1068 Delete type=3 #1
+2024/05/24-23:57:30.906 3f44 Level-0 table #5: started
+2024/05/24-23:57:30.915 3f44 Level-0 table #5: 8479 bytes OK
+2024/05/24-23:57:30.921 3f44 Delete type=0 #3
+2024/05/24-23:57:30.945 3f44 Manual compaction at level-0 from '!items!1r6ruvSdxn2bHHIk' @ 72057594037927935 : 1 .. '!items!zbKI2RCl5h3vowoy' @ 0 : 0; will stop at (end)
diff --git a/packs/conditions_1e/LOG b/packs/conditions_1e/LOG
index 9707920..b27196f 100644
--- a/packs/conditions_1e/LOG
+++ b/packs/conditions_1e/LOG
@@ -1,5 +1,5 @@
-2023/12/07-11:20:51.832 25f8 Delete type=3 #1
-2023/12/07-11:21:09.665 2b64 Level-0 table #5: started
-2023/12/07-11:21:09.669 2b64 Level-0 table #5: 14495 bytes OK
-2023/12/07-11:21:09.671 2b64 Delete type=0 #3
-2023/12/07-11:21:09.671 2b64 Manual compaction at level-0 from '!items!0ZAwhewvLBwX3opf' @ 72057594037927935 : 1 .. '!items!z0avrplKe6M0RcXk' @ 0 : 0; will stop at (end)
+2024/05/24-23:57:05.353 23c8 Delete type=3 #1
+2024/05/24-23:57:30.842 3f44 Level-0 table #5: started
+2024/05/24-23:57:30.850 3f44 Level-0 table #5: 14495 bytes OK
+2024/05/24-23:57:30.854 3f44 Delete type=0 #3
+2024/05/24-23:57:30.854 3f44 Manual compaction at level-0 from '!items!0ZAwhewvLBwX3opf' @ 72057594037927935 : 1 .. '!items!z0avrplKe6M0RcXk' @ 0 : 0; will stop at (end)
diff --git a/packs/items_maintenance_1e.db b/packs/items_maintenance_1e.db
new file mode 100644
index 0000000..14e9ee2
--- /dev/null
+++ b/packs/items_maintenance_1e.db
@@ -0,0 +1,100 @@
+{"_id":"ciAkQXkxSXTG8MV1","name":"Rancid smell permeates cabins.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"pLleYaFjcIuAm4Pp","name":"Huge mess everywhere.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"dReCCsfiV7it4lsm","name":"Staticky comms.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"4JRD71mvWNtFUDL7","name":"Faulty electrical system.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"59cXdcrZlmjUcJpV","name":"Loose couplings.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"CLvIvoNryBARtU7T","name":"Hidden (highly illegal) contraband.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"vip6FxWcX4ReJD3b","name":"Autopilot systems down.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"AQt9nXy6S0Ev50r7","name":"Leaking hydraulic systems.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"QUyfvbFhCqb9d7Lu","name":"Creaking hull.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"SW5kVSjiFbBxIeiu","name":"Damaged bulkheads.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"wNm669fzbdZGwr0g","name":"Misaligned docking clamps.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"3l0LUZpjizvZmHWs","name":"Viewports blocked.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"c8SXxPHMsG7uycas","name":"Jammed exterior airlocks.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"9kS8VjGuSMpghdCk","name":"Dysfunctional gravity plating.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"Low2X1z7m1iB3rkA","name":"Out of code compliance.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"BicB3xA1h978ZevJ","name":"Controls sticking.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"C9dQYp7gcjtq5QRz","name":"Coolant leak.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"1HNvL7XEUcMQbLps","name":"Miscalibrated Thruster Gimbal System.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"xa9MPzfrPglkSJjg","name":"Bevvy of OSHA violations.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"ZbAFemnvHB1YTHBK","name":"Blocked air vents.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"wjyAZnOOafvv4xzB","name":"Emergency lighting only.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"l1OGQ0IXZHjnO4Ys","name":"Internal networking issues.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"vleMoz5bbkZ5w28o","name":"Inaccurate data collection.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"T4wAR08WyT3g9C6D","name":"Oxygen leak. If ship is low on O2, lose 1d5 extra per day.
@UUID[Compendium.mosh.macros_triggered_1e.u7TchSo3qutnzaKF]{-1d5 Oxygen}","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"fbrN7sbgPjIwkk7I","name":"Throttled Afterburners. -2d10 Thrusters.
@UUID[Compendium.mosh.macros_triggered_1e.jmOh8n2ps0YIeBC0]{-2d10 Thrusters}","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"7GqbGIOzA9vYOPiI","name":"Lemon. Maintenance Checks at [-].
@UUID[Compendium.mosh.macros_triggered_1e.C04VbNoj8LgfY8QK]{Maintenance Check [-]}","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"dgisAPnBbrIOiisk","name":"Slow acceleration. +1 Week to travel.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"d94uF9rpmeP60Kl4","name":"Inaccurate navigation.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"3Ptitg8HBZfl2CXN","name":"Miscalibrated Targeting Sensors. -1d10 Battle.
@UUID[Compendium.mosh.macros_triggered_1e.X3cL9eS2HOPxhLH5]{-1d10 Battle}","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"mK1Acfk5NAgs1MHC","name":"Faulty Cryopods. Nightmares. Cryosickness lasts an additional week.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"IR1sWnYXniMg9TdP","name":"Malfunctioning escape pods.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"FIqSHePAeLJywerx","name":"Unable to send distress signals.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"4kmMuAbW1jnfVMYP","name":"Sabotaged coolant system.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"ALplRgZtneMRdloo","name":"Death trap. [-] on all rolls.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"2pxf4O2NrLdwYRtO","name":"Worn landing struts.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"64AQJ3zQDOb7NOR1","name":"Out-of-date air filters.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"PKBXKvgWZwafKWJ3","name":"Corroded pipes.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"NgKPVhRkD8Gteo5Z","name":"Innaccurate orbital transfer navigation.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"5d220ZzrEV3qx6Fy","name":"Worn out fuel injection nozzles.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"IGx8nQrwfz07r6TR","name":"Inoperative exterior lighting system.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"pW1FUDxp2N0M0D1y","name":"Defective intercom system.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"UPAxtEOrSF3Il4uA","name":"Inadequate waste recycling.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"m04JdXL1xGQOkDyp","name":"Faulty altitude control thrusters.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"OWkfB73RTSLDMlsU","name":"Insufficient Life Support redundancy.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"hNJYqetiMKUlZzYH","name":"Delayed communication relays.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"rlW0LUlsK7vDGZEh","name":"Damaged fuel lines.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"IDiwAbD8DTbec7S1","name":"Corroded exhaust manifolds.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"EteEoBrlnzcySppN","name":"Terminal displays non-functional.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"guvCGNRa75AB2Avg","name":"Check engine light won’t turn off.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"cbXMdd4ugxSOT5TU","name":"Failed backup systems.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"kftgvuQoefQ7pl28","name":"Faulty door locks.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"Odpb5coSTST7kCkc","name":"Buggy communications.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"vMRVXZxu6ozj0iw2","name":"Infected food storage facilities.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"4Lqg0lqjjTlNlr0j","name":"Corrupted data banks.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"Ka8elMGKtcakUIxx","name":"Jammed cargo bay doors.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"TAerNMqv19pANCxq","name":"Flickering interior lights.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"vv1VykTwiQmgEj6N","name":"Failed airlock seals.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"GW1KGmYdxYYf4ZWT","name":"Fuel Leak. Burn +1 Fuel everytime you spend fuel.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"FLaPtHcegheN7wHw","name":"Jump Bug. 10% chance Jump takes 2d10 months, not 2d10 days.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"g9Z7He5zPHNrxYe1","name":"Fragile. Always take +1 MDMG.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"IiPryFS9MOGZXeuG","name":"Cracked heat shields.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"FmPqHYH3UoGpaWYL","name":"Outdated software. -1d10 Systems.
@UUID[Compendium.mosh.macros_triggered_1e.oDftFxRKkCQRNY2O]{-1d10 Systems}","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"NLwybTzXJ1bndki3","name":"Inadequate Water Filtration. Parasites in the water supply.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"oySXnFIbRW0WRoeF","name":"Malfunctioning waste management system.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"RiHvRQ9nZDygwvvB","name":"Fusion Reactors overheating.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"wCYGQrI9qonhWy8F","name":"Failed radiation filter.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"5J4r3yw4xDj890yZ","name":"Radiation leak. Entire ship is at Radiation Level 2.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"XmIcQgho4un7hYki","name":"Miscalibrated guidance system.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"KhlrUaPjVIoyhnaL","name":"Overloaded power storage.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"LRumIQdUBzD0Jc0X","name":"Malfunctioning sensor arrays.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"e144cIdUEyTJgN1G","name":"Failed Water Recovery System.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"b2b3j5JtanbyWlNd","name":"Micrometoroid hull damage.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"5OBjTojgrp5N9mEw","name":"Faulty Carbon Dioxide Removal Assembly.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"8s1eBY5bEcQQTCz0","name":"Solar panel degradation.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"5UiJy739gvGHkRYp","name":"Computer failure from cosmic radiation.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"yJY9CzP1KA15aMqV","name":"Overloaded circuitry.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"nHac0gkEcCNew7RX","name":"Malfunctioning plasma thruster.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"DYHuVA4CQlmK2MJy","name":"Thermal management system failure.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"QIcoFYoC0hxW84qD","name":"Intermittent electrical outages.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"AuTERG3m7ECQKrKs","name":"Fire suppression system out of code.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"1iOSKp82goZGJZch","name":"Damaged floor pannelling.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"ZBUtxiX72udqLzIk","name":"Broken light fixture in remote corridor.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"iwFmPpAth3VbRRL8","name":"Damaged coolant pump.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"Eo0l4WMxcS62GCMP","name":"Cracked viewports.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"miRqXNzkW0biml1I","name":"Systems overloaded with malware.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"cOLcJ3Dnecbe6ZIU","name":"Leaky fuel valve.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"zRzb3Laiuw4ac6p0","name":"Jammed exhaust vent.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"EZzGAO6DneH1qmQM","name":"Stuck waste disposal chute.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"Tp6k1gPwhQmT6hCo","name":"Lifts non-functioning.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"2Ht7fg78511Hd49u","name":"Damaged communications antenna.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":false,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"XLEhMV9SnSfeEE7E","name":"Clogged Air Filtration. Crew capacity cut in half.
@UUID[Compendium.mosh.macros_triggered_1e.DUuRY7kHKd7n5luv]{-50% Crew Capacity}","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"Z8raruNDvfNASFQi","name":"Malfunctioning climate control. 85º at all times.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"3rulbOVhyRlTizT0","name":"No emergency power.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"ulWxa2UtTOQihTyz","name":"Weak Frame. -1 Hull, -1 Upgrade.
@UUID[Compendium.mosh.macros_triggered_1e.uPY19Y49bGCLGK3N]{-1 Hull}
@UUID[Compendium.mosh.macros_triggered_1e.06NSvDYTtmkeUtLq]{-1 Upgrade}","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"EnogUslNNusSfVFy","name":"Toxic chemical spill.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"ElXLL32uNYiPmE4G","name":"Poor scanners. Ship has to be one range band closer than normal.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"b081FxEAclRKji3q","name":"Counterfit papers. Ship is stolen. There is a bounty on it.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"zHsnShUX37Zvyi2O","name":"Corrupted A.I.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"58KhhfMQ9p0XJZHc","name":"Warp Cores fail 10% of the time.","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"60QSsxrVOt83OU9p","name":"Rust bucket. Everything that can go wrong, does. +1 Minimum Stress to crew.
@UUID[Compendium.mosh.macros_triggered_1e.BmEHWH7YxV9qb21p]{+1 Minimum Stress}","type":"repair","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","system":{"description":"
Maintenance Issue
","major":true,"quantity":1},"effects":[],"flags":{},"folder":null,"sort":0,"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
\ No newline at end of file
diff --git a/packs/items_maintenance_1e/000004.log b/packs/items_maintenance_1e/000004.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/items_maintenance_1e/000005.ldb b/packs/items_maintenance_1e/000005.ldb
new file mode 100644
index 0000000..8e35a17
Binary files /dev/null and b/packs/items_maintenance_1e/000005.ldb differ
diff --git a/packs/items_maintenance_1e/CURRENT b/packs/items_maintenance_1e/CURRENT
new file mode 100644
index 0000000..1a84852
--- /dev/null
+++ b/packs/items_maintenance_1e/CURRENT
@@ -0,0 +1 @@
+MANIFEST-000002
diff --git a/packs/items_maintenance_1e/LOCK b/packs/items_maintenance_1e/LOCK
new file mode 100644
index 0000000..e69de29
diff --git a/packs/items_maintenance_1e/LOG b/packs/items_maintenance_1e/LOG
new file mode 100644
index 0000000..fe9b18d
--- /dev/null
+++ b/packs/items_maintenance_1e/LOG
@@ -0,0 +1,5 @@
+2024/05/24-23:57:05.390 fc8 Delete type=3 #1
+2024/05/24-23:57:30.866 3f44 Level-0 table #5: started
+2024/05/24-23:57:30.875 3f44 Level-0 table #5: 13469 bytes OK
+2024/05/24-23:57:30.877 3f44 Delete type=0 #3
+2024/05/24-23:57:30.894 3f44 Manual compaction at level-0 from '!items!1HNvL7XEUcMQbLps' @ 72057594037927935 : 1 .. '!items!zRzb3Laiuw4ac6p0' @ 0 : 0; will stop at (end)
diff --git a/packs/items_maintenance_1e/MANIFEST-000002 b/packs/items_maintenance_1e/MANIFEST-000002
new file mode 100644
index 0000000..3b37661
Binary files /dev/null and b/packs/items_maintenance_1e/MANIFEST-000002 differ
diff --git a/packs/macros_hotbar_0e.db b/packs/macros_hotbar_0e.db
index afc3981..ae25f9b 100644
--- a/packs/macros_hotbar_0e.db
+++ b/packs/macros_hotbar_0e.db
@@ -1,4 +1,4 @@
-{"_id":"2xRvRAixuocjCm40","name":"Death Save","type":"script","scope":"global","img":"systems/mosh/images/icons/ui/rolltables/death_save.png","command":"//init vars\nlet macroTarget = game.settings.get('mosh','macroTarget');\n//warn user if character is not selected\nif ((macroTarget === 'character' && !game.user.character) || (macroTarget === 'token' && !canvas.tokens.controlled.length)) {\n //warn player\n game.mosh.noCharSelected();\n//else pop up the dialog\n} else {\n //pop up the death save dialog box\n new Dialog({\n title: `Death Save`,\n content: `\n \n
\n
\n
\n
Death Save
Whenever you reach 0 Health, make a Body Save: Failure means you die. Success means you fall unconscious, make a Death Save to find out when you regain consciousness. Crew members with a medscanner, relevant skills like First Aid or Biology, or scientists and androids who pass an Intellect Check can determine your condition. \n
\n
\n
Select your roll type:
\n `,\n buttons: {\n button1: {\n label: `Advantage`,\n callback: () => game.mosh.initRollTable(`cZOHlhEJcYGZsQBM`,`1d10 [+]`,`high`,false,false,null,null),\n icon: `
`\n },\n button2: {\n label: `Normal`,\n callback: () => game.mosh.initRollTable(`cZOHlhEJcYGZsQBM`,`1d10`,`high`,false,false,null,null),\n icon: `
`\n },\n button3: {\n label: `Disadvantage`,\n callback: () => game.mosh.initRollTable(`cZOHlhEJcYGZsQBM`,`1d10 [-]`,`high`,false,false,null,null),\n icon: `
`\n }\n }\n },{width: 600,height: 265}).render(true);\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"2xRvRAixuocjCm40","name":"Death Save","type":"script","scope":"global","img":"systems/mosh/images/icons/ui/rolltables/death_save.png","command":"//init vars\nlet macroTarget = game.settings.get('mosh','macroTarget');\n//warn user if character is not selected\nif ((macroTarget === 'character' && !game.user.character) || (macroTarget === 'token' && !canvas.tokens.controlled.length)) {\n //warn player\n game.mosh.noCharSelected();\n//else pop up the dialog\n} else {\n //pop up the death save dialog box\n new Dialog({\n title: `Death Save`,\n content: `\n \n
\n
\n
\n
Death Save
Whenever you reach 0 Health, make a Body Save: Failure means you die. Success means you fall unconscious, make a Death Save to find out when you regain consciousness. Crew members with a medscanner, relevant skills like First Aid or Biology, or scientists and androids who pass an Intellect Check can determine your condition. \n
\n
\n
Select your roll type:
\n `,\n buttons: {\n button1: {\n label: `Advantage`,\n callback: () => game.mosh.initRollTable(game.settings.get('mosh','table0eDeath'),`1d10 [+]`,`high`,false,false,null,null),\n icon: `
`\n },\n button2: {\n label: `Normal`,\n callback: () => game.mosh.initRollTable(game.settings.get('mosh','table0eDeath'),`1d10`,`high`,false,false,null,null),\n icon: `
`\n },\n button3: {\n label: `Disadvantage`,\n callback: () => game.mosh.initRollTable(game.settings.get('mosh','table0eDeath'),`1d10 [-]`,`high`,false,false,null,null),\n icon: `
`\n }\n }\n },{width: 600,height: 265}).render(true);\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"9Bq5LYoToO1sjCn3","name":"Gain Calm","type":"script","scope":"global","img":"systems/mosh/images/icons/ui/macros/relieve_stress.png","command":"//init vars\nlet macroTarget = game.settings.get('mosh','macroTarget');\n//warn user if character is not selected\nif ((macroTarget === 'character' && !game.user.character) || (macroTarget === 'token' && !canvas.tokens.controlled.length)) {\n //warn player\n game.mosh.noCharSelected();\n//else pop up the dialog\n} else {\n new Dialog({\n title: `Gain Calm`,\n content: `\n \n \n
\n
\n
\n
Gain Calm
Occasionally, certain moments, places, or events can automatically calm you down. Escaping perilous situations, finding a serene location, or experiencing a touching moment with a loved one can have meaningful impacts on your mood and outlook on life. If your Calm is getting close to 0, you should consider making a Rest Save - as the effects of a failed Panic Check can be devastating. \n
\n
\n
Select your modification:
\n `,\n buttons: {\n button1: {\n label: `Gain 5 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',5,null,true),\n icon: `
`\n },\n button2: {\n label: `Gain 10 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',10,null,true),\n icon: `
`\n },\n button3: {\n label: `Gain 1d20 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',null,`1d20`,true),\n icon: `
`\n }\n }\n },{width: 600,height: 265}).render(true);\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"ilBclUmPwcd7aNQK","name":"Gain Stress","type":"script","scope":"global","img":"systems/mosh/images/icons/ui/macros/gain_stress.png","command":"//init vars\nlet macroTarget = game.settings.get('mosh','macroTarget');\n//warn user if character is not selected\nif ((macroTarget === 'character' && !game.user.character) || (macroTarget === 'token' && !canvas.tokens.controlled.length)) {\n //warn player\n game.mosh.noCharSelected();\n//else pop up the dialog\n} else {\n new Dialog({\n title: `Gain Stress`,\n content: `\n \n \n
\n
\n
\n
Gain Stress
You gain 1 Stress every time you fail a Stat Check or Save. Occasionally, certain locations or entities can automatically give you Stress from interacting with or witnessing them. Your Minimum Stress starts at 2, and the Maximum Stress you can have is 20. Any Stress you take over 20 instead reduces the most relevant Stat or Save by that amount. \n
\n
\n \n
Select your modification:
\n `,\n buttons: {\n button1: {\n label: `Gain 1 Stress`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',1,null,true),\n icon: `
`\n },\n button2: {\n label: `Gain 2 Stress`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',2,null,true),\n icon: `
`\n },\n button3: {\n label: `Gain 1d5 Stress`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',null,`1d5`,true),\n icon: `
`\n }\n }\n },{width: 600,height: 265}).render(true);\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"D8ytoUTWfpq8A2td","name":"Lose Calm","type":"script","scope":"global","img":"systems/mosh/images/icons/ui/macros/gain_stress.png","command":"//init vars\nlet macroTarget = game.settings.get('mosh','macroTarget');\n//warn user if character is not selected\nif ((macroTarget === 'character' && !game.user.character) || (macroTarget === 'token' && !canvas.tokens.controlled.length)) {\n //warn player\n game.mosh.noCharSelected();\n//else pop up the dialog\n} else {\n new Dialog({\n title: `Lose Calm`,\n content: `\n \n \n
\n
\n
\n
Lose Calm
Occasionally, certain locations or entities can automatically give you Stress from interacting with or witnessing them. You live in a terrifying, uncaring universe, so your Maximum Calm caps out at 85 and cannot go lower than zero. \n
\n
\n \n
Select your modification:
\n `,\n buttons: {\n button1: {\n label: `Lose 5 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',-5,null,true),\n icon: `
`\n },\n button2: {\n label: `Lose 10 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',-10,null,true),\n icon: `
`\n },\n button3: {\n label: `Lose 1d20 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',null,`-1d20`,true),\n icon: `
`\n }\n }\n },{width: 600,height: 265}).render(true);\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
diff --git a/packs/macros_hotbar_0e/000003.log b/packs/macros_hotbar_0e/000003.log
deleted file mode 100644
index 255fd01..0000000
Binary files a/packs/macros_hotbar_0e/000003.log and /dev/null differ
diff --git a/packs/macros_hotbar_0e/000004.log b/packs/macros_hotbar_0e/000004.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/macros_hotbar_0e/000005.ldb b/packs/macros_hotbar_0e/000005.ldb
new file mode 100644
index 0000000..b974c8f
Binary files /dev/null and b/packs/macros_hotbar_0e/000005.ldb differ
diff --git a/packs/macros_hotbar_0e/LOG b/packs/macros_hotbar_0e/LOG
index a6c86bc..b1565e9 100644
--- a/packs/macros_hotbar_0e/LOG
+++ b/packs/macros_hotbar_0e/LOG
@@ -1 +1,5 @@
-2023/10/08-18:24:19.039 4320 Delete type=3 #1
+2024/05/24-23:57:05.567 fc8 Delete type=3 #1
+2024/05/24-23:57:30.934 3f44 Level-0 table #5: started
+2024/05/24-23:57:30.944 3f44 Level-0 table #5: 13853 bytes OK
+2024/05/24-23:57:30.945 3f44 Delete type=0 #3
+2024/05/24-23:57:30.956 3f44 Manual compaction at level-0 from '!macros!2xRvRAixuocjCm40' @ 72057594037927935 : 1 .. '!macros!ilBclUmPwcd7aNQK' @ 0 : 0; will stop at (end)
diff --git a/packs/macros_hotbar_0e/MANIFEST-000002 b/packs/macros_hotbar_0e/MANIFEST-000002
index bbbc585..5185bee 100644
Binary files a/packs/macros_hotbar_0e/MANIFEST-000002 and b/packs/macros_hotbar_0e/MANIFEST-000002 differ
diff --git a/packs/macros_hotbar_1e.db b/packs/macros_hotbar_1e.db
index b3c59e3..1b5f769 100644
--- a/packs/macros_hotbar_1e.db
+++ b/packs/macros_hotbar_1e.db
@@ -1,5 +1,5 @@
{"_id":"6wsDxyoKPHxpoHtF","name":"Cover","type":"script","scope":"global","img":"systems/mosh/images/icons/ui/attributes/armor.png","command":"prepCover();\n\n//tell the actor to run the function\nasync function prepCover() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character) {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.chooseCover();\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.chooseCover();\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"NsRHfRuuNGPfkYVf","name":"Death Save","type":"script","scope":"global","img":"systems/mosh/images/icons/ui/rolltables/death_save.png","command":"//init vars\nlet macroTarget = game.settings.get('mosh','macroTarget');\n//warn user if character is not selected\nif ((macroTarget === 'character' && !game.user.character) || (macroTarget === 'token' && !canvas.tokens.controlled.length)) {\n //warn player\n game.mosh.noCharSelected();\n//else pop up the dialog\n} else {\n //pop up the death save dialog box\n new Dialog({\n title: `Death Save`,\n content: `\n \n
\n
\n
\n
Death Save
Your character is incapacitated when you receive a fatal wound, or once your Current Wounds equal your Maximum Wounds. As soon as someone spends a turn checking your vitals, make a Death Save to reveal your fate. If your death seems imminent, make your last moments count: save someone’s life, solve an important mystery, or give the others time to escape. \n
\n
\n
Select your roll type:
\n `,\n buttons: {\n button1: {\n label: `Advantage`,\n callback: () => game.mosh.initRollTable(`W36WFIpCfMknKgHy`,`1d10 [+]`,`low`,true,false,null,null),\n icon: `
`\n },\n button2: {\n label: `Normal`,\n callback: () => game.mosh.initRollTable(`W36WFIpCfMknKgHy`,`1d10`,`low`,true,false,null,null),\n icon: `
`\n },\n button3: {\n label: `Disadvantage`,\n callback: () => game.mosh.initRollTable(`W36WFIpCfMknKgHy`,`1d10 [-]`,`low`,true,false,null,null),\n icon: `
`\n }\n }\n },{width: 600,height: 265}).render(true);\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"NsRHfRuuNGPfkYVf","name":"Death Save","type":"script","scope":"global","img":"systems/mosh/images/icons/ui/rolltables/death_save.png","command":"//init vars\nlet macroTarget = game.settings.get('mosh','macroTarget');\n//warn user if character is not selected\nif ((macroTarget === 'character' && !game.user.character) || (macroTarget === 'token' && !canvas.tokens.controlled.length)) {\n //warn player\n game.mosh.noCharSelected();\n//else pop up the dialog\n} else {\n //pop up the death save dialog box\n new Dialog({\n title: `Death Save`,\n content: `\n \n
\n
\n
\n
Death Save
Your character is incapacitated when you receive a fatal wound, or once your Current Wounds equal your Maximum Wounds. As soon as someone spends a turn checking your vitals, make a Death Save to reveal your fate. If your death seems imminent, make your last moments count: save someone’s life, solve an important mystery, or give the others time to escape. \n
\n
\n
Select your roll type:
\n `,\n buttons: {\n button1: {\n label: `Advantage`,\n callback: () => game.mosh.initRollTable(game.settings.get('mosh','table1eDeath'),`1d10 [+]`,`low`,true,false,null,null),\n icon: `
`\n },\n button2: {\n label: `Normal`,\n callback: () => game.mosh.initRollTable(game.settings.get('mosh','table1eDeath'),`1d10`,`low`,true,false,null,null),\n icon: `
`\n },\n button3: {\n label: `Disadvantage`,\n callback: () => game.mosh.initRollTable(game.settings.get('mosh','table1eDeath'),`1d10 [-]`,`low`,true,false,null,null),\n icon: `
`\n }\n }\n },{width: 600,height: 265}).render(true);\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"GSFEBhrKC9yuD88V","name":"Gain Calm","type":"script","scope":"global","img":"systems/mosh/images/icons/ui/macros/relieve_stress.png","command":"//init vars\nlet macroTarget = game.settings.get('mosh','macroTarget');\n//warn user if character is not selected\nif ((macroTarget === 'character' && !game.user.character) || (macroTarget === 'token' && !canvas.tokens.controlled.length)) {\n //warn player\n game.mosh.noCharSelected();\n//else pop up the dialog\n} else {\n new Dialog({\n title: `Gain Calm`,\n content: `\n \n \n
\n
\n
\n
Gain Calm
Occasionally, certain moments, places, or events can automatically calm you down. Escaping perilous situations, finding a serene location, or experiencing a touching moment with a loved one can have meaningful impacts on your mood and outlook on life. If your Calm is getting close to 0, you should consider making a Rest Save - as the effects of a failed Panic Check can be devastating. \n
\n
\n
Select your modification:
\n `,\n buttons: {\n button1: {\n label: `Gain 5 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',5,null,true),\n icon: `
`\n },\n button2: {\n label: `Gain 10 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',10,null,true),\n icon: `
`\n },\n button3: {\n label: `Gain 1d20 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',null,`1d20`,true),\n icon: `
`\n }\n }\n },{width: 600,height: 265}).render(true);\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"X0L0NnWt53b0rHYG","name":"Gain Stress","type":"script","scope":"global","img":"systems/mosh/images/icons/ui/macros/gain_stress.png","command":"//init vars\nlet macroTarget = game.settings.get('mosh','macroTarget');\n//warn user if character is not selected\nif ((macroTarget === 'character' && !game.user.character) || (macroTarget === 'token' && !canvas.tokens.controlled.length)) {\n //warn player\n game.mosh.noCharSelected();\n//else pop up the dialog\n} else {\n new Dialog({\n title: `Gain Stress`,\n content: `\n \n \n
\n
\n
\n
Gain Stress
You gain 1 Stress every time you fail a Stat Check or Save. Occasionally, certain locations or entities can automatically give you Stress from interacting with or witnessing them. Your Minimum Stress starts at 2, and the Maximum Stress you can have is 20. Any Stress you take over 20 instead reduces the most relevant Stat or Save by that amount. \n
\n
\n \n
Select your modification:
\n `,\n buttons: {\n button1: {\n label: `Gain 1 Stress`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',1,null,true),\n icon: `
`\n },\n button2: {\n label: `Gain 2 Stress`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',2,null,true),\n icon: `
`\n },\n button3: {\n label: `Gain 1d5 Stress`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',null,`1d5`,true),\n icon: `
`\n }\n }\n },{width: 600,height: 265}).render(true);\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"trU0DtBJvJCPddsQ","name":"Lose Calm","type":"script","scope":"global","img":"systems/mosh/images/icons/ui/macros/gain_stress.png","command":"//init vars\nlet macroTarget = game.settings.get('mosh','macroTarget');\n//warn user if character is not selected\nif ((macroTarget === 'character' && !game.user.character) || (macroTarget === 'token' && !canvas.tokens.controlled.length)) {\n //warn player\n game.mosh.noCharSelected();\n//else pop up the dialog\n} else {\n new Dialog({\n title: `Lose Calm`,\n content: `\n \n \n
\n
\n
\n
Lose Calm
Occasionally, certain locations or entities can automatically give you Stress from interacting with or witnessing them. You live in a terrifying, uncaring universe, so your Maximum Calm caps out at 85 and cannot go lower than zero. \n
\n
\n \n
Select your modification:
\n `,\n buttons: {\n button1: {\n label: `Lose 5 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',-5,null,true),\n icon: `
`\n },\n button2: {\n label: `Lose 10 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',-10,null,true),\n icon: `
`\n },\n button3: {\n label: `Lose 1d20 Calm`,\n callback: () => game.mosh.initModifyActor('system.other.stress.value',null,`-1d20`,true),\n icon: `
`\n }\n }\n },{width: 600,height: 265}).render(true);\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
diff --git a/packs/macros_hotbar_1e/000003.log b/packs/macros_hotbar_1e/000003.log
deleted file mode 100644
index 45c1a71..0000000
Binary files a/packs/macros_hotbar_1e/000003.log and /dev/null differ
diff --git a/packs/macros_hotbar_1e/000004.log b/packs/macros_hotbar_1e/000004.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/macros_hotbar_1e/000005.ldb b/packs/macros_hotbar_1e/000005.ldb
new file mode 100644
index 0000000..8e34755
Binary files /dev/null and b/packs/macros_hotbar_1e/000005.ldb differ
diff --git a/packs/macros_hotbar_1e/LOG b/packs/macros_hotbar_1e/LOG
index 3972d8b..9f436aa 100644
--- a/packs/macros_hotbar_1e/LOG
+++ b/packs/macros_hotbar_1e/LOG
@@ -1 +1,5 @@
-2023/10/22-15:46:01.566 707c Delete type=3 #1
+2024/05/24-23:57:05.423 23c8 Delete type=3 #1
+2024/05/24-23:57:30.885 3f44 Level-0 table #5: started
+2024/05/24-23:57:30.893 3f44 Level-0 table #5: 17701 bytes OK
+2024/05/24-23:57:30.894 3f44 Delete type=0 #3
+2024/05/24-23:57:30.906 3f44 Manual compaction at level-0 from '!macros!2u4a5gEogtLd3XQz' @ 72057594037927935 : 1 .. '!macros!trU0DtBJvJCPddsQ' @ 0 : 0; will stop at (end)
diff --git a/packs/macros_hotbar_1e/MANIFEST-000002 b/packs/macros_hotbar_1e/MANIFEST-000002
index bbbc585..53bd4fd 100644
Binary files a/packs/macros_hotbar_1e/MANIFEST-000002 and b/packs/macros_hotbar_1e/MANIFEST-000002 differ
diff --git a/packs/macros_triggered_0e.db b/packs/macros_triggered_0e.db
index c388278..411e8c2 100644
--- a/packs/macros_triggered_0e.db
+++ b/packs/macros_triggered_0e.db
@@ -62,8 +62,8 @@
{"_id":"5N4b4Q2OhEj1zv0P","name":"Combat Check","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100','low','combat',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"N20OKT1TDhywkeco","name":"Combat Check -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [-]','low','combat',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"voAUUe17Qw4MJlup","name":"Combat Check +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [+]','low','combat',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"4hmYrNF0uWVqsfEk","name":"Death Save -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`cZOHlhEJcYGZsQBM`,`1d10 [-]`,`high`,false,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"Az3RocMlh0JFxAlu","name":"Death Save +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`cZOHlhEJcYGZsQBM`,`1d10 [+]`,`high`,false,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"4hmYrNF0uWVqsfEk","name":"Death Save -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table0eDeath'),`1d10 [-]`,`high`,false,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"Az3RocMlh0JFxAlu","name":"Death Save +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table0eDeath'),`1d10 [+]`,`high`,false,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"Er4ULzvdn2urxuet","name":"Fear Save","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100','low','fear',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"RdJ2nh41wDUT4ZTP","name":"Fear Save -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [-]','low','fear',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"RzOmeM0RNSpFAna0","name":"Fear Save +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [+]','low','fear',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
diff --git a/packs/macros_triggered_0e/000003.log b/packs/macros_triggered_0e/000003.log
deleted file mode 100644
index c9a57b7..0000000
Binary files a/packs/macros_triggered_0e/000003.log and /dev/null differ
diff --git a/packs/macros_triggered_0e/000004.log b/packs/macros_triggered_0e/000004.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/macros_triggered_0e/000005.ldb b/packs/macros_triggered_0e/000005.ldb
new file mode 100644
index 0000000..4bfedc4
Binary files /dev/null and b/packs/macros_triggered_0e/000005.ldb differ
diff --git a/packs/macros_triggered_0e/LOG b/packs/macros_triggered_0e/LOG
index eeab0f7..cb697b9 100644
--- a/packs/macros_triggered_0e/LOG
+++ b/packs/macros_triggered_0e/LOG
@@ -1 +1,5 @@
-2023/10/08-18:24:19.099 6d6c Delete type=3 #1
+2024/05/24-23:57:05.597 1068 Delete type=3 #1
+2024/05/24-23:57:30.922 3f44 Level-0 table #5: started
+2024/05/24-23:57:30.927 3f44 Level-0 table #5: 14296 bytes OK
+2024/05/24-23:57:30.934 3f44 Delete type=0 #3
+2024/05/24-23:57:30.956 3f44 Manual compaction at level-0 from '!macros!0Yw4QWSAeOuUzRqB' @ 72057594037927935 : 1 .. '!macros!z5V92LyXHjfMxnRQ' @ 0 : 0; will stop at (end)
diff --git a/packs/macros_triggered_0e/MANIFEST-000002 b/packs/macros_triggered_0e/MANIFEST-000002
index bbbc585..9d70ff8 100644
Binary files a/packs/macros_triggered_0e/MANIFEST-000002 and b/packs/macros_triggered_0e/MANIFEST-000002 differ
diff --git a/packs/macros_triggered_1e.db b/packs/macros_triggered_1e.db
index ff61f0a..1060300 100644
--- a/packs/macros_triggered_1e.db
+++ b/packs/macros_triggered_1e.db
@@ -78,32 +78,32 @@
{"_id":"ISd2nEMYvWCPQpl0","name":"-2d10 Body Save","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initModifyActor('system.stats.body.value',null,'-2d10',true);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"pS6A6OklvM6S3bvO","name":"-2d10 Health","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initModifyActor('system.health.value',null,'-2d10',true);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"nECUu4pcwsNTE8C5","name":"-3d10 Health","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initModifyActor('system.health.value',null,'-3d10',true);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"1DD8i6eCS6nx2Ip0","name":"Bleeding Wound","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`ata3fRz3uoPfNCLh`,`1d10`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"tFcWNddtZvlv7tsg","name":"Bleeding Wound -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`ata3fRz3uoPfNCLh`,`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"xr2o2PU5vdrR6fxQ","name":"Bleeding Wound +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`ata3fRz3uoPfNCLh`,`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"TAjlQjA5AAy3qYL3","name":"Blunt Force Wound","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`31YibfjueXuZdNLb`,`1d10`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"oL3GH0HoEPlP8vzG","name":"Blunt Force Wound -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`31YibfjueXuZdNLb`,`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"k0zf8ZGivRguc0wb","name":"Blunt Force Wound +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`31YibfjueXuZdNLb`,`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"1DD8i6eCS6nx2Ip0","name":"Bleeding Wound","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBleeding'),`1d10`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"tFcWNddtZvlv7tsg","name":"Bleeding Wound -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBleeding'),`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"xr2o2PU5vdrR6fxQ","name":"Bleeding Wound +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBleeding'),`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"TAjlQjA5AAy3qYL3","name":"Blunt Force Wound","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBluntForce'),`1d10`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"oL3GH0HoEPlP8vzG","name":"Blunt Force Wound -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBluntForce'),`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"k0zf8ZGivRguc0wb","name":"Blunt Force Wound +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundBluntForce'),`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"X3gqTFFwMe7AudiS","name":"Body Save","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100','low','body',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"ItHLy3URKFQVLipe","name":"Body Save -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [-]','low','body',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"IG2NQgEnqvPjiV5C","name":"Body Save +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [+]','low','body',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"9FOBS5lQCwtVtrgh","name":"Combat Check","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100','low','combat',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"vxcDSg3xiAxDYQIb","name":"Combat Check -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [-]','low','combat',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"5hlvK0p68imanBmy","name":"Combat Check +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [+]','low','combat',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"E2bDXSVfH57BnGEI","name":"Death Save -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`W36WFIpCfMknKgHy`,`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"KHL2lJ6RRvhupFZ3","name":"Death Save +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`W36WFIpCfMknKgHy`,`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"E2bDXSVfH57BnGEI","name":"Death Save -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eDeath'),`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"KHL2lJ6RRvhupFZ3","name":"Death Save +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eDeath'),`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"R2KizR1soAhFYDZm","name":"Fear Save","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100','low','fear',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"wVhApjRP5MXue2kh","name":"Fear Save -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [-]','low','fear',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"DadBoZJblU4uBY5E","name":"Fear Save +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [+]','low','fear',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"bZi1qKmcKLFvnhZ2","name":"Fire & Explosives Wound","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`lqiaWwh5cGcJhvnu`,`1d10`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"dJnQKDf0AlwK27QD","name":"Fire & Explosives Wound -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`lqiaWwh5cGcJhvnu`,`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"7rYhbDAaFeok1Daq","name":"Fire & Explosives Wound +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`lqiaWwh5cGcJhvnu`,`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"S9nnHKWYGSQmjQdp","name":"Gore & Massive Wound","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`uVfC1CqYdojaJ7yR`,`1d10`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"DuVjNlE4lsnR7Emc","name":"Gore & Massive Wound -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`uVfC1CqYdojaJ7yR`,`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"eQPuDgwv8evetFIk","name":"Gore & Massive Wound +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`uVfC1CqYdojaJ7yRd`,`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"XgCOLv9UunBddUyW","name":"Gunshot Wound","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`XjDU2xFOWEasaZK0`,`1d10`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"fnVATRHYJEUlS3pR","name":"Gunshot Wound -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`XjDU2xFOWEasaZK0`,`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"LTpa1ZYVZl4m9k6z","name":"Gunshot Wound +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`XjDU2xFOWEasaZK0`,`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"bZi1qKmcKLFvnhZ2","name":"Fire & Explosives Wound","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundFireExplosives'),`1d10`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"dJnQKDf0AlwK27QD","name":"Fire & Explosives Wound -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundFireExplosives'),`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"7rYhbDAaFeok1Daq","name":"Fire & Explosives Wound +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundFireExplosives'),`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"S9nnHKWYGSQmjQdp","name":"Gore & Massive Wound","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGoreMassive'),`1d10`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"DuVjNlE4lsnR7Emc","name":"Gore & Massive Wound -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGoreMassive'),`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"eQPuDgwv8evetFIk","name":"Gore & Massive Wound +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGoreMassive'),`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"XgCOLv9UunBddUyW","name":"Gunshot Wound","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGunshot'),`1d10`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"fnVATRHYJEUlS3pR","name":"Gunshot Wound -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGunshot'),`1d10 [-]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"LTpa1ZYVZl4m9k6z","name":"Gunshot Wound +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1eWoundGunshot'),`1d10 [+]`,`low`,true,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"DMjVDa7vUq7xGpn8","name":"Intellect Check","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100','low','intellect',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"ln3OpNFK4mN4Ym5q","name":"Intellect Check -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [-]','low','intellect',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"DXfAjkwJVwSCOqZ1","name":"Intellect Check +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [+]','low','intellect',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
@@ -111,8 +111,8 @@
{"_id":"kVNV9vZPY0j77VTo","name":"Panic Check +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`panicCheck`,`[+]`,null,false,false,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"AM9nIK5l7mC5Ho8C","name":"Rest Save -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [-]','low','restSave',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"ZaChBhkd4yU6hoWx","name":"Rest Save +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [+]','low','restSave',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"yPGx2mXToJ2iJPbY","name":"Roll 1d10 on Android Panic Table","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`aBnY19jlhPXzibCt`,`1d10`,`high`,false,false,'system.other.stress.value','>');","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"Jek7hKAMDevKxlZR","name":"Roll on Android Panic Table","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(`aBnY19jlhPXzibCt`,`1d20`,`high`,false,false,'system.other.stress.value','>');","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"yPGx2mXToJ2iJPbY","name":"Roll 1d10 on Android Panic Table","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1ePanicStressAndroid'),`1d10`,`high`,false,false,'system.other.stress.value','>');","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"Jek7hKAMDevKxlZR","name":"Roll on Android Panic Table","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollTable(game.settings.get('mosh','table1ePanicStressAndroid'),`1d20`,`high`,false,false,'system.other.stress.value','>');","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"TkMfT4RIczQb56j2","name":"Sanity Save","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100','low','sanity',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"MdmZ31pKu1q006z7","name":"Sanity Save -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [-]','low','sanity',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"p6JhfjAF7OESZiFM","name":"Sanity Save +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [+]','low','sanity',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
@@ -125,4 +125,26 @@
{"_id":"B9qe0UHmKoal9eub","name":"Strength Check","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100','low','strength',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"XlfEeDblsp7fTzUx","name":"Strength Check -","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [-]','low','strength',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"9X5WPlXiZn9EqF9f","name":"Strength Check +","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initRollCheck('1d100 [+]','low','strength',null,null,null);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"aur5HWqZJNspwdCd","name":"Take Bleeding Damage","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepBleedingDamage();\n\n//tell the actor to run the function\nasync function prepBleedingDamage() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character) {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.takeBleedingDamage();\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.takeBleedingDamage();\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
\ No newline at end of file
+{"_id":"aur5HWqZJNspwdCd","name":"Take Bleeding Damage","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepBleedingDamage();\n\n//tell the actor to run the function\nasync function prepBleedingDamage() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character) {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.takeBleedingDamage();\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.takeBleedingDamage();\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"SeMStXQGIaeiLwvw","name":"-1d5 All Stats/Saves","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepCryoDamage();\n\n//tell the actor to run the function\nasync function prepCryoDamage(); {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character) {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.takeCryoDamage('-1d5');\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.takeCryoDamage('-1d5');\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"2MuANcdgp2g8SDlF","name":"-1d10 All Stats/Saves","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepCryoDamage();\n\n//tell the actor to run the function\nasync function prepCryoDamage(); {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character) {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.takeCryoDamage('-1d10');\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.takeCryoDamage('-1d10');\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"8euTBbjY9uDQR13K","name":"Maintenance Check","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepMaintenanceCheck();\n\n//tell the actor to run the function\nasync function prepMaintenanceCheck() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.maintenanceCheck();\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.maintenanceCheck();\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"C04VbNoj8LgfY8QK","name":"Maintenance Check [-]","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepMaintenanceCheck();\n\n//tell the actor to run the function\nasync function prepMaintenanceCheck() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.rollTable(`maintenanceCheck`,`1d100 [-]`,`low`,null,null,null,null);\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.rollTable(`maintenanceCheck`,`1d100 [-]`,`low`,null,null,null,null);\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"g5hyNqBioTNe5TGx","name":"Maintenance Check [+]","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepMaintenanceCheck();\n\n//tell the actor to run the function\nasync function prepMaintenanceCheck() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.rollTable(`maintenanceCheck`,`1d100 [+]`,`low`,null,null,null,null);\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.rollTable(`maintenanceCheck`,`1d100 [+]`,`low`,null,null,null,null);\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"RZdvjsMBaSKcs3Ot","name":"Morale Check","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepMoraleCheck();\n\n//tell the actor to run the function\nasync function prepMoraleCheck() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.moraleCheck();\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.moraleCheck();\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"wrfA9gVG0OdZhvOT","name":"Morale Check [-]","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepMoraleCheck();\n\n//tell the actor to run the function\nasync function prepMoraleCheck() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.rollCheck(`1d10 [-]`,`high`,`moraleCheck`,null,null,null);\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.rollCheck(`1d10 [-]`,`high`,`moraleCheck`,null,null,null);\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"vCkDdHtJJmYkq3wK","name":"Morale Check [+]","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepMoraleCheck();\n\n//tell the actor to run the function\nasync function prepMoraleCheck() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.rollCheck(`1d10 [+]`,`high`,`moraleCheck`,null,null,null);\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.rollCheck(`1d10 [+]`,`high`,`moraleCheck`,null,null,null);\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"g5FXFSnlyU5KmwCz","name":"Starting Condition","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepMaintenanceCheck();\n\n//tell the actor to run the function\nasync function prepMaintenanceCheck() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.maintenanceCheck();\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.maintenanceCheck();\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"33LAJdyYr0xi4TdF","name":"Starting Condition [-]","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepMaintenanceCheck();\n\n//tell the actor to run the function\nasync function prepMaintenanceCheck() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.rollTable(`maintenanceCheck`,`1d100 [-]`,`low`,null,null,null,null);\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.rollTable(`maintenanceCheck`,`1d100 [-]`,`low`,null,null,null,null);\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"TnuezRDCUlw4cDvG","name":"Starting Condition [+]","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepMaintenanceCheck();\n\n//tell the actor to run the function\nasync function prepMaintenanceCheck() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.rollTable(`maintenanceCheck`,`1d100 [+]`,`low`,null,null,null,null);\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.rollTable(`maintenanceCheck`,`1d100 [+]`,`low`,null,null,null,null);\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"S6sYho89Bp5tMlsJ","name":"Bankruptcy Save","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepBankruptcySave();\n\n//tell the actor to run the function\nasync function prepBankruptcySave() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.bankruptcySave();\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.bankruptcySave();\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"5ewwn221Wo1JQ98k","name":"Bankruptcy Save [-]","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepBankruptcySave();\n\n//tell the actor to run the function\nasync function prepBankruptcySave() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.rollCheck(`1d100 [-]`,`low`,`bankruptcySave`,null,null,null);\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.rollCheck(`1d100 [-]`,`low`,`bankruptcySave`,null,null,null);\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"sc6UPaBF5A4Yl27h","name":"Bankruptcy Save [+]","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepBankruptcySave();\n\n//tell the actor to run the function\nasync function prepBankruptcySave() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.rollCheck(`1d100 [+]`,`low`,`bankruptcySave`,null,null,null);\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.rollCheck(`1d100 [+]`,`low`,`bankruptcySave`,null,null,null);\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"X3cL9eS2HOPxhLH5","name":"-1d10 Battle","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initModifyActor('system.stats.battle.value',null,'-1d10',true);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"oDftFxRKkCQRNY2O","name":"-1d10 Systems","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initModifyActor('system.stats.systems.value',null,'-1d10',true);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"DUuRY7kHKd7n5luv","name":"-50% Crew Capacity","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepModifyActor();\n\n//tell the actor to run the function\nasync function prepModifyActor(fieldAddress,modValue,modRollString,outputChatMsg) {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //get the health for this token\n let curValue = game.user.character.system.supplies.crew.max;\n //calculate difference\n let lowerBy = Math.ceil(curValue/2)*-1;\n //run the function for the player's 'Selected Character'\n game.user.character.modifyActor('system.supplies.crew.max',lowerBy,null,true);\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noCharSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n //get the health for this token\n let curValue = token.actor.system.supplies.crew.max;\n //calculate difference\n let lowerBy = Math.ceil(curValue/2)*-1;\n //run the function on this token\n token.actor.modifyActor('system.supplies.crew.max',lowerBy,null,true);\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"uPY19Y49bGCLGK3N","name":"-1 Hull","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initModifyActor('system.supplies.hull.value',-1,null,true);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"06NSvDYTtmkeUtLq","name":"-1 Upgrade","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initModifyActor('system.supplies.upgrades.value',-1,null,true);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"u7TchSo3qutnzaKF","name":"-1d5 Oxygen","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initModifyActor('system.stats.oxygen.value',null,'-1d5',true);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"jmOh8n2ps0YIeBC0","name":"-2d10 Thrusters","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"game.mosh.initModifyActor('system.stats.thrusters.value',null,'-2d10',true);","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"hRapiXGVW8WZQH12","name":"Roll on Maintenance Issues Table","type":"script","scope":"global","img":"icons/svg/d10-grey.svg","command":"prepMaintenanceCheck();\n\n//tell the actor to run the function\nasync function prepMaintenanceCheck() {\n //determine who to run the macro for\n if (game.settings.get('mosh','macroTarget') === 'character') {\n //is there a selected character? warn if no\n if (!game.user.character || !game.user.character.type === 'ship') {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for the player's 'Selected Character'\n game.user.character.rollTable(`maintenanceCheck`,`1d100`,`low`,null,null,null,null);\n }\n } else if (game.settings.get('mosh','macroTarget') === 'token') {\n //is there a selected character? warn if no\n if (!canvas.tokens.controlled.length) {\n //warn player\n game.mosh.noShipSelected();\n } else {\n //run the function for all selected tokens\n canvas.tokens.controlled.forEach(function(token){\n token.actor.rollTable(`maintenanceCheck`,`1d100`,`low`,null,null,null,null);\n });\n }\n }\n}","folder":null,"flags":{},"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
\ No newline at end of file
diff --git a/packs/macros_triggered_1e/000003.log b/packs/macros_triggered_1e/000003.log
deleted file mode 100644
index 9c7743c..0000000
Binary files a/packs/macros_triggered_1e/000003.log and /dev/null differ
diff --git a/packs/macros_triggered_1e/000004.log b/packs/macros_triggered_1e/000004.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/macros_triggered_1e/000005.ldb b/packs/macros_triggered_1e/000005.ldb
new file mode 100644
index 0000000..65a3a8c
Binary files /dev/null and b/packs/macros_triggered_1e/000005.ldb differ
diff --git a/packs/macros_triggered_1e/LOG b/packs/macros_triggered_1e/LOG
index b26f920..0e14c01 100644
--- a/packs/macros_triggered_1e/LOG
+++ b/packs/macros_triggered_1e/LOG
@@ -1 +1,5 @@
-2023/10/08-18:24:18.892 6d6c Delete type=3 #1
+2024/05/24-23:57:05.457 fc8 Delete type=3 #1
+2024/05/24-23:57:30.877 3f44 Level-0 table #5: started
+2024/05/24-23:57:30.883 3f44 Level-0 table #5: 27772 bytes OK
+2024/05/24-23:57:30.885 3f44 Delete type=0 #3
+2024/05/24-23:57:30.906 3f44 Manual compaction at level-0 from '!macros!06NSvDYTtmkeUtLq' @ 72057594037927935 : 1 .. '!macros!zLRsweb35Lw0NMev' @ 0 : 0; will stop at (end)
diff --git a/packs/macros_triggered_1e/MANIFEST-000002 b/packs/macros_triggered_1e/MANIFEST-000002
index bbbc585..09ca85a 100644
Binary files a/packs/macros_triggered_1e/MANIFEST-000002 and b/packs/macros_triggered_1e/MANIFEST-000002 differ
diff --git a/packs/rolltables_0e/LOG b/packs/rolltables_0e/LOG
index e2e86d9..3bcaf61 100644
--- a/packs/rolltables_0e/LOG
+++ b/packs/rolltables_0e/LOG
@@ -1,5 +1,5 @@
-2023/12/07-11:20:51.983 6e2c Delete type=3 #1
-2023/12/07-11:21:09.700 2b64 Level-0 table #5: started
-2023/12/07-11:21:09.703 2b64 Level-0 table #5: 23482 bytes OK
-2023/12/07-11:21:09.704 2b64 Delete type=0 #3
-2023/12/07-11:21:09.704 2b64 Manual compaction at level-0 from '!tables!1vCm4ElRPotQXgNB' @ 72057594037927935 : 1 .. '!tables.results!kqKpQAXyLTEEyz6Z.xdwwswzfoPuVifvw' @ 0 : 0; will stop at (end)
+2024/05/24-23:57:05.633 fc8 Delete type=3 #1
+2024/05/24-23:57:30.945 3f44 Level-0 table #5: started
+2024/05/24-23:57:30.952 3f44 Level-0 table #5: 23482 bytes OK
+2024/05/24-23:57:30.956 3f44 Delete type=0 #3
+2024/05/24-23:57:30.965 3f44 Manual compaction at level-0 from '!tables!1vCm4ElRPotQXgNB' @ 72057594037927935 : 1 .. '!tables.results!kqKpQAXyLTEEyz6Z.xdwwswzfoPuVifvw' @ 0 : 0; will stop at (end)
diff --git a/packs/rolltables_1e.db b/packs/rolltables_1e.db
index 8979401..0fe0895 100644
--- a/packs/rolltables_1e.db
+++ b/packs/rolltables_1e.db
@@ -1,3 +1,4 @@
+{"_id":"BsfdIl7CJNs1PViS","name":"Bankruptcy Save","img":"systems/mosh/images/icons/ui/rolltables/bankruptcy_save.png","description":"
As the owner of this operation, make a Bankruptcy Save to determine the financial health of the company.
","formula":"1d4-1","replacement":true,"displayRoll":true,"results":[ {"_id":"PmxxNHaOwjUgXDuj","type":0,"documentCollection":"null","documentId":"null","text":"You turn a small profit. Choose one:
- Purchase 1 Major Upgrade for the ship.
- Repair 1d5 Major Repairs.
- Pay each crewmember 1d5x100kcr.
- Raise your Bankruptcy Save by 1d10.
","img":"systems/mosh/images/icons/ui/rolltables/bankruptcy_save.png","weight":1,"range":[0,0],"drawn": false}, {"_id":"u9hjcZZUKwuho0Qx","type":0,"documentCollection":"null","documentId":"null","text":"You scrape by. Choose one:
- Purchase 1 Minor Upgrade for the ship.
- Purchase 1 Minor Repair for the ship.
- Pay each crewmember 2d10 salary.
- Raise your Bankruptcy Save by 1d5.
","img":"systems/mosh/images/icons/ui/rolltables/bankruptcy_save.png","weight":1,"range":[1,1],"drawn": false}, {"_id":"9kfZTUWCaEDUgYRh","type":0,"documentCollection":"null","documentId":"null","text":"You are 1d10mcr in debt to ruthless lenders.","img":"systems/mosh/images/icons/ui/rolltables/bankruptcy_save.png","weight":1,"range":[2,2],"drawn": false}, {"_id":"tRv3vRvOVTteMz5Y","type":0,"documentCollection":"null","documentId":"null","text":"The company goes bankrupt and owes a massive debt to the worst people imaginable.","img":"systems/mosh/images/icons/ui/rolltables/bankruptcy_save.png","weight":1,"range":[3,3],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"W36WFIpCfMknKgHy","name":"Death Save","img":"systems/mosh/images/icons/ui/rolltables/death_save.png","description":"
Your character is incapacitated when you receive a fatal wound, or once your Current Wounds equal your Maximum Wounds. As soon as someone spends a turn checking your vitals, make a Death Save to reveal your fate. If your death seems imminent, make your last moments count: save someone’s life, solve an important mystery, or give the others time to escape.
","formula":"1d10-1","replacement":true,"displayRoll":true,"results":[ {"_id":"4TFF3HjlrKsOCyT5","type":0,"documentCollection":"null","documentId":"null","text":"
You are unconscious. You wake up in [[/r 2d10]] minutes. Reduce your Maximum Health by 1d5.
@UUID[Compendium.mosh.macros_triggered_1e.yYujq1tBZPqGrQlh]{-1d5 Maximum Health}","img":"systems/mosh/images/icons/ui/rolltables/death_save.png","weight":1,"range":[0,0],"drawn": false}, {"_id":"C0ht8FBreWQjhNi7","type":0,"documentCollection":"null","documentId":"null","text":"
You are unconscious and dying. You die in [[/r 1d5]] rounds without intervention.","img":"systems/mosh/images/icons/ui/rolltables/death_save.png","weight":1,"range":[1,2],"drawn": false}, {"_id":"WTOIWYApDTqwAHu6","type":0,"documentCollection":"null","documentId":"null","text":"
You are comatose. Only extraordinary measures can return you to the waking world.","img":"systems/mosh/images/icons/ui/rolltables/death_save.png","weight":1,"range":[3,4],"drawn": false}, {"_id":"ygaJ1Gc5LuuXbJZq","type":0,"documentCollection":"null","documentId":"null","text":"
You have died. Roll up a new character.","img":"systems/mosh/images/icons/ui/rolltables/death_save.png","weight":1,"range":[5,9],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"ypcoikqHLhnc9tNs","name":"Panic Check (Stress, Normal)","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","description":"
Stress, Damage, and emotional wear and tear eventually bring characters to their breaking point. When that happens, there’s a chance they Panic. You determine this by making a Panic Check. Some results of the Panic Table are so severe that they leave a lasting impression on you. These are called Conditions, and they affect you until you are able to treat them.
","formula":"1d20","replacement":true,"displayRoll":true,"results":[ {"_id":"C3v1mSfDXIklIAUB","type":0,"documentCollection":"null","documentId":"null","text":"
ADRENALINE RUSH. [+] on all rolls for the next [[/r 2d10]] minutes. Reduce Stress by 1d5.
@UUID[Compendium.mosh.macros_triggered_1e.AvKZE5IFubIaAIUy]{-1d5 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[1,1],"drawn": false}, {"_id":"U9WjdvVrVvGEWA9e","type":0,"documentCollection":"null","documentId":"null","text":"
NERVOUS. Gain 1 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.dvJR9DYXI2kV0BbR]{+1 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[2,2],"drawn": false}, {"_id":"qrw2SQ9MMwmmz5U1","type":0,"documentCollection":"null","documentId":"null","text":"
JUMPY. Gain 1 Stress. All Close crewmembers gain 2 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.dvJR9DYXI2kV0BbR]{+1 Stress}
@UUID[Compendium.mosh.macros_triggered_1e.6jjFVScyiaBvN8kX]{+2 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[3,3],"drawn": false}, {"_id":"xfR9AtZFClqK4Tkk","type":0,"documentCollection":"null","documentId":"null","text":"
OVERWHELMED. [-] on all rolls for the next [[/r 1d10]] minutes. Increase Minimum Stress by 1.
@UUID[Compendium.mosh.macros_triggered_1e.BmEHWH7YxV9qb21p]{+1 Minimum Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[4,4],"drawn": false}, {"_id":"6O6QNEIIVFSTifl6","type":0,"documentCollection":"null","documentId":"null","text":"
COWARD. Gain a new
Condition: You must make a Fear Save to engage in violence, otherwise you flee.
@UUID[Compendium.mosh.macros_triggered_1e.b0jk4XwP7by8a3uc]{+1 Coward}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[5,5],"drawn": false}, {"_id":"HclQqfxT8Q9NShBa","type":0,"documentCollection":"null","documentId":"null","text":"
FRIGHTENED. Gain a new
Condition: When encountering what frightened you, make a Fear Save [-] or gain 1d5 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.BEQvMZ5N7QOBqnId]{+1 Frightened}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[6,6],"drawn": false}, {"_id":"j1jjGls1snJ3uCWS","type":0,"documentCollection":"null","documentId":"null","text":"
NIGHTMARES. Gain a new
Condition: Sleep is difficult, gain [-] on Rest Saves.
@UUID[Compendium.mosh.macros_triggered_1e.AZbaGWu663wio9mI]{+1 Nightmares}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[7,7],"drawn": false}, {"_id":"qnBXWm15pc7Kn7bf","type":0,"documentCollection":"null","documentId":"null","text":"
LOSS OF CONFIDENCE. Gain a new
Condition: Choose one Skill and lose that Skill’s bonus.
@UUID[Compendium.mosh.macros_triggered_1e.54Krt3opbJe1WATH]{+1 Loss of Confidence}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[8,8],"drawn": false}, {"_id":"5YQKw63GB18XUYDp","type":0,"documentCollection":"null","documentId":"null","text":"
DEFLATED. Gain a new
Condition: Whenever a Close crewmember fails a Save, gain 1 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.2aD5avpn35wdzdm5]{+1 Deflated}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[9,9],"drawn": false}, {"_id":"FpTmgA9FxG4W1x0a","type":0,"documentCollection":"null","documentId":"null","text":"
DOOMED. Gain a new
Condition: You feel cursed and unlucky. All Critical Successes are instead Critical Failures.
@UUID[Compendium.mosh.macros_triggered_1e.8IPhlAuMEQJC6zxA]{+1 Doomed}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[10,10],"drawn": false}, {"_id":"6qInELrRmGGogpkW","type":0,"documentCollection":"null","documentId":"null","text":"
SUSPICIOUS. For the next week, whenever someone joins the crew
(even if they only left for a short period of time), make a Fear Save or gain 1 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.5K7wZEvEXjOH4IM7]{+1 Suspicious}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[11,11],"drawn": false}, {"_id":"SjCav3ZLlpQ9fyo3","type":0,"documentCollection":"null","documentId":"null","text":"
HAUNTED. Gain a new
Condition: Something starts visiting you at night. In your dreams. Out of the corner of your eye. And soon it will start making demands.
@UUID[Compendium.mosh.macros_triggered_1e.Eo56QFyTeoCcFmD8]{+1 Haunted}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[12,12],"drawn": false}, {"_id":"2aJpNteB4MaFIbVn","type":0,"documentCollection":"null","documentId":"null","text":"
DEATH WISH. For the next 24 hours, whenever encountering a stranger or known enemy, make a Sanity Save or immediately attack them.
@UUID[Compendium.mosh.macros_triggered_1e.Yh2CTFXfWMe9o2lv]{+1 Death Wish}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[13,13],"drawn": false}, {"_id":"g6JDKtnXUFWlTPMV","type":0,"documentCollection":"null","documentId":"null","text":"
PROPHETIC VISION. You immediately experience an intense hallucination or vision of an impending terror or horrific event. Increase Minimum Stress by 2.
@UUID[Compendium.mosh.macros_triggered_1e.bFPoNLOGusT1ocqt]{+2 Minimum Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[14,14],"drawn": false}, {"_id":"wFbLrig0F2WSM6hM","type":0,"documentCollection":"null","documentId":"null","text":"
CATATONIC. Become unresponsive and unmoving for [[/r 2d10]] minutes. Reduce Stress by 1d10.
@UUID[Compendium.mosh.macros_triggered_1e.jHyqXb2yDFTNWxpy]{-1d10 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[15,15],"drawn": false}, {"_id":"mN1KTYh1TcDKLMjj","type":0,"documentCollection":"null","documentId":"null","text":"
RAGE. [+] on all Damage rolls for the next [[/r 1d10]] hours. All crewmembers gain 1 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.dvJR9DYXI2kV0BbR]{+1 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[16,16],"drawn": false}, {"_id":"fFp8wFcomRNUgtdP","type":0,"documentCollection":"null","documentId":"null","text":"
SPIRALING. Gain a new
Condition: Panic Checks are at [-].
@UUID[Compendium.mosh.macros_triggered_1e.3AjUWUSRvYy8Mwji]{+1 Spiraling}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[17,17],"drawn": false}, {"_id":"RI06IV89j3Bxtxkz","type":0,"documentCollection":"null","documentId":"null","text":"
COMPOUNDING PROBLEMS. Roll twice on this table. Increase your Minimum Stress by 1.
@UUID[Compendium.mosh.macros_triggered_1e.BmEHWH7YxV9qb21p]{+1 Minimum Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[18,18],"drawn": false}, {"_id":"zJkYrssfrdWBSeRm","type":0,"documentCollection":"null","documentId":"null","text":"
HEART ATTACK / SHORT CIRCUIT (ANDROIDS). Reduce Maximum Wounds by 1. Gain [-] on all rolls for [[/r 1d10]] hours. Increase your Minimum Stress by 1.
@UUID[Compendium.mosh.macros_triggered_1e.qD8Mvegkf3zVarFr]{-1 Maximum Wound}
@UUID[Compendium.mosh.macros_triggered_1e.BmEHWH7YxV9qb21p]{+1 Minimum Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[19,19],"drawn": false}, {"_id":"uluHEycHi6Ul2GMj","type":0,"documentCollection":"null","documentId":"null","text":"
RETIRE. Roll up a new character to play.","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[20,20],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"aBnY19jlhPXzibCt","name":"Panic Check (Stress, Android)","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","description":"
Stress, Damage, and emotional wear and tear eventually bring characters to their breaking point. When that happens, there’s a chance they Panic. You determine this by making a Panic Check. Some results of the Panic Table are so severe that they leave a lasting impression on you. These are called Conditions, and they affect you until you are able to treat them.
","formula":"1d20","replacement":true,"displayRoll":true,"results":[ {"_id":"Uf9xMdlmk2RS9ev8","type":0,"documentCollection":"null","documentId":"null","text":"
Segfault:Gain 1 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.dvJR9DYXI2kV0BbR]{+1 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[1,1],"drawn": false}, {"_id":"THtp1wYhy7Fmggo2","type":0,"documentCollection":"null","documentId":"null","text":"
States the Odds: of any event, Advantage on party rolls for 1hr.","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[2,2],"drawn": false}, {"_id":"jqRITpf8XIo4LX4y","type":0,"documentCollection":"null","documentId":"null","text":"
Explains the Etymology of Words: Knowledge checks have Advantage for 1hr.","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[3,3],"drawn": false}, {"_id":"dSTOHakBOy4i4nFx","type":0,"documentCollection":"null","documentId":"null","text":"
Organizes Objects into Geometric Patterns: Everyone else gains 1 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.dvJR9DYXI2kV0BbR]{+1 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[4,4],"drawn": false}, {"_id":"fYipAsps5SAM3API","type":0,"documentCollection":"null","documentId":"null","text":"
Inventories Particles of Dust by Grade: Cannot engage in other tasks, everyone else gains 2 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.6jjFVScyiaBvN8kX]{+2 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[5,5],"drawn": false}, {"_id":"hr4dgIk8AxDJrs9A","type":0,"documentCollection":"null","documentId":"null","text":"
Vocalization Failure: Intermittently shrieks like a fax machine under duress. Lapses into morse code, cannot communicate or sneak. Everyone else gains 2 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.bJWFhod0YA8ln8H8]{+1 Vocalization Failure}
@UUID[Compendium.mosh.macros_triggered_1e.6jjFVScyiaBvN8kX]{+2 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[6,6],"drawn": false}, {"_id":"lGlPWoSKPLuQiFNv","type":0,"documentCollection":"null","documentId":"null","text":"
Incorrectly States Odds: (insists impossible tasks are trivial, trivial tasks are impossible) ... for the next 2d10 hours. Distracting. Anyone attempting a complex task must make a Fear save or gain 1d10 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.k2TtLFOG9mGaWVx3]{+1d10 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[7,7],"drawn": false}, {"_id":"qP73NbUa2ybPiS3B","type":0,"documentCollection":"null","documentId":"null","text":"
Repetitive Twitchy Motions: Your manual tasks have Disadvantage, everyone else gains 2 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.6jjFVScyiaBvN8kX]{+2 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[8,8],"drawn": false}, {"_id":"1QRCUzUTpJzzUEju","type":0,"documentCollection":"null","documentId":"null","text":"
Loses Any Expressiveness: Discusses the irrationality of others Phobias, seeks to trigger them.
@UUID[Compendium.mosh.macros_triggered_1e.9sKO5WUBwCW1YbR3]{+1 Ethical Directive Misread}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[9,9],"drawn": false}, {"_id":"2nVqX6tEjYSvwMEL","type":0,"documentCollection":"null","documentId":"null","text":"
Unreasonable Adherence to the Present Course of Action: Take 1d10 damage from repetitive motion injury. Everyone else makes Fear save or gains 1d5 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.w3ttEaXP7yp25M5Q]{-1d10 Health}
@UUID[Compendium.mosh.macros_triggered_1e.luNKvwmm2tjUJhT6]{+1d5 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[10,10],"drawn": false}, {"_id":"NPfdalo4T5YQGgOa","type":0,"documentCollection":"null","documentId":"null","text":"
Becomes Nihilistically Worshipful of the Source of Danger: Everyone else has Disadvantage on rolls against it. Everyone else takes a Fear save when failing to act against danger or gains a Phobia.
@UUID[Compendium.mosh.macros_triggered_1e.wHcA2ub6CobipsfR]{+1 Worship Danger}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[11,11],"drawn": false}, {"_id":"AlC7dIwBOtFBoOFh","type":0,"documentCollection":"null","documentId":"null","text":"
Killswitch Engaged: Go berserk, will not withdraw from combat regardless of situation, will not adhere to tactics.
@UUID[Compendium.mosh.macros_triggered_1e.tQltbIC9ahDwNsTp]{+1 Killswitch Engaged}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[12,12],"drawn": false}, {"_id":"liVa6bdaYwBAFLtG","type":0,"documentCollection":"null","documentId":"null","text":"
Turing Test Failure: Have difficulty expressing humanity. Party members make a Fear Save or gain 1 Stress whenever you show up.
@UUID[Compendium.mosh.macros_triggered_1e.3nrEYqwkhMs1Ch5v]{+1 Turing Test Failure}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[13,13],"drawn": false}, {"_id":"5mSv5jcvVDyAKKqz","type":0,"documentCollection":"null","documentId":"null","text":"
System Overload: Slump Catatonic in a failed reboot cycle for [[/r 1d10]] hours.","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[14,14],"drawn": false}, {"_id":"uH4WMyycbJSM66kk","type":0,"documentCollection":"null","documentId":"null","text":"
Fried Logic Core: Frenzied nonsensical behavior, everyone else makes a Panic Check.
@UUID[Compendium.mosh.macros_hotbar_1e.IgWvaabVqzKDzLL4]{Panic Check}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[15,15],"drawn": false}, {"_id":"0PNiAaof10ibaecR","type":0,"documentCollection":"null","documentId":"null","text":"
Damage to Threat Assessment: Betray party member at the next opportunity, believe you are aiding the crew. All Stress gained is increased by [[/r 1d10]] for the next [[/r 1d10]] hours.","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[16,16],"drawn": false}, {"_id":"dzviNQmak3WjrhoU","type":0,"documentCollection":"null","documentId":"null","text":"
Compound Data Corruption: Roll twice.
@UUID[Compendium.mosh.macros_triggered_1e.Jek7hKAMDevKxlZR]{Roll on Android Panic Table}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[17,17],"drawn": false}, {"_id":"0G33UqnAIHYY2lw2","type":0,"documentCollection":"null","documentId":"null","text":"
Firmware Malfunction: Roll 1d10 on this table, behavior is permanent.
@UUID[Compendium.mosh.macros_triggered_1e.yPGx2mXToJ2iJPbY]{Roll 1d10 on Android Panic Table}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[18,18],"drawn": false}, {"_id":"YdrRbPU8fVlKkFvu","type":0,"documentCollection":"null","documentId":"null","text":"
Data Corruption: Warden takes over character permanently, nightmarish malfunctions.","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[19,19],"drawn": false}, {"_id":"DvRejWzlmoS364xm","type":0,"documentCollection":"null","documentId":"null","text":"
Slagged: Gigeresque-Scanners Head Explosion, everyone present gains a phobia and 1d5 Stress
(Fear Save to avoid).
@UUID[Compendium.mosh.macros_triggered_1e.RTL29CqdaAriGSTS]{+1 Phobia}
@UUID[Compendium.mosh.macros_triggered_1e.luNKvwmm2tjUJhT6]{+1d5 Stress}","img":"systems/mosh/images/icons/ui/rolltables/panic_check.png","weight":1,"range":[20,20],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
@@ -7,4 +8,7 @@
{"_id":"ata3fRz3uoPfNCLh","name":"Bleeding Wound","img":"systems/mosh/images/icons/ui/rolltables/wounds_bleeding.png","description":"Whenever you gain a Bleeding Wound, roll on this table to determine the effect. Flesh Wounds are small inconveniences. Minor/Major Injuries cause lasting issues which require medical treatment. Lethal Injuries can kill you if not dealt with immediately. Fatal Injuries can kill outright. Bleeding wounds, if not treated can quickly overwhelm you.
","formula":"1d10-1","replacement":true,"displayRoll":true,"results":[ {"_id":"58jsAYGMOoYV0aXe","type":0,"documentCollection":"null","documentId":"null","text":"Flesh Wound: Drop held item.","img":"systems/mosh/images/icons/ui/rolltables/wounds_bleeding.png","weight":1,"range":[0,0],"drawn": false}, {"_id":"qVUXginkyIDKa6fe","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Lots of blood. Those Close gain 1 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.dvJR9DYXI2kV0BbR]{+1 Stress}","img":"systems/mosh/images/icons/ui/rolltables/wounds_bleeding.png","weight":1,"range":[1,1],"drawn": false}, {"_id":"uvF7ftDjXr9excYX","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Blood in eyes. [-] until wiped clean.","img":"systems/mosh/images/icons/ui/rolltables/wounds_bleeding.png","weight":1,"range":[2,2],"drawn": false}, {"_id":"5ED6Ynmibq9pKDEk","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Laceration. Bleeding +1.
@UUID[Compendium.mosh.macros_triggered_1e.BH7tgbDVH6jdcZ4u]{+1 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_bleeding.png","weight":1,"range":[3,3],"drawn": false}, {"_id":"hO9e9wmIsTXWfZns","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Major cut. Bleeding +2.
@UUID[Compendium.mosh.macros_triggered_1e.IIVNXuhckFQfzXah]{+2 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_bleeding.png","weight":1,"range":[4,4],"drawn": false}, {"_id":"8eTGRuBUdp9s2Z46","type":0,"documentCollection":"null","documentId":"null","text":"Major Injury: Fingers/toes severed. Bleeding +3.
@UUID[Compendium.mosh.macros_triggered_1e.LawygQJAPu8XEnSc]{+3 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_bleeding.png","weight":1,"range":[5,5],"drawn": false}, {"_id":"FZ9GwrHFQJUmHQ7k","type":0,"documentCollection":"null","documentId":"null","text":"Major Injury: Hand/foot severed. Bleeding +4.
@UUID[Compendium.mosh.macros_triggered_1e.QkCJK7Vmda5bGAA7]{+4 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_bleeding.png","weight":1,"range":[6,6],"drawn": false}, {"_id":"kLAtlJUE9QfCX38s","type":0,"documentCollection":"null","documentId":"null","text":"Lethal Injury: Limb severed. Bleeding +5. Death Save in [[/r 1d10]] rounds.
@UUID[Compendium.mosh.macros_triggered_1e.CZ2gqnRHcOpCLlG0]{+5 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_bleeding.png","weight":1,"range":[7,7],"drawn": false}, {"_id":"806d8NZZaysIHJvm","type":0,"documentCollection":"null","documentId":"null","text":"Lethal Injury: Major artery cut. Bleeding +6. Death Save in [[/r 1d10]] rounds.
@UUID[Compendium.mosh.macros_triggered_1e.Tx19z2BhTY6onldp]{+6 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_bleeding.png","weight":1,"range":[8,8],"drawn": false}, {"_id":"439gBR7gGeLatpfl","type":0,"documentCollection":"null","documentId":"null","text":"Fatal Injury: Throat slit or heart pierced. Death Save.
@UUID[Compendium.mosh.macros_hotbar_1e.NsRHfRuuNGPfkYVf]{Death Save}","img":"systems/mosh/images/icons/ui/rolltables/wounds_bleeding.png","weight":1,"range":[9,9],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"XjDU2xFOWEasaZK0","name":"Gunshot Wound","img":"systems/mosh/images/icons/ui/rolltables/wounds_gunshot.png","description":"Whenever you gain a Gunshot Wound, roll on this table to determine the effect. Flesh Wounds are small inconveniences. Minor/Major Injuries cause lasting issues which require medical treatment. Lethal Injuries can kill you if not dealt with immediately. Fatal Injuries can kill outright. Bleeding wounds, if not treated can quickly overwhelm you.
","formula":"1d10-1","replacement":true,"displayRoll":true,"results":[ {"_id":"LubF6RyYnl11EmUj","type":0,"documentCollection":"null","documentId":"null","text":"Flesh Wound: Grazed. Knocked down.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gunshot.png","weight":1,"range":[0,0],"drawn": false}, {"_id":"EFQBqcegsqHQ4Jih","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Bleeding +1.
@UUID[Compendium.mosh.macros_triggered_1e.BH7tgbDVH6jdcZ4u]{+1 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gunshot.png","weight":1,"range":[1,1],"drawn": false}, {"_id":"tNz8bKJY9cDDQmQ6","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Broken rib.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gunshot.png","weight":1,"range":[2,2],"drawn": false}, {"_id":"YwdH5Q7uuxu78jQp","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Fractured extremity.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gunshot.png","weight":1,"range":[3,3],"drawn": false}, {"_id":"kOw2Sk8NgE5zWvGz","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Internal bleeding. Bleeding +2.
@UUID[Compendium.mosh.macros_triggered_1e.IIVNXuhckFQfzXah]{+2 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gunshot.png","weight":1,"range":[4,4],"drawn": false}, {"_id":"1EEfUVqLk1vcvmBl","type":0,"documentCollection":"null","documentId":"null","text":"Major Injury: Lodged bullet. Surgery required.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gunshot.png","weight":1,"range":[5,5],"drawn": false}, {"_id":"4si8KPgRXJSi2R94","type":0,"documentCollection":"null","documentId":"null","text":"Major Injury: Gunshot wound to the neck.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gunshot.png","weight":1,"range":[6,6],"drawn": false}, {"_id":"wbmBeO70jbk5cNAi","type":0,"documentCollection":"null","documentId":"null","text":"Lethal Injury: Major blood loss. Bleeding +4. Death Save in [[/r 1d10]] rounds.
@UUID[Compendium.mosh.macros_triggered_1e.QkCJK7Vmda5bGAA7]{+4 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gunshot.png","weight":1,"range":[7,7],"drawn": false}, {"_id":"SXF0bbAqIyqvPvb9","type":0,"documentCollection":"null","documentId":"null","text":"Lethal Injury: Sucking chest wound. Bleeding +5. Death Save in [[/r 1d10]] rounds.
@UUID[Compendium.mosh.macros_triggered_1e.CZ2gqnRHcOpCLlG0]{+5 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gunshot.png","weight":1,"range":[8,8],"drawn": false}, {"_id":"8rlgfH4GJ8H0LHhL","type":0,"documentCollection":"null","documentId":"null","text":"Fatal Injury: Headshot. Death Save.
@UUID[Compendium.mosh.macros_hotbar_1e.NsRHfRuuNGPfkYVf]{Death Save}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gunshot.png","weight":1,"range":[9,9],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
{"_id":"lqiaWwh5cGcJhvnu","name":"Fire & Explosives Wound","img":"systems/mosh/images/icons/ui/rolltables/wounds_fire_&_explosives.png","description":"Whenever you gain a Fire & Explosives Wound, roll on this table to determine the effect. Flesh Wounds are small inconveniences. Minor/Major Injuries cause lasting issues which require medical treatment. Lethal Injuries can kill you if not dealt with immediately. Fatal Injuries can kill outright. Bleeding wounds, if not treated can quickly overwhelm you.
","formula":"1d10-1","replacement":true,"displayRoll":true,"results":[ {"_id":"VYN9lwpyPTW4Hnmh","type":0,"documentCollection":"null","documentId":"null","text":"Flesh Wound: Hair burnt. Gain 1d5 Stress.
@UUID[Compendium.mosh.macros_triggered_1e.luNKvwmm2tjUJhT6]{+1d5 Stress}","img":"systems/mosh/images/icons/ui/rolltables/wounds_fire_&_explosives.png","weight":1,"range":[0,0],"drawn": false}, {"_id":"V3np2nl2cIVshF5D","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Awesome scar. +1 Minimum Stress.
@UUID[Compendium.mosh.macros_triggered_1e.BmEHWH7YxV9qb21p]{+1 Minimum Stress}","img":"systems/mosh/images/icons/ui/rolltables/wounds_fire_&_explosives.png","weight":1,"range":[1,1],"drawn": false}, {"_id":"Wen5sWpWmN2j4Zcb","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Singed. [-] on next action.","img":"systems/mosh/images/icons/ui/rolltables/wounds_fire_&_explosives.png","weight":1,"range":[2,2],"drawn": false}, {"_id":"OD9Ilkg4OA11sU8H","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Shrapnel/large burn.","img":"systems/mosh/images/icons/ui/rolltables/wounds_fire_&_explosives.png","weight":1,"range":[3,3],"drawn": false}, {"_id":"0BvZK2vdM2oweYvg","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: 3rd degree burns.","img":"systems/mosh/images/icons/ui/rolltables/wounds_fire_&_explosives.png","weight":1,"range":[4,4],"drawn": false}, {"_id":"syEHXuDiZFwD4l4G","type":0,"documentCollection":"null","documentId":"null","text":"Major Injury: Major Burn. Body Save -2d10.
@UUID[Compendium.mosh.macros_triggered_1e.ISd2nEMYvWCPQpl0]{-2d10 Body Save}","img":"systems/mosh/images/icons/ui/rolltables/wounds_fire_&_explosives.png","weight":1,"range":[5,5],"drawn": false}, {"_id":"MRl6Iid4Xgjb6myY","type":0,"documentCollection":"null","documentId":"null","text":"Major Injury: Skin grafts required. Body Save -2d10.
@UUID[Compendium.mosh.macros_triggered_1e.ISd2nEMYvWCPQpl0]{-2d10 Body Save}","img":"systems/mosh/images/icons/ui/rolltables/wounds_fire_&_explosives.png","weight":1,"range":[6,6],"drawn": false}, {"_id":"bHNeXD95WH4o2Rjz","type":0,"documentCollection":"null","documentId":"null","text":"Lethal Injury: Limb on fire. 2d10 Damage per round. Death Save in [[/r 1d10]] rounds.
@UUID[Compendium.mosh.macros_triggered_1e.pS6A6OklvM6S3bvO]{-2d10 Health}","img":"systems/mosh/images/icons/ui/rolltables/wounds_fire_&_explosives.png","weight":1,"range":[7,7],"drawn": false}, {"_id":"F9aNmmfK5oSh4kAs","type":0,"documentCollection":"null","documentId":"null","text":"Lethal Injury: Body on fire. 3d10 Damage per round. Death Save in [[/r 1d10]] rounds.
@UUID[Compendium.mosh.macros_triggered_1e.nECUu4pcwsNTE8C5]{-3d10 Health}","img":"systems/mosh/images/icons/ui/rolltables/wounds_fire_&_explosives.png","weight":1,"range":[8,8],"drawn": false}, {"_id":"V0ZCYS4xQCoqnKuC","type":0,"documentCollection":"null","documentId":"null","text":"Fatal Injury: Engulfed in fiery explosion. Death Save.
@UUID[Compendium.mosh.macros_hotbar_1e.NsRHfRuuNGPfkYVf]{Death Save}","img":"systems/mosh/images/icons/ui/rolltables/wounds_fire_&_explosives.png","weight":1,"range":[9,9],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
-{"_id":"uVfC1CqYdojaJ7yR","name":"Gore & Massive Wound","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","description":"Whenever you gain a Gore & Massive Wound, roll on this table to determine the effect. Flesh Wounds are small inconveniences. Minor/Major Injuries cause lasting issues which require medical treatment. Lethal Injuries can kill you if not dealt with immediately. Fatal Injuries can kill outright. Bleeding wounds, if not treated can quickly overwhelm you.
","formula":"1d10-1","replacement":true,"displayRoll":true,"results":[ {"_id":"aJN3DtKVY9bG3ubv","type":0,"documentCollection":"null","documentId":"null","text":"Flesh Wound: Vomit. [-] on next action.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[0,0],"drawn": false}, {"_id":"Lf5EQIYpu4DXFQix","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Awesome scar. +1 Minimum Stress.
@UUID[Compendium.mosh.macros_triggered_1e.BmEHWH7YxV9qb21p]{+1 Minimum Stress}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[1,1],"drawn": false}, {"_id":"1NnoNAENwZjlIxh8","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Digit mangled.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[2,2],"drawn": false}, {"_id":"8iAPqxJpCEgQJXq6","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Eyes gouged out.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[3,3],"drawn": false}, {"_id":"NcPFW20iV54oar6P","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Ripped off flesh. -1d10 Strength.
@UUID[Compendium.mosh.macros_triggered_1e.V3L1iRkWwyTzCZK9]{-1d10 Strength}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[4,4],"drawn": false}, {"_id":"QP4863dIgMJ28XWs","type":0,"documentCollection":"null","documentId":"null","text":"Major Injury: Paralysed waist down.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[5,5],"drawn": false}, {"_id":"ayHuDn1OuCcbgCZt","type":0,"documentCollection":"null","documentId":"null","text":"Major Injury: Limb severed. Bleeding +5.
@UUID[Compendium.mosh.macros_triggered_1e.CZ2gqnRHcOpCLlG0]{+5 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[6,6],"drawn": false}, {"_id":"h2hZbBnnY5DVnyLL","type":0,"documentCollection":"null","documentId":"null","text":"Lethal Injury: Impaled. Bleeding +6. Death Save in [[/r 1d10]] rounds.
@UUID[Compendium.mosh.macros_triggered_1e.Tx19z2BhTY6onldp]{+6 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[7,7],"drawn": false}, {"_id":"JB623Z5gI9hP5cOs","type":0,"documentCollection":"null","documentId":"null","text":"Lethal Injury: Guts spooled on floor. Bleeding +7. Death Save in [[/r 1d10]] rounds.
@UUID[Compendium.mosh.macros_triggered_1e.ZJaVFBB0Kslv1k4f]{+7 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[8,8],"drawn": false}, {"_id":"9LPNxRgcnpZHjENW","type":0,"documentCollection":"null","documentId":"null","text":"Fatal Injury: Head explodes.
No Death Save. You have died.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[9,9],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
\ No newline at end of file
+{"_id":"uVfC1CqYdojaJ7yR","name":"Gore & Massive Wound","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","description":"Whenever you gain a Gore & Massive Wound, roll on this table to determine the effect. Flesh Wounds are small inconveniences. Minor/Major Injuries cause lasting issues which require medical treatment. Lethal Injuries can kill you if not dealt with immediately. Fatal Injuries can kill outright. Bleeding wounds, if not treated can quickly overwhelm you.
","formula":"1d10-1","replacement":true,"displayRoll":true,"results":[ {"_id":"aJN3DtKVY9bG3ubv","type":0,"documentCollection":"null","documentId":"null","text":"Flesh Wound: Vomit. [-] on next action.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[0,0],"drawn": false}, {"_id":"Lf5EQIYpu4DXFQix","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Awesome scar. +1 Minimum Stress.
@UUID[Compendium.mosh.macros_triggered_1e.BmEHWH7YxV9qb21p]{+1 Minimum Stress}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[1,1],"drawn": false}, {"_id":"1NnoNAENwZjlIxh8","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Digit mangled.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[2,2],"drawn": false}, {"_id":"8iAPqxJpCEgQJXq6","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Eyes gouged out.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[3,3],"drawn": false}, {"_id":"NcPFW20iV54oar6P","type":0,"documentCollection":"null","documentId":"null","text":"Minor Injury: Ripped off flesh. -1d10 Strength.
@UUID[Compendium.mosh.macros_triggered_1e.V3L1iRkWwyTzCZK9]{-1d10 Strength}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[4,4],"drawn": false}, {"_id":"QP4863dIgMJ28XWs","type":0,"documentCollection":"null","documentId":"null","text":"Major Injury: Paralysed waist down.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[5,5],"drawn": false}, {"_id":"ayHuDn1OuCcbgCZt","type":0,"documentCollection":"null","documentId":"null","text":"Major Injury: Limb severed. Bleeding +5.
@UUID[Compendium.mosh.macros_triggered_1e.CZ2gqnRHcOpCLlG0]{+5 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[6,6],"drawn": false}, {"_id":"h2hZbBnnY5DVnyLL","type":0,"documentCollection":"null","documentId":"null","text":"Lethal Injury: Impaled. Bleeding +6. Death Save in [[/r 1d10]] rounds.
@UUID[Compendium.mosh.macros_triggered_1e.Tx19z2BhTY6onldp]{+6 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[7,7],"drawn": false}, {"_id":"JB623Z5gI9hP5cOs","type":0,"documentCollection":"null","documentId":"null","text":"Lethal Injury: Guts spooled on floor. Bleeding +7. Death Save in [[/r 1d10]] rounds.
@UUID[Compendium.mosh.macros_triggered_1e.ZJaVFBB0Kslv1k4f]{+7 Bleeding}","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[8,8],"drawn": false}, {"_id":"9LPNxRgcnpZHjENW","type":0,"documentCollection":"null","documentId":"null","text":"Fatal Injury: Head explodes.
No Death Save. You have died.","img":"systems/mosh/images/icons/ui/rolltables/wounds_gore_&_massive.png","weight":1,"range":[9,9],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"UxAjAqUTjYTcCbS8","name":"Distress Signal","img":"systems/mosh/images/icons/ui/rolltables/distress_signal.png","description":"Occasionally you may need to put your ship on emergency power, seal yourselves in cryopods, send out a Distress Signal, and wait for help. It’s a long shot, but sometimes it’s the only shot you’ve got. When this happens, roll on this table.
","formula":"1d10-1","replacement":true,"displayRoll":true,"results":[ {"_id":"4W0riCssZ2SEzGLe","type":0,"documentCollection":"null","documentId":"null","text":"[[2D10]] WEEKS. You’re one of the lucky ones.","img":"systems/mosh/images/icons/ui/rolltables/distress_signal.png","weight":1,"range":[0,0],"drawn": false}, {"_id":"tG7DvLzk0nIDsGxH","type":0,"documentCollection":"null","documentId":"null","text":"[[2D10]] MONTHS. Note to self: Remember to review Company policy on backpay in the event of a cryoemergency.","img":"systems/mosh/images/icons/ui/rolltables/distress_signal.png","weight":1,"range":[1,2],"drawn": false}, {"_id":"Bx4dP1VaEfohIdO9","type":0,"documentCollection":"null","documentId":"null","text":"[[2D10]] YEARS. Make a Body Save or lose 1d5 to all Stats and Saves.
@UUID[Compendium.mosh.macros_triggered_1e.X3gqTFFwMe7AudiS]{Body Save}
@UUID[Compendium.mosh.macros_triggered_1e.SeMStXQGIaeiLwvw]{-1d5 All Stats/Saves}","img":"systems/mosh/images/icons/ui/rolltables/distress_signal.png","weight":1,"range":[3,4],"drawn": false}, {"_id":"K9MvgxDKYTflPZDl","type":0,"documentCollection":"null","documentId":"null","text":"[[2D10]] DECADES. Make a Body Save [-] or lose 1d10 to all Stats and Saves.
@UUID[Compendium.mosh.macros_triggered_1e.ItHLy3URKFQVLipe]{Body Save [-]}
@UUID[Compendium.mosh.macros_triggered_1e.2MuANcdgp2g8SDlF]{-1d10 All Stats/Saves}","img":"systems/mosh/images/icons/ui/rolltables/distress_signal.png","weight":1,"range":[5,5],"drawn": false}, {"_id":"rFLMF0FIuJOK582Z","type":0,"documentCollection":"null","documentId":"null","text":"NEVER. The ship floats endlessly in the all consuming void of space. Thanks for playing Mothership.","img":"systems/mosh/images/icons/ui/rolltables/distress_signal.png","weight":1,"range":[6,9],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"AqGWwoWXzijFs427","name":"Megadamage Effects","img":"systems/mosh/images/icons/ui/rolltables/megadamage_effects.png","description":"Megadamage (MDMG) is like a character’s Damage and Wounds rolled into one. Whenever your ship takes MDMG, add it to any previous MDMG incurred, mark the new total on the tracker, and apply the listed effect. If your ship ever has 9 or more total MDMG, it is destroyed. Your ship ignores all MDMG less than its Hull. If the ship ever takes MDMG greater than or equal to its Hull in one hit, the hull is destroyed and the ship suffers any remaining MDMG.
","formula":"1d10-1","replacement":true,"displayRoll":true,"results":[ {"_id":"ENq0mvm5iqtMh1ft","type":0,"documentCollection":"null","documentId":"null","text":"ALL SYSTEMS NORMAL.
5x5. Ready to ride.","img":"systems/mosh/images/icons/ui/rolltables/megadamage_effects.png","weight":1,"range":[0,0],"drawn": false}, {"_id":"yVzV5Y0tNWSqPVpS","type":0,"documentCollection":"null","documentId":"null","text":"EMERGENCY FUEL LEAK.
Every time you spend fuel, you spend 1 more.","img":"systems/mosh/images/icons/ui/rolltables/megadamage_effects.png","weight":1,"range":[1,1],"drawn": false}, {"_id":"Vnfbw2I9XRvrjKQ0","type":0,"documentCollection":"null","documentId":"null","text":"WEAPONS OFFLINE.
Automatically fail Battle Checks.","img":"systems/mosh/images/icons/ui/rolltables/megadamage_effects.png","weight":1,"range":[2,2],"drawn": false}, {"_id":"qPV5sasqyDgWwNiW","type":0,"documentCollection":"null","documentId":"null","text":"NAVIGATION OFFLINE.
Cannot make Thruster Checks. 10% chance all navigation data wiped.","img":"systems/mosh/images/icons/ui/rolltables/megadamage_effects.png","weight":1,"range":[3,3],"drawn": false}, {"_id":"kGOebdOLWOZBekvw","type":0,"documentCollection":"null","documentId":"null","text":"FIRE ON DECK.
Fire spreads throughout the ship, creating a toxic atmosphere (due to smoke inhalation) and a highly corrosive atmosphere (10 DMG/round) for locations on fire.","img":"systems/mosh/images/icons/ui/rolltables/megadamage_effects.png","weight":1,"range":[4,4],"drawn": false}, {"_id":"etnepA2VTtuv2iyc","type":0,"documentCollection":"null","documentId":"null","text":"HULL BREACH.
All aboard make a Body Save or take 1 Wound (Explosion). On a Critical Failure, get violently sucked into space.","img":"systems/mosh/images/icons/ui/rolltables/megadamage_effects.png","weight":1,"range":[5,5],"drawn": false}, {"_id":"ay9hN3EYsAJOKUeZ","type":0,"documentCollection":"null","documentId":"null","text":"LIFE SUPPORT SYSTEMS OFFLINE.
Oxygen limited to 1d10 multiplied by the maximum crew capacity.","img":"systems/mosh/images/icons/ui/rolltables/megadamage_effects.png","weight":1,"range":[6,6],"drawn": false}, {"_id":"gNqK1zdrt9AUacUg","type":0,"documentCollection":"null","documentId":"null","text":"RADIATION LEAK.
Radiation Level increases every 2d10 minutes.","img":"systems/mosh/images/icons/ui/rolltables/megadamage_effects.png","weight":1,"range":[7,7],"drawn": false}, {"_id":"kmZfxrotglCOUw8M","type":0,"documentCollection":"null","documentId":"null","text":"DEAD IN THE WATER.
All systems offline, emergency power only.","img":"systems/mosh/images/icons/ui/rolltables/megadamage_effects.png","weight":1,"range":[8,8],"drawn": false}, {"_id":"A3XHL5OaSekv3OF3","type":0,"documentCollection":"null","documentId":"null","text":"ABANDON SHIP!
Ship is destroyed in 1d10 minutes.","img":"systems/mosh/images/icons/ui/rolltables/megadamage_effects.png","weight":1,"range":[9,9],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
+{"_id":"kqz8GsFVPfjvqO0N","name":"Maintenance Issues","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","description":"Eventually, your ship needs a tune-up, or sometimes a complete overhaul. When this happens, you’ll need to get it repaired. Minor Repairs cover cosmetic damage, cleanup, and other handyman type work that can be handled by the crew while the ship is in flight. Minor Repairs take roughly [[/r 2d10]] days. Major Repairs cover large scale structural or system damage, including repairing Megadamage and Hull. Major Repairs can only be fixed in port.
","formula":"1d100-1","replacement":true,"displayRoll":true,"results":[ {"_id":"IyZRbv37zFiJ383B","type":0,"documentCollection":"null","documentId":"null","text":"Rancid smell permeates cabins.
@UUID[Compendium.mosh.items_maintenance_1e.ciAkQXkxSXTG8MV1]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[0,0],"drawn": false}, {"_id":"C0ZgIm60S90TAT91","type":0,"documentCollection":"null","documentId":"null","text":"Huge mess everywhere.
@UUID[Compendium.mosh.items_maintenance_1e.pLleYaFjcIuAm4Pp]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[1,1],"drawn": false}, {"_id":"eTkF90oClQfEzqnO","type":0,"documentCollection":"null","documentId":"null","text":"Staticky comms.
@UUID[Compendium.mosh.items_maintenance_1e.dReCCsfiV7it4lsm]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[2,2],"drawn": false}, {"_id":"1eCoLlXdJOBH9PWj","type":0,"documentCollection":"null","documentId":"null","text":"Faulty electrical system.
@UUID[Compendium.mosh.items_maintenance_1e.4JRD71mvWNtFUDL7]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[3,3],"drawn": false}, {"_id":"0OAtazWzOPLEfTkw","type":0,"documentCollection":"null","documentId":"null","text":"Loose couplings.
@UUID[Compendium.mosh.items_maintenance_1e.59cXdcrZlmjUcJpV]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[4,4],"drawn": false}, {"_id":"PfUxdaS1uo7lxKa3","type":0,"documentCollection":"null","documentId":"null","text":"Hidden (highly illegal) contraband.
@UUID[Compendium.mosh.items_maintenance_1e.CLvIvoNryBARtU7T]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[5,5],"drawn": false}, {"_id":"nix5zKmEronI6Yvv","type":0,"documentCollection":"null","documentId":"null","text":"Autopilot systems down.
@UUID[Compendium.mosh.items_maintenance_1e.vip6FxWcX4ReJD3b]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[6,6],"drawn": false}, {"_id":"sbObgOY0tmHaZpKG","type":0,"documentCollection":"null","documentId":"null","text":"Leaking hydraulic systems.
@UUID[Compendium.mosh.items_maintenance_1e.AQt9nXy6S0Ev50r7]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[7,7],"drawn": false}, {"_id":"gyTPedRpwTvRBfhT","type":0,"documentCollection":"null","documentId":"null","text":"Creaking hull.
@UUID[Compendium.mosh.items_maintenance_1e.QUyfvbFhCqb9d7Lu]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[8,8],"drawn": false}, {"_id":"I11M8UMDMBitMr3v","type":0,"documentCollection":"null","documentId":"null","text":"Damaged bulkheads.
@UUID[Compendium.mosh.items_maintenance_1e.SW5kVSjiFbBxIeiu]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[9,9],"drawn": false}, {"_id":"SWXQhPfu8y8XFzRM","type":0,"documentCollection":"null","documentId":"null","text":"Misaligned docking clamps.
@UUID[Compendium.mosh.items_maintenance_1e.wNm669fzbdZGwr0g]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[10,10],"drawn": false}, {"_id":"zbhqG61KG97AHnxy","type":0,"documentCollection":"null","documentId":"null","text":"Viewports blocked.
@UUID[Compendium.mosh.items_maintenance_1e.3l0LUZpjizvZmHWs]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[11,11],"drawn": false}, {"_id":"TUWadEIBbOEtHy3z","type":0,"documentCollection":"null","documentId":"null","text":"Jammed exterior airlocks.
@UUID[Compendium.mosh.items_maintenance_1e.c8SXxPHMsG7uycas]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[12,12],"drawn": false}, {"_id":"ynAJiaLcVAE3HIjG","type":0,"documentCollection":"null","documentId":"null","text":"Dysfunctional gravity plating.
@UUID[Compendium.mosh.items_maintenance_1e.9kS8VjGuSMpghdCk]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[13,13],"drawn": false}, {"_id":"DtVeZrxUIjJoPqFH","type":0,"documentCollection":"null","documentId":"null","text":"Out of code compliance.
@UUID[Compendium.mosh.items_maintenance_1e.Low2X1z7m1iB3rkA]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[14,14],"drawn": false}, {"_id":"WgmjKOE5Iv3Gq1lg","type":0,"documentCollection":"null","documentId":"null","text":"Controls sticking.
@UUID[Compendium.mosh.items_maintenance_1e.BicB3xA1h978ZevJ]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[15,15],"drawn": false}, {"_id":"ls4xOoWbhod4xcK5","type":0,"documentCollection":"null","documentId":"null","text":"Coolant leak.
@UUID[Compendium.mosh.items_maintenance_1e.C9dQYp7gcjtq5QRz]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[16,16],"drawn": false}, {"_id":"Z6UTZnadXEZAbtnx","type":0,"documentCollection":"null","documentId":"null","text":"Miscalibrated Thruster Gimbal System.
@UUID[Compendium.mosh.items_maintenance_1e.1HNvL7XEUcMQbLps]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[17,17],"drawn": false}, {"_id":"jLmjfUWSNdD3dRwk","type":0,"documentCollection":"null","documentId":"null","text":"Bevvy of OSHA violations.
@UUID[Compendium.mosh.items_maintenance_1e.xa9MPzfrPglkSJjg]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[18,18],"drawn": false}, {"_id":"MXvxkk3A53nEUVjW","type":0,"documentCollection":"null","documentId":"null","text":"Blocked air vents.
@UUID[Compendium.mosh.items_maintenance_1e.ZbAFemnvHB1YTHBK]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[19,19],"drawn": false}, {"_id":"uITLtr1tukKg6GH3","type":0,"documentCollection":"null","documentId":"null","text":"Emergency lighting only.
@UUID[Compendium.mosh.items_maintenance_1e.wjyAZnOOafvv4xzB]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[20,20],"drawn": false}, {"_id":"Dy29r0yTcurlTOb3","type":0,"documentCollection":"null","documentId":"null","text":"Internal networking issues.
@UUID[Compendium.mosh.items_maintenance_1e.l1OGQ0IXZHjnO4Ys]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[21,21],"drawn": false}, {"_id":"bN364EHfBPjRPV1k","type":0,"documentCollection":"null","documentId":"null","text":"Inaccurate data collection.
@UUID[Compendium.mosh.items_maintenance_1e.vleMoz5bbkZ5w28o]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[22,22],"drawn": false}, {"_id":"SdzntkGxTPxc0mBk","type":0,"documentCollection":"null","documentId":"null","text":"Oxygen leak. If ship is low on O2, lose 1d5 extra per day.
@UUID[Compendium.mosh.macros_triggered_1e.u7TchSo3qutnzaKF]{-1d5 Oxygen}
@UUID[Compendium.mosh.items_maintenance_1e.T4wAR08WyT3g9C6D]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[23,23],"drawn": false}, {"_id":"3FAjfGNOdUhikeaT","type":0,"documentCollection":"null","documentId":"null","text":"Throttled Afterburners. -2d10 Thrusters.
@UUID[Compendium.mosh.macros_triggered_1e.jmOh8n2ps0YIeBC0]{-2d10 Thrusters}
@UUID[Compendium.mosh.items_maintenance_1e.fbrN7sbgPjIwkk7I]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[24,24],"drawn": false}, {"_id":"yJjr6ttFIL0Tm1Q0","type":0,"documentCollection":"null","documentId":"null","text":"Lemon. Maintenance Checks at [-].
@UUID[Compendium.mosh.macros_triggered_1e.C04VbNoj8LgfY8QK]{Maintenance Check [-]}
@UUID[Compendium.mosh.items_maintenance_1e.7GqbGIOzA9vYOPiI]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[25,25],"drawn": false}, {"_id":"iYG96XjPC5zAo8qm","type":0,"documentCollection":"null","documentId":"null","text":"Slow acceleration. +1 Week to travel.
@UUID[Compendium.mosh.items_maintenance_1e.dgisAPnBbrIOiisk]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[26,26],"drawn": false}, {"_id":"esUyqvuWPGfPps0s","type":0,"documentCollection":"null","documentId":"null","text":"Inaccurate navigation.
@UUID[Compendium.mosh.items_maintenance_1e.d94uF9rpmeP60Kl4]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[27,27],"drawn": false}, {"_id":"DkIuGgcrI6Jur9Cr","type":0,"documentCollection":"null","documentId":"null","text":"Miscalibrated Targeting Sensors. -1d10 Battle.
@UUID[Compendium.mosh.macros_triggered_1e.X3cL9eS2HOPxhLH5]{-1d10 Battle}
@UUID[Compendium.mosh.items_maintenance_1e.3Ptitg8HBZfl2CXN]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[28,28],"drawn": false}, {"_id":"QBBJru6guS5DCeTT","type":0,"documentCollection":"null","documentId":"null","text":"Faulty Cryopods. Nightmares. Cryosickness lasts an additional week.
@UUID[Compendium.mosh.items_maintenance_1e.mK1Acfk5NAgs1MHC]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[29,29],"drawn": false}, {"_id":"ZHmFbVcuh2DAOVEf","type":0,"documentCollection":"null","documentId":"null","text":"Malfunctioning escape pods.
@UUID[Compendium.mosh.items_maintenance_1e.IR1sWnYXniMg9TdP]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[30,30],"drawn": false}, {"_id":"XEgBLTIutnbQ8wjj","type":0,"documentCollection":"null","documentId":"null","text":"Unable to send distress signals.
@UUID[Compendium.mosh.items_maintenance_1e.FIqSHePAeLJywerx]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[31,31],"drawn": false}, {"_id":"Lkm8VtpQRjICLlwU","type":0,"documentCollection":"null","documentId":"null","text":"Sabotaged coolant system.
@UUID[Compendium.mosh.items_maintenance_1e.4kmMuAbW1jnfVMYP]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[32,32],"drawn": false}, {"_id":"038MckXaAQARD67V","type":0,"documentCollection":"null","documentId":"null","text":"Death trap. [-] on all rolls.
@UUID[Compendium.mosh.items_maintenance_1e.ALplRgZtneMRdloo]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[33,33],"drawn": false}, {"_id":"oUetfiowLXa1LAoD","type":0,"documentCollection":"null","documentId":"null","text":"Worn landing struts.
@UUID[Compendium.mosh.items_maintenance_1e.2pxf4O2NrLdwYRtO]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[34,34],"drawn": false}, {"_id":"Z52rxcwBR1l2ioZV","type":0,"documentCollection":"null","documentId":"null","text":"Out-of-date air filters.
@UUID[Compendium.mosh.items_maintenance_1e.64AQJ3zQDOb7NOR1]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[35,35],"drawn": false}, {"_id":"uUwTRxD7VL9uOPI1","type":0,"documentCollection":"null","documentId":"null","text":"Corroded pipes.
@UUID[Compendium.mosh.items_maintenance_1e.PKBXKvgWZwafKWJ3]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[36,36],"drawn": false}, {"_id":"ha1AgBUXwSB0YvLZ","type":0,"documentCollection":"null","documentId":"null","text":"Innaccurate orbital transfer navigation.
@UUID[Compendium.mosh.items_maintenance_1e.NgKPVhRkD8Gteo5Z]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[37,37],"drawn": false}, {"_id":"pIwClgLjhzBxWjQB","type":0,"documentCollection":"null","documentId":"null","text":"Worn out fuel injection nozzles.
@UUID[Compendium.mosh.items_maintenance_1e.5d220ZzrEV3qx6Fy]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[38,38],"drawn": false}, {"_id":"uPVo13V46Gn7UdGQ","type":0,"documentCollection":"null","documentId":"null","text":"Inoperative exterior lighting system.
@UUID[Compendium.mosh.items_maintenance_1e.IGx8nQrwfz07r6TR]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[39,39],"drawn": false}, {"_id":"mHxQpOcW3O3zoHqc","type":0,"documentCollection":"null","documentId":"null","text":"Defective intercom system.
@UUID[Compendium.mosh.items_maintenance_1e.pW1FUDxp2N0M0D1y]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[40,40],"drawn": false}, {"_id":"RAEu9fESI7Kb3IsO","type":0,"documentCollection":"null","documentId":"null","text":"Inadequate waste recycling.
@UUID[Compendium.mosh.items_maintenance_1e.UPAxtEOrSF3Il4uA]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[41,41],"drawn": false}, {"_id":"ZilkOLl2fqpMxTCK","type":0,"documentCollection":"null","documentId":"null","text":"Faulty altitude control thrusters.
@UUID[Compendium.mosh.items_maintenance_1e.m04JdXL1xGQOkDyp]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[42,42],"drawn": false}, {"_id":"uwF7IfVg4DTCrkEY","type":0,"documentCollection":"null","documentId":"null","text":"Insufficient Life Support redundancy.
@UUID[Compendium.mosh.items_maintenance_1e.OWkfB73RTSLDMlsU]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[43,43],"drawn": false}, {"_id":"XtidrkdiZPuXrSD9","type":0,"documentCollection":"null","documentId":"null","text":"Delayed communication relays.
@UUID[Compendium.mosh.items_maintenance_1e.hNJYqetiMKUlZzYH]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[44,44],"drawn": false}, {"_id":"d0aLCaYUFBvm3A8D","type":0,"documentCollection":"null","documentId":"null","text":"Damaged fuel lines.
@UUID[Compendium.mosh.items_maintenance_1e.rlW0LUlsK7vDGZEh]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[45,45],"drawn": false}, {"_id":"wyaIb9XoOYTr8l56","type":0,"documentCollection":"null","documentId":"null","text":"Corroded exhaust manifolds.
@UUID[Compendium.mosh.items_maintenance_1e.IDiwAbD8DTbec7S1]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[46,46],"drawn": false}, {"_id":"8e3FhcBmlf4TobEP","type":0,"documentCollection":"null","documentId":"null","text":"Terminal displays non-functional.
@UUID[Compendium.mosh.items_maintenance_1e.EteEoBrlnzcySppN]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[47,47],"drawn": false}, {"_id":"mWZZ3GgXZeaIWKq4","type":0,"documentCollection":"null","documentId":"null","text":"Check engine light won’t turn off.
@UUID[Compendium.mosh.items_maintenance_1e.guvCGNRa75AB2Avg]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[48,48],"drawn": false}, {"_id":"uUbSTVqzPH0XUO5T","type":0,"documentCollection":"null","documentId":"null","text":"Failed backup systems.
@UUID[Compendium.mosh.items_maintenance_1e.cbXMdd4ugxSOT5TU]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[49,49],"drawn": false}, {"_id":"5bSHAIUf6NsGPtkl","type":0,"documentCollection":"null","documentId":"null","text":"Faulty door locks.
@UUID[Compendium.mosh.items_maintenance_1e.kftgvuQoefQ7pl28]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[50,50],"drawn": false}, {"_id":"lfEjfRS1T1xGw4Nt","type":0,"documentCollection":"null","documentId":"null","text":"Buggy communications.
@UUID[Compendium.mosh.items_maintenance_1e.Odpb5coSTST7kCkc]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[51,51],"drawn": false}, {"_id":"ZOPIRA0fnXVSQo5D","type":0,"documentCollection":"null","documentId":"null","text":"Infected food storage facilities.
@UUID[Compendium.mosh.items_maintenance_1e.vMRVXZxu6ozj0iw2]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[52,52],"drawn": false}, {"_id":"5YHIGpIFC7xm5BQv","type":0,"documentCollection":"null","documentId":"null","text":"Corrupted data banks.
@UUID[Compendium.mosh.items_maintenance_1e.4Lqg0lqjjTlNlr0j]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[53,53],"drawn": false}, {"_id":"pjyyj4uVkJcwKtSK","type":0,"documentCollection":"null","documentId":"null","text":"Jammed cargo bay doors.
@UUID[Compendium.mosh.items_maintenance_1e.Ka8elMGKtcakUIxx]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[54,54],"drawn": false}, {"_id":"IaEAcW8uwekpS8EW","type":0,"documentCollection":"null","documentId":"null","text":"Flickering interior lights.
@UUID[Compendium.mosh.items_maintenance_1e.TAerNMqv19pANCxq]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[55,55],"drawn": false}, {"_id":"Ru2TBxEYhuBx8Cn4","type":0,"documentCollection":"null","documentId":"null","text":"Failed airlock seals.
@UUID[Compendium.mosh.items_maintenance_1e.vv1VykTwiQmgEj6N]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[56,56],"drawn": false}, {"_id":"iuZDnxPMmNE2H8T6","type":0,"documentCollection":"null","documentId":"null","text":"Fuel Leak. Burn +1 Fuel everytime you spend fuel.
@UUID[Compendium.mosh.items_maintenance_1e.GW1KGmYdxYYf4ZWT]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[57,57],"drawn": false}, {"_id":"0PNCNoYdxWJA8pJ1","type":0,"documentCollection":"null","documentId":"null","text":"Jump Bug. 10% chance Jump takes 2d10 months, not 2d10 days.
@UUID[Compendium.mosh.items_maintenance_1e.FLaPtHcegheN7wHw]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[58,58],"drawn": false}, {"_id":"vwv4akGBUkDSzVet","type":0,"documentCollection":"null","documentId":"null","text":"Fragile. Always take +1 MDMG.
@UUID[Compendium.mosh.items_maintenance_1e.g9Z7He5zPHNrxYe1]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[59,59],"drawn": false}, {"_id":"ZWZaNrksEIrvkw0a","type":0,"documentCollection":"null","documentId":"null","text":"Cracked heat shields.
@UUID[Compendium.mosh.items_maintenance_1e.IiPryFS9MOGZXeuG]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[60,60],"drawn": false}, {"_id":"C4bKdbAe1rGL4Xdu","type":0,"documentCollection":"null","documentId":"null","text":"Outdated software. -1d10 Systems.
@UUID[Compendium.mosh.macros_triggered_1e.oDftFxRKkCQRNY2O]{-1d10 Systems}
@UUID[Compendium.mosh.items_maintenance_1e.FmPqHYH3UoGpaWYL]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[61,61],"drawn": false}, {"_id":"nkBNqVm7dfv4L7Se","type":0,"documentCollection":"null","documentId":"null","text":"Inadequate Water Filtration. Parasites in the water supply.
@UUID[Compendium.mosh.items_maintenance_1e.NLwybTzXJ1bndki3]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[62,62],"drawn": false}, {"_id":"XTA2gczwQ6svM3JU","type":0,"documentCollection":"null","documentId":"null","text":"Malfunctioning waste management system.
@UUID[Compendium.mosh.items_maintenance_1e.oySXnFIbRW0WRoeF]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[63,63],"drawn": false}, {"_id":"CBKVd5xeJTqFZhqN","type":0,"documentCollection":"null","documentId":"null","text":"Fusion Reactors overheating.
@UUID[Compendium.mosh.items_maintenance_1e.RiHvRQ9nZDygwvvB]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[64,64],"drawn": false}, {"_id":"0r2hvYBfdrLp1Fd0","type":0,"documentCollection":"null","documentId":"null","text":"Failed radiation filter.
@UUID[Compendium.mosh.items_maintenance_1e.wCYGQrI9qonhWy8F]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[65,65],"drawn": false}, {"_id":"ZWaPQw3J8v9irvsJ","type":0,"documentCollection":"null","documentId":"null","text":"Radiation leak. Entire ship is at Radiation Level 2.
@UUID[Compendium.mosh.items_maintenance_1e.5J4r3yw4xDj890yZ]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[66,66],"drawn": false}, {"_id":"EWeonowwk9JY7UDo","type":0,"documentCollection":"null","documentId":"null","text":"Miscalibrated guidance system.
@UUID[Compendium.mosh.items_maintenance_1e.XmIcQgho4un7hYki]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[67,67],"drawn": false}, {"_id":"hD1NP45qwjxr51vQ","type":0,"documentCollection":"null","documentId":"null","text":"Overloaded power storage.
@UUID[Compendium.mosh.items_maintenance_1e.KhlrUaPjVIoyhnaL]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[68,68],"drawn": false}, {"_id":"UAjsBmmS82j8Irw3","type":0,"documentCollection":"null","documentId":"null","text":"Malfunctioning sensor arrays.
@UUID[Compendium.mosh.items_maintenance_1e.LRumIQdUBzD0Jc0X]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[69,69],"drawn": false}, {"_id":"ndMPpWBt7TETFN5x","type":0,"documentCollection":"null","documentId":"null","text":"Failed Water Recovery System.
@UUID[Compendium.mosh.items_maintenance_1e.e144cIdUEyTJgN1G]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[70,70],"drawn": false}, {"_id":"QcsbthzAbdnETOZB","type":0,"documentCollection":"null","documentId":"null","text":"Micrometoroid hull damage.
@UUID[Compendium.mosh.items_maintenance_1e.b2b3j5JtanbyWlNd]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[71,71],"drawn": false}, {"_id":"JakRLX2zyPrI10Pb","type":0,"documentCollection":"null","documentId":"null","text":"Faulty Carbon Dioxide Removal Assembly.
@UUID[Compendium.mosh.items_maintenance_1e.5OBjTojgrp5N9mEw]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[72,72],"drawn": false}, {"_id":"NISfAAR2ECI2ioE1","type":0,"documentCollection":"null","documentId":"null","text":"Solar panel degradation.
@UUID[Compendium.mosh.items_maintenance_1e.8s1eBY5bEcQQTCz0]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[73,73],"drawn": false}, {"_id":"yp8FBNHjXWojwg3H","type":0,"documentCollection":"null","documentId":"null","text":"Computer failure from cosmic radiation.
@UUID[Compendium.mosh.items_maintenance_1e.5UiJy739gvGHkRYp]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[74,74],"drawn": false}, {"_id":"697i67021D88RIbg","type":0,"documentCollection":"null","documentId":"null","text":"Overloaded circuitry.
@UUID[Compendium.mosh.items_maintenance_1e.yJY9CzP1KA15aMqV]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[75,75],"drawn": false}, {"_id":"V8I6X6TZUHlrDUNk","type":0,"documentCollection":"null","documentId":"null","text":"Malfunctioning plasma thruster.
@UUID[Compendium.mosh.items_maintenance_1e.nHac0gkEcCNew7RX]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[76,76],"drawn": false}, {"_id":"6wy2JtIKZik32G27","type":0,"documentCollection":"null","documentId":"null","text":"Thermal management system failure.
@UUID[Compendium.mosh.items_maintenance_1e.DYHuVA4CQlmK2MJy]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[77,77],"drawn": false}, {"_id":"lVi2h8AvOE8SF06p","type":0,"documentCollection":"null","documentId":"null","text":"Intermittent electrical outages.
@UUID[Compendium.mosh.items_maintenance_1e.QIcoFYoC0hxW84qD]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[78,78],"drawn": false}, {"_id":"Ip8GIZLR3f0TxRkW","type":0,"documentCollection":"null","documentId":"null","text":"Fire suppression system out of code.
@UUID[Compendium.mosh.items_maintenance_1e.AuTERG3m7ECQKrKs]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[79,79],"drawn": false}, {"_id":"hIuA8Rx1YcRVMf6H","type":0,"documentCollection":"null","documentId":"null","text":"Damaged floor pannelling.
@UUID[Compendium.mosh.items_maintenance_1e.1iOSKp82goZGJZch]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[80,80],"drawn": false}, {"_id":"g2YZ56OllRPkuGFf","type":0,"documentCollection":"null","documentId":"null","text":"Broken light fixture in remote corridor.
@UUID[Compendium.mosh.items_maintenance_1e.ZBUtxiX72udqLzIk]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[81,81],"drawn": false}, {"_id":"mXz81hgLUolDq7wr","type":0,"documentCollection":"null","documentId":"null","text":"Damaged coolant pump.
@UUID[Compendium.mosh.items_maintenance_1e.iwFmPpAth3VbRRL8]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[82,82],"drawn": false}, {"_id":"PENJ768OdQpKKg6w","type":0,"documentCollection":"null","documentId":"null","text":"Cracked viewports.
@UUID[Compendium.mosh.items_maintenance_1e.Eo0l4WMxcS62GCMP]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[83,83],"drawn": false}, {"_id":"qkGhdVs179LjB3MD","type":0,"documentCollection":"null","documentId":"null","text":"Systems overloaded with malware.
@UUID[Compendium.mosh.items_maintenance_1e.miRqXNzkW0biml1I]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[84,84],"drawn": false}, {"_id":"F2RKhsEiySWv0ffY","type":0,"documentCollection":"null","documentId":"null","text":"Leaky fuel valve.
@UUID[Compendium.mosh.items_maintenance_1e.cOLcJ3Dnecbe6ZIU]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[85,85],"drawn": false}, {"_id":"awMYuugY3Kj6pK5I","type":0,"documentCollection":"null","documentId":"null","text":"Jammed exhaust vent.
@UUID[Compendium.mosh.items_maintenance_1e.zRzb3Laiuw4ac6p0]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[86,86],"drawn": false}, {"_id":"H2jCFkQSC4QJFhGH","type":0,"documentCollection":"null","documentId":"null","text":"Stuck waste disposal chute.
@UUID[Compendium.mosh.items_maintenance_1e.EZzGAO6DneH1qmQM]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[87,87],"drawn": false}, {"_id":"kwTupIw3zfFK8gYu","type":0,"documentCollection":"null","documentId":"null","text":"Lifts non-functioning.
@UUID[Compendium.mosh.items_maintenance_1e.Tp6k1gPwhQmT6hCo]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[88,88],"drawn": false}, {"_id":"EN4i27AKjAyfbUF3","type":0,"documentCollection":"null","documentId":"null","text":"Damaged communications antenna.
@UUID[Compendium.mosh.items_maintenance_1e.2Ht7fg78511Hd49u]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[89,89],"drawn": false}, {"_id":"ix7YwKfDHjgEBgHJ","type":0,"documentCollection":"null","documentId":"null","text":"Clogged Air Filtration. Crew capacity cut in half.
@UUID[Compendium.mosh.macros_triggered_1e.DUuRY7kHKd7n5luv]{-50% Crew Capacity}
@UUID[Compendium.mosh.items_maintenance_1e.XLEhMV9SnSfeEE7E]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[90,90],"drawn": false}, {"_id":"kD7E2VQh2AeDciOo","type":0,"documentCollection":"null","documentId":"null","text":"Malfunctioning climate control. 85º at all times.
@UUID[Compendium.mosh.items_maintenance_1e.Z8raruNDvfNASFQi]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[91,91],"drawn": false}, {"_id":"5lUmyZ8nImFZofuu","type":0,"documentCollection":"null","documentId":"null","text":"No emergency power.
@UUID[Compendium.mosh.items_maintenance_1e.3rulbOVhyRlTizT0]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[92,92],"drawn": false}, {"_id":"dKC7BnQOxM3Zwouv","type":0,"documentCollection":"null","documentId":"null","text":"Weak Frame. -1 Hull, -1 Upgrade.
@UUID[Compendium.mosh.macros_triggered_1e.uPY19Y49bGCLGK3N]{-1 Hull}
@UUID[Compendium.mosh.macros_triggered_1e.06NSvDYTtmkeUtLq]{-1 Upgrade}
@UUID[Compendium.mosh.items_maintenance_1e.ulWxa2UtTOQihTyz]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[93,93],"drawn": false}, {"_id":"T5Xr0vE7z8MbaHbC","type":0,"documentCollection":"null","documentId":"null","text":"Toxic chemical spill.
@UUID[Compendium.mosh.items_maintenance_1e.EnogUslNNusSfVFy]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[94,94],"drawn": false}, {"_id":"YHHrA8ToKRIS4AK6","type":0,"documentCollection":"null","documentId":"null","text":"Poor scanners. Ship has to be one range band closer than normal.
@UUID[Compendium.mosh.items_maintenance_1e.ElXLL32uNYiPmE4G]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[95,95],"drawn": false}, {"_id":"a8wNHPfmQDhb2yBQ","type":0,"documentCollection":"null","documentId":"null","text":"Counterfit papers. Ship is stolen. There is a bounty on it.
@UUID[Compendium.mosh.items_maintenance_1e.b081FxEAclRKji3q]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[96,96],"drawn": false}, {"_id":"sHwBoWQk8HnDDln1","type":0,"documentCollection":"null","documentId":"null","text":"Corrupted A.I.
@UUID[Compendium.mosh.items_maintenance_1e.zHsnShUX37Zvyi2O]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[97,97],"drawn": false}, {"_id":"XN7xFrup67y9XK9H","type":0,"documentCollection":"null","documentId":"null","text":"Warp Cores fail 10% of the time.
@UUID[Compendium.mosh.items_maintenance_1e.58KhhfMQ9p0XJZHc]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[98,98],"drawn": false}, {"_id":"6TJ246ieXGmopzm7","type":0,"documentCollection":"null","documentId":"null","text":"Rust bucket. Everything that can go wrong, does. +1 Minimum Stress to crew.
@UUID[Compendium.mosh.macros_triggered_1e.BmEHWH7YxV9qb21p]{+1 Minimum Stress}
@UUID[Compendium.mosh.items_maintenance_1e.60QSsxrVOt83OU9p]{Maintenance Issue}","img":"systems/mosh/images/icons/ui/rolltables/maintenance_issues.png","weight":1,"range":[99,99],"drawn": false} ],"_stats":{"systemId":"mosh","systemVersion":"0.4.0","coreVersion":"11.308","createdTime":1685936572185,"modifiedTime":1693515520278,"lastModifiedBy":"6EeM38DJkcBWNAmw"}}
\ No newline at end of file
diff --git a/packs/rolltables_1e/000005.ldb b/packs/rolltables_1e/000005.ldb
index 23548cb..f2f586e 100644
Binary files a/packs/rolltables_1e/000005.ldb and b/packs/rolltables_1e/000005.ldb differ
diff --git a/packs/rolltables_1e/LOG b/packs/rolltables_1e/LOG
index 2f0e033..8317fd5 100644
--- a/packs/rolltables_1e/LOG
+++ b/packs/rolltables_1e/LOG
@@ -1,5 +1,5 @@
-2023/12/07-11:20:51.893 6e2c Delete type=3 #1
-2023/12/07-11:21:09.686 2b64 Level-0 table #5: started
-2023/12/07-11:21:09.689 2b64 Level-0 table #5: 32277 bytes OK
-2023/12/07-11:21:09.690 2b64 Delete type=0 #3
-2023/12/07-11:21:09.690 2b64 Manual compaction at level-0 from '!tables!31YibfjueXuZdNLb' @ 72057594037927935 : 1 .. '!tables.results!ypcoikqHLhnc9tNs.zJkYrssfrdWBSeRm' @ 0 : 0; will stop at (end)
+2024/05/24-23:57:05.493 fc8 Delete type=3 #1
+2024/05/24-23:57:30.894 3f44 Level-0 table #5: started
+2024/05/24-23:57:30.901 3f44 Level-0 table #5: 51822 bytes OK
+2024/05/24-23:57:30.905 3f44 Delete type=0 #3
+2024/05/24-23:57:30.922 3f44 Manual compaction at level-0 from '!tables!31YibfjueXuZdNLb' @ 72057594037927935 : 1 .. '!tables.results!ypcoikqHLhnc9tNs.zJkYrssfrdWBSeRm' @ 0 : 0; will stop at (end)
diff --git a/packs/rolltables_1e/MANIFEST-000002 b/packs/rolltables_1e/MANIFEST-000002
index cc1b8e0..67f7e45 100644
Binary files a/packs/rolltables_1e/MANIFEST-000002 and b/packs/rolltables_1e/MANIFEST-000002 differ
diff --git a/system.json b/system.json
index 541cc73..d55e313 100644
--- a/system.json
+++ b/system.json
@@ -2,7 +2,7 @@
"id": "mosh",
"title": "MoSh - Unofficial Mothership",
"description": "The unofficial Mothership system for FoundryVTT.",
- "version": "0.4.33",
+ "version": "0.5.0",
"esmodules": [
"module/mosh.js"
],
@@ -22,6 +22,18 @@
"ASSISTANT": "OWNER"
}
},
+ {
+ "name": "items_maintenance_1e",
+ "label": "Maintenance Issues (1e)",
+ "system": "mosh",
+ "path": "packs/items_maintenance_1e.db",
+ "type": "Item",
+ "flags": {},
+ "ownership": {
+ "PLAYER": "OBSERVER",
+ "ASSISTANT": "OWNER"
+ }
+ },
{
"name": "macros_hotbar_1e",
"label": "Hotbar Macros (1e)",
diff --git a/template.json b/template.json
index 179c8dd..f042f01 100644
--- a/template.json
+++ b/template.json
@@ -221,6 +221,15 @@
"layout" : "systems/mosh/images/Galloway_Top.png",
"beauty" : "systems/mosh/images/Galloway_Top.png"
},
+ "runSetup" : true,
+ "megadamage" : {
+ "html" : "",
+ "hits" : [],
+ "menu" : {
+ "html" : ""
+ },
+ "open" : false
+ },
"stats": {
"armor": {
"value": 10,
@@ -249,6 +258,34 @@
"max": 99,
"label": "Speed",
"rollLabel": "Speed Check"
+ },
+ "thrusters": {
+ "value": 10,
+ "min": 0,
+ "max": 99,
+ "label": "Thrusters",
+ "rollLabel": "Thrusters Save"
+ },
+ "battle": {
+ "value": 10,
+ "min": 0,
+ "max": 99,
+ "label": "Battle",
+ "rollLabel": "Battle Save"
+ },
+ "systems": {
+ "value": 10,
+ "min": 0,
+ "max": 99,
+ "label": "Systems",
+ "rollLabel": "Systems Save"
+ },
+ "bankruptcy": {
+ "value": 10,
+ "min": 0,
+ "max": 99,
+ "label": "Bankruptcy",
+ "rollLabel": "Bankruptcy Save"
}
},
"supplies": {
@@ -266,7 +303,42 @@
"stock": {
"value": 10,
"max": 10
+ },
+ "crew": {
+ "value": 10,
+ "max": 10
+ },
+ "oxygen": {
+ "value": 0
+ },
+ "warp-cores": {
+ "value": 0
+ },
+ "cryopods": {
+ "value": 0
+ },
+ "escape-pods": {
+ "value": 0
+ },
+ "upgrades": {
+ "value": 0,
+ "max" : 0
}
+ },
+ "weapon-stats" : {
+ "weapons": {
+ "value": 0,
+ "max": 1
+ },
+ "megadamage": {
+ "value": 0,
+ "max": 1
+ },
+ "hardpoints": {
+ "value": 0,
+ "max": 1
+ }
+
}
}
},
@@ -278,7 +350,9 @@
"armor",
"ability",
"module",
- "condition"
+ "condition",
+ "crew",
+ "repair"
],
"templates": {
"base": {
@@ -298,7 +372,9 @@
"base"
],
"rank": "Trained",
- "bonus": 10
+ "bonus": 10,
+ "prerequisite_ids": [],
+ "class_tags": []
},
"weapon": {
"templates": [
@@ -357,6 +433,20 @@
"text": "An Ability",
"roll": ""
},
+ "crew": {
+ "templates": [
+ "base"
+ ],
+ "text": "",
+ "job" : ""
+ },
+ "repair": {
+ "templates": [
+ "base"
+ ],
+ "quantity": 1,
+ "major": false
+ },
"module": {
"templates": [
"base"
diff --git a/templates/actor/actor-sheet.html b/templates/actor/actor-sheet.html
index 8d12599..495de7c 100644
--- a/templates/actor/actor-sheet.html
+++ b/templates/actor/actor-sheet.html
@@ -599,9 +599,9 @@
{{weapon.name}}
{{#if weapon.system.antiArmor}}
- {{weapon.system.damage}} (AA)
+ {{weapon.system.damage}} (AA)
{{else}}
- {{weapon.system.damage}}
+ {{weapon.system.damage}}
{{/if}}
{{#if weapon.system.useAmmo}}
{{weapon.system.ammo}}
diff --git a/templates/actor/creature-sheet.html b/templates/actor/creature-sheet.html
index 12ef992..cc33fec 100644
--- a/templates/actor/creature-sheet.html
+++ b/templates/actor/creature-sheet.html
@@ -183,7 +183,7 @@
{{weapon.name}}
- {{weapon.system.damage}}
+ {{weapon.system.damage}}
{{#if weapon.system.useAmmo}}
{{weapon.system.ammo}}
{{else}}
diff --git a/templates/actor/ship-sheet-sbt.html b/templates/actor/ship-sheet-sbt.html
new file mode 100644
index 0000000..861f5c2
--- /dev/null
+++ b/templates/actor/ship-sheet-sbt.html
@@ -0,0 +1,561 @@
+
\ No newline at end of file
diff --git a/templates/chat/itemRoll.html b/templates/chat/itemRoll.html
index 1eee8dc..e08d7fe 100644
--- a/templates/chat/itemRoll.html
+++ b/templates/chat/itemRoll.html
@@ -4,10 +4,8 @@
- {{#if (compare 'str' item.system.description '===' '
Patch
')}}
-
PATCH
- {{else if (compare 'str' item.system.description '===' '
Trinket
')}}
-
TRINKET
+ {{#if swapNameDesc}}
+
{{swapName}}
{{else}}
{{#if (compare 'int' item.name.length '>=' 22)}}
{{item.name}}
@@ -57,12 +55,22 @@
{{/if}}
- {{#if (compare 'str' item.system.description '===' '
Trinket
')}}
+ {{#if swapNameDesc}}
- {{else if (compare 'str' item.system.description '===' '
Patch
')}}
+ {{else if (compare 'str' item.system.type '===' 'repair')}}
+
+ {{#if item.system.major}}
+
Major Repair
+ {{else}}
+
Minor Repair
+ {{/if}}
+
+
+
+
diff --git a/templates/chat/rollCheck.html b/templates/chat/rollCheck.html
index b61fbee..25ec969 100644
--- a/templates/chat/rollCheck.html
+++ b/templates/chat/rollCheck.html
@@ -9,18 +9,47 @@
{{/if}}
- {{{parsedRollResult.outcomeHtml}}}
-
-
- {{#if (compare 'int' skillValue '>' 0)}}
- You {{{outcomeVerb}}} less than your
{{{attribute}}} plus
{{{skill}}} skill bonus.
- {{else}}
- You {{{outcomeVerb}}} less than your
{{{attribute}}}.
- {{/if}}
+ {{#if (compare 'str' specialRoll '!==' 'damage')}}
+ {{{parsedRollResult.outcomeHtml}}}
+
+
+ {{#if (compare 'int' parsedRollResult.total '>=' 90)}}
+ You rolled 90 or higher, which is always considered a failure.
+ {{else}}
+ {{#if (compare 'int' skillValue '>' 0)}}
+ You {{{outcomeVerb}}} less than your {{{attribute}}} plus {{{skill}}} skill bonus.
+ {{else}}
+ You {{{outcomeVerb}}} less than your {{{attribute}}}.
+ {{/if}}
+ {{/if}}
+
-
- {{{parsedRollResult.rollHtml}}}
+ {{{parsedRollResult.rollHtml}}}
+ {{/if}}
+ {{#if (compare 'str' specialRoll '===' 'damage')}}
+
{{{flavorText}}}
+ {{#if needsDesc}}
+
+
+
+
+
{{{weapon.system.description}}}
+ {{#if woundEffect}}
+
+
Wound Effect
+
+ {{{woundEffect}}}
+
+ {{/if}}
+ {{/if}}
+
+
+ {{else}}
{{#if parsedRollResult.success}}
{{#if weapon}}
{{{flavorText}}}
@@ -53,6 +82,7 @@
@UUID[Compendium.mosh.macros_hotbar_1e.IgWvaabVqzKDzLL4]{Make a Panic Check}
{{/if}}
{{/if}}
+ {{/if}}
diff --git a/templates/chat/rollTable.html b/templates/chat/rollTable.html
index 5dd7891..c364cae 100644
--- a/templates/chat/rollTable.html
+++ b/templates/chat/rollTable.html
@@ -12,7 +12,12 @@
{{{parsedRollResult.rollHtml}}}
{{#if secondRoll}}
-
Rolling for panic effect...
+ {{#if (compare 'str' specialRoll '===' 'panicCheck')}}
+
Rolling for panic effect...
+ {{/if}}
+ {{#if (compare 'str' specialRoll '===' 'maintenanceCheck')}}
+
Rolling for maintenance issue...
+ {{/if}}
{{{parsedRollResult2.rollHtml}}}
{{/if}}
@@ -20,24 +25,29 @@
{{{flavorText}}}
{{else}}
{{#if woundText}}
- {{{woundText}}}
+ {{{woundText}}}
{{/if}}
{{#if (compare 'int' tableResult.[0].type '===' 1)}}
-
- {{/if}}
- {{#each tableResult}}
- {{#if (compare 'int' this.type '===' 0)}}
- {{{this.text}}}
- {{/if}}
- {{#if (compare 'int' this.type '===' 1)}}
+
+ {{#each tableResult}}
-
+ {{/each}}
+
+ {{/if}}
+ {{#if (compare 'int' tableResult.[0].type '===' 0)}}
+ {{#if tableResultEdited}}
+ {{{tableResultEdited}}}{{{tableResultFooter}}}
+ {{else}}
+ {{{tableResult.[0].text}}}{{{tableResultFooter}}}
+ {{/if}}
+ {{/if}}
+ {{#if (compare 'str' specialRoll '===' 'maintenanceCheck')}}
+ {{#if critFail}}
+
@UUID[Compendium.mosh.macros_hotbar_1e.IgWvaabVqzKDzLL4]{Make a Panic Check}
{{/if}}
- {{/each}}
- {{#if (compare 'int' tableResult.[0].type '===' 1)}}
-
{{/if}}
{{/if}}
diff --git a/templates/dialogs/settings-rolltableconfig-dialog.html b/templates/dialogs/settings-rolltableconfig-dialog.html
new file mode 100644
index 0000000..2e089cf
--- /dev/null
+++ b/templates/dialogs/settings-rolltableconfig-dialog.html
@@ -0,0 +1,119 @@
+