diff --git a/Judge Dredd/JudgeDredd.css b/Judge Dredd/JudgeDredd.css index 05559367c5..e9de03fc66 100644 --- a/Judge Dredd/JudgeDredd.css +++ b/Judge Dredd/JudgeDredd.css @@ -1,14 +1,32 @@ @import url("https://fonts.googleapis.com/css2?family=Barlow+Condensed:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Russo+One&display=swap"); -.charsheet { - /* background: white url("https://github.com/WilliamBarkerCoC/Public-Domain-Images/blob/main/JudgeDredd_p1.png?raw=true") no-repeat 0px 0px scroll;*/ + +.charsheet div.sheet-page1 { + opacity: 1.0; border: 2px solid Black; width: 820px; min-width: 820px; - min-height: 1110px; + min-height: 1000px; font-family: "Courier New, serif"; } +.charsheet div.sheet-page2 { + opacity: 1.0; + border: 2px solid Black; + width: 820px; + min-width: 820px; + min-height: 1000px; + font-family: "Courier New, serif"; +} + +.charsheet div.sheet-page3 { + opacity: 1.0; + border: 2px solid Black; + width: 820px; + min-width: 820px; + min-height: 800px; + font-family: "Courier New, serif"; +} .charsheet .sheet-container1 { display: grid; grid-template-columns: repeat(3, 1fr); @@ -67,11 +85,7 @@ margin: 4px 0px 0px 0px; padding: 8px 0px 0px 0px;" } -/* -.charsheet .sheet-profileLabel:hover{ - background-color: rgba(255,255,0,0.5); -} -*/ + .charsheet .sheet-profileInput{ display: inline-block; vertical-align: bottom; @@ -80,7 +94,7 @@ height: 30px ; font-family: "Barlow Condensed"; font-weight: 500; - font-size: 22px; + font-size: 18px; background-color: transparent; margin: 0px 0px 0px -2px; text-align: left; @@ -240,10 +254,6 @@ } - - - - /* Radiobox Scott/Dana CSS Wizardry */ .radiocontainer{ /* style the layout and whatnot of the radio container as you need to */ @@ -404,17 +414,54 @@ } .sheet-rolltemplate-check .inlinerollresult.fullcrit { - color: #3FB315; + color: #B31515; /* Red */ border: none; } .sheet-rolltemplate-check .inlinerollresult.fullfail { - color: #B31515; + color: #3FB315; /* Green */ border: none; } .sheet-rolltemplate-check .inlinerollresult.importandivoll { - color: #4A57ED; + color: #4A57ED; /* Blue */ border: none; } -/* End templates*/ \ No newline at end of file +/* End templates*/ + + +/* TAB HANDLING */ + +.charsheet input[type=radio].sheet-page1, +.charsheet input[type=radio].sheet-page2, +.charsheet input[type=radio].sheet-page3 { + display: none; + float: left; +} +.charsheet input[type=radio].sheet-page1 + label, +.charsheet input[type=radio].sheet-page2 + label, +.charsheet input[type=radio].sheet-page3 + label { + content: ''; + border: solid 1px black; + background: white; + color: black; + font-weight: bold; + width: auto; + text-align: center; + padding: 0 2px; + float: left; +} +.charsheet input[type=radio]:hover + label{ + background: #990000; +} +.charsheet input[type=radio]:checked + label{ + background: black; + color: white; +} +.charsheet div.sheet-page1, .charsheet div.sheet-page2, .charsheet div.sheet-page3 { + display: none; +} +.charsheet input.sheet-page1:checked ~ div.sheet-page1, .charsheet input.sheet-page2:checked ~ div.sheet-page2, +.charsheet input.sheet-page3:checked ~ div.sheet-page3 { + display: block; +} diff --git a/Judge Dredd/JudgeDredd.html b/Judge Dredd/JudgeDredd.html index c37a0f19e9..eee509b91b 100644 --- a/Judge Dredd/JudgeDredd.html +++ b/Judge Dredd/JudgeDredd.html @@ -1,25 +1,44 @@ + + + + + + -
- + +
+ +
-
+
- Judge's Badge + Judge Badge
-
- - +
+ + - - + +
+ +
+ + + + + +
+
@@ -39,14 +58,15 @@
- -
+ +
- +
-
+
- +
@@ -78,32 +98,39 @@ - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + @@ -111,32 +138,39 @@ - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + +
@@ -152,7 +186,7 @@
- +
@@ -171,7 +205,7 @@
- +
@@ -194,7 +228,7 @@
- +
@@ -213,7 +247,7 @@
- +
@@ -236,7 +270,7 @@
- +
@@ -255,7 +289,7 @@
- +
@@ -278,7 +312,7 @@
- +
@@ -297,7 +331,7 @@
- +
@@ -320,7 +354,7 @@
- +
@@ -339,7 +373,7 @@
- +
@@ -360,7 +394,7 @@
-
+
@@ -438,6 +472,20 @@
+ + + + + + + + + + + + + +
@@ -455,6 +503,383 @@
+ + +
+ +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + +
+
+ + +
+
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + + + + + + + + + + +
+
+ + +
+ +
+
+ +
+
+ +
+
+ + + + + + + + + + + + + +
+ +
+ + + + + +
+ +
+
+ +
+ + +
+
+ + +
+ + + + +
+
+ +
+ + +
+
+ + +
+ + + + +
+
+ + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + +
+
+ + +
+
+
+
@@ -466,18 +891,19 @@
-

{{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: ",