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/CHANGELOG.md b/CHANGELOG.md index bbbded0..c93f1a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ ## Release/Patch Notes +### 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. +- 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 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 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/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 3481e56..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, @@ -14,7 +12,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, @@ -216,7 +214,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(); } @@ -310,9 +308,9 @@ 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 }); + this.actor.update({ system: updatedData }); }); html.find(".typed-skill-add").click((event) => { @@ -356,8 +354,10 @@ 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 specialTrainingArray = duplicate(this.actor.system.specialTraining); + const targetID = event.currentTarget.getAttribute("data-id"); + 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, @@ -502,7 +502,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) { @@ -708,7 +708,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(); @@ -730,7 +730,7 @@ export default class DeltaGreenActorSheet extends ActorSheet { updatedData.typedSkills = typedSkills; - this.actor.update({ data: updatedData }); + this.actor.update({ system: updatedData }); } _updateTypedSkill(targetSkill, newSkillLabel, newSkillGroup) { @@ -740,12 +740,12 @@ 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; - this.actor.update({ data: updatedData }); + this.actor.update({ system: updatedData }); } } @@ -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, @@ -831,17 +852,21 @@ 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, - id: randomID(), + id: foundry.utils.randomID(), }); this.actor.update({ "system.specialTraining": specialTrainingArray }); } _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, ); @@ -865,9 +890,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 = { @@ -982,7 +1010,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(); } @@ -999,11 +1027,11 @@ 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; - this.actor.update({ data: updatedData }); + this.actor.update({ system: updatedData }); } _onEquippedStatusChange(event) { @@ -1016,7 +1044,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); } @@ -1050,7 +1078,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( @@ -1063,7 +1091,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. @@ -1131,14 +1159,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 */ diff --git a/module/actor/actor.js b/module/actor/actor.js index 4240a6c..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} @@ -74,9 +72,13 @@ 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", @@ -223,10 +225,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; } @@ -271,7 +272,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/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 84d0207..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} @@ -7,7 +5,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, 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 c2b2161..80540cd 100644 --- a/module/other/stat-parser-macro.js +++ b/module/other/stat-parser-macro.js @@ -1,4 +1,21 @@ -/* 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; + 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) { @@ -53,7 +70,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 +107,23 @@ 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; + + // 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; + } } else { actorData.name = "Unknown"; } @@ -216,7 +248,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 +394,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 +408,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/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 67bff8a..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"; @@ -29,27 +28,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