From 29ef62608f9a6bcb0782cdb8d988502542b296ba Mon Sep 17 00:00:00 2001 From: TheLastScrub <67403321+TheLastScrub@users.noreply.github.com> Date: Tue, 4 Jun 2024 07:49:15 -0700 Subject: [PATCH 01/19] V12 compatibility Fixes #115 --- css/deltagreen.css | 6 ++++ module/actor/actor-sheet.js | 2 +- module/actor/actor.js | 12 ++++++-- module/other/stat-parser-macro.js | 47 +++++++++++++++++++++++++------ templates/actor/actor-sheet.html | 4 +-- 5 files changed, 57 insertions(+), 14 deletions(-) diff --git a/css/deltagreen.css b/css/deltagreen.css index d52ca1d..3c6cf23 100644 --- a/css/deltagreen.css +++ b/css/deltagreen.css @@ -1106,3 +1106,9 @@ input.item-sheet-short-input { padding-bottom: 10px; padding-top: 10px; } + + +.stat-block-input{ + min-height: 300px; + resize: none; +} \ No newline at end of file diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 3481e56..36c2ea2 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -982,7 +982,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { roll.options.rollMode = dialogData.rollMode; } // Evaluate the roll. - await roll.evaluate({ async: true }); + await roll.evaluate(); // Send the roll to chat. roll.toChat(); } diff --git a/module/actor/actor.js b/module/actor/actor.js index 4240a6c..e0b3942 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -74,9 +74,15 @@ export default class DeltaGreenActor extends Actor { system.wp.max = system.statistics.pow.value; - system.health.max = Math.ceil( - (system.statistics.con.value + system.statistics.str.value) / 2, - ); + try{ + system.health.max = Math.ceil( + (system.statistics.con.value + system.statistics.str.value) / 2, + ); + } + catch(ex){ + system.health.max = 10; + } + system.skills.ritual = { label: "Ritual", diff --git a/module/other/stat-parser-macro.js b/module/other/stat-parser-macro.js index c2b2161..ac67934 100644 --- a/module/other/stat-parser-macro.js +++ b/module/other/stat-parser-macro.js @@ -1,5 +1,24 @@ /* global Dialog Actor */ +function GetNotesFromInput(inputText){ + const matchStr = '(?:ATTACKS:[\\S\\s]*?\\.\\n)([\\S\\s]*)'; + const re = new RegExp(matchStr, "gi"); + const results = inputText.match(re); + let notes = ""; + + try { + if (results != null && results.length > 0) { + notes = results[0]; + notes = notes.replace("\n", " ") + } + } catch (ex) { + console.log("GetNotesFromInput Error"); + console.log(ex); + } + + return notes; +} + // call this within a world as: game.deltagreen.ParseDeltaGreenStatBlock() function GetTypeSkillRatingsFromInput(inputText) { const matchStr = @@ -53,7 +72,7 @@ function GetAttributeFromInput(inputText, attribute) { } function GetSkillRatingsFromInput(inputText, skill) { - const matchStr = `(?:${skill}\\s)(\\d\\d?)`; + const matchStr = `(?:${skill}\\n?\\s?\\n?)(\\d\\d?)`; const re = new RegExp(matchStr, "i"); const results = inputText.match(re); let skillValue = 0; @@ -90,8 +109,15 @@ async function RegexParseNpcStatBlock(inputStr, actorType) { tempStr = inputStr.split(/\r?\n/); - if (tempStr.length > 1) { - [actorData.name, shortDescription] = tempStr; + if (tempStr.length > 0) { + actorData.name = tempStr[0]; + + // set the alternate description/profession/etc. + // if this doesn't exist, the next line should be the attributes starting with strength + // so if the second line starts with "STR" then just leave it be. + if (tempStr.length > 1 && tempStr[1].substring(0, 3) != "STR" && tempStr[1].substring(0, 3) != "CON" && tempStr[1].substring(0, 3) != "DEX" && tempStr[1].substring(0, 3) != "INT" && tempStr[1].substring(0, 3) != "POW" && tempStr[1].substring(0, 3) != "CHA") { + shortDescription = tempStr[1]; + } } else { actorData.name = "Unknown"; } @@ -216,7 +242,7 @@ async function RegexParseNpcStatBlock(inputStr, actorType) { failure: false, }; - // Impossible Landscapes seems to favor 'Driving' as the name for this instead for some + // Impossible Landscapes seems to favor 'Driving' as the name for this instead for some reason if (actorData.data.skills.drive.proficiency === 0) { actorData.data.skills.drive = { label: "Drive", @@ -362,6 +388,10 @@ async function RegexParseNpcStatBlock(inputStr, actorType) { actorData.data.typedSkills[`tskill_${index.toString()}`] = element; } + if(actorType === "npc" || actorType === "unnatural"){ + actorData.data.notes = GetNotesFromInput(inputStr); + } + console.log(actorData); const newActors = await Actor.createDocuments([actorData]); @@ -372,7 +402,7 @@ async function RegexParseNpcStatBlock(inputStr, actorType) { async function GetUserInput() { const content = `
- +
+
+
-
- +
`; new Dialog({ - title: "Stat Block Parser", // Change the title if you want. + title: "Stat Block Parser", content, buttons: { roll: { diff --git a/templates/actor/actor-sheet.html b/templates/actor/actor-sheet.html index 13b9c57..cc49c2d 100644 --- a/templates/actor/actor-sheet.html +++ b/templates/actor/actor-sheet.html @@ -26,7 +26,7 @@
/ - +
{{numberFormat actor.system.health.max decimals=0 sign=false}}
@@ -39,7 +39,7 @@
/ - +
{{numberFormat actor.system.wp.max decimals=0 sign=false}}
From cc603aacd772bdd393909b20f92d20cf7e50cb99 Mon Sep 17 00:00:00 2001 From: Andrew Beard Date: Fri, 7 Jun 2024 22:11:45 -0400 Subject: [PATCH 02/19] Add grid.distance and grid.units to prevent warnings on v12. The old gridDistance and gridUnits are still required until v11 compatibility is dropped. --- system.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/system.json b/system.json index df664b3..75608fc 100644 --- a/system.json +++ b/system.json @@ -144,6 +144,10 @@ "download": "https://github.com/TheLastScrub/delta-green-foundry-vtt-system-unofficial/releases/latest/download/deltagreen.zip", "gridDistance": 1, "gridUnits": "m", + "grid": { + "distance": 1, + "units": "m" + }, "primaryTokenAttribute": "health", "secondaryTokenAttribute": "wp" } From e11ef6dee834c5dd4f531c44ff602a02ec7976c6 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 00:20:45 -0400 Subject: [PATCH 03/19] use Foundry's `toMessage` function over our own custom method --- module/roll/roll.js | 56 ++++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/module/roll/roll.js b/module/roll/roll.js index 67bff8a..fb2db05 100644 --- a/module/roll/roll.js +++ b/module/roll/roll.js @@ -29,27 +29,25 @@ export class DGRoll extends Roll { /** * Simple function that actually creates the message and sends it to chat. + * We override this to have a little more control over certain aspects of the message, + * right now, its `speaker` and `rollMode`. * - * Broke this out so multiple functions can use it. - * - * @returns {Promise} - the created chat message. + * @override + * The following `@param` descriptions comes from the Foundry VTT code. + * @param {object} messageData The data object to use when creating the message + * @param {options} [options] Additional options which modify the created message. + * @param {string} [options.rollMode] The template roll mode to use for the message from CONFIG.Dice.rollModes + * @param {boolean} [options.create=true] Whether to automatically create the chat message, or only return the + * prepared chatData object. + * @returns {Promise} A promise which resolves to the created ChatMessage document if create is + * true, or the Object of prepared chatData otherwise. */ - async createMessage(content, flavor, rollMode) { - const chatData = { - speaker: ChatMessage.getSpeaker({ actor: this.actor }), - content, - flavor, - type: 5, // CHAT_MESSAGE_TYPES.ROLL, - roll: this, - rollMode, - }; - - // play the dice rolling sound, like a regular in-chat roll - AudioHelper.play( - { src: "sounds/dice.wav", volume: 0.8, autoplay: true, loop: false }, - true, - ); - return ChatMessage.create(chatData); + async toMessage(messageData = {}, { rollMode, create = true } = {}) { + messageData.speaker = ChatMessage.getSpeaker({ actor: this.actor }); + return super.toMessage(messageData, { + rollMode: this.options.rollMode || rollMode, + create, + }); } } @@ -194,9 +192,6 @@ export class DGPercentileRoll extends DGRoll { * @returns {Promise} - the created chat message. */ async toChat() { - let rollMode = - this.options.rollMode || game.settings.get("core", "rollMode"); - // if using private san rolls, must hide any SAN roll unless user is a GM const privateSanSetting = game.settings.get( "deltagreen", @@ -207,7 +202,7 @@ export class DGPercentileRoll extends DGRoll { (this.type === "sanity" || this.key === "ritual") && !game.user.isGM ) { - rollMode = "blindroll"; + this.options.rollMode = "blindroll"; } let label = `${game.i18n.localize("DG.Roll.Rolling")} ${ @@ -275,7 +270,7 @@ export class DGPercentileRoll extends DGRoll { html += `

${this.total}

`; html += `
`; - return this.createMessage(html, label, rollMode); + return this.toMessage({ content: html, flavor: label }); } /** @@ -401,8 +396,6 @@ export class DGLethalityRoll extends DGPercentileRoll { * @override */ async toChat() { - const rollMode = - this.options.rollMode || game.settings.get("core", "rollMode"); let resultString = ""; let styleOverride = ""; if (this.total <= this.target) { @@ -463,7 +456,7 @@ export class DGLethalityRoll extends DGPercentileRoll { } ${game.i18n.localize("DG.Roll.Damage")})`; html += `
`; - return this.createMessage(html, label, rollMode); + return this.toMessage({ content: html, flavor: label }); } /** @@ -520,8 +513,6 @@ export class DGDamageRoll extends DGRoll { * @override */ async toChat() { - const rollMode = - this.options.rollMode || game.settings.get("core", "rollMode"); let label = this.formula; try { label = `${game.i18n.localize("DG.Roll.Rolling")} ${game.i18n @@ -533,7 +524,7 @@ export class DGDamageRoll extends DGRoll { // console.log(ex); label = `Rolling DAMAGE for ${label.toUpperCase()}`; } - return this.createMessage(this.total, label, rollMode); + return this.toMessage({ content: this.total, flavor: label }); } async showDialog() { @@ -599,9 +590,6 @@ export class DGSanityDamageRoll extends DGRoll { * @override */ async toChat() { - const rollMode = - this.options.rollMode || game.settings.get("core", "rollMode"); - const [lowDie, highDie] = this.terms[0].terms.map((formula) => { return Roll.parse(formula)[0] || { faces: parseInt(formula), number: 1 }; }); @@ -648,7 +636,7 @@ export class DGSanityDamageRoll extends DGRoll { html += ` `; html += `

${lowResult} / ${highResult}

`; html += ``; - return this.createMessage(html, flavor, rollMode); + return this.toMessage({ content: html, flavor }); } /** From 3bf67b6efca087d98da62d31050e273d5c02bbca Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 01:23:04 -0400 Subject: [PATCH 04/19] move from DG.ItemTypes to Foundry-compatible TYPES.Item for localization --- lang/ca.json | 15 +- lang/de.json | 15 +- lang/en.json | 21 +- lang/es.json | 31 +-- lang/fr.json | 479 ++++++++++++++++++------------------ lang/ja.json | 15 +- lang/pt-BR.json | 15 +- module/actor/actor-sheet.js | 9 +- 8 files changed, 299 insertions(+), 301 deletions(-) diff --git a/lang/ca.json b/lang/ca.json index 0261689..6552316 100644 --- a/lang/ca.json +++ b/lang/ca.json @@ -134,13 +134,6 @@ "DG.Bonds.Score": "Puntuació", "DG.Bonds.NewBond": "Nou vincle", - "DG.ItemTypes.weapon": "Arma", - "DG.ItemTypes.armor": "Armadura", - "DG.ItemTypes.motivation": "Motivació", - "DG.ItemTypes.bond": "Vincle", - "DG.ItemTypes.gear": "Equip", - "DG.ItemTypes.NewPrefix": "Nou ", - "DG.Tooltip.HP": "Punts de vida, un personatge cau inconscient ales 2 PV i mor amb 0 PV.", "DG.Tooltip.MaximumHP": "La salut màxima és el promig de FOR + CON, arrodonint avall.", "DG.Tooltip.WP": "Els punts de voluntat són el combustible mental. Els necessiten per tirar endavant tot i l'esgotament o le situacions mentals greus. Consulta la pàgina 47 del manual de l'agent per més detalls.", @@ -262,5 +255,11 @@ "DG.ItemWindow.Weapons.CustomSkillTarget": "Target", "DG.ItemWindow.Weapons.SkillModifier": "Skill Modifier", - "DG.ItemWindow.Custom": "Custom" + "DG.ItemWindow.Custom": "Custom", + + "TYPES.Item.weapon": "Arma", + "TYPES.Item.armor": "Armadura", + "TYPES.Item.motivation": "Motivació", + "TYPES.Item.bond": "Vincle", + "TYPES.Item.gear": "Equip" } diff --git a/lang/de.json b/lang/de.json index 6251b60..ca8c35e 100644 --- a/lang/de.json +++ b/lang/de.json @@ -149,13 +149,6 @@ "DG.Bonds.Score": "Wert", "DG.Bonds.NewBond": "Neue Bindung", - "DG.ItemTypes.weapon": "Waffe", - "DG.ItemTypes.armor": "Rüstung", - "DG.ItemTypes.motivation": "Motivation", - "DG.ItemTypes.bond": "Bindung", - "DG.ItemTypes.gear": "Ausrüstung", - "DG.ItemTypes.NewPrefix": "Neu ", - "DG.Tooltip.HP": "Gesundheit. Ein Charakter wird bei 2 Gesundheit bewusstlos und stirbt bei 0 Gesundheit.", "DG.Tooltip.MaximumHP": "Die maximale Gesundheit ist der Durchschnitt von STR + KON, aufgerundet.", "DG.Tooltip.WP": "Die Punkte in WILLE sind mentaler Treibstoff. Agenten brauchen WILLE, um trotz Erschöpfung oder geistig anstrengender Situationen weiterzumachen. Auf Seite 47 des Agentenhandbuchs findest du weitere Informationen ('Willpower').", @@ -278,5 +271,11 @@ "DG.ItemWindow.Weapons.CustomSkillTarget": "Ziel", "DG.ItemWindow.Weapons.SkillModifier": "Fertigkeitsmodifikator", - "DG.ItemWindow.Custom": "Benutzerdefiniert" + "DG.ItemWindow.Custom": "Benutzerdefiniert", + + "TYPES.Item.weapon": "Waffe", + "TYPES.Item.armor": "Rüstung", + "TYPES.Item.motivation": "Motivation", + "TYPES.Item.bond": "Bindung", + "TYPES.Item.gear": "Ausrüstung" } diff --git a/lang/en.json b/lang/en.json index 0939f8e..18e69be 100644 --- a/lang/en.json +++ b/lang/en.json @@ -5,6 +5,7 @@ "DG.Luck": "Luck", "DG.FallbackText.ProfessionAndOrRank": "PROFESSION (RANK IF APPLICABLE)", + "DG.FallbackText.newItem": "New {type}", "DG.Skills.accounting": "Accounting", "DG.Skills.alertness": "Alertness", @@ -149,13 +150,6 @@ "DG.Bonds.Score": "Score", "DG.Bonds.NewBond": "New Bond", - "DG.ItemTypes.weapon": "Weapon", - "DG.ItemTypes.armor": "Armor", - "DG.ItemTypes.motivation": "Motivation", - "DG.ItemTypes.bond": "Bond", - "DG.ItemTypes.gear": "Gear", - "DG.ItemTypes.NewPrefix": "New ", - "DG.Tooltip.HP": "Hit points, a character becomes unconsious at 2 HP, and dies at 0 HP.", "DG.Tooltip.MaximumHP": "Maximum health is the average of STR + CON, rounded UP.", "DG.Tooltip.WP": "Willpower Points are mental fuel. Agents require Willpower Points to keep going despite exhaustion or mentally taxing situations. See page 47 of the Agent's Handbook for more detail.", @@ -278,5 +272,16 @@ "DG.ItemWindow.Weapons.CustomSkillTarget": "Target", "DG.ItemWindow.Weapons.SkillModifier": "Skill Modifier", - "DG.ItemWindow.Custom": "Custom" + "DG.ItemWindow.Custom": "Custom", + + "TYPES.Actor.agent": "Agent", + "TYPES.Actor.npc": "NPC", + "TYPES.Actor.unnatural": "Unnatural", + "TYPES.Actor.vehicle": "Vehicle", + + "TYPES.Item.armor": "Armor", + "TYPES.Item.bond": "Bond", + "TYPES.Item.gear": "Gear", + "TYPES.Item.motivation": "Motivation", + "TYPES.Item.weapon": "Weapon" } diff --git a/lang/es.json b/lang/es.json index b8b2c41..e0c4994 100644 --- a/lang/es.json +++ b/lang/es.json @@ -134,13 +134,6 @@ "DG.Bonds.Score": "Puntuación", "DG.Bonds.NewBond": "Nuevo Vínculo", - "DG.ItemTypes.weapon": "Arma", - "DG.ItemTypes.armor": "Armadura", - "DG.ItemTypes.motivation": "Motivación", - "DG.ItemTypes.bond": "Vínculo", - "DG.ItemTypes.gear": "Equipo", - "DG.ItemTypes.NewPrefix": "Nuevo ", - "DG.Tooltip.HP": "Puntos de Vida, un personaje cae inconsciente a los 2 PV, y muere con 0 PV.", "DG.Tooltip.MaximumHP": "La salud máxima es el promedio de FUE + CON, redondeado hacia arriba.", "DG.Tooltip.WP": "Los Puntos de Voluntad son el combustible mental. Los agentes requieren puntos de voluntad para seguir adelante a pesar del agotamiento o en situaciones mentalmente graves. Consulte la página 47 del Manual del Agente para obtener más detalles.", @@ -255,17 +248,6 @@ "DG.VehicleSheet.NotesLabel": "NOTES", "DG.VehicleSheet.DescriptionPlaceHolder": "Vehicle Description", - "TYPES.Actor.agent": "Agent", - "TYPES.Actor.unnatural": "Unnatural", - "TYPES.Actor.npc": "NPC", - "TYPES.Actor.vehicle": "Vehicle", - - "TYPES.Item.weapon": "Weapon", - "TYPES.Item.armor": "Armor", - "TYPES.Item.motivation": "Motivation", - "TYPES.Item.bond": "Bond", - "TYPES.Item.gear": "Gear", - "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "Check a damaged Bond's box until the next Home Scene ends.", "DG.Generic.ClearAll": "Clear All", @@ -273,5 +255,16 @@ "DG.ItemWindow.Weapons.CustomSkillTarget": "Target", "DG.ItemWindow.Weapons.SkillModifier": "Skill Modifier", - "DG.ItemWindow.Custom": "Custom" + "DG.ItemWindow.Custom": "Custom", + + "TYPES.Actor.agent": "Agent", + "TYPES.Actor.unnatural": "Unnatural", + "TYPES.Actor.npc": "NPC", + "TYPES.Actor.vehicle": "Vehicle", + + "TYPES.Item.weapon": "Arma", + "TYPES.Item.armor": "Armadura", + "TYPES.Item.motivation": "Motivación", + "TYPES.Item.bond": "Vínculo", + "TYPES.Item.gear": "Equipo" } diff --git a/lang/fr.json b/lang/fr.json index 155bad0..9f8cb62 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -1,273 +1,272 @@ { - "DG.SystemName": "Delta Green", - "DG.AgentNameFieldTooltip": "NOM, PRENOM (ET ALIAS SI APPLICABLE)", - "DG.RollLuck": "Jet de Chance", - "DG.Luck": "Chance", + "DG.SystemName": "Delta Green", + "DG.AgentNameFieldTooltip": "NOM, PRENOM (ET ALIAS SI APPLICABLE)", + "DG.RollLuck": "Jet de Chance", + "DG.Luck": "Chance", - "DG.FallbackText.ProfessionAndOrRank": "PROFESSION (RANG SI APPLICABLE)", + "DG.FallbackText.ProfessionAndOrRank": "PROFESSION (RANG SI APPLICABLE)", - "DG.Skills.accounting": "Comptabilité", - "DG.Skills.alertness": "Vigilance", - "DG.Skills.anthropology": "Anthropologie", - "DG.Skills.archeology": "Archéologie", - "DG.Skills.artillery": "Artillerie", - "DG.Skills.athletics": "Athlétisme", - "DG.Skills.bureaucracy": "Bureaucracie", - "DG.Skills.computer_science": "Informatique", - "DG.Skills.criminology": "Criminologie", - "DG.Skills.demolitions": "Démolitions", - "DG.Skills.disguise": "Deguisement", - "DG.Skills.dodge": "Esquive", - "DG.Skills.drive": "Conduite", - "DG.Skills.firearms": "Armes à feu", - "DG.Skills.first_aid": "Premier secours", - "DG.Skills.forensics": "Médecine legale", - "DG.Skills.heavy_machiner": "Machinerie lourde", - "DG.Skills.heavy_weapons": "Armes lourdes", - "DG.Skills.history": "Histoire", - "DG.Skills.humint": "HUMINT", - "DG.Skills.law": "Loi", - "DG.Skills.medicine": "Médecine", - "DG.Skills.melee_weapons": "Armes de mélée", - "DG.Skills.navigate": "Navigation", - "DG.Skills.occult": "Occultisme", - "DG.Skills.persuade": "Persuasion", - "DG.Skills.pharmacy": "Pharmacie", - "DG.Skills.psychotherapy": "Psychothérapie", - "DG.Skills.ride": "Equitation", - "DG.Skills.search": "Recherche", - "DG.Skills.sigint": "SIGINT", - "DG.Skills.stealth": "Discrétion", - "DG.Skills.surgery": "Chirurgie", - "DG.Skills.survival": "Survie", - "DG.Skills.swim": "Natation", - "DG.Skills.unarmed_combat": "Corps à corps", - "DG.Skills.unnatural": "Paranaturel", + "DG.Skills.accounting": "Comptabilité", + "DG.Skills.alertness": "Vigilance", + "DG.Skills.anthropology": "Anthropologie", + "DG.Skills.archeology": "Archéologie", + "DG.Skills.artillery": "Artillerie", + "DG.Skills.athletics": "Athlétisme", + "DG.Skills.bureaucracy": "Bureaucracie", + "DG.Skills.computer_science": "Informatique", + "DG.Skills.criminology": "Criminologie", + "DG.Skills.demolitions": "Démolitions", + "DG.Skills.disguise": "Deguisement", + "DG.Skills.dodge": "Esquive", + "DG.Skills.drive": "Conduite", + "DG.Skills.firearms": "Armes à feu", + "DG.Skills.first_aid": "Premier secours", + "DG.Skills.forensics": "Médecine legale", + "DG.Skills.heavy_machiner": "Machinerie lourde", + "DG.Skills.heavy_weapons": "Armes lourdes", + "DG.Skills.history": "Histoire", + "DG.Skills.humint": "HUMINT", + "DG.Skills.law": "Loi", + "DG.Skills.medicine": "Médecine", + "DG.Skills.melee_weapons": "Armes de mélée", + "DG.Skills.navigate": "Navigation", + "DG.Skills.occult": "Occultisme", + "DG.Skills.persuade": "Persuasion", + "DG.Skills.pharmacy": "Pharmacie", + "DG.Skills.psychotherapy": "Psychothérapie", + "DG.Skills.ride": "Equitation", + "DG.Skills.search": "Recherche", + "DG.Skills.sigint": "SIGINT", + "DG.Skills.stealth": "Discrétion", + "DG.Skills.surgery": "Chirurgie", + "DG.Skills.survival": "Survie", + "DG.Skills.swim": "Natation", + "DG.Skills.unarmed_combat": "Corps à corps", + "DG.Skills.unnatural": "Paranaturel", - "DG.Skills.AddTypedOrCustomSkill": "Ajouter une compétence personnalisée", - "DG.Skills.AddSkill": "Ajout Compétence", - "DG.Skills.Apply": "Appliquer", - "DG.Skills.ApplySkillImprovements": "Appliquer augmentation des compétences", - "DG.Skills.ApplySkillImprovementsChatFlavor": "Améliorer les compétences suivantes de", - "DG.Skills.ApplySkillImprovementsDialogLabel": "Améliorer les compétences par la formule suivante:", - "DG.Skills.ApplySkillImprovementsDialogEffectsFollowing": "Affecte les compétences suivantes:", - "DG.Skills.ApplySkillImprovementsWarning": "Pas de compétences raté à améliorer.", - "DG.Skills.EditTypedOrCustomSkill": "Editer une compétence personnalisée", - "DG.Skills.EditSkill": "Editer Compétence", - "DG.Skills.SkillGroup": "Groupe de compétence", - "DG.Skills.SkillName": "Nom de la compétence", + "DG.Skills.AddTypedOrCustomSkill": "Ajouter une compétence personnalisée", + "DG.Skills.AddSkill": "Ajout Compétence", + "DG.Skills.Apply": "Appliquer", + "DG.Skills.ApplySkillImprovements": "Appliquer augmentation des compétences", + "DG.Skills.ApplySkillImprovementsChatFlavor": "Améliorer les compétences suivantes de", + "DG.Skills.ApplySkillImprovementsDialogLabel": "Améliorer les compétences par la formule suivante:", + "DG.Skills.ApplySkillImprovementsDialogEffectsFollowing": "Affecte les compétences suivantes:", + "DG.Skills.ApplySkillImprovementsWarning": "Pas de compétences raté à améliorer.", + "DG.Skills.EditTypedOrCustomSkill": "Editer une compétence personnalisée", + "DG.Skills.EditSkill": "Editer Compétence", + "DG.Skills.SkillGroup": "Groupe de compétence", + "DG.Skills.SkillName": "Nom de la compétence", - "DG.TypeSkills.Art": "Art", - "DG.TypeSkills.Craft": "Artisanat", - "DG.TypeSkills.ForeignLanguage": "Langue étrangère", - "DG.TypeSkills.MilitaryScience": "Expertise militaire", - "DG.TypeSkills.Pilot": "Pilotage", - "DG.TypeSkills.Science": "Science", - "DG.TypeSkills.Other": "Autre", + "DG.TypeSkills.Art": "Art", + "DG.TypeSkills.Craft": "Artisanat", + "DG.TypeSkills.ForeignLanguage": "Langue étrangère", + "DG.TypeSkills.MilitaryScience": "Expertise militaire", + "DG.TypeSkills.Pilot": "Pilotage", + "DG.TypeSkills.Science": "Science", + "DG.TypeSkills.Other": "Autre", - "DG.Attributes.HP": "PV", - "DG.Attributes.WP": "WP", - "DG.Attributes.SAN": "SAN", - "DG.Attributes.str": "FOR", - "DG.Attributes.con": "CON", - "DG.Attributes.dex": "DEX", - "DG.Attributes.int": "INT", - "DG.Attributes.pow": "POU", - "DG.Attributes.cha": "CHA", + "DG.Attributes.HP": "PV", + "DG.Attributes.WP": "WP", + "DG.Attributes.SAN": "SAN", + "DG.Attributes.str": "FOR", + "DG.Attributes.con": "CON", + "DG.Attributes.dex": "DEX", + "DG.Attributes.int": "INT", + "DG.Attributes.pow": "POU", + "DG.Attributes.cha": "CHA", - "DG.Navigation.Skills": "Compétences", - "DG.Navigation.Physical": "Physique", - "DG.Navigation.Mental": "Mental", - "DG.Navigation.Gear": "Equipement", - "DG.Navigation.CV": "Biographie", - "DG.Navigation.Contacts": "Contacts", + "DG.Navigation.Skills": "Compétences", + "DG.Navigation.Physical": "Physique", + "DG.Navigation.Mental": "Mental", + "DG.Navigation.Gear": "Equipement", + "DG.Navigation.CV": "Biographie", + "DG.Navigation.Contacts": "Contacts", - "DG.About.OnlineHelp": "Documentation en ligne", - "DG.About.OnlineHelpTooltip": "Lancer un navigateur avec l'aide en ligne de GitHub.", - "DG.About.OnlineBugTracker": "Questions, rapports de bug ou demande de developpement.", - "DG.About.OnlineBugTrackerTooltip": "Lancer un navigateur avec l'issue tracker de GitHub.", + "DG.About.OnlineHelp": "Documentation en ligne", + "DG.About.OnlineHelpTooltip": "Lancer un navigateur avec l'aide en ligne de GitHub.", + "DG.About.OnlineBugTracker": "Questions, rapports de bug ou demande de developpement.", + "DG.About.OnlineBugTrackerTooltip": "Lancer un navigateur avec l'issue tracker de GitHub.", - "DG.Roll.Rolling": "Jet de dés", - "DG.Roll.Target": "Cible: ", - "DG.Roll.Success": "Succés", - "DG.Roll.Failure": "Echec", - "DG.Roll.Critical": "Critique", - "DG.Roll.Lethality": "Mortalité", - "DG.Roll.Lethal": "Mortel", - "DG.Roll.For": "Pour", - "DG.Roll.Damage": "Dégâts", - "DG.Roll.RollingDamageFor": "Jets de dégats pour", - "DG.Roll.Or": "Ou", - "DG.Roll.Roll": "Lancer", + "DG.Roll.Rolling": "Jet de dés", + "DG.Roll.Target": "Cible: ", + "DG.Roll.Success": "Succés", + "DG.Roll.Failure": "Echec", + "DG.Roll.Critical": "Critique", + "DG.Roll.Lethality": "Mortalité", + "DG.Roll.Lethal": "Mortel", + "DG.Roll.For": "Pour", + "DG.Roll.Damage": "Dégâts", + "DG.Roll.RollingDamageFor": "Jets de dégats pour", + "DG.Roll.Or": "Ou", + "DG.Roll.Roll": "Lancer", - "DG.Physical.Wounds": "Blessures", - "DG.Physical.FirstAidLabel": "Les premiers secours ont déjà été tentés: ", + "DG.Physical.Wounds": "Blessures", + "DG.Physical.FirstAidLabel": "Les premiers secours ont déjà été tentés: ", - "DG.Generic.AddButtonLabel": "Ajout", + "DG.Generic.AddButtonLabel": "Ajout", - "DG.Mental.BreakingPoint": "Point de Rupture: ", - "DG.Mental.Reset": "Reset", - "DG.Mental.SanityLossIncidentsLabel": "Perte de SAN sans devenir fou", - "DG.Mental.Violence": "Violence", - "DG.Mental.Helplessness": "Impuissance", - "DG.Mental.AdaptedToViolence": "Adapté à la Violence", - "DG.Mental.AdaptedToHelplessness": "Adapté à l'Impuissance", - "DG.Mental.Motivations": "Motivations", - "DG.Mental.Disorders": "Désordres mentaux", + "DG.Mental.BreakingPoint": "Point de Rupture: ", + "DG.Mental.Reset": "Reset", + "DG.Mental.SanityLossIncidentsLabel": "Perte de SAN sans devenir fou", + "DG.Mental.Violence": "Violence", + "DG.Mental.Helplessness": "Impuissance", + "DG.Mental.AdaptedToViolence": "Adapté à la Violence", + "DG.Mental.AdaptedToHelplessness": "Adapté à l'Impuissance", + "DG.Mental.Motivations": "Motivations", + "DG.Mental.Disorders": "Désordres mentaux", - "DG.Gear.Weapons": "ARMES", - "DG.Gear.Armor": "ARMURE", - "DG.Gear.OtherGear": "AUTRES EQUIPEMENTS", - "DG.Gear.Name": "Nom", - "DG.Gear.DamageOrLethality": "Dégâts/Mortalité", - "DG.Gear.ArmorPiercing": "Perforation d'Armure", - "DG.Gear.ArmorRating": "Niveau Armure", - "DG.Gear.Equipped": "Equipé", + "DG.Gear.Weapons": "ARMES", + "DG.Gear.Armor": "ARMURE", + "DG.Gear.OtherGear": "AUTRES EQUIPEMENTS", + "DG.Gear.Name": "Nom", + "DG.Gear.DamageOrLethality": "Dégâts/Mortalité", + "DG.Gear.ArmorPiercing": "Perforation d'Armure", + "DG.Gear.ArmorRating": "Niveau Armure", + "DG.Gear.Equipped": "Equipé", - "DG.CV.Sex": "Sexe", - "DG.CV.SexPlaceholder": "Sexe", - "DG.CV.AgeAndDoB": "Age et Date de Naissance", - "DG.CV.AgeAndDoBPlaceholder": "Age et Date de Naissance", - "DG.CV.Employer": "Emploi", - "DG.CV.EmployerPlaceholder": "Emploi ou Historique de Travail", - "DG.CV.Nationality": "Nationalité", - "DG.CV.NationalityPlaceholder": "Nationalité", - "DG.CV.Education": "Éducation", - "DG.CV.EducationPlaceholder": "Éducation", - - "DG.Bonds.Bond": "Lien", - "DG.Bonds.Name": "Nom", - "DG.Bonds.Score": "Valeur", - "DG.Bonds.NewBond": "Nouveau Lien", + "DG.CV.Sex": "Sexe", + "DG.CV.SexPlaceholder": "Sexe", + "DG.CV.AgeAndDoB": "Age et Date de Naissance", + "DG.CV.AgeAndDoBPlaceholder": "Age et Date de Naissance", + "DG.CV.Employer": "Emploi", + "DG.CV.EmployerPlaceholder": "Emploi ou Historique de Travail", + "DG.CV.Nationality": "Nationalité", + "DG.CV.NationalityPlaceholder": "Nationalité", + "DG.CV.Education": "Éducation", + "DG.CV.EducationPlaceholder": "Éducation", - "DG.ItemTypes.weapon": "Arme", - "DG.ItemTypes.armor": "Armure", - "DG.ItemTypes.motivation": "Motivation", - "DG.ItemTypes.bond": "Lien", - "DG.ItemTypes.gear": "Équipement", - "DG.ItemTypes.NewPrefix": "Nouveau/Nouvelle ", + "DG.Bonds.Bond": "Lien", + "DG.Bonds.Name": "Nom", + "DG.Bonds.Score": "Valeur", + "DG.Bonds.NewBond": "Nouveau Lien", - "DG.Tooltip.HP": "Points de vie, un personnage devient inconscient à 2PV et meurt à 0PV.", - "DG.Tooltip.MaximumHP": "La Santé maximum est la moyenne de FOR+CON, arrondi au supérieur.", - "DG.Tooltip.WP": "Les Points de Volonté (WP) sont le carburant psychologique. Les Agents ont besoin de Points de Volonté pour continuer à travailler malgré l'épuisement ou les situations mentalement éprouvantes. Voir la page 47 du Manuel de l'agent pour plus de détails.", - "DG.Tooltip.MaximumWP": "La Volonté maximum est égale au POUVOIR.", - "DG.Tooltip.SanityLabel": "Cliquer pour effectuer un jet de Santé Mentale", - "DG.Tooltip.CurrentSanityPartOne": "Santé Mentale actuelle, le point de rupture actuel est ", - "DG.Tooltip.CurrentSanityPartTwo": ", cliquez sur SAN ci-dessus pour effectuer un jet de santé mentale.", - "DG.Tooltip.MaximumSanity": "La Santé Mentale maximum est égale à 99 moins la compétence Paranaturel.", - "DG.Tooltip.SkillLabel": "Cliquer pour utiliser la compétence.", - "DG.Tooltip.CannotRollSkillLabel": "Une compétence à 0% ne peut pas être utilisée. Voir page 28 du Manuel de l'Agent.", - "DG.Tooltip.SkillFailCheckbox": "Cochez une case lorsque vous échouez à un jet de compétence (si celle-ci est d'au moins 1%). Après la session, ajoutez 1d4-1 à chaque compétence cochée et effacez tous les coches. Ne s'applique pas à la compétence Paranaturel. Voir la page 29 du Manuel de l'Agent.", - "DG.Tooltip.DistinguishingFeature": "Traits distinctifs (à remplir si la valeur est de 12 ou plus, ou de 8 ou moins).", - "DG.Tooltip.x5AttributeLabel": "Cliquer pour effectuer un jet de % (valeur x5).", - "DG.Tooltip.FirstAidAttempted": "Dés qu'un Agent reçoit les premiers soins, il ne peut plus en bénéficier tant qu'il n'a pas reçu de nouveaux dégâts d'une autre source.", - "DG.Tooltip.AdaptedToViolence": "Être adapté à la violence signifie que l'empathie de votre Agent souffre lorsqu'il en vient à considérer la violence comme un outil de plus à manier. Il ou elle perd définitivement 1D6 CHA et le même montant dans chacun de ses Liens.", - "DG.Tooltip.AdaptedToHelplessness": "Être adapté à l'impuissance signifie que la motivation personnelle de votre agent souffre lorsqu'il se retire du monde qui l'entoure. Dès que votre agent s'adapte à l'impuissance, il ou elle perd définitivement 1D6 POU.", - "DG.Tooltip.ToggleEquippedState": "Cliquez pour indiquer si cet élément est équipé ou non.", + "DG.Tooltip.HP": "Points de vie, un personnage devient inconscient à 2PV et meurt à 0PV.", + "DG.Tooltip.MaximumHP": "La Santé maximum est la moyenne de FOR+CON, arrondi au supérieur.", + "DG.Tooltip.WP": "Les Points de Volonté (WP) sont le carburant psychologique. Les Agents ont besoin de Points de Volonté pour continuer à travailler malgré l'épuisement ou les situations mentalement éprouvantes. Voir la page 47 du Manuel de l'agent pour plus de détails.", + "DG.Tooltip.MaximumWP": "La Volonté maximum est égale au POUVOIR.", + "DG.Tooltip.SanityLabel": "Cliquer pour effectuer un jet de Santé Mentale", + "DG.Tooltip.CurrentSanityPartOne": "Santé Mentale actuelle, le point de rupture actuel est ", + "DG.Tooltip.CurrentSanityPartTwo": ", cliquez sur SAN ci-dessus pour effectuer un jet de santé mentale.", + "DG.Tooltip.MaximumSanity": "La Santé Mentale maximum est égale à 99 moins la compétence Paranaturel.", + "DG.Tooltip.SkillLabel": "Cliquer pour utiliser la compétence.", + "DG.Tooltip.CannotRollSkillLabel": "Une compétence à 0% ne peut pas être utilisée. Voir page 28 du Manuel de l'Agent.", + "DG.Tooltip.SkillFailCheckbox": "Cochez une case lorsque vous échouez à un jet de compétence (si celle-ci est d'au moins 1%). Après la session, ajoutez 1d4-1 à chaque compétence cochée et effacez tous les coches. Ne s'applique pas à la compétence Paranaturel. Voir la page 29 du Manuel de l'Agent.", + "DG.Tooltip.DistinguishingFeature": "Traits distinctifs (à remplir si la valeur est de 12 ou plus, ou de 8 ou moins).", + "DG.Tooltip.x5AttributeLabel": "Cliquer pour effectuer un jet de % (valeur x5).", + "DG.Tooltip.FirstAidAttempted": "Dés qu'un Agent reçoit les premiers soins, il ne peut plus en bénéficier tant qu'il n'a pas reçu de nouveaux dégâts d'une autre source.", + "DG.Tooltip.AdaptedToViolence": "Être adapté à la violence signifie que l'empathie de votre Agent souffre lorsqu'il en vient à considérer la violence comme un outil de plus à manier. Il ou elle perd définitivement 1D6 CHA et le même montant dans chacun de ses Liens.", + "DG.Tooltip.AdaptedToHelplessness": "Être adapté à l'impuissance signifie que la motivation personnelle de votre agent souffre lorsqu'il se retire du monde qui l'entoure. Dès que votre agent s'adapte à l'impuissance, il ou elle perd définitivement 1D6 POU.", + "DG.Tooltip.ToggleEquippedState": "Cliquez pour indiquer si cet élément est équipé ou non.", - "DG.Gear.Expense.NA": "N/A ou Aucun", - "DG.Gear.Expense.Incidental": "Courant", - "DG.Gear.Expense.Standard": "Standard", - "DG.Gear.Expense.Unusual": "Inhabituel", - "DG.Gear.Expense.Major": "Important", - "DG.Gear.Expense.Extreme": "Extrême", + "DG.Gear.Expense.NA": "N/A ou Aucun", + "DG.Gear.Expense.Incidental": "Courant", + "DG.Gear.Expense.Standard": "Standard", + "DG.Gear.Expense.Unusual": "Inhabituel", + "DG.Gear.Expense.Major": "Important", + "DG.Gear.Expense.Extreme": "Extrême", - "DG.ItemWindow.Bonds.Description": "Description/développements", - "DG.ItemWindow.Bonds.ScoreTooltip": "Un score plus élevé représente une relation plus forte entre l'Agent et le Lien.", + "DG.ItemWindow.Bonds.Description": "Description/développements", + "DG.ItemWindow.Bonds.ScoreTooltip": "Un score plus élevé représente une relation plus forte entre l'Agent et le Lien.", - "DG.ItemWindow.Motivations.Attributes": "Caractéristiques", - "DG.ItemWindow.Motivations.Motivation": "Motivation", - "DG.ItemWindow.Motivations.Description": "Description/Notes", - "DG.ItemWindow.Motivations.Disorder": "Désordre mental", - "DG.ItemWindow.Motivations.IsDisorder": "Est un Désordre mental", - "DG.ItemWindow.Motivations.MotivationNameTooltip": "Quelque chose qui anime le personnage.", - "DG.ItemWindow.Motivations.DisorderNameTooltip": "Un désordre mental remplace une motivation après avoir atteint un point de rupture.", - "DG.ItemWindow.Motivations.IsDisorderTooltip": "Cochez cette case si vous ajoutez un désordre mental, ou si une motivation existante a été perdue en raison de l'acquisition d'un trouble.", - "DG.ItemWindow.Motivations.DisorderHasBeenCured": "Le Désordre mental a été \"Soigné\"", - "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "Un succès critique sur un jet de chance peut guérir un désordre mental. Il peut cependant réapparaître la prochaine fois qu'un point de rupture est atteint.", + "DG.ItemWindow.Motivations.Attributes": "Caractéristiques", + "DG.ItemWindow.Motivations.Motivation": "Motivation", + "DG.ItemWindow.Motivations.Description": "Description/Notes", + "DG.ItemWindow.Motivations.Disorder": "Désordre mental", + "DG.ItemWindow.Motivations.IsDisorder": "Est un Désordre mental", + "DG.ItemWindow.Motivations.MotivationNameTooltip": "Quelque chose qui anime le personnage.", + "DG.ItemWindow.Motivations.DisorderNameTooltip": "Un désordre mental remplace une motivation après avoir atteint un point de rupture.", + "DG.ItemWindow.Motivations.IsDisorderTooltip": "Cochez cette case si vous ajoutez un désordre mental, ou si une motivation existante a été perdue en raison de l'acquisition d'un trouble.", + "DG.ItemWindow.Motivations.DisorderHasBeenCured": "Le Désordre mental a été \"Soigné\"", + "DG.ItemWindow.Motivations.DisorderHasBeenCuredTooltip": "Un succès critique sur un jet de chance peut guérir un désordre mental. Il peut cependant réapparaître la prochaine fois qu'un point de rupture est atteint.", - "DG.ItemWindow.Gear.Attributes": "Caractéristiques", - "DG.ItemWindow.Gear.Description": "Description", - "DG.ItemWindow.Gear.NamePlaceholder": "Nom", - "DG.ItemWindow.Gear.Expense": "Dépense", - "DG.ItemWindow.Gear.Equipped": "Équipé", + "DG.ItemWindow.Gear.Attributes": "Caractéristiques", + "DG.ItemWindow.Gear.Description": "Description", + "DG.ItemWindow.Gear.NamePlaceholder": "Nom", + "DG.ItemWindow.Gear.Expense": "Dépense", + "DG.ItemWindow.Gear.Equipped": "Équipé", - "DG.ItemWindow.Armor.Description": "Description", - "DG.ItemWindow.Armor.NamePlaceholder": "Nom", - "DG.ItemWindow.Armor.ArmorRating": "Valeur Armure", - "DG.ItemWindow.Armor.Expense": "Dépense", - "DG.ItemWindow.Armor.Equipped": "Équipé", + "DG.ItemWindow.Armor.Description": "Description", + "DG.ItemWindow.Armor.NamePlaceholder": "Nom", + "DG.ItemWindow.Armor.ArmorRating": "Valeur Armure", + "DG.ItemWindow.Armor.Expense": "Dépense", + "DG.ItemWindow.Armor.Equipped": "Équipé", - "DG.ItemWindow.Weapons.Description": "Description", - "DG.ItemWindow.Weapons.NamePlaceholder": "Nom", - "DG.ItemWindow.Weapons.Skill": "Compétence", - "DG.ItemWindow.Weapons.Expense": "Dépense", - "DG.ItemWindow.Weapons.Damage": "Dégâts", - "DG.ItemWindow.Weapons.Lethality": "Mortalité", - "DG.ItemWindow.Weapons.IsLethality": "Est Mortel", - "DG.ItemWindow.Weapons.LethalityTooltip": "Une arme mortelle a une chance de tuer instantanément une cible. Lancer un D100 au lieu d'un jet de dégâts. En cas d'échec, la cible subit des dommages égaux aux 2d10 associés.", - "DG.ItemWindow.Weapons.IsLethalityTooltip": "Cochez cette case si l'arme est associée à un pourcentage de mortalité.", - "DG.ItemWindow.Weapons.ArmorPiercing": "Perforation Armure", - "DG.ItemWindow.Weapons.Ammo": "Munitions (Nombre/Type)", - "DG.ItemWindow.Weapons.Range": "Portée", - "DG.ItemWindow.Weapons.KillRadius": "Zone d'Effet", + "DG.ItemWindow.Weapons.Description": "Description", + "DG.ItemWindow.Weapons.NamePlaceholder": "Nom", + "DG.ItemWindow.Weapons.Skill": "Compétence", + "DG.ItemWindow.Weapons.Expense": "Dépense", + "DG.ItemWindow.Weapons.Damage": "Dégâts", + "DG.ItemWindow.Weapons.Lethality": "Mortalité", + "DG.ItemWindow.Weapons.IsLethality": "Est Mortel", + "DG.ItemWindow.Weapons.LethalityTooltip": "Une arme mortelle a une chance de tuer instantanément une cible. Lancer un D100 au lieu d'un jet de dégâts. En cas d'échec, la cible subit des dommages égaux aux 2d10 associés.", + "DG.ItemWindow.Weapons.IsLethalityTooltip": "Cochez cette case si l'arme est associée à un pourcentage de mortalité.", + "DG.ItemWindow.Weapons.ArmorPiercing": "Perforation Armure", + "DG.ItemWindow.Weapons.Ammo": "Munitions (Nombre/Type)", + "DG.ItemWindow.Weapons.Range": "Portée", + "DG.ItemWindow.Weapons.KillRadius": "Zone d'Effet", - "DG.ModifySkillRollDialogue.Title": "Modifier le Lancer", - "DG.ModifySkillRollDialogue.Test": "Test de:", - "DG.ModifySkillRollDialogue.OriginalTarget": "Niveau actuel:", - "DG.ModifySkillRollDialogue.TargetModifier": "Modificateur (+/-):", - "DG.ModifySkillRollDialogue.ModifierTooltip": "Donnez ici un modificateur positif ou négatif à ajouter/soustraire à la cible pour le test de compétence.", + "DG.ModifySkillRollDialogue.Title": "Modifier le Lancer", + "DG.ModifySkillRollDialogue.Test": "Test de:", + "DG.ModifySkillRollDialogue.OriginalTarget": "Niveau actuel:", + "DG.ModifySkillRollDialogue.TargetModifier": "Modificateur (+/-):", + "DG.ModifySkillRollDialogue.ModifierTooltip": "Donnez ici un modificateur positif ou négatif à ajouter/soustraire à la cible pour le test de compétence.", - "DG.ModifyDamageRollDialogue.Weapon": "Arme:", - "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "Utilisez ce champ pour modifier la partie extérieure de la formule, par exemple pour doubler le résultat.", - "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "Utilisez ce champ pour ajouter un modificateur fixe tel que '+1' ou un autre terme de dé tel que '+1d4'.", + "DG.ModifyDamageRollDialogue.Weapon": "Arme:", + "DG.ModifyDamageRollDialogue.OuterModifierTooltip": "Utilisez ce champ pour modifier la partie extérieure de la formule, par exemple pour doubler le résultat.", + "DG.ModifyDamageRollDialogue.InnerModifierTooltip": "Utilisez ce champ pour ajouter un modificateur fixe tel que '+1' ou un autre terme de dé tel que '+1d4'.", - "DG.Roll.Inhuman": "Inhumain", - "DG.Tooltip.BreakPoint": "Le point de rupture actuel, réinitialisé lorsque la santé mentale actuelle tombe à cette valeur ou en dessous. Le point de rupture de départ est SAN - POU.", - "DG.Tooltip.BreakPointReset": "Le point de rupture est réinitialisé à la valeur actuelle SAN - WP.", - "DG.Skills.ritual": "Rituel", + "DG.Roll.Inhuman": "Inhumain", + "DG.Tooltip.BreakPoint": "Le point de rupture actuel, réinitialisé lorsque la santé mentale actuelle tombe à cette valeur ou en dessous. Le point de rupture de départ est SAN - POU.", + "DG.Tooltip.BreakPointReset": "Le point de rupture est réinitialisé à la valeur actuelle SAN - WP.", + "DG.Skills.ritual": "Rituel", - "DG.RollMode": "Mode de Jet", - "DG.Bonds.Relationship": "Type de Relation", + "DG.RollMode": "Mode de Jet", + "DG.Bonds.Relationship": "Type de Relation", - "DG.TypeSkills.Subskills.Painting": "Peinture", + "DG.TypeSkills.Subskills.Painting": "Peinture", - "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTS", - "DG.Sheet.BlockHeaders.Statistics": "STATISTIQUES", - "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "DESCRIPTION PHYSIQUE / NOTES", - "DG.Sheet.BlockHeaders.SkillsAndTraining": "COMPETENCES ET FORMATION", - "DG.Sheet.BlockHeaders.Injuries": "BLESSURES", - "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "POINT DE RUPTURE ET ADAPTATIONS", - "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DESORDRES MENTAUX", - "DG.Sheet.BlockHeaders.PersonalInfoCV": "INFORMATION PERSONNELLE / CV", - "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "LIENS / RELATIONS / CONTACTS", + "DG.Sheet.BlockHeaders.Attributes": "ATTRIBUTS", + "DG.Sheet.BlockHeaders.Statistics": "STATISTIQUES", + "DG.Sheet.BlockHeaders.PhysicalDescriptionNotes": "DESCRIPTION PHYSIQUE / NOTES", + "DG.Sheet.BlockHeaders.SkillsAndTraining": "COMPETENCES ET FORMATION", + "DG.Sheet.BlockHeaders.Injuries": "BLESSURES", + "DG.Sheet.BlockHeaders.BreakingPointAndAdaptations": "POINT DE RUPTURE ET ADAPTATIONS", + "DG.Sheet.BlockHeaders.MotivationsAndDisorders": "MOTIVATIONS AND DESORDRES MENTAUX", + "DG.Sheet.BlockHeaders.PersonalInfoCV": "INFORMATION PERSONNELLE / CV", + "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "LIENS / RELATIONS / CONTACTS", - "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "Caché compétences non connues", - "DG.UnnaturalSheet.NotesLabel": "Notes", - "DG.UnnaturalSheet.ShortDescriptionFallbackText": "Description de créature ou du type de créature", - "DG.UnnaturalSheet.ShowUntrainedSkillsLabel": "Voir compétences non connues", - "DG.UnnaturalSheet.Tabs.NotesTabLabel": "Compétences & Notes", - "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "Attaques & Capacités", - "DG.NPCSheet.BreakPointAbbreviation": "PR", + "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "Caché compétences non connues", + "DG.UnnaturalSheet.NotesLabel": "Notes", + "DG.UnnaturalSheet.ShortDescriptionFallbackText": "Description de créature ou du type de créature", + "DG.UnnaturalSheet.ShowUntrainedSkillsLabel": "Voir compétences non connues", + "DG.UnnaturalSheet.Tabs.NotesTabLabel": "Compétences & Notes", + "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "Attaques & Capacités", + "DG.NPCSheet.BreakPointAbbreviation": "PR", - "DG.ImpossibleLanscapes.IHaveSeenThe": "J'AI VU LE", - "DG.ImpossibleLanscapes.YellowSign": "SIGNE JAUNE", - "DG.ImpossibleLanscapes.CorruptionFirstHalf": "Corrup", - "DG.ImpossibleLanscapes.CorruptionSecondHalf": "tion", - "DG.ImpossibleLanscapes.Gift": "Don", - "DG.ImpossibleLanscapes.Insight": "Intuition", - - "DG.VehicleSheet.NotesTabName": "Notes", - "DG.VehicleSheet.GearTabName": "Équipement", - "DG.VehicleSheet.NotesLabel": "NOTES", - "DG.VehicleSheet.DescriptionPlaceHolder": "Description du Véhicule", - - "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "Cochez la case d'un Lien endommagé jusqu'à la fin de la prochaine scène HOME.", - "DG.Generic.ClearAll": "videz les coches", + "DG.ImpossibleLanscapes.IHaveSeenThe": "J'AI VU LE", + "DG.ImpossibleLanscapes.YellowSign": "SIGNE JAUNE", + "DG.ImpossibleLanscapes.CorruptionFirstHalf": "Corrup", + "DG.ImpossibleLanscapes.CorruptionSecondHalf": "tion", + "DG.ImpossibleLanscapes.Gift": "Don", + "DG.ImpossibleLanscapes.Insight": "Intuition", - "DG.Generic.SanDamage": "Dégâts SAN", + "DG.VehicleSheet.NotesTabName": "Notes", + "DG.VehicleSheet.GearTabName": "Équipement", + "DG.VehicleSheet.NotesLabel": "NOTES", + "DG.VehicleSheet.DescriptionPlaceHolder": "Description du Véhicule", - "DG.ItemWindow.Weapons.CustomSkillTarget": "Cible", - "DG.ItemWindow.Weapons.SkillModifier": "Modificateur de compétences", - "DG.ItemWindow.Custom": "Custom" + "DG.Generic.CheckDamagedBondsBoxUntilNextHomeScene": "Cochez la case d'un Lien endommagé jusqu'à la fin de la prochaine scène HOME.", + "DG.Generic.ClearAll": "videz les coches", + + "DG.Generic.SanDamage": "Dégâts SAN", + + "DG.ItemWindow.Weapons.CustomSkillTarget": "Cible", + "DG.ItemWindow.Weapons.SkillModifier": "Modificateur de compétences", + "DG.ItemWindow.Custom": "Custom", + + "TYPES.Item.weapon": "Arme", + "TYPES.Item.armor": "Armure", + "TYPES.Item.motivation": "Motivation", + "TYPES.Item.bond": "Lien", + "TYPES.Item.gear": "Équipement" } diff --git a/lang/ja.json b/lang/ja.json index dca26fd..b70d154 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -134,13 +134,6 @@ "DG.Bonds.Score": "スコア", "DG.Bonds.NewBond": "新しい絆", - "DG.ItemTypes.weapon": "武器", - "DG.ItemTypes.armor": "武具", - "DG.ItemTypes.motivation": "モチベーション", - "DG.ItemTypes.bond": "絆", - "DG.ItemTypes.gear": "装備", - "DG.ItemTypes.NewPrefix": "新", - "DG.Tooltip.HP": "2HPにエージェントは気を失い、0HPに死ぬ。", "DG.Tooltip.MaximumHP": "最大のヒットポイントは筋力と耐久力の平均(切り上げする)。", "DG.Tooltip.WP": "WPとは精神の燃料。疲れた時と精神的に厳しい時に必要です。", @@ -262,5 +255,11 @@ "DG.ItemWindow.Weapons.CustomSkillTarget": "ターゲット", "DG.ItemWindow.Weapons.SkillModifier": "ターゲットに加えて", - "DG.ItemWindow.Custom": "カスタム" + "DG.ItemWindow.Custom": "カスタム", + + "TYPES.Item.weapon": "武器", + "TYPES.Item.armor": "武具", + "TYPES.Item.motivation": "モチベーション", + "TYPES.Item.bond": "絆", + "TYPES.Item.gear": "装備" } diff --git a/lang/pt-BR.json b/lang/pt-BR.json index e66fb74..1d99f49 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -119,12 +119,7 @@ "DG.Bonds.Name": "Nome", "DG.Bonds.Score": "Pontuação", "DG.Bonds.NewBond": "Novo Vínculo", - "DG.ItemTypes.weapon": "Arma", - "DG.ItemTypes.armor": "Armadura", - "DG.ItemTypes.motivation": "Motivação", - "DG.ItemTypes.bond": "Vinculo", - "DG.ItemTypes.gear": "Equipamento", - "DG.ItemTypes.NewPrefix": "Novo ", + "DG.Tooltip.HP": "Pontos de Vida, um personagem fica inconsciente com 2 PV e morre com 0 PV.", "DG.Tooltip.MaximumHP": "A Vida máxima é a média de FOR + CON, arredondado para CIMA.", "DG.Tooltip.WP": "Pontos de Força de Vontade são combustível mental. Os agentes precisam de Pontos de Força de Vontade para continuar, apesar da exaustão ou situações mentalmente desgastantes. Consulte a página 47 do Manual do Agente para obter mais detalhes.", @@ -227,5 +222,11 @@ "DG.Generic.SanDamage": "SAN Damage", - "DG.Generic.Custom": "Custom" + "DG.Generic.Custom": "Custom", + + "TYPES.Item.weapon": "Arma", + "TYPES.Item.armor": "Armadura", + "TYPES.Item.motivation": "Motivação", + "TYPES.Item.bond": "Vinculo", + "TYPES.Item.gear": "Equipamento" } diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 36c2ea2..451756e 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -865,9 +865,12 @@ export default class DeltaGreenActorSheet extends ActorSheet { // Initialize a default name. // const name = `New ${type.capitalize()}`; - const name = - game.i18n.localize("DG.ItemTypes.NewPrefix") + - game.i18n.localize(`DG.ItemTypes.${type}`); + const name = game.i18n.format( + game.i18n.translations.DOCUMENT?.New || "DG.FallbackText.newItem", + { + type: game.i18n.localize(`TYPES.Item.${type}`), + }, + ); // Prepare the item object. const itemData = { From 9e6ef3919ff47053896b275f88c88f29d63c7027 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 01:46:38 -0400 Subject: [PATCH 05/19] replace deprecated {{#select}} helper with `createSelectInput` method --- module/actor/actor-sheet.js | 31 +++++++++++++++++++++----- templates/dialog/special-training.html | 26 +-------------------- 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 451756e..891b65a 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -754,10 +754,22 @@ export default class DeltaGreenActorSheet extends ActorSheet { (training) => training.id === targetID, ); + // Define the option groups for our drop-down menu. + const optionGroups = { + stats: game.i18n.localize( + "DG.SpecialTraining.Dialog.DropDown.Statistics", + ), + skills: game.i18n.localize("DG.SpecialTraining.Dialog.DropDown.Skills"), + typedSkills: game.i18n.localize( + "DG.SpecialTraining.Dialog.DropDown.CustomSkills", + ), + }; + // Prepare simplified stat list const statList = Object.entries(this.actor.system.statistics).map( ([key, stat]) => ({ - key, + value: key, + group: optionGroups.stats, label: game.i18n.localize(`DG.Attributes.${key}`), targetNumber: stat.value * 5, }), @@ -766,7 +778,8 @@ export default class DeltaGreenActorSheet extends ActorSheet { // Prepare simplified skill list const skillList = Object.entries(this.actor.system.skills).map( ([key, skill]) => ({ - key, + value: key, + group: optionGroups.skills, label: skill.label, targetNumber: skill.proficiency, }), @@ -775,18 +788,26 @@ export default class DeltaGreenActorSheet extends ActorSheet { // Prepare simplified typed/custom skill list const typedSkillList = Object.entries(this.actor.system.typedSkills).map( ([key, skill]) => ({ - key, - group: skill.group, - label: skill.label, + value: key, + group: optionGroups.typedSkills, + label: `${skill.group} (${skill.label})`, targetNumber: skill.proficiency, }), ); + // Prepare the Select element + const selectElement = foundry.applications.fields.createSelectInput({ + name: "special-training-skill", + options: [...statList, ...skillList, ...typedSkillList], + groups: Object.values(optionGroups), + }).outerHTML; + // Prepare the template to feed to Dialog. const content = await renderTemplate( "systems/deltagreen/templates/dialog/special-training.html", { name: specialTraining?.name || "", + selectElement, currentAttribute: specialTraining?.attribute || "", statList, skillList, diff --git a/templates/dialog/special-training.html b/templates/dialog/special-training.html index 21a0d72..d1fd2f5 100644 --- a/templates/dialog/special-training.html +++ b/templates/dialog/special-training.html @@ -9,30 +9,6 @@ - {{#select currentAttribute}} - - {{/select}} + {{{selectElement}}} \ No newline at end of file From f5a21659c5401dc1d32c5c8b8f7589a1ca0a91eb Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 01:51:41 -0400 Subject: [PATCH 06/19] update system.json with new compatibility info --- system.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/system.json b/system.json index 75608fc..dba6737 100644 --- a/system.json +++ b/system.json @@ -18,7 +18,8 @@ "version": "1.3.5", "compatibility": { "minimum": "11", - "verified": "11" + "verified": "12", + "maximum": "12" }, "esmodules": ["module/deltagreen.js"], "styles": ["css/deltagreen.css", "css/dialogue.css"], From a889943efc169237d33ce3eb5ddc6ae736dc2569 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 01:54:17 -0400 Subject: [PATCH 07/19] replace mergeObject with foundry.utils.mergeObject --- module/actor/actor-sheet.js | 2 +- module/actor/actor.js | 13 +++++-------- module/item/item-sheet.js | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 891b65a..ea67fdf 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -14,7 +14,7 @@ import { export default class DeltaGreenActorSheet extends ActorSheet { /** @override */ static get defaultOptions() { - return mergeObject(super.defaultOptions, { + return foundry.utils.mergeObject(super.defaultOptions, { classes: ["deltagreen", "sheet", "actor"], template: "systems/deltagreen/templates/actor/actor-sheet.html", width: 700, diff --git a/module/actor/actor.js b/module/actor/actor.js index e0b3942..f6f22de 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -74,15 +74,13 @@ export default class DeltaGreenActor extends Actor { system.wp.max = system.statistics.pow.value; - try{ + try { system.health.max = Math.ceil( (system.statistics.con.value + system.statistics.str.value) / 2, ); - } - catch(ex){ + } catch (ex) { system.health.max = 10; } - system.skills.ritual = { label: "Ritual", @@ -229,10 +227,9 @@ export default class DeltaGreenActor extends Actor { system.sanity.adaptations.helplessness.isAdapted = false; } - if(system.sanity.value <= system.sanity.currentBreakingPoint){ + if (system.sanity.value <= system.sanity.currentBreakingPoint) { system.sanity.breakingPointHit = true; - } - else{ + } else { system.sanity.breakingPointHit = false; } @@ -277,7 +274,7 @@ export default class DeltaGreenActor extends Actor { static async create(data, options = {}) { data.prototypeToken = data.prototypeToken || {}; if (data.type === "agent") { - mergeObject( + foundry.utils.mergeObject( data.prototypeToken, { actorLink: true, // this will make the 'Link Actor Data' option for a token is checked by default. So changes to the token sheet will reflect to the actor sheet. diff --git a/module/item/item-sheet.js b/module/item/item-sheet.js index 84d0207..e2fbeb9 100644 --- a/module/item/item-sheet.js +++ b/module/item/item-sheet.js @@ -7,7 +7,7 @@ export default class DeltaGreenItemSheet extends ItemSheet { /** @override */ static get defaultOptions() { - return mergeObject(super.defaultOptions, { + return foundry.utils.mergeObject(super.defaultOptions, { classes: ["deltagreen", "sheet", "item"], width: 520, height: 600, From 2fde78f278078042d2df61247fabc135ae606935 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 02:08:26 -0400 Subject: [PATCH 08/19] replace duplicate with foundry.utils.duplicate --- module/actor/actor-sheet.js | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index ea67fdf..92bea60 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -310,7 +310,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { currentBreakingPoint = this.actor.system.sanity.value - this.actor.system.statistics.pow.value; - const updatedData = duplicate(this.actor.system); + const updatedData = foundry.utils.duplicate(this.actor.system); updatedData.sanity.currentBreakingPoint = currentBreakingPoint; this.actor.update({ data: updatedData }); }); @@ -357,7 +357,9 @@ export default class DeltaGreenActorSheet extends ActorSheet { html.find(".special-training-delete").click((event) => { event.preventDefault(); const targetID = event.target.getAttribute("data-id"); - const specialTrainingArray = duplicate(this.actor.system.specialTraining); + const specialTrainingArray = foundry.utils.duplicate( + this.actor.system.specialTraining, + ); // Get the index of the training to be deleted const index = specialTrainingArray.findIndex( (training) => training.id === targetID, @@ -708,7 +710,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { } _addNewTypedSkill(newSkillLabel, newSkillGroup) { - const updatedData = duplicate(this.actor.system); + const updatedData = foundry.utils.duplicate(this.actor.system); const { typedSkills } = updatedData; const d = new Date(); @@ -740,7 +742,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { newSkillGroup !== null && newSkillGroup !== "" ) { - const updatedData = duplicate(this.actor.system); + const updatedData = foundry.utils.duplicate(this.actor.system); updatedData.typedSkills[targetSkill].label = newSkillLabel; updatedData.typedSkills[targetSkill].group = newSkillGroup; @@ -852,7 +854,9 @@ export default class DeltaGreenActorSheet extends ActorSheet { } _createSpecialTraining(label, attribute) { - const specialTrainingArray = duplicate(this.actor.system.specialTraining); + const specialTrainingArray = foundry.utils.duplicate( + this.actor.system.specialTraining, + ); specialTrainingArray.push({ name: label, attribute, @@ -862,7 +866,9 @@ export default class DeltaGreenActorSheet extends ActorSheet { } _editSpecialTraining(label, attribute, id) { - const specialTrainingArray = duplicate(this.actor.system.specialTraining); + const specialTrainingArray = foundry.utils.duplicate( + this.actor.system.specialTraining, + ); const specialTraining = specialTrainingArray.find( (training) => training.id === id, ); @@ -1023,7 +1029,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { currentBreakingPoint = 0; } - const updatedData = duplicate(this.actor.system); + const updatedData = foundry.utils.duplicate(this.actor.system); updatedData.sanity.currentBreakingPoint = currentBreakingPoint; @@ -1087,7 +1093,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { let improvedSkillList = ""; // Get copy of current system data, will update this and then apply all changes at once synchronously at the end. - const updatedData = duplicate(actorData); + const updatedData = foundry.utils.duplicate(actorData); failedSkills.forEach(([skill], value) => { updatedData.skills[skill].proficiency += resultList[value] ?? 1; // Increase proficiency by die result or by 1 if there is no dice roll. From eb5477035689dbb97429951571eab591bd9e3a5f Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 02:09:07 -0400 Subject: [PATCH 09/19] skill improvement application works again; simultaneously stops two deprecation warnings --- module/actor/actor-sheet.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 92bea60..8c27315 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -1080,7 +1080,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { let roll; if (rollFormula !== 1) { roll = new Roll(rollFormula, actorData); - roll.evaluate({ async: true }); + await roll.evaluate(); // Put the results into a list. roll.terms[0].results.forEach((result) => resultList.push( @@ -1161,14 +1161,11 @@ export default class DeltaGreenActorSheet extends ActorSheet { rollMode: game.settings.get("core", "rollMode"), }; - // play the dice rolling sound, like a regular in-chat roll - if (roll) - AudioHelper.play( - { src: "sounds/dice.wav", volume: 0.8, autoplay: true, loop: false }, - true, - ); + // Create a message from this roll, if there is one. + if (roll) return roll.toMessage(chatData); - ChatMessage.create(chatData, {}); + // If no roll, create a chat message directly. + return ChatMessage.create(chatData, {}); } /** @override */ From ed5d6aa8953c40427ad2814cd4fc050bd6511647 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 02:10:16 -0400 Subject: [PATCH 10/19] remove final `{ async: true }` in `roll.evaluate` --- module/actor/actor-sheet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 8c27315..0501a23 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -216,7 +216,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { roll.options.rollMode = dialogData.rollMode; } // Evaluate the roll. - await roll.evaluate({ async: true }); + await roll.evaluate(); // Send the roll to chat. roll.toChat(); } From 6cd71b5a5f2d5604cd7cb0d3be4f20b4b3f32652 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 02:15:36 -0400 Subject: [PATCH 11/19] fix lethality toggle (`data.` to `system.`) --- module/actor/actor-sheet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 0501a23..0597030 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -504,7 +504,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { const itemId = event.target.getAttribute("item-id"); const isLethal = event.target.getAttribute("is-lethal") === "true"; const item = this.actor.items.find((i) => i.id === itemId); - item.update({ "data.isLethal": !isLethal }); + item.update({ "system.isLethal": !isLethal }); } _showNewEditTypeSkillDialog(targetSkill, currentLabel, currentGroup) { From 5cb76539b8c4b2aa56dbc4bdbdb54eaead286f15 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 02:20:07 -0400 Subject: [PATCH 12/19] fix `data` to `system` in several locations --- module/actor/actor-sheet.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 0597030..62727b5 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -312,7 +312,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { const updatedData = foundry.utils.duplicate(this.actor.system); updatedData.sanity.currentBreakingPoint = currentBreakingPoint; - this.actor.update({ data: updatedData }); + this.actor.update({ system: updatedData }); }); html.find(".typed-skill-add").click((event) => { @@ -732,7 +732,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { updatedData.typedSkills = typedSkills; - this.actor.update({ data: updatedData }); + this.actor.update({ system: updatedData }); } _updateTypedSkill(targetSkill, newSkillLabel, newSkillGroup) { @@ -747,7 +747,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { updatedData.typedSkills[targetSkill].label = newSkillLabel; updatedData.typedSkills[targetSkill].group = newSkillGroup; - this.actor.update({ data: updatedData }); + this.actor.update({ system: updatedData }); } } @@ -1033,7 +1033,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { updatedData.sanity.currentBreakingPoint = currentBreakingPoint; - this.actor.update({ data: updatedData }); + this.actor.update({ system: updatedData }); } _onEquippedStatusChange(event) { @@ -1046,7 +1046,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { const item = this.actor.items.get(dataset.id); let isEquipped = item.system.equipped; isEquipped = !isEquipped; - item.update({ data: { equipped: isEquipped } }); + item.update({ system: { equipped: isEquipped } }); } catch (ex) { console.log(ex); } From f8f61d49e3ac2982d6487fb388e7ccf77d96b48a Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 02:20:44 -0400 Subject: [PATCH 13/19] replace randomID with foundry.utils.randomID --- module/actor/actor-sheet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 62727b5..007b303 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -860,7 +860,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { specialTrainingArray.push({ name: label, attribute, - id: randomID(), + id: foundry.utils.randomID(), }); this.actor.update({ "system.specialTraining": specialTrainingArray }); } From b72276fdf86c6b65452ec1b759f0dec6b2b97763 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 02:27:20 -0400 Subject: [PATCH 14/19] deleting special training works again --- module/actor/actor-sheet.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 007b303..05cc275 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -356,7 +356,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { // Handle deletion of Special Training html.find(".special-training-delete").click((event) => { event.preventDefault(); - const targetID = event.target.getAttribute("data-id"); + const targetID = event.currentTarget.getAttribute("data-id"); const specialTrainingArray = foundry.utils.duplicate( this.actor.system.specialTraining, ); From 968968245c892fc0f03960b1d41e0aa0b818bcfd Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 12:36:28 -0400 Subject: [PATCH 15/19] move eslint global variable ignores to eslint config file --- .eslintrc.yml | 52 +++++++++++++++++++++++++++++++ module/actor/actor-sheet.js | 2 -- module/actor/actor.js | 2 -- module/deltagreen.js | 2 -- module/item/item-sheet.js | 2 -- module/item/item.js | 2 -- module/other/macro-functions.js | 2 -- module/other/register-helpers.js | 2 -- module/other/stat-parser-macro.js | 22 ++++++++----- module/other/utility-functions.js | 2 -- module/roll/roll.js | 1 - module/settings.js | 2 -- module/templates.js | 2 -- 13 files changed, 66 insertions(+), 29 deletions(-) diff --git a/.eslintrc.yml b/.eslintrc.yml index 09a1029..40bba46 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -39,6 +39,58 @@ rules: import/extensions: - warn - always +globals: + "$": readonly + ActiveEffect: readonly + ActiveEffectConfig: readonly + Actor: readonly + Actors: readonly + ActorSheet: readonly + Babele: readonly + CONFIG: readonly + CONST: readonly + ChatMessage: readonly + Combat: readonly + Combatant: readonly + ContextMenu: readonly + Dialog: readonly + DocumentSheetConfig: readonly + Folder: readonly + FormApplication: readonly + FormDataExtended: readonly + Handlebars: readonly + Hooks: readonly + ImagePopout: readonly + Item: readonly + Items: readonly + ItemSheet: readonly + Macro: readonly + Roll: readonly + Ruler: readonly + Scene: readonly + TextEditor: readonly + TokenDocument: readonly + canvas: readonly + debugger: readonly + document: readonly + dragRuler: readonly + duplicate: readonly + foundry: readonly + fromUuid: readonly + fromUuidSync: readonly + game: readonly + getProperty: readonly + globals: readonly + hasProperty: readonly + isNewerVersion: readonly + loadTemplates: readonly + mergeObject: readonly + parseUuid: readonly + randomID: readonly + renderTemplate: readonly + setProperty: readonly + ui: readonly + window: readonly settings: import/extensions: - ".js" diff --git a/module/actor/actor-sheet.js b/module/actor/actor-sheet.js index 05cc275..20c7e6c 100644 --- a/module/actor/actor-sheet.js +++ b/module/actor/actor-sheet.js @@ -1,5 +1,3 @@ -/* globals $ game Roll ChatMessage AudioHelper ActorSheet mergeObject Dialog TextEditor ActiveEffect ui duplicate fromUuidSync renderTemplate randomID */ - import DG from "../config.js"; import { DGPercentileRoll, diff --git a/module/actor/actor.js b/module/actor/actor.js index f6f22de..bf96c97 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -1,5 +1,3 @@ -/* global Actor Item mergeObject game */ - /** * Extend the base Actor entity by defining a custom roll data structure which is ideal for the Simple system. * @extends {Actor} diff --git a/module/deltagreen.js b/module/deltagreen.js index 2487f8f..284666d 100644 --- a/module/deltagreen.js +++ b/module/deltagreen.js @@ -1,5 +1,3 @@ -/* globals $ Hooks game CONFIG Actors Items ActorSheet ItemSheet duplicate */ - // Import Modules import DeltaGreenActor from "./actor/actor.js"; import DeltaGreenActorSheet from "./actor/actor-sheet.js"; diff --git a/module/item/item-sheet.js b/module/item/item-sheet.js index e2fbeb9..46c11c2 100644 --- a/module/item/item-sheet.js +++ b/module/item/item-sheet.js @@ -1,5 +1,3 @@ -/* global ItemSheet mergeObject TextEditor */ - /** * Extend the basic ItemSheet with some very simple modifications * @extends {ItemSheet} diff --git a/module/item/item.js b/module/item/item.js index 740d577..e0479da 100644 --- a/module/item/item.js +++ b/module/item/item.js @@ -1,5 +1,3 @@ -/* globals Item */ - import { DGDamageRoll, DGLethalityRoll } from "../roll/roll.js"; /** diff --git a/module/other/macro-functions.js b/module/other/macro-functions.js index b488615..0f0f8bd 100644 --- a/module/other/macro-functions.js +++ b/module/other/macro-functions.js @@ -1,5 +1,3 @@ -/* global game Macro ChatMessage ui */ - import * as DGRolls from "../roll/roll.js"; /* -------------------------------------------- */ diff --git a/module/other/register-helpers.js b/module/other/register-helpers.js index 02f3775..1356dde 100644 --- a/module/other/register-helpers.js +++ b/module/other/register-helpers.js @@ -1,5 +1,3 @@ -/* global Handlebars CONFIG game */ - import DGUtils from "./utility-functions.js"; export default function registerHandlebarsHelpers() { diff --git a/module/other/stat-parser-macro.js b/module/other/stat-parser-macro.js index ac67934..7da8d3a 100644 --- a/module/other/stat-parser-macro.js +++ b/module/other/stat-parser-macro.js @@ -1,7 +1,5 @@ -/* global Dialog Actor */ - -function GetNotesFromInput(inputText){ - const matchStr = '(?:ATTACKS:[\\S\\s]*?\\.\\n)([\\S\\s]*)'; +function GetNotesFromInput(inputText) { + const matchStr = "(?:ATTACKS:[\\S\\s]*?\\.\\n)([\\S\\s]*)"; const re = new RegExp(matchStr, "gi"); const results = inputText.match(re); let notes = ""; @@ -9,7 +7,7 @@ function GetNotesFromInput(inputText){ try { if (results != null && results.length > 0) { notes = results[0]; - notes = notes.replace("\n", " ") + notes = notes.replace("\n", " "); } } catch (ex) { console.log("GetNotesFromInput Error"); @@ -111,11 +109,19 @@ async function RegexParseNpcStatBlock(inputStr, actorType) { if (tempStr.length > 0) { actorData.name = tempStr[0]; - + // set the alternate description/profession/etc. // if this doesn't exist, the next line should be the attributes starting with strength // so if the second line starts with "STR" then just leave it be. - if (tempStr.length > 1 && tempStr[1].substring(0, 3) != "STR" && tempStr[1].substring(0, 3) != "CON" && tempStr[1].substring(0, 3) != "DEX" && tempStr[1].substring(0, 3) != "INT" && tempStr[1].substring(0, 3) != "POW" && tempStr[1].substring(0, 3) != "CHA") { + if ( + tempStr.length > 1 && + tempStr[1].substring(0, 3) != "STR" && + tempStr[1].substring(0, 3) != "CON" && + tempStr[1].substring(0, 3) != "DEX" && + tempStr[1].substring(0, 3) != "INT" && + tempStr[1].substring(0, 3) != "POW" && + tempStr[1].substring(0, 3) != "CHA" + ) { shortDescription = tempStr[1]; } } else { @@ -388,7 +394,7 @@ async function RegexParseNpcStatBlock(inputStr, actorType) { actorData.data.typedSkills[`tskill_${index.toString()}`] = element; } - if(actorType === "npc" || actorType === "unnatural"){ + if (actorType === "npc" || actorType === "unnatural") { actorData.data.notes = GetNotesFromInput(inputStr); } diff --git a/module/other/utility-functions.js b/module/other/utility-functions.js index 75db6c5..dabf602 100644 --- a/module/other/utility-functions.js +++ b/module/other/utility-functions.js @@ -1,5 +1,3 @@ -/* globals game */ - export default class DGUtils { /** * Attempt to localize a keyword, and gracefully fallback to something else if the key does not exist. diff --git a/module/roll/roll.js b/module/roll/roll.js index fb2db05..9d6df3a 100644 --- a/module/roll/roll.js +++ b/module/roll/roll.js @@ -1,5 +1,4 @@ /* eslint-disable max-classes-per-file */ -/* globals game Roll ChatMessage AudioHelper renderTemplate Dialog */ import DGUtils from "../other/utility-functions.js"; diff --git a/module/settings.js b/module/settings.js index da73354..3b500df 100644 --- a/module/settings.js +++ b/module/settings.js @@ -1,5 +1,3 @@ -/* global game */ - export default function registerSystemSettings() { game.settings.register("deltagreen", "characterSheetStyle", { name: "Character Sheet Style", diff --git a/module/templates.js b/module/templates.js index 7baa2eb..feb7415 100644 --- a/module/templates.js +++ b/module/templates.js @@ -1,5 +1,3 @@ -/* global loadTemplates */ - /** * Define a set of template paths to pre-load * Pre-loaded templates are compiled and cached for fast access when rendering From cc3cd1ea62dfc53263939e8a03a3e1af48cf9221 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Sat, 8 Jun 2024 12:59:02 -0400 Subject: [PATCH 16/19] fix linting errors in stat-parser-macro.js --- module/other/stat-parser-macro.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/module/other/stat-parser-macro.js b/module/other/stat-parser-macro.js index 7da8d3a..80540cd 100644 --- a/module/other/stat-parser-macro.js +++ b/module/other/stat-parser-macro.js @@ -6,7 +6,7 @@ function GetNotesFromInput(inputText) { try { if (results != null && results.length > 0) { - notes = results[0]; + [notes] = results; notes = notes.replace("\n", " "); } } catch (ex) { @@ -108,21 +108,21 @@ async function RegexParseNpcStatBlock(inputStr, actorType) { tempStr = inputStr.split(/\r?\n/); if (tempStr.length > 0) { - actorData.name = tempStr[0]; + [actorData.name] = tempStr; // set the alternate description/profession/etc. // if this doesn't exist, the next line should be the attributes starting with strength // so if the second line starts with "STR" then just leave it be. if ( tempStr.length > 1 && - tempStr[1].substring(0, 3) != "STR" && - tempStr[1].substring(0, 3) != "CON" && - tempStr[1].substring(0, 3) != "DEX" && - tempStr[1].substring(0, 3) != "INT" && - tempStr[1].substring(0, 3) != "POW" && - tempStr[1].substring(0, 3) != "CHA" + tempStr[1].substring(0, 3) !== "STR" && + tempStr[1].substring(0, 3) !== "CON" && + tempStr[1].substring(0, 3) !== "DEX" && + tempStr[1].substring(0, 3) !== "INT" && + tempStr[1].substring(0, 3) !== "POW" && + tempStr[1].substring(0, 3) !== "CHA" ) { - shortDescription = tempStr[1]; + [, shortDescription] = tempStr; } } else { actorData.name = "Unknown"; From d4048649927a9b7b23ec1c92d601571d87443c9c Mon Sep 17 00:00:00 2001 From: TheLastScrub <67403321+TheLastScrub@users.noreply.github.com> Date: Sun, 9 Jun 2024 19:51:31 -0700 Subject: [PATCH 17/19] update changelog --- CHANGELOG.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbbded0..d47c65d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ ## Release/Patch Notes +### Version 1.4.5 - 2024-??-?? + +- Fix [GitHub #111] - v12 Compatibility. There are various issues that have arisen in the change to v12, the Agent sheet being broken being the most obvious. But several issues with rolls and with Dice So Nice were also fixed. +- Fix - Lethality toggle not updating properly. +- Enhancement [GitHib #113] - (On-going) Slight improvements to stat parser module. +- Fix [GitHub #116] - This was fixed as a side effect of fixing the v12 Dice So Nice issues, previously when rolling with Dice So Nice the sound of Foundry VTT dice was played, then the Dice So Nice sound effects played, and finally the roll would show. +- Enhancement - Better localization of new actor and item names. + ### Version 1.4.4 - 2024-04-14 - Fix [GitHub #109] - Typo in Disorder header @@ -8,7 +16,7 @@ ### Version 1.4.3 - 2024-04-07 - Enhancement [Github #101] - Thanks to 16-Bits and jalensailen for putting together a way to change the sorting to be alphabetical by column instead of by row. Note - you must opt into this behaviour by changing a setting for the system, the default is the original behavior that sorts by rows. Enabling the column sort option better mathes the standard character sheet (although 'type' skills are still in their current position). -- Fix [Github #106] - A bug in the system would change the first 'type' skill's label to the localized version of 'Art - Painting' if it still had the original name that comes with a new character, regardless of it had been edited to something else entirely like 'Science - Physics' or whatnot. This bug unfortuanately effected the import of all the 1001 pregenerated agents in the compendium pack, leading to in some cases even the most harded Special Operator having near world class painting skills. The pregenerated agents were deleted and reformed to fix this. +- Fix [Github #106] - A bug in the system would change the first 'type' skill's label to the localized version of 'Art - Painting' if it still had the original name that comes with a new character, regardless of it had been edited to something else entirely like 'Science - Physics' or whatnot. This bug unfortuanately effected the import of all the 1001 pregenerated agents in the compendium pack, leading to in some cases even the most harded Special Operator having near world class painting skills. The pregenerated agents were deleted and reformed to fix this. - Enhancement [Github #106] while doing previous fix, changed agents so they had the profession stripped off their names ("NURSE-LastName, FirstName" now just "LastName, FirstName). This was originally done to make it easier to see in the compendium which agents were for which profession at a glance. But since compendium packs (and the Foundry VTT CLI) support folders natively now, they were instead sorted into folders matching their profession to make perusing them easier and to clean up the overall list, as picking through 1001 entries could be a bit challenging. ### Version 1.4.2 - 2024-01-28 From 69115dd0eedfd9d83f0e6797b28287056b572b21 Mon Sep 17 00:00:00 2001 From: TheLastScrub <67403321+TheLastScrub@users.noreply.github.com> Date: Tue, 11 Jun 2024 20:24:22 -0700 Subject: [PATCH 18/19] added icons used in Foundry Premium Module --- README.md | 2 ++ assets/icons/3d-printer.svg | 1 + assets/icons/acid.svg | 1 + assets/icons/acog.svg | 1 + assets/icons/anfo.svg | 1 + assets/icons/artillery.svg | 1 + assets/icons/autocannon.svg | 1 + assets/icons/baseball-bat.svg | 2 +- assets/icons/baton.svg | 2 +- assets/icons/bayonet.svg | 2 +- assets/icons/binoculars.svg | 1 + assets/icons/bomb-suit.svg | 1 + assets/icons/brass-knuckles.svg | 2 +- assets/icons/bug-detector.svg | 1 + assets/icons/c4.svg | 1 + assets/icons/camping-gear.svg | 1 + assets/icons/combat-knife.svg | 1 + assets/icons/computer.svg | 1 + assets/icons/cruise-missile.svg | 1 + assets/icons/drone.svg | 1 + assets/icons/electroshock.svg | 1 + assets/icons/fire-extinguisher.svg | 1 + assets/icons/first-aid-kit.svg | 1 + assets/icons/flamethrower.svg | 1 + assets/icons/flash-bang-grenade.svg | 1 + assets/icons/flashlight.svg | 2 +- assets/icons/flexible-cuffs.svg | 1 + assets/icons/forcible-entry-tool.svg | 1 + assets/icons/gas-mask.svg | 1 + assets/icons/general-purpose-bomb.svg | 1 + assets/icons/goggles.svg | 1 + assets/icons/gps-tracking.svg | 1 + assets/icons/grenade.svg | 2 +- assets/icons/ground-penetrating-radar.svg | 1 + assets/icons/handcuffs.svg | 1 + assets/icons/handheld-gps.svg | 1 + assets/icons/hatchet.svg | 2 +- assets/icons/hazmat-suit.svg | 1 + assets/icons/helmet.svg | 2 +- assets/icons/holographic-sight.svg | 1 + assets/icons/ied.svg | 1 + assets/icons/imsi-catcher.svg | 1 + assets/icons/jammer.svg | 1 + assets/icons/kevlar-vest.svg | 2 +- assets/icons/knife.svg | 1 + assets/icons/laser.svg | 1 + assets/icons/lockpick-gun.svg | 1 + assets/icons/lockpick-kit.svg | 1 + assets/icons/long-sword.svg | 1 + assets/icons/machine-gun.svg | 1 + assets/icons/microphone.svg | 1 + assets/icons/minigun.svg | 1 + assets/icons/mortar.svg | 1 + assets/icons/optics.svg | 1 + assets/icons/penetrator-mine.svg | 1 + assets/icons/pepper-spray-can.svg | 1 + assets/icons/pepper-spray-keychain.svg | 1 + assets/icons/phone.svg | 1 + assets/icons/pistol.svg | 1 + assets/icons/ppe.svg | 1 + assets/icons/rifle.svg | 1 + assets/icons/rocket.svg | 1 + assets/icons/rope.svg | 1 + assets/icons/satellite-phone.svg | 1 + assets/icons/scuba-gear.svg | 1 + assets/icons/shotgun.svg | 1 + assets/icons/smg.svg | 1 + assets/icons/software.svg | 1 + assets/icons/sound.svg | 1 + assets/icons/suppressor.svg | 1 + assets/icons/tablet.svg | 1 + assets/icons/tactical-body-armor.svg | 1 + assets/icons/tear-gas-grenade.svg | 1 + assets/icons/telescope.svg | 1 + assets/icons/telescopic-sight.svg | 1 + assets/icons/tomahawk.svg | 1 + assets/icons/two-handed-sword.svg | 2 +- assets/icons/unarmed.svg | 1 + assets/icons/walkie-talkie.svg | 1 + assets/icons/wood-axe.svg | 2 +- 80 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 assets/icons/3d-printer.svg create mode 100644 assets/icons/acid.svg create mode 100644 assets/icons/acog.svg create mode 100644 assets/icons/anfo.svg create mode 100644 assets/icons/artillery.svg create mode 100644 assets/icons/autocannon.svg create mode 100644 assets/icons/binoculars.svg create mode 100644 assets/icons/bomb-suit.svg create mode 100644 assets/icons/bug-detector.svg create mode 100644 assets/icons/c4.svg create mode 100644 assets/icons/camping-gear.svg create mode 100644 assets/icons/combat-knife.svg create mode 100644 assets/icons/computer.svg create mode 100644 assets/icons/cruise-missile.svg create mode 100644 assets/icons/drone.svg create mode 100644 assets/icons/electroshock.svg create mode 100644 assets/icons/fire-extinguisher.svg create mode 100644 assets/icons/first-aid-kit.svg create mode 100644 assets/icons/flamethrower.svg create mode 100644 assets/icons/flash-bang-grenade.svg create mode 100644 assets/icons/flexible-cuffs.svg create mode 100644 assets/icons/forcible-entry-tool.svg create mode 100644 assets/icons/gas-mask.svg create mode 100644 assets/icons/general-purpose-bomb.svg create mode 100644 assets/icons/goggles.svg create mode 100644 assets/icons/gps-tracking.svg create mode 100644 assets/icons/ground-penetrating-radar.svg create mode 100644 assets/icons/handcuffs.svg create mode 100644 assets/icons/handheld-gps.svg create mode 100644 assets/icons/hazmat-suit.svg create mode 100644 assets/icons/holographic-sight.svg create mode 100644 assets/icons/ied.svg create mode 100644 assets/icons/imsi-catcher.svg create mode 100644 assets/icons/jammer.svg create mode 100644 assets/icons/knife.svg create mode 100644 assets/icons/laser.svg create mode 100644 assets/icons/lockpick-gun.svg create mode 100644 assets/icons/lockpick-kit.svg create mode 100644 assets/icons/long-sword.svg create mode 100644 assets/icons/machine-gun.svg create mode 100644 assets/icons/microphone.svg create mode 100644 assets/icons/minigun.svg create mode 100644 assets/icons/mortar.svg create mode 100644 assets/icons/optics.svg create mode 100644 assets/icons/penetrator-mine.svg create mode 100644 assets/icons/pepper-spray-can.svg create mode 100644 assets/icons/pepper-spray-keychain.svg create mode 100644 assets/icons/phone.svg create mode 100644 assets/icons/pistol.svg create mode 100644 assets/icons/ppe.svg create mode 100644 assets/icons/rifle.svg create mode 100644 assets/icons/rocket.svg create mode 100644 assets/icons/rope.svg create mode 100644 assets/icons/satellite-phone.svg create mode 100644 assets/icons/scuba-gear.svg create mode 100644 assets/icons/shotgun.svg create mode 100644 assets/icons/smg.svg create mode 100644 assets/icons/software.svg create mode 100644 assets/icons/sound.svg create mode 100644 assets/icons/suppressor.svg create mode 100644 assets/icons/tablet.svg create mode 100644 assets/icons/tactical-body-armor.svg create mode 100644 assets/icons/tear-gas-grenade.svg create mode 100644 assets/icons/telescope.svg create mode 100644 assets/icons/telescopic-sight.svg create mode 100644 assets/icons/tomahawk.svg create mode 100644 assets/icons/unarmed.svg create mode 100644 assets/icons/walkie-talkie.svg diff --git a/README.md b/README.md index 69d7e7d..dbb2037 100644 --- a/README.md +++ b/README.md @@ -178,3 +178,5 @@ https://creativecommons.org/licenses/by/3.0/ - Swap Bag icon by Lorc under CC BY 3.0 - Person icon by Delapouite under CC BY 3.0 - Cowled icon by Lorc under CC BY 3.0 + +- Various more from Delapouite, John Colburn, Lorc, Pierre, Leducq, Sbed, and Skull. diff --git a/assets/icons/3d-printer.svg b/assets/icons/3d-printer.svg new file mode 100644 index 0000000..c6ab5aa --- /dev/null +++ b/assets/icons/3d-printer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/acid.svg b/assets/icons/acid.svg new file mode 100644 index 0000000..d4fbe8c --- /dev/null +++ b/assets/icons/acid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/acog.svg b/assets/icons/acog.svg new file mode 100644 index 0000000..2b61265 --- /dev/null +++ b/assets/icons/acog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/anfo.svg b/assets/icons/anfo.svg new file mode 100644 index 0000000..79342cc --- /dev/null +++ b/assets/icons/anfo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/artillery.svg b/assets/icons/artillery.svg new file mode 100644 index 0000000..c05b65d --- /dev/null +++ b/assets/icons/artillery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/autocannon.svg b/assets/icons/autocannon.svg new file mode 100644 index 0000000..2480a3b --- /dev/null +++ b/assets/icons/autocannon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/baseball-bat.svg b/assets/icons/baseball-bat.svg index 3b92dbc..dd820fe 100644 --- a/assets/icons/baseball-bat.svg +++ b/assets/icons/baseball-bat.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/baton.svg b/assets/icons/baton.svg index 8e5b399..f142d08 100644 --- a/assets/icons/baton.svg +++ b/assets/icons/baton.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/bayonet.svg b/assets/icons/bayonet.svg index 951454b..bf4b9ef 100644 --- a/assets/icons/bayonet.svg +++ b/assets/icons/bayonet.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/binoculars.svg b/assets/icons/binoculars.svg new file mode 100644 index 0000000..35550c6 --- /dev/null +++ b/assets/icons/binoculars.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/bomb-suit.svg b/assets/icons/bomb-suit.svg new file mode 100644 index 0000000..694bcb5 --- /dev/null +++ b/assets/icons/bomb-suit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/brass-knuckles.svg b/assets/icons/brass-knuckles.svg index d240baf..df97197 100644 --- a/assets/icons/brass-knuckles.svg +++ b/assets/icons/brass-knuckles.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/bug-detector.svg b/assets/icons/bug-detector.svg new file mode 100644 index 0000000..a15c4ef --- /dev/null +++ b/assets/icons/bug-detector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/c4.svg b/assets/icons/c4.svg new file mode 100644 index 0000000..17de038 --- /dev/null +++ b/assets/icons/c4.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/camping-gear.svg b/assets/icons/camping-gear.svg new file mode 100644 index 0000000..8003fcd --- /dev/null +++ b/assets/icons/camping-gear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/combat-knife.svg b/assets/icons/combat-knife.svg new file mode 100644 index 0000000..d2dc36a --- /dev/null +++ b/assets/icons/combat-knife.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/computer.svg b/assets/icons/computer.svg new file mode 100644 index 0000000..931be86 --- /dev/null +++ b/assets/icons/computer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/cruise-missile.svg b/assets/icons/cruise-missile.svg new file mode 100644 index 0000000..83ed7c8 --- /dev/null +++ b/assets/icons/cruise-missile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/drone.svg b/assets/icons/drone.svg new file mode 100644 index 0000000..d762ae7 --- /dev/null +++ b/assets/icons/drone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/electroshock.svg b/assets/icons/electroshock.svg new file mode 100644 index 0000000..076abea --- /dev/null +++ b/assets/icons/electroshock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/fire-extinguisher.svg b/assets/icons/fire-extinguisher.svg new file mode 100644 index 0000000..1013c50 --- /dev/null +++ b/assets/icons/fire-extinguisher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/first-aid-kit.svg b/assets/icons/first-aid-kit.svg new file mode 100644 index 0000000..fbac239 --- /dev/null +++ b/assets/icons/first-aid-kit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/flamethrower.svg b/assets/icons/flamethrower.svg new file mode 100644 index 0000000..021fdd3 --- /dev/null +++ b/assets/icons/flamethrower.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/flash-bang-grenade.svg b/assets/icons/flash-bang-grenade.svg new file mode 100644 index 0000000..b08b4b8 --- /dev/null +++ b/assets/icons/flash-bang-grenade.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/flashlight.svg b/assets/icons/flashlight.svg index f0b613c..f271431 100644 --- a/assets/icons/flashlight.svg +++ b/assets/icons/flashlight.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/flexible-cuffs.svg b/assets/icons/flexible-cuffs.svg new file mode 100644 index 0000000..812d718 --- /dev/null +++ b/assets/icons/flexible-cuffs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/forcible-entry-tool.svg b/assets/icons/forcible-entry-tool.svg new file mode 100644 index 0000000..9d27c5c --- /dev/null +++ b/assets/icons/forcible-entry-tool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/gas-mask.svg b/assets/icons/gas-mask.svg new file mode 100644 index 0000000..b5009f7 --- /dev/null +++ b/assets/icons/gas-mask.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/general-purpose-bomb.svg b/assets/icons/general-purpose-bomb.svg new file mode 100644 index 0000000..10d60ac --- /dev/null +++ b/assets/icons/general-purpose-bomb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/goggles.svg b/assets/icons/goggles.svg new file mode 100644 index 0000000..76d8d55 --- /dev/null +++ b/assets/icons/goggles.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/gps-tracking.svg b/assets/icons/gps-tracking.svg new file mode 100644 index 0000000..a7bf504 --- /dev/null +++ b/assets/icons/gps-tracking.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/grenade.svg b/assets/icons/grenade.svg index dd0b7ba..358b666 100644 --- a/assets/icons/grenade.svg +++ b/assets/icons/grenade.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/ground-penetrating-radar.svg b/assets/icons/ground-penetrating-radar.svg new file mode 100644 index 0000000..6e55a18 --- /dev/null +++ b/assets/icons/ground-penetrating-radar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/handcuffs.svg b/assets/icons/handcuffs.svg new file mode 100644 index 0000000..162a963 --- /dev/null +++ b/assets/icons/handcuffs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/handheld-gps.svg b/assets/icons/handheld-gps.svg new file mode 100644 index 0000000..1303d2b --- /dev/null +++ b/assets/icons/handheld-gps.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/hatchet.svg b/assets/icons/hatchet.svg index f78fbeb..e964d21 100644 --- a/assets/icons/hatchet.svg +++ b/assets/icons/hatchet.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/hazmat-suit.svg b/assets/icons/hazmat-suit.svg new file mode 100644 index 0000000..f38456a --- /dev/null +++ b/assets/icons/hazmat-suit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/helmet.svg b/assets/icons/helmet.svg index 1f59046..06842c3 100644 --- a/assets/icons/helmet.svg +++ b/assets/icons/helmet.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/holographic-sight.svg b/assets/icons/holographic-sight.svg new file mode 100644 index 0000000..31c0301 --- /dev/null +++ b/assets/icons/holographic-sight.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/ied.svg b/assets/icons/ied.svg new file mode 100644 index 0000000..fda6336 --- /dev/null +++ b/assets/icons/ied.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/imsi-catcher.svg b/assets/icons/imsi-catcher.svg new file mode 100644 index 0000000..48810ec --- /dev/null +++ b/assets/icons/imsi-catcher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/jammer.svg b/assets/icons/jammer.svg new file mode 100644 index 0000000..060ba23 --- /dev/null +++ b/assets/icons/jammer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/kevlar-vest.svg b/assets/icons/kevlar-vest.svg index 345b3d7..a60e37f 100644 --- a/assets/icons/kevlar-vest.svg +++ b/assets/icons/kevlar-vest.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/knife.svg b/assets/icons/knife.svg new file mode 100644 index 0000000..bc8fa0d --- /dev/null +++ b/assets/icons/knife.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/laser.svg b/assets/icons/laser.svg new file mode 100644 index 0000000..fbc3012 --- /dev/null +++ b/assets/icons/laser.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/lockpick-gun.svg b/assets/icons/lockpick-gun.svg new file mode 100644 index 0000000..1494968 --- /dev/null +++ b/assets/icons/lockpick-gun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/lockpick-kit.svg b/assets/icons/lockpick-kit.svg new file mode 100644 index 0000000..55968cb --- /dev/null +++ b/assets/icons/lockpick-kit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/long-sword.svg b/assets/icons/long-sword.svg new file mode 100644 index 0000000..7aa97b7 --- /dev/null +++ b/assets/icons/long-sword.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/machine-gun.svg b/assets/icons/machine-gun.svg new file mode 100644 index 0000000..d7da0a1 --- /dev/null +++ b/assets/icons/machine-gun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/microphone.svg b/assets/icons/microphone.svg new file mode 100644 index 0000000..2290499 --- /dev/null +++ b/assets/icons/microphone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/minigun.svg b/assets/icons/minigun.svg new file mode 100644 index 0000000..da9a46d --- /dev/null +++ b/assets/icons/minigun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/mortar.svg b/assets/icons/mortar.svg new file mode 100644 index 0000000..1395837 --- /dev/null +++ b/assets/icons/mortar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/optics.svg b/assets/icons/optics.svg new file mode 100644 index 0000000..5fbb056 --- /dev/null +++ b/assets/icons/optics.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/penetrator-mine.svg b/assets/icons/penetrator-mine.svg new file mode 100644 index 0000000..741269d --- /dev/null +++ b/assets/icons/penetrator-mine.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/pepper-spray-can.svg b/assets/icons/pepper-spray-can.svg new file mode 100644 index 0000000..59f36a3 --- /dev/null +++ b/assets/icons/pepper-spray-can.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/pepper-spray-keychain.svg b/assets/icons/pepper-spray-keychain.svg new file mode 100644 index 0000000..ffaf798 --- /dev/null +++ b/assets/icons/pepper-spray-keychain.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/phone.svg b/assets/icons/phone.svg new file mode 100644 index 0000000..f9489c8 --- /dev/null +++ b/assets/icons/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/pistol.svg b/assets/icons/pistol.svg new file mode 100644 index 0000000..10d3099 --- /dev/null +++ b/assets/icons/pistol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/ppe.svg b/assets/icons/ppe.svg new file mode 100644 index 0000000..727af31 --- /dev/null +++ b/assets/icons/ppe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/rifle.svg b/assets/icons/rifle.svg new file mode 100644 index 0000000..e6e5764 --- /dev/null +++ b/assets/icons/rifle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/rocket.svg b/assets/icons/rocket.svg new file mode 100644 index 0000000..126be1b --- /dev/null +++ b/assets/icons/rocket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/rope.svg b/assets/icons/rope.svg new file mode 100644 index 0000000..922bbea --- /dev/null +++ b/assets/icons/rope.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/satellite-phone.svg b/assets/icons/satellite-phone.svg new file mode 100644 index 0000000..9ccf21a --- /dev/null +++ b/assets/icons/satellite-phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/scuba-gear.svg b/assets/icons/scuba-gear.svg new file mode 100644 index 0000000..47cbc0a --- /dev/null +++ b/assets/icons/scuba-gear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/shotgun.svg b/assets/icons/shotgun.svg new file mode 100644 index 0000000..5776cfe --- /dev/null +++ b/assets/icons/shotgun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/smg.svg b/assets/icons/smg.svg new file mode 100644 index 0000000..82388ec --- /dev/null +++ b/assets/icons/smg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/software.svg b/assets/icons/software.svg new file mode 100644 index 0000000..226b926 --- /dev/null +++ b/assets/icons/software.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/sound.svg b/assets/icons/sound.svg new file mode 100644 index 0000000..2056647 --- /dev/null +++ b/assets/icons/sound.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/suppressor.svg b/assets/icons/suppressor.svg new file mode 100644 index 0000000..a13111c --- /dev/null +++ b/assets/icons/suppressor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/tablet.svg b/assets/icons/tablet.svg new file mode 100644 index 0000000..7304dd2 --- /dev/null +++ b/assets/icons/tablet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/tactical-body-armor.svg b/assets/icons/tactical-body-armor.svg new file mode 100644 index 0000000..e4c0887 --- /dev/null +++ b/assets/icons/tactical-body-armor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/tear-gas-grenade.svg b/assets/icons/tear-gas-grenade.svg new file mode 100644 index 0000000..2067d5b --- /dev/null +++ b/assets/icons/tear-gas-grenade.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/telescope.svg b/assets/icons/telescope.svg new file mode 100644 index 0000000..629f404 --- /dev/null +++ b/assets/icons/telescope.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/telescopic-sight.svg b/assets/icons/telescopic-sight.svg new file mode 100644 index 0000000..e0a4dd8 --- /dev/null +++ b/assets/icons/telescopic-sight.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/tomahawk.svg b/assets/icons/tomahawk.svg new file mode 100644 index 0000000..c4fd12f --- /dev/null +++ b/assets/icons/tomahawk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/two-handed-sword.svg b/assets/icons/two-handed-sword.svg index 29399ad..e0b7e65 100644 --- a/assets/icons/two-handed-sword.svg +++ b/assets/icons/two-handed-sword.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/unarmed.svg b/assets/icons/unarmed.svg new file mode 100644 index 0000000..d96fcf4 --- /dev/null +++ b/assets/icons/unarmed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/walkie-talkie.svg b/assets/icons/walkie-talkie.svg new file mode 100644 index 0000000..c5ede79 --- /dev/null +++ b/assets/icons/walkie-talkie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/icons/wood-axe.svg b/assets/icons/wood-axe.svg index b9122d4..e2d31a6 100644 --- a/assets/icons/wood-axe.svg +++ b/assets/icons/wood-axe.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file From a9af332cadf2ead9c57a9cd855875681bc85989b Mon Sep 17 00:00:00 2001 From: TheLastScrub <67403321+TheLastScrub@users.noreply.github.com> Date: Mon, 17 Jun 2024 19:24:53 -0700 Subject: [PATCH 19/19] final commits for packing for v1.4.5 --- CHANGELOG.md | 2 +- system.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d47c65d..c93f1a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ ## Release/Patch Notes -### Version 1.4.5 - 2024-??-?? +### Version 1.4.5 - 2024-06-17 (FOUNDRY V12+ COMPATIBLE ONLY) - Fix [GitHub #111] - v12 Compatibility. There are various issues that have arisen in the change to v12, the Agent sheet being broken being the most obvious. But several issues with rolls and with Dice So Nice were also fixed. - Fix - Lethality toggle not updating properly. diff --git a/system.json b/system.json index dba6737..e30c5e8 100644 --- a/system.json +++ b/system.json @@ -17,7 +17,7 @@ ], "version": "1.3.5", "compatibility": { - "minimum": "11", + "minimum": "12", "verified": "12", "maximum": "12" },