-
{{name}}{{#SkillName}} *for* {{SkillName}}{{/SkillName}}
{{#Check}}
Check: {{computed::Roll}}
-
Target: {{Target}}
- {{#rollBetween() computed::Roll 0 Target }}
-
Result: Success
- {{/rollBetween() computed::Roll 0 Target }}
- {{#rollGreater() computed::Roll Target}}
-
Result: Failure
- {{/rollGreater() computed::Roll Target}}
+ {{#Target}}
+
Target: {{Target}}
+ {{#rollBetween() computed::Roll 0 Target }}
+
Result: Success
+ {{/rollBetween() computed::Roll 0 Target }}
+ {{#rollGreater() computed::Roll Target}}
+
Result: Failure
+ {{/rollGreater() computed::Roll Target}}
+ {{/Target}}
{{/Check}}
{{#computed::Status}}
{{#rollTotal() computed::Status 0 }}
@@ -521,7 +947,7 @@ on("sheet:opened", function(eventInfo){
getAttrs(["setupDone"], function(pvalue) {
- console.log("Hello there");
+ console.log("Greetings");
let SetupDone=parseInt(pvalue.setupDone);
console.log("setupdone: "+SetupDone );
@@ -533,71 +959,107 @@ on("sheet:opened", function(eventInfo){
});
});
-on("change:initiative", function(eventInfo) {
+on("change:initiative_current", function(eventInfo) {
let TriggerName = eventInfo.triggerName;
let Name = eventInfo.triggerName.substring(8);
let Initiative = parseInt(eventInfo.newValue);
- console.log(" TriggerName: " + TriggerName);
- console.log(" Name: " + Name);
+ //console.log(" TriggerName: " + TriggerName);
+ //console.log(" Name: " + Name);
//console.log(" eventInfo: " + JSON.stringify(eventInfo));
- console.log(" New Initiative: " + Initiative);
+ //console.log(" New Initiative: " + Initiative);
let Actions = Math.floor(Initiative/10) + 1;
- console.log(" Actions: " + Actions);
+ //console.log(" Actions: " + Actions);
setAttrs({
actions: Actions
});
});
-
-on("clicked:combat clicked:drive clicked:tech clicked:street clicked:medical clicked:psi", function(eventInfo) {
+on("change:lawmaster_initiative", function(eventInfo) {
+ let TriggerName = eventInfo.triggerName;
+ let Name = eventInfo.triggerName.substring(8);
+ let Initiative = parseInt(eventInfo.newValue);
+
+
+ let Actions = Math.floor(Initiative/10) + 1;
+
+ setAttrs({
+ lawmaster_actions: Actions
+ });
+});
+on("change:npc_initiative_current", function(eventInfo) {
+ let TriggerName = eventInfo.triggerName;
+ let Name = eventInfo.triggerName.substring(8);
+ let Initiative = parseInt(eventInfo.newValue);
+
+
+ let Actions = Math.floor(Initiative/10) + 1;
+
+ setAttrs({
+ npc_actions: Actions
+ });
+});
+
+on("clicked:initiative clicked:combat clicked:drive clicked:tech clicked:street clicked:medical clicked:psi clicked:d100 clicked:d6", function(eventInfo) {
let TriggerName = eventInfo.triggerName;
let Name = eventInfo.triggerName.substring(8);
- console.log(" TriggerName: " + TriggerName);
- console.log(" Name: " + Name);
- console.log(" eventInfo: " + JSON.stringify(eventInfo));
+ //console.log(" TriggerName: " + TriggerName);
+ //console.log(" Name: " + Name);
+ //console.log(" eventInfo: " + JSON.stringify(eventInfo));
- getAttrs(["combat_skill", "drive_skill","tech_skill","street_skill","medical_skill", "psi_skill"], function(values) {
+ getAttrs(["whisper","initiative_current","combat_skill", "drive_skill","tech_skill","street_skill","medical_skill", "psi_skill", "roll_description"], function(values) {
+ let WhisperCheck = parseInt(values.whisper)||0;
+ let Initiative = parseInt(values.initiative_current)||0;
let Combat = parseInt(values.combat_skill)||0;
let Drive = parseInt(values.drive_skill)||0;
let Tech = parseInt(values.tech_skill)||0;
let Street = parseInt(values.street_skill)||0;
let Medical = parseInt(values.medical_skill)||0;
let Psi = parseInt(values.psi_skill)||0;
-
-
+ let JudgeDescription = values.roll_description;
+
+ let Whisper = "";
+ if (WhisperCheck == 1) {
+ Whisper = "/w gm ";
+ }
let AttributeName = "No Name";
let Target = 0;
switch (Name) {
+ case "initiative": AttributeName = "Initiative"; Target = Initiative ; break;
case "combat": AttributeName = "Combat"; Target = Combat ; break;
case "drive": AttributeName = "Drive"; Target = Drive; break;
case "tech": AttributeName = "Tech"; Target = Tech /*+ MeleeBonus*/; break;
case "street": AttributeName = "Street"; Target = Street /*+ AgilityBonus*/; break;
case "medical": AttributeName = "Medical"; Target = Medical /*+ ReasoningBonus*/; break;
case "psi": AttributeName = "Psi"; Target = Psi /*+ RangedBonus*/; break;
+ case "d100": AttributeName = "d100"; Target = 0; Description = JudgeDescription; break;
+ case "d6": AttributeName = "d6"; Target = 0; Description = JudgeDescription; break;
default:
AttributeName = "No Name";
}
- console.log(" Name: " + Name + " AttributeName " + AttributeName + " Target " + Target);
+ //console.log(" Name: " + Name + " AttributeName " + AttributeName + " Target " + Target);
- const rollBase = "&{template:check} {{name=@{character_name} *for* " + AttributeName + "}} {{Check=[[1]]}} {{Status=[[0]]}} {{Roll=[[1d100]]}} {{Target=[["+Target+"]]}}";
- console.log(" rollBase = " + rollBase);
+ let rollBase = Whisper + "&{template:check} {{name=@{character_name} *for* " + AttributeName + "}} {{Check=[[1]]}} {{Status=[[0]]}} {{Roll=[[1d100]]}} {{Target=[["+Target+"+?{Modifier | 0}]]}}";
+ if (Target == 0) {
+ rollBase = Whisper+"&{template:check} {{name=@{character_name} *for* " + AttributeName + "}} {{Check=[[1]]}} {{Roll=[[1"+AttributeName+"]]}} {{Description="+Description+"}}";
+ }
+ //console.log(" rollBase = " + rollBase);
startRoll(rollBase, rollResult => {
- console.log(" Roll Dice " + rollResult.results.Roll.dice );
+ //console.log(" Roll Dice " + rollResult.results.Roll.dice );
//console.log(" Roll Dice 1 " + rollResult.results.Roll.dice[0] );
let Die1 = rollResult.results.Roll.dice[0];
let Status = 0;
if ((Die1 === 1) || (Die1 === 100)) {
- console.log(" Extreme Result Detected " + Die1 );
+ //console.log(" Extreme Result Detected " + Die1 );
if (Die1 <= Target) {
Status = 1; // "Critical"
} else {
@@ -606,7 +1068,7 @@ on("clicked:combat clicked:drive clicked:tech clicked:street clicked:medical cli
}
let computed = rollResult.results.Roll.result; // Not altering total
- console.log(" Status " + Status );
+ //console.log(" Status " + Status );
finishRoll(
rollResult.rollId,
@@ -619,7 +1081,151 @@ on("clicked:combat clicked:drive clicked:tech clicked:street clicked:medical cli
});
});
+on("clicked:lawmaster_initiative clicked:lawmaster_combat clicked:lawmaster_drive clicked:lawmaster_tech", function(eventInfo) {
+ let TriggerName = eventInfo.triggerName;
+ let Name = eventInfo.triggerName.substring(8);
+ //console.log(" TriggerName: " + TriggerName);
+ //console.log(" Name: " + Name);
+ //console.log(" eventInfo: " + JSON.stringify(eventInfo));
+
+ getAttrs(["lawmaster_initiative","lawmaster_combat_skill", "lawmaster_drive_skill","lawmaster_tech_skill"], function(values) {
+ let Initiative = parseInt(values.lawmaster_initiative)||0;
+ let Combat = parseInt(values.lawmaster_combat_skill)||0;
+ let Drive = parseInt(values.lawmaster_drive_skill)||0;
+ let Tech = parseInt(values.lawmaster_tech_skill)||0;
+
+ let AttributeName = "No Name";
+ let Target = 0;
+
+ switch (Name) {
+ case "lawmaster_initiative": AttributeName = "Initiative"; Target = Initiative ; break;
+ case "lawmaster_combat": AttributeName = "Combat"; Target = Combat ; break;
+ case "lawmaster_drive": AttributeName = "Drive"; Target = Drive; break;
+ case "lawmaster_tech": AttributeName = "Tech"; Target = Tech /*+ MeleeBonus*/; break;
+ default:
+ AttributeName = "No Name";
+ }
+
+ //console.log(" Name: " + Name + " AttributeName " + AttributeName + " Target " + Target);
+
+
+ const rollBase = "&{template:check} {{name=@{character_name}'s Lawmaster *for* " + AttributeName + "}} {{Check=[[1]]}} {{Status=[[0]]}} {{Roll=[[1d100]]}} {{Target=[["+Target+"+?{Modifier | 0}]]}}";
+ //console.log(" rollBase = " + rollBase);
+
+ startRoll(rollBase, rollResult => {
+
+ //console.log(" Roll Dice " + rollResult.results.Roll.dice );
+ //console.log(" Roll Dice 1 " + rollResult.results.Roll.dice[0] );
+ let Die1 = rollResult.results.Roll.dice[0];
+ let Status = 0;
+ if ((Die1 === 1) || (Die1 === 100)) {
+ //console.log(" Extreme Result Detected " + Die1 );
+ if (Die1 <= Target) {
+ Status = 1; // "Critical"
+ } else {
+ Status = 2; // "Fumble"
+ }
+ }
+
+ let computed = rollResult.results.Roll.result; // Not altering total
+ //console.log(" Status " + Status );
+
+ finishRoll(
+ rollResult.rollId,
+ {
+ Status: Status
+ }
+ );
+ });
+
+ });
+});
+
+on("clicked:npc_initiative clicked:npc_combat clicked:npc_drive clicked:npc_tech clicked:npc_street clicked:npc_medical clicked:npc_psi clicked:surrender clicked:npc_d100 clicked:npc_d6", function(eventInfo) {
+ let TriggerName = eventInfo.triggerName;
+ let Name = eventInfo.triggerName.substring(8);
+
+ //console.log(" TriggerName: " + TriggerName);
+ //console.log(" Name: " + Name);
+ //console.log(" eventInfo: " + JSON.stringify(eventInfo));
+
+ getAttrs(["npc_whisper","npc_initiative_current","npc_combat_skill", "npc_drive_skill","npc_tech_skill","npc_street_skill","npc_medical_skill", "npc_psi_skill", "npc_surrender_chance","npc_roll_description"], function(values) {
+ let WhisperCheck = parseInt(values.npc_whisper)||0;
+ let Initiative = parseInt(values.npc_initiative_current)||0;
+ let Combat = parseInt(values.npc_combat_skill)||0;
+ let Drive = parseInt(values.npc_drive_skill)||0;
+ let Tech = parseInt(values.npc_tech_skill)||0;
+ let Street = parseInt(values.npc_street_skill)||0;
+ let Medical = parseInt(values.npc_medical_skill)||0;
+ let Psi = parseInt(values.npc_psi_skill)||0;
+ let Surrender = parseInt(values.npc_surrender_chance)||0;
+ let NpcDescription = values.npc_roll_description;
+
+ let Whisper = "";
+ if (WhisperCheck == 1) {
+ Whisper = "/w gm ";
+ }
+
+ let AttributeName = "No Name";
+ let Target = 0;
+ let Description = "";
+
+ switch (Name) {
+ case "npc_initiative": AttributeName = "Initiative"; Target = Initiative ; break;
+ case "npc_combat": AttributeName = "Combat"; Target = Combat ; break;
+ case "npc_drive": AttributeName = "Drive"; Target = Drive; break;
+ case "npc_tech": AttributeName = "Tech"; Target = Tech ; break;
+ case "npc_street": AttributeName = "Street"; Target = Street; break;
+ case "npc_medical": AttributeName = "Medical"; Target = Medical; break;
+ case "npc_psi": AttributeName = "Psi"; Target = Psi ; break;
+ case "surrender": AttributeName = "Surrender"; Target = Surrender; break;
+ case "npc_d100": AttributeName = "d100"; Target = 0; Description = NpcDescription; break;
+ case "npc_d6": AttributeName = "d6"; Target = 0; Description = NpcDescription; break;
+ default:
+ AttributeName = "No Name";
+ }
+
+ //console.log(" Name: " + Name + " AttributeName " + AttributeName + " Target " + Target);
+ //console.log(" Description - NPC: " + NpcDescription );
+
+
+ let rollBase = Whisper+"&{template:check} {{name=@{npc_name} *for* " + AttributeName + "}} {{Check=[[1]]}} {{Status=[[0]]}} {{Roll=[[1d100]]}} {{Target=[["+Target+"+?{Modifier | 0}]]}}";
+ if (Target == 0) {
+ rollBase = Whisper+"&{template:check} {{name=@{npc_name} *for* " + AttributeName + "}} {{Check=[[1]]}} {{Roll=[[1"+AttributeName+"]]}} {{Description="+Description+"}}";
+ }
+ //const rollBase = Whisper+"&{template:check} {{name=@{npc_name} *for* " + AttributeName + "}} {{Check=[[1]]}} {{Status=[[0]]}} {{Roll=[[1d100]]}} {{Target=[["+Target+"+?{Modifier | 0}]]}}";
+ //console.log(" rollBase = " + rollBase);
+
+ startRoll(rollBase, rollResult => {
+
+ //console.log(" Roll Dice " + rollResult.results.Roll.dice );
+ //console.log(" Roll Dice 1 " + rollResult.results.Roll.dice[0] );
+ let Die1 = rollResult.results.Roll.dice[0];
+ let Status = 0;
+ if ((Die1 === 1) || (Die1 === 100)) {
+ //console.log(" Extreme Result Detected " + Die1 );
+ if (Die1 <= Target) {
+ Status = 1; // "Critical"
+ } else {
+ Status = 2; // "Fumble"
+ }
+ }
+
+ let computed = rollResult.results.Roll.result; // Not altering total
+ //console.log(" Status " + Status );
+
+ finishRoll(
+ rollResult.rollId,
+ {
+ Status: Status
+ }
+ );
+ });
+
+ });
+});
+/*
on('clicked:initiative', (info) => {
startRoll("&{template:initiative} {{name=@{character_name}}} {{roll1=[[1d10+@{agility_bonus} &{tracker}]]}}", (results) => {
const total = results.results.roll1.result;
@@ -635,4 +1241,5 @@ on('clicked:initiative', (info) => {
);
});
});
+*/
diff --git a/Judge Dredd/sheet.json b/Judge Dredd/sheet.json
index 984dd5ccad..7343693f27 100644
--- a/Judge Dredd/sheet.json
+++ b/Judge Dredd/sheet.json
@@ -4,6 +4,6 @@
"authors": "Vialmada",
"preview": "JudgeDredd.png",
"roll20userid": "6040293",
- "instructions": "# JudgeDredd is an **unofficial** character sheet for the classic Judge Dredd RPG. If you have any questions or comments, please contact Vialmada.\n",
+ "instructions": "## Judge Dredd is an **unofficial** character sheet for the classic Judge Dredd RPG. If you have any questions or comments, please contact Vialmada(6040293).\n",
"legacy": false
}
\ No newline at end of file
diff --git a/Judge Dredd/translation.json b/Judge Dredd/translation.json
index 9f068b88ce..ce5eeb0c9e 100644
--- a/Judge Dredd/translation.json
+++ b/Judge Dredd/translation.json
@@ -1,9 +1,25 @@
{
+ "judge-c":"Judge",
+ "lawmaster-c":"Lawmaster",
+ "lawmaster-u":"LAWMASTER",
+ "lawmasterRecordSheet-u":"LAWMASTER RECORD SHEET",
+ "lawgiver-u":"LAWGIVER",
+ "npc-u":"NPC",
+ "NPC RECORD SHEET":"NPC RECORD SHEET",
"judgeRecordSheet-u":"JUDGE RECORD SHEET",
"player:-u":"PLAYER:",
"badge:-u":"BADGE:",
"gender:-u":"GENDER:",
"handed:-u":"HANDED:",
+ "name:-u":"NAME:",
+ "type:-u":"TYPE:",
+ "surrender:-u":"SURRENDER:",
+ "surrenderChance-c":"Surrender Chance",
+ "surrenderCondition-c":"Surrender Condition",
+ "whisper?-c":"Whisper?",
+ "d100":"d100",
+ "d6":"d6",
+ "rollDescription-c":"Roll Description",
"strength-u":"STRENGTH",
"original":"original",
"present":"present",
@@ -16,10 +32,12 @@
"PSISkill-u":"PSI SKILL",
"actions-u":"ACTIONS",
"phases-u":"PHASES",
+ "in PHASES":"in PHASES",
"lawgiver-u":"LAWGIVER",
"lawgiver:-c":"Lawgiver:",
"Tick off shots as they are fired.":"Tick off shots as they are fired.",
"magazine-u":"MAGAZINE",
+ "magazine-c":"Magazine",
"magazines-c":"Magazines",
"chamber1-u":"CHAMBER 1",
"chamber2-u":"CHAMBER 2",
@@ -33,6 +51,7 @@
"location-c":"Location",
"result-c":"Result",
"armour-c":"Armour",
+ "armour-u":"ARMOUR",
"head-c":"Head",
"chest-c":"Chest",
"abdomen-c":"Abdomen",
@@ -40,7 +59,7 @@
"leftArm-c":"Left Arm",
"rightLeg":"Right Leg",
"leftLeg":"Left Leg",
-
+ "":"",
"handToHandCombat-u":"HAND TO HAND COMBAT",
"gun-c":"Gun",
"beltPouch-c":"Belt Pouch",
@@ -57,6 +76,41 @@
"glovePouches:-c":"Glove Pouches:",
"heatSeekerShells-c":"Heat Seeker Shells",
"hypnoShells-c":"Hypno Shells",
+ "":"",
+
+ "randomHit-u":"RANDOM HIT",
+ "targetPoint-u":"TARGET POINT",
+ "size-u":"SIZE",
+ "computerUnit-u":"COMPUTER UNIT",
+ "stowage-u":"STOWAGE",
+ "bikeCannon-u":"BIKE CANNON",
+ "bikeCannon-c":"Bike Cannon",
+ "bikeComputer-c":"Bike Computer",
+ "bikeCannonMagazines-c":"Bike Cannon Magazines",
+ "barrel1-c":"Barrel 1",
+ "barrel2-c":"Barrel 2",
+ "stowage-u":"STOWAGE",
+ "equipment-u":"EQUIPMENT",
+ "equipment:-c":"Equipment:",
+ "ammunition:-c":"Ammunition:",
+ "Lawgiver GP Magazines":"Lawgiver GP Magazines",
+ "scatterGunShells-c":"Scatter Gun Shells",
+ "scatterGunStrummShells-c":"Scatter Gun Strumm Shells",
+ "cling-net-c":"Cling-net",
+ "handCuffs-c":"Hand Cuffs",
+ "medi-pack-c":"Medi-pack",
+ "rad-suit-c":"Rad-suit",
+ "respirator-c":"Respirator",
+ "strummGasGrenades-c":"Strumm Gas Grenades",
+ "Non-Vital Component Spares for:":"Non-Vital Component Spares for:",
+ "cyclopsLaser-c":"Cyclops Laser",
+ "lawgiverPistol-c":"Lawgiver Pistol",
+ "communicationsUnit-c":"Communications Unit",
+ "Replacement Spares for:":"Replacement Spares for:",
+ "headlamps-c":"Headlamps",
+ "infra-RedLamps-c":"Infra-Red Lamps",
+ "vocalSynthesiser-c":"Vocal Synthesiser",
+ "":"",
"movement-c":"Movement",
"specialisms-u":"SPECIALISMS",
@@ -67,10 +121,11 @@
"addMeleeDamageBonus-c":"Add Melee Damage Bonus",
"addRangeDamageBonus-c":"Add Range Damage Bonus",
"effectDescription-c":"Effect Description",
- "equipment-u":"EQUIPMENT",
"item-c":"Item",
"location-c":"Location",
"currency-u":"CURRENCY",
+ "":"",
+
"check:-c":"Check: ",
"target:-c":"Target: ",