From 21b83f3ea8997d2fe7bd88de13d6383a68cd2eda Mon Sep 17 00:00:00 2001 From: Budzyn <43236231+budzyn0@users.noreply.github.com> Date: Mon, 13 Oct 2025 16:48:25 +0200 Subject: [PATCH 01/19] ref. #274, Fix marking failure rolls timing when dicesonice is enabled (#276) * ref. #274, Fix marking failure rolls timing when dicesonice is enabled * Update CHANGELOG.md --- CHANGELOG.md | 6 ++++++ module/roll/roll.js | 27 +++++++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c7aec2..0b0416b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Release/Patch Notes +## Version 1.6.2 - 2025-xx-xx + +### **Bug Fixes:** + +- [#274] () - Automated fail marking now works after dice so nice resolve roll. + ## Version 1.6.1 - 2025-09-09 > Thanks to the following new contributor: [Tobifroe](https://github.com/tobifroe). diff --git a/module/roll/roll.js b/module/roll/roll.js index 02ab37f..768a8a0 100644 --- a/module/roll/roll.js +++ b/module/roll/roll.js @@ -256,6 +256,10 @@ export class DGPercentileRoll extends DGRoll { this.options.rollMode = "blindroll"; } + const diceSoNice = + game.modules.has("dice-so-nice") && + game.modules.get("dice-so-nice").active; + const label = this.createLabel(); let resultString = ""; @@ -299,12 +303,7 @@ export class DGPercentileRoll extends DGRoll { if (failureMark) { const keyForUpdate = `${this.skillPath}.failure`; - // TODO: auto-update actor or post icon with manual apply - await this.actor.update({ - [keyForUpdate]: true, - }); - - return this.toMessage({ + const message = await this.toMessage({ flags: { deltagreen: { rollbacks: { @@ -315,7 +314,19 @@ export class DGPercentileRoll extends DGRoll { content: html, flavor: label, }); + + if (diceSoNice) { + await game.dice3d.waitFor3DAnimationByMessageID(message.id); + } + + // TODO: auto-update actor or post icon with manual apply + await this.actor.update({ + [keyForUpdate]: true, + }); + + return message; } + return this.toMessage({ content: html, flavor: label }); } @@ -434,9 +445,9 @@ export class DGPercentileRoll extends DGRoll { * @returns {Boolean} */ get isInhuman() { - /* + /* Changing this to only consider the base x5 stat target for whether something is 'inhuman' - because I do not think the intent was an Agent with a high strength getting a +40% bonus to be considered 'inhuman' + because I do not think the intent was an Agent with a high strength getting a +40% bonus to be considered 'inhuman' and therefore benefit from the increased crit threshold, although could be wrong about this. */ if (this.target > 99 && this.type === "stat") { From efda25bf7e170507165a594004d51668ca4b1029 Mon Sep 17 00:00:00 2001 From: Budzyn <43236231+budzyn0@users.noreply.github.com> Date: Mon, 13 Oct 2025 17:10:04 +0200 Subject: [PATCH 02/19] ref. #258, #268 Quick fixes and enhancements for tooltips (#271) * ref. #258, #268 Quick fixes and enhancements for tooltips * Removed doing so many "unless" in templates and instead using a simple javascript function to handle behaviour of tooltips and titles. * Update changelog --- CHANGELOG.md | 5 + lang/en.json | 7 +- module/actor/actor.js | 6 +- module/settings.js | 17 +- module/sheets/base-actor-sheet.js | 91 ++++++- .../actor/partials/custom-skills-partial.html | 242 ++++++++++-------- templates/actor/partials/sanity-agent.html | 50 ++-- templates/actor/parts/gear-tab.html | 24 +- templates/actor/parts/header.html | 4 +- templates/actor/parts/motivations-tab.html | 1 + templates/actor/parts/skills-tab.html | 6 +- templates/item/item-motivation-sheet.html | 74 +++--- 12 files changed, 325 insertions(+), 202 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b0416b..af29087 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,14 @@ ## Version 1.6.2 - 2025-xx-xx +### **Features:** + +- [#258](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/258) - Added a keybind option for hovering tooltips and option to hide all. + ### **Bug Fixes:** - [#274] () - Automated fail marking now works after dice so nice resolve roll. +- [#268] () - Removed unnecessary tooltips. ## Version 1.6.1 - 2025-09-09 diff --git a/lang/en.json b/lang/en.json index e36837f..6884ba5 100644 --- a/lang/en.json +++ b/lang/en.json @@ -395,8 +395,11 @@ "DG.Settings.charactersheet.program": "The Program", "DG.Settings.sortskills.name": "Sort Skills By Column?", "DG.Settings.sortskills.hint": "Checked sorts by column. Unchecked sorts by row.", - "DG.Settings.hideSkillTooltips.name": "Hide Skill Tooltips", - "DG.Settings.hideSkillTooltips.hint": "Do not display skill tooltips in Agent sheets.", + "DG.Settings.skillTooltipDisplay.name": "Display tooltips", + "DG.Settings.skillTooltipDisplay.hint": "Choose when to display skill tooltips in Agent sheets.", + "DG.Settings.skillTooltipDisplay.hover": "On hover (default)", + "DG.Settings.skillTooltipDisplay.never": "Never", + "DG.Settings.skillTooltipDisplay.hoverShift": "On hover + Shift", "DG.Settings.keepSanityPrivate.name": "Keep Sanity Private", "DG.Settings.keepSanityPrivate.hint": "Hide sanity from players in both Agent sheets and rolls.", "DG.Settings.skillImprovementFormula.name": "Default Skill Improvement Roll", diff --git a/module/actor/actor.js b/module/actor/actor.js index c8d79c4..5a86091 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -10,8 +10,6 @@ export default class DeltaGreenActor extends Actor { super.prepareData(); const actorData = this; - const { system } = actorData; - const { flags } = actorData; // console.log('actor.js prepareData'); // console.log(this); @@ -86,7 +84,7 @@ export default class DeltaGreenActor extends Actor { proficiency: 99 - system.sanity.value, cannotBeImprovedByFailure: true, failure: false, - }; + }; if (system.skills.ritual.proficiency > 99) { system.skills.ritual.proficiency = 99; @@ -179,7 +177,7 @@ export default class DeltaGreenActor extends Actor { proficiency: 99 - system.sanity.value, cannotBeImprovedByFailure: true, failure: false, - }; + }; if (system.skills.ritual.proficiency > 99) { system.skills.ritual.proficiency = 99; diff --git a/module/settings.js b/module/settings.js index e9f7b11..2e3ad25 100644 --- a/module/settings.js +++ b/module/settings.js @@ -313,13 +313,20 @@ export default function registerSystemSettings() { default: false, }); - game.settings.register("deltagreen", "hideSkillTooltips", { - name: game.i18n.localize("DG.Settings.hideSkillTooltips.name"), - hint: game.i18n.localize("DG.Settings.hideSkillTooltips.hint"), + game.settings.register("deltagreen", "skillTooltipDisplay", { + name: game.i18n.localize("DG.Settings.skillTooltipDisplay.name"), + hint: game.i18n.localize("DG.Settings.skillTooltipDisplay.hint"), scope: "client", config: true, - type: Boolean, - default: false, + type: String, + choices: { + hover: game.i18n.localize("DG.Settings.skillTooltipDisplay.hover"), + never: game.i18n.localize("DG.Settings.skillTooltipDisplay.never"), + hoverShift: game.i18n.localize( + "DG.Settings.skillTooltipDisplay.hoverShift", + ), + }, + default: "hover", onChange: () => { foundry.applications.instances.forEach((app) => { if (app instanceof DGActorSheet) { diff --git a/module/sheets/base-actor-sheet.js b/module/sheets/base-actor-sheet.js index 7b1227c..f3033c2 100644 --- a/module/sheets/base-actor-sheet.js +++ b/module/sheets/base-actor-sheet.js @@ -83,13 +83,13 @@ export default class DGActorSheet extends DGSheetMixin(ActorSheetV2) { this._sortSkills(); this._sortCustomSkills(); - // Wether to hide skill tooltips - context.hideSkillTooltips = game.settings.get( + // Skill tooltip display setting + context.skillTooltipDisplay = game.settings.get( "deltagreen", - "hideSkillTooltips", + "skillTooltipDisplay", ); - if (!context.hideSkillTooltips) { + if (context.skillTooltipDisplay !== "never") { // Setup tooltips this._prepareSkillTooltips(); } @@ -158,6 +158,8 @@ export default class DGActorSheet extends DGSheetMixin(ActorSheetV2) { li.setAttribute("draggable", true); li.addEventListener("dragstart", handler, false); }); + + this._tooltipsSettings(this.element); } /** @override - Add buttons to the header controls. */ @@ -1356,4 +1358,85 @@ export default class DGActorSheet extends DGSheetMixin(ActorSheetV2) { const currentVal = foundry.utils.getProperty(targetDoc, prop); targetDoc.update({ [prop]: !currentVal }); } + + /** + * Require Shift while hovering to show tooltips. + * Supports either data-tooltip (preferred, may contain HTML) or title (plain text). + */ + _tooltipsSettings(root) { + const mode = game.settings.get("deltagreen", "skillTooltipDisplay"); + + // If not explicitly hoverShift or never, do nothing. + if (mode !== "hoverShift" && mode !== "never") return; + + // Query elements with either data-tooltip OR title + const nodes = root.querySelectorAll("[data-tooltip],[title]"); + + // If mode is "never": strip native attributes so no tooltips (native or custom) can appear. + if (mode === "never") { + nodes.forEach((el) => { + if (el.dataset.shiftTooltipInstalled === "true") return; + el.removeAttribute("data-tooltip"); + el.removeAttribute("title"); + el.dataset.shiftTooltipInstalled = "true"; + }); + return; + } + + // mode === "hoverShift": install Shift-to-show behavior using Foundry's tooltip + nodes.forEach((el) => { + if (el.dataset.shiftTooltipInstalled === "true") return; + + // Prefer data-tooltip, else use title + let html = el.getAttribute("data-tooltip"); + let isHtml = true; + + if (!html) { + const title = el.getAttribute("title"); + if (title) { + html = foundry.utils.escapeHTML(title); // treat title as plain text + isHtml = false; + } + } + + if (!html) return; // nothing usable + + // Remove native attributes so default tooltips don’t trigger + el.removeAttribute("data-tooltip"); + el.removeAttribute("title"); + el.dataset.shiftTooltipInstalled = "true"; + + // Always pass through { html } so
etc. render + const opts = isHtml ? { html } : { text: html }; + + const show = () => game.tooltip.activate(el, opts); + const hide = () => game.tooltip.deactivate(); + + const onKey = (ev) => { + if (ev.key !== "Shift") return; + if (!document.body.contains(el)) { + window.removeEventListener("keydown", onKey); + window.removeEventListener("keyup", onKey); + return; + } + if (ev.type === "keydown") show(); + else hide(); + }; + + const onEnter = (ev) => { + if (ev.shiftKey) show(); + window.addEventListener("keydown", onKey); + window.addEventListener("keyup", onKey); + }; + + const onLeave = () => { + hide(); + window.removeEventListener("keydown", onKey); + window.removeEventListener("keyup", onKey); + }; + + el.addEventListener("pointerenter", onEnter, { passive: true }); + el.addEventListener("pointerleave", onLeave, { passive: true }); + }); + } } diff --git a/templates/actor/partials/custom-skills-partial.html b/templates/actor/partials/custom-skills-partial.html index fd0df26..002a57f 100644 --- a/templates/actor/partials/custom-skills-partial.html +++ b/templates/actor/partials/custom-skills-partial.html @@ -1,125 +1,141 @@
- {{#each actor.system.sortedCustomSkills as |skill| }} - {{#if_eq type "typeSkill" }} + {{#each actor.system.sortedCustomSkills as |skill| }} + {{#if_eq type "typeSkill" }} -
-
- - - - {{#if_eq skill.actorType "agent" }} - - {{/if_eq}} -
- -
+
+
+ + + + {{#if_eq skill.actorType "agent" }} + + {{/if_eq}} +
+ +
- {{/if_eq}} + {{/if_eq}} - {{#if_eq type "training" }} + {{#if_eq type "training" }} -
-
- {{#if_not_eq (localize (concat 'DG.Attributes.' skill.key)) (concat "DG.Attributes." skill.key) }} - - {{else}} - {{#if_not_eq (localize (concat 'DG.Skills.' skill.key)) (concat "DG.Skills." skill.key) }} - - {{else}} - - {{/if_not_eq}} - {{/if_not_eq}} - -
- - -
-
-
+
+
+ {{#if_not_eq (localize (concat 'DG.Attributes.' skill.key)) (concat "DG.Attributes." skill.key) }} + + {{else}} + {{#if_not_eq (localize (concat 'DG.Skills.' skill.key)) (concat "DG.Skills." skill.key) }} + + {{else}} + + {{/if_not_eq}} + {{/if_not_eq}} + +
+ + +
+
+
- {{/if_eq}} + {{/if_eq}} - {{/each}} + {{/each}}
diff --git a/templates/actor/partials/sanity-agent.html b/templates/actor/partials/sanity-agent.html index 3a84228..fa8cbe0 100644 --- a/templates/actor/partials/sanity-agent.html +++ b/templates/actor/partials/sanity-agent.html @@ -1,27 +1,27 @@ -{{#if (keepSanityPrivate)}} - -/ -
-
???
-
+{{#if (keepSanityPrivate) }} + + / +
+
???
+
{{else}} - -/ -
-
{{numberFormat actor.system.sanity.max decimals=0 sign=false}}
-
+ + / +
+
{{numberFormat actor.system.sanity.max decimals=0 sign=false}}
+
{{/if}} diff --git a/templates/actor/parts/gear-tab.html b/templates/actor/parts/gear-tab.html index 0a2457c..39e290a 100644 --- a/templates/actor/parts/gear-tab.html +++ b/templates/actor/parts/gear-tab.html @@ -266,11 +266,15 @@ + title="Edit Item"> + + + title="Delete Item"> + + {{/each}} @@ -341,11 +345,15 @@ + title="Edit Item"> + + + title="Delete Item"> + + @@ -425,11 +433,15 @@ + title="Edit Item"> + + + title="Delete Item"> + + diff --git a/templates/actor/parts/header.html b/templates/actor/parts/header.html index 1adbb5f..370199b 100644 --- a/templates/actor/parts/header.html +++ b/templates/actor/parts/header.html @@ -4,13 +4,13 @@
{{actor.name}}
-
+

+ + data-tooltip="{{ skill.tooltip }}"> {{localizeWithFallback (concat "DG.Skills." skill.key) skill.label }} @@ -39,7 +36,6 @@ name="system.skills.{{skill.key }}.proficiency" value="{{skill.proficiency }}" data-dtype="Number" - data-tooltip="{{skill.targetProficiency }}" {{disabled skill.isCalculatedValue }} /> {{#if (eq ../actor.type "agent") }} -
+
{{localize 'DG.ItemWindow.Motivations.IsDisorder'}}: - - - - + {{localize 'DG.ItemWindow.Motivations.Motivation'}}: - + {{!-- Only Show the Disorders Section if Motivation Lost Checked --}} + {{#if item.system.crossedOut }} - title="{{localize 'DG.ItemWindow.Motivations.MotivationNameTooltip'}}" - - {{!-- If a motivation has been crossed off after a breaking point, do a strikeout on it and disable it. --}} - {{#if item.system.crossedOut}} - style="text-decoration: line-through;" - disabled - {{/if}} - /> - - - {{!-- Only Show the Disorders Section if Motivation Lost Checked --}} - {{#if item.system.crossedOut}} - - {{localize 'DG.ItemWindow.Motivations.Disorder'}}: - - - - {{localize 'DG.ItemWindow.Motivations.DisorderHasBeenCured'}}: - - - - {{/if}} + {{localize 'DG.ItemWindow.Motivations.Disorder'}}: + + {{localize 'DG.ItemWindow.Motivations.DisorderHasBeenCured'}}: + + {{/if}}
-
+
{{editor enrichedDescription target="system.description" engine="prosemirror" button=true owner=owner editable=editable}}
From 8198cb78c96965abe25e25751f125d726f8edae2 Mon Sep 17 00:00:00 2001 From: Samuel Lopez Date: Mon, 13 Oct 2025 17:22:59 +0200 Subject: [PATCH 03/19] fix (#278): show the tooltip only once for skills without proficiency --- CHANGELOG.md | 1 + module/sheets/base-actor-sheet.js | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af29087..db44836 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - [#274] () - Automated fail marking now works after dice so nice resolve roll. - [#268] () - Removed unnecessary tooltips. +- [#278] () - Shows the tooltip only once for skills without proficiency. ## Version 1.6.1 - 2025-09-09 diff --git a/module/sheets/base-actor-sheet.js b/module/sheets/base-actor-sheet.js index f3033c2..a849e1e 100644 --- a/module/sheets/base-actor-sheet.js +++ b/module/sheets/base-actor-sheet.js @@ -413,7 +413,6 @@ export default class DGActorSheet extends DGSheetMixin(ActorSheetV2) { skill.tooltip = game.i18n.localize(`DG.Skills.Tooltip.${skill.key}`); if (!skill.proficiency) { skill.tooltip = skill.tooltip.concat( - skill.tooltip, "

", game.i18n.localize("DG.Tooltip.CannotRollSkillLabel"), ); From 45c937b40ff28b9f2a76d783e39bff5986363900 Mon Sep 17 00:00:00 2001 From: delgar89 Date: Mon, 29 Sep 2025 02:37:11 +0200 Subject: [PATCH 04/19] Update pl.json updated polish translation --- lang/pl.json | 148 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 127 insertions(+), 21 deletions(-) diff --git a/lang/pl.json b/lang/pl.json index 9cd3841..a145230 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -4,8 +4,7 @@ "DG.RollLuck": "Test Szczęścia", "DG.Luck": "Szczęście", - "DG.FallbackText.ProfessionAndOrRank": "ZAWÓD (RANGA, JESLI DOTYCZY)", - "DG.FallbackText.newItem": "Nowy {type}", + "DG.FallbackText.newItem": "Nowy {typ}", "DG.Skills.accounting": "Księgowość", "DG.Skills.alertness": "Czujność", @@ -46,14 +45,52 @@ "DG.Skills.unnatural": "Zjawiska Nadnaturalne", "DG.Skills.flight": "Latanie", + "DG.Skills.Tooltip.accounting": "Wykrywanie finansowych sygnałów ostrzegawczych, takich jak ukryte aktywa, firmy fasadowe lub defraudacje.", + "DG.Skills.Tooltip.alertness": "Dostrzegaj ukryte zagrożenia, subtelne ruchy lub ciche dźwięki, zanim staną się one niebezpieczeństwem.", + "DG.Skills.Tooltip.anthropology": "Zrozumienie przekonań, zachowań i tematów tabu w współczesnych kulturach i społeczeństwach.", + "DG.Skills.Tooltip.archeology": "Analiza starożytnych artefaktów i ruin w celu interpretacji dawno wymarłych cywilizacji.", + "DG.Skills.Tooltip.artillery": "Precyzyjna obsługa broni ciężkiej, takiej jak moździerze czy działa czołgowe.", + "DG.Skills.Tooltip.athletics": "Biegaj, wspinaj się, skacz i rzucaj z wyćwiczoną siłą i zwinnością.", + "DG.Skills.Tooltip.bureaucracy": "Poruszaj się po biurokracji, zawieraj umowy z urzędnikami i uzyskaj dostęp do ograniczonych zasobów.", + "DG.Skills.Tooltip.computer_science": "Hakowanie, ochrona lub manipulowanie systemami komputerowymi i odzyskiwanie usuniętych danych.", + "DG.Skills.Tooltip.criminology": "Profilowanie zachowań przestępczych i analizowanie spisków lub wzorców nielegalnej działalności.", + "DG.Skills.Tooltip.demolitions": "Bezpieczne ustawianie, rozbrajanie lub analizowanie urządzeń wybuchowych.", + "DG.Skills.Tooltip.disguise": "Zmień swój wygląd i maniery, aby uniknąć rozpoznania.", + "DG.Skills.Tooltip.dodge": "Unikaj nadchodzących ataków lub ukrywaj się.", + "DG.Skills.Tooltip.drive": "Obsługa pojazdów pod presją, w tym pościgi i trudnym terenie.", + "DG.Skills.Tooltip.firearms": "Celne strzelanie pod presją z pistoletów, karabinów i innej broni strzeleckiej.", + "DG.Skills.Tooltip.first_aid": "Stabilizacja urazów i przywrócenie HP w krótkim okresie.", + "DG.Skills.Tooltip.forensics": "Analizowanie miejsc zbrodni pod kątem ukrytych dowodów przy użyciu metod kryminalistycznych - lub ukrywanie śladów przestępstwa w celu zmylenia śledczych.", + "DG.Skills.Tooltip.heavy_machiner": "Obsługa dużego sprzętu, takiego jak dźwigi, buldożery lub cysterny w sytuacjach wysokiego stresu.", + "DG.Skills.Tooltip.heavy_weapons": "Używaj w walce przenośnej broni ciężkiej, takiej jak karabiny maszynowe lub wyrzutnie rakiet.", + "DG.Skills.Tooltip.history": "Przypomnij sobie fakty historyczne, niejasne odniesienia lub znajdź ukrytą wiedzę.", + "DG.Skills.Tooltip.humint": "Czytaj ludzi, wykrywaj oszustwa i odkrywaj ukryte motywy poprzez interakcję.", + "DG.Skills.Tooltip.law": "Stosowanie lub wykorzystywanie wiedzy prawniczej w celu wygrania spraw sądowych lub uniknięcia oskarżenia.", + "DG.Skills.Tooltip.medicine": "Diagnozowanie i leczenie urazów lub chorób w celu zapewnienia długoterminowej opieki i powrotu do zdrowia.", + "DG.Skills.Tooltip.melee_weapons": "Skuteczna walka w zwarciu przy użyciu noży, pałek lub improwizowanej broni ręcznej.", + "DG.Skills.Tooltip.navigate": "Korzystaj z map, przyrządów lub intuicji, aby znaleźć drogę w nieznanym terenie.", + "DG.Skills.Tooltip.occult": "Zidentyfikuj mity, rytuały i poboczne wierzenia - ale nie oddzielaj prawdy od przesądów.", + "DG.Skills.Tooltip.persuade": "Przekonaj innych do zmiany zdania lub podjęcia działań, których normalnie by nie podjęli.", + "DG.Skills.Tooltip.pharmacy": "Identyfikacja, produkcja lub niewłaściwe użycie narkotyków, odtrutek i trucizn.", + "DG.Skills.Tooltip.psychotherapy": "Diagnozowanie i leczenie zaburzeń psychicznych; uspokajanie lub wspieranie innych w sytuacjach napięcia psychicznego.", + "DG.Skills.Tooltip.ride": "Kontrola i opieka nad wierzchowcami, takimi jak konie czy wielbłądy.", + "DG.Skills.Tooltip.search": "Dokładnie zlokalizuj ukryte przedmioty, pułapki lub wskazówki na danym obszarze.", + "DG.Skills.Tooltip.sigint": "Przechwytywanie, szyfrowanie lub manipulowanie łącznością elektroniczną i systemami nadzoru.", + "DG.Skills.Tooltip.stealth": "Unikaj wykrywania lub ukrywaj obiekty i działania przed wzrokiem.", + "DG.Skills.Tooltip.surgery": "Wykonywanie procedur inwazyjnych w celu ratowania życia lub naprawy krytycznych obrażeń.", + "DG.Skills.Tooltip.survival": "Trop, poluj i przeżyj w dziczy, znajdując pożywienie, schronienie i oznaki niebezpieczeństwa.", + "DG.Skills.Tooltip.swim": "Przetrwanie w wodzie pod przymusem - ratowanie innych, ucieczka lub znoszenie niebezpieczeństw.", + "DG.Skills.Tooltip.unarmed_combat": "Poskromienie lub zranienie przeciwników przy użyciu pięści, chwytów, kopnięć i innych technik walki wręcz.", + "DG.Skills.Tooltip.unnatural": "Rozpoznawanie, badanie lub przypominanie sobie prawd o bytach i siłach wykraczających poza ludzkie zrozumienie.", + "DG.Skills.AddTypedOrCustomSkill": "Dodaj Typową/Niestandardową Umiejętność", "DG.Skills.AddSkill": "Dodaj Umiejętność", "DG.Skills.Apply": "Zastosuj", - "DG.Skills.ApplySkillImprovements": "Zastosuj Ulepszenie Umiejętnośći", - "DG.Skills.ApplySkillImprovementsChatFlavor": "Ulepszono następującą umiejętność o", - "DG.Skills.ApplySkillImprovementsDialogLabel": "Ulepsz nastepujące umiejętności zgonie z formułą:", - "DG.Skills.ApplySkillImprovementsDialogEffectsFollowing": "Dotyczy następujących umiejętności:", - "DG.Skills.ApplySkillImprovementsWarning": "Brak nieudanych umiejętności do poprawy..", + "DG.Skills.ApplySkillImprovements.Title": "Zastosuj ulepszenia umiejętności", + "DG.Skills.ApplySkillImprovements.ChatFlavor": "Ulepszono następujące umiejętności o {formula}:", + "DG.Skills.ApplySkillImprovements.DialogLabel": "Ulepsz umiejętności według następującego wzoru: {formula}", + "DG.Skills.ApplySkillImprovements.DialogEffectsFollowing": "Wpływa na następujące umiejętności: {skillList}", + "DG.Skills.ApplySkillImprovements.Warning": "Brak nieudanych umiejętności do ulepszenia.", "DG.Skills.EditTypedOrCustomSkill": "Edytuj Umiejętność Typowaną/Niestandardową", "DG.Skills.EditSkill": "Edytuj Umiejętność", "DG.Skills.SkillGroup": "Grupa Umiejętności", @@ -67,6 +104,14 @@ "DG.TypeSkills.Science": "Nauka", "DG.TypeSkills.Other": "Inne", + "DG.TypeSkills.Tooltip.Art": "Twórz lub oceniaj dzieła artystyczne i wykrywaj fałszerstwa w danej dziedzinie.", + "DG.TypeSkills.Tooltip.Craft": "Budowanie, naprawianie lub sabotowanie specjalistycznych narzędzi lub systemów, takich jak silniki, zamki lub okablowanie.", + "DG.TypeSkills.Tooltip.ForeignLanguage": "Mówisz, czytasz i rozumiesz dany język.", + "DG.TypeSkills.Tooltip.MilitaryScience": "Interpretowanie warunków na polu bitwy, taktyki lub zachowań wojskowych w walce lądowej, morskiej lub powietrznej.", + "DG.TypeSkills.Tooltip.Pilot": "Kontrolowanie i nawigowanie pojazdami powietrznymi, morskimi lub kosmicznymi w krytycznych sytuacjach lub warunkach.", + "DG.TypeSkills.Tooltip.Science": "Zastosowanie specjalistycznej wiedzy naukowej do interpretacji lub badania świata fizycznego.", + "DG.TypeSkills.Tooltip.Other": "Inne", + "DG.SpecialTraining.Dialog.CreateSpecialTraining": "Dodaj Dodatkowe Szkolenie", "DG.SpecialTraining.Dialog.DropDown.CustomSkills": "Niestandardowe Umiejętności", "DG.SpecialTraining.Dialog.DropDown.Skills": "Umiejętności", @@ -86,13 +131,30 @@ "DG.Attributes.pow": "MOC", "DG.Attributes.cha": "CHA", - "DG.Navigation.Skills": "Umiejętności", - "DG.Navigation.Physical": "Statystyki", - "DG.Navigation.Mental": "Psychologia", - "DG.Navigation.Gear": "Wyposażenie", - "DG.Navigation.CV": "Osobiste", - "DG.Navigation.Contacts": "Więzi", + "DG.Attributes.Tooltip.HP": "Punkty Wytrzymałości, postać traci przytomność przy 2 PW i umiera przy 0 PW.", + "DG.Attributes.Tooltip.WP": "Punkty Siły Woli to paliwo mentalne. Agenci potrzebują Punktów Siły Woli, aby kontynuować mimo wyczerpania lub mentalnych trudności. Zobacz stronę 47 w Podręczniku Agenta po więcej szczegółów.", + "DG.Attributes.Tooltip.SAN": "Kliknij, aby wykonać test na Poczytalność...", + "DG.Attributes.Tooltip.str": "Zobacz stronę 19 Podręcznika Agenta – Siła", + "DG.Attributes.Tooltip.con": "Zobacz stronę 19 Podręcznika Agenta – Kondycja", + "DG.Attributes.Tooltip.dex": "Zobacz stronę 19 Podręcznika Agenta – Zręczność", + "DG.Attributes.Tooltip.int": "Zobacz stronę 19 Podręcznika Agenta – Inteligencja", + "DG.Attributes.Tooltip.pow": "Zobacz stronę 19 Podręcznika Agenta – Siła Woli", + "DG.Attributes.Tooltip.cha": "Zobacz stronę 19 Podręcznika Agenta – Charyzma", + "DG.Navigation.Agent.skills": "Umiejętności", + "DG.Navigation.Agent.physical": "Statystyki", + "DG.Navigation.Agent.motivations": "Psychika", + "DG.Navigation.Agent.gear": "Wyposażenie", + "DG.Navigation.Agent.bio": "Osobiste", + "DG.Navigation.Agent.bonds": "Więzi", + "DG.Navigation.NPC.skills": "Umiejętności i szkolenia", + "DG.Navigation.NPC.gear": "Ataki i Zdolności", + "DG.Navigation.Vehicle.gear": "Wyposażenie", + "DG.Navigation.Vehicle.notes": "Uwagi", + + "DG.About.Changelog": "DZIENNIK ZMIAN (ONLINE)", + "DG.About.Copyright": "Opublikowano przez Arc Dream Publishing na mocy umowy z Delta Green Partnership. Własność intelektualna znana jako Delta Green jest znakiem towarowym i prawem autorskim należącym do Delta Green Partnership, które udzieliło tutaj licencji na jej wykorzystanie.", + "DG.About.License": "Zawartość tego systemu jest licencjonowana zgodnie z warunkami dołączonego pliku
licencyjnego, z wyjątkiem tych elementów, które są składnikami własności intelektualnej Delta Green.", "DG.About.OnlineHelp": "Dokumentacja systemu (ONLINE)", "DG.About.OnlineHelpTooltip": "Uruchom przeglądarkę z dokumentacją online na GitHubie.", "DG.About.OnlineBugTracker": "Pytania, zgłoszenia błędów lub prośby o funkcje (ONLINE)", @@ -102,7 +164,8 @@ "DG.Roll.Target": "Cel: ", "DG.Roll.Success": "Sukces", "DG.Roll.Failure": "Porażka", - "DG.Roll.Critical": "Krytyczny", + "DG.Roll.CriticalSuccess": "Krytyczny sukces!", + "DG.Roll.CriticalFailure": "Krytyczna porażka!", "DG.Roll.Lethality": "Śmiertelność", "DG.Roll.Lethal": "Śmiertelny", "DG.Roll.For": "Dla", @@ -119,6 +182,7 @@ "DG.Generic.AddButtonLabel": "Dodaj", "DG.Mental.BreakingPoint": "Punkt Załamania: ", + "DG.Mental.Tooltip.BreakingPoint": "Punkt Załamania to dokładna wartość Poczytalności, przy której Twój Agent został wystarczająco wyczerpany traumą, by rozwinąć nową, długotrwałą chorobę psychiczną. Jeśli Poczytalność osiągnie ten punkt lub spadnie poniżej niego, odejmij Siłę Woli Agenta od nowej Poczytalności. To będzie nowy Punkt Załamania Twojego Agenta.", "DG.Mental.Reset": "Reset", "DG.Mental.SanityLossIncidentsLabel": "Utrata PP (Bez Niepoczytalności)", "DG.Mental.Violence": "Przemoc", @@ -128,6 +192,8 @@ "DG.Mental.Motivations": "Motywacje", "DG.Mental.Disorders": "Zaburzenia", + "DG.Gear.WeaponTypes.Firearms": "Broń Palna", + "DG.Gear.WeaponTypes.Melee": "Walka wręcz", "DG.Gear.Weapons": "Broń", "DG.Gear.Armor": "Pancerz", "DG.Gear.OtherGear": "Inny Sprzęt", @@ -153,14 +219,11 @@ "DG.Bonds.Score": "Wynik", "DG.Bonds.NewBond": "Nowa Więź", - "DG.Attributes.Tooltip.HP": "Punkty Wytrzymałości, postać traci przytomność przy 2 PW i umiera przy 0 PW.", "DG.Tooltip.MaximumHP": "Maksymalne Punkty Wytrzymałości to średnia STR + CON, zaokrąglona w górę.", - "DG.Attributes.Tooltip.WP": "Punkty Siły Woli to paliwo mentalne. Agenci potrzebują Punktów Siły Woli, aby kontynuować mimo wyczerpania lub mentalnych trudności. Zobacz stronę 47 w Podręczniku Agenta po więcej szczegółów.", "DG.Tooltip.MaximumWP": "Maksymalne PSW to wartość MOC.", - "DG.Attributes.Tooltip.SAN": "Kliknij, aby wykonać test na Poczytalność...", "DG.Tooltip.CurrentSanityPartOne": "Aktualne PP, aktualny punkt załamania to ", "DG.Tooltip.CurrentSanityPartTwo": ", kliknij powyższą etykietę PP, aby wykonać test poczytalności.", - "DG.Tooltip.MaximumSanity": "Maksymalne PP to 99 - umiejętność Nienaturalne.", + "DG.Tooltip.MaximumSanity": "Maksymalne PP to 99 - umiejętność Nadnaturalne.", "DG.Tooltip.SkillLabel": "Kliknij, aby wykonać test umiejętności.", "DG.Tooltip.CannotRollSkillLabel": "Umiejętność na poziomie 0% nie może zostać użyta. Zobacz stronę 28 w Podręczniku Agenta.", "DG.Tooltip.SkillFailCheckbox": "Po niepowodzeniu w teście tej umiejętności (jeśli biegłość wynosi co najmniej 1%), zaznacz to pole. Na końcu sesji dodaj 1D4 punkty procentowe do umiejętności i odznacz pole. Nie dotyczy umiejętności Nienaturalne lub Rituału. Zobacz stronę 29 w Podręczniku Agenta.", @@ -249,9 +312,11 @@ "DG.Sheet.BlockHeaders.PersonalInfoCV": "DANE OSOBOWE / CV", "DG.Sheet.BlockHeaders.BondsRelationshipsContacts": "WIĘZI / RELACJE / KONTAKTY", + "DG.AgentSheet.ProfessionPlaceholder": "ZAWÓD (RANGA, JEŚLI DOTYCZY)", + "DG.UnnaturalSheet.HideUntrainedSkillsLabel": "Ukryj Niewyuczone", "DG.UnnaturalSheet.NotesLabel": "Uwagi", - "DG.UnnaturalSheet.ShortDescriptionFallbackText": "Opis stworzenia lub typu stworzenia", + "DG.UnnaturalSheet.ShortDescriptionPlaceholder": "Opis stworzenia lub typu stworzenia", "DG.UnnaturalSheet.ShowUntrainedSkillsLabel": "Pokaż Niewyuczone", "DG.UnnaturalSheet.Tabs.NotesTabLabel": "Umiejętności i Uwagi", "DG.UnnaturalSheet.Tabs.ItemsTabLabel": "Ataki i Zdolności", @@ -278,9 +343,15 @@ "DG.ItemWindow.Weapons.SkillModifier": "Modyfikator Umiejętności", "DG.ItemWindow.Custom": "Niestandardowy", + "DG.Sheet.class.item": "Karta Przedmiotu", + "DG.Sheet.class.agent": "Karta Agenta", + "DG.Sheet.class.npc": "Karta NPC", + "DG.Sheet.class.unnatural": "Karta Nadnaturalnego", + "DG.Sheet.class.vehicle": "Karta Pojazdu", + "TYPES.Actor.agent": "Agent", "TYPES.Actor.npc": "NPC", - "TYPES.Actor.unnatural": "Nienaturalne", + "TYPES.Actor.unnatural": "Nadnaturalne", "TYPES.Actor.vehicle": "Pojazd", "TYPES.Item.armor": "Pancerz", @@ -304,7 +375,7 @@ "DG.ItemWindow.Tome.LanguagePlaceholder": "Język", "DG.ItemWindow.Tome.StudyTime": "Czas Nauki", "DG.ItemWindow.Tome.OccultIncrease": "Zwiększenie Umiejętności Okultyzm", - "DG.ItemWindow.Tome.UnnaturalIncrease": "Zwiększenie Umiejętności Nienaturalne", + "DG.ItemWindow.Tome.UnnaturalIncrease": "Zwiększenie Umiejętności Nadnaturalne", "DG.ItemWindow.Tome.StudySanityDamage": "Uszkodzenie PP po Studiowaniu", "DG.ItemWindow.Tome.HandlerOnlyTabHeader": "Tylko dla Oficera Prowadzącego", "DG.ItemWindow.Tome.HandlerNotes": "Uwagi dla Oficera Prowadzącego", @@ -315,6 +386,41 @@ "DG.ItemWindow.Ritual.StudyTime": "Czas Nauki", "DG.ItemWindow.Ritual.LearnedSanityDamage": "Utrata PP po Nauce", + "DG.MissionPaused": "Misja wstrzymana", + + "DG.Settings.charactersheet.name": "Styl karty postaci", + "DG.Settings.charactersheet.hint": "Wybierz styl kart postaci. „Program” to nowocześniejszy, rządowy styl, natomiast „Kowboj/Banita” to starszy, bardziej surowy styl przypominający maszynę do pisania.", + "DG.Settings.charactersheet.cowboys": "Kowboje", + "DG.Settings.charactersheet.outlaws": "The Outlaws", + "DG.Settings.charactersheet.program": "Program", + "DG.Settings.sortskills.name": "Sortowanie umiejętności według kolumn?", + "DG.Settings.sortskills.hint": "Zaznaczone sortuje według kolumny. Niezaznaczone sortuje według wierszy.", + "DG.Settings.hideSkillTooltips.name": "Ukryj podpowiedzi umiejętności", + "DG.Settings.hideSkillTooltips.hint": "Nie wyświetlaj podpowiedzi umiejętności na kartach Agenta.", + "DG.Settings.keepSanityPrivate.name": "Ukryj Poczytalność", + "DG.Settings.keepSanityPrivate.hint": "Ukryj Poczytalność przed graczami zarówno na kartach Agentów, jak i w rzutach.", + "DG.Settings.skillImprovementFormula.name": "Domyślny rzut na rozwój umiejętności", + "DG.Settings.skillImprovementFormula.hint": "Domyślnie 1k4. Istniało kilka errat w tej kwestii — wybierz tę opcję, która najlepiej pasuje do tempa twojej gry.", + "DG.Settings.skillImprovementFormula.1": "Stałe +1%", + "DG.Settings.skillImprovementFormula.2": "+1D3%", + "DG.Settings.skillImprovementFormula.3": "+1D4%", + "DG.Settings.skillImprovementFormula.4": "+1D4-1%", + "DG.Settings.alwaysShowHypergeometrySectionForPlayers.name": "Pokaż sekcję Hipergeometrii", + "DG.Settings.alwaysShowHypergeometrySectionForPlayers.hint": "Zawsze pokazuj sekcję przedmiotów z Hipergeometrii (np. Rytuały i Tomy) na kartach Agentów, nawet jeśli Agent nie posiada żadnych przedmiotów tego typu.", + "DG.Settings.showImpossibleLandscapesContent.name": "Pokaż zawartość Impossible Landscapes", + "DG.Settings.showImpossibleLandscapesContent.hint": "Pokaż pola specyficzne dla Impossible Landscapes na kartach Agentów. Pola te są zawsze widoczne tylko dla Oficera prowadzącego, nawet jeśli ta opcja jest zaznaczona.", + "DG.Settings.skillFailure.name": "Automatyczne zaznaczanie niepowodzenia w umiejętności", + "DG.Settings.skillFailure.hint": "Aktywuj tę opcję, aby zawsze zaznaczać pole niepowodzenia po nieudanym teście umiejętności. Oficer prowadzący może cofnąć tę akcję z wiadomości na czacie dotyczącej rzutu.", + "DG.Settings.Saved": "Bieżące ustawienia zostały zapisane.", + + "DG.SettingsMenu.automation.name": "Menu automatyzacji", + "DG.SettingsMenu.automation.label": "Menu automatyzacji", + "DG.SettingsMenu.automation.title": "Ustawienia automatyzacji", + + "DG.SettingsMenu.handler.name": "Ustawienia Oficera Prowadzącego", + "DG.SettingsMenu.handler.label": "Ustawienia Oficera Prowadzącego", + "DG.SettingsMenu.handler.title": "Ustawienia tylko dla Oficera prowadzącego", + "DG.Messages.Skillsmark.Marked": "Ta umiejętność jest oznaczona.", "DG.Messages.Skillsmark.Tooltip": "Zobacz str. 29 Podręcznika Agenta." } From 95c2b7e2b7efb6899f659a22c41814205e6255cf Mon Sep 17 00:00:00 2001 From: delgar89 Date: Tue, 14 Oct 2025 06:35:25 +0200 Subject: [PATCH 05/19] Update lang/pl.json Co-authored-by: samulopez --- lang/pl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/pl.json b/lang/pl.json index a145230..c0bbc59 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -4,7 +4,7 @@ "DG.RollLuck": "Test Szczęścia", "DG.Luck": "Szczęście", - "DG.FallbackText.newItem": "Nowy {typ}", + "DG.FallbackText.newItem": "Nowy {type}", "DG.Skills.accounting": "Księgowość", "DG.Skills.alertness": "Czujność", From 68ccac806bd328cbb37f6516b3ed4a175e89f8f0 Mon Sep 17 00:00:00 2001 From: delgar89 Date: Tue, 14 Oct 2025 18:34:15 +0200 Subject: [PATCH 06/19] Update CHANGELOG.md --- CHANGELOG.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db44836..867e457 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,15 +2,17 @@ ## Version 1.6.2 - 2025-xx-xx +> Thanks to [delgar89](https://github.com/delgar89) for updating the Polish translation. + ### **Features:** - [#258](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/258) - Added a keybind option for hovering tooltips and option to hide all. ### **Bug Fixes:** -- [#274] () - Automated fail marking now works after dice so nice resolve roll. -- [#268] () - Removed unnecessary tooltips. -- [#278] () - Shows the tooltip only once for skills without proficiency. +- [#274](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/274) - Automated fail marking now works after dice so nice resolve roll. +- [#268](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/268) - Removed unnecessary tooltips. +- [#278](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/278) - Shows the tooltip only once for skills without proficiency. ## Version 1.6.1 - 2025-09-09 From 42986bf559db2a1032cd9afa12a2cebed822fde9 Mon Sep 17 00:00:00 2001 From: Samuel Lopez Date: Tue, 14 Oct 2025 14:14:01 +0200 Subject: [PATCH 07/19] feat (#281): add tooltips to adaptation area --- CHANGELOG.md | 3 ++- lang/en.json | 2 ++ templates/actor/parts/motivations-tab.html | 8 ++++++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 867e457..3207f0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,8 @@ - [#274](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/274) - Automated fail marking now works after dice so nice resolve roll. - [#268](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/268) - Removed unnecessary tooltips. -- [#278](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/278) - Shows the tooltip only once for skills without proficiency. +- [#278](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/278) - It shows the tooltip only once for skills without proficiency. +- [#281](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/281) - Add tooltips to adaptation area. ## Version 1.6.1 - 2025-09-09 diff --git a/lang/en.json b/lang/en.json index 6884ba5..7d0be72 100644 --- a/lang/en.json +++ b/lang/en.json @@ -186,7 +186,9 @@ "DG.Mental.Reset": "Reset", "DG.Mental.SanityLossIncidentsLabel": "Incidents of SAN Loss Without Going Insane", "DG.Mental.Violence": "Violence", + "DG.Mental.Tooltip.Violence": "Adapting to Violence: After losing SAN to violence three times without going insane, you become hardened to it. You automatically succeed SAN rolls against violence, but permanently lose 1D6 CHA and that much from each Bond. Agents Handbook Page 73.", "DG.Mental.Helplessness": "Helplessness", + "DG.Mental.Tooltip.Helplessness": "Adapting to Helplessness: After losing SAN to helplessness three times without going insane, you become hardened to it. You automatically succeed SAN rolls against helplessness, but permanently lose 1D6 POW. Agents handbook page 73.", "DG.Mental.AdaptedToViolence": "Adapted to Violence", "DG.Mental.AdaptedToHelplessness": "Adapted to Helplessness", "DG.Mental.Motivations": "Motivation", diff --git a/templates/actor/parts/motivations-tab.html b/templates/actor/parts/motivations-tab.html index 3aae085..2ed3ae0 100644 --- a/templates/actor/parts/motivations-tab.html +++ b/templates/actor/parts/motivations-tab.html @@ -23,7 +23,9 @@
- + - + Date: Tue, 30 Sep 2025 10:25:11 +0200 Subject: [PATCH 08/19] feat #245 - calc bonus dmg for NPCs --- CHANGELOG.md | 1 + module/actor/actor.js | 83 ++++++++++--------------------- module/item/item-sheet.js | 2 +- module/sheets/base-actor-sheet.js | 2 +- 4 files changed, 28 insertions(+), 60 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3207f0e..0d2776e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### **Features:** - [#258](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/258) - Added a keybind option for hovering tooltips and option to hide all. +- [#245](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/245) - Automate damage from STR score to melee and unarmed attacks for NPCs. Agents were already doing it. ### **Bug Fixes:** diff --git a/module/actor/actor.js b/module/actor/actor.js index 5a86091..299b862 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -54,7 +54,7 @@ export default class DeltaGreenActor extends Actor { const { system } = actor; // Loop through ability scores, and add their modifiers to our sheet output. - for (const [key, statistic] of Object.entries(system.statistics)) { + for (const statistic of Object.values(system.statistics)) { // the x5 is just whatever the raw statistic is x 5 to turn it into a d100 percentile statistic.x5 = statistic.value * 5; } @@ -74,25 +74,13 @@ export default class DeltaGreenActor extends Actor { system.health.max = Math.ceil( (system.statistics.con.value + system.statistics.str.value) / 2, ); - } catch (ex) { + } catch { system.health.max = 10; } - /* - system.skills.ritual = { - label: "Ritual", - proficiency: 99 - system.sanity.value, - cannotBeImprovedByFailure: true, - failure: false, - }; - - if (system.skills.ritual.proficiency > 99) { - system.skills.ritual.proficiency = 99; - } else if (system.skills.ritual.proficiency < 1) { - system.skills.ritual.proficiency = 1; - } - - */ + const strength = system.statistics.str; + system.statistics.str.meleeDamageBonusFormula = + this._calculateMeleeDamageBonusFormula(strength.value); try { delete system.skills.ritual; // try to remove legacy skill for ritual if it exists @@ -120,7 +108,7 @@ export default class DeltaGreenActor extends Actor { system.health.protection = protection; - for (const [_key, skill] of Object.entries(system.skills)) { + for (const skill of Object.values(system.skills)) { skill.targetProficiency = skill.proficiency; } } @@ -164,29 +152,11 @@ export default class DeltaGreenActor extends Actor { // Make modifications to data here. For example: // Loop through ability scores, and add their modifiers to our sheet output. - for (const [key, statistic] of Object.entries(system.statistics)) { + for (const statistic of Object.values(system.statistics)) { // the x5 is just whatever the raw statistic is x 5 to turn it into a d100 percentile statistic.x5 = statistic.value * 5; } - // The ritual skill is from the Handler's Guide, it is for activating a ritual and is always equal to 99 - current sanity. - // The rules can be found on page 166, under 'Ritual Activation'. - /* - system.skills.ritual = { - label: "Ritual", - proficiency: 99 - system.sanity.value, - cannotBeImprovedByFailure: true, - failure: false, - }; - - if (system.skills.ritual.proficiency > 99) { - system.skills.ritual.proficiency = 99; - } else if (system.skills.ritual.proficiency < 1) { - system.skills.ritual.proficiency = 1; - } - - */ - try { delete system.skills.ritual; // try to remove legacy skill for ritual if it exists } catch { @@ -282,34 +252,31 @@ export default class DeltaGreenActor extends Actor { system.health.protection = protection; - // Damage Bonus/Malus From Strength in Hand-to-hand Combat (melee/unarmed) - let bonus = 0; - let sbonus = ""; const strength = system.statistics.str; - - if (strength.value < 5) { - sbonus = "-2"; - bonus = -2; - } else if (strength.value < 9) { - sbonus = "-1"; - bonus = -1; - } else if (strength.value > 12 && strength.value < 17) { - sbonus = "+1"; - bonus = 1; - } else if (strength.value > 16) { - sbonus = "+2"; - bonus = 2; - } - - system.statistics.str.meleeDamageBonus = bonus; - system.statistics.str.meleeDamageBonusFormula = sbonus; + system.statistics.str.meleeDamageBonusFormula = + this._calculateMeleeDamageBonusFormula(strength.value); if (system.physical.exhaustedPenalty > 0) { system.physical.exhaustedPenalty = -1 * Math.abs(system.physical.exhaustedPenalty); } + } - // console.log(agent); + // Returns Bonus From Strength in Hand-to-hand Combat (melee/unarmed) + _calculateMeleeDamageBonusFormula(strengthValue) { + if (strengthValue < 5) { + return "-2"; + } + if (strengthValue < 9) { + return "-1"; + } + if (strengthValue > 12 && strengthValue < 17) { + return "+1"; + } + if (strengthValue > 16) { + return "+2"; + } + return ""; } /** @override */ diff --git a/module/item/item-sheet.js b/module/item/item-sheet.js index 2bcec8e..5313fbf 100644 --- a/module/item/item-sheet.js +++ b/module/item/item-sheet.js @@ -136,7 +136,7 @@ export default class DeltaGreenItemSheet extends foundry.appv1.sheets let diceFormula = this.item.system.damage; const { skill } = this.item.system; if ( - this.actor.type === "agent" && + (this.actor.type === "agent" || this.actor.type === "npc") && (skill === "unarmed_combat" || skill === "melee_weapons") ) { diceFormula += diff --git a/module/sheets/base-actor-sheet.js b/module/sheets/base-actor-sheet.js index a849e1e..470a4fe 100644 --- a/module/sheets/base-actor-sheet.js +++ b/module/sheets/base-actor-sheet.js @@ -1211,7 +1211,7 @@ export default class DGActorSheet extends DGSheetMixin(ActorSheetV2) { let diceFormula = item.system.damage; const { skill } = item.system; if ( - this.actor.type === "agent" && + (this.actor.type === "agent" || this.actor.type === "npc") && (skill === "unarmed_combat" || skill === "melee_weapons") ) { diceFormula += From 1620508161263f62068a64e6ee054181e902b6d2 Mon Sep 17 00:00:00 2001 From: Samuel Lopez Date: Tue, 14 Oct 2025 11:48:37 +0200 Subject: [PATCH 09/19] feat (#298): don't add art skill in actor creation --- CHANGELOG.md | 1 + module/deltagreen.js | 24 ------------------------ 2 files changed, 1 insertion(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d2776e..b8ad7a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ - [#268](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/268) - Removed unnecessary tooltips. - [#278](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/278) - It shows the tooltip only once for skills without proficiency. - [#281](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/281) - Add tooltips to adaptation area. +- [#298](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/298) - Don't add art skill in actor creation. ## Version 1.6.1 - 2025-09-09 diff --git a/module/deltagreen.js b/module/deltagreen.js index bf7d084..972c68a 100644 --- a/module/deltagreen.js +++ b/module/deltagreen.js @@ -154,30 +154,6 @@ Hooks.on("renderActorDirectory", (app, html, data) => { } }); -/** - * We use this hook to translate the sample Typed Skill - * Note - this event is fired on only the client who did the create action. - */ -// eslint-disable-next-line no-unused-vars -Hooks.on("preCreateActor", async (actor, creationData, options, userId) => { - // On brand new actors, creationData only has properties: `name`, and `type`. - // If creationData has `system` then the new actor is either duplicated or imported, - // We only want to translate the sample Typed Skill on brand new actors, - // thus we return early if creationData has the `system` property so we do not override anything. - // Also, only translate actor types with a default Typed Skill (agents and NPCs) - if (creationData?.system || !["agent", "npc"].includes(actor.type)) return; - - // Translate the default typed skill for brand new actors. - actor.updateSource({ - "system.typedSkills.tskill_01": { - label: game.i18n.localize("DG.TypeSkills.Subskills.Painting"), - group: game.i18n.localize("DG.TypeSkills.Art"), - proficiency: 0, - failure: false, - }, - }); -}); - // Note - this event is fired on ALL connected clients... Hooks.on("createActor", async (actor, options, userId) => { try { From b728bbd6c6a437e8397f2d11800f87886fe3ca0e Mon Sep 17 00:00:00 2001 From: Samuel Lopez Date: Fri, 17 Oct 2025 09:45:47 +0200 Subject: [PATCH 10/19] fix (#301): SAN doesn't zero out when player updates sheet with sanity private --- CHANGELOG.md | 1 + templates/actor/partials/sanity-agent.html | 9 +++------ 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b8ad7a1..b381778 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ - [#278](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/278) - It shows the tooltip only once for skills without proficiency. - [#281](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/281) - Add tooltips to adaptation area. - [#298](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/298) - Don't add art skill in actor creation. +- [#301](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/301) - SAN doesn't zero out when player updates sheet and the sanity is private. ## Version 1.6.1 - 2025-09-09 diff --git a/templates/actor/partials/sanity-agent.html b/templates/actor/partials/sanity-agent.html index fa8cbe0..22b585d 100644 --- a/templates/actor/partials/sanity-agent.html +++ b/templates/actor/partials/sanity-agent.html @@ -1,10 +1,7 @@ {{#if (keepSanityPrivate) }} - +
+
???
+
/
From 590cbd166405aa472c1cbdf1a97c65c7fab63e60 Mon Sep 17 00:00:00 2001 From: Samuel Lopez Date: Thu, 25 Sep 2025 16:04:13 +0200 Subject: [PATCH 11/19] fix (#269): calc unnatural max wp and health --- module/actor/actor.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/module/actor/actor.js b/module/actor/actor.js index 299b862..b0133ad 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -121,11 +121,21 @@ export default class DeltaGreenActor extends Actor { const { system } = actor; // Loop through ability scores, and add their modifiers to our sheet output. - for (const [key, statistic] of Object.entries(system.statistics)) { + for (const statistic of Object.values(system.statistics)) { // the x5 is just whatever the raw statistic is x 5 to turn it into a d100 percentile statistic.x5 = statistic.value * 5; } + system.wp.max = system.statistics.pow.value; + + try { + system.health.max = Math.ceil( + (system.statistics.con.value + system.statistics.str.value) / 2, + ); + } catch { + system.health.max = 10; + } + // calculate total armor rating let protection = 0; for (const i of actor.items) { @@ -138,7 +148,7 @@ export default class DeltaGreenActor extends Actor { system.health.protection = protection; - for (const [_key, skill] of Object.entries(system.skills)) { + for (const skill of Object.values(system.skills)) { skill.targetProficiency = skill.proficiency; } } From 5c2caa51462fe0158017e160c2e18c8f95dd782d Mon Sep 17 00:00:00 2001 From: Samuel Lopez Date: Fri, 26 Sep 2025 11:51:23 +0200 Subject: [PATCH 12/19] fix (#269): allow to edit max wp and hp for unnatural --- CHANGELOG.md | 1 + module/actor/actor.js | 18 +++++---- module/sheets/base-actor-sheet.js | 25 +++++++++++- templates/actor/partials/health-partial.html | 28 +++++++++++++ .../actor/partials/willpower-partial.html | 28 +++++++++++++ templates/actor/parts/header.html | 40 +------------------ 6 files changed, 94 insertions(+), 46 deletions(-) create mode 100644 templates/actor/partials/health-partial.html create mode 100644 templates/actor/partials/willpower-partial.html diff --git a/CHANGELOG.md b/CHANGELOG.md index b381778..d4416e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ ### **Bug Fixes:** +- [#269](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/269) - Added calculation for max HP and max WP for unnatural and allow to edit them. - [#274](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/274) - Automated fail marking now works after dice so nice resolve roll. - [#268](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/268) - Removed unnecessary tooltips. - [#278](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/278) - It shows the tooltip only once for skills without proficiency. diff --git a/module/actor/actor.js b/module/actor/actor.js index b0133ad..fc1690d 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -126,14 +126,18 @@ export default class DeltaGreenActor extends Actor { statistic.x5 = statistic.value * 5; } - system.wp.max = system.statistics.pow.value; + if (system.wp.maxNeedsUpdate) { + system.wp.max = system.statistics.pow.value; + } - try { - system.health.max = Math.ceil( - (system.statistics.con.value + system.statistics.str.value) / 2, - ); - } catch { - system.health.max = 10; + if (system.health.maxNeedsUpdate) { + try { + system.health.max = Math.ceil( + (system.statistics.con.value + system.statistics.str.value) / 2, + ); + } catch { + system.health.max = 10; + } } // calculate total armor rating diff --git a/module/sheets/base-actor-sheet.js b/module/sheets/base-actor-sheet.js index 470a4fe..2413187 100644 --- a/module/sheets/base-actor-sheet.js +++ b/module/sheets/base-actor-sheet.js @@ -36,7 +36,11 @@ export default class DGActorSheet extends DGSheetMixin(ActorSheetV2) { static BASE_PARTS = /** @type {const} */ ({ header: { template: `${this.TEMPLATE_PATH}/parts/header.html`, - templates: [`${this.TEMPLATE_PATH}/partials/sanity-partial.html`], + templates: [ + `${this.TEMPLATE_PATH}/partials/health-partial.html`, + `${this.TEMPLATE_PATH}/partials/willpower-partial.html`, + `${this.TEMPLATE_PATH}/partials/sanity-partial.html`, + ], }, tabs: { template: `templates/generic/tab-navigation.hbs`, // From FoundryVTT @@ -59,6 +63,25 @@ export default class DGActorSheet extends DGSheetMixin(ActorSheetV2) { }, }); + /** @override */ + async _processSubmitData(event, form, submitData, options) { + const submittedData = foundry.utils.expandObject(submitData); + + // we need to update max WP if POW has changed (only for unnatural, but doesn't hurt others) + submittedData.system.wp.maxNeedsUpdate = + submittedData.system?.statistics.pow.value !== + this.actor.system.statistics.pow.value; + + // we need to update max HP if STR or CON have changed (only for unnatural, but doesn't hurt others) + submittedData.system.health.maxNeedsUpdate = + submittedData.system?.statistics.str.value !== + this.actor.system.statistics.str.value || + submittedData.system?.statistics.con.value !== + this.actor.system.statistics.con.value; + + return super._processSubmitData(event, form, submittedData, options); + } + /** @override */ async _prepareContext(options) { const context = await super._prepareContext(options); diff --git a/templates/actor/partials/health-partial.html b/templates/actor/partials/health-partial.html new file mode 100644 index 0000000..d03ec45 --- /dev/null +++ b/templates/actor/partials/health-partial.html @@ -0,0 +1,28 @@ +
+ +
+ + / + {{#if (ne actor.type "unnatural") }} +
+
{{numberFormat actor.system.health.max decimals=0 sign=false}}
+
+ {{else}} + + {{/if}} +
+
diff --git a/templates/actor/partials/willpower-partial.html b/templates/actor/partials/willpower-partial.html new file mode 100644 index 0000000..0830429 --- /dev/null +++ b/templates/actor/partials/willpower-partial.html @@ -0,0 +1,28 @@ +
+ +
+ + / + {{#if (ne actor.type "unnatural") }} +
+
{{numberFormat actor.system.wp.max decimals=0 sign=false}}
+
+ {{else}} + + {{/if}} +
+
diff --git a/templates/actor/parts/header.html b/templates/actor/parts/header.html index 370199b..d20d777 100644 --- a/templates/actor/parts/header.html +++ b/templates/actor/parts/header.html @@ -30,46 +30,10 @@
{{!-- HP --}} -
- -
- - / -
-
{{numberFormat actor.system.health.max decimals=0 sign=false}}
-
-
-
+ {{> "systems/deltagreen/templates/actor/partials/health-partial.html" }} {{#if (ne actor.type "vehicle") }} {{!-- WP --}} -
- -
- - / -
-
{{numberFormat actor.system.wp.max decimals=0 sign=false}}
-
-
-
+ {{> "systems/deltagreen/templates/actor/partials/willpower-partial.html" }} {{!-- Sanity --}} {{> "systems/deltagreen/templates/actor/partials/sanity-partial.html" }} {{/if}} From 0cfc04ab588abcf8ea1539ea27a5d1e9a9c7780d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Fr=C3=B6lich?= Date: Sun, 14 Sep 2025 23:11:03 +0200 Subject: [PATCH 13/19] fix(#272): hook into renderChatMessageHTML for skill fail rollbacks --- module/deltagreen.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/deltagreen.js b/module/deltagreen.js index 972c68a..ef896bb 100644 --- a/module/deltagreen.js +++ b/module/deltagreen.js @@ -190,7 +190,7 @@ Hooks.on("renderGamePause", function (_, html, options) { } }); -Hooks.on("renderChatLog", async (app, element, context, options) => { +Hooks.on("renderChatMessageHTML", async (app, element, context, options) => { element.addEventListener("click", (event) => { const btnWithAction = event.target.closest("button[data-action]"); const message = event.target.closest("li[data-message-id]"); From 58a11b7925787d1edc0af0784d18caa6483888d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Fr=C3=B6lich?= Date: Sun, 14 Sep 2025 23:14:39 +0200 Subject: [PATCH 14/19] chore: update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d4416e7..d92653d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ - [#281](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/281) - Add tooltips to adaptation area. - [#298](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/298) - Don't add art skill in actor creation. - [#301](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/301) - SAN doesn't zero out when player updates sheet and the sanity is private. +- [#272](https://github.com/deltagreen-foundryvtt/delta-green-foundry-vtt-system/issues/272) - Fixed auto-marked skill failure rollbacks in chat bubbles. ## Version 1.6.1 - 2025-09-09 From 12574184d83bbbfcf578f99362064c221ce1eada Mon Sep 17 00:00:00 2001 From: Samuel Lopez Date: Sat, 1 Nov 2025 12:02:05 +0100 Subject: [PATCH 15/19] fix (#272) add listener only to needed chat messages --- module/deltagreen.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/module/deltagreen.js b/module/deltagreen.js index ef896bb..f413d0b 100644 --- a/module/deltagreen.js +++ b/module/deltagreen.js @@ -190,7 +190,7 @@ Hooks.on("renderGamePause", function (_, html, options) { } }); -Hooks.on("renderChatMessageHTML", async (app, element, context, options) => { +function addEventListenerToChatMessage(element) { element.addEventListener("click", (event) => { const btnWithAction = event.target.closest("button[data-action]"); const message = event.target.closest("li[data-message-id]"); @@ -200,4 +200,14 @@ Hooks.on("renderChatMessageHTML", async (app, element, context, options) => { handleInlineActions(btnWithAction, messageId); } }); +} + +Hooks.on("renderChatLog", async (app, element) => { + addEventListenerToChatMessage(element); +}); + +Hooks.on("renderChatMessageHTML", async (app, element, context) => { + // ignore non chat card notifications + if (!context.canClose) return; + addEventListenerToChatMessage(element); }); From c0bfe2693ddcdddda4046d7549765f5c21fcc3a0 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Thu, 11 Dec 2025 23:06:29 -0500 Subject: [PATCH 16/19] Add hotfix-dev release to github action workflow --- .github/actions/build-packs/action.yml | 3 +- .github/actions/setup-node/action.yml | 3 +- .github/actions/zip-system/action.yml | 15 +---- .github/workflows/publish-dev-release.yml | 68 +++++++++++++++++------ CONTRIBUTING.md | 3 +- 5 files changed, 59 insertions(+), 33 deletions(-) diff --git a/.github/actions/build-packs/action.yml b/.github/actions/build-packs/action.yml index ec50a58..1c9ffd2 100644 --- a/.github/actions/build-packs/action.yml +++ b/.github/actions/build-packs/action.yml @@ -1,5 +1,6 @@ name: "Build Compendium Packs" description: "Builds the compendium pack binaries from source JSON files" + runs: using: "composite" steps: @@ -7,5 +8,5 @@ runs: uses: ./.github/actions/setup-node - name: Build Compendium Packs - run: ./build/build-packs.sh shell: bash + run: ./build/build-packs.sh diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml index f36e1de..1b77216 100644 --- a/.github/actions/setup-node/action.yml +++ b/.github/actions/setup-node/action.yml @@ -1,5 +1,6 @@ name: "Setup Node Project" description: "Sets up a Node.js project" + runs: using: "composite" steps: @@ -10,5 +11,5 @@ runs: cache: npm - name: Install dependencies - run: npm ci shell: bash + run: npm ci diff --git a/.github/actions/zip-system/action.yml b/.github/actions/zip-system/action.yml index ab61cdd..05de808 100644 --- a/.github/actions/zip-system/action.yml +++ b/.github/actions/zip-system/action.yml @@ -1,27 +1,18 @@ name: "Zip Project" description: "Zips the project for distribution" -inputs: - path: - description: "Path to output directory for zip file" - required: false - default: "" runs: using: "composite" steps: - name: Zip shell: bash run: | - if [[ -z "${{ inputs.path }}" ]]; then - OUTPUT_PATH="deltagreen.zip" - else - OUTPUT_PATH="${{ inputs.path }}/deltagreen.zip" - fi - zip -r "${OUTPUT_PATH}" . \ + zip -r deltagreen.zip . \ -x "packs/source/*" \ -x "build/*" \ -x "dist/*" \ -x ".*" \ -x "package.json" \ -x "package-lock.json" \ - -x "node_modules/*" + -x "node_modules/*" \ + -x "site/*" diff --git a/.github/workflows/publish-dev-release.yml b/.github/workflows/publish-dev-release.yml index b867b12..fbd3dd0 100644 --- a/.github/workflows/publish-dev-release.yml +++ b/.github/workflows/publish-dev-release.yml @@ -1,19 +1,15 @@ -name: Dev Build (GitHub Pages) - on: push: branches: - master + - hotfix/** workflow_dispatch: -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "pages" cancel-in-progress: false @@ -23,37 +19,73 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout + # ------------------------------- + # 1. Checkout SOURCE code + # ------------------------------- + - name: Checkout source repo uses: actions/checkout@v4 + # ------------------------------- + # 2. Create useful variables/output. + # ------------------------------- + - name: Compute branch folder + id: vars + shell: bash + run: | + BRANCH="${GITHUB_REF#refs/heads/}" + + if [[ "$BRANCH" == "master" ]]; then + TARGET="dev" + NON_TARGET="hotfix" + else + TARGET="hotfix" + NON_TARGET="dev" + fi + + echo "target=$TARGET" >> $GITHUB_OUTPUT + echo "non_target=$NON_TARGET" >> $GITHUB_OUTPUT + + # ------------------------------- + # 3. Build and Zip the system + # ------------------------------- - name: Build Packs uses: ./.github/actions/build-packs - name: Substitute Download Link uses: TomaszKandula/variable-substitution@v1.0.1 with: - files: "system.json" + files: system.json env: - version: dev - download: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/dev/deltagreen.zip - - - name: Copy system.json - run: mkdir -p dist/dev && cp system.json dist/dev/dev-system.json + version: ${{ steps.vars.outputs.target }} + download: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/${{ steps.vars.outputs.target }}/deltagreen.zip - name: Zip uses: ./.github/actions/zip-system - with: - path: "dist/dev" - # Deploy to GitHub Pages (see https://github.com/actions/starter-workflows/blob/main/pages/static.yml) + # ------------------------------- + # 4. Deploy to Github Pages + # ------------------------------- + - name: Create Site Structure + shell: bash + run: | + # Create site directories. + mkdir -p site/dev site/hotfix + + # Download files from non-target build. + URL="https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/${{ steps.vars.outputs.non_target }}" + wget -O site/${{ steps.vars.outputs.non_target }}/deltagreen.zip "$URL"/deltagreen.zip + wget -O site/${{ steps.vars.outputs.non_target }}/system.json "$URL"/system.json + + # Copy files from current build. + cp system.json deltagreen.zip site/${{ steps.vars.outputs.target }}/ + - name: Setup Pages uses: actions/configure-pages@v5 - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: - path: "dist" + path: site - - name: Deploy to GitHub Pages - id: deployment + - name: Deploy uses: actions/deploy-pages@v4 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 07298f9..acbf6db 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -222,7 +222,8 @@ It is difficult to create a one-size-fits-all procedure for testing, because eac - If you do not follow the above advice, be aware that opening your main world while you have an in-progress (non-release) version of the system installed **will almost certainly break things in a way that cannot be fixed**. To go back to the release version of the system, uninstall the test build, and reinstall from the in-Foundry system browser. - Update to the target build: - Development setup: `git checkout` the target branch (or `master` for merged work), then restart Foundry. - - No dev setup: Install or update the system from the dev manifest: + - No dev setup: Install or update the system from the dev manifest: + - **Note**: Testing a **hotfix** branch? Use the hotfix manifest instead: - Use a clean test world: - Create a fresh world - Note, this is a good practice, but is not always strictly necessary. If you run into anything weird, a completely fresh world is always a good rule-out test. From 7f241b78f7fa5d217101add6d413a4de73f6f2ce Mon Sep 17 00:00:00 2001 From: jalensailin Date: Fri, 12 Dec 2025 02:53:09 -0500 Subject: [PATCH 17/19] Add commit sha to testing version in manifest --- .github/workflows/publish-dev-release.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish-dev-release.yml b/.github/workflows/publish-dev-release.yml index fbd3dd0..e00daf7 100644 --- a/.github/workflows/publish-dev-release.yml +++ b/.github/workflows/publish-dev-release.yml @@ -45,6 +45,9 @@ jobs: echo "target=$TARGET" >> $GITHUB_OUTPUT echo "non_target=$NON_TARGET" >> $GITHUB_OUTPUT + - name: Set version + run: echo "SHORT_SHA=${GITHUB_SHA::7}" >> $GITHUB_ENV + # ------------------------------- # 3. Build and Zip the system # ------------------------------- @@ -56,7 +59,7 @@ jobs: with: files: system.json env: - version: ${{ steps.vars.outputs.target }} + version: ${{ steps.vars.outputs.target }}+${{ env.SHORT_SHA }} download: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/${{ steps.vars.outputs.target }}/deltagreen.zip - name: Zip From fec4b694ec8ef44aa98e4b21b56783d0dfe7d052 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Fri, 12 Dec 2025 13:44:05 -0500 Subject: [PATCH 18/19] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d92653d..ce0ff15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Release/Patch Notes -## Version 1.6.2 - 2025-xx-xx +## Version 1.6.2 - 2025-12-12 > Thanks to [delgar89](https://github.com/delgar89) for updating the Polish translation. From 174c45e77142e37014b98d1e642abeb4befbb300 Mon Sep 17 00:00:00 2001 From: jalensailin Date: Fri, 12 Dec 2025 14:08:50 -0500 Subject: [PATCH 19/19] Bump version number --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce0ff15..768e45f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Release/Patch Notes -## Version 1.6.2 - 2025-12-12 +## Version 1.6.3 - 2025-12-12 + +> Skips v1.6.2 due to a mistake in the release process. Oops. + +\--- > Thanks to [delgar89](https://github.com/delgar89) for updating the Polish translation.